[{"data":1,"prerenderedAt":634},["ShallowReactive",2],{"navigation":3,"\u002Fguides\u002Fcursor-pagination":103,"\u002Fguides\u002Fcursor-pagination-surround":629},[4,9,31,87,98],{"title":5,"path":6,"stem":7,"icon":8},"Getting started","\u002Fgetting-started","01.getting-started","i-tabler-rocket",{"title":10,"icon":11,"path":12,"stem":13,"children":14,"page":30},"Concepts","i-tabler-code","\u002Fconcepts","02.concepts",[15,20,25],{"title":16,"path":17,"stem":18,"icon":19},"Architecture","\u002Fconcepts\u002Farchitecture","02.concepts\u002Farchitecture","i-tabler-sitemap",{"title":21,"path":22,"stem":23,"icon":24},"Metadata and registry","\u002Fconcepts\u002Fmetadata-and-registry","02.concepts\u002Fmetadata-and-registry","i-tabler-schema",{"title":26,"path":27,"stem":28,"icon":29},"Query Engine","\u002Fconcepts\u002Fquery-engine","02.concepts\u002Fquery-engine","i-tabler-engine",false,{"title":32,"icon":33,"path":34,"stem":35,"children":36,"page":30},"Guide","i-tabler-arrow-ramp-right","\u002Fguides","03.guides",[37,42,47,52,57,62,67,72,77,82],{"title":38,"path":39,"stem":40,"icon":41},"Audit Log","\u002Fguides\u002Faudit-log","03.guides\u002Faudit-log","i-tabler-history",{"title":43,"path":44,"stem":45,"icon":46},"Cursor pagination","\u002Fguides\u002Fcursor-pagination","03.guides\u002Fcursor-pagination","i-tabler-arrow-bar-to-down",{"title":48,"path":49,"stem":50,"icon":51},"Domain Events","\u002Fguides\u002Fdomain-events","03.guides\u002Fdomain-events","i-tabler-broadcast",{"title":53,"path":54,"stem":55,"icon":56},"Field visibility","\u002Fguides\u002Ffield-visibility","03.guides\u002Ffield-visibility","i-tabler-eye-off",{"title":58,"path":59,"stem":60,"icon":61},"Lifecycle hooks","\u002Fguides\u002Flifecycle-hooks","03.guides\u002Flifecycle-hooks","i-tabler-arrows-split",{"title":63,"path":64,"stem":65,"icon":66},"Production playground","\u002Fguides\u002Fplayground","03.guides\u002Fplayground","i-tabler-flask",{"title":68,"path":69,"stem":70,"icon":71},"Queries and filters","\u002Fguides\u002Fqueries-and-filters","03.guides\u002Fqueries-and-filters","i-tabler-filter",{"title":73,"path":74,"stem":75,"icon":76},"Relations","\u002Fguides\u002Frelations","03.guides\u002Frelations","i-tabler-link",{"title":78,"path":79,"stem":80,"icon":81},"Schema consistency","\u002Fguides\u002Fschema-consistency","03.guides\u002Fschema-consistency","i-tabler-database-search",{"title":83,"path":84,"stem":85,"icon":86},"Validation","\u002Fguides\u002Fvalidation","03.guides\u002Fvalidation","i-tabler-checkup-list",{"title":88,"icon":89,"path":90,"stem":91,"children":92,"page":30},"Adapters","i-tabler-plug","\u002Fadapters","04.adapters",[93],{"title":94,"path":95,"stem":96,"icon":97},"Drizzle adapter","\u002Fadapters\u002Fdrizzle","04.adapters\u002Fdrizzle","i-simple-icons-drizzle",{"title":99,"path":100,"stem":101,"icon":102},"Current limitations","\u002Fcurrent-limitations","05.current-limitations","i-tabler-circle-dashed-x",{"id":104,"title":43,"body":105,"description":622,"extension":623,"links":624,"meta":625,"navigation":626,"path":44,"seo":627,"stem":45,"__hash__":628},"docs\u002F03.guides\u002Fcursor-pagination.md",{"type":106,"value":107,"toc":616},"minimark",[108,116,121,329,411,415,530,533,537,547,553,557,600,612],[109,110,111,115],"p",{},[112,113,114],"code",{},"findPage()"," uses keyset pagination instead of increasing SQL offsets. It stays\nstable and efficient as tables grow.",[117,118,120],"h2",{"id":119},"first-page","First page",[122,123,128],"pre",{"className":124,"code":125,"language":126,"meta":127,"style":127},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const page = await engine.findPage('applications', {\n  first: 20,\n  where: {\n    conditions: [\n      { field: 'jobId', operator: 'eq', value: jobId }\n    ]\n  },\n  orderBy: [{ field: 'createdAt', direction: 'desc' }]\n})\n","ts","",[112,129,130,179,196,206,217,263,269,275,320],{"__ignoreMap":127},[131,132,135,139,143,147,151,154,157,161,164,167,171,173,176],"span",{"class":133,"line":134},"line",1,[131,136,138],{"class":137},"spNyl","const",[131,140,142],{"class":141},"sTEyZ"," page ",[131,144,146],{"class":145},"sMK4o","=",[131,148,150],{"class":149},"s7zQu"," await",[131,152,153],{"class":141}," engine",[131,155,156],{"class":145},".",[131,158,160],{"class":159},"s2Zo4","findPage",[131,162,163],{"class":141},"(",[131,165,166],{"class":145},"'",[131,168,170],{"class":169},"sfazB","applications",[131,172,166],{"class":145},[131,174,175],{"class":145},",",[131,177,178],{"class":145}," {\n",[131,180,182,186,189,193],{"class":133,"line":181},2,[131,183,185],{"class":184},"swJcz","  first",[131,187,188],{"class":145},":",[131,190,192],{"class":191},"sbssI"," 20",[131,194,195],{"class":145},",\n",[131,197,199,202,204],{"class":133,"line":198},3,[131,200,201],{"class":184},"  where",[131,203,188],{"class":145},[131,205,178],{"class":145},[131,207,209,212,214],{"class":133,"line":208},4,[131,210,211],{"class":184},"    conditions",[131,213,188],{"class":145},[131,215,216],{"class":141}," [\n",[131,218,220,223,226,228,231,234,236,238,241,243,245,248,250,252,255,257,260],{"class":133,"line":219},5,[131,221,222],{"class":145},"      {",[131,224,225],{"class":184}," field",[131,227,188],{"class":145},[131,229,230],{"class":145}," '",[131,232,233],{"class":169},"jobId",[131,235,166],{"class":145},[131,237,175],{"class":145},[131,239,240],{"class":184}," operator",[131,242,188],{"class":145},[131,244,230],{"class":145},[131,246,247],{"class":169},"eq",[131,249,166],{"class":145},[131,251,175],{"class":145},[131,253,254],{"class":184}," value",[131,256,188],{"class":145},[131,258,259],{"class":141}," jobId ",[131,261,262],{"class":145},"}\n",[131,264,266],{"class":133,"line":265},6,[131,267,268],{"class":141},"    ]\n",[131,270,272],{"class":133,"line":271},7,[131,273,274],{"class":145},"  },\n",[131,276,278,281,283,286,289,291,293,295,298,300,302,305,307,309,312,314,317],{"class":133,"line":277},8,[131,279,280],{"class":184},"  orderBy",[131,282,188],{"class":145},[131,284,285],{"class":141}," [",[131,287,288],{"class":145},"{",[131,290,225],{"class":184},[131,292,188],{"class":145},[131,294,230],{"class":145},[131,296,297],{"class":169},"createdAt",[131,299,166],{"class":145},[131,301,175],{"class":145},[131,303,304],{"class":184}," direction",[131,306,188],{"class":145},[131,308,230],{"class":145},[131,310,311],{"class":169},"desc",[131,313,166],{"class":145},[131,315,316],{"class":145}," }",[131,318,319],{"class":141},"]\n",[131,321,323,326],{"class":133,"line":322},9,[131,324,325],{"class":145},"}",[131,327,328],{"class":141},")\n",[122,330,332],{"className":124,"code":331,"language":126,"meta":127,"style":127},"interface CursorPage\u003CT> {\n  data: T[]\n  pageInfo: {\n    hasNextPage: boolean\n    endCursor: string | null\n  }\n}\n",[112,333,334,354,367,376,386,402,407],{"__ignoreMap":127},[131,335,336,339,343,346,349,352],{"class":133,"line":134},[131,337,338],{"class":137},"interface",[131,340,342],{"class":341},"sBMFI"," CursorPage",[131,344,345],{"class":145},"\u003C",[131,347,348],{"class":341},"T",[131,350,351],{"class":145},">",[131,353,178],{"class":145},[131,355,356,359,361,364],{"class":133,"line":181},[131,357,358],{"class":184},"  data",[131,360,188],{"class":145},[131,362,363],{"class":341}," T",[131,365,366],{"class":141},"[]\n",[131,368,369,372,374],{"class":133,"line":198},[131,370,371],{"class":184},"  pageInfo",[131,373,188],{"class":145},[131,375,178],{"class":145},[131,377,378,381,383],{"class":133,"line":208},[131,379,380],{"class":184},"    hasNextPage",[131,382,188],{"class":145},[131,384,385],{"class":341}," boolean\n",[131,387,388,391,393,396,399],{"class":133,"line":219},[131,389,390],{"class":184},"    endCursor",[131,392,188],{"class":145},[131,394,395],{"class":341}," string",[131,397,398],{"class":145}," |",[131,400,401],{"class":341}," null\n",[131,403,404],{"class":133,"line":265},[131,405,406],{"class":145},"  }\n",[131,408,409],{"class":133,"line":271},[131,410,262],{"class":145},[117,412,414],{"id":413},"next-page","Next page",[122,416,418],{"className":124,"code":417,"language":126,"meta":127,"style":127},"const next = await engine.findPage('applications', {\n  first: 20,\n  after: page.pageInfo.endCursor!,\n  where,\n  orderBy: [{ field: 'createdAt', direction: 'desc' }]\n})\n",[112,419,420,449,459,482,488,524],{"__ignoreMap":127},[131,421,422,424,427,429,431,433,435,437,439,441,443,445,447],{"class":133,"line":134},[131,423,138],{"class":137},[131,425,426],{"class":141}," next ",[131,428,146],{"class":145},[131,430,150],{"class":149},[131,432,153],{"class":141},[131,434,156],{"class":145},[131,436,160],{"class":159},[131,438,163],{"class":141},[131,440,166],{"class":145},[131,442,170],{"class":169},[131,444,166],{"class":145},[131,446,175],{"class":145},[131,448,178],{"class":145},[131,450,451,453,455,457],{"class":133,"line":181},[131,452,185],{"class":184},[131,454,188],{"class":145},[131,456,192],{"class":191},[131,458,195],{"class":145},[131,460,461,464,466,469,471,474,476,479],{"class":133,"line":198},[131,462,463],{"class":184},"  after",[131,465,188],{"class":145},[131,467,468],{"class":141}," page",[131,470,156],{"class":145},[131,472,473],{"class":141},"pageInfo",[131,475,156],{"class":145},[131,477,478],{"class":141},"endCursor",[131,480,481],{"class":145},"!,\n",[131,483,484,486],{"class":133,"line":208},[131,485,201],{"class":141},[131,487,195],{"class":145},[131,489,490,492,494,496,498,500,502,504,506,508,510,512,514,516,518,520,522],{"class":133,"line":219},[131,491,280],{"class":184},[131,493,188],{"class":145},[131,495,285],{"class":141},[131,497,288],{"class":145},[131,499,225],{"class":184},[131,501,188],{"class":145},[131,503,230],{"class":145},[131,505,297],{"class":169},[131,507,166],{"class":145},[131,509,175],{"class":145},[131,511,304],{"class":184},[131,513,188],{"class":145},[131,515,230],{"class":145},[131,517,311],{"class":169},[131,519,166],{"class":145},[131,521,316],{"class":145},[131,523,319],{"class":141},[131,525,526,528],{"class":133,"line":265},[131,527,325],{"class":145},[131,529,328],{"class":141},[109,531,532],{},"Use the same filter and ordering for every page. The cursor is opaque and\nURL-safe; applications should pass it back unchanged.",[117,534,536],{"id":535},"deterministic-ordering","Deterministic ordering",[109,538,539,540,543,544,546],{},"Persistence automatically appends missing primary-key fields to ",[112,541,542],{},"orderBy",".\nRows sharing the same ",[112,545,297],{}," therefore remain uniquely ordered.",[109,548,549,550,156],{},"The cursor contains the effective order signature. Reusing it with another sort\nraises ",[112,551,552],{},"InvalidCursorError",[117,554,556],{"id":555},"boundaries","Boundaries",[558,559,560,567,570,580,590],"ul",{},[561,562,563,566],"li",{},[112,564,565],{},"first"," defaults to 50 and must be between 1 and 100;",[561,568,569],{},"ascending and descending compound orders are supported;",[561,571,572,575,576,579],{},[112,573,574],{},"Date"," and ",[112,577,578],{},"bigint"," cursor values are encoded safely;",[561,581,582,585,586,589],{},[112,583,584],{},"where",", ",[112,587,588],{},"populate"," and field serialization remain available;",[561,591,592,593,596,597,156],{},"ordering values used to create a cursor must not be ",[112,594,595],{},"null"," or ",[112,598,599],{},"undefined",[601,602,605],"callout",{"color":603,"icon":81,"variant":604},"neutral","subtle",[109,606,607,608,611],{},"Create a database index that starts with frequently filtered and ordered fields.\nCursor pagination avoids ",[112,609,610],{},"OFFSET",", but it still depends on appropriate indexes.",[613,614,615],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":127,"searchDepth":134,"depth":181,"links":617},[618,619,620,621],{"id":119,"depth":181,"text":120},{"id":413,"depth":181,"text":414},{"id":535,"depth":181,"text":536},{"id":555,"depth":181,"text":556},"Page through changing datasets with stable keyset filters.","md",null,{},{"icon":46},{"title":43,"description":622},"P7E9tPIN3KUrrYi3p-bXPAZ4I5ZTkiShuTmkWIC5aQ8",[630,632],{"title":38,"path":39,"stem":40,"description":631,"icon":41,"children":-1},"Record transactional mutation history with actors and field changes.",{"title":48,"path":49,"stem":50,"description":633,"icon":51,"children":-1},"Persist typed business events atomically and publish them from an outbox.",1783784235117]