@coreframe/scripts 0.1.2 → 0.1.3
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.
- package/dist/db/config.d.ts +1 -2
- package/dist/db/config.js +1 -1
- package/dist/db/ensure.d.ts +5 -0
- package/dist/db/ensure.js +1 -1
- package/dist/db/local-postgres.d.ts +26 -0
- package/dist/db/local-postgres.js +1 -0
- package/dist/db/migrate-held.js +1 -1
- package/dist/db/migrate.js +1 -1
- package/dist/db/project.d.ts +13 -2
- package/dist/db/project.js +1 -1
- package/dist/db/reset.js +1 -1
- package/dist/db/seed.js +1 -1
- package/dist/deploy.js +1 -1
- package/dist/dev.js +1 -1
- package/package.json +1 -1
package/dist/db/config.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
//#region db/config.d.ts
|
|
2
|
-
declare const LOCAL_DB_DIR: string;
|
|
3
2
|
declare const MIGRATIONS_FOLDER = "drizzle";
|
|
4
3
|
declare const HELD_MIGRATIONS_FOLDER = "drizzle-hold";
|
|
5
4
|
declare const NOW: Date;
|
|
@@ -21,4 +20,4 @@ type SeedProfile = "small" | "large" | "demo" | "test";
|
|
|
21
20
|
declare function getSeedProfile(argv?: string[]): SeedProfile;
|
|
22
21
|
declare function generatedUserId(index: number): string;
|
|
23
22
|
//#endregion
|
|
24
|
-
export { HELD_MIGRATIONS_FOLDER,
|
|
23
|
+
export { HELD_MIGRATIONS_FOLDER, MIGRATIONS_FOLDER, NOW, SEED_EMAILS, SEED_IDS, SeedProfile, generatedUserId, getSeedProfile };
|
package/dist/db/config.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e
|
|
1
|
+
const e=`drizzle`,t=`drizzle-hold`,n=new Date(`2026-01-15T12:00:00.000Z`),r={adminUser:`00000000-0000-4000-8000-000000000001`,viewerUser:`00000000-0000-4000-8000-000000000002`,inactiveUser:`00000000-0000-4000-8000-000000000003`,unicodeUser:`00000000-0000-4000-8000-000000000004`,longNameUser:`00000000-0000-4000-8000-000000000005`},i={adminUser:`admin@example.com`,viewerUser:`viewer@example.com`,inactiveUser:`inactive@example.com`,unicodeUser:`unicode@example.com`,longNameUser:`long-name@example.com`};function a(e=process.argv.slice(2)){if(e.includes(`--large`))return`large`;let t=e.find(e=>e.startsWith(`--profile=`))?.slice(10)??`small`;if(t===`small`||t===`large`||t===`demo`||t===`test`)return t;throw Error(`Unknown seed profile "${t}". Expected small, large, demo, or test.`)}function o(e){return`00000000-0000-4000-8000-${String(1e3+e).padStart(12,`0`)}`}export{t as HELD_MIGRATIONS_FOLDER,e as MIGRATIONS_FOLDER,n as NOW,i as SEED_EMAILS,r as SEED_IDS,o as generatedUserId,a as getSeedProfile};
|
package/dist/db/ensure.d.ts
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
import { importProjectModule } from "../project.js";
|
|
2
|
+
import { createLocalPostgresDb } from "./local-postgres.js";
|
|
2
3
|
import { planLocalSchemaPush } from "./schema-push.js";
|
|
3
4
|
import { seedLocalDb } from "./seed.js";
|
|
4
5
|
import { setupLocalDb } from "./setup.js";
|
|
5
6
|
|
|
6
7
|
//#region db/ensure.d.ts
|
|
7
8
|
type EnsureLocalDbOptions = {
|
|
9
|
+
createLocalPostgresDb?: typeof createLocalPostgresDb;
|
|
10
|
+
env?: NodeJS.ProcessEnv;
|
|
8
11
|
importProjectModule?: typeof importProjectModule;
|
|
9
12
|
planLocalSchemaPush?: typeof planLocalSchemaPush;
|
|
10
13
|
seedLocalDb?: typeof seedLocalDb;
|
|
11
14
|
setupLocalDb?: typeof setupLocalDb;
|
|
12
15
|
};
|
|
13
16
|
declare function ensureLocalDb({
|
|
17
|
+
createLocalPostgresDb: createDb,
|
|
18
|
+
env,
|
|
14
19
|
importProjectModule: importModule,
|
|
15
20
|
planLocalSchemaPush: planSchemaPush,
|
|
16
21
|
seedLocalDb: seed,
|
package/dist/db/ensure.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{importProjectModule as e}from"../project.js";import{
|
|
2
|
+
import{importProjectModule as e}from"../project.js";import{SEED_EMAILS as t,SEED_IDS as n}from"./config.js";import{createLocalPostgresDb as r}from"./local-postgres.js";import{inferSchemaDialect as i,planLocalSchemaPush as a}from"./schema-push.js";import{seedLocalDb as o}from"./seed.js";import{setupLocalDb as s}from"./setup.js";import{eq as c}from"drizzle-orm";async function l(t=e){return{schema:await t(`src/db/schema.ts`)}}async function u(e,{users:r}){let[i]=await e.select({id:r.id}).from(r).where(c(r.email,t.adminUser)).limit(1);return i?.id===n.adminUser}async function d(e,{schema:t},n=a){let r=await n(i(t),t,e);return r.sqlStatements.length===0?(console.log(`Local database schema already in sync`),{appliedStatements:0,plan:r}):(console.log(`Local database schema drift detected; applying ${r.sqlStatements.length} statement(s)`),await r.apply(),console.log(`Local database schema synced`),{appliedStatements:r.sqlStatements.length,plan:r})}async function f({createLocalPostgresDb:t=r,env:n=process.env,importProjectModule:i=e,planLocalSchemaPush:c=a,seedLocalDb:u=o,setupLocalDb:f=s}={}){let m=await l(i),h=await t({env:n});try{await p(h,m.schema)?console.log(`Local database already set up`):(console.log(`Local database is missing or unseeded; running setup`),await f()),(await d(h,m,c)).appliedStatements>0&&!await p(h,m.schema)&&(console.log(`Local database seed data missing after schema sync; running seed`),await u())}finally{await h.$client.end()}}async function p(e,t){try{return await u(e,t)}catch{return!1}}import.meta.main&&f().catch(e=>{console.error(e),process.exit(1)});export{f as ensureLocalDb};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createProjectPostgresDrizzleDatabase } from "./project.js";
|
|
2
|
+
|
|
3
|
+
//#region db/local-postgres.d.ts
|
|
4
|
+
type LocalPostgresDb = Awaited<ReturnType<typeof createProjectPostgresDrizzleDatabase>> & {
|
|
5
|
+
$client: {
|
|
6
|
+
end(): Promise<void>;
|
|
7
|
+
};
|
|
8
|
+
select(selection: Record<string, unknown>): {
|
|
9
|
+
from(table: unknown): {
|
|
10
|
+
where(condition: unknown): {
|
|
11
|
+
limit(count: number): Promise<Array<{
|
|
12
|
+
id: string;
|
|
13
|
+
}>>;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
type LocalPostgresOptions = {
|
|
19
|
+
env?: NodeJS.ProcessEnv;
|
|
20
|
+
};
|
|
21
|
+
declare function createLocalPostgresDb({
|
|
22
|
+
env
|
|
23
|
+
}?: LocalPostgresOptions): Promise<LocalPostgresDb>;
|
|
24
|
+
declare function getLocalPostgresConnectionString(env?: NodeJS.ProcessEnv): string;
|
|
25
|
+
//#endregion
|
|
26
|
+
export { LocalPostgresDb, createLocalPostgresDb, getLocalPostgresConnectionString };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createProjectPostgresDrizzleDatabase as e}from"./project.js";async function t({env:t=process.env}={}){let r=n(t);return e({env:{...t,DATABASE_URL:r}})}function n(e=process.env){let t=e.DATABASE_URL||r(e);if(!t)throw Error(`DATABASE_URL or PGDATABASE, PGHOST, PGPORT, and PGUSER are required.`);return t}function r(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{t as createLocalPostgresDb,n as getLocalPostgresConnectionString};
|
package/dist/db/migrate-held.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{
|
|
2
|
+
import{createProjectDeployDatabase as e}from"./project.js";import{collectHeldMigrationFiles as t,formatMigrationList as n}from"../deploy/migrations.js";import{readFile as r}from"node:fs/promises";import{createHash as i}from"node:crypto";const a=`--confirm=run-held-migrations`,o=[`-- Held migration:`,`-- Safe after:`,`-- Verification:`];async function s({argv:i=process.argv.slice(2),database:o,env:s=process.env}={}){let d=await t();if(console.log(`Held migration files:`),console.log(n(d)),!i.includes(a))throw Error(`Held migrations require explicit confirmation. Re-run with ${a}.`);if(d.length===0){console.log(`No held migrations to run.`);return}let m=o??await e({env:s});try{await u(m);for(let e of d){let t=await r(e.path,`utf8`);c(t,e.relativePath);let n=l(t),i=await m.execute(f(m.dialect,e.id));if(i.rows.length===1){if(i.rows[0]?.sha256!==n)throw Error(`Held migration ${e.relativePath} changed after it was applied.`);console.log(`Skipping already-applied held migration ${e.relativePath}`);continue}console.log(`Applying held migration ${e.relativePath}`),await h(m,async r=>{await r.execute(t),await r.execute(p(m.dialect,e.id,n))})}}finally{o||await m.close?.()}}function c(e,t){let n=o.filter(t=>!e.includes(t));if(n.length>0)throw Error(`${t} is missing held migration header fields: ${n.join(`, `)}`)}function l(e){return i(`sha256`).update(e).digest(`hex`)}async function u(e){for(let t of d(e.dialect))await e.execute(t)}function d(e){switch(e){case`postgres`:return[`create schema if not exists drizzle`,`create table if not exists drizzle.__held_migrations (
|
|
3
3
|
id text primary key,
|
|
4
4
|
sha256 text not null,
|
|
5
5
|
applied_at timestamptz not null default now()
|
package/dist/db/migrate.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{
|
|
2
|
+
import{MIGRATIONS_FOLDER as e}from"./config.js";import{createLocalPostgresDb as t}from"./local-postgres.js";import{access as n}from"node:fs/promises";import{resolve as r}from"node:path";import{migrate as i}from"drizzle-orm/node-postgres/migrator";const a=r(e);async function o(){await n(a);let e=await t();try{await i(e,{migrationsFolder:a}),console.log(`Applied local migrations from ${a}`)}finally{await e.$client.end()}}import.meta.main&&o().catch(e=>{console.error(e),process.exit(1)});export{o as migrateLocalDb};
|
package/dist/db/project.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DatabaseClient } from "./client.js";
|
|
1
|
+
import { DatabaseClient, DrizzleExecutor } from "./client.js";
|
|
2
2
|
import { DatabaseConfig } from "../config.js";
|
|
3
3
|
import { importProjectModule } from "../project.js";
|
|
4
4
|
|
|
@@ -9,6 +9,12 @@ type CreateProjectDatabaseOptions = {
|
|
|
9
9
|
importProjectDependency?: ImportProjectDependency;
|
|
10
10
|
importProjectModule?: typeof importProjectModule;
|
|
11
11
|
};
|
|
12
|
+
type DrizzleDatabase = DrizzleExecutor & {
|
|
13
|
+
$client?: {
|
|
14
|
+
close?(): Promise<void> | void;
|
|
15
|
+
end?(): Promise<void>;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
12
18
|
type ImportProjectDependency = <T>(specifier: string) => Promise<T>;
|
|
13
19
|
declare function createProjectDeployDatabase({
|
|
14
20
|
config,
|
|
@@ -16,5 +22,10 @@ declare function createProjectDeployDatabase({
|
|
|
16
22
|
importProjectDependency,
|
|
17
23
|
importProjectModule: importModule
|
|
18
24
|
}?: CreateProjectDatabaseOptions): Promise<DatabaseClient>;
|
|
25
|
+
declare function createProjectPostgresDrizzleDatabase({
|
|
26
|
+
env,
|
|
27
|
+
importProjectDependency,
|
|
28
|
+
importProjectModule: importModule
|
|
29
|
+
}?: CreateProjectDatabaseOptions): Promise<DrizzleDatabase>;
|
|
19
30
|
//#endregion
|
|
20
|
-
export { CreateProjectDatabaseOptions, createProjectDeployDatabase };
|
|
31
|
+
export { CreateProjectDatabaseOptions, createProjectDeployDatabase, createProjectPostgresDrizzleDatabase };
|
package/dist/db/project.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readProjectConfig as e}from"../config.js";import{importProjectModule as t}from"../project.js";import{createDatabaseAdapter as n}from"./client.js";import{createRequire as r}from"node:module";import{resolve as i}from"node:path";import{pathToFileURL as a}from"node:url";const o=`src/db/relations.ts`;async function s({config:n,env:r=process.env,importProjectDependency:i=
|
|
1
|
+
import{readProjectConfig as e}from"../config.js";import{importProjectModule as t}from"../project.js";import{createDatabaseAdapter as n}from"./client.js";import{createRequire as r}from"node:module";import{resolve as i}from"node:path";import{pathToFileURL as a}from"node:url";const o=`src/db/relations.ts`;async function s({config:n,env:r=process.env,importProjectDependency:i=d,importProjectModule:a=t}={}){let o=(n??(await e()).database)?.dialect??`postgres`;if(o===`postgres`)return l({env:r,importModule:a,importProjectDependency:i});if(o===`sqlite`)return u({env:r,importModule:a,importProjectDependency:i});throw Error(`Unsupported database dialect "${o}".`)}async function c({env:e=process.env,importProjectDependency:n=d,importProjectModule:r=t}={}){let i=e.DATABASE_URL;if(!i)throw Error(`DATABASE_URL is required to create the PostgreSQL database.`);let[{drizzle:a},{relations:s}]=await Promise.all([n(`drizzle-orm/node-postgres`),r(o)]);return a({connection:{connectionString:i,max:1},relations:s})}async function l({env:e,importModule:t,importProjectDependency:r}){let i=await c({env:e,importProjectDependency:r,importProjectModule:t});return n({database:i,dialect:`postgres`,close:()=>i.$client?.end?.()??Promise.resolve()})}async function u({env:e,importModule:t,importProjectDependency:r}){let i=e.TURSO_DATABASE_URL??e.DATABASE_URL;if(!i)throw Error(`TURSO_DATABASE_URL or DATABASE_URL is required to create the deploy database.`);let[{createClient:a},{drizzle:s},{relations:c}]=await Promise.all([r(`@libsql/client`),r(`drizzle-orm/libsql`),t(o)]),l=a({url:i,authToken:e.TURSO_AUTH_TOKEN});return n({database:s({client:l,relations:c}),dialect:`sqlite`,close:async()=>{await l.close?.()}})}async function d(e){return await import(a(r(i(`package.json`)).resolve(e)).href)}export{s as createProjectDeployDatabase,c as createProjectPostgresDrizzleDatabase};
|
package/dist/db/reset.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{
|
|
2
|
+
import{createLocalPostgresDb as e}from"./local-postgres.js";import{sql as t}from"drizzle-orm";async function n(){let n=await e();try{await n.execute(t`drop schema if exists public cascade`),await n.execute(t`create schema public`),console.log(`Reset local PostgreSQL schema`)}finally{await n.$client.end()}}import.meta.main&&n().catch(e=>{console.error(e),process.exit(1)});export{n as resetLocalDb};
|
package/dist/db/seed.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{importProjectModule as e}from"../project.js";import{
|
|
2
|
+
import{importProjectModule as e}from"../project.js";import{getSeedProfile as t}from"./config.js";import{createLocalPostgresDb as n}from"./local-postgres.js";async function r(r=t()){let[{seedUsers:i},a]=await Promise.all([e(`scripts/db/seeds/users.ts`),n()]);try{await i(a,r),console.log(`Seeded local database with "${r}" profile`)}finally{await a.$client.end()}}import.meta.main&&r().catch(e=>{console.error(e),process.exit(1)});export{r as seedLocalDb};
|
package/dist/deploy.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{readProjectConfig as e}from"./config.js";import{
|
|
2
|
+
import{readProjectConfig as e}from"./config.js";import{createProjectDeployDatabase as t}from"./db/project.js";import{collectDeployMigrationFiles as n,formatMigrationList as r,formatMigrationScanFailures as i,scanDeployMigrationFiles as a}from"./deploy/migrations.js";import{runPostDeployChecks as o}from"./deploy/checks.js";import{resolveDeployConfig as s}from"./deploy/config.js";import{filterPendingMigrations as c,readAppliedMigrationNames as l}from"./deploy/pending-migrations.js";import{parseTauriReleasePlatform as u,prepareTauriRelease as d,resolveTauriReleasePlan as f,restoreTauriReleaseMetadata as p,uploadTauriReleaseToB2 as m,validateTauriReleasePlan as h,writeTauriReleaseMetadata as g}from"./deploy/tauri-release.js";import{nextReleaseVersion as _,readPackageJson as v,releaseName as y,writePackageVersion as b}from"./deploy/version.js";import{writeFile as x}from"node:fs/promises";import S from"nano-spawn";import*as C from"@clack/prompts";const w=`package.json`;async function T(n=process.argv.slice(2),r=process.env){let c=E(n),{packageJson:l,source:u}=await v(w),T=_(l.version),D=y(l.name,T),O=r.DEPLOY_ENV??`production`,A=F(r,D,l.name,T),L=await e(),R=s(L.deploy??{},r),z=f({args:c,config:R.tauriRelease,env:r}),B=!1,V={files:[]};C.intro(`Deploy ${D}`),N(c),P(r,[`POSTHOG_API_KEY`,`POSTHOG_PROJECT_ID`]),await M(),await h(z);let H=await k(await t({config:L.database,env:r})),U=await a(H);if(U.length>0)throw Error(`Pending deploy migrations contain unsafe SQL. Move unsafe statements to held migrations.\n${i(U)}`);let W=await j(c,H);try{await b(w,l,T),V=await g(z,T),C.log.step(`Running pre-deploy build`),await S(`pnpm`,[`build`],{env:I(A),stdio:`inherit`});let e=z.enabled?await d({env:I(A),plan:z,releaseName:D,version:T}):void 0;C.log.step(`Running release build and uploading PostHog source maps`),B=!0,await S(`pnpm`,[`build`],{env:A,stdio:`inherit`}),W&&(C.log.step(`Running deploy-safe database migrations`),await S(`pnpm`,[`db`,`migrate`],{env:A,stdio:`inherit`})),C.log.step(`Deploying Worker and static assets to Cloudflare`),await S(`pnpm`,[`exec`,`wrangler`,`deploy`,`--strict`,`--keep-vars`,`--tag`,D,`--message`,`Deploy ${D}`,`--var`,`POSTHOG_RELEASE:${D}`],{env:A,stdio:`inherit`}),c.skipPostDeployChecks||(C.log.step(`Running post-deploy checks`),await o(R,{environment:O,productionUrl:R.productionUrl,releaseName:D,version:T})),e&&(C.log.step(`Uploading Tauri release artifacts to Backblaze B2`),await m(z,e)),C.outro(`Deployed ${D}`)}catch(e){throw B||(await x(w,u),await p(V)),e}}function E(e){return{runMigrations:e.includes(`--run-migrations`)||e.includes(`--yes`),skipMigrations:e.includes(`--skip-migrations`),skipPostDeployChecks:e.includes(`--skip-post-deploy-checks`),tauriLocalPlatforms:D(e,`--tauri-local-platform`).map(e=>u(e)),tauriWorkflowName:O(e,`--tauri-workflow-name`),tauriWorkflowPlatforms:D(e,`--tauri-workflow-platform`).map(e=>u(e)),tauriWorkflowRef:O(e,`--tauri-workflow-ref`),yes:e.includes(`--yes`)}}function D(e,t){let n=[];for(let r=0;r<e.length;r+=1){let i=e[r];if(i===t){let i=e[r+1];if(!i||i.startsWith(`--`))throw Error(`${t} requires a value.`);n.push(...i.split(`,`).filter(Boolean)),r+=1;continue}i.startsWith(`${t}=`)&&n.push(...i.slice(t.length+1).split(`,`).filter(Boolean))}return n}function O(e,t){let n=D(e,t);if(n.length>1)throw Error(`${t} can only be provided once.`);return n[0]}async function k(e){try{return await A(e)}finally{await e.close?.()}}async function A(e){return c(await n(),await l(e))}async function j(e,t){if(t.length===0)return C.log.info(`No pending deploy migrations.`),!1;if(C.note(r(t),`Pending deploy migrations`),e.runMigrations)return!0;if(e.skipMigrations)return!1;if(!process.stdout.isTTY)throw Error(`Pending migrations require --run-migrations or --skip-migrations in noninteractive deploys.`);let n=await C.confirm({initialValue:!0,message:`Run these deploy-safe database migrations before Cloudflare deploy?`});if(C.isCancel(n))throw C.cancel(`Deploy cancelled.`),Error(`Deploy cancelled.`);return n}async function M(){let{stdout:e}=await S(`git`,[`status`,`--porcelain`],{stdin:`ignore`});if(e.trim().length>0)throw Error(`Deploy requires a clean git tree before the release version is applied.`)}function N(e){if(e.runMigrations&&e.skipMigrations)throw Error(`Use only one of --run-migrations, --skip-migrations, or --yes.`)}function P(e,t){let n=t.filter(t=>!e[t]);if(n.length>0)throw Error(`Missing required deploy environment variables: ${n.join(`, `)}`);return Object.fromEntries(t.map(t=>[t,e[t]]))}function F(e,t,n,r){return{...e,POSTHOG_RELEASE:t,POSTHOG_RELEASE_NAME:e.POSTHOG_RELEASE_NAME??n,POSTHOG_RELEASE_VERSION:e.POSTHOG_RELEASE_VERSION??r}}function I(e){let{POSTHOG_API_KEY:t,POSTHOG_PROJECT_ID:n,...r}=e;return r}import.meta.main&&T().catch(e=>{console.error(e),process.exit(1)});export{T as deployProject,E as parseDeployArgs,e as readProjectConfig};
|
package/dist/dev.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{readProjectConfig as e}from"./config.js";import{mkdir as t}from"node:fs/promises";import n from"node:path";import r from"node:process";import{createWriteStream as i}from"node:fs";import{spawn as a}from"node:child_process";const o=n.resolve(`node_modules`,`.bin`),s=r.platform===`win32`?`pnpm.cmd`:`pnpm`,c=r.platform===`win32`?`react-router.cmd`:`react-router`,l=r.platform===`win32`?`turso.cmd`:`turso`;async function u({cwd:t=r.cwd(),env:i=r.env,logPath:u=`.agents/logs/dev-server.log`,platform:_=`web`,readProjectConfig:v=e,spawn:y=a}={}){let b=i.PATH??i.Path??``,x=`TAURI_ENV_PLATFORM`in i?void 0:await f(u),S;try{if(_===`web`){(await v({cwd:t})).database?.dialect===`sqlite`&&(S=g(y,l,[`dev`],{cwd:t,env:i,log:x})
|
|
2
|
+
import{readProjectConfig as e}from"./config.js";import{mkdir as t}from"node:fs/promises";import n from"node:path";import r from"node:process";import{createWriteStream as i}from"node:fs";import{spawn as a}from"node:child_process";const o=n.resolve(`node_modules`,`.bin`),s=r.platform===`win32`?`pnpm.cmd`:`pnpm`,c=r.platform===`win32`?`react-router.cmd`:`react-router`,l=r.platform===`win32`?`turso.cmd`:`turso`;async function u({cwd:t=r.cwd(),env:i=r.env,logPath:u=`.agents/logs/dev-server.log`,platform:_=`web`,readProjectConfig:v=e,spawn:y=a}={}){let b=i.PATH??i.Path??``,x=`TAURI_ENV_PLATFORM`in i?void 0:await f(u),S;try{if(_===`web`){(await v({cwd:t})).database?.dialect===`sqlite`&&(S=g(y,l,[`dev`],{cwd:t,env:i,log:x}),await h(y,s,[`db`,`ensure`],{cwd:t,env:i,log:x})),await d(h(y,c,[`dev`],{cwd:t,env:{...i,CLOUDFLARE_ENV:`development`,PATH:o+n.delimiter+b},log:x}),S);return}await h(y,s,m(_),{cwd:t,env:i,log:x})}finally{await S?.stop(),await p(x)}}async function d(e,t){if(!t){await e;return}await Promise.race([e,t.exited.then(()=>{throw Error(`turso dev exited before the web dev server stopped`)},e=>{throw e})])}async function f(e){return await t(n.dirname(e),{recursive:!0}),i(e,{flags:`w`})}function p(e){return e?new Promise((t,n)=>{e.once(`error`,n),e.end(t)}):Promise.resolve()}function m(e){return[`--dir=tauri`,`tauri`,...e===`desktop`?[]:[e],`dev`]}function h(e,t,n,{cwd:r,env:i,log:a}){return g(e,t,n,{cwd:r,env:i,log:a}).exited}function g(e,t,n,{cwd:i,env:a,log:o}){let s=!1,c=e(t,n,{cwd:i,env:a,stdio:o?[`inherit`,`pipe`,`pipe`]:`inherit`}),l=new Promise((e,i)=>{if(o){if(!c.stdout||!c.stderr){i(Error(`${[t,...n].join(` `)} did not provide output streams`));return}c.stdout.on(`data`,e=>{r.stdout.write(e),o.write(e)}),c.stderr.on(`data`,e=>{r.stderr.write(e),o.write(e)})}c.on(`error`,e=>{s=!0,i(e)}),c.on(`close`,(r,a)=>{if(s=!0,r===0){e();return}let o=[t,...n].join(` `);i(Error(`${o} failed${a?` with signal ${a}`:` with exit code ${r??1}`}`))})});return l.catch(()=>void 0),{exited:l,async stop(){s||c.kill?.(`SIGTERM`);try{await l}catch{}}}}import.meta.main&&u().catch(e=>{console.error(e),r.exit(1)});export{u as runDevServer};
|