@prisma/dev 0.0.0-dev.202512121230 → 0.0.0-dev.202512121242

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.
@@ -27,7 +27,7 @@ ${[...o(c,i)].join(`
27
27
 
28
28
  ${t.fs.read($e.default.join(n,c))}`).join(`
29
29
 
30
- `)},process.chdir(t.tmpDir)}),afterEach(()=>{process.chdir(t.mocked.cwd)}),Mi(e)}};function Mi(e){return{add(t){let r=t(e);return Mi(r)},assemble(){return e}}}var Yf=()=>e=>{let t=e;return beforeEach(()=>{t.mocked["console.error"]=jest.spyOn(console,"error").mockImplementation(()=>{}),t.mocked["console.log"]=jest.spyOn(console,"log").mockImplementation(()=>{}),t.mocked["console.info"]=jest.spyOn(console,"info").mockImplementation(()=>{}),t.mocked["console.warn"]=jest.spyOn(console,"warn").mockImplementation(()=>{})}),afterEach(()=>{t.mocked["console.error"].mockRestore(),t.mocked["console.log"].mockRestore(),t.mocked["console.info"].mockRestore(),t.mocked["console.warn"].mockRestore()}),t},zf=({normalizationRules:e}={normalizationRules:[]})=>t=>{let r=t,n=(i,o)=>{for(let[c,a]of o)i=i.replace(c,a);return i};return beforeEach(()=>{r.mocked["process.stderr.write"]=jest.spyOn(process.stderr,"write").mockImplementation(()=>!0),r.mocked["process.stdout.write"]=jest.spyOn(process.stdout,"write").mockImplementation(()=>!0),r.normalizedCapturedStdout=()=>n(r.mocked["process.stdout.write"].mock.calls.join(""),e),r.normalizedCapturedStderr=()=>n(r.mocked["process.stderr.write"].mock.calls.join(""),e),r.clearCapturedStdout=()=>r.mocked["process.stdout.write"].mockClear(),r.clearCapturedStderr=()=>r.mocked["process.stderr.write"].mockClear()}),afterEach(()=>{r.mocked["process.stderr.write"].mockRestore(),r.mocked["process.stdout.write"].mockRestore()}),r},Qf=()=>e=>{let t=e;return beforeEach(()=>{t.mocked["process.exit"]=jest.spyOn(process,"exit").mockImplementation(r=>{throw new Error("process.exit: "+r)}),t.recordedExitCode=()=>t.mocked["process.exit"].mock.calls[0]?.[0]}),afterEach(()=>{t.mocked["process.exit"].mockRestore()}),t}});var Wi=Ee((gh,Gi)=>{"use strict";ce();var Sr=Object.defineProperty,Zf=Object.getOwnPropertyDescriptor,ed=Object.getOwnPropertyNames,td=Object.prototype.hasOwnProperty,rd=(e,t)=>{for(var r in t)Sr(e,r,{get:t[r],enumerable:!0})},nd=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of ed(t))!td.call(e,i)&&i!==r&&Sr(e,i,{get:()=>t[i],enumerable:!(n=Zf(t,i))||n.enumerable});return e},id=e=>nd(Sr({},"__esModule",{value:!0}),e),Bi={};rd(Bi,{binaryTargets:()=>Hi.binaryTargets,getBinaryTargetForCurrentPlatform:()=>gr.getBinaryTargetForCurrentPlatform,getPlatformInfo:()=>gr.getPlatformInfo,getos:()=>gr.getos,jestConsoleContext:()=>Et.jestConsoleContext,jestContext:()=>Et.jestContext,jestStdoutContext:()=>Et.jestStdoutContext,link:()=>sd.link,processExitContext:()=>Et.processExitContext});Gi.exports=id(Bi);var gr=fn(),sd=An(),hh=Tt(),mh=rt(),Hi=Rn(),vh=Tn(),Et=qi(),_h=_r(),yh=qe();(0,Hi.init_binaryTargets)()});ce();ce();var Ui=Ki(Wi(),1);import{createServer as ad}from"http";import{promisify as od}from"util";async function Vi(e,t){let{port:r}=t;if(t.dryRun)return Ji(r,null);let n=await ud(r,e,t),{promise:i,reject:o,resolve:c}=wr(),{serve:a}=await import("@hono/node-server"),s=a({createServer:ad,fetch:n.fetch,overrideGlobalObjects:!1,port:r},c);return s.on("error",l=>{if(typeof l=="object"&&"code"in l&&l.code==="EADDRINUSE")return o(new At(r));console.error("[Accelerate]",l)}),await i,Ji(r,s)}function Ji(e,t){return{async close(){t&&await Promise.allSettled([od(t.close.bind(t))(),Er.stopAll()])},port:e,url:`http://localhost:${e}`}}async function ud(e,t,r){let{debug:n}=r,[{Hono:i},{accelerateRoute:o},{utilityRoute:c}]=await Promise.all([import("hono/tiny"),import("./accelerate-B4RDPMOM.js"),import("./utility-2R6QXHRL.js")]),a=new i,s=await(0,Ui.getPlatformInfo)();if(n&&console.debug("[Accelerate] platform info: %s",JSON.stringify(s)),n){let{logger:d}=await import("hono/logger");a.use("*",d((...v)=>console.log("[Accelerate]",...v)))}a.use("*",async(d,v)=>(d.set("db",t),d.set("debug",!!n),d.set("platform",s),d.set("port",e),d.set("protocol","http"),d.set("serverState",r),d.set("shadowDBPort",r.shadowDatabasePort),await v()));let l=new i;return l.route("/",o),l.route("/",c),a.route("/",l),a}async function cd(e){let t=await Ar.createExclusively(e),[r,n]=await Promise.all([Ot("database",t),Ot("shadow_database",t)]),i=await Vi(r,t),o=`prisma+postgres://localhost:${i.port}/?${new URLSearchParams({api_key:br({databaseUrl:r.prismaORMConnectionString,name:t.name,shadowDatabaseUrl:n.prismaORMConnectionString})}).toString()}`,c={database:{connectionString:r.connectionString,prismaORMConnectionString:r.prismaORMConnectionString,terminalCommand:r.terminalCommand},http:{url:i.url},ppg:{url:o},shadowDatabase:{connectionString:n.prismaORMConnectionString,prismaORMConnectionString:n.prismaORMConnectionString,terminalCommand:n.terminalCommand}};return await t.writeServerDump(c),{...c,close:()=>a(t,[i,r,n]),name:t.name};async function a(s,l){let v=(await Promise.allSettled(l.map(_=>_.close()))).filter(_=>_.status==="rejected").map(_=>new Error(_.reason));try{await s.close()}catch(_){v.push(_)}if(v.length>0)throw new AggregateError(v,"Failed to close some servers")}}async function Nh(e){return await cd(e)}export{cd as a,Nh as b};
30
+ `)},process.chdir(t.tmpDir)}),afterEach(()=>{process.chdir(t.mocked.cwd)}),Mi(e)}};function Mi(e){return{add(t){let r=t(e);return Mi(r)},assemble(){return e}}}var Yf=()=>e=>{let t=e;return beforeEach(()=>{t.mocked["console.error"]=jest.spyOn(console,"error").mockImplementation(()=>{}),t.mocked["console.log"]=jest.spyOn(console,"log").mockImplementation(()=>{}),t.mocked["console.info"]=jest.spyOn(console,"info").mockImplementation(()=>{}),t.mocked["console.warn"]=jest.spyOn(console,"warn").mockImplementation(()=>{})}),afterEach(()=>{t.mocked["console.error"].mockRestore(),t.mocked["console.log"].mockRestore(),t.mocked["console.info"].mockRestore(),t.mocked["console.warn"].mockRestore()}),t},zf=({normalizationRules:e}={normalizationRules:[]})=>t=>{let r=t,n=(i,o)=>{for(let[c,a]of o)i=i.replace(c,a);return i};return beforeEach(()=>{r.mocked["process.stderr.write"]=jest.spyOn(process.stderr,"write").mockImplementation(()=>!0),r.mocked["process.stdout.write"]=jest.spyOn(process.stdout,"write").mockImplementation(()=>!0),r.normalizedCapturedStdout=()=>n(r.mocked["process.stdout.write"].mock.calls.join(""),e),r.normalizedCapturedStderr=()=>n(r.mocked["process.stderr.write"].mock.calls.join(""),e),r.clearCapturedStdout=()=>r.mocked["process.stdout.write"].mockClear(),r.clearCapturedStderr=()=>r.mocked["process.stderr.write"].mockClear()}),afterEach(()=>{r.mocked["process.stderr.write"].mockRestore(),r.mocked["process.stdout.write"].mockRestore()}),r},Qf=()=>e=>{let t=e;return beforeEach(()=>{t.mocked["process.exit"]=jest.spyOn(process,"exit").mockImplementation(r=>{throw new Error("process.exit: "+r)}),t.recordedExitCode=()=>t.mocked["process.exit"].mock.calls[0]?.[0]}),afterEach(()=>{t.mocked["process.exit"].mockRestore()}),t}});var Wi=Ee((gh,Gi)=>{"use strict";ce();var Sr=Object.defineProperty,Zf=Object.getOwnPropertyDescriptor,ed=Object.getOwnPropertyNames,td=Object.prototype.hasOwnProperty,rd=(e,t)=>{for(var r in t)Sr(e,r,{get:t[r],enumerable:!0})},nd=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of ed(t))!td.call(e,i)&&i!==r&&Sr(e,i,{get:()=>t[i],enumerable:!(n=Zf(t,i))||n.enumerable});return e},id=e=>nd(Sr({},"__esModule",{value:!0}),e),Bi={};rd(Bi,{binaryTargets:()=>Hi.binaryTargets,getBinaryTargetForCurrentPlatform:()=>gr.getBinaryTargetForCurrentPlatform,getPlatformInfo:()=>gr.getPlatformInfo,getos:()=>gr.getos,jestConsoleContext:()=>Et.jestConsoleContext,jestContext:()=>Et.jestContext,jestStdoutContext:()=>Et.jestStdoutContext,link:()=>sd.link,processExitContext:()=>Et.processExitContext});Gi.exports=id(Bi);var gr=fn(),sd=An(),hh=Tt(),mh=rt(),Hi=Rn(),vh=Tn(),Et=qi(),_h=_r(),yh=qe();(0,Hi.init_binaryTargets)()});ce();ce();var Ui=Ki(Wi(),1);import{createServer as ad}from"http";import{promisify as od}from"util";async function Vi(e,t){let{port:r}=t;if(t.dryRun)return Ji(r,null);let n=await ud(r,e,t),{promise:i,reject:o,resolve:c}=wr(),{serve:a}=await import("@hono/node-server"),s=a({createServer:ad,fetch:n.fetch,overrideGlobalObjects:!1,port:r},c);return s.on("error",l=>{if(typeof l=="object"&&"code"in l&&l.code==="EADDRINUSE")return o(new At(r));console.error("[Accelerate]",l)}),await i,Ji(r,s)}function Ji(e,t){return{async close(){t&&await Promise.allSettled([od(t.close.bind(t))(),Er.stopAll()])},port:e,url:`http://localhost:${e}`}}async function ud(e,t,r){let{debug:n}=r,[{Hono:i},{accelerateRoute:o},{utilityRoute:c}]=await Promise.all([import("hono/tiny"),import("./accelerate-B4RDPMOM.js"),import("./utility-2R6QXHRL.js")]),a=new i,s=await Ui.default.getPlatformInfo();if(n&&console.debug("[Accelerate] platform info: %s",JSON.stringify(s)),n){let{logger:d}=await import("hono/logger");a.use("*",d((...v)=>console.log("[Accelerate]",...v)))}a.use("*",async(d,v)=>(d.set("db",t),d.set("debug",!!n),d.set("platform",s),d.set("port",e),d.set("protocol","http"),d.set("serverState",r),d.set("shadowDBPort",r.shadowDatabasePort),await v()));let l=new i;return l.route("/",o),l.route("/",c),a.route("/",l),a}async function cd(e){let t=await Ar.createExclusively(e),[r,n]=await Promise.all([Ot("database",t),Ot("shadow_database",t)]),i=await Vi(r,t),o=`prisma+postgres://localhost:${i.port}/?${new URLSearchParams({api_key:br({databaseUrl:r.prismaORMConnectionString,name:t.name,shadowDatabaseUrl:n.prismaORMConnectionString})}).toString()}`,c={database:{connectionString:r.connectionString,prismaORMConnectionString:r.prismaORMConnectionString,terminalCommand:r.terminalCommand},http:{url:i.url},ppg:{url:o},shadowDatabase:{connectionString:n.prismaORMConnectionString,prismaORMConnectionString:n.prismaORMConnectionString,terminalCommand:n.terminalCommand}};return await t.writeServerDump(c),{...c,close:()=>a(t,[i,r,n]),name:t.name};async function a(s,l){let v=(await Promise.allSettled(l.map(_=>_.close()))).filter(_=>_.status==="rejected").map(_=>new Error(_.reason));try{await s.close()}catch(_){v.push(_)}if(v.length>0)throw new AggregateError(v,"Failed to close some servers")}}async function Nh(e){return await cd(e)}export{cd as a,Nh as b};
31
31
  /*! Bundled license information:
32
32
 
33
33
  @prisma/get-platform/dist/chunk-3UEKS5W6.js:
package/dist/daemon.cjs CHANGED
@@ -29,7 +29,7 @@ ${t.fs.read(Xe.default.join(n,c))}`).join(`
29
29
 
30
30
  `)},process.chdir(t.tmpDir)}),afterEach(()=>{process.chdir(t.mocked.cwd)}),la(e)}};function la(e){return{add(t){let r=t(e);return la(r)},assemble(){return e}}}var Eh=()=>e=>{let t=e;return beforeEach(()=>{t.mocked["console.error"]=jest.spyOn(console,"error").mockImplementation(()=>{}),t.mocked["console.log"]=jest.spyOn(console,"log").mockImplementation(()=>{}),t.mocked["console.info"]=jest.spyOn(console,"info").mockImplementation(()=>{}),t.mocked["console.warn"]=jest.spyOn(console,"warn").mockImplementation(()=>{})}),afterEach(()=>{t.mocked["console.error"].mockRestore(),t.mocked["console.log"].mockRestore(),t.mocked["console.info"].mockRestore(),t.mocked["console.warn"].mockRestore()}),t},Ph=({normalizationRules:e}={normalizationRules:[]})=>t=>{let r=t,n=(i,o)=>{for(let[c,a]of o)i=i.replace(c,a);return i};return beforeEach(()=>{r.mocked["process.stderr.write"]=jest.spyOn(process.stderr,"write").mockImplementation(()=>!0),r.mocked["process.stdout.write"]=jest.spyOn(process.stdout,"write").mockImplementation(()=>!0),r.normalizedCapturedStdout=()=>n(r.mocked["process.stdout.write"].mock.calls.join(""),e),r.normalizedCapturedStderr=()=>n(r.mocked["process.stderr.write"].mock.calls.join(""),e),r.clearCapturedStdout=()=>r.mocked["process.stdout.write"].mockClear(),r.clearCapturedStderr=()=>r.mocked["process.stderr.write"].mockClear()}),afterEach(()=>{r.mocked["process.stderr.write"].mockRestore(),r.mocked["process.stdout.write"].mockRestore()}),r},Ah=()=>e=>{let t=e;return beforeEach(()=>{t.mocked["process.exit"]=jest.spyOn(process,"exit").mockImplementation(r=>{throw new Error("process.exit: "+r)}),t.recordedExitCode=()=>t.mocked["process.exit"].mock.calls[0]?.[0]}),afterEach(()=>{t.mocked["process.exit"].mockRestore()}),t}});var va=ke((gg,ma)=>{"use strict";X();var hn=Object.defineProperty,Oh=Object.getOwnPropertyDescriptor,xh=Object.getOwnPropertyNames,Th=Object.prototype.hasOwnProperty,Rh=(e,t)=>{for(var r in t)hn(e,r,{get:t[r],enumerable:!0})},kh=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of xh(t))!Th.call(e,i)&&i!==r&&hn(e,i,{get:()=>t[i],enumerable:!(n=Oh(t,i))||n.enumerable});return e},Ch=e=>kh(hn({},"__esModule",{value:!0}),e),pa={};Rh(pa,{binaryTargets:()=>ha.binaryTargets,getBinaryTargetForCurrentPlatform:()=>pn.getBinaryTargetForCurrentPlatform,getPlatformInfo:()=>pn.getPlatformInfo,getos:()=>pn.getos,jestConsoleContext:()=>nr.jestConsoleContext,jestContext:()=>nr.jestContext,jestStdoutContext:()=>nr.jestStdoutContext,link:()=>Dh.link,processExitContext:()=>nr.processExitContext});ma.exports=Ch(pa);var pn=Ni(),Dh=Yi(),fg=wr(),pg=Lt(),ha=es(),hg=ts(),nr=fa(),mg=dn(),vg=nt();(0,ha.init_binaryTargets)()});function ir(e){let t,r,n=new Promise((c,a)=>{t=c,r=a}),i=c=>{i=o=null,r(c),e?.onRejected?.(c),e?.onFulfilled?.()},o=c=>{o=i=null,t(c),e?.onResolved?.(c),e?.onFulfilled?.()};return{isFulfilled:()=>o===i,promise:n,reject:c=>i?.(c),resolve:c=>o?.(c)}}var mn=xe(()=>{"use strict";X()});function sr(e,t){return console.error(e),e instanceof Ot?t.json({EngineNotStarted:{reason:{EngineStartupError:{logs:[],msg:e.message}}}},500):e instanceof ut?t.text(e.responseBody,e.statusCode):t.body(null,500)}var ya,_a,Sa,ba,wa,Ea,jh,Ih,ga,lt,Ot,ut,vn=xe(()=>{"use strict";X();ya=require("child_process"),_a=require("events"),Sa=require("fs/promises"),ba=require("path"),wa=require("timers/promises");mn();Ea=require("std-env");jt();({PRISMA_DEV_FORCE_ENGINE_BINARY_DOWNLOAD:jh,PRISMA_DEV_FORCE_ENGINE_BINARY_PATH:Ih,PRISMA_DEV_FORCE_NETWORK_DELAY_MS:ga}=Ea.process.env),lt=class e{static#n=new Map;#e;#t;constructor(t){this.#e=t,this.#t=null}static async get(t){let{debug:r}=t,n=`${t.schemaHash}:${t.clientVersion}`;try{let i=e.#n.get(n);if(i)return i;let o=new e(t);return e.#n.set(n,o),r&&console.debug("[Query Engine] starting...",t),await o.start(),r&&console.debug("[Query Engine] started!"),o}finally{e.stopAll(n)}}static async stopAll(t){let n=(await Promise.allSettled(Array.from(e.#n.entries()).filter(([i])=>i!==t).map(async([i,o])=>{try{await o.stop()}finally{e.#n.delete(i)}}))).filter(i=>i.status==="rejected").map(i=>i.reason);if(n.length>0)throw new AggregateError(n,"Failed to stop engines")}async commitTransaction(t,r){return await this.#o(t,r,"commit")}async request(t,r){let{url:n}=await this.start(),i=this.#r(r),o=await fetch(n,{body:typeof t=="string"?t:JSON.stringify(t),headers:{...i,"Content-Type":"application/json"},method:"POST"});if(!o.ok)throw await ut.fromResponse(o);return await o.text()}async rollbackTransaction(t,r){return await this.#o(t,r,"rollback")}async startTransaction(t,r){let{url:n}=await this.start(),i=this.#r(r),o=await fetch(`${n}/transaction/start`,{body:JSON.stringify(t),headers:{...i,"Content-Type":"application/json"},method:"POST"});if(!o.ok)throw await ut.fromResponse(o);return await o.json()}async start(){if(this.#t!=null)return await this.#t;let{promise:t,reject:r,resolve:n}=ir();this.#t=t;let i=Ih||await this.#s();this.#e.debug&&console.debug("[Query Engine] spinning up at path...",i);let{proxySignals:o}=await import("foreground-child/proxy-signals"),c=(0,ya.spawn)(i,["--enable-raw-queries","--enable-telemetry-in-response","--port","0"],{env:{LOG_QUERIES:"y",PRISMA_DML:this.#e.base64Schema,QE_LOG_LEVEL:"TRACE",RUST_BACKTRACE:"1",RUST_LOG:"info"},stdio:["ignore","pipe","pipe"],windowsHide:!0});o(c),c.stderr.setEncoding("utf8"),c.stdout.setEncoding("utf8");let a=f=>{let v=f.split(`
31
31
  `).find(E=>E.includes("Started query engine http server"));if(!v)return;c.stdout.removeListener("data",a);let{fields:g}=JSON.parse(v);if(g==null)return r(new Error(`Unexpected data during initialization, "fields" are missing: ${f}`));let{ip:x,port:_}=g;if(x==null||_==null)return r(new Error(`This version of query-engine is not compatible with minippg, "ip" and "port" are missing in the startup log entry.
32
- Received data: ${f}`));n({childProcess:c,url:`http://${x}:${_}`})},s=f=>{this.#t=null,r(new Ot(String(f))),c.removeListener("exit",l),c.kill()};c.once("error",s);let l=(f,v)=>{this.#t=null,r(new Ot(`Query Engine exited with code ${f} and signal ${v}`))};return c.once("exit",l),c.stdout.on("data",a),this.#e.debug&&(c.stderr.on("data",console.error.bind(console,"[Query Engine]")),c.stdout.on("data",console.debug.bind(console,"[Query Engine]"))),await this.#t}async stop(){if(this.#t==null)return;let{childProcess:t}=await this.#t;t.exitCode==null&&t.signalCode==null&&(this.#t=null,t.kill(),await(0,_a.once)(t,"exit"))}async#s(){this.#e.debug&&console.debug("[Query Engine] getting engine commit hash...");let t=await this.#a();this.#e.debug&&console.debug("[Query Engine] got engine commit hash",t);let r=Mn(this.#e.clientVersion,t);this.#e.debug&&console.debug("[Query Engine] cache directory path",r),await(0,Sa.mkdir)(r,{recursive:!0});let{binaryTarget:n}=this.#e.platform,i=n==="windows"?".exe":"",o=(0,ba.join)(r,`query-engine-${n}${i}`);return this.#e.debug&&console.debug("[Query Engine] binary path",o),(jh==="1"||await Fn(o)===!1)&&await this.#i({commitHash:t,extension:i,engineBinaryPath:o}),o}async#a(){let t=await fetch(`https://registry.npmjs.org/@prisma/client/${this.#e.clientVersion}`);if(!t.ok)throw new Error(`Couldn't fetch package.json from npm registry, status code: ${t.status}`);let n=(await t.json()).devDependencies?.["@prisma/engines-version"];if(!n)throw new Error("Couldn't find engines version in package.json");let i=n.split(".").at(-1);if(!i)throw new Error("Couldn't find commit hash in engines version");return i}async#i(t){let{commitHash:r,extension:n,engineBinaryPath:i}=t,{binaryTarget:o}=this.#e.platform,c=`https://binaries.prisma.sh/all_commits/${r}/${o}/query-engine${n}.gz`;this.#e.debug&&console.debug("[Query Engine] downloading engine from url",c);let a=await fetch(c);if(!a.ok)throw new Error(`Couldn't download engine. URL: ${c}, status code: ${a.status}`);ga&&await(0,wa.setTimeout)(Number(ga)),await qn(await a.arrayBuffer(),i),this.#e.debug&&console.debug("[Query Engine] downloaded and saved at",i)}#r(t){let r={};for(let[n,i]of Object.entries(t))i!=null&&(r[n]=i);return r}async#o(t,r,n){let{url:i}=await this.#t,o=this.#r(r),c=await fetch(`${i}/transaction/${t}/${n}`,{headers:{...o,"Content-Type":"application/json"},method:"POST"});if(!c.ok)throw await ut.fromResponse(c);try{return await c.json()}catch{return{}}}};Ot=class extends Error{name="EngineStartError"},ut=class e extends Error{constructor(r,n,i){super(`${r}: Query Engine response status ${n}, body: ${i}`);this.action=r;this.statusCode=n;this.responseBody=i}name="EngineHttpError";static async fromResponse(r){let n=new URL(r.url),i=await r.text();return new e(n.pathname,r.status,i)}}});async function Pa(e){let{output:t,success:r}=(0,Ee.safeParse)($h,await e.req.json(),{abortEarly:!0});return r?t:e.text("Invalid input",400)}var Ee,$h,Aa=xe(()=>{"use strict";X();Ee=require("valibot"),$h=(0,Ee.object)({tags:(0,Ee.union)([(0,Ee.pipe)((0,Ee.array)((0,Ee.string)()),(0,Ee.minLength)(1)),(0,Ee.literal)("all")])})});async function Oa(e){return gn===void 0&&(gn=await Ye.Server.create({databaseUrl:e.get("db").connectionString,maxResponseSize:(0,Ye.parseSize)("128 MiB"),queryTimeout:(0,Ye.parseDuration)("PT5M"),maxTransactionTimeout:(0,Ye.parseDuration)("PT5M"),maxTransactionWaitTime:(0,Ye.parseDuration)("PT5M"),perRequestLogContext:{logFormat:"text",logLevel:e.get("debug")?"debug":"off"}})),gn}var Ye,ar,gn,xa=xe(()=>{"use strict";X();Ye=require("@prisma/query-plan-executor"),ar=require("@prisma/query-plan-executor")});async function _n(e){let r=new TextEncoder().encode(e),n=await crypto.subtle.digest("SHA-256",r);return Array.from(new Uint8Array(n)).map(c=>c.toString(16).padStart(2,"0")).join("")}function Ra(e){let t=e.req.param("schemaHash"),r=or.get(t);return r==null?e.json({EngineNotStarted:{reason:"SchemaMissing"}},404):{schemaHash:t,schemas:r}}async function ka(e,t,r){let n=yn.Buffer.from(e,"base64").toString("utf8"),i=(0,Ta.produceSchema)(n,c=>{c.datasource('"postgresql"',t.toString())});r&&console.log("[Accelerate] schema with override:",i);let o=await _n(i);return{base64Override:yn.Buffer.from(i,"utf8").toString("base64"),overrideHash:o}}var yn,Ta,or,Ca=xe(()=>{"use strict";X();yn=require("buffer"),Ta=require("@mrleebo/prisma-ast"),or=new Map});function cr(e){let{req:t}=e;return{traceparent:t.header("traceparent"),"X-capture-telemetry":t.header("X-capture-telemetry")}}var Da=xe(()=>{"use strict";X()});async function ja(e){let{issues:t,output:r,success:n}=(0,de.safeParse)(Lh,await e.req.json(),{abortEarly:!0});return n?r:e.json({EngineNotStarted:{reason:"InvalidRequest",issues:t}},400)}function Ia(e,t){let{output:r,success:n}=(0,de.safeParse)(Nh,e);return n?r:t.json({EngineMalfunction:{}},500)}var de,Lh,Nh,$a=xe(()=>{"use strict";X();de=require("valibot"),Lh=(0,de.object)({isolation_level:(0,de.optional)((0,de.string)()),max_wait:(0,de.pipe)((0,de.number)(),(0,de.integer)(),(0,de.minValue)(0)),timeout:(0,de.pipe)((0,de.number)(),(0,de.integer)(),(0,de.minValue)(0))});Nh=(0,de.looseObject)({id:(0,de.union)([(0,de.string)(),(0,de.number)()])})});var Ma={};Rn(Ma,{accelerateRoute:()=>xt});async function Sn(e){let{req:t}=e,r=Ra(e);if(r instanceof Response)return r;let{base64Override:n,overrideHash:i}=r.schemas;return await lt.get({base64Schema:n,clientVersion:process.env.PRISMA_DEV_FORCE_CLIENT_VERSION||t.param("clientVersion"),debug:e.get("debug"),platform:e.get("platform"),schemaHash:i})}var La,Na,Ze,xt,Mh,Tt,Fh,qh,Fa=xe(()=>{"use strict";X();La=require("hono/http-exception"),Na=require("hono/tiny"),Ze=require("hono/validator");dr();Aa();vn();xa();Ca();Da();$a();xt=new Na.Hono;xt.post("/invalidate",(0,Ze.validator)("header",ze),async e=>{let t=await Pa(e);return t instanceof Response?t:e.body(null)});Mh="/:clientVersion/:schemaHash",Tt=xt.basePath(Mh);xt.route("/",Tt);Fh=["/graphql","/itx/:transactionId/graphql"];Tt.on("POST",[...Fh],(0,Ze.validator)("header",ze),async e=>{let{req:t}=e;try{let r=await Sn(e);if(r instanceof Response)return r;let n=await t.text(),i=t.param("transactionId"),o=await r.request(n,{...cr(e),"X-transaction-id":i});return e.text(o)}catch(r){return sr(r,e)}});Tt.basePath("/itx/:transactionId").on("POST",["/commit","/rollback"],(0,Ze.validator)("header",ze),async e=>{let{req:t}=e;try{let r=await Sn(e);if(r instanceof Response)return r;let i=`${t.routePath.split("/").filter(Boolean).at(-1)}Transaction`,o=t.param("transactionId"),c=await r[i](o,cr(e));return e.json(c)}catch(r){return sr(r,e)}});Tt.put("/schema",(0,Ze.validator)("header",ze),async e=>{let{req:t}=e,r=await t.text();if(!r)return e.text("Missing schema",400);let n=t.param("schemaHash"),i=or.get(n);if(i==null){if(n!==await _n(r))return e.text("Schema hash mismatch",400);let o=await ka(r,e.get("db").prismaORMConnectionString,e.get("debug"));return or.set(n,{base64Original:r,...o}),e.text(n)}return r!==i.base64Original?e.text("Schema mismatch",400):e.text(n)});Tt.post("/transaction/start",(0,Ze.validator)("header",ze),async e=>{let{req:t}=e,r=await ja(e);if(r instanceof Response)return r;try{let n=await Sn(e);if(n instanceof Response)return n;let i=await n.startTransaction(r,cr(e)),o=Ia(i,e);if(o instanceof Response)return o;let{id:c}=o,a=t.param("clientVersion"),s=e.get("port"),l=e.get("protocol"),f=t.param("schemaHash");return e.json({...i,"data-proxy":{endpoint:`${l}://localhost:${s}/${a}/${f}/itx/${c}`}})}catch(n){return sr(n,e)}});qh=[["/connection-info","GET"],["/query","POST"],["/transaction/start","POST"],["/transaction/:transactionId/commit","POST"],["/transaction/:transactionId/query","POST"],["/transaction/:transactionId/rollback","POST"]];for(let[e,t]of qh)xt.on(t,e,(0,Ze.validator)("header",ze),async r=>{let n=r.req.header("prisma-engine-hash");if(n!=="0.0.0"&&n!==ar.version)throw new La.HTTPException(400,{message:`Using an HTTP connection string is not supported with Prisma Client version ${n} by this version of \`prisma dev\`. Please either use a direct TCP connection string or upgrade your client to version ${ar.version}.`});return await(await Oa(r)).fetch(r.req.raw)})});var Ha={};Rn(Ha,{utilityRoute:()=>bn});var qa,Ba,bn,Ug,Ga=xe(()=>{"use strict";X();qa=require("hono/tiny"),Ba=require("http-status-codes"),bn=new qa.Hono;bn.post("/database/dump",async e=>{let t=e.get("db"),r=e.get("serverState");return await t.dump(r.databaseDumpPath),e.json({dumpPath:r.databaseDumpPath},Ba.StatusCodes.CREATED)});Ug=bn.get("/health",e=>e.json({name:e.get("serverState").name}))});var Vh={};module.exports=oo(Vh);X();var to=require("timers/promises");X();dr();X();var Xn=require("pathe/utils");jt();X();var Be=require("get-port-please"),$t=require("remeda"),pt=51214,ht=51213,mt=51215,It=65535,qe=-1/0;async function Jn(e){let{debug:t,name:r,requestedPorts:n,servers:i}=e,{portsUsedByOtherServers:o,portsUsedByThisServerLastTime:c}=go(r,i);t&&(console.debug(`ports used by other servers: ${Object.keys(o).join(", ")}`),console.debug(`ports used by "${r}" server last time: ${JSON.stringify(c)}`));let a={databasePort:qe,port:qe,shadowDatabasePort:qe},s=["port","databasePort","shadowDatabasePort"];for(let l of s){let f=await mo({debug:t,portKey:l,portsUsedByOtherServers:o,portsUsedByThisServerLastTime:c,requestedPorts:n})??await vo({debug:t,pickedPorts:a,portKey:l,portsUsedByOtherServers:o,portsUsedByThisServerLastTime:c});t&&console.debug(`Got port for "${l}": ${f}`),a[l]=f}return t&&console.debug(`Picked ports: ${JSON.stringify(a)}`),a}async function mo(e){let{debug:t,portKey:r,portsUsedByOtherServers:n,portsUsedByThisServerLastTime:i,requestedPorts:o}=e,{[r]:c,...a}=o;if(Wn(c))return await yo({debug:t,otherRequestedPorts:a,portKey:r,portsUsedByOtherServers:n,requestedPort:c}),c;let s=i?.[r]??qe;if(!Wn(s))return t&&console.debug(`No port specified for "${r}". Trying to pick a new port.`),null;let l=s in n;return l||Object.values(a).includes(s)?(t&&console.debug(`Port ${s} that was used last time for this server, ${l?"is also used by another server":"has been requested for another service"}. Trying to pick a new port.`),null):await(0,Be.checkPort)(s)===!1?(t&&console.debug(`Port ${s}, that was used last time for this server, is not available. Trying to pick a new port.`),null):(t&&console.debug(`Using port ${s} for "${r}" as it was used last time and is available.`),s)}async function vo(e){let{debug:t,pickedPorts:r,portKey:n,portsUsedByOtherServers:i,portsUsedByThisServerLastTime:o}=e,c=Math.max(pt,ht,mt)+1,a=[...Object.values(r),...Object.keys(i).map(Number),...Object.values(o||{})],s=Math.min(Math.max(c,...a)+100,It),l=(0,$t.difference)((0,$t.range)(c,s),a),f={port:ht,databasePort:pt,shadowDatabasePort:mt}[n];try{return await(0,Be.getPort)({port:f in i||Object.values(r).includes(f)||Object.values(o||{}).includes(f)?void 0:f,ports:l})}catch(v){if(v instanceof Error&&v.name==="GetPortError"&&s+1<=It)return t&&console.debug(`Expanding port lookup to range [${s+1}, ${It}].`),await(0,Be.getPort)({portRange:[s+1,It]});throw v}}function Wn(e){return e>=0}function go(e,t){let r={},n;for(let i of t){let{databasePort:o,port:c,shadowDatabasePort:a}=i;if(i.name===e){n={databasePort:o,port:c,shadowDatabasePort:a};continue}r[o]=!0,r[c]=!0,r[a]=!0}return{portsUsedByOtherServers:r,portsUsedByThisServerLastTime:n}}async function yo(e){let{debug:t,otherRequestedPorts:r,portKey:n,portsUsedByOtherServers:i,requestedPort:o}=e;if(o in i)throw t&&console.error(`Port ${o} was requested for "${n}", but is already used by another server.`),new gr(o);if(Object.values(r).includes(o))throw t&&console.error(`Port ${o} was requested for "${n}", but also for another key.`),new vr(o);if((0,Be.isUnsafePort)(o))throw t&&console.error(`Port ${o} was requested for "${n}", but is unsafe.`),new $e(o);if(await(0,Be.checkPort)(o)===!1)throw t&&console.error(`Port ${o} was requested for "${n}", but is not available.`),new $e(o)}var $e=class extends Error{constructor(r){super(`Port \`${r}\` is not available.`);this.port=r}name="PortNotAvailableError"},vr=class extends Error{constructor(r){super(`Port number \`${r}\` was requested twice. Please choose a different port for each service.`);this.port=r}name="PortRequestedTwiceError"},gr=class extends Error{constructor(r){super(`Port number \`${r}\` belongs to another Prisma Dev server. Please choose a different port.`);this.port=r}name="PortBelongsToAnotherServerError"};var be={connectionLimit:1,connectTimeout:0,database:"template1",maxIdleConnectionLifetime:0,password:"postgres",poolTimeout:0,socketTimeout:0,sslMode:"disable",username:"postgres"},_o=`postgres://${be.username}:${be.password}@localhost`,Yn=new URLSearchParams({sslmode:be.sslMode}),So=new URLSearchParams({...Object.fromEntries(Yn.entries()),connection_limit:String(be.connectionLimit),connect_timeout:String(be.connectTimeout),max_idle_connection_lifetime:String(be.maxIdleConnectionLifetime),pool_timeout:String(be.poolTimeout),single_use_connections:"true",socket_timeout:String(be.socketTimeout)});async function yr(e,t){let r=e==="database"?t.databasePort:t.shadowDatabasePort;if(t.dryRun)return Vn(e,t,{db:null,port:r,server:null});let{debug:n}=t,o=await(e==="shadow_database"?bo:zn)(t.pgliteDataDirPath,n);n&&o.onNotification((s,l)=>{console.debug(`[${e}][${s}] ${l}`)});let{PGLiteSocketServer:c}=await import("@electric-sql/pglite-socket"),a=new c({db:o,debug:n,inspect:n,port:r});n&&(a.addEventListener("listening",s=>{let{detail:l}=s;console.debug(`[${e}] server listening on ${JSON.stringify(l)}`)}),a.addEventListener("connection",s=>{let{clientAddress:l,clientPort:f}=s.detail;console.debug(`[${e}] client connected from ${l}:${f}`)}),a.addEventListener("error",s=>{let{detail:l}=s;console.error(`[${e}] server error:`,l)}));try{await a.start()}catch(s){throw s instanceof Error&&"code"in s&&s.code==="EADDRINUSE"?new $e(r):s}return Vn(e,t,{db:o,port:r,server:a})}function Vn(e,t,r){let{debug:n}=t,{db:i,port:o,server:c}=r||{};return n&&console.debug(`[${e}] server started on port ${o}`),{...be,close:async()=>{let a=[];try{await c?.stop(),n&&console.debug(`[${e}] server stopped on port ${o}`)}catch(s){console.error(`[${e}] server stop error`,s),a.push(s)}if(e==="database")try{await i?.syncToFs(),n&&console.debug(`[${e}] synced to filesystem`)}catch(s){console.error(`[${e}] sync error`,s),a.push(s)}try{await i?.close(),n&&console.debug(`[${e}] closed`)}catch(s){console.error(`[${e}] close error`,s),a.push(s)}if(a.length>0)throw new AggregateError(a,`Failed to close ${e} properly`)},connectionString:Kn(o,Yn),dump:async a=>{e==="shadow_database"||!i||await wo({db:i,debug:n,destinationPath:a})},port:o,prismaORMConnectionString:Kn(o,So),terminalCommand:`PGPASSWORD=${be.password} PGSSLMODE=${be.sslMode} psql -h localhost -p ${o} -U ${be.username} -d ${be.database}`}}function Kn(e,t){return`${_o}:${e}/${be.database}?${t.toString()}`}async function zn(e,t){let{PGlite:r}=await import("@electric-sql/pglite");return await r.create({database:be.database,dataDir:e,debug:t?5:void 0,relaxedDurability:!1,username:be.username})}async function bo(e,t){let{PGlite:r}=await import("@electric-sql/pglite");return await r.create({database:be.database,dataDir:"memory://",debug:t?5:void 0,relaxedDurability:!1,username:be.username})}async function wo(e){let{dataDir:t,db:r,debug:n,destinationPath:i}=e,o=r||await zn(t,n),{pgDump:c}=await import("@electric-sql/pglite-tools/pg_dump"),a=await c({args:["--schema-only","--no-owner"],fileName:i?(0,Xn.filename)(i):void 0,pg:await o.clone()});return i?(n&&console.debug(`[DB] Dumping database to ${i}`),await Bn(a,i)):(n&&console.debug("[DB] Dumping database to memory"),await a.text())}X();var Wa=require("http"),Ja=require("util"),Va=Pe(va(),1);mn();vn();async function Ka(e,t){let{port:r}=t;if(t.dryRun)return Ua(r,null);let n=await Bh(r,e,t),{promise:i,reject:o,resolve:c}=ir(),{serve:a}=await import("@hono/node-server"),s=a({createServer:Wa.createServer,fetch:n.fetch,overrideGlobalObjects:!1,port:r},c);return s.on("error",l=>{if(typeof l=="object"&&"code"in l&&l.code==="EADDRINUSE")return o(new $e(r));console.error("[Accelerate]",l)}),await i,Ua(r,s)}function Ua(e,t){return{async close(){t&&await Promise.allSettled([(0,Ja.promisify)(t.close.bind(t))(),lt.stopAll()])},port:e,url:`http://localhost:${e}`}}async function Bh(e,t,r){let{debug:n}=r,[{Hono:i},{accelerateRoute:o},{utilityRoute:c}]=await Promise.all([import("hono/tiny"),Promise.resolve().then(()=>(Fa(),Ma)),Promise.resolve().then(()=>(Ga(),Ha))]),a=new i,s=await(0,Va.getPlatformInfo)();if(n&&console.debug("[Accelerate] platform info: %s",JSON.stringify(s)),n){let{logger:f}=await import("hono/logger");a.use("*",f((...v)=>console.log("[Accelerate]",...v)))}a.use("*",async(f,v)=>(f.set("db",t),f.set("debug",!!n),f.set("platform",s),f.set("port",e),f.set("protocol","http"),f.set("serverState",r),f.set("shadowDBPort",r.shadowDatabasePort),await v()));let l=new i;return l.route("/",o),l.route("/",c),a.route("/",l),a}X();var Za=require("fs/promises"),et=require("pathe"),dt=require("proper-lockfile"),xn=require("std-env"),te=require("valibot");jt();X();var Hh=require("timers/promises"),Xa=require("std-env");function Ya(e,t){if(e==null)return!1;try{return Xa.process.kill?.(e,0)??!0}catch(r){return t&&console.error(`Error checking if process with PID ${e} exists:`,r),!1}}var Pn=(0,te.pipe)((0,te.string)(),(0,te.url)()),za=(0,te.object)({connectionString:Pn,prismaORMConnectionString:(0,te.optional)(Pn),terminalCommand:(0,te.optional)((0,te.string)())}),Qa=(0,te.object)({url:Pn}),wn=(0,te.pipe)((0,te.number)(),(0,te.integer)(),(0,te.minValue)(1)),Gh=(0,te.object)({database:za,http:Qa,ppg:Qa,shadowDatabase:za}),Uh=(0,te.object)({databasePort:wn,exports:(0,te.optional)(Gh),name:(0,te.pipe)((0,te.string)(),(0,te.minLength)(1)),pid:(0,te.optional)((0,te.pipe)((0,te.number)(),(0,te.integer)(),(0,te.minValue)(0))),port:wn,shadowDatabasePort:wn,version:(0,te.literal)("1")}),Tn=Symbol("initialize"),En="default",Ne=class{_databasePort;debug;dryRun;name;persistenceMode;pid;_port;_shadowDatabasePort;constructor(t){this._databasePort=t.databasePort??qe,this.debug=t.debug??!1,this.dryRun=t.dryRun??!1,this.name=t.name??En,this.persistenceMode=t.persistenceMode,this.pid=t.pid??xn.process.pid,this._port=t.port??qe,this._shadowDatabasePort=t.shadowDatabasePort??qe}static async createExclusively(t){let r=t?.dryRun!==!0&&t?.persistenceMode!=="stateless"?new Rt(t):new An(t);return await r[Tn](),r}static async fromServerDump(t){let{debug:r,name:n=En}=t??{},i=ft(n),o=Rt.getServerDumpPath(i),c=await Hn(o);if(c==null)return r&&console.debug(`[State] No server dump file found at: ${o}`),null;r&&(console.debug(`[State] server dump file found at "${o}":`),console.debug(c));let{issues:a,output:s,success:l}=(0,te.safeParse)((0,te.pipe)((0,te.string)(),(0,te.parseJson)(),Uh),c);if(!l)throw r&&console.debug(`[State] Invalid server dump file at "${o}":
32
+ Received data: ${f}`));n({childProcess:c,url:`http://${x}:${_}`})},s=f=>{this.#t=null,r(new Ot(String(f))),c.removeListener("exit",l),c.kill()};c.once("error",s);let l=(f,v)=>{this.#t=null,r(new Ot(`Query Engine exited with code ${f} and signal ${v}`))};return c.once("exit",l),c.stdout.on("data",a),this.#e.debug&&(c.stderr.on("data",console.error.bind(console,"[Query Engine]")),c.stdout.on("data",console.debug.bind(console,"[Query Engine]"))),await this.#t}async stop(){if(this.#t==null)return;let{childProcess:t}=await this.#t;t.exitCode==null&&t.signalCode==null&&(this.#t=null,t.kill(),await(0,_a.once)(t,"exit"))}async#s(){this.#e.debug&&console.debug("[Query Engine] getting engine commit hash...");let t=await this.#a();this.#e.debug&&console.debug("[Query Engine] got engine commit hash",t);let r=Mn(this.#e.clientVersion,t);this.#e.debug&&console.debug("[Query Engine] cache directory path",r),await(0,Sa.mkdir)(r,{recursive:!0});let{binaryTarget:n}=this.#e.platform,i=n==="windows"?".exe":"",o=(0,ba.join)(r,`query-engine-${n}${i}`);return this.#e.debug&&console.debug("[Query Engine] binary path",o),(jh==="1"||await Fn(o)===!1)&&await this.#i({commitHash:t,extension:i,engineBinaryPath:o}),o}async#a(){let t=await fetch(`https://registry.npmjs.org/@prisma/client/${this.#e.clientVersion}`);if(!t.ok)throw new Error(`Couldn't fetch package.json from npm registry, status code: ${t.status}`);let n=(await t.json()).devDependencies?.["@prisma/engines-version"];if(!n)throw new Error("Couldn't find engines version in package.json");let i=n.split(".").at(-1);if(!i)throw new Error("Couldn't find commit hash in engines version");return i}async#i(t){let{commitHash:r,extension:n,engineBinaryPath:i}=t,{binaryTarget:o}=this.#e.platform,c=`https://binaries.prisma.sh/all_commits/${r}/${o}/query-engine${n}.gz`;this.#e.debug&&console.debug("[Query Engine] downloading engine from url",c);let a=await fetch(c);if(!a.ok)throw new Error(`Couldn't download engine. URL: ${c}, status code: ${a.status}`);ga&&await(0,wa.setTimeout)(Number(ga)),await qn(await a.arrayBuffer(),i),this.#e.debug&&console.debug("[Query Engine] downloaded and saved at",i)}#r(t){let r={};for(let[n,i]of Object.entries(t))i!=null&&(r[n]=i);return r}async#o(t,r,n){let{url:i}=await this.#t,o=this.#r(r),c=await fetch(`${i}/transaction/${t}/${n}`,{headers:{...o,"Content-Type":"application/json"},method:"POST"});if(!c.ok)throw await ut.fromResponse(c);try{return await c.json()}catch{return{}}}};Ot=class extends Error{name="EngineStartError"},ut=class e extends Error{constructor(r,n,i){super(`${r}: Query Engine response status ${n}, body: ${i}`);this.action=r;this.statusCode=n;this.responseBody=i}name="EngineHttpError";static async fromResponse(r){let n=new URL(r.url),i=await r.text();return new e(n.pathname,r.status,i)}}});async function Pa(e){let{output:t,success:r}=(0,Ee.safeParse)($h,await e.req.json(),{abortEarly:!0});return r?t:e.text("Invalid input",400)}var Ee,$h,Aa=xe(()=>{"use strict";X();Ee=require("valibot"),$h=(0,Ee.object)({tags:(0,Ee.union)([(0,Ee.pipe)((0,Ee.array)((0,Ee.string)()),(0,Ee.minLength)(1)),(0,Ee.literal)("all")])})});async function Oa(e){return gn===void 0&&(gn=await Ye.Server.create({databaseUrl:e.get("db").connectionString,maxResponseSize:(0,Ye.parseSize)("128 MiB"),queryTimeout:(0,Ye.parseDuration)("PT5M"),maxTransactionTimeout:(0,Ye.parseDuration)("PT5M"),maxTransactionWaitTime:(0,Ye.parseDuration)("PT5M"),perRequestLogContext:{logFormat:"text",logLevel:e.get("debug")?"debug":"off"}})),gn}var Ye,ar,gn,xa=xe(()=>{"use strict";X();Ye=require("@prisma/query-plan-executor"),ar=require("@prisma/query-plan-executor")});async function _n(e){let r=new TextEncoder().encode(e),n=await crypto.subtle.digest("SHA-256",r);return Array.from(new Uint8Array(n)).map(c=>c.toString(16).padStart(2,"0")).join("")}function Ra(e){let t=e.req.param("schemaHash"),r=or.get(t);return r==null?e.json({EngineNotStarted:{reason:"SchemaMissing"}},404):{schemaHash:t,schemas:r}}async function ka(e,t,r){let n=yn.Buffer.from(e,"base64").toString("utf8"),i=(0,Ta.produceSchema)(n,c=>{c.datasource('"postgresql"',t.toString())});r&&console.log("[Accelerate] schema with override:",i);let o=await _n(i);return{base64Override:yn.Buffer.from(i,"utf8").toString("base64"),overrideHash:o}}var yn,Ta,or,Ca=xe(()=>{"use strict";X();yn=require("buffer"),Ta=require("@mrleebo/prisma-ast"),or=new Map});function cr(e){let{req:t}=e;return{traceparent:t.header("traceparent"),"X-capture-telemetry":t.header("X-capture-telemetry")}}var Da=xe(()=>{"use strict";X()});async function ja(e){let{issues:t,output:r,success:n}=(0,de.safeParse)(Lh,await e.req.json(),{abortEarly:!0});return n?r:e.json({EngineNotStarted:{reason:"InvalidRequest",issues:t}},400)}function Ia(e,t){let{output:r,success:n}=(0,de.safeParse)(Nh,e);return n?r:t.json({EngineMalfunction:{}},500)}var de,Lh,Nh,$a=xe(()=>{"use strict";X();de=require("valibot"),Lh=(0,de.object)({isolation_level:(0,de.optional)((0,de.string)()),max_wait:(0,de.pipe)((0,de.number)(),(0,de.integer)(),(0,de.minValue)(0)),timeout:(0,de.pipe)((0,de.number)(),(0,de.integer)(),(0,de.minValue)(0))});Nh=(0,de.looseObject)({id:(0,de.union)([(0,de.string)(),(0,de.number)()])})});var Ma={};Rn(Ma,{accelerateRoute:()=>xt});async function Sn(e){let{req:t}=e,r=Ra(e);if(r instanceof Response)return r;let{base64Override:n,overrideHash:i}=r.schemas;return await lt.get({base64Schema:n,clientVersion:process.env.PRISMA_DEV_FORCE_CLIENT_VERSION||t.param("clientVersion"),debug:e.get("debug"),platform:e.get("platform"),schemaHash:i})}var La,Na,Ze,xt,Mh,Tt,Fh,qh,Fa=xe(()=>{"use strict";X();La=require("hono/http-exception"),Na=require("hono/tiny"),Ze=require("hono/validator");dr();Aa();vn();xa();Ca();Da();$a();xt=new Na.Hono;xt.post("/invalidate",(0,Ze.validator)("header",ze),async e=>{let t=await Pa(e);return t instanceof Response?t:e.body(null)});Mh="/:clientVersion/:schemaHash",Tt=xt.basePath(Mh);xt.route("/",Tt);Fh=["/graphql","/itx/:transactionId/graphql"];Tt.on("POST",[...Fh],(0,Ze.validator)("header",ze),async e=>{let{req:t}=e;try{let r=await Sn(e);if(r instanceof Response)return r;let n=await t.text(),i=t.param("transactionId"),o=await r.request(n,{...cr(e),"X-transaction-id":i});return e.text(o)}catch(r){return sr(r,e)}});Tt.basePath("/itx/:transactionId").on("POST",["/commit","/rollback"],(0,Ze.validator)("header",ze),async e=>{let{req:t}=e;try{let r=await Sn(e);if(r instanceof Response)return r;let i=`${t.routePath.split("/").filter(Boolean).at(-1)}Transaction`,o=t.param("transactionId"),c=await r[i](o,cr(e));return e.json(c)}catch(r){return sr(r,e)}});Tt.put("/schema",(0,Ze.validator)("header",ze),async e=>{let{req:t}=e,r=await t.text();if(!r)return e.text("Missing schema",400);let n=t.param("schemaHash"),i=or.get(n);if(i==null){if(n!==await _n(r))return e.text("Schema hash mismatch",400);let o=await ka(r,e.get("db").prismaORMConnectionString,e.get("debug"));return or.set(n,{base64Original:r,...o}),e.text(n)}return r!==i.base64Original?e.text("Schema mismatch",400):e.text(n)});Tt.post("/transaction/start",(0,Ze.validator)("header",ze),async e=>{let{req:t}=e,r=await ja(e);if(r instanceof Response)return r;try{let n=await Sn(e);if(n instanceof Response)return n;let i=await n.startTransaction(r,cr(e)),o=Ia(i,e);if(o instanceof Response)return o;let{id:c}=o,a=t.param("clientVersion"),s=e.get("port"),l=e.get("protocol"),f=t.param("schemaHash");return e.json({...i,"data-proxy":{endpoint:`${l}://localhost:${s}/${a}/${f}/itx/${c}`}})}catch(n){return sr(n,e)}});qh=[["/connection-info","GET"],["/query","POST"],["/transaction/start","POST"],["/transaction/:transactionId/commit","POST"],["/transaction/:transactionId/query","POST"],["/transaction/:transactionId/rollback","POST"]];for(let[e,t]of qh)xt.on(t,e,(0,Ze.validator)("header",ze),async r=>{let n=r.req.header("prisma-engine-hash");if(n!=="0.0.0"&&n!==ar.version)throw new La.HTTPException(400,{message:`Using an HTTP connection string is not supported with Prisma Client version ${n} by this version of \`prisma dev\`. Please either use a direct TCP connection string or upgrade your client to version ${ar.version}.`});return await(await Oa(r)).fetch(r.req.raw)})});var Ha={};Rn(Ha,{utilityRoute:()=>bn});var qa,Ba,bn,Ug,Ga=xe(()=>{"use strict";X();qa=require("hono/tiny"),Ba=require("http-status-codes"),bn=new qa.Hono;bn.post("/database/dump",async e=>{let t=e.get("db"),r=e.get("serverState");return await t.dump(r.databaseDumpPath),e.json({dumpPath:r.databaseDumpPath},Ba.StatusCodes.CREATED)});Ug=bn.get("/health",e=>e.json({name:e.get("serverState").name}))});var Vh={};module.exports=oo(Vh);X();var to=require("timers/promises");X();dr();X();var Xn=require("pathe/utils");jt();X();var Be=require("get-port-please"),$t=require("remeda"),pt=51214,ht=51213,mt=51215,It=65535,qe=-1/0;async function Jn(e){let{debug:t,name:r,requestedPorts:n,servers:i}=e,{portsUsedByOtherServers:o,portsUsedByThisServerLastTime:c}=go(r,i);t&&(console.debug(`ports used by other servers: ${Object.keys(o).join(", ")}`),console.debug(`ports used by "${r}" server last time: ${JSON.stringify(c)}`));let a={databasePort:qe,port:qe,shadowDatabasePort:qe},s=["port","databasePort","shadowDatabasePort"];for(let l of s){let f=await mo({debug:t,portKey:l,portsUsedByOtherServers:o,portsUsedByThisServerLastTime:c,requestedPorts:n})??await vo({debug:t,pickedPorts:a,portKey:l,portsUsedByOtherServers:o,portsUsedByThisServerLastTime:c});t&&console.debug(`Got port for "${l}": ${f}`),a[l]=f}return t&&console.debug(`Picked ports: ${JSON.stringify(a)}`),a}async function mo(e){let{debug:t,portKey:r,portsUsedByOtherServers:n,portsUsedByThisServerLastTime:i,requestedPorts:o}=e,{[r]:c,...a}=o;if(Wn(c))return await yo({debug:t,otherRequestedPorts:a,portKey:r,portsUsedByOtherServers:n,requestedPort:c}),c;let s=i?.[r]??qe;if(!Wn(s))return t&&console.debug(`No port specified for "${r}". Trying to pick a new port.`),null;let l=s in n;return l||Object.values(a).includes(s)?(t&&console.debug(`Port ${s} that was used last time for this server, ${l?"is also used by another server":"has been requested for another service"}. Trying to pick a new port.`),null):await(0,Be.checkPort)(s)===!1?(t&&console.debug(`Port ${s}, that was used last time for this server, is not available. Trying to pick a new port.`),null):(t&&console.debug(`Using port ${s} for "${r}" as it was used last time and is available.`),s)}async function vo(e){let{debug:t,pickedPorts:r,portKey:n,portsUsedByOtherServers:i,portsUsedByThisServerLastTime:o}=e,c=Math.max(pt,ht,mt)+1,a=[...Object.values(r),...Object.keys(i).map(Number),...Object.values(o||{})],s=Math.min(Math.max(c,...a)+100,It),l=(0,$t.difference)((0,$t.range)(c,s),a),f={port:ht,databasePort:pt,shadowDatabasePort:mt}[n];try{return await(0,Be.getPort)({port:f in i||Object.values(r).includes(f)||Object.values(o||{}).includes(f)?void 0:f,ports:l})}catch(v){if(v instanceof Error&&v.name==="GetPortError"&&s+1<=It)return t&&console.debug(`Expanding port lookup to range [${s+1}, ${It}].`),await(0,Be.getPort)({portRange:[s+1,It]});throw v}}function Wn(e){return e>=0}function go(e,t){let r={},n;for(let i of t){let{databasePort:o,port:c,shadowDatabasePort:a}=i;if(i.name===e){n={databasePort:o,port:c,shadowDatabasePort:a};continue}r[o]=!0,r[c]=!0,r[a]=!0}return{portsUsedByOtherServers:r,portsUsedByThisServerLastTime:n}}async function yo(e){let{debug:t,otherRequestedPorts:r,portKey:n,portsUsedByOtherServers:i,requestedPort:o}=e;if(o in i)throw t&&console.error(`Port ${o} was requested for "${n}", but is already used by another server.`),new gr(o);if(Object.values(r).includes(o))throw t&&console.error(`Port ${o} was requested for "${n}", but also for another key.`),new vr(o);if((0,Be.isUnsafePort)(o))throw t&&console.error(`Port ${o} was requested for "${n}", but is unsafe.`),new $e(o);if(await(0,Be.checkPort)(o)===!1)throw t&&console.error(`Port ${o} was requested for "${n}", but is not available.`),new $e(o)}var $e=class extends Error{constructor(r){super(`Port \`${r}\` is not available.`);this.port=r}name="PortNotAvailableError"},vr=class extends Error{constructor(r){super(`Port number \`${r}\` was requested twice. Please choose a different port for each service.`);this.port=r}name="PortRequestedTwiceError"},gr=class extends Error{constructor(r){super(`Port number \`${r}\` belongs to another Prisma Dev server. Please choose a different port.`);this.port=r}name="PortBelongsToAnotherServerError"};var be={connectionLimit:1,connectTimeout:0,database:"template1",maxIdleConnectionLifetime:0,password:"postgres",poolTimeout:0,socketTimeout:0,sslMode:"disable",username:"postgres"},_o=`postgres://${be.username}:${be.password}@localhost`,Yn=new URLSearchParams({sslmode:be.sslMode}),So=new URLSearchParams({...Object.fromEntries(Yn.entries()),connection_limit:String(be.connectionLimit),connect_timeout:String(be.connectTimeout),max_idle_connection_lifetime:String(be.maxIdleConnectionLifetime),pool_timeout:String(be.poolTimeout),single_use_connections:"true",socket_timeout:String(be.socketTimeout)});async function yr(e,t){let r=e==="database"?t.databasePort:t.shadowDatabasePort;if(t.dryRun)return Vn(e,t,{db:null,port:r,server:null});let{debug:n}=t,o=await(e==="shadow_database"?bo:zn)(t.pgliteDataDirPath,n);n&&o.onNotification((s,l)=>{console.debug(`[${e}][${s}] ${l}`)});let{PGLiteSocketServer:c}=await import("@electric-sql/pglite-socket"),a=new c({db:o,debug:n,inspect:n,port:r});n&&(a.addEventListener("listening",s=>{let{detail:l}=s;console.debug(`[${e}] server listening on ${JSON.stringify(l)}`)}),a.addEventListener("connection",s=>{let{clientAddress:l,clientPort:f}=s.detail;console.debug(`[${e}] client connected from ${l}:${f}`)}),a.addEventListener("error",s=>{let{detail:l}=s;console.error(`[${e}] server error:`,l)}));try{await a.start()}catch(s){throw s instanceof Error&&"code"in s&&s.code==="EADDRINUSE"?new $e(r):s}return Vn(e,t,{db:o,port:r,server:a})}function Vn(e,t,r){let{debug:n}=t,{db:i,port:o,server:c}=r||{};return n&&console.debug(`[${e}] server started on port ${o}`),{...be,close:async()=>{let a=[];try{await c?.stop(),n&&console.debug(`[${e}] server stopped on port ${o}`)}catch(s){console.error(`[${e}] server stop error`,s),a.push(s)}if(e==="database")try{await i?.syncToFs(),n&&console.debug(`[${e}] synced to filesystem`)}catch(s){console.error(`[${e}] sync error`,s),a.push(s)}try{await i?.close(),n&&console.debug(`[${e}] closed`)}catch(s){console.error(`[${e}] close error`,s),a.push(s)}if(a.length>0)throw new AggregateError(a,`Failed to close ${e} properly`)},connectionString:Kn(o,Yn),dump:async a=>{e==="shadow_database"||!i||await wo({db:i,debug:n,destinationPath:a})},port:o,prismaORMConnectionString:Kn(o,So),terminalCommand:`PGPASSWORD=${be.password} PGSSLMODE=${be.sslMode} psql -h localhost -p ${o} -U ${be.username} -d ${be.database}`}}function Kn(e,t){return`${_o}:${e}/${be.database}?${t.toString()}`}async function zn(e,t){let{PGlite:r}=await import("@electric-sql/pglite");return await r.create({database:be.database,dataDir:e,debug:t?5:void 0,relaxedDurability:!1,username:be.username})}async function bo(e,t){let{PGlite:r}=await import("@electric-sql/pglite");return await r.create({database:be.database,dataDir:"memory://",debug:t?5:void 0,relaxedDurability:!1,username:be.username})}async function wo(e){let{dataDir:t,db:r,debug:n,destinationPath:i}=e,o=r||await zn(t,n),{pgDump:c}=await import("@electric-sql/pglite-tools/pg_dump"),a=await c({args:["--schema-only","--no-owner"],fileName:i?(0,Xn.filename)(i):void 0,pg:await o.clone()});return i?(n&&console.debug(`[DB] Dumping database to ${i}`),await Bn(a,i)):(n&&console.debug("[DB] Dumping database to memory"),await a.text())}X();var Wa=require("http"),Ja=require("util"),Va=Pe(va(),1);mn();vn();async function Ka(e,t){let{port:r}=t;if(t.dryRun)return Ua(r,null);let n=await Bh(r,e,t),{promise:i,reject:o,resolve:c}=ir(),{serve:a}=await import("@hono/node-server"),s=a({createServer:Wa.createServer,fetch:n.fetch,overrideGlobalObjects:!1,port:r},c);return s.on("error",l=>{if(typeof l=="object"&&"code"in l&&l.code==="EADDRINUSE")return o(new $e(r));console.error("[Accelerate]",l)}),await i,Ua(r,s)}function Ua(e,t){return{async close(){t&&await Promise.allSettled([(0,Ja.promisify)(t.close.bind(t))(),lt.stopAll()])},port:e,url:`http://localhost:${e}`}}async function Bh(e,t,r){let{debug:n}=r,[{Hono:i},{accelerateRoute:o},{utilityRoute:c}]=await Promise.all([import("hono/tiny"),Promise.resolve().then(()=>(Fa(),Ma)),Promise.resolve().then(()=>(Ga(),Ha))]),a=new i,s=await Va.default.getPlatformInfo();if(n&&console.debug("[Accelerate] platform info: %s",JSON.stringify(s)),n){let{logger:f}=await import("hono/logger");a.use("*",f((...v)=>console.log("[Accelerate]",...v)))}a.use("*",async(f,v)=>(f.set("db",t),f.set("debug",!!n),f.set("platform",s),f.set("port",e),f.set("protocol","http"),f.set("serverState",r),f.set("shadowDBPort",r.shadowDatabasePort),await v()));let l=new i;return l.route("/",o),l.route("/",c),a.route("/",l),a}X();var Za=require("fs/promises"),et=require("pathe"),dt=require("proper-lockfile"),xn=require("std-env"),te=require("valibot");jt();X();var Hh=require("timers/promises"),Xa=require("std-env");function Ya(e,t){if(e==null)return!1;try{return Xa.process.kill?.(e,0)??!0}catch(r){return t&&console.error(`Error checking if process with PID ${e} exists:`,r),!1}}var Pn=(0,te.pipe)((0,te.string)(),(0,te.url)()),za=(0,te.object)({connectionString:Pn,prismaORMConnectionString:(0,te.optional)(Pn),terminalCommand:(0,te.optional)((0,te.string)())}),Qa=(0,te.object)({url:Pn}),wn=(0,te.pipe)((0,te.number)(),(0,te.integer)(),(0,te.minValue)(1)),Gh=(0,te.object)({database:za,http:Qa,ppg:Qa,shadowDatabase:za}),Uh=(0,te.object)({databasePort:wn,exports:(0,te.optional)(Gh),name:(0,te.pipe)((0,te.string)(),(0,te.minLength)(1)),pid:(0,te.optional)((0,te.pipe)((0,te.number)(),(0,te.integer)(),(0,te.minValue)(0))),port:wn,shadowDatabasePort:wn,version:(0,te.literal)("1")}),Tn=Symbol("initialize"),En="default",Ne=class{_databasePort;debug;dryRun;name;persistenceMode;pid;_port;_shadowDatabasePort;constructor(t){this._databasePort=t.databasePort??qe,this.debug=t.debug??!1,this.dryRun=t.dryRun??!1,this.name=t.name??En,this.persistenceMode=t.persistenceMode,this.pid=t.pid??xn.process.pid,this._port=t.port??qe,this._shadowDatabasePort=t.shadowDatabasePort??qe}static async createExclusively(t){let r=t?.dryRun!==!0&&t?.persistenceMode!=="stateless"?new Rt(t):new An(t);return await r[Tn](),r}static async fromServerDump(t){let{debug:r,name:n=En}=t??{},i=ft(n),o=Rt.getServerDumpPath(i),c=await Hn(o);if(c==null)return r&&console.debug(`[State] No server dump file found at: ${o}`),null;r&&(console.debug(`[State] server dump file found at "${o}":`),console.debug(c));let{issues:a,output:s,success:l}=(0,te.safeParse)((0,te.pipe)((0,te.string)(),(0,te.parseJson)(),Uh),c);if(!l)throw r&&console.debug(`[State] Invalid server dump file at "${o}":
33
33
  ${JSON.stringify(a,null,2)}`),new Error(`Invalid Prisma Dev state for "${n}".`);return new Rt({databasePort:s.databasePort,debug:r,dryRun:!1,name:n,pid:s.pid,port:s.port,serverDump:s,shadowDatabasePort:s.shadowDatabasePort})}static async scan(t){let{debug:r,globs:n}=t??{},i=(0,et.join)(ft(En),"..");r&&console.debug(`[State] scanning for server states in: ${i}`);let o=await Un(i,n);return r&&console.debug(`[State] found server names: ${JSON.stringify(o)}`),await Promise.all(o.map(c=>Wh(c,t)))}get databasePort(){return this._databasePort}get port(){return this._port}get shadowDatabasePort(){return this._shadowDatabasePort}},An=class extends Ne{constructor(t){super({...t,databasePort:t?.databasePort??pt,persistenceMode:"stateless",port:t?.port??ht,shadowDatabasePort:t?.shadowDatabasePort??mt})}get databaseDumpPath(){return"<DUMP_PATH>"}get pgliteDataDirPath(){return"memory://"}async[Tn](){}async close(){}async writeServerDump(){}},Rt=class e extends Ne{#n;#e;#t;#s;#a;#i;#r;constructor(t){super({...t,persistenceMode:"stateful"}),this.#i=!1,this.#e=ft(this.name),this.#n=(0,et.join)(this.#e,"db_dump.bak"),this.#t=(0,et.join)(this.#e,".lock"),this.#s=(0,et.join)(this.#e,".pglite"),this.#r=t?.serverDump??null,this.#a=e.getServerDumpPath(this.#e)}static getServerDumpPath(t){return(0,et.join)(t,"server.json")}get databaseDumpPath(){return this.#n}get exports(){return this.#r?.exports}get pgliteDataDirPath(){return this.#s}async[Tn](){await Gn(this.#e),this.debug&&console.debug(`[State] using data directory: ${this.#e}`);try{await(0,dt.lock)(this.#e,{lockfilePath:this.#t}),this.debug&&console.debug(`[State] obtained lock on: ${this.#e}`);let t=await Ne.scan({debug:this.debug,onlyMetadata:!0}),r=await Jn({debug:this.debug,name:this.name,requestedPorts:{databasePort:this.databasePort,port:this.port,shadowDatabasePort:this.shadowDatabasePort},servers:t});this._databasePort=r.databasePort,this._port=r.port,this._shadowDatabasePort=r.shadowDatabasePort,await this.writeServerDump()}catch(t){throw t instanceof Error&&"code"in t&&t.code==="ELOCKED"?new ur(this):t}}async close(){if(!this.#i)try{await(0,dt.unlock)(this.#e,{lockfilePath:this.#t}),this.#i=!0,this.debug&&console.debug(`[State] released lock on: ${this.#e}`)}catch(t){throw this.debug&&console.error(`[State] failed to release lock on: ${this.#e}`,t),t}}async writeServerDump(t){this.#r={name:this.name,version:"1",pid:xn.process.pid,port:this.port,databasePort:this.databasePort,shadowDatabasePort:this.shadowDatabasePort,exports:t},await(0,Za.writeFile)(this.#a,`${JSON.stringify(this.#r,null,2)}
34
34
  `,{encoding:"utf-8"})}};async function Wh(e,t){let{debug:r,onlyMetadata:n}=t||{},i=typeof e=="string"?e:e.name,o=typeof e!="string"?e:void 0,c={databasePort:o?.databasePort??-1,exports:o?.exports,name:i,pid:o?.pid,port:o?.port??-1,shadowDatabasePort:o?.shadowDatabasePort??-1,version:"1"};try{let a=o||await Ne.fromServerDump({debug:r,name:i});if(!a)return r&&console.debug(`[State] no server state found for name: ${i}`),{...c,status:"no_such_server"};c.databasePort=a.databasePort,c.exports=a.exports,c.pid=a.pid,c.port=a.port,c.shadowDatabasePort=a.shadowDatabasePort;let{exports:s,pid:l}=a;if(n)return{...c,status:"unknown"};if(!Ya(l,r))return r&&console.debug(`[State] server state for "${i}" has no running process with PID: ${l}`),{...c,status:"not_running"};let f=ft(i);try{if(!await(0,dt.check)(f,{lockfilePath:(0,et.join)(f,".lock")}))return r&&console.debug(`[State] server state for "${i}" is not locked, indicating it is not running.`),{...c,status:"starting_up"}}catch(E){r&&console.error(`[State] server state for "${i}" failed to check lock:`,E)}if(!s)return{...c,status:"starting_up"};let{http:v}=s,{hc:g}=await import("hono/client"),x=await g(v.url).health.$get();if(!x.ok)return r&&console.debug(`[State] server state for "${i}" is not live: ${JSON.stringify(x)}`),{...c,status:"not_running"};let _=await x.json();return _.name!==e?(r&&console.debug(`[State] server state for "${i}" has mismatched health response: ${JSON.stringify(_)}`),{...c,status:"unknown"}):(r&&console.debug(`[State] server state for "${e}" is live: ${JSON.stringify(_)}`),{...c,status:"running"})}catch(a){return r&&console.error(`[State] failed to get server status for "${i}":`,a),{...c,status:"error"}}}var On=class extends Error{name="ServerStateAlreadyExistsError";constructor(t){super(`A Prisma Dev server with the name "${t}" is already running.`)}},ur=class extends On{#n;name="ServerAlreadyRunningError";constructor(t){super(t.name),this.#n=t}get server(){return Ne.fromServerDump({debug:this.#n.debug,name:this.#n.name})}};async function eo(e){let t=await Ne.createExclusively(e),[r,n]=await Promise.all([yr("database",t),yr("shadow_database",t)]),i=await Ka(r,t),o=`prisma+postgres://localhost:${i.port}/?${new URLSearchParams({api_key:Dn({databaseUrl:r.prismaORMConnectionString,name:t.name,shadowDatabaseUrl:n.prismaORMConnectionString})}).toString()}`,c={database:{connectionString:r.connectionString,prismaORMConnectionString:r.prismaORMConnectionString,terminalCommand:r.terminalCommand},http:{url:i.url},ppg:{url:o},shadowDatabase:{connectionString:n.prismaORMConnectionString,prismaORMConnectionString:n.prismaORMConnectionString,terminalCommand:n.terminalCommand}};return await t.writeServerDump(c),{...c,close:()=>a(t,[i,r,n]),name:t.name};async function a(s,l){let v=(await Promise.allSettled(l.map(g=>g.close()))).filter(g=>g.status==="rejected").map(g=>new Error(g.reason));try{await s.close()}catch(g){v.push(g)}if(v.length>0)throw new AggregateError(v,"Failed to close some servers")}}var lr;process.once("SIGTERM",()=>{console.log("SIGTERM received, shutting down..."),process.removeAllListeners("SIGINT"),process.exitCode=143,lr?.close().finally(()=>process.exit())});process.once("SIGINT",()=>{console.log("SIGINT received, shutting down..."),process.removeAllListeners("SIGTERM"),process.exitCode=130,lr?.close().finally(()=>process.exit())});async function Jh(){let[,,e]=process.argv;if(!e)return process.send?.({type:"error",error:'Missing "name" argument, server cannot be started'},void 0),process.exit(1);try{lr=await eo({debug:!0,persistenceMode:"stateful",name:e}),process.send?.({type:"started",server:lr},void 0)}catch(t){console.error(t);let r=t instanceof Error?t.message:String(t);process.send?.({type:"error",error:r},void 0),await(0,to.setTimeout)(1e3),process.exit(1)}}Jh();
35
35
  /*! Bundled license information:
package/dist/daemon.js CHANGED
@@ -1 +1 @@
1
- import{a as t}from"./chunk-HQQF73SD.js";import"./chunk-KUHNXXCE.js";import"./chunk-GUJALUTC.js";import"./chunk-NLG6WPCX.js";import"./chunk-UZV6WD53.js";import"./chunk-ZPA6K2XO.js";import{d as o}from"./chunk-RODR7QVK.js";o();import{setTimeout as a}from"timers/promises";var r;process.once("SIGTERM",()=>{console.log("SIGTERM received, shutting down..."),process.removeAllListeners("SIGINT"),process.exitCode=143,r?.close().finally(()=>process.exit())});process.once("SIGINT",()=>{console.log("SIGINT received, shutting down..."),process.removeAllListeners("SIGTERM"),process.exitCode=130,r?.close().finally(()=>process.exit())});async function i(){let[,,s]=process.argv;if(!s)return process.send?.({type:"error",error:'Missing "name" argument, server cannot be started'},void 0),process.exit(1);try{r=await t({debug:!0,persistenceMode:"stateful",name:s}),process.send?.({type:"started",server:r},void 0)}catch(e){console.error(e);let n=e instanceof Error?e.message:String(e);process.send?.({type:"error",error:n},void 0),await a(1e3),process.exit(1)}}i();
1
+ import{a as t}from"./chunk-ABDUHDM7.js";import"./chunk-KUHNXXCE.js";import"./chunk-GUJALUTC.js";import"./chunk-NLG6WPCX.js";import"./chunk-UZV6WD53.js";import"./chunk-ZPA6K2XO.js";import{d as o}from"./chunk-RODR7QVK.js";o();import{setTimeout as a}from"timers/promises";var r;process.once("SIGTERM",()=>{console.log("SIGTERM received, shutting down..."),process.removeAllListeners("SIGINT"),process.exitCode=143,r?.close().finally(()=>process.exit())});process.once("SIGINT",()=>{console.log("SIGINT received, shutting down..."),process.removeAllListeners("SIGTERM"),process.exitCode=130,r?.close().finally(()=>process.exit())});async function i(){let[,,s]=process.argv;if(!s)return process.send?.({type:"error",error:'Missing "name" argument, server cannot be started'},void 0),process.exit(1);try{r=await t({debug:!0,persistenceMode:"stateful",name:s}),process.send?.({type:"started",server:r},void 0)}catch(e){console.error(e);let n=e instanceof Error?e.message:String(e);process.send?.({type:"error",error:n},void 0),await a(1e3),process.exit(1)}}i();
package/dist/index.cjs CHANGED
@@ -29,7 +29,7 @@ ${t.fs.read(Xe.default.join(n,c))}`).join(`
29
29
 
30
30
  `)},process.chdir(t.tmpDir)}),afterEach(()=>{process.chdir(t.mocked.cwd)}),ua(e)}};function ua(e){return{add(t){let r=t(e);return ua(r)},assemble(){return e}}}var Sh=()=>e=>{let t=e;return beforeEach(()=>{t.mocked["console.error"]=jest.spyOn(console,"error").mockImplementation(()=>{}),t.mocked["console.log"]=jest.spyOn(console,"log").mockImplementation(()=>{}),t.mocked["console.info"]=jest.spyOn(console,"info").mockImplementation(()=>{}),t.mocked["console.warn"]=jest.spyOn(console,"warn").mockImplementation(()=>{})}),afterEach(()=>{t.mocked["console.error"].mockRestore(),t.mocked["console.log"].mockRestore(),t.mocked["console.info"].mockRestore(),t.mocked["console.warn"].mockRestore()}),t},wh=({normalizationRules:e}={normalizationRules:[]})=>t=>{let r=t,n=(i,o)=>{for(let[c,a]of o)i=i.replace(c,a);return i};return beforeEach(()=>{r.mocked["process.stderr.write"]=jest.spyOn(process.stderr,"write").mockImplementation(()=>!0),r.mocked["process.stdout.write"]=jest.spyOn(process.stdout,"write").mockImplementation(()=>!0),r.normalizedCapturedStdout=()=>n(r.mocked["process.stdout.write"].mock.calls.join(""),e),r.normalizedCapturedStderr=()=>n(r.mocked["process.stderr.write"].mock.calls.join(""),e),r.clearCapturedStdout=()=>r.mocked["process.stdout.write"].mockClear(),r.clearCapturedStderr=()=>r.mocked["process.stderr.write"].mockClear()}),afterEach(()=>{r.mocked["process.stderr.write"].mockRestore(),r.mocked["process.stdout.write"].mockRestore()}),r},Eh=()=>e=>{let t=e;return beforeEach(()=>{t.mocked["process.exit"]=jest.spyOn(process,"exit").mockImplementation(r=>{throw new Error("process.exit: "+r)}),t.recordedExitCode=()=>t.mocked["process.exit"].mock.calls[0]?.[0]}),afterEach(()=>{t.mocked["process.exit"].mockRestore()}),t}});var ma=ke((mg,ha)=>{"use strict";X();var hn=Object.defineProperty,Ph=Object.getOwnPropertyDescriptor,Ah=Object.getOwnPropertyNames,Oh=Object.prototype.hasOwnProperty,xh=(e,t)=>{for(var r in t)hn(e,r,{get:t[r],enumerable:!0})},Th=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Ah(t))!Oh.call(e,i)&&i!==r&&hn(e,i,{get:()=>t[i],enumerable:!(n=Ph(t,i))||n.enumerable});return e},Rh=e=>Th(hn({},"__esModule",{value:!0}),e),da={};xh(da,{binaryTargets:()=>pa.binaryTargets,getBinaryTargetForCurrentPlatform:()=>pn.getBinaryTargetForCurrentPlatform,getPlatformInfo:()=>pn.getPlatformInfo,getos:()=>pn.getos,jestConsoleContext:()=>ir.jestConsoleContext,jestContext:()=>ir.jestContext,jestStdoutContext:()=>ir.jestStdoutContext,link:()=>kh.link,processExitContext:()=>ir.processExitContext});ha.exports=Rh(da);var pn=Li(),kh=Xi(),lg=wr(),fg=Nt(),pa=Zi(),dg=es(),ir=fa(),pg=fn(),hg=at();(0,pa.init_binaryTargets)()});function sr(e){let t,r,n=new Promise((c,a)=>{t=c,r=a}),i=c=>{i=o=null,r(c),e?.onRejected?.(c),e?.onFulfilled?.()},o=c=>{o=i=null,t(c),e?.onResolved?.(c),e?.onFulfilled?.()};return{isFulfilled:()=>o===i,promise:n,reject:c=>i?.(c),resolve:c=>o?.(c)}}var mn=xe(()=>{"use strict";X()});function ar(e,t){return console.error(e),e instanceof Ot?t.json({EngineNotStarted:{reason:{EngineStartupError:{logs:[],msg:e.message}}}},500):e instanceof dt?t.text(e.responseBody,e.statusCode):t.body(null,500)}var ga,ya,_a,ba,Sa,wa,Ch,Dh,va,pt,Ot,dt,vn=xe(()=>{"use strict";X();ga=require("child_process"),ya=require("events"),_a=require("fs/promises"),ba=require("path"),Sa=require("timers/promises");mn();wa=require("std-env");It();({PRISMA_DEV_FORCE_ENGINE_BINARY_DOWNLOAD:Ch,PRISMA_DEV_FORCE_ENGINE_BINARY_PATH:Dh,PRISMA_DEV_FORCE_NETWORK_DELAY_MS:va}=wa.process.env),pt=class e{static#n=new Map;#e;#t;constructor(t){this.#e=t,this.#t=null}static async get(t){let{debug:r}=t,n=`${t.schemaHash}:${t.clientVersion}`;try{let i=e.#n.get(n);if(i)return i;let o=new e(t);return e.#n.set(n,o),r&&console.debug("[Query Engine] starting...",t),await o.start(),r&&console.debug("[Query Engine] started!"),o}finally{e.stopAll(n)}}static async stopAll(t){let n=(await Promise.allSettled(Array.from(e.#n.entries()).filter(([i])=>i!==t).map(async([i,o])=>{try{await o.stop()}finally{e.#n.delete(i)}}))).filter(i=>i.status==="rejected").map(i=>i.reason);if(n.length>0)throw new AggregateError(n,"Failed to stop engines")}async commitTransaction(t,r){return await this.#o(t,r,"commit")}async request(t,r){let{url:n}=await this.start(),i=this.#r(r),o=await fetch(n,{body:typeof t=="string"?t:JSON.stringify(t),headers:{...i,"Content-Type":"application/json"},method:"POST"});if(!o.ok)throw await dt.fromResponse(o);return await o.text()}async rollbackTransaction(t,r){return await this.#o(t,r,"rollback")}async startTransaction(t,r){let{url:n}=await this.start(),i=this.#r(r),o=await fetch(`${n}/transaction/start`,{body:JSON.stringify(t),headers:{...i,"Content-Type":"application/json"},method:"POST"});if(!o.ok)throw await dt.fromResponse(o);return await o.json()}async start(){if(this.#t!=null)return await this.#t;let{promise:t,reject:r,resolve:n}=sr();this.#t=t;let i=Dh||await this.#s();this.#e.debug&&console.debug("[Query Engine] spinning up at path...",i);let{proxySignals:o}=await import("foreground-child/proxy-signals"),c=(0,ga.spawn)(i,["--enable-raw-queries","--enable-telemetry-in-response","--port","0"],{env:{LOG_QUERIES:"y",PRISMA_DML:this.#e.base64Schema,QE_LOG_LEVEL:"TRACE",RUST_BACKTRACE:"1",RUST_LOG:"info"},stdio:["ignore","pipe","pipe"],windowsHide:!0});o(c),c.stderr.setEncoding("utf8"),c.stdout.setEncoding("utf8");let a=d=>{let v=d.split(`
31
31
  `).find(E=>E.includes("Started query engine http server"));if(!v)return;c.stdout.removeListener("data",a);let{fields:g}=JSON.parse(v);if(g==null)return r(new Error(`Unexpected data during initialization, "fields" are missing: ${d}`));let{ip:x,port:_}=g;if(x==null||_==null)return r(new Error(`This version of query-engine is not compatible with minippg, "ip" and "port" are missing in the startup log entry.
32
- Received data: ${d}`));n({childProcess:c,url:`http://${x}:${_}`})},s=d=>{this.#t=null,r(new Ot(String(d))),c.removeListener("exit",l),c.kill()};c.once("error",s);let l=(d,v)=>{this.#t=null,r(new Ot(`Query Engine exited with code ${d} and signal ${v}`))};return c.once("exit",l),c.stdout.on("data",a),this.#e.debug&&(c.stderr.on("data",console.error.bind(console,"[Query Engine]")),c.stdout.on("data",console.debug.bind(console,"[Query Engine]"))),await this.#t}async stop(){if(this.#t==null)return;let{childProcess:t}=await this.#t;t.exitCode==null&&t.signalCode==null&&(this.#t=null,t.kill(),await(0,ya.once)(t,"exit"))}async#s(){this.#e.debug&&console.debug("[Query Engine] getting engine commit hash...");let t=await this.#a();this.#e.debug&&console.debug("[Query Engine] got engine commit hash",t);let r=Nn(this.#e.clientVersion,t);this.#e.debug&&console.debug("[Query Engine] cache directory path",r),await(0,_a.mkdir)(r,{recursive:!0});let{binaryTarget:n}=this.#e.platform,i=n==="windows"?".exe":"",o=(0,ba.join)(r,`query-engine-${n}${i}`);return this.#e.debug&&console.debug("[Query Engine] binary path",o),(Ch==="1"||await Mn(o)===!1)&&await this.#i({commitHash:t,extension:i,engineBinaryPath:o}),o}async#a(){let t=await fetch(`https://registry.npmjs.org/@prisma/client/${this.#e.clientVersion}`);if(!t.ok)throw new Error(`Couldn't fetch package.json from npm registry, status code: ${t.status}`);let n=(await t.json()).devDependencies?.["@prisma/engines-version"];if(!n)throw new Error("Couldn't find engines version in package.json");let i=n.split(".").at(-1);if(!i)throw new Error("Couldn't find commit hash in engines version");return i}async#i(t){let{commitHash:r,extension:n,engineBinaryPath:i}=t,{binaryTarget:o}=this.#e.platform,c=`https://binaries.prisma.sh/all_commits/${r}/${o}/query-engine${n}.gz`;this.#e.debug&&console.debug("[Query Engine] downloading engine from url",c);let a=await fetch(c);if(!a.ok)throw new Error(`Couldn't download engine. URL: ${c}, status code: ${a.status}`);va&&await(0,Sa.setTimeout)(Number(va)),await Fn(await a.arrayBuffer(),i),this.#e.debug&&console.debug("[Query Engine] downloaded and saved at",i)}#r(t){let r={};for(let[n,i]of Object.entries(t))i!=null&&(r[n]=i);return r}async#o(t,r,n){let{url:i}=await this.#t,o=this.#r(r),c=await fetch(`${i}/transaction/${t}/${n}`,{headers:{...o,"Content-Type":"application/json"},method:"POST"});if(!c.ok)throw await dt.fromResponse(c);try{return await c.json()}catch{return{}}}};Ot=class extends Error{name="EngineStartError"},dt=class e extends Error{constructor(r,n,i){super(`${r}: Query Engine response status ${n}, body: ${i}`);this.action=r;this.statusCode=n;this.responseBody=i}name="EngineHttpError";static async fromResponse(r){let n=new URL(r.url),i=await r.text();return new e(n.pathname,r.status,i)}}});async function Ea(e){let{output:t,success:r}=(0,Ee.safeParse)(jh,await e.req.json(),{abortEarly:!0});return r?t:e.text("Invalid input",400)}var Ee,jh,Pa=xe(()=>{"use strict";X();Ee=require("valibot"),jh=(0,Ee.object)({tags:(0,Ee.union)([(0,Ee.pipe)((0,Ee.array)((0,Ee.string)()),(0,Ee.minLength)(1)),(0,Ee.literal)("all")])})});async function Aa(e){return gn===void 0&&(gn=await Ye.Server.create({databaseUrl:e.get("db").connectionString,maxResponseSize:(0,Ye.parseSize)("128 MiB"),queryTimeout:(0,Ye.parseDuration)("PT5M"),maxTransactionTimeout:(0,Ye.parseDuration)("PT5M"),maxTransactionWaitTime:(0,Ye.parseDuration)("PT5M"),perRequestLogContext:{logFormat:"text",logLevel:e.get("debug")?"debug":"off"}})),gn}var Ye,or,gn,Oa=xe(()=>{"use strict";X();Ye=require("@prisma/query-plan-executor"),or=require("@prisma/query-plan-executor")});async function _n(e){let r=new TextEncoder().encode(e),n=await crypto.subtle.digest("SHA-256",r);return Array.from(new Uint8Array(n)).map(c=>c.toString(16).padStart(2,"0")).join("")}function Ta(e){let t=e.req.param("schemaHash"),r=cr.get(t);return r==null?e.json({EngineNotStarted:{reason:"SchemaMissing"}},404):{schemaHash:t,schemas:r}}async function Ra(e,t,r){let n=yn.Buffer.from(e,"base64").toString("utf8"),i=(0,xa.produceSchema)(n,c=>{c.datasource('"postgresql"',t.toString())});r&&console.log("[Accelerate] schema with override:",i);let o=await _n(i);return{base64Override:yn.Buffer.from(i,"utf8").toString("base64"),overrideHash:o}}var yn,xa,cr,ka=xe(()=>{"use strict";X();yn=require("buffer"),xa=require("@mrleebo/prisma-ast"),cr=new Map});function ur(e){let{req:t}=e;return{traceparent:t.header("traceparent"),"X-capture-telemetry":t.header("X-capture-telemetry")}}var Ca=xe(()=>{"use strict";X()});async function Da(e){let{issues:t,output:r,success:n}=(0,fe.safeParse)(Ih,await e.req.json(),{abortEarly:!0});return n?r:e.json({EngineNotStarted:{reason:"InvalidRequest",issues:t}},400)}function ja(e,t){let{output:r,success:n}=(0,fe.safeParse)($h,e);return n?r:t.json({EngineMalfunction:{}},500)}var fe,Ih,$h,Ia=xe(()=>{"use strict";X();fe=require("valibot"),Ih=(0,fe.object)({isolation_level:(0,fe.optional)((0,fe.string)()),max_wait:(0,fe.pipe)((0,fe.number)(),(0,fe.integer)(),(0,fe.minValue)(0)),timeout:(0,fe.pipe)((0,fe.number)(),(0,fe.integer)(),(0,fe.minValue)(0))});$h=(0,fe.looseObject)({id:(0,fe.union)([(0,fe.string)(),(0,fe.number)()])})});var Na={};lr(Na,{accelerateRoute:()=>xt});async function bn(e){let{req:t}=e,r=Ta(e);if(r instanceof Response)return r;let{base64Override:n,overrideHash:i}=r.schemas;return await pt.get({base64Schema:n,clientVersion:process.env.PRISMA_DEV_FORCE_CLIENT_VERSION||t.param("clientVersion"),debug:e.get("debug"),platform:e.get("platform"),schemaHash:i})}var $a,La,Ze,xt,Lh,Tt,Nh,Mh,Ma=xe(()=>{"use strict";X();$a=require("hono/http-exception"),La=require("hono/tiny"),Ze=require("hono/validator");fr();Pa();vn();Oa();ka();Ca();Ia();xt=new La.Hono;xt.post("/invalidate",(0,Ze.validator)("header",ze),async e=>{let t=await Ea(e);return t instanceof Response?t:e.body(null)});Lh="/:clientVersion/:schemaHash",Tt=xt.basePath(Lh);xt.route("/",Tt);Nh=["/graphql","/itx/:transactionId/graphql"];Tt.on("POST",[...Nh],(0,Ze.validator)("header",ze),async e=>{let{req:t}=e;try{let r=await bn(e);if(r instanceof Response)return r;let n=await t.text(),i=t.param("transactionId"),o=await r.request(n,{...ur(e),"X-transaction-id":i});return e.text(o)}catch(r){return ar(r,e)}});Tt.basePath("/itx/:transactionId").on("POST",["/commit","/rollback"],(0,Ze.validator)("header",ze),async e=>{let{req:t}=e;try{let r=await bn(e);if(r instanceof Response)return r;let i=`${t.routePath.split("/").filter(Boolean).at(-1)}Transaction`,o=t.param("transactionId"),c=await r[i](o,ur(e));return e.json(c)}catch(r){return ar(r,e)}});Tt.put("/schema",(0,Ze.validator)("header",ze),async e=>{let{req:t}=e,r=await t.text();if(!r)return e.text("Missing schema",400);let n=t.param("schemaHash"),i=cr.get(n);if(i==null){if(n!==await _n(r))return e.text("Schema hash mismatch",400);let o=await Ra(r,e.get("db").prismaORMConnectionString,e.get("debug"));return cr.set(n,{base64Original:r,...o}),e.text(n)}return r!==i.base64Original?e.text("Schema mismatch",400):e.text(n)});Tt.post("/transaction/start",(0,Ze.validator)("header",ze),async e=>{let{req:t}=e,r=await Da(e);if(r instanceof Response)return r;try{let n=await bn(e);if(n instanceof Response)return n;let i=await n.startTransaction(r,ur(e)),o=ja(i,e);if(o instanceof Response)return o;let{id:c}=o,a=t.param("clientVersion"),s=e.get("port"),l=e.get("protocol"),d=t.param("schemaHash");return e.json({...i,"data-proxy":{endpoint:`${l}://localhost:${s}/${a}/${d}/itx/${c}`}})}catch(n){return ar(n,e)}});Mh=[["/connection-info","GET"],["/query","POST"],["/transaction/start","POST"],["/transaction/:transactionId/commit","POST"],["/transaction/:transactionId/query","POST"],["/transaction/:transactionId/rollback","POST"]];for(let[e,t]of Mh)xt.on(t,e,(0,Ze.validator)("header",ze),async r=>{let n=r.req.header("prisma-engine-hash");if(n!=="0.0.0"&&n!==or.version)throw new $a.HTTPException(400,{message:`Using an HTTP connection string is not supported with Prisma Client version ${n} by this version of \`prisma dev\`. Please either use a direct TCP connection string or upgrade your client to version ${or.version}.`});return await(await Aa(r)).fetch(r.req.raw)})});var Ba={};lr(Ba,{utilityRoute:()=>Sn});var Fa,qa,Sn,Hg,Ha=xe(()=>{"use strict";X();Fa=require("hono/tiny"),qa=require("http-status-codes"),Sn=new Fa.Hono;Sn.post("/database/dump",async e=>{let t=e.get("db"),r=e.get("serverState");return await t.dump(r.databaseDumpPath),e.json({dumpPath:r.databaseDumpPath},qa.StatusCodes.CREATED)});Hg=Sn.get("/health",e=>e.json({name:e.get("serverState").name}))});var Wh={};lr(Wh,{DEFAULT_DATABASE_PORT:()=>nt,DEFAULT_SERVER_PORT:()=>it,DEFAULT_SHADOW_DATABASE_PORT:()=>st,PortNotAvailableError:()=>Ce,ServerAlreadyRunningError:()=>kt,startPrismaDevServer:()=>Za,unstable_startServer:()=>Uh});module.exports=so(Wh);X();fr();X();var Kn=require("pathe/utils");It();X();var Be=require("get-port-please"),Lt=require("remeda"),nt=51214,it=51213,st=51215,$t=65535,qe=-1/0;async function Wn(e){let{debug:t,name:r,requestedPorts:n,servers:i}=e,{portsUsedByOtherServers:o,portsUsedByThisServerLastTime:c}=mo(r,i);t&&(console.debug(`ports used by other servers: ${Object.keys(o).join(", ")}`),console.debug(`ports used by "${r}" server last time: ${JSON.stringify(c)}`));let a={databasePort:qe,port:qe,shadowDatabasePort:qe},s=["port","databasePort","shadowDatabasePort"];for(let l of s){let d=await po({debug:t,portKey:l,portsUsedByOtherServers:o,portsUsedByThisServerLastTime:c,requestedPorts:n})??await ho({debug:t,pickedPorts:a,portKey:l,portsUsedByOtherServers:o,portsUsedByThisServerLastTime:c});t&&console.debug(`Got port for "${l}": ${d}`),a[l]=d}return t&&console.debug(`Picked ports: ${JSON.stringify(a)}`),a}async function po(e){let{debug:t,portKey:r,portsUsedByOtherServers:n,portsUsedByThisServerLastTime:i,requestedPorts:o}=e,{[r]:c,...a}=o;if(Un(c))return await vo({debug:t,otherRequestedPorts:a,portKey:r,portsUsedByOtherServers:n,requestedPort:c}),c;let s=i?.[r]??qe;if(!Un(s))return t&&console.debug(`No port specified for "${r}". Trying to pick a new port.`),null;let l=s in n;return l||Object.values(a).includes(s)?(t&&console.debug(`Port ${s} that was used last time for this server, ${l?"is also used by another server":"has been requested for another service"}. Trying to pick a new port.`),null):await(0,Be.checkPort)(s)===!1?(t&&console.debug(`Port ${s}, that was used last time for this server, is not available. Trying to pick a new port.`),null):(t&&console.debug(`Using port ${s} for "${r}" as it was used last time and is available.`),s)}async function ho(e){let{debug:t,pickedPorts:r,portKey:n,portsUsedByOtherServers:i,portsUsedByThisServerLastTime:o}=e,c=Math.max(nt,it,st)+1,a=[...Object.values(r),...Object.keys(i).map(Number),...Object.values(o||{})],s=Math.min(Math.max(c,...a)+100,$t),l=(0,Lt.difference)((0,Lt.range)(c,s),a),d={port:it,databasePort:nt,shadowDatabasePort:st}[n];try{return await(0,Be.getPort)({port:d in i||Object.values(r).includes(d)||Object.values(o||{}).includes(d)?void 0:d,ports:l})}catch(v){if(v instanceof Error&&v.name==="GetPortError"&&s+1<=$t)return t&&console.debug(`Expanding port lookup to range [${s+1}, ${$t}].`),await(0,Be.getPort)({portRange:[s+1,$t]});throw v}}function Un(e){return e>=0}function mo(e,t){let r={},n;for(let i of t){let{databasePort:o,port:c,shadowDatabasePort:a}=i;if(i.name===e){n={databasePort:o,port:c,shadowDatabasePort:a};continue}r[o]=!0,r[c]=!0,r[a]=!0}return{portsUsedByOtherServers:r,portsUsedByThisServerLastTime:n}}async function vo(e){let{debug:t,otherRequestedPorts:r,portKey:n,portsUsedByOtherServers:i,requestedPort:o}=e;if(o in i)throw t&&console.error(`Port ${o} was requested for "${n}", but is already used by another server.`),new gr(o);if(Object.values(r).includes(o))throw t&&console.error(`Port ${o} was requested for "${n}", but also for another key.`),new vr(o);if((0,Be.isUnsafePort)(o))throw t&&console.error(`Port ${o} was requested for "${n}", but is unsafe.`),new Ce(o);if(await(0,Be.checkPort)(o)===!1)throw t&&console.error(`Port ${o} was requested for "${n}", but is not available.`),new Ce(o)}var Ce=class extends Error{constructor(r){super(`Port \`${r}\` is not available.`);this.port=r}name="PortNotAvailableError"},vr=class extends Error{constructor(r){super(`Port number \`${r}\` was requested twice. Please choose a different port for each service.`);this.port=r}name="PortRequestedTwiceError"},gr=class extends Error{constructor(r){super(`Port number \`${r}\` belongs to another Prisma Dev server. Please choose a different port.`);this.port=r}name="PortBelongsToAnotherServerError"};var Se={connectionLimit:1,connectTimeout:0,database:"template1",maxIdleConnectionLifetime:0,password:"postgres",poolTimeout:0,socketTimeout:0,sslMode:"disable",username:"postgres"},go=`postgres://${Se.username}:${Se.password}@localhost`,Xn=new URLSearchParams({sslmode:Se.sslMode}),yo=new URLSearchParams({...Object.fromEntries(Xn.entries()),connection_limit:String(Se.connectionLimit),connect_timeout:String(Se.connectTimeout),max_idle_connection_lifetime:String(Se.maxIdleConnectionLifetime),pool_timeout:String(Se.poolTimeout),single_use_connections:"true",socket_timeout:String(Se.socketTimeout)});async function yr(e,t){let r=e==="database"?t.databasePort:t.shadowDatabasePort;if(t.dryRun)return Jn(e,t,{db:null,port:r,server:null});let{debug:n}=t,o=await(e==="shadow_database"?_o:Yn)(t.pgliteDataDirPath,n);n&&o.onNotification((s,l)=>{console.debug(`[${e}][${s}] ${l}`)});let{PGLiteSocketServer:c}=await import("@electric-sql/pglite-socket"),a=new c({db:o,debug:n,inspect:n,port:r});n&&(a.addEventListener("listening",s=>{let{detail:l}=s;console.debug(`[${e}] server listening on ${JSON.stringify(l)}`)}),a.addEventListener("connection",s=>{let{clientAddress:l,clientPort:d}=s.detail;console.debug(`[${e}] client connected from ${l}:${d}`)}),a.addEventListener("error",s=>{let{detail:l}=s;console.error(`[${e}] server error:`,l)}));try{await a.start()}catch(s){throw s instanceof Error&&"code"in s&&s.code==="EADDRINUSE"?new Ce(r):s}return Jn(e,t,{db:o,port:r,server:a})}function Jn(e,t,r){let{debug:n}=t,{db:i,port:o,server:c}=r||{};return n&&console.debug(`[${e}] server started on port ${o}`),{...Se,close:async()=>{let a=[];try{await c?.stop(),n&&console.debug(`[${e}] server stopped on port ${o}`)}catch(s){console.error(`[${e}] server stop error`,s),a.push(s)}if(e==="database")try{await i?.syncToFs(),n&&console.debug(`[${e}] synced to filesystem`)}catch(s){console.error(`[${e}] sync error`,s),a.push(s)}try{await i?.close(),n&&console.debug(`[${e}] closed`)}catch(s){console.error(`[${e}] close error`,s),a.push(s)}if(a.length>0)throw new AggregateError(a,`Failed to close ${e} properly`)},connectionString:Vn(o,Xn),dump:async a=>{e==="shadow_database"||!i||await bo({db:i,debug:n,destinationPath:a})},port:o,prismaORMConnectionString:Vn(o,yo),terminalCommand:`PGPASSWORD=${Se.password} PGSSLMODE=${Se.sslMode} psql -h localhost -p ${o} -U ${Se.username} -d ${Se.database}`}}function Vn(e,t){return`${go}:${e}/${Se.database}?${t.toString()}`}async function Yn(e,t){let{PGlite:r}=await import("@electric-sql/pglite");return await r.create({database:Se.database,dataDir:e,debug:t?5:void 0,relaxedDurability:!1,username:Se.username})}async function _o(e,t){let{PGlite:r}=await import("@electric-sql/pglite");return await r.create({database:Se.database,dataDir:"memory://",debug:t?5:void 0,relaxedDurability:!1,username:Se.username})}async function bo(e){let{dataDir:t,db:r,debug:n,destinationPath:i}=e,o=r||await Yn(t,n),{pgDump:c}=await import("@electric-sql/pglite-tools/pg_dump"),a=await c({args:["--schema-only","--no-owner"],fileName:i?(0,Kn.filename)(i):void 0,pg:await o.clone()});return i?(n&&console.debug(`[DB] Dumping database to ${i}`),await qn(a,i)):(n&&console.debug("[DB] Dumping database to memory"),await a.text())}X();var Ua=require("http"),Wa=require("util"),Ja=Pe(ma(),1);mn();vn();async function Va(e,t){let{port:r}=t;if(t.dryRun)return Ga(r,null);let n=await Fh(r,e,t),{promise:i,reject:o,resolve:c}=sr(),{serve:a}=await import("@hono/node-server"),s=a({createServer:Ua.createServer,fetch:n.fetch,overrideGlobalObjects:!1,port:r},c);return s.on("error",l=>{if(typeof l=="object"&&"code"in l&&l.code==="EADDRINUSE")return o(new Ce(r));console.error("[Accelerate]",l)}),await i,Ga(r,s)}function Ga(e,t){return{async close(){t&&await Promise.allSettled([(0,Wa.promisify)(t.close.bind(t))(),pt.stopAll()])},port:e,url:`http://localhost:${e}`}}async function Fh(e,t,r){let{debug:n}=r,[{Hono:i},{accelerateRoute:o},{utilityRoute:c}]=await Promise.all([import("hono/tiny"),Promise.resolve().then(()=>(Ma(),Na)),Promise.resolve().then(()=>(Ha(),Ba))]),a=new i,s=await(0,Ja.getPlatformInfo)();if(n&&console.debug("[Accelerate] platform info: %s",JSON.stringify(s)),n){let{logger:d}=await import("hono/logger");a.use("*",d((...v)=>console.log("[Accelerate]",...v)))}a.use("*",async(d,v)=>(d.set("db",t),d.set("debug",!!n),d.set("platform",s),d.set("port",e),d.set("protocol","http"),d.set("serverState",r),d.set("shadowDBPort",r.shadowDatabasePort),await v()));let l=new i;return l.route("/",o),l.route("/",c),a.route("/",l),a}X();var Qa=require("fs/promises"),et=require("pathe"),ht=require("proper-lockfile"),xn=require("std-env"),te=require("valibot");It();X();var qh=require("timers/promises"),Ka=require("std-env");function Xa(e,t){if(e==null)return!1;try{return Ka.process.kill?.(e,0)??!0}catch(r){return t&&console.error(`Error checking if process with PID ${e} exists:`,r),!1}}var Pn=(0,te.pipe)((0,te.string)(),(0,te.url)()),Ya=(0,te.object)({connectionString:Pn,prismaORMConnectionString:(0,te.optional)(Pn),terminalCommand:(0,te.optional)((0,te.string)())}),za=(0,te.object)({url:Pn}),wn=(0,te.pipe)((0,te.number)(),(0,te.integer)(),(0,te.minValue)(1)),Bh=(0,te.object)({database:Ya,http:za,ppg:za,shadowDatabase:Ya}),Hh=(0,te.object)({databasePort:wn,exports:(0,te.optional)(Bh),name:(0,te.pipe)((0,te.string)(),(0,te.minLength)(1)),pid:(0,te.optional)((0,te.pipe)((0,te.number)(),(0,te.integer)(),(0,te.minValue)(0))),port:wn,shadowDatabasePort:wn,version:(0,te.literal)("1")}),Tn=Symbol("initialize"),En="default",Ne=class{_databasePort;debug;dryRun;name;persistenceMode;pid;_port;_shadowDatabasePort;constructor(t){this._databasePort=t.databasePort??qe,this.debug=t.debug??!1,this.dryRun=t.dryRun??!1,this.name=t.name??En,this.persistenceMode=t.persistenceMode,this.pid=t.pid??xn.process.pid,this._port=t.port??qe,this._shadowDatabasePort=t.shadowDatabasePort??qe}static async createExclusively(t){let r=t?.dryRun!==!0&&t?.persistenceMode!=="stateless"?new Rt(t):new An(t);return await r[Tn](),r}static async fromServerDump(t){let{debug:r,name:n=En}=t??{},i=mt(n),o=Rt.getServerDumpPath(i),c=await Bn(o);if(c==null)return r&&console.debug(`[State] No server dump file found at: ${o}`),null;r&&(console.debug(`[State] server dump file found at "${o}":`),console.debug(c));let{issues:a,output:s,success:l}=(0,te.safeParse)((0,te.pipe)((0,te.string)(),(0,te.parseJson)(),Hh),c);if(!l)throw r&&console.debug(`[State] Invalid server dump file at "${o}":
32
+ Received data: ${d}`));n({childProcess:c,url:`http://${x}:${_}`})},s=d=>{this.#t=null,r(new Ot(String(d))),c.removeListener("exit",l),c.kill()};c.once("error",s);let l=(d,v)=>{this.#t=null,r(new Ot(`Query Engine exited with code ${d} and signal ${v}`))};return c.once("exit",l),c.stdout.on("data",a),this.#e.debug&&(c.stderr.on("data",console.error.bind(console,"[Query Engine]")),c.stdout.on("data",console.debug.bind(console,"[Query Engine]"))),await this.#t}async stop(){if(this.#t==null)return;let{childProcess:t}=await this.#t;t.exitCode==null&&t.signalCode==null&&(this.#t=null,t.kill(),await(0,ya.once)(t,"exit"))}async#s(){this.#e.debug&&console.debug("[Query Engine] getting engine commit hash...");let t=await this.#a();this.#e.debug&&console.debug("[Query Engine] got engine commit hash",t);let r=Nn(this.#e.clientVersion,t);this.#e.debug&&console.debug("[Query Engine] cache directory path",r),await(0,_a.mkdir)(r,{recursive:!0});let{binaryTarget:n}=this.#e.platform,i=n==="windows"?".exe":"",o=(0,ba.join)(r,`query-engine-${n}${i}`);return this.#e.debug&&console.debug("[Query Engine] binary path",o),(Ch==="1"||await Mn(o)===!1)&&await this.#i({commitHash:t,extension:i,engineBinaryPath:o}),o}async#a(){let t=await fetch(`https://registry.npmjs.org/@prisma/client/${this.#e.clientVersion}`);if(!t.ok)throw new Error(`Couldn't fetch package.json from npm registry, status code: ${t.status}`);let n=(await t.json()).devDependencies?.["@prisma/engines-version"];if(!n)throw new Error("Couldn't find engines version in package.json");let i=n.split(".").at(-1);if(!i)throw new Error("Couldn't find commit hash in engines version");return i}async#i(t){let{commitHash:r,extension:n,engineBinaryPath:i}=t,{binaryTarget:o}=this.#e.platform,c=`https://binaries.prisma.sh/all_commits/${r}/${o}/query-engine${n}.gz`;this.#e.debug&&console.debug("[Query Engine] downloading engine from url",c);let a=await fetch(c);if(!a.ok)throw new Error(`Couldn't download engine. URL: ${c}, status code: ${a.status}`);va&&await(0,Sa.setTimeout)(Number(va)),await Fn(await a.arrayBuffer(),i),this.#e.debug&&console.debug("[Query Engine] downloaded and saved at",i)}#r(t){let r={};for(let[n,i]of Object.entries(t))i!=null&&(r[n]=i);return r}async#o(t,r,n){let{url:i}=await this.#t,o=this.#r(r),c=await fetch(`${i}/transaction/${t}/${n}`,{headers:{...o,"Content-Type":"application/json"},method:"POST"});if(!c.ok)throw await dt.fromResponse(c);try{return await c.json()}catch{return{}}}};Ot=class extends Error{name="EngineStartError"},dt=class e extends Error{constructor(r,n,i){super(`${r}: Query Engine response status ${n}, body: ${i}`);this.action=r;this.statusCode=n;this.responseBody=i}name="EngineHttpError";static async fromResponse(r){let n=new URL(r.url),i=await r.text();return new e(n.pathname,r.status,i)}}});async function Ea(e){let{output:t,success:r}=(0,Ee.safeParse)(jh,await e.req.json(),{abortEarly:!0});return r?t:e.text("Invalid input",400)}var Ee,jh,Pa=xe(()=>{"use strict";X();Ee=require("valibot"),jh=(0,Ee.object)({tags:(0,Ee.union)([(0,Ee.pipe)((0,Ee.array)((0,Ee.string)()),(0,Ee.minLength)(1)),(0,Ee.literal)("all")])})});async function Aa(e){return gn===void 0&&(gn=await Ye.Server.create({databaseUrl:e.get("db").connectionString,maxResponseSize:(0,Ye.parseSize)("128 MiB"),queryTimeout:(0,Ye.parseDuration)("PT5M"),maxTransactionTimeout:(0,Ye.parseDuration)("PT5M"),maxTransactionWaitTime:(0,Ye.parseDuration)("PT5M"),perRequestLogContext:{logFormat:"text",logLevel:e.get("debug")?"debug":"off"}})),gn}var Ye,or,gn,Oa=xe(()=>{"use strict";X();Ye=require("@prisma/query-plan-executor"),or=require("@prisma/query-plan-executor")});async function _n(e){let r=new TextEncoder().encode(e),n=await crypto.subtle.digest("SHA-256",r);return Array.from(new Uint8Array(n)).map(c=>c.toString(16).padStart(2,"0")).join("")}function Ta(e){let t=e.req.param("schemaHash"),r=cr.get(t);return r==null?e.json({EngineNotStarted:{reason:"SchemaMissing"}},404):{schemaHash:t,schemas:r}}async function Ra(e,t,r){let n=yn.Buffer.from(e,"base64").toString("utf8"),i=(0,xa.produceSchema)(n,c=>{c.datasource('"postgresql"',t.toString())});r&&console.log("[Accelerate] schema with override:",i);let o=await _n(i);return{base64Override:yn.Buffer.from(i,"utf8").toString("base64"),overrideHash:o}}var yn,xa,cr,ka=xe(()=>{"use strict";X();yn=require("buffer"),xa=require("@mrleebo/prisma-ast"),cr=new Map});function ur(e){let{req:t}=e;return{traceparent:t.header("traceparent"),"X-capture-telemetry":t.header("X-capture-telemetry")}}var Ca=xe(()=>{"use strict";X()});async function Da(e){let{issues:t,output:r,success:n}=(0,fe.safeParse)(Ih,await e.req.json(),{abortEarly:!0});return n?r:e.json({EngineNotStarted:{reason:"InvalidRequest",issues:t}},400)}function ja(e,t){let{output:r,success:n}=(0,fe.safeParse)($h,e);return n?r:t.json({EngineMalfunction:{}},500)}var fe,Ih,$h,Ia=xe(()=>{"use strict";X();fe=require("valibot"),Ih=(0,fe.object)({isolation_level:(0,fe.optional)((0,fe.string)()),max_wait:(0,fe.pipe)((0,fe.number)(),(0,fe.integer)(),(0,fe.minValue)(0)),timeout:(0,fe.pipe)((0,fe.number)(),(0,fe.integer)(),(0,fe.minValue)(0))});$h=(0,fe.looseObject)({id:(0,fe.union)([(0,fe.string)(),(0,fe.number)()])})});var Na={};lr(Na,{accelerateRoute:()=>xt});async function bn(e){let{req:t}=e,r=Ta(e);if(r instanceof Response)return r;let{base64Override:n,overrideHash:i}=r.schemas;return await pt.get({base64Schema:n,clientVersion:process.env.PRISMA_DEV_FORCE_CLIENT_VERSION||t.param("clientVersion"),debug:e.get("debug"),platform:e.get("platform"),schemaHash:i})}var $a,La,Ze,xt,Lh,Tt,Nh,Mh,Ma=xe(()=>{"use strict";X();$a=require("hono/http-exception"),La=require("hono/tiny"),Ze=require("hono/validator");fr();Pa();vn();Oa();ka();Ca();Ia();xt=new La.Hono;xt.post("/invalidate",(0,Ze.validator)("header",ze),async e=>{let t=await Ea(e);return t instanceof Response?t:e.body(null)});Lh="/:clientVersion/:schemaHash",Tt=xt.basePath(Lh);xt.route("/",Tt);Nh=["/graphql","/itx/:transactionId/graphql"];Tt.on("POST",[...Nh],(0,Ze.validator)("header",ze),async e=>{let{req:t}=e;try{let r=await bn(e);if(r instanceof Response)return r;let n=await t.text(),i=t.param("transactionId"),o=await r.request(n,{...ur(e),"X-transaction-id":i});return e.text(o)}catch(r){return ar(r,e)}});Tt.basePath("/itx/:transactionId").on("POST",["/commit","/rollback"],(0,Ze.validator)("header",ze),async e=>{let{req:t}=e;try{let r=await bn(e);if(r instanceof Response)return r;let i=`${t.routePath.split("/").filter(Boolean).at(-1)}Transaction`,o=t.param("transactionId"),c=await r[i](o,ur(e));return e.json(c)}catch(r){return ar(r,e)}});Tt.put("/schema",(0,Ze.validator)("header",ze),async e=>{let{req:t}=e,r=await t.text();if(!r)return e.text("Missing schema",400);let n=t.param("schemaHash"),i=cr.get(n);if(i==null){if(n!==await _n(r))return e.text("Schema hash mismatch",400);let o=await Ra(r,e.get("db").prismaORMConnectionString,e.get("debug"));return cr.set(n,{base64Original:r,...o}),e.text(n)}return r!==i.base64Original?e.text("Schema mismatch",400):e.text(n)});Tt.post("/transaction/start",(0,Ze.validator)("header",ze),async e=>{let{req:t}=e,r=await Da(e);if(r instanceof Response)return r;try{let n=await bn(e);if(n instanceof Response)return n;let i=await n.startTransaction(r,ur(e)),o=ja(i,e);if(o instanceof Response)return o;let{id:c}=o,a=t.param("clientVersion"),s=e.get("port"),l=e.get("protocol"),d=t.param("schemaHash");return e.json({...i,"data-proxy":{endpoint:`${l}://localhost:${s}/${a}/${d}/itx/${c}`}})}catch(n){return ar(n,e)}});Mh=[["/connection-info","GET"],["/query","POST"],["/transaction/start","POST"],["/transaction/:transactionId/commit","POST"],["/transaction/:transactionId/query","POST"],["/transaction/:transactionId/rollback","POST"]];for(let[e,t]of Mh)xt.on(t,e,(0,Ze.validator)("header",ze),async r=>{let n=r.req.header("prisma-engine-hash");if(n!=="0.0.0"&&n!==or.version)throw new $a.HTTPException(400,{message:`Using an HTTP connection string is not supported with Prisma Client version ${n} by this version of \`prisma dev\`. Please either use a direct TCP connection string or upgrade your client to version ${or.version}.`});return await(await Aa(r)).fetch(r.req.raw)})});var Ba={};lr(Ba,{utilityRoute:()=>Sn});var Fa,qa,Sn,Hg,Ha=xe(()=>{"use strict";X();Fa=require("hono/tiny"),qa=require("http-status-codes"),Sn=new Fa.Hono;Sn.post("/database/dump",async e=>{let t=e.get("db"),r=e.get("serverState");return await t.dump(r.databaseDumpPath),e.json({dumpPath:r.databaseDumpPath},qa.StatusCodes.CREATED)});Hg=Sn.get("/health",e=>e.json({name:e.get("serverState").name}))});var Wh={};lr(Wh,{DEFAULT_DATABASE_PORT:()=>nt,DEFAULT_SERVER_PORT:()=>it,DEFAULT_SHADOW_DATABASE_PORT:()=>st,PortNotAvailableError:()=>Ce,ServerAlreadyRunningError:()=>kt,startPrismaDevServer:()=>Za,unstable_startServer:()=>Uh});module.exports=so(Wh);X();fr();X();var Kn=require("pathe/utils");It();X();var Be=require("get-port-please"),Lt=require("remeda"),nt=51214,it=51213,st=51215,$t=65535,qe=-1/0;async function Wn(e){let{debug:t,name:r,requestedPorts:n,servers:i}=e,{portsUsedByOtherServers:o,portsUsedByThisServerLastTime:c}=mo(r,i);t&&(console.debug(`ports used by other servers: ${Object.keys(o).join(", ")}`),console.debug(`ports used by "${r}" server last time: ${JSON.stringify(c)}`));let a={databasePort:qe,port:qe,shadowDatabasePort:qe},s=["port","databasePort","shadowDatabasePort"];for(let l of s){let d=await po({debug:t,portKey:l,portsUsedByOtherServers:o,portsUsedByThisServerLastTime:c,requestedPorts:n})??await ho({debug:t,pickedPorts:a,portKey:l,portsUsedByOtherServers:o,portsUsedByThisServerLastTime:c});t&&console.debug(`Got port for "${l}": ${d}`),a[l]=d}return t&&console.debug(`Picked ports: ${JSON.stringify(a)}`),a}async function po(e){let{debug:t,portKey:r,portsUsedByOtherServers:n,portsUsedByThisServerLastTime:i,requestedPorts:o}=e,{[r]:c,...a}=o;if(Un(c))return await vo({debug:t,otherRequestedPorts:a,portKey:r,portsUsedByOtherServers:n,requestedPort:c}),c;let s=i?.[r]??qe;if(!Un(s))return t&&console.debug(`No port specified for "${r}". Trying to pick a new port.`),null;let l=s in n;return l||Object.values(a).includes(s)?(t&&console.debug(`Port ${s} that was used last time for this server, ${l?"is also used by another server":"has been requested for another service"}. Trying to pick a new port.`),null):await(0,Be.checkPort)(s)===!1?(t&&console.debug(`Port ${s}, that was used last time for this server, is not available. Trying to pick a new port.`),null):(t&&console.debug(`Using port ${s} for "${r}" as it was used last time and is available.`),s)}async function ho(e){let{debug:t,pickedPorts:r,portKey:n,portsUsedByOtherServers:i,portsUsedByThisServerLastTime:o}=e,c=Math.max(nt,it,st)+1,a=[...Object.values(r),...Object.keys(i).map(Number),...Object.values(o||{})],s=Math.min(Math.max(c,...a)+100,$t),l=(0,Lt.difference)((0,Lt.range)(c,s),a),d={port:it,databasePort:nt,shadowDatabasePort:st}[n];try{return await(0,Be.getPort)({port:d in i||Object.values(r).includes(d)||Object.values(o||{}).includes(d)?void 0:d,ports:l})}catch(v){if(v instanceof Error&&v.name==="GetPortError"&&s+1<=$t)return t&&console.debug(`Expanding port lookup to range [${s+1}, ${$t}].`),await(0,Be.getPort)({portRange:[s+1,$t]});throw v}}function Un(e){return e>=0}function mo(e,t){let r={},n;for(let i of t){let{databasePort:o,port:c,shadowDatabasePort:a}=i;if(i.name===e){n={databasePort:o,port:c,shadowDatabasePort:a};continue}r[o]=!0,r[c]=!0,r[a]=!0}return{portsUsedByOtherServers:r,portsUsedByThisServerLastTime:n}}async function vo(e){let{debug:t,otherRequestedPorts:r,portKey:n,portsUsedByOtherServers:i,requestedPort:o}=e;if(o in i)throw t&&console.error(`Port ${o} was requested for "${n}", but is already used by another server.`),new gr(o);if(Object.values(r).includes(o))throw t&&console.error(`Port ${o} was requested for "${n}", but also for another key.`),new vr(o);if((0,Be.isUnsafePort)(o))throw t&&console.error(`Port ${o} was requested for "${n}", but is unsafe.`),new Ce(o);if(await(0,Be.checkPort)(o)===!1)throw t&&console.error(`Port ${o} was requested for "${n}", but is not available.`),new Ce(o)}var Ce=class extends Error{constructor(r){super(`Port \`${r}\` is not available.`);this.port=r}name="PortNotAvailableError"},vr=class extends Error{constructor(r){super(`Port number \`${r}\` was requested twice. Please choose a different port for each service.`);this.port=r}name="PortRequestedTwiceError"},gr=class extends Error{constructor(r){super(`Port number \`${r}\` belongs to another Prisma Dev server. Please choose a different port.`);this.port=r}name="PortBelongsToAnotherServerError"};var Se={connectionLimit:1,connectTimeout:0,database:"template1",maxIdleConnectionLifetime:0,password:"postgres",poolTimeout:0,socketTimeout:0,sslMode:"disable",username:"postgres"},go=`postgres://${Se.username}:${Se.password}@localhost`,Xn=new URLSearchParams({sslmode:Se.sslMode}),yo=new URLSearchParams({...Object.fromEntries(Xn.entries()),connection_limit:String(Se.connectionLimit),connect_timeout:String(Se.connectTimeout),max_idle_connection_lifetime:String(Se.maxIdleConnectionLifetime),pool_timeout:String(Se.poolTimeout),single_use_connections:"true",socket_timeout:String(Se.socketTimeout)});async function yr(e,t){let r=e==="database"?t.databasePort:t.shadowDatabasePort;if(t.dryRun)return Jn(e,t,{db:null,port:r,server:null});let{debug:n}=t,o=await(e==="shadow_database"?_o:Yn)(t.pgliteDataDirPath,n);n&&o.onNotification((s,l)=>{console.debug(`[${e}][${s}] ${l}`)});let{PGLiteSocketServer:c}=await import("@electric-sql/pglite-socket"),a=new c({db:o,debug:n,inspect:n,port:r});n&&(a.addEventListener("listening",s=>{let{detail:l}=s;console.debug(`[${e}] server listening on ${JSON.stringify(l)}`)}),a.addEventListener("connection",s=>{let{clientAddress:l,clientPort:d}=s.detail;console.debug(`[${e}] client connected from ${l}:${d}`)}),a.addEventListener("error",s=>{let{detail:l}=s;console.error(`[${e}] server error:`,l)}));try{await a.start()}catch(s){throw s instanceof Error&&"code"in s&&s.code==="EADDRINUSE"?new Ce(r):s}return Jn(e,t,{db:o,port:r,server:a})}function Jn(e,t,r){let{debug:n}=t,{db:i,port:o,server:c}=r||{};return n&&console.debug(`[${e}] server started on port ${o}`),{...Se,close:async()=>{let a=[];try{await c?.stop(),n&&console.debug(`[${e}] server stopped on port ${o}`)}catch(s){console.error(`[${e}] server stop error`,s),a.push(s)}if(e==="database")try{await i?.syncToFs(),n&&console.debug(`[${e}] synced to filesystem`)}catch(s){console.error(`[${e}] sync error`,s),a.push(s)}try{await i?.close(),n&&console.debug(`[${e}] closed`)}catch(s){console.error(`[${e}] close error`,s),a.push(s)}if(a.length>0)throw new AggregateError(a,`Failed to close ${e} properly`)},connectionString:Vn(o,Xn),dump:async a=>{e==="shadow_database"||!i||await bo({db:i,debug:n,destinationPath:a})},port:o,prismaORMConnectionString:Vn(o,yo),terminalCommand:`PGPASSWORD=${Se.password} PGSSLMODE=${Se.sslMode} psql -h localhost -p ${o} -U ${Se.username} -d ${Se.database}`}}function Vn(e,t){return`${go}:${e}/${Se.database}?${t.toString()}`}async function Yn(e,t){let{PGlite:r}=await import("@electric-sql/pglite");return await r.create({database:Se.database,dataDir:e,debug:t?5:void 0,relaxedDurability:!1,username:Se.username})}async function _o(e,t){let{PGlite:r}=await import("@electric-sql/pglite");return await r.create({database:Se.database,dataDir:"memory://",debug:t?5:void 0,relaxedDurability:!1,username:Se.username})}async function bo(e){let{dataDir:t,db:r,debug:n,destinationPath:i}=e,o=r||await Yn(t,n),{pgDump:c}=await import("@electric-sql/pglite-tools/pg_dump"),a=await c({args:["--schema-only","--no-owner"],fileName:i?(0,Kn.filename)(i):void 0,pg:await o.clone()});return i?(n&&console.debug(`[DB] Dumping database to ${i}`),await qn(a,i)):(n&&console.debug("[DB] Dumping database to memory"),await a.text())}X();var Ua=require("http"),Wa=require("util"),Ja=Pe(ma(),1);mn();vn();async function Va(e,t){let{port:r}=t;if(t.dryRun)return Ga(r,null);let n=await Fh(r,e,t),{promise:i,reject:o,resolve:c}=sr(),{serve:a}=await import("@hono/node-server"),s=a({createServer:Ua.createServer,fetch:n.fetch,overrideGlobalObjects:!1,port:r},c);return s.on("error",l=>{if(typeof l=="object"&&"code"in l&&l.code==="EADDRINUSE")return o(new Ce(r));console.error("[Accelerate]",l)}),await i,Ga(r,s)}function Ga(e,t){return{async close(){t&&await Promise.allSettled([(0,Wa.promisify)(t.close.bind(t))(),pt.stopAll()])},port:e,url:`http://localhost:${e}`}}async function Fh(e,t,r){let{debug:n}=r,[{Hono:i},{accelerateRoute:o},{utilityRoute:c}]=await Promise.all([import("hono/tiny"),Promise.resolve().then(()=>(Ma(),Na)),Promise.resolve().then(()=>(Ha(),Ba))]),a=new i,s=await Ja.default.getPlatformInfo();if(n&&console.debug("[Accelerate] platform info: %s",JSON.stringify(s)),n){let{logger:d}=await import("hono/logger");a.use("*",d((...v)=>console.log("[Accelerate]",...v)))}a.use("*",async(d,v)=>(d.set("db",t),d.set("debug",!!n),d.set("platform",s),d.set("port",e),d.set("protocol","http"),d.set("serverState",r),d.set("shadowDBPort",r.shadowDatabasePort),await v()));let l=new i;return l.route("/",o),l.route("/",c),a.route("/",l),a}X();var Qa=require("fs/promises"),et=require("pathe"),ht=require("proper-lockfile"),xn=require("std-env"),te=require("valibot");It();X();var qh=require("timers/promises"),Ka=require("std-env");function Xa(e,t){if(e==null)return!1;try{return Ka.process.kill?.(e,0)??!0}catch(r){return t&&console.error(`Error checking if process with PID ${e} exists:`,r),!1}}var Pn=(0,te.pipe)((0,te.string)(),(0,te.url)()),Ya=(0,te.object)({connectionString:Pn,prismaORMConnectionString:(0,te.optional)(Pn),terminalCommand:(0,te.optional)((0,te.string)())}),za=(0,te.object)({url:Pn}),wn=(0,te.pipe)((0,te.number)(),(0,te.integer)(),(0,te.minValue)(1)),Bh=(0,te.object)({database:Ya,http:za,ppg:za,shadowDatabase:Ya}),Hh=(0,te.object)({databasePort:wn,exports:(0,te.optional)(Bh),name:(0,te.pipe)((0,te.string)(),(0,te.minLength)(1)),pid:(0,te.optional)((0,te.pipe)((0,te.number)(),(0,te.integer)(),(0,te.minValue)(0))),port:wn,shadowDatabasePort:wn,version:(0,te.literal)("1")}),Tn=Symbol("initialize"),En="default",Ne=class{_databasePort;debug;dryRun;name;persistenceMode;pid;_port;_shadowDatabasePort;constructor(t){this._databasePort=t.databasePort??qe,this.debug=t.debug??!1,this.dryRun=t.dryRun??!1,this.name=t.name??En,this.persistenceMode=t.persistenceMode,this.pid=t.pid??xn.process.pid,this._port=t.port??qe,this._shadowDatabasePort=t.shadowDatabasePort??qe}static async createExclusively(t){let r=t?.dryRun!==!0&&t?.persistenceMode!=="stateless"?new Rt(t):new An(t);return await r[Tn](),r}static async fromServerDump(t){let{debug:r,name:n=En}=t??{},i=mt(n),o=Rt.getServerDumpPath(i),c=await Bn(o);if(c==null)return r&&console.debug(`[State] No server dump file found at: ${o}`),null;r&&(console.debug(`[State] server dump file found at "${o}":`),console.debug(c));let{issues:a,output:s,success:l}=(0,te.safeParse)((0,te.pipe)((0,te.string)(),(0,te.parseJson)(),Hh),c);if(!l)throw r&&console.debug(`[State] Invalid server dump file at "${o}":
33
33
  ${JSON.stringify(a,null,2)}`),new Error(`Invalid Prisma Dev state for "${n}".`);return new Rt({databasePort:s.databasePort,debug:r,dryRun:!1,name:n,pid:s.pid,port:s.port,serverDump:s,shadowDatabasePort:s.shadowDatabasePort})}static async scan(t){let{debug:r,globs:n}=t??{},i=(0,et.join)(mt(En),"..");r&&console.debug(`[State] scanning for server states in: ${i}`);let o=await Gn(i,n);return r&&console.debug(`[State] found server names: ${JSON.stringify(o)}`),await Promise.all(o.map(c=>Gh(c,t)))}get databasePort(){return this._databasePort}get port(){return this._port}get shadowDatabasePort(){return this._shadowDatabasePort}},An=class extends Ne{constructor(t){super({...t,databasePort:t?.databasePort??nt,persistenceMode:"stateless",port:t?.port??it,shadowDatabasePort:t?.shadowDatabasePort??st})}get databaseDumpPath(){return"<DUMP_PATH>"}get pgliteDataDirPath(){return"memory://"}async[Tn](){}async close(){}async writeServerDump(){}},Rt=class e extends Ne{#n;#e;#t;#s;#a;#i;#r;constructor(t){super({...t,persistenceMode:"stateful"}),this.#i=!1,this.#e=mt(this.name),this.#n=(0,et.join)(this.#e,"db_dump.bak"),this.#t=(0,et.join)(this.#e,".lock"),this.#s=(0,et.join)(this.#e,".pglite"),this.#r=t?.serverDump??null,this.#a=e.getServerDumpPath(this.#e)}static getServerDumpPath(t){return(0,et.join)(t,"server.json")}get databaseDumpPath(){return this.#n}get exports(){return this.#r?.exports}get pgliteDataDirPath(){return this.#s}async[Tn](){await Hn(this.#e),this.debug&&console.debug(`[State] using data directory: ${this.#e}`);try{await(0,ht.lock)(this.#e,{lockfilePath:this.#t}),this.debug&&console.debug(`[State] obtained lock on: ${this.#e}`);let t=await Ne.scan({debug:this.debug,onlyMetadata:!0}),r=await Wn({debug:this.debug,name:this.name,requestedPorts:{databasePort:this.databasePort,port:this.port,shadowDatabasePort:this.shadowDatabasePort},servers:t});this._databasePort=r.databasePort,this._port=r.port,this._shadowDatabasePort=r.shadowDatabasePort,await this.writeServerDump()}catch(t){throw t instanceof Error&&"code"in t&&t.code==="ELOCKED"?new kt(this):t}}async close(){if(!this.#i)try{await(0,ht.unlock)(this.#e,{lockfilePath:this.#t}),this.#i=!0,this.debug&&console.debug(`[State] released lock on: ${this.#e}`)}catch(t){throw this.debug&&console.error(`[State] failed to release lock on: ${this.#e}`,t),t}}async writeServerDump(t){this.#r={name:this.name,version:"1",pid:xn.process.pid,port:this.port,databasePort:this.databasePort,shadowDatabasePort:this.shadowDatabasePort,exports:t},await(0,Qa.writeFile)(this.#a,`${JSON.stringify(this.#r,null,2)}
34
34
  `,{encoding:"utf-8"})}};async function Gh(e,t){let{debug:r,onlyMetadata:n}=t||{},i=typeof e=="string"?e:e.name,o=typeof e!="string"?e:void 0,c={databasePort:o?.databasePort??-1,exports:o?.exports,name:i,pid:o?.pid,port:o?.port??-1,shadowDatabasePort:o?.shadowDatabasePort??-1,version:"1"};try{let a=o||await Ne.fromServerDump({debug:r,name:i});if(!a)return r&&console.debug(`[State] no server state found for name: ${i}`),{...c,status:"no_such_server"};c.databasePort=a.databasePort,c.exports=a.exports,c.pid=a.pid,c.port=a.port,c.shadowDatabasePort=a.shadowDatabasePort;let{exports:s,pid:l}=a;if(n)return{...c,status:"unknown"};if(!Xa(l,r))return r&&console.debug(`[State] server state for "${i}" has no running process with PID: ${l}`),{...c,status:"not_running"};let d=mt(i);try{if(!await(0,ht.check)(d,{lockfilePath:(0,et.join)(d,".lock")}))return r&&console.debug(`[State] server state for "${i}" is not locked, indicating it is not running.`),{...c,status:"starting_up"}}catch(E){r&&console.error(`[State] server state for "${i}" failed to check lock:`,E)}if(!s)return{...c,status:"starting_up"};let{http:v}=s,{hc:g}=await import("hono/client"),x=await g(v.url).health.$get();if(!x.ok)return r&&console.debug(`[State] server state for "${i}" is not live: ${JSON.stringify(x)}`),{...c,status:"not_running"};let _=await x.json();return _.name!==e?(r&&console.debug(`[State] server state for "${i}" has mismatched health response: ${JSON.stringify(_)}`),{...c,status:"unknown"}):(r&&console.debug(`[State] server state for "${e}" is live: ${JSON.stringify(_)}`),{...c,status:"running"})}catch(a){return r&&console.error(`[State] failed to get server status for "${i}":`,a),{...c,status:"error"}}}var On=class extends Error{name="ServerStateAlreadyExistsError";constructor(t){super(`A Prisma Dev server with the name "${t}" is already running.`)}},kt=class extends On{#n;name="ServerAlreadyRunningError";constructor(t){super(t.name),this.#n=t}get server(){return Ne.fromServerDump({debug:this.#n.debug,name:this.#n.name})}};async function Za(e){let t=await Ne.createExclusively(e),[r,n]=await Promise.all([yr("database",t),yr("shadow_database",t)]),i=await Va(r,t),o=`prisma+postgres://localhost:${i.port}/?${new URLSearchParams({api_key:Cn({databaseUrl:r.prismaORMConnectionString,name:t.name,shadowDatabaseUrl:n.prismaORMConnectionString})}).toString()}`,c={database:{connectionString:r.connectionString,prismaORMConnectionString:r.prismaORMConnectionString,terminalCommand:r.terminalCommand},http:{url:i.url},ppg:{url:o},shadowDatabase:{connectionString:n.prismaORMConnectionString,prismaORMConnectionString:n.prismaORMConnectionString,terminalCommand:n.terminalCommand}};return await t.writeServerDump(c),{...c,close:()=>a(t,[i,r,n]),name:t.name};async function a(s,l){let v=(await Promise.allSettled(l.map(g=>g.close()))).filter(g=>g.status==="rejected").map(g=>new Error(g.reason));try{await s.close()}catch(g){v.push(g)}if(v.length>0)throw new AggregateError(v,"Failed to close some servers")}}async function Uh(e){return await Za(e)}0&&(module.exports={DEFAULT_DATABASE_PORT,DEFAULT_SERVER_PORT,DEFAULT_SHADOW_DATABASE_PORT,PortNotAvailableError,ServerAlreadyRunningError,startPrismaDevServer,unstable_startServer});
35
35
  /*! Bundled license information:
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{a as f,b as g}from"./chunk-HQQF73SD.js";import"./chunk-KUHNXXCE.js";import{g as e}from"./chunk-GUJALUTC.js";import{a,b,c,f as d}from"./chunk-NLG6WPCX.js";import"./chunk-UZV6WD53.js";import"./chunk-ZPA6K2XO.js";import"./chunk-RODR7QVK.js";export{a as DEFAULT_DATABASE_PORT,b as DEFAULT_SERVER_PORT,c as DEFAULT_SHADOW_DATABASE_PORT,d as PortNotAvailableError,e as ServerAlreadyRunningError,f as startPrismaDevServer,g as unstable_startServer};
1
+ import{a as f,b as g}from"./chunk-ABDUHDM7.js";import"./chunk-KUHNXXCE.js";import{g as e}from"./chunk-GUJALUTC.js";import{a,b,c,f as d}from"./chunk-NLG6WPCX.js";import"./chunk-UZV6WD53.js";import"./chunk-ZPA6K2XO.js";import"./chunk-RODR7QVK.js";export{a as DEFAULT_DATABASE_PORT,b as DEFAULT_SERVER_PORT,c as DEFAULT_SHADOW_DATABASE_PORT,d as PortNotAvailableError,e as ServerAlreadyRunningError,f as startPrismaDevServer,g as unstable_startServer};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prisma/dev",
3
- "version": "0.0.0-dev.202512121230",
3
+ "version": "0.0.0-dev.202512121242",
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)",