"use strict";var Gr=Object.create;var re=Object.defineProperty;var jr=Object.getOwnPropertyDescriptor;var Fr=Object.getOwnPropertyNames;var qr=Object.getPrototypeOf,Vr=Object.prototype.hasOwnProperty;var T=(e,t)=>()=>(e&&(t=e(e=0)),t);var ct=(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 s of Fr(t))!Vr.call(e,s)&&s!==r&&re(e,s,{get:()=>t[s],enumerable:!(n=jr(t,s))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?Gr(qr(e)):{},lt(t||!e||!e.__esModule?re(r,"default",{value:e,enumerable:!0}):r,e)),zr=e=>lt(re({},"__esModule",{value:!0}),e);var Kr,f,m=T(()=>{"use strict";Kr=()=>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,f=Kr()});function dt(e){return Buffer.from(JSON.stringify(Object.fromEntries(Object.entries(e).sort(([[t],[r]])=>t.localeCompare(r)))),"utf8").toString("base64url")}function Qr(e){let t=Buffer.from(e,"base64url").toString("utf8"),{issues:r,output:n,success:s}=(0,y.safeParse)(Jr,t,{abortEarly:!0});return s?[null,n]:[r]}var y,ut,Jr,B,he=T(()=>{"use strict";m();y=require("valibot"),ut=/^(postgres|postgresql):\/\//,Jr=(0,y.pipe)((0,y.string)(),(0,y.parseJson)(),(0,y.object)({databaseUrl:(0,y.pipe)((0,y.string)(),(0,y.url)(),(0,y.regex)(ut)),name:(0,y.optional)((0,y.pipe)((0,y.string)(),(0,y.minLength)(1))),shadowDatabaseUrl:(0,y.pipe)((0,y.string)(),(0,y.url)(),(0,y.regex)(ut))}));B=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[s,o="",a]=r.split(" ");if(s!=="Bearer"||a)throw new n(401,{message:"Invalid API Key"});let[c,i]=Qr(o);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"),P=new URL(t.req.url).port;if(!u)throw new n(401,{message:`Wrong API Key; The Prisma Dev server running at port ${P} 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 ${P} is named "${g}", but the API Key is for "${u}"`});let{hostname:R,port:D}=new URL(l),{port:kr}=t.get("db"),{hostname:Ur,port:Wr}=new URL(p),Hr=t.get("shadowDBPort");if(R!=="localhost"||Number(D)!==kr||Ur!=="localhost"||Number(Wr)!==Hr)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 be(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"?Yr(e):ne.default.platform==="win32"?Xr(e):Zr(e)}var b,ye,ne,L,Pe,W,Yr,Xr,Zr,mt=T(()=>{"use strict";m();b=w(require("path"),1),ye=w(require("os"),1),ne=w(require("process"),1),L=ye.default.homedir(),Pe=ye.default.tmpdir(),{env:W}=ne.default,Yr=e=>{let t=b.default.join(L,"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(Pe,e)}},Xr=e=>{let t=W.APPDATA||b.default.join(L,"AppData","Roaming"),r=W.LOCALAPPDATA||b.default.join(L,"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(Pe,e)}},Zr=e=>{let t=b.default.basename(L);return{data:b.default.join(W.XDG_DATA_HOME||b.default.join(L,".local","share"),e),config:b.default.join(W.XDG_CONFIG_HOME||b.default.join(L,".config"),e),cache:b.default.join(W.XDG_CACHE_HOME||b.default.join(L,".cache"),e),log:b.default.join(W.XDG_STATE_HOME||b.default.join(L,".local","state"),e),temp:b.default.join(Pe,t,e)}}});function ht(e,t){return`${oe.cache}/engine/${e}/${t}`}function z(e){return`${oe.data}/${e}`}async function yt(e){try{return await(0,v.access)(e,v.constants.F_OK),!0}catch(t){if(Se(t))return!1;throw t}}async function Pt(e,t){let r=await en(e);await(0,v.writeFile)(t,r),await(0,v.chmod)(t,"755")}async function bt(e,t){await e.stream().pipeTo(se.WriteStream.toWeb((0,se.createWriteStream)(t,{encoding:"utf8"})))}function Se(e){return e!=null&&typeof e=="object"&&"code"in e&&e.code==="ENOENT"}async function St(e){try{return await(0,v.readFile)(e,{encoding:"utf-8"})}catch(t){if(Se(t))return null;throw t}}async function wt(e){await(0,v.mkdir)(e,{recursive:!0})}async function vt(e,t){try{return(await(0,v.readdir)(e,{withFileTypes:!0})).reduce((n,s)=>(s.isDirectory()&&!s.name.startsWith(".")&&(!t||(0,ft.default)(t,s.name))&&n.push(s.name),n),[])}catch(r){if(Se(r))return[];throw r}}async function K(e){await(0,v.rm)(e,{force:!0,recursive:!0})}var se,v,pt,gt,ft,oe,en,H=T(()=>{"use strict";m();se=require("fs"),v=require("fs/promises"),pt=require("util"),gt=require("zlib");mt();ft=w(require("zeptomatch"),1),oe=be("prisma-dev"),en=(0,pt.promisify)(gt.unzip)});function ue(e){let t,r,n=new Promise((a,c)=>{t=a,r=c}),s=a=>{s=o=null,r(a),e?.onRejected?.(a),e?.onFulfilled?.()},o=a=>{o=s=null,t(a),e?.onResolved?.(a),e?.onFulfilled?.()};return{isFulfilled:()=>o===s,promise:n,reject:a=>s?.(a),resolve:a=>o?.(a)}}var Me=T(()=>{"use strict";m()});function de(e,t){return console.error(e),e instanceof Q?t.json({EngineNotStarted:{reason:{EngineStartupError:{logs:[],msg:e.message}}}},500):e instanceof F?t.text(e.responseBody,e.statusCode):t.body(null,500)}var Vt,zt,Kt,Jt,Qt,Yt,Ln,$n,qt,q,Q,F,ke=T(()=>{"use strict";m();Vt=require("child_process"),zt=require("events"),Kt=require("fs/promises"),Jt=require("path"),Qt=require("timers/promises");Me();Yt=require("std-env");H();({PRISMA_DEV_FORCE_ENGINE_BINARY_DOWNLOAD:Ln,PRISMA_DEV_FORCE_ENGINE_BINARY_PATH:$n,PRISMA_DEV_FORCE_NETWORK_DELAY_MS:qt}=Yt.process.env),q=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 s=e.#r.get(n);if(s)return s;let o=new e(t);return e.#r.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.#r.entries()).filter(([s])=>s!==t).map(async([s,o])=>{try{await o.stop()}finally{e.#r.delete(s)}}))).filter(s=>s.status==="rejected").map(s=>s.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(),s=this.#n(r),o=await fetch(n,{body:typeof t=="string"?t:JSON.stringify(t),headers:{...s,"Content-Type":"application/json"},method:"POST"});if(!o.ok)throw await F.fromResponse(o);return await o.text()}async rollbackTransaction(t,r){return await this.#i(t,r,"rollback")}async startTransaction(t,r){let{url:n}=await this.start(),s=this.#n(r),o=await fetch(`${n}/transaction/start`,{body:JSON.stringify(t),headers:{...s,"Content-Type":"application/json"},method:"POST"});if(!o.ok)throw await F.fromResponse(o);return await o.json()}async start(){if(this.#t!=null)return await this.#t;let{promise:t,reject:r,resolve:n}=ue();this.#t=t;let s=$n||await this.#s();this.#e.debug&&console.debug("[Query Engine] spinning up at path...",s);let{proxySignals:o}=await import("foreground-child/proxy-signals"),a=(0,Vt.spawn)(s,["--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(a),a.stderr.setEncoding("utf8"),a.stdout.setEncoding("utf8");let c=u=>{let p=u.split(` `).find(D=>D.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:P,port:R}=g;if(P==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://${P}:${R}`})},i=u=>{this.#t=null,r(new Q(String(u))),a.removeListener("exit",l),a.kill()};a.once("error",i);let l=(u,p)=>{this.#t=null,r(new Q(`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,zt.once)(t,"exit"))}async#s(){this.#e.debug&&console.debug("[Query Engine] getting engine commit hash...");let t=await this.#o();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,Kt.mkdir)(r,{recursive:!0});let{binaryTarget:n}=this.#e.platform,s=n==="windows"?".exe":"",o=(0,Jt.join)(r,`query-engine-${n}${s}`);return this.#e.debug&&console.debug("[Query Engine] binary path",o),(Ln==="1"||await yt(o)===!1)&&await this.#a({commitHash:t,extension:s,engineBinaryPath:o}),o}async#o(){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 s=n.split(".").at(-1);if(!s)throw new Error("Couldn't find commit hash in engines version");return s}async#a(t){let{commitHash:r,extension:n,engineBinaryPath:s}=t,{binaryTarget:o}=this.#e.platform,a=`https://binaries.prisma.sh/all_commits/${r}/${o}/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}`);qt&&await(0,Qt.setTimeout)(Number(qt)),await Pt(await c.arrayBuffer(),s),this.#e.debug&&console.debug("[Query Engine] downloaded and saved at",s)}#n(t){let r={};for(let[n,s]of Object.entries(t))s!=null&&(r[n]=s);return r}async#i(t,r,n){let{url:s}=await this.#t,o=this.#n(r),a=await fetch(`${s}/transaction/${t}/${n}`,{headers:{...o,"Content-Type":"application/json"},method:"POST"});if(!a.ok)throw await F.fromResponse(a);try{return await a.json()}catch{return{}}}};Q=class extends Error{name="EngineStartError"},F=class e extends Error{constructor(r,n,s){super(`${r}: Query Engine response status ${n}, body: ${s}`);this.action=r;this.statusCode=n;this.responseBody=s}name="EngineHttpError";static async fromResponse(r){let n=new URL(r.url),s=await r.text();return new e(n.pathname,r.status,s)}}});async function Xt(e){let{output:t,success:r}=(0,E.safeParse)(Nn,await e.req.json(),{abortEarly:!0});return r?t:e.text("Invalid input",400)}var E,Nn,Zt=T(()=>{"use strict";m();E=require("valibot"),Nn=(0,E.object)({tags:(0,E.union)([(0,E.pipe)((0,E.array)((0,E.string)()),(0,E.minLength)(1)),(0,E.literal)("all")])})});async function er(e){return Ue===void 0&&(Ue=await N.Server.create({databaseUrl:e.get("db").connectionString,maxResponseSize:(0,N.parseSize)("128 MiB"),queryTimeout:(0,N.parseDuration)("PT5M"),maxTransactionTimeout:(0,N.parseDuration)("PT5M"),maxTransactionWaitTime:(0,N.parseDuration)("PT5M"),perRequestLogContext:{logFormat:"text",logLevel:e.get("debug")?"debug":"off"}})),Ue}var N,me,Ue,tr=T(()=>{"use strict";m();N=require("@prisma/query-plan-executor"),me=require("@prisma/query-plan-executor")});async function Ge(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 nr(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 sr(e,t,r){let n=He.Buffer.from(e,"base64").toString("utf8"),s=Cn(n,t.toString());r&&console.log("[Accelerate] schema with override:",s);let o=await Ge(s);return{base64Override:He.Buffer.from(s,"utf8").toString("base64"),overrideHash:o}}function Cn(e,t){let r=Mn(e);if(!r)throw new Error("No datasource block found in schema.");let n=e.slice(r.openBraceIndex+1,r.closeBraceIndex),s=Wn(n,t,jn(e,r.openBraceIndex));return`${e.slice(0,r.openBraceIndex+1)}${s}${e.slice(r.closeBraceIndex)}`}function Mn(e){let t="datasource";for(let r=0;r`${t.line}${t.terminator}`).join("")}function or(e){let t=!1,r=!1;for(let n=0;n{"use strict";m();He=require("buffer"),pe=new Map;Bn=" "});function ge(e){let{req:t}=e;return{traceparent:t.header("traceparent"),"X-capture-telemetry":t.header("X-capture-telemetry")}}var ir=T(()=>{"use strict";m()});async function cr(e){let{issues:t,output:r,success:n}=(0,h.safeParse)(Vn,await e.req.json(),{abortEarly:!0});return n?r:e.json({EngineNotStarted:{reason:"InvalidRequest",issues:t}},400)}function lr(e,t){let{output:r,success:n}=(0,h.safeParse)(zn,e);return n?r:t.json({EngineMalfunction:{}},500)}var h,Vn,zn,ur=T(()=>{"use strict";m();h=require("valibot"),Vn=(0,h.object)({isolation_level:(0,h.optional)((0,h.string)()),max_wait:(0,h.pipe)((0,h.number)(),(0,h.integer)(),(0,h.minValue)(0)),timeout:(0,h.pipe)((0,h.number)(),(0,h.integer)(),(0,h.minValue)(0))});zn=(0,h.looseObject)({id:(0,h.union)([(0,h.string)(),(0,h.number)()])})});var pr={};ct(pr,{accelerateRoute:()=>Y});async function Ve(e){let{req:t}=e,r=nr(e);if(r instanceof Response)return r;let{base64Override:n,overrideHash:s}=r.schemas;return await q.get({base64Schema:n,clientVersion:process.env.PRISMA_DEV_FORCE_CLIENT_VERSION||t.param("clientVersion"),debug:e.get("debug"),platform:e.get("platform"),schemaHash:s})}var dr,mr,k,Y,Kn,X,Jn,Qn,gr=T(()=>{"use strict";m();dr=require("hono/http-exception"),mr=require("hono/tiny"),k=require("hono/validator");he();Zt();ke();tr();ar();ir();ur();Y=new mr.Hono;Y.post("/invalidate",(0,k.validator)("header",B),async e=>{let t=await Xt(e);return t instanceof Response?t:e.body(null)});Kn="/:clientVersion/:schemaHash",X=Y.basePath(Kn);Y.route("/",X);Jn=["/graphql","/itx/:transactionId/graphql"];X.on("POST",[...Jn],(0,k.validator)("header",B),async e=>{let{req:t}=e;try{let r=await Ve(e);if(r instanceof Response)return r;let n=await t.text(),s=t.param("transactionId"),o=await r.request(n,{...ge(e),"X-transaction-id":s});return e.text(o)}catch(r){return de(r,e)}});X.basePath("/itx/:transactionId").on("POST",["/commit","/rollback"],(0,k.validator)("header",B),async e=>{let{req:t}=e;try{let r=await Ve(e);if(r instanceof Response)return r;let s=`${t.routePath.split("/").filter(Boolean).at(-1)}Transaction`,o=t.param("transactionId"),a=await r[s](o,ge(e));return e.json(a)}catch(r){return de(r,e)}});X.put("/schema",(0,k.validator)("header",B),async e=>{let{req:t}=e,r=await t.text();if(!r)return e.text("Missing schema",400);let n=t.param("schemaHash"),s=pe.get(n);if(s==null){if(n!==await Ge(r))return e.text("Schema hash mismatch",400);let o=await sr(r,e.get("db").prismaORMConnectionString,e.get("debug"));return pe.set(n,{base64Original:r,...o}),e.text(n)}return r!==s.base64Original?e.text("Schema mismatch",400):e.text(n)});X.post("/transaction/start",(0,k.validator)("header",B),async e=>{let{req:t}=e,r=await cr(e);if(r instanceof Response)return r;try{let n=await Ve(e);if(n instanceof Response)return n;let s=await n.startTransaction(r,ge(e)),o=lr(s,e);if(o instanceof Response)return o;let{id:a}=o,c=t.param("clientVersion"),i=t.param("schemaHash");return e.json({...s,"data-proxy":{endpoint:`${new URL(t.url).origin}/${c}/${i}/itx/${a}`}})}catch(n){return de(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)Y.on(t,e,(0,k.validator)("header",B),async r=>{let n=r.req.header("prisma-engine-hash");if(n!=="0.0.0"&&n!==me.version)throw new dr.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 ${me.version}.`});return await(await er(r)).fetch(r.req.raw)})});var yr={};ct(yr,{utilityRoute:()=>ze});var fr,hr,ze,fo,Pr=T(()=>{"use strict";m();fr=require("hono/tiny"),hr=require("http-status-codes"),ze=new fr.Hono;ze.post("/database/dump",async e=>{let t=e.get("db"),r=e.get("databaseDumpPath");return await t.dump(r),e.json({dumpPath:r},hr.StatusCodes.CREATED)});fo=ze.get("/health",e=>e.json({name:e.get("name")}))});var Ss={};module.exports=zr(Ss);m();var Mr=require("timers/promises");m();m();he();m();var Ht=require("pathe/utils");H();m();var $=require("get-port-please"),ie=require("remeda"),we=51214,ve=51213,Ee=51215,Et=51216,ae=65535,G=0,x=-1/0;async function De(e){let{debug:t,name:r,requestedPorts:n,servers:s}=e,{portsUsedByOtherServers:o,portsUsedByThisServerLastTime:a}=nn(r,s);t&&(console.debug(`ports used by other servers: ${Object.keys(o).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 tn({debug:t,portKey:l,portsUsedByOtherServers:o,portsUsedByThisServerLastTime:a,requestedPorts:n})??await rn({debug:t,pickedPorts:c,portKey:l,portsUsedByOtherServers:o,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 tn(e){let{debug:t,portKey:r,portsUsedByOtherServers:n,portsUsedByThisServerLastTime:s,requestedPorts:o}=e,{[r]:a,...c}=o;if(Re(a))return await an({debug:t,otherRequestedPorts:c,portKey:r,portsUsedByOtherServers:n,requestedPort:a}),a;let i=s?.[r]??x;if(!Re(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,$.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 rn(e){let{debug:t,pickedPorts:r,portKey:n,portsUsedByOtherServers:s,portsUsedByThisServerLastTime:o}=e,a=Math.max(we,ve,Ee,Et)+1,c=Object.values(r).filter(P=>P!==void 0),i=o?on(o):[],l=[...c,...Object.keys(s).map(Number),...i],u=Math.min(Math.max(a,...l)+100,ae),p=(0,ie.difference)((0,ie.range)(a,u),l),g={port:ve,databasePort:we,shadowDatabasePort:Ee,streamsPort:Et}[n];try{return await(0,$.getPort)({port:g in s||c.includes(g)||i.includes(g)?void 0:g,ports:p})}catch(P){if(P instanceof Error&&P.name==="GetPortError"&&u+1<=ae)return t&&console.debug(`Expanding port lookup to range [${u+1}, ${ae}].`),await(0,$.getPort)({portRange:[u+1,ae]});throw P}}function Re(e){return Number.isFinite(e)&&e>=0}function nn(e,t){let r={},n;for(let s of t){let{databasePort:o,port:a,shadowDatabasePort:c}=s,i=sn(s);if(s.name===e){n={databasePort:o,port:a,shadowDatabasePort:c,streamsPort:i};continue}r[o]=!0,r[a]=!0,r[c]=!0,Re(i)&&(r[i]=!0)}return{portsUsedByOtherServers:r,portsUsedByThisServerLastTime:n}}function sn(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 on(e){return[e.port,e.databasePort,e.shadowDatabasePort,e.streamsPort]}async function an(e){let{debug:t,otherRequestedPorts:r,portKey:n,portsUsedByOtherServers:s,requestedPort:o}=e;if(o!==G){if(o in s)throw t&&console.error(`Port ${o} was requested for "${n}", but is already used by another server.`),new xe(o);if(Object.values(r).includes(o))throw t&&console.error(`Port ${o} was requested for "${n}", but also for another key.`),new Te(o);if((0,$.isUnsafePort)(o))throw t&&console.error(`Port ${o} was requested for "${n}", but is unsafe.`),new O(o);if(await(0,$.checkPort)(o)===!1)throw t&&console.error(`Port ${o} was requested for "${n}", but is not available.`),new O(o)}}var O=class extends Error{constructor(r){super(`Port \`${r}\` is not available.`);this.port=r}name="PortNotAvailableError"},Te=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"},xe=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 j=require("fs"),C=require("fs/promises"),xt=require("module"),Dt=require("path"),M=require("url"),cn=(0,xt.createRequire)(f),ln=["initdb.wasm","pglite.data","pglite.wasm"],At={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"},un=[...ln.map(e=>({fileName:e,kind:"core",name:e})),...Object.entries(At).map(([e,t])=>({fileName:t,kind:"extension",name:e}))],le=new Map,dn=Symbol.for("@prisma/dev/bundled-pglite-runtime-asset-sources"),ce=null;async function Ae(){await bn();let e=_t();if(e)return await fn(e),await mn(e);let t=yn(),r=t.href,n=le.get(r);return n||(n=pn(t),le.set(r,n)),await n}async function mn(e){let t=`bundled:${e.wasmModule.href}:${e.fsBundle.href}`,r=le.get(t);return r||(r=gn(e),le.set(t,r)),await r}async function pn(e){let[t,r]=await Promise.all([(0,C.readFile)(new URL("pglite.data",e)),(0,C.readFile)(new URL("pglite.wasm",e))]),n=Ot();return{extensions:Object.fromEntries(Object.entries(At).map(([s,o])=>[s,new URL(o,e)])),fsBundle:new Blob([Uint8Array.from(t)]),wasmModule:await n.compile(r)}}async function gn(e){let[t,r]=await Promise.all([Tt(e.fsBundle),Tt(e.wasmModule)]),n=Ot();return{extensions:e.extensions,fsBundle:new Blob([Uint8Array.from(t)]),wasmModule:await n.compile(r)}}async function fn(e){if(e.initdbWasm.protocol!=="file:")return;let t=new URL("initdb.wasm",_e(new URL("./",e.initdbWasm))),r=(0,M.fileURLToPath)(t);(0,j.existsSync)(r)||await(0,C.copyFile)((0,M.fileURLToPath)(e.initdbWasm),r)}function _e(e){return e instanceof URL?Rt(e):Rt((0,M.pathToFileURL)(e))}function Rt(e){return e.href.endsWith("/")?e:new URL(`${e.href}/`)}function hn(){let e=cn.resolve("@electric-sql/pglite");return _e((0,Dt.dirname)(e))}function yn(){let e=_e(new URL("./",f));if(Pn(e))return e;if(Sn())return hn();throw new Error("Unable to locate PGlite runtime assets. If you bundled @prisma/dev, copy them next to the bundle with copyPrismaDevRuntimeAssets().")}function Pn(e){return un.every(t=>(0,j.existsSync)((0,M.fileURLToPath)(new URL(t.fileName,e))))}function _t(){return globalThis[dn]??null}async function bn(){!wn()||_t()||(ce||(ce=import("./runtime-assets-manifest.bun.js").then(()=>{}).catch(e=>{throw ce=null,e})),await ce)}function Sn(){let e=(0,M.fileURLToPath)(new URL("../package.json",f));if(!(0,j.existsSync)(e))return!1;try{return JSON.parse((0,j.readFileSync)(e,"utf8")).name==="@prisma/dev"}catch{return!1}}function wn(){return typeof globalThis.Bun<"u"}function Ot(){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,C.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 Le=require("@electric-sql/pglite"),A="_prisma_dev_wal",Ie="events",$t="install_all_triggers",It="capture_event",Lt="prisma_dev_wal_capture",J=new WeakMap,vn=new Set(["ALTER","COMMIT","COPY","CREATE","DELETE","DROP","INSERT","MERGE","TRUNCATE","UPDATE"]);async function $e(e,t){let r=J.get(e);if(r&&!r.closed)return r.bridge;let n=e.execProtocolRaw.bind(e),s=e.execProtocolRawStream.bind(e),o={bridge:{close:async()=>{o.closed||(o.closed=!0,o.subscribers.clear(),e.execProtocolRaw===a&&(e.execProtocolRaw=n),e.execProtocolRawStream===c&&(e.execProtocolRawStream=s),await o.pollPromise,J.delete(e))},poll:async()=>{await Oe(o,e)},subscribe:i=>(o.subscribers.add(i),()=>{o.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!o.closed&&o.suppressDepth===0&&Bt(u)&&Oe(o,e),u},c=async(i,l)=>{let u=[],p=new Le.protocol.Parser,g=l?.onRawData;await s(i,{...l,onRawData:P=>{p.parse(P,R=>{u.push(R)}),g?.(P)}}),!o.closed&&o.suppressDepth===0&&Ne(u)&&Oe(o,e)};return e.execProtocolRaw=a,e.execProtocolRawStream=c,J.set(e,o),await Ct(o,e),o.bridge}async function Nt(e){let t=J.get(e);t&&await t.bridge.close()}function Ne(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&&vn.has(r))return!0}return!1}function Bt(e){if(e.length===0)return!1;let t=[];return new Le.protocol.Parser().parse(e,n=>{t.push(n)}),Ne(t)}async function Ct(e,t){e.ensureInfrastructurePromise??=Be(e,t,async()=>{await t.exec(`CREATE SCHEMA IF NOT EXISTS "${A}"`),await t.exec(` CREATE TABLE IF NOT EXISTS "${A}"."${Ie}" ( 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 "${A}"."${It}"() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN IF TG_TABLE_SCHEMA = '${A}' THEN RETURN COALESCE(NEW, OLD); END IF; INSERT INTO "${A}"."${Ie}" ( 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 "${A}"."${$t}"() 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 ('${A}', '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 = '${Lt}' ) THEN CONTINUE; END IF; EXECUTE format( 'CREATE TRIGGER %I AFTER INSERT OR UPDATE OR DELETE ON %s FOR EACH ROW EXECUTE FUNCTION "${A}"."${It}"()', '${Lt}', target::text ); END LOOP; END; $$; `),await Mt(e,t)}),await e.ensureInfrastructurePromise}async function Mt(e,t){await Be(e,t,async()=>{await t.query(`SELECT "${A}"."${$t}"()`)})}async function En(e,t){await Ct(e,t),await Mt(e,t);let r=await Be(e,t,async()=>await t.query(` WITH drained AS ( DELETE FROM "${A}"."${Ie}" 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 s of e.subscribers)queueMicrotask(()=>{if(!e.closed&&e.subscribers.has(s))try{s(n)}catch(o){console.error("[WAL bridge] subscriber failed",o)}})}async function Oe(e,t){if(!e.closed){if(e.pollPromise){e.pendingPoll=!0,await e.pollPromise;return}e.pollPromise=(async()=>{do e.pendingPoll=!1,await En(e,t);while(e.pendingPoll&&!e.closed)})().finally(()=>{e.pollPromise=null}),await e.pollPromise}}async function Be(e,t,r){e.suppressDepth+=1;try{return await r()}finally{e.suppressDepth-=1,e.suppressDepth===0&&!e.closed&&J.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"},Dn=`postgres://${S.username}:${S.password}@localhost`,Gt=new URLSearchParams({sslmode:S.sslMode}),An=new URLSearchParams({...Object.fromEntries(Gt.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 jt(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 Ce(e,t){let r=e==="database"?t.databasePort:t.shadowDatabasePort;if(t.dryRun)return kt(e,t,{db:null,port:r,server:null});let{debug:n}=t,o=await(e==="shadow_database"?_n:Ft)(t.pgliteDataDirPath,n);n&&o.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:o,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 O(r):u}let l=Number(i.getServerConn().split(":").at(1));return t[e==="database"?"databasePort":"shadowDatabasePort"]=l,kt(e,t,{db:o,port:l,server:i})}function kt(e,t,r){let{debug:n}=t,{db:s,port:o,server:a}=r||{},c=new Map;return n&&console.debug(`[${e}] server started on port ${o}`),{...S,attachWalEventBridge:async()=>{if(e!=="database"||!s)throw new Error("WAL bridge is only available for the primary database server");return await $e(s)},close:async()=>{let i=[];try{await a?.stop(),n&&console.debug(`[${e}] server stopped on port ${o}`)}catch(l){console.error(`[${e}] server stop error`,l),i.push(l)}if(e==="database"){try{s&&await Nt(s),n&&console.debug(`[${e}] closed WAL bridge`)}catch(l){console.error(`[${e}] WAL bridge close error`,l),i.push(l)}try{await s?.syncToFs(),n&&console.debug(`[${e}] synced to filesystem`)}catch(l){console.error(`[${e}] sync error`,l),i.push(l)}}try{await s?.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:Ut(o,Gt),dump:async i=>{e==="shadow_database"||!s||await In({db:s,debug:n,destinationPath:i})},getPrimaryKeyColumns:async(i,l)=>{if(e==="shadow_database"||!s)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(s,i,l).catch(g=>{throw c.delete(u),g}),c.set(u,p)),await p},port:o,prismaORMConnectionString:Ut(o,An),terminalCommand:`PGPASSWORD=${S.password} PGSSLMODE=${S.sslMode} psql -h localhost -p ${o} -U ${S.username} -d ${S.database}`}}function Ut(e,t){return`${Dn}:${e}/${S.database}?${t.toString()}`}async function Ft(e,t){let{PGlite:r}=await import("@electric-sql/pglite"),n=await Ae(),s=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 jt(s),s}async function _n(e,t){let{PGlite:r}=await import("@electric-sql/pglite"),n=await Ae(),s=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 jt(s),s}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 = ${Wt(t)} AND relation.relname = ${Wt(r)} ORDER BY keys.ordinality `);return n.map(s=>s.column_name)}function Wt(e){return`'${e.replaceAll("'","''")}'`}async function In(e){let{dataDir:t,db:r,debug:n,destinationPath:s}=e,o=r||await Ft(t,n),{pgDump:a}=await import("@electric-sql/pglite-tools/pg_dump"),c=await a({args:["--schema-only","--no-owner"],fileName:s?(0,Ht.filename)(s):void 0,pg:await o.clone()});return s?(n&&console.debug(`[DB] Dumping database to ${s}`),await bt(c,s)):(n&&console.debug("[DB] Dumping database to memory"),await c.text())}m();var Sr=require("http"),wr=require("util"),vr=w(require("@prisma/get-platform"),1);Me();ke();async function Er(e,t){let{port:r}=t;if(t.dryRun)return br(r,null);let n=await Yn(e,t),{promise:s,reject:o,resolve:a}=ue(),{serve:c}=await import("@hono/node-server"),i=c({createServer:Sr.createServer,fetch:n.fetch,overrideGlobalObjects:!1,port:r},a);i.on("error",u=>{if(typeof u=="object"&&"code"in u&&u.code==="EADDRINUSE")return o(new O(r));console.error("[Accelerate]",u)});let{port:l}=await s;return t.port=l,br(l,i)}function br(e,t){return{async close(){t&&await Promise.allSettled([(0,wr.promisify)(t.close.bind(t))(),q.stopAll()])},port:e,url:`http://localhost:${e}`}}async function Yn(e,t){let{debug:r}=t,[{Hono:n},{accelerateRoute:s},{utilityRoute:o}]=await Promise.all([import("hono/tiny"),Promise.resolve().then(()=>(gr(),pr)),Promise.resolve().then(()=>(Pr(),yr))]),a=new n,c=await vr.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("/",s),i.route("/",o),a.route("/",i),a}m();var _r=require("fs/promises"),U=require("pathe"),V=require("proper-lockfile"),tt=require("std-env"),d=require("valibot");H();m();var Xn=require("timers/promises"),Rr=require("std-env");function Tr(e,t){if(e==null)return!1;try{return Rr.process.kill?.(e,0)??!0}catch(r){return t&&console.error(`Error checking if process with PID ${e} exists:`,r),!1}}m();var Ke=require("pathe");H();var Je="prisma-wal";function Qe(){return(0,Ke.join)(oe.data,"durable-streams")}function Z(e){return(0,Ke.join)(Qe(),e)}function xr(e,t=Je){return new URL(`/v1/stream/${encodeURIComponent(t)}`,e).toString()}var te=(0,d.pipe)((0,d.string)(),(0,d.url)()),Dr=(0,d.object)({connectionString:te,prismaORMConnectionString:(0,d.optional)(te),terminalCommand:(0,d.optional)((0,d.string)())}),Ar=(0,d.object)({url:te}),Zn=(0,d.object)({serverUrl:te,sqlitePath:(0,d.pipe)((0,d.string)(),(0,d.minLength)(1)),streamName:(0,d.pipe)((0,d.string)(),(0,d.minLength)(1)),url:te}),es=(0,d.object)({streams:(0,d.optional)(Zn)}),Ye=(0,d.pipe)((0,d.number)(),(0,d.integer)(),(0,d.minValue)(1)),ts=(0,d.object)({database:Dr,http:Ar,ppg:Ar,shadowDatabase:Dr}),rs=(0,d.object)({databasePort:Ye,experimental:(0,d.optional)(es),exports:(0,d.optional)(ts),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:Ye,shadowDatabasePort:Ye,version:(0,d.literal)("1")}),rt=Symbol("initialize"),Xe="default",ns=new Set(["durable-streams"]),_=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??Xe,this.persistenceMode=t.persistenceMode,this.pid=t.pid??tt.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 ee(t):new Ze(t);return await r[rt](),r}static async fromServerDump(t){let{debug:r,name:n=Xe}=t??{},s=z(n),o=ee.getServerDumpPath(s),a=await St(o);if(a==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(a));let{issues:c,output:i,success:l}=(0,d.safeParse)((0,d.pipe)((0,d.string)(),(0,d.parseJson)(),rs),a);if(!l)throw r&&console.debug(`[State] Invalid server dump file at "${o}": ${JSON.stringify(c,null,2)}`),new Error(`Invalid Prisma Dev state for "${n}".`);return new ee({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??{},s=(0,U.join)(z(Xe),"..");r&&console.debug(`[State] scanning for server states in: ${s}`);let o=(await vt(s,n)).filter(a=>!ns.has(a));return r&&console.debug(`[State] found server names: ${JSON.stringify(o)}`),await Promise.all(o.map(a=>ss(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]!==G&&this[n]!==r)throw new Error(`\`${t}\` is already set to ${this[n]}, cannot change it to ${r}`);this[n]=r}},Ze=class extends _{constructor(t){super({...t,databasePort:t?.databasePort||G,persistenceMode:"stateless",port:t?.port||G,shadowDatabasePort:t?.shadowDatabasePort||G})}get databaseDumpPath(){return""}get pgliteDataDirPath(){return"memory://"}async[rt](){let t;try{t=await _.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(){}},ee=class e extends _{#r;#e;#t;#s;#o;#a;#n;constructor(t){super({...t,persistenceMode:"stateful"}),this.#a=!1,this.#e=z(this.name),this.#r=(0,U.join)(this.#e,"db_dump.bak"),this.#t=(0,U.join)(this.#e,".lock"),this.#s=(0,U.join)(this.#e,".pglite"),this.#n=t?.serverDump??null,this.#o=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.#s}async[rt](){await wt(this.#e),this.debug&&console.debug(`[State] using data directory: ${this.#e}`);try{await(0,V.lock)(this.#e,{lockfilePath:this.#t}),this.debug&&console.debug(`[State] obtained lock on: ${this.#e}`);let t=await _.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 fe(this):t}}async close(){if(!this.#a)try{await(0,V.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:tt.process.pid,port:this.port,databasePort:this.databasePort,experimental:r,shadowDatabasePort:this.shadowDatabasePort,exports:t},await(0,_r.writeFile)(this.#o,`${JSON.stringify(this.#n,null,2)} `,{encoding:"utf-8"})}};async function ss(e,t){let{debug:r,onlyMetadata:n}=t||{},s=typeof e=="string"?e:e.name,o=typeof e!="string"?e:void 0,a={databasePort:o?.databasePort??-1,experimental:o?.experimental,exports:o?.exports,name:s,pid:o?.pid,port:o?.port??-1,shadowDatabasePort:o?.shadowDatabasePort??-1,version:"1"};try{let c=o||await _.fromServerDump({debug:r,name:s});if(!c)return r&&console.debug(`[State] no server state found for name: ${s}`),{...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(!Tr(l,r))return r&&console.debug(`[State] server state for "${s}" has no running process with PID: ${l}`),{...a,status:"not_running"};let u=z(s);try{if(!await(0,V.check)(u,{lockfilePath:(0,U.join)(u,".lock")}))return r&&console.debug(`[State] server state for "${s}" is not locked, indicating it is not running.`),{...a,status:"not_running"}}catch(D){r&&console.error(`[State] server state for "${s}" failed to check lock:`,D)}if(!i)return{...a,status:"starting_up"};let{http:p}=i,{hc:g}=await import("hono/client"),P=await g(p.url).health.$get();if(!P.ok)return r&&console.debug(`[State] server state for "${s}" is not live: ${JSON.stringify(P)}`),{...a,status:"not_running"};let R=await P.json();return R.name!==e?(r&&console.debug(`[State] server state for "${s}" 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 "${s}":`,c),{...a,status:"error"}}}var et=class extends Error{name="ServerStateAlreadyExistsError";constructor(t){super(`A Prisma Dev server with the name "${t}" is already running.`)}},fe=class extends et{#r;name="ServerAlreadyRunningError";constructor(t){super(t.name),this.#r=t}get server(){return _.fromServerDump({debug:this.#r.debug,name:this.#r.name})}};m();var Ir=require("crypto"),nt=require("timers/promises"),Lr=require("std-env");H();var os="application/json",st={connection:"close","content-type":os},as={interpreter:{apiVersion:"durable.streams/stream-interpreter/v1",format:"durable.streams/state-protocol/v1",touch:{enabled:!0,onMissingBefore:"coarse"}}};async function $r(e){let{dbServer:t,debug:r,name:n,persistenceMode:s,port:o,walBridge:a}=e,c=s==="stateless",i=c?ms(n):n;Lr.process.env.DS_LOCAL_DATA_ROOT=Qe(),c&&await K(Z(i));let{startLocalDurableStreamsServer:l}=await import("@prisma/streams-local"),u=await l({hostname:"127.0.0.1",name:i,port:o}),p={serverUrl:u.exports.http.url,sqlitePath:u.exports.sqlite.path,streamName:Je,url:xr(u.exports.http.url)};try{await is(p);let g=new ot({dbServer:t,debug:r,streamUrl:p.url}),P=a.subscribe(R=>{g.enqueue(R)});return{close:async()=>{P(),await g.close(),await u.close(),await(0,nt.setTimeout)(100),c&&await K(Z(i))},experimental:p}}catch(g){throw await u.close().catch(()=>{}),await(0,nt.setTimeout)(100),c&&await K(Z(i)).catch(()=>{}),g}}var ot=class{#r;#e;#t;#s;#o;constructor(t){this.#r=t.dbServer,this.#e=t.debug,this.#t=Promise.resolve(),this.#s=t.streamUrl,this.#o=new Set}enqueue(t){t.length!==0&&(this.#t=this.#t.then(async()=>{let r=await this.#a(t);r.length!==0&&(await cs(this.#s,r),this.#e&&console.debug(`[streams] appended ${r.length} state-protocol record(s) to ${this.#s}`))}).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 s of t)r.push(...await this.#n(s,n));return r}async#n(t,r){let n=`${t.schema}.${t.table}`,s=await this.#r.getPrimaryKeyColumns(t.schema,t.table),o=Or(t.record),a=Or(t.oldRecord),c=this.#i(n,s,a),i=this.#i(n,s,o),l=t.txid===""?void 0:t.txid;return t.type==="insert"?o&&i?[{headers:{operation:"insert",timestamp:r,txid:l},key:i,oldValue:null,type:n,value:o}]:[]:t.type==="delete"?a&&c?[{headers:{operation:"delete",timestamp:r,txid:l},key:c,oldValue:a,type:n,value:null}]:[]:!o||!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:o}]:[{headers:{operation:"update",timestamp:r,txid:l},key:i,oldValue:a,type:n,value:o}]}#i(t,r,n){if(!n)return null;let s=ls(n,r);return s||(this.#o.has(t)||(this.#o.add(t),console.warn(`[streams] falling back to full-row keys for ${t} because no primary key could be resolved`)),us(n))}};async function is(e){let t=await fetch(e.url,{headers:st,method:"PUT"});if(!t.ok)throw await at(t,`Failed to create ${e.streamName}`);let r=await fetch(`${e.url}/_schema`,{body:JSON.stringify(as),headers:st,method:"POST"});if(!r.ok)throw await at(r,`Failed to configure ${e.streamName}`)}async function cs(e,t){let r=await fetch(e,{body:JSON.stringify(t),headers:st,method:"POST"});if(!r.ok)throw await at(r,"Failed to append to prisma-wal")}async function at(e,t){let r=await e.text().catch(()=>"");return new Error(`${t}: HTTP ${e.status}${r?` ${r}`:""}`)}function ls(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 s=ds(e[n]);if(s==null)return null;r.push(t.length===1?s:`${n}=${s}`)}return r.join("|")}function us(e){return JSON.stringify(it(e))}function it(e){return Array.isArray(e)?e.map(t=>it(t)):e&&typeof e=="object"?Object.fromEntries(Object.entries(e).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>[t,it(r)])):e}function Or(e){return e?structuredClone(e):null}function ds(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 ms(e){return`${e}.${(0,Ir.randomUUID)().replaceAll("-","")}`}async function Nr(e){let t=await _.createExclusively(e),r=null,n=null,s=null,o=null;try{[r,s]=await Promise.all([Ce("database",t),Ce("shadow_database",t)]);let a;t.dryRun?(a=hs(),o=ys()):(a=await r.attachWalEventBridge(),o=await $r({dbServer:r,debug:t.debug,name:t.name,port:t.streamsPort,persistenceMode:t.persistenceMode,walBridge:a})),n=await Er(r,t);let c=ps(r,s,n,t);await t.writeServerDump(c,t.dryRun?{}:{streams:o.experimental});let i=fs(a),l=r,u=s,p=n,g=o,P=async()=>{i.close(),await Br(t,[p,g,l,u])};return{close:P,dbServer:r,httpServer:n,server:{...c,close:P,experimental:{streams:o.experimental,wal:i.api},name:t.name},serverState:t,shadowDbServer:s,streamsServer:o,walBridge:a}}catch(a){return await gs(t,[n,o,r,s],a)}}function ps(e,t,r,n){let s=`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:s},shadowDatabase:{connectionString:t.prismaORMConnectionString,prismaORMConnectionString:t.prismaORMConnectionString,terminalCommand:t.terminalCommand}}}async function Br(e,t){let n=(await Promise.allSettled(t.map(s=>s.close()))).filter(s=>s.status==="rejected").map(s=>new Error(s.reason));try{await e.close()}catch(s){n.push(s)}if(n.length>0)throw new AggregateError(n,"Failed to close some servers")}async function gs(e,t,r){try{await Br(e,t.filter(n=>n!==null))}catch(n){throw new AggregateError([r,n],"Failed to start Prisma Dev server cleanly")}throw r}function fs(e){let t=new Set;return{api:{stream:()=>{let r=()=>{},n=Ps(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 hs(){return{async close(){},async poll(){},subscribe(){return()=>{}}}}function ys(){return{async close(){},experimental:{serverUrl:"",sqlitePath:"",streamName:"",url:""}}}function Ps(e,t){let r=[],n=!1,s=null,o=e.subscribe(c=>{if(!n){if(s){let i=s;s=null,i.resolve({done:!1,value:c});return}r.push(c)}}),a=()=>{if(!n&&(n=!0,o(),r.length=0,t(),s)){let c=s;s=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)=>{s={reject:i,resolve:c}})},return(){return a(),Promise.resolve({done:!0,value:void 0})},throw(c){let i=s;return a(),i&&i.reject(c),Promise.reject(c instanceof Error?c:new Error(String(c)))}}}}async function Cr(e){let{server:t}=await Nr(e);return t}var I;process.once("SIGTERM",()=>{console.log("SIGTERM received, shutting down..."),process.removeAllListeners("SIGINT"),process.exitCode=143,I?.close().finally(()=>process.exit())});process.once("SIGINT",()=>{console.log("SIGINT received, shutting down..."),process.removeAllListeners("SIGTERM"),process.exitCode=130,I?.close().finally(()=>process.exit())});async function bs(){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{I=await Cr({debug:!0,persistenceMode:"stateful",name:e});let t={database:I.database,experimental:{streams:I.experimental.streams},http:I.http,name:I.name,ppg:I.ppg,shadowDatabase:I.shadowDatabase};process.send?.({type:"started",server:t},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,Mr.setTimeout)(1e3),process.exit(1)}}bs();