ugly-app 0.1.948 → 0.1.950
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/cli/build.d.ts.map +1 -1
- package/dist/cli/build.js +28 -0
- package/dist/cli/build.js.map +1 -1
- package/dist/cli/loadCollections.d.ts +19 -0
- package/dist/cli/loadCollections.d.ts.map +1 -1
- package/dist/cli/loadCollections.js +45 -0
- package/dist/cli/loadCollections.js.map +1 -1
- package/dist/cli/migrate.d.ts.map +1 -1
- package/dist/cli/migrate.js +63 -60
- package/dist/cli/migrate.js.map +1 -1
- package/dist/cli/schemaGen.d.ts.map +1 -1
- package/dist/cli/schemaGen.js +54 -43
- package/dist/cli/schemaGen.js.map +1 -1
- package/dist/cli/schemaStatus.d.ts.map +1 -1
- package/dist/cli/schemaStatus.js +25 -25
- package/dist/cli/schemaStatus.js.map +1 -1
- package/dist/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/client/audio/AudioPlayer.d.ts +1 -0
- package/dist/client/audio/AudioPlayer.d.ts.map +1 -1
- package/dist/client/audio/AudioPlayer.js +13 -5
- package/dist/client/audio/AudioPlayer.js.map +1 -1
- package/dist/client/audio/AudioRecorder.d.ts +1 -0
- package/dist/client/audio/AudioRecorder.d.ts.map +1 -1
- package/dist/client/audio/AudioRecorder.js +8 -2
- package/dist/client/audio/AudioRecorder.js.map +1 -1
- package/dist/client/audio/audioPlayer.worklet.js +30 -3
- package/dist/client/audio/audioPlayer.worklet.js.map +1 -1
- package/dist/client/audio/audioRecorder.worklet.js +7 -3
- package/dist/client/audio/audioRecorder.worklet.js.map +1 -1
- package/dist/client/audio/workletLoader.d.ts +16 -0
- package/dist/client/audio/workletLoader.d.ts.map +1 -0
- package/dist/client/audio/workletLoader.js +49 -0
- package/dist/client/audio/workletLoader.js.map +1 -0
- package/dist/server/App.d.ts.map +1 -1
- package/dist/server/App.js +7 -1
- package/dist/server/App.js.map +1 -1
- package/dist/vite/audioWorkletsPlugin.d.ts +36 -0
- package/dist/vite/audioWorkletsPlugin.d.ts.map +1 -0
- package/dist/vite/audioWorkletsPlugin.js +99 -0
- package/dist/vite/audioWorkletsPlugin.js.map +1 -0
- package/dist/vite/index.d.ts +1 -0
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +1 -0
- package/dist/vite/index.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/build.ts +33 -0
- package/src/cli/loadCollections.ts +49 -0
- package/src/cli/migrate.ts +81 -81
- package/src/cli/schemaGen.ts +82 -70
- package/src/cli/schemaStatus.ts +33 -27
- package/src/cli/version.ts +1 -1
- package/src/client/audio/AudioPlayer.ts +25 -5
- package/src/client/audio/AudioRecorder.ts +20 -2
- package/src/client/audio/audioPlayer.worklet.ts +33 -6
- package/src/client/audio/audioRecorder.worklet.ts +11 -7
- package/src/client/audio/workletLoader.test.ts +110 -0
- package/src/client/audio/workletLoader.ts +55 -0
- package/src/client/audio/workletSync.test.ts +43 -0
- package/src/server/App.ts +7 -1
- package/src/vite/audioWorkletsPlugin.test.ts +45 -0
- package/src/vite/audioWorkletsPlugin.ts +104 -0
- package/src/vite/index.ts +6 -0
- package/templates/vite.config.ts +11 -2
package/dist/cli/build.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"AAaA;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,GAChE,MAAM,GAAG,IAAI,CAKf;AAwBD,wBAAsB,QAAQ,CAC5B,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAO,GAC3C,OAAO,CAAC,IAAI,CAAC,CA4Hf"}
|
package/dist/cli/build.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { execSync } from 'child_process';
|
|
2
2
|
import fs from 'fs';
|
|
3
3
|
import path from 'path';
|
|
4
|
+
import { AUDIO_WORKLET_FILES, workletAssetPath, } from '../vite/audioWorkletsPlugin.js';
|
|
4
5
|
import { runExportCollections } from './exportCollections.js';
|
|
5
6
|
import { nodeBinCommand } from './resolveBin.js';
|
|
6
7
|
import { runBuildStatic, STATIC_PREFIX } from './staticAssets.js';
|
|
@@ -24,6 +25,27 @@ export function viteCdnBase(staticCfg) {
|
|
|
24
25
|
return null;
|
|
25
26
|
return `${base.replace(/\/$/, '')}/${STATIC_PREFIX}`;
|
|
26
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Copy the prebuilt AudioWorklet files from the installed ugly-app package
|
|
30
|
+
* into the client build output, next to the JS chunks (`assets/` by vite
|
|
31
|
+
* default, the output root otherwise). Best-effort: a missing source file
|
|
32
|
+
* just means the runtime blob: fallback is used.
|
|
33
|
+
*/
|
|
34
|
+
function copyAudioWorklets(clientDistDir) {
|
|
35
|
+
if (!fs.existsSync(clientDistDir))
|
|
36
|
+
return;
|
|
37
|
+
const assetsDir = fs.existsSync(path.join(clientDistDir, 'assets'))
|
|
38
|
+
? path.join(clientDistDir, 'assets')
|
|
39
|
+
: clientDistDir;
|
|
40
|
+
for (const file of AUDIO_WORKLET_FILES) {
|
|
41
|
+
try {
|
|
42
|
+
fs.copyFileSync(workletAssetPath(file), path.join(assetsDir, file));
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
console.warn(`[Build] could not copy ${file}; blob: fallback will be used (${err.message})`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
27
49
|
export async function runBuild(opts = {}) {
|
|
28
50
|
// Emit database-collections.json first. Fast, pure TS import — fails
|
|
29
51
|
// loudly on zod schema errors before we do the expensive Vite/tsc work.
|
|
@@ -76,6 +98,12 @@ export const buildId = '${buildId}';
|
|
|
76
98
|
cwd: process.cwd(),
|
|
77
99
|
env: { ...process.env, ...(cdnBase ? { VITE_CDN_BASE: cdnBase } : {}) },
|
|
78
100
|
});
|
|
101
|
+
// AudioPlayer/AudioRecorder resolve their AudioWorklet as a static asset
|
|
102
|
+
// beside the built JS (sibling of import.meta.url), falling back to a blob:
|
|
103
|
+
// URL when it is missing. Apps whose vite config includes
|
|
104
|
+
// audioWorkletsPlugin already emitted these; copy them here too so apps on
|
|
105
|
+
// an older config get them with zero changes (the copy is idempotent).
|
|
106
|
+
copyAudioWorklets(path.join(distDir, 'client'));
|
|
79
107
|
// Bundle server with esbuild (only for simple projects without custom server build)
|
|
80
108
|
const serverEntry = path.join(process.cwd(), 'server', 'index.ts');
|
|
81
109
|
const hasCustomServerBuild = fs.existsSync(path.join(process.cwd(), 'vite.config.server.js'));
|
package/dist/cli/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,4 +15,23 @@ export interface LoadedCollection {
|
|
|
15
15
|
indexes?: IndexDef[];
|
|
16
16
|
}
|
|
17
17
|
export declare function loadProjectCollections(projectDir?: string): Promise<Record<string, LoadedCollection>>;
|
|
18
|
+
/**
|
|
19
|
+
* Load the app's `shared/collections.ts` merged over `BUILTIN_DEFS`, using the
|
|
20
|
+
* same lenient semantics as `db:migrate` / `db:schema-gen` / `db:schema-status`:
|
|
21
|
+
* a missing or unimportable collections file yields builtins only (no throw).
|
|
22
|
+
* Unlike `loadProjectCollections`, the caller owns the `importTs` lifecycle —
|
|
23
|
+
* call `disposeImportTs()` when done (the schema/migration CLIs already do so
|
|
24
|
+
* in a `finally`).
|
|
25
|
+
*/
|
|
26
|
+
export declare function loadAppCollectionDefs(): Promise<Record<string, LoadedCollection>>;
|
|
27
|
+
/**
|
|
28
|
+
* True when at least one collection persists to Postgres (Neon). Mirrors the
|
|
29
|
+
* skip rules in `SchemaCheck.checkSchemas`: defs without a `schema` and
|
|
30
|
+
* getter-backed collections have no local table, and `db: d1` collections live
|
|
31
|
+
* in D1/SQLite — none of them need Postgres. When this returns false the
|
|
32
|
+
* schema/migration CLI commands must not touch Postgres at all (an all-D1 app
|
|
33
|
+
* has no DATABASE_URL and no pg adapter). Like `checkSchemas`, a collection
|
|
34
|
+
* missing the mandatory `meta.db` declaration throws via `backendKind`.
|
|
35
|
+
*/
|
|
36
|
+
export declare function hasPostgresBackedCollections(defs: Record<string, LoadedCollection>): boolean;
|
|
18
37
|
//# sourceMappingURL=loadCollections.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadCollections.d.ts","sourceRoot":"","sources":["../../src/cli/loadCollections.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"loadCollections.d.ts","sourceRoot":"","sources":["../../src/cli/loadCollections.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED,wBAAsB,sBAAsB,CAC1C,UAAU,GAAE,MAAsB,GACjC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAkB3C;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CACpD,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CACjC,CAeA;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GACrC,OAAO,CAQT"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { backendKind } from '../shared/DB.js';
|
|
1
2
|
export async function loadProjectCollections(projectDir = process.cwd()) {
|
|
2
3
|
const path = await import('node:path');
|
|
3
4
|
const fs = await import('node:fs');
|
|
@@ -16,4 +17,48 @@ export async function loadProjectCollections(projectDir = process.cwd()) {
|
|
|
16
17
|
const { BUILTIN_DEFS } = await import('../shared/DB.js');
|
|
17
18
|
return { ...BUILTIN_DEFS, ...appDefs };
|
|
18
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Load the app's `shared/collections.ts` merged over `BUILTIN_DEFS`, using the
|
|
22
|
+
* same lenient semantics as `db:migrate` / `db:schema-gen` / `db:schema-status`:
|
|
23
|
+
* a missing or unimportable collections file yields builtins only (no throw).
|
|
24
|
+
* Unlike `loadProjectCollections`, the caller owns the `importTs` lifecycle —
|
|
25
|
+
* call `disposeImportTs()` when done (the schema/migration CLIs already do so
|
|
26
|
+
* in a `finally`).
|
|
27
|
+
*/
|
|
28
|
+
export async function loadAppCollectionDefs() {
|
|
29
|
+
const path = await import('node:path');
|
|
30
|
+
const collectionsPath = path.resolve(process.cwd(), 'shared/collections.ts');
|
|
31
|
+
let appDefs = {};
|
|
32
|
+
try {
|
|
33
|
+
const { importTs } = await import('./uglyappConfig.js');
|
|
34
|
+
const mod = (await importTs(collectionsPath));
|
|
35
|
+
appDefs = mod.collections ?? {};
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// No collections file (or unimportable) — builtins only.
|
|
39
|
+
}
|
|
40
|
+
const { BUILTIN_DEFS } = await import('../shared/DB.js');
|
|
41
|
+
return { ...BUILTIN_DEFS, ...appDefs };
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* True when at least one collection persists to Postgres (Neon). Mirrors the
|
|
45
|
+
* skip rules in `SchemaCheck.checkSchemas`: defs without a `schema` and
|
|
46
|
+
* getter-backed collections have no local table, and `db: d1` collections live
|
|
47
|
+
* in D1/SQLite — none of them need Postgres. When this returns false the
|
|
48
|
+
* schema/migration CLI commands must not touch Postgres at all (an all-D1 app
|
|
49
|
+
* has no DATABASE_URL and no pg adapter). Like `checkSchemas`, a collection
|
|
50
|
+
* missing the mandatory `meta.db` declaration throws via `backendKind`.
|
|
51
|
+
*/
|
|
52
|
+
export function hasPostgresBackedCollections(defs) {
|
|
53
|
+
for (const def of Object.values(defs)) {
|
|
54
|
+
if (!def?.schema)
|
|
55
|
+
continue;
|
|
56
|
+
if (def.meta?.getter)
|
|
57
|
+
continue;
|
|
58
|
+
if (backendKind(def.meta?.db) === 'd1')
|
|
59
|
+
continue;
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
19
64
|
//# sourceMappingURL=loadCollections.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadCollections.js","sourceRoot":"","sources":["../../src/cli/loadCollections.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loadCollections.js","sourceRoot":"","sources":["../../src/cli/loadCollections.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAQ9C,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,aAAqB,OAAO,CAAC,GAAG,EAAE;IAElC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACnC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC;IAC5D,IAAI,OAAO,GAAqC,EAAE,CAAC;IACnD,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACzE,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,CAE7B,CAAC;YACF,OAAO,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;QAClC,CAAC;gBAAS,CAAC;YACT,MAAM,eAAe,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACzD,OAAO,EAAE,GAAI,YAAiD,EAAE,GAAG,OAAO,EAAE,CAAC;AAC/E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IAGzC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,uBAAuB,CAAC,CAAC;IAC7E,IAAI,OAAO,GAAqC,EAAE,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,CAAC,MAAM,QAAQ,CAAC,eAAe,CAAC,CAE3C,CAAC;QACF,OAAO,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,yDAAyD;IAC3D,CAAC;IACD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACzD,OAAO,EAAE,GAAI,YAAiD,EAAE,GAAG,OAAO,EAAE,CAAC;AAC/E,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,4BAA4B,CAC1C,IAAsC;IAEtC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,EAAE,MAAM;YAAE,SAAS;QAC3B,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM;YAAE,SAAS;QAC/B,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI;YAAE,SAAS;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/cli/migrate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/cli/migrate.ts"],"names":[],"mappings":"AAwBA,wBAAsB,aAAa,CACjC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAO,GAC7C,OAAO,CAAC,IAAI,CAAC,CA0Gf"}
|
package/dist/cli/migrate.js
CHANGED
|
@@ -3,6 +3,7 @@ import path from 'path';
|
|
|
3
3
|
import { pgQuery as query } from '../server/Pg.js';
|
|
4
4
|
import { closePg, initPg } from '../server/NodePool.js';
|
|
5
5
|
import { disposeImportTs, importTs } from './uglyappConfig.js';
|
|
6
|
+
import { hasPostgresBackedCollections, loadAppCollectionDefs, } from './loadCollections.js';
|
|
6
7
|
async function ensureMigrationsTable() {
|
|
7
8
|
await query(`
|
|
8
9
|
CREATE TABLE IF NOT EXISTS _migrations (
|
|
@@ -12,78 +13,80 @@ async function ensureMigrationsTable() {
|
|
|
12
13
|
`);
|
|
13
14
|
}
|
|
14
15
|
export async function runMigrations(options = {}) {
|
|
15
|
-
await initPg();
|
|
16
16
|
try {
|
|
17
|
-
|
|
18
|
-
//
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
// All-D1 app (zero Postgres-backed collections): nothing to migrate and
|
|
18
|
+
// no DATABASE_URL / pg adapter to init — exit clean instead of throwing
|
|
19
|
+
// "no adapter installed".
|
|
20
|
+
const allDefs = await loadAppCollectionDefs();
|
|
21
|
+
if (!hasPostgresBackedCollections(allDefs)) {
|
|
22
|
+
console.log('[Migrate] All collections use the D1 backend — no Postgres migrations to apply.');
|
|
22
23
|
return;
|
|
23
24
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
for (const file of files) {
|
|
33
|
-
const name = path.basename(file, path.extname(file));
|
|
34
|
-
const status = appliedNames.has(name) ? '✓ applied' : '○ pending';
|
|
35
|
-
console.log(` ${status} ${name}`);
|
|
25
|
+
await initPg();
|
|
26
|
+
try {
|
|
27
|
+
await ensureMigrationsTable();
|
|
28
|
+
// Find migration files
|
|
29
|
+
const migrationsDir = path.join(process.cwd(), 'server', 'migrations');
|
|
30
|
+
if (!fs.existsSync(migrationsDir)) {
|
|
31
|
+
console.log('[Migrate] No migrations directory found at server/migrations/');
|
|
32
|
+
return;
|
|
36
33
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
// Dynamic import of the migration file
|
|
52
|
-
const migration = (await importTs(filePath));
|
|
53
|
-
if (typeof migration.up !== 'function') {
|
|
54
|
-
throw new Error(`[Migrate] Migration ${name} must export an async up() function`);
|
|
34
|
+
const files = fs
|
|
35
|
+
.readdirSync(migrationsDir)
|
|
36
|
+
.filter((f) => f.endsWith('.ts') || f.endsWith('.js'))
|
|
37
|
+
.sort();
|
|
38
|
+
const applied = await query('SELECT name, applied_at FROM _migrations');
|
|
39
|
+
const appliedNames = new Set(applied.rows.map((m) => m.name));
|
|
40
|
+
if (options.status) {
|
|
41
|
+
console.log('[Migrate] Migration status:');
|
|
42
|
+
for (const file of files) {
|
|
43
|
+
const name = path.basename(file, path.extname(file));
|
|
44
|
+
const status = appliedNames.has(name) ? '✓ applied' : '○ pending';
|
|
45
|
+
console.log(` ${status} ${name}`);
|
|
46
|
+
}
|
|
47
|
+
return;
|
|
55
48
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const
|
|
67
|
-
|
|
49
|
+
const pending = files.filter((f) => {
|
|
50
|
+
const name = path.basename(f, path.extname(f));
|
|
51
|
+
return !appliedNames.has(name);
|
|
52
|
+
});
|
|
53
|
+
if (pending.length === 0) {
|
|
54
|
+
console.log('[Migrate] All migrations up to date');
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
for (const file of pending) {
|
|
58
|
+
const name = path.basename(file, path.extname(file));
|
|
59
|
+
const filePath = path.join(migrationsDir, file);
|
|
60
|
+
console.log(`[Migrate] Running: ${name}`);
|
|
61
|
+
// Dynamic import of the migration file
|
|
62
|
+
const migration = (await importTs(filePath));
|
|
63
|
+
if (typeof migration.up !== 'function') {
|
|
64
|
+
throw new Error(`[Migrate] Migration ${name} must export an async up() function`);
|
|
65
|
+
}
|
|
66
|
+
await migration.up(query);
|
|
67
|
+
await query('INSERT INTO _migrations (name) VALUES ($1)', [name]);
|
|
68
|
+
console.log(`[Migrate] Done: ${name}`);
|
|
69
|
+
}
|
|
70
|
+
console.log(`[Migrate] Applied ${pending.length} migration(s)`);
|
|
71
|
+
// After successful migrations, update schema snapshots (reuses the
|
|
72
|
+
// collection defs already loaded above).
|
|
73
|
+
if (pending.length > 0) {
|
|
68
74
|
try {
|
|
69
|
-
const
|
|
70
|
-
|
|
75
|
+
const { ensureSchemaSnapshotsTable, updateAllSnapshots } = await import('../server/SchemaCheck.js');
|
|
76
|
+
await ensureSchemaSnapshotsTable();
|
|
77
|
+
await updateAllSnapshots(allDefs);
|
|
78
|
+
console.log('[Migrate] Schema snapshots updated');
|
|
71
79
|
}
|
|
72
|
-
catch {
|
|
73
|
-
|
|
80
|
+
catch (e) {
|
|
81
|
+
console.warn('[Migrate] Warning: failed to update schema snapshots', e.message);
|
|
74
82
|
}
|
|
75
|
-
const { BUILTIN_DEFS } = await import('../shared/DB.js');
|
|
76
|
-
const allDefs = { ...BUILTIN_DEFS, ...appDefs };
|
|
77
|
-
await updateAllSnapshots(allDefs);
|
|
78
|
-
console.log('[Migrate] Schema snapshots updated');
|
|
79
|
-
}
|
|
80
|
-
catch (e) {
|
|
81
|
-
console.warn('[Migrate] Warning: failed to update schema snapshots', e.message);
|
|
82
83
|
}
|
|
83
84
|
}
|
|
85
|
+
finally {
|
|
86
|
+
closePg();
|
|
87
|
+
}
|
|
84
88
|
}
|
|
85
89
|
finally {
|
|
86
|
-
closePg();
|
|
87
90
|
await disposeImportTs();
|
|
88
91
|
}
|
|
89
92
|
}
|
package/dist/cli/migrate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/cli/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/cli/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EACL,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAO9B,KAAK,UAAU,qBAAqB;IAClC,MAAM,KAAK,CAAC;;;;;GAKX,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAA4C,EAAE;IAE9C,IAAI,CAAC;QACH,wEAAwE;QACxE,wEAAwE;QACxE,0BAA0B;QAC1B,MAAM,OAAO,GAAG,MAAM,qBAAqB,EAAE,CAAC;QAC9C,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CACT,iFAAiF,CAClF,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,MAAM,EAAE,CAAC;QAEf,IAAI,CAAC;YACH,MAAM,qBAAqB,EAAE,CAAC;YAE9B,uBAAuB;YACvB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;YACvE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CACT,+DAA+D,CAChE,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,EAAE;iBACb,WAAW,CAAC,aAAa,CAAC;iBAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;iBACrD,IAAI,EAAE,CAAC;YAEV,MAAM,OAAO,GAAG,MAAM,KAAK,CACzB,0CAA0C,CAC3C,CAAC;YACF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAE9D,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;gBAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;oBACrD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;oBAClE,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;gBACtC,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBACjC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/C,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;gBACnD,OAAO;YACT,CAAC;YAED,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;gBAEhD,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;gBAE1C,uCAAuC;gBACvC,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAG1C,CAAC;gBAEF,IAAI,OAAO,SAAS,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;oBACvC,MAAM,IAAI,KAAK,CACb,uBAAuB,IAAI,qCAAqC,CACjE,CAAC;gBACJ,CAAC;gBAED,MAAM,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;gBAE1B,MAAM,KAAK,CAAC,4CAA4C,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;gBAElE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;YACzC,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,MAAM,eAAe,CAAC,CAAC;YAEhE,mEAAmE;YACnE,yCAAyC;YACzC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC;oBACH,MAAM,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,GACtD,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;oBAC3C,MAAM,0BAA0B,EAAE,CAAC;oBACnC,MAAM,kBAAkB,CAAC,OAAgB,CAAC,CAAC;oBAC3C,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;gBACpD,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,CAAC,IAAI,CACV,sDAAsD,EACrD,CAAW,CAAC,OAAO,CACrB,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,eAAe,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemaGen.d.ts","sourceRoot":"","sources":["../../src/cli/schemaGen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"schemaGen.d.ts","sourceRoot":"","sources":["../../src/cli/schemaGen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAiChD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,YAAY,EAAE,GACtB,MAAM,CAwGR;AAaD,wBAAgB,qCAAqC,CACnD,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,QAAQ,EAAE,GACnB,MAAM,CAuBR;AAED,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,YAAY,EAAE,EACvB,aAAa,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAaR;AA6BD,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAgElD"}
|
package/dist/cli/schemaGen.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
|
-
import { disposeImportTs
|
|
3
|
+
import { disposeImportTs } from './uglyappConfig.js';
|
|
4
|
+
import { hasPostgresBackedCollections, loadAppCollectionDefs, } from './loadCollections.js';
|
|
4
5
|
import { checkSchemas, ensureSchemaSnapshotsTable, } from '../server/SchemaCheck.js';
|
|
5
6
|
import { fieldIndexStatements } from '../server/schemaIndexes.js';
|
|
6
7
|
import { closePg, initPg } from '../server/NodePool.js';
|
|
@@ -160,58 +161,68 @@ export function writeMigrationFile(collection, changes, migrationsDir, codeOverr
|
|
|
160
161
|
fs.writeFileSync(filePath, code, 'utf-8');
|
|
161
162
|
return filePath;
|
|
162
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* Write `shared/schema-snapshot.json` — the git-visible schema record. Pure
|
|
166
|
+
* zod serialization over every def that has a schema (Postgres AND D1); no
|
|
167
|
+
* database involved, so it runs even when no Postgres backend exists.
|
|
168
|
+
*/
|
|
169
|
+
function writeSchemaSnapshotJson(allDefs) {
|
|
170
|
+
const snapshotPath = path.join(process.cwd(), 'shared', 'schema-snapshot.json');
|
|
171
|
+
const snapshot = {};
|
|
172
|
+
for (const [name, def] of Object.entries(allDefs)) {
|
|
173
|
+
if (def.schema) {
|
|
174
|
+
snapshot[name] = serializeSchema(def.schema, def.indexes);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
fs.writeFileSync(snapshotPath, JSON.stringify(snapshot, null, 2) + '\n', 'utf-8');
|
|
178
|
+
console.log(`[schema-gen] Updated: shared/schema-snapshot.json`);
|
|
179
|
+
}
|
|
163
180
|
export async function runSchemaGen() {
|
|
164
|
-
await initPg();
|
|
165
|
-
const collectionsPath = path.resolve(process.cwd(), 'shared/collections.ts');
|
|
166
181
|
try {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
182
|
+
const allDefs = await loadAppCollectionDefs();
|
|
183
|
+
// All-D1 app (zero Postgres-backed collections): skip Postgres entirely —
|
|
184
|
+
// there is no DATABASE_URL / pg adapter and nothing to diff or migrate.
|
|
185
|
+
// The schema snapshot JSON is still written (pure serialization).
|
|
186
|
+
if (!hasPostgresBackedCollections(allDefs)) {
|
|
187
|
+
writeSchemaSnapshotJson(allDefs);
|
|
188
|
+
console.log('[schema-gen] All collections use the D1 backend — no Postgres migrations needed.');
|
|
189
|
+
return;
|
|
174
190
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
191
|
+
await initPg();
|
|
192
|
+
try {
|
|
193
|
+
await ensureSchemaSnapshotsTable();
|
|
194
|
+
const result = await checkSchemas(allDefs);
|
|
195
|
+
const migrationsDir = path.join(process.cwd(), 'server', 'migrations');
|
|
196
|
+
let generated = 0;
|
|
197
|
+
for (const [name, col] of Object.entries(result.collections)) {
|
|
198
|
+
if (col.action === 'store-baseline') {
|
|
199
|
+
const def = allDefs[name];
|
|
200
|
+
const filePath = writeMigrationFile(name, [], migrationsDir, generateMigrationCodeForNewCollection(name, def.indexes));
|
|
201
|
+
console.log(`[schema-gen] Generated (new collection): ${path.relative(process.cwd(), filePath)}`);
|
|
202
|
+
generated++;
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
if (col.action !== 'migration-required')
|
|
206
|
+
continue;
|
|
207
|
+
const filePath = writeMigrationFile(name, col.changes, migrationsDir);
|
|
208
|
+
console.log(`[schema-gen] Generated: ${path.relative(process.cwd(), filePath)}`);
|
|
186
209
|
generated++;
|
|
187
|
-
continue;
|
|
188
210
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
const snapshot = {};
|
|
198
|
-
for (const [name, def] of Object.entries(allDefs)) {
|
|
199
|
-
if (def.schema) {
|
|
200
|
-
snapshot[name] = serializeSchema(def.schema, def.indexes);
|
|
211
|
+
// Write schema snapshot JSON for git visibility
|
|
212
|
+
writeSchemaSnapshotJson(allDefs);
|
|
213
|
+
if (generated === 0) {
|
|
214
|
+
console.log('[schema-gen] No breaking changes detected — no migrations needed.');
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
console.log(`\n[schema-gen] Generated ${generated} migration file(s).`);
|
|
218
|
+
console.log('Fix all REPLACE_ME values, then run: npm run db:migrate');
|
|
201
219
|
}
|
|
202
220
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
if (generated === 0) {
|
|
206
|
-
console.log('[schema-gen] No breaking changes detected — no migrations needed.');
|
|
207
|
-
}
|
|
208
|
-
else {
|
|
209
|
-
console.log(`\n[schema-gen] Generated ${generated} migration file(s).`);
|
|
210
|
-
console.log('Fix all REPLACE_ME values, then run: npm run db:migrate');
|
|
221
|
+
finally {
|
|
222
|
+
closePg();
|
|
211
223
|
}
|
|
212
224
|
}
|
|
213
225
|
finally {
|
|
214
|
-
closePg();
|
|
215
226
|
await disposeImportTs();
|
|
216
227
|
}
|
|
217
228
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemaGen.js","sourceRoot":"","sources":["../../src/cli/schemaGen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"schemaGen.js","sourceRoot":"","sources":["../../src/cli/schemaGen.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemaStatus.d.ts","sourceRoot":"","sources":["../../src/cli/schemaStatus.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schemaStatus.d.ts","sourceRoot":"","sources":["../../src/cli/schemaStatus.ts"],"names":[],"mappings":"AAWA,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAsCrD"}
|
package/dist/cli/schemaStatus.js
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
1
|
import { closePg, initPg } from '../server/NodePool.js';
|
|
3
|
-
import { disposeImportTs
|
|
2
|
+
import { disposeImportTs } from './uglyappConfig.js';
|
|
3
|
+
import { hasPostgresBackedCollections, loadAppCollectionDefs, } from './loadCollections.js';
|
|
4
4
|
import { checkSchemas, formatSchemaCheckResult, } from '../server/SchemaCheck.js';
|
|
5
5
|
export async function runSchemaStatus() {
|
|
6
|
-
await initPg();
|
|
7
|
-
const collectionsPath = path.resolve(process.cwd(), 'shared/collections.ts');
|
|
8
6
|
try {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
console.log('[schema-status] No shared/collections.ts found');
|
|
7
|
+
const allDefs = await loadAppCollectionDefs();
|
|
8
|
+
// All-D1 app (zero Postgres-backed collections): no Postgres schema to
|
|
9
|
+
// check and no DATABASE_URL / pg adapter — exit clean.
|
|
10
|
+
if (!hasPostgresBackedCollections(allDefs)) {
|
|
11
|
+
console.log('[schema-status] All collections use the D1 backend — no Postgres schema to check.');
|
|
12
|
+
return;
|
|
16
13
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
14
|
+
await initPg();
|
|
15
|
+
try {
|
|
16
|
+
const result = await checkSchemas(allDefs);
|
|
17
|
+
if (result.status === 'ok') {
|
|
18
|
+
console.log('[schema-status] All schemas up to date');
|
|
19
|
+
}
|
|
20
|
+
else if (result.status === 'baseline') {
|
|
21
|
+
console.log('[schema-status] Some collections had no baseline (first run):');
|
|
22
|
+
console.log(formatSchemaCheckResult(result));
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
console.log('[schema-status] Schema drift detected:');
|
|
26
|
+
console.log(formatSchemaCheckResult(result));
|
|
27
|
+
console.log('\nRun "npm run db:schema-gen" to generate migration files.');
|
|
28
|
+
}
|
|
26
29
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
console.log(formatSchemaCheckResult(result));
|
|
30
|
-
console.log('\nRun "npm run db:schema-gen" to generate migration files.');
|
|
30
|
+
finally {
|
|
31
|
+
closePg();
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
34
|
finally {
|
|
34
|
-
closePg();
|
|
35
35
|
await disposeImportTs();
|
|
36
36
|
}
|
|
37
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemaStatus.js","sourceRoot":"","sources":["../../src/cli/schemaStatus.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"schemaStatus.js","sourceRoot":"","sources":["../../src/cli/schemaStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,YAAY,EACZ,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,qBAAqB,EAAE,CAAC;QAE9C,uEAAuE;QACvE,uDAAuD;QACvD,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CACT,mFAAmF,CACpF,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,MAAM,EAAE,CAAC;QAEf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAgB,CAAC,CAAC;YAEpD,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;YACxD,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CACT,+DAA+D,CAChE,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;gBACtD,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC7C,OAAO,CAAC,GAAG,CACT,4DAA4D,CAC7D,CAAC;YACJ,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,eAAe,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC"}
|
package/dist/cli/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "0.1.
|
|
1
|
+
export declare const CLI_VERSION = "0.1.950";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/cli/version.js
CHANGED