@prisma/dev
Version:
A local Prisma Postgres server for development and testing
2 lines (1 loc) • 5.81 kB
JavaScript
import{g as b}from"./chunk-OTI5SWIV.js";import{e as g}from"./chunk-ITQ6ILGR.js";import{filename as S}from"pathe/utils";var o={connectionLimit:1,connectTimeout:0,database:"template1",maxIdleConnectionLifetime:0,password:"postgres",poolTimeout:0,socketTimeout:0,sslMode:"disable",username:"postgres"},h=`postgres://${o.username}:${o.password}@localhost`,y=new URLSearchParams({sslmode:o.sslMode}),T=new URLSearchParams({...Object.fromEntries(y.entries()),connection_limit:String(o.connectionLimit),connect_timeout:String(o.connectTimeout),max_idle_connection_lifetime:String(o.maxIdleConnectionLifetime),pool_timeout:String(o.poolTimeout),single_use_connections:"true",socket_timeout:String(o.socketTimeout)});async function x(e,t){let r=e==="database"?t.databasePort:t.shadowDatabasePort;if(t.dryRun)return f(e,t,{db:null,port:r,server:null});let{debug:n}=t,a=await(e==="shadow_database"?v:_)(t.pgliteDataDirPath,n);n&&a.onNotification((d,l)=>{console.debug(`[${e}][${d}] ${l}`)});let{PGLiteSocketHandler:m,PGLiteSocketServer:s}=await import("@electric-sql/pglite-socket"),c=e==="shadow_database"?t.shadowDatabaseIdleTimeoutMillis:t.databaseIdleTimeoutMillis;E(c,a,m);let u=new s({connectionQueueTimeout:e==="shadow_database"?t.shadowDatabaseConnectTimeoutMillis:t.databaseConnectTimeoutMillis,db:a,debug:n,inspect:n,port:r});n&&(u.addEventListener("listening",d=>{let{detail:l}=d;console.debug(`[${e}] server listening on ${JSON.stringify(l)}`)}),u.addEventListener("connection",d=>{let{clientAddress:l,clientPort:P}=d.detail;console.debug(`[${e}] client connected from ${l}:${P}`)}),u.addEventListener("error",d=>{let{detail:l}=d;console.error(`[${e}] server error:`,l)}));try{await u.start()}catch(d){throw d instanceof Error&&"code"in d&&d.code==="EADDRINUSE"?new b(r):d}let p=Number(u.getServerConn().split(":").at(1));return t[e==="database"?"databasePort":"shadowDatabasePort"]=p,f(e,t,{db:a,port:p,server:u})}function f(e,t,r){let{debug:n}=t,{db:i,port:a,server:m}=r||{};return n&&console.debug(`[${e}] server started on port ${a}`),{...o,close:async()=>{let s=[];try{await m?.stop(),n&&console.debug(`[${e}] server stopped on port ${a}`)}catch(c){console.error(`[${e}] server stop error`,c),s.push(c)}if(e==="database")try{await i?.syncToFs(),n&&console.debug(`[${e}] synced to filesystem`)}catch(c){console.error(`[${e}] sync error`,c),s.push(c)}try{await i?.close(),n&&console.debug(`[${e}] closed`)}catch(c){console.error(`[${e}] close error`,c),s.push(c)}if(s.length>0)throw new AggregateError(s,`Failed to close ${e} properly`)},connectionString:D(a,y),dump:async s=>{e==="shadow_database"||!i||await $({db:i,debug:n,destinationPath:s})},port:a,prismaORMConnectionString:D(a,T),terminalCommand:`PGPASSWORD=${o.password} PGSSLMODE=${o.sslMode} psql -h localhost -p ${a} -U ${o.username} -d ${o.database}`}}function D(e,t){return`${h}:${e}/${o.database}?${t.toString()}`}async function _(e,t){let{PGlite:r}=await import("@electric-sql/pglite");return await r.create({database:o.database,dataDir:e,debug:t?5:void 0,extensions:await w(),relaxedDurability:!1,username:o.username})}async function v(e,t){let{PGlite:r}=await import("@electric-sql/pglite");return await r.create({database:o.database,dataDir:"memory://",debug:t?5:void 0,extensions:await w(),relaxedDurability:!1,username:o.username})}async function w(){let e=await Promise.all([import("@electric-sql/pglite/contrib/amcheck"),import("@electric-sql/pglite/contrib/bloom"),import("@electric-sql/pglite/contrib/btree_gin"),import("@electric-sql/pglite/contrib/btree_gist"),import("@electric-sql/pglite/contrib/citext"),import("@electric-sql/pglite/contrib/cube"),import("@electric-sql/pglite/contrib/dict_int"),import("@electric-sql/pglite/contrib/dict_xsyn"),import("@electric-sql/pglite/contrib/earthdistance"),import("@electric-sql/pglite/contrib/file_fdw"),import("@electric-sql/pglite/contrib/fuzzystrmatch"),import("@electric-sql/pglite/contrib/hstore"),import("@electric-sql/pglite/contrib/intarray"),import("@electric-sql/pglite/contrib/isn"),import("@electric-sql/pglite/contrib/lo"),import("@electric-sql/pglite/contrib/ltree"),import("@electric-sql/pglite/contrib/pageinspect"),import("@electric-sql/pglite/contrib/pg_buffercache"),import("@electric-sql/pglite/contrib/pg_freespacemap"),import("@electric-sql/pglite/contrib/pg_surgery"),import("@electric-sql/pglite/contrib/pg_trgm"),import("@electric-sql/pglite/contrib/pg_visibility"),import("@electric-sql/pglite/contrib/pg_walinspect"),import("@electric-sql/pglite/contrib/seg"),import("@electric-sql/pglite/contrib/tablefunc"),import("@electric-sql/pglite/contrib/tcn"),import("@electric-sql/pglite/contrib/tsm_system_rows"),import("@electric-sql/pglite/contrib/tsm_system_time"),import("@electric-sql/pglite/contrib/unaccent"),import("@electric-sql/pglite/contrib/uuid_ossp"),import("@electric-sql/pglite/vector")]);return Object.assign({},...e)}function E(e,t,r){if(t.__IDLE_TIMEOUT__=e,r.prototype.__ATTACH_OVERRIDDEN__)return;r.prototype.__ATTACH_OVERRIDDEN__=!0;let n=r.prototype.attach;r.prototype.attach=async function(i){let a=await n.call(this,i);if(!Number.isFinite(this.db.__IDLE_TIMEOUT__))return a;let m=null,s=()=>{m!=null&&(clearTimeout(m),m=null)},c=()=>{s(),m=setTimeout(()=>{this.dispatchEvent(new CustomEvent("close")),this.detach(!1)},this.db.__IDLE_TIMEOUT__)};return i.on("error",()=>{s()}),i.on("data",()=>{c()}),i.on("close",()=>{s()}),c(),a}}async function $(e){let{dataDir:t,db:r,debug:n,destinationPath:i}=e,a=r||await _(t,n),{pgDump:m}=await import("@electric-sql/pglite-tools/pg_dump"),s=await m({args:["--schema-only","--no-owner"],fileName:i?S(i):void 0,pg:await a.clone()});return i?(n&&console.debug(`[DB] Dumping database to ${i}`),await g(s,i)):(n&&console.debug("[DB] Dumping database to memory"),await s.text())}export{x as a,$ as b};