[{"data":1,"prerenderedAt":3421},["ShallowReactive",2],{"navigation-landing-en":3,"navigation-nuxt-auto-en":180,"navigation-nuxt-protokit-en":338,"/docs/nuxt-auto/auto-api/custom-endpoints-en":444,"/docs/nuxt-auto/auto-api/custom-endpoints-surround-en":3416},[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":3412},{"id":446,"title":231,"body":447,"description":3410,"extension":3411,"links":3412,"meta":3413,"navigation":3412,"ogImage":3412,"path":232,"seo":3414,"stem":233,"__hash__":3415},"nuxt_auto/0.docs/3.nuxt-auto/2.auto-api/15.custom-endpoints.md",{"type":448,"value":449,"toc":3392},"minimark",[450,454,463,468,473,478,485,938,942,948,1079,1083,1086,1572,1576,1579,1735,1739,1742,1903,1907,1993,1997,2000,2004,2007,2228,2232,2235,2476,2480,2483,2740,2744,2747,2928,2932,3081,3085,3094,3337,3340,3388],[451,452,231],"h1",{"id":453},"custom-endpoints",[455,456,457,458,462],"p",{},"@websideproject/nuxt-auto-api provides two approaches for building custom server endpoints that integrate with the auto-api pipeline: ",[459,460,461],"code",{},"createEndpoint()"," for full pipeline integration, and standalone helpers for lightweight use in regular Nitro handlers.",[464,465,467],"h2",{"id":466},"createendpoint","createEndpoint",[455,469,470,472],{},[459,471,461],{}," is the recommended way to build custom endpoints. It handles the full middleware pipeline, Zod validation, response formatting, and serialization.",[474,475,477],"h3",{"id":476},"resource-bound-endpoint","Resource-Bound Endpoint",[455,479,480,481,484],{},"When you specify a ",[459,482,483],{},"resource",", the endpoint uses the full auto-api pipeline (authorization, validation, middleware):",[486,487,492],"pre",{"className":488,"code":489,"language":490,"meta":491,"style":491},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","// server/api/users/[id]/stats.get.ts\nimport { createEndpoint } from '@websideproject/nuxt-auto-api/utils'\nimport { eq, count } from 'drizzle-orm'\nimport { users, posts } from '../../database/schema'\n\nexport default createEndpoint({\n  resource: 'users',\n  operation: 'get',\n\n  async handler(ctx) {\n    const userId = parseInt(ctx.params.id)\n    const [user, postCount] = await Promise.all([\n      ctx.db.query.users.findFirst({ where: eq(users.id, userId) }),\n      ctx.db.select({ count: count() }).from(posts).where(eq(posts.userId, userId)),\n    ])\n\n    return { ...user, postCount: postCount[0].count }\n  },\n})\n","typescript","",[459,493,494,503,534,561,587,594,612,633,650,655,677,710,746,805,876,882,887,925,931],{"__ignoreMap":491},[495,496,499],"span",{"class":497,"line":498},"line",1,[495,500,502],{"class":501},"sHwdD","// server/api/users/[id]/stats.get.ts\n",[495,504,506,510,514,518,521,524,527,531],{"class":497,"line":505},2,[495,507,509],{"class":508},"s7zQu","import",[495,511,513],{"class":512},"sMK4o"," {",[495,515,517],{"class":516},"sTEyZ"," createEndpoint",[495,519,520],{"class":512}," }",[495,522,523],{"class":508}," from",[495,525,526],{"class":512}," '",[495,528,530],{"class":529},"sfazB","@websideproject/nuxt-auto-api/utils",[495,532,533],{"class":512},"'\n",[495,535,537,539,541,544,547,550,552,554,556,559],{"class":497,"line":536},3,[495,538,509],{"class":508},[495,540,513],{"class":512},[495,542,543],{"class":516}," eq",[495,545,546],{"class":512},",",[495,548,549],{"class":516}," count",[495,551,520],{"class":512},[495,553,523],{"class":508},[495,555,526],{"class":512},[495,557,558],{"class":529},"drizzle-orm",[495,560,533],{"class":512},[495,562,564,566,568,571,573,576,578,580,582,585],{"class":497,"line":563},4,[495,565,509],{"class":508},[495,567,513],{"class":512},[495,569,570],{"class":516}," users",[495,572,546],{"class":512},[495,574,575],{"class":516}," posts",[495,577,520],{"class":512},[495,579,523],{"class":508},[495,581,526],{"class":512},[495,583,584],{"class":529},"../../database/schema",[495,586,533],{"class":512},[495,588,590],{"class":497,"line":589},5,[495,591,593],{"emptyLinePlaceholder":592},true,"\n",[495,595,597,600,603,606,609],{"class":497,"line":596},6,[495,598,599],{"class":508},"export",[495,601,602],{"class":508}," default",[495,604,517],{"class":605},"s2Zo4",[495,607,608],{"class":516},"(",[495,610,611],{"class":512},"{\n",[495,613,615,619,622,624,627,630],{"class":497,"line":614},7,[495,616,618],{"class":617},"swJcz","  resource",[495,620,621],{"class":512},":",[495,623,526],{"class":512},[495,625,626],{"class":529},"users",[495,628,629],{"class":512},"'",[495,631,632],{"class":512},",\n",[495,634,636,639,641,643,646,648],{"class":497,"line":635},8,[495,637,638],{"class":617},"  operation",[495,640,621],{"class":512},[495,642,526],{"class":512},[495,644,645],{"class":529},"get",[495,647,629],{"class":512},[495,649,632],{"class":512},[495,651,653],{"class":497,"line":652},9,[495,654,593],{"emptyLinePlaceholder":592},[495,656,658,662,665,667,671,674],{"class":497,"line":657},10,[495,659,661],{"class":660},"spNyl","  async",[495,663,664],{"class":617}," handler",[495,666,608],{"class":512},[495,668,670],{"class":669},"sHdIc","ctx",[495,672,673],{"class":512},")",[495,675,676],{"class":512}," {\n",[495,678,680,683,686,689,692,694,696,699,702,704,707],{"class":497,"line":679},11,[495,681,682],{"class":660},"    const",[495,684,685],{"class":516}," userId",[495,687,688],{"class":512}," =",[495,690,691],{"class":605}," parseInt",[495,693,608],{"class":617},[495,695,670],{"class":516},[495,697,698],{"class":512},".",[495,700,701],{"class":516},"params",[495,703,698],{"class":512},[495,705,706],{"class":516},"id",[495,708,709],{"class":617},")\n",[495,711,713,715,718,721,723,726,729,731,734,738,740,743],{"class":497,"line":712},12,[495,714,682],{"class":660},[495,716,717],{"class":512}," [",[495,719,720],{"class":516},"user",[495,722,546],{"class":512},[495,724,725],{"class":516}," postCount",[495,727,728],{"class":512},"]",[495,730,688],{"class":512},[495,732,733],{"class":508}," await",[495,735,737],{"class":736},"sBMFI"," Promise",[495,739,698],{"class":512},[495,741,742],{"class":605},"all",[495,744,745],{"class":617},"([\n",[495,747,749,752,754,757,759,762,764,766,768,771,773,776,779,781,783,785,787,789,791,793,795,798,801,803],{"class":497,"line":748},13,[495,750,751],{"class":516},"      ctx",[495,753,698],{"class":512},[495,755,756],{"class":516},"db",[495,758,698],{"class":512},[495,760,761],{"class":516},"query",[495,763,698],{"class":512},[495,765,626],{"class":516},[495,767,698],{"class":512},[495,769,770],{"class":605},"findFirst",[495,772,608],{"class":617},[495,774,775],{"class":512},"{",[495,777,778],{"class":617}," where",[495,780,621],{"class":512},[495,782,543],{"class":605},[495,784,608],{"class":617},[495,786,626],{"class":516},[495,788,698],{"class":512},[495,790,706],{"class":516},[495,792,546],{"class":512},[495,794,685],{"class":516},[495,796,797],{"class":617},") ",[495,799,800],{"class":512},"}",[495,802,673],{"class":617},[495,804,632],{"class":512},[495,806,808,810,812,814,816,819,821,823,825,827,829,832,834,836,838,841,843,846,848,850,853,855,858,860,862,864,867,869,871,874],{"class":497,"line":807},14,[495,809,751],{"class":516},[495,811,698],{"class":512},[495,813,756],{"class":516},[495,815,698],{"class":512},[495,817,818],{"class":605},"select",[495,820,608],{"class":617},[495,822,775],{"class":512},[495,824,549],{"class":617},[495,826,621],{"class":512},[495,828,549],{"class":605},[495,830,831],{"class":617},"() ",[495,833,800],{"class":512},[495,835,673],{"class":617},[495,837,698],{"class":512},[495,839,840],{"class":605},"from",[495,842,608],{"class":617},[495,844,845],{"class":516},"posts",[495,847,673],{"class":617},[495,849,698],{"class":512},[495,851,852],{"class":605},"where",[495,854,608],{"class":617},[495,856,857],{"class":605},"eq",[495,859,608],{"class":617},[495,861,845],{"class":516},[495,863,698],{"class":512},[495,865,866],{"class":516},"userId",[495,868,546],{"class":512},[495,870,685],{"class":516},[495,872,873],{"class":617},"))",[495,875,632],{"class":512},[495,877,879],{"class":497,"line":878},15,[495,880,881],{"class":617},"    ])\n",[495,883,885],{"class":497,"line":884},16,[495,886,593],{"emptyLinePlaceholder":592},[495,888,890,893,895,898,900,902,904,906,908,911,915,917,919,922],{"class":497,"line":889},17,[495,891,892],{"class":508},"    return",[495,894,513],{"class":512},[495,896,897],{"class":512}," ...",[495,899,720],{"class":516},[495,901,546],{"class":512},[495,903,725],{"class":617},[495,905,621],{"class":512},[495,907,725],{"class":516},[495,909,910],{"class":617},"[",[495,912,914],{"class":913},"sbssI","0",[495,916,728],{"class":617},[495,918,698],{"class":512},[495,920,921],{"class":516},"count",[495,923,924],{"class":512}," }\n",[495,926,928],{"class":497,"line":927},18,[495,929,930],{"class":512},"  },\n",[495,932,934,936],{"class":497,"line":933},19,[495,935,800],{"class":512},[495,937,709],{"class":516},[474,939,941],{"id":940},"standalone-endpoint","Standalone Endpoint",[455,943,944,945,947],{},"Without a ",[459,946,483],{},", the endpoint creates a lightweight context with database access and plugin middleware, but skips resource-specific authorization and validation:",[486,949,951],{"className":488,"code":950,"language":490,"meta":491,"style":491},"// server/api/health.get.ts\nimport { createEndpoint } from '@websideproject/nuxt-auto-api/utils'\n\nexport default createEndpoint({\n  async handler(ctx) {\n    return { status: 'ok', timestamp: new Date().toISOString() }\n  },\n  responseFormat: 'raw', // Don't wrap in { data }\n})\n",[459,952,953,958,976,980,992,1006,1050,1054,1073],{"__ignoreMap":491},[495,954,955],{"class":497,"line":498},[495,956,957],{"class":501},"// server/api/health.get.ts\n",[495,959,960,962,964,966,968,970,972,974],{"class":497,"line":505},[495,961,509],{"class":508},[495,963,513],{"class":512},[495,965,517],{"class":516},[495,967,520],{"class":512},[495,969,523],{"class":508},[495,971,526],{"class":512},[495,973,530],{"class":529},[495,975,533],{"class":512},[495,977,978],{"class":497,"line":536},[495,979,593],{"emptyLinePlaceholder":592},[495,981,982,984,986,988,990],{"class":497,"line":563},[495,983,599],{"class":508},[495,985,602],{"class":508},[495,987,517],{"class":605},[495,989,608],{"class":516},[495,991,611],{"class":512},[495,993,994,996,998,1000,1002,1004],{"class":497,"line":589},[495,995,661],{"class":660},[495,997,664],{"class":617},[495,999,608],{"class":512},[495,1001,670],{"class":669},[495,1003,673],{"class":512},[495,1005,676],{"class":512},[495,1007,1008,1010,1012,1015,1017,1019,1022,1024,1026,1029,1031,1034,1037,1040,1042,1045,1047],{"class":497,"line":596},[495,1009,892],{"class":508},[495,1011,513],{"class":512},[495,1013,1014],{"class":617}," status",[495,1016,621],{"class":512},[495,1018,526],{"class":512},[495,1020,1021],{"class":529},"ok",[495,1023,629],{"class":512},[495,1025,546],{"class":512},[495,1027,1028],{"class":617}," timestamp",[495,1030,621],{"class":512},[495,1032,1033],{"class":512}," new",[495,1035,1036],{"class":605}," Date",[495,1038,1039],{"class":617},"()",[495,1041,698],{"class":512},[495,1043,1044],{"class":605},"toISOString",[495,1046,831],{"class":617},[495,1048,1049],{"class":512},"}\n",[495,1051,1052],{"class":497,"line":614},[495,1053,930],{"class":512},[495,1055,1056,1059,1061,1063,1066,1068,1070],{"class":497,"line":635},[495,1057,1058],{"class":617},"  responseFormat",[495,1060,621],{"class":512},[495,1062,526],{"class":512},[495,1064,1065],{"class":529},"raw",[495,1067,629],{"class":512},[495,1069,546],{"class":512},[495,1071,1072],{"class":501}," // Don't wrap in { data }\n",[495,1074,1075,1077],{"class":497,"line":652},[495,1076,800],{"class":512},[495,1078,709],{"class":516},[474,1080,1082],{"id":1081},"body-and-query-validation","Body and Query Validation",[455,1084,1085],{},"Use Zod schemas for type-safe input validation:",[486,1087,1089],{"className":488,"code":1088,"language":490,"meta":491,"style":491},"// server/api/users/invite.post.ts\nimport { z } from 'zod'\nimport { createEndpoint } from '@websideproject/nuxt-auto-api/utils'\n\nexport default createEndpoint({\n  resource: 'users',\n  operation: 'create',\n\n  body: z.object({\n    email: z.string().email(),\n    role: z.enum(['user', 'editor', 'admin']).default('user'),\n  }),\n\n  query: z.object({\n    sendEmail: z.coerce.boolean().optional().default(true),\n  }),\n\n  async handler(ctx) {\n    // ctx.body and ctx.queryParams are typed\n    const { email, role } = ctx.body\n    const { sendEmail } = ctx.queryParams\n\n    const user = await ctx.db.insert(users).values({ email, role }).returning()\n\n    if (sendEmail) {\n      await sendInviteEmail(email)\n    }\n\n    return user[0]\n  },\n})\n",[459,1090,1091,1096,1116,1134,1138,1150,1164,1179,1183,1201,1226,1287,1296,1300,1317,1359,1367,1371,1385,1390,1417,1438,1443,1499,1504,1520,1535,1541,1546,1560,1565],{"__ignoreMap":491},[495,1092,1093],{"class":497,"line":498},[495,1094,1095],{"class":501},"// server/api/users/invite.post.ts\n",[495,1097,1098,1100,1102,1105,1107,1109,1111,1114],{"class":497,"line":505},[495,1099,509],{"class":508},[495,1101,513],{"class":512},[495,1103,1104],{"class":516}," z",[495,1106,520],{"class":512},[495,1108,523],{"class":508},[495,1110,526],{"class":512},[495,1112,1113],{"class":529},"zod",[495,1115,533],{"class":512},[495,1117,1118,1120,1122,1124,1126,1128,1130,1132],{"class":497,"line":536},[495,1119,509],{"class":508},[495,1121,513],{"class":512},[495,1123,517],{"class":516},[495,1125,520],{"class":512},[495,1127,523],{"class":508},[495,1129,526],{"class":512},[495,1131,530],{"class":529},[495,1133,533],{"class":512},[495,1135,1136],{"class":497,"line":563},[495,1137,593],{"emptyLinePlaceholder":592},[495,1139,1140,1142,1144,1146,1148],{"class":497,"line":589},[495,1141,599],{"class":508},[495,1143,602],{"class":508},[495,1145,517],{"class":605},[495,1147,608],{"class":516},[495,1149,611],{"class":512},[495,1151,1152,1154,1156,1158,1160,1162],{"class":497,"line":596},[495,1153,618],{"class":617},[495,1155,621],{"class":512},[495,1157,526],{"class":512},[495,1159,626],{"class":529},[495,1161,629],{"class":512},[495,1163,632],{"class":512},[495,1165,1166,1168,1170,1172,1175,1177],{"class":497,"line":614},[495,1167,638],{"class":617},[495,1169,621],{"class":512},[495,1171,526],{"class":512},[495,1173,1174],{"class":529},"create",[495,1176,629],{"class":512},[495,1178,632],{"class":512},[495,1180,1181],{"class":497,"line":635},[495,1182,593],{"emptyLinePlaceholder":592},[495,1184,1185,1188,1190,1192,1194,1197,1199],{"class":497,"line":652},[495,1186,1187],{"class":617},"  body",[495,1189,621],{"class":512},[495,1191,1104],{"class":516},[495,1193,698],{"class":512},[495,1195,1196],{"class":605},"object",[495,1198,608],{"class":516},[495,1200,611],{"class":512},[495,1202,1203,1206,1208,1210,1212,1215,1217,1219,1222,1224],{"class":497,"line":657},[495,1204,1205],{"class":617},"    email",[495,1207,621],{"class":512},[495,1209,1104],{"class":516},[495,1211,698],{"class":512},[495,1213,1214],{"class":605},"string",[495,1216,1039],{"class":516},[495,1218,698],{"class":512},[495,1220,1221],{"class":605},"email",[495,1223,1039],{"class":516},[495,1225,632],{"class":512},[495,1227,1228,1231,1233,1235,1237,1240,1243,1245,1247,1249,1251,1253,1256,1258,1260,1262,1265,1267,1270,1272,1275,1277,1279,1281,1283,1285],{"class":497,"line":679},[495,1229,1230],{"class":617},"    role",[495,1232,621],{"class":512},[495,1234,1104],{"class":516},[495,1236,698],{"class":512},[495,1238,1239],{"class":605},"enum",[495,1241,1242],{"class":516},"([",[495,1244,629],{"class":512},[495,1246,720],{"class":529},[495,1248,629],{"class":512},[495,1250,546],{"class":512},[495,1252,526],{"class":512},[495,1254,1255],{"class":529},"editor",[495,1257,629],{"class":512},[495,1259,546],{"class":512},[495,1261,526],{"class":512},[495,1263,1264],{"class":529},"admin",[495,1266,629],{"class":512},[495,1268,1269],{"class":516},"])",[495,1271,698],{"class":512},[495,1273,1274],{"class":605},"default",[495,1276,608],{"class":516},[495,1278,629],{"class":512},[495,1280,720],{"class":529},[495,1282,629],{"class":512},[495,1284,673],{"class":516},[495,1286,632],{"class":512},[495,1288,1289,1292,1294],{"class":497,"line":712},[495,1290,1291],{"class":512},"  }",[495,1293,673],{"class":516},[495,1295,632],{"class":512},[495,1297,1298],{"class":497,"line":748},[495,1299,593],{"emptyLinePlaceholder":592},[495,1301,1302,1305,1307,1309,1311,1313,1315],{"class":497,"line":807},[495,1303,1304],{"class":617},"  query",[495,1306,621],{"class":512},[495,1308,1104],{"class":516},[495,1310,698],{"class":512},[495,1312,1196],{"class":605},[495,1314,608],{"class":516},[495,1316,611],{"class":512},[495,1318,1319,1322,1324,1326,1328,1331,1333,1336,1338,1340,1343,1345,1347,1349,1351,1355,1357],{"class":497,"line":878},[495,1320,1321],{"class":617},"    sendEmail",[495,1323,621],{"class":512},[495,1325,1104],{"class":516},[495,1327,698],{"class":512},[495,1329,1330],{"class":516},"coerce",[495,1332,698],{"class":512},[495,1334,1335],{"class":605},"boolean",[495,1337,1039],{"class":516},[495,1339,698],{"class":512},[495,1341,1342],{"class":605},"optional",[495,1344,1039],{"class":516},[495,1346,698],{"class":512},[495,1348,1274],{"class":605},[495,1350,608],{"class":516},[495,1352,1354],{"class":1353},"sfNiH","true",[495,1356,673],{"class":516},[495,1358,632],{"class":512},[495,1360,1361,1363,1365],{"class":497,"line":884},[495,1362,1291],{"class":512},[495,1364,673],{"class":516},[495,1366,632],{"class":512},[495,1368,1369],{"class":497,"line":889},[495,1370,593],{"emptyLinePlaceholder":592},[495,1372,1373,1375,1377,1379,1381,1383],{"class":497,"line":927},[495,1374,661],{"class":660},[495,1376,664],{"class":617},[495,1378,608],{"class":512},[495,1380,670],{"class":669},[495,1382,673],{"class":512},[495,1384,676],{"class":512},[495,1386,1387],{"class":497,"line":933},[495,1388,1389],{"class":501},"    // ctx.body and ctx.queryParams are typed\n",[495,1391,1393,1395,1397,1400,1402,1405,1407,1409,1412,1414],{"class":497,"line":1392},20,[495,1394,682],{"class":660},[495,1396,513],{"class":512},[495,1398,1399],{"class":516}," email",[495,1401,546],{"class":512},[495,1403,1404],{"class":516}," role",[495,1406,520],{"class":512},[495,1408,688],{"class":512},[495,1410,1411],{"class":516}," ctx",[495,1413,698],{"class":512},[495,1415,1416],{"class":516},"body\n",[495,1418,1420,1422,1424,1427,1429,1431,1433,1435],{"class":497,"line":1419},21,[495,1421,682],{"class":660},[495,1423,513],{"class":512},[495,1425,1426],{"class":516}," sendEmail",[495,1428,520],{"class":512},[495,1430,688],{"class":512},[495,1432,1411],{"class":516},[495,1434,698],{"class":512},[495,1436,1437],{"class":516},"queryParams\n",[495,1439,1441],{"class":497,"line":1440},22,[495,1442,593],{"emptyLinePlaceholder":592},[495,1444,1446,1448,1451,1453,1455,1457,1459,1461,1463,1466,1468,1470,1472,1474,1477,1479,1481,1483,1485,1487,1489,1491,1493,1496],{"class":497,"line":1445},23,[495,1447,682],{"class":660},[495,1449,1450],{"class":516}," user",[495,1452,688],{"class":512},[495,1454,733],{"class":508},[495,1456,1411],{"class":516},[495,1458,698],{"class":512},[495,1460,756],{"class":516},[495,1462,698],{"class":512},[495,1464,1465],{"class":605},"insert",[495,1467,608],{"class":617},[495,1469,626],{"class":516},[495,1471,673],{"class":617},[495,1473,698],{"class":512},[495,1475,1476],{"class":605},"values",[495,1478,608],{"class":617},[495,1480,775],{"class":512},[495,1482,1399],{"class":516},[495,1484,546],{"class":512},[495,1486,1404],{"class":516},[495,1488,520],{"class":512},[495,1490,673],{"class":617},[495,1492,698],{"class":512},[495,1494,1495],{"class":605},"returning",[495,1497,1498],{"class":617},"()\n",[495,1500,1502],{"class":497,"line":1501},24,[495,1503,593],{"emptyLinePlaceholder":592},[495,1505,1507,1510,1513,1516,1518],{"class":497,"line":1506},25,[495,1508,1509],{"class":508},"    if",[495,1511,1512],{"class":617}," (",[495,1514,1515],{"class":516},"sendEmail",[495,1517,797],{"class":617},[495,1519,611],{"class":512},[495,1521,1523,1526,1529,1531,1533],{"class":497,"line":1522},26,[495,1524,1525],{"class":508},"      await",[495,1527,1528],{"class":605}," sendInviteEmail",[495,1530,608],{"class":617},[495,1532,1221],{"class":516},[495,1534,709],{"class":617},[495,1536,1538],{"class":497,"line":1537},27,[495,1539,1540],{"class":512},"    }\n",[495,1542,1544],{"class":497,"line":1543},28,[495,1545,593],{"emptyLinePlaceholder":592},[495,1547,1549,1551,1553,1555,1557],{"class":497,"line":1548},29,[495,1550,892],{"class":508},[495,1552,1450],{"class":516},[495,1554,910],{"class":617},[495,1556,914],{"class":913},[495,1558,1559],{"class":617},"]\n",[495,1561,1563],{"class":497,"line":1562},30,[495,1564,930],{"class":512},[495,1566,1568,1570],{"class":497,"line":1567},31,[495,1569,800],{"class":512},[495,1571,709],{"class":516},[474,1573,1575],{"id":1574},"response-format","Response Format",[455,1577,1578],{},"Control how the response is wrapped:",[486,1580,1582],{"className":488,"code":1581,"language":490,"meta":491,"style":491},"// 'auto' (default) - wraps in { data: result }\ncreateEndpoint({\n  responseFormat: 'auto',\n  handler: async () => ({ name: 'Alice' }),\n})\n// Returns: { data: { name: 'Alice' } }\n\n// 'raw' - passes through as-is\ncreateEndpoint({\n  responseFormat: 'raw',\n  handler: async () => ({ name: 'Alice' }),\n})\n// Returns: { name: 'Alice' }\n",[459,1583,1584,1589,1597,1612,1650,1656,1661,1665,1670,1678,1692,1724,1730],{"__ignoreMap":491},[495,1585,1586],{"class":497,"line":498},[495,1587,1588],{"class":501},"// 'auto' (default) - wraps in { data: result }\n",[495,1590,1591,1593,1595],{"class":497,"line":505},[495,1592,467],{"class":605},[495,1594,608],{"class":516},[495,1596,611],{"class":512},[495,1598,1599,1601,1603,1605,1608,1610],{"class":497,"line":536},[495,1600,1058],{"class":617},[495,1602,621],{"class":512},[495,1604,526],{"class":512},[495,1606,1607],{"class":529},"auto",[495,1609,629],{"class":512},[495,1611,632],{"class":512},[495,1613,1614,1617,1619,1622,1625,1628,1630,1632,1635,1637,1639,1642,1644,1646,1648],{"class":497,"line":563},[495,1615,1616],{"class":605},"  handler",[495,1618,621],{"class":512},[495,1620,1621],{"class":660}," async",[495,1623,1624],{"class":512}," ()",[495,1626,1627],{"class":660}," =>",[495,1629,1512],{"class":516},[495,1631,775],{"class":512},[495,1633,1634],{"class":617}," name",[495,1636,621],{"class":512},[495,1638,526],{"class":512},[495,1640,1641],{"class":529},"Alice",[495,1643,629],{"class":512},[495,1645,520],{"class":512},[495,1647,673],{"class":516},[495,1649,632],{"class":512},[495,1651,1652,1654],{"class":497,"line":589},[495,1653,800],{"class":512},[495,1655,709],{"class":516},[495,1657,1658],{"class":497,"line":596},[495,1659,1660],{"class":501},"// Returns: { data: { name: 'Alice' } }\n",[495,1662,1663],{"class":497,"line":614},[495,1664,593],{"emptyLinePlaceholder":592},[495,1666,1667],{"class":497,"line":635},[495,1668,1669],{"class":501},"// 'raw' - passes through as-is\n",[495,1671,1672,1674,1676],{"class":497,"line":652},[495,1673,467],{"class":605},[495,1675,608],{"class":516},[495,1677,611],{"class":512},[495,1679,1680,1682,1684,1686,1688,1690],{"class":497,"line":657},[495,1681,1058],{"class":617},[495,1683,621],{"class":512},[495,1685,526],{"class":512},[495,1687,1065],{"class":529},[495,1689,629],{"class":512},[495,1691,632],{"class":512},[495,1693,1694,1696,1698,1700,1702,1704,1706,1708,1710,1712,1714,1716,1718,1720,1722],{"class":497,"line":679},[495,1695,1616],{"class":605},[495,1697,621],{"class":512},[495,1699,1621],{"class":660},[495,1701,1624],{"class":512},[495,1703,1627],{"class":660},[495,1705,1512],{"class":516},[495,1707,775],{"class":512},[495,1709,1634],{"class":617},[495,1711,621],{"class":512},[495,1713,526],{"class":512},[495,1715,1641],{"class":529},[495,1717,629],{"class":512},[495,1719,520],{"class":512},[495,1721,673],{"class":516},[495,1723,632],{"class":512},[495,1725,1726,1728],{"class":497,"line":712},[495,1727,800],{"class":512},[495,1729,709],{"class":516},[495,1731,1732],{"class":497,"line":748},[495,1733,1734],{"class":501},"// Returns: { name: 'Alice' }\n",[474,1736,1738],{"id":1737},"transform","Transform",[455,1740,1741],{},"Transform the result before sending:",[486,1743,1745],{"className":488,"code":1744,"language":490,"meta":491,"style":491},"createEndpoint({\n  handler: async (ctx) => {\n    return await ctx.db.query.users.findMany()\n  },\n  transform: (users, ctx) => ({\n    users,\n    total: users.length,\n    requestedBy: ctx.user?.email,\n  }),\n  responseFormat: 'auto',\n})\n// Returns: { data: { users: [...], total: 5, requestedBy: 'admin@example.com' } }\n",[459,1746,1747,1755,1773,1800,1804,1827,1834,1850,1870,1878,1892,1898],{"__ignoreMap":491},[495,1748,1749,1751,1753],{"class":497,"line":498},[495,1750,467],{"class":605},[495,1752,608],{"class":516},[495,1754,611],{"class":512},[495,1756,1757,1759,1761,1763,1765,1767,1769,1771],{"class":497,"line":505},[495,1758,1616],{"class":605},[495,1760,621],{"class":512},[495,1762,1621],{"class":660},[495,1764,1512],{"class":512},[495,1766,670],{"class":669},[495,1768,673],{"class":512},[495,1770,1627],{"class":660},[495,1772,676],{"class":512},[495,1774,1775,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795,1798],{"class":497,"line":536},[495,1776,892],{"class":508},[495,1778,733],{"class":508},[495,1780,1411],{"class":516},[495,1782,698],{"class":512},[495,1784,756],{"class":516},[495,1786,698],{"class":512},[495,1788,761],{"class":516},[495,1790,698],{"class":512},[495,1792,626],{"class":516},[495,1794,698],{"class":512},[495,1796,1797],{"class":605},"findMany",[495,1799,1498],{"class":617},[495,1801,1802],{"class":497,"line":563},[495,1803,930],{"class":512},[495,1805,1806,1809,1811,1813,1815,1817,1819,1821,1823,1825],{"class":497,"line":589},[495,1807,1808],{"class":605},"  transform",[495,1810,621],{"class":512},[495,1812,1512],{"class":512},[495,1814,626],{"class":669},[495,1816,546],{"class":512},[495,1818,1411],{"class":669},[495,1820,673],{"class":512},[495,1822,1627],{"class":660},[495,1824,1512],{"class":516},[495,1826,611],{"class":512},[495,1828,1829,1832],{"class":497,"line":596},[495,1830,1831],{"class":516},"    users",[495,1833,632],{"class":512},[495,1835,1836,1839,1841,1843,1845,1848],{"class":497,"line":614},[495,1837,1838],{"class":617},"    total",[495,1840,621],{"class":512},[495,1842,570],{"class":516},[495,1844,698],{"class":512},[495,1846,1847],{"class":516},"length",[495,1849,632],{"class":512},[495,1851,1852,1855,1857,1859,1861,1863,1866,1868],{"class":497,"line":635},[495,1853,1854],{"class":617},"    requestedBy",[495,1856,621],{"class":512},[495,1858,1411],{"class":516},[495,1860,698],{"class":512},[495,1862,720],{"class":516},[495,1864,1865],{"class":512},"?.",[495,1867,1221],{"class":516},[495,1869,632],{"class":512},[495,1871,1872,1874,1876],{"class":497,"line":652},[495,1873,1291],{"class":512},[495,1875,673],{"class":516},[495,1877,632],{"class":512},[495,1879,1880,1882,1884,1886,1888,1890],{"class":497,"line":657},[495,1881,1058],{"class":617},[495,1883,621],{"class":512},[495,1885,526],{"class":512},[495,1887,1607],{"class":529},[495,1889,629],{"class":512},[495,1891,632],{"class":512},[495,1893,1894,1896],{"class":497,"line":679},[495,1895,800],{"class":512},[495,1897,709],{"class":516},[495,1899,1900],{"class":497,"line":712},[495,1901,1902],{"class":501},"// Returns: { data: { users: [...], total: 5, requestedBy: 'admin@example.com' } }\n",[474,1904,1906],{"id":1905},"skip-authorization-validation","Skip Authorization / Validation",[486,1908,1910],{"className":488,"code":1909,"language":490,"meta":491,"style":491},"createEndpoint({\n  resource: 'users',\n  skipAuthorization: true,  // Public endpoint\n  skipValidation: true,     // Custom validation in handler\n  handler: async (ctx) => { /* ... */ },\n})\n",[459,1911,1912,1920,1934,1949,1963,1987],{"__ignoreMap":491},[495,1913,1914,1916,1918],{"class":497,"line":498},[495,1915,467],{"class":605},[495,1917,608],{"class":516},[495,1919,611],{"class":512},[495,1921,1922,1924,1926,1928,1930,1932],{"class":497,"line":505},[495,1923,618],{"class":617},[495,1925,621],{"class":512},[495,1927,526],{"class":512},[495,1929,626],{"class":529},[495,1931,629],{"class":512},[495,1933,632],{"class":512},[495,1935,1936,1939,1941,1944,1946],{"class":497,"line":536},[495,1937,1938],{"class":617},"  skipAuthorization",[495,1940,621],{"class":512},[495,1942,1943],{"class":1353}," true",[495,1945,546],{"class":512},[495,1947,1948],{"class":501},"  // Public endpoint\n",[495,1950,1951,1954,1956,1958,1960],{"class":497,"line":563},[495,1952,1953],{"class":617},"  skipValidation",[495,1955,621],{"class":512},[495,1957,1943],{"class":1353},[495,1959,546],{"class":512},[495,1961,1962],{"class":501},"     // Custom validation in handler\n",[495,1964,1965,1967,1969,1971,1973,1975,1977,1979,1981,1984],{"class":497,"line":589},[495,1966,1616],{"class":605},[495,1968,621],{"class":512},[495,1970,1621],{"class":660},[495,1972,1512],{"class":512},[495,1974,670],{"class":669},[495,1976,673],{"class":512},[495,1978,1627],{"class":660},[495,1980,513],{"class":512},[495,1982,1983],{"class":501}," /* ... */",[495,1985,1986],{"class":512}," },\n",[495,1988,1989,1991],{"class":497,"line":596},[495,1990,800],{"class":512},[495,1992,709],{"class":516},[464,1994,1996],{"id":1995},"standalone-helpers","Standalone Helpers",[455,1998,1999],{},"For regular Nitro event handlers where you don't need the full pipeline, use the standalone helpers:",[474,2001,2003],{"id":2002},"getautoapicontext","getAutoApiContext",[455,2005,2006],{},"Get a lightweight HandlerContext with database and plugin context extenders:",[486,2008,2010],{"className":488,"code":2009,"language":490,"meta":491,"style":491},"// server/api/dashboard.get.ts\nexport default defineEventHandler(async (event) => {\n  const ctx = await getAutoApiContext(event)\n\n  const userCount = await ctx.db.select({ count: count() }).from(users)\n  const postCount = await ctx.db.select({ count: count() }).from(posts)\n\n  return respondWith({\n    users: userCount[0].count,\n    posts: postCount[0].count,\n  })\n})\n",[459,2011,2012,2017,2042,2062,2066,2113,2159,2163,2175,2195,2216,2222],{"__ignoreMap":491},[495,2013,2014],{"class":497,"line":498},[495,2015,2016],{"class":501},"// server/api/dashboard.get.ts\n",[495,2018,2019,2021,2023,2026,2028,2031,2033,2036,2038,2040],{"class":497,"line":505},[495,2020,599],{"class":508},[495,2022,602],{"class":508},[495,2024,2025],{"class":605}," defineEventHandler",[495,2027,608],{"class":516},[495,2029,2030],{"class":660},"async",[495,2032,1512],{"class":512},[495,2034,2035],{"class":669},"event",[495,2037,673],{"class":512},[495,2039,1627],{"class":660},[495,2041,676],{"class":512},[495,2043,2044,2047,2049,2051,2053,2056,2058,2060],{"class":497,"line":536},[495,2045,2046],{"class":660},"  const",[495,2048,1411],{"class":516},[495,2050,688],{"class":512},[495,2052,733],{"class":508},[495,2054,2055],{"class":605}," getAutoApiContext",[495,2057,608],{"class":617},[495,2059,2035],{"class":516},[495,2061,709],{"class":617},[495,2063,2064],{"class":497,"line":563},[495,2065,593],{"emptyLinePlaceholder":592},[495,2067,2068,2070,2073,2075,2077,2079,2081,2083,2085,2087,2089,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111],{"class":497,"line":589},[495,2069,2046],{"class":660},[495,2071,2072],{"class":516}," userCount",[495,2074,688],{"class":512},[495,2076,733],{"class":508},[495,2078,1411],{"class":516},[495,2080,698],{"class":512},[495,2082,756],{"class":516},[495,2084,698],{"class":512},[495,2086,818],{"class":605},[495,2088,608],{"class":617},[495,2090,775],{"class":512},[495,2092,549],{"class":617},[495,2094,621],{"class":512},[495,2096,549],{"class":605},[495,2098,831],{"class":617},[495,2100,800],{"class":512},[495,2102,673],{"class":617},[495,2104,698],{"class":512},[495,2106,840],{"class":605},[495,2108,608],{"class":617},[495,2110,626],{"class":516},[495,2112,709],{"class":617},[495,2114,2115,2117,2119,2121,2123,2125,2127,2129,2131,2133,2135,2137,2139,2141,2143,2145,2147,2149,2151,2153,2155,2157],{"class":497,"line":596},[495,2116,2046],{"class":660},[495,2118,725],{"class":516},[495,2120,688],{"class":512},[495,2122,733],{"class":508},[495,2124,1411],{"class":516},[495,2126,698],{"class":512},[495,2128,756],{"class":516},[495,2130,698],{"class":512},[495,2132,818],{"class":605},[495,2134,608],{"class":617},[495,2136,775],{"class":512},[495,2138,549],{"class":617},[495,2140,621],{"class":512},[495,2142,549],{"class":605},[495,2144,831],{"class":617},[495,2146,800],{"class":512},[495,2148,673],{"class":617},[495,2150,698],{"class":512},[495,2152,840],{"class":605},[495,2154,608],{"class":617},[495,2156,845],{"class":516},[495,2158,709],{"class":617},[495,2160,2161],{"class":497,"line":614},[495,2162,593],{"emptyLinePlaceholder":592},[495,2164,2165,2168,2171,2173],{"class":497,"line":635},[495,2166,2167],{"class":508},"  return",[495,2169,2170],{"class":605}," respondWith",[495,2172,608],{"class":617},[495,2174,611],{"class":512},[495,2176,2177,2179,2181,2183,2185,2187,2189,2191,2193],{"class":497,"line":652},[495,2178,1831],{"class":617},[495,2180,621],{"class":512},[495,2182,2072],{"class":516},[495,2184,910],{"class":617},[495,2186,914],{"class":913},[495,2188,728],{"class":617},[495,2190,698],{"class":512},[495,2192,921],{"class":516},[495,2194,632],{"class":512},[495,2196,2197,2200,2202,2204,2206,2208,2210,2212,2214],{"class":497,"line":657},[495,2198,2199],{"class":617},"    posts",[495,2201,621],{"class":512},[495,2203,725],{"class":516},[495,2205,910],{"class":617},[495,2207,914],{"class":913},[495,2209,728],{"class":617},[495,2211,698],{"class":512},[495,2213,921],{"class":516},[495,2215,632],{"class":512},[495,2217,2218,2220],{"class":497,"line":679},[495,2219,1291],{"class":512},[495,2221,709],{"class":617},[495,2223,2224,2226],{"class":497,"line":712},[495,2225,800],{"class":512},[495,2227,709],{"class":516},[474,2229,2231],{"id":2230},"validatebody-validatequery","validateBody / validateQuery",[455,2233,2234],{},"Validate request input with Zod and get typed results:",[486,2236,2238],{"className":488,"code":2237,"language":490,"meta":491,"style":491},"// server/api/contact.post.ts\nimport { z } from 'zod'\n\nconst ContactSchema = z.object({\n  name: z.string().min(1),\n  email: z.string().email(),\n  message: z.string().min(10),\n})\n\nexport default defineEventHandler(async (event) => {\n  const body = await validateBody(event, ContactSchema)\n  // body is typed as { name: string, email: string, message: string }\n\n  await sendContactEmail(body)\n  return respondWith({ sent: true })\n})\n",[459,2239,2240,2245,2263,2267,2288,2317,2340,2368,2374,2378,2400,2425,2430,2434,2449,2470],{"__ignoreMap":491},[495,2241,2242],{"class":497,"line":498},[495,2243,2244],{"class":501},"// server/api/contact.post.ts\n",[495,2246,2247,2249,2251,2253,2255,2257,2259,2261],{"class":497,"line":505},[495,2248,509],{"class":508},[495,2250,513],{"class":512},[495,2252,1104],{"class":516},[495,2254,520],{"class":512},[495,2256,523],{"class":508},[495,2258,526],{"class":512},[495,2260,1113],{"class":529},[495,2262,533],{"class":512},[495,2264,2265],{"class":497,"line":536},[495,2266,593],{"emptyLinePlaceholder":592},[495,2268,2269,2272,2275,2278,2280,2282,2284,2286],{"class":497,"line":563},[495,2270,2271],{"class":660},"const",[495,2273,2274],{"class":516}," ContactSchema ",[495,2276,2277],{"class":512},"=",[495,2279,1104],{"class":516},[495,2281,698],{"class":512},[495,2283,1196],{"class":605},[495,2285,608],{"class":516},[495,2287,611],{"class":512},[495,2289,2290,2293,2295,2297,2299,2301,2303,2305,2308,2310,2313,2315],{"class":497,"line":589},[495,2291,2292],{"class":617},"  name",[495,2294,621],{"class":512},[495,2296,1104],{"class":516},[495,2298,698],{"class":512},[495,2300,1214],{"class":605},[495,2302,1039],{"class":516},[495,2304,698],{"class":512},[495,2306,2307],{"class":605},"min",[495,2309,608],{"class":516},[495,2311,2312],{"class":913},"1",[495,2314,673],{"class":516},[495,2316,632],{"class":512},[495,2318,2319,2322,2324,2326,2328,2330,2332,2334,2336,2338],{"class":497,"line":596},[495,2320,2321],{"class":617},"  email",[495,2323,621],{"class":512},[495,2325,1104],{"class":516},[495,2327,698],{"class":512},[495,2329,1214],{"class":605},[495,2331,1039],{"class":516},[495,2333,698],{"class":512},[495,2335,1221],{"class":605},[495,2337,1039],{"class":516},[495,2339,632],{"class":512},[495,2341,2342,2345,2347,2349,2351,2353,2355,2357,2359,2361,2364,2366],{"class":497,"line":614},[495,2343,2344],{"class":617},"  message",[495,2346,621],{"class":512},[495,2348,1104],{"class":516},[495,2350,698],{"class":512},[495,2352,1214],{"class":605},[495,2354,1039],{"class":516},[495,2356,698],{"class":512},[495,2358,2307],{"class":605},[495,2360,608],{"class":516},[495,2362,2363],{"class":913},"10",[495,2365,673],{"class":516},[495,2367,632],{"class":512},[495,2369,2370,2372],{"class":497,"line":635},[495,2371,800],{"class":512},[495,2373,709],{"class":516},[495,2375,2376],{"class":497,"line":652},[495,2377,593],{"emptyLinePlaceholder":592},[495,2379,2380,2382,2384,2386,2388,2390,2392,2394,2396,2398],{"class":497,"line":657},[495,2381,599],{"class":508},[495,2383,602],{"class":508},[495,2385,2025],{"class":605},[495,2387,608],{"class":516},[495,2389,2030],{"class":660},[495,2391,1512],{"class":512},[495,2393,2035],{"class":669},[495,2395,673],{"class":512},[495,2397,1627],{"class":660},[495,2399,676],{"class":512},[495,2401,2402,2404,2407,2409,2411,2414,2416,2418,2420,2423],{"class":497,"line":679},[495,2403,2046],{"class":660},[495,2405,2406],{"class":516}," body",[495,2408,688],{"class":512},[495,2410,733],{"class":508},[495,2412,2413],{"class":605}," validateBody",[495,2415,608],{"class":617},[495,2417,2035],{"class":516},[495,2419,546],{"class":512},[495,2421,2422],{"class":516}," ContactSchema",[495,2424,709],{"class":617},[495,2426,2427],{"class":497,"line":712},[495,2428,2429],{"class":501},"  // body is typed as { name: string, email: string, message: string }\n",[495,2431,2432],{"class":497,"line":748},[495,2433,593],{"emptyLinePlaceholder":592},[495,2435,2436,2439,2442,2444,2447],{"class":497,"line":807},[495,2437,2438],{"class":508},"  await",[495,2440,2441],{"class":605}," sendContactEmail",[495,2443,608],{"class":617},[495,2445,2446],{"class":516},"body",[495,2448,709],{"class":617},[495,2450,2451,2453,2455,2457,2459,2462,2464,2466,2468],{"class":497,"line":878},[495,2452,2167],{"class":508},[495,2454,2170],{"class":605},[495,2456,608],{"class":617},[495,2458,775],{"class":512},[495,2460,2461],{"class":617}," sent",[495,2463,621],{"class":512},[495,2465,1943],{"class":1353},[495,2467,520],{"class":512},[495,2469,709],{"class":617},[495,2471,2472,2474],{"class":497,"line":884},[495,2473,800],{"class":512},[495,2475,709],{"class":516},[474,2477,2479],{"id":2478},"respondwith-respondwithlist-respondwitherror","respondWith / respondWithList / respondWithError",[455,2481,2482],{},"Standardized response formatting with serialization:",[486,2484,2486],{"className":488,"code":2485,"language":490,"meta":491,"style":491},"export default defineEventHandler(async (event) => {\n  const ctx = await getAutoApiContext(event)\n  const users = await ctx.db.select().from(usersTable)\n\n  // Single item\n  return respondWith(users[0])\n  // { data: { id: 1, name: 'Alice', createdAt: '2025-01-01T00:00:00.000Z' } }\n\n  // List with metadata\n  return respondWithList(users, { total: 100, page: 1, limit: 20 })\n  // { data: [...], meta: { total: 100, page: 1, limit: 20 } }\n\n  // Error\n  respondWithError(404, 'User not found')\n  respondWithError(422, 'Validation failed', { field: 'email', message: 'Already taken' })\n})\n",[459,2487,2488,2510,2528,2561,2565,2570,2587,2592,2596,2601,2648,2653,2657,2662,2683,2734],{"__ignoreMap":491},[495,2489,2490,2492,2494,2496,2498,2500,2502,2504,2506,2508],{"class":497,"line":498},[495,2491,599],{"class":508},[495,2493,602],{"class":508},[495,2495,2025],{"class":605},[495,2497,608],{"class":516},[495,2499,2030],{"class":660},[495,2501,1512],{"class":512},[495,2503,2035],{"class":669},[495,2505,673],{"class":512},[495,2507,1627],{"class":660},[495,2509,676],{"class":512},[495,2511,2512,2514,2516,2518,2520,2522,2524,2526],{"class":497,"line":505},[495,2513,2046],{"class":660},[495,2515,1411],{"class":516},[495,2517,688],{"class":512},[495,2519,733],{"class":508},[495,2521,2055],{"class":605},[495,2523,608],{"class":617},[495,2525,2035],{"class":516},[495,2527,709],{"class":617},[495,2529,2530,2532,2534,2536,2538,2540,2542,2544,2546,2548,2550,2552,2554,2556,2559],{"class":497,"line":536},[495,2531,2046],{"class":660},[495,2533,570],{"class":516},[495,2535,688],{"class":512},[495,2537,733],{"class":508},[495,2539,1411],{"class":516},[495,2541,698],{"class":512},[495,2543,756],{"class":516},[495,2545,698],{"class":512},[495,2547,818],{"class":605},[495,2549,1039],{"class":617},[495,2551,698],{"class":512},[495,2553,840],{"class":605},[495,2555,608],{"class":617},[495,2557,2558],{"class":516},"usersTable",[495,2560,709],{"class":617},[495,2562,2563],{"class":497,"line":563},[495,2564,593],{"emptyLinePlaceholder":592},[495,2566,2567],{"class":497,"line":589},[495,2568,2569],{"class":501},"  // Single item\n",[495,2571,2572,2574,2576,2578,2580,2582,2584],{"class":497,"line":596},[495,2573,2167],{"class":508},[495,2575,2170],{"class":605},[495,2577,608],{"class":617},[495,2579,626],{"class":516},[495,2581,910],{"class":617},[495,2583,914],{"class":913},[495,2585,2586],{"class":617},"])\n",[495,2588,2589],{"class":497,"line":614},[495,2590,2591],{"class":501},"  // { data: { id: 1, name: 'Alice', createdAt: '2025-01-01T00:00:00.000Z' } }\n",[495,2593,2594],{"class":497,"line":635},[495,2595,593],{"emptyLinePlaceholder":592},[495,2597,2598],{"class":497,"line":652},[495,2599,2600],{"class":501},"  // List with metadata\n",[495,2602,2603,2605,2608,2610,2612,2614,2616,2619,2621,2624,2626,2629,2631,2634,2636,2639,2641,2644,2646],{"class":497,"line":657},[495,2604,2167],{"class":508},[495,2606,2607],{"class":605}," respondWithList",[495,2609,608],{"class":617},[495,2611,626],{"class":516},[495,2613,546],{"class":512},[495,2615,513],{"class":512},[495,2617,2618],{"class":617}," total",[495,2620,621],{"class":512},[495,2622,2623],{"class":913}," 100",[495,2625,546],{"class":512},[495,2627,2628],{"class":617}," page",[495,2630,621],{"class":512},[495,2632,2633],{"class":913}," 1",[495,2635,546],{"class":512},[495,2637,2638],{"class":617}," limit",[495,2640,621],{"class":512},[495,2642,2643],{"class":913}," 20",[495,2645,520],{"class":512},[495,2647,709],{"class":617},[495,2649,2650],{"class":497,"line":679},[495,2651,2652],{"class":501},"  // { data: [...], meta: { total: 100, page: 1, limit: 20 } }\n",[495,2654,2655],{"class":497,"line":712},[495,2656,593],{"emptyLinePlaceholder":592},[495,2658,2659],{"class":497,"line":748},[495,2660,2661],{"class":501},"  // Error\n",[495,2663,2664,2667,2669,2672,2674,2676,2679,2681],{"class":497,"line":807},[495,2665,2666],{"class":605},"  respondWithError",[495,2668,608],{"class":617},[495,2670,2671],{"class":913},"404",[495,2673,546],{"class":512},[495,2675,526],{"class":512},[495,2677,2678],{"class":529},"User not found",[495,2680,629],{"class":512},[495,2682,709],{"class":617},[495,2684,2685,2687,2689,2692,2694,2696,2699,2701,2703,2705,2708,2710,2712,2714,2716,2718,2721,2723,2725,2728,2730,2732],{"class":497,"line":878},[495,2686,2666],{"class":605},[495,2688,608],{"class":617},[495,2690,2691],{"class":913},"422",[495,2693,546],{"class":512},[495,2695,526],{"class":512},[495,2697,2698],{"class":529},"Validation failed",[495,2700,629],{"class":512},[495,2702,546],{"class":512},[495,2704,513],{"class":512},[495,2706,2707],{"class":617}," field",[495,2709,621],{"class":512},[495,2711,526],{"class":512},[495,2713,1221],{"class":529},[495,2715,629],{"class":512},[495,2717,546],{"class":512},[495,2719,2720],{"class":617}," message",[495,2722,621],{"class":512},[495,2724,526],{"class":512},[495,2726,2727],{"class":529},"Already taken",[495,2729,629],{"class":512},[495,2731,520],{"class":512},[495,2733,709],{"class":617},[495,2735,2736,2738],{"class":497,"line":884},[495,2737,800],{"class":512},[495,2739,709],{"class":516},[474,2741,2743],{"id":2742},"getdb","getDb",[455,2745,2746],{},"Quick access to the database and adapter:",[486,2748,2750],{"className":488,"code":2749,"language":490,"meta":491,"style":491},"export default defineEventHandler(async (event) => {\n  const { db, adapter } = getDb()\n\n  // Use adapter for atomic operations\n  await adapter.atomic(async ({ tx }) => {\n    await tx.insert(orders).values(orderData)\n    await tx.insert(orderItems).values(itemsData)\n  })\n\n  return respondWith({ success: true })\n})\n",[459,2751,2752,2774,2797,2801,2806,2834,2863,2891,2897,2901,2922],{"__ignoreMap":491},[495,2753,2754,2756,2758,2760,2762,2764,2766,2768,2770,2772],{"class":497,"line":498},[495,2755,599],{"class":508},[495,2757,602],{"class":508},[495,2759,2025],{"class":605},[495,2761,608],{"class":516},[495,2763,2030],{"class":660},[495,2765,1512],{"class":512},[495,2767,2035],{"class":669},[495,2769,673],{"class":512},[495,2771,1627],{"class":660},[495,2773,676],{"class":512},[495,2775,2776,2778,2780,2783,2785,2788,2790,2792,2795],{"class":497,"line":505},[495,2777,2046],{"class":660},[495,2779,513],{"class":512},[495,2781,2782],{"class":516}," db",[495,2784,546],{"class":512},[495,2786,2787],{"class":516}," adapter",[495,2789,520],{"class":512},[495,2791,688],{"class":512},[495,2793,2794],{"class":605}," getDb",[495,2796,1498],{"class":617},[495,2798,2799],{"class":497,"line":536},[495,2800,593],{"emptyLinePlaceholder":592},[495,2802,2803],{"class":497,"line":563},[495,2804,2805],{"class":501},"  // Use adapter for atomic operations\n",[495,2807,2808,2810,2812,2814,2817,2819,2821,2824,2827,2830,2832],{"class":497,"line":589},[495,2809,2438],{"class":508},[495,2811,2787],{"class":516},[495,2813,698],{"class":512},[495,2815,2816],{"class":605},"atomic",[495,2818,608],{"class":617},[495,2820,2030],{"class":660},[495,2822,2823],{"class":512}," ({",[495,2825,2826],{"class":669}," tx",[495,2828,2829],{"class":512}," })",[495,2831,1627],{"class":660},[495,2833,676],{"class":512},[495,2835,2836,2839,2841,2843,2845,2847,2850,2852,2854,2856,2858,2861],{"class":497,"line":596},[495,2837,2838],{"class":508},"    await",[495,2840,2826],{"class":516},[495,2842,698],{"class":512},[495,2844,1465],{"class":605},[495,2846,608],{"class":617},[495,2848,2849],{"class":516},"orders",[495,2851,673],{"class":617},[495,2853,698],{"class":512},[495,2855,1476],{"class":605},[495,2857,608],{"class":617},[495,2859,2860],{"class":516},"orderData",[495,2862,709],{"class":617},[495,2864,2865,2867,2869,2871,2873,2875,2878,2880,2882,2884,2886,2889],{"class":497,"line":614},[495,2866,2838],{"class":508},[495,2868,2826],{"class":516},[495,2870,698],{"class":512},[495,2872,1465],{"class":605},[495,2874,608],{"class":617},[495,2876,2877],{"class":516},"orderItems",[495,2879,673],{"class":617},[495,2881,698],{"class":512},[495,2883,1476],{"class":605},[495,2885,608],{"class":617},[495,2887,2888],{"class":516},"itemsData",[495,2890,709],{"class":617},[495,2892,2893,2895],{"class":497,"line":635},[495,2894,1291],{"class":512},[495,2896,709],{"class":617},[495,2898,2899],{"class":497,"line":652},[495,2900,593],{"emptyLinePlaceholder":592},[495,2902,2903,2905,2907,2909,2911,2914,2916,2918,2920],{"class":497,"line":657},[495,2904,2167],{"class":508},[495,2906,2170],{"class":605},[495,2908,608],{"class":617},[495,2910,775],{"class":512},[495,2912,2913],{"class":617}," success",[495,2915,621],{"class":512},[495,2917,1943],{"class":1353},[495,2919,520],{"class":512},[495,2921,709],{"class":617},[495,2923,2924,2926],{"class":497,"line":679},[495,2925,800],{"class":512},[495,2927,709],{"class":516},[464,2929,2931],{"id":2930},"all-available-helpers","All Available Helpers",[2933,2934,2935,2948],"table",{},[2936,2937,2938],"thead",{},[2939,2940,2941,2945],"tr",{},[2942,2943,2944],"th",{},"Helper",[2942,2946,2947],{},"Description",[2949,2950,2951,2962,2972,2982,2992,3006,3018,3028,3041,3051,3061,3071],"tbody",{},[2939,2952,2953,2959],{},[2954,2955,2956],"td",{},[459,2957,2958],{},"createEndpoint(options)",[2954,2960,2961],{},"Full pipeline endpoint with Zod validation",[2939,2963,2964,2969],{},[2954,2965,2966],{},[459,2967,2968],{},"getAutoApiContext(event)",[2954,2970,2971],{},"Lightweight HandlerContext for standalone handlers",[2939,2973,2974,2979],{},[2954,2975,2976],{},[459,2977,2978],{},"validateBody(event, zodSchema)",[2954,2980,2981],{},"Validate request body, throw 400 on failure",[2939,2983,2984,2989],{},[2954,2985,2986],{},[459,2987,2988],{},"validateQuery(event, zodSchema)",[2954,2990,2991],{},"Validate query params, throw 400 on failure",[2939,2993,2994,2999],{},[2954,2995,2996],{},[459,2997,2998],{},"respondWith(data)",[2954,3000,3001,3002,3005],{},"Wrap in ",[459,3003,3004],{},"{ data }"," with serialization",[2939,3007,3008,3013],{},[2954,3009,3010],{},[459,3011,3012],{},"respondWithList(data, meta?)",[2954,3014,3001,3015,3005],{},[459,3016,3017],{},"{ data, meta }",[2939,3019,3020,3025],{},[2954,3021,3022],{},[459,3023,3024],{},"respondWithError(status, message, details?)",[2954,3026,3027],{},"Throw standardized error",[2939,3029,3030,3035],{},[2954,3031,3032],{},[459,3033,3034],{},"getDb()",[2954,3036,3037,3038],{},"Get ",[459,3039,3040],{},"{ db, adapter }",[2939,3042,3043,3048],{},[2954,3044,3045],{},[459,3046,3047],{},"getResourceSchema(name)",[2954,3049,3050],{},"Get table schema from registry",[2939,3052,3053,3058],{},[2954,3054,3055],{},[459,3056,3057],{},"getRegistry()",[2954,3059,3060],{},"Get full resource registry",[2939,3062,3063,3068],{},[2954,3064,3065],{},[459,3066,3067],{},"serialize(data)",[2954,3069,3070],{},"Serialize dates to ISO strings",[2939,3072,3073,3078],{},[2954,3074,3075],{},[459,3076,3077],{},"filterHidden(data, fields)",[2954,3079,3080],{},"Remove hidden fields from response",[464,3082,3084],{"id":3083},"migration-from-defineautoapihandler","Migration from defineAutoApiHandler",[455,3086,3087,3090,3091,3093],{},[459,3088,3089],{},"defineAutoApiHandler"," is deprecated in favor of ",[459,3092,467],{},". Here's how to migrate:",[486,3095,3097],{"className":488,"code":3096,"language":490,"meta":491,"style":491},"// Before (deprecated)\nexport default defineAutoApiHandler({\n  async execute(context) {\n    return { data: { message: 'hello' } }\n  },\n  transform(result, context) {\n    return { ...result, extra: true }\n  },\n  skipAuthorization: true,\n})\n\n// After\nexport default createEndpoint({\n  skipAuthorization: true,\n  async handler(ctx) {\n    return { message: 'hello' }\n  },\n  transform(result, ctx) {\n    return { ...result, extra: true }\n  },\n})\n",[459,3098,3099,3104,3117,3133,3161,3165,3183,3204,3208,3218,3224,3228,3233,3245,3255,3269,3287,3291,3307,3327,3331],{"__ignoreMap":491},[495,3100,3101],{"class":497,"line":498},[495,3102,3103],{"class":501},"// Before (deprecated)\n",[495,3105,3106,3108,3110,3113,3115],{"class":497,"line":505},[495,3107,599],{"class":508},[495,3109,602],{"class":508},[495,3111,3112],{"class":605}," defineAutoApiHandler",[495,3114,608],{"class":516},[495,3116,611],{"class":512},[495,3118,3119,3121,3124,3126,3129,3131],{"class":497,"line":536},[495,3120,661],{"class":660},[495,3122,3123],{"class":617}," execute",[495,3125,608],{"class":512},[495,3127,3128],{"class":669},"context",[495,3130,673],{"class":512},[495,3132,676],{"class":512},[495,3134,3135,3137,3139,3142,3144,3146,3148,3150,3152,3155,3157,3159],{"class":497,"line":563},[495,3136,892],{"class":508},[495,3138,513],{"class":512},[495,3140,3141],{"class":617}," data",[495,3143,621],{"class":512},[495,3145,513],{"class":512},[495,3147,2720],{"class":617},[495,3149,621],{"class":512},[495,3151,526],{"class":512},[495,3153,3154],{"class":529},"hello",[495,3156,629],{"class":512},[495,3158,520],{"class":512},[495,3160,924],{"class":512},[495,3162,3163],{"class":497,"line":589},[495,3164,930],{"class":512},[495,3166,3167,3169,3171,3174,3176,3179,3181],{"class":497,"line":596},[495,3168,1808],{"class":617},[495,3170,608],{"class":512},[495,3172,3173],{"class":669},"result",[495,3175,546],{"class":512},[495,3177,3178],{"class":669}," context",[495,3180,673],{"class":512},[495,3182,676],{"class":512},[495,3184,3185,3187,3189,3191,3193,3195,3198,3200,3202],{"class":497,"line":614},[495,3186,892],{"class":508},[495,3188,513],{"class":512},[495,3190,897],{"class":512},[495,3192,3173],{"class":516},[495,3194,546],{"class":512},[495,3196,3197],{"class":617}," extra",[495,3199,621],{"class":512},[495,3201,1943],{"class":1353},[495,3203,924],{"class":512},[495,3205,3206],{"class":497,"line":635},[495,3207,930],{"class":512},[495,3209,3210,3212,3214,3216],{"class":497,"line":652},[495,3211,1938],{"class":617},[495,3213,621],{"class":512},[495,3215,1943],{"class":1353},[495,3217,632],{"class":512},[495,3219,3220,3222],{"class":497,"line":657},[495,3221,800],{"class":512},[495,3223,709],{"class":516},[495,3225,3226],{"class":497,"line":679},[495,3227,593],{"emptyLinePlaceholder":592},[495,3229,3230],{"class":497,"line":712},[495,3231,3232],{"class":501},"// After\n",[495,3234,3235,3237,3239,3241,3243],{"class":497,"line":748},[495,3236,599],{"class":508},[495,3238,602],{"class":508},[495,3240,517],{"class":605},[495,3242,608],{"class":516},[495,3244,611],{"class":512},[495,3246,3247,3249,3251,3253],{"class":497,"line":807},[495,3248,1938],{"class":617},[495,3250,621],{"class":512},[495,3252,1943],{"class":1353},[495,3254,632],{"class":512},[495,3256,3257,3259,3261,3263,3265,3267],{"class":497,"line":878},[495,3258,661],{"class":660},[495,3260,664],{"class":617},[495,3262,608],{"class":512},[495,3264,670],{"class":669},[495,3266,673],{"class":512},[495,3268,676],{"class":512},[495,3270,3271,3273,3275,3277,3279,3281,3283,3285],{"class":497,"line":884},[495,3272,892],{"class":508},[495,3274,513],{"class":512},[495,3276,2720],{"class":617},[495,3278,621],{"class":512},[495,3280,526],{"class":512},[495,3282,3154],{"class":529},[495,3284,629],{"class":512},[495,3286,924],{"class":512},[495,3288,3289],{"class":497,"line":889},[495,3290,930],{"class":512},[495,3292,3293,3295,3297,3299,3301,3303,3305],{"class":497,"line":927},[495,3294,1808],{"class":617},[495,3296,608],{"class":512},[495,3298,3173],{"class":669},[495,3300,546],{"class":512},[495,3302,1411],{"class":669},[495,3304,673],{"class":512},[495,3306,676],{"class":512},[495,3308,3309,3311,3313,3315,3317,3319,3321,3323,3325],{"class":497,"line":933},[495,3310,892],{"class":508},[495,3312,513],{"class":512},[495,3314,897],{"class":512},[495,3316,3173],{"class":516},[495,3318,546],{"class":512},[495,3320,3197],{"class":617},[495,3322,621],{"class":512},[495,3324,1943],{"class":1353},[495,3326,924],{"class":512},[495,3328,3329],{"class":497,"line":1392},[495,3330,930],{"class":512},[495,3332,3333,3335],{"class":497,"line":1419},[495,3334,800],{"class":512},[495,3336,709],{"class":516},[455,3338,3339],{},"Key differences:",[3341,3342,3343,3353,3368,3376,3385],"ul",{},[3344,3345,3346,3349,3350],"li",{},[459,3347,3348],{},"execute"," is now ",[459,3351,3352],{},"handler",[3344,3354,3355,3357,3358,3361,3362,3364,3365],{},[459,3356,3352],{}," receives ",[459,3359,3360],{},"EndpointContext"," with typed ",[459,3363,2446],{}," and ",[459,3366,3367],{},"queryParams",[3344,3369,3370,3371,3364,3373,3375],{},"Zod schemas for ",[459,3372,2446],{},[459,3374,761],{}," validation",[3344,3377,3378,3381,3382,3384],{},[459,3379,3380],{},"responseFormat"," option ('auto' wraps in ",[459,3383,3004],{},", 'raw' passes through)",[3344,3386,3387],{},"Plugin middleware runs at all four stages",[3389,3390,3391],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":491,"searchDepth":505,"depth":505,"links":3393},[3394,3402,3408,3409],{"id":466,"depth":505,"text":467,"children":3395},[3396,3397,3398,3399,3400,3401],{"id":476,"depth":536,"text":477},{"id":940,"depth":536,"text":941},{"id":1081,"depth":536,"text":1082},{"id":1574,"depth":536,"text":1575},{"id":1737,"depth":536,"text":1738},{"id":1905,"depth":536,"text":1906},{"id":1995,"depth":505,"text":1996,"children":3403},[3404,3405,3406,3407],{"id":2002,"depth":536,"text":2003},{"id":2230,"depth":536,"text":2231},{"id":2478,"depth":536,"text":2479},{"id":2742,"depth":536,"text":2743},{"id":2930,"depth":505,"text":2931},{"id":3083,"depth":505,"text":3084},"@websideproject/nuxt-auto-api provides two approaches for building custom server endpoints that integrate with the auto-api pipeline: createEndpoint() for full pipeline integration, and standalone helpers for lightweight use in regular Nitro handlers.","md",null,{},{"title":231,"description":3410},"NYot19HodxpxVcfwhtFY1AVD951vGymnRlNPeGXqWvM",[3417,3419],{"title":227,"path":228,"stem":229,"description":3418,"children":-1},"@websideproject/nuxt-auto-api supports multiple database engines through a unified adapter layer. Each adapter normalizes engine-specific behavior like transactions, batch operations, and mutation count parsing.",{"title":235,"path":236,"stem":237,"description":3420,"children":-1},"This guide covers building multi-tenant SaaS applications with organization-level permissions, where users can have different roles across organizations.",1772977478037]