[{"data":1,"prerenderedAt":1289},["ShallowReactive",2],{"navigation":3,"\u002Frecipes\u002Ftesting\u002Fisolation":208,"\u002Frecipes\u002Ftesting\u002Fisolation-surround":1284},[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":124,"body":210,"description":1277,"extension":1278,"links":1279,"meta":1280,"navigation":1281,"path":125,"seo":1282,"stem":126,"__hash__":1283},"docs\u002F2.recipes\u002F2.testing\u002F2.isolation.md",{"type":211,"value":212,"toc":1272},"minimark",[213,222,820,825,835,838,842,864,868,892,907,1071,1082,1265,1268],[214,215,216,217,221],"p",{},"Tests that write to a shared database see each other's rows, and their outcome depends on the order they run in. ",[218,219,220],"code",{},"db.fork()"," gives each test its own copy instead: a fresh in-memory database holding the current state of its parent, with the same extensions.",[223,224,230],"pre",{"className":225,"code":226,"filename":227,"language":228,"meta":229,"style":229},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { afterAll, afterEach, beforeAll, beforeEach, expect, it } from 'vitest'\nimport { createTestDatabase } from 'nuxt-pglite\u002Ftesting'\nimport type { TestDatabase } from 'nuxt-pglite\u002Ftesting'\n\nlet db: TestDatabase\nlet test: TestDatabase\n\nbeforeAll(async () => {\n  db = await createTestDatabase({ config: 'server\u002Fpglite.config' })\n  await db.pg.exec(\"INSERT INTO todos (title) VALUES ('seeded')\")\n})\nbeforeEach(async () => {\n  test = await db.fork()\n})\nafterEach(() => test.close())\nafterAll(() => db.close())\n\nit('adds a todo', async () => {\n  await test.pg.query('INSERT INTO todos (title) VALUES ($1)', ['added'])\n  const { rows } = await test.pg.query('SELECT count(*)::int AS total FROM todos')\n  expect(rows).toEqual([{ total: 2 }])\n})\n\nit('starts from the seed again', async () => {\n  const { rows } = await test.pg.query('SELECT title FROM todos')\n  expect(rows).toEqual([{ title: 'seeded' }])\n})\n","test\u002Ftodos.test.ts","ts","",[218,231,232,290,311,334,341,358,370,375,397,435,466,474,490,510,517,540,560,565,591,631,669,706,713,718,742,778,813],{"__ignoreMap":229},[233,234,237,241,245,249,252,255,257,260,262,265,267,270,272,275,278,281,284,287],"span",{"class":235,"line":236},"line",1,[233,238,240],{"class":239},"s7zQu","import",[233,242,244],{"class":243},"sMK4o"," {",[233,246,248],{"class":247},"sTEyZ"," afterAll",[233,250,251],{"class":243},",",[233,253,254],{"class":247}," afterEach",[233,256,251],{"class":243},[233,258,259],{"class":247}," beforeAll",[233,261,251],{"class":243},[233,263,264],{"class":247}," beforeEach",[233,266,251],{"class":243},[233,268,269],{"class":247}," expect",[233,271,251],{"class":243},[233,273,274],{"class":247}," it",[233,276,277],{"class":243}," }",[233,279,280],{"class":239}," from",[233,282,283],{"class":243}," '",[233,285,129],{"class":286},"sfazB",[233,288,289],{"class":243},"'\n",[233,291,293,295,297,300,302,304,306,309],{"class":235,"line":292},2,[233,294,240],{"class":239},[233,296,244],{"class":243},[233,298,299],{"class":247}," createTestDatabase",[233,301,277],{"class":243},[233,303,280],{"class":239},[233,305,283],{"class":243},[233,307,308],{"class":286},"nuxt-pglite\u002Ftesting",[233,310,289],{"class":243},[233,312,314,316,319,321,324,326,328,330,332],{"class":235,"line":313},3,[233,315,240],{"class":239},[233,317,318],{"class":239}," type",[233,320,244],{"class":243},[233,322,323],{"class":247}," TestDatabase",[233,325,277],{"class":243},[233,327,280],{"class":239},[233,329,283],{"class":243},[233,331,308],{"class":286},[233,333,289],{"class":243},[233,335,337],{"class":235,"line":336},4,[233,338,340],{"emptyLinePlaceholder":339},true,"\n",[233,342,344,348,351,354],{"class":235,"line":343},5,[233,345,347],{"class":346},"spNyl","let",[233,349,350],{"class":247}," db",[233,352,353],{"class":243},":",[233,355,357],{"class":356},"sBMFI"," TestDatabase\n",[233,359,361,363,366,368],{"class":235,"line":360},6,[233,362,347],{"class":346},[233,364,365],{"class":247}," test",[233,367,353],{"class":243},[233,369,357],{"class":356},[233,371,373],{"class":235,"line":372},7,[233,374,340],{"emptyLinePlaceholder":339},[233,376,378,382,385,388,391,394],{"class":235,"line":377},8,[233,379,381],{"class":380},"s2Zo4","beforeAll",[233,383,384],{"class":247},"(",[233,386,387],{"class":346},"async",[233,389,390],{"class":243}," ()",[233,392,393],{"class":346}," =>",[233,395,396],{"class":243}," {\n",[233,398,400,403,406,409,411,414,417,420,422,424,427,430,432],{"class":235,"line":399},9,[233,401,402],{"class":247},"  db",[233,404,405],{"class":243}," =",[233,407,408],{"class":239}," await",[233,410,299],{"class":380},[233,412,384],{"class":413},"swJcz",[233,415,416],{"class":243},"{",[233,418,419],{"class":413}," config",[233,421,353],{"class":243},[233,423,283],{"class":243},[233,425,426],{"class":286},"server\u002Fpglite.config",[233,428,429],{"class":243},"'",[233,431,277],{"class":243},[233,433,434],{"class":413},")\n",[233,436,438,441,443,446,449,451,454,456,459,462,464],{"class":235,"line":437},10,[233,439,440],{"class":239},"  await",[233,442,350],{"class":247},[233,444,445],{"class":243},".",[233,447,448],{"class":247},"pg",[233,450,445],{"class":243},[233,452,453],{"class":380},"exec",[233,455,384],{"class":413},[233,457,458],{"class":243},"\"",[233,460,461],{"class":286},"INSERT INTO todos (title) VALUES ('seeded')",[233,463,458],{"class":243},[233,465,434],{"class":413},[233,467,469,472],{"class":235,"line":468},11,[233,470,471],{"class":243},"}",[233,473,434],{"class":247},[233,475,477,480,482,484,486,488],{"class":235,"line":476},12,[233,478,479],{"class":380},"beforeEach",[233,481,384],{"class":247},[233,483,387],{"class":346},[233,485,390],{"class":243},[233,487,393],{"class":346},[233,489,396],{"class":243},[233,491,493,496,498,500,502,504,507],{"class":235,"line":492},13,[233,494,495],{"class":247},"  test",[233,497,405],{"class":243},[233,499,408],{"class":239},[233,501,350],{"class":247},[233,503,445],{"class":243},[233,505,506],{"class":380},"fork",[233,508,509],{"class":413},"()\n",[233,511,513,515],{"class":235,"line":512},14,[233,514,471],{"class":243},[233,516,434],{"class":247},[233,518,520,523,525,528,530,532,534,537],{"class":235,"line":519},15,[233,521,522],{"class":380},"afterEach",[233,524,384],{"class":247},[233,526,527],{"class":243},"()",[233,529,393],{"class":346},[233,531,365],{"class":247},[233,533,445],{"class":243},[233,535,536],{"class":380},"close",[233,538,539],{"class":247},"())\n",[233,541,543,546,548,550,552,554,556,558],{"class":235,"line":542},16,[233,544,545],{"class":380},"afterAll",[233,547,384],{"class":247},[233,549,527],{"class":243},[233,551,393],{"class":346},[233,553,350],{"class":247},[233,555,445],{"class":243},[233,557,536],{"class":380},[233,559,539],{"class":247},[233,561,563],{"class":235,"line":562},17,[233,564,340],{"emptyLinePlaceholder":339},[233,566,568,571,573,575,578,580,582,585,587,589],{"class":235,"line":567},18,[233,569,570],{"class":380},"it",[233,572,384],{"class":247},[233,574,429],{"class":243},[233,576,577],{"class":286},"adds a todo",[233,579,429],{"class":243},[233,581,251],{"class":243},[233,583,584],{"class":346}," async",[233,586,390],{"class":243},[233,588,393],{"class":346},[233,590,396],{"class":243},[233,592,594,596,598,600,602,604,607,609,611,614,616,618,621,623,626,628],{"class":235,"line":593},19,[233,595,440],{"class":239},[233,597,365],{"class":247},[233,599,445],{"class":243},[233,601,448],{"class":247},[233,603,445],{"class":243},[233,605,606],{"class":380},"query",[233,608,384],{"class":413},[233,610,429],{"class":243},[233,612,613],{"class":286},"INSERT INTO todos (title) VALUES ($1)",[233,615,429],{"class":243},[233,617,251],{"class":243},[233,619,620],{"class":413}," [",[233,622,429],{"class":243},[233,624,625],{"class":286},"added",[233,627,429],{"class":243},[233,629,630],{"class":413},"])\n",[233,632,634,637,639,642,644,646,648,650,652,654,656,658,660,662,665,667],{"class":235,"line":633},20,[233,635,636],{"class":346},"  const",[233,638,244],{"class":243},[233,640,641],{"class":247}," rows",[233,643,277],{"class":243},[233,645,405],{"class":243},[233,647,408],{"class":239},[233,649,365],{"class":247},[233,651,445],{"class":243},[233,653,448],{"class":247},[233,655,445],{"class":243},[233,657,606],{"class":380},[233,659,384],{"class":413},[233,661,429],{"class":243},[233,663,664],{"class":286},"SELECT count(*)::int AS total FROM todos",[233,666,429],{"class":243},[233,668,434],{"class":413},[233,670,672,675,677,680,683,685,688,691,693,696,698,702,704],{"class":235,"line":671},21,[233,673,674],{"class":380},"  expect",[233,676,384],{"class":413},[233,678,679],{"class":247},"rows",[233,681,682],{"class":413},")",[233,684,445],{"class":243},[233,686,687],{"class":380},"toEqual",[233,689,690],{"class":413},"([",[233,692,416],{"class":243},[233,694,695],{"class":413}," total",[233,697,353],{"class":243},[233,699,701],{"class":700},"sbssI"," 2",[233,703,277],{"class":243},[233,705,630],{"class":413},[233,707,709,711],{"class":235,"line":708},22,[233,710,471],{"class":243},[233,712,434],{"class":247},[233,714,716],{"class":235,"line":715},23,[233,717,340],{"emptyLinePlaceholder":339},[233,719,721,723,725,727,730,732,734,736,738,740],{"class":235,"line":720},24,[233,722,570],{"class":380},[233,724,384],{"class":247},[233,726,429],{"class":243},[233,728,729],{"class":286},"starts from the seed again",[233,731,429],{"class":243},[233,733,251],{"class":243},[233,735,584],{"class":346},[233,737,390],{"class":243},[233,739,393],{"class":346},[233,741,396],{"class":243},[233,743,745,747,749,751,753,755,757,759,761,763,765,767,769,771,774,776],{"class":235,"line":744},25,[233,746,636],{"class":346},[233,748,244],{"class":243},[233,750,641],{"class":247},[233,752,277],{"class":243},[233,754,405],{"class":243},[233,756,408],{"class":239},[233,758,365],{"class":247},[233,760,445],{"class":243},[233,762,448],{"class":247},[233,764,445],{"class":243},[233,766,606],{"class":380},[233,768,384],{"class":413},[233,770,429],{"class":243},[233,772,773],{"class":286},"SELECT title FROM todos",[233,775,429],{"class":243},[233,777,434],{"class":413},[233,779,781,783,785,787,789,791,793,795,797,800,802,804,807,809,811],{"class":235,"line":780},26,[233,782,674],{"class":380},[233,784,384],{"class":413},[233,786,679],{"class":247},[233,788,682],{"class":413},[233,790,445],{"class":243},[233,792,687],{"class":380},[233,794,690],{"class":413},[233,796,416],{"class":243},[233,798,799],{"class":413}," title",[233,801,353],{"class":243},[233,803,283],{"class":243},[233,805,806],{"class":286},"seeded",[233,808,429],{"class":243},[233,810,277],{"class":243},[233,812,630],{"class":413},[233,814,816,818],{"class":235,"line":815},27,[233,817,471],{"class":243},[233,819,434],{"class":247},[821,822,824],"h2",{"id":823},"how-a-fork-is-made","How a fork is made",[214,826,827,828,831,832,445],{},"The parent's data directory is dumped and loaded into a new PGlite instance, created with the config's options and extensions. ",[218,829,830],{},"init"," is not run again: the copy already holds what it created, together with whatever the parent wrote before forking. A fork is always in memory, whatever the parent's ",[218,833,834],{},"dataDir",[214,836,837],{},"Each fork is a PGlite instance of its own. Tests that only read can share the parent rather than fork it.",[821,839,841],{"id":840},"closing","Closing",[214,843,844,845,848,849,852,853,855,856,859,860,863],{},"A fork closes independently of its parent, and its ",[218,846,847],{},"close()"," does not run the config's ",[218,850,851],{},"dispose",", which belongs to the instance ",[218,854,830],{}," ran on. Closing the parent closes the forks still open, so ",[218,857,858],{},"afterAll(() => db.close())"," is enough when a test fails before its own cleanup. A closed database cannot be forked any more: ",[218,861,862],{},"fork()"," throws.",[821,865,867],{"id":866},"sockets","Sockets",[214,869,870,871,876,877,880,881,884,885,888,889,445],{},"When the parent is ",[872,873,875],"a",{"href":874},"\u002Frecipes\u002Ftesting#through-the-socket","served over the socket",", each fork gets a socket of its own, with the same options on a free port, so that tests can run side by side. ",[218,878,879],{},"fork({ socket })"," decides otherwise: ",[218,882,883],{},"false"," for none, ",[218,886,887],{},"true"," for a free port, or the ",[872,890,891],{"href":69},"socket options",[214,893,894,895,898,899,902,903,906],{},"A fork never sets anything on ",[218,896,897],{},"process.env",": its parent's variables are there already, and two forks would fight over them. Hand its ",[218,900,901],{},"url",", or its ",[218,904,905],{},"env",", to the code under test:",[223,908,910],{"className":225,"code":909,"language":228,"meta":229,"style":229},"import pg from 'pg'\n\nbeforeEach(async () => {\n  test = await db.fork()\n})\n\nit('connects to its own fork', async () => {\n  const client = new pg.Client({ connectionString: test.url })\n  await client.connect()\n  \u002F\u002F ...\n  await client.end()\n})\n",[218,911,912,928,932,946,962,968,972,995,1033,1046,1052,1065],{"__ignoreMap":229},[233,913,914,916,919,922,924,926],{"class":235,"line":236},[233,915,240],{"class":239},[233,917,918],{"class":247}," pg ",[233,920,921],{"class":239},"from",[233,923,283],{"class":243},[233,925,448],{"class":286},[233,927,289],{"class":243},[233,929,930],{"class":235,"line":292},[233,931,340],{"emptyLinePlaceholder":339},[233,933,934,936,938,940,942,944],{"class":235,"line":313},[233,935,479],{"class":380},[233,937,384],{"class":247},[233,939,387],{"class":346},[233,941,390],{"class":243},[233,943,393],{"class":346},[233,945,396],{"class":243},[233,947,948,950,952,954,956,958,960],{"class":235,"line":336},[233,949,495],{"class":247},[233,951,405],{"class":243},[233,953,408],{"class":239},[233,955,350],{"class":247},[233,957,445],{"class":243},[233,959,506],{"class":380},[233,961,509],{"class":413},[233,963,964,966],{"class":235,"line":343},[233,965,471],{"class":243},[233,967,434],{"class":247},[233,969,970],{"class":235,"line":360},[233,971,340],{"emptyLinePlaceholder":339},[233,973,974,976,978,980,983,985,987,989,991,993],{"class":235,"line":372},[233,975,570],{"class":380},[233,977,384],{"class":247},[233,979,429],{"class":243},[233,981,982],{"class":286},"connects to its own fork",[233,984,429],{"class":243},[233,986,251],{"class":243},[233,988,584],{"class":346},[233,990,390],{"class":243},[233,992,393],{"class":346},[233,994,396],{"class":243},[233,996,997,999,1002,1004,1007,1010,1012,1014,1016,1018,1021,1023,1025,1027,1029,1031],{"class":235,"line":377},[233,998,636],{"class":346},[233,1000,1001],{"class":247}," client",[233,1003,405],{"class":243},[233,1005,1006],{"class":243}," new",[233,1008,1009],{"class":247}," pg",[233,1011,445],{"class":243},[233,1013,47],{"class":380},[233,1015,384],{"class":413},[233,1017,416],{"class":243},[233,1019,1020],{"class":413}," connectionString",[233,1022,353],{"class":243},[233,1024,365],{"class":247},[233,1026,445],{"class":243},[233,1028,901],{"class":247},[233,1030,277],{"class":243},[233,1032,434],{"class":413},[233,1034,1035,1037,1039,1041,1044],{"class":235,"line":399},[233,1036,440],{"class":239},[233,1038,1001],{"class":247},[233,1040,445],{"class":243},[233,1042,1043],{"class":380},"connect",[233,1045,509],{"class":413},[233,1047,1048],{"class":235,"line":437},[233,1049,1051],{"class":1050},"sHwdD","  \u002F\u002F ...\n",[233,1053,1054,1056,1058,1060,1063],{"class":235,"line":468},[233,1055,440],{"class":239},[233,1057,1001],{"class":247},[233,1059,445],{"class":243},[233,1061,1062],{"class":380},"end",[233,1064,509],{"class":413},[233,1066,1067,1069],{"class":235,"line":476},[233,1068,471],{"class":243},[233,1070,434],{"class":247},[214,1072,1073,1074,1077,1078,1081],{},"For code that reads ",[218,1075,1076],{},"DATABASE_URL"," itself, vitest's ",[218,1079,1080],{},"vi.stubEnv"," sets the fork's variables for the length of a test:",[223,1083,1085],{"className":225,"code":1084,"language":228,"meta":229,"style":229},"import { vi } from 'vitest'\n\nbeforeEach(async () => {\n  test = await db.fork()\n  for (const [name, value] of Object.entries(test.env)) {\n    vi.stubEnv(name, value)\n  }\n})\nafterEach(async () => {\n  vi.unstubAllEnvs()\n  await test.close()\n})\n",[218,1086,1087,1106,1110,1124,1140,1190,1210,1215,1221,1235,1247,1259],{"__ignoreMap":229},[233,1088,1089,1091,1093,1096,1098,1100,1102,1104],{"class":235,"line":236},[233,1090,240],{"class":239},[233,1092,244],{"class":243},[233,1094,1095],{"class":247}," vi",[233,1097,277],{"class":243},[233,1099,280],{"class":239},[233,1101,283],{"class":243},[233,1103,129],{"class":286},[233,1105,289],{"class":243},[233,1107,1108],{"class":235,"line":292},[233,1109,340],{"emptyLinePlaceholder":339},[233,1111,1112,1114,1116,1118,1120,1122],{"class":235,"line":313},[233,1113,479],{"class":380},[233,1115,384],{"class":247},[233,1117,387],{"class":346},[233,1119,390],{"class":243},[233,1121,393],{"class":346},[233,1123,396],{"class":243},[233,1125,1126,1128,1130,1132,1134,1136,1138],{"class":235,"line":336},[233,1127,495],{"class":247},[233,1129,405],{"class":243},[233,1131,408],{"class":239},[233,1133,350],{"class":247},[233,1135,445],{"class":243},[233,1137,506],{"class":380},[233,1139,509],{"class":413},[233,1141,1142,1145,1148,1151,1153,1156,1158,1161,1164,1167,1170,1172,1175,1177,1180,1182,1184,1187],{"class":235,"line":343},[233,1143,1144],{"class":239},"  for",[233,1146,1147],{"class":413}," (",[233,1149,1150],{"class":346},"const",[233,1152,620],{"class":243},[233,1154,1155],{"class":247},"name",[233,1157,251],{"class":243},[233,1159,1160],{"class":247}," value",[233,1162,1163],{"class":243},"]",[233,1165,1166],{"class":243}," of",[233,1168,1169],{"class":247}," Object",[233,1171,445],{"class":243},[233,1173,1174],{"class":380},"entries",[233,1176,384],{"class":413},[233,1178,1179],{"class":247},"test",[233,1181,445],{"class":243},[233,1183,905],{"class":247},[233,1185,1186],{"class":413},")) ",[233,1188,1189],{"class":243},"{\n",[233,1191,1192,1195,1197,1200,1202,1204,1206,1208],{"class":235,"line":360},[233,1193,1194],{"class":247},"    vi",[233,1196,445],{"class":243},[233,1198,1199],{"class":380},"stubEnv",[233,1201,384],{"class":413},[233,1203,1155],{"class":247},[233,1205,251],{"class":243},[233,1207,1160],{"class":247},[233,1209,434],{"class":413},[233,1211,1212],{"class":235,"line":372},[233,1213,1214],{"class":243},"  }\n",[233,1216,1217,1219],{"class":235,"line":377},[233,1218,471],{"class":243},[233,1220,434],{"class":247},[233,1222,1223,1225,1227,1229,1231,1233],{"class":235,"line":399},[233,1224,522],{"class":380},[233,1226,384],{"class":247},[233,1228,387],{"class":346},[233,1230,390],{"class":243},[233,1232,393],{"class":346},[233,1234,396],{"class":243},[233,1236,1237,1240,1242,1245],{"class":235,"line":437},[233,1238,1239],{"class":247},"  vi",[233,1241,445],{"class":243},[233,1243,1244],{"class":380},"unstubAllEnvs",[233,1246,509],{"class":413},[233,1248,1249,1251,1253,1255,1257],{"class":235,"line":468},[233,1250,440],{"class":239},[233,1252,365],{"class":247},[233,1254,445],{"class":243},[233,1256,536],{"class":380},[233,1258,509],{"class":413},[233,1260,1261,1263],{"class":235,"line":476},[233,1262,471],{"class":243},[233,1264,434],{"class":247},[214,1266,1267],{},"This only reaches code that reads the variable when it connects; a pool created once at import time keeps the first URL it saw.",[1269,1270,1271],"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 pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .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":229,"searchDepth":236,"depth":292,"links":1273},[1274,1275,1276],{"id":823,"depth":292,"text":824},{"id":840,"depth":292,"text":841},{"id":866,"depth":292,"text":867},"Seed once, then fork the database per test, so each starts from the same data and none sees another's writes.","md",null,{},{"icon":127},{"title":124,"description":1277},"90Ra6ncyY5HOZbr3zvE7aJPOSGH1K0QrZtEaqW9DIXw",[1285,1287],{"title":28,"path":118,"stem":119,"description":1286,"icon":122,"children":-1},"A database built from your app's own config for the test suite, shared by the run or isolated per test, without touching the app's data.",{"title":129,"path":130,"stem":131,"description":1288,"icon":132,"children":-1},"One database for the whole run, created in a globalSetup file before the workers start, and reached by them through the socket.",1791474261459]