[{"data":1,"prerenderedAt":1609},["ShallowReactive",2],{"navigation-landing-en":3,"navigation-nuxt-auto-en":180,"navigation-nuxt-protokit-en":365,"\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fschema-presets-en":507,"\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fschema-presets-surround-en":1604},[4,8,13,28,41,51,64,77,94,110,134,150,157,172],{"title":5,"path":6,"stem":7},"Overview","\u002Fdocs\u002Flanding","0.docs\u002F1.landing\u002F001.index",{"title":9,"path":10,"stem":11,"badge":12},"Built-in Features","\u002Fdocs\u002Flanding\u002Fbuilt-in-features","0.docs\u002F1.landing\u002F002.built-in-features","New",{"title":14,"path":15,"stem":16,"children":17,"icon":27},"Content Foundation","\u002Fdocs\u002Flanding\u002Fcontent","0.docs\u002F1.landing\u002F02.content\u002F1.index",[18,19,23],{"title":5,"path":15,"stem":16},{"title":20,"path":21,"stem":22},"Details","\u002Fdocs\u002Flanding\u002Fcontent\u002Fdetails","0.docs\u002F1.landing\u002F02.content\u002F2.details",{"title":24,"path":25,"stem":26},"Technical","\u002Fdocs\u002Flanding\u002Fcontent\u002Ftechnical","0.docs\u002F1.landing\u002F02.content\u002F4.technical","i-heroicons-document-text",{"title":29,"path":30,"stem":31,"children":32,"icon":40},"Regional Content","\u002Fdocs\u002Flanding\u002Fregional","0.docs\u002F1.landing\u002F03.regional\u002F1.index",[33,34,37],{"title":5,"path":30,"stem":31},{"title":20,"path":35,"stem":36},"\u002Fdocs\u002Flanding\u002Fregional\u002Fdetails","0.docs\u002F1.landing\u002F03.regional\u002F2.details",{"title":24,"path":38,"stem":39},"\u002Fdocs\u002Flanding\u002Fregional\u002Ftechnical","0.docs\u002F1.landing\u002F03.regional\u002F4.technical","i-heroicons-globe-alt",{"title":42,"path":43,"stem":44,"children":45,"icon":50},"Multi-language","\u002Fdocs\u002Flanding\u002Fmultilang","0.docs\u002F1.landing\u002F04.multilang\u002F1.index",[46,47],{"title":5,"path":43,"stem":44},{"title":20,"path":48,"stem":49},"\u002Fdocs\u002Flanding\u002Fmultilang\u002Fdetails","0.docs\u002F1.landing\u002F04.multilang\u002F2.details","i-heroicons-language",{"title":52,"path":53,"stem":54,"children":55,"icon":63},"Blog","\u002Fdocs\u002Flanding\u002Fblog","0.docs\u002F1.landing\u002F05.blog\u002F1.index",[56,57,60],{"title":5,"path":53,"stem":54},{"title":20,"path":58,"stem":59},"\u002Fdocs\u002Flanding\u002Fblog\u002Fdetails","0.docs\u002F1.landing\u002F05.blog\u002F2.details",{"title":24,"path":61,"stem":62},"\u002Fdocs\u002Flanding\u002Fblog\u002Ftechnical","0.docs\u002F1.landing\u002F05.blog\u002F4.technical","i-heroicons-pencil-square",{"title":65,"path":66,"stem":67,"children":68,"icon":76},"Documentation","\u002Fdocs\u002Flanding\u002Fdocs","0.docs\u002F1.landing\u002F06.docs\u002F1.index",[69,70,73],{"title":5,"path":66,"stem":67},{"title":20,"path":71,"stem":72},"\u002Fdocs\u002Flanding\u002Fdocs\u002Fdetails","0.docs\u002F1.landing\u002F06.docs\u002F2.details",{"title":24,"path":74,"stem":75},"\u002Fdocs\u002Flanding\u002Fdocs\u002Ftechnical","0.docs\u002F1.landing\u002F06.docs\u002F4.technical","i-heroicons-book-open",{"title":78,"path":79,"stem":80,"children":81,"icon":93},"Forms","\u002Fdocs\u002Flanding\u002Fforms","0.docs\u002F1.landing\u002F07.forms\u002F1.index",[82,83,86,90],{"title":5,"path":79,"stem":80},{"title":20,"path":84,"stem":85},"\u002Fdocs\u002Flanding\u002Fforms\u002Fdetails","0.docs\u002F1.landing\u002F07.forms\u002F2.details",{"title":87,"path":88,"stem":89},"Admin","\u002Fdocs\u002Flanding\u002Fforms\u002Fadmin","0.docs\u002F1.landing\u002F07.forms\u002F3.admin",{"title":24,"path":91,"stem":92},"\u002Fdocs\u002Flanding\u002Fforms\u002Ftechnical","0.docs\u002F1.landing\u002F07.forms\u002F4.technical","i-heroicons-clipboard-document-list",{"title":95,"path":96,"stem":97,"children":98,"icon":109},"Email","\u002Fdocs\u002Flanding\u002Femail","0.docs\u002F1.landing\u002F08.email\u002F1.index",[99,100,103,106],{"title":5,"path":96,"stem":97},{"title":20,"path":101,"stem":102},"\u002Fdocs\u002Flanding\u002Femail\u002Fdetails","0.docs\u002F1.landing\u002F08.email\u002F2.details",{"title":87,"path":104,"stem":105},"\u002Fdocs\u002Flanding\u002Femail\u002Fadmin","0.docs\u002F1.landing\u002F08.email\u002F3.admin",{"title":24,"path":107,"stem":108},"\u002Fdocs\u002Flanding\u002Femail\u002Ftechnical","0.docs\u002F1.landing\u002F08.email\u002F4.technical","i-heroicons-envelope",{"title":111,"path":112,"stem":113,"children":114,"icon":133},"Feedback Platform","\u002Fdocs\u002Flanding\u002Ffeedback","0.docs\u002F1.landing\u002F09.feedback\u002F1.index",[115,116,119,122,125,129],{"title":5,"path":112,"stem":113},{"title":20,"path":117,"stem":118},"\u002Fdocs\u002Flanding\u002Ffeedback\u002Fdetails","0.docs\u002F1.landing\u002F09.feedback\u002F2.details",{"title":87,"path":120,"stem":121},"\u002Fdocs\u002Flanding\u002Ffeedback\u002Fadmin","0.docs\u002F1.landing\u002F09.feedback\u002F3.admin",{"title":24,"path":123,"stem":124},"\u002Fdocs\u002Flanding\u002Ffeedback\u002Ftechnical","0.docs\u002F1.landing\u002F09.feedback\u002F4.technical",{"title":126,"path":127,"stem":128},"Compare vs SaaS","\u002Fdocs\u002Flanding\u002Ffeedback\u002Fcompare","0.docs\u002F1.landing\u002F09.feedback\u002F5.compare",{"title":130,"path":131,"stem":132},"FAQ","\u002Fdocs\u002Flanding\u002Ffeedback\u002Ffaq","0.docs\u002F1.landing\u002F09.feedback\u002F6.faq","i-heroicons-chat-bubble-left-right",{"title":135,"path":136,"stem":137,"children":138,"icon":149},"Storage","\u002Fdocs\u002Flanding\u002Fstorage","0.docs\u002F1.landing\u002F10.storage\u002F1.index",[139,140,143,146],{"title":5,"path":136,"stem":137},{"title":20,"path":141,"stem":142},"\u002Fdocs\u002Flanding\u002Fstorage\u002Fdetails","0.docs\u002F1.landing\u002F10.storage\u002F2.details",{"title":87,"path":144,"stem":145},"\u002Fdocs\u002Flanding\u002Fstorage\u002Fadmin","0.docs\u002F1.landing\u002F10.storage\u002F3.admin",{"title":24,"path":147,"stem":148},"\u002Fdocs\u002Flanding\u002Fstorage\u002Ftechnical","0.docs\u002F1.landing\u002F10.storage\u002F4.technical","i-heroicons-circle-stack",{"title":151,"path":152,"stem":153,"children":154,"icon":156},"Offline First","\u002Fdocs\u002Flanding\u002Foffline-first","0.docs\u002F1.landing\u002F11.offline-first\u002F1.index",[155],{"title":151,"path":152,"stem":153},"i-heroicons-users",{"title":158,"path":159,"stem":160,"children":161,"icon":156},"Yjs Sync","\u002Fdocs\u002Flanding\u002Fyjs-sync","0.docs\u002F1.landing\u002F12.yjs-sync\u002F1.index",[162,163,166,169],{"title":5,"path":159,"stem":160},{"title":20,"path":164,"stem":165},"\u002Fdocs\u002Flanding\u002Fyjs-sync\u002Fdetails","0.docs\u002F1.landing\u002F12.yjs-sync\u002F2.details",{"title":87,"path":167,"stem":168},"\u002Fdocs\u002Flanding\u002Fyjs-sync\u002Fadmin","0.docs\u002F1.landing\u002F12.yjs-sync\u002F3.admin",{"title":24,"path":170,"stem":171},"\u002Fdocs\u002Flanding\u002Fyjs-sync\u002Ftechnical","0.docs\u002F1.landing\u002F12.yjs-sync\u002F4.technical",{"title":173,"path":174,"stem":175,"children":176,"badge":178,"icon":179},"Newsletter","\u002Fdocs\u002Flanding\u002Fnewsletter","0.docs\u002F1.landing\u002F13.newsletter\u002Findex",[177],{"title":173,"path":174,"stem":175,"badge":178},"Coming Soon","i-lucide-send",[181,184,202,318,358],{"title":5,"path":182,"stem":183},"\u002Fdocs\u002Fnuxt-auto","0.docs\u002F3.nuxt-auto\u002Findex",{"title":185,"path":186,"stem":187,"children":188,"page":201},"Getting Started","\u002Fdocs\u002Fnuxt-auto\u002Fgetting-started","0.docs\u002F3.nuxt-auto\u002F1.getting-started",[189,193,197],{"title":190,"path":191,"stem":192},"Introduction","\u002Fdocs\u002Fnuxt-auto\u002Fgetting-started\u002Fintroduction","0.docs\u002F3.nuxt-auto\u002F1.getting-started\u002F1.introduction",{"title":194,"path":195,"stem":196},"Installation","\u002Fdocs\u002Fnuxt-auto\u002Fgetting-started\u002Finstallation","0.docs\u002F3.nuxt-auto\u002F1.getting-started\u002F2.installation",{"title":198,"path":199,"stem":200},"Quick Start","\u002Fdocs\u002Fnuxt-auto\u002Fgetting-started\u002Fquick-start","0.docs\u002F3.nuxt-auto\u002F1.getting-started\u002F3.quick-start",false,{"title":203,"path":204,"stem":205,"children":206,"page":201},"Auto API","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api","0.docs\u002F3.nuxt-auto\u002F2.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,298,302,306,310,314],{"title":185,"path":208,"stem":209},"\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fgetting-started","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F1.getting-started",{"title":211,"path":212,"stem":213},"Aggregations","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Faggregations","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F10.aggregations",{"title":215,"path":216,"stem":217},"Lifecycle Hooks","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Flifecycle-hooks","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F11.lifecycle-hooks",{"title":219,"path":220,"stem":221},"Many-to-Many (M2M) Relationships","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fm2m-relationships","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F12.m2m-relationships",{"title":223,"path":224,"stem":225},"Plugin System","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fplugin-system","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F13.plugin-system",{"title":227,"path":228,"stem":229},"Database Adapters","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fdatabase-adapters","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F14.database-adapters",{"title":231,"path":232,"stem":233},"Custom Endpoints","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fcustom-endpoints","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F15.custom-endpoints",{"title":235,"path":236,"stem":237},"Multi-Tenancy","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fmulti-tenancy","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F16.multi-tenancy",{"title":239,"path":240,"stem":241},"Schema Presets (Cross-engine)","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fschema-presets","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F17.schema-presets",{"title":243,"path":244,"stem":245},"Permissions Cookbook","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fpermissions-cookbook","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F18.permissions-cookbook",{"title":247,"path":248,"stem":249},"Billing & Plan Gating","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fbilling","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F19.billing",{"title":251,"path":252,"stem":253},"Validation","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fvalidation","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F2.validation",{"title":255,"path":256,"stem":257},"Rate Limiting","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Frate-limiting","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F20.rate-limiting",{"title":259,"path":260,"stem":261},"Request Metadata Plugin","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Frequest-metadata","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F21.request-metadata",{"title":263,"path":264,"stem":265},"Plugin Catalog","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fplugin-catalog","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F22.plugin-catalog",{"title":267,"path":268,"stem":269},"Configuration Reference","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fconfiguration","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F23.configuration",{"title":271,"path":272,"stem":273},"Handler Overrides","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fhandler-overrides","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F3.handler-overrides",{"title":275,"path":276,"stem":277},"Cloudflare D1","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fcloudflare-d1","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F30.cloudflare-d1",{"title":279,"path":280,"stem":281},"SQLite to D1 Migration","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fmigration-sqlite-d1","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F31.migration-sqlite-d1",{"title":283,"path":284,"stem":285},"Frontend Composables","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Ffrontend-composables","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F32.frontend-composables",{"title":287,"path":288,"stem":289},"Testing","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Ftesting","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F33.testing",{"title":291,"path":292,"stem":293},"Pagination","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fpagination","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F4.pagination",{"title":295,"path":296,"stem":297},"Upgrading","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fupgrading","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F40.upgrading",{"title":299,"path":300,"stem":301},"Soft Deletes","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fsoft-deletes","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F5.soft-deletes",{"title":303,"path":304,"stem":305},"Authentication & Authorization","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fauthentication-authorization","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F6.authentication-authorization",{"title":307,"path":308,"stem":309},"Better-Auth Integration","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fbetter-auth","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F7.better-auth",{"title":311,"path":312,"stem":313},"Nested Relations","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fnested-relationships","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F8.nested-relationships",{"title":315,"path":316,"stem":317},"Bulk Operations","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fbulk-operations","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F9.bulk-operations",{"title":319,"path":320,"stem":321,"children":322,"page":201},"Auto Admin","\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin","0.docs\u002F3.nuxt-auto\u002F3.auto-admin",[323,326,330,334,338,342,346,350,354],{"title":185,"path":324,"stem":325},"\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin\u002Fgetting-started","0.docs\u002F3.nuxt-auto\u002F3.auto-admin\u002F1.getting-started",{"title":327,"path":328,"stem":329},"Configuration & Theming","\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin\u002Fconfiguration-theming","0.docs\u002F3.nuxt-auto\u002F3.auto-admin\u002F2.configuration-theming",{"title":331,"path":332,"stem":333},"Resource Configuration","\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin\u002Fresource-configuration","0.docs\u002F3.nuxt-auto\u002F3.auto-admin\u002F3.resource-configuration",{"title":335,"path":336,"stem":337},"Form Fields & Widgets","\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin\u002Fform-fields-widgets","0.docs\u002F3.nuxt-auto\u002F3.auto-admin\u002F4.form-fields-widgets",{"title":339,"path":340,"stem":341},"Permissions","\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin\u002Fpermissions","0.docs\u002F3.nuxt-auto\u002F3.auto-admin\u002F5.permissions",{"title":343,"path":344,"stem":345},"Custom Pages","\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin\u002Fcustom-pages","0.docs\u002F3.nuxt-auto\u002F3.auto-admin\u002F6.custom-pages",{"title":347,"path":348,"stem":349},"M2M Relationships","\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin\u002Fm2m-relationships","0.docs\u002F3.nuxt-auto\u002F3.auto-admin\u002F7.m2m-relationships",{"title":351,"path":352,"stem":353},"Custom Actions","\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin\u002Fcustom-actions","0.docs\u002F3.nuxt-auto\u002F3.auto-admin\u002F8.custom-actions",{"title":355,"path":356,"stem":357},"Composables","\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin\u002Fcomposables","0.docs\u002F3.nuxt-auto\u002F3.auto-admin\u002F9.composables",{"title":359,"path":360,"stem":361,"children":362,"icon":364},"Claude Code Skills","\u002Fdocs\u002Fnuxt-auto\u002Fclaude-code-skills","0.docs\u002F3.nuxt-auto\u002F4.claude-code-skills\u002F1.index",[363],{"title":5,"path":360,"stem":361},"i-lucide-bot",[366,369,382,409,427,450,472,502],{"title":5,"path":367,"stem":368},"\u002Fdocs\u002Fnuxt-protokit","0.docs\u002F4.nuxt-protokit\u002Findex",{"title":185,"path":370,"stem":371,"children":372,"icon":381},"\u002Fdocs\u002Fnuxt-protokit\u002Fgetting-started","0.docs\u002F4.nuxt-protokit\u002F1.getting-started\u002F1.index",[373,374,378],{"title":190,"path":370,"stem":371},{"title":375,"path":376,"stem":377},"Core Concepts","\u002Fdocs\u002Fnuxt-protokit\u002Fgetting-started\u002Fconcepts","0.docs\u002F4.nuxt-protokit\u002F1.getting-started\u002F2.concepts",{"title":198,"path":379,"stem":380},"\u002Fdocs\u002Fnuxt-protokit\u002Fgetting-started\u002Fquick-start","0.docs\u002F4.nuxt-protokit\u002F1.getting-started\u002F3.quick-start","i-lucide-rocket",{"title":383,"path":384,"stem":385,"children":386,"icon":408},"Schemas","\u002Fdocs\u002Fnuxt-protokit\u002Fschemas","0.docs\u002F4.nuxt-protokit\u002F2.schemas\u002F1.index",[387,388,392,396,400,404],{"title":5,"path":384,"stem":385},{"title":389,"path":390,"stem":391},"Field Types","\u002Fdocs\u002Fnuxt-protokit\u002Fschemas\u002Ffields","0.docs\u002F4.nuxt-protokit\u002F2.schemas\u002F2.fields",{"title":393,"path":394,"stem":395},"Collections","\u002Fdocs\u002Fnuxt-protokit\u002Fschemas\u002Fcollections","0.docs\u002F4.nuxt-protokit\u002F2.schemas\u002F3.collections",{"title":397,"path":398,"stem":399},"Derived & Computed","\u002Fdocs\u002Fnuxt-protokit\u002Fschemas\u002Fderived-computed","0.docs\u002F4.nuxt-protokit\u002F2.schemas\u002F4.derived-computed",{"title":401,"path":402,"stem":403},"Connections","\u002Fdocs\u002Fnuxt-protokit\u002Fschemas\u002Fconnections","0.docs\u002F4.nuxt-protokit\u002F2.schemas\u002F5.connections",{"title":405,"path":406,"stem":407},"Visualizations & Layouts","\u002Fdocs\u002Fnuxt-protokit\u002Fschemas\u002Fvisualizations","0.docs\u002F4.nuxt-protokit\u002F2.schemas\u002F6.visualizations","i-lucide-file-code",{"title":355,"path":410,"stem":411,"children":412,"icon":426},"\u002Fdocs\u002Fnuxt-protokit\u002Fcomposables","0.docs\u002F4.nuxt-protokit\u002F3.composables\u002F1.index",[413,414,418,422],{"title":5,"path":410,"stem":411},{"title":415,"path":416,"stem":417},"usePrototype","\u002Fdocs\u002Fnuxt-protokit\u002Fcomposables\u002Fuse-prototype","0.docs\u002F4.nuxt-protokit\u002F3.composables\u002F2.use-prototype",{"title":419,"path":420,"stem":421},"useProtoDoc","\u002Fdocs\u002Fnuxt-protokit\u002Fcomposables\u002Fuse-proto-doc","0.docs\u002F4.nuxt-protokit\u002F3.composables\u002F3.use-proto-doc",{"title":423,"path":424,"stem":425},"useProtoCollection","\u002Fdocs\u002Fnuxt-protokit\u002Fcomposables\u002Fuse-proto-collection","0.docs\u002F4.nuxt-protokit\u002F3.composables\u002F4.use-proto-collection","i-lucide-layers",{"title":428,"path":429,"stem":430,"children":431,"icon":449},"Components","\u002Fdocs\u002Fnuxt-protokit\u002Fcomponents","0.docs\u002F4.nuxt-protokit\u002F4.components\u002F1.index",[432,433,437,441,445],{"title":5,"path":429,"stem":430},{"title":434,"path":435,"stem":436},"ProtoTool","\u002Fdocs\u002Fnuxt-protokit\u002Fcomponents\u002Fproto-tool","0.docs\u002F4.nuxt-protokit\u002F4.components\u002F2.proto-tool",{"title":438,"path":439,"stem":440},"ProtoCrudModal","\u002Fdocs\u002Fnuxt-protokit\u002Fcomponents\u002Fproto-crud-modal","0.docs\u002F4.nuxt-protokit\u002F4.components\u002F3.proto-crud-modal",{"title":442,"path":443,"stem":444},"ProtoCalendar","\u002Fdocs\u002Fnuxt-protokit\u002Fcomponents\u002Fproto-calendar","0.docs\u002F4.nuxt-protokit\u002F4.components\u002F4.proto-calendar",{"title":446,"path":447,"stem":448},"ProtoItemPanel variants","\u002Fdocs\u002Fnuxt-protokit\u002Fcomponents\u002Fproto-item-panels","0.docs\u002F4.nuxt-protokit\u002F4.components\u002F5.proto-item-panels","i-lucide-puzzle",{"title":151,"path":451,"stem":452,"children":453,"icon":471},"\u002Fdocs\u002Fnuxt-protokit\u002Foffline-first","0.docs\u002F4.nuxt-protokit\u002F5.offline-first\u002F1.index",[454,455,459,463,467],{"title":151,"path":451,"stem":452},{"title":456,"path":457,"stem":458},"Corruption Recovery","\u002Fdocs\u002Fnuxt-protokit\u002Foffline-first\u002Fcorruption-recovery","0.docs\u002F4.nuxt-protokit\u002F5.offline-first\u002F2.corruption-recovery",{"title":460,"path":461,"stem":462},"Size & GC","\u002Fdocs\u002Fnuxt-protokit\u002Foffline-first\u002Fdocument-size-and-gc","0.docs\u002F4.nuxt-protokit\u002F5.offline-first\u002F3.document-size-and-gc",{"title":464,"path":465,"stem":466},"Multi-tenant Isolation","\u002Fdocs\u002Fnuxt-protokit\u002Foffline-first\u002Fmulti-tenant-isolation","0.docs\u002F4.nuxt-protokit\u002F5.offline-first\u002F4.multi-tenant-isolation",{"title":468,"path":469,"stem":470},"Encryption at Rest","\u002Fdocs\u002Fnuxt-protokit\u002Foffline-first\u002Fencryption","0.docs\u002F4.nuxt-protokit\u002F5.offline-first\u002F5.encryption","i-lucide-wifi-off",{"title":473,"icon":474,"path":475,"stem":476,"children":477},"Advanced","i-lucide-graduation-cap","\u002Fdocs\u002Fnuxt-protokit\u002Fadvanced","0.docs\u002F4.nuxt-protokit\u002F6.advanced\u002F1.index",[478,479,483,487,491,494,498],{"title":5,"path":475,"stem":476},{"title":480,"path":481,"stem":482},"Multi-Tool Apps","\u002Fdocs\u002Fnuxt-protokit\u002Fadvanced\u002Fbuilding-a-toolkit","0.docs\u002F4.nuxt-protokit\u002F6.advanced\u002F1.building-a-toolkit",{"title":484,"path":485,"stem":486},"Schema Patterns","\u002Fdocs\u002Fnuxt-protokit\u002Fadvanced\u002Fcustom-schema-patterns","0.docs\u002F4.nuxt-protokit\u002F6.advanced\u002F2.custom-schema-patterns",{"title":488,"path":489,"stem":490},"Custom Fields & Viz","\u002Fdocs\u002Fnuxt-protokit\u002Fadvanced\u002Fextensibility","0.docs\u002F4.nuxt-protokit\u002F6.advanced\u002F3.extensibility",{"title":339,"path":492,"stem":493},"\u002Fdocs\u002Fnuxt-protokit\u002Fadvanced\u002Fpermissions","0.docs\u002F4.nuxt-protokit\u002F6.advanced\u002F4.permissions",{"title":495,"path":496,"stem":497},"Business Logic Guards","\u002Fdocs\u002Fnuxt-protokit\u002Fadvanced\u002Fpermissions-business-logic","0.docs\u002F4.nuxt-protokit\u002F6.advanced\u002F5.permissions-business-logic",{"title":499,"path":500,"stem":501},"Headless Mode","\u002Fdocs\u002Fnuxt-protokit\u002Fadvanced\u002Fheadless-mode","0.docs\u002F4.nuxt-protokit\u002F6.advanced\u002F6.headless-mode",{"title":359,"path":503,"stem":504,"children":505,"icon":364},"\u002Fdocs\u002Fnuxt-protokit\u002Fclaude-code-skills","0.docs\u002F4.nuxt-protokit\u002F7.claude-code-skills\u002F1.index",[506],{"title":5,"path":503,"stem":504},{"page":508,"fallbackPage":1600},{"id":509,"title":239,"body":510,"description":1598,"extension":1599,"links":1600,"meta":1601,"navigation":1600,"ogImage":1600,"path":240,"seo":1602,"stem":241,"__hash__":1603},"nuxt_auto\u002F0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F17.schema-presets.md",{"type":511,"value":512,"toc":1583},"minimark",[513,517,569,574,616,669,673,1070,1073,1077,1207,1215,1283,1287,1318,1322,1428,1435,1441,1470,1474,1483,1508,1511,1515,1579],[514,515,239],"h1",{"id":516},"schema-presets-cross-engine",[518,519,520,521,525,526,530,531,530,534,530,537,530,540,543,544,547,548,551,552,555,556,559,560,563,564,568],"p",{},"nuxt-auto-api ships ",[522,523,524],"strong",{},"per-dialect column preset"," helpers so every table gets ",[527,528,529],"code",{},"timestamps",", ",[527,532,533],{},"softDelete",[527,535,536],{},"tenant",[527,538,539],{},"id",[527,541,542],{},"audit",", and ",[527,545,546],{},"json"," columns with one import — and because auto-api's features are ",[522,549,550],{},"convention-driven"," (detect ",[527,553,554],{},"deletedAt"," by name; ",[527,557,558],{},"updatedAt"," self-manages via drizzle ",[527,561,562],{},"$onUpdate","), ",[565,566,567],"em",{},"importing a preset activates the feature automatically",". No extra config.",[570,571,573],"h2",{"id":572},"why-per-dialect","Why per-dialect",[518,575,576,577,580,581,530,584,587,588,591,592,530,595,587,598,591,600,603,604,607,608,611,612,615],{},"Drizzle has no cross-dialect column abstraction: ",[527,578,579],{},"integer"," comes from ",[527,582,583],{},"sqlite-core",[527,585,586],{},"timestamp","\u002F",[527,589,590],{},"jsonb"," from ",[527,593,594],{},"pg-core",[527,596,597],{},"datetime",[527,599,546],{},[527,601,602],{},"mysql-core",". Presets are thin ",[522,605,606],{},"per-dialect modules"," behind three subpath exports — exactly how you already choose ",[527,609,610],{},"sqliteTable"," vs ",[527,613,614],{},"pgTable",".",[617,618,619,632],"table",{},[620,621,622],"thead",{},[623,624,625,629],"tr",{},[626,627,628],"th",{},"Engine",[626,630,631],{},"Import subpath",[633,634,635,649,659],"tbody",{},[623,636,637,644],{},[638,639,640,643],"td",{},[527,641,642],{},"better-sqlite3"," \u002F D1 \u002F Turso",[638,645,646],{},[527,647,648],{},"@websideproject\u002Fnuxt-auto-api\u002Fschema\u002Fsqlite",[623,650,651,654],{},[638,652,653],{},"Postgres",[638,655,656],{},[527,657,658],{},"@websideproject\u002Fnuxt-auto-api\u002Fschema\u002Fpg",[623,660,661,664],{},[638,662,663],{},"MySQL \u002F PlanetScale",[638,665,666],{},[527,667,668],{},"@websideproject\u002Fnuxt-auto-api\u002Fschema\u002Fmysql",[570,670,672],{"id":671},"usage-sqlite-example","Usage (SQLite example)",[674,675,680],"pre",{"className":676,"code":677,"language":678,"meta":679,"style":679},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { sqliteTable, text } from 'drizzle-orm\u002Fsqlite-core'\nimport { id, timestamps, tenant, softDelete, audit, liveUnique, json } from '@websideproject\u002Fnuxt-auto-api\u002Fschema\u002Fsqlite'\n\nconst sd = softDelete()   \u002F\u002F { columns, indexes(t) }\n\nexport const articles = sqliteTable('articles', {\n  ...id(),                  \u002F\u002F uuid text PK\n  title: text('title').notNull(),\n  slug: text('slug').notNull(),\n  ...tenant(),              \u002F\u002F organizationId text\n  ...timestamps(),          \u002F\u002F createdAt + updatedAt (self-managing)\n  ...audit(),               \u002F\u002F createdBy + updatedBy (filled by audit-stamp plugin)\n  ...sd.columns,            \u002F\u002F deletedAt, deletedBy, deletionId, deletedReason\n}, t => [\n  ...sd.indexes(t),         \u002F\u002F articles_trash_idx (deletedAt) + articles_batch_idx (deletionId)\n  ...tenant.indexes(t),     \u002F\u002F articles_tenant_org_idx\n  liveUnique(t, t.slug, 'articles_slug_live'),  \u002F\u002F partial unique among live rows\n])\n","ts","",[527,681,682,721,771,778,801,806,838,854,888,917,931,945,959,977,993,1013,1031,1064],{"__ignoreMap":679},[683,684,687,691,695,699,702,705,708,711,714,718],"span",{"class":685,"line":686},"line",1,[683,688,690],{"class":689},"s7zQu","import",[683,692,694],{"class":693},"sMK4o"," {",[683,696,698],{"class":697},"sTEyZ"," sqliteTable",[683,700,701],{"class":693},",",[683,703,704],{"class":697}," text",[683,706,707],{"class":693}," }",[683,709,710],{"class":689}," from",[683,712,713],{"class":693}," '",[683,715,717],{"class":716},"sfazB","drizzle-orm\u002Fsqlite-core",[683,719,720],{"class":693},"'\n",[683,722,724,726,728,731,733,736,738,741,743,746,748,751,753,756,758,761,763,765,767,769],{"class":685,"line":723},2,[683,725,690],{"class":689},[683,727,694],{"class":693},[683,729,730],{"class":697}," id",[683,732,701],{"class":693},[683,734,735],{"class":697}," timestamps",[683,737,701],{"class":693},[683,739,740],{"class":697}," tenant",[683,742,701],{"class":693},[683,744,745],{"class":697}," softDelete",[683,747,701],{"class":693},[683,749,750],{"class":697}," audit",[683,752,701],{"class":693},[683,754,755],{"class":697}," liveUnique",[683,757,701],{"class":693},[683,759,760],{"class":697}," json",[683,762,707],{"class":693},[683,764,710],{"class":689},[683,766,713],{"class":693},[683,768,648],{"class":716},[683,770,720],{"class":693},[683,772,774],{"class":685,"line":773},3,[683,775,777],{"emptyLinePlaceholder":776},true,"\n",[683,779,781,785,788,791,794,797],{"class":685,"line":780},4,[683,782,784],{"class":783},"spNyl","const",[683,786,787],{"class":697}," sd ",[683,789,790],{"class":693},"=",[683,792,745],{"class":793},"s2Zo4",[683,795,796],{"class":697},"()   ",[683,798,800],{"class":799},"sHwdD","\u002F\u002F { columns, indexes(t) }\n",[683,802,804],{"class":685,"line":803},5,[683,805,777],{"emptyLinePlaceholder":776},[683,807,809,812,815,818,820,822,825,828,831,833,835],{"class":685,"line":808},6,[683,810,811],{"class":689},"export",[683,813,814],{"class":783}," const",[683,816,817],{"class":697}," articles ",[683,819,790],{"class":693},[683,821,698],{"class":793},[683,823,824],{"class":697},"(",[683,826,827],{"class":693},"'",[683,829,830],{"class":716},"articles",[683,832,827],{"class":693},[683,834,701],{"class":693},[683,836,837],{"class":693}," {\n",[683,839,841,844,846,849,851],{"class":685,"line":840},7,[683,842,843],{"class":693},"  ...",[683,845,539],{"class":793},[683,847,848],{"class":697},"()",[683,850,701],{"class":693},[683,852,853],{"class":799},"                  \u002F\u002F uuid text PK\n",[683,855,857,861,864,866,868,870,873,875,878,880,883,885],{"class":685,"line":856},8,[683,858,860],{"class":859},"swJcz","  title",[683,862,863],{"class":693},":",[683,865,704],{"class":793},[683,867,824],{"class":697},[683,869,827],{"class":693},[683,871,872],{"class":716},"title",[683,874,827],{"class":693},[683,876,877],{"class":697},")",[683,879,615],{"class":693},[683,881,882],{"class":793},"notNull",[683,884,848],{"class":697},[683,886,887],{"class":693},",\n",[683,889,891,894,896,898,900,902,905,907,909,911,913,915],{"class":685,"line":890},9,[683,892,893],{"class":859},"  slug",[683,895,863],{"class":693},[683,897,704],{"class":793},[683,899,824],{"class":697},[683,901,827],{"class":693},[683,903,904],{"class":716},"slug",[683,906,827],{"class":693},[683,908,877],{"class":697},[683,910,615],{"class":693},[683,912,882],{"class":793},[683,914,848],{"class":697},[683,916,887],{"class":693},[683,918,920,922,924,926,928],{"class":685,"line":919},10,[683,921,843],{"class":693},[683,923,536],{"class":793},[683,925,848],{"class":697},[683,927,701],{"class":693},[683,929,930],{"class":799},"              \u002F\u002F organizationId text\n",[683,932,934,936,938,940,942],{"class":685,"line":933},11,[683,935,843],{"class":693},[683,937,529],{"class":793},[683,939,848],{"class":697},[683,941,701],{"class":693},[683,943,944],{"class":799},"          \u002F\u002F createdAt + updatedAt (self-managing)\n",[683,946,948,950,952,954,956],{"class":685,"line":947},12,[683,949,843],{"class":693},[683,951,542],{"class":793},[683,953,848],{"class":697},[683,955,701],{"class":693},[683,957,958],{"class":799},"               \u002F\u002F createdBy + updatedBy (filled by audit-stamp plugin)\n",[683,960,962,964,967,969,972,974],{"class":685,"line":961},13,[683,963,843],{"class":693},[683,965,966],{"class":697},"sd",[683,968,615],{"class":693},[683,970,971],{"class":697},"columns",[683,973,701],{"class":693},[683,975,976],{"class":799},"            \u002F\u002F deletedAt, deletedBy, deletionId, deletedReason\n",[683,978,980,983,987,990],{"class":685,"line":979},14,[683,981,982],{"class":693},"},",[683,984,986],{"class":985},"sHdIc"," t",[683,988,989],{"class":783}," =>",[683,991,992],{"class":697}," [\n",[683,994,996,998,1000,1002,1005,1008,1010],{"class":685,"line":995},15,[683,997,843],{"class":693},[683,999,966],{"class":697},[683,1001,615],{"class":693},[683,1003,1004],{"class":793},"indexes",[683,1006,1007],{"class":697},"(t)",[683,1009,701],{"class":693},[683,1011,1012],{"class":799},"         \u002F\u002F articles_trash_idx (deletedAt) + articles_batch_idx (deletionId)\n",[683,1014,1016,1018,1020,1022,1024,1026,1028],{"class":685,"line":1015},16,[683,1017,843],{"class":693},[683,1019,536],{"class":697},[683,1021,615],{"class":693},[683,1023,1004],{"class":793},[683,1025,1007],{"class":697},[683,1027,701],{"class":693},[683,1029,1030],{"class":799},"     \u002F\u002F articles_tenant_org_idx\n",[683,1032,1034,1037,1040,1042,1044,1046,1048,1050,1052,1055,1057,1059,1061],{"class":685,"line":1033},17,[683,1035,1036],{"class":793},"  liveUnique",[683,1038,1039],{"class":697},"(t",[683,1041,701],{"class":693},[683,1043,986],{"class":697},[683,1045,615],{"class":693},[683,1047,904],{"class":697},[683,1049,701],{"class":693},[683,1051,713],{"class":693},[683,1053,1054],{"class":716},"articles_slug_live",[683,1056,827],{"class":693},[683,1058,877],{"class":697},[683,1060,701],{"class":693},[683,1062,1063],{"class":799},"  \u002F\u002F partial unique among live rows\n",[683,1065,1067],{"class":685,"line":1066},18,[683,1068,1069],{"class":697},"])\n",[518,1071,1072],{},"Postgres and MySQL are identical except the import path.",[570,1074,1076],{"id":1075},"preset-reference","Preset reference",[617,1078,1079,1092],{},[620,1080,1081],{},[623,1082,1083,1086,1089],{},[626,1084,1085],{},"Preset",[626,1087,1088],{},"Returns",[626,1090,1091],{},"Auto-activates",[633,1093,1094,1110,1129,1148,1167,1182,1194],{},[623,1095,1096,1101,1107],{},[638,1097,1098],{},[527,1099,1100],{},"id()",[638,1102,1103,1106],{},[527,1104,1105],{},"{ id }"," UUID PK",[638,1108,1109],{},"—",[623,1111,1112,1117,1122],{},[638,1113,1114],{},[527,1115,1116],{},"timestamps()",[638,1118,1119],{},[527,1120,1121],{},"{ createdAt, updatedAt }",[638,1123,1124,1126,1127],{},[527,1125,558],{}," self-updates via ",[527,1128,562],{},[623,1130,1131,1136,1141],{},[638,1132,1133],{},[527,1134,1135],{},"audit()",[638,1137,1138],{},[527,1139,1140],{},"{ createdBy, updatedBy }",[638,1142,1143,1144,1147],{},"Filled by ",[522,1145,1146],{},"audit-stamp plugin"," (built-in, column-detected)",[623,1149,1150,1155,1164],{},[638,1151,1152],{},[527,1153,1154],{},"tenant(opts?)",[638,1156,1157,1160,1161],{},[527,1158,1159],{},"{ organizationId }"," + ",[527,1162,1163],{},"tenant.indexes(t)",[638,1165,1166],{},"Tenant scoping (if multiTenancy configured)",[623,1168,1169,1174,1179],{},[638,1170,1171],{},[527,1172,1173],{},"softDelete(opts?)",[638,1175,1176],{},[527,1177,1178],{},"{ columns, indexes(t) }",[638,1180,1181],{},"Full soft-delete pipeline (list hide, restore, purge, cascade)",[623,1183,1184,1189,1192],{},[638,1185,1186],{},[527,1187,1188],{},"json(name)",[638,1190,1191],{},"Dialect-correct JSON column",[638,1193,1109],{},[623,1195,1196,1201,1204],{},[638,1197,1198],{},[527,1199,1200],{},"liveUnique(t, col, name)",[638,1202,1203],{},"Partial unique index among live rows",[638,1205,1206],{},"Prevents unique-collision on deleted rows",[1208,1209,1211,1214],"h3",{"id":1210},"softdelete-options",[527,1212,1213],{},"softDelete()"," options",[674,1216,1218],{"className":676,"code":1217,"language":678,"meta":679,"style":679},"softDelete({\n  by:     true,   \u002F\u002F include deletedBy (userId who trashed). default: true\n  batch:  true,   \u002F\u002F include deletionId (batch restore\u002Fpurge). default: true\n  reason: true,   \u002F\u002F include deletedReason. default: true\n})\n",[527,1219,1220,1229,1245,1260,1275],{"__ignoreMap":679},[683,1221,1222,1224,1226],{"class":685,"line":686},[683,1223,533],{"class":793},[683,1225,824],{"class":697},[683,1227,1228],{"class":693},"{\n",[683,1230,1231,1234,1236,1240,1242],{"class":685,"line":723},[683,1232,1233],{"class":859},"  by",[683,1235,863],{"class":693},[683,1237,1239],{"class":1238},"sfNiH","     true",[683,1241,701],{"class":693},[683,1243,1244],{"class":799},"   \u002F\u002F include deletedBy (userId who trashed). default: true\n",[683,1246,1247,1250,1252,1255,1257],{"class":685,"line":773},[683,1248,1249],{"class":859},"  batch",[683,1251,863],{"class":693},[683,1253,1254],{"class":1238},"  true",[683,1256,701],{"class":693},[683,1258,1259],{"class":799},"   \u002F\u002F include deletionId (batch restore\u002Fpurge). default: true\n",[683,1261,1262,1265,1267,1270,1272],{"class":685,"line":780},[683,1263,1264],{"class":859},"  reason",[683,1266,863],{"class":693},[683,1268,1269],{"class":1238}," true",[683,1271,701],{"class":693},[683,1273,1274],{"class":799},"   \u002F\u002F include deletedReason. default: true\n",[683,1276,1277,1280],{"class":685,"line":803},[683,1278,1279],{"class":693},"}",[683,1281,1282],{"class":697},")\n",[1208,1284,1286],{"id":1285},"index-naming","Index naming",[518,1288,1289,1292,1293,1295,1296,1299,1300,530,1303,530,1306,1309,1310,1313,1314,1317],{},[527,1290,1291],{},"softDelete().indexes(t)"," and ",[527,1294,1163],{}," ",[522,1297,1298],{},"auto-namespace"," their index names with the\nowning table (e.g. ",[527,1301,1302],{},"articles_trash_idx",[527,1304,1305],{},"articles_batch_idx",[527,1307,1308],{},"articles_tenant_org_idx","). This is\nrequired because SQLite and Postgres index names must be ",[522,1311,1312],{},"globally unique"," within a database — a\nfixed ",[527,1315,1316],{},"trash_idx"," would collide the moment a second table adopts the preset. The table name is read\nfrom the column inside the index callback, so you don't pass it yourself.",[570,1319,1321],{"id":1320},"cross-engine-differences","Cross-engine differences",[617,1323,1324,1339],{},[620,1325,1326],{},[623,1327,1328,1331,1334,1336],{},[626,1329,1330],{},"Concern",[626,1332,1333],{},"SQLite",[626,1335,653],{},[626,1337,1338],{},"MySQL",[633,1340,1341,1366,1385,1403],{},[623,1342,1343,1346,1354,1359],{},[638,1344,1345],{},"UUID PK",[638,1347,1348,1160,1351],{},[527,1349,1350],{},"text",[527,1352,1353],{},"$defaultFn",[638,1355,1356],{},[527,1357,1358],{},"uuid().defaultRandom()",[638,1360,1361,1160,1364],{},[527,1362,1363],{},"varchar(36)",[527,1365,1353],{},[623,1367,1368,1371,1376,1381],{},[638,1369,1370],{},"Timestamp",[638,1372,1373],{},[527,1374,1375],{},"integer(mode:'timestamp')",[638,1377,1378],{},[527,1379,1380],{},"timestamp({withTimezone})",[638,1382,1383],{},[527,1384,597],{},[623,1386,1387,1390,1395,1399],{},[638,1388,1389],{},"JSON",[638,1391,1392],{},[527,1393,1394],{},"text(mode:'json')",[638,1396,1397],{},[527,1398,590],{},[638,1400,1401],{},[527,1402,546],{},[623,1404,1405,1411,1418,1422],{},[638,1406,1407,1408,877],{},"Partial unique (",[527,1409,1410],{},"liveUnique",[638,1412,1413,1414,1417],{},"✅ ",[527,1415,1416],{},"WHERE"," clause",[638,1419,1413,1420,1417],{},[527,1421,1416],{},[638,1423,1424,1425],{},"❌ use ",[527,1426,1427],{},"liveUniqueMysql()",[1208,1429,1431,1432,1434],{"id":1430},"mysql-liveunique-caveat","MySQL ",[527,1433,1410],{}," caveat",[518,1436,1437,1438,1440],{},"MySQL has no filtered indexes. Use ",[527,1439,1427],{}," which documents the generated-column workaround:",[674,1442,1444],{"className":676,"code":1443,"language":678,"meta":679,"style":679},"import { liveUniqueMysql } from '@websideproject\u002Fnuxt-auto-api\u002Fschema\u002Fmysql'\n\u002F\u002F See the generated migration comment for the required ALTER TABLE statement.\n",[527,1445,1446,1465],{"__ignoreMap":679},[683,1447,1448,1450,1452,1455,1457,1459,1461,1463],{"class":685,"line":686},[683,1449,690],{"class":689},[683,1451,694],{"class":693},[683,1453,1454],{"class":697}," liveUniqueMysql",[683,1456,707],{"class":693},[683,1458,710],{"class":689},[683,1460,713],{"class":693},[683,1462,668],{"class":716},[683,1464,720],{"class":693},[683,1466,1467],{"class":685,"line":723},[683,1468,1469],{"class":799},"\u002F\u002F See the generated migration comment for the required ALTER TABLE statement.\n",[570,1471,1473],{"id":1472},"the-audit-stamp-plugin","The audit-stamp plugin",[518,1475,1476,587,1479,1482],{},[527,1477,1478],{},"createdBy",[527,1480,1481],{},"updatedBy"," are filled server-side automatically when the columns exist — no extra config:",[1484,1485,1486,1496,1505],"ul",{},[1487,1488,1489,1491,1492,1495],"li",{},[527,1490,1478],{}," is set on ",[522,1493,1494],{},"create"," (null for system\u002Ftask writes).",[1487,1497,1498,1500,1501,1504],{},[527,1499,1481],{}," is overwritten on every ",[522,1502,1503],{},"create + update"," (client-supplied value is ignored).",[1487,1506,1507],{},"Raw drizzle writes (privacy erasure, migrations) bypass it — intended.",[518,1509,1510],{},"The plugin is registered in the default plugin set; tables without the columns are unaffected.",[570,1512,1514],{"id":1513},"import-feature-on-principle","\"Import = feature on\" principle",[617,1516,1517,1527],{},[620,1518,1519],{},[623,1520,1521,1524],{},[626,1522,1523],{},"Add this preset",[626,1525,1526],{},"Gets this auto-api behavior",[633,1528,1529,1541,1551,1565],{},[623,1530,1531,1536],{},[638,1532,1533],{},[527,1534,1535],{},"...timestamps()",[638,1537,1538,1540],{},[527,1539,558],{}," auto-refreshes on every update",[623,1542,1543,1548],{},[638,1544,1545],{},[527,1546,1547],{},"...softDelete()",[638,1549,1550],{},"List hides deleted, restore route, purge\u002Ftrash, cascade",[623,1552,1553,1558],{},[638,1554,1555],{},[527,1556,1557],{},"...tenant()",[638,1559,1560,1561,1564],{},"Tenant scoping when ",[527,1562,1563],{},"multiTenancy"," is configured",[623,1566,1567,1572],{},[638,1568,1569],{},[527,1570,1571],{},"...audit()",[638,1573,1574,587,1576,1578],{},[527,1575,1478],{},[527,1577,1481],{}," stamped from request user",[1580,1581,1582],"style",{},"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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .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 .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":679,"searchDepth":723,"depth":723,"links":1584},[1585,1586,1587,1592,1596,1597],{"id":572,"depth":723,"text":573},{"id":671,"depth":723,"text":672},{"id":1075,"depth":723,"text":1076,"children":1588},[1589,1591],{"id":1210,"depth":773,"text":1590},"softDelete() options",{"id":1285,"depth":773,"text":1286},{"id":1320,"depth":723,"text":1321,"children":1593},[1594],{"id":1430,"depth":773,"text":1595},"MySQL liveUnique caveat",{"id":1472,"depth":723,"text":1473},{"id":1513,"depth":723,"text":1514},"nuxt-auto-api ships per-dialect column preset helpers so every table gets timestamps, softDelete, tenant, id, audit, and json columns with one import — and because auto-api's features are convention-driven (detect deletedAt by name; updatedAt self-manages via drizzle $onUpdate), importing a preset activates the feature automatically. No extra config.","md",null,{},{"title":239,"description":1598},"k2CU3NQTe-3jfmVx0JyvwCpr7_4dkLwMXTmu1qyOJ80",[1605,1607],{"title":235,"path":236,"stem":237,"description":1606,"children":-1},"Build multi-tenant SaaS APIs where every organization only ever sees its own rows.",{"title":243,"path":244,"stem":245,"description":1608,"children":-1},"Recipes for fine-grained access control, from \"public blog\" to \"plan-gated, per-field, per-organization\". The\nconcepts behind them are in Authentication & Authorization.",1791106762615]