[{"data":1,"prerenderedAt":1628},["ShallowReactive",2],{"navigation":3,"/docs/database/schema":137,"/docs/database/schema-surround":1623},[4,123],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":113},"Docs","i-lucide-book","/docs","docs",[10,34,58,73,84,95,114],{"title":11,"path":12,"stem":13,"children":14,"icon":33},"Getting Started","/docs/getting-started","docs/1.getting-started/1.index",[15,17,21,25,29],{"title":16,"path":12,"stem":13},"Introduction",{"title":18,"path":19,"stem":20},"Installation","/docs/getting-started/installation","docs/1.getting-started/2.installation",{"title":22,"path":23,"stem":24},"Deploy","/docs/getting-started/deploy","docs/1.getting-started/3.deploy",{"title":26,"path":27,"stem":28},"Migration","/docs/getting-started/migration","docs/1.getting-started/4.migration",{"title":30,"path":31,"stem":32},"Environments","/docs/getting-started/environments","docs/1.getting-started/5.environments","i-lucide-rocket",{"title":35,"path":36,"stem":37,"children":38,"icon":57},"Database","/docs/database","docs/2.database/1.index",[39,41,45,49,53],{"title":40,"path":36,"stem":37},"Setup",{"title":42,"path":43,"stem":44},"Schema","/docs/database/schema","docs/2.database/2.schema",{"title":46,"path":47,"stem":48},"Queries","/docs/database/query","docs/2.database/3.query",{"title":50,"path":51,"stem":52},"Migrations","/docs/database/migrations","docs/2.database/4.migrations",{"title":54,"path":55,"stem":56},"CLI","/docs/database/cli","docs/2.database/cli","i-lucide-database",{"title":59,"path":60,"stem":61,"children":62,"icon":72},"Blob","/docs/blob","docs/3.blob/1.index",[63,64,68],{"title":40,"path":60,"stem":61},{"title":65,"path":66,"stem":67},"Upload","/docs/blob/upload","docs/3.blob/2.upload",{"title":69,"path":70,"stem":71},"Blob SDK","/docs/blob/usage","docs/3.blob/3.usage","i-lucide-shapes",{"title":74,"path":75,"stem":76,"children":77,"icon":83},"Key Value","/docs/kv","docs/4.kv/1.index",[78,79],{"title":40,"path":75,"stem":76},{"title":80,"path":81,"stem":82},"KV SDK","/docs/kv/usage","docs/4.kv/2.usage","i-lucide-list",{"title":85,"path":86,"stem":87,"children":88,"icon":94},"Cache","/docs/cache","docs/5.cache/1.index",[89,90],{"title":40,"path":86,"stem":87},{"title":91,"path":92,"stem":93},"Usage","/docs/cache/usage","docs/5.cache/2.usage","i-lucide-zap",{"title":96,"icon":97,"path":98,"stem":99,"children":100,"page":113},"Guides","i-lucide-book-text","/docs/guides","docs/6.guides",[101,105,109],{"title":102,"path":103,"stem":104},"Pre-rendering","/docs/guides/pre-rendering","docs/6.guides/1.pre-rendering",{"title":106,"path":107,"stem":108},"Realtime","/docs/guides/realtime","docs/6.guides/2.realtime",{"title":110,"path":111,"stem":112},"CI/CD","/docs/guides/ci-cd","docs/6.guides/3.ci-cd",false,{"title":115,"path":116,"stem":117,"children":118,"page":113},"Reference","/docs/reference","docs/7.reference",[119],{"title":120,"path":121,"stem":122},"Environment Variables","/docs/reference/environment-variables","docs/7.reference/1.environment-variables",{"title":124,"icon":125,"path":126,"stem":127,"children":128,"page":113},"Changelog","i-lucide-megaphone","/changelog","changelog",[129,133],{"title":130,"path":131,"stem":132},"NuxtHub Multi-Vendor is now available","/changelog/nuxthub-multi-vendor","changelog/nuxthub-multi-vendor",{"title":134,"path":135,"stem":136},"Self-Hosting First & Cloud-Agnostic Future","/changelog/self-hosting-first","changelog/self-hosting-first",{"id":138,"title":139,"body":140,"description":1616,"extension":1617,"links":1618,"meta":1619,"navigation":1620,"path":43,"seo":1621,"stem":44,"__hash__":1622},"docs/docs/2.database/2.schema.md","Database Schema",{"type":141,"value":142,"toc":1605},"minimark",[143,147,152,155,180,183,300,309,322,326,334,341,360,364,371,595,599,610,616,744,747,986,1095,1100,1108,1601],[144,145,146],"p",{},"NuxtHub supports defining the database schema in multiple files and directories, allowing you to organize your schema files in a way that makes sense for your project, but also open the possibility to Nuxt modules to extend the database schema.",[148,149,151],"h3",{"id":150},"schema-files","Schema files",[144,153,154],{},"Database schema can be defined in a single file or in multiple files, these files are scanned and automatically imported following this glob pattern:",[156,157,158,165,170,175],"ul",{},[159,160,161],"li",{},[162,163,164],"code",{},"server/db/schema.ts",[159,166,167],{},[162,168,169],{},"server/db/schema.{dialect}.ts",[159,171,172],{},[162,173,174],{},"server/db/schema/*.ts",[159,176,177],{},[162,178,179],{},"server/db/schema/*.{dialect}.ts",[144,181,182],{},"The merged schema is exported and can be imported in multiple ways:",[184,185,190],"pre",{"className":186,"code":187,"language":188,"meta":189,"style":189},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","// Import entire schema\nimport * as schema from '@nuxthub/db/schema'\n\n// Also possible: Import schema object from main module\nimport { schema } from '@nuxthub/db'\n\n// Legacy: Virtual module (backwards compatibility)\nimport * as schema from 'hub:db:schema'\n","ts","",[162,191,192,201,232,239,245,269,274,280],{"__ignoreMap":189},[193,194,197],"span",{"class":195,"line":196},"line",1,[193,198,200],{"class":199},"sHwdD","// Import entire schema\n",[193,202,204,208,212,215,219,222,225,229],{"class":195,"line":203},2,[193,205,207],{"class":206},"s7zQu","import",[193,209,211],{"class":210},"sMK4o"," *",[193,213,214],{"class":206}," as",[193,216,218],{"class":217},"sTEyZ"," schema ",[193,220,221],{"class":206},"from",[193,223,224],{"class":210}," '",[193,226,228],{"class":227},"sfazB","@nuxthub/db/schema",[193,230,231],{"class":210},"'\n",[193,233,235],{"class":195,"line":234},3,[193,236,238],{"emptyLinePlaceholder":237},true,"\n",[193,240,242],{"class":195,"line":241},4,[193,243,244],{"class":199},"// Also possible: Import schema object from main module\n",[193,246,248,250,253,256,259,262,264,267],{"class":195,"line":247},5,[193,249,207],{"class":206},[193,251,252],{"class":210}," {",[193,254,255],{"class":217}," schema",[193,257,258],{"class":210}," }",[193,260,261],{"class":206}," from",[193,263,224],{"class":210},[193,265,266],{"class":227},"@nuxthub/db",[193,268,231],{"class":210},[193,270,272],{"class":195,"line":271},6,[193,273,238],{"emptyLinePlaceholder":237},[193,275,277],{"class":195,"line":276},7,[193,278,279],{"class":199},"// Legacy: Virtual module (backwards compatibility)\n",[193,281,283,285,287,289,291,293,295,298],{"class":195,"line":282},8,[193,284,207],{"class":206},[193,286,211],{"class":210},[193,288,214],{"class":206},[193,290,218],{"class":217},[193,292,221],{"class":206},[193,294,224],{"class":210},[193,296,297],{"class":227},"hub:db:schema",[193,299,231],{"class":210},[301,302,304,305,308],"callout",{"icon":303},"i-lucide-lightbulb","You can locate the generated schema file at ",[162,306,307],{},".nuxt/hub/db/schema.mjs",".",[310,311,314,315,321],"note",{":external":312,"to":313},"true","https://orm.drizzle.team/docs/sql-schema-declaration","Learn more about ",[316,317,320],"a",{"href":313,"rel":318},[319],"nofollow","Drizzle ORM schema"," on the Drizzle documentation.",[148,323,325],{"id":324},"nuxt-layers","Nuxt layers",[144,327,328,329,308],{},"Database schema is scanned and automatically imported for each ",[316,330,333],{"href":331,"rel":332},"https://nuxt.com/docs/getting-started/layers",[319],"Nuxt layer",[144,335,336,337,340],{},"This means that you can also define schema in the ",[162,338,339],{},"layers"," directory:",[184,342,347],{"className":343,"code":344,"filename":345,"language":346,"meta":189,"style":189},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","layers/cms/server/db/schema.ts\nlayers/products/server/db/schema/products.ts\n","Directory structure","bash",[162,348,349,355],{"__ignoreMap":189},[193,350,351],{"class":195,"line":196},[193,352,354],{"class":353},"sBMFI","layers/cms/server/db/schema.ts\n",[193,356,357],{"class":195,"line":203},[193,358,359],{"class":353},"layers/products/server/db/schema/products.ts\n",[148,361,363],{"id":362},"nuxt-modules","Nuxt modules",[144,365,366,367,370],{},"If you are a Nuxt module developer, you can also extend the database schema by using the ",[162,368,369],{},"hub:db:schema:extend"," hook:",[184,372,375],{"className":186,"code":373,"filename":374,"language":188,"meta":189,"style":189},"import { defineNuxtModule, createResolver } from '@nuxt/kit'\n\nexport default defineNuxtModule({\n  setup(options, nuxt) {\n    const { resolvePath } = createResolver(import.meta.url)\n    nuxt.hook('hub:db:schema:extend', async ({ dialect, paths }) => {\n      // Add your module drizzle schema files for the given dialect\n      // e.g. ./schema/pages.postgresql.ts if hub.db is 'postgresql'\n      paths.push(await resolvePath(`./schema/pages.${dialect}`))\n    })\n  }\n})\n","modules/cms/index.ts",[162,376,377,403,407,424,447,482,525,530,535,573,581,587],{"__ignoreMap":189},[193,378,379,381,383,386,389,392,394,396,398,401],{"class":195,"line":196},[193,380,207],{"class":206},[193,382,252],{"class":210},[193,384,385],{"class":217}," defineNuxtModule",[193,387,388],{"class":210},",",[193,390,391],{"class":217}," createResolver",[193,393,258],{"class":210},[193,395,261],{"class":206},[193,397,224],{"class":210},[193,399,400],{"class":227},"@nuxt/kit",[193,402,231],{"class":210},[193,404,405],{"class":195,"line":203},[193,406,238],{"emptyLinePlaceholder":237},[193,408,409,412,415,418,421],{"class":195,"line":234},[193,410,411],{"class":206},"export",[193,413,414],{"class":206}," default",[193,416,385],{"class":417},"s2Zo4",[193,419,420],{"class":217},"(",[193,422,423],{"class":210},"{\n",[193,425,426,430,432,436,438,441,444],{"class":195,"line":241},[193,427,429],{"class":428},"swJcz","  setup",[193,431,420],{"class":210},[193,433,435],{"class":434},"sHdIc","options",[193,437,388],{"class":210},[193,439,440],{"class":434}," nuxt",[193,442,443],{"class":210},")",[193,445,446],{"class":210}," {\n",[193,448,449,453,455,458,460,463,465,467,469,471,474,476,479],{"class":195,"line":247},[193,450,452],{"class":451},"spNyl","    const",[193,454,252],{"class":210},[193,456,457],{"class":217}," resolvePath",[193,459,258],{"class":210},[193,461,462],{"class":210}," =",[193,464,391],{"class":417},[193,466,420],{"class":428},[193,468,207],{"class":206},[193,470,308],{"class":210},[193,472,473],{"class":217},"meta",[193,475,308],{"class":210},[193,477,478],{"class":217},"url",[193,480,481],{"class":428},")\n",[193,483,484,487,489,492,494,497,499,501,503,506,509,512,514,517,520,523],{"class":195,"line":271},[193,485,486],{"class":217},"    nuxt",[193,488,308],{"class":210},[193,490,491],{"class":417},"hook",[193,493,420],{"class":428},[193,495,496],{"class":210},"'",[193,498,369],{"class":227},[193,500,496],{"class":210},[193,502,388],{"class":210},[193,504,505],{"class":451}," async",[193,507,508],{"class":210}," ({",[193,510,511],{"class":434}," dialect",[193,513,388],{"class":210},[193,515,516],{"class":434}," paths",[193,518,519],{"class":210}," })",[193,521,522],{"class":451}," =>",[193,524,446],{"class":210},[193,526,527],{"class":195,"line":276},[193,528,529],{"class":199},"      // Add your module drizzle schema files for the given dialect\n",[193,531,532],{"class":195,"line":282},[193,533,534],{"class":199},"      // e.g. ./schema/pages.postgresql.ts if hub.db is 'postgresql'\n",[193,536,538,541,543,546,548,551,553,555,558,561,564,567,570],{"class":195,"line":537},9,[193,539,540],{"class":217},"      paths",[193,542,308],{"class":210},[193,544,545],{"class":417},"push",[193,547,420],{"class":428},[193,549,550],{"class":206},"await",[193,552,457],{"class":417},[193,554,420],{"class":428},[193,556,557],{"class":210},"`",[193,559,560],{"class":227},"./schema/pages.",[193,562,563],{"class":210},"${",[193,565,566],{"class":217},"dialect",[193,568,569],{"class":210},"}`",[193,571,572],{"class":428},"))\n",[193,574,576,579],{"class":195,"line":575},10,[193,577,578],{"class":210},"    }",[193,580,481],{"class":428},[193,582,584],{"class":195,"line":583},11,[193,585,586],{"class":210},"  }\n",[193,588,590,593],{"class":195,"line":589},12,[193,591,592],{"class":210},"}",[193,594,481],{"class":217},[148,596,598],{"id":597},"sharing-types-with-vue","Sharing types with Vue",[144,600,601,602,609],{},"Types inferred from your database schema are only available on the server-side by default. To share these types with your Vue application, you can use the ",[316,603,606],{"href":604,"rel":605},"https://nuxt.com/docs/guide/directory-structure/shared",[319],[162,607,608],{},"shared/"," directory which is auto-imported across both server and client.",[144,611,612,613,340],{},"Create a types file in the ",[162,614,615],{},"shared/types/",[184,617,620],{"className":186,"code":618,"filename":619,"language":188,"meta":189,"style":189},"import { users, posts } from '@nuxthub/db/schema'\n\n// Select types (for reading data)\nexport type User = typeof users.$inferSelect\nexport type Post = typeof posts.$inferSelect\n\n// Insert types (for creating data)\nexport type NewUser = typeof users.$inferInsert\nexport type NewPost = typeof posts.$inferInsert\n","shared/types/db.ts",[162,621,622,646,650,655,677,696,700,705,725],{"__ignoreMap":189},[193,623,624,626,628,631,633,636,638,640,642,644],{"class":195,"line":196},[193,625,207],{"class":206},[193,627,252],{"class":210},[193,629,630],{"class":217}," users",[193,632,388],{"class":210},[193,634,635],{"class":217}," posts",[193,637,258],{"class":210},[193,639,261],{"class":206},[193,641,224],{"class":210},[193,643,228],{"class":227},[193,645,231],{"class":210},[193,647,648],{"class":195,"line":203},[193,649,238],{"emptyLinePlaceholder":237},[193,651,652],{"class":195,"line":234},[193,653,654],{"class":199},"// Select types (for reading data)\n",[193,656,657,659,662,665,667,670,672,674],{"class":195,"line":241},[193,658,411],{"class":206},[193,660,661],{"class":451}," type",[193,663,664],{"class":353}," User",[193,666,462],{"class":210},[193,668,669],{"class":210}," typeof",[193,671,630],{"class":217},[193,673,308],{"class":210},[193,675,676],{"class":217},"$inferSelect\n",[193,678,679,681,683,686,688,690,692,694],{"class":195,"line":247},[193,680,411],{"class":206},[193,682,661],{"class":451},[193,684,685],{"class":353}," Post",[193,687,462],{"class":210},[193,689,669],{"class":210},[193,691,635],{"class":217},[193,693,308],{"class":210},[193,695,676],{"class":217},[193,697,698],{"class":195,"line":271},[193,699,238],{"emptyLinePlaceholder":237},[193,701,702],{"class":195,"line":276},[193,703,704],{"class":199},"// Insert types (for creating data)\n",[193,706,707,709,711,714,716,718,720,722],{"class":195,"line":282},[193,708,411],{"class":206},[193,710,661],{"class":451},[193,712,713],{"class":353}," NewUser",[193,715,462],{"class":210},[193,717,669],{"class":210},[193,719,630],{"class":217},[193,721,308],{"class":210},[193,723,724],{"class":217},"$inferInsert\n",[193,726,727,729,731,734,736,738,740,742],{"class":195,"line":537},[193,728,411],{"class":206},[193,730,661],{"class":451},[193,732,733],{"class":353}," NewPost",[193,735,462],{"class":210},[193,737,669],{"class":210},[193,739,635],{"class":217},[193,741,308],{"class":210},[193,743,724],{"class":217},[144,745,746],{},"These types are now auto-imported and available in your Vue components, composables, and API routes:",[748,749,750,842],"code-group",{},[184,751,756],{"className":752,"code":753,"filename":754,"language":755,"meta":189,"style":189},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nconst { data: users } = await useFetch\u003CUser[]>('/api/users')\n\u003C/script>\n","pages/users.vue","vue",[162,757,758,785,833],{"__ignoreMap":189},[193,759,760,763,766,769,772,775,778,780,782],{"class":195,"line":196},[193,761,762],{"class":210},"\u003C",[193,764,765],{"class":428},"script",[193,767,768],{"class":451}," setup",[193,770,771],{"class":451}," lang",[193,773,774],{"class":210},"=",[193,776,777],{"class":210},"\"",[193,779,188],{"class":227},[193,781,777],{"class":210},[193,783,784],{"class":210},">\n",[193,786,787,790,792,795,798,801,803,805,808,811,813,816,819,822,824,826,829,831],{"class":195,"line":203},[193,788,789],{"class":451},"const",[193,791,252],{"class":210},[193,793,794],{"class":428}," data",[193,796,797],{"class":210},":",[193,799,800],{"class":217}," users ",[193,802,592],{"class":210},[193,804,462],{"class":210},[193,806,807],{"class":206}," await",[193,809,810],{"class":417}," useFetch",[193,812,762],{"class":210},[193,814,815],{"class":353},"User",[193,817,818],{"class":217},"[]",[193,820,821],{"class":210},">",[193,823,420],{"class":217},[193,825,496],{"class":210},[193,827,828],{"class":227},"/api/users",[193,830,496],{"class":210},[193,832,481],{"class":217},[193,834,835,838,840],{"class":195,"line":234},[193,836,837],{"class":210},"\u003C/",[193,839,765],{"class":428},[193,841,784],{"class":210},[184,843,846],{"className":186,"code":844,"filename":845,"language":188,"meta":189,"style":189},"import { db, schema } from '@nuxthub/db'\n\nexport default eventHandler(async (event) => {\n  const body = await readBody\u003CNewUser>(event)\n  \n  return await db.insert(schema.users).values(body).returning()\n})\n","server/api/users.post.ts",[162,847,848,871,875,901,929,934,980],{"__ignoreMap":189},[193,849,850,852,854,857,859,861,863,865,867,869],{"class":195,"line":196},[193,851,207],{"class":206},[193,853,252],{"class":210},[193,855,856],{"class":217}," db",[193,858,388],{"class":210},[193,860,255],{"class":217},[193,862,258],{"class":210},[193,864,261],{"class":206},[193,866,224],{"class":210},[193,868,266],{"class":227},[193,870,231],{"class":210},[193,872,873],{"class":195,"line":203},[193,874,238],{"emptyLinePlaceholder":237},[193,876,877,879,881,884,886,889,892,895,897,899],{"class":195,"line":234},[193,878,411],{"class":206},[193,880,414],{"class":206},[193,882,883],{"class":417}," eventHandler",[193,885,420],{"class":217},[193,887,888],{"class":451},"async",[193,890,891],{"class":210}," (",[193,893,894],{"class":434},"event",[193,896,443],{"class":210},[193,898,522],{"class":451},[193,900,446],{"class":210},[193,902,903,906,909,911,913,916,918,921,923,925,927],{"class":195,"line":241},[193,904,905],{"class":451},"  const",[193,907,908],{"class":217}," body",[193,910,462],{"class":210},[193,912,807],{"class":206},[193,914,915],{"class":417}," readBody",[193,917,762],{"class":210},[193,919,920],{"class":353},"NewUser",[193,922,821],{"class":210},[193,924,420],{"class":428},[193,926,894],{"class":217},[193,928,481],{"class":428},[193,930,931],{"class":195,"line":247},[193,932,933],{"class":428},"  \n",[193,935,936,939,941,943,945,948,950,953,955,958,960,962,965,967,970,972,974,977],{"class":195,"line":271},[193,937,938],{"class":206},"  return",[193,940,807],{"class":206},[193,942,856],{"class":217},[193,944,308],{"class":210},[193,946,947],{"class":417},"insert",[193,949,420],{"class":428},[193,951,952],{"class":217},"schema",[193,954,308],{"class":210},[193,956,957],{"class":217},"users",[193,959,443],{"class":428},[193,961,308],{"class":210},[193,963,964],{"class":417},"values",[193,966,420],{"class":428},[193,968,969],{"class":217},"body",[193,971,443],{"class":428},[193,973,308],{"class":210},[193,975,976],{"class":417},"returning",[193,978,979],{"class":428},"()\n",[193,981,982,984],{"class":195,"line":276},[193,983,592],{"class":210},[193,985,481],{"class":217},[987,988,989,1000],"tip",{},[144,990,991,992,995,996,999],{},"You can also create more specific types by using ",[162,993,994],{},"Pick"," and ",[162,997,998],{},"Omit"," TypeScript's built-in utility types.",[184,1001,1003],{"className":186,"code":1002,"filename":619,"language":188,"meta":189,"style":189},"// User without password for public API responses\nexport type PublicUser = Omit\u003CUser, 'password'>\n\n// Only the fields needed for user creation form\nexport type UserForm = Pick\u003CNewUser, 'name' | 'email' | 'password'>\n",[162,1004,1005,1010,1039,1043,1048],{"__ignoreMap":189},[193,1006,1007],{"class":195,"line":196},[193,1008,1009],{"class":199},"// User without password for public API responses\n",[193,1011,1012,1014,1016,1019,1021,1024,1026,1028,1030,1032,1035,1037],{"class":195,"line":203},[193,1013,411],{"class":206},[193,1015,661],{"class":451},[193,1017,1018],{"class":353}," PublicUser",[193,1020,462],{"class":210},[193,1022,1023],{"class":353}," Omit",[193,1025,762],{"class":210},[193,1027,815],{"class":353},[193,1029,388],{"class":210},[193,1031,224],{"class":210},[193,1033,1034],{"class":227},"password",[193,1036,496],{"class":210},[193,1038,784],{"class":210},[193,1040,1041],{"class":195,"line":234},[193,1042,238],{"emptyLinePlaceholder":237},[193,1044,1045],{"class":195,"line":241},[193,1046,1047],{"class":199},"// Only the fields needed for user creation form\n",[193,1049,1050,1052,1054,1057,1059,1062,1064,1066,1068,1070,1073,1075,1078,1080,1083,1085,1087,1089,1091,1093],{"class":195,"line":247},[193,1051,411],{"class":206},[193,1053,661],{"class":451},[193,1055,1056],{"class":353}," UserForm",[193,1058,462],{"class":210},[193,1060,1061],{"class":353}," Pick",[193,1063,762],{"class":210},[193,1065,920],{"class":353},[193,1067,388],{"class":210},[193,1069,224],{"class":210},[193,1071,1072],{"class":227},"name",[193,1074,496],{"class":210},[193,1076,1077],{"class":210}," |",[193,1079,224],{"class":210},[193,1081,1082],{"class":227},"email",[193,1084,496],{"class":210},[193,1086,1077],{"class":210},[193,1088,224],{"class":210},[193,1090,1034],{"class":227},[193,1092,496],{"class":210},[193,1094,784],{"class":210},[1096,1097,1099],"h2",{"id":1098},"database-seed","Database seed",[144,1101,1102,1103,797],{},"You can populate your database with initial data using ",[316,1104,1107],{"href":1105,"rel":1106},"https://nitro.build/guide/tasks",[319],"Nitro Tasks",[1109,1110,1112,1116,1179,1183,1587,1591],"steps",{"level":1111},"3",[148,1113,1115],{"id":1114},"enable-nitro-tasks","Enable Nitro tasks",[184,1117,1120],{"className":186,"code":1118,"filename":1119,"language":188,"meta":189,"style":189},"export default defineNuxtConfig({\n  nitro: {\n    experimental: {\n      tasks: true\n    }\n  }\n})\n","nuxt.config.ts",[162,1121,1122,1135,1144,1153,1164,1169,1173],{"__ignoreMap":189},[193,1123,1124,1126,1128,1131,1133],{"class":195,"line":196},[193,1125,411],{"class":206},[193,1127,414],{"class":206},[193,1129,1130],{"class":417}," defineNuxtConfig",[193,1132,420],{"class":217},[193,1134,423],{"class":210},[193,1136,1137,1140,1142],{"class":195,"line":203},[193,1138,1139],{"class":428},"  nitro",[193,1141,797],{"class":210},[193,1143,446],{"class":210},[193,1145,1146,1149,1151],{"class":195,"line":234},[193,1147,1148],{"class":428},"    experimental",[193,1150,797],{"class":210},[193,1152,446],{"class":210},[193,1154,1155,1158,1160],{"class":195,"line":241},[193,1156,1157],{"class":428},"      tasks",[193,1159,797],{"class":210},[193,1161,1163],{"class":1162},"sfNiH"," true\n",[193,1165,1166],{"class":195,"line":247},[193,1167,1168],{"class":210},"    }\n",[193,1170,1171],{"class":195,"line":271},[193,1172,586],{"class":210},[193,1174,1175,1177],{"class":195,"line":276},[193,1176,592],{"class":210},[193,1178,481],{"class":217},[148,1180,1182],{"id":1181},"create-a-seed-task","Create a seed task",[184,1184,1187],{"className":186,"code":1185,"filename":1186,"language":188,"meta":189,"style":189},"import { db, schema } from '@nuxthub/db'\n\nexport default defineTask({\n  meta: {\n    name: 'db:seed',\n    description: 'Seed database with initial data'\n  },\n  async run() {\n    console.log('Seeding database...')\n\n    const users = [\n      {\n        name: 'John Doe',\n        email: 'john@example.com',\n        password: 'hashed_password',\n        avatar: 'https://i.pravatar.cc/150?img=1',\n        createdAt: new Date()\n      },\n      {\n        name: 'Jane Doe',\n        email: 'jane@example.com',\n        password: 'hashed_password',\n        avatar: 'https://i.pravatar.cc/150?img=2',\n        createdAt: new Date()\n      }\n    ]\n\n    await db.insert(schema.users).values(users)\n\n    return { result: 'Database seeded successfully' }\n  }\n})\n","server/tasks/seed.ts",[162,1188,1189,1211,1215,1228,1237,1254,1268,1273,1286,1307,1311,1322,1327,1344,1361,1378,1395,1411,1417,1422,1438,1454,1469,1485,1498,1504,1510,1515,1547,1552,1575,1580],{"__ignoreMap":189},[193,1190,1191,1193,1195,1197,1199,1201,1203,1205,1207,1209],{"class":195,"line":196},[193,1192,207],{"class":206},[193,1194,252],{"class":210},[193,1196,856],{"class":217},[193,1198,388],{"class":210},[193,1200,255],{"class":217},[193,1202,258],{"class":210},[193,1204,261],{"class":206},[193,1206,224],{"class":210},[193,1208,266],{"class":227},[193,1210,231],{"class":210},[193,1212,1213],{"class":195,"line":203},[193,1214,238],{"emptyLinePlaceholder":237},[193,1216,1217,1219,1221,1224,1226],{"class":195,"line":234},[193,1218,411],{"class":206},[193,1220,414],{"class":206},[193,1222,1223],{"class":417}," defineTask",[193,1225,420],{"class":217},[193,1227,423],{"class":210},[193,1229,1230,1233,1235],{"class":195,"line":241},[193,1231,1232],{"class":428},"  meta",[193,1234,797],{"class":210},[193,1236,446],{"class":210},[193,1238,1239,1242,1244,1246,1249,1251],{"class":195,"line":247},[193,1240,1241],{"class":428},"    name",[193,1243,797],{"class":210},[193,1245,224],{"class":210},[193,1247,1248],{"class":227},"db:seed",[193,1250,496],{"class":210},[193,1252,1253],{"class":210},",\n",[193,1255,1256,1259,1261,1263,1266],{"class":195,"line":271},[193,1257,1258],{"class":428},"    description",[193,1260,797],{"class":210},[193,1262,224],{"class":210},[193,1264,1265],{"class":227},"Seed database with initial data",[193,1267,231],{"class":210},[193,1269,1270],{"class":195,"line":276},[193,1271,1272],{"class":210},"  },\n",[193,1274,1275,1278,1281,1284],{"class":195,"line":282},[193,1276,1277],{"class":451},"  async",[193,1279,1280],{"class":428}," run",[193,1282,1283],{"class":210},"()",[193,1285,446],{"class":210},[193,1287,1288,1291,1293,1296,1298,1300,1303,1305],{"class":195,"line":537},[193,1289,1290],{"class":217},"    console",[193,1292,308],{"class":210},[193,1294,1295],{"class":417},"log",[193,1297,420],{"class":428},[193,1299,496],{"class":210},[193,1301,1302],{"class":227},"Seeding database...",[193,1304,496],{"class":210},[193,1306,481],{"class":428},[193,1308,1309],{"class":195,"line":575},[193,1310,238],{"emptyLinePlaceholder":237},[193,1312,1313,1315,1317,1319],{"class":195,"line":583},[193,1314,452],{"class":451},[193,1316,630],{"class":217},[193,1318,462],{"class":210},[193,1320,1321],{"class":428}," [\n",[193,1323,1324],{"class":195,"line":589},[193,1325,1326],{"class":210},"      {\n",[193,1328,1330,1333,1335,1337,1340,1342],{"class":195,"line":1329},13,[193,1331,1332],{"class":428},"        name",[193,1334,797],{"class":210},[193,1336,224],{"class":210},[193,1338,1339],{"class":227},"John Doe",[193,1341,496],{"class":210},[193,1343,1253],{"class":210},[193,1345,1347,1350,1352,1354,1357,1359],{"class":195,"line":1346},14,[193,1348,1349],{"class":428},"        email",[193,1351,797],{"class":210},[193,1353,224],{"class":210},[193,1355,1356],{"class":227},"john@example.com",[193,1358,496],{"class":210},[193,1360,1253],{"class":210},[193,1362,1364,1367,1369,1371,1374,1376],{"class":195,"line":1363},15,[193,1365,1366],{"class":428},"        password",[193,1368,797],{"class":210},[193,1370,224],{"class":210},[193,1372,1373],{"class":227},"hashed_password",[193,1375,496],{"class":210},[193,1377,1253],{"class":210},[193,1379,1381,1384,1386,1388,1391,1393],{"class":195,"line":1380},16,[193,1382,1383],{"class":428},"        avatar",[193,1385,797],{"class":210},[193,1387,224],{"class":210},[193,1389,1390],{"class":227},"https://i.pravatar.cc/150?img=1",[193,1392,496],{"class":210},[193,1394,1253],{"class":210},[193,1396,1398,1401,1403,1406,1409],{"class":195,"line":1397},17,[193,1399,1400],{"class":428},"        createdAt",[193,1402,797],{"class":210},[193,1404,1405],{"class":210}," new",[193,1407,1408],{"class":417}," Date",[193,1410,979],{"class":428},[193,1412,1414],{"class":195,"line":1413},18,[193,1415,1416],{"class":210},"      },\n",[193,1418,1420],{"class":195,"line":1419},19,[193,1421,1326],{"class":210},[193,1423,1425,1427,1429,1431,1434,1436],{"class":195,"line":1424},20,[193,1426,1332],{"class":428},[193,1428,797],{"class":210},[193,1430,224],{"class":210},[193,1432,1433],{"class":227},"Jane Doe",[193,1435,496],{"class":210},[193,1437,1253],{"class":210},[193,1439,1441,1443,1445,1447,1450,1452],{"class":195,"line":1440},21,[193,1442,1349],{"class":428},[193,1444,797],{"class":210},[193,1446,224],{"class":210},[193,1448,1449],{"class":227},"jane@example.com",[193,1451,496],{"class":210},[193,1453,1253],{"class":210},[193,1455,1457,1459,1461,1463,1465,1467],{"class":195,"line":1456},22,[193,1458,1366],{"class":428},[193,1460,797],{"class":210},[193,1462,224],{"class":210},[193,1464,1373],{"class":227},[193,1466,496],{"class":210},[193,1468,1253],{"class":210},[193,1470,1472,1474,1476,1478,1481,1483],{"class":195,"line":1471},23,[193,1473,1383],{"class":428},[193,1475,797],{"class":210},[193,1477,224],{"class":210},[193,1479,1480],{"class":227},"https://i.pravatar.cc/150?img=2",[193,1482,496],{"class":210},[193,1484,1253],{"class":210},[193,1486,1488,1490,1492,1494,1496],{"class":195,"line":1487},24,[193,1489,1400],{"class":428},[193,1491,797],{"class":210},[193,1493,1405],{"class":210},[193,1495,1408],{"class":417},[193,1497,979],{"class":428},[193,1499,1501],{"class":195,"line":1500},25,[193,1502,1503],{"class":210},"      }\n",[193,1505,1507],{"class":195,"line":1506},26,[193,1508,1509],{"class":428},"    ]\n",[193,1511,1513],{"class":195,"line":1512},27,[193,1514,238],{"emptyLinePlaceholder":237},[193,1516,1518,1521,1523,1525,1527,1529,1531,1533,1535,1537,1539,1541,1543,1545],{"class":195,"line":1517},28,[193,1519,1520],{"class":206},"    await",[193,1522,856],{"class":217},[193,1524,308],{"class":210},[193,1526,947],{"class":417},[193,1528,420],{"class":428},[193,1530,952],{"class":217},[193,1532,308],{"class":210},[193,1534,957],{"class":217},[193,1536,443],{"class":428},[193,1538,308],{"class":210},[193,1540,964],{"class":417},[193,1542,420],{"class":428},[193,1544,957],{"class":217},[193,1546,481],{"class":428},[193,1548,1550],{"class":195,"line":1549},29,[193,1551,238],{"emptyLinePlaceholder":237},[193,1553,1555,1558,1560,1563,1565,1567,1570,1572],{"class":195,"line":1554},30,[193,1556,1557],{"class":206},"    return",[193,1559,252],{"class":210},[193,1561,1562],{"class":428}," result",[193,1564,797],{"class":210},[193,1566,224],{"class":210},[193,1568,1569],{"class":227},"Database seeded successfully",[193,1571,496],{"class":210},[193,1573,1574],{"class":210}," }\n",[193,1576,1578],{"class":195,"line":1577},31,[193,1579,586],{"class":210},[193,1581,1583,1585],{"class":195,"line":1582},32,[193,1584,592],{"class":210},[193,1586,481],{"class":217},[148,1588,1590],{"id":1589},"execute-the-task","Execute the task",[144,1592,1593,1594,1597,1598,1600],{},"Open the ",[162,1595,1596],{},"Tasks"," tab in Nuxt DevTools and click on the ",[162,1599,1248],{}," task.",[1602,1603,1604],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":189,"searchDepth":203,"depth":203,"links":1606},[1607,1608,1609,1610,1611],{"id":150,"depth":234,"text":151},{"id":324,"depth":234,"text":325},{"id":362,"depth":234,"text":363},{"id":597,"depth":234,"text":598},{"id":1098,"depth":203,"text":1099,"children":1612},[1613,1614,1615],{"id":1114,"depth":234,"text":1115},{"id":1181,"depth":234,"text":1182},{"id":1589,"depth":234,"text":1590},"Define and manage your database schema with Drizzle ORM in Nuxt, including tables, columns, relations, and type-safe models.","md",null,{},{"title":42},{"title":139,"description":1616},"QOfMAxcWtazx-tGe27TT3cR_FUEZo-J9BRoXflxPXWo",[1624,1626],{"title":40,"path":36,"stem":37,"description":1625,"children":-1},"Setup your SQL database in Nuxt with Drizzle ORM, including installation, environment setup, and database connection.",{"title":46,"path":47,"stem":48,"description":1627,"children":-1},"Learn how to read and write data using Drizzle ORM in Nuxt, including filtering, joining, and aggregating relational data safely and efficiently.",1774053874900]