@coreframe/scripts 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  import { CoreframeConfig, readProjectConfig } from "../config.js";
2
2
  import { createProjectPostgresDrizzleDatabase } from "./project.js";
3
- import { rm } from "node:fs/promises";
3
+ import { readFile, rm } from "node:fs/promises";
4
4
  import { tmpdir } from "node:os";
5
5
  import { LocalPostgresEnv, startPostgres } from "local-postgres";
6
6
 
@@ -31,19 +31,24 @@ type StartProjectPostgresOptions = {
31
31
  config?: CoreframeConfig;
32
32
  cwd?: string;
33
33
  env?: NodeJS.ProcessEnv;
34
+ kill?: typeof process.kill;
34
35
  readProjectConfig?: typeof readProjectConfig;
36
+ readFile?: typeof readFile;
37
+ rm?: typeof rm;
35
38
  startPostgres?: typeof startPostgres;
36
39
  };
37
40
  type StartTemporaryProjectPostgresOptions = StartProjectPostgresOptions & {
38
41
  mkdtemp?: (prefix: string) => Promise<string>;
39
- rm?: typeof rm;
40
42
  tmpdir?: typeof tmpdir;
41
43
  };
42
44
  declare function startProjectPostgres({
43
45
  config,
44
46
  cwd,
45
47
  env,
48
+ kill,
46
49
  readProjectConfig,
50
+ readFile,
51
+ rm,
47
52
  startPostgres
48
53
  }?: StartProjectPostgresOptions): Promise<ProjectPostgresSidecar>;
49
54
  declare function startTemporaryProjectPostgres({
@@ -1 +1,2 @@
1
- import{readProjectConfig as e}from"../config.js";import{createProjectPostgresDrizzleDatabase as t}from"./project.js";import{mkdtemp as n,rm as r}from"node:fs/promises";import i from"node:path";import{tmpdir as a}from"node:os";import{startPostgres as o}from"local-postgres";const s=`COREFRAME_LOCAL_POSTGRES`,c=`coreframe`,l={name:`coreframe`,password:`coreframe`},u={mkdtemp:n,readProjectConfig:e,rm:r,startPostgres:o,tmpdir:a};async function d({config:e,cwd:t=process.cwd(),env:n=process.env,readProjectConfig:r=u.readProjectConfig,startPostgres:a=u.startPostgres}={}){return n.COREFRAME_LOCAL_POSTGRES===`1`||((e??await r({cwd:t})).database?.dialect??`postgres`)!==`postgres`?g(n):h(n,await a({dataDir:i.resolve(t,`.postgres`),database:c,log:`ignore`,postgres:{strategy:`prefer-local`},superuser:l}))}async function f({config:e,cwd:t=process.cwd(),env:n=process.env,mkdtemp:r=u.mkdtemp,readProjectConfig:a=u.readProjectConfig,rm:o=u.rm,startPostgres:s=u.startPostgres,tmpdir:d=u.tmpdir}={}){let f=(e??await a({cwd:t})).database?.dialect??`postgres`;if(f!==`postgres`)throw Error(`Temporary schema push checks require PostgreSQL, but this project uses ${f}.`);let p=await r(i.join(d(),`coreframe-schema-check-`));try{let e=h(n,await s({dataDir:p,database:c,log:`ignore`,postgres:{strategy:`prefer-local`},superuser:l}));return{env:e.env,async[Symbol.asyncDispose](){try{await e[Symbol.asyncDispose]()}finally{await o(p,{force:!0,recursive:!0})}}}}catch(e){throw await o(p,{force:!0,recursive:!0}),e}}function p(e,t){return{...e,...t,[s]:`1`}}async function m({env:e=process.env}={}){let n=_(e);return t({env:{...e,DATABASE_URL:n}})}function h(e,t){return{env:p(e,t.env),async[Symbol.asyncDispose](){await t[Symbol.asyncDispose]()}}}function g(e){return{env:e,async[Symbol.asyncDispose](){}}}function _(e=process.env){let t=e.DATABASE_URL||v(e);if(!t)throw Error(`DATABASE_URL or PGDATABASE, PGHOST, PGPORT, and PGUSER are required.`);return t}function v(e){let{PGDATABASE:t,PGHOST:n,PGPASSWORD:r,PGPORT:i,PGUSER:a}=e;if(!t||!n||!i||!a)return;let o=new URL(`postgresql://${n}:${i}/${t}`);return o.username=a,r&&(o.password=r),o.href}export{s as LOCAL_POSTGRES_ENV_FLAG,m as createLocalPostgresDb,p as createLocalPostgresEnv,_ as getLocalPostgresConnectionString,d as startProjectPostgres,f as startTemporaryProjectPostgres};
1
+ import{readProjectConfig as e}from"../config.js";import{createProjectPostgresDrizzleDatabase as t}from"./project.js";import{mkdtemp as n,readFile as r,rm as i}from"node:fs/promises";import a from"node:path";import{tmpdir as o}from"node:os";import{startPostgres as s}from"local-postgres";const c=`COREFRAME_LOCAL_POSTGRES`,l=`coreframe`,u={name:`coreframe`,password:`coreframe`},d={kill:process.kill,mkdtemp:n,readFile:r,readProjectConfig:e,rm:i,startPostgres:s,tmpdir:o};async function f({config:e,cwd:t=process.cwd(),env:n=process.env,kill:r=d.kill,readProjectConfig:i=d.readProjectConfig,readFile:o=d.readFile,rm:s=d.rm,startPostgres:c=d.startPostgres}={}){if(n.COREFRAME_LOCAL_POSTGRES===`1`||((e??await i({cwd:t})).database?.dialect??`postgres`)!==`postgres`)return _(n);let f=a.resolve(t,`.postgres`),p=await v(f,o,r);if(p!==void 0)throw Error(`PostgreSQL is already running for this project (PID ${p}). Stop the other top-level \`coreframe dev\` process before starting another.`);let m=a.join(f,`postgres.log`);await s(m,{force:!0});let h;try{h=await c({dataDir:f,database:l,log:{filePath:m},postgres:{strategy:`prefer-local`},superuser:u})}catch(e){throw await y(e,m,o)}return g(n,h)}async function p({config:e,cwd:t=process.cwd(),env:n=process.env,mkdtemp:r=d.mkdtemp,readProjectConfig:i=d.readProjectConfig,rm:o=d.rm,startPostgres:s=d.startPostgres,tmpdir:c=d.tmpdir}={}){let f=(e??await i({cwd:t})).database?.dialect??`postgres`;if(f!==`postgres`)throw Error(`Temporary schema push checks require PostgreSQL, but this project uses ${f}.`);let p=await r(a.join(c(),`coreframe-schema-check-`));try{let e=g(n,await s({dataDir:p,database:l,log:`ignore`,postgres:{strategy:`prefer-local`},superuser:u}));return{env:e.env,async[Symbol.asyncDispose](){try{await e[Symbol.asyncDispose]()}finally{await o(p,{force:!0,recursive:!0})}}}}catch(e){throw await o(p,{force:!0,recursive:!0}),e}}function m(e,t){return{...e,...t,[c]:`1`}}async function h({env:e=process.env}={}){let n=x(e);return t({env:{...e,DATABASE_URL:n}})}function g(e,t){return{env:m(e,t.env),async[Symbol.asyncDispose](){await t[Symbol.asyncDispose]()}}}function _(e){return{env:e,async[Symbol.asyncDispose](){}}}async function v(e,t,n){let r;try{r=await t(a.join(e,`postmaster.pid`),`utf8`)}catch{return}let i=Number(r.split(`
2
+ `,1)[0]);if(!(!Number.isSafeInteger(i)||i<=0))try{return n(i,0),i}catch(e){return b(e)&&e.code===`EPERM`?i:void 0}}async function y(e,t,n){let r=e instanceof Error?e.message:String(e),i;try{i=(await n(t,`utf8`)).trim()||void 0}catch{}let a=i?`\n\nPostgreSQL output:\n${i}`:``;return Error(`Local PostgreSQL failed to start: ${r}${a}\n\nPostgreSQL log: ${t}`,{cause:e})}function b(e){return e instanceof Error}function x(e=process.env){let t=e.DATABASE_URL||S(e);if(!t)throw Error(`DATABASE_URL or PGDATABASE, PGHOST, PGPORT, and PGUSER are required.`);return t}function S(e){let{PGDATABASE:t,PGHOST:n,PGPASSWORD:r,PGPORT:i,PGUSER:a}=e;if(!t||!n||!i||!a)return;let o=new URL(`postgresql://${n}:${i}/${t}`);return o.username=a,r&&(o.password=r),o.href}export{c as LOCAL_POSTGRES_ENV_FLAG,h as createLocalPostgresDb,m as createLocalPostgresEnv,x as getLocalPostgresConnectionString,f as startProjectPostgres,p as startTemporaryProjectPostgres};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coreframe/scripts",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "bin": {
5
5
  "coreframe": "./bin/coreframe.js"
6
6
  },