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