Files
CreaBook/node_modules/@prisma/dev/dist/index.cjs
2026-04-05 03:08:53 +02:00

115 lines
54 KiB
JavaScript

"use strict";var Fr=Object.create;var re=Object.defineProperty;var qr=Object.getOwnPropertyDescriptor;var Vr=Object.getOwnPropertyNames;var zr=Object.getPrototypeOf,Kr=Object.prototype.hasOwnProperty;var T=(e,t)=>()=>(e&&(t=e(e=0)),t);var be=(e,t)=>{for(var r in t)re(e,r,{get:t[r],enumerable:!0})},lt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Vr(t))!Kr.call(e,o)&&o!==r&&re(e,o,{get:()=>t[o],enumerable:!(n=qr(t,o))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?Fr(zr(e)):{},lt(t||!e||!e.__esModule?re(r,"default",{value:e,enumerable:!0}):r,e)),Jr=e=>lt(re({},"__esModule",{value:!0}),e);var Qr,h,m=T(()=>{"use strict";Qr=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,h=Qr()});function dt(e){return Buffer.from(JSON.stringify(Object.fromEntries(Object.entries(e).sort(([[t],[r]])=>t.localeCompare(r)))),"utf8").toString("base64url")}function Xr(e){let t=Buffer.from(e,"base64url").toString("utf8"),{issues:r,output:n,success:o}=(0,P.safeParse)(Yr,t,{abortEarly:!0});return o?[null,n]:[r]}var P,ut,Yr,C,Se=T(()=>{"use strict";m();P=require("valibot"),ut=/^(postgres|postgresql):\/\//,Yr=(0,P.pipe)((0,P.string)(),(0,P.parseJson)(),(0,P.object)({databaseUrl:(0,P.pipe)((0,P.string)(),(0,P.url)(),(0,P.regex)(ut)),name:(0,P.optional)((0,P.pipe)((0,P.string)(),(0,P.minLength)(1))),shadowDatabaseUrl:(0,P.pipe)((0,P.string)(),(0,P.url)(),(0,P.regex)(ut))}));C=async(e,t)=>{let{authorization:r}=e,{HTTPException:n}=await import("hono/http-exception");if(!r)throw new n(401,{message:"Missing API Key"});let[o,s="",a]=r.split(" ");if(o!=="Bearer"||a)throw new n(401,{message:"Invalid API Key"});let[c,i]=Xr(s);if(c)throw new n(401,{message:"Invalid API Key",cause:c.join(", ")});let{databaseUrl:l,name:u,shadowDatabaseUrl:p}=i,g=t.get("name"),y=new URL(t.req.url).port;if(!u)throw new n(401,{message:`Wrong API Key; The Prisma Dev server running at port ${y} requires an API Key from a newer version of \`prisma dev\`. Check the "${g}" server's output for the updated \`DATABASE_URL\` value.`});if(u!==g)throw new n(401,{message:`Wrong API Key; The Prisma Dev server running at port ${y} is named "${g}", but the API Key is for "${u}"`});let{hostname:R,port:A}=new URL(l),{port:Wr}=t.get("db"),{hostname:Hr,port:Gr}=new URL(p),jr=t.get("shadowDBPort");if(R!=="localhost"||Number(A)!==Wr||Hr!=="localhost"||Number(Gr)!==jr)throw new n(401,{message:"Wrong API Key; Check your Prisma schema's `provider.url` value (probably defined in `.env`'s `DATABASE_URL` environment variable) is aligned with `prisma dev`'s output"});return{decodedAPIKey:i}}});function ve(e,{suffix:t="nodejs"}={}){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return t&&(e+=`-${t}`),ne.default.platform==="darwin"?Zr(e):ne.default.platform==="win32"?en(e):tn(e)}var b,we,ne,$,Ee,M,Zr,en,tn,mt=T(()=>{"use strict";m();b=w(require("path"),1),we=w(require("os"),1),ne=w(require("process"),1),$=we.default.homedir(),Ee=we.default.tmpdir(),{env:M}=ne.default,Zr=e=>{let t=b.default.join($,"Library");return{data:b.default.join(t,"Application Support",e),config:b.default.join(t,"Preferences",e),cache:b.default.join(t,"Caches",e),log:b.default.join(t,"Logs",e),temp:b.default.join(Ee,e)}},en=e=>{let t=M.APPDATA||b.default.join($,"AppData","Roaming"),r=M.LOCALAPPDATA||b.default.join($,"AppData","Local");return{data:b.default.join(r,e,"Data"),config:b.default.join(t,e,"Config"),cache:b.default.join(r,e,"Cache"),log:b.default.join(r,e,"Log"),temp:b.default.join(Ee,e)}},tn=e=>{let t=b.default.basename($);return{data:b.default.join(M.XDG_DATA_HOME||b.default.join($,".local","share"),e),config:b.default.join(M.XDG_CONFIG_HOME||b.default.join($,".config"),e),cache:b.default.join(M.XDG_CACHE_HOME||b.default.join($,".cache"),e),log:b.default.join(M.XDG_STATE_HOME||b.default.join($,".local","state"),e),temp:b.default.join(Ee,t,e)}}});function ht(e,t){return`${se.cache}/engine/${e}/${t}`}function V(e){return`${se.data}/${e}`}async function Pt(e){try{return await(0,E.access)(e,E.constants.F_OK),!0}catch(t){if(Re(t))return!1;throw t}}async function yt(e,t){let r=await rn(e);await(0,E.writeFile)(t,r),await(0,E.chmod)(t,"755")}async function bt(e,t){await e.stream().pipeTo(oe.WriteStream.toWeb((0,oe.createWriteStream)(t,{encoding:"utf8"})))}function Re(e){return e!=null&&typeof e=="object"&&"code"in e&&e.code==="ENOENT"}async function St(e){try{return await(0,E.readFile)(e,{encoding:"utf-8"})}catch(t){if(Re(t))return null;throw t}}async function wt(e){await(0,E.mkdir)(e,{recursive:!0})}async function Et(e,t){try{return(await(0,E.readdir)(e,{withFileTypes:!0})).reduce((n,o)=>(o.isDirectory()&&!o.name.startsWith(".")&&(!t||(0,ft.default)(t,o.name))&&n.push(o.name),n),[])}catch(r){if(Re(r))return[];throw r}}async function z(e){await(0,E.rm)(e,{force:!0,recursive:!0})}var oe,E,pt,gt,ft,se,rn,W=T(()=>{"use strict";m();oe=require("fs"),E=require("fs/promises"),pt=require("util"),gt=require("zlib");mt();ft=w(require("zeptomatch"),1),se=ve("prisma-dev"),rn=(0,pt.promisify)(gt.unzip)});function ge(e){let t,r,n=new Promise((a,c)=>{t=a,r=c}),o=a=>{o=s=null,r(a),e?.onRejected?.(a),e?.onFulfilled?.()},s=a=>{s=o=null,t(a),e?.onResolved?.(a),e?.onFulfilled?.()};return{isFulfilled:()=>s===o,promise:n,reject:a=>o?.(a),resolve:a=>s?.(a)}}var Ue=T(()=>{"use strict";m()});function fe(e,t){return console.error(e),e instanceof J?t.json({EngineNotStarted:{reason:{EngineStartupError:{logs:[],msg:e.message}}}},500):e instanceof j?t.text(e.responseBody,e.statusCode):t.body(null,500)}var Jt,Qt,Yt,Xt,Zt,er,Ln,$n,Kt,F,J,j,Me=T(()=>{"use strict";m();Jt=require("child_process"),Qt=require("events"),Yt=require("fs/promises"),Xt=require("path"),Zt=require("timers/promises");Ue();er=require("std-env");W();({PRISMA_DEV_FORCE_ENGINE_BINARY_DOWNLOAD:Ln,PRISMA_DEV_FORCE_ENGINE_BINARY_PATH:$n,PRISMA_DEV_FORCE_NETWORK_DELAY_MS:Kt}=er.process.env),F=class e{static#r=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 o=e.#r.get(n);if(o)return o;let s=new e(t);return e.#r.set(n,s),r&&console.debug("[Query Engine] starting...",t),await s.start(),r&&console.debug("[Query Engine] started!"),s}finally{e.stopAll(n)}}static async stopAll(t){let n=(await Promise.allSettled(Array.from(e.#r.entries()).filter(([o])=>o!==t).map(async([o,s])=>{try{await s.stop()}finally{e.#r.delete(o)}}))).filter(o=>o.status==="rejected").map(o=>o.reason);if(n.length>0)throw new AggregateError(n,"Failed to stop engines")}async commitTransaction(t,r){return await this.#i(t,r,"commit")}async request(t,r){let{url:n}=await this.start(),o=this.#n(r),s=await fetch(n,{body:typeof t=="string"?t:JSON.stringify(t),headers:{...o,"Content-Type":"application/json"},method:"POST"});if(!s.ok)throw await j.fromResponse(s);return await s.text()}async rollbackTransaction(t,r){return await this.#i(t,r,"rollback")}async startTransaction(t,r){let{url:n}=await this.start(),o=this.#n(r),s=await fetch(`${n}/transaction/start`,{body:JSON.stringify(t),headers:{...o,"Content-Type":"application/json"},method:"POST"});if(!s.ok)throw await j.fromResponse(s);return await s.json()}async start(){if(this.#t!=null)return await this.#t;let{promise:t,reject:r,resolve:n}=ge();this.#t=t;let o=$n||await this.#o();this.#e.debug&&console.debug("[Query Engine] spinning up at path...",o);let{proxySignals:s}=await import("foreground-child/proxy-signals"),a=(0,Jt.spawn)(o,["--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});s(a),a.stderr.setEncoding("utf8"),a.stdout.setEncoding("utf8");let c=u=>{let p=u.split(`
`).find(A=>A.includes("Started query engine http server"));if(!p)return;a.stdout.removeListener("data",c);let{fields:g}=JSON.parse(p);if(g==null)return r(new Error(`Unexpected data during initialization, "fields" are missing: ${u}`));let{ip:y,port:R}=g;if(y==null||R==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.
Received data: ${u}`));n({childProcess:a,url:`http://${y}:${R}`})},i=u=>{this.#t=null,r(new J(String(u))),a.removeListener("exit",l),a.kill()};a.once("error",i);let l=(u,p)=>{this.#t=null,r(new J(`Query Engine exited with code ${u} and signal ${p}`))};return a.once("exit",l),a.stdout.on("data",c),this.#e.debug&&(a.stderr.on("data",console.error.bind(console,"[Query Engine]")),a.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,Qt.once)(t,"exit"))}async#o(){this.#e.debug&&console.debug("[Query Engine] getting engine commit hash...");let t=await this.#s();this.#e.debug&&console.debug("[Query Engine] got engine commit hash",t);let r=ht(this.#e.clientVersion,t);this.#e.debug&&console.debug("[Query Engine] cache directory path",r),await(0,Yt.mkdir)(r,{recursive:!0});let{binaryTarget:n}=this.#e.platform,o=n==="windows"?".exe":"",s=(0,Xt.join)(r,`query-engine-${n}${o}`);return this.#e.debug&&console.debug("[Query Engine] binary path",s),(Ln==="1"||await Pt(s)===!1)&&await this.#a({commitHash:t,extension:o,engineBinaryPath:s}),s}async#s(){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 o=n.split(".").at(-1);if(!o)throw new Error("Couldn't find commit hash in engines version");return o}async#a(t){let{commitHash:r,extension:n,engineBinaryPath:o}=t,{binaryTarget:s}=this.#e.platform,a=`https://binaries.prisma.sh/all_commits/${r}/${s}/query-engine${n}.gz`;this.#e.debug&&console.debug("[Query Engine] downloading engine from url",a);let c=await fetch(a);if(!c.ok)throw new Error(`Couldn't download engine. URL: ${a}, status code: ${c.status}`);Kt&&await(0,Zt.setTimeout)(Number(Kt)),await yt(await c.arrayBuffer(),o),this.#e.debug&&console.debug("[Query Engine] downloaded and saved at",o)}#n(t){let r={};for(let[n,o]of Object.entries(t))o!=null&&(r[n]=o);return r}async#i(t,r,n){let{url:o}=await this.#t,s=this.#n(r),a=await fetch(`${o}/transaction/${t}/${n}`,{headers:{...s,"Content-Type":"application/json"},method:"POST"});if(!a.ok)throw await j.fromResponse(a);try{return await a.json()}catch{return{}}}};J=class extends Error{name="EngineStartError"},j=class e extends Error{constructor(r,n,o){super(`${r}: Query Engine response status ${n}, body: ${o}`);this.action=r;this.statusCode=n;this.responseBody=o}name="EngineHttpError";static async fromResponse(r){let n=new URL(r.url),o=await r.text();return new e(n.pathname,r.status,o)}}});async function tr(e){let{output:t,success:r}=(0,v.safeParse)(Nn,await e.req.json(),{abortEarly:!0});return r?t:e.text("Invalid input",400)}var v,Nn,rr=T(()=>{"use strict";m();v=require("valibot"),Nn=(0,v.object)({tags:(0,v.union)([(0,v.pipe)((0,v.array)((0,v.string)()),(0,v.minLength)(1)),(0,v.literal)("all")])})});async function nr(e){return We===void 0&&(We=await B.Server.create({databaseUrl:e.get("db").connectionString,maxResponseSize:(0,B.parseSize)("128 MiB"),queryTimeout:(0,B.parseDuration)("PT5M"),maxTransactionTimeout:(0,B.parseDuration)("PT5M"),maxTransactionWaitTime:(0,B.parseDuration)("PT5M"),perRequestLogContext:{logFormat:"text",logLevel:e.get("debug")?"debug":"off"}})),We}var B,he,We,or=T(()=>{"use strict";m();B=require("@prisma/query-plan-executor"),he=require("@prisma/query-plan-executor")});async function je(e){let r=new TextEncoder().encode(e),n=await crypto.subtle.digest("SHA-256",r);return Array.from(new Uint8Array(n)).map(a=>a.toString(16).padStart(2,"0")).join("")}function ar(e){let t=e.req.param("schemaHash"),r=Pe.get(t);return r==null?e.json({EngineNotStarted:{reason:"SchemaMissing"}},404):{schemaHash:t,schemas:r}}async function ir(e,t,r){let n=Ge.Buffer.from(e,"base64").toString("utf8"),o=Cn(n,t.toString());r&&console.log("[Accelerate] schema with override:",o);let s=await je(o);return{base64Override:Ge.Buffer.from(o,"utf8").toString("base64"),overrideHash:s}}function Cn(e,t){let r=kn(e);if(!r)throw new Error("No datasource block found in schema.");let n=e.slice(r.openBraceIndex+1,r.closeBraceIndex),o=Wn(n,t,jn(e,r.openBraceIndex));return`${e.slice(0,r.openBraceIndex+1)}${o}${e.slice(r.closeBraceIndex)}`}function kn(e){let t="datasource";for(let r=0;r<e.length;r+=1){let n=e[r];if(n==="/"&&e[r+1]==="/"){r=Fe(e,r+2);continue}if(n==="/"&&e[r+1]==="*"){r=qe(e,r+2);continue}if(n==='"'){r=Ve(e,r+1);continue}if(e.startsWith(t,r)&&!sr(e[r-1])&&!sr(e[r+t.length])){let o=Un(e,r+t.length,"{");if(o===-1)return null;let s=Mn(e,o);return s===-1?null:{closeBraceIndex:s,openBraceIndex:o}}}return null}function Un(e,t,r){for(let n=t;n<e.length;n+=1){let o=e[n];if(o==="/"&&e[n+1]==="/"){n=Fe(e,n+2);continue}if(o==="/"&&e[n+1]==="*"){n=qe(e,n+2);continue}if(o==='"'){n=Ve(e,n+1);continue}if(o===r)return n}return-1}function Mn(e,t){let r=0;for(let n=t;n<e.length;n+=1){let o=e[n];if(o==="/"&&e[n+1]==="/"){n=Fe(e,n+2);continue}if(o==="/"&&e[n+1]==="*"){n=qe(e,n+2);continue}if(o==='"'){n=Ve(e,n+1);continue}if(o==="{"){r+=1;continue}if(o==="}"&&(r-=1,r===0))return n}return-1}function Fe(e,t){let r=t;for(;r<e.length&&e[r]!==`
`;)r+=1;return r}function qe(e,t){let r=e.indexOf("*/",t);return r===-1?e.length:r+1}function Ve(e,t){let r=t;for(;r<e.length;){if(e[r]==="\\"){r+=2;continue}if(e[r]==='"')return r;r+=1}return e.length}function sr(e){return e!=null&&/[A-Za-z0-9_]/.test(e)}function Wn(e,t,r){let n=`"${qn(t)}"`,o=Hn(e);for(let[p,g]of o.entries()){let{comment:y,code:R}=cr(g.line),A=R.match(/^(\s*)url(\s*)=(\s*).*/);if(A)return o[p]={line:`${A[1]}url${A[2]}=${A[3]}${n}${y}`,terminator:g.terminator},He(o)}let s=Fn(e),a=Gn(o,r),c=`${a}url = ${n}`;if(!e.includes(`
`)&&!e.includes("\r")){let p=e.trim();return p.length===0?`${s}${c}${s}${r}`:`${s}${a}${p}${s}${c}${s}${r}`}let i=o.at(-1);if(i&&i.terminator===""&&/^\s*$/.test(i.line))return`${He(o.slice(0,-1))}${c}${s}${r}`;let l=He(o),u=l.endsWith(`
`)||l.endsWith("\r")?"":s;return`${l}${u}${c}${s}${r}`}function Hn(e){let t=[],r=0;for(let n=0;n<e.length;n+=1){if(e[n]==="\r"&&e[n+1]===`
`){t.push({line:e.slice(r,n),terminator:`\r
`}),n+=1,r=n+1;continue}(e[n]===`
`||e[n]==="\r")&&(t.push({line:e.slice(r,n),terminator:e[n]}),r=n+1)}return(r<e.length||e.length===0)&&t.push({line:e.slice(r),terminator:""}),t}function He(e){return e.map(t=>`${t.line}${t.terminator}`).join("")}function cr(e){let t=!1,r=!1;for(let n=0;n<e.length;n+=1){let o=e[n];if(r){if(t){t=!1;continue}if(o==="\\"){t=!0;continue}o==='"'&&(r=!1);continue}if(o==='"'){r=!0;continue}if(o==="/"&&e[n+1]==="/")return{code:e.slice(0,n),comment:e.slice(n)}}return{code:e,comment:""}}function Gn(e,t){for(let r of e){let{code:n}=cr(r.line),o=n.match(/^([ \t]+)[A-Za-z_][A-Za-z0-9_]*\s*=/);if(o?.[1])return o[1]}return`${t}${Bn}`}function jn(e,t){let r=e.lastIndexOf(`
`,t)+1,n=r;for(;e[n]===" "||e[n]===" ";)n+=1;return e.slice(r,n)}function Fn(e){return e.includes(`\r
`)?`\r
`:`
`}function qn(e){return e.replaceAll("\\","\\\\").replaceAll('"','\\"')}var Ge,Pe,Bn,lr=T(()=>{"use strict";m();Ge=require("buffer"),Pe=new Map;Bn=" "});function ye(e){let{req:t}=e;return{traceparent:t.header("traceparent"),"X-capture-telemetry":t.header("X-capture-telemetry")}}var ur=T(()=>{"use strict";m()});async function dr(e){let{issues:t,output:r,success:n}=(0,f.safeParse)(Vn,await e.req.json(),{abortEarly:!0});return n?r:e.json({EngineNotStarted:{reason:"InvalidRequest",issues:t}},400)}function mr(e,t){let{output:r,success:n}=(0,f.safeParse)(zn,e);return n?r:t.json({EngineMalfunction:{}},500)}var f,Vn,zn,pr=T(()=>{"use strict";m();f=require("valibot"),Vn=(0,f.object)({isolation_level:(0,f.optional)((0,f.string)()),max_wait:(0,f.pipe)((0,f.number)(),(0,f.integer)(),(0,f.minValue)(0)),timeout:(0,f.pipe)((0,f.number)(),(0,f.integer)(),(0,f.minValue)(0))});zn=(0,f.looseObject)({id:(0,f.union)([(0,f.string)(),(0,f.number)()])})});var hr={};be(hr,{accelerateRoute:()=>Q});async function ze(e){let{req:t}=e,r=ar(e);if(r instanceof Response)return r;let{base64Override:n,overrideHash:o}=r.schemas;return await F.get({base64Schema:n,clientVersion:process.env.PRISMA_DEV_FORCE_CLIENT_VERSION||t.param("clientVersion"),debug:e.get("debug"),platform:e.get("platform"),schemaHash:o})}var gr,fr,k,Q,Kn,Y,Jn,Qn,Pr=T(()=>{"use strict";m();gr=require("hono/http-exception"),fr=require("hono/tiny"),k=require("hono/validator");Se();rr();Me();or();lr();ur();pr();Q=new fr.Hono;Q.post("/invalidate",(0,k.validator)("header",C),async e=>{let t=await tr(e);return t instanceof Response?t:e.body(null)});Kn="/:clientVersion/:schemaHash",Y=Q.basePath(Kn);Q.route("/",Y);Jn=["/graphql","/itx/:transactionId/graphql"];Y.on("POST",[...Jn],(0,k.validator)("header",C),async e=>{let{req:t}=e;try{let r=await ze(e);if(r instanceof Response)return r;let n=await t.text(),o=t.param("transactionId"),s=await r.request(n,{...ye(e),"X-transaction-id":o});return e.text(s)}catch(r){return fe(r,e)}});Y.basePath("/itx/:transactionId").on("POST",["/commit","/rollback"],(0,k.validator)("header",C),async e=>{let{req:t}=e;try{let r=await ze(e);if(r instanceof Response)return r;let o=`${t.routePath.split("/").filter(Boolean).at(-1)}Transaction`,s=t.param("transactionId"),a=await r[o](s,ye(e));return e.json(a)}catch(r){return fe(r,e)}});Y.put("/schema",(0,k.validator)("header",C),async e=>{let{req:t}=e,r=await t.text();if(!r)return e.text("Missing schema",400);let n=t.param("schemaHash"),o=Pe.get(n);if(o==null){if(n!==await je(r))return e.text("Schema hash mismatch",400);let s=await ir(r,e.get("db").prismaORMConnectionString,e.get("debug"));return Pe.set(n,{base64Original:r,...s}),e.text(n)}return r!==o.base64Original?e.text("Schema mismatch",400):e.text(n)});Y.post("/transaction/start",(0,k.validator)("header",C),async e=>{let{req:t}=e,r=await dr(e);if(r instanceof Response)return r;try{let n=await ze(e);if(n instanceof Response)return n;let o=await n.startTransaction(r,ye(e)),s=mr(o,e);if(s instanceof Response)return s;let{id:a}=s,c=t.param("clientVersion"),i=t.param("schemaHash");return e.json({...o,"data-proxy":{endpoint:`${new URL(t.url).origin}/${c}/${i}/itx/${a}`}})}catch(n){return fe(n,e)}});Qn=[["/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 Qn)Q.on(t,e,(0,k.validator)("header",C),async r=>{let n=r.req.header("prisma-engine-hash");if(n!=="0.0.0"&&n!==he.version)throw new gr.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 ${he.version}.`});return await(await nr(r)).fetch(r.req.raw)})});var Sr={};be(Sr,{utilityRoute:()=>Ke});var yr,br,Ke,fs,wr=T(()=>{"use strict";m();yr=require("hono/tiny"),br=require("http-status-codes"),Ke=new yr.Hono;Ke.post("/database/dump",async e=>{let t=e.get("db"),r=e.get("databaseDumpPath");return await t.dump(r),e.json({dumpPath:r},br.StatusCodes.CREATED)});fs=Ke.get("/health",e=>e.json({name:e.get("name")}))});var wo={};be(wo,{DEFAULT_DATABASE_PORT:()=>ie,DEFAULT_SERVER_PORT:()=>ce,DEFAULT_SHADOW_DATABASE_PORT:()=>le,PortNotAvailableError:()=>D,ServerAlreadyRunningError:()=>te,copyPrismaDevRuntimeAssets:()=>Ot,getPrismaDevRuntimeAssetManifest:()=>_e,startPrismaDevServer:()=>Mr,unstable_startServer:()=>So});module.exports=Jr(wo);m();m();Se();m();var Ft=require("pathe/utils");W();m();var N=require("get-port-please"),ue=require("remeda"),ie=51214,ce=51213,le=51215,vt=51216,ae=65535,H=0,x=-1/0;async function De(e){let{debug:t,name:r,requestedPorts:n,servers:o}=e,{portsUsedByOtherServers:s,portsUsedByThisServerLastTime:a}=sn(r,o);t&&(console.debug(`ports used by other servers: ${Object.keys(s).join(", ")}`),console.debug(`ports used by "${r}" server last time: ${JSON.stringify(a)}`));let c={databasePort:x,port:x,shadowDatabasePort:x,streamsPort:x},i=["port","databasePort","shadowDatabasePort","streamsPort"];for(let l of i){let u=await nn({debug:t,portKey:l,portsUsedByOtherServers:s,portsUsedByThisServerLastTime:a,requestedPorts:n})??await on({debug:t,pickedPorts:c,portKey:l,portsUsedByOtherServers:s,portsUsedByThisServerLastTime:a});t&&console.debug(`Got port for "${l}": ${u}`),c[l]=u}return t&&console.debug(`Picked ports: ${JSON.stringify(c)}`),c}async function nn(e){let{debug:t,portKey:r,portsUsedByOtherServers:n,portsUsedByThisServerLastTime:o,requestedPorts:s}=e,{[r]:a,...c}=s;if(Te(a))return await ln({debug:t,otherRequestedPorts:c,portKey:r,portsUsedByOtherServers:n,requestedPort:a}),a;let i=o?.[r]??x;if(!Te(i))return t&&console.debug(`No port specified for "${r}". Trying to pick a new port.`),null;let l=i in n;return l||Object.values(c).includes(i)?(t&&console.debug(`Port ${i} 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,N.checkPort)(i)===!1?(t&&console.debug(`Port ${i}, that was used last time for this server, is not available. Trying to pick a new port.`),null):(t&&console.debug(`Using port ${i} for "${r}" as it was used last time and is available.`),i)}async function on(e){let{debug:t,pickedPorts:r,portKey:n,portsUsedByOtherServers:o,portsUsedByThisServerLastTime:s}=e,a=Math.max(ie,ce,le,vt)+1,c=Object.values(r).filter(y=>y!==void 0),i=s?cn(s):[],l=[...c,...Object.keys(o).map(Number),...i],u=Math.min(Math.max(a,...l)+100,ae),p=(0,ue.difference)((0,ue.range)(a,u),l),g={port:ce,databasePort:ie,shadowDatabasePort:le,streamsPort:vt}[n];try{return await(0,N.getPort)({port:g in o||c.includes(g)||i.includes(g)?void 0:g,ports:p})}catch(y){if(y instanceof Error&&y.name==="GetPortError"&&u+1<=ae)return t&&console.debug(`Expanding port lookup to range [${u+1}, ${ae}].`),await(0,N.getPort)({portRange:[u+1,ae]});throw y}}function Te(e){return Number.isFinite(e)&&e>=0}function sn(e,t){let r={},n;for(let o of t){let{databasePort:s,port:a,shadowDatabasePort:c}=o,i=an(o);if(o.name===e){n={databasePort:s,port:a,shadowDatabasePort:c,streamsPort:i};continue}r[s]=!0,r[a]=!0,r[c]=!0,Te(i)&&(r[i]=!0)}return{portsUsedByOtherServers:r,portsUsedByThisServerLastTime:n}}function an(e){let t=e.experimental?.streams?.serverUrl;if(!t)return x;try{let r=Number(new URL(t).port);return Number.isInteger(r)&&r>0?r:x}catch{return x}}function cn(e){return[e.port,e.databasePort,e.shadowDatabasePort,e.streamsPort]}async function ln(e){let{debug:t,otherRequestedPorts:r,portKey:n,portsUsedByOtherServers:o,requestedPort:s}=e;if(s!==H){if(s in o)throw t&&console.error(`Port ${s} was requested for "${n}", but is already used by another server.`),new Ae(s);if(Object.values(r).includes(s))throw t&&console.error(`Port ${s} was requested for "${n}", but also for another key.`),new xe(s);if((0,N.isUnsafePort)(s))throw t&&console.error(`Port ${s} was requested for "${n}", but is unsafe.`),new D(s);if(await(0,N.checkPort)(s)===!1)throw t&&console.error(`Port ${s} was requested for "${n}", but is not available.`),new D(s)}}var D=class extends Error{constructor(r){super(`Port \`${r}\` is not available.`);this.port=r}name="PortNotAvailableError"},xe=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"},Ae=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"};m();var G=require("fs"),L=require("fs/promises"),xt=require("module"),At=require("path"),_=require("url"),un=(0,xt.createRequire)(h),dn=["initdb.wasm","pglite.data","pglite.wasm"],Dt={amcheck:"amcheck.tar.gz",bloom:"bloom.tar.gz",btree_gin:"btree_gin.tar.gz",btree_gist:"btree_gist.tar.gz",citext:"citext.tar.gz",cube:"cube.tar.gz",dict_int:"dict_int.tar.gz",dict_xsyn:"dict_xsyn.tar.gz",earthdistance:"earthdistance.tar.gz",file_fdw:"file_fdw.tar.gz",fuzzystrmatch:"fuzzystrmatch.tar.gz",hstore:"hstore.tar.gz",intarray:"intarray.tar.gz",isn:"isn.tar.gz",lo:"lo.tar.gz",ltree:"ltree.tar.gz",pageinspect:"pageinspect.tar.gz",pg_buffercache:"pg_buffercache.tar.gz",pg_freespacemap:"pg_freespacemap.tar.gz",pg_surgery:"pg_surgery.tar.gz",pg_trgm:"pg_trgm.tar.gz",pg_visibility:"pg_visibility.tar.gz",pg_walinspect:"pg_walinspect.tar.gz",seg:"seg.tar.gz",tablefunc:"tablefunc.tar.gz",tcn:"tcn.tar.gz",tsm_system_rows:"tsm_system_rows.tar.gz",tsm_system_time:"tsm_system_time.tar.gz",unaccent:"unaccent.tar.gz",uuid_ossp:"uuid-ossp.tar.gz",vector:"vector.tar.gz"},_t=[...dn.map(e=>({fileName:e,kind:"core",name:e})),...Object.entries(Dt).map(([e,t])=>({fileName:t,kind:"extension",name:e}))],me=new Map,mn=Symbol.for("@prisma/dev/bundled-pglite-runtime-asset-sources"),de=null;async function Ot(e){let t=pe(e),r=(0,_.fileURLToPath)(t);await(0,L.mkdir)(r,{recursive:!0});let n=[];for(let o of _e()){let s=new URL(o.fileName,t),a=(0,_.fileURLToPath)(s);await(0,L.copyFile)(o.sourcePath,a),n.push({...o,destinationPath:a})}return n}function _e(){let e=It();return _t.map(t=>({...t,sourcePath:(0,_.fileURLToPath)(new URL(t.fileName,e))}))}async function Oe(){await bn();let e=Lt();if(e)return await hn(e),await pn(e);let t=Pn(),r=t.href,n=me.get(r);return n||(n=gn(t),me.set(r,n)),await n}async function pn(e){let t=`bundled:${e.wasmModule.href}:${e.fsBundle.href}`,r=me.get(t);return r||(r=fn(e),me.set(t,r)),await r}async function gn(e){let[t,r]=await Promise.all([(0,L.readFile)(new URL("pglite.data",e)),(0,L.readFile)(new URL("pglite.wasm",e))]),n=$t();return{extensions:Object.fromEntries(Object.entries(Dt).map(([o,s])=>[o,new URL(s,e)])),fsBundle:new Blob([Uint8Array.from(t)]),wasmModule:await n.compile(r)}}async function fn(e){let[t,r]=await Promise.all([Tt(e.fsBundle),Tt(e.wasmModule)]),n=$t();return{extensions:e.extensions,fsBundle:new Blob([Uint8Array.from(t)]),wasmModule:await n.compile(r)}}async function hn(e){if(e.initdbWasm.protocol!=="file:")return;let t=new URL("initdb.wasm",pe(new URL("./",e.initdbWasm))),r=(0,_.fileURLToPath)(t);(0,G.existsSync)(r)||await(0,L.copyFile)((0,_.fileURLToPath)(e.initdbWasm),r)}function pe(e){return e instanceof URL?Rt(e):Rt((0,_.pathToFileURL)(e))}function Rt(e){return e.href.endsWith("/")?e:new URL(`${e.href}/`)}function It(){let e=un.resolve("@electric-sql/pglite");return pe((0,At.dirname)(e))}function Pn(){let e=pe(new URL("./",h));if(yn(e))return e;if(Sn())return It();throw new Error("Unable to locate PGlite runtime assets. If you bundled @prisma/dev, copy them next to the bundle with copyPrismaDevRuntimeAssets().")}function yn(e){return _t.every(t=>(0,G.existsSync)((0,_.fileURLToPath)(new URL(t.fileName,e))))}function Lt(){return globalThis[mn]??null}async function bn(){!wn()||Lt()||(de||(de=import("./runtime-assets-manifest.bun.js").then(()=>{}).catch(e=>{throw de=null,e})),await de)}function Sn(){let e=(0,_.fileURLToPath)(new URL("../package.json",h));if(!(0,G.existsSync)(e))return!1;try{return JSON.parse((0,G.readFileSync)(e,"utf8")).name==="@prisma/dev"}catch{return!1}}function wn(){return typeof globalThis.Bun<"u"}function $t(){let e=globalThis.WebAssembly;if(!e)throw new Error("WebAssembly is not available in this runtime.");return e}async function Tt(e){if(e.protocol==="file:")return await(0,L.readFile)(e);let t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch runtime asset ${e.href}: ${t.status} ${t.statusText}`);return new Uint8Array(await t.arrayBuffer())}m();var $e=require("@electric-sql/pglite"),O="_prisma_dev_wal",Le="events",Ct="install_all_triggers",Nt="capture_event",Bt="prisma_dev_wal_capture",K=new WeakMap,En=new Set(["ALTER","COMMIT","COPY","CREATE","DELETE","DROP","INSERT","MERGE","TRUNCATE","UPDATE"]);async function Ne(e,t){let r=K.get(e);if(r&&!r.closed)return r.bridge;let n=e.execProtocolRaw.bind(e),o=e.execProtocolRawStream.bind(e),s={bridge:{close:async()=>{s.closed||(s.closed=!0,s.subscribers.clear(),e.execProtocolRaw===a&&(e.execProtocolRaw=n),e.execProtocolRawStream===c&&(e.execProtocolRawStream=o),await s.pollPromise,K.delete(e))},poll:async()=>{await Ie(s,e)},subscribe:i=>(s.subscribers.add(i),()=>{s.subscribers.delete(i)})},closed:!1,ensureInfrastructurePromise:null,pendingPoll:!1,pollPromise:null,subscribers:new Set,suppressDepth:0},a=async(i,l)=>{let u=await n(i,l);return!s.closed&&s.suppressDepth===0&&Ut(u)&&Ie(s,e),u},c=async(i,l)=>{let u=[],p=new $e.protocol.Parser,g=l?.onRawData;await o(i,{...l,onRawData:y=>{p.parse(y,R=>{u.push(R)}),g?.(y)}}),!s.closed&&s.suppressDepth===0&&Be(u)&&Ie(s,e)};return e.execProtocolRaw=a,e.execProtocolRawStream=c,K.set(e,s),await Mt(s,e),s.bridge}async function kt(e){let t=K.get(e);t&&await t.bridge.close()}function Be(e){for(let t of e){if(t.name!=="commandComplete"||typeof t.text!="string")continue;let r=t.text.split(/\s+/,1)[0]?.toUpperCase();if(r&&En.has(r))return!0}return!1}function Ut(e){if(e.length===0)return!1;let t=[];return new $e.protocol.Parser().parse(e,n=>{t.push(n)}),Be(t)}async function Mt(e,t){e.ensureInfrastructurePromise??=Ce(e,t,async()=>{await t.exec(`CREATE SCHEMA IF NOT EXISTS "${O}"`),await t.exec(`
CREATE TABLE IF NOT EXISTS "${O}"."${Le}" (
id BIGSERIAL PRIMARY KEY,
txid BIGINT NOT NULL DEFAULT txid_current(),
schema_name TEXT NOT NULL,
table_name TEXT NOT NULL,
op TEXT NOT NULL,
row_data JSONB,
old_row_data JSONB,
created_at TIMESTAMPTZ NOT NULL DEFAULT clock_timestamp()
)
`),await t.exec(`
CREATE OR REPLACE FUNCTION "${O}"."${Nt}"()
RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
IF TG_TABLE_SCHEMA = '${O}' THEN
RETURN COALESCE(NEW, OLD);
END IF;
INSERT INTO "${O}"."${Le}" (
txid,
schema_name,
table_name,
op,
row_data,
old_row_data
)
VALUES (
txid_current(),
TG_TABLE_SCHEMA,
TG_TABLE_NAME,
lower(TG_OP),
CASE WHEN TG_OP IN ('INSERT', 'UPDATE') THEN to_jsonb(NEW) ELSE NULL END,
CASE WHEN TG_OP IN ('UPDATE', 'DELETE') THEN to_jsonb(OLD) ELSE NULL END
);
RETURN COALESCE(NEW, OLD);
END;
$$;
`),await t.exec(`
CREATE OR REPLACE FUNCTION "${O}"."${Ct}"()
RETURNS void
LANGUAGE plpgsql
AS $$
DECLARE
target REGCLASS;
BEGIN
FOR target IN
SELECT c.oid::regclass
FROM pg_class AS c
JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r', 'p')
AND n.nspname NOT IN ('${O}', 'information_schema', 'pg_catalog')
AND n.nspname NOT LIKE 'pg_temp_%'
AND n.nspname NOT LIKE 'pg_toast%'
LOOP
IF EXISTS (
SELECT 1
FROM pg_trigger
WHERE tgrelid = target
AND tgname = '${Bt}'
) THEN
CONTINUE;
END IF;
EXECUTE format(
'CREATE TRIGGER %I AFTER INSERT OR UPDATE OR DELETE ON %s FOR EACH ROW EXECUTE FUNCTION "${O}"."${Nt}"()',
'${Bt}',
target::text
);
END LOOP;
END;
$$;
`),await Wt(e,t)}),await e.ensureInfrastructurePromise}async function Wt(e,t){await Ce(e,t,async()=>{await t.query(`SELECT "${O}"."${Ct}"()`)})}async function vn(e,t){await Mt(e,t),await Wt(e,t);let r=await Ce(e,t,async()=>await t.query(`
WITH drained AS (
DELETE FROM "${O}"."${Le}"
RETURNING txid, schema_name, table_name, op, row_data, old_row_data, id
)
SELECT txid, schema_name, table_name, op, row_data, old_row_data
FROM drained
ORDER BY id
`));if(r.rows.length===0||e.subscribers.size===0)return;let n=r.rows.map(Rn);for(let o of e.subscribers)queueMicrotask(()=>{if(!e.closed&&e.subscribers.has(o))try{o(n)}catch(s){console.error("[WAL bridge] subscriber failed",s)}})}async function Ie(e,t){if(!e.closed){if(e.pollPromise){e.pendingPoll=!0,await e.pollPromise;return}e.pollPromise=(async()=>{do e.pendingPoll=!1,await vn(e,t);while(e.pendingPoll&&!e.closed)})().finally(()=>{e.pollPromise=null}),await e.pollPromise}}async function Ce(e,t,r){e.suppressDepth+=1;try{return await r()}finally{e.suppressDepth-=1,e.suppressDepth===0&&!e.closed&&K.get(t)!==e&&(e.closed=!0)}}function Rn(e){return{oldRecord:e.old_row_data,record:e.row_data,schema:e.schema_name,table:e.table_name,txid:String(e.txid),type:Tn(e.op)}}function Tn(e){switch(e.toLowerCase()){case"delete":return"delete";case"insert":return"insert";case"update":return"update";default:throw new Error(`Unsupported WAL bridge operation: ${e}`)}}var xn=10,S={connectionLimit:xn,connectTimeout:0,database:"template1",maxIdleConnectionLifetime:0,password:"postgres",poolTimeout:0,socketTimeout:0,sslMode:"disable",username:"postgres"},An=`postgres://${S.username}:${S.password}@localhost`,qt=new URLSearchParams({sslmode:S.sslMode}),Dn=new URLSearchParams({...Object.fromEntries(qt.entries()),connection_limit:String(S.connectionLimit),connect_timeout:String(S.connectTimeout),max_idle_connection_lifetime:String(S.maxIdleConnectionLifetime),pool_timeout:String(S.poolTimeout),socket_timeout:String(S.socketTimeout)});async function Vt(e){let{rows:t}=await e.query("SELECT EXISTS(SELECT 1 FROM pg_roles WHERE rolname = 'postgres') AS exists");t[0]?.exists?await e.exec(`ALTER ROLE ${S.username} WITH LOGIN SUPERUSER PASSWORD '${S.password}'`):await e.exec(`CREATE ROLE ${S.username} WITH LOGIN SUPERUSER PASSWORD '${S.password}'`),await e.exec(`SET ROLE ${S.username}`)}async function ke(e,t){let r=e==="database"?t.databasePort:t.shadowDatabasePort;if(t.dryRun)return Ht(e,t,{db:null,port:r,server:null});let{debug:n}=t,s=await(e==="shadow_database"?_n:zt)(t.pgliteDataDirPath,n);n&&s.onNotification((u,p)=>{console.debug(`[${e}][${u}] ${p}`)});let{PGLiteSocketServer:a}=await import("@electric-sql/pglite-socket"),c=e==="shadow_database"?t.shadowDatabaseIdleTimeoutMillis:t.databaseIdleTimeoutMillis,i=new a({db:s,debug:n,idleTimeout:Number.isFinite(c)?c:0,inspect:n,maxConnections:S.connectionLimit,port:r});n&&(i.addEventListener("listening",u=>{let{detail:p}=u;console.debug(`[${e}] server listening on ${JSON.stringify(p)}`)}),i.addEventListener("connection",u=>{let{clientAddress:p,clientPort:g}=u.detail;console.debug(`[${e}] client connected from ${p}:${g}`)}),i.addEventListener("error",u=>{let{detail:p}=u;console.error(`[${e}] server error:`,p)}));try{await i.start()}catch(u){throw u instanceof Error&&"code"in u&&u.code==="EADDRINUSE"?new D(r):u}let l=Number(i.getServerConn().split(":").at(1));return t[e==="database"?"databasePort":"shadowDatabasePort"]=l,Ht(e,t,{db:s,port:l,server:i})}function Ht(e,t,r){let{debug:n}=t,{db:o,port:s,server:a}=r||{},c=new Map;return n&&console.debug(`[${e}] server started on port ${s}`),{...S,attachWalEventBridge:async()=>{if(e!=="database"||!o)throw new Error("WAL bridge is only available for the primary database server");return await Ne(o)},close:async()=>{let i=[];try{await a?.stop(),n&&console.debug(`[${e}] server stopped on port ${s}`)}catch(l){console.error(`[${e}] server stop error`,l),i.push(l)}if(e==="database"){try{o&&await kt(o),n&&console.debug(`[${e}] closed WAL bridge`)}catch(l){console.error(`[${e}] WAL bridge close error`,l),i.push(l)}try{await o?.syncToFs(),n&&console.debug(`[${e}] synced to filesystem`)}catch(l){console.error(`[${e}] sync error`,l),i.push(l)}}try{await o?.close(),n&&console.debug(`[${e}] closed`)}catch(l){console.error(`[${e}] close error`,l),i.push(l)}if(i.length>0)throw new AggregateError(i,`Failed to close ${e} properly`)},connectionString:Gt(s,qt),dump:async i=>{e==="shadow_database"||!o||await In({db:o,debug:n,destinationPath:i})},getPrimaryKeyColumns:async(i,l)=>{if(e==="shadow_database"||!o)throw new Error("Primary key resolution is only available for the primary database server");let u=`${i}.${l}`,p=c.get(u);return p||(p=On(o,i,l).catch(g=>{throw c.delete(u),g}),c.set(u,p)),await p},port:s,prismaORMConnectionString:Gt(s,Dn),terminalCommand:`PGPASSWORD=${S.password} PGSSLMODE=${S.sslMode} psql -h localhost -p ${s} -U ${S.username} -d ${S.database}`}}function Gt(e,t){return`${An}:${e}/${S.database}?${t.toString()}`}async function zt(e,t){let{PGlite:r}=await import("@electric-sql/pglite"),n=await Oe(),o=await r.create({database:S.database,dataDir:e,debug:t?5:void 0,extensions:n.extensions,fsBundle:n.fsBundle,relaxedDurability:!1,wasmModule:n.wasmModule});return await Vt(o),o}async function _n(e,t){let{PGlite:r}=await import("@electric-sql/pglite"),n=await Oe(),o=await r.create({database:S.database,dataDir:"memory://",debug:t?5:void 0,extensions:n.extensions,fsBundle:n.fsBundle,relaxedDurability:!1,wasmModule:n.wasmModule});return await Vt(o),o}async function On(e,t,r){let{rows:n}=await e.query(`
SELECT attribute.attname AS column_name
FROM pg_constraint pk_constraint
INNER JOIN pg_class relation
ON relation.oid = pk_constraint.conrelid
INNER JOIN pg_namespace namespace
ON namespace.oid = relation.relnamespace
INNER JOIN unnest(pk_constraint.conkey) WITH ORDINALITY AS keys(attnum, ordinality)
ON TRUE
INNER JOIN pg_attribute attribute
ON attribute.attrelid = relation.oid
AND attribute.attnum = keys.attnum
WHERE pk_constraint.contype = 'p'
AND namespace.nspname = ${jt(t)}
AND relation.relname = ${jt(r)}
ORDER BY keys.ordinality
`);return n.map(o=>o.column_name)}function jt(e){return`'${e.replaceAll("'","''")}'`}async function In(e){let{dataDir:t,db:r,debug:n,destinationPath:o}=e,s=r||await zt(t,n),{pgDump:a}=await import("@electric-sql/pglite-tools/pg_dump"),c=await a({args:["--schema-only","--no-owner"],fileName:o?(0,Ft.filename)(o):void 0,pg:await s.clone()});return o?(n&&console.debug(`[DB] Dumping database to ${o}`),await bt(c,o)):(n&&console.debug("[DB] Dumping database to memory"),await c.text())}m();var vr=require("http"),Rr=require("util"),Tr=w(require("@prisma/get-platform"),1);Ue();Me();async function xr(e,t){let{port:r}=t;if(t.dryRun)return Er(r,null);let n=await Yn(e,t),{promise:o,reject:s,resolve:a}=ge(),{serve:c}=await import("@hono/node-server"),i=c({createServer:vr.createServer,fetch:n.fetch,overrideGlobalObjects:!1,port:r},a);i.on("error",u=>{if(typeof u=="object"&&"code"in u&&u.code==="EADDRINUSE")return s(new D(r));console.error("[Accelerate]",u)});let{port:l}=await o;return t.port=l,Er(l,i)}function Er(e,t){return{async close(){t&&await Promise.allSettled([(0,Rr.promisify)(t.close.bind(t))(),F.stopAll()])},port:e,url:`http://localhost:${e}`}}async function Yn(e,t){let{debug:r}=t,[{Hono:n},{accelerateRoute:o},{utilityRoute:s}]=await Promise.all([import("hono/tiny"),Promise.resolve().then(()=>(Pr(),hr)),Promise.resolve().then(()=>(wr(),Sr))]),a=new n,c=await Tr.default.getPlatformInfo();if(r&&console.debug("[Accelerate] platform info: %s",JSON.stringify(c)),r){let{logger:l}=await import("hono/logger");a.use("*",l((...u)=>console.log("[Accelerate]",...u)))}a.use("*",async(l,u)=>(l.set("databaseDumpPath",t.databaseDumpPath),l.set("db",e),l.set("debug",!!r),l.set("name",t.name),l.set("platform",c),l.set("shadowDBPort",t.shadowDatabasePort),await u()));let i=new n;return i.route("/",o),i.route("/",s),a.route("/",i),a}m();var Lr=require("fs/promises"),U=require("pathe"),q=require("proper-lockfile"),rt=require("std-env"),d=require("valibot");W();m();var Xn=require("timers/promises"),Ar=require("std-env");function Dr(e,t){if(e==null)return!1;try{return Ar.process.kill?.(e,0)??!0}catch(r){return t&&console.error(`Error checking if process with PID ${e} exists:`,r),!1}}m();var Je=require("pathe");W();var Qe="prisma-wal";function Ye(){return(0,Je.join)(se.data,"durable-streams")}function X(e){return(0,Je.join)(Ye(),e)}function _r(e,t=Qe){return new URL(`/v1/stream/${encodeURIComponent(t)}`,e).toString()}var ee=(0,d.pipe)((0,d.string)(),(0,d.url)()),Or=(0,d.object)({connectionString:ee,prismaORMConnectionString:(0,d.optional)(ee),terminalCommand:(0,d.optional)((0,d.string)())}),Ir=(0,d.object)({url:ee}),Zn=(0,d.object)({serverUrl:ee,sqlitePath:(0,d.pipe)((0,d.string)(),(0,d.minLength)(1)),streamName:(0,d.pipe)((0,d.string)(),(0,d.minLength)(1)),url:ee}),eo=(0,d.object)({streams:(0,d.optional)(Zn)}),Xe=(0,d.pipe)((0,d.number)(),(0,d.integer)(),(0,d.minValue)(1)),to=(0,d.object)({database:Or,http:Ir,ppg:Ir,shadowDatabase:Or}),ro=(0,d.object)({databasePort:Xe,experimental:(0,d.optional)(eo),exports:(0,d.optional)(to),name:(0,d.pipe)((0,d.string)(),(0,d.minLength)(1)),pid:(0,d.optional)((0,d.pipe)((0,d.number)(),(0,d.integer)(),(0,d.minValue)(0))),port:Xe,shadowDatabasePort:Xe,version:(0,d.literal)("1")}),nt=Symbol("initialize"),Ze="default",no=new Set(["durable-streams"]),I=class{_databasePort;databaseConnectTimeoutMillis;databaseIdleTimeoutMillis;debug;dryRun;name;persistenceMode;pid;shadowDatabaseConnectTimeoutMillis;shadowDatabaseIdleTimeoutMillis;_port;_shadowDatabasePort;_streamsPort;constructor(t){this._databasePort=t.databasePort??x,this.databaseConnectTimeoutMillis=t.databaseConnectTimeoutMillis??6e4,this.databaseIdleTimeoutMillis=t.databaseIdleTimeoutMillis??1/0,this.debug=t.debug??!1,this.dryRun=t.dryRun??!1,this.name=t.name??Ze,this.persistenceMode=t.persistenceMode,this.pid=t.pid??rt.process.pid,this.shadowDatabaseConnectTimeoutMillis=t.shadowDatabaseConnectTimeoutMillis??this.databaseConnectTimeoutMillis,this.shadowDatabaseIdleTimeoutMillis=t.shadowDatabaseIdleTimeoutMillis??this.databaseIdleTimeoutMillis,this._port=t.port??x,this._shadowDatabasePort=t.shadowDatabasePort??x,this._streamsPort=x}static async createExclusively(t){let r=t?.dryRun!==!0&&t?.persistenceMode==="stateful"?new Z(t):new et(t);return await r[nt](),r}static async fromServerDump(t){let{debug:r,name:n=Ze}=t??{},o=V(n),s=Z.getServerDumpPath(o),a=await St(s);if(a==null)return r&&console.debug(`[State] No server dump file found at: ${s}`),null;r&&(console.debug(`[State] server dump file found at "${s}":`),console.debug(a));let{issues:c,output:i,success:l}=(0,d.safeParse)((0,d.pipe)((0,d.string)(),(0,d.parseJson)(),ro),a);if(!l)throw r&&console.debug(`[State] Invalid server dump file at "${s}":
${JSON.stringify(c,null,2)}`),new Error(`Invalid Prisma Dev state for "${n}".`);return new Z({databasePort:i.databasePort,debug:r,dryRun:!1,name:n,pid:i.pid,port:i.port,serverDump:i,shadowDatabasePort:i.shadowDatabasePort})}static async scan(t){let{debug:r,globs:n}=t??{},o=(0,U.join)(V(Ze),"..");r&&console.debug(`[State] scanning for server states in: ${o}`);let s=(await Et(o,n)).filter(a=>!no.has(a));return r&&console.debug(`[State] found server names: ${JSON.stringify(s)}`),await Promise.all(s.map(a=>oo(a,t)))}get databasePort(){return this._databasePort}set databasePort(t){this.#r("databasePort",t)}get port(){return this._port}set port(t){this.#r("port",t)}get shadowDatabasePort(){return this._shadowDatabasePort}get streamsPort(){return this._streamsPort}set shadowDatabasePort(t){this.#r("shadowDatabasePort",t)}#r(t,r){if(r<0||!Number.isInteger(r))throw new Error(`Invalid port number: ${r}`);let n=`_${t}`;if(this[n]!==H&&this[n]!==r)throw new Error(`\`${t}\` is already set to ${this[n]}, cannot change it to ${r}`);this[n]=r}},et=class extends I{constructor(t){super({...t,databasePort:t?.databasePort||H,persistenceMode:"stateless",port:t?.port||H,shadowDatabasePort:t?.shadowDatabasePort||H})}get databaseDumpPath(){return"<DUMP_PATH>"}get pgliteDataDirPath(){return"memory://"}async[nt](){let t;try{t=await I.scan({debug:this.debug,onlyMetadata:!0})}catch(n){this.debug&&console.warn("[State] failed to scan for existing servers, assuming filesystem does not exist or other reasons.",n),t=[]}let r=await De({debug:this.debug,name:this.dryRun?this.name:"",requestedPorts:{databasePort:this.databasePort,port:this.port,shadowDatabasePort:this.shadowDatabasePort,streamsPort:this.streamsPort},servers:t});this._databasePort=r.databasePort,this._port=r.port,this._shadowDatabasePort=r.shadowDatabasePort,this._streamsPort=r.streamsPort}async close(){}async writeServerDump(){}},Z=class e extends I{#r;#e;#t;#o;#s;#a;#n;constructor(t){super({...t,persistenceMode:"stateful"}),this.#a=!1,this.#e=V(this.name),this.#r=(0,U.join)(this.#e,"db_dump.bak"),this.#t=(0,U.join)(this.#e,".lock"),this.#o=(0,U.join)(this.#e,".pglite"),this.#n=t?.serverDump??null,this.#s=e.getServerDumpPath(this.#e)}static getServerDumpPath(t){return(0,U.join)(t,"server.json")}get databaseDumpPath(){return this.#r}get exports(){return this.#n?.exports}get experimental(){return this.#n?.experimental}get pgliteDataDirPath(){return this.#o}async[nt](){await wt(this.#e),this.debug&&console.debug(`[State] using data directory: ${this.#e}`);try{await(0,q.lock)(this.#e,{lockfilePath:this.#t}),this.debug&&console.debug(`[State] obtained lock on: ${this.#e}`);let t=await I.scan({debug:this.debug,onlyMetadata:!0}),r=await De({debug:this.debug,name:this.name,requestedPorts:{databasePort:this.databasePort,port:this.port,shadowDatabasePort:this.shadowDatabasePort,streamsPort:this.streamsPort},servers:t});this._databasePort=r.databasePort,this._port=r.port,this._shadowDatabasePort=r.shadowDatabasePort,this._streamsPort=r.streamsPort,await this.writeServerDump()}catch(t){throw t instanceof Error&&"code"in t&&t.code==="ELOCKED"?new te(this):t}}async close(){if(!this.#a)try{await(0,q.unlock)(this.#e,{lockfilePath:this.#t}),this.#a=!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,r){this.#n={name:this.name,version:"1",pid:rt.process.pid,port:this.port,databasePort:this.databasePort,experimental:r,shadowDatabasePort:this.shadowDatabasePort,exports:t},await(0,Lr.writeFile)(this.#s,`${JSON.stringify(this.#n,null,2)}
`,{encoding:"utf-8"})}};async function oo(e,t){let{debug:r,onlyMetadata:n}=t||{},o=typeof e=="string"?e:e.name,s=typeof e!="string"?e:void 0,a={databasePort:s?.databasePort??-1,experimental:s?.experimental,exports:s?.exports,name:o,pid:s?.pid,port:s?.port??-1,shadowDatabasePort:s?.shadowDatabasePort??-1,version:"1"};try{let c=s||await I.fromServerDump({debug:r,name:o});if(!c)return r&&console.debug(`[State] no server state found for name: ${o}`),{...a,status:"no_such_server"};a.databasePort=c.databasePort,a.experimental=c.experimental,a.exports=c.exports,a.pid=c.pid,a.port=c.port,a.shadowDatabasePort=c.shadowDatabasePort;let{exports:i,pid:l}=c;if(n)return{...a,status:"unknown"};if(!Dr(l,r))return r&&console.debug(`[State] server state for "${o}" has no running process with PID: ${l}`),{...a,status:"not_running"};let u=V(o);try{if(!await(0,q.check)(u,{lockfilePath:(0,U.join)(u,".lock")}))return r&&console.debug(`[State] server state for "${o}" is not locked, indicating it is not running.`),{...a,status:"not_running"}}catch(A){r&&console.error(`[State] server state for "${o}" failed to check lock:`,A)}if(!i)return{...a,status:"starting_up"};let{http:p}=i,{hc:g}=await import("hono/client"),y=await g(p.url).health.$get();if(!y.ok)return r&&console.debug(`[State] server state for "${o}" is not live: ${JSON.stringify(y)}`),{...a,status:"not_running"};let R=await y.json();return R.name!==e?(r&&console.debug(`[State] server state for "${o}" has mismatched health response: ${JSON.stringify(R)}`),{...a,status:"unknown"}):(r&&console.debug(`[State] server state for "${e}" is live: ${JSON.stringify(R)}`),{...a,status:"running"})}catch(c){return r&&console.error(`[State] failed to get server status for "${o}":`,c),{...a,status:"error"}}}var tt=class extends Error{name="ServerStateAlreadyExistsError";constructor(t){super(`A Prisma Dev server with the name "${t}" is already running.`)}},te=class extends tt{#r;name="ServerAlreadyRunningError";constructor(t){super(t.name),this.#r=t}get server(){return I.fromServerDump({debug:this.#r.debug,name:this.#r.name})}};m();var Nr=require("crypto"),ot=require("timers/promises"),Br=require("std-env");W();var so="application/json",st={connection:"close","content-type":so},ao={interpreter:{apiVersion:"durable.streams/stream-interpreter/v1",format:"durable.streams/state-protocol/v1",touch:{enabled:!0,onMissingBefore:"coarse"}}};async function Cr(e){let{dbServer:t,debug:r,name:n,persistenceMode:o,port:s,walBridge:a}=e,c=o==="stateless",i=c?po(n):n;Br.process.env.DS_LOCAL_DATA_ROOT=Ye(),c&&await z(X(i));let{startLocalDurableStreamsServer:l}=await import("@prisma/streams-local"),u=await l({hostname:"127.0.0.1",name:i,port:s}),p={serverUrl:u.exports.http.url,sqlitePath:u.exports.sqlite.path,streamName:Qe,url:_r(u.exports.http.url)};try{await io(p);let g=new at({dbServer:t,debug:r,streamUrl:p.url}),y=a.subscribe(R=>{g.enqueue(R)});return{close:async()=>{y(),await g.close(),await u.close(),await(0,ot.setTimeout)(100),c&&await z(X(i))},experimental:p}}catch(g){throw await u.close().catch(()=>{}),await(0,ot.setTimeout)(100),c&&await z(X(i)).catch(()=>{}),g}}var at=class{#r;#e;#t;#o;#s;constructor(t){this.#r=t.dbServer,this.#e=t.debug,this.#t=Promise.resolve(),this.#o=t.streamUrl,this.#s=new Set}enqueue(t){t.length!==0&&(this.#t=this.#t.then(async()=>{let r=await this.#a(t);r.length!==0&&(await co(this.#o,r),this.#e&&console.debug(`[streams] appended ${r.length} state-protocol record(s) to ${this.#o}`))}).catch(r=>{console.error("[streams] failed to ingest WAL events into prisma-wal",r)}))}async close(){await this.#t}async#a(t){let r=[],n=new Date().toISOString();for(let o of t)r.push(...await this.#n(o,n));return r}async#n(t,r){let n=`${t.schema}.${t.table}`,o=await this.#r.getPrimaryKeyColumns(t.schema,t.table),s=$r(t.record),a=$r(t.oldRecord),c=this.#i(n,o,a),i=this.#i(n,o,s),l=t.txid===""?void 0:t.txid;return t.type==="insert"?s&&i?[{headers:{operation:"insert",timestamp:r,txid:l},key:i,oldValue:null,type:n,value:s}]:[]:t.type==="delete"?a&&c?[{headers:{operation:"delete",timestamp:r,txid:l},key:c,oldValue:a,type:n,value:null}]:[]:!s||!a||!c||!i?[]:c!==i?[{headers:{operation:"delete",timestamp:r,txid:l},key:c,oldValue:a,type:n,value:null},{headers:{operation:"insert",timestamp:r,txid:l},key:i,oldValue:null,type:n,value:s}]:[{headers:{operation:"update",timestamp:r,txid:l},key:i,oldValue:a,type:n,value:s}]}#i(t,r,n){if(!n)return null;let o=lo(n,r);return o||(this.#s.has(t)||(this.#s.add(t),console.warn(`[streams] falling back to full-row keys for ${t} because no primary key could be resolved`)),uo(n))}};async function io(e){let t=await fetch(e.url,{headers:st,method:"PUT"});if(!t.ok)throw await it(t,`Failed to create ${e.streamName}`);let r=await fetch(`${e.url}/_schema`,{body:JSON.stringify(ao),headers:st,method:"POST"});if(!r.ok)throw await it(r,`Failed to configure ${e.streamName}`)}async function co(e,t){let r=await fetch(e,{body:JSON.stringify(t),headers:st,method:"POST"});if(!r.ok)throw await it(r,"Failed to append to prisma-wal")}async function it(e,t){let r=await e.text().catch(()=>"");return new Error(`${t}: HTTP ${e.status}${r?` ${r}`:""}`)}function lo(e,t){if(t.length===0)return null;let r=[];for(let n of t){if(!Object.prototype.hasOwnProperty.call(e,n))return null;let o=mo(e[n]);if(o==null)return null;r.push(t.length===1?o:`${n}=${o}`)}return r.join("|")}function uo(e){return JSON.stringify(ct(e))}function ct(e){return Array.isArray(e)?e.map(t=>ct(t)):e&&typeof e=="object"?Object.fromEntries(Object.entries(e).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>[t,ct(r)])):e}function $r(e){return e?structuredClone(e):null}function mo(e){if(e===null)return"null";if(e===void 0)return"undefined";if(typeof e=="string")return e;if(typeof e=="number")return Number.isFinite(e)?String(e):null;if(typeof e=="bigint")return e.toString();if(typeof e=="boolean")return e?"true":"false";try{return JSON.stringify(e)}catch{return null}}function po(e){return`${e}.${(0,Nr.randomUUID)().replaceAll("-","")}`}async function kr(e){let t=await I.createExclusively(e),r=null,n=null,o=null,s=null;try{[r,o]=await Promise.all([ke("database",t),ke("shadow_database",t)]);let a;t.dryRun?(a=Po(),s=yo()):(a=await r.attachWalEventBridge(),s=await Cr({dbServer:r,debug:t.debug,name:t.name,port:t.streamsPort,persistenceMode:t.persistenceMode,walBridge:a})),n=await xr(r,t);let c=go(r,o,n,t);await t.writeServerDump(c,t.dryRun?{}:{streams:s.experimental});let i=ho(a),l=r,u=o,p=n,g=s,y=async()=>{i.close(),await Ur(t,[p,g,l,u])};return{close:y,dbServer:r,httpServer:n,server:{...c,close:y,experimental:{streams:s.experimental,wal:i.api},name:t.name},serverState:t,shadowDbServer:o,streamsServer:s,walBridge:a}}catch(a){return await fo(t,[n,s,r,o],a)}}function go(e,t,r,n){let o=`prisma+postgres://localhost:${r.port}/?${new URLSearchParams({api_key:dt({databaseUrl:e.prismaORMConnectionString,name:n.name,shadowDatabaseUrl:t.prismaORMConnectionString})}).toString()}`;return{database:{connectionString:e.connectionString,prismaORMConnectionString:e.prismaORMConnectionString,terminalCommand:e.terminalCommand},http:{url:r.url},ppg:{url:o},shadowDatabase:{connectionString:t.prismaORMConnectionString,prismaORMConnectionString:t.prismaORMConnectionString,terminalCommand:t.terminalCommand}}}async function Ur(e,t){let n=(await Promise.allSettled(t.map(o=>o.close()))).filter(o=>o.status==="rejected").map(o=>new Error(o.reason));try{await e.close()}catch(o){n.push(o)}if(n.length>0)throw new AggregateError(n,"Failed to close some servers")}async function fo(e,t,r){try{await Ur(e,t.filter(n=>n!==null))}catch(n){throw new AggregateError([r,n],"Failed to start Prisma Dev server cleanly")}throw r}function ho(e){let t=new Set;return{api:{stream:()=>{let r=()=>{},n=bo(e,()=>{t.delete(r)});return r=()=>n.close(),t.add(r),n.stream},subscribe:r=>e.subscribe(r)},close:()=>{for(let r of[...t])r();t.clear()}}}function Po(){return{async close(){},async poll(){},subscribe(){return()=>{}}}}function yo(){return{async close(){},experimental:{serverUrl:"",sqlitePath:"",streamName:"",url:""}}}function bo(e,t){let r=[],n=!1,o=null,s=e.subscribe(c=>{if(!n){if(o){let i=o;o=null,i.resolve({done:!1,value:c});return}r.push(c)}}),a=()=>{if(!n&&(n=!0,s(),r.length=0,t(),o)){let c=o;o=null,c.resolve({done:!0,value:void 0})}};return{close:a,stream:{[Symbol.asyncIterator](){return this},next(){return r.length>0?Promise.resolve({done:!1,value:r.shift()}):n?Promise.resolve({done:!0,value:void 0}):new Promise((c,i)=>{o={reject:i,resolve:c}})},return(){return a(),Promise.resolve({done:!0,value:void 0})},throw(c){let i=o;return a(),i&&i.reject(c),Promise.reject(c instanceof Error?c:new Error(String(c)))}}}}async function Mr(e){let{server:t}=await kr(e);return t}async function So(e){return await Mr(e)}0&&(module.exports={DEFAULT_DATABASE_PORT,DEFAULT_SERVER_PORT,DEFAULT_SHADOW_DATABASE_PORT,PortNotAvailableError,ServerAlreadyRunningError,copyPrismaDevRuntimeAssets,getPrismaDevRuntimeAssetManifest,startPrismaDevServer,unstable_startServer});