@prisma/dev 0.22.2 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/chunk-62DM64XC.js +1 -0
  2. package/dist/{chunk-UZK2DL6R.js → chunk-GPEZQZD3.js} +1 -1
  3. package/dist/chunk-ZSBTZQZ3.js +84 -0
  4. package/dist/daemon.cjs +19 -19
  5. package/dist/daemon.d.cts +1 -0
  6. package/dist/daemon.d.ts +1 -0
  7. package/dist/daemon.js +1 -1
  8. package/dist/db.cjs +13 -13
  9. package/dist/db.js +1 -1
  10. package/dist/index.cjs +19 -19
  11. package/dist/index.d.cts +1 -0
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.js +1 -1
  14. package/dist/runtime-assets/amcheck.tar.gz +0 -0
  15. package/dist/runtime-assets/bloom.tar.gz +0 -0
  16. package/dist/runtime-assets/btree_gin.tar.gz +0 -0
  17. package/dist/runtime-assets/btree_gist.tar.gz +0 -0
  18. package/dist/runtime-assets/citext.tar.gz +0 -0
  19. package/dist/runtime-assets/cube.tar.gz +0 -0
  20. package/dist/runtime-assets/dict_int.tar.gz +0 -0
  21. package/dist/runtime-assets/dict_xsyn.tar.gz +0 -0
  22. package/dist/runtime-assets/earthdistance.tar.gz +0 -0
  23. package/dist/runtime-assets/file_fdw.tar.gz +0 -0
  24. package/dist/runtime-assets/fuzzystrmatch.tar.gz +0 -0
  25. package/dist/runtime-assets/hstore.tar.gz +0 -0
  26. package/dist/runtime-assets/initdb.wasm +0 -0
  27. package/dist/runtime-assets/intarray.tar.gz +0 -0
  28. package/dist/runtime-assets/isn.tar.gz +0 -0
  29. package/dist/runtime-assets/lo.tar.gz +0 -0
  30. package/dist/runtime-assets/ltree.tar.gz +0 -0
  31. package/dist/runtime-assets/pageinspect.tar.gz +0 -0
  32. package/dist/runtime-assets/pg_buffercache.tar.gz +0 -0
  33. package/dist/runtime-assets/pg_freespacemap.tar.gz +0 -0
  34. package/dist/runtime-assets/pg_surgery.tar.gz +0 -0
  35. package/dist/runtime-assets/pg_trgm.tar.gz +0 -0
  36. package/dist/runtime-assets/pg_visibility.tar.gz +0 -0
  37. package/dist/runtime-assets/pg_walinspect.tar.gz +0 -0
  38. package/dist/runtime-assets/pglite.data +0 -0
  39. package/dist/runtime-assets/pglite.wasm +0 -0
  40. package/dist/runtime-assets/seg.tar.gz +0 -0
  41. package/dist/runtime-assets/tablefunc.tar.gz +0 -0
  42. package/dist/runtime-assets/tcn.tar.gz +0 -0
  43. package/dist/runtime-assets/tsm_system_rows.tar.gz +0 -0
  44. package/dist/runtime-assets/tsm_system_time.tar.gz +0 -0
  45. package/dist/runtime-assets/unaccent.tar.gz +0 -0
  46. package/dist/runtime-assets/uuid-ossp.tar.gz +0 -0
  47. package/dist/runtime-assets/vector.tar.gz +0 -0
  48. package/dist/runtime-assets-manifest.bun.js +77 -0
  49. package/dist/runtime-assets.cjs +1 -0
  50. package/dist/runtime-assets.d.cts +26 -0
  51. package/dist/runtime-assets.d.ts +26 -0
  52. package/dist/runtime-assets.js +1 -0
  53. package/package.json +7 -6
  54. package/dist/chunk-DZGCLGSX.js +0 -84
@@ -0,0 +1,77 @@
1
+ import {
2
+ registerBundledPGliteRuntimeAssetSources,
3
+ resolveBundledRuntimeAssetSource,
4
+ } from "./runtime-assets.js";
5
+ import initdbWasmAsset from "./runtime-assets/initdb.wasm";
6
+ import fsBundleAsset from "./runtime-assets/pglite.data";
7
+ import wasmModuleAsset from "./runtime-assets/pglite.wasm";
8
+ import amcheckAsset from "./runtime-assets/amcheck.tar.gz";
9
+ import bloomAsset from "./runtime-assets/bloom.tar.gz";
10
+ import btree_ginAsset from "./runtime-assets/btree_gin.tar.gz";
11
+ import btree_gistAsset from "./runtime-assets/btree_gist.tar.gz";
12
+ import citextAsset from "./runtime-assets/citext.tar.gz";
13
+ import cubeAsset from "./runtime-assets/cube.tar.gz";
14
+ import dict_intAsset from "./runtime-assets/dict_int.tar.gz";
15
+ import dict_xsynAsset from "./runtime-assets/dict_xsyn.tar.gz";
16
+ import earthdistanceAsset from "./runtime-assets/earthdistance.tar.gz";
17
+ import file_fdwAsset from "./runtime-assets/file_fdw.tar.gz";
18
+ import fuzzystrmatchAsset from "./runtime-assets/fuzzystrmatch.tar.gz";
19
+ import hstoreAsset from "./runtime-assets/hstore.tar.gz";
20
+ import intarrayAsset from "./runtime-assets/intarray.tar.gz";
21
+ import isnAsset from "./runtime-assets/isn.tar.gz";
22
+ import loAsset from "./runtime-assets/lo.tar.gz";
23
+ import ltreeAsset from "./runtime-assets/ltree.tar.gz";
24
+ import pageinspectAsset from "./runtime-assets/pageinspect.tar.gz";
25
+ import pg_buffercacheAsset from "./runtime-assets/pg_buffercache.tar.gz";
26
+ import pg_freespacemapAsset from "./runtime-assets/pg_freespacemap.tar.gz";
27
+ import pg_surgeryAsset from "./runtime-assets/pg_surgery.tar.gz";
28
+ import pg_trgmAsset from "./runtime-assets/pg_trgm.tar.gz";
29
+ import pg_visibilityAsset from "./runtime-assets/pg_visibility.tar.gz";
30
+ import pg_walinspectAsset from "./runtime-assets/pg_walinspect.tar.gz";
31
+ import segAsset from "./runtime-assets/seg.tar.gz";
32
+ import tablefuncAsset from "./runtime-assets/tablefunc.tar.gz";
33
+ import tcnAsset from "./runtime-assets/tcn.tar.gz";
34
+ import tsm_system_rowsAsset from "./runtime-assets/tsm_system_rows.tar.gz";
35
+ import tsm_system_timeAsset from "./runtime-assets/tsm_system_time.tar.gz";
36
+ import unaccentAsset from "./runtime-assets/unaccent.tar.gz";
37
+ import uuid_osspAsset from "./runtime-assets/uuid-ossp.tar.gz";
38
+ import vectorAsset from "./runtime-assets/vector.tar.gz";
39
+
40
+ registerBundledPGliteRuntimeAssetSources({
41
+ fsBundle: resolveBundledRuntimeAssetSource(fsBundleAsset, import.meta.url),
42
+ initdbWasm: resolveBundledRuntimeAssetSource(initdbWasmAsset, import.meta.url),
43
+ wasmModule: resolveBundledRuntimeAssetSource(wasmModuleAsset, import.meta.url),
44
+ extensions: {
45
+ "amcheck": resolveBundledRuntimeAssetSource(amcheckAsset, import.meta.url),
46
+ "bloom": resolveBundledRuntimeAssetSource(bloomAsset, import.meta.url),
47
+ "btree_gin": resolveBundledRuntimeAssetSource(btree_ginAsset, import.meta.url),
48
+ "btree_gist": resolveBundledRuntimeAssetSource(btree_gistAsset, import.meta.url),
49
+ "citext": resolveBundledRuntimeAssetSource(citextAsset, import.meta.url),
50
+ "cube": resolveBundledRuntimeAssetSource(cubeAsset, import.meta.url),
51
+ "dict_int": resolveBundledRuntimeAssetSource(dict_intAsset, import.meta.url),
52
+ "dict_xsyn": resolveBundledRuntimeAssetSource(dict_xsynAsset, import.meta.url),
53
+ "earthdistance": resolveBundledRuntimeAssetSource(earthdistanceAsset, import.meta.url),
54
+ "file_fdw": resolveBundledRuntimeAssetSource(file_fdwAsset, import.meta.url),
55
+ "fuzzystrmatch": resolveBundledRuntimeAssetSource(fuzzystrmatchAsset, import.meta.url),
56
+ "hstore": resolveBundledRuntimeAssetSource(hstoreAsset, import.meta.url),
57
+ "intarray": resolveBundledRuntimeAssetSource(intarrayAsset, import.meta.url),
58
+ "isn": resolveBundledRuntimeAssetSource(isnAsset, import.meta.url),
59
+ "lo": resolveBundledRuntimeAssetSource(loAsset, import.meta.url),
60
+ "ltree": resolveBundledRuntimeAssetSource(ltreeAsset, import.meta.url),
61
+ "pageinspect": resolveBundledRuntimeAssetSource(pageinspectAsset, import.meta.url),
62
+ "pg_buffercache": resolveBundledRuntimeAssetSource(pg_buffercacheAsset, import.meta.url),
63
+ "pg_freespacemap": resolveBundledRuntimeAssetSource(pg_freespacemapAsset, import.meta.url),
64
+ "pg_surgery": resolveBundledRuntimeAssetSource(pg_surgeryAsset, import.meta.url),
65
+ "pg_trgm": resolveBundledRuntimeAssetSource(pg_trgmAsset, import.meta.url),
66
+ "pg_visibility": resolveBundledRuntimeAssetSource(pg_visibilityAsset, import.meta.url),
67
+ "pg_walinspect": resolveBundledRuntimeAssetSource(pg_walinspectAsset, import.meta.url),
68
+ "seg": resolveBundledRuntimeAssetSource(segAsset, import.meta.url),
69
+ "tablefunc": resolveBundledRuntimeAssetSource(tablefuncAsset, import.meta.url),
70
+ "tcn": resolveBundledRuntimeAssetSource(tcnAsset, import.meta.url),
71
+ "tsm_system_rows": resolveBundledRuntimeAssetSource(tsm_system_rowsAsset, import.meta.url),
72
+ "tsm_system_time": resolveBundledRuntimeAssetSource(tsm_system_timeAsset, import.meta.url),
73
+ "unaccent": resolveBundledRuntimeAssetSource(unaccentAsset, import.meta.url),
74
+ "uuid_ossp": resolveBundledRuntimeAssetSource(uuid_osspAsset, import.meta.url),
75
+ "vector": resolveBundledRuntimeAssetSource(vectorAsset, import.meta.url),
76
+ },
77
+ });
@@ -0,0 +1 @@
1
+ "use strict";var z=Object.create;var m=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,T=Object.prototype.hasOwnProperty;var D=(e,t)=>{for(var n in t)m(e,n,{get:t[n],enumerable:!0})},p=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of v(t))!T.call(e,i)&&i!==n&&m(e,i,{get:()=>t[i],enumerable:!(s=E(t,i))||s.enumerable});return e};var G=(e,t,n)=>(n=e!=null?z(x(e)):{},p(t||!e||!e.__esModule?m(n,"default",{value:e,enumerable:!0}):n,e)),I=e=>p(m({},"__esModule",{value:!0}),e);var H={};D(H,{copyPrismaDevRuntimeAssets:()=>O,getPGliteRuntimeAssets:()=>W,getPrismaDevRuntimeAssetManifest:()=>L,registerBundledPGliteRuntimeAssetSources:()=>C,resolveBundledRuntimeAssetSource:()=>u});module.exports=I(H);var N=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,l=N();var o=require("fs"),a=require("fs/promises"),w=require("module"),A=require("path"),r=require("url"),k=(0,w.createRequire)(l),M=["initdb.wasm","pglite.data","pglite.wasm"],P={amcheck:"amcheck.tar.gz",bloom:"bloom.tar.gz",btree_gin:"btree_gin.tar.gz",btree_gist:"btree_gist.tar.gz",citext:"citext.tar.gz",cube:"cube.tar.gz",dict_int:"dict_int.tar.gz",dict_xsyn:"dict_xsyn.tar.gz",earthdistance:"earthdistance.tar.gz",file_fdw:"file_fdw.tar.gz",fuzzystrmatch:"fuzzystrmatch.tar.gz",hstore:"hstore.tar.gz",intarray:"intarray.tar.gz",isn:"isn.tar.gz",lo:"lo.tar.gz",ltree:"ltree.tar.gz",pageinspect:"pageinspect.tar.gz",pg_buffercache:"pg_buffercache.tar.gz",pg_freespacemap:"pg_freespacemap.tar.gz",pg_surgery:"pg_surgery.tar.gz",pg_trgm:"pg_trgm.tar.gz",pg_visibility:"pg_visibility.tar.gz",pg_walinspect:"pg_walinspect.tar.gz",seg:"seg.tar.gz",tablefunc:"tablefunc.tar.gz",tcn:"tcn.tar.gz",tsm_system_rows:"tsm_system_rows.tar.gz",tsm_system_time:"tsm_system_time.tar.gz",unaccent:"unaccent.tar.gz",uuid_ossp:"uuid-ossp.tar.gz",vector:"vector.tar.gz"},U=[...M.map(e=>({fileName:e,kind:"core",name:e})),...Object.entries(P).map(([e,t])=>({fileName:t,kind:"extension",name:e}))],d=new Map,h=Symbol.for("@prisma/dev/bundled-pglite-runtime-asset-sources"),c=null;async function O(e){let t=f(e),n=(0,r.fileURLToPath)(t);await(0,a.mkdir)(n,{recursive:!0});let s=[];for(let i of L()){let g=new URL(i.fileName,t),R=(0,r.fileURLToPath)(g);await(0,a.copyFile)(i.sourcePath,R),s.push({...i,destinationPath:R})}return s}function L(){let e=_();return U.map(t=>({...t,sourcePath:(0,r.fileURLToPath)(new URL(t.fileName,e))}))}async function W(){await K();let e=S();if(e)return await J(e),await F(e);let t=q(),n=t.href,s=d.get(n);return s||(s=j(t),d.set(n,s)),await s}function C(e){let t=globalThis;t[h]={extensions:Object.fromEntries(Object.entries(e.extensions).map(([n,s])=>[n,u(s)])),fsBundle:u(e.fsBundle),initdbWasm:u(e.initdbWasm),wasmModule:u(e.wasmModule)}}function u(e,t=l){return e instanceof URL?e:/^(?:https?:|data:|file:)/.test(e)?new URL(e):e.startsWith("/")||/^[a-zA-Z]:[\\/]/.test(e)?(0,r.pathToFileURL)(e):new URL(e,t)}async function F(e){let t=`bundled:${e.wasmModule.href}:${e.fsBundle.href}`,n=d.get(t);return n||(n=$(e),d.set(t,n)),await n}async function j(e){let[t,n]=await Promise.all([(0,a.readFile)(new URL("pglite.data",e)),(0,a.readFile)(new URL("pglite.wasm",e))]),s=B();return{extensions:Object.fromEntries(Object.entries(P).map(([i,g])=>[i,new URL(g,e)])),fsBundle:new Blob([Uint8Array.from(t)]),wasmModule:await s.compile(n)}}async function $(e){let[t,n]=await Promise.all([b(e.fsBundle),b(e.wasmModule)]),s=B();return{extensions:e.extensions,fsBundle:new Blob([Uint8Array.from(t)]),wasmModule:await s.compile(n)}}async function J(e){if(e.initdbWasm.protocol!=="file:")return;let t=new URL("initdb.wasm",f(new URL("./",e.initdbWasm))),n=(0,r.fileURLToPath)(t);(0,o.existsSync)(n)||await(0,a.copyFile)((0,r.fileURLToPath)(e.initdbWasm),n)}function f(e){return e instanceof URL?y(e):y((0,r.pathToFileURL)(e))}function y(e){return e.href.endsWith("/")?e:new URL(`${e.href}/`)}function _(){let e=k.resolve("@electric-sql/pglite");return f((0,A.dirname)(e))}function q(){let e=f(new URL("./",l));if(Y(e))return e;if(X())return _();throw new Error("Unable to locate PGlite runtime assets. If you bundled @prisma/dev, copy them next to the bundle with copyPrismaDevRuntimeAssets().")}function Y(e){return U.every(t=>(0,o.existsSync)((0,r.fileURLToPath)(new URL(t.fileName,e))))}function S(){return globalThis[h]??null}async function K(){!Z()||S()||(c||(c=import("./runtime-assets-manifest.bun.js").then(()=>{}).catch(e=>{throw c=null,e})),await c)}function X(){let e=(0,r.fileURLToPath)(new URL("../package.json",l));if(!(0,o.existsSync)(e))return!1;try{return JSON.parse((0,o.readFileSync)(e,"utf8")).name==="@prisma/dev"}catch{return!1}}function Z(){return typeof globalThis.Bun<"u"}function B(){let e=globalThis.WebAssembly;if(!e)throw new Error("WebAssembly is not available in this runtime.");return e}async function b(e){if(e.protocol==="file:")return await(0,a.readFile)(e);let t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch runtime asset ${e.href}: ${t.status} ${t.statusText}`);return new Uint8Array(await t.arrayBuffer())}0&&(module.exports={copyPrismaDevRuntimeAssets,getPGliteRuntimeAssets,getPrismaDevRuntimeAssetManifest,registerBundledPGliteRuntimeAssetSources,resolveBundledRuntimeAssetSource});
@@ -0,0 +1,26 @@
1
+ interface PGliteRuntimeAssets {
2
+ readonly extensions: Record<string, URL>;
3
+ readonly fsBundle: Blob;
4
+ readonly wasmModule: unknown;
5
+ }
6
+ interface PrismaDevRuntimeAsset {
7
+ readonly fileName: string;
8
+ readonly kind: "core" | "extension";
9
+ readonly name: string;
10
+ readonly sourcePath: string;
11
+ }
12
+ interface CopiedPrismaDevRuntimeAsset extends PrismaDevRuntimeAsset {
13
+ readonly destinationPath: string;
14
+ }
15
+ declare function copyPrismaDevRuntimeAssets(destinationDir: string | URL): Promise<CopiedPrismaDevRuntimeAsset[]>;
16
+ declare function getPrismaDevRuntimeAssetManifest(): readonly PrismaDevRuntimeAsset[];
17
+ declare function getPGliteRuntimeAssets(): Promise<PGliteRuntimeAssets>;
18
+ declare function registerBundledPGliteRuntimeAssetSources(sources: {
19
+ extensions: Record<string, string | URL>;
20
+ fsBundle: string | URL;
21
+ initdbWasm: string | URL;
22
+ wasmModule: string | URL;
23
+ }): void;
24
+ declare function resolveBundledRuntimeAssetSource(source: string | URL, baseURL?: string): URL;
25
+
26
+ export { type CopiedPrismaDevRuntimeAsset, type PrismaDevRuntimeAsset, copyPrismaDevRuntimeAssets, getPGliteRuntimeAssets, getPrismaDevRuntimeAssetManifest, registerBundledPGliteRuntimeAssetSources, resolveBundledRuntimeAssetSource };
@@ -0,0 +1,26 @@
1
+ interface PGliteRuntimeAssets {
2
+ readonly extensions: Record<string, URL>;
3
+ readonly fsBundle: Blob;
4
+ readonly wasmModule: unknown;
5
+ }
6
+ interface PrismaDevRuntimeAsset {
7
+ readonly fileName: string;
8
+ readonly kind: "core" | "extension";
9
+ readonly name: string;
10
+ readonly sourcePath: string;
11
+ }
12
+ interface CopiedPrismaDevRuntimeAsset extends PrismaDevRuntimeAsset {
13
+ readonly destinationPath: string;
14
+ }
15
+ declare function copyPrismaDevRuntimeAssets(destinationDir: string | URL): Promise<CopiedPrismaDevRuntimeAsset[]>;
16
+ declare function getPrismaDevRuntimeAssetManifest(): readonly PrismaDevRuntimeAsset[];
17
+ declare function getPGliteRuntimeAssets(): Promise<PGliteRuntimeAssets>;
18
+ declare function registerBundledPGliteRuntimeAssetSources(sources: {
19
+ extensions: Record<string, string | URL>;
20
+ fsBundle: string | URL;
21
+ initdbWasm: string | URL;
22
+ wasmModule: string | URL;
23
+ }): void;
24
+ declare function resolveBundledRuntimeAssetSource(source: string | URL, baseURL?: string): URL;
25
+
26
+ export { type CopiedPrismaDevRuntimeAsset, type PrismaDevRuntimeAsset, copyPrismaDevRuntimeAssets, getPGliteRuntimeAssets, getPrismaDevRuntimeAssetManifest, registerBundledPGliteRuntimeAssetSources, resolveBundledRuntimeAssetSource };
@@ -0,0 +1 @@
1
+ import{a,b,c,d,e}from"./chunk-62DM64XC.js";export{a as copyPrismaDevRuntimeAssets,c as getPGliteRuntimeAssets,b as getPrismaDevRuntimeAssetManifest,d as registerBundledPGliteRuntimeAssetSources,e as resolveBundledRuntimeAssetSource};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prisma/dev",
3
- "version": "0.22.2",
3
+ "version": "0.23.0",
4
4
  "description": "A local Prisma Postgres server for development and testing",
5
5
  "type": "module",
6
6
  "author": "Igal Klebanov <igalklebanov@gmail.com> (https://github.com/igalklebanov)",
@@ -77,9 +77,9 @@
77
77
  "common-stuff": "^0.0.0"
78
78
  },
79
79
  "dependencies": {
80
- "@electric-sql/pglite": "0.3.16",
81
- "@electric-sql/pglite-socket": "0.0.22",
82
- "@electric-sql/pglite-tools": "0.2.21",
80
+ "@electric-sql/pglite": "0.4.1",
81
+ "@electric-sql/pglite-socket": "0.1.1",
82
+ "@electric-sql/pglite-tools": "0.3.1",
83
83
  "@hono/node-server": "1.19.11",
84
84
  "@mrleebo/prisma-ast": "0.15.0",
85
85
  "@prisma/get-platform": "7.2.0",
@@ -96,11 +96,12 @@
96
96
  "zeptomatch": "2.1.0"
97
97
  },
98
98
  "scripts": {
99
- "build": "tsup",
99
+ "build": "tsup && node ./scripts/generate-bun-runtime-assets.mjs --dist",
100
100
  "check:exports": "attw . --pack --profile node16",
101
101
  "dev": "tsup --watch",
102
102
  "lint": "eslint --fix .",
103
- "test": "vitest run",
103
+ "postinstall": "node -e \"const { existsSync } = require('fs'); const { execFileSync } = require('child_process'); if (existsSync('./scripts/generate-bun-runtime-assets.mjs')) { execFileSync(process.execPath, ['./scripts/generate-bun-runtime-assets.mjs'], { stdio: 'inherit' }); }\"",
104
+ "test": "node ./scripts/generate-bun-runtime-assets.mjs && vitest run",
104
105
  "typecheck": "tsc --noEmit"
105
106
  }
106
107
  }
@@ -1,84 +0,0 @@
1
- import{g as w}from"./chunk-OTI5SWIV.js";import{e as b}from"./chunk-DGKV2DPF.js";import{filename as k}from"pathe/utils";import{protocol as G}from"@electric-sql/pglite";var m="_prisma_dev_wal",p="events",_="install_all_triggers",f="capture_event",N="prisma_dev_wal_capture",E=new WeakMap,W=new Set(["ALTER","COMMIT","COPY","CREATE","DELETE","DROP","INSERT","MERGE","TRUNCATE","UPDATE"]);async function g(e,t){let o=E.get(e);if(o&&!o.closed)return o.bridge;let n=e.execProtocolRaw.bind(e),r={bridge:{close:async()=>{r.closed||(r.closed=!0,r.subscribers.clear(),e.execProtocolRaw===s&&(e.execProtocolRaw=n),await r.pollPromise,E.delete(e))},poll:async()=>{await S(r,e)},subscribe:d=>(r.subscribers.add(d),()=>{r.subscribers.delete(d)})},closed:!1,ensureInfrastructurePromise:null,pendingPoll:!1,pollPromise:null,subscribers:new Set,suppressDepth:0},s=async(d,l)=>{let i=await n(d,l);return!r.closed&&r.suppressDepth===0&&L(i)&&S(r,e),i};return e.execProtocolRaw=s,E.set(e,r),await D(r,e),r.bridge}async function R(e){let t=E.get(e);t&&await t.bridge.close()}function A(e){for(let t of e){if(t.name!=="commandComplete"||typeof t.text!="string")continue;let o=t.text.split(/\s+/,1)[0]?.toUpperCase();if(o&&W.has(o))return!0}return!1}function L(e){if(e.length===0)return!1;let t=[];return new G.Parser().parse(e,n=>{t.push(n)}),A(t)}async function D(e,t){e.ensureInfrastructurePromise??=T(e,t,async()=>{await t.exec(`CREATE SCHEMA IF NOT EXISTS "${m}"`),await t.exec(`
2
- CREATE TABLE IF NOT EXISTS "${m}"."${p}" (
3
- id BIGSERIAL PRIMARY KEY,
4
- txid BIGINT NOT NULL DEFAULT txid_current(),
5
- schema_name TEXT NOT NULL,
6
- table_name TEXT NOT NULL,
7
- op TEXT NOT NULL,
8
- row_data JSONB,
9
- old_row_data JSONB,
10
- created_at TIMESTAMPTZ NOT NULL DEFAULT clock_timestamp()
11
- )
12
- `),await t.exec(`
13
- CREATE OR REPLACE FUNCTION "${m}"."${f}"()
14
- RETURNS trigger
15
- LANGUAGE plpgsql
16
- AS $$
17
- BEGIN
18
- IF TG_TABLE_SCHEMA = '${m}' THEN
19
- RETURN COALESCE(NEW, OLD);
20
- END IF;
21
-
22
- INSERT INTO "${m}"."${p}" (
23
- txid,
24
- schema_name,
25
- table_name,
26
- op,
27
- row_data,
28
- old_row_data
29
- )
30
- VALUES (
31
- txid_current(),
32
- TG_TABLE_SCHEMA,
33
- TG_TABLE_NAME,
34
- lower(TG_OP),
35
- CASE WHEN TG_OP IN ('INSERT', 'UPDATE') THEN to_jsonb(NEW) ELSE NULL END,
36
- CASE WHEN TG_OP IN ('UPDATE', 'DELETE') THEN to_jsonb(OLD) ELSE NULL END
37
- );
38
-
39
- RETURN COALESCE(NEW, OLD);
40
- END;
41
- $$;
42
- `),await t.exec(`
43
- CREATE OR REPLACE FUNCTION "${m}"."${_}"()
44
- RETURNS void
45
- LANGUAGE plpgsql
46
- AS $$
47
- DECLARE
48
- target REGCLASS;
49
- BEGIN
50
- FOR target IN
51
- SELECT c.oid::regclass
52
- FROM pg_class AS c
53
- JOIN pg_namespace AS n ON n.oid = c.relnamespace
54
- WHERE c.relkind IN ('r', 'p')
55
- AND n.nspname NOT IN ('${m}', 'information_schema', 'pg_catalog')
56
- AND n.nspname NOT LIKE 'pg_temp_%'
57
- AND n.nspname NOT LIKE 'pg_toast%'
58
- LOOP
59
- IF EXISTS (
60
- SELECT 1
61
- FROM pg_trigger
62
- WHERE tgrelid = target
63
- AND tgname = '${N}'
64
- ) THEN
65
- CONTINUE;
66
- END IF;
67
-
68
- EXECUTE format(
69
- 'CREATE TRIGGER %I AFTER INSERT OR UPDATE OR DELETE ON %s FOR EACH ROW EXECUTE FUNCTION "${m}"."${f}"()',
70
- '${N}',
71
- target::text
72
- );
73
- END LOOP;
74
- END;
75
- $$;
76
- `),await v(e,t)}),await e.ensureInfrastructurePromise}async function v(e,t){await T(e,t,async()=>{await t.query(`SELECT "${m}"."${_}"()`)})}async function U(e,t){await D(e,t),await v(e,t);let o=await T(e,t,async()=>await t.query(`
77
- WITH drained AS (
78
- DELETE FROM "${m}"."${p}"
79
- RETURNING txid, schema_name, table_name, op, row_data, old_row_data, id
80
- )
81
- SELECT txid, schema_name, table_name, op, row_data, old_row_data
82
- FROM drained
83
- ORDER BY id
84
- `));if(o.rows.length===0||e.subscribers.size===0)return;let n=o.rows.map(M);for(let r of e.subscribers)queueMicrotask(()=>{if(!e.closed&&e.subscribers.has(r))try{r(n)}catch(s){console.error("[WAL bridge] subscriber failed",s)}})}async function S(e,t){if(!e.closed){if(e.pollPromise){e.pendingPoll=!0,await e.pollPromise;return}e.pollPromise=(async()=>{do e.pendingPoll=!1,await U(e,t);while(e.pendingPoll&&!e.closed)})().finally(()=>{e.pollPromise=null}),await e.pollPromise}}async function T(e,t,o){e.suppressDepth+=1;try{return await o()}finally{e.suppressDepth-=1,e.suppressDepth===0&&!e.closed&&E.get(t)!==e&&(e.closed=!0)}}function M(e){return{oldRecord:e.old_row_data,record:e.row_data,schema:e.schema_name,table:e.table_name,txid:String(e.txid),type:F(e.op)}}function F(e){switch(e.toLowerCase()){case"delete":return"delete";case"insert":return"insert";case"update":return"update";default:throw new Error(`Unsupported WAL bridge operation: ${e}`)}}var H=10,a={connectionLimit:H,connectTimeout:0,database:"template1",maxIdleConnectionLifetime:0,password:"postgres",poolTimeout:0,socketTimeout:0,sslMode:"disable",username:"postgres"},q=`postgres://${a.username}:${a.password}@localhost`,h=new URLSearchParams({sslmode:a.sslMode}),X=new URLSearchParams({...Object.fromEntries(h.entries()),connection_limit:String(a.connectionLimit),connect_timeout:String(a.connectTimeout),max_idle_connection_lifetime:String(a.maxIdleConnectionLifetime),pool_timeout:String(a.poolTimeout),socket_timeout:String(a.socketTimeout)});async function te(e,t){let o=e==="database"?t.databasePort:t.shadowDatabasePort;if(t.dryRun)return y(e,t,{db:null,port:o,server:null});let{debug:n}=t,s=await(e==="shadow_database"?Y:O)(t.pgliteDataDirPath,n);n&&s.onNotification((c,u)=>{console.debug(`[${e}][${c}] ${u}`)});let{PGLiteSocketServer:d}=await import("@electric-sql/pglite-socket"),l=e==="shadow_database"?t.shadowDatabaseIdleTimeoutMillis:t.databaseIdleTimeoutMillis,i=new d({db:s,debug:n,idleTimeout:Number.isFinite(l)?l:0,inspect:n,maxConnections:a.connectionLimit,port:o});n&&(i.addEventListener("listening",c=>{let{detail:u}=c;console.debug(`[${e}] server listening on ${JSON.stringify(u)}`)}),i.addEventListener("connection",c=>{let{clientAddress:u,clientPort:$}=c.detail;console.debug(`[${e}] client connected from ${u}:${$}`)}),i.addEventListener("error",c=>{let{detail:u}=c;console.error(`[${e}] server error:`,u)}));try{await i.start()}catch(c){throw c instanceof Error&&"code"in c&&c.code==="EADDRINUSE"?new w(o):c}let P=Number(i.getServerConn().split(":").at(1));return t[e==="database"?"databasePort":"shadowDatabasePort"]=P,y(e,t,{db:s,port:P,server:i})}function y(e,t,o){let{debug:n}=t,{db:r,port:s,server:d}=o||{};return n&&console.debug(`[${e}] server started on port ${s}`),{...a,attachWalEventBridge:async()=>{if(e!=="database"||!r)throw new Error("WAL bridge is only available for the primary database server");return await g(r)},close:async()=>{let l=[];try{await d?.stop(),n&&console.debug(`[${e}] server stopped on port ${s}`)}catch(i){console.error(`[${e}] server stop error`,i),l.push(i)}if(e==="database"){try{r&&await R(r),n&&console.debug(`[${e}] closed WAL bridge`)}catch(i){console.error(`[${e}] WAL bridge close error`,i),l.push(i)}try{await r?.syncToFs(),n&&console.debug(`[${e}] synced to filesystem`)}catch(i){console.error(`[${e}] sync error`,i),l.push(i)}}try{await r?.close(),n&&console.debug(`[${e}] closed`)}catch(i){console.error(`[${e}] close error`,i),l.push(i)}if(l.length>0)throw new AggregateError(l,`Failed to close ${e} properly`)},connectionString:I(s,h),dump:async l=>{e==="shadow_database"||!r||await Q({db:r,debug:n,destinationPath:l})},port:s,prismaORMConnectionString:I(s,X),terminalCommand:`PGPASSWORD=${a.password} PGSSLMODE=${a.sslMode} psql -h localhost -p ${s} -U ${a.username} -d ${a.database}`}}function I(e,t){return`${q}:${e}/${a.database}?${t.toString()}`}async function O(e,t){let{PGlite:o}=await import("@electric-sql/pglite");return await o.create({database:a.database,dataDir:e,debug:t?5:void 0,extensions:await B(),relaxedDurability:!1,username:a.username})}async function Y(e,t){let{PGlite:o}=await import("@electric-sql/pglite");return await o.create({database:a.database,dataDir:"memory://",debug:t?5:void 0,extensions:await B(),relaxedDurability:!1,username:a.username})}async function B(){let e=await Promise.all([import("@electric-sql/pglite/contrib/amcheck"),import("@electric-sql/pglite/contrib/bloom"),import("@electric-sql/pglite/contrib/btree_gin"),import("@electric-sql/pglite/contrib/btree_gist"),import("@electric-sql/pglite/contrib/citext"),import("@electric-sql/pglite/contrib/cube"),import("@electric-sql/pglite/contrib/dict_int"),import("@electric-sql/pglite/contrib/dict_xsyn"),import("@electric-sql/pglite/contrib/earthdistance"),import("@electric-sql/pglite/contrib/file_fdw"),import("@electric-sql/pglite/contrib/fuzzystrmatch"),import("@electric-sql/pglite/contrib/hstore"),import("@electric-sql/pglite/contrib/intarray"),import("@electric-sql/pglite/contrib/isn"),import("@electric-sql/pglite/contrib/lo"),import("@electric-sql/pglite/contrib/ltree"),import("@electric-sql/pglite/contrib/pageinspect"),import("@electric-sql/pglite/contrib/pg_buffercache"),import("@electric-sql/pglite/contrib/pg_freespacemap"),import("@electric-sql/pglite/contrib/pg_surgery"),import("@electric-sql/pglite/contrib/pg_trgm"),import("@electric-sql/pglite/contrib/pg_visibility"),import("@electric-sql/pglite/contrib/pg_walinspect"),import("@electric-sql/pglite/contrib/seg"),import("@electric-sql/pglite/contrib/tablefunc"),import("@electric-sql/pglite/contrib/tcn"),import("@electric-sql/pglite/contrib/tsm_system_rows"),import("@electric-sql/pglite/contrib/tsm_system_time"),import("@electric-sql/pglite/contrib/unaccent"),import("@electric-sql/pglite/contrib/uuid_ossp"),import("@electric-sql/pglite/vector")]);return Object.assign({},...e)}async function Q(e){let{dataDir:t,db:o,debug:n,destinationPath:r}=e,s=o||await O(t,n),{pgDump:d}=await import("@electric-sql/pglite-tools/pg_dump"),l=await d({args:["--schema-only","--no-owner"],fileName:r?k(r):void 0,pg:await s.clone()});return r?(n&&console.debug(`[DB] Dumping database to ${r}`),await b(l,r)):(n&&console.debug("[DB] Dumping database to memory"),await l.text())}export{g as a,A as b,L as c,te as d,Q as e};