@lyku/lockstep-pg 0.1.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 (103) hide show
  1. package/LLMs.md +86 -0
  2. package/README.md +93 -0
  3. package/package.json +32 -0
  4. package/src/buildTableIndexCommand.d.ts +3 -0
  5. package/src/buildTableIndexCommand.d.ts.map +1 -0
  6. package/src/buildTableIndexCommand.js +46 -0
  7. package/src/buildTableIndexCommand.js.map +1 -0
  8. package/src/buildTableTriggerCommands.d.ts +3 -0
  9. package/src/buildTableTriggerCommands.d.ts.map +1 -0
  10. package/src/buildTableTriggerCommands.js +23 -0
  11. package/src/buildTableTriggerCommands.js.map +1 -0
  12. package/src/createTable.d.ts +3 -0
  13. package/src/createTable.d.ts.map +1 -0
  14. package/src/createTable.js +46 -0
  15. package/src/createTable.js.map +1 -0
  16. package/src/dateToPostgresString.d.ts +2 -0
  17. package/src/dateToPostgresString.d.ts.map +1 -0
  18. package/src/dateToPostgresString.js +7 -0
  19. package/src/dateToPostgresString.js.map +1 -0
  20. package/src/diff.d.ts +82 -0
  21. package/src/diff.d.ts.map +1 -0
  22. package/src/diff.js +218 -0
  23. package/src/diff.js.map +1 -0
  24. package/src/drift.d.ts +16 -0
  25. package/src/drift.d.ts.map +1 -0
  26. package/src/drift.js +299 -0
  27. package/src/drift.js.map +1 -0
  28. package/src/form.d.ts +3 -0
  29. package/src/form.d.ts.map +1 -0
  30. package/src/form.js +9 -0
  31. package/src/form.js.map +1 -0
  32. package/src/generateSql.d.ts +16 -0
  33. package/src/generateSql.d.ts.map +1 -0
  34. package/src/generateSql.js +306 -0
  35. package/src/generateSql.js.map +1 -0
  36. package/src/index.d.ts +16 -0
  37. package/src/index.d.ts.map +1 -0
  38. package/src/index.js +21 -0
  39. package/src/index.js.map +1 -0
  40. package/src/introspect.d.ts +56 -0
  41. package/src/introspect.d.ts.map +1 -0
  42. package/src/introspect.js +435 -0
  43. package/src/introspect.js.map +1 -0
  44. package/src/mapArrayType.d.ts +3 -0
  45. package/src/mapArrayType.d.ts.map +1 -0
  46. package/src/mapArrayType.js +41 -0
  47. package/src/mapArrayType.js.map +1 -0
  48. package/src/mapBigintType.d.ts +3 -0
  49. package/src/mapBigintType.d.ts.map +1 -0
  50. package/src/mapBigintType.js +17 -0
  51. package/src/mapBigintType.js.map +1 -0
  52. package/src/mapBigserialType.d.ts +3 -0
  53. package/src/mapBigserialType.d.ts.map +1 -0
  54. package/src/mapBigserialType.js +12 -0
  55. package/src/mapBigserialType.js.map +1 -0
  56. package/src/mapCharType.d.ts +3 -0
  57. package/src/mapCharType.d.ts.map +1 -0
  58. package/src/mapCharType.js +22 -0
  59. package/src/mapCharType.js.map +1 -0
  60. package/src/mapColumnType.d.ts +3 -0
  61. package/src/mapColumnType.d.ts.map +1 -0
  62. package/src/mapColumnType.js +63 -0
  63. package/src/mapColumnType.js.map +1 -0
  64. package/src/mapIntegerType.d.ts +3 -0
  65. package/src/mapIntegerType.d.ts.map +1 -0
  66. package/src/mapIntegerType.js +12 -0
  67. package/src/mapIntegerType.js.map +1 -0
  68. package/src/mapSerialType.d.ts +3 -0
  69. package/src/mapSerialType.d.ts.map +1 -0
  70. package/src/mapSerialType.js +12 -0
  71. package/src/mapSerialType.js.map +1 -0
  72. package/src/mapTextType.d.ts +3 -0
  73. package/src/mapTextType.d.ts.map +1 -0
  74. package/src/mapTextType.js +44 -0
  75. package/src/mapTextType.js.map +1 -0
  76. package/src/mapTimestamptzType.d.ts +3 -0
  77. package/src/mapTimestamptzType.d.ts.map +1 -0
  78. package/src/mapTimestamptzType.js +13 -0
  79. package/src/mapTimestamptzType.js.map +1 -0
  80. package/src/mapVarcharType.d.ts +3 -0
  81. package/src/mapVarcharType.d.ts.map +1 -0
  82. package/src/mapVarcharType.js +44 -0
  83. package/src/mapVarcharType.js.map +1 -0
  84. package/src/migrate.d.ts +13 -0
  85. package/src/migrate.d.ts.map +1 -0
  86. package/src/migrate.js +350 -0
  87. package/src/migrate.js.map +1 -0
  88. package/src/numberChecks.d.ts +11 -0
  89. package/src/numberChecks.d.ts.map +1 -0
  90. package/src/numberChecks.js +22 -0
  91. package/src/numberChecks.js.map +1 -0
  92. package/src/seed.d.ts +3 -0
  93. package/src/seed.d.ts.map +1 -0
  94. package/src/seed.js +56 -0
  95. package/src/seed.js.map +1 -0
  96. package/src/setupTable.d.ts +3 -0
  97. package/src/setupTable.d.ts.map +1 -0
  98. package/src/setupTable.js +41 -0
  99. package/src/setupTable.js.map +1 -0
  100. package/src/timestampChecks.d.ts +11 -0
  101. package/src/timestampChecks.d.ts.map +1 -0
  102. package/src/timestampChecks.js +22 -0
  103. package/src/timestampChecks.js.map +1 -0
@@ -0,0 +1,306 @@
1
+ /**
2
+ * Generate SQL from diff operations
3
+ */
4
+ /**
5
+ * Generate SQL type definition for a column
6
+ */
7
+ function columnTypeToSql(col) {
8
+ let sql = '';
9
+ switch (col.type) {
10
+ case 'bigint':
11
+ sql = 'BIGINT';
12
+ break;
13
+ case 'integer':
14
+ sql = 'INTEGER';
15
+ break;
16
+ case 'smallint':
17
+ sql = 'SMALLINT';
18
+ break;
19
+ case 'double precision':
20
+ sql = 'DOUBLE PRECISION';
21
+ break;
22
+ case 'real':
23
+ case 'float4':
24
+ sql = 'REAL';
25
+ break;
26
+ case 'boolean':
27
+ sql = 'BOOLEAN';
28
+ break;
29
+ case 'text':
30
+ sql = 'TEXT';
31
+ break;
32
+ case 'varchar':
33
+ sql = col.maxLength ? `VARCHAR(${col.maxLength})` : 'TEXT';
34
+ break;
35
+ case 'char':
36
+ sql = col.maxLength ? `CHAR(${col.maxLength})` : 'CHAR(1)';
37
+ break;
38
+ case 'timestamptz':
39
+ sql = 'TIMESTAMPTZ';
40
+ break;
41
+ case 'timestamp':
42
+ sql = 'TIMESTAMP';
43
+ break;
44
+ case 'date':
45
+ sql = 'DATE';
46
+ break;
47
+ case 'jsonb':
48
+ sql = 'JSONB';
49
+ break;
50
+ case 'array':
51
+ sql = 'JSONB'; // Arrays stored as JSONB for flexibility
52
+ break;
53
+ case 'json':
54
+ sql = 'JSON';
55
+ break;
56
+ default:
57
+ sql = col.type.toUpperCase();
58
+ }
59
+ return sql;
60
+ }
61
+ /**
62
+ * Generate column definition for CREATE TABLE
63
+ */
64
+ function columnDefinitionSql(col) {
65
+ const parts = [`"${col.name}"`];
66
+ // Type
67
+ parts.push(columnTypeToSql(col));
68
+ // CHECK constraint for enums
69
+ if (col.enumValues && col.enumValues.length > 0) {
70
+ const values = col.enumValues.map((v) => `'${v}'`).join(', ');
71
+ parts.push(`CHECK ("${col.name}" IN (${values}))`);
72
+ }
73
+ // Default
74
+ if (col.default !== null) {
75
+ parts.push(`DEFAULT ${col.default}`);
76
+ }
77
+ // NOT NULL
78
+ if (!col.nullable) {
79
+ parts.push('NOT NULL');
80
+ }
81
+ return parts.join(' ');
82
+ }
83
+ /**
84
+ * Generate CREATE TABLE SQL
85
+ */
86
+ function createTableSql(table) {
87
+ const statements = [];
88
+ // Column definitions
89
+ const colDefs = Array.from(table.columns.values()).map((col) => columnDefinitionSql(col));
90
+ // Primary key
91
+ if (table.primaryKey.length > 0) {
92
+ const pkCols = table.primaryKey.map((c) => `"${c}"`).join(', ');
93
+ colDefs.push(`PRIMARY KEY (${pkCols})`);
94
+ }
95
+ // Unique constraints
96
+ for (const unique of table.uniqueConstraints) {
97
+ const uniqueCols = unique.map((c) => `"${c}"`).join(', ');
98
+ colDefs.push(`UNIQUE (${uniqueCols})`);
99
+ }
100
+ // Single CREATE TABLE statement
101
+ const createTableStmt = `CREATE TABLE IF NOT EXISTS "${table.name}" (${colDefs.join(', ')});`;
102
+ statements.push(createTableStmt);
103
+ // Indexes (excluding primary key)
104
+ for (const idx of table.indexes) {
105
+ if (idx.name.endsWith('_pkey'))
106
+ continue;
107
+ const idxCols = idx.columns.map((c) => `"${c}"`).join(', ');
108
+ const unique = idx.unique ? 'UNIQUE ' : '';
109
+ statements.push(`CREATE ${unique}INDEX IF NOT EXISTS "${idx.name}" ON "${table.name}" (${idxCols});`);
110
+ }
111
+ return statements;
112
+ }
113
+ /**
114
+ * Generate ADD COLUMN SQL
115
+ */
116
+ function addColumnSql(tableName, col) {
117
+ const lines = [];
118
+ // Special handling for arrays - use JSONB
119
+ if (col.type === 'array') {
120
+ lines.push(`ALTER TABLE "${tableName}" ADD COLUMN IF NOT EXISTS "${col.name}" JSONB${col.nullable ? '' : ' NOT NULL'}${col.default ? ` DEFAULT ${col.default}` : ''};`);
121
+ return lines;
122
+ }
123
+ const colDef = columnDefinitionSql(col);
124
+ // If NOT NULL without default, we need multi-step migration
125
+ if (!col.nullable && col.default === null) {
126
+ // First add as nullable
127
+ const nullableCol = { ...col, nullable: true };
128
+ lines.push(`ALTER TABLE "${tableName}" ADD COLUMN IF NOT EXISTS ${columnDefinitionSql(nullableCol)};`);
129
+ lines.push(`-- TODO: Backfill "${col.name}" with appropriate values before setting NOT NULL`);
130
+ lines.push(`-- UPDATE "${tableName}" SET "${col.name}" = <default_value> WHERE "${col.name}" IS NULL;`);
131
+ lines.push(`ALTER TABLE "${tableName}" ALTER COLUMN "${col.name}" SET NOT NULL;`);
132
+ }
133
+ else {
134
+ lines.push(`ALTER TABLE "${tableName}" ADD COLUMN IF NOT EXISTS ${colDef};`);
135
+ }
136
+ return lines;
137
+ }
138
+ /**
139
+ * Convert a single diff operation to SQL
140
+ */
141
+ export function operationToSql(op) {
142
+ switch (op.type) {
143
+ case 'create_table':
144
+ return createTableSql(op.table);
145
+ case 'drop_table':
146
+ return [`DROP TABLE IF EXISTS "${op.tableName}" CASCADE;`];
147
+ case 'add_column':
148
+ return addColumnSql(op.tableName, op.column);
149
+ case 'drop_column':
150
+ return [
151
+ `ALTER TABLE "${op.tableName}" DROP COLUMN IF EXISTS "${op.columnName}";`,
152
+ ];
153
+ case 'alter_column_type': {
154
+ let toType;
155
+ let castType;
156
+ if (op.toType === 'array') {
157
+ // Check if this is a simple array type that can use native PostgreSQL arrays
158
+ const simpleArrayTypes = new Set([
159
+ 'bigint',
160
+ 'integer',
161
+ 'smallint',
162
+ 'double precision',
163
+ 'real',
164
+ 'text',
165
+ 'varchar',
166
+ 'char',
167
+ 'boolean',
168
+ 'timestamptz',
169
+ 'timestamp',
170
+ 'date',
171
+ ]);
172
+ if (op.toArrayItemType && simpleArrayTypes.has(op.toArrayItemType)) {
173
+ // Use native PostgreSQL array type
174
+ const pgType = op.toArrayItemType.toUpperCase();
175
+ toType = `${pgType}[]`;
176
+ castType = `${op.toArrayItemType}[]`;
177
+ }
178
+ else {
179
+ // Complex array (objects, nested arrays, etc.) - use JSONB
180
+ toType = 'JSONB';
181
+ castType = 'jsonb';
182
+ }
183
+ }
184
+ else {
185
+ toType = op.toType.toUpperCase();
186
+ castType = op.toType;
187
+ }
188
+ return [
189
+ `-- WARNING: Type change from ${op.fromType} to ${op.toType} - verify data compatibility`,
190
+ `ALTER TABLE "${op.tableName}" ALTER COLUMN "${op.columnName}" TYPE ${toType} USING "${op.columnName}"::${castType};`,
191
+ ];
192
+ }
193
+ case 'alter_column_nullable':
194
+ if (op.nullable) {
195
+ return [
196
+ `ALTER TABLE "${op.tableName}" ALTER COLUMN "${op.columnName}" DROP NOT NULL;`,
197
+ ];
198
+ }
199
+ else {
200
+ return [
201
+ `-- WARNING: Ensure no NULL values exist before running`,
202
+ `ALTER TABLE "${op.tableName}" ALTER COLUMN "${op.columnName}" SET NOT NULL;`,
203
+ ];
204
+ }
205
+ case 'alter_column_default':
206
+ if (op.defaultValue === null) {
207
+ return [
208
+ `ALTER TABLE "${op.tableName}" ALTER COLUMN "${op.columnName}" DROP DEFAULT;`,
209
+ ];
210
+ }
211
+ else {
212
+ return [
213
+ `ALTER TABLE "${op.tableName}" ALTER COLUMN "${op.columnName}" SET DEFAULT ${op.defaultValue};`,
214
+ ];
215
+ }
216
+ case 'update_check_constraint': {
217
+ const constraintName = `${op.tableName}_${op.columnName}_check`;
218
+ const newValues = op.newValues.map((v) => `'${v}'`).join(', ');
219
+ return [
220
+ `-- Update CHECK constraint for "${op.columnName}": [${op.oldValues.join(', ')}] -> [${op.newValues.join(', ')}]`,
221
+ `ALTER TABLE "${op.tableName}" DROP CONSTRAINT IF EXISTS "${constraintName}";`,
222
+ `ALTER TABLE "${op.tableName}" ADD CONSTRAINT "${constraintName}" CHECK ("${op.columnName}" IN (${newValues}));`,
223
+ ];
224
+ }
225
+ case 'add_index': {
226
+ const idxCols = op.index.columns.map((c) => `"${c}"`).join(', ');
227
+ const unique = op.index.unique ? 'UNIQUE ' : '';
228
+ return [
229
+ `CREATE ${unique}INDEX IF NOT EXISTS "${op.index.name}" ON "${op.tableName}" (${idxCols});`,
230
+ ];
231
+ }
232
+ case 'drop_index':
233
+ return [`DROP INDEX IF EXISTS "${op.indexName}";`];
234
+ case 'add_unique_constraint': {
235
+ const cols = op.columns.map((c) => `"${c}"`).join(', ');
236
+ const constraintName = `${op.tableName}_${op.columns.join('_')}_unique`;
237
+ return [
238
+ `ALTER TABLE "${op.tableName}" ADD CONSTRAINT "${constraintName}" UNIQUE (${cols});`,
239
+ ];
240
+ }
241
+ case 'drop_unique_constraint': {
242
+ const constraintName = `${op.tableName}_${op.columns.join('_')}_unique`;
243
+ return [
244
+ `ALTER TABLE "${op.tableName}" DROP CONSTRAINT IF EXISTS "${constraintName}";`,
245
+ ];
246
+ }
247
+ case 'add_foreign_key': {
248
+ const fkName = op.fk.constraintName || `${op.tableName}_${op.fk.column}_fkey`;
249
+ return [
250
+ `ALTER TABLE "${op.tableName}" ADD CONSTRAINT "${fkName}" FOREIGN KEY ("${op.fk.column}") REFERENCES "${op.fk.referencedTable}" ("${op.fk.referencedColumn}");`,
251
+ ];
252
+ }
253
+ case 'drop_foreign_key':
254
+ return [
255
+ `ALTER TABLE "${op.tableName}" DROP CONSTRAINT IF EXISTS "${op.constraintName}";`,
256
+ ];
257
+ }
258
+ }
259
+ /**
260
+ * Generate full migration SQL from operations
261
+ */
262
+ export function generateMigrationSql(ops, _includeDestructive = false) {
263
+ const safeLines = [];
264
+ const destructiveLines = [];
265
+ for (const op of ops) {
266
+ const sql = operationToSql(op);
267
+ // Categorize
268
+ const isDestructive = op.type === 'drop_table' ||
269
+ op.type === 'drop_column' ||
270
+ op.type === 'drop_index' ||
271
+ op.type === 'drop_unique_constraint' ||
272
+ op.type === 'drop_foreign_key';
273
+ if (isDestructive) {
274
+ destructiveLines.push(...sql, '');
275
+ }
276
+ else {
277
+ safeLines.push(...sql, '');
278
+ }
279
+ }
280
+ const timestamp = new Date().toISOString();
281
+ const safe = safeLines.length > 0
282
+ ? [
283
+ '-- Schema Migration (Safe Operations)',
284
+ `-- Generated: ${timestamp}`,
285
+ '',
286
+ 'BEGIN;',
287
+ '',
288
+ ...safeLines,
289
+ 'COMMIT;',
290
+ ].join('\n')
291
+ : '';
292
+ const destructive = destructiveLines.length > 0
293
+ ? [
294
+ '-- Schema Migration (DESTRUCTIVE Operations)',
295
+ `-- Generated: ${timestamp}`,
296
+ '-- WARNING: These operations will DELETE data!',
297
+ '',
298
+ 'BEGIN;',
299
+ '',
300
+ ...destructiveLines,
301
+ 'COMMIT;',
302
+ ].join('\n')
303
+ : '';
304
+ return { safe, destructive };
305
+ }
306
+ //# sourceMappingURL=generateSql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateSql.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/generateSql.ts"],"names":[],"mappings":"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"}
package/src/index.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ export { detectDrift } from './drift';
2
+ export type { Drift, DataformConfig } from './drift';
3
+ export { driftToSql, generateMigration } from './migrate';
4
+ export { generateCreateTablesSql } from './form';
5
+ export { generateSeedSql } from './seed';
6
+ export { introspectTable, introspectDatabase, modelToIntrospected, normalizeDbType, } from './introspect';
7
+ export type { IntrospectedColumn, IntrospectedIndex, IntrospectedForeignKey, IntrospectedTable, } from './introspect';
8
+ export { diffTable, diffDatabase, categorizeOperations } from './diff';
9
+ export type { DiffOperation } from './diff';
10
+ export { operationToSql, generateMigrationSql } from './generateSql';
11
+ export { setupTable } from './setupTable';
12
+ export { buildTableCreationCommand } from './createTable';
13
+ export { buildTableIndexCommands } from './buildTableIndexCommand';
14
+ export { buildTableTriggerCommands } from './buildTableTriggerCommands';
15
+ export { mapColumnType } from './mapColumnType';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGrD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,QAAQ,CAAC;AAGjD,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAGzC,OAAO,EACN,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,GACf,MAAM,cAAc,CAAC;AACtB,YAAY,EACX,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,GACjB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AACvE,YAAY,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAG5C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
package/src/index.js ADDED
@@ -0,0 +1,21 @@
1
+ // Core drift detection
2
+ export { detectDrift } from './drift';
3
+ // Migration generation (drift-based)
4
+ export { driftToSql, generateMigration } from './migrate';
5
+ // Table creation SQL
6
+ export { generateCreateTablesSql } from './form';
7
+ // Seed data generation
8
+ export { generateSeedSql } from './seed';
9
+ // Introspection
10
+ export { introspectTable, introspectDatabase, modelToIntrospected, normalizeDbType, } from './introspect';
11
+ // Diff engine
12
+ export { diffTable, diffDatabase, categorizeOperations } from './diff';
13
+ // SQL generation from diff operations
14
+ export { operationToSql, generateMigrationSql } from './generateSql';
15
+ // Table setup utilities
16
+ export { setupTable } from './setupTable';
17
+ export { buildTableCreationCommand } from './createTable';
18
+ export { buildTableIndexCommands } from './buildTableIndexCommand';
19
+ export { buildTableTriggerCommands } from './buildTableTriggerCommands';
20
+ export { mapColumnType } from './mapColumnType';
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,qCAAqC;AACrC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE1D,qBAAqB;AACrB,OAAO,EAAE,uBAAuB,EAAE,MAAM,QAAQ,CAAC;AAEjD,uBAAuB;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzC,gBAAgB;AAChB,OAAO,EACN,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,GACf,MAAM,cAAc,CAAC;AAQtB,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAGvE,sCAAsC;AACtC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErE,wBAAwB;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Introspect database tables and convert to PostgresTableModel format
3
+ */
4
+ import { Client } from 'pg';
5
+ import type { PostgresTableModel, PostgresRecordModel } from '@lyku/lockstep-core';
6
+ export interface IntrospectedColumn {
7
+ name: string;
8
+ type: string;
9
+ nullable: boolean;
10
+ default: string | null;
11
+ maxLength: number | null;
12
+ checkConstraint: string | null;
13
+ enumValues: string[] | null;
14
+ arrayItemType: string | null;
15
+ }
16
+ export interface IntrospectedIndex {
17
+ name: string;
18
+ columns: string[];
19
+ unique: boolean;
20
+ definition: string;
21
+ }
22
+ export interface IntrospectedForeignKey {
23
+ column: string;
24
+ referencedTable: string;
25
+ referencedColumn: string;
26
+ constraintName: string;
27
+ }
28
+ export interface IntrospectedTable {
29
+ name: string;
30
+ columns: Map<string, IntrospectedColumn>;
31
+ indexes: IntrospectedIndex[];
32
+ primaryKey: string[];
33
+ uniqueConstraints: string[][];
34
+ foreignKeys: IntrospectedForeignKey[];
35
+ }
36
+ /**
37
+ * Normalize PostgreSQL type to our canonical form
38
+ */
39
+ export declare function normalizeDbType(pgType: string, udtName: string): {
40
+ type: string;
41
+ arrayItemType: string | null;
42
+ };
43
+ /**
44
+ * Introspect a single table from the database
45
+ */
46
+ export declare function introspectTable(client: Client, tableName: string): Promise<IntrospectedTable>;
47
+ /**
48
+ * Introspect all tables from the database
49
+ */
50
+ export declare function introspectDatabase(client: Client): Promise<Map<string, IntrospectedTable>>;
51
+ /**
52
+ * Convert a code-defined PostgresTableModel to our IntrospectedTable format
53
+ * for comparison purposes
54
+ */
55
+ export declare function modelToIntrospected(tableName: string, model: PostgresTableModel<PostgresRecordModel>): IntrospectedTable;
56
+ //# sourceMappingURL=introspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"introspect.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/introspect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,KAAK,EACX,kBAAkB,EAClB,mBAAmB,EAEnB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACzC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB,EAAE,MAAM,EAAE,EAAE,CAAC;IAC9B,WAAW,EAAE,sBAAsB,EAAE,CAAC;CACtC;AA4DD;;GAEG;AACH,wBAAgB,eAAe,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAyDhD;AA6CD;;GAEG;AACH,wBAAsB,eAAe,CACpC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,iBAAiB,CAAC,CA0K5B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACvC,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAgBzC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,GAC5C,iBAAiB,CA0InB"}