[{"data":1,"prerenderedAt":1521},["ShallowReactive",2],{"navigation":3,"/docs/database/query":137,"/docs/database/query-surround":1516},[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":1509,"extension":1510,"links":1511,"meta":1512,"navigation":1513,"path":47,"seo":1514,"stem":48,"__hash__":1515},"docs/docs/2.database/3.query.md","Database Queries",{"type":141,"value":142,"toc":1492},"minimark",[143,147,152,155,164,178,225,235,242,248,275,285,289,439,450,454,641,648,652,849,856,860,1113,1120,1124,1133,1137,1143,1409,1413,1416,1437,1446,1450,1488],[144,145,146],"p",{},"Now that you have your database schema and migrations set up, you can start querying your database.",[148,149,151],"h2",{"id":150},"importing-the-database","Importing the database",[144,153,154],{},"NuxtHub provides two ways to import the database client:",[156,157,159,160],"h3",{"id":158},"recommended-nuxthubdb","Recommended: ",[161,162,163],"code",{},"@nuxthub/db",[144,165,166,167,169,170,177],{},"Use ",[161,168,163],{}," to import the database client. This works everywhere, including in Nuxt server routes and external bundlers like ",[171,172,176],"a",{"href":173,"rel":174},"https://useworkflow.dev",[175],"nofollow","Workflow",":",[179,180,185],"pre",{"className":181,"code":182,"language":183,"meta":184,"style":184},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { db, schema } from '@nuxthub/db'\n","ts","",[161,186,187],{"__ignoreMap":184},[188,189,192,196,200,204,207,210,213,216,219,222],"span",{"class":190,"line":191},"line",1,[188,193,195],{"class":194},"s7zQu","import",[188,197,199],{"class":198},"sMK4o"," {",[188,201,203],{"class":202},"sTEyZ"," db",[188,205,206],{"class":198},",",[188,208,209],{"class":202}," schema",[188,211,212],{"class":198}," }",[188,214,215],{"class":194}," from",[188,217,218],{"class":198}," '",[188,220,163],{"class":221},"sfazB",[188,223,224],{"class":198},"'\n",[226,227,229,230,234],"tip",{"icon":228},"i-lucide-sparkles","This is the ",[231,232,233],"strong",{},"recommended approach"," as it works with both Nuxt and external tools that bundle your code independently.",[156,236,238,239],{"id":237},"legacy-hubdb","Legacy: ",[161,240,241],{},"hub:db",[144,243,244,245,247],{},"The virtual module ",[161,246,241],{}," is still supported for backwards compatibility (Nuxt only):",[179,249,251],{"className":181,"code":250,"language":183,"meta":184,"style":184},"import { db, schema } from 'hub:db'\n",[161,252,253],{"__ignoreMap":184},[188,254,255,257,259,261,263,265,267,269,271,273],{"class":190,"line":191},[188,256,195],{"class":194},[188,258,199],{"class":198},[188,260,203],{"class":202},[188,262,206],{"class":198},[188,264,209],{"class":202},[188,266,212],{"class":198},[188,268,215],{"class":194},[188,270,218],{"class":198},[188,272,241],{"class":221},[188,274,224],{"class":198},[226,276,277,280,281,284],{},[161,278,279],{},"db"," and ",[161,282,283],{},"schema"," are auto-imported on the server-side, so you can use them directly without importing.",[148,286,288],{"id":287},"sql-select","SQL Select",[179,290,293],{"className":181,"code":291,"filename":292,"language":183,"meta":184,"style":184},"import { db, schema } from '@nuxthub/db'\n\nexport default eventHandler(async (event) => {\n  return await db.query.users.findMany()\n  // or\n  return await db.select().from(schema.users)\n})\n","server/api/users.get.ts",[161,294,295,317,324,360,391,398,431],{"__ignoreMap":184},[188,296,297,299,301,303,305,307,309,311,313,315],{"class":190,"line":191},[188,298,195],{"class":194},[188,300,199],{"class":198},[188,302,203],{"class":202},[188,304,206],{"class":198},[188,306,209],{"class":202},[188,308,212],{"class":198},[188,310,215],{"class":194},[188,312,218],{"class":198},[188,314,163],{"class":221},[188,316,224],{"class":198},[188,318,320],{"class":190,"line":319},2,[188,321,323],{"emptyLinePlaceholder":322},true,"\n",[188,325,327,330,333,337,340,344,347,351,354,357],{"class":190,"line":326},3,[188,328,329],{"class":194},"export",[188,331,332],{"class":194}," default",[188,334,336],{"class":335},"s2Zo4"," eventHandler",[188,338,339],{"class":202},"(",[188,341,343],{"class":342},"spNyl","async",[188,345,346],{"class":198}," (",[188,348,350],{"class":349},"sHdIc","event",[188,352,353],{"class":198},")",[188,355,356],{"class":342}," =>",[188,358,359],{"class":198}," {\n",[188,361,363,366,369,371,374,377,379,382,384,387],{"class":190,"line":362},4,[188,364,365],{"class":194},"  return",[188,367,368],{"class":194}," await",[188,370,203],{"class":202},[188,372,373],{"class":198},".",[188,375,376],{"class":202},"query",[188,378,373],{"class":198},[188,380,381],{"class":202},"users",[188,383,373],{"class":198},[188,385,386],{"class":335},"findMany",[188,388,390],{"class":389},"swJcz","()\n",[188,392,394],{"class":190,"line":393},5,[188,395,397],{"class":396},"sHwdD","  // or\n",[188,399,401,403,405,407,409,412,415,417,420,422,424,426,428],{"class":190,"line":400},6,[188,402,365],{"class":194},[188,404,368],{"class":194},[188,406,203],{"class":202},[188,408,373],{"class":198},[188,410,411],{"class":335},"select",[188,413,414],{"class":389},"()",[188,416,373],{"class":198},[188,418,419],{"class":335},"from",[188,421,339],{"class":389},[188,423,283],{"class":202},[188,425,373],{"class":198},[188,427,381],{"class":202},[188,429,430],{"class":389},")\n",[188,432,434,437],{"class":190,"line":433},7,[188,435,436],{"class":198},"}",[188,438,430],{"class":202},[440,441,444,445,449],"callout",{":external":442,"to":443},"true","https://orm.drizzle.team/docs/select","Learn more about ",[171,446,448],{"href":443,"rel":447},[175],"Drizzle ORM select"," on the Drizzle documentation.",[148,451,453],{"id":452},"sql-insert","SQL Insert",[179,455,458],{"className":181,"code":456,"filename":457,"language":183,"meta":184,"style":184},"import { db, schema } from '@nuxthub/db'\n\nexport default eventHandler(async (event) => {\n  const { name, email } = await readBody(event)\n\n  return await db\n    .insert(schema.users)\n    .values({\n      name,\n      email,\n      createdAt: new Date()\n    })\n    .returning()\n})\n","server/api/users.post.ts",[161,459,460,482,486,508,539,543,552,570,583,592,600,616,624,634],{"__ignoreMap":184},[188,461,462,464,466,468,470,472,474,476,478,480],{"class":190,"line":191},[188,463,195],{"class":194},[188,465,199],{"class":198},[188,467,203],{"class":202},[188,469,206],{"class":198},[188,471,209],{"class":202},[188,473,212],{"class":198},[188,475,215],{"class":194},[188,477,218],{"class":198},[188,479,163],{"class":221},[188,481,224],{"class":198},[188,483,484],{"class":190,"line":319},[188,485,323],{"emptyLinePlaceholder":322},[188,487,488,490,492,494,496,498,500,502,504,506],{"class":190,"line":326},[188,489,329],{"class":194},[188,491,332],{"class":194},[188,493,336],{"class":335},[188,495,339],{"class":202},[188,497,343],{"class":342},[188,499,346],{"class":198},[188,501,350],{"class":349},[188,503,353],{"class":198},[188,505,356],{"class":342},[188,507,359],{"class":198},[188,509,510,513,515,518,520,523,525,528,530,533,535,537],{"class":190,"line":362},[188,511,512],{"class":342},"  const",[188,514,199],{"class":198},[188,516,517],{"class":202}," name",[188,519,206],{"class":198},[188,521,522],{"class":202}," email",[188,524,212],{"class":198},[188,526,527],{"class":198}," =",[188,529,368],{"class":194},[188,531,532],{"class":335}," readBody",[188,534,339],{"class":389},[188,536,350],{"class":202},[188,538,430],{"class":389},[188,540,541],{"class":190,"line":393},[188,542,323],{"emptyLinePlaceholder":322},[188,544,545,547,549],{"class":190,"line":400},[188,546,365],{"class":194},[188,548,368],{"class":194},[188,550,551],{"class":202}," db\n",[188,553,554,557,560,562,564,566,568],{"class":190,"line":433},[188,555,556],{"class":198},"    .",[188,558,559],{"class":335},"insert",[188,561,339],{"class":389},[188,563,283],{"class":202},[188,565,373],{"class":198},[188,567,381],{"class":202},[188,569,430],{"class":389},[188,571,573,575,578,580],{"class":190,"line":572},8,[188,574,556],{"class":198},[188,576,577],{"class":335},"values",[188,579,339],{"class":389},[188,581,582],{"class":198},"{\n",[188,584,586,589],{"class":190,"line":585},9,[188,587,588],{"class":202},"      name",[188,590,591],{"class":198},",\n",[188,593,595,598],{"class":190,"line":594},10,[188,596,597],{"class":202},"      email",[188,599,591],{"class":198},[188,601,603,606,608,611,614],{"class":190,"line":602},11,[188,604,605],{"class":389},"      createdAt",[188,607,177],{"class":198},[188,609,610],{"class":198}," new",[188,612,613],{"class":335}," Date",[188,615,390],{"class":389},[188,617,619,622],{"class":190,"line":618},12,[188,620,621],{"class":198},"    }",[188,623,430],{"class":389},[188,625,627,629,632],{"class":190,"line":626},13,[188,628,556],{"class":198},[188,630,631],{"class":335},"returning",[188,633,390],{"class":389},[188,635,637,639],{"class":190,"line":636},14,[188,638,436],{"class":198},[188,640,430],{"class":202},[440,642,444,644,449],{":external":442,"to":643},"https://orm.drizzle.team/docs/insert",[171,645,647],{"href":643,"rel":646},[175],"Drizzle ORM insert",[148,649,651],{"id":650},"sql-update","SQL Update",[179,653,656],{"className":181,"code":654,"filename":655,"language":183,"meta":184,"style":184},"import { db, schema } from '@nuxthub/db'\n\nexport default eventHandler(async (event) => {\n  const { id } = getRouterParams(event)\n  const { name } = await readBody(event)\n\n  return await db\n    .update(schema.users)\n    .set({ name })\n    .where(eq(tables.users.id, Number(id)))\n    .returning()\n})\n","server/api/users/[id].patch.ts",[161,657,658,680,684,706,728,750,754,762,779,797,835,843],{"__ignoreMap":184},[188,659,660,662,664,666,668,670,672,674,676,678],{"class":190,"line":191},[188,661,195],{"class":194},[188,663,199],{"class":198},[188,665,203],{"class":202},[188,667,206],{"class":198},[188,669,209],{"class":202},[188,671,212],{"class":198},[188,673,215],{"class":194},[188,675,218],{"class":198},[188,677,163],{"class":221},[188,679,224],{"class":198},[188,681,682],{"class":190,"line":319},[188,683,323],{"emptyLinePlaceholder":322},[188,685,686,688,690,692,694,696,698,700,702,704],{"class":190,"line":326},[188,687,329],{"class":194},[188,689,332],{"class":194},[188,691,336],{"class":335},[188,693,339],{"class":202},[188,695,343],{"class":342},[188,697,346],{"class":198},[188,699,350],{"class":349},[188,701,353],{"class":198},[188,703,356],{"class":342},[188,705,359],{"class":198},[188,707,708,710,712,715,717,719,722,724,726],{"class":190,"line":362},[188,709,512],{"class":342},[188,711,199],{"class":198},[188,713,714],{"class":202}," id",[188,716,212],{"class":198},[188,718,527],{"class":198},[188,720,721],{"class":335}," getRouterParams",[188,723,339],{"class":389},[188,725,350],{"class":202},[188,727,430],{"class":389},[188,729,730,732,734,736,738,740,742,744,746,748],{"class":190,"line":393},[188,731,512],{"class":342},[188,733,199],{"class":198},[188,735,517],{"class":202},[188,737,212],{"class":198},[188,739,527],{"class":198},[188,741,368],{"class":194},[188,743,532],{"class":335},[188,745,339],{"class":389},[188,747,350],{"class":202},[188,749,430],{"class":389},[188,751,752],{"class":190,"line":400},[188,753,323],{"emptyLinePlaceholder":322},[188,755,756,758,760],{"class":190,"line":433},[188,757,365],{"class":194},[188,759,368],{"class":194},[188,761,551],{"class":202},[188,763,764,766,769,771,773,775,777],{"class":190,"line":572},[188,765,556],{"class":198},[188,767,768],{"class":335},"update",[188,770,339],{"class":389},[188,772,283],{"class":202},[188,774,373],{"class":198},[188,776,381],{"class":202},[188,778,430],{"class":389},[188,780,781,783,786,788,791,793,795],{"class":190,"line":585},[188,782,556],{"class":198},[188,784,785],{"class":335},"set",[188,787,339],{"class":389},[188,789,790],{"class":198},"{",[188,792,517],{"class":202},[188,794,212],{"class":198},[188,796,430],{"class":389},[188,798,799,801,804,806,809,811,814,816,818,820,823,825,828,830,832],{"class":190,"line":594},[188,800,556],{"class":198},[188,802,803],{"class":335},"where",[188,805,339],{"class":389},[188,807,808],{"class":335},"eq",[188,810,339],{"class":389},[188,812,813],{"class":202},"tables",[188,815,373],{"class":198},[188,817,381],{"class":202},[188,819,373],{"class":198},[188,821,822],{"class":202},"id",[188,824,206],{"class":198},[188,826,827],{"class":335}," Number",[188,829,339],{"class":389},[188,831,822],{"class":202},[188,833,834],{"class":389},")))\n",[188,836,837,839,841],{"class":190,"line":602},[188,838,556],{"class":198},[188,840,631],{"class":335},[188,842,390],{"class":389},[188,844,845,847],{"class":190,"line":618},[188,846,436],{"class":198},[188,848,430],{"class":202},[440,850,444,852,449],{":external":442,"to":851},"https://orm.drizzle.team/docs/update",[171,853,855],{"href":851,"rel":854},[175],"Drizzle ORM update",[148,857,859],{"id":858},"sql-delete","SQL Delete",[179,861,864],{"className":181,"code":862,"filename":863,"language":183,"meta":184,"style":184},"import { db, schema } from '@nuxthub/db'\n\nexport default eventHandler(async (event) => {\n  const { id } = getRouterParams(event)\n\n  const deletedUser = await db\n    .delete(schema.users)\n    .where(eq(schema.users.id, Number(id)))\n    .returning()\n\n  if (!deletedUser) {\n    throw createError({\n      statusCode: 404,\n      message: 'User not found'\n    })\n  }\n\n  return { deleted: true }\n})\n","server/api/users/[id].delete.ts",[161,865,866,888,892,914,934,938,951,968,1000,1008,1012,1030,1042,1055,1069,1076,1082,1087,1106],{"__ignoreMap":184},[188,867,868,870,872,874,876,878,880,882,884,886],{"class":190,"line":191},[188,869,195],{"class":194},[188,871,199],{"class":198},[188,873,203],{"class":202},[188,875,206],{"class":198},[188,877,209],{"class":202},[188,879,212],{"class":198},[188,881,215],{"class":194},[188,883,218],{"class":198},[188,885,163],{"class":221},[188,887,224],{"class":198},[188,889,890],{"class":190,"line":319},[188,891,323],{"emptyLinePlaceholder":322},[188,893,894,896,898,900,902,904,906,908,910,912],{"class":190,"line":326},[188,895,329],{"class":194},[188,897,332],{"class":194},[188,899,336],{"class":335},[188,901,339],{"class":202},[188,903,343],{"class":342},[188,905,346],{"class":198},[188,907,350],{"class":349},[188,909,353],{"class":198},[188,911,356],{"class":342},[188,913,359],{"class":198},[188,915,916,918,920,922,924,926,928,930,932],{"class":190,"line":362},[188,917,512],{"class":342},[188,919,199],{"class":198},[188,921,714],{"class":202},[188,923,212],{"class":198},[188,925,527],{"class":198},[188,927,721],{"class":335},[188,929,339],{"class":389},[188,931,350],{"class":202},[188,933,430],{"class":389},[188,935,936],{"class":190,"line":393},[188,937,323],{"emptyLinePlaceholder":322},[188,939,940,942,945,947,949],{"class":190,"line":400},[188,941,512],{"class":342},[188,943,944],{"class":202}," deletedUser",[188,946,527],{"class":198},[188,948,368],{"class":194},[188,950,551],{"class":202},[188,952,953,955,958,960,962,964,966],{"class":190,"line":433},[188,954,556],{"class":198},[188,956,957],{"class":335},"delete",[188,959,339],{"class":389},[188,961,283],{"class":202},[188,963,373],{"class":198},[188,965,381],{"class":202},[188,967,430],{"class":389},[188,969,970,972,974,976,978,980,982,984,986,988,990,992,994,996,998],{"class":190,"line":572},[188,971,556],{"class":198},[188,973,803],{"class":335},[188,975,339],{"class":389},[188,977,808],{"class":335},[188,979,339],{"class":389},[188,981,283],{"class":202},[188,983,373],{"class":198},[188,985,381],{"class":202},[188,987,373],{"class":198},[188,989,822],{"class":202},[188,991,206],{"class":198},[188,993,827],{"class":335},[188,995,339],{"class":389},[188,997,822],{"class":202},[188,999,834],{"class":389},[188,1001,1002,1004,1006],{"class":190,"line":585},[188,1003,556],{"class":198},[188,1005,631],{"class":335},[188,1007,390],{"class":389},[188,1009,1010],{"class":190,"line":594},[188,1011,323],{"emptyLinePlaceholder":322},[188,1013,1014,1017,1019,1022,1025,1028],{"class":190,"line":602},[188,1015,1016],{"class":194},"  if",[188,1018,346],{"class":389},[188,1020,1021],{"class":198},"!",[188,1023,1024],{"class":202},"deletedUser",[188,1026,1027],{"class":389},") ",[188,1029,582],{"class":198},[188,1031,1032,1035,1038,1040],{"class":190,"line":618},[188,1033,1034],{"class":194},"    throw",[188,1036,1037],{"class":335}," createError",[188,1039,339],{"class":389},[188,1041,582],{"class":198},[188,1043,1044,1047,1049,1053],{"class":190,"line":626},[188,1045,1046],{"class":389},"      statusCode",[188,1048,177],{"class":198},[188,1050,1052],{"class":1051},"sbssI"," 404",[188,1054,591],{"class":198},[188,1056,1057,1060,1062,1064,1067],{"class":190,"line":636},[188,1058,1059],{"class":389},"      message",[188,1061,177],{"class":198},[188,1063,218],{"class":198},[188,1065,1066],{"class":221},"User not found",[188,1068,224],{"class":198},[188,1070,1072,1074],{"class":190,"line":1071},15,[188,1073,621],{"class":198},[188,1075,430],{"class":389},[188,1077,1079],{"class":190,"line":1078},16,[188,1080,1081],{"class":198},"  }\n",[188,1083,1085],{"class":190,"line":1084},17,[188,1086,323],{"emptyLinePlaceholder":322},[188,1088,1090,1092,1094,1097,1099,1103],{"class":190,"line":1089},18,[188,1091,365],{"class":194},[188,1093,199],{"class":198},[188,1095,1096],{"class":389}," deleted",[188,1098,177],{"class":198},[188,1100,1102],{"class":1101},"sfNiH"," true",[188,1104,1105],{"class":198}," }\n",[188,1107,1109,1111],{"class":190,"line":1108},19,[188,1110,436],{"class":198},[188,1112,430],{"class":202},[440,1114,444,1116,449],{":external":442,"to":1115},"https://orm.drizzle.team/docs/delete",[171,1117,1119],{"href":1115,"rel":1118},[175],"Drizzle ORM delete",[148,1121,1123],{"id":1122},"using-with-external-bundlers","Using with external bundlers",[144,1125,1126,1127,1129,1130,373],{},"The ",[161,1128,163],{}," import works seamlessly with external tools that bundle your code independently, such as ",[171,1131,176],{"href":173,"rel":1132},[175],[156,1134,1136],{"id":1135},"example-with-workflow","Example with Workflow",[144,1138,1139,1142],{},[171,1140,176],{"href":173,"rel":1141},[175]," is a library for building and running durable, reliable, and scalable background jobs in TypeScript. Here's how to use NuxtHub Database with Workflow:",[179,1144,1147],{"className":181,"code":1145,"filename":1146,"language":183,"meta":184,"style":184},"import { db, schema } from '@nuxthub/db'\nimport { lt } from 'drizzle-orm'\n\nexport default async function cleanupInactiveUsers() {\n  // Delete users who haven't logged in for 90 days\n  const ninetyDaysAgo = new Date(Date.now() - 90 * 24 * 60 * 60 * 1000)\n\n  const deleted = await db\n    .delete(schema.users)\n    .where(lt(schema.users.lastLoginAt, ninetyDaysAgo))\n    .returning()\n\n  return {\n    deletedCount: deleted.length,\n    deletedUserIds: deleted.map(u => u.id)\n  }\n}\n","workflow/tasks/cleanup-inactive-users.ts",[161,1148,1149,1171,1191,1195,1214,1219,1273,1277,1289,1305,1336,1344,1348,1354,1370,1400,1404],{"__ignoreMap":184},[188,1150,1151,1153,1155,1157,1159,1161,1163,1165,1167,1169],{"class":190,"line":191},[188,1152,195],{"class":194},[188,1154,199],{"class":198},[188,1156,203],{"class":202},[188,1158,206],{"class":198},[188,1160,209],{"class":202},[188,1162,212],{"class":198},[188,1164,215],{"class":194},[188,1166,218],{"class":198},[188,1168,163],{"class":221},[188,1170,224],{"class":198},[188,1172,1173,1175,1177,1180,1182,1184,1186,1189],{"class":190,"line":319},[188,1174,195],{"class":194},[188,1176,199],{"class":198},[188,1178,1179],{"class":202}," lt",[188,1181,212],{"class":198},[188,1183,215],{"class":194},[188,1185,218],{"class":198},[188,1187,1188],{"class":221},"drizzle-orm",[188,1190,224],{"class":198},[188,1192,1193],{"class":190,"line":326},[188,1194,323],{"emptyLinePlaceholder":322},[188,1196,1197,1199,1201,1204,1207,1210,1212],{"class":190,"line":362},[188,1198,329],{"class":194},[188,1200,332],{"class":194},[188,1202,1203],{"class":342}," async",[188,1205,1206],{"class":342}," function",[188,1208,1209],{"class":335}," cleanupInactiveUsers",[188,1211,414],{"class":198},[188,1213,359],{"class":198},[188,1215,1216],{"class":190,"line":393},[188,1217,1218],{"class":396},"  // Delete users who haven't logged in for 90 days\n",[188,1220,1221,1223,1226,1228,1230,1232,1234,1237,1239,1242,1245,1248,1251,1254,1257,1259,1262,1264,1266,1268,1271],{"class":190,"line":400},[188,1222,512],{"class":342},[188,1224,1225],{"class":202}," ninetyDaysAgo",[188,1227,527],{"class":198},[188,1229,610],{"class":198},[188,1231,613],{"class":335},[188,1233,339],{"class":389},[188,1235,1236],{"class":202},"Date",[188,1238,373],{"class":198},[188,1240,1241],{"class":335},"now",[188,1243,1244],{"class":389},"() ",[188,1246,1247],{"class":198},"-",[188,1249,1250],{"class":1051}," 90",[188,1252,1253],{"class":198}," *",[188,1255,1256],{"class":1051}," 24",[188,1258,1253],{"class":198},[188,1260,1261],{"class":1051}," 60",[188,1263,1253],{"class":198},[188,1265,1261],{"class":1051},[188,1267,1253],{"class":198},[188,1269,1270],{"class":1051}," 1000",[188,1272,430],{"class":389},[188,1274,1275],{"class":190,"line":433},[188,1276,323],{"emptyLinePlaceholder":322},[188,1278,1279,1281,1283,1285,1287],{"class":190,"line":572},[188,1280,512],{"class":342},[188,1282,1096],{"class":202},[188,1284,527],{"class":198},[188,1286,368],{"class":194},[188,1288,551],{"class":202},[188,1290,1291,1293,1295,1297,1299,1301,1303],{"class":190,"line":585},[188,1292,556],{"class":198},[188,1294,957],{"class":335},[188,1296,339],{"class":389},[188,1298,283],{"class":202},[188,1300,373],{"class":198},[188,1302,381],{"class":202},[188,1304,430],{"class":389},[188,1306,1307,1309,1311,1313,1316,1318,1320,1322,1324,1326,1329,1331,1333],{"class":190,"line":594},[188,1308,556],{"class":198},[188,1310,803],{"class":335},[188,1312,339],{"class":389},[188,1314,1315],{"class":335},"lt",[188,1317,339],{"class":389},[188,1319,283],{"class":202},[188,1321,373],{"class":198},[188,1323,381],{"class":202},[188,1325,373],{"class":198},[188,1327,1328],{"class":202},"lastLoginAt",[188,1330,206],{"class":198},[188,1332,1225],{"class":202},[188,1334,1335],{"class":389},"))\n",[188,1337,1338,1340,1342],{"class":190,"line":602},[188,1339,556],{"class":198},[188,1341,631],{"class":335},[188,1343,390],{"class":389},[188,1345,1346],{"class":190,"line":618},[188,1347,323],{"emptyLinePlaceholder":322},[188,1349,1350,1352],{"class":190,"line":626},[188,1351,365],{"class":194},[188,1353,359],{"class":198},[188,1355,1356,1359,1361,1363,1365,1368],{"class":190,"line":636},[188,1357,1358],{"class":389},"    deletedCount",[188,1360,177],{"class":198},[188,1362,1096],{"class":202},[188,1364,373],{"class":198},[188,1366,1367],{"class":202},"length",[188,1369,591],{"class":198},[188,1371,1372,1375,1377,1379,1381,1384,1386,1389,1391,1394,1396,1398],{"class":190,"line":1071},[188,1373,1374],{"class":389},"    deletedUserIds",[188,1376,177],{"class":198},[188,1378,1096],{"class":202},[188,1380,373],{"class":198},[188,1382,1383],{"class":335},"map",[188,1385,339],{"class":389},[188,1387,1388],{"class":349},"u",[188,1390,356],{"class":342},[188,1392,1393],{"class":202}," u",[188,1395,373],{"class":198},[188,1397,822],{"class":202},[188,1399,430],{"class":389},[188,1401,1402],{"class":190,"line":1078},[188,1403,1081],{"class":198},[188,1405,1406],{"class":190,"line":1084},[188,1407,1408],{"class":198},"}\n",[156,1410,1412],{"id":1411},"how-it-works","How it works",[144,1414,1415],{},"When you build your Nuxt application:",[1417,1418,1419,1426,1429,1432],"ol",{},[1420,1421,1422,1423],"li",{},"NuxtHub generates the database client at ",[161,1424,1425],{},"node_modules/@nuxthub/db/",[1420,1427,1428],{},"This physical module contains your compiled database schema and client",[1420,1430,1431],{},"External bundlers like Workflow can import and bundle this module directly",[1420,1433,1126,1434,1436],{},[161,1435,241],{}," virtual module remains available for Nuxt server routes (backwards compatibility)",[226,1438,1126,1440,1442,1443,373],{"icon":1439},"i-lucide-info",[161,1441,163],{}," package is auto-generated during development and build. You don't need to add it to your ",[161,1444,1445],{},"package.json",[156,1447,1449],{"id":1448},"benefits","Benefits",[1451,1452,1453,1459,1465,1478],"ul",{},[1420,1454,1455,1458],{},[231,1456,1457],{},"Universal compatibility",": Works with Nuxt server routes, Workflow tasks, and any other TypeScript code",[1420,1460,1461,1464],{},[231,1462,1463],{},"Type-safe",": Full TypeScript support with auto-generated types",[1420,1466,1467,1470,1471,1474,1475],{},[231,1468,1469],{},"No configuration",": Automatically synced when you run ",[161,1472,1473],{},"nuxt dev"," or ",[161,1476,1477],{},"nuxt build",[1420,1479,1480,1483,1484,1487],{},[231,1481,1482],{},"Single source of truth",": Your ",[161,1485,1486],{},"server/db/schema.ts"," files are the only place you define your schema",[1489,1490,1491],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":184,"searchDepth":319,"depth":319,"links":1493},[1494,1500,1501,1502,1503,1504],{"id":150,"depth":319,"text":151,"children":1495},[1496,1498],{"id":158,"depth":326,"text":1497},"Recommended: @nuxthub/db",{"id":237,"depth":326,"text":1499},"Legacy: hub:db",{"id":287,"depth":319,"text":288},{"id":452,"depth":319,"text":453},{"id":650,"depth":319,"text":651},{"id":858,"depth":319,"text":859},{"id":1122,"depth":319,"text":1123,"children":1505},[1506,1507,1508],{"id":1135,"depth":326,"text":1136},{"id":1411,"depth":326,"text":1412},{"id":1448,"depth":326,"text":1449},"Learn how to read and write data using Drizzle ORM in Nuxt, including filtering, joining, and aggregating relational data safely and efficiently.","md",null,{},{"title":46},{"title":139,"description":1509},"sHVRFtBx5PSsFg-_hVxLYgUasxmpbhPe0VeyslJWIUw",[1517,1519],{"title":42,"path":43,"stem":44,"description":1518,"children":-1},"Define and manage your database schema with Drizzle ORM in Nuxt, including tables, columns, relations, and type-safe models.",{"title":50,"path":51,"stem":52,"description":1520,"children":-1},"Manage database schema changes in Nuxt with Drizzle ORM migrations, including creating, applying, and tracking migration files safely.",1774053874960]