@coreframe/scripts 0.1.49 → 0.2.0
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/coreframe.d.ts +233 -41
- package/dist/coreframe.js +13 -2
- package/package.json +17 -30
- package/dist/_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/usingCtx.js +0 -1
- package/dist/assets/contracts.d.ts +0 -187
- package/dist/assets/contracts.js +0 -1
- package/dist/assets/credentials.d.ts +0 -35
- package/dist/assets/credentials.js +0 -1
- package/dist/assets/images.d.ts +0 -32
- package/dist/assets/images.js +0 -1
- package/dist/assets/media.d.ts +0 -42
- package/dist/assets/media.js +0 -1
- package/dist/assets/project.d.ts +0 -54
- package/dist/assets/project.js +0 -3
- package/dist/assets/storage.d.ts +0 -60
- package/dist/assets/storage.js +0 -1
- package/dist/assets/workflows.d.ts +0 -69
- package/dist/assets/workflows.js +0 -1
- package/dist/assets.d.ts +0 -4
- package/dist/assets.js +0 -1
- package/dist/config.d.ts +0 -49
- package/dist/config.js +0 -1
- package/dist/db/apply-seed.d.ts +0 -8
- package/dist/db/apply-seed.js +0 -1
- package/dist/db/client.d.ts +0 -30
- package/dist/db/client.js +0 -1
- package/dist/db/config.d.ts +0 -24
- package/dist/db/config.js +0 -1
- package/dist/db/drizzle-kit.d.ts +0 -10
- package/dist/db/drizzle-kit.js +0 -2
- package/dist/db/ensure.d.ts +0 -9
- package/dist/db/ensure.js +0 -2
- package/dist/db/error.d.ts +0 -4
- package/dist/db/error.js +0 -1
- package/dist/db/local-postgres.d.ts +0 -65
- package/dist/db/local-postgres.js +0 -1
- package/dist/db/migrate-held.d.ts +0 -16
- package/dist/db/migrate-held.js +0 -10
- package/dist/db/migrate.d.ts +0 -9
- package/dist/db/migrate.js +0 -2
- package/dist/db/project.d.ts +0 -23
- package/dist/db/project.js +0 -1
- package/dist/db/reset.d.ts +0 -9
- package/dist/db/reset.js +0 -2
- package/dist/db/schema-check.d.ts +0 -11
- package/dist/db/schema-check.js +0 -2
- package/dist/db/schema-push.d.ts +0 -22
- package/dist/db/schema-push.js +0 -1
- package/dist/db/seed.d.ts +0 -19
- package/dist/db/seed.js +0 -2
- package/dist/db/setup.d.ts +0 -11
- package/dist/db/setup.js +0 -2
- package/dist/deploy/access-token-secret.d.ts +0 -39
- package/dist/deploy/access-token-secret.js +0 -1
- package/dist/deploy/check-migrations.d.ts +0 -4
- package/dist/deploy/check-migrations.js +0 -2
- package/dist/deploy/checks.d.ts +0 -8
- package/dist/deploy/checks.js +0 -1
- package/dist/deploy/config.d.ts +0 -68
- package/dist/deploy/config.js +0 -1
- package/dist/deploy/migrations.d.ts +0 -24
- package/dist/deploy/migrations.js +0 -4
- package/dist/deploy/pending-migrations.d.ts +0 -9
- package/dist/deploy/pending-migrations.js +0 -1
- package/dist/deploy/tauri-release.d.ts +0 -106
- package/dist/deploy/tauri-release.js +0 -1
- package/dist/deploy/version.d.ts +0 -24
- package/dist/deploy/version.js +0 -1
- package/dist/deploy.d.ts +0 -21
- package/dist/deploy.js +0 -3
- package/dist/dev-device.d.ts +0 -34
- package/dist/dev-device.js +0 -1
- package/dist/dev-https.d.ts +0 -17
- package/dist/dev-https.js +0 -1
- package/dist/dev-lock.d.ts +0 -28
- package/dist/dev-lock.js +0 -1
- package/dist/dev-timing.d.ts +0 -25
- package/dist/dev-timing.js +0 -1
- package/dist/dev.d.ts +0 -39
- package/dist/dev.js +0 -3
- package/dist/environment.d.ts +0 -27
- package/dist/environment.js +0 -1
- package/dist/i18n/catalogs.d.ts +0 -60
- package/dist/i18n/catalogs.js +0 -1
- package/dist/i18n/contracts.d.ts +0 -60
- package/dist/i18n/contracts.js +0 -1
- package/dist/i18n/paths.d.ts +0 -12
- package/dist/i18n/paths.js +0 -1
- package/dist/i18n/storage.d.ts +0 -117
- package/dist/i18n/storage.js +0 -1
- package/dist/i18n/workflows.d.ts +0 -46
- package/dist/i18n/workflows.js +0 -1
- package/dist/managed-dev-protocol.d.ts +0 -135
- package/dist/managed-dev-protocol.js +0 -1
- package/dist/managed-dev.d.ts +0 -48
- package/dist/managed-dev.js +0 -5
- package/dist/private-object-store.d.ts +0 -28
- package/dist/private-object-store.js +0 -1
- package/dist/project.d.ts +0 -5
- package/dist/project.js +0 -1
- package/dist/recipes/apply.d.ts +0 -26
- package/dist/recipes/apply.js +0 -2
- package/dist/recipes/list.d.ts +0 -14
- package/dist/recipes/list.js +0 -1
- package/dist/recipes/manifest.d.ts +0 -14
- package/dist/recipes/manifest.js +0 -1
- package/dist/recipes/source.d.ts +0 -22
- package/dist/recipes/source.js +0 -1
- package/dist/runner.d.ts +0 -20
- package/dist/runner.js +0 -1
- package/dist/staging.d.ts +0 -33
- package/dist/staging.js +0 -3
- package/dist/tauri-dev-output.d.ts +0 -21
- package/dist/tauri-dev-output.js +0 -2
- package/dist/typecheck.d.ts +0 -4
- package/dist/typecheck.js +0 -2
- package/dist/upgrade/check-skill-current.d.ts +0 -11
- package/dist/upgrade/check-skill-current.js +0 -2
- package/dist/upgrade/ensure-template-remote.d.ts +0 -13
- package/dist/upgrade/ensure-template-remote.js +0 -2
- package/dist/upgrade/fast-forward-template-files.d.ts +0 -9
- package/dist/upgrade/fast-forward-template-files.js +0 -2
- package/dist/upgrade/sync-coreframe-packages.d.ts +0 -8
- package/dist/upgrade/sync-coreframe-packages.js +0 -4
- package/dist/upgrade/template-ref.d.ts +0 -6
- package/dist/upgrade/template-ref.js +0 -1
- package/dist/user-preferences.d.ts +0 -8
- package/dist/user-preferences.js +0 -1
- package/dist/worker-environment.d.ts +0 -95
- package/dist/worker-environment.js +0 -1
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { DrizzleExecutor } from "./client.js";
|
|
2
|
-
import { CoreframeConfig } from "../config.js";
|
|
3
|
-
import { createProjectPostgresDrizzleDatabase } from "./project.js";
|
|
4
|
-
import { LocalPostgresEnv, PostgresOutputTarget } from "local-postgres";
|
|
5
|
-
|
|
6
|
-
//#region db/local-postgres.d.ts
|
|
7
|
-
declare const LOCAL_POSTGRES_ENV_FLAG = "COREFRAME_LOCAL_POSTGRES";
|
|
8
|
-
type LocalPostgresDb = Awaited<ReturnType<typeof createProjectPostgresDrizzleDatabase>> & {
|
|
9
|
-
$client: {
|
|
10
|
-
end(): Promise<void>;
|
|
11
|
-
};
|
|
12
|
-
transaction<Result>(run: (database: DrizzleExecutor) => Promise<Result>): Promise<Result>;
|
|
13
|
-
select(selection: Record<string, unknown>): {
|
|
14
|
-
from(table: unknown): {
|
|
15
|
-
where(condition: unknown): {
|
|
16
|
-
limit(count: number): Promise<Array<{
|
|
17
|
-
id: string;
|
|
18
|
-
}>>;
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
|
-
};
|
|
23
|
-
type LocalPostgresOptions = {
|
|
24
|
-
env?: NodeJS.ProcessEnv;
|
|
25
|
-
};
|
|
26
|
-
type ProjectPostgresSidecar = {
|
|
27
|
-
env: NodeJS.ProcessEnv;
|
|
28
|
-
[Symbol.asyncDispose](): Promise<void>;
|
|
29
|
-
};
|
|
30
|
-
type StartProjectPostgresOptions = {
|
|
31
|
-
config?: CoreframeConfig;
|
|
32
|
-
cwd?: string;
|
|
33
|
-
env?: NodeJS.ProcessEnv;
|
|
34
|
-
failIfRunning?: boolean;
|
|
35
|
-
postgresOutput?: PostgresOutputTarget;
|
|
36
|
-
};
|
|
37
|
-
type StartTemporaryProjectPostgresOptions = StartProjectPostgresOptions;
|
|
38
|
-
declare class ProjectPostgresAlreadyRunningError extends Error {
|
|
39
|
-
readonly dataDir: string;
|
|
40
|
-
readonly pid: number;
|
|
41
|
-
constructor(dataDir: string, pid: number, options?: ErrorOptions);
|
|
42
|
-
}
|
|
43
|
-
declare function startProjectPostgres({
|
|
44
|
-
config,
|
|
45
|
-
cwd,
|
|
46
|
-
env,
|
|
47
|
-
failIfRunning,
|
|
48
|
-
postgresOutput
|
|
49
|
-
}?: StartProjectPostgresOptions): Promise<ProjectPostgresSidecar>;
|
|
50
|
-
declare function stopProjectPostgres({
|
|
51
|
-
dataDir,
|
|
52
|
-
pid
|
|
53
|
-
}: ProjectPostgresAlreadyRunningError): Promise<void>;
|
|
54
|
-
declare function startTemporaryProjectPostgres({
|
|
55
|
-
config,
|
|
56
|
-
cwd,
|
|
57
|
-
env
|
|
58
|
-
}?: StartTemporaryProjectPostgresOptions): Promise<ProjectPostgresSidecar>;
|
|
59
|
-
declare function createLocalPostgresEnv(env: NodeJS.ProcessEnv, postgresEnv: LocalPostgresEnv): NodeJS.ProcessEnv;
|
|
60
|
-
declare function createLocalPostgresDb({
|
|
61
|
-
env
|
|
62
|
-
}?: LocalPostgresOptions): Promise<LocalPostgresDb>;
|
|
63
|
-
declare function getLocalPostgresConnectionString(env?: NodeJS.ProcessEnv): string;
|
|
64
|
-
//#endregion
|
|
65
|
-
export { LOCAL_POSTGRES_ENV_FLAG, LocalPostgresDb, ProjectPostgresAlreadyRunningError, ProjectPostgresSidecar, StartProjectPostgresOptions, StartTemporaryProjectPostgresOptions, createLocalPostgresDb, createLocalPostgresEnv, getLocalPostgresConnectionString, startProjectPostgres, startTemporaryProjectPostgres, stopProjectPostgres };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{readProjectConfig as e}from"../config.js";import{fs as t,os as n}from"../environment.js";import{createProjectPostgresDrizzleDatabase as r}from"./project.js";import i from"node:path";import{startPostgres as a}from"local-postgres";import{PostgresDataDirInUseError as o,stopPostgresDataDir as s}from"local-postgres/core";const c=`COREFRAME_LOCAL_POSTGRES`,l=`coreframe`,u=2e3,d=4e3,f=new Map,p={name:`coreframe`,password:`coreframe`};var m=class extends Error{dataDir;pid;constructor(e,t,n){super(`PostgreSQL is already running for this project (PID ${t}). Stop the other top-level \`coreframe dev\` process before starting another.`,n),this.name=`ProjectPostgresAlreadyRunningError`,this.dataDir=e,this.pid=t}};async function h({config:n,cwd:r=process.cwd(),env:o=process.env,failIfRunning:s=!1,postgresOutput:c}={}){if(o.COREFRAME_LOCAL_POSTGRES===`1`||((n??await e({cwd:r})).database?.dialect??`postgres`)!==`postgres`)return w(o);let d=i.resolve(r,`.coreframe/postgres`),f=await T(d);if(f){if(s)throw new m(d,f.pid);return w(E(o,d,f))}let h=i.join(d,`postgres.log`);await t.rm(h,{force:!0});let g;try{g=await a({dataDir:d,database:l,postgresOutput:c??{filePath:h},postgres:{strategy:`prefer-local`},stopTimeoutMs:u,superuser:p})}catch(e){throw await D(e,c?void 0:h)}return b(o,g)}async function g({dataDir:e,pid:t}){let n=`${e}\0${t}`,r=f.get(n);if(r){await r;return}let i=S(e,t);f.set(n,i);try{await i}finally{f.get(n)===i&&f.delete(n)}}async function _({config:r,cwd:o=process.cwd(),env:s=process.env}={}){let c=(r??await e({cwd:o})).database?.dialect??`postgres`;if(c!==`postgres`)throw Error(`Temporary schema push checks require PostgreSQL, but this project uses ${c}.`);let d=await t.mkdtemp(i.join(n.tmpdir(),`coreframe-schema-check-`));try{let e=b(s,await a({dataDir:d,database:l,postgresOutput:`ignore`,postgres:{strategy:`prefer-local`},stopTimeoutMs:u,superuser:p}));return{env:e.env,async[Symbol.asyncDispose](){await e[Symbol.asyncDispose](),await t.rm(d,{force:!0,recursive:!0})}}}catch(e){throw await C(d,e),e}}function v(e,t){return{...e,...t,[c]:`1`}}async function y({env:e=process.env}={}){let t=k(e);return r({env:{...e,DATABASE_URL:t}})}function b(e,t){let n;return{env:v(e,t.env),async[Symbol.asyncDispose](){n??=x(t),await n}}}async function x(e){let t;try{await e[Symbol.asyncDispose]()}catch(e){t=e}if(e.pid===void 0){if(t)throw t;return}try{await s({dataDir:e.dataDir,expectedPid:e.pid,mode:`immediate`,timeoutMs:d})}catch(n){throw t?AggregateError([t,n],`Failed to stop PostgreSQL process ${e.pid}.`):n}}async function S(e,t){try{await s({dataDir:e,expectedPid:t,mode:`fast`,timeoutMs:d})}catch(n){try{await s({dataDir:e,expectedPid:t,mode:`immediate`,timeoutMs:d})}catch(e){throw AggregateError([n,e],`Failed to stop PostgreSQL process ${t}.`)}}}async function C(e,n){try{await s({dataDir:e,mode:`immediate`,timeoutMs:d})}catch(t){throw AggregateError([n,t],`Temporary PostgreSQL failed to start and could not be stopped for ${e}.`)}await t.rm(e,{force:!0,recursive:!0})}function w(e){return{env:e,async[Symbol.asyncDispose](){}}}async function T(e){let r;try{r=await t.readFile(i.join(e,`postmaster.pid`),`utf8`)}catch{return}let[a,,,o,,s]=r.split(/\r?\n/),c=Number(a);if(!Number.isSafeInteger(c)||c<=0)return;try{n.kill(c,0)}catch(e){if(!O(e)||e.code!==`EPERM`)return}let l=Number(o);if(!Number.isSafeInteger(l)||l<=0||l>65535||!s)throw Error(`Cannot read connection details for PostgreSQL process ${c} from ${e}.`);return{host:s,pid:c,port:l}}function E(e,t,{host:n,port:r}){let i=new URL(`postgresql://${n}:${r}/${l}`);return i.username=p.name,i.password=p.password,v(e,{DATABASE_URL:i.href,PGDATA:t,PGDATABASE:l,PGHOST:n,PGPASSWORD:p.password,PGPORT:String(r),PGUSER:p.name})}async function D(e,n){if(e instanceof o)return new m(e.dataDir,e.pid,{cause:e});let r=e instanceof Error?e.message:String(e),i;if(n)try{i=(await t.readFile(n,`utf8`)).trim()||void 0}catch{}let a=i?`\n\nPostgreSQL output:\n${i}`:``,s=n?`\n\nPostgreSQL log: ${n}`:``;return Error(`Local PostgreSQL failed to start: ${r}${a}${s}`,{cause:e})}function O(e){return e instanceof Error}function k(e=process.env){let t=e.DATABASE_URL||A(e);if(!t)throw Error(`DATABASE_URL or PGDATABASE, PGHOST, PGPORT, and PGUSER are required.`);return t}function A(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,m as ProjectPostgresAlreadyRunningError,y as createLocalPostgresDb,v as createLocalPostgresEnv,k as getLocalPostgresConnectionString,h as startProjectPostgres,_ as startTemporaryProjectPostgres,g as stopProjectPostgres};
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { DatabaseDialect } from "./client.js";
|
|
2
|
-
|
|
3
|
-
//#region db/migrate-held.d.ts
|
|
4
|
-
type MigrateHeldOptions = {
|
|
5
|
-
argv?: string[];
|
|
6
|
-
env?: NodeJS.ProcessEnv;
|
|
7
|
-
};
|
|
8
|
-
declare function migrateHeldMigrations({
|
|
9
|
-
argv,
|
|
10
|
-
env
|
|
11
|
-
}?: MigrateHeldOptions): Promise<void>;
|
|
12
|
-
declare function validateHeldMigrationHeader(sql: string, relativePath: string): void;
|
|
13
|
-
declare function heldMigrationSelectQuery(dialect: DatabaseDialect, id: string): string;
|
|
14
|
-
declare function heldMigrationInsertQuery(dialect: DatabaseDialect, id: string, sha256: string): string;
|
|
15
|
-
//#endregion
|
|
16
|
-
export { heldMigrationInsertQuery, heldMigrationSelectQuery, migrateHeldMigrations, validateHeldMigrationHeader };
|
package/dist/db/migrate-held.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import{createProjectDeployDatabase as e}from"./project.js";import{collectHeldMigrationFiles as t,formatMigrationList as n}from"../deploy/migrations.js";import{createHash as r}from"node:crypto";import{readFile as i}from"node:fs/promises";const a=`--confirm=run-held-migrations`,o=[`-- Held migration:`,`-- Safe after:`,`-- Verification:`];async function s({argv:r=process.argv.slice(2),env:o=process.env}={}){let s=await t();if(console.log(`Held migration files:`),console.log(n(s)),!r.includes(a))throw Error(`Held migrations require explicit confirmation. Re-run with ${a}.`);if(s.length===0){console.log(`No held migrations to run.`);return}let d=await e({env:o});try{await u(d);for(let e of s){let t=await i(e.path,`utf8`);c(t,e.relativePath);let n=l(t),r=await d.execute(f(d.dialect,e.id));if(r.rows.length===1){if(r.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(d,async r=>{await r.execute(t),await r.execute(p(d.dialect,e.id,n))})}}finally{await d.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 r(`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
|
-
id text primary key,
|
|
4
|
-
sha256 text not null,
|
|
5
|
-
applied_at timestamptz not null default now()
|
|
6
|
-
)`];case`sqlite`:return[`create table if not exists __held_migrations (
|
|
7
|
-
id text primary key,
|
|
8
|
-
sha256 text not null,
|
|
9
|
-
applied_at text not null default current_timestamp
|
|
10
|
-
)`]}}function f(e,t){return`select sha256 from ${m(e)} where id = ${g(t)}`}function p(e,t,n){return`insert into ${m(e)} (id, sha256) values (${g(t)}, ${g(n)})`}function m(e){switch(e){case`postgres`:return`drizzle.__held_migrations`;case`sqlite`:return`__held_migrations`}}async function h(e,t){if(e.transaction){await e.transaction(t);return}await e.execute(`begin`);try{await t(e),await e.execute(`commit`)}catch(t){throw await e.execute(`rollback`),t}}function g(e){return`'${e.replaceAll(`'`,`''`)}'`}export{p as heldMigrationInsertQuery,f as heldMigrationSelectQuery,s as migrateHeldMigrations,c as validateHeldMigrationHeader};
|
package/dist/db/migrate.d.ts
DELETED
package/dist/db/migrate.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import{createLocalPostgresDb as e,startProjectPostgres as t}from"./local-postgres.js";import n from"../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/usingCtx.js";import{MIGRATIONS_FOLDER as r}from"./config.js";import{access as i}from"node:fs/promises";import{resolve as a}from"node:path";import{migrate as o}from"drizzle-orm/node-postgres/migrator";const s=a(r);async function c({env:r=process.env}={}){try{var a=n();await i(s);let c=await e({env:a.a(await t({env:r})).env});try{await o(c,{migrationsFolder:s}),console.log(`Applied local migrations from ${s}`)}finally{await c.$client.end()}}catch(e){a.e=e}finally{await a.d()}}export{c as migrateLocalDb};
|
package/dist/db/project.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { DatabaseClient, DrizzleExecutor } from "./client.js";
|
|
2
|
-
import { DatabaseConfig } from "../config.js";
|
|
3
|
-
|
|
4
|
-
//#region db/project.d.ts
|
|
5
|
-
type CreateProjectDatabaseOptions = {
|
|
6
|
-
config?: DatabaseConfig;
|
|
7
|
-
env?: NodeJS.ProcessEnv;
|
|
8
|
-
};
|
|
9
|
-
type DrizzleDatabase = DrizzleExecutor & {
|
|
10
|
-
$client?: {
|
|
11
|
-
close?(): Promise<void> | void;
|
|
12
|
-
end?(): Promise<void>;
|
|
13
|
-
};
|
|
14
|
-
};
|
|
15
|
-
declare function createProjectDeployDatabase({
|
|
16
|
-
config,
|
|
17
|
-
env
|
|
18
|
-
}?: CreateProjectDatabaseOptions): Promise<DatabaseClient>;
|
|
19
|
-
declare function createProjectPostgresDrizzleDatabase({
|
|
20
|
-
env
|
|
21
|
-
}?: CreateProjectDatabaseOptions): Promise<DrizzleDatabase>;
|
|
22
|
-
//#endregion
|
|
23
|
-
export { CreateProjectDatabaseOptions, createProjectDeployDatabase, createProjectPostgresDrizzleDatabase };
|
package/dist/db/project.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{readProjectConfig as e}from"../config.js";import{importProjectDependency as t,importProjectModule as n}from"../project.js";import{createDatabaseAdapter as r}from"./client.js";const i=`src/db/relations.ts`;async function a({config:t,env:n=process.env}={}){let r=(t??(await e()).database)?.dialect??`postgres`;if(r===`postgres`)return s({env:n});if(r===`sqlite`)return c({env:n});throw Error(`Unsupported database dialect "${r}".`)}async function o({env:e=process.env}={}){let r=e.DATABASE_URL;if(!r)throw Error(`DATABASE_URL is required to create the PostgreSQL database.`);let[{drizzle:a},{relations:o}]=await Promise.all([t(`drizzle-orm/node-postgres`),n(i)]);return a({connection:{connectionString:r,max:1},relations:o})}async function s({env:e}){let t=await o({env:e});return r({database:t,dialect:`postgres`,close:()=>t.$client?.end?.()??Promise.resolve()})}async function c({env:e}){let a=e.TURSO_DATABASE_URL??e.DATABASE_URL;if(!a)throw Error(`TURSO_DATABASE_URL or DATABASE_URL is required to create the deploy database.`);let[{createClient:o},{drizzle:s},{relations:c}]=await Promise.all([t(`@libsql/client`),t(`drizzle-orm/libsql`),n(i)]),l=o({url:a,authToken:e.TURSO_AUTH_TOKEN});return r({database:s({client:l,relations:c}),dialect:`sqlite`,close:async()=>{await l.close?.()}})}export{a as createProjectDeployDatabase,o as createProjectPostgresDrizzleDatabase};
|
package/dist/db/reset.d.ts
DELETED
package/dist/db/reset.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import{createLocalPostgresDb as e,startProjectPostgres as t}from"./local-postgres.js";import n from"../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/usingCtx.js";import{sql as r}from"drizzle-orm";async function i({env:i=process.env}={}){try{var a=n();let o=await e({env:a.a(await t({env:i})).env});try{await o.transaction(async e=>{await e.execute(r`drop schema if exists public cascade`),await e.execute(r`drop schema if exists drizzle cascade`),await e.execute(r`create schema public`)}),console.log(`Reset local PostgreSQL schema`)}finally{await o.$client.end()}}catch(e){a.e=e}finally{await a.d()}}export{i as resetLocalDb};
|
package/dist/db/schema-check.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import{importProjectModule as e}from"../project.js";import{createLocalPostgresDb as t,startTemporaryProjectPostgres as n}from"./local-postgres.js";import r from"../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/usingCtx.js";import{inferSchemaDialect as i,planLocalSchemaPush as a}from"./schema-push.js";import{runProjectSeed as o}from"./seed.js";async function s({env:s=process.env,seed:l=!1}={}){try{var u=r();console.log(`Checking Drizzle schema against a throwaway PostgreSQL database`);let d=u.a(await n({env:s})),f=await e(`src/db/schema.ts`),p=await t({env:d.env});try{let e=i(f);if(e!==`postgres`)throw Error(`Temporary schema push checks require PostgreSQL schema, but found ${e}.`);let t=await a(e,f,p);t.sqlStatements.length===0?console.log(`Drizzle schema check passed with no changes`):(console.log(`Applying ${t.sqlStatements.length} statement(s) to throwaway database`),await t.apply(),console.log(`Drizzle schema check passed`)),l&&(console.log(`Seeding throwaway database`),await o(`default`,{env:d.env}),console.log(`Throwaway database seed check passed`))}finally{await c(p)}}catch(e){u.e=e}finally{await u.d()}}function c(e){return e.$client.end()}export{s as checkSchemaPush};
|
package/dist/db/schema-push.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { DatabaseDialect } from "./client.js";
|
|
2
|
-
|
|
3
|
-
//#region db/schema-push.d.ts
|
|
4
|
-
type SchemaPushPlan = {
|
|
5
|
-
sqlStatements: string[];
|
|
6
|
-
hints: Array<{
|
|
7
|
-
hint: string;
|
|
8
|
-
statement?: string;
|
|
9
|
-
}>;
|
|
10
|
-
apply(): Promise<void>;
|
|
11
|
-
};
|
|
12
|
-
type SchemaPushModule = {
|
|
13
|
-
pushSchema(schema: Record<string, unknown>, db: never, migrationsConfig?: {
|
|
14
|
-
table?: string;
|
|
15
|
-
schema?: string;
|
|
16
|
-
}): Promise<SchemaPushPlan>;
|
|
17
|
-
};
|
|
18
|
-
type ImportSchemaPushModule = (dialect: DatabaseDialect) => Promise<SchemaPushModule>;
|
|
19
|
-
declare function planLocalSchemaPush(dialect: DatabaseDialect, schema: Record<string, unknown>, db: unknown, importModule?: ImportSchemaPushModule): Promise<SchemaPushPlan>;
|
|
20
|
-
declare function inferSchemaDialect(schema: Record<string, unknown>): DatabaseDialect;
|
|
21
|
-
//#endregion
|
|
22
|
-
export { SchemaPushModule, SchemaPushPlan, inferSchemaDialect, planLocalSchemaPush };
|
package/dist/db/schema-push.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{resolve as e}from"node:path";import{pathToFileURL as t}from"node:url";import{resolve as n}from"import-meta-resolve";import{is as r}from"drizzle-orm";import{PgMaterializedView as i,PgTable as a,PgView as o}from"drizzle-orm/pg-core";import{SQLiteTable as s,SQLiteView as c}from"drizzle-orm/sqlite-core";const l={postgres:`drizzle-kit/payload/postgres`,sqlite:`drizzle-kit/payload/sqlite`};async function u(e,t,n,r=f){let{pushSchema:i}=await r(e);return i(t,n)}function d(e){let t=!1,n=!1;for(let r of Object.values(e))t||=p(r),n||=m(r);if(t&&n)throw Error(`Local database schema mixes PostgreSQL and SQLite entities.`);if(t)return`postgres`;if(n)return`sqlite`;throw Error(`Could not infer local database dialect from src/db/schema.ts.`)}async function f(r){return await import(n(l[r],t(e(`package.json`)).href))}function p(e){return r(e,a)||r(e,o)||r(e,i)}function m(e){return r(e,s)||r(e,c)}export{d as inferSchemaDialect,u as planLocalSchemaPush};
|
package/dist/db/seed.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { SeedProfile } from "./config.js";
|
|
2
|
-
|
|
3
|
-
//#region db/seed.d.ts
|
|
4
|
-
type SeedLocalDbOptions = {
|
|
5
|
-
env?: NodeJS.ProcessEnv;
|
|
6
|
-
};
|
|
7
|
-
type RunProjectSeedOptions = {
|
|
8
|
-
env: NodeJS.ProcessEnv;
|
|
9
|
-
seedEntryPoint?: string;
|
|
10
|
-
};
|
|
11
|
-
declare function seedLocalDb(profile?: SeedProfile, {
|
|
12
|
-
env
|
|
13
|
-
}?: SeedLocalDbOptions): Promise<void>;
|
|
14
|
-
declare function runProjectSeed(profile: SeedProfile | undefined, {
|
|
15
|
-
env,
|
|
16
|
-
seedEntryPoint
|
|
17
|
-
}: RunProjectSeedOptions): Promise<void>;
|
|
18
|
-
//#endregion
|
|
19
|
-
export { runProjectSeed, seedLocalDb };
|
package/dist/db/seed.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import{readProjectConfig as e}from"../config.js";import{importProjectModule as t}from"../project.js";import{startProjectPostgres as n}from"./local-postgres.js";import r from"../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/usingCtx.js";import{getSeedProfile as i}from"./config.js";async function a(t=i(),{env:a=process.env}={}){try{var c=r();let i=await e(),l=s(i);await o(t,{env:c.a(await n({config:i,env:a})).env,seedEntryPoint:l}),console.log(`Seeded local database with "${t}" profile`)}catch(e){c.e=e}finally{await c.d()}}async function o(n=i(),{env:r,seedEntryPoint:a}){a??=s(await e()),await l(r,async()=>{await c(await t(a),a)({env:r,profile:n})})}function s(e){let t=e.database?.seed;if(!t)throw Error(`coreframe.config.ts must configure database.seed before running db seed.`);return t}function c(e,t){let n=e.default??e.seed??e.seedLocalDb;if(!n)throw Error(`${t} must export a default seed function, seed function, or seedLocalDb function.`);return n}async function l(e,t){let n=new Map;for(let[t,r]of Object.entries(e))n.set(t,process.env[t]),r===void 0?delete process.env[t]:process.env[t]=r;try{await t()}finally{for(let[e,t]of n)t===void 0?delete process.env[e]:process.env[e]=t}}export{o as runProjectSeed,a as seedLocalDb};
|
package/dist/db/setup.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { SeedProfile } from "./config.js";
|
|
2
|
-
|
|
3
|
-
//#region db/setup.d.ts
|
|
4
|
-
type SetupLocalDbOptions = {
|
|
5
|
-
env?: NodeJS.ProcessEnv;
|
|
6
|
-
};
|
|
7
|
-
declare function setupLocalDb(profile?: SeedProfile, {
|
|
8
|
-
env
|
|
9
|
-
}?: SetupLocalDbOptions): Promise<void>;
|
|
10
|
-
//#endregion
|
|
11
|
-
export { setupLocalDb };
|
package/dist/db/setup.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import{startProjectPostgres as e}from"./local-postgres.js";import t from"../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/usingCtx.js";import{seedLocalDb as n}from"./seed.js";import{migrateLocalDb as r}from"./migrate.js";import{resetLocalDb as i}from"./reset.js";async function a(a=`default`,{env:o=process.env}={}){try{var s=t();let c=s.a(await e({env:o})).env;await i({env:c}),await r({env:c}),await n(a,{env:c})}catch(e){s.e=e}finally{await s.d()}}export{a as setupLocalDb};
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { DeployEnvironment } from "./config.js";
|
|
2
|
-
|
|
3
|
-
//#region deploy/access-token-secret.d.ts
|
|
4
|
-
declare const accessTokenSigningSecretName = "COREFRAME_ACCESS_TOKEN_SECRET";
|
|
5
|
-
type SecretNamesReader = (environment: DeployEnvironment, cwd: string) => Promise<readonly string[]>;
|
|
6
|
-
type SecretWriter = (environment: DeployEnvironment, name: string, value: string, cwd: string) => Promise<void>;
|
|
7
|
-
type AccessTokenSigningSecretOptions = {
|
|
8
|
-
cwd?: string;
|
|
9
|
-
environment: DeployEnvironment;
|
|
10
|
-
generateSecret?: () => string;
|
|
11
|
-
listSecretNames?: SecretNamesReader;
|
|
12
|
-
};
|
|
13
|
-
type PreparedAccessTokenSigningSecret = {
|
|
14
|
-
provisioned: boolean;
|
|
15
|
-
value?: string;
|
|
16
|
-
};
|
|
17
|
-
declare function prepareAccessTokenSigningSecret({
|
|
18
|
-
cwd,
|
|
19
|
-
environment,
|
|
20
|
-
generateSecret,
|
|
21
|
-
listSecretNames
|
|
22
|
-
}: AccessTokenSigningSecretOptions): Promise<PreparedAccessTokenSigningSecret>;
|
|
23
|
-
declare function verifyAccessTokenSigningSecret({
|
|
24
|
-
cwd,
|
|
25
|
-
environment,
|
|
26
|
-
listSecretNames
|
|
27
|
-
}: Omit<AccessTokenSigningSecretOptions, "generateSecret">): Promise<void>;
|
|
28
|
-
declare function rotateAccessTokenSigningSecret({
|
|
29
|
-
cwd,
|
|
30
|
-
environment,
|
|
31
|
-
generateSecret,
|
|
32
|
-
listSecretNames,
|
|
33
|
-
writeSecret
|
|
34
|
-
}: AccessTokenSigningSecretOptions & {
|
|
35
|
-
writeSecret?: SecretWriter;
|
|
36
|
-
}): Promise<void>;
|
|
37
|
-
declare function generateAccessTokenSigningSecret(): string;
|
|
38
|
-
//#endregion
|
|
39
|
-
export { PreparedAccessTokenSigningSecret, accessTokenSigningSecretName, generateAccessTokenSigningSecret, prepareAccessTokenSigningSecret, rotateAccessTokenSigningSecret, verifyAccessTokenSigningSecret };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{randomBytes as e}from"node:crypto";import t,{SubprocessError as n}from"nano-spawn";const r=`COREFRAME_ACCESS_TOKEN_SECRET`;async function i({cwd:e=process.cwd(),environment:t,generateSecret:n=s,listSecretNames:i=c}){try{if((await i(t,e)).includes(`COREFRAME_ACCESS_TOKEN_SECRET`))return{provisioned:!1}}catch(e){if(!u(e))throw Error(`Could not inspect the ${t} Worker before provisioning ${r}. Refusing to risk replacing an existing signing secret.`,{cause:e})}return{provisioned:!0,value:n()}}async function a({cwd:e=process.cwd(),environment:t,listSecretNames:n=c}){if(!(await n(t,e)).includes(`COREFRAME_ACCESS_TOKEN_SECRET`))throw Error(`Cloudflare deployed the ${t} Worker without ${r}.`)}async function o({cwd:e=process.cwd(),environment:t,generateSecret:n=s,listSecretNames:i=c,writeSecret:o=l}){await o(t,r,n(),e),await a({cwd:e,environment:t,listSecretNames:i})}function s(){return e(32).toString(`base64url`)}async function c(e,n){let{stdout:r}=await t(`pnpm`,[`exec`,`wrangler`,`secret`,`list`,`--env`,e,`--format`,`json`],{cwd:n,stdin:`ignore`}),i=JSON.parse(r);if(!Array.isArray(i))throw Error(`Wrangler returned an invalid Worker secret list.`);return i.flatMap(e=>e&&typeof e==`object`&&`name`in e&&typeof e.name==`string`?[e.name]:[])}async function l(e,n,r,i){await t(`pnpm`,[`exec`,`wrangler`,`secret`,`put`,n,`--env`,e],{cwd:i,stdin:{string:r},stdout:`inherit`,stderr:`inherit`})}function u(e){return e instanceof n&&e.stderr.includes(`not found`)&&e.stderr.includes("If this is a new Worker, run `wrangler deploy` first")}export{r as accessTokenSigningSecretName,s as generateAccessTokenSigningSecret,i as prepareAccessTokenSigningSecret,o as rotateAccessTokenSigningSecret,a as verifyAccessTokenSigningSecret};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import{collectDeployMigrationFiles as e,formatMigrationList as t,formatMigrationScanFailures as n,scanDeployMigrationFiles as r}from"./migrations.js";async function i(){let i=await e();console.log(`Deploy migration files:`),console.log(t(i));let a=await r(i);if(a.length>0)throw Error(`Deploy migrations contain unsafe SQL. Move unsafe statements to held migrations.\n${n(a)}`);console.log(`Deploy migrations passed safety checks.`)}export{i as checkDeployMigrations};
|
package/dist/deploy/checks.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { DeployContext, ResolvedDeployConfig } from "./config.js";
|
|
2
|
-
|
|
3
|
-
//#region deploy/checks.d.ts
|
|
4
|
-
declare function runAfterWorkerDeploy(config: ResolvedDeployConfig, context: DeployContext): Promise<void>;
|
|
5
|
-
declare function runPostDeployChecks(config: ResolvedDeployConfig, context: DeployContext): Promise<void>;
|
|
6
|
-
declare function runDeploySmokeChecks(config: ResolvedDeployConfig, context: DeployContext, request?: typeof fetch, log?: (message: string) => void): Promise<void>;
|
|
7
|
-
//#endregion
|
|
8
|
-
export { runAfterWorkerDeploy, runDeploySmokeChecks, runPostDeployChecks };
|
package/dist/deploy/checks.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
async function e(e,t){try{await e.afterWorkerDeploy?.(t)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Worker deployment succeeded, but deploy.afterWorkerDeploy failed: ${t}`,{cause:e})}}async function t(e,t){await n(e,t),await e.afterDeploy?.(t)}async function n(e,t,n=fetch,i=console.log){for(let a of e.smokeChecks){let e=a.url??new URL(a.path??`/`,t.url).toString(),o=await n(e);if(!r(o.status,a.expectedStatus??`2xx`))throw Error(`${a.name} smoke check failed: ${e} returned ${o.status}.`);i(`${a.name} smoke check passed: ${o.status} ${e}`)}}function r(e,t){return t===`2xx`?e>=200&&e<300:Array.isArray(t)?t.includes(e):e===t}export{e as runAfterWorkerDeploy,n as runDeploySmokeChecks,t as runPostDeployChecks};
|
package/dist/deploy/config.d.ts
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
//#region deploy/config.d.ts
|
|
2
|
-
declare const deployEnvironments: readonly ["staging", "production"];
|
|
3
|
-
type DeployEnvironment = (typeof deployEnvironments)[number];
|
|
4
|
-
type DeployContext = {
|
|
5
|
-
environment: DeployEnvironment;
|
|
6
|
-
releaseName: string;
|
|
7
|
-
url: string;
|
|
8
|
-
version: string;
|
|
9
|
-
};
|
|
10
|
-
declare const tauriReleasePlatforms: readonly ["macos", "windows", "linux", "ios", "android"];
|
|
11
|
-
type TauriReleasePlatform = (typeof tauriReleasePlatforms)[number];
|
|
12
|
-
type TauriReleasePlatformConfig = {
|
|
13
|
-
artifactGlobs?: string[];
|
|
14
|
-
buildArgs?: string[];
|
|
15
|
-
targetTriple?: string;
|
|
16
|
-
updatePlatform?: string;
|
|
17
|
-
};
|
|
18
|
-
type TauriReleaseConfig = {
|
|
19
|
-
artifactDownloadDir?: string;
|
|
20
|
-
b2Bucket?: string;
|
|
21
|
-
latestManifestPath?: string;
|
|
22
|
-
localPlatforms?: TauriReleasePlatform[];
|
|
23
|
-
platform?: Partial<Record<TauriReleasePlatform, TauriReleasePlatformConfig>>;
|
|
24
|
-
publicBaseUrl?: string;
|
|
25
|
-
publicPathPrefix?: string;
|
|
26
|
-
releaseNotesPath?: string;
|
|
27
|
-
releasePath?: string;
|
|
28
|
-
releaseUploadDir?: string;
|
|
29
|
-
workflowPlatforms?: TauriReleasePlatform[];
|
|
30
|
-
workflowName?: string;
|
|
31
|
-
workflowPollIntervalMs?: number;
|
|
32
|
-
workflowRef?: string;
|
|
33
|
-
workflowTimeoutMs?: number;
|
|
34
|
-
};
|
|
35
|
-
type DeploySmokeCheck = {
|
|
36
|
-
name: string;
|
|
37
|
-
path?: string;
|
|
38
|
-
url?: string;
|
|
39
|
-
expectedStatus?: "2xx" | number | number[];
|
|
40
|
-
};
|
|
41
|
-
type DeployEnvironmentConfig = {
|
|
42
|
-
url?: string;
|
|
43
|
-
};
|
|
44
|
-
type StagingHostnameConfig = {
|
|
45
|
-
managedLabelPrefix: string;
|
|
46
|
-
parentHostname: string;
|
|
47
|
-
workerService: string;
|
|
48
|
-
};
|
|
49
|
-
type DeployConfig = {
|
|
50
|
-
afterDeploy?: (context: DeployContext) => Promise<void> | void;
|
|
51
|
-
afterWorkerDeploy?: (context: DeployContext) => Promise<void> | void;
|
|
52
|
-
environments?: Partial<Record<DeployEnvironment, DeployEnvironmentConfig>>;
|
|
53
|
-
smokeChecks?: DeploySmokeCheck[];
|
|
54
|
-
stagingHostname?: StagingHostnameConfig;
|
|
55
|
-
tauriRelease?: TauriReleaseConfig;
|
|
56
|
-
};
|
|
57
|
-
type ResolvedDeployConfig = {
|
|
58
|
-
afterDeploy?: (context: DeployContext) => Promise<void> | void;
|
|
59
|
-
afterWorkerDeploy?: (context: DeployContext) => Promise<void> | void;
|
|
60
|
-
environment: DeployEnvironment;
|
|
61
|
-
smokeChecks: DeploySmokeCheck[];
|
|
62
|
-
stagingHostname?: StagingHostnameConfig;
|
|
63
|
-
tauriRelease: TauriReleaseConfig;
|
|
64
|
-
url?: string;
|
|
65
|
-
};
|
|
66
|
-
declare function resolveDeployConfig(config: DeployConfig, environment: DeployEnvironment, env?: NodeJS.ProcessEnv): ResolvedDeployConfig;
|
|
67
|
-
//#endregion
|
|
68
|
-
export { DeployConfig, DeployContext, DeployEnvironment, DeployEnvironmentConfig, DeploySmokeCheck, ResolvedDeployConfig, StagingHostnameConfig, TauriReleaseConfig, TauriReleasePlatform, TauriReleasePlatformConfig, deployEnvironments, resolveDeployConfig, tauriReleasePlatforms };
|
package/dist/deploy/config.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=[`staging`,`production`],t=[`macos`,`windows`,`linux`,`ios`,`android`];function n(e,t,n=process.env){return{afterDeploy:e.afterDeploy,afterWorkerDeploy:e.afterWorkerDeploy,environment:t,smokeChecks:e.smokeChecks??[{name:`home`,path:`/`}],stagingHostname:e.stagingHostname,tauriRelease:e.tauriRelease??{},url:n.DEPLOY_URL||(t===`staging`&&e.stagingHostname?void 0:e.environments?.[t]?.url)}}export{e as deployEnvironments,n as resolveDeployConfig,t as tauriReleasePlatforms};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
//#region deploy/migrations.d.ts
|
|
2
|
-
type MigrationFile = {
|
|
3
|
-
id: string;
|
|
4
|
-
path: string;
|
|
5
|
-
relativePath: string;
|
|
6
|
-
};
|
|
7
|
-
type MigrationRisk = {
|
|
8
|
-
code: string;
|
|
9
|
-
line: number;
|
|
10
|
-
match: string;
|
|
11
|
-
reason: string;
|
|
12
|
-
};
|
|
13
|
-
type MigrationScanResult = {
|
|
14
|
-
migration: MigrationFile;
|
|
15
|
-
risks: MigrationRisk[];
|
|
16
|
-
};
|
|
17
|
-
declare function collectDeployMigrationFiles(cwd?: string): Promise<MigrationFile[]>;
|
|
18
|
-
declare function collectHeldMigrationFiles(cwd?: string): Promise<MigrationFile[]>;
|
|
19
|
-
declare function scanDeployMigrationFiles(migrations: MigrationFile[]): Promise<MigrationScanResult[]>;
|
|
20
|
-
declare function scanMigrationSql(sql: string): MigrationRisk[];
|
|
21
|
-
declare function formatMigrationScanFailures(results: MigrationScanResult[]): string;
|
|
22
|
-
declare function formatMigrationList(migrations: MigrationFile[]): string;
|
|
23
|
-
//#endregion
|
|
24
|
-
export { MigrationFile, MigrationRisk, MigrationScanResult, collectDeployMigrationFiles, collectHeldMigrationFiles, formatMigrationList, formatMigrationScanFailures, scanDeployMigrationFiles, scanMigrationSql };
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{HELD_MIGRATIONS_FOLDER as e,MIGRATIONS_FOLDER as t}from"../db/config.js";import{access as n,readFile as r,readdir as i}from"node:fs/promises";import{basename as a,join as o,relative as s,resolve as c}from"node:path";const l=[{code:`drop-schema-object`,pattern:/\bdrop\s+(?:table|view|materialized\s+view|index|sequence|type|schema|function|trigger|policy)\b/giu,reason:`drops schema that the currently deployed app may still depend on`},{code:`drop-column`,pattern:/\balter\s+table\b[^;]*?\bdrop\s+column\b/giu,reason:`removes a column that the currently deployed app may still read or write`},{code:`drop-constraint`,pattern:/\balter\s+table\b[^;]*?\bdrop\s+constraint\b/giu,reason:`removes a constraint outside the staged contract phase`},{code:`truncate`,pattern:/\btruncate\b/giu,reason:`removes data outside the deploy-safe migration path`},{code:`rename-table-or-column`,pattern:/\balter\s+table\b[^;]*?\brename(?:\s+column)?\b/giu,reason:`renames schema in a way old and new app versions cannot both address`},{code:`rewrite-column-type`,pattern:/\balter\s+table\b[^;]*?\balter\s+column\b[^;]*?\btype\b/giu,reason:`rewrites a column type outside a staged expand/contract rollout`},{code:`set-not-null`,pattern:/\balter\s+table\b[^;]*?\balter\s+column\b[^;]*?\bset\s+not\s+null\b/giu,reason:`enforces NOT NULL before a separate backfill and verification step`},{code:`set-default`,pattern:/\balter\s+table\b[^;]*?\balter\s+column\b[^;]*?\bset\s+default\b/giu,reason:`changes default write behavior while old app code may still be running`},{code:`broad-update`,pattern:/\bupdate\b/giu,reason:`changes data outside a separately reviewed backfill or held migration`},{code:`broad-delete`,pattern:/\bdelete\s+from\b/giu,reason:`removes data outside a held migration`}];async function u(e=process.cwd()){return _(c(e,t),e)}async function d(t=process.cwd()){return v(c(t,e),t)}async function f(e){return(await Promise.all(e.map(async e=>({migration:e,risks:p(await r(e.path,`utf8`))})))).filter(e=>e.risks.length>0)}function p(e){let t=S(e),n=g(t),r=[];for(let n of l)for(let i of t.matchAll(n.pattern))r.push(T(e,i,n.code,n.reason));for(let i of t.matchAll(/\balter\s+table\s+(?:if\s+exists\s+|only\s+)?(?<table>(?:"[^"]+"|\w+)(?:\s*\.\s*(?:"[^"]+"|\w+))?)\s+add\s+column\b[^;]*?\bnot\s+null\b/giu))n.has(w(i.groups?.table))||r.push(T(e,i,`add-not-null-column`,`adds a required column to an existing table before a separate compatibility rollout`));for(let i of t.matchAll(/\balter\s+table\s+(?:if\s+exists\s+|only\s+)?(?<table>(?:"[^"]+"|\w+)(?:\s*\.\s*(?:"[^"]+"|\w+))?)\s+add\s+constraint\b[^;]*?\b(?:foreign\s+key|unique|primary\s+key|check)\b/giu))n.has(w(i.groups?.table))||r.push(T(e,i,`add-constraint`,`enforces a constraint on an existing table before a separate validation step`));for(let i of t.matchAll(/\bcreate\s+unique\s+index(?:\s+concurrently)?(?:\s+if\s+not\s+exists)?\s+(?:"[^"]+"|\w+)\s+on\s+(?<table>(?:"[^"]+"|\w+)(?:\s*\.\s*(?:"[^"]+"|\w+))?)/giu))n.has(w(i.groups?.table))||r.push(T(e,i,`create-unique-index`,`adds uniqueness to existing data before a separate dedupe and validation step`));return r.sort((e,t)=>e.line-t.line||e.code.localeCompare(t.code))}function m(e){return e.flatMap(e=>e.risks.map(t=>`${e.migration.relativePath}:${t.line} ${t.code}: ${t.reason} (${t.match.trim()})`)).join(`
|
|
2
|
-
`)}function h(e){return e.length===0?`No migration files found.`:e.map(e=>`- ${e.relativePath}`).join(`
|
|
3
|
-
`)}function g(e){let t=new Set;for(let n of e.matchAll(/\bcreate\s+(?:temporary\s+|temp\s+)?table\s+(?:if\s+not\s+exists\s+)?(?<table>(?:"[^"]+"|\w+)(?:\s*\.\s*(?:"[^"]+"|\w+))?)/giu))t.add(w(n.groups?.table));return t}async function _(e,t){let n=await y(e),r=[];for(let i of n){let n=o(e,i.name);if(i.isDirectory()){let e=o(n,`migration.sql`);await b(e)&&r.push(x(e,t,i.name));continue}i.isFile()&&i.name.endsWith(`.sql`)&&r.push(x(n,t,i.name.replace(/\.sql$/u,``)))}return r.sort((e,t)=>e.id.localeCompare(t.id))}async function v(e,t){return(await y(e)).filter(e=>e.isFile()&&e.name.endsWith(`.sql`)).map(n=>x(o(e,n.name),t,n.name.replace(/\.sql$/u,``))).sort((e,t)=>e.id.localeCompare(t.id))}async function y(e){try{return await i(e,{withFileTypes:!0})}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ENOENT`)return[];throw e}}async function b(e){try{return await n(e),!0}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ENOENT`)return!1;throw e}}function x(e,t,n=a(e,`.sql`)){return{id:n,path:e,relativePath:s(t,e)}}function S(e){return e.replace(/--[^\n\r]*/gu,C).replace(/\/\*[\s\S]*?\*\//gu,C).replace(/\$([A-Za-z_][A-Za-z0-9_]*)?\$[\s\S]*?\$\1\$/gu,C).replace(/'(?:''|[^'])*'/gu,C)}function C(e){return e.replace(/[^\n\r]/gu,` `)}function w(e){return(e??``).split(`.`).map(e=>e.trim().replace(/^"|"$/gu,``).toLowerCase()).at(-1)??``}function T(e,t,n,r){return{code:n,line:E(e,t.index??0),match:e.slice(t.index??0,(t.index??0)+t[0].length),reason:r}}function E(e,t){let n=1;for(let r=0;r<t;r+=1)e[r]===`
|
|
4
|
-
`&&(n+=1);return n}export{u as collectDeployMigrationFiles,d as collectHeldMigrationFiles,h as formatMigrationList,m as formatMigrationScanFailures,f as scanDeployMigrationFiles,p as scanMigrationSql};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { DatabaseClient, DatabaseDialect } from "../db/client.js";
|
|
2
|
-
import { MigrationFile } from "./migrations.js";
|
|
3
|
-
|
|
4
|
-
//#region deploy/pending-migrations.d.ts
|
|
5
|
-
declare function filterPendingMigrations(migrations: MigrationFile[], appliedNames: Iterable<string>): MigrationFile[];
|
|
6
|
-
declare function readAppliedMigrationNames(database: DatabaseClient): Promise<Set<string>>;
|
|
7
|
-
declare function appliedMigrationsQuery(dialect: DatabaseDialect): "select name from drizzle.__drizzle_migrations where name is not null" | "select name from __drizzle_migrations where name is not null";
|
|
8
|
-
//#endregion
|
|
9
|
-
export { appliedMigrationsQuery, filterPendingMigrations, readAppliedMigrationNames };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function e(e,t){let n=new Set(t);return e.filter(e=>!n.has(e.id))}async function t(e){try{let t=await e.execute(n(e.dialect));return new Set(t.rows.flatMap(e=>e.name?[e.name]:[]))}catch(e){if(r(e))return new Set;throw e}}function n(e){switch(e){case`postgres`:return`select name from drizzle.__drizzle_migrations where name is not null`;case`sqlite`:return`select name from __drizzle_migrations where name is not null`}}function r(e){return e instanceof Error&&(`code`in e&&(e.code===`42P01`||e.code===`3F000`)||e.message.includes(`no such table`)||e.message.includes(`no such schema`))}export{n as appliedMigrationsQuery,e as filterPendingMigrations,t as readAppliedMigrationNames};
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { TauriReleaseConfig, TauriReleasePlatform } from "./config.js";
|
|
2
|
-
|
|
3
|
-
//#region deploy/tauri-release.d.ts
|
|
4
|
-
type TauriReleaseArgs = {
|
|
5
|
-
tauriLocalPlatforms: TauriReleasePlatform[];
|
|
6
|
-
tauriWorkflowPlatforms: TauriReleasePlatform[];
|
|
7
|
-
tauriWorkflowName?: string;
|
|
8
|
-
tauriWorkflowRef?: string;
|
|
9
|
-
};
|
|
10
|
-
type TauriReleasePlan = {
|
|
11
|
-
artifactDownloadDir: string;
|
|
12
|
-
b2ApplicationKey?: string;
|
|
13
|
-
b2ApplicationKeyId?: string;
|
|
14
|
-
b2Bucket?: string;
|
|
15
|
-
enabled: boolean;
|
|
16
|
-
latestManifestPath: string;
|
|
17
|
-
localPlatforms: TauriReleasePlatform[];
|
|
18
|
-
platform: Record<TauriReleasePlatform, ResolvedTauriReleasePlatformConfig>;
|
|
19
|
-
publicBaseUrl?: string;
|
|
20
|
-
publicPathPrefix: string;
|
|
21
|
-
releaseNotesPath?: string;
|
|
22
|
-
releasePath: string;
|
|
23
|
-
releaseUploadDir: string;
|
|
24
|
-
signingPrivateKey?: string;
|
|
25
|
-
workflowName: string;
|
|
26
|
-
workflowPlatforms: TauriReleasePlatform[];
|
|
27
|
-
workflowPollIntervalMs: number;
|
|
28
|
-
workflowRef?: string;
|
|
29
|
-
workflowTimeoutMs: number;
|
|
30
|
-
};
|
|
31
|
-
type TauriReleaseMetadataSnapshot = {
|
|
32
|
-
files: {
|
|
33
|
-
path: string;
|
|
34
|
-
source: string;
|
|
35
|
-
}[];
|
|
36
|
-
};
|
|
37
|
-
type PreparedTauriRelease = {
|
|
38
|
-
manifestPath: string;
|
|
39
|
-
uploadDir: string;
|
|
40
|
-
};
|
|
41
|
-
type ResolvedTauriReleasePlatformConfig = {
|
|
42
|
-
artifactGlobs: string[];
|
|
43
|
-
buildArgs: string[];
|
|
44
|
-
targetTriple: string;
|
|
45
|
-
updatePlatform: string;
|
|
46
|
-
};
|
|
47
|
-
type TauriUpdateManifest = {
|
|
48
|
-
notes?: string;
|
|
49
|
-
platforms: Record<string, {
|
|
50
|
-
signature: string;
|
|
51
|
-
url: string;
|
|
52
|
-
}>;
|
|
53
|
-
pub_date: string;
|
|
54
|
-
version: string;
|
|
55
|
-
};
|
|
56
|
-
declare function parseTauriReleasePlatformList(value: string | undefined): ("macos" | "windows" | "linux" | "ios" | "android")[];
|
|
57
|
-
declare function parseTauriReleasePlatform(value: string): TauriReleasePlatform;
|
|
58
|
-
declare function resolveTauriReleasePlan({
|
|
59
|
-
args,
|
|
60
|
-
config,
|
|
61
|
-
env
|
|
62
|
-
}: {
|
|
63
|
-
args: TauriReleaseArgs;
|
|
64
|
-
config?: TauriReleaseConfig;
|
|
65
|
-
env: NodeJS.ProcessEnv;
|
|
66
|
-
}): TauriReleasePlan;
|
|
67
|
-
declare function validateTauriReleasePlan(plan: TauriReleasePlan, cwd?: string): Promise<void>;
|
|
68
|
-
declare function validateTauriReleaseIdentifier(tauriConfigSource: string, tauriConfigPath?: string): string;
|
|
69
|
-
declare function writeTauriReleaseMetadata(plan: TauriReleasePlan, version: string, cwd?: string): Promise<TauriReleaseMetadataSnapshot>;
|
|
70
|
-
declare function restoreTauriReleaseMetadata(snapshot: TauriReleaseMetadataSnapshot): Promise<void>;
|
|
71
|
-
declare function prepareTauriRelease({
|
|
72
|
-
env,
|
|
73
|
-
plan,
|
|
74
|
-
releaseName,
|
|
75
|
-
version
|
|
76
|
-
}: {
|
|
77
|
-
env: NodeJS.ProcessEnv;
|
|
78
|
-
plan: TauriReleasePlan;
|
|
79
|
-
releaseName: string;
|
|
80
|
-
version: string;
|
|
81
|
-
}): Promise<PreparedTauriRelease | undefined>;
|
|
82
|
-
declare function uploadTauriReleaseToB2(plan: TauriReleasePlan, release: PreparedTauriRelease): Promise<void>;
|
|
83
|
-
declare function createTauriUpdateManifest({
|
|
84
|
-
artifacts,
|
|
85
|
-
notes,
|
|
86
|
-
pubDate,
|
|
87
|
-
version
|
|
88
|
-
}: {
|
|
89
|
-
artifacts: {
|
|
90
|
-
signature: string;
|
|
91
|
-
updatePlatform: string;
|
|
92
|
-
url: string;
|
|
93
|
-
}[];
|
|
94
|
-
notes?: string;
|
|
95
|
-
pubDate?: Date;
|
|
96
|
-
version: string;
|
|
97
|
-
}): TauriUpdateManifest;
|
|
98
|
-
declare function createTauriReleaseUpload({
|
|
99
|
-
plan,
|
|
100
|
-
version
|
|
101
|
-
}: {
|
|
102
|
-
plan: TauriReleasePlan;
|
|
103
|
-
version: string;
|
|
104
|
-
}): Promise<PreparedTauriRelease>;
|
|
105
|
-
//#endregion
|
|
106
|
-
export { PreparedTauriRelease, TauriReleaseArgs, TauriReleaseMetadataSnapshot, TauriReleasePlan, createTauriReleaseUpload, createTauriUpdateManifest, parseTauriReleasePlatform, parseTauriReleasePlatformList, prepareTauriRelease, resolveTauriReleasePlan, restoreTauriReleaseMetadata, uploadTauriReleaseToB2, validateTauriReleaseIdentifier, validateTauriReleasePlan, writeTauriReleaseMetadata };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{tauriReleasePlatforms as e}from"./config.js";import{randomUUID as t}from"node:crypto";import{access as n,cp as r,mkdir as i,readFile as a,rm as o,stat as s,writeFile as c}from"node:fs/promises";import{basename as l,dirname as u,join as d,relative as f,resolve as p,sep as m}from"node:path";import h from"nano-spawn";import{constants as g}from"node:fs";import{setTimeout as _}from"node:timers/promises";import{glob as v}from"tinyglobby";const y={android:{artifactGlobs:[`src-tauri/target/**/*.sig`,`src-tauri/gen/android/**/*.sig`],buildArgs:[`tauri`,`android`,`build`,`--target`,`aarch64-linux-android`],targetTriple:`aarch64-linux-android`,updatePlatform:`android-aarch64`},ios:{artifactGlobs:[`src-tauri/target/**/*.sig`,`src-tauri/gen/apple/**/*.sig`],buildArgs:[`tauri`,`ios`,`build`,`--target`,`aarch64-apple-ios`],targetTriple:`aarch64-apple-ios`,updatePlatform:`ios-aarch64`},linux:{artifactGlobs:[`src-tauri/target/x86_64-unknown-linux-gnu/release/bundle/**/*.sig`,`src-tauri/target/release/bundle/**/*.sig`,`src-tauri/target/**/release/bundle/**/*.sig`],buildArgs:[`tauri`,`build`,`--target`,`x86_64-unknown-linux-gnu`,`--`,`--locked`],targetTriple:`x86_64-unknown-linux-gnu`,updatePlatform:`linux-x86_64`},macos:{artifactGlobs:[`src-tauri/target/aarch64-apple-darwin/release/bundle/**/*.sig`,`src-tauri/target/release/bundle/**/*.sig`,`src-tauri/target/**/release/bundle/**/*.sig`],buildArgs:[`tauri`,`build`,`--target`,`aarch64-apple-darwin`,`--`,`--locked`],targetTriple:`aarch64-apple-darwin`,updatePlatform:`darwin-aarch64`},windows:{artifactGlobs:[`src-tauri/target/x86_64-pc-windows-msvc/release/bundle/**/*.sig`,`src-tauri/target/release/bundle/**/*.sig`,`src-tauri/target/**/release/bundle/**/*.sig`],buildArgs:[`tauri`,`build`,`--target`,`x86_64-pc-windows-msvc`,`--`,`--locked`],targetTriple:`x86_64-pc-windows-msvc`,updatePlatform:`windows-x86_64`}};function b(e){return e?e.split(/[,\s]+/u).filter(Boolean).map(e=>x(e)):[]}function x(t){if(X(t))return t;throw Error(`Invalid Tauri release platform "${t}". Expected one of: ${e.join(`, `)}.`)}function S({args:e,config:t={},env:n}){let r=Y([...t.localPlatforms??[],...b(n.TAURI_RELEASE_LOCAL_PLATFORMS),...e.tauriLocalPlatforms]),i=Y([...t.workflowPlatforms??[],...b(n.TAURI_RELEASE_WORKFLOW_PLATFORMS),...e.tauriWorkflowPlatforms]),a=r.filter(e=>i.includes(e));if(a.length>0)throw Error(`Build each Tauri release platform either locally or through the workflow, not both: ${a.join(`, `)}.`);return{artifactDownloadDir:n.TAURI_RELEASE_ARTIFACT_DOWNLOAD_DIR??t.artifactDownloadDir??`.coreframe/tauri-artifacts`,b2ApplicationKey:n.B2_APPLICATION_KEY??n.B2_SECRET_ACCESS_KEY,b2ApplicationKeyId:n.B2_APPLICATION_KEY_ID??n.B2_KEY_ID??n.B2_ACCESS_KEY_ID,b2Bucket:t.b2Bucket??n.B2_BUCKET,enabled:r.length>0||i.length>0,latestManifestPath:n.TAURI_RELEASE_LATEST_MANIFEST_PATH??t.latestManifestPath??`latest.json`,localPlatforms:r,platform:L(t.platform,n),publicBaseUrl:t.publicBaseUrl??n.TAURI_RELEASE_PUBLIC_BASE_URL??n.UPDATE_PUBLIC_BASE_URL,publicPathPrefix:n.TAURI_RELEASE_PUBLIC_PATH_PREFIX??t.publicPathPrefix??n.UPDATE_PUBLIC_PATH_PREFIX??``,releaseNotesPath:n.TAURI_RELEASE_NOTES_FILE??t.releaseNotesPath,releasePath:n.TAURI_RELEASE_PATH??t.releasePath??"releases/${version}",releaseUploadDir:n.TAURI_RELEASE_UPLOAD_DIR??t.releaseUploadDir??`release-upload`,signingPrivateKey:n.TAURI_SIGNING_PRIVATE_KEY,workflowName:e.tauriWorkflowName??n.TAURI_RELEASE_WORKFLOW_NAME??t.workflowName??`tauri-release-artifacts.yml`,workflowPlatforms:i,workflowPollIntervalMs:J(n.TAURI_RELEASE_WORKFLOW_POLL_SECONDS,`TAURI_RELEASE_WORKFLOW_POLL_SECONDS`)*1e3||t.workflowPollIntervalMs||15e3,workflowRef:e.tauriWorkflowRef??n.TAURI_RELEASE_WORKFLOW_REF??t.workflowRef,workflowTimeoutMs:J(n.TAURI_RELEASE_WORKFLOW_TIMEOUT_MINUTES,`TAURI_RELEASE_WORKFLOW_TIMEOUT_MINUTES`)*6e4||t.workflowTimeoutMs||36e5}}async function C(e,t=process.cwd()){if(!e.enabled)return;let n=[[`TAURI_RELEASE_PUBLIC_BASE_URL`,e.publicBaseUrl],[`B2_APPLICATION_KEY_ID`,e.b2ApplicationKeyId],[`B2_APPLICATION_KEY`,e.b2ApplicationKey],[`B2_BUCKET`,e.b2Bucket]].flatMap(([e,t])=>t?[]:[e]);if(n.length>0)throw Error(`Missing required Tauri release configuration: ${n.join(`, `)}`);try{new URL(e.publicBaseUrl)}catch{throw Error(`Invalid TAURI_RELEASE_PUBLIC_BASE_URL: ${e.publicBaseUrl}`)}let r=d(t,`src-tauri/tauri.conf.json`);if(!await Z(r))throw Error(`Tauri release platforms were requested, but src-tauri/tauri.conf.json does not exist.`);if(w(await a(r,`utf8`),r),e.localPlatforms.length>0&&!e.signingPrivateKey)throw Error(`TAURI_SIGNING_PRIVATE_KEY is required for local Tauri release builds.`);e.workflowPlatforms.length>0&&await h(`gh`,[`workflow`,`view`,e.workflowName,`--ref`,e.workflowRef??await H()],{stdin:`ignore`}),await h(`b2`,[`version`],{stdin:`ignore`})}function w(e,t=`src-tauri/tauri.conf.json`){let n=JSON.parse(e).identifier;if(typeof n!=`string`||n===`com.example`||n.startsWith(`com.example.`))throw Error(`${t} must use an organization-owned reverse-domain identifier before building release artifacts.`);return n}async function T(e,t,n=process.cwd()){if(!e.enabled)return{files:[]};let r=d(n,`src-tauri/tauri.conf.json`),i=d(n,`src-tauri/Cargo.toml`),o=d(n,`src-tauri/Cargo.lock`),s=await a(r,`utf8`),l=await a(i,`utf8`),u=z(l,i),f=[{path:r,source:s},{path:i,source:l}],p=[],m=JSON.parse(s);if(m.version=t,m.bundle={...m.bundle??{},createUpdaterArtifacts:!0},p.push({path:r,source:`${JSON.stringify(m,null,2)}\n`}),p.push({path:i,source:B(l,u,t,i)}),await Z(o)){let e=await a(o,`utf8`);f.push({path:o,source:e}),p.push({path:o,source:V(e,u,t,o)})}for(let e of p)await c(e.path,e.source);return{files:f}}async function E(e){for(let t of e.files)await c(t.path,t.source)}async function D({env:e,plan:t,releaseName:n,version:r}){if(!t.enabled)return;await U(t.artifactDownloadDir),await U(t.releaseUploadDir);let i=t.workflowPlatforms.length>0?await j({plan:t,releaseName:n,version:r}):void 0;for(let n of t.localPlatforms)await P(n,t,e);if(i){let e=await M(t,i.runNameMarker);await h(`gh`,[`run`,`download`,String(e),`--dir`,t.artifactDownloadDir],{stdio:`inherit`})}return A({plan:t,version:r})}async function O(e,t){await h(`b2`,[`account`,`authorize`,e.b2ApplicationKeyId,e.b2ApplicationKey],{stdin:`ignore`});let n=(await v(`**/*`,{cwd:t.uploadDir,onlyFiles:!0})).sort((e,n)=>e===t.manifestPath?1:n===t.manifestPath?-1:e.localeCompare(n));for(let r of n)await h(`b2`,[`file`,`upload`,e.b2Bucket,d(t.uploadDir,r),r],{stdin:`ignore`}),console.log(`Uploaded ${r}`)}function k({artifacts:e,notes:t,pubDate:n=new Date,version:r}){return{...t?{notes:t}:{},platforms:Object.fromEntries(e.map(e=>[e.updatePlatform,{signature:e.signature,url:e.url}])),pub_date:n.toISOString(),version:r}}async function A({plan:e,version:t}){let n=q(e.publicPathPrefix,G(e.releasePath,t)),o=q(e.publicPathPrefix,e.latestManifestPath),s=[...e.localPlatforms,...e.workflowPlatforms],f=[];for(let o of s){let s=e.platform[o],c=e.localPlatforms.includes(o)?`.`:d(e.artifactDownloadDir,`tauri-${o}-${t}`),p=await F({globs:e.localPlatforms.includes(o)?s.artifactGlobs:[`**/*.sig`],sourceRoot:c,version:t}),m=q(n,s.updatePlatform),h=q(m,l(p.artifactPath)),g=q(m,l(p.signaturePath)),_=d(e.releaseUploadDir,...h.split(`/`)),v=d(e.releaseUploadDir,...g.split(`/`)),y=(await a(p.signaturePath,`utf8`)).trim();await i(u(_),{recursive:!0}),await r(p.artifactPath,_),await r(p.signaturePath,v),f.push({signature:y,updatePlatform:s.updatePlatform,url:K(e.publicBaseUrl,h)})}let p=k({artifacts:f,notes:e.releaseNotesPath?await a(e.releaseNotesPath,`utf8`):void 0,version:t}),m=d(e.releaseUploadDir,...o.split(`/`));return await i(u(m),{recursive:!0}),await c(m,`${JSON.stringify(p,null,2)}\n`),{manifestPath:o,uploadDir:e.releaseUploadDir}}async function j({plan:n,releaseName:r,version:i}){let a=n.workflowRef??await H(),o=`coreframe-${Date.now()}-${t().slice(0,8)}`;return await h(`gh`,[`workflow`,`run`,n.workflowName,`--ref`,a,`-f`,`release_name=${r}`,`-f`,`run_id=${o}`,`-f`,`version=${i}`,...e.flatMap(e=>[`-f`,`${e}=${n.workflowPlatforms.includes(e)?`true`:`false`}`])],{stdin:`ignore`}),{runNameMarker:o}}async function M(e,t){let n=Date.now()+e.workflowTimeoutMs;for(;Date.now()<n;){let n=await N(e,t);if(n?.status===`completed`){if(n.conclusion===`success`)return n.databaseId;throw Error(`Tauri release workflow ${n.databaseId} finished with ${n.conclusion}.`)}await _(e.workflowPollIntervalMs)}throw Error(`Timed out waiting for Tauri release workflow after ${Math.round(e.workflowTimeoutMs/6e4)} minutes.`)}async function N(e,t){let{stdout:n}=await h(`gh`,[`run`,`list`,`--workflow`,e.workflowName,`--event`,`workflow_dispatch`,`--json`,`conclusion,databaseId,displayTitle,status`,`--limit`,`50`],{stdin:`ignore`});return JSON.parse(n).find(e=>e.displayTitle.includes(t))}async function P(e,t,n){await h(`pnpm`,t.platform[e].buildArgs,{env:n,stdio:`inherit`})}async function F({globs:e,sourceRoot:t,version:n}){let r=await v(e,{cwd:t,absolute:!0,onlyFiles:!0}),i=[];for(let e of r){let t=e.replace(/\.sig$/u,``);await Q(t)&&i.push({artifactPath:t,signaturePath:e})}if(i.length===0)throw Error(`Could not find a Tauri updater artifact and .sig pair under ${t}.`);return i.sort((e,t)=>{let r=I(e.artifactPath,n);return I(t.artifactPath,n)-r||e.artifactPath.localeCompare(t.artifactPath)})[0]}function I(e,t){let n=0;return e.includes(t)&&(n+=100),/\.(app\.tar\.gz|AppImage\.tar\.gz|zip)$/u.test(e)&&(n+=10),/\.(exe|msi|dmg|AppImage|deb|rpm|apk|aab|ipa)$/u.test(e)&&(n+=5),n}function L(t={},n){return Object.fromEntries(e.map(e=>{let r=t[e]??{},i={...y[e],...r},a=n[`TAURI_RELEASE_${e.toUpperCase()}_TARGET_TRIPLE`],o=n[`TAURI_RELEASE_${e.toUpperCase()}_UPDATE_PLATFORM`],s=a??i.targetTriple,c=r.buildArgs?r.buildArgs:R(e,s);return[e,{...i,artifactGlobs:i.artifactGlobs??y[e].artifactGlobs,buildArgs:c,targetTriple:s,updatePlatform:o??i.updatePlatform}]}))}function R(e,t){return e===`android`?[`tauri`,`android`,`build`,`--target`,t]:e===`ios`?[`tauri`,`ios`,`build`,`--target`,t]:[`tauri`,`build`,`--target`,t,`--`,`--locked`]}function z(e,t){let n=/^\[package\][\s\S]*?^name = "(?<name>[^"]+)"/mu.exec(e);if(!n?.groups?.name)throw Error(`${t} is missing a [package] name.`);return n.groups.name}function B(e,t,n,r){let i=RegExp(`(^\\[package\\][\\s\\S]*?^name = "${$(t)}"[\\s\\S]*?^version = ")[^"]+(")`,`mu`),a=e.replace(i,`$1${n}$2`);if(a===e)throw Error(`${r} is missing a package version for ${t}.`);return a}function V(e,t,n,r){let i=RegExp(`(\\[\\[package\\]\\]\\nname = "${$(t)}"\\nversion = ")[^"]+(")`,`u`),a=e.replace(i,`$1${n}$2`);if(a===e)throw Error(`${r} is missing a package lock entry for ${t}.`);return a}async function H(){let{stdout:e}=await h(`git`,[`rev-parse`,`--abbrev-ref`,`HEAD`],{stdin:`ignore`}),t=e.trim();if(t!==`HEAD`)return t;let{stdout:n}=await h(`git`,[`rev-parse`,`HEAD`],{stdin:`ignore`});return n.trim()}async function U(e){W(e),await o(e,{force:!0,recursive:!0}),await i(e,{recursive:!0})}function W(e){let t=p(e),n=f(process.cwd(),t).split(m).join(`/`);if(n===``||n===`.`||n.startsWith(`../`)||n===`src-tauri`||n.startsWith(`src-tauri/`)||n===`tauri`||n.startsWith(`tauri/`))throw Error(`Refusing to reset unsafe Tauri release directory: ${e}`)}function G(e,t){return e.replaceAll("${version}",t)}function K(e,t){let n=new URL(e),r=q(n.pathname.replace(/\/+$/u,``),t);return n.pathname=r.startsWith(`/`)?r:`/${r}`,n.toString()}function q(...e){return e.flatMap(e=>e.split(`/`)).map(e=>e.trim()).filter(Boolean).join(`/`)}function J(e,t){if(!e)return 0;let n=Number(e);if(!Number.isInteger(n)||n<=0)throw Error(`${t} must be a positive integer.`);return n}function Y(e){return[...new Set(e)]}function X(t){return e.includes(t)}async function Z(e){try{return await n(e,g.F_OK),!0}catch{return!1}}async function Q(e){try{return(await s(e)).isFile()}catch{return!1}}function $(e){return e.replace(/[.*+?^${}()|[\]\\]/gu,`\\$&`)}export{A as createTauriReleaseUpload,k as createTauriUpdateManifest,x as parseTauriReleasePlatform,b as parseTauriReleasePlatformList,D as prepareTauriRelease,S as resolveTauriReleasePlan,E as restoreTauriReleaseMetadata,O as uploadTauriReleaseToB2,w as validateTauriReleaseIdentifier,C as validateTauriReleasePlan,T as writeTauriReleaseMetadata};
|
package/dist/deploy/version.d.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { DeployEnvironment } from "./config.js";
|
|
2
|
-
|
|
3
|
-
//#region deploy/version.d.ts
|
|
4
|
-
type PackageJson = {
|
|
5
|
-
name?: string;
|
|
6
|
-
version?: string;
|
|
7
|
-
[key: string]: unknown;
|
|
8
|
-
};
|
|
9
|
-
type ReleasePackageJson = PackageJson & {
|
|
10
|
-
name: string;
|
|
11
|
-
version: string;
|
|
12
|
-
};
|
|
13
|
-
declare function nextReleaseVersion(currentVersion: string, now?: Date): string;
|
|
14
|
-
declare function releaseName(packageName: string, version: string): string;
|
|
15
|
-
declare function stagingReleaseVersion(currentVersion: string, revision: string): string;
|
|
16
|
-
declare function resolveReleaseVersion(environment: DeployEnvironment, currentVersion: string, revision: string, now?: Date): string;
|
|
17
|
-
declare function formatReleaseDate(date: Date): string;
|
|
18
|
-
declare function readPackageJson(path?: string): Promise<{
|
|
19
|
-
packageJson: ReleasePackageJson;
|
|
20
|
-
source: string;
|
|
21
|
-
}>;
|
|
22
|
-
declare function writePackageVersion(path: string, packageJson: PackageJson, version: string): Promise<void>;
|
|
23
|
-
//#endregion
|
|
24
|
-
export { formatReleaseDate, nextReleaseVersion, readPackageJson, releaseName, resolveReleaseVersion, stagingReleaseVersion, writePackageVersion };
|
package/dist/deploy/version.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{readFile as e,writeFile as t}from"node:fs/promises";function n(e,t=new Date){let n=l(e),r=o(t),i=n.minor===r?n.patch+1:0;return`${n.major}.${r}.${i}`}function r(e,t){return`${e}@${t}`}function i(e,t){return`${e}-staging.${t}`}function a(e,t,r,a=new Date){return e===`production`?n(t,a):i(t,r)}function o(e){return`${String(e.getFullYear())}${String(e.getMonth()+1).padStart(2,`0`)}${String(e.getDate()).padStart(2,`0`)}`}async function s(t=`package.json`){let n=await e(t,`utf8`),r=JSON.parse(n);if(!r.name)throw Error(`${t} is missing a package name.`);if(!r.version)throw Error(`${t} is missing a package version.`);return{packageJson:r,source:n}}async function c(e,n,r){await t(e,`${JSON.stringify({...n,version:r},null,2)}\n`)}function l(e){let t=/^(?<major>\d+)\.(?<minor>\d+)\.(?<patch>\d+)$/u.exec(e);if(!t?.groups)throw Error(`Invalid package version "${e}". Expected major.minor.patch.`);return{major:Number(t.groups.major),minor:t.groups.minor,patch:Number(t.groups.patch)}}export{o as formatReleaseDate,n as nextReleaseVersion,s as readPackageJson,r as releaseName,a as resolveReleaseVersion,i as stagingReleaseVersion,c as writePackageVersion};
|