[{"data":1,"prerenderedAt":1439},["ShallowReactive",2],{"navigation-landing-en":3,"navigation-nuxt-auto-en":180,"navigation-nuxt-protokit-en":338,"/docs/nuxt-auto/auto-api/pagination-en":444,"/docs/nuxt-auto/auto-api/pagination-surround-en":1434},[4,8,13,28,41,51,64,77,94,110,134,150,157,172],{"title":5,"path":6,"stem":7},"Overview","/docs/landing","0.docs/1.landing/001.index",{"title":9,"path":10,"stem":11,"badge":12},"Built-in Features","/docs/landing/built-in-features","0.docs/1.landing/002.built-in-features","New",{"title":14,"path":15,"stem":16,"children":17,"icon":27},"Content Foundation","/docs/landing/content","0.docs/1.landing/02.content/1.index",[18,19,23],{"title":5,"path":15,"stem":16},{"title":20,"path":21,"stem":22},"Details","/docs/landing/content/details","0.docs/1.landing/02.content/2.details",{"title":24,"path":25,"stem":26},"Technical","/docs/landing/content/technical","0.docs/1.landing/02.content/4.technical","i-heroicons-document-text",{"title":29,"path":30,"stem":31,"children":32,"icon":40},"Regional Content","/docs/landing/regional","0.docs/1.landing/03.regional/1.index",[33,34,37],{"title":5,"path":30,"stem":31},{"title":20,"path":35,"stem":36},"/docs/landing/regional/details","0.docs/1.landing/03.regional/2.details",{"title":24,"path":38,"stem":39},"/docs/landing/regional/technical","0.docs/1.landing/03.regional/4.technical","i-heroicons-globe-alt",{"title":42,"path":43,"stem":44,"children":45,"icon":50},"Multi-language","/docs/landing/multilang","0.docs/1.landing/04.multilang/1.index",[46,47],{"title":5,"path":43,"stem":44},{"title":20,"path":48,"stem":49},"/docs/landing/multilang/details","0.docs/1.landing/04.multilang/2.details","i-heroicons-language",{"title":52,"path":53,"stem":54,"children":55,"icon":63},"Blog","/docs/landing/blog","0.docs/1.landing/05.blog/1.index",[56,57,60],{"title":5,"path":53,"stem":54},{"title":20,"path":58,"stem":59},"/docs/landing/blog/details","0.docs/1.landing/05.blog/2.details",{"title":24,"path":61,"stem":62},"/docs/landing/blog/technical","0.docs/1.landing/05.blog/4.technical","i-heroicons-pencil-square",{"title":65,"path":66,"stem":67,"children":68,"icon":76},"Documentation","/docs/landing/docs","0.docs/1.landing/06.docs/1.index",[69,70,73],{"title":5,"path":66,"stem":67},{"title":20,"path":71,"stem":72},"/docs/landing/docs/details","0.docs/1.landing/06.docs/2.details",{"title":24,"path":74,"stem":75},"/docs/landing/docs/technical","0.docs/1.landing/06.docs/4.technical","i-heroicons-book-open",{"title":78,"path":79,"stem":80,"children":81,"icon":93},"Forms","/docs/landing/forms","0.docs/1.landing/07.forms/1.index",[82,83,86,90],{"title":5,"path":79,"stem":80},{"title":20,"path":84,"stem":85},"/docs/landing/forms/details","0.docs/1.landing/07.forms/2.details",{"title":87,"path":88,"stem":89},"Admin","/docs/landing/forms/admin","0.docs/1.landing/07.forms/3.admin",{"title":24,"path":91,"stem":92},"/docs/landing/forms/technical","0.docs/1.landing/07.forms/4.technical","i-heroicons-clipboard-document-list",{"title":95,"path":96,"stem":97,"children":98,"icon":109},"Email","/docs/landing/email","0.docs/1.landing/08.email/1.index",[99,100,103,106],{"title":5,"path":96,"stem":97},{"title":20,"path":101,"stem":102},"/docs/landing/email/details","0.docs/1.landing/08.email/2.details",{"title":87,"path":104,"stem":105},"/docs/landing/email/admin","0.docs/1.landing/08.email/3.admin",{"title":24,"path":107,"stem":108},"/docs/landing/email/technical","0.docs/1.landing/08.email/4.technical","i-heroicons-envelope",{"title":111,"path":112,"stem":113,"children":114,"icon":133},"Feedback Platform","/docs/landing/feedback","0.docs/1.landing/09.feedback/1.index",[115,116,119,122,125,129],{"title":5,"path":112,"stem":113},{"title":20,"path":117,"stem":118},"/docs/landing/feedback/details","0.docs/1.landing/09.feedback/2.details",{"title":87,"path":120,"stem":121},"/docs/landing/feedback/admin","0.docs/1.landing/09.feedback/3.admin",{"title":24,"path":123,"stem":124},"/docs/landing/feedback/technical","0.docs/1.landing/09.feedback/4.technical",{"title":126,"path":127,"stem":128},"Compare vs SaaS","/docs/landing/feedback/compare","0.docs/1.landing/09.feedback/5.compare",{"title":130,"path":131,"stem":132},"FAQ","/docs/landing/feedback/faq","0.docs/1.landing/09.feedback/6.faq","i-heroicons-chat-bubble-left-right",{"title":135,"path":136,"stem":137,"children":138,"icon":149},"Storage","/docs/landing/storage","0.docs/1.landing/10.storage/1.index",[139,140,143,146],{"title":5,"path":136,"stem":137},{"title":20,"path":141,"stem":142},"/docs/landing/storage/details","0.docs/1.landing/10.storage/2.details",{"title":87,"path":144,"stem":145},"/docs/landing/storage/admin","0.docs/1.landing/10.storage/3.admin",{"title":24,"path":147,"stem":148},"/docs/landing/storage/technical","0.docs/1.landing/10.storage/4.technical","i-heroicons-circle-stack",{"title":151,"path":152,"stem":153,"children":154,"icon":156},"Offline First","/docs/landing/offline-first","0.docs/1.landing/11.offline-first/1.index",[155],{"title":151,"path":152,"stem":153},"i-heroicons-users",{"title":158,"path":159,"stem":160,"children":161,"icon":156},"Yjs Sync","/docs/landing/yjs-sync","0.docs/1.landing/12.yjs-sync/1.index",[162,163,166,169],{"title":5,"path":159,"stem":160},{"title":20,"path":164,"stem":165},"/docs/landing/yjs-sync/details","0.docs/1.landing/12.yjs-sync/2.details",{"title":87,"path":167,"stem":168},"/docs/landing/yjs-sync/admin","0.docs/1.landing/12.yjs-sync/3.admin",{"title":24,"path":170,"stem":171},"/docs/landing/yjs-sync/technical","0.docs/1.landing/12.yjs-sync/4.technical",{"title":173,"path":174,"stem":175,"children":176,"badge":178,"icon":179},"Newsletter","/docs/landing/newsletter","0.docs/1.landing/13.newsletter/index",[177],{"title":173,"path":174,"stem":175,"badge":178},"Coming Soon","i-lucide-send",[181,184,202,298],{"title":5,"path":182,"stem":183},"/docs/nuxt-auto","0.docs/3.nuxt-auto/index",{"title":185,"path":186,"stem":187,"children":188,"page":201},"Getting Started","/docs/nuxt-auto/getting-started","0.docs/3.nuxt-auto/1.getting-started",[189,193,197],{"title":190,"path":191,"stem":192},"Introduction","/docs/nuxt-auto/getting-started/introduction","0.docs/3.nuxt-auto/1.getting-started/1.introduction",{"title":194,"path":195,"stem":196},"Installation","/docs/nuxt-auto/getting-started/installation","0.docs/3.nuxt-auto/1.getting-started/2.installation",{"title":198,"path":199,"stem":200},"Quick Start","/docs/nuxt-auto/getting-started/quick-start","0.docs/3.nuxt-auto/1.getting-started/3.quick-start",false,{"title":203,"path":204,"stem":205,"children":206,"page":201},"Auto API","/docs/nuxt-auto/auto-api","0.docs/3.nuxt-auto/2.auto-api",[207,210,214,218,222,226,230,234,238,242,246,250,254,258,262,266,270,274,278,282,286,290,294],{"title":185,"path":208,"stem":209},"/docs/nuxt-auto/auto-api/getting-started","0.docs/3.nuxt-auto/2.auto-api/1.getting-started",{"title":211,"path":212,"stem":213},"Aggregations","/docs/nuxt-auto/auto-api/aggregations","0.docs/3.nuxt-auto/2.auto-api/10.aggregations",{"title":215,"path":216,"stem":217},"Lifecycle Hooks","/docs/nuxt-auto/auto-api/lifecycle-hooks","0.docs/3.nuxt-auto/2.auto-api/11.lifecycle-hooks",{"title":219,"path":220,"stem":221},"Many-to-Many (M2M) Relationships","/docs/nuxt-auto/auto-api/m2m-relationships","0.docs/3.nuxt-auto/2.auto-api/12.m2m-relationships",{"title":223,"path":224,"stem":225},"Plugin System","/docs/nuxt-auto/auto-api/plugin-system","0.docs/3.nuxt-auto/2.auto-api/13.plugin-system",{"title":227,"path":228,"stem":229},"Database Adapters","/docs/nuxt-auto/auto-api/database-adapters","0.docs/3.nuxt-auto/2.auto-api/14.database-adapters",{"title":231,"path":232,"stem":233},"Custom Endpoints","/docs/nuxt-auto/auto-api/custom-endpoints","0.docs/3.nuxt-auto/2.auto-api/15.custom-endpoints",{"title":235,"path":236,"stem":237},"Multi-Tenancy","/docs/nuxt-auto/auto-api/multi-tenancy","0.docs/3.nuxt-auto/2.auto-api/16.multi-tenancy",{"title":239,"path":240,"stem":241},"Validation","/docs/nuxt-auto/auto-api/validation","0.docs/3.nuxt-auto/2.auto-api/2.validation",{"title":243,"path":244,"stem":245},"Rate Limiting","/docs/nuxt-auto/auto-api/rate-limiting","0.docs/3.nuxt-auto/2.auto-api/20.rate-limiting",{"title":247,"path":248,"stem":249},"Request Metadata Plugin","/docs/nuxt-auto/auto-api/request-metadata","0.docs/3.nuxt-auto/2.auto-api/21.request-metadata",{"title":251,"path":252,"stem":253},"Plugin Catalog","/docs/nuxt-auto/auto-api/plugin-catalog","0.docs/3.nuxt-auto/2.auto-api/22.plugin-catalog",{"title":255,"path":256,"stem":257},"Handler Overrides","/docs/nuxt-auto/auto-api/handler-overrides","0.docs/3.nuxt-auto/2.auto-api/3.handler-overrides",{"title":259,"path":260,"stem":261},"Cloudflare D1","/docs/nuxt-auto/auto-api/cloudflare-d1","0.docs/3.nuxt-auto/2.auto-api/30.cloudflare-d1",{"title":263,"path":264,"stem":265},"SQLite to D1 Migration","/docs/nuxt-auto/auto-api/migration-sqlite-d1","0.docs/3.nuxt-auto/2.auto-api/31.migration-sqlite-d1",{"title":267,"path":268,"stem":269},"Frontend Composables","/docs/nuxt-auto/auto-api/frontend-composables","0.docs/3.nuxt-auto/2.auto-api/32.frontend-composables",{"title":271,"path":272,"stem":273},"Testing","/docs/nuxt-auto/auto-api/testing","0.docs/3.nuxt-auto/2.auto-api/33.testing",{"title":275,"path":276,"stem":277},"Pagination","/docs/nuxt-auto/auto-api/pagination","0.docs/3.nuxt-auto/2.auto-api/4.pagination",{"title":279,"path":280,"stem":281},"Soft Deletes","/docs/nuxt-auto/auto-api/soft-deletes","0.docs/3.nuxt-auto/2.auto-api/5.soft-deletes",{"title":283,"path":284,"stem":285},"Authentication & Authorization","/docs/nuxt-auto/auto-api/authentication-authorization","0.docs/3.nuxt-auto/2.auto-api/6.authentication-authorization",{"title":287,"path":288,"stem":289},"Better-Auth Integration","/docs/nuxt-auto/auto-api/better-auth","0.docs/3.nuxt-auto/2.auto-api/7.better-auth",{"title":291,"path":292,"stem":293},"Nested Relations","/docs/nuxt-auto/auto-api/nested-relationships","0.docs/3.nuxt-auto/2.auto-api/8.nested-relationships",{"title":295,"path":296,"stem":297},"Bulk Operations","/docs/nuxt-auto/auto-api/bulk-operations","0.docs/3.nuxt-auto/2.auto-api/9.bulk-operations",{"title":299,"path":300,"stem":301,"children":302,"page":201},"Auto Admin","/docs/nuxt-auto/auto-admin","0.docs/3.nuxt-auto/3.auto-admin",[303,306,310,314,318,322,326,330,334],{"title":185,"path":304,"stem":305},"/docs/nuxt-auto/auto-admin/getting-started","0.docs/3.nuxt-auto/3.auto-admin/1.getting-started",{"title":307,"path":308,"stem":309},"Configuration & Theming","/docs/nuxt-auto/auto-admin/configuration-theming","0.docs/3.nuxt-auto/3.auto-admin/2.configuration-theming",{"title":311,"path":312,"stem":313},"Resource Configuration","/docs/nuxt-auto/auto-admin/resource-configuration","0.docs/3.nuxt-auto/3.auto-admin/3.resource-configuration",{"title":315,"path":316,"stem":317},"Form Fields & Widgets","/docs/nuxt-auto/auto-admin/form-fields-widgets","0.docs/3.nuxt-auto/3.auto-admin/4.form-fields-widgets",{"title":319,"path":320,"stem":321},"Permissions","/docs/nuxt-auto/auto-admin/permissions","0.docs/3.nuxt-auto/3.auto-admin/5.permissions",{"title":323,"path":324,"stem":325},"Custom Pages","/docs/nuxt-auto/auto-admin/custom-pages","0.docs/3.nuxt-auto/3.auto-admin/6.custom-pages",{"title":327,"path":328,"stem":329},"M2M Relationships","/docs/nuxt-auto/auto-admin/m2m-relationships","0.docs/3.nuxt-auto/3.auto-admin/7.m2m-relationships",{"title":331,"path":332,"stem":333},"Custom Actions","/docs/nuxt-auto/auto-admin/custom-actions","0.docs/3.nuxt-auto/3.auto-admin/8.custom-actions",{"title":335,"path":336,"stem":337},"Composables","/docs/nuxt-auto/auto-admin/composables","0.docs/3.nuxt-auto/3.auto-admin/9.composables",[339,342,355,382,400,415,425],{"title":5,"path":340,"stem":341},"/docs/nuxt-protokit","0.docs/4.nuxt-protokit/index",{"title":185,"path":343,"stem":344,"children":345,"icon":354},"/docs/nuxt-protokit/getting-started","0.docs/4.nuxt-protokit/1.getting-started/1.index",[346,347,351],{"title":190,"path":343,"stem":344},{"title":348,"path":349,"stem":350},"Core Concepts","/docs/nuxt-protokit/getting-started/concepts","0.docs/4.nuxt-protokit/1.getting-started/2.concepts",{"title":198,"path":352,"stem":353},"/docs/nuxt-protokit/getting-started/quick-start","0.docs/4.nuxt-protokit/1.getting-started/3.quick-start","i-lucide-rocket",{"title":356,"path":357,"stem":358,"children":359,"icon":381},"Schemas","/docs/nuxt-protokit/schemas","0.docs/4.nuxt-protokit/2.schemas/1.index",[360,361,365,369,373,377],{"title":5,"path":357,"stem":358},{"title":362,"path":363,"stem":364},"Field Types","/docs/nuxt-protokit/schemas/fields","0.docs/4.nuxt-protokit/2.schemas/2.fields",{"title":366,"path":367,"stem":368},"Collections","/docs/nuxt-protokit/schemas/collections","0.docs/4.nuxt-protokit/2.schemas/3.collections",{"title":370,"path":371,"stem":372},"Derived & Computed","/docs/nuxt-protokit/schemas/derived-computed","0.docs/4.nuxt-protokit/2.schemas/4.derived-computed",{"title":374,"path":375,"stem":376},"Connections","/docs/nuxt-protokit/schemas/connections","0.docs/4.nuxt-protokit/2.schemas/5.connections",{"title":378,"path":379,"stem":380},"Visualizations & Layouts","/docs/nuxt-protokit/schemas/visualizations","0.docs/4.nuxt-protokit/2.schemas/6.visualizations","i-lucide-file-code",{"title":335,"path":383,"stem":384,"children":385,"icon":399},"/docs/nuxt-protokit/composables","0.docs/4.nuxt-protokit/3.composables/1.index",[386,387,391,395],{"title":5,"path":383,"stem":384},{"title":388,"path":389,"stem":390},"usePrototype","/docs/nuxt-protokit/composables/use-prototype","0.docs/4.nuxt-protokit/3.composables/2.use-prototype",{"title":392,"path":393,"stem":394},"useProtoDoc","/docs/nuxt-protokit/composables/use-proto-doc","0.docs/4.nuxt-protokit/3.composables/3.use-proto-doc",{"title":396,"path":397,"stem":398},"useProtoCollection","/docs/nuxt-protokit/composables/use-proto-collection","0.docs/4.nuxt-protokit/3.composables/4.use-proto-collection","i-lucide-layers",{"title":401,"path":402,"stem":403,"children":404,"icon":414},"Components","/docs/nuxt-protokit/components","0.docs/4.nuxt-protokit/4.components/1.index",[405,406,410],{"title":5,"path":402,"stem":403},{"title":407,"path":408,"stem":409},"ProtoTool","/docs/nuxt-protokit/components/proto-tool","0.docs/4.nuxt-protokit/4.components/2.proto-tool",{"title":411,"path":412,"stem":413},"ProtoCrudModal","/docs/nuxt-protokit/components/proto-crud-modal","0.docs/4.nuxt-protokit/4.components/3.proto-crud-modal","i-lucide-puzzle",{"title":151,"path":416,"stem":417,"children":418,"icon":424},"/docs/nuxt-protokit/offline-first","0.docs/4.nuxt-protokit/5.offline-first/1.index",[419,420],{"title":151,"path":416,"stem":417},{"title":421,"path":422,"stem":423},"Corruption Recovery","/docs/nuxt-protokit/offline-first/corruption-recovery","0.docs/4.nuxt-protokit/5.offline-first/2.corruption-recovery","i-lucide-wifi-off",{"title":426,"icon":427,"path":428,"stem":429,"children":430},"Advanced","i-lucide-graduation-cap","/docs/nuxt-protokit/advanced","0.docs/4.nuxt-protokit/6.advanced/1.index",[431,432,436,440],{"title":5,"path":428,"stem":429},{"title":433,"path":434,"stem":435},"Multi-Tool Apps","/docs/nuxt-protokit/advanced/building-a-toolkit","0.docs/4.nuxt-protokit/6.advanced/1.building-a-toolkit",{"title":437,"path":438,"stem":439},"Schema Patterns","/docs/nuxt-protokit/advanced/custom-schema-patterns","0.docs/4.nuxt-protokit/6.advanced/2.custom-schema-patterns",{"title":441,"path":442,"stem":443},"Custom Fields & Viz","/docs/nuxt-protokit/advanced/extensibility","0.docs/4.nuxt-protokit/6.advanced/3.extensibility",{"page":445,"fallbackPage":1430},{"id":446,"title":275,"body":447,"description":1428,"extension":1429,"links":1430,"meta":1431,"navigation":1430,"ogImage":1430,"path":276,"seo":1432,"stem":277,"__hash__":1433},"nuxt_auto/0.docs/3.nuxt-auto/2.auto-api/4.pagination.md",{"type":448,"value":449,"toc":1416},"minimark",[450,454,462,467,470,524,530,644,648,651,687,691,785,790,817,821,828,879,883,886,998,1002,1006,1009,1152,1155,1379,1383,1412],[451,452,275],"h1",{"id":453},"pagination",[455,456,457,461],"p",{},[458,459,460],"code",{},"@websideproject/nuxt-auto-api"," supports both offset-based and cursor-based pagination.",[463,464,466],"h2",{"id":465},"offset-pagination","Offset Pagination",[455,468,469],{},"Traditional page-based pagination:",[471,472,477],"pre",{"className":473,"code":474,"language":475,"meta":476,"style":476},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","GET /api/users?page=2&limit=20\n","typescript","",[458,478,479],{"__ignoreMap":476},[480,481,484,488,492,495,497,500,503,506,509,513,516,519,521],"span",{"class":482,"line":483},"line",1,[480,485,487],{"class":486},"sTEyZ","GET ",[480,489,491],{"class":490},"sMK4o","/",[480,493,494],{"class":486},"api",[480,496,491],{"class":490},[480,498,499],{"class":486},"users",[480,501,502],{"class":490},"?",[480,504,505],{"class":486},"page",[480,507,508],{"class":490},"=",[480,510,512],{"class":511},"sbssI","2",[480,514,515],{"class":490},"&",[480,517,518],{"class":486},"limit",[480,520,508],{"class":490},[480,522,523],{"class":511},"20\n",[455,525,526],{},[527,528,529],"strong",{},"Response:",[471,531,535],{"className":532,"code":533,"language":534,"meta":476,"style":476},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"data\": [...],\n  \"meta\": {\n    \"page\": 2,\n    \"limit\": 20,\n    \"total\": 156\n  }\n}\n","json",[458,536,537,542,567,582,601,617,632,638],{"__ignoreMap":476},[480,538,539],{"class":482,"line":483},[480,540,541],{"class":490},"{\n",[480,543,545,548,552,555,558,561,564],{"class":482,"line":544},2,[480,546,547],{"class":490},"  \"",[480,549,551],{"class":550},"spNyl","data",[480,553,554],{"class":490},"\"",[480,556,557],{"class":490},":",[480,559,560],{"class":490}," [",[480,562,563],{"class":486},"...",[480,565,566],{"class":490},"],\n",[480,568,570,572,575,577,579],{"class":482,"line":569},3,[480,571,547],{"class":490},[480,573,574],{"class":550},"meta",[480,576,554],{"class":490},[480,578,557],{"class":490},[480,580,581],{"class":490}," {\n",[480,583,585,588,591,593,595,598],{"class":482,"line":584},4,[480,586,587],{"class":490},"    \"",[480,589,505],{"class":590},"sBMFI",[480,592,554],{"class":490},[480,594,557],{"class":490},[480,596,597],{"class":511}," 2",[480,599,600],{"class":490},",\n",[480,602,604,606,608,610,612,615],{"class":482,"line":603},5,[480,605,587],{"class":490},[480,607,518],{"class":590},[480,609,554],{"class":490},[480,611,557],{"class":490},[480,613,614],{"class":511}," 20",[480,616,600],{"class":490},[480,618,620,622,625,627,629],{"class":482,"line":619},6,[480,621,587],{"class":490},[480,623,624],{"class":590},"total",[480,626,554],{"class":490},[480,628,557],{"class":490},[480,630,631],{"class":511}," 156\n",[480,633,635],{"class":482,"line":634},7,[480,636,637],{"class":490},"  }\n",[480,639,641],{"class":482,"line":640},8,[480,642,643],{"class":490},"}\n",[463,645,647],{"id":646},"cursor-pagination","Cursor Pagination",[455,649,650],{},"For infinite scroll and better performance:",[471,652,654],{"className":473,"code":653,"language":475,"meta":476,"style":476},"GET /api/users?limit=20&cursor=eyJpZCI6MTIzfQ\n",[458,655,656],{"__ignoreMap":476},[480,657,658,660,662,664,666,668,670,672,674,677,679,682,684],{"class":482,"line":483},[480,659,487],{"class":486},[480,661,491],{"class":490},[480,663,494],{"class":486},[480,665,491],{"class":490},[480,667,499],{"class":486},[480,669,502],{"class":490},[480,671,518],{"class":486},[480,673,508],{"class":490},[480,675,676],{"class":511},"20",[480,678,515],{"class":490},[480,680,681],{"class":486},"cursor",[480,683,508],{"class":490},[480,685,686],{"class":486},"eyJpZCI6MTIzfQ\n",[455,688,689],{},[527,690,529],{},[471,692,694],{"className":532,"code":693,"language":534,"meta":476,"style":476},"{\n  \"data\": [...],\n  \"meta\": {\n    \"limit\": 20,\n    \"hasMore\": true,\n    \"nextCursor\": \"eyJpZCI6MTQzfQ\"\n  }\n}\n",[458,695,696,700,716,728,742,756,777,781],{"__ignoreMap":476},[480,697,698],{"class":482,"line":483},[480,699,541],{"class":490},[480,701,702,704,706,708,710,712,714],{"class":482,"line":544},[480,703,547],{"class":490},[480,705,551],{"class":550},[480,707,554],{"class":490},[480,709,557],{"class":490},[480,711,560],{"class":490},[480,713,563],{"class":486},[480,715,566],{"class":490},[480,717,718,720,722,724,726],{"class":482,"line":569},[480,719,547],{"class":490},[480,721,574],{"class":550},[480,723,554],{"class":490},[480,725,557],{"class":490},[480,727,581],{"class":490},[480,729,730,732,734,736,738,740],{"class":482,"line":584},[480,731,587],{"class":490},[480,733,518],{"class":590},[480,735,554],{"class":490},[480,737,557],{"class":490},[480,739,614],{"class":511},[480,741,600],{"class":490},[480,743,744,746,749,751,753],{"class":482,"line":603},[480,745,587],{"class":490},[480,747,748],{"class":590},"hasMore",[480,750,554],{"class":490},[480,752,557],{"class":490},[480,754,755],{"class":490}," true,\n",[480,757,758,760,763,765,767,770,774],{"class":482,"line":619},[480,759,587],{"class":490},[480,761,762],{"class":590},"nextCursor",[480,764,554],{"class":490},[480,766,557],{"class":490},[480,768,769],{"class":490}," \"",[480,771,773],{"class":772},"sfazB","eyJpZCI6MTQzfQ",[480,775,776],{"class":490},"\"\n",[480,778,779],{"class":482,"line":634},[480,780,637],{"class":490},[480,782,783],{"class":482,"line":640},[480,784,643],{"class":490},[786,787,789],"h3",{"id":788},"how-cursor-pagination-works","How Cursor Pagination Works",[791,792,793,800,805,811],"ol",{},[794,795,796,797],"li",{},"First request: ",[458,798,799],{},"GET /api/users?limit=20",[794,801,802,803],{},"Response includes ",[458,804,762],{},[794,806,807,808],{},"Next page: ",[458,809,810],{},"GET /api/users?limit=20&cursor=\u003CnextCursor>",[794,812,813,814,816],{},"Continue until ",[458,815,748],{}," is false",[786,818,820],{"id":819},"custom-cursor-fields","Custom Cursor Fields",[455,822,823,824,827],{},"By default, cursors use ",[458,825,826],{},"id",". For custom ordering:",[471,829,831],{"className":473,"code":830,"language":475,"meta":476,"style":476},"GET /api/users?limit=20&cursorFields=createdAt,id&sort=-createdAt\n",[458,832,833],{"__ignoreMap":476},[480,834,835,837,839,841,843,845,847,849,851,853,855,858,860,863,866,868,870,873,876],{"class":482,"line":483},[480,836,487],{"class":486},[480,838,491],{"class":490},[480,840,494],{"class":486},[480,842,491],{"class":490},[480,844,499],{"class":486},[480,846,502],{"class":490},[480,848,518],{"class":486},[480,850,508],{"class":490},[480,852,676],{"class":511},[480,854,515],{"class":490},[480,856,857],{"class":486},"cursorFields",[480,859,508],{"class":490},[480,861,862],{"class":486},"createdAt",[480,864,865],{"class":490},",",[480,867,826],{"class":486},[480,869,515],{"class":490},[480,871,872],{"class":486},"sort",[480,874,875],{"class":490},"=-",[480,877,878],{"class":486},"createdAt\n",[463,880,882],{"id":881},"configuration","Configuration",[455,884,885],{},"Set default pagination in config:",[471,887,889],{"className":473,"code":888,"language":475,"meta":476,"style":476},"// nuxt.config.ts\nexport default defineNuxtConfig({\n  autoApi: {\n    pagination: {\n      default: 'offset', // or 'cursor'\n      defaultLimit: 20,\n      maxLimit: 100,\n    },\n  },\n})\n",[458,890,891,897,915,925,934,955,966,978,983,989],{"__ignoreMap":476},[480,892,893],{"class":482,"line":483},[480,894,896],{"class":895},"sHwdD","// nuxt.config.ts\n",[480,898,899,903,906,910,913],{"class":482,"line":544},[480,900,902],{"class":901},"s7zQu","export",[480,904,905],{"class":901}," default",[480,907,909],{"class":908},"s2Zo4"," defineNuxtConfig",[480,911,912],{"class":486},"(",[480,914,541],{"class":490},[480,916,917,921,923],{"class":482,"line":569},[480,918,920],{"class":919},"swJcz","  autoApi",[480,922,557],{"class":490},[480,924,581],{"class":490},[480,926,927,930,932],{"class":482,"line":584},[480,928,929],{"class":919},"    pagination",[480,931,557],{"class":490},[480,933,581],{"class":490},[480,935,936,939,941,944,947,950,952],{"class":482,"line":603},[480,937,938],{"class":919},"      default",[480,940,557],{"class":490},[480,942,943],{"class":490}," '",[480,945,946],{"class":772},"offset",[480,948,949],{"class":490},"'",[480,951,865],{"class":490},[480,953,954],{"class":895}," // or 'cursor'\n",[480,956,957,960,962,964],{"class":482,"line":619},[480,958,959],{"class":919},"      defaultLimit",[480,961,557],{"class":490},[480,963,614],{"class":511},[480,965,600],{"class":490},[480,967,968,971,973,976],{"class":482,"line":634},[480,969,970],{"class":919},"      maxLimit",[480,972,557],{"class":490},[480,974,975],{"class":511}," 100",[480,977,600],{"class":490},[480,979,980],{"class":482,"line":640},[480,981,982],{"class":490},"    },\n",[480,984,986],{"class":482,"line":985},9,[480,987,988],{"class":490},"  },\n",[480,990,992,995],{"class":482,"line":991},10,[480,993,994],{"class":490},"}",[480,996,997],{"class":486},")\n",[463,999,1001],{"id":1000},"frontend-usage","Frontend Usage",[786,1003,1005],{"id":1004},"with-tanstack-query","With TanStack Query",[455,1007,1008],{},"Offset pagination:",[471,1010,1014],{"className":1011,"code":1012,"language":1013,"meta":476,"style":476},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nconst page = ref(1)\n\nconst { data: users } = useUsers({\n  query: {\n    page: page.value,\n    limit: 20,\n  }\n})\n\u003C/script>\n","vue",[458,1015,1016,1042,1062,1068,1095,1104,1122,1133,1137,1143],{"__ignoreMap":476},[480,1017,1018,1021,1024,1027,1030,1032,1034,1037,1039],{"class":482,"line":483},[480,1019,1020],{"class":490},"\u003C",[480,1022,1023],{"class":919},"script",[480,1025,1026],{"class":550}," setup",[480,1028,1029],{"class":550}," lang",[480,1031,508],{"class":490},[480,1033,554],{"class":490},[480,1035,1036],{"class":772},"ts",[480,1038,554],{"class":490},[480,1040,1041],{"class":490},">\n",[480,1043,1044,1047,1050,1052,1055,1057,1060],{"class":482,"line":544},[480,1045,1046],{"class":550},"const",[480,1048,1049],{"class":486}," page ",[480,1051,508],{"class":490},[480,1053,1054],{"class":908}," ref",[480,1056,912],{"class":486},[480,1058,1059],{"class":511},"1",[480,1061,997],{"class":486},[480,1063,1064],{"class":482,"line":569},[480,1065,1067],{"emptyLinePlaceholder":1066},true,"\n",[480,1069,1070,1072,1075,1078,1080,1083,1085,1088,1091,1093],{"class":482,"line":584},[480,1071,1046],{"class":550},[480,1073,1074],{"class":490}," {",[480,1076,1077],{"class":919}," data",[480,1079,557],{"class":490},[480,1081,1082],{"class":486}," users ",[480,1084,994],{"class":490},[480,1086,1087],{"class":490}," =",[480,1089,1090],{"class":908}," useUsers",[480,1092,912],{"class":486},[480,1094,541],{"class":490},[480,1096,1097,1100,1102],{"class":482,"line":603},[480,1098,1099],{"class":919},"  query",[480,1101,557],{"class":490},[480,1103,581],{"class":490},[480,1105,1106,1109,1111,1114,1117,1120],{"class":482,"line":619},[480,1107,1108],{"class":919},"    page",[480,1110,557],{"class":490},[480,1112,1113],{"class":486}," page",[480,1115,1116],{"class":490},".",[480,1118,1119],{"class":486},"value",[480,1121,600],{"class":490},[480,1123,1124,1127,1129,1131],{"class":482,"line":634},[480,1125,1126],{"class":919},"    limit",[480,1128,557],{"class":490},[480,1130,614],{"class":511},[480,1132,600],{"class":490},[480,1134,1135],{"class":482,"line":640},[480,1136,637],{"class":490},[480,1138,1139,1141],{"class":482,"line":985},[480,1140,994],{"class":490},[480,1142,997],{"class":486},[480,1144,1145,1148,1150],{"class":482,"line":991},[480,1146,1147],{"class":490},"\u003C/",[480,1149,1023],{"class":919},[480,1151,1041],{"class":490},[455,1153,1154],{},"Cursor pagination (infinite scroll):",[471,1156,1158],{"className":1011,"code":1157,"language":1013,"meta":476,"style":476},"\u003Cscript setup lang=\"ts\">\nimport { useInfiniteQuery } from '@tanstack/vue-query'\n\nconst { data, fetchNextPage, hasNextPage } = useInfiniteQuery({\n  queryKey: ['users'],\n  queryFn: ({ pageParam }) =>\n    $fetch('/api/users', {\n      query: { limit: 20, cursor: pageParam }\n    }),\n  getNextPageParam: (lastPage) => lastPage.meta.nextCursor,\n})\n\u003C/script>\n",[458,1159,1160,1180,1204,1208,1236,1256,1276,1294,1322,1332,1363,1370],{"__ignoreMap":476},[480,1161,1162,1164,1166,1168,1170,1172,1174,1176,1178],{"class":482,"line":483},[480,1163,1020],{"class":490},[480,1165,1023],{"class":919},[480,1167,1026],{"class":550},[480,1169,1029],{"class":550},[480,1171,508],{"class":490},[480,1173,554],{"class":490},[480,1175,1036],{"class":772},[480,1177,554],{"class":490},[480,1179,1041],{"class":490},[480,1181,1182,1185,1187,1190,1193,1196,1198,1201],{"class":482,"line":544},[480,1183,1184],{"class":901},"import",[480,1186,1074],{"class":490},[480,1188,1189],{"class":486}," useInfiniteQuery",[480,1191,1192],{"class":490}," }",[480,1194,1195],{"class":901}," from",[480,1197,943],{"class":490},[480,1199,1200],{"class":772},"@tanstack/vue-query",[480,1202,1203],{"class":490},"'\n",[480,1205,1206],{"class":482,"line":569},[480,1207,1067],{"emptyLinePlaceholder":1066},[480,1209,1210,1212,1214,1216,1218,1221,1223,1226,1228,1230,1232,1234],{"class":482,"line":584},[480,1211,1046],{"class":550},[480,1213,1074],{"class":490},[480,1215,1077],{"class":486},[480,1217,865],{"class":490},[480,1219,1220],{"class":486}," fetchNextPage",[480,1222,865],{"class":490},[480,1224,1225],{"class":486}," hasNextPage ",[480,1227,994],{"class":490},[480,1229,1087],{"class":490},[480,1231,1189],{"class":908},[480,1233,912],{"class":486},[480,1235,541],{"class":490},[480,1237,1238,1241,1243,1245,1247,1249,1251,1254],{"class":482,"line":603},[480,1239,1240],{"class":919},"  queryKey",[480,1242,557],{"class":490},[480,1244,560],{"class":486},[480,1246,949],{"class":490},[480,1248,499],{"class":772},[480,1250,949],{"class":490},[480,1252,1253],{"class":486},"]",[480,1255,600],{"class":490},[480,1257,1258,1261,1263,1266,1270,1273],{"class":482,"line":619},[480,1259,1260],{"class":908},"  queryFn",[480,1262,557],{"class":490},[480,1264,1265],{"class":490}," ({",[480,1267,1269],{"class":1268},"sHdIc"," pageParam",[480,1271,1272],{"class":490}," })",[480,1274,1275],{"class":550}," =>\n",[480,1277,1278,1281,1283,1285,1288,1290,1292],{"class":482,"line":634},[480,1279,1280],{"class":908},"    $fetch",[480,1282,912],{"class":486},[480,1284,949],{"class":490},[480,1286,1287],{"class":772},"/api/users",[480,1289,949],{"class":490},[480,1291,865],{"class":490},[480,1293,581],{"class":490},[480,1295,1296,1299,1301,1303,1306,1308,1310,1312,1315,1317,1320],{"class":482,"line":640},[480,1297,1298],{"class":919},"      query",[480,1300,557],{"class":490},[480,1302,1074],{"class":490},[480,1304,1305],{"class":919}," limit",[480,1307,557],{"class":490},[480,1309,614],{"class":511},[480,1311,865],{"class":490},[480,1313,1314],{"class":919}," cursor",[480,1316,557],{"class":490},[480,1318,1319],{"class":486}," pageParam ",[480,1321,643],{"class":490},[480,1323,1324,1327,1330],{"class":482,"line":985},[480,1325,1326],{"class":490},"    }",[480,1328,1329],{"class":486},")",[480,1331,600],{"class":490},[480,1333,1334,1337,1339,1342,1345,1347,1350,1353,1355,1357,1359,1361],{"class":482,"line":991},[480,1335,1336],{"class":908},"  getNextPageParam",[480,1338,557],{"class":490},[480,1340,1341],{"class":490}," (",[480,1343,1344],{"class":1268},"lastPage",[480,1346,1329],{"class":490},[480,1348,1349],{"class":550}," =>",[480,1351,1352],{"class":486}," lastPage",[480,1354,1116],{"class":490},[480,1356,574],{"class":486},[480,1358,1116],{"class":490},[480,1360,762],{"class":486},[480,1362,600],{"class":490},[480,1364,1366,1368],{"class":482,"line":1365},11,[480,1367,994],{"class":490},[480,1369,997],{"class":486},[480,1371,1373,1375,1377],{"class":482,"line":1372},12,[480,1374,1147],{"class":490},[480,1376,1023],{"class":919},[480,1378,1041],{"class":490},[463,1380,1382],{"id":1381},"best-practices","Best Practices",[1384,1385,1386,1392,1398,1404],"ul",{},[794,1387,1388,1391],{},[527,1389,1390],{},"Use offset"," for traditional UIs with page numbers",[794,1393,1394,1397],{},[527,1395,1396],{},"Use cursor"," for infinite scroll, mobile apps, or large datasets",[794,1399,1400,1403],{},[527,1401,1402],{},"Set maxLimit"," to prevent expensive queries",[794,1405,1406,1409,1410,1329],{},[527,1407,1408],{},"Index cursor fields"," for performance (e.g., ",[458,1411,862],{},[1413,1414,1415],"style",{},"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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":476,"searchDepth":544,"depth":544,"links":1417},[1418,1419,1423,1424,1427],{"id":465,"depth":544,"text":466},{"id":646,"depth":544,"text":647,"children":1420},[1421,1422],{"id":788,"depth":569,"text":789},{"id":819,"depth":569,"text":820},{"id":881,"depth":544,"text":882},{"id":1000,"depth":544,"text":1001,"children":1425},[1426],{"id":1004,"depth":569,"text":1005},{"id":1381,"depth":544,"text":1382},"@websideproject/nuxt-auto-api supports both offset-based and cursor-based pagination.","md",null,{},{"title":275,"description":1428},"RtPYD6e1XiBnYHNsdbmApQzd7Ssqb7MUJMYMeRp8Oro",[1435,1437],{"title":271,"path":272,"stem":273,"description":1436,"children":-1},"This guide covers how to write and run tests for Nuxt Auto API, including unit tests, integration tests, and E2E tests with both SQLite and Cloudflare D1.",{"title":279,"path":280,"stem":281,"description":1438,"children":-1},"Soft deletes mark records as deleted without removing them from the database.",1772977478120]