@metaobjectsdev/migrate-ts 0.11.4 → 0.11.5-rc.1
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/diff/index.js +43 -1
- package/dist/diff/index.js.map +1 -1
- package/dist/drift/drift.d.ts +6 -0
- package/dist/drift/drift.d.ts.map +1 -1
- package/dist/drift/drift.js +1 -0
- package/dist/drift/drift.js.map +1 -1
- package/dist/emit/index.d.ts.map +1 -1
- package/dist/emit/index.js +0 -9
- package/dist/emit/index.js.map +1 -1
- package/dist/emit/sqlite.d.ts.map +1 -1
- package/dist/emit/sqlite.js +21 -9
- package/dist/emit/sqlite.js.map +1 -1
- package/dist/expected-schema.d.ts +9 -1
- package/dist/expected-schema.d.ts.map +1 -1
- package/dist/expected-schema.js +4 -5
- package/dist/expected-schema.js.map +1 -1
- package/dist/index.d.ts +0 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -6
- package/dist/index.js.map +1 -1
- package/dist/introspect/d1.js +10 -2
- package/dist/introspect/d1.js.map +1 -1
- package/dist/snapshot/plan.d.ts +4 -2
- package/dist/snapshot/plan.d.ts.map +1 -1
- package/dist/snapshot/plan.js +3 -1
- package/dist/snapshot/plan.js.map +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/view-sql-compare.d.ts.map +1 -1
- package/dist/view-sql-compare.js +5 -7
- package/dist/view-sql-compare.js.map +1 -1
- package/package.json +2 -2
- package/src/diff/index.ts +47 -1
- package/src/drift/drift.ts +7 -0
- package/src/emit/index.ts +3 -13
- package/src/emit/sqlite.ts +23 -10
- package/src/expected-schema.ts +13 -6
- package/src/index.ts +4 -13
- package/src/introspect/d1.ts +9 -2
- package/src/snapshot/plan.ts +6 -1
- package/src/types.ts +8 -0
- package/src/view-sql-compare.ts +5 -7
- package/dist/expected-views.d.ts +0 -5
- package/dist/expected-views.d.ts.map +0 -1
- package/dist/expected-views.js +0 -169
- package/dist/expected-views.js.map +0 -1
- package/dist/source-aware-diff.d.ts +0 -20
- package/dist/source-aware-diff.d.ts.map +0 -1
- package/dist/source-aware-diff.js +0 -24
- package/dist/source-aware-diff.js.map +0 -1
- package/dist/view-ddl-postgres.d.ts +0 -4
- package/dist/view-ddl-postgres.d.ts.map +0 -1
- package/dist/view-ddl-postgres.js +0 -13
- package/dist/view-ddl-postgres.js.map +0 -1
- package/dist/view-ddl-sqlite.d.ts +0 -3
- package/dist/view-ddl-sqlite.d.ts.map +0 -1
- package/dist/view-ddl-sqlite.js +0 -7
- package/dist/view-ddl-sqlite.js.map +0 -1
- package/dist/view-diff.d.ts +0 -13
- package/dist/view-diff.d.ts.map +0 -1
- package/dist/view-diff.js +0 -42
- package/dist/view-diff.js.map +0 -1
- package/src/expected-views.ts +0 -195
- package/src/source-aware-diff.ts +0 -49
- package/src/view-ddl-postgres.ts +0 -15
- package/src/view-ddl-sqlite.ts +0 -7
- package/src/view-diff.ts +0 -55
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"d1.js","sourceRoot":"","sources":["../../src/introspect/d1.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"d1.js","sourceRoot":"","sources":["../../src/introspect/d1.ts"],"names":[],"mappings":"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"}
|
package/dist/snapshot/plan.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import type { ColumnNamingStrategy, MetaData } from "@metaobjectsdev/metadata";
|
|
2
2
|
import { type DiffArgs } from "../diff/index.js";
|
|
3
|
-
import type { Dialect, DiffResult, SchemaSnapshot } from "../types.js";
|
|
3
|
+
import type { Dialect, DiffResult, SchemaSnapshot, ViewDescriptor } from "../types.js";
|
|
4
4
|
export interface PlanOfflineArgs extends Pick<DiffArgs, "allow" | "onAmbiguous" | "ignoreTables"> {
|
|
5
5
|
metadata: MetaData;
|
|
6
6
|
dialect: Dialect;
|
|
7
7
|
/** The stored reference snapshot (the "from" side). Use `{ tables: [], views: [] }` for a fresh project. */
|
|
8
8
|
snapshot: SchemaSnapshot;
|
|
9
9
|
columnNamingStrategy?: ColumnNamingStrategy;
|
|
10
|
+
/** Expected views (via codegen-ts `buildProjectionViews`) — threaded into buildExpectedSchema. */
|
|
11
|
+
views?: readonly ViewDescriptor[];
|
|
10
12
|
}
|
|
11
13
|
export interface PlanOfflineResult {
|
|
12
14
|
/** The change set to emit, from diffing metadata-expected against the snapshot. */
|
|
@@ -21,5 +23,5 @@ export interface PlanOfflineResult {
|
|
|
21
23
|
*/
|
|
22
24
|
export declare function planOffline(args: PlanOfflineArgs): Promise<PlanOfflineResult>;
|
|
23
25
|
/** Seed an initial reference snapshot from metadata (greenfield baseline). */
|
|
24
|
-
export declare function baselineFromMetadata(metadata: MetaData, dialect: Dialect, columnNamingStrategy?: ColumnNamingStrategy): SchemaSnapshot;
|
|
26
|
+
export declare function baselineFromMetadata(metadata: MetaData, dialect: Dialect, columnNamingStrategy?: ColumnNamingStrategy, views?: readonly ViewDescriptor[]): SchemaSnapshot;
|
|
25
27
|
//# sourceMappingURL=plan.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/snapshot/plan.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAE/E,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/snapshot/plan.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAE/E,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEvF,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,aAAa,GAAG,cAAc,CAAC;IAC/F,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,4GAA4G;IAC5G,QAAQ,EAAE,cAAc,CAAC;IACzB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,kGAAkG;IAClG,KAAK,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,mFAAmF;IACnF,IAAI,EAAE,UAAU,CAAC;IACjB,6FAA6F;IAC7F,YAAY,EAAE,cAAc,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAenF;AAED,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,oBAAoB,CAAC,EAAE,oBAAoB,EAC3C,KAAK,CAAC,EAAE,SAAS,cAAc,EAAE,GAChC,cAAc,CAMhB"}
|
package/dist/snapshot/plan.js
CHANGED
|
@@ -9,6 +9,7 @@ export async function planOffline(args) {
|
|
|
9
9
|
const nextSnapshot = buildExpectedSchema(args.metadata, {
|
|
10
10
|
dialect: args.dialect,
|
|
11
11
|
...(args.columnNamingStrategy ? { columnNamingStrategy: args.columnNamingStrategy } : {}),
|
|
12
|
+
...(args.views !== undefined ? { views: args.views } : {}),
|
|
12
13
|
});
|
|
13
14
|
const result = await diff({
|
|
14
15
|
expected: nextSnapshot,
|
|
@@ -21,10 +22,11 @@ export async function planOffline(args) {
|
|
|
21
22
|
return { diff: result, nextSnapshot };
|
|
22
23
|
}
|
|
23
24
|
/** Seed an initial reference snapshot from metadata (greenfield baseline). */
|
|
24
|
-
export function baselineFromMetadata(metadata, dialect, columnNamingStrategy) {
|
|
25
|
+
export function baselineFromMetadata(metadata, dialect, columnNamingStrategy, views) {
|
|
25
26
|
return buildExpectedSchema(metadata, {
|
|
26
27
|
dialect,
|
|
27
28
|
...(columnNamingStrategy ? { columnNamingStrategy } : {}),
|
|
29
|
+
...(views !== undefined ? { views } : {}),
|
|
28
30
|
});
|
|
29
31
|
}
|
|
30
32
|
//# sourceMappingURL=plan.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/snapshot/plan.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAiB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/snapshot/plan.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAiB,MAAM,kBAAkB,CAAC;AAoBvD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAqB;IACrD,MAAM,YAAY,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE;QACtD,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3D,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;QACxB,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE,IAAI,CAAC,QAAQ;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClE,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AACxC,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,oBAAoB,CAClC,QAAkB,EAClB,OAAgB,EAChB,oBAA2C,EAC3C,KAAiC;IAEjC,OAAO,mBAAmB,CAAC,QAAQ,EAAE;QACnC,OAAO;QACP,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAC,CAAC;AACL,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -114,6 +114,14 @@ export interface ViewDescriptor {
|
|
|
114
114
|
* body change triggers a `replace-view`.
|
|
115
115
|
*/
|
|
116
116
|
sql?: string;
|
|
117
|
+
/**
|
|
118
|
+
* Physical tables this view reads (base + joined tables). Populated on the
|
|
119
|
+
* EXPECTED side only (the view producer knows the join graph; introspection
|
|
120
|
+
* does not resolve it). The diff uses it to drop + recreate the view around a
|
|
121
|
+
* column-altering change to one of its source tables — postgres blocks ALTER on
|
|
122
|
+
* a column a view depends on, and sqlite's recreate-and-copy rebuilds the table.
|
|
123
|
+
*/
|
|
124
|
+
dependsOn?: readonly string[];
|
|
117
125
|
}
|
|
118
126
|
/**
|
|
119
127
|
* Every variant with a `table: string` (or `table: TableDescriptor`) field also
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAO7C,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,8EAA8E;IAC9E,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB;;;OAGG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,WAAW,EAAE,YAAY,EAAE,CAAC;IAC5B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,QAAQ,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAChC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;IAC5B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;AAEzE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;;;;;;OAYG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-sql-compare.d.ts","sourceRoot":"","sources":["../src/view-sql-compare.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"view-sql-compare.d.ts","sourceRoot":"","sources":["../src/view-sql-compare.ts"],"names":[],"mappings":"AA0BA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOpD;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAGnF"}
|
package/dist/view-sql-compare.js
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
// view-sql-compare.ts — the single shared comparator for view definition SQL.
|
|
2
2
|
//
|
|
3
3
|
// View definition SQL arrives in two shapes across the pipeline:
|
|
4
|
-
// - EXPECTED (
|
|
5
|
-
// - ACTUAL (introspect): sqlite's sqlite_master.sql is the full
|
|
4
|
+
// - EXPECTED (buildProjectionViews): the body only — `SELECT ... FROM ...`.
|
|
5
|
+
// - ACTUAL (introspect): sqlite's/D1's sqlite_master.sql is the full
|
|
6
6
|
// `CREATE VIEW <name> AS <body>`; Postgres' view_definition is body-only.
|
|
7
|
-
// - The CLI's readExistingViewSql synthesizes `CREATE VIEW <name> AS <body>`
|
|
8
|
-
// for Postgres so it matches what emitViewDdl produces.
|
|
9
7
|
//
|
|
10
|
-
// normalizeViewSql reduces
|
|
11
|
-
// diff (expected vs introspected)
|
|
12
|
-
//
|
|
8
|
+
// normalizeViewSql reduces either of these to a comparable canonical form so the
|
|
9
|
+
// diff (expected vs introspected) uses ONE comparison. It strips a leading
|
|
10
|
+
// `CREATE [OR REPLACE] VIEW <name> AS`,
|
|
13
11
|
// collapses runs of whitespace to a single space, drops a trailing `;`, and
|
|
14
12
|
// lower-cases — view-body drift should be classified by structure, not by
|
|
15
13
|
// incidental whitespace/case/wrapper differences.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-sql-compare.js","sourceRoot":"","sources":["../src/view-sql-compare.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,EAAE;AACF,iEAAiE;AACjE,
|
|
1
|
+
{"version":3,"file":"view-sql-compare.js","sourceRoot":"","sources":["../src/view-sql-compare.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,EAAE;AACF,iEAAiE;AACjE,8EAA8E;AAC9E,uEAAuE;AACvE,8EAA8E;AAC9E,EAAE;AACF,iFAAiF;AACjF,2EAA2E;AAC3E,wCAAwC;AACxC,4EAA4E;AAC5E,0EAA0E;AAC1E,kDAAkD;AAClD,EAAE;AACF,+EAA+E;AAC/E,iFAAiF;AACjF,8EAA8E;AAC9E,wEAAwE;AACxE,4EAA4E;AAC5E,4EAA4E;AAC5E,4EAA4E;AAC5E,8EAA8E;AAE9E,MAAM,kBAAkB,GACtB,0HAA0H,CAAC;AAE7H;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,OAAO,GAAG;SACP,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,IAAI,EAAE;SACN,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,CAAqB,EAAE,CAAqB;IACxE,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACrD,OAAO,gBAAgB,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metaobjectsdev/migrate-ts",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.5-rc.1",
|
|
4
4
|
"description": "Schema migration tooling for MetaObjects: diff metadata vs DB and emit SQL for Postgres and SQLite.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"@iarna/toml": "^2.2.5",
|
|
48
|
-
"@metaobjectsdev/metadata": "0.11.
|
|
48
|
+
"@metaobjectsdev/metadata": "0.11.5-rc.1"
|
|
49
49
|
},
|
|
50
50
|
"peerDependencies": {
|
|
51
51
|
"kysely": ">=0.27.0"
|
package/src/diff/index.ts
CHANGED
|
@@ -202,12 +202,19 @@ export async function diff(
|
|
|
202
202
|
// Pass 2b: views. Identity is (schema, name). A name present on both sides
|
|
203
203
|
// with a divergent body (whitespace-/wrapper-normalized) emits replace-view;
|
|
204
204
|
// introspect now reads the actual body so view-body drift is visible.
|
|
205
|
+
const expectedViewsInScope = args.expected.views.filter((v) => inScope(v.schema));
|
|
205
206
|
diffViews(
|
|
206
|
-
|
|
207
|
+
expectedViewsInScope,
|
|
207
208
|
args.actual.views.filter((v) => inScope(v.schema)),
|
|
208
209
|
changes,
|
|
209
210
|
);
|
|
210
211
|
|
|
212
|
+
// Pass 2c: a column-altering change to a table a view reads forces the view to be
|
|
213
|
+
// dropped before and recreated after — postgres blocks ALTER on a column a view
|
|
214
|
+
// depends on, and sqlite rebuilds the table via recreate-and-copy. Body-unchanged
|
|
215
|
+
// dependent views get no change from Pass 2b, so this is where they're picked up.
|
|
216
|
+
recreateViewsDependingOnChangedTables(expectedViewsInScope, changes);
|
|
217
|
+
|
|
211
218
|
// Pass 3: detect table renames BEFORE column renames — so a renamed table's
|
|
212
219
|
// columns are not scanned as orphaned drop/add pairs.
|
|
213
220
|
await detectTableRenames(changes, args.onAmbiguous);
|
|
@@ -384,6 +391,45 @@ function diffViews(
|
|
|
384
391
|
}
|
|
385
392
|
}
|
|
386
393
|
|
|
394
|
+
/** Column-altering change kinds: a view reading the affected column must be recreated. */
|
|
395
|
+
const VIEW_RECREATE_TRIGGERS = new Set<Change["kind"]>([
|
|
396
|
+
"change-column-type", "change-column-nullable", "change-column-default",
|
|
397
|
+
"drop-column", "rename-column",
|
|
398
|
+
]);
|
|
399
|
+
|
|
400
|
+
function recreateViewsDependingOnChangedTables(
|
|
401
|
+
expectedViews: ViewDescriptor[],
|
|
402
|
+
changes: Change[],
|
|
403
|
+
): void {
|
|
404
|
+
const alteredTables = new Set<string>();
|
|
405
|
+
for (const c of changes) {
|
|
406
|
+
if (VIEW_RECREATE_TRIGGERS.has(c.kind)) {
|
|
407
|
+
const t = (c as { table?: string }).table;
|
|
408
|
+
if (typeof t === "string") alteredTables.add(t);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
if (alteredTables.size === 0) return;
|
|
412
|
+
|
|
413
|
+
for (const v of expectedViews) {
|
|
414
|
+
if (!(v.dependsOn ?? []).some((t) => alteredTables.has(t))) continue;
|
|
415
|
+
const id = viewIdentity(v);
|
|
416
|
+
|
|
417
|
+
// Brand-new view (create-view already queued): the DB has no prior view to
|
|
418
|
+
// block the ALTER, and the queued create-view already builds it post-change.
|
|
419
|
+
if (changes.some((c) => c.kind === "create-view" && viewIdentity(c.view) === id)) continue;
|
|
420
|
+
|
|
421
|
+
// Supersede any replace-view (CREATE OR REPLACE can't run mid-ALTER) with an
|
|
422
|
+
// explicit drop(before)/create(after) pair — the emit STAGE_ORDER sequences
|
|
423
|
+
// drop-view ahead of the column change and create-view after it.
|
|
424
|
+
for (let i = changes.length - 1; i >= 0; i--) {
|
|
425
|
+
const c = changes[i]!;
|
|
426
|
+
if (c.kind === "replace-view" && viewIdentity(c.view) === id) changes.splice(i, 1);
|
|
427
|
+
}
|
|
428
|
+
changes.push({ kind: "drop-view", view: v.name, ...schemaSpread(v.schema), status: ALLOWED });
|
|
429
|
+
changes.push({ kind: "create-view", view: v, ...schemaSpread(v.schema), status: ALLOWED });
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
|
|
387
433
|
function columnDefaultsEqual(a: ColumnDescriptor["default"], b: ColumnDescriptor["default"]): boolean {
|
|
388
434
|
if (a === undefined && b === undefined) return true;
|
|
389
435
|
if (a === undefined || b === undefined) return false;
|
package/src/drift/drift.ts
CHANGED
|
@@ -34,6 +34,12 @@ export interface ComputeDriftOptions {
|
|
|
34
34
|
* Omit to keep `diff`'s default (migration-tracking sidecar tables).
|
|
35
35
|
*/
|
|
36
36
|
ignoreTables?: string[];
|
|
37
|
+
/**
|
|
38
|
+
* Expected views (projection → CREATE VIEW body), computed by the caller via
|
|
39
|
+
* codegen-ts's `buildProjectionViews`. migrate-ts no longer generates view DDL
|
|
40
|
+
* itself; pass these so view-body drift is detected. Defaults to none.
|
|
41
|
+
*/
|
|
42
|
+
views?: readonly import("../types.js").ViewDescriptor[];
|
|
37
43
|
}
|
|
38
44
|
|
|
39
45
|
/**
|
|
@@ -54,6 +60,7 @@ export async function computeDrift(
|
|
|
54
60
|
...(opts?.columnNamingStrategy !== undefined
|
|
55
61
|
? { columnNamingStrategy: opts.columnNamingStrategy }
|
|
56
62
|
: {}),
|
|
63
|
+
...(opts?.views !== undefined ? { views: opts.views } : {}),
|
|
57
64
|
});
|
|
58
65
|
const actual = await introspect(db, dialect);
|
|
59
66
|
return diff({
|
package/src/emit/index.ts
CHANGED
|
@@ -3,6 +3,9 @@ import { BlockedChangesError } from "../errors.js";
|
|
|
3
3
|
import { renderPostgres } from "./postgres.js";
|
|
4
4
|
import { renderSqlite } from "./sqlite.js";
|
|
5
5
|
import { renderD1 } from "./d1.js";
|
|
6
|
+
// View DDL is rendered by every dialect renderer (see their create/drop/replace-view
|
|
7
|
+
// cases): postgres uses CREATE [OR REPLACE] VIEW with schema namespacing; sqlite/d1
|
|
8
|
+
// use DROP+CREATE (no CREATE OR REPLACE, no schema). There is no dialect gate here.
|
|
6
9
|
|
|
7
10
|
export interface EmitOptions {
|
|
8
11
|
dialect: Dialect;
|
|
@@ -19,23 +22,10 @@ export interface EmitOptions {
|
|
|
19
22
|
actualMeta?: SnapshotMeta;
|
|
20
23
|
}
|
|
21
24
|
|
|
22
|
-
const VIEW_KINDS = new Set<Change["kind"]>(["create-view", "drop-view", "replace-view"]);
|
|
23
|
-
|
|
24
25
|
export function emit(changes: Change[], opts: EmitOptions): EmitResult {
|
|
25
26
|
const blocked = changes.filter((c) => c.status.state === "blocked");
|
|
26
27
|
if (blocked.length > 0) throw new BlockedChangesError(blocked);
|
|
27
28
|
|
|
28
|
-
// Views are postgres-only for now (sqlite/d1 DDL renderers don't handle them).
|
|
29
|
-
if (opts.dialect !== "postgres") {
|
|
30
|
-
const viewChanges = changes.filter((c) => VIEW_KINDS.has(c.kind));
|
|
31
|
-
if (viewChanges.length > 0) {
|
|
32
|
-
throw new Error(
|
|
33
|
-
`view migration not implemented for dialect "${opts.dialect}" ` +
|
|
34
|
-
`(${viewChanges.length} view-targeting change(s); postgres-only today)`,
|
|
35
|
-
);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
29
|
switch (opts.dialect) {
|
|
40
30
|
case "postgres": return renderPostgres(changes);
|
|
41
31
|
case "sqlite": return renderSqlite(changes, opts.expectedSchema, opts.actualMeta);
|
package/src/emit/sqlite.ts
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
Change, EmitResult, ColumnDescriptor, IndexDescriptor,
|
|
3
|
-
TableDescriptor, SchemaSnapshot, SnapshotMeta, ColumnDefault,
|
|
3
|
+
TableDescriptor, SchemaSnapshot, SnapshotMeta, ColumnDefault, ViewDescriptor,
|
|
4
4
|
} from "../types.js";
|
|
5
5
|
import type { SqlType } from "../sql-type.js";
|
|
6
6
|
|
|
7
7
|
// Stage ordering similar to PG; recreate-and-copy bundles get inserted
|
|
8
8
|
// at their first triggering change's position in Task 23.
|
|
9
9
|
const STAGE_ORDER: Record<Change["kind"], number> = {
|
|
10
|
+
// drop-view runs FIRST (mirrors postgres): a view that depends on a table about
|
|
11
|
+
// to be recreated-and-copied must be dropped before the DROP TABLE / RENAME, or
|
|
12
|
+
// SQLite's rename re-parses the dependent view and can error mid-recreate. The
|
|
13
|
+
// diff's Pass 2c injects exactly this drop(before)/create(after) pair.
|
|
14
|
+
"drop-view": 0,
|
|
10
15
|
"create-table": 1,
|
|
11
16
|
"add-column": 2, "drop-column": 2,
|
|
12
17
|
"change-column-type": 2, "change-column-nullable": 2, "change-column-default": 2,
|
|
@@ -15,7 +20,8 @@ const STAGE_ORDER: Record<Change["kind"], number> = {
|
|
|
15
20
|
"add-fk": 5, "drop-fk": 5,
|
|
16
21
|
"add-check": 5, "drop-check": 5,
|
|
17
22
|
"drop-table": 6,
|
|
18
|
-
|
|
23
|
+
// create-view / replace-view run LAST — after every table change the view reads.
|
|
24
|
+
"create-view": 99, "replace-view": 99,
|
|
19
25
|
};
|
|
20
26
|
|
|
21
27
|
const RECREATE_TRIGGERING_KINDS = new Set<Change["kind"]>([
|
|
@@ -204,13 +210,21 @@ function renderUpNative(c: Change): string {
|
|
|
204
210
|
case "drop-fk":
|
|
205
211
|
// These are handled by renderRecreate before reaching renderUpNative.
|
|
206
212
|
throw new Error(`renderUpNative: ${c.kind} should have been handled by recreate bundler`);
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
case "
|
|
210
|
-
|
|
213
|
+
// SQLite has no schema namespacing for views and no CREATE OR REPLACE VIEW;
|
|
214
|
+
// a replace is DROP + CREATE. The view body lives in ViewDescriptor.sql.
|
|
215
|
+
case "create-view": return renderCreateView(c.view);
|
|
216
|
+
case "drop-view": return `DROP VIEW IF EXISTS ${quote(c.view)};`;
|
|
217
|
+
case "replace-view": return `DROP VIEW IF EXISTS ${quote(c.view.name)};\n${renderCreateView(c.view)}`;
|
|
211
218
|
}
|
|
212
219
|
}
|
|
213
220
|
|
|
221
|
+
function renderCreateView(v: ViewDescriptor): string {
|
|
222
|
+
if (v.sql === undefined || v.sql.trim().length === 0) {
|
|
223
|
+
throw new Error(`view "${v.name}" has no sql body — buildExpectedSchema must populate it before emit`);
|
|
224
|
+
}
|
|
225
|
+
return `CREATE VIEW ${quote(v.name)} AS\n${v.sql};`;
|
|
226
|
+
}
|
|
227
|
+
|
|
214
228
|
function renderDownNative(c: Change): string {
|
|
215
229
|
switch (c.kind) {
|
|
216
230
|
case "create-table": return `DROP TABLE ${quote(c.table.name)};`;
|
|
@@ -234,10 +248,9 @@ function renderDownNative(c: Change): string {
|
|
|
234
248
|
case "drop-fk":
|
|
235
249
|
// These are handled by renderRecreate before reaching renderDownNative.
|
|
236
250
|
throw new Error(`renderDownNative: ${c.kind} should have been handled by recreate bundler`);
|
|
237
|
-
case "create-view":
|
|
238
|
-
case "drop-view":
|
|
239
|
-
case "replace-view":
|
|
240
|
-
throw new Error(`unexpected view-kind in renderSqlite: ${c.kind}`);
|
|
251
|
+
case "create-view": return `DROP VIEW IF EXISTS ${quote(c.view.name)};`;
|
|
252
|
+
case "drop-view": return `-- WARNING: down migration cannot restore the original view definition`;
|
|
253
|
+
case "replace-view": return `-- WARNING: down migration cannot restore the original view definition`;
|
|
241
254
|
}
|
|
242
255
|
}
|
|
243
256
|
|
package/src/expected-schema.ts
CHANGED
|
@@ -58,9 +58,8 @@ import {
|
|
|
58
58
|
import type { SqlType } from "./sql-type.js";
|
|
59
59
|
import type {
|
|
60
60
|
Dialect, SchemaSnapshot, TableDescriptor, ColumnDescriptor, IndexDescriptor, FkDescriptor,
|
|
61
|
-
CheckDescriptor,
|
|
61
|
+
CheckDescriptor, ViewDescriptor,
|
|
62
62
|
} from "./types.js";
|
|
63
|
-
import { buildExpectedViews } from "./expected-views.js";
|
|
64
63
|
import {
|
|
65
64
|
resolveReferentialActions,
|
|
66
65
|
validateSetNullNullability,
|
|
@@ -85,6 +84,14 @@ export interface BuildExpectedSchemaOptions {
|
|
|
85
84
|
* mismatch yields a schema whose columns the runtime can't address.
|
|
86
85
|
*/
|
|
87
86
|
columnNamingStrategy?: ColumnNamingStrategy;
|
|
87
|
+
/**
|
|
88
|
+
* Expected views (projection → CREATE VIEW body), computed by the caller via
|
|
89
|
+
* codegen-ts's `buildProjectionViews` and threaded in. migrate-ts does NOT
|
|
90
|
+
* generate view DDL itself (it stays dependency-pure — never importing the
|
|
91
|
+
* code generator); view SQL has a single source, `emitViewDdl` in codegen-ts.
|
|
92
|
+
* Defaults to none.
|
|
93
|
+
*/
|
|
94
|
+
views?: readonly ViewDescriptor[];
|
|
88
95
|
}
|
|
89
96
|
|
|
90
97
|
export function buildExpectedSchema(
|
|
@@ -160,10 +167,10 @@ export function buildExpectedSchema(
|
|
|
160
167
|
}
|
|
161
168
|
}
|
|
162
169
|
|
|
163
|
-
// Pass 4: views from read-only projections
|
|
164
|
-
//
|
|
165
|
-
//
|
|
166
|
-
const views =
|
|
170
|
+
// Pass 4: views from read-only projections — supplied by the caller (computed
|
|
171
|
+
// via codegen-ts's buildProjectionViews, the single view-SQL source). migrate-ts
|
|
172
|
+
// never generates view DDL itself, keeping it free of a codegen-ts dependency.
|
|
173
|
+
const views = (opts?.views ?? []) as ViewDescriptor[];
|
|
167
174
|
|
|
168
175
|
return { tables, views };
|
|
169
176
|
}
|
package/src/index.ts
CHANGED
|
@@ -50,12 +50,11 @@ export type { EmitOptions } from "./emit/index.js";
|
|
|
50
50
|
export type { WriteMigrationOptions, WriteMigrationResult } from "./write-migration.js";
|
|
51
51
|
export type { WriteMigrationD1Options, WriteMigrationD1Result } from "./write-migration-d1.js";
|
|
52
52
|
|
|
53
|
-
// View diff
|
|
53
|
+
// View-body comparison — used by the diff to detect body drift (replace-view).
|
|
54
|
+
// View DDL itself is produced by the diff + rendered by each dialect's emitter;
|
|
55
|
+
// there is no standalone view-migration emitter (the source-aware-diff / view-diff
|
|
56
|
+
// / view-ddl-{postgres,sqlite} stack was folded into the schema-diff path).
|
|
54
57
|
export { normalizeViewSql, viewSqlEquals } from "./view-sql-compare.js";
|
|
55
|
-
export { classifyViewDiff } from "./view-diff.js";
|
|
56
|
-
export type { ViewShape, ViewDiffClass, ViewMigrationOpts } from "./view-diff.js";
|
|
57
|
-
export { emitPostgresViewMigration } from "./view-ddl-postgres.js";
|
|
58
|
-
export { emitSqliteViewMigration } from "./view-ddl-sqlite.js";
|
|
59
58
|
|
|
60
59
|
// D1 dialect emitter + safety pass.
|
|
61
60
|
// renderD1 is exported directly (unlike renderSqlite/renderPostgres) so
|
|
@@ -64,14 +63,6 @@ export { emitSqliteViewMigration } from "./view-ddl-sqlite.js";
|
|
|
64
63
|
export { renderD1 } from "./emit/d1.js";
|
|
65
64
|
export { applyD1SafetyPass, D1UnsupportedStatementError } from "./emit/d1-safety-pass.js";
|
|
66
65
|
|
|
67
|
-
// View migrations orchestrator
|
|
68
|
-
export {
|
|
69
|
-
computeViewMigrations,
|
|
70
|
-
type ViewMigrationInput,
|
|
71
|
-
type ViewMigrationsOpts,
|
|
72
|
-
type ViewMigrationsResult,
|
|
73
|
-
} from "./source-aware-diff.js";
|
|
74
|
-
|
|
75
66
|
// D1 introspection
|
|
76
67
|
export { introspectD1, type D1Runner, type IntrospectD1Options } from "./introspect/d1.js";
|
|
77
68
|
|
package/src/introspect/d1.ts
CHANGED
|
@@ -177,10 +177,17 @@ async function readForeignKeys(exec: Exec, table: string): Promise<FkDescriptor[
|
|
|
177
177
|
}
|
|
178
178
|
|
|
179
179
|
async function readViews(exec: Exec): Promise<ViewDescriptor[]> {
|
|
180
|
+
// sqlite_master.sql holds the full `CREATE VIEW <name> AS <body>` statement, so
|
|
181
|
+
// D1 gets the same view-body drift detection as the kysely sqlite path — the
|
|
182
|
+
// diff's comparator strips the leading CREATE VIEW before comparing bodies.
|
|
180
183
|
const rows = await exec(
|
|
181
|
-
"SELECT name FROM sqlite_master WHERE type='view' AND name NOT LIKE 'sqlite_%' ORDER BY name",
|
|
184
|
+
"SELECT name, sql FROM sqlite_master WHERE type='view' AND name NOT LIKE 'sqlite_%' ORDER BY name",
|
|
182
185
|
);
|
|
183
|
-
return rows.map((r) =>
|
|
186
|
+
return rows.map((r) => {
|
|
187
|
+
const view: ViewDescriptor = { name: String(r.name) };
|
|
188
|
+
if (r.sql) view.sql = String(r.sql);
|
|
189
|
+
return view;
|
|
190
|
+
});
|
|
184
191
|
}
|
|
185
192
|
|
|
186
193
|
/**
|
package/src/snapshot/plan.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import type { ColumnNamingStrategy, MetaData } from "@metaobjectsdev/metadata";
|
|
3
3
|
import { buildExpectedSchema } from "../expected-schema.js";
|
|
4
4
|
import { diff, type DiffArgs } from "../diff/index.js";
|
|
5
|
-
import type { Dialect, DiffResult, SchemaSnapshot } from "../types.js";
|
|
5
|
+
import type { Dialect, DiffResult, SchemaSnapshot, ViewDescriptor } from "../types.js";
|
|
6
6
|
|
|
7
7
|
export interface PlanOfflineArgs extends Pick<DiffArgs, "allow" | "onAmbiguous" | "ignoreTables"> {
|
|
8
8
|
metadata: MetaData;
|
|
@@ -10,6 +10,8 @@ export interface PlanOfflineArgs extends Pick<DiffArgs, "allow" | "onAmbiguous"
|
|
|
10
10
|
/** The stored reference snapshot (the "from" side). Use `{ tables: [], views: [] }` for a fresh project. */
|
|
11
11
|
snapshot: SchemaSnapshot;
|
|
12
12
|
columnNamingStrategy?: ColumnNamingStrategy;
|
|
13
|
+
/** Expected views (via codegen-ts `buildProjectionViews`) — threaded into buildExpectedSchema. */
|
|
14
|
+
views?: readonly ViewDescriptor[];
|
|
13
15
|
}
|
|
14
16
|
|
|
15
17
|
export interface PlanOfflineResult {
|
|
@@ -28,6 +30,7 @@ export async function planOffline(args: PlanOfflineArgs): Promise<PlanOfflineRes
|
|
|
28
30
|
const nextSnapshot = buildExpectedSchema(args.metadata, {
|
|
29
31
|
dialect: args.dialect,
|
|
30
32
|
...(args.columnNamingStrategy ? { columnNamingStrategy: args.columnNamingStrategy } : {}),
|
|
33
|
+
...(args.views !== undefined ? { views: args.views } : {}),
|
|
31
34
|
});
|
|
32
35
|
const result = await diff({
|
|
33
36
|
expected: nextSnapshot,
|
|
@@ -45,9 +48,11 @@ export function baselineFromMetadata(
|
|
|
45
48
|
metadata: MetaData,
|
|
46
49
|
dialect: Dialect,
|
|
47
50
|
columnNamingStrategy?: ColumnNamingStrategy,
|
|
51
|
+
views?: readonly ViewDescriptor[],
|
|
48
52
|
): SchemaSnapshot {
|
|
49
53
|
return buildExpectedSchema(metadata, {
|
|
50
54
|
dialect,
|
|
51
55
|
...(columnNamingStrategy ? { columnNamingStrategy } : {}),
|
|
56
|
+
...(views !== undefined ? { views } : {}),
|
|
52
57
|
});
|
|
53
58
|
}
|
package/src/types.ts
CHANGED
|
@@ -129,6 +129,14 @@ export interface ViewDescriptor {
|
|
|
129
129
|
* body change triggers a `replace-view`.
|
|
130
130
|
*/
|
|
131
131
|
sql?: string;
|
|
132
|
+
/**
|
|
133
|
+
* Physical tables this view reads (base + joined tables). Populated on the
|
|
134
|
+
* EXPECTED side only (the view producer knows the join graph; introspection
|
|
135
|
+
* does not resolve it). The diff uses it to drop + recreate the view around a
|
|
136
|
+
* column-altering change to one of its source tables — postgres blocks ALTER on
|
|
137
|
+
* a column a view depends on, and sqlite's recreate-and-copy rebuilds the table.
|
|
138
|
+
*/
|
|
139
|
+
dependsOn?: readonly string[];
|
|
132
140
|
}
|
|
133
141
|
|
|
134
142
|
// ---------------------------------------------------------------------------
|
package/src/view-sql-compare.ts
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
// view-sql-compare.ts — the single shared comparator for view definition SQL.
|
|
2
2
|
//
|
|
3
3
|
// View definition SQL arrives in two shapes across the pipeline:
|
|
4
|
-
// - EXPECTED (
|
|
5
|
-
// - ACTUAL (introspect): sqlite's sqlite_master.sql is the full
|
|
4
|
+
// - EXPECTED (buildProjectionViews): the body only — `SELECT ... FROM ...`.
|
|
5
|
+
// - ACTUAL (introspect): sqlite's/D1's sqlite_master.sql is the full
|
|
6
6
|
// `CREATE VIEW <name> AS <body>`; Postgres' view_definition is body-only.
|
|
7
|
-
// - The CLI's readExistingViewSql synthesizes `CREATE VIEW <name> AS <body>`
|
|
8
|
-
// for Postgres so it matches what emitViewDdl produces.
|
|
9
7
|
//
|
|
10
|
-
// normalizeViewSql reduces
|
|
11
|
-
// diff (expected vs introspected)
|
|
12
|
-
//
|
|
8
|
+
// normalizeViewSql reduces either of these to a comparable canonical form so the
|
|
9
|
+
// diff (expected vs introspected) uses ONE comparison. It strips a leading
|
|
10
|
+
// `CREATE [OR REPLACE] VIEW <name> AS`,
|
|
13
11
|
// collapses runs of whitespace to a single space, drops a trailing `;`, and
|
|
14
12
|
// lower-cases — view-body drift should be classified by structure, not by
|
|
15
13
|
// incidental whitespace/case/wrapper differences.
|
package/dist/expected-views.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { MetaRoot } from "@metaobjectsdev/metadata";
|
|
2
|
-
import { type ColumnNamingStrategy } from "@metaobjectsdev/metadata";
|
|
3
|
-
import type { ViewDescriptor } from "./types.js";
|
|
4
|
-
export declare function buildExpectedViews(root: MetaRoot, strategy: ColumnNamingStrategy): ViewDescriptor[];
|
|
5
|
-
//# sourceMappingURL=expected-views.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"expected-views.d.ts","sourceRoot":"","sources":["../src/expected-views.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAc,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EACL,KAAK,oBAAoB,EAW1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,oBAAoB,GAAG,cAAc,EAAE,CAWnG"}
|