UNPKG

@prisma/dev

Version:

A local Prisma Postgres server for development and testing

2 lines (1 loc) 3.81 kB
import{b as i,d as H,e as m}from"./chunk-IKAJO6YD.js";import"./chunk-EPFUMVT3.js";import{Hono as z}from"hono/tiny";import{validator as c}from"hono/validator";import{array as M,literal as $,minLength as V,object as B,pipe as L,safeParse as k,string as N,union as U}from"valibot";var X=B({tags:U([L(M(N()),V(1)),$("all")])});async function v(t){let{output:n,success:e}=k(X,await t.req.json(),{abortEarly:!0});return e?n:t.text("Invalid input",400)}import{Buffer as b}from"buffer";import{produceSchema as D}from"@mrleebo/prisma-ast";var f=new Map;async function g(t){let e=new TextEncoder().encode(t),r=await crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(r)).map(s=>s.toString(16).padStart(2,"0")).join("")}function I(t){let n=t.req.param("schemaHash"),e=f.get(n);return e==null?t.json({EngineNotStarted:{reason:"SchemaMissing"}},404):{schemaHash:n,schemas:e}}async function O(t,n,e){let r=b.from(t,"base64").toString("utf8"),a=D(r,s=>{s.datasource('"postgresql"',n.toString())});e&&console.log("[Accelerate] schema with override:",a);let o=await g(a);return{base64Override:b.from(a,"utf8").toString("base64"),overrideHash:o}}function d(t){let{req:n}=t;return{traceparent:n.header("traceparent"),"X-capture-telemetry":n.header("X-capture-telemetry")}}import{integer as w,looseObject as F,minValue as T,number as l,object as Y,optional as G,pipe as E,safeParse as R,string as A,union as K}from"valibot";var Q=Y({isolation_level:G(A()),max_wait:E(l(),w(),T(0)),timeout:E(l(),w(),T(0))});async function C(t){let{issues:n,output:e,success:r}=R(Q,await t.req.json(),{abortEarly:!0});return r?e:t.json({EngineNotStarted:{reason:"InvalidRequest",issues:n}},400)}var W=F({id:K([A(),l()])});function P(t,n){let{output:e,success:r}=R(W,t);return r?e:n.json({EngineMalfunction:{}},500)}var S=new z;S.post("/invalidate",c("header",i),async t=>{let n=await v(t);return n instanceof Response?n:t.body(null)});var J="/:clientVersion/:schemaHash",p=S.basePath(J);S.route("/",p);var Z=["/graphql","/itx/:transactionId/graphql"];p.on("POST",[...Z],c("header",i),async t=>{let{req:n}=t;try{let e=await y(t);if(e instanceof Response)return e;let r=await n.text(),a=n.param("transactionId"),o=await e.request(r,{...d(t),"X-transaction-id":a});return t.text(o)}catch(e){return m(e,t)}});p.basePath("/itx/:transactionId").on("POST",["/commit","/rollback"],c("header",i),async t=>{let{req:n}=t;try{let e=await y(t);if(e instanceof Response)return e;let a=`${n.routePath.split("/").filter(Boolean).at(-1)}Transaction`,o=n.param("transactionId"),s=await e[a](o,d(t));return t.json(s)}catch(e){return m(e,t)}});p.put("/schema",c("header",i),async t=>{let{req:n}=t,e=await n.text();if(!e)return t.text("Missing schema",400);let r=n.param("schemaHash"),a=f.get(r);if(a==null){if(r!==await g(e))return t.text("Schema hash mismatch",400);let o=await O(e,t.get("db").prismaORMConnectionString,t.get("debug"));return f.set(r,{base64Original:e,...o}),t.text(r)}return e!==a.base64Original?t.text("Schema mismatch",400):t.text(r)});p.post("/transaction/start",c("header",i),async t=>{let{req:n}=t,e=await C(t);if(e instanceof Response)return e;try{let r=await y(t);if(r instanceof Response)return r;let a=await r.startTransaction(e,d(t)),o=P(a,t);if(o instanceof Response)return o;let{id:s}=o,x=n.param("clientVersion"),q=t.get("port"),_=t.get("protocol"),j=n.param("schemaHash");return t.json({...a,"data-proxy":{endpoint:`${_}://localhost:${q}/${x}/${j}/itx/${s}`}})}catch(r){return m(r,t)}});async function y(t){let{req:n}=t,e=I(t);if(e instanceof Response)return e;let{base64Override:r,overrideHash:a}=e.schemas;return await H.get({base64Schema:r,clientVersion:process.env.PRISMA_DEV_FORCE_CLIENT_VERSION||n.param("clientVersion"),debug:t.get("debug"),platform:t.get("platform"),schemaHash:a})}export{S as accelerateRoute};