[{"data":1,"prerenderedAt":1703},["ShallowReactive",2],{"navigation":3,"-docs-database":407,"-docs-database-surround":1698},[4,93,226,232,392,404],{"title":5,"path":6,"stem":7,"children":8,"icon":92},"","\u002Fdocs","1.docs\u002F1.index",[9,12,17,22,27,32,37,42,47,52,57,62,67,72,77,82,87],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-compass",{"title":13,"path":14,"stem":15,"icon":16},"Quick Start","\u002Fdocs\u002Fquick-start","1.docs\u002F2.quick-start","i-lucide-zap",{"title":18,"path":19,"stem":20,"icon":21},"Renderer","\u002Fdocs\u002Frenderer","1.docs\u002F4.renderer","ri:layout-masonry-line",{"title":23,"path":24,"stem":25,"icon":26},"Routing","\u002Fdocs\u002Frouting","1.docs\u002F5.routing","ri:direction-line",{"title":28,"path":29,"stem":30,"icon":31},"Assets","\u002Fdocs\u002Fassets","1.docs\u002F50.assets","ri:image-2-line",{"title":33,"path":34,"stem":35,"icon":36},"Configuration","\u002Fdocs\u002Fconfiguration","1.docs\u002F50.configuration","ri:settings-3-line",{"title":38,"path":39,"stem":40,"icon":41},"Database","\u002Fdocs\u002Fdatabase","1.docs\u002F50.database","ri:database-2-line",{"title":43,"path":44,"stem":45,"icon":46},"Lifecycle","\u002Fdocs\u002Flifecycle","1.docs\u002F50.lifecycle","i-lucide-layers",{"title":48,"path":49,"stem":50,"icon":51},"OpenAPI","\u002Fdocs\u002Fopenapi","1.docs\u002F50.openapi","ri:contract-line",{"title":53,"path":54,"stem":55,"icon":56},"Plugins","\u002Fdocs\u002Fplugins","1.docs\u002F50.plugins","ri:plug-line",{"title":58,"path":59,"stem":60,"icon":61},"Tasks","\u002Fdocs\u002Ftasks","1.docs\u002F50.tasks","codicon:run-all",{"title":63,"path":64,"stem":65,"icon":66},"WebSocket","\u002Fdocs\u002Fwebsocket","1.docs\u002F50.websocket","ri:broadcast-fill",{"title":68,"path":69,"stem":70,"icon":71},"Server Entry","\u002Fdocs\u002Fserver-entry","1.docs\u002F6.server-entry","ri:server-line",{"title":73,"path":74,"stem":75,"icon":76},"Cache","\u002Fdocs\u002Fcache","1.docs\u002F7.cache","ri:speed-line",{"title":78,"path":79,"stem":80,"icon":81},"KV Storage","\u002Fdocs\u002Fstorage","1.docs\u002F8.storage","carbon:datastore",{"title":83,"path":84,"stem":85,"icon":86},"Migration Guide","\u002Fdocs\u002Fmigration","1.docs\u002F99.migration","ri:arrow-right-up-line",{"title":88,"path":89,"stem":90,"icon":91},"Nightly Channel","\u002Fdocs\u002Fnightly","1.docs\u002F99.nightly","ri:moon-fill","i-lucide-book-open",{"title":94,"path":95,"stem":96,"children":97,"icon":99},"Deploy","\u002Fdeploy","2.deploy\u002F0.index",[98,100,121],{"title":94,"path":95,"stem":96,"icon":99},"ri:upload-cloud-2-line",{"title":101,"path":102,"stem":103,"children":104,"page":120},"Runtimes","\u002Fdeploy\u002Fruntimes","2.deploy\u002F10.runtimes",[105,110,115],{"title":106,"path":107,"stem":108,"icon":109},"Node.js","\u002Fdeploy\u002Fruntimes\u002Fnode","2.deploy\u002F10.runtimes\u002F1.node","akar-icons:node-fill",{"title":111,"path":112,"stem":113,"icon":114},"Bun","\u002Fdeploy\u002Fruntimes\u002Fbun","2.deploy\u002F10.runtimes\u002Fbun","simple-icons:bun",{"title":116,"path":117,"stem":118,"icon":119},"Deno","\u002Fdeploy\u002Fruntimes\u002Fdeno","2.deploy\u002F10.runtimes\u002Fdeno","simple-icons:deno",false,{"title":122,"path":123,"stem":124,"children":125,"page":120},"Providers","\u002Fdeploy\u002Fproviders","2.deploy\u002F20.providers",[126,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,214,218,222],{"title":127,"path":128,"stem":129},"Alwaysdata","\u002Fdeploy\u002Fproviders\u002Falwaysdata","2.deploy\u002F20.providers\u002Falwaysdata",{"title":131,"path":132,"stem":133},"AWS Lambda","\u002Fdeploy\u002Fproviders\u002Faws","2.deploy\u002F20.providers\u002Faws",{"title":135,"path":136,"stem":137},"AWS Amplify","\u002Fdeploy\u002Fproviders\u002Faws-amplify","2.deploy\u002F20.providers\u002Faws-amplify",{"title":139,"path":140,"stem":141},"Azure","\u002Fdeploy\u002Fproviders\u002Fazure","2.deploy\u002F20.providers\u002Fazure",{"title":143,"path":144,"stem":145},"Cleavr","\u002Fdeploy\u002Fproviders\u002Fcleavr","2.deploy\u002F20.providers\u002Fcleavr",{"title":147,"path":148,"stem":149},"Cloudflare","\u002Fdeploy\u002Fproviders\u002Fcloudflare","2.deploy\u002F20.providers\u002Fcloudflare",{"title":151,"path":152,"stem":153},"Deno Deploy","\u002Fdeploy\u002Fproviders\u002Fdeno-deploy","2.deploy\u002F20.providers\u002Fdeno-deploy",{"title":155,"path":156,"stem":157},"DigitalOcean","\u002Fdeploy\u002Fproviders\u002Fdigitalocean","2.deploy\u002F20.providers\u002Fdigitalocean",{"title":159,"path":160,"stem":161},"EdgeOne Pages","\u002Fdeploy\u002Fproviders\u002Fedgeone","2.deploy\u002F20.providers\u002Fedgeone",{"title":163,"path":164,"stem":165},"Firebase","\u002Fdeploy\u002Fproviders\u002Ffirebase","2.deploy\u002F20.providers\u002Ffirebase",{"title":167,"path":168,"stem":169},"Flightcontrol","\u002Fdeploy\u002Fproviders\u002Fflightcontrol","2.deploy\u002F20.providers\u002Fflightcontrol",{"title":171,"path":172,"stem":173},"Genezio","\u002Fdeploy\u002Fproviders\u002Fgenezio","2.deploy\u002F20.providers\u002Fgenezio",{"title":175,"path":176,"stem":177},"GitHub Pages","\u002Fdeploy\u002Fproviders\u002Fgithub-pages","2.deploy\u002F20.providers\u002Fgithub-pages",{"title":179,"path":180,"stem":181},"GitLab Pages","\u002Fdeploy\u002Fproviders\u002Fgitlab-pages","2.deploy\u002F20.providers\u002Fgitlab-pages",{"title":183,"path":184,"stem":185},"Heroku","\u002Fdeploy\u002Fproviders\u002Fheroku","2.deploy\u002F20.providers\u002Fheroku",{"title":187,"path":188,"stem":189},"IIS","\u002Fdeploy\u002Fproviders\u002Fiis","2.deploy\u002F20.providers\u002Fiis",{"title":191,"path":192,"stem":193},"Koyeb","\u002Fdeploy\u002Fproviders\u002Fkoyeb","2.deploy\u002F20.providers\u002Fkoyeb",{"title":195,"path":196,"stem":197},"Netlify","\u002Fdeploy\u002Fproviders\u002Fnetlify","2.deploy\u002F20.providers\u002Fnetlify",{"title":199,"path":200,"stem":201},"Platform.sh","\u002Fdeploy\u002Fproviders\u002Fplatform-sh","2.deploy\u002F20.providers\u002Fplatform-sh",{"title":203,"path":204,"stem":205},"Render.com","\u002Fdeploy\u002Fproviders\u002Frender","2.deploy\u002F20.providers\u002Frender",{"title":207,"path":208,"stem":209},"StormKit","\u002Fdeploy\u002Fproviders\u002Fstormkit","2.deploy\u002F20.providers\u002Fstormkit",{"title":211,"path":212,"stem":213},"Vercel","\u002Fdeploy\u002Fproviders\u002Fvercel","2.deploy\u002F20.providers\u002Fvercel",{"title":215,"path":216,"stem":217},"Zeabur","\u002Fdeploy\u002Fproviders\u002Fzeabur","2.deploy\u002F20.providers\u002Fzeabur",{"title":219,"path":220,"stem":221},"Zephyr Cloud","\u002Fdeploy\u002Fproviders\u002Fzephyr","2.deploy\u002F20.providers\u002Fzephyr",{"title":223,"path":224,"stem":225},"Zerops","\u002Fdeploy\u002Fproviders\u002Fzerops","2.deploy\u002F20.providers\u002Fzerops",{"title":227,"path":228,"stem":229,"children":230,"icon":36},"Config","\u002Fconfig","3.config\u002F0.index",[231],{"title":227,"path":228,"stem":229,"icon":36},{"title":233,"path":234,"stem":235,"children":236,"icon":238},"Examples","\u002Fexamples","4.examples\u002F0.index",[237,239,244,249,254,259,263,268,273,278,283,288,293,297,302,306,310,315,320,325,330,335,340,345,350,355,360,364,369,374,378,383,388],{"title":233,"path":234,"stem":235,"icon":238},"i-lucide-folder-code",{"title":240,"path":241,"stem":242,"icon":243},"API Routes","\u002Fexamples\u002Fapi-routes","4.examples\u002Fapi-routes","i-lucide-route",{"title":245,"path":246,"stem":247,"icon":248},"Auto Imports","\u002Fexamples\u002Fauto-imports","4.examples\u002Fauto-imports","i-lucide-import",{"title":250,"path":251,"stem":252,"icon":253},"Cached Handler","\u002Fexamples\u002Fcached-handler","4.examples\u002Fcached-handler","i-lucide-clock",{"title":255,"path":256,"stem":257,"icon":258},"Custom Error Handler","\u002Fexamples\u002Fcustom-error-handler","4.examples\u002Fcustom-error-handler","i-lucide-alert-circle",{"title":38,"path":260,"stem":261,"icon":262},"\u002Fexamples\u002Fdatabase","4.examples\u002Fdatabase","i-lucide-database",{"title":264,"path":265,"stem":266,"icon":267},"Elysia","\u002Fexamples\u002Felysia","4.examples\u002Felysia","i-skill-icons-elysia-dark",{"title":269,"path":270,"stem":271,"icon":272},"Express","\u002Fexamples\u002Fexpress","4.examples\u002Fexpress","i-simple-icons-express",{"title":274,"path":275,"stem":276,"icon":277},"Fastify","\u002Fexamples\u002Ffastify","4.examples\u002Ffastify","i-simple-icons-fastify",{"title":279,"path":280,"stem":281,"icon":282},"Hello World","\u002Fexamples\u002Fhello-world","4.examples\u002Fhello-world","i-lucide-sparkles",{"title":284,"path":285,"stem":286,"icon":287},"Hono","\u002Fexamples\u002Fhono","4.examples\u002Fhono","i-logos-hono",{"title":289,"path":290,"stem":291,"icon":292},"Import Alias","\u002Fexamples\u002Fimport-alias","4.examples\u002Fimport-alias","i-lucide-at-sign",{"title":294,"path":295,"stem":296,"icon":46},"Middleware","\u002Fexamples\u002Fmiddleware","4.examples\u002Fmiddleware",{"title":298,"path":299,"stem":300,"icon":301},"Mono JSX","\u002Fexamples\u002Fmono-jsx","4.examples\u002Fmono-jsx","i-lucide-brackets",{"title":303,"path":304,"stem":305,"icon":301},"Nano JSX","\u002Fexamples\u002Fnano-jsx","4.examples\u002Fnano-jsx",{"title":53,"path":307,"stem":308,"icon":309},"\u002Fexamples\u002Fplugins","4.examples\u002Fplugins","i-lucide-plug",{"title":311,"path":312,"stem":313,"icon":314},"Custom Renderer","\u002Fexamples\u002Frenderer","4.examples\u002Frenderer","i-lucide-code",{"title":316,"path":317,"stem":318,"icon":319},"Runtime Config","\u002Fexamples\u002Fruntime-config","4.examples\u002Fruntime-config","i-lucide-settings",{"title":321,"path":322,"stem":323,"icon":324},"Server Fetch","\u002Fexamples\u002Fserver-fetch","4.examples\u002Fserver-fetch","i-lucide-arrow-right-left",{"title":326,"path":327,"stem":328,"icon":329},"Shiki","\u002Fexamples\u002Fshiki","4.examples\u002Fshiki","i-lucide-highlighter",{"title":331,"path":332,"stem":333,"icon":334},"Takumi","\u002Fexamples\u002Ftakumi","4.examples\u002Ftakumi","i-lucide-image",{"title":336,"path":337,"stem":338,"icon":339},"Virtual Routes","\u002Fexamples\u002Fvirtual-routes","4.examples\u002Fvirtual-routes","i-lucide-box",{"title":341,"path":342,"stem":343,"icon":344},"Vite Nitro Plugin","\u002Fexamples\u002Fvite-nitro-plugin","4.examples\u002Fvite-nitro-plugin","i-logos-vitejs",{"title":346,"path":347,"stem":348,"icon":349},"Vite RSC","\u002Fexamples\u002Fvite-rsc","4.examples\u002Fvite-rsc","i-logos-react",{"title":351,"path":352,"stem":353,"icon":354},"Vite SSR HTML","\u002Fexamples\u002Fvite-ssr-html","4.examples\u002Fvite-ssr-html","i-logos-html-5",{"title":356,"path":357,"stem":358,"icon":359},"SSR with Preact","\u002Fexamples\u002Fvite-ssr-preact","4.examples\u002Fvite-ssr-preact","i-logos-preact",{"title":361,"path":362,"stem":363,"icon":349},"SSR with React","\u002Fexamples\u002Fvite-ssr-react","4.examples\u002Fvite-ssr-react",{"title":365,"path":366,"stem":367,"icon":368},"SSR with SolidJS","\u002Fexamples\u002Fvite-ssr-solid","4.examples\u002Fvite-ssr-solid","i-logos-solidjs-icon",{"title":370,"path":371,"stem":372,"icon":373},"SSR with TanStack Router","\u002Fexamples\u002Fvite-ssr-tsr-react","4.examples\u002Fvite-ssr-tsr-react","i-simple-icons-tanstack",{"title":375,"path":376,"stem":377,"icon":373},"SSR with TanStack Start","\u002Fexamples\u002Fvite-ssr-tss-react","4.examples\u002Fvite-ssr-tss-react",{"title":379,"path":380,"stem":381,"icon":382},"SSR with Vue Router","\u002Fexamples\u002Fvite-ssr-vue-router","4.examples\u002Fvite-ssr-vue-router","i-logos-vue",{"title":384,"path":385,"stem":386,"icon":387},"Vite + tRPC","\u002Fexamples\u002Fvite-trpc","4.examples\u002Fvite-trpc","i-simple-icons-trpc",{"title":63,"path":389,"stem":390,"icon":391},"\u002Fexamples\u002Fwebsocket","4.examples\u002Fwebsocket","i-lucide-radio",{"title":393,"path":394,"stem":395,"children":396},"Blog","\u002Fblog","9.blog",[397,400],{"title":393,"path":394,"stem":398,"icon":399},"9.blog\u002Findex","i-lucide-file-text",{"title":401,"path":402,"stem":403,"icon":399},"Nitro v3 Beta is here!","\u002Fblog\u002Fv3-beta","9.blog\u002F1.v3-beta",{"title":5,"path":405,"stem":406},"\u002F","index",{"id":408,"title":38,"body":409,"description":1692,"extension":1693,"meta":1694,"navigation":1695,"path":39,"seo":1696,"stem":40,"__hash__":1697},"content\u002F1.docs\u002F50.database.md",{"type":410,"value":411,"toc":1680,"icon":41},"minimark",[412,434,439,451,454,537,547,557,562,824,831,841,908,921,924,930,933,1061,1067,1070,1107,1113,1116,1186,1189,1196,1309,1313,1324,1433,1446,1450,1463,1676],[413,414,415,416,420,421,428,429,433],"p",{},"The default database connection is ",[417,418,419],"strong",{},"preconfigured"," with ",[422,423,427],"a",{"href":424,"rel":425},"https:\u002F\u002Fdb0.unjs.io\u002Fconnectors\u002Fsqlite",[426],"nofollow","SQLite"," and works out of the box for development mode and any Node.js compatible production deployments. By default, data will be stored in ",[430,431,432],"code",{},".data\u002Fdb.sqlite",".",[435,436],"read-more",{"title":437,"to":438},"DB0 Documentation","https:\u002F\u002Fdb0.unjs.io",[440,441,442],"important",{},[413,443,444,445,450],{},"\nDatabase support is currently experimental.\nRefer to the ",[422,446,449],{"href":447,"rel":448},"https:\u002F\u002Fgithub.com\u002Funjs\u002Fdb0\u002Fissues",[426],"db0 issues"," for status and bug report.",[413,452,453],{},"In order to enable database layer you need to enable experimental feature flag.",[455,456,461],"pre",{"className":457,"code":458,"filename":459,"language":460,"meta":5,"style":5},"language-ts shiki shiki-themes github-light github-dark github-dark","import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  experimental: {\n    database: true\n  }\n})\n","nitro.config.ts","ts",[430,462,463,486,493,509,515,525,531],{"__ignoreMap":5},[464,465,468,472,476,479,483],"span",{"class":466,"line":467},"line",1,[464,469,471],{"class":470},"so5gQ","import",[464,473,475],{"class":474},"slsVL"," { defineConfig } ",[464,477,478],{"class":470},"from",[464,480,482],{"class":481},"sfrk1"," \"nitro\"",[464,484,485],{"class":474},";\n",[464,487,489],{"class":466,"line":488},2,[464,490,492],{"emptyLinePlaceholder":491},true,"\n",[464,494,496,499,502,506],{"class":466,"line":495},3,[464,497,498],{"class":470},"export",[464,500,501],{"class":470}," default",[464,503,505],{"class":504},"shcOC"," defineConfig",[464,507,508],{"class":474},"({\n",[464,510,512],{"class":466,"line":511},4,[464,513,514],{"class":474},"  experimental: {\n",[464,516,518,521],{"class":466,"line":517},5,[464,519,520],{"class":474},"    database: ",[464,522,524],{"class":523},"suiK_","true\n",[464,526,528],{"class":466,"line":527},6,[464,529,530],{"class":474},"  }\n",[464,532,534],{"class":466,"line":533},7,[464,535,536],{"class":474},"})\n",[538,539,540],"tip",{},[413,541,542,543,433],{},"\nYou can change default connection or define more connections to any of the ",[422,544,546],{"href":424,"rel":545},[426],"supported databases",[538,548,549],{},[413,550,551,552,433],{},"\nYou can integrate database instance to any of the ",[422,553,556],{"href":554,"rel":555},"https:\u002F\u002Fdb0.unjs.io\u002Fintegrations",[426],"supported ORMs",[558,559,561],"h2",{"id":560},"usage","Usage",[455,563,566],{"className":457,"code":564,"filename":565,"language":460,"meta":5,"style":5},"import { defineHandler } from \"nitro\";\nimport { useDatabase } from \"nitro\u002Fdatabase\";\n\nexport default defineHandler(async () => {\n  const db = useDatabase();\n\n  \u002F\u002F Create users table\n  await db.sql`DROP TABLE IF EXISTS users`;\n  await db.sql`CREATE TABLE IF NOT EXISTS users (\"id\" TEXT PRIMARY KEY, \"firstName\" TEXT, \"lastName\" TEXT, \"email\" TEXT)`;\n\n  \u002F\u002F Add a new user\n  const userId = String(Math.round(Math.random() * 10_000));\n  await db.sql`INSERT INTO users VALUES (${userId}, 'John', 'Doe', '')`;\n\n  \u002F\u002F Query for users\n  const { rows } = await db.sql`SELECT * FROM users WHERE id = ${userId}`;\n\n  return {\n    rows,\n  };\n});\n","server.ts",[430,567,568,581,595,599,623,640,644,650,667,681,686,692,728,748,753,759,793,798,806,812,818],{"__ignoreMap":5},[464,569,570,572,575,577,579],{"class":466,"line":467},[464,571,471],{"class":470},[464,573,574],{"class":474}," { defineHandler } ",[464,576,478],{"class":470},[464,578,482],{"class":481},[464,580,485],{"class":474},[464,582,583,585,588,590,593],{"class":466,"line":488},[464,584,471],{"class":470},[464,586,587],{"class":474}," { useDatabase } ",[464,589,478],{"class":470},[464,591,592],{"class":481}," \"nitro\u002Fdatabase\"",[464,594,485],{"class":474},[464,596,597],{"class":466,"line":495},[464,598,492],{"emptyLinePlaceholder":491},[464,600,601,603,605,608,611,614,617,620],{"class":466,"line":511},[464,602,498],{"class":470},[464,604,501],{"class":470},[464,606,607],{"class":504}," defineHandler",[464,609,610],{"class":474},"(",[464,612,613],{"class":470},"async",[464,615,616],{"class":474}," () ",[464,618,619],{"class":470},"=>",[464,621,622],{"class":474}," {\n",[464,624,625,628,631,634,637],{"class":466,"line":517},[464,626,627],{"class":470},"  const",[464,629,630],{"class":523}," db",[464,632,633],{"class":470}," =",[464,635,636],{"class":504}," useDatabase",[464,638,639],{"class":474},"();\n",[464,641,642],{"class":466,"line":527},[464,643,492],{"emptyLinePlaceholder":491},[464,645,646],{"class":466,"line":533},[464,647,649],{"class":648},"sCsY4","  \u002F\u002F Create users table\n",[464,651,653,656,659,662,665],{"class":466,"line":652},8,[464,654,655],{"class":470},"  await",[464,657,658],{"class":474}," db.",[464,660,661],{"class":504},"sql",[464,663,664],{"class":481},"`DROP TABLE IF EXISTS users`",[464,666,485],{"class":474},[464,668,670,672,674,676,679],{"class":466,"line":669},9,[464,671,655],{"class":470},[464,673,658],{"class":474},[464,675,661],{"class":504},[464,677,678],{"class":481},"`CREATE TABLE IF NOT EXISTS users (\"id\" TEXT PRIMARY KEY, \"firstName\" TEXT, \"lastName\" TEXT, \"email\" TEXT)`",[464,680,485],{"class":474},[464,682,684],{"class":466,"line":683},10,[464,685,492],{"emptyLinePlaceholder":491},[464,687,689],{"class":466,"line":688},11,[464,690,691],{"class":648},"  \u002F\u002F Add a new user\n",[464,693,695,697,700,702,705,708,711,713,716,719,722,725],{"class":466,"line":694},12,[464,696,627],{"class":470},[464,698,699],{"class":523}," userId",[464,701,633],{"class":470},[464,703,704],{"class":504}," String",[464,706,707],{"class":474},"(Math.",[464,709,710],{"class":504},"round",[464,712,707],{"class":474},[464,714,715],{"class":504},"random",[464,717,718],{"class":474},"() ",[464,720,721],{"class":470},"*",[464,723,724],{"class":523}," 10_000",[464,726,727],{"class":474},"));\n",[464,729,731,733,735,737,740,743,746],{"class":466,"line":730},13,[464,732,655],{"class":470},[464,734,658],{"class":474},[464,736,661],{"class":504},[464,738,739],{"class":481},"`INSERT INTO users VALUES (${",[464,741,742],{"class":474},"userId",[464,744,745],{"class":481},"}, 'John', 'Doe', '')`",[464,747,485],{"class":474},[464,749,751],{"class":466,"line":750},14,[464,752,492],{"emptyLinePlaceholder":491},[464,754,756],{"class":466,"line":755},15,[464,757,758],{"class":648},"  \u002F\u002F Query for users\n",[464,760,762,764,767,770,773,776,779,781,783,786,788,791],{"class":466,"line":761},16,[464,763,627],{"class":470},[464,765,766],{"class":474}," { ",[464,768,769],{"class":523},"rows",[464,771,772],{"class":474}," } ",[464,774,775],{"class":470},"=",[464,777,778],{"class":470}," await",[464,780,658],{"class":474},[464,782,661],{"class":504},[464,784,785],{"class":481},"`SELECT * FROM users WHERE id = ${",[464,787,742],{"class":474},[464,789,790],{"class":481},"}`",[464,792,485],{"class":474},[464,794,796],{"class":466,"line":795},17,[464,797,492],{"emptyLinePlaceholder":491},[464,799,801,804],{"class":466,"line":800},18,[464,802,803],{"class":470},"  return",[464,805,622],{"class":474},[464,807,809],{"class":466,"line":808},19,[464,810,811],{"class":474},"    rows,\n",[464,813,815],{"class":466,"line":814},20,[464,816,817],{"class":474},"  };\n",[464,819,821],{"class":466,"line":820},21,[464,822,823],{"class":474},"});\n",[825,826,828],"h3",{"id":827},"usedatabase",[430,829,830],{},"useDatabase",[413,832,833,834,836,837,840],{},"Use ",[430,835,830],{}," to get a database instance. It accepts an optional connection name (defaults to ",[430,838,839],{},"\"default\"",").",[455,842,844],{"className":457,"code":843,"language":460,"meta":5,"style":5},"import { useDatabase } from \"nitro\u002Fdatabase\";\n\n\u002F\u002F Use the default connection\nconst db = useDatabase();\n\n\u002F\u002F Use a named connection\nconst usersDb = useDatabase(\"users\");\n",[430,845,846,858,862,867,880,884,889],{"__ignoreMap":5},[464,847,848,850,852,854,856],{"class":466,"line":467},[464,849,471],{"class":470},[464,851,587],{"class":474},[464,853,478],{"class":470},[464,855,592],{"class":481},[464,857,485],{"class":474},[464,859,860],{"class":466,"line":488},[464,861,492],{"emptyLinePlaceholder":491},[464,863,864],{"class":466,"line":495},[464,865,866],{"class":648},"\u002F\u002F Use the default connection\n",[464,868,869,872,874,876,878],{"class":466,"line":511},[464,870,871],{"class":470},"const",[464,873,630],{"class":523},[464,875,633],{"class":470},[464,877,636],{"class":504},[464,879,639],{"class":474},[464,881,882],{"class":466,"line":517},[464,883,492],{"emptyLinePlaceholder":491},[464,885,886],{"class":466,"line":527},[464,887,888],{"class":648},"\u002F\u002F Use a named connection\n",[464,890,891,893,896,898,900,902,905],{"class":466,"line":533},[464,892,871],{"class":470},[464,894,895],{"class":523}," usersDb",[464,897,633],{"class":470},[464,899,636],{"class":504},[464,901,610],{"class":474},[464,903,904],{"class":481},"\"users\"",[464,906,907],{"class":474},");\n",[909,910,911],"note",{},[413,912,913,914,917,918,920],{},"\nWhen ",[430,915,916],{},"experimental.database"," is enabled, ",[430,919,830],{}," is auto-imported and available without an explicit import statement.",[413,922,923],{},"Database instances are created lazily on first use and cached for subsequent calls with the same connection name. If a connection name is not configured, an error will be thrown.",[825,925,927],{"id":926},"dbsql",[430,928,929],{},"db.sql",[413,931,932],{},"Execute SQL queries using tagged template literals with automatic parameter binding:",[455,934,936],{"className":457,"code":935,"language":460,"meta":5,"style":5},"const db = useDatabase();\n\n\u002F\u002F Insert with parameterized values (safe from SQL injection)\nconst id = \"1001\";\nawait db.sql`INSERT INTO users VALUES (${id}, 'John', 'Doe', 'john@example.com')`;\n\n\u002F\u002F Query with parameters\nconst { rows } = await db.sql`SELECT * FROM users WHERE id = ${id}`;\n\n\u002F\u002F The result includes rows, changes count, and last insert ID\nconst result = await db.sql`INSERT INTO posts (title) VALUES (${\"Hello\"})`;\n\u002F\u002F result.rows, result.changes, result.lastInsertRowid\n",[430,937,938,950,954,959,973,992,996,1001,1027,1031,1036,1056],{"__ignoreMap":5},[464,939,940,942,944,946,948],{"class":466,"line":467},[464,941,871],{"class":470},[464,943,630],{"class":523},[464,945,633],{"class":470},[464,947,636],{"class":504},[464,949,639],{"class":474},[464,951,952],{"class":466,"line":488},[464,953,492],{"emptyLinePlaceholder":491},[464,955,956],{"class":466,"line":495},[464,957,958],{"class":648},"\u002F\u002F Insert with parameterized values (safe from SQL injection)\n",[464,960,961,963,966,968,971],{"class":466,"line":511},[464,962,871],{"class":470},[464,964,965],{"class":523}," id",[464,967,633],{"class":470},[464,969,970],{"class":481}," \"1001\"",[464,972,485],{"class":474},[464,974,975,978,980,982,984,987,990],{"class":466,"line":517},[464,976,977],{"class":470},"await",[464,979,658],{"class":474},[464,981,661],{"class":504},[464,983,739],{"class":481},[464,985,986],{"class":474},"id",[464,988,989],{"class":481},"}, 'John', 'Doe', 'john@example.com')`",[464,991,485],{"class":474},[464,993,994],{"class":466,"line":527},[464,995,492],{"emptyLinePlaceholder":491},[464,997,998],{"class":466,"line":533},[464,999,1000],{"class":648},"\u002F\u002F Query with parameters\n",[464,1002,1003,1005,1007,1009,1011,1013,1015,1017,1019,1021,1023,1025],{"class":466,"line":652},[464,1004,871],{"class":470},[464,1006,766],{"class":474},[464,1008,769],{"class":523},[464,1010,772],{"class":474},[464,1012,775],{"class":470},[464,1014,778],{"class":470},[464,1016,658],{"class":474},[464,1018,661],{"class":504},[464,1020,785],{"class":481},[464,1022,986],{"class":474},[464,1024,790],{"class":481},[464,1026,485],{"class":474},[464,1028,1029],{"class":466,"line":669},[464,1030,492],{"emptyLinePlaceholder":491},[464,1032,1033],{"class":466,"line":683},[464,1034,1035],{"class":648},"\u002F\u002F The result includes rows, changes count, and last insert ID\n",[464,1037,1038,1040,1043,1045,1047,1049,1051,1054],{"class":466,"line":688},[464,1039,871],{"class":470},[464,1041,1042],{"class":523}," result",[464,1044,633],{"class":470},[464,1046,778],{"class":470},[464,1048,658],{"class":474},[464,1050,661],{"class":504},[464,1052,1053],{"class":481},"`INSERT INTO posts (title) VALUES (${\"Hello\"})`",[464,1055,485],{"class":474},[464,1057,1058],{"class":466,"line":694},[464,1059,1060],{"class":648},"\u002F\u002F result.rows, result.changes, result.lastInsertRowid\n",[825,1062,1064],{"id":1063},"dbexec",[430,1065,1066],{},"db.exec",[413,1068,1069],{},"Execute a raw SQL string directly:",[455,1071,1073],{"className":457,"code":1072,"language":460,"meta":5,"style":5},"const db = useDatabase();\n\nawait db.exec(\"CREATE TABLE IF NOT EXISTS users (id TEXT PRIMARY KEY, name TEXT)\");\n",[430,1074,1075,1087,1091],{"__ignoreMap":5},[464,1076,1077,1079,1081,1083,1085],{"class":466,"line":467},[464,1078,871],{"class":470},[464,1080,630],{"class":523},[464,1082,633],{"class":470},[464,1084,636],{"class":504},[464,1086,639],{"class":474},[464,1088,1089],{"class":466,"line":488},[464,1090,492],{"emptyLinePlaceholder":491},[464,1092,1093,1095,1097,1100,1102,1105],{"class":466,"line":495},[464,1094,977],{"class":470},[464,1096,658],{"class":474},[464,1098,1099],{"class":504},"exec",[464,1101,610],{"class":474},[464,1103,1104],{"class":481},"\"CREATE TABLE IF NOT EXISTS users (id TEXT PRIMARY KEY, name TEXT)\"",[464,1106,907],{"class":474},[825,1108,1110],{"id":1109},"dbprepare",[430,1111,1112],{},"db.prepare",[413,1114,1115],{},"Prepare an SQL statement for repeated execution:",[455,1117,1119],{"className":457,"code":1118,"language":460,"meta":5,"style":5},"const db = useDatabase();\n\nconst stmt = db.prepare(\"SELECT * FROM users WHERE id = ?\");\nconst result = await stmt.bind(\"1001\").all();\n",[430,1120,1121,1133,1137,1158],{"__ignoreMap":5},[464,1122,1123,1125,1127,1129,1131],{"class":466,"line":467},[464,1124,871],{"class":470},[464,1126,630],{"class":523},[464,1128,633],{"class":470},[464,1130,636],{"class":504},[464,1132,639],{"class":474},[464,1134,1135],{"class":466,"line":488},[464,1136,492],{"emptyLinePlaceholder":491},[464,1138,1139,1141,1144,1146,1148,1151,1153,1156],{"class":466,"line":495},[464,1140,871],{"class":470},[464,1142,1143],{"class":523}," stmt",[464,1145,633],{"class":470},[464,1147,658],{"class":474},[464,1149,1150],{"class":504},"prepare",[464,1152,610],{"class":474},[464,1154,1155],{"class":481},"\"SELECT * FROM users WHERE id = ?\"",[464,1157,907],{"class":474},[464,1159,1160,1162,1164,1166,1168,1171,1174,1176,1179,1181,1184],{"class":466,"line":511},[464,1161,871],{"class":470},[464,1163,1042],{"class":523},[464,1165,633],{"class":470},[464,1167,778],{"class":470},[464,1169,1170],{"class":474}," stmt.",[464,1172,1173],{"class":504},"bind",[464,1175,610],{"class":474},[464,1177,1178],{"class":481},"\"1001\"",[464,1180,840],{"class":474},[464,1182,1183],{"class":504},"all",[464,1185,639],{"class":474},[558,1187,33],{"id":1188},"configuration",[413,1190,1191,1192,1195],{},"You can configure database connections using ",[430,1193,1194],{},"database"," config:",[455,1197,1199],{"className":457,"code":1198,"filename":459,"language":460,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  database: {\n    default: {\n      connector: \"sqlite\",\n      options: { name: \"db\" }\n    },\n    users: {\n      connector: \"postgresql\",\n      options: {\n        url: \"postgresql:\u002F\u002Fusername:password@hostname:port\u002Fdatabase_name\"\n      },\n    },\n  },\n});\n",[430,1200,1201,1213,1217,1227,1232,1237,1248,1259,1264,1269,1278,1283,1291,1296,1300,1305],{"__ignoreMap":5},[464,1202,1203,1205,1207,1209,1211],{"class":466,"line":467},[464,1204,471],{"class":470},[464,1206,475],{"class":474},[464,1208,478],{"class":470},[464,1210,482],{"class":481},[464,1212,485],{"class":474},[464,1214,1215],{"class":466,"line":488},[464,1216,492],{"emptyLinePlaceholder":491},[464,1218,1219,1221,1223,1225],{"class":466,"line":495},[464,1220,498],{"class":470},[464,1222,501],{"class":470},[464,1224,505],{"class":504},[464,1226,508],{"class":474},[464,1228,1229],{"class":466,"line":511},[464,1230,1231],{"class":474},"  database: {\n",[464,1233,1234],{"class":466,"line":517},[464,1235,1236],{"class":474},"    default: {\n",[464,1238,1239,1242,1245],{"class":466,"line":527},[464,1240,1241],{"class":474},"      connector: ",[464,1243,1244],{"class":481},"\"sqlite\"",[464,1246,1247],{"class":474},",\n",[464,1249,1250,1253,1256],{"class":466,"line":533},[464,1251,1252],{"class":474},"      options: { name: ",[464,1254,1255],{"class":481},"\"db\"",[464,1257,1258],{"class":474}," }\n",[464,1260,1261],{"class":466,"line":652},[464,1262,1263],{"class":474},"    },\n",[464,1265,1266],{"class":466,"line":669},[464,1267,1268],{"class":474},"    users: {\n",[464,1270,1271,1273,1276],{"class":466,"line":683},[464,1272,1241],{"class":474},[464,1274,1275],{"class":481},"\"postgresql\"",[464,1277,1247],{"class":474},[464,1279,1280],{"class":466,"line":688},[464,1281,1282],{"class":474},"      options: {\n",[464,1284,1285,1288],{"class":466,"line":694},[464,1286,1287],{"class":474},"        url: ",[464,1289,1290],{"class":481},"\"postgresql:\u002F\u002Fusername:password@hostname:port\u002Fdatabase_name\"\n",[464,1292,1293],{"class":466,"line":730},[464,1294,1295],{"class":474},"      },\n",[464,1297,1298],{"class":466,"line":750},[464,1299,1263],{"class":474},[464,1301,1302],{"class":466,"line":755},[464,1303,1304],{"class":474},"  },\n",[464,1306,1307],{"class":466,"line":761},[464,1308,823],{"class":474},[825,1310,1312],{"id":1311},"development-database","Development Database",[413,1314,1315,1316,1319,1320,1323],{},"Use the ",[430,1317,1318],{},"devDatabase"," config to override the database configuration ",[417,1321,1322],{},"only for development mode",". This is useful for using a local SQLite database during development while targeting a different database in production.",[455,1325,1327],{"className":457,"code":1326,"filename":459,"language":460,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  database: {\n    default: {\n      connector: \"postgresql\",\n      options: {\n        url: \"postgresql:\u002F\u002Fusername:password@hostname:port\u002Fdatabase_name\"\n      }\n    }\n  },\n  devDatabase: {\n    default: {\n      connector: \"sqlite\",\n      options: { name: \"dev-db\" }\n    }\n  }\n});\n",[430,1328,1329,1341,1345,1355,1359,1363,1371,1375,1381,1386,1391,1395,1400,1404,1412,1421,1425,1429],{"__ignoreMap":5},[464,1330,1331,1333,1335,1337,1339],{"class":466,"line":467},[464,1332,471],{"class":470},[464,1334,475],{"class":474},[464,1336,478],{"class":470},[464,1338,482],{"class":481},[464,1340,485],{"class":474},[464,1342,1343],{"class":466,"line":488},[464,1344,492],{"emptyLinePlaceholder":491},[464,1346,1347,1349,1351,1353],{"class":466,"line":495},[464,1348,498],{"class":470},[464,1350,501],{"class":470},[464,1352,505],{"class":504},[464,1354,508],{"class":474},[464,1356,1357],{"class":466,"line":511},[464,1358,1231],{"class":474},[464,1360,1361],{"class":466,"line":517},[464,1362,1236],{"class":474},[464,1364,1365,1367,1369],{"class":466,"line":527},[464,1366,1241],{"class":474},[464,1368,1275],{"class":481},[464,1370,1247],{"class":474},[464,1372,1373],{"class":466,"line":533},[464,1374,1282],{"class":474},[464,1376,1377,1379],{"class":466,"line":652},[464,1378,1287],{"class":474},[464,1380,1290],{"class":481},[464,1382,1383],{"class":466,"line":669},[464,1384,1385],{"class":474},"      }\n",[464,1387,1388],{"class":466,"line":683},[464,1389,1390],{"class":474},"    }\n",[464,1392,1393],{"class":466,"line":688},[464,1394,1304],{"class":474},[464,1396,1397],{"class":466,"line":694},[464,1398,1399],{"class":474},"  devDatabase: {\n",[464,1401,1402],{"class":466,"line":730},[464,1403,1236],{"class":474},[464,1405,1406,1408,1410],{"class":466,"line":750},[464,1407,1241],{"class":474},[464,1409,1244],{"class":481},[464,1411,1247],{"class":474},[464,1413,1414,1416,1419],{"class":466,"line":755},[464,1415,1252],{"class":474},[464,1417,1418],{"class":481},"\"dev-db\"",[464,1420,1258],{"class":474},[464,1422,1423],{"class":466,"line":761},[464,1424,1390],{"class":474},[464,1426,1427],{"class":466,"line":795},[464,1428,530],{"class":474},[464,1430,1431],{"class":466,"line":800},[464,1432,823],{"class":474},[538,1434,1435],{},[413,1436,913,1437,1439,1440,1442,1443,1445],{},[430,1438,916],{}," is enabled and no ",[430,1441,1194],{}," or ",[430,1444,1318],{}," config is provided, Nitro automatically configures a default SQLite connection. In development mode, data is stored relative to the project root directory. In Node.js production, it uses the default SQLite path.",[558,1447,1449],{"id":1448},"connectors","Connectors",[413,1451,1452,1453,1458,1459,1462],{},"Nitro supports all ",[422,1454,1457],{"href":1455,"rel":1456},"https:\u002F\u002Fdb0.unjs.io\u002Fconnectors",[426],"db0 connectors",". The ",[430,1460,1461],{},"connector"," field in the database config accepts any of the following values:",[1464,1465,1466,1479],"table",{},[1467,1468,1469],"thead",{},[1470,1471,1472,1476],"tr",{},[1473,1474,1475],"th",{},"Connector",[1473,1477,1478],{},"Description",[1480,1481,1482,1497,1506,1519,1532,1546,1564,1574,1584,1598,1612,1627,1642,1656,1666],"tbody",{},[1470,1483,1484,1490],{},[1485,1486,1487],"td",{},[430,1488,1489],{},"sqlite",[1485,1491,1492,1493,1496],{},"Node.js built-in SQLite (alias for ",[430,1494,1495],{},"node-sqlite",")",[1470,1498,1499,1503],{},[1485,1500,1501],{},[430,1502,1495],{},[1485,1504,1505],{},"Node.js built-in SQLite",[1470,1507,1508,1513],{},[1485,1509,1510],{},[430,1511,1512],{},"better-sqlite3",[1485,1514,1515],{},[422,1516,1512],{"href":1517,"rel":1518},"https:\u002F\u002Fgithub.com\u002FWiseLibs\u002Fbetter-sqlite3",[426],[1470,1520,1521,1526],{},[1485,1522,1523],{},[430,1524,1525],{},"sqlite3",[1485,1527,1528],{},[422,1529,1525],{"href":1530,"rel":1531},"https:\u002F\u002Fgithub.com\u002FTryGhost\u002Fnode-sqlite3",[426],[1470,1533,1534,1543],{},[1485,1535,1536,1539,1540],{},[430,1537,1538],{},"bun"," \u002F ",[430,1541,1542],{},"bun-sqlite",[1485,1544,1545],{},"Bun built-in SQLite",[1470,1547,1548,1556],{},[1485,1549,1550,1539,1553],{},[430,1551,1552],{},"libsql",[430,1554,1555],{},"libsql-node",[1485,1557,1558,1563],{},[422,1559,1562],{"href":1560,"rel":1561},"https:\u002F\u002Fgithub.com\u002Ftursodatabase\u002Flibsql",[426],"libSQL"," (Node.js)",[1470,1565,1566,1571],{},[1485,1567,1568],{},[430,1569,1570],{},"libsql-http",[1485,1572,1573],{},"libSQL over HTTP",[1470,1575,1576,1581],{},[1485,1577,1578],{},[430,1579,1580],{},"libsql-web",[1485,1582,1583],{},"libSQL for web environments",[1470,1585,1586,1591],{},[1485,1587,1588],{},[430,1589,1590],{},"postgresql",[1485,1592,1593],{},[422,1594,1597],{"href":1595,"rel":1596},"https:\u002F\u002Fgithub.com\u002Fporsager\u002Fpostgres",[426],"PostgreSQL",[1470,1599,1600,1605],{},[1485,1601,1602],{},[430,1603,1604],{},"mysql2",[1485,1606,1607],{},[422,1608,1611],{"href":1609,"rel":1610},"https:\u002F\u002Fgithub.com\u002Fsidorares\u002Fnode-mysql2",[426],"MySQL",[1470,1613,1614,1619],{},[1485,1615,1616],{},[430,1617,1618],{},"pglite",[1485,1620,1621,1626],{},[422,1622,1625],{"href":1623,"rel":1624},"https:\u002F\u002Fgithub.com\u002Felectric-sql\u002Fpglite",[426],"PGlite"," (embedded PostgreSQL)",[1470,1628,1629,1634],{},[1485,1630,1631],{},[430,1632,1633],{},"planetscale",[1485,1635,1636,1641],{},[422,1637,1640],{"href":1638,"rel":1639},"https:\u002F\u002Fgithub.com\u002Fplanetscale\u002Fdatabase-js",[426],"PlanetScale"," serverless",[1470,1643,1644,1649],{},[1485,1645,1646],{},[430,1647,1648],{},"cloudflare-d1",[1485,1650,1651],{},[422,1652,1655],{"href":1653,"rel":1654},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fd1\u002F",[426],"Cloudflare D1",[1470,1657,1658,1663],{},[1485,1659,1660],{},[430,1661,1662],{},"cloudflare-hyperdrive-mysql",[1485,1664,1665],{},"Cloudflare Hyperdrive with MySQL",[1470,1667,1668,1673],{},[1485,1669,1670],{},[430,1671,1672],{},"cloudflare-hyperdrive-postgresql",[1485,1674,1675],{},"Cloudflare Hyperdrive with PostgreSQL",[1677,1678,1679],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}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 .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":5,"searchDepth":488,"depth":488,"links":1681},[1682,1688,1691],{"id":560,"depth":488,"text":561,"children":1683},[1684,1685,1686,1687],{"id":827,"depth":495,"text":830},{"id":926,"depth":495,"text":929},{"id":1063,"depth":495,"text":1066},{"id":1109,"depth":495,"text":1112},{"id":1188,"depth":488,"text":33,"children":1689},[1690],{"id":1311,"depth":495,"text":1312},{"id":1448,"depth":488,"text":1449},"Nitro provides a built-in and lightweight SQL database layer.","md",{"automd":491,"icon":41},{"icon":41},{"title":38,"description":1692},"CXKtH1yGSP222fQegEMCxW-2MDrXivO-KXCZD6ReIEc",[1699,1701],{"title":33,"path":34,"stem":35,"description":1700,"icon":36,"children":-1},"Customize and extend Nitro defaults.",{"title":43,"path":44,"stem":45,"description":1702,"icon":46,"children":-1},"Understand how Nitro runs and serves incoming requests to your application.",1784130427641]