@lyku/lockstep-pg 0.2.0 → 0.2.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/package.json +30 -30
- package/src/buildTableIndexCommand.d.ts.map +1 -1
- package/src/buildTableIndexCommand.js +21 -6
- package/src/buildTableIndexCommand.js.map +1 -1
- package/src/buildTableTriggerCommands.d.ts +13 -1
- package/src/buildTableTriggerCommands.d.ts.map +1 -1
- package/src/buildTableTriggerCommands.js +33 -14
- package/src/buildTableTriggerCommands.js.map +1 -1
- package/src/createTable.d.ts.map +1 -1
- package/src/createTable.js +16 -2
- package/src/createTable.js.map +1 -1
- package/src/dateToPostgresString.js +2 -2
- package/src/dateToPostgresString.js.map +1 -1
- package/src/diff.d.ts +7 -0
- package/src/diff.d.ts.map +1 -1
- package/src/diff.js +79 -8
- package/src/diff.js.map +1 -1
- package/src/drift.d.ts +8 -11
- package/src/drift.d.ts.map +1 -1
- package/src/drift.js +1 -298
- package/src/drift.js.map +1 -1
- package/src/form.d.ts.map +1 -1
- package/src/form.js +43 -2
- package/src/form.js.map +1 -1
- package/src/generateSql.d.ts.map +1 -1
- package/src/generateSql.js +47 -5
- package/src/generateSql.js.map +1 -1
- package/src/index.d.ts +3 -3
- package/src/index.d.ts.map +1 -1
- package/src/index.js +2 -4
- package/src/index.js.map +1 -1
- package/src/introspect.d.ts +12 -0
- package/src/introspect.d.ts.map +1 -1
- package/src/introspect.js +189 -34
- package/src/introspect.js.map +1 -1
- package/src/mapColumnType.d.ts.map +1 -1
- package/src/mapColumnType.js +3 -0
- package/src/mapColumnType.js.map +1 -1
- package/src/migrate.d.ts +11 -9
- package/src/migrate.d.ts.map +1 -1
- package/src/migrate.js +28 -345
- package/src/migrate.js.map +1 -1
- package/src/seed.d.ts.map +1 -1
- package/src/seed.js +6 -1
- package/src/seed.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
2
|
+
"name": "@lyku/lockstep-pg",
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "Schema-driven PostgreSQL migration toolkit: drift detection, introspection, and SQL generation for @lyku/lockstep-core models",
|
|
5
|
+
"main": "./src/index.js",
|
|
6
|
+
"types": "./src/index.d.ts",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"license": "GPL-3.0",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./src/index.d.ts",
|
|
12
|
+
"import": "./src/index.js",
|
|
13
|
+
"default": "./src/index.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"peerDependencies": {
|
|
17
|
+
"@lyku/lockstep-core": ">=0.2.0"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"pg": "^8.0.0"
|
|
21
|
+
},
|
|
22
|
+
"keywords": [
|
|
23
|
+
"postgresql",
|
|
24
|
+
"migration",
|
|
25
|
+
"schema",
|
|
26
|
+
"drift",
|
|
27
|
+
"introspection",
|
|
28
|
+
"lockstep",
|
|
29
|
+
"lockstep-core"
|
|
30
|
+
],
|
|
31
|
+
"module": "./src/index.js"
|
|
32
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildTableIndexCommand.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/buildTableIndexCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9E,wBAAgB,uBAAuB,CACtC,CAAC,SAAS,kBAAkB,CAAC,mBAAmB,CAAC,EAChD,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"buildTableIndexCommand.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/buildTableIndexCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9E,wBAAgB,uBAAuB,CACtC,CAAC,SAAS,kBAAkB,CAAC,mBAAmB,CAAC,EAChD,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,YAkE5B"}
|
|
@@ -21,13 +21,28 @@ export function buildTableIndexCommands(tableName, model) {
|
|
|
21
21
|
indexName = `idx_${tableName}_${index.map((c) => c.split(' ')[0]).join('_')}`;
|
|
22
22
|
}
|
|
23
23
|
else {
|
|
24
|
-
// Object format with optional custom name
|
|
24
|
+
// Object format with optional custom name, where clause, or raw expression list
|
|
25
25
|
const objIndex = index;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
if (objIndex.raw !== undefined) {
|
|
27
|
+
// Expression / functional index: literal column-list SQL, emitted verbatim
|
|
28
|
+
// (no identifier quoting) so casts/expressions like ((columns[1])::numeric) work.
|
|
29
|
+
indexColumns = [objIndex.raw];
|
|
30
|
+
indexName = objIndex.name ?? `idx_${tableName}_expr`;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
const cols = Array.isArray(objIndex.columns)
|
|
34
|
+
? objIndex.columns
|
|
35
|
+
: [objIndex.columns];
|
|
36
|
+
indexColumns = cols.map((col) => {
|
|
37
|
+
const parts = col.split(' ');
|
|
38
|
+
const colName = parts[0];
|
|
39
|
+
const modifiers = parts.slice(1).join(' ');
|
|
40
|
+
return modifiers ? `"${colName}" ${modifiers}` : `"${colName}"`;
|
|
41
|
+
});
|
|
42
|
+
indexName =
|
|
43
|
+
objIndex.name ??
|
|
44
|
+
`idx_${tableName}_${cols.map((c) => c.split(' ')[0]).join('_')}`;
|
|
45
|
+
}
|
|
31
46
|
// Support partial indexes with WHERE clause
|
|
32
47
|
if (objIndex.where) {
|
|
33
48
|
whereClause = objIndex.where;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildTableIndexCommand.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/buildTableIndexCommand.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,uBAAuB,CAErC,SAAiB,EAAE,KAAQ;IAC5B,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC/B,IAAI,YAAsB,CAAC;YAC3B,IAAI,SAAiB,CAAC;YACtB,IAAI,WAA+B,CAAC;YAEpC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC/B,sBAAsB;gBACtB,YAAY,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;gBAC9B,SAAS,GAAG,OAAO,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,qBAAqB;gBACrB,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBAChC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACzB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,0BAA0B;oBACtE,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC;gBACjE,CAAC,CAAC,CAAC;gBACH,SAAS,GAAG,OAAO,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/E,CAAC;iBAAM,CAAC;gBACP,
|
|
1
|
+
{"version":3,"file":"buildTableIndexCommand.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/buildTableIndexCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,15 @@
|
|
|
1
|
-
import { PostgresRecordModel, PostgresTableModel } from '@lyku/lockstep-core';
|
|
1
|
+
import { PostgresRecordModel, PostgresTableModel, PostgresTriggerModel } from '@lyku/lockstep-core';
|
|
2
|
+
/**
|
|
3
|
+
* Deterministic trigger name: the explicit `name`, else the positional
|
|
4
|
+
* `{table}_trigger_{i+1}`. Drift detection and DDL generation MUST agree on
|
|
5
|
+
* this, so both go through here.
|
|
6
|
+
*/
|
|
7
|
+
export declare function triggerName(tableName: string, trigger: PostgresTriggerModel, index: number): string;
|
|
8
|
+
/**
|
|
9
|
+
* The CREATE-FUNCTION + CREATE-TRIGGER pair for a single trigger. Idempotent
|
|
10
|
+
* (CREATE OR REPLACE FUNCTION + DROP/CREATE TRIGGER), so it's safe to re-run and
|
|
11
|
+
* safe to emit from a drift migration onto an existing table.
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildTriggerCommands(tableName: string, trigger: PostgresTriggerModel, index: number): string[];
|
|
2
14
|
export declare function buildTableTriggerCommands<T extends PostgresTableModel<PostgresRecordModel>>(tableName: string, model: T): string[];
|
|
3
15
|
//# sourceMappingURL=buildTableTriggerCommands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildTableTriggerCommands.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/buildTableTriggerCommands.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"buildTableTriggerCommands.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/buildTableTriggerCommands.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,MAAM,qBAAqB,CAAC;AAE7B;;;;GAIG;AACH,wBAAgB,WAAW,CAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,MAAM,GACX,MAAM,CAER;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,MAAM,GACX,MAAM,EAAE,CAoBV;AAED,wBAAgB,yBAAyB,CACxC,CAAC,SAAS,kBAAkB,CAAC,mBAAmB,CAAC,EAChD,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,YAS5B"}
|
|
@@ -1,21 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic trigger name: the explicit `name`, else the positional
|
|
3
|
+
* `{table}_trigger_{i+1}`. Drift detection and DDL generation MUST agree on
|
|
4
|
+
* this, so both go through here.
|
|
5
|
+
*/
|
|
6
|
+
export function triggerName(tableName, trigger, index) {
|
|
7
|
+
return trigger.name ?? `${tableName}_trigger_${index + 1}`;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The CREATE-FUNCTION + CREATE-TRIGGER pair for a single trigger. Idempotent
|
|
11
|
+
* (CREATE OR REPLACE FUNCTION + DROP/CREATE TRIGGER), so it's safe to re-run and
|
|
12
|
+
* safe to emit from a drift migration onto an existing table.
|
|
13
|
+
*/
|
|
14
|
+
export function buildTriggerCommands(tableName, trigger, index) {
|
|
15
|
+
const name = triggerName(tableName, trigger, index);
|
|
16
|
+
const timing = 'before' in trigger ? 'BEFORE' : 'AFTER';
|
|
17
|
+
const event = 'before' in trigger ? trigger.before : trigger.after;
|
|
18
|
+
return [
|
|
19
|
+
`CREATE OR REPLACE FUNCTION ${name}_fn()\n` +
|
|
20
|
+
`RETURNS TRIGGER AS $$\n` +
|
|
21
|
+
`BEGIN\n` +
|
|
22
|
+
`${trigger.sql}\n` +
|
|
23
|
+
`END;\n` +
|
|
24
|
+
`$$ LANGUAGE plpgsql;\n`,
|
|
25
|
+
`DROP TRIGGER IF EXISTS ${name} ON "${tableName}";\n` +
|
|
26
|
+
`CREATE TRIGGER ${name}\n` +
|
|
27
|
+
`${timing} ${event.toUpperCase()}\n` +
|
|
28
|
+
`ON "${tableName}"\n` +
|
|
29
|
+
`FOR EACH ROW\n` +
|
|
30
|
+
`EXECUTE FUNCTION ${name}_fn();`,
|
|
31
|
+
];
|
|
32
|
+
}
|
|
1
33
|
export function buildTableTriggerCommands(tableName, model) {
|
|
2
34
|
const triggerQueries = [];
|
|
3
35
|
if (model.triggers) {
|
|
4
36
|
model.triggers.forEach((trigger, i) => {
|
|
5
|
-
|
|
6
|
-
const timing = 'before' in trigger ? 'BEFORE' : 'AFTER';
|
|
7
|
-
const event = 'before' in trigger ? trigger.before : trigger.after;
|
|
8
|
-
triggerQueries.push(`CREATE OR REPLACE FUNCTION ${triggerName}_fn()\n` +
|
|
9
|
-
`RETURNS TRIGGER AS $$\n` +
|
|
10
|
-
`BEGIN\n` +
|
|
11
|
-
`${trigger.sql}\n` +
|
|
12
|
-
`END;\n` +
|
|
13
|
-
`$$ LANGUAGE plpgsql;\n`, `DROP TRIGGER IF EXISTS ${triggerName} ON "${tableName}";\n` +
|
|
14
|
-
`CREATE TRIGGER ${triggerName}\n` +
|
|
15
|
-
`${timing} ${event.toUpperCase()}\n` +
|
|
16
|
-
`ON "${tableName}"\n` +
|
|
17
|
-
`FOR EACH ROW\n` +
|
|
18
|
-
`EXECUTE FUNCTION ${triggerName}_fn();`);
|
|
37
|
+
triggerQueries.push(...buildTriggerCommands(tableName, trigger, i));
|
|
19
38
|
});
|
|
20
39
|
}
|
|
21
40
|
return triggerQueries;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildTableTriggerCommands.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/buildTableTriggerCommands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"buildTableTriggerCommands.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/buildTableTriggerCommands.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAC1B,SAAiB,EACjB,OAA6B,EAC7B,KAAa;IAEb,OAAO,OAAO,CAAC,IAAI,IAAI,GAAG,SAAS,YAAY,KAAK,GAAG,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CACnC,SAAiB,EACjB,OAA6B,EAC7B,KAAa;IAEb,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IACxD,MAAM,KAAK,GAAG,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAEnE,OAAO;QACN,8BAA8B,IAAI,SAAS;YAC1C,yBAAyB;YACzB,SAAS;YACT,GAAG,OAAO,CAAC,GAAG,IAAI;YAClB,QAAQ;YACR,wBAAwB;QAEzB,0BAA0B,IAAI,QAAQ,SAAS,MAAM;YACpD,kBAAkB,IAAI,IAAI;YAC1B,GAAG,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI;YACpC,OAAO,SAAS,KAAK;YACrB,gBAAgB;YAChB,oBAAoB,IAAI,QAAQ;KACjC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAEvC,SAAiB,EAAE,KAAQ;IAC5B,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YACrC,cAAc,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CAAC;AACvB,CAAC"}
|
package/src/createTable.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createTable.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/createTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAa9E,eAAO,MAAM,yBAAyB,GACrC,WAAW,MAAM,EACjB,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,
|
|
1
|
+
{"version":3,"file":"createTable.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/createTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAa9E,eAAO,MAAM,yBAAyB,GACrC,WAAW,MAAM,EACjB,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,WAqD9C,CAAC"}
|
package/src/createTable.js
CHANGED
|
@@ -14,8 +14,12 @@ function formatDefault(def) {
|
|
|
14
14
|
export const buildTableCreationCommand = (tableName, model) => {
|
|
15
15
|
const { schema } = model;
|
|
16
16
|
const required = 'required' in schema ? schema.required : [];
|
|
17
|
+
// Managed (infra) columns are emitted alongside the record-schema columns but
|
|
18
|
+
// are not part of `schema.properties` (so they stay out of the domain type).
|
|
19
|
+
// They are nullable-with-default; NOT NULL still derives only from `required`.
|
|
20
|
+
const managed = Object.entries(model.managedColumns ?? {});
|
|
17
21
|
const columns = 'properties' in schema
|
|
18
|
-
? Object.entries(schema.properties)
|
|
22
|
+
? [...Object.entries(schema.properties), ...managed]
|
|
19
23
|
.map(([columnName, columnSchema]) => {
|
|
20
24
|
const columnType = mapColumnType(columnName, columnSchema);
|
|
21
25
|
const notNull = required.includes(columnName) ? ' NOT NULL' : '';
|
|
@@ -40,7 +44,17 @@ export const buildTableCreationCommand = (tableName, model) => {
|
|
|
40
44
|
.map((k) => `"${k}"`)
|
|
41
45
|
.join(', ')})`
|
|
42
46
|
: '';
|
|
43
|
-
|
|
47
|
+
// Foreign keys — model shape: { column: { referencedTable: referencedColumn } }.
|
|
48
|
+
// Emitted inline so a table created from a model round-trips with its FKs (the referenced
|
|
49
|
+
// table must already exist; generateCreateTablesSql topologically orders tables for that).
|
|
50
|
+
const fks = model.foreignKeys
|
|
51
|
+
? Object.entries(model.foreignKeys)
|
|
52
|
+
.flatMap(([column, ref]) => ref
|
|
53
|
+
? Object.entries(ref).map(([refTable, refColumn]) => `, FOREIGN KEY ("${column}") REFERENCES "${refTable}" ("${refColumn}")`)
|
|
54
|
+
: [])
|
|
55
|
+
.join('')
|
|
56
|
+
: '';
|
|
57
|
+
const createTableQuery = `CREATE TABLE IF NOT EXISTS "${tableName}" (${columns} ${primary} ${uni}${fks});`;
|
|
44
58
|
return createTableQuery;
|
|
45
59
|
};
|
|
46
60
|
//# sourceMappingURL=createTable.js.map
|
package/src/createTable.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createTable.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/createTable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,SAAS,aAAa,CAAC,GAAY;IAClC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAChC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QAC7D,OAAQ,GAAuB,CAAC,GAAG,CAAC;IACrC,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,GAAG,GAAG,CAAC;IAC/C,IAAI,OAAO,GAAG,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACxC,SAAiB,EACjB,KAA8C,EAC7C,EAAE;IACH,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACzB,MAAM,QAAQ,GAAG,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,MAAM,OAAO,GACZ,YAAY,IAAI,MAAM;QACrB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"createTable.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/createTable.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export const dateToPostgresString = (date) => {
|
|
2
2
|
// Ensure we're working with a Date object
|
|
3
3
|
const dateObj = date instanceof Date ? date : new Date(date);
|
|
4
|
-
// Format: YYYY-MM-DD HH:MM:SS.sss
|
|
5
|
-
return dateObj.toISOString().slice(0,
|
|
4
|
+
// Format: YYYY-MM-DD HH:MM:SS.sss (slice(0,23) keeps milliseconds, drops the trailing 'Z')
|
|
5
|
+
return dateObj.toISOString().slice(0, 23).replace('T', ' ');
|
|
6
6
|
};
|
|
7
7
|
//# sourceMappingURL=dateToPostgresString.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateToPostgresString.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/dateToPostgresString.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAmB,EAAE,EAAE;IAC3D,0CAA0C;IAC1C,MAAM,OAAO,GAAG,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7D,
|
|
1
|
+
{"version":3,"file":"dateToPostgresString.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/dateToPostgresString.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAmB,EAAE,EAAE;IAC3D,0CAA0C;IAC1C,MAAM,OAAO,GAAG,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7D,4FAA4F;IAC5F,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC7D,CAAC,CAAC"}
|
package/src/diff.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export type DiffOperation = {
|
|
|
23
23
|
fromType: string;
|
|
24
24
|
toType: string;
|
|
25
25
|
toArrayItemType: string | null;
|
|
26
|
+
toLength: number | null;
|
|
26
27
|
} | {
|
|
27
28
|
type: 'alter_column_nullable';
|
|
28
29
|
tableName: string;
|
|
@@ -44,6 +45,11 @@ export type DiffOperation = {
|
|
|
44
45
|
tableName: string;
|
|
45
46
|
columnName: string;
|
|
46
47
|
sequenceName: string;
|
|
48
|
+
} | {
|
|
49
|
+
type: 'create_sequence';
|
|
50
|
+
tableName: string;
|
|
51
|
+
columnName: string;
|
|
52
|
+
sequenceName: string;
|
|
47
53
|
} | {
|
|
48
54
|
type: 'add_index';
|
|
49
55
|
tableName: string;
|
|
@@ -60,6 +66,7 @@ export type DiffOperation = {
|
|
|
60
66
|
type: 'drop_unique_constraint';
|
|
61
67
|
tableName: string;
|
|
62
68
|
columns: string[];
|
|
69
|
+
constraintName?: string;
|
|
63
70
|
} | {
|
|
64
71
|
type: 'add_foreign_key';
|
|
65
72
|
tableName: string;
|
package/src/diff.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/diff.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,aAAa,GACtB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC9D;IACA,IAAI,EAAE,mBAAmB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/diff.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,aAAa,GACtB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC9D;IACA,IAAI,EAAE,mBAAmB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,GACD;IACA,IAAI,EAAE,uBAAuB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACjB,GACD;IACA,IAAI,EAAE,sBAAsB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,GACD;IACA,IAAI,EAAE,yBAAyB,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;CACnB,GACD;IACA,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACpB,GACD;IAIA,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACpB,GACD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC5D;IACA,IAAI,EAAE,uBAAuB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACjB,GACD;IACA,IAAI,EAAE,wBAAwB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACvB,GACD;IACA,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,sBAAsB,CAAC;CAC1B,GACD;IACA,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACtB,CAAC;AAgQL;;GAEG;AACH,wBAAgB,SAAS,CACxB,OAAO,EAAE,iBAAiB,GAAG,SAAS,EACtC,SAAS,EAAE,iBAAiB,GAAG,SAAS,GACtC,aAAa,EAAE,CAgFjB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC3B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACxC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,GACxC,aAAa,EAAE,CAajB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG;IAC3D,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,WAAW,EAAE,aAAa,EAAE,CAAC;CAC7B,CAoCA"}
|
package/src/diff.js
CHANGED
|
@@ -9,8 +9,12 @@
|
|
|
9
9
|
function normalizeDefault(value) {
|
|
10
10
|
if (value === null || value === undefined)
|
|
11
11
|
return null;
|
|
12
|
-
// Strip type casts
|
|
13
|
-
|
|
12
|
+
// Strip type casts including multi-word types, e.g. ::regclass, ::text,
|
|
13
|
+
// ::character varying, ::timestamp with time zone, ::double precision.
|
|
14
|
+
return value
|
|
15
|
+
.replace(/::"?[\w ]+"?(\[\])?/g, '')
|
|
16
|
+
.trim()
|
|
17
|
+
.toLowerCase();
|
|
14
18
|
}
|
|
15
19
|
/**
|
|
16
20
|
* Check if two sets of columns match (order-independent)
|
|
@@ -64,6 +68,23 @@ function diffColumn(tableName, dbCol, codeCol) {
|
|
|
64
68
|
fromType: dbCol.type,
|
|
65
69
|
toType: codeCol.type,
|
|
66
70
|
toArrayItemType: codeCol.arrayItemType,
|
|
71
|
+
toLength: codeCol.maxLength ?? null,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
else if ((codeCol.type === 'char' || codeCol.type === 'varchar') &&
|
|
75
|
+
codeCol.maxLength != null &&
|
|
76
|
+
dbCol.maxLength != null &&
|
|
77
|
+
codeCol.maxLength !== dbCol.maxLength) {
|
|
78
|
+
// Same base type, different length (char(4) -> char(6), varchar(50) -> varchar(255)).
|
|
79
|
+
// Without this the engine is blind to length drift.
|
|
80
|
+
ops.push({
|
|
81
|
+
type: 'alter_column_type',
|
|
82
|
+
tableName,
|
|
83
|
+
columnName: dbCol.name,
|
|
84
|
+
fromType: `${dbCol.type}(${dbCol.maxLength ?? ''})`,
|
|
85
|
+
toType: codeCol.type,
|
|
86
|
+
toArrayItemType: codeCol.arrayItemType,
|
|
87
|
+
toLength: codeCol.maxLength ?? null,
|
|
67
88
|
});
|
|
68
89
|
}
|
|
69
90
|
// Nullable mismatch
|
|
@@ -77,6 +98,23 @@ function diffColumn(tableName, dbCol, codeCol) {
|
|
|
77
98
|
}
|
|
78
99
|
// Default mismatch
|
|
79
100
|
if (normalizeDefault(dbCol.default) !== normalizeDefault(codeCol.default)) {
|
|
101
|
+
// If the NEW default is a nextval() sequence, create the sequence
|
|
102
|
+
// before SET DEFAULT references it (LYK-1214). Otherwise the
|
|
103
|
+
// generator emits `SET DEFAULT nextval('x_id_seq')` for a sequence
|
|
104
|
+
// that doesn't exist (e.g. a serial model whose backing sequence was
|
|
105
|
+
// dropped), which fails with "relation does not exist". IF NOT
|
|
106
|
+
// EXISTS keeps it a no-op when the sequence is already present.
|
|
107
|
+
if (codeCol.default?.includes('nextval(')) {
|
|
108
|
+
const seqMatch = codeCol.default.match(/nextval\('([^']+)'/);
|
|
109
|
+
if (seqMatch) {
|
|
110
|
+
ops.push({
|
|
111
|
+
type: 'create_sequence',
|
|
112
|
+
tableName,
|
|
113
|
+
columnName: dbCol.name,
|
|
114
|
+
sequenceName: seqMatch[1],
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
80
118
|
ops.push({
|
|
81
119
|
type: 'alter_column_default',
|
|
82
120
|
tableName,
|
|
@@ -121,27 +159,57 @@ function diffIndexes(tableName, dbIndexes, codeIndexes) {
|
|
|
121
159
|
const dbNonPk = dbIndexes.filter((i) => !i.name.endsWith('_pkey') && !i.name.includes('_pkey'));
|
|
122
160
|
// Find indexes in code that don't exist in DB
|
|
123
161
|
for (const codeIdx of codeIndexes) {
|
|
124
|
-
const found = dbNonPk.some((dbIdx) =>
|
|
162
|
+
const found = dbNonPk.some((dbIdx) => dbIdx.name === codeIdx.name ||
|
|
163
|
+
columnsMatch(dbIdx.columns, codeIdx.columns));
|
|
125
164
|
if (!found) {
|
|
126
165
|
ops.push({ type: 'add_index', tableName, index: codeIdx });
|
|
127
166
|
}
|
|
128
167
|
}
|
|
129
|
-
//
|
|
130
|
-
//
|
|
168
|
+
// Drop indexes present in the DB but absent from the model. Categorized destructive
|
|
169
|
+
// (reported, never auto-applied) so legitimate hand-added perf indexes aren't silently
|
|
170
|
+
// nuked — but they ARE surfaced as drift. Exclude PK and constraint-backed indexes
|
|
171
|
+
// (*_pkey / *_unique / *_key), which are handled as constraints, not standalone indexes.
|
|
172
|
+
for (const dbIdx of dbNonPk) {
|
|
173
|
+
if (dbIdx.name.endsWith('_unique') || dbIdx.name.endsWith('_key'))
|
|
174
|
+
continue;
|
|
175
|
+
const found = codeIndexes.some((codeIdx) => codeIdx.name === dbIdx.name ||
|
|
176
|
+
columnsMatch(codeIdx.columns, dbIdx.columns));
|
|
177
|
+
if (!found) {
|
|
178
|
+
ops.push({ type: 'drop_index', tableName, indexName: dbIdx.name });
|
|
179
|
+
}
|
|
180
|
+
}
|
|
131
181
|
return ops;
|
|
132
182
|
}
|
|
133
183
|
/**
|
|
134
184
|
* Diff unique constraints
|
|
135
185
|
*/
|
|
136
|
-
function diffUniqueConstraints(tableName, dbUnique, codeUnique) {
|
|
186
|
+
function diffUniqueConstraints(tableName, dbUnique, codeUnique, dbNames) {
|
|
137
187
|
const ops = [];
|
|
138
|
-
// Find constraints in code that don't exist in DB
|
|
188
|
+
// Find constraints in code that don't exist in DB -> add
|
|
139
189
|
for (const codeCols of codeUnique) {
|
|
140
190
|
const found = dbUnique.some((dbCols) => columnsMatch(dbCols, codeCols));
|
|
141
191
|
if (!found) {
|
|
142
192
|
ops.push({ type: 'add_unique_constraint', tableName, columns: codeCols });
|
|
143
193
|
}
|
|
144
194
|
}
|
|
195
|
+
// Find unique constraints in the DB that aren't in the model -> drop. Categorized
|
|
196
|
+
// destructive (surfaced, never auto-applied), but DETECTED — otherwise the engine is
|
|
197
|
+
// blind to extra/wrong constraints (e.g. the phantom single-column uniques) and can't
|
|
198
|
+
// surface them for remediation. A diff that only adds isn't a diff.
|
|
199
|
+
for (const dbCols of dbUnique) {
|
|
200
|
+
const found = codeUnique.some((codeCols) => columnsMatch(dbCols, codeCols));
|
|
201
|
+
if (!found) {
|
|
202
|
+
// Use the real DB constraint name so the DROP actually matches (Postgres names
|
|
203
|
+
// inline/column-level uniques "<table>_<col>_key", not "<table>_<col>_unique").
|
|
204
|
+
const constraintName = dbNames?.find((n) => columnsMatch(n.columns, dbCols))?.name;
|
|
205
|
+
ops.push({
|
|
206
|
+
type: 'drop_unique_constraint',
|
|
207
|
+
tableName,
|
|
208
|
+
columns: dbCols,
|
|
209
|
+
...(constraintName ? { constraintName } : {}),
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
}
|
|
145
213
|
return ops;
|
|
146
214
|
}
|
|
147
215
|
/**
|
|
@@ -175,7 +243,7 @@ export function diffTable(dbTable, codeTable) {
|
|
|
175
243
|
// Diff indexes
|
|
176
244
|
ops.push(...diffIndexes(tableName, dbTable.indexes, codeTable.indexes));
|
|
177
245
|
// Diff unique constraints
|
|
178
|
-
ops.push(...diffUniqueConstraints(tableName, dbTable.uniqueConstraints, codeTable.uniqueConstraints));
|
|
246
|
+
ops.push(...diffUniqueConstraints(tableName, dbTable.uniqueConstraints, codeTable.uniqueConstraints, dbTable.uniqueConstraintNames));
|
|
179
247
|
// Diff foreign keys
|
|
180
248
|
const dbFks = dbTable.foreignKeys ?? [];
|
|
181
249
|
const codeFks = codeTable.foreignKeys ?? [];
|
|
@@ -231,6 +299,8 @@ export function categorizeOperations(ops) {
|
|
|
231
299
|
case 'add_index':
|
|
232
300
|
case 'add_unique_constraint':
|
|
233
301
|
case 'update_check_constraint':
|
|
302
|
+
case 'add_foreign_key':
|
|
303
|
+
case 'create_sequence':
|
|
234
304
|
safe.push(op);
|
|
235
305
|
break;
|
|
236
306
|
case 'drop_table':
|
|
@@ -238,6 +308,7 @@ export function categorizeOperations(ops) {
|
|
|
238
308
|
case 'drop_index':
|
|
239
309
|
case 'drop_unique_constraint':
|
|
240
310
|
case 'drop_sequence':
|
|
311
|
+
case 'drop_foreign_key':
|
|
241
312
|
destructive.push(op);
|
|
242
313
|
break;
|
|
243
314
|
case 'alter_column_type':
|
package/src/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/diff.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/diff.ts"],"names":[],"mappings":"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"}
|
package/src/drift.d.ts
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
import type { PostgresRecordModel, PostgresTableModel } from '@lyku/lockstep-core';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
docId?: string | number;
|
|
11
|
-
}
|
|
2
|
+
/**
|
|
3
|
+
* The aggregated schema config (all table models) the migration engine diffs the live DB against.
|
|
4
|
+
*
|
|
5
|
+
* NOTE: the legacy narrow drift detector (`detectDrift`) and its SQL generator (`driftToSql`) were
|
|
6
|
+
* removed. There is now a single migration/drift engine — introspect → `diffDatabase` →
|
|
7
|
+
* `generateMigrationSql` (see `migrate.ts` and `apps/dataform/src/schemaDiff.ts`). This file keeps
|
|
8
|
+
* only the shared config type so existing `import { DataformConfig } from './drift'` sites are stable.
|
|
9
|
+
*/
|
|
12
10
|
export interface DataformConfig {
|
|
13
11
|
tables: Record<string, PostgresTableModel<PostgresRecordModel>>;
|
|
14
12
|
}
|
|
15
|
-
export declare function detectDrift(connectionString: string, config: DataformConfig): Promise<Drift[]>;
|
|
16
13
|
//# sourceMappingURL=drift.d.ts.map
|
package/src/drift.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drift.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/drift.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"drift.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/drift.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,mBAAmB,EACnB,kBAAkB,EAClB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAC,CAAC;CAChE"}
|