[{"data":1,"prerenderedAt":1672},["ShallowReactive",2],{"navigation":3,"\u002Fguide\u002Fdevtools\u002Factions":208,"\u002Fguide\u002Fdevtools\u002Factions-surround":1667},[4,98,175],{"title":5,"path":6,"stem":7,"children":8,"icon":97},"Guide","\u002Fguide","1.guide\u002F1.index",[9,12,17,22,46,61,79],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Installation","\u002Fguide\u002Finstallation","1.guide\u002F2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Quick start","\u002Fguide\u002Fquick-start","1.guide\u002F3.quick-start","i-lucide-rocket",{"title":23,"path":24,"stem":25,"children":26,"icon":45},"Server","\u002Fguide\u002Fserver","1.guide\u002F4.server\u002F1.index",[27,30,35,40],{"title":28,"path":24,"stem":25,"icon":29},"Usage","i-lucide-server",{"title":31,"path":32,"stem":33,"icon":34},"Config file","\u002Fguide\u002Fserver\u002Fconfig-file","1.guide\u002F4.server\u002F2.config-file","i-lucide-file-cog",{"title":36,"path":37,"stem":38,"icon":39},"Options","\u002Fguide\u002Fserver\u002Foptions","1.guide\u002F4.server\u002F3.options","i-lucide-settings",{"title":41,"path":42,"stem":43,"icon":44},"Advanced","\u002Fguide\u002Fserver\u002Fadvanced","1.guide\u002F4.server\u002F4.advanced","i-lucide-flask-conical",false,{"title":47,"path":48,"stem":49,"children":50,"icon":45},"Client","\u002Fguide\u002Fclient","1.guide\u002F5.client\u002F1.index",[51,53,58],{"title":28,"path":48,"stem":49,"icon":52},"i-lucide-monitor-smartphone",{"title":54,"path":55,"stem":56,"icon":57},"Live queries","\u002Fguide\u002Fclient\u002Flive-queries","1.guide\u002F5.client\u002F2.live-queries","i-lucide-radio",{"title":41,"path":59,"stem":60,"icon":44},"\u002Fguide\u002Fclient\u002Fadvanced","1.guide\u002F5.client\u002F3.advanced",{"title":62,"path":63,"stem":64,"children":65,"icon":45},"Development socket","\u002Fguide\u002Fsocket","1.guide\u002F6.socket\u002F1.index",[66,68,71,74],{"title":28,"path":63,"stem":64,"icon":67},"i-lucide-plug",{"title":36,"path":69,"stem":70,"icon":39},"\u002Fguide\u002Fsocket\u002Foptions","1.guide\u002F6.socket\u002F2.options",{"title":41,"path":72,"stem":73,"icon":44},"\u002Fguide\u002Fsocket\u002Fadvanced","1.guide\u002F6.socket\u002F3.advanced",{"title":75,"path":76,"stem":77,"icon":78},"PGlite in dev, Postgres in prod","\u002Fguide\u002Fsocket\u002Fdevelopment-only","1.guide\u002F6.socket\u002F4.development-only","i-lucide-cloud-upload",{"title":80,"path":81,"stem":82,"children":83,"icon":45},"DevTools & tooling","\u002Fguide\u002Fdevtools","1.guide\u002F7.devtools\u002F1.index",[84,87,92],{"title":85,"path":81,"stem":82,"icon":86},"DevTools tab","i-lucide-wrench",{"title":88,"path":89,"stem":90,"icon":91},"Actions","\u002Fguide\u002Fdevtools\u002Factions","1.guide\u002F7.devtools\u002F2.actions","i-lucide-zap",{"title":93,"path":94,"stem":95,"icon":96},"Terminal","\u002Fguide\u002Fdevtools\u002Fterminal","1.guide\u002F7.devtools\u002F3.terminal","i-lucide-square-terminal","i-lucide-book-open",{"title":99,"icon":100,"path":101,"stem":102,"children":103,"page":45},"Recipes","i-lucide-chef-hat","\u002Frecipes","2.recipes",[104,116,138,159,171],{"title":105,"path":106,"stem":107,"children":108,"icon":45},"Migrations","\u002Frecipes\u002Fmigrations","2.recipes\u002F1.migrations\u002F1.index",[109,111],{"title":28,"path":106,"stem":107,"icon":110},"i-lucide-database-backup",{"title":112,"path":113,"stem":114,"icon":115},"Edited migrations","\u002Frecipes\u002Fmigrations\u002Fedited-migrations","2.recipes\u002F1.migrations\u002F2.edited-migrations","i-lucide-file-diff",{"title":117,"path":118,"stem":119,"children":120,"icon":45},"Testing","\u002Frecipes\u002Ftesting","2.recipes\u002F2.testing\u002F1.index",[121,123,128,133],{"title":28,"path":118,"stem":119,"icon":122},"i-lucide-test-tube",{"title":124,"path":125,"stem":126,"icon":127},"Isolation","\u002Frecipes\u002Ftesting\u002Fisolation","2.recipes\u002F2.testing\u002F2.isolation","i-lucide-git-fork",{"title":129,"path":130,"stem":131,"icon":132},"vitest","\u002Frecipes\u002Ftesting\u002Fvitest","2.recipes\u002F2.testing\u002F3.vitest","i-simple-icons-vitest",{"title":134,"path":135,"stem":136,"icon":137},"@nuxt\u002Ftest-utils","\u002Frecipes\u002Ftesting\u002Fnuxt-test-utils","2.recipes\u002F2.testing\u002F4.nuxt-test-utils","i-simple-icons-nuxt",{"title":139,"path":140,"stem":141,"children":142,"icon":45},"Deploy","\u002Frecipes\u002Fdeploy","2.recipes\u002F3.deploy\u002F1.index",[143,144,149,154],{"title":139,"path":140,"stem":141},{"title":145,"path":146,"stem":147,"icon":148},"Any Postgres","\u002Frecipes\u002Fdeploy\u002Fpostgres","2.recipes\u002F3.deploy\u002F2.postgres","i-lucide-database",{"title":150,"path":151,"stem":152,"icon":153},"Netlify","\u002Frecipes\u002Fdeploy\u002Fnetlify","2.recipes\u002F3.deploy\u002F3.netlify","i-simple-icons-netlify",{"title":155,"path":156,"stem":157,"icon":158},"Neon","\u002Frecipes\u002Fdeploy\u002Fneon","2.recipes\u002F3.deploy\u002F4.neon","i-simple-icons-neon",{"title":160,"path":161,"stem":162,"children":163,"icon":45},"Outside Nuxt","\u002Frecipes\u002Foutside-nuxt","2.recipes\u002F4.outside-nuxt\u002F1.index",[164,167],{"title":165,"path":161,"stem":162,"icon":166},"Config and provider","i-lucide-package",{"title":168,"path":169,"stem":170,"icon":67},"Socket server","\u002Frecipes\u002Foutside-nuxt\u002Fsocket","2.recipes\u002F4.outside-nuxt\u002F2.socket",{"title":172,"path":173,"stem":174,"icon":67},"Nitro's useDatabase","\u002Frecipes\u002Fnitro-database","2.recipes\u002F5.nitro-database",{"title":176,"icon":177,"path":178,"stem":179,"children":180,"page":45},"Reference","i-lucide-code-xml","\u002Freference","3.reference",[181,185,189,193,198,203],{"title":182,"path":183,"stem":184,"icon":34},"Config files","\u002Freference\u002Fconfig-files","3.reference\u002F1.config-files",{"title":186,"path":187,"stem":188,"icon":39},"Module options","\u002Freference\u002Fmodule-options","3.reference\u002F2.module-options",{"title":190,"path":191,"stem":192,"icon":67},"Socket options","\u002Freference\u002Fsocket-options","3.reference\u002F3.socket-options",{"title":194,"path":195,"stem":196,"icon":197},"Exports","\u002Freference\u002Fexports","3.reference\u002F4.exports","i-lucide-boxes",{"title":199,"path":200,"stem":201,"icon":202},"Hooks","\u002Freference\u002Fhooks","3.reference\u002F5.hooks","i-lucide-anchor",{"title":204,"path":205,"stem":206,"icon":207},"Environment","\u002Freference\u002Fenvironment","3.reference\u002F6.environment","i-lucide-variable",{"id":209,"title":88,"body":210,"description":1660,"extension":1661,"links":1662,"meta":1663,"navigation":1664,"path":89,"seo":1665,"stem":90,"__hash__":1666},"docs\u002F1.guide\u002F7.devtools\u002F2.actions.md",{"type":211,"value":212,"toc":1652},"minimark",[213,230,233,327,350,355,361,586,593,597,602,725,729,747,1049,1059,1062,1125,1128,1344,1348,1363,1385,1395,1399,1406,1441,1465,1469,1475,1645,1648],[214,215,216,217,221,222,225,226,229],"p",{},"An action is an operation you run on demand while developing: seeding, a reset, a migration CLI, a studio. It is defined next to what it needs and runs there; only its ",[218,219,220],"code",{},"id",", ",[218,223,224],{},"label"," and ",[218,227,228],{},"description",", and then its result, reach the tab.",[214,231,232],{},"There are three kinds, by where they run:",[234,235,236,255],"table",{},[237,238,239],"thead",{},[240,241,242,246,249,252],"tr",{},[243,244,245],"th",{},"Kind",[243,247,248],{},"Defined in",[243,250,251],{},"Runs",[243,253,254],{},"Receives",[256,257,258,283,304],"tbody",{},[240,259,260,266,275,278],{},[261,262,263],"td",{},[218,264,265],{},"server",[261,267,268,271,272],{},[218,269,270],{},"devtoolsActions"," in ",[218,273,274],{},"server\u002Fpglite.config.ts",[261,276,277],{},"next to the server instance",[261,279,280],{},[218,281,282],{},"{ pg }",[240,284,285,290,297,300],{},[261,286,287],{},[218,288,289],{},"client",[261,291,292,271,294],{},[218,293,270],{},[218,295,296],{},"app\u002Fpglite.config.ts",[261,298,299],{},"in the app's tab, next to its worker instance",[261,301,302],{},[218,303,282],{},[240,305,306,311,319,322],{},[261,307,308],{},[218,309,310],{},"socket",[261,312,313,271,316],{},[218,314,315],{},"pglite.socket.devtoolsActions",[218,317,318],{},"nuxt.config.ts",[261,320,321],{},"in the Nuxt process, next to the socket",[261,323,324],{},[218,325,326],{},"{ socketUrl, env, dataDir, startSubprocess, terminal, logger }",[214,328,329,330,332,333,335,336,338,339,342,343,345,346,349],{},"Every action has an ",[218,331,220],{}," (unique per kind), a ",[218,334,224],{},", an optional ",[218,337,228],{}," and a ",[218,340,341],{},"run"," function. What ",[218,344,341],{}," returns is shown in the tab, reduced to JSON (dates as ISO strings, ",[218,347,348],{},"bigint"," as a string, binary data as its size); what it throws is shown as the error.",[351,352,354],"h2",{"id":353},"server-actions","Server actions",[214,356,357,358,360],{},"Under ",[218,359,270],{}," in the server config, run against the server instance:",[362,363,368],"pre",{"className":364,"code":365,"filename":274,"language":366,"meta":367,"style":367},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default definePGliteServerConfig({\n  devtoolsActions: [\n    {\n      id: 'seed',\n      label: 'Seed the database',\n      description: 'Inserts a few rows into todos',\n      run: async ({ pg }) => {\n        const { affectedRows } = await pg.query(\n          `INSERT INTO todos (title) VALUES ('Read the docs'), ('Try the socket')`,\n        )\n        return affectedRows\n      },\n    },\n  ],\n})\n","ts","",[218,369,370,394,407,413,434,451,468,496,528,542,548,557,563,569,577],{"__ignoreMap":367},[371,372,375,379,382,386,390],"span",{"class":373,"line":374},"line",1,[371,376,378],{"class":377},"s7zQu","export",[371,380,381],{"class":377}," default",[371,383,385],{"class":384},"s2Zo4"," definePGliteServerConfig",[371,387,389],{"class":388},"sTEyZ","(",[371,391,393],{"class":392},"sMK4o","{\n",[371,395,397,401,404],{"class":373,"line":396},2,[371,398,400],{"class":399},"swJcz","  devtoolsActions",[371,402,403],{"class":392},":",[371,405,406],{"class":388}," [\n",[371,408,410],{"class":373,"line":409},3,[371,411,412],{"class":392},"    {\n",[371,414,416,419,421,424,428,431],{"class":373,"line":415},4,[371,417,418],{"class":399},"      id",[371,420,403],{"class":392},[371,422,423],{"class":392}," '",[371,425,427],{"class":426},"sfazB","seed",[371,429,430],{"class":392},"'",[371,432,433],{"class":392},",\n",[371,435,437,440,442,444,447,449],{"class":373,"line":436},5,[371,438,439],{"class":399},"      label",[371,441,403],{"class":392},[371,443,423],{"class":392},[371,445,446],{"class":426},"Seed the database",[371,448,430],{"class":392},[371,450,433],{"class":392},[371,452,454,457,459,461,464,466],{"class":373,"line":453},6,[371,455,456],{"class":399},"      description",[371,458,403],{"class":392},[371,460,423],{"class":392},[371,462,463],{"class":426},"Inserts a few rows into todos",[371,465,430],{"class":392},[371,467,433],{"class":392},[371,469,471,474,476,480,483,487,490,493],{"class":373,"line":470},7,[371,472,473],{"class":384},"      run",[371,475,403],{"class":392},[371,477,479],{"class":478},"spNyl"," async",[371,481,482],{"class":392}," ({",[371,484,486],{"class":485},"sHdIc"," pg",[371,488,489],{"class":392}," })",[371,491,492],{"class":478}," =>",[371,494,495],{"class":392}," {\n",[371,497,499,502,505,508,511,514,517,519,522,525],{"class":373,"line":498},8,[371,500,501],{"class":478},"        const",[371,503,504],{"class":392}," {",[371,506,507],{"class":388}," affectedRows",[371,509,510],{"class":392}," }",[371,512,513],{"class":392}," =",[371,515,516],{"class":377}," await",[371,518,486],{"class":388},[371,520,521],{"class":392},".",[371,523,524],{"class":384},"query",[371,526,527],{"class":399},"(\n",[371,529,531,534,537,540],{"class":373,"line":530},9,[371,532,533],{"class":392},"          `",[371,535,536],{"class":426},"INSERT INTO todos (title) VALUES ('Read the docs'), ('Try the socket')",[371,538,539],{"class":392},"`",[371,541,433],{"class":392},[371,543,545],{"class":373,"line":544},10,[371,546,547],{"class":399},"        )\n",[371,549,551,554],{"class":373,"line":550},11,[371,552,553],{"class":377},"        return",[371,555,556],{"class":388}," affectedRows\n",[371,558,560],{"class":373,"line":559},12,[371,561,562],{"class":392},"      },\n",[371,564,566],{"class":373,"line":565},13,[371,567,568],{"class":392},"    },\n",[371,570,572,575],{"class":373,"line":571},14,[371,573,574],{"class":388},"  ]",[371,576,433],{"class":392},[371,578,580,583],{"class":373,"line":579},15,[371,581,582],{"class":392},"}",[371,584,585],{"class":388},")\n",[214,587,588,589,592],{},"With the development socket running, they run against the socket's instance and queue like any other client's statements. Without it, they run in Nitro through ",[218,590,591],{},"usePGlite()",". They are never part of a build.",[351,594,596],{"id":595},"client-actions","Client actions",[214,598,357,599,601],{},[218,600,270],{}," in the client config, run in the app's tab against its worker instance:",[362,603,605],{"className":364,"code":604,"filename":296,"language":366,"meta":367,"style":367},"export default definePGliteClientConfig({\n  devtoolsActions: [\n    {\n      id: 'clear',\n      label: 'Clear local todos',\n      run: async ({ pg }) => (await pg.query('DELETE FROM todos')).affectedRows,\n    },\n  ],\n})\n",[218,606,607,620,628,632,647,662,709,713,719],{"__ignoreMap":367},[371,608,609,611,613,616,618],{"class":373,"line":374},[371,610,378],{"class":377},[371,612,381],{"class":377},[371,614,615],{"class":384}," definePGliteClientConfig",[371,617,389],{"class":388},[371,619,393],{"class":392},[371,621,622,624,626],{"class":373,"line":396},[371,623,400],{"class":399},[371,625,403],{"class":392},[371,627,406],{"class":388},[371,629,630],{"class":373,"line":409},[371,631,412],{"class":392},[371,633,634,636,638,640,643,645],{"class":373,"line":415},[371,635,418],{"class":399},[371,637,403],{"class":392},[371,639,423],{"class":392},[371,641,642],{"class":426},"clear",[371,644,430],{"class":392},[371,646,433],{"class":392},[371,648,649,651,653,655,658,660],{"class":373,"line":436},[371,650,439],{"class":399},[371,652,403],{"class":392},[371,654,423],{"class":392},[371,656,657],{"class":426},"Clear local todos",[371,659,430],{"class":392},[371,661,433],{"class":392},[371,663,664,666,668,670,672,674,676,678,681,684,686,688,690,692,694,697,699,702,704,707],{"class":373,"line":453},[371,665,473],{"class":384},[371,667,403],{"class":392},[371,669,479],{"class":478},[371,671,482],{"class":392},[371,673,486],{"class":485},[371,675,489],{"class":392},[371,677,492],{"class":478},[371,679,680],{"class":388}," (",[371,682,683],{"class":377},"await",[371,685,486],{"class":388},[371,687,521],{"class":392},[371,689,524],{"class":384},[371,691,389],{"class":388},[371,693,430],{"class":392},[371,695,696],{"class":426},"DELETE FROM todos",[371,698,430],{"class":392},[371,700,701],{"class":388},"))",[371,703,521],{"class":392},[371,705,706],{"class":388},"affectedRows",[371,708,433],{"class":392},[371,710,711],{"class":373,"line":470},[371,712,568],{"class":392},[371,714,715,717],{"class":373,"line":498},[371,716,574],{"class":388},[371,718,433],{"class":392},[371,720,721,723],{"class":373,"line":530},[371,722,582],{"class":392},[371,724,585],{"class":388},[351,726,728],{"id":727},"socket-actions","Socket actions",[214,730,731,732,734,735,737,738,742,743,746],{},"In ",[218,733,318],{},", under ",[218,736,315],{},", run in the Nuxt process next to the ",[739,740,741],"a",{"href":63},"development socket",": the place for CLIs and tools that reach the database through the socket URL, as any Postgres client would. They exist only while the socket runs. ",[218,744,745],{},"startSubprocess"," starts a long-running command whose output streams to its own terminal in DevTools:",[362,748,750],{"className":364,"code":749,"filename":318,"language":366,"meta":367,"style":367},"import type { PGliteSocketAction } from 'nuxt-pglite'\n\nconst migrate: PGliteSocketAction = {\n  id: 'migrate',\n  label: 'Run migrations',\n  description: 'node-pg-migrate up, against the development socket',\n  run: ({ env, startSubprocess }) => {\n    startSubprocess(\n      { command: 'npx', args: ['node-pg-migrate', 'up'], env },\n      { id: 'migrate', name: 'Migrations' },\n    )\n  },\n}\n\nexport default defineNuxtConfig({\n  pglite: {\n    socket: { port: 5433, devtoolsActions: [migrate] },\n  },\n})\n",[218,751,752,778,784,801,817,833,849,873,880,933,963,968,973,978,982,995,1005,1037,1042],{"__ignoreMap":367},[371,753,754,757,760,762,765,767,770,772,775],{"class":373,"line":374},[371,755,756],{"class":377},"import",[371,758,759],{"class":377}," type",[371,761,504],{"class":392},[371,763,764],{"class":388}," PGliteSocketAction",[371,766,510],{"class":392},[371,768,769],{"class":377}," from",[371,771,423],{"class":392},[371,773,774],{"class":426},"nuxt-pglite",[371,776,777],{"class":392},"'\n",[371,779,780],{"class":373,"line":396},[371,781,783],{"emptyLinePlaceholder":782},true,"\n",[371,785,786,789,792,794,797,799],{"class":373,"line":409},[371,787,788],{"class":478},"const",[371,790,791],{"class":388}," migrate",[371,793,403],{"class":392},[371,795,764],{"class":796},"sBMFI",[371,798,513],{"class":392},[371,800,495],{"class":392},[371,802,803,806,808,810,813,815],{"class":373,"line":415},[371,804,805],{"class":399},"  id",[371,807,403],{"class":392},[371,809,423],{"class":392},[371,811,812],{"class":426},"migrate",[371,814,430],{"class":392},[371,816,433],{"class":392},[371,818,819,822,824,826,829,831],{"class":373,"line":436},[371,820,821],{"class":399},"  label",[371,823,403],{"class":392},[371,825,423],{"class":392},[371,827,828],{"class":426},"Run migrations",[371,830,430],{"class":392},[371,832,433],{"class":392},[371,834,835,838,840,842,845,847],{"class":373,"line":453},[371,836,837],{"class":399},"  description",[371,839,403],{"class":392},[371,841,423],{"class":392},[371,843,844],{"class":426},"node-pg-migrate up, against the development socket",[371,846,430],{"class":392},[371,848,433],{"class":392},[371,850,851,854,856,858,861,864,867,869,871],{"class":373,"line":470},[371,852,853],{"class":384},"  run",[371,855,403],{"class":392},[371,857,482],{"class":392},[371,859,860],{"class":485}," env",[371,862,863],{"class":392},",",[371,865,866],{"class":485}," startSubprocess",[371,868,489],{"class":392},[371,870,492],{"class":478},[371,872,495],{"class":392},[371,874,875,878],{"class":373,"line":498},[371,876,877],{"class":384},"    startSubprocess",[371,879,527],{"class":399},[371,881,882,885,888,890,892,895,897,899,902,904,907,909,912,914,916,918,921,923,926,928,930],{"class":373,"line":530},[371,883,884],{"class":392},"      {",[371,886,887],{"class":399}," command",[371,889,403],{"class":392},[371,891,423],{"class":392},[371,893,894],{"class":426},"npx",[371,896,430],{"class":392},[371,898,863],{"class":392},[371,900,901],{"class":399}," args",[371,903,403],{"class":392},[371,905,906],{"class":399}," [",[371,908,430],{"class":392},[371,910,911],{"class":426},"node-pg-migrate",[371,913,430],{"class":392},[371,915,863],{"class":392},[371,917,423],{"class":392},[371,919,920],{"class":426},"up",[371,922,430],{"class":392},[371,924,925],{"class":399},"]",[371,927,863],{"class":392},[371,929,860],{"class":388},[371,931,932],{"class":392}," },\n",[371,934,935,937,940,942,944,946,948,950,953,955,957,959,961],{"class":373,"line":544},[371,936,884],{"class":392},[371,938,939],{"class":399}," id",[371,941,403],{"class":392},[371,943,423],{"class":392},[371,945,812],{"class":426},[371,947,430],{"class":392},[371,949,863],{"class":392},[371,951,952],{"class":399}," name",[371,954,403],{"class":392},[371,956,423],{"class":392},[371,958,105],{"class":426},[371,960,430],{"class":392},[371,962,932],{"class":392},[371,964,965],{"class":373,"line":550},[371,966,967],{"class":399},"    )\n",[371,969,970],{"class":373,"line":559},[371,971,972],{"class":392},"  },\n",[371,974,975],{"class":373,"line":565},[371,976,977],{"class":392},"}\n",[371,979,980],{"class":373,"line":571},[371,981,783],{"emptyLinePlaceholder":782},[371,983,984,986,988,991,993],{"class":373,"line":579},[371,985,378],{"class":377},[371,987,381],{"class":377},[371,989,990],{"class":384}," defineNuxtConfig",[371,992,389],{"class":388},[371,994,393],{"class":392},[371,996,998,1001,1003],{"class":373,"line":997},16,[371,999,1000],{"class":399},"  pglite",[371,1002,403],{"class":392},[371,1004,495],{"class":392},[371,1006,1008,1011,1013,1015,1018,1020,1024,1026,1029,1031,1034],{"class":373,"line":1007},17,[371,1009,1010],{"class":399},"    socket",[371,1012,403],{"class":392},[371,1014,504],{"class":392},[371,1016,1017],{"class":399}," port",[371,1019,403],{"class":392},[371,1021,1023],{"class":1022},"sbssI"," 5433",[371,1025,863],{"class":392},[371,1027,1028],{"class":399}," devtoolsActions",[371,1030,403],{"class":392},[371,1032,1033],{"class":388}," [migrate] ",[371,1035,1036],{"class":392},"},\n",[371,1038,1040],{"class":373,"line":1039},18,[371,1041,972],{"class":392},[371,1043,1045,1047],{"class":373,"line":1044},19,[371,1046,582],{"class":392},[371,1048,585],{"class":388},[214,1050,1051,1054,1055,1058],{},[218,1052,1053],{},"env"," holds the variables the socket exported (",[218,1056,1057],{},"DATABASE_URL"," by default), so any CLI that reads them reaches the socket as the app does.",[214,1060,1061],{},"The context has:",[1063,1064,1065,1075,1082,1090,1105,1117],"ul",{},[1066,1067,1068,1074],"li",{},[1069,1070,1071],"strong",{},[218,1072,1073],{},"socketUrl",": the development socket's URL.",[1066,1076,1077,1081],{},[1069,1078,1079],{},[218,1080,1053],{},": the variables the socket exported, with their values, to pass on to a command.",[1066,1083,1084,1089],{},[1069,1085,1086],{},[218,1087,1088],{},"dataDir",": the data directory the socket serves; unset for an in-memory database.",[1066,1091,1092,1097,1098,1100,1101,1104],{},[1069,1093,1094],{},[218,1095,1096],{},"startSubprocess(execaOptions, tabOptions)",": ",[218,1099,745],{}," from ",[218,1102,1103],{},"@nuxt\u002Fdevtools-kit",", already bound to this Nuxt instance.",[1066,1106,1107,1112,1113,1116],{},[1069,1108,1109],{},[218,1110,1111],{},"terminal",": the terminal, cooperating with the ",[218,1114,1115],{},"nuxt dev"," UI when it runs.",[1066,1118,1119,1124],{},[1069,1120,1121],{},[218,1122,1123],{},"logger",": the module's logger.",[214,1126,1127],{},"This site's own action opens Drizzle Studio, whose config points at the socket's pinned port:",[362,1129,1131],{"className":364,"code":1130,"filename":318,"language":366,"meta":367,"style":367},"import type { PGliteSocketAction } from 'nuxt-pglite'\n\nconst studio: PGliteSocketAction = {\n  id: 'drizzle-studio',\n  label: 'Open Drizzle Studio',\n  run: ({ startSubprocess }) => {\n    startSubprocess(\n      { command: 'pnpm', args: ['exec', 'drizzle-kit', 'studio'] },\n      { id: 'drizzle-studio', name: 'Drizzle Studio', icon: 'simple-icons:drizzle' },\n    )\n    return 'Drizzle Studio is starting, see the DevTools terminal.'\n  },\n}\n",[218,1132,1133,1153,1157,1172,1187,1202,1218,1224,1277,1320,1324,1336,1340],{"__ignoreMap":367},[371,1134,1135,1137,1139,1141,1143,1145,1147,1149,1151],{"class":373,"line":374},[371,1136,756],{"class":377},[371,1138,759],{"class":377},[371,1140,504],{"class":392},[371,1142,764],{"class":388},[371,1144,510],{"class":392},[371,1146,769],{"class":377},[371,1148,423],{"class":392},[371,1150,774],{"class":426},[371,1152,777],{"class":392},[371,1154,1155],{"class":373,"line":396},[371,1156,783],{"emptyLinePlaceholder":782},[371,1158,1159,1161,1164,1166,1168,1170],{"class":373,"line":409},[371,1160,788],{"class":478},[371,1162,1163],{"class":388}," studio",[371,1165,403],{"class":392},[371,1167,764],{"class":796},[371,1169,513],{"class":392},[371,1171,495],{"class":392},[371,1173,1174,1176,1178,1180,1183,1185],{"class":373,"line":415},[371,1175,805],{"class":399},[371,1177,403],{"class":392},[371,1179,423],{"class":392},[371,1181,1182],{"class":426},"drizzle-studio",[371,1184,430],{"class":392},[371,1186,433],{"class":392},[371,1188,1189,1191,1193,1195,1198,1200],{"class":373,"line":436},[371,1190,821],{"class":399},[371,1192,403],{"class":392},[371,1194,423],{"class":392},[371,1196,1197],{"class":426},"Open Drizzle Studio",[371,1199,430],{"class":392},[371,1201,433],{"class":392},[371,1203,1204,1206,1208,1210,1212,1214,1216],{"class":373,"line":453},[371,1205,853],{"class":384},[371,1207,403],{"class":392},[371,1209,482],{"class":392},[371,1211,866],{"class":485},[371,1213,489],{"class":392},[371,1215,492],{"class":478},[371,1217,495],{"class":392},[371,1219,1220,1222],{"class":373,"line":470},[371,1221,877],{"class":384},[371,1223,527],{"class":399},[371,1225,1226,1228,1230,1232,1234,1237,1239,1241,1243,1245,1247,1249,1252,1254,1256,1258,1261,1263,1265,1267,1270,1272,1275],{"class":373,"line":498},[371,1227,884],{"class":392},[371,1229,887],{"class":399},[371,1231,403],{"class":392},[371,1233,423],{"class":392},[371,1235,1236],{"class":426},"pnpm",[371,1238,430],{"class":392},[371,1240,863],{"class":392},[371,1242,901],{"class":399},[371,1244,403],{"class":392},[371,1246,906],{"class":399},[371,1248,430],{"class":392},[371,1250,1251],{"class":426},"exec",[371,1253,430],{"class":392},[371,1255,863],{"class":392},[371,1257,423],{"class":392},[371,1259,1260],{"class":426},"drizzle-kit",[371,1262,430],{"class":392},[371,1264,863],{"class":392},[371,1266,423],{"class":392},[371,1268,1269],{"class":426},"studio",[371,1271,430],{"class":392},[371,1273,1274],{"class":399},"] ",[371,1276,1036],{"class":392},[371,1278,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1302,1304,1306,1309,1311,1313,1316,1318],{"class":373,"line":530},[371,1280,884],{"class":392},[371,1282,939],{"class":399},[371,1284,403],{"class":392},[371,1286,423],{"class":392},[371,1288,1182],{"class":426},[371,1290,430],{"class":392},[371,1292,863],{"class":392},[371,1294,952],{"class":399},[371,1296,403],{"class":392},[371,1298,423],{"class":392},[371,1300,1301],{"class":426},"Drizzle Studio",[371,1303,430],{"class":392},[371,1305,863],{"class":392},[371,1307,1308],{"class":399}," icon",[371,1310,403],{"class":392},[371,1312,423],{"class":392},[371,1314,1315],{"class":426},"simple-icons:drizzle",[371,1317,430],{"class":392},[371,1319,932],{"class":392},[371,1321,1322],{"class":373,"line":544},[371,1323,967],{"class":399},[371,1325,1326,1329,1331,1334],{"class":373,"line":550},[371,1327,1328],{"class":377},"    return",[371,1330,423],{"class":392},[371,1332,1333],{"class":426},"Drizzle Studio is starting, see the DevTools terminal.",[371,1335,777],{"class":392},[371,1337,1338],{"class":373,"line":559},[371,1339,972],{"class":392},[371,1341,1342],{"class":373,"line":565},[371,1343,977],{"class":392},[351,1345,1347],{"id":1346},"reset-database","Reset database",[214,1349,1350,1351,1353,1354,680,1356,1358,1359,1362],{},"The module puts a ",[218,1352,310],{}," action of its own first, ",[1069,1355,1347],{},[218,1357,1346],{},"). It closes the socket's instance, deletes its data directory, creates it again (",[218,1360,1361],{},"init"," included, so migrations and seeds run from scratch) and serves it behind the same URL, so the exported variables stay valid. Connected clients are disconnected, and reconnect as usual.",[1063,1364,1365,1368,1371,1379],{},[1066,1366,1367],{},"An in-memory database is simply recreated.",[1066,1369,1370],{},"A directory that does not look like PGlite's is refused, rather than deleted.",[1066,1372,1373,1374,1378],{},"A failed reset leaves the socket ",[739,1375,1377],{"href":1376},"\u002Fguide\u002Fdevtools#when-init-fails","refusing clients"," with the new reason.",[1066,1380,1381,1382,1384],{},"It acts on the socket's instance only: one created by ",[218,1383,591],{}," in Nitro is not affected.",[214,1386,1387,1388,1391,1392,1394],{},"It is the way out of ",[739,1389,1390],{"href":113},"edited migrations",", or of an ",[218,1393,1361],{}," that fails on data left by an earlier run.",[351,1396,1398],{"id":1397},"typing-actions","Typing actions",[214,1400,1401,1402,1405],{},"Inline actions are typed from their config, so ",[218,1403,1404],{},"pg"," carries your extensions. An action written on its own takes the matching type:",[362,1407,1409],{"className":364,"code":1408,"language":366,"meta":367,"style":367},"import type { PGliteClientAction, PGliteServerAction, PGliteSocketAction } from 'nuxt-pglite'\n",[218,1410,1411],{"__ignoreMap":367},[371,1412,1413,1415,1417,1419,1422,1424,1427,1429,1431,1433,1435,1437,1439],{"class":373,"line":374},[371,1414,756],{"class":377},[371,1416,759],{"class":377},[371,1418,504],{"class":392},[371,1420,1421],{"class":388}," PGliteClientAction",[371,1423,863],{"class":392},[371,1425,1426],{"class":388}," PGliteServerAction",[371,1428,863],{"class":392},[371,1430,764],{"class":388},[371,1432,510],{"class":392},[371,1434,769],{"class":377},[371,1436,423],{"class":392},[371,1438,774],{"class":426},[371,1440,777],{"class":392},[214,1442,1443,1446,1447,1450,1451,1454,1455,680,1458,1461,1462,1464],{},[218,1444,1445],{},"PGliteServerAction"," takes the config's ",[218,1448,1449],{},"extensions"," as a type parameter, ",[218,1452,1453],{},"PGliteClientAction"," its ",[218,1456,1457],{},"clientExtensions",[218,1459,1460],{},"PGliteClientAction\u003C{ live: typeof live }>","), when ",[218,1463,341],{}," needs them.",[351,1466,1468],{"id":1467},"actions-from-other-modules","Actions from other modules",[214,1470,1471,1472,1474],{},"Modules add ",[218,1473,310],{}," actions through a hook, called in development once every module is set up, while the socket runs:",[362,1476,1479],{"className":364,"code":1477,"filename":1478,"language":366,"meta":367,"style":367},"export default defineNuxtModule({\n  setup(_options, nuxt) {\n    nuxt.hook('pglite:devtools:actions', (actions) => {\n      actions.push({\n        id: 'my-module:studio',\n        label: 'Open my studio',\n        run: ({ socketUrl }) => {\n          \u002F\u002F …\n        },\n      })\n    })\n  },\n})\n","my-module\u002Fsrc\u002Fmodule.ts",[218,1480,1481,1494,1514,1546,1560,1576,1592,1610,1616,1621,1628,1635,1639],{"__ignoreMap":367},[371,1482,1483,1485,1487,1490,1492],{"class":373,"line":374},[371,1484,378],{"class":377},[371,1486,381],{"class":377},[371,1488,1489],{"class":384}," defineNuxtModule",[371,1491,389],{"class":388},[371,1493,393],{"class":392},[371,1495,1496,1499,1501,1504,1506,1509,1512],{"class":373,"line":396},[371,1497,1498],{"class":399},"  setup",[371,1500,389],{"class":392},[371,1502,1503],{"class":485},"_options",[371,1505,863],{"class":392},[371,1507,1508],{"class":485}," nuxt",[371,1510,1511],{"class":392},")",[371,1513,495],{"class":392},[371,1515,1516,1519,1521,1524,1526,1528,1531,1533,1535,1537,1540,1542,1544],{"class":373,"line":409},[371,1517,1518],{"class":388},"    nuxt",[371,1520,521],{"class":392},[371,1522,1523],{"class":384},"hook",[371,1525,389],{"class":399},[371,1527,430],{"class":392},[371,1529,1530],{"class":426},"pglite:devtools:actions",[371,1532,430],{"class":392},[371,1534,863],{"class":392},[371,1536,680],{"class":392},[371,1538,1539],{"class":485},"actions",[371,1541,1511],{"class":392},[371,1543,492],{"class":478},[371,1545,495],{"class":392},[371,1547,1548,1551,1553,1556,1558],{"class":373,"line":415},[371,1549,1550],{"class":388},"      actions",[371,1552,521],{"class":392},[371,1554,1555],{"class":384},"push",[371,1557,389],{"class":399},[371,1559,393],{"class":392},[371,1561,1562,1565,1567,1569,1572,1574],{"class":373,"line":436},[371,1563,1564],{"class":399},"        id",[371,1566,403],{"class":392},[371,1568,423],{"class":392},[371,1570,1571],{"class":426},"my-module:studio",[371,1573,430],{"class":392},[371,1575,433],{"class":392},[371,1577,1578,1581,1583,1585,1588,1590],{"class":373,"line":453},[371,1579,1580],{"class":399},"        label",[371,1582,403],{"class":392},[371,1584,423],{"class":392},[371,1586,1587],{"class":426},"Open my studio",[371,1589,430],{"class":392},[371,1591,433],{"class":392},[371,1593,1594,1597,1599,1601,1604,1606,1608],{"class":373,"line":470},[371,1595,1596],{"class":384},"        run",[371,1598,403],{"class":392},[371,1600,482],{"class":392},[371,1602,1603],{"class":485}," socketUrl",[371,1605,489],{"class":392},[371,1607,492],{"class":478},[371,1609,495],{"class":392},[371,1611,1612],{"class":373,"line":498},[371,1613,1615],{"class":1614},"sHwdD","          \u002F\u002F …\n",[371,1617,1618],{"class":373,"line":530},[371,1619,1620],{"class":392},"        },\n",[371,1622,1623,1626],{"class":373,"line":544},[371,1624,1625],{"class":392},"      }",[371,1627,585],{"class":399},[371,1629,1630,1633],{"class":373,"line":550},[371,1631,1632],{"class":392},"    }",[371,1634,585],{"class":399},[371,1636,1637],{"class":373,"line":559},[371,1638,972],{"class":392},[371,1640,1641,1643],{"class":373,"line":565},[371,1642,582],{"class":392},[371,1644,585],{"class":388},[214,1646,1647],{},"Prefix the id with your module's name: ids are unique per kind, and a duplicate fails the startup.",[1649,1650,1651],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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}",{"title":367,"searchDepth":374,"depth":396,"links":1653},[1654,1655,1656,1657,1658,1659],{"id":353,"depth":396,"text":354},{"id":595,"depth":396,"text":596},{"id":727,"depth":396,"text":728},{"id":1346,"depth":396,"text":1347},{"id":1397,"depth":396,"text":1398},{"id":1467,"depth":396,"text":1468},"Named operations you run from the DevTools tab, next to the database they need.","md",null,{},{"icon":91},{"title":88,"description":1660},"Dw7sN9_mV8tAY7P0-iVlmxPoX79QvBVyTh16Z-B5u8w",[1668,1670],{"title":85,"path":81,"stem":82,"description":1669,"icon":86,"children":-1},"Inspect each PGlite instance, run SQL against it and trigger your actions from Nuxt DevTools.",{"title":93,"path":94,"stem":95,"description":1671,"icon":96,"children":-1},"The socket's startup task and the action picker in the nuxt dev terminal.",1791474260747]