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