@metaobjectsdev/migrate-ts 0.5.0-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.
Files changed (98) hide show
  1. package/LICENSE +189 -0
  2. package/README.md +73 -0
  3. package/dist/diff/index.d.ts +30 -0
  4. package/dist/diff/index.d.ts.map +1 -0
  5. package/dist/diff/index.js +226 -0
  6. package/dist/diff/index.js.map +1 -0
  7. package/dist/diff/rename-heuristic.d.ts +23 -0
  8. package/dist/diff/rename-heuristic.d.ts.map +1 -0
  9. package/dist/diff/rename-heuristic.js +236 -0
  10. package/dist/diff/rename-heuristic.js.map +1 -0
  11. package/dist/diff/status.d.ts +8 -0
  12. package/dist/diff/status.d.ts.map +1 -0
  13. package/dist/diff/status.js +53 -0
  14. package/dist/diff/status.js.map +1 -0
  15. package/dist/emit/index.d.ts +17 -0
  16. package/dist/emit/index.d.ts.map +1 -0
  17. package/dist/emit/index.js +18 -0
  18. package/dist/emit/index.js.map +1 -0
  19. package/dist/emit/postgres.d.ts +3 -0
  20. package/dist/emit/postgres.d.ts.map +1 -0
  21. package/dist/emit/postgres.js +181 -0
  22. package/dist/emit/postgres.js.map +1 -0
  23. package/dist/emit/sqlite.d.ts +3 -0
  24. package/dist/emit/sqlite.d.ts.map +1 -0
  25. package/dist/emit/sqlite.js +302 -0
  26. package/dist/emit/sqlite.js.map +1 -0
  27. package/dist/errors.d.ts +8 -0
  28. package/dist/errors.d.ts.map +1 -0
  29. package/dist/errors.js +54 -0
  30. package/dist/errors.js.map +1 -0
  31. package/dist/expected-schema.d.ts +15 -0
  32. package/dist/expected-schema.d.ts.map +1 -0
  33. package/dist/expected-schema.js +243 -0
  34. package/dist/expected-schema.js.map +1 -0
  35. package/dist/index.d.ts +18 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +25 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/introspect/index.d.ts +6 -0
  40. package/dist/introspect/index.d.ts.map +1 -0
  41. package/dist/introspect/index.js +11 -0
  42. package/dist/introspect/index.js.map +1 -0
  43. package/dist/introspect/postgres.d.ts +57 -0
  44. package/dist/introspect/postgres.d.ts.map +1 -0
  45. package/dist/introspect/postgres.js +339 -0
  46. package/dist/introspect/postgres.js.map +1 -0
  47. package/dist/introspect/sqlite.d.ts +4 -0
  48. package/dist/introspect/sqlite.d.ts.map +1 -0
  49. package/dist/introspect/sqlite.js +192 -0
  50. package/dist/introspect/sqlite.js.map +1 -0
  51. package/dist/source-aware-diff.d.ts +20 -0
  52. package/dist/source-aware-diff.d.ts.map +1 -0
  53. package/dist/source-aware-diff.js +24 -0
  54. package/dist/source-aware-diff.js.map +1 -0
  55. package/dist/sql-type.d.ts +45 -0
  56. package/dist/sql-type.d.ts.map +1 -0
  57. package/dist/sql-type.js +76 -0
  58. package/dist/sql-type.js.map +1 -0
  59. package/dist/types.d.ts +223 -0
  60. package/dist/types.d.ts.map +1 -0
  61. package/dist/types.js +2 -0
  62. package/dist/types.js.map +1 -0
  63. package/dist/view-ddl-postgres.d.ts +4 -0
  64. package/dist/view-ddl-postgres.d.ts.map +1 -0
  65. package/dist/view-ddl-postgres.js +13 -0
  66. package/dist/view-ddl-postgres.js.map +1 -0
  67. package/dist/view-ddl-sqlite.d.ts +3 -0
  68. package/dist/view-ddl-sqlite.d.ts.map +1 -0
  69. package/dist/view-ddl-sqlite.js +7 -0
  70. package/dist/view-ddl-sqlite.js.map +1 -0
  71. package/dist/view-diff.d.ts +13 -0
  72. package/dist/view-diff.d.ts.map +1 -0
  73. package/dist/view-diff.js +42 -0
  74. package/dist/view-diff.js.map +1 -0
  75. package/dist/write-migration.d.ts +19 -0
  76. package/dist/write-migration.d.ts.map +1 -0
  77. package/dist/write-migration.js +34 -0
  78. package/dist/write-migration.js.map +1 -0
  79. package/package.json +50 -0
  80. package/src/diff/index.ts +294 -0
  81. package/src/diff/rename-heuristic.ts +265 -0
  82. package/src/diff/status.ts +55 -0
  83. package/src/emit/index.ts +38 -0
  84. package/src/emit/postgres.ts +189 -0
  85. package/src/emit/sqlite.ts +322 -0
  86. package/src/errors.ts +58 -0
  87. package/src/expected-schema.ts +326 -0
  88. package/src/index.ts +49 -0
  89. package/src/introspect/index.ts +14 -0
  90. package/src/introspect/postgres.ts +428 -0
  91. package/src/introspect/sqlite.ts +216 -0
  92. package/src/source-aware-diff.ts +49 -0
  93. package/src/sql-type.ts +91 -0
  94. package/src/types.ts +174 -0
  95. package/src/view-ddl-postgres.ts +15 -0
  96. package/src/view-ddl-sqlite.ts +7 -0
  97. package/src/view-diff.ts +55 -0
  98. package/src/write-migration.ts +64 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expected-schema.js","sourceRoot":"","sources":["../src/expected-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export { buildExpectedSchema } from "./expected-schema.js";
2
+ export { introspect, introspectPostgres, introspectSqlite } from "./introspect/index.js";
3
+ export { diff } from "./diff/index.js";
4
+ export { emit } from "./emit/index.js";
5
+ export { writeMigration } from "./write-migration.js";
6
+ export { BlockedChangesError } from "./errors.js";
7
+ export { isWidening, sqlTypeEquals } from "./sql-type.js";
8
+ export type { SqlType } from "./sql-type.js";
9
+ export type { SchemaSnapshot, SnapshotMeta, TableDescriptor, ColumnDescriptor, IndexDescriptor, FkDescriptor, ColumnDefault, ViewDescriptor, FkAction, Change, ChangeKind, ChangeStatus, AllowOptions, AmbiguousChange, AmbiguousResolution, AmbiguousCallback, DiffResult, EmitResult, Dialect, } from "./types.js";
10
+ export type { DiffArgs } from "./diff/index.js";
11
+ export type { EmitOptions } from "./emit/index.js";
12
+ export type { WriteMigrationOptions, WriteMigrationResult } from "./write-migration.js";
13
+ export { classifyViewDiff } from "./view-diff.js";
14
+ export type { ViewShape, ViewDiffClass, ViewMigrationOpts } from "./view-diff.js";
15
+ export { emitPostgresViewMigration } from "./view-ddl-postgres.js";
16
+ export { emitSqliteViewMigration } from "./view-ddl-sqlite.js";
17
+ export { computeViewMigrations, type ViewMigrationInput, type ViewMigrationsOpts, type ViewMigrationsResult, } from "./source-aware-diff.js";
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG1D,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EACV,cAAc,EAAE,YAAY,EAC5B,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAC/E,cAAc,EAAE,QAAQ,EACxB,MAAM,EAAE,UAAU,EAAE,YAAY,EAChC,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,iBAAiB,EACrE,UAAU,EAAE,UAAU,EAAE,OAAO,GAChC,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAG/D,OAAO,EACL,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,wBAAwB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,25 @@
1
+ // Public API surface for @metaobjectsdev/migrate-ts v0.1.0
2
+ //
3
+ // Architecture: pure pipeline — buildExpectedSchema(metadata) +
4
+ // introspect(db, dialect) → SchemaSnapshot; diff(expected, actual, opts)
5
+ // → Change[]; emit(changes, opts) → { up, down }; writeMigration(...)
6
+ // writes the pair to disk.
7
+ //
8
+ // See docs/specs/2026-05-11-v0.2-sp4-migrate-ts-design.md.
9
+ // Pipeline functions
10
+ export { buildExpectedSchema } from "./expected-schema.js";
11
+ export { introspect, introspectPostgres, introspectSqlite } from "./introspect/index.js";
12
+ export { diff } from "./diff/index.js";
13
+ export { emit } from "./emit/index.js";
14
+ export { writeMigration } from "./write-migration.js";
15
+ // Errors
16
+ export { BlockedChangesError } from "./errors.js";
17
+ // SqlType helpers (rarely needed but useful for advanced consumers)
18
+ export { isWidening, sqlTypeEquals } from "./sql-type.js";
19
+ // View diff + dialect emitters
20
+ export { classifyViewDiff } from "./view-diff.js";
21
+ export { emitPostgresViewMigration } from "./view-ddl-postgres.js";
22
+ export { emitSqliteViewMigration } from "./view-ddl-sqlite.js";
23
+ // View migrations orchestrator
24
+ export { computeViewMigrations, } from "./source-aware-diff.js";
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,EAAE;AACF,gEAAgE;AAChE,yEAAyE;AACzE,sEAAsE;AACtE,2BAA2B;AAC3B,EAAE;AACF,2DAA2D;AAE3D,qBAAqB;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,SAAS;AACT,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,oEAAoE;AACpE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAgB1D,+BAA+B;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,+BAA+B;AAC/B,OAAO,EACL,qBAAqB,GAItB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Kysely } from "kysely";
2
+ import type { Dialect, SchemaSnapshot } from "../types.js";
3
+ export { introspectPostgres } from "./postgres.js";
4
+ export { introspectSqlite } from "./sqlite.js";
5
+ export declare function introspect(db: Kysely<Record<string, unknown>>, dialect: Dialect): Promise<SchemaSnapshot>;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/introspect/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,wBAAsB,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAK/G"}
@@ -0,0 +1,11 @@
1
+ import { introspectPostgres } from "./postgres.js";
2
+ import { introspectSqlite } from "./sqlite.js";
3
+ export { introspectPostgres } from "./postgres.js";
4
+ export { introspectSqlite } from "./sqlite.js";
5
+ export async function introspect(db, dialect) {
6
+ switch (dialect) {
7
+ case "postgres": return introspectPostgres(db);
8
+ case "sqlite": return introspectSqlite(db);
9
+ }
10
+ }
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/introspect/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAmC,EAAE,OAAgB;IACpF,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,UAAU,CAAC,CAAC,OAAO,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAC/C,KAAK,QAAQ,CAAC,CAAG,OAAO,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Postgres introspection — stage 2 of the migration pipeline.
3
+ *
4
+ * Produces a SchemaSnapshot from a live Kysely<Record<string, unknown>> pointing at a Postgres
5
+ * (or pg-mem) database.
6
+ *
7
+ * Design notes:
8
+ * - We deliberately avoid Kysely's built-in db.introspection.getTables() because
9
+ * it uses the `!~` regex operator in its internal query, which pg-mem (v3) does
10
+ * not support. We read information_schema directly via raw SQL instead.
11
+ * - Primary keys come from information_schema.table_constraints +
12
+ * key_column_usage. Real Postgres returns rows; pg-mem (v3) returns empty rows
13
+ * for both views — so PK tests are gated on MIGRATE_TS_PG_URL in the test file.
14
+ * - Default values come from information_schema.columns.column_default. pg-mem
15
+ * always returns null for this column, so default tests are gated too.
16
+ * - Type normalization (pgTypeToSqlType) is exported so it can be unit-tested
17
+ * without a live DB.
18
+ *
19
+ * pg-mem gaps (documented here, gated in the test file):
20
+ * - information_schema.columns.character_maximum_length → always null
21
+ * - information_schema.columns.column_default → always null
22
+ * - information_schema.table_constraints / key_column_usage → empty rows
23
+ * - bigserial appears as "integer" (no sequence differentiation)
24
+ * - array_position() not implemented → pg_index catalog query throws;
25
+ * readPgIndexes() catches and returns [] on pg-mem
26
+ * - information_schema.referential_constraints not supported →
27
+ * readPgForeignKeys() catches and returns [] on pg-mem
28
+ */
29
+ import type { Kysely } from "kysely";
30
+ import type { SchemaSnapshot, ColumnDefault } from "../types.js";
31
+ import type { SqlType } from "../sql-type.js";
32
+ export declare function introspectPostgres(db: Kysely<Record<string, unknown>>): Promise<SchemaSnapshot>;
33
+ /**
34
+ * Normalise a PG column data type string into a canonical SqlType.
35
+ * The `dataType` string comes from information_schema.columns.data_type (or
36
+ * occasionally from information_schema.columns.udt_name). Both are lower-cased
37
+ * before matching.
38
+ *
39
+ * If character_maximum_length is available, callers should pass `maxLength`.
40
+ */
41
+ export declare function pgTypeToSqlType(dataType: string, maxLength?: number | null): SqlType;
42
+ /**
43
+ * Parse a raw PG column_default string into a ColumnDefault.
44
+ * Returns undefined if the default is absent or empty.
45
+ *
46
+ * Classification rules:
47
+ * - Expressions: now(), CURRENT_TIMESTAMP, CURRENT_DATE, CURRENT_TIME,
48
+ * nextval(...), and any value that starts with a non-quote character and
49
+ * contains a `::` cast (i.e. bare identifier with cast, like `NULL::text`).
50
+ * - Literals: `'value'` (optionally followed by `::type` cast, which PG
51
+ * commonly appends for clarity). The cast is stripped; the value is unquoted.
52
+ *
53
+ * PG stores literal booleans as `'true'::boolean`, integers as `'42'::integer`,
54
+ * strings as `'hello'::text` — all are literals after stripping the cast.
55
+ */
56
+ export declare function parsePgDefault(raw: string | null | undefined): ColumnDefault | undefined;
57
+ //# sourceMappingURL=postgres.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/introspect/postgres.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,EAAE,cAAc,EAAqC,aAAa,EAA2D,MAAM,aAAa,CAAC;AAC7J,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAM9C,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAyBrG;AAMD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAkEpF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAgCxF"}
@@ -0,0 +1,339 @@
1
+ import { sql } from "kysely";
2
+ // ---------------------------------------------------------------------------
3
+ // Public API
4
+ // ---------------------------------------------------------------------------
5
+ export async function introspectPostgres(db) {
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+ const k = db;
8
+ const tableRefs = await readTableNames(k);
9
+ const tables = [];
10
+ for (const { schema, name } of tableRefs) {
11
+ const columns = await readColumns(k, schema, name);
12
+ const primaryKey = await readPrimaryKey(k, schema, name);
13
+ tables.push({
14
+ name,
15
+ schema,
16
+ columns,
17
+ indexes: await readPgIndexes(k, schema, name),
18
+ foreignKeys: await readPgForeignKeys(k, schema, name),
19
+ primaryKey,
20
+ });
21
+ }
22
+ const views = await readPgViews(k);
23
+ return {
24
+ tables,
25
+ views,
26
+ };
27
+ }
28
+ // ---------------------------------------------------------------------------
29
+ // Helpers — all exported so they can be tested in isolation
30
+ // ---------------------------------------------------------------------------
31
+ /**
32
+ * Normalise a PG column data type string into a canonical SqlType.
33
+ * The `dataType` string comes from information_schema.columns.data_type (or
34
+ * occasionally from information_schema.columns.udt_name). Both are lower-cased
35
+ * before matching.
36
+ *
37
+ * If character_maximum_length is available, callers should pass `maxLength`.
38
+ */
39
+ export function pgTypeToSqlType(dataType, maxLength) {
40
+ const dt = dataType.toLowerCase().trim();
41
+ // Length-bearing text types — may arrive as "character varying(255)" (full
42
+ // inline) or as bare "character varying" with maxLength from a separate column.
43
+ const varcharMatch = /^(?:character varying|varchar)\((\d+)\)$/.exec(dt);
44
+ if (varcharMatch) {
45
+ return { kind: "text", maxLength: parseInt(varcharMatch[1] ?? "0", 10) };
46
+ }
47
+ if (dt === "character varying" || dt === "varchar") {
48
+ return maxLength != null ? { kind: "text", maxLength } : { kind: "text" };
49
+ }
50
+ if (dt === "text") {
51
+ return { kind: "text" };
52
+ }
53
+ // Integer types — serial variants are also covered here; callers supply
54
+ // identity=increment separately via a sequence check.
55
+ if (dt === "int8" || dt === "bigint" || dt === "bigserial") {
56
+ return { kind: "integer", bits: 64 };
57
+ }
58
+ if (dt === "int4" || dt === "integer" || dt === "serial" ||
59
+ dt === "int2" || dt === "smallint" || dt === "smallserial" ||
60
+ dt === "int") {
61
+ return { kind: "integer", bits: 32 };
62
+ }
63
+ // Floating-point
64
+ if (dt === "float4" || dt === "real")
65
+ return { kind: "real" };
66
+ if (dt === "float8" || dt === "double precision")
67
+ return { kind: "real" };
68
+ // Arbitrary-precision numeric — "numeric(p,s)" or bare "numeric"/"decimal"
69
+ const numMatch = /^(?:numeric|decimal)(?:\((\d+)(?:,\s*(\d+))?\))?$/.exec(dt);
70
+ if (numMatch) {
71
+ const out = { kind: "numeric" };
72
+ if (numMatch[1])
73
+ out.precision = parseInt(numMatch[1], 10);
74
+ if (numMatch[2])
75
+ out.scale = parseInt(numMatch[2], 10);
76
+ return out;
77
+ }
78
+ // Boolean
79
+ if (dt === "bool" || dt === "boolean")
80
+ return { kind: "boolean" };
81
+ // Date + time
82
+ if (dt === "date")
83
+ return { kind: "date" };
84
+ if (dt === "timestamp" || dt === "timestamp without time zone") {
85
+ return { kind: "timestamp", withTimezone: false };
86
+ }
87
+ if (dt === "timestamptz" || dt === "timestamp with time zone") {
88
+ return { kind: "timestamp", withTimezone: true };
89
+ }
90
+ // JSON
91
+ if (dt === "json" || dt === "jsonb")
92
+ return { kind: "json" };
93
+ // Binary
94
+ if (dt === "bytea")
95
+ return { kind: "blob" };
96
+ // UUID
97
+ if (dt === "uuid")
98
+ return { kind: "uuid" };
99
+ // Unknown types (user-defined enums, citext, ltree, etc.) fall back to text
100
+ // so we don't blow up on unrecognised types.
101
+ return { kind: "text" };
102
+ }
103
+ /**
104
+ * Parse a raw PG column_default string into a ColumnDefault.
105
+ * Returns undefined if the default is absent or empty.
106
+ *
107
+ * Classification rules:
108
+ * - Expressions: now(), CURRENT_TIMESTAMP, CURRENT_DATE, CURRENT_TIME,
109
+ * nextval(...), and any value that starts with a non-quote character and
110
+ * contains a `::` cast (i.e. bare identifier with cast, like `NULL::text`).
111
+ * - Literals: `'value'` (optionally followed by `::type` cast, which PG
112
+ * commonly appends for clarity). The cast is stripped; the value is unquoted.
113
+ *
114
+ * PG stores literal booleans as `'true'::boolean`, integers as `'42'::integer`,
115
+ * strings as `'hello'::text` — all are literals after stripping the cast.
116
+ */
117
+ export function parsePgDefault(raw) {
118
+ if (raw === undefined || raw === null || raw === "")
119
+ return undefined;
120
+ // Function-call or keyword expressions
121
+ if (/^now\(\)$/i.test(raw) ||
122
+ /^current_timestamp\b/i.test(raw) ||
123
+ /^current_date\b/i.test(raw) ||
124
+ /^current_time\b/i.test(raw) ||
125
+ /^nextval\(/i.test(raw)) {
126
+ return { kind: "expr", value: raw };
127
+ }
128
+ // If it starts with a single-quote, it's a quoted literal (possibly with
129
+ // a trailing ::type cast that PG appends for type clarity).
130
+ if (raw.startsWith("'")) {
131
+ // Strip the cast suffix (e.g. `::boolean`, `::text`, `::integer`)
132
+ const withoutCast = raw.replace(/::[^']+$/, "");
133
+ // Strip the surrounding single-quotes
134
+ const cleaned = withoutCast.replace(/^'(.*)'$/, "$1");
135
+ return { kind: "literal", value: cleaned };
136
+ }
137
+ // Anything else that contains a :: cast is a complex expression
138
+ // (e.g. NULL::text, ARRAY[]::text[])
139
+ if (/::/g.test(raw)) {
140
+ return { kind: "expr", value: raw };
141
+ }
142
+ // Bare literal (no quotes, no cast)
143
+ return { kind: "literal", value: raw };
144
+ }
145
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
146
+ async function readTableNames(k) {
147
+ const rows = await sql `
148
+ SELECT table_name, table_schema
149
+ FROM information_schema.tables
150
+ WHERE table_schema NOT IN ('pg_catalog', 'information_schema')
151
+ AND table_schema NOT LIKE 'pg_%'
152
+ AND table_type = 'BASE TABLE'
153
+ ORDER BY table_schema, table_name
154
+ `.execute(k);
155
+ return rows.rows.map((r) => ({ schema: r.table_schema, name: r.table_name }));
156
+ }
157
+ async function readPgViews(k) {
158
+ // pg-mem gap: information_schema.views is not supported — the query throws
159
+ // "relation views does not exist". We catch and return [] so other tests
160
+ // still pass on pg-mem. Real PG (Postgres 16) handles this correctly.
161
+ try {
162
+ const rows = await sql `
163
+ SELECT table_name, table_schema FROM information_schema.views
164
+ WHERE table_schema NOT IN ('pg_catalog', 'information_schema')
165
+ AND table_schema NOT LIKE 'pg_%'
166
+ ORDER BY table_schema, table_name
167
+ `.execute(k);
168
+ return rows.rows.map((r) => ({ name: r.table_name, schema: r.table_schema }));
169
+ }
170
+ catch {
171
+ // pg-mem: information_schema.views not supported — return empty view list.
172
+ return [];
173
+ }
174
+ }
175
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
176
+ async function readColumns(k, schema, tableName) {
177
+ const rows = await sql `
178
+ SELECT
179
+ column_name,
180
+ data_type,
181
+ udt_name,
182
+ character_maximum_length,
183
+ is_nullable,
184
+ column_default
185
+ FROM information_schema.columns
186
+ WHERE table_schema = ${schema}
187
+ AND table_name = ${tableName}
188
+ ORDER BY ordinal_position
189
+ `.execute(k);
190
+ return rows.rows.map((r) => {
191
+ const sqlType = pgTypeToSqlType(r.data_type, r.character_maximum_length);
192
+ const col = {
193
+ name: r.column_name,
194
+ sqlType,
195
+ nullable: r.is_nullable === "YES",
196
+ };
197
+ const def = parsePgDefault(r.column_default);
198
+ if (def !== undefined)
199
+ col.default = def;
200
+ // Detect auto-increment (sequence) columns — real PG surfaces bigserial /
201
+ // serial as nextval(...) in column_default. We also check udt_name for
202
+ // explicit serial type names as a belt-and-suspenders guard.
203
+ const isSerial = (r.column_default !== null && /^nextval\(/i.test(r.column_default)) ||
204
+ /^(?:bigserial|serial8|serial4|serial|smallserial|serial2)$/i.test(r.udt_name);
205
+ if (isSerial)
206
+ col.identity = "increment";
207
+ return col;
208
+ });
209
+ }
210
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
211
+ async function readPrimaryKey(k, schema, tableName) {
212
+ // Uses information_schema only — avoids pg_attribute / pg_constraint joins
213
+ // that are either missing or return empty in pg-mem.
214
+ const rows = await sql `
215
+ SELECT kcu.column_name, kcu.ordinal_position
216
+ FROM information_schema.table_constraints tc
217
+ JOIN information_schema.key_column_usage kcu
218
+ ON kcu.constraint_name = tc.constraint_name
219
+ AND kcu.table_schema = tc.table_schema
220
+ AND kcu.table_name = tc.table_name
221
+ WHERE tc.constraint_type = 'PRIMARY KEY'
222
+ AND tc.table_schema = ${schema}
223
+ AND tc.table_name = ${tableName}
224
+ ORDER BY kcu.ordinal_position
225
+ `.execute(k);
226
+ return rows.rows.map((r) => r.column_name);
227
+ }
228
+ async function readPgIndexes(k, schema, table) {
229
+ // pg-mem gap: array_position() is not implemented, so this query throws on
230
+ // pg-mem. We catch and return [] so non-index tests still pass against pg-mem.
231
+ // Real PG (Postgres 16) handles this correctly.
232
+ let rows;
233
+ try {
234
+ rows = await sql `
235
+ SELECT i.relname AS index_name,
236
+ ix.indisunique AS is_unique,
237
+ ix.indisprimary AS is_primary,
238
+ a.attname AS column_name,
239
+ array_position(ix.indkey, a.attnum) AS ordinal
240
+ FROM pg_index ix
241
+ JOIN pg_class i ON i.oid = ix.indexrelid
242
+ JOIN pg_class t ON t.oid = ix.indrelid
243
+ JOIN pg_namespace n ON n.oid = t.relnamespace
244
+ JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(ix.indkey)
245
+ WHERE n.nspname = ${schema}
246
+ AND t.relname = ${table}
247
+ ORDER BY i.relname, ordinal
248
+ `.execute(k);
249
+ }
250
+ catch {
251
+ // pg-mem: array_position() not implemented — return empty index list.
252
+ return [];
253
+ }
254
+ const byName = new Map();
255
+ for (const r of rows.rows) {
256
+ let entry = byName.get(r.index_name);
257
+ if (!entry) {
258
+ entry = { isUnique: r.is_unique, isPrimary: r.is_primary, cols: [] };
259
+ byName.set(r.index_name, entry);
260
+ }
261
+ entry.cols.push(r.column_name);
262
+ }
263
+ return Array.from(byName.entries())
264
+ .filter(([, v]) => !v.isPrimary) // PK index excluded — PK lives in TableDescriptor.primaryKey
265
+ .map(([name, v]) => ({ name, columns: v.cols, unique: v.isUnique }));
266
+ }
267
+ async function readPgForeignKeys(k, schema, table) {
268
+ // pg-mem gap: information_schema.referential_constraints is not supported —
269
+ // the query returns empty rows or throws. We catch and return [] so other
270
+ // tests still pass on pg-mem. Real PG (Postgres 16) handles this correctly.
271
+ let rows;
272
+ try {
273
+ rows = await sql `
274
+ SELECT tc.constraint_name AS fk_name,
275
+ kcu.column_name,
276
+ ccu.table_name AS ref_table,
277
+ ccu.column_name AS ref_column,
278
+ rc.update_rule,
279
+ rc.delete_rule,
280
+ kcu.ordinal_position AS ordinal
281
+ FROM information_schema.table_constraints tc
282
+ JOIN information_schema.key_column_usage kcu
283
+ ON kcu.constraint_name = tc.constraint_name
284
+ AND kcu.table_schema = tc.table_schema
285
+ JOIN information_schema.referential_constraints rc
286
+ ON rc.constraint_name = tc.constraint_name
287
+ AND rc.constraint_schema = tc.table_schema
288
+ JOIN information_schema.constraint_column_usage ccu
289
+ ON ccu.constraint_name = tc.constraint_name
290
+ AND ccu.table_schema = tc.table_schema
291
+ WHERE tc.constraint_type = 'FOREIGN KEY'
292
+ AND tc.table_schema = ${schema}
293
+ AND tc.table_name = ${table}
294
+ ORDER BY tc.constraint_name, kcu.ordinal_position
295
+ `.execute(k);
296
+ }
297
+ catch {
298
+ // pg-mem: referential_constraints not supported — return empty FK list.
299
+ return [];
300
+ }
301
+ const byName = new Map();
302
+ for (const r of rows.rows) {
303
+ let entry = byName.get(r.fk_name);
304
+ if (!entry) {
305
+ entry = {
306
+ cols: [], refTable: r.ref_table, refCols: [],
307
+ onDelete: pgRuleToAction(r.delete_rule),
308
+ onUpdate: pgRuleToAction(r.update_rule),
309
+ };
310
+ byName.set(r.fk_name, entry);
311
+ }
312
+ entry.cols.push(r.column_name);
313
+ entry.refCols.push(r.ref_column);
314
+ }
315
+ return Array.from(byName.entries()).map(([name, v]) => {
316
+ const fk = {
317
+ name,
318
+ columns: v.cols,
319
+ refTable: v.refTable,
320
+ refColumns: v.refCols,
321
+ };
322
+ if (v.onDelete !== "no-action")
323
+ fk.onDelete = v.onDelete;
324
+ if (v.onUpdate !== "no-action")
325
+ fk.onUpdate = v.onUpdate;
326
+ return fk;
327
+ });
328
+ }
329
+ function pgRuleToAction(rule) {
330
+ const r = rule.toUpperCase();
331
+ if (r === "CASCADE")
332
+ return "cascade";
333
+ if (r === "SET NULL")
334
+ return "set-null";
335
+ if (r === "RESTRICT")
336
+ return "restrict";
337
+ return "no-action";
338
+ }
339
+ //# sourceMappingURL=postgres.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/introspect/postgres.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Kysely } from "kysely";
2
+ import type { SchemaSnapshot } from "../types.js";
3
+ export declare function introspectSqlite(db: Kysely<Record<string, unknown>>): Promise<SchemaSnapshot>;
4
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/introspect/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,aAAa,CAAC;AAMrB,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAiCnG"}