@schemalens/cli 0.5.0 → 0.6.0

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.
@@ -0,0 +1,28 @@
1
+ /**
2
+ * SQL AST parser for extracting objects that pg-mem cannot execute:
3
+ * functions, triggers, policies, views, and extensions.
4
+ *
5
+ * Uses pgsql-parser (a WASM build of libpg_query, the real PostgreSQL
6
+ * parser) to produce a full AST, then walks CREATE/DROP/RENAME statements
7
+ * across all migrations in order to arrive at the final object state.
8
+ *
9
+ * Object bodies/definitions are preserved as the original SQL text
10
+ * (extracted via stmt_location/stmt_len) so downstream diffing remains
11
+ * faithful to what the user wrote.
12
+ */
13
+ import type { FunctionInfo, TriggerInfo, PolicyInfo, ViewInfo, ExtensionInfo } from './introspector';
14
+ export interface MigrationInput {
15
+ filename: string;
16
+ sql: string;
17
+ }
18
+ export interface ExtractedObjects {
19
+ functions: FunctionInfo[];
20
+ triggers: TriggerInfo[];
21
+ policies: PolicyInfo[];
22
+ views: ViewInfo[];
23
+ extensions: ExtensionInfo[];
24
+ }
25
+ export declare function parseMigrationsForMeta(migrations: MigrationInput[]): Promise<{
26
+ objects: ExtractedObjects;
27
+ warnings: string[];
28
+ }>;
@@ -0,0 +1,508 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.parseMigrationsForMeta = parseMigrationsForMeta;
37
+ let parseFnPromise = null;
38
+ async function getParseFn() {
39
+ if (!parseFnPromise) {
40
+ parseFnPromise = (async () => {
41
+ const mod = await Promise.resolve().then(() => __importStar(require('pgsql-parser')));
42
+ await mod.loadModule();
43
+ return mod.parse;
44
+ })();
45
+ }
46
+ return parseFnPromise;
47
+ }
48
+ // ---------------------------------------------------------------------------
49
+ // Helpers
50
+ // ---------------------------------------------------------------------------
51
+ function svals(arr) {
52
+ return (arr ?? []).map(n => n.String?.sval).filter((x) => !!x);
53
+ }
54
+ function typeNameToString(tn) {
55
+ if (!tn)
56
+ return '';
57
+ const names = svals(tn.names);
58
+ // pg_catalog.bool → bool, pg_catalog.int4 → integer etc.
59
+ const last = names[names.length - 1] ?? '';
60
+ const canonical = {
61
+ int2: 'smallint', int4: 'integer', int8: 'bigint',
62
+ bool: 'boolean', float4: 'real', float8: 'double precision',
63
+ varchar: 'character varying',
64
+ };
65
+ return tn.setof ? `SETOF ${canonical[last] ?? last}` : (canonical[last] ?? last);
66
+ }
67
+ function splitFuncName(funcname) {
68
+ const parts = svals(funcname);
69
+ if (parts.length >= 2)
70
+ return { schema: parts[0], name: parts[parts.length - 1] };
71
+ return { schema: 'public', name: parts[0] ?? '' };
72
+ }
73
+ function buildFuncArgs(parameters) {
74
+ if (!parameters)
75
+ return '';
76
+ // Only IN-mode parameters (and VARIADIC) count toward function identity.
77
+ // FUNC_PARAM_TABLE / FUNC_PARAM_OUT are part of return type.
78
+ const inParams = parameters.filter(p => {
79
+ const mode = p.FunctionParameter?.mode ?? 'FUNC_PARAM_DEFAULT';
80
+ return mode === 'FUNC_PARAM_DEFAULT' || mode === 'FUNC_PARAM_IN' ||
81
+ mode === 'FUNC_PARAM_INOUT' || mode === 'FUNC_PARAM_VARIADIC';
82
+ });
83
+ return inParams
84
+ .map(p => typeNameToString(p.FunctionParameter?.argType))
85
+ .join(', ');
86
+ }
87
+ function buildFuncIdentity(schema, name, argsStr) {
88
+ return `${schema}.${name}(${argsStr})`;
89
+ }
90
+ function getDefElem(options, defname) {
91
+ if (!options)
92
+ return undefined;
93
+ for (const opt of options) {
94
+ if (opt.DefElem?.defname === defname)
95
+ return opt.DefElem.arg;
96
+ }
97
+ return undefined;
98
+ }
99
+ function getLanguage(options) {
100
+ const arg = getDefElem(options, 'language');
101
+ const s = arg?.String?.sval;
102
+ return s ?? 'plpgsql';
103
+ }
104
+ function getSecurityDefiner(options) {
105
+ const arg = getDefElem(options, 'security');
106
+ if (!arg)
107
+ return false;
108
+ const b = arg.Boolean;
109
+ return b?.boolval === true;
110
+ }
111
+ /**
112
+ * Slice a statement from the original SQL using libpg_query's byte offsets.
113
+ * stmt_location / stmt_len are UTF-8 byte offsets, not JS UTF-16 code units —
114
+ * we must convert via Buffer to handle non-ASCII characters in comments.
115
+ */
116
+ function sliceStatement(sql, stmt, sqlBuf) {
117
+ const buf = sqlBuf ?? Buffer.from(sql, 'utf-8');
118
+ const loc = stmt.stmt_location ?? 0;
119
+ const len = stmt.stmt_len;
120
+ const sub = len === undefined ? buf.subarray(loc) : buf.subarray(loc, loc + len);
121
+ return sub.toString('utf-8').trim();
122
+ }
123
+ // Decode trigger timing/events bitfields (from src/include/nodes/parsenodes.h)
124
+ const TRIGGER_TYPE_BEFORE = 1 << 1; // 2
125
+ const TRIGGER_TYPE_INSERT = 1 << 2; // 4
126
+ const TRIGGER_TYPE_DELETE = 1 << 3; // 8
127
+ const TRIGGER_TYPE_UPDATE = 1 << 4; // 16
128
+ const TRIGGER_TYPE_TRUNCATE = 1 << 5; // 32
129
+ const TRIGGER_TYPE_INSTEAD = 1 << 6; // 64
130
+ function decodeTriggerTiming(timing) {
131
+ if (timing === undefined)
132
+ return 'AFTER';
133
+ if (timing & TRIGGER_TYPE_INSTEAD)
134
+ return 'INSTEAD OF';
135
+ if (timing & TRIGGER_TYPE_BEFORE)
136
+ return 'BEFORE';
137
+ return 'AFTER';
138
+ }
139
+ function decodeTriggerEvents(events) {
140
+ if (events === undefined)
141
+ return 'UNKNOWN';
142
+ const parts = [];
143
+ if (events & TRIGGER_TYPE_INSERT)
144
+ parts.push('INSERT');
145
+ if (events & TRIGGER_TYPE_UPDATE)
146
+ parts.push('UPDATE');
147
+ if (events & TRIGGER_TYPE_DELETE)
148
+ parts.push('DELETE');
149
+ if (events & TRIGGER_TYPE_TRUNCATE)
150
+ parts.push('TRUNCATE');
151
+ return parts.length > 0 ? parts.join(' OR ') : 'UNKNOWN';
152
+ }
153
+ function decodePolicyCmd(cmdName) {
154
+ if (!cmdName)
155
+ return 'ALL';
156
+ return cmdName.toUpperCase();
157
+ }
158
+ // Extract USING (...) / WITH CHECK (...) text from original CREATE POLICY SQL
159
+ function extractPolicyClause(sql, keyword) {
160
+ // Match keyword followed by a paren-balanced expression
161
+ const upper = sql.toUpperCase();
162
+ const needle = keyword;
163
+ let i = 0;
164
+ while (i < upper.length) {
165
+ const idx = upper.indexOf(needle, i);
166
+ if (idx === -1)
167
+ return null;
168
+ // Look for opening paren after keyword (skipping whitespace)
169
+ let j = idx + needle.length;
170
+ while (j < sql.length && /\s/.test(sql[j]))
171
+ j++;
172
+ if (sql[j] !== '(') {
173
+ i = idx + needle.length;
174
+ continue;
175
+ }
176
+ // Paren-balance
177
+ let depth = 1;
178
+ let k = j + 1;
179
+ let inQuote = false;
180
+ while (k < sql.length && depth > 0) {
181
+ const ch = sql[k];
182
+ if (ch === "'" && sql[k - 1] !== '\\')
183
+ inQuote = !inQuote;
184
+ if (!inQuote) {
185
+ if (ch === '(')
186
+ depth++;
187
+ else if (ch === ')')
188
+ depth--;
189
+ }
190
+ k++;
191
+ }
192
+ if (depth === 0)
193
+ return sql.slice(j + 1, k - 1).trim();
194
+ return null;
195
+ }
196
+ return null;
197
+ }
198
+ // ---------------------------------------------------------------------------
199
+ // State machine
200
+ // ---------------------------------------------------------------------------
201
+ class ObjectStore {
202
+ functions = new Map(); // key: schema.name(args)
203
+ triggers = new Map(); // key: schema.table.name
204
+ policies = new Map(); // key: schema.table.name
205
+ views = new Map(); // key: schema.name
206
+ extensions = new Map(); // key: name
207
+ upsertFunction(fn, identity) {
208
+ this.functions.set(identity, fn);
209
+ }
210
+ dropFunction(identity) {
211
+ this.functions.delete(identity);
212
+ }
213
+ // Drop function by name only (no args) — removes all overloads
214
+ dropFunctionByName(schema, name) {
215
+ const prefix = `${schema}.${name}(`;
216
+ for (const k of this.functions.keys()) {
217
+ if (k.startsWith(prefix))
218
+ this.functions.delete(k);
219
+ }
220
+ }
221
+ renameFunction(oldSchema, oldName, newName) {
222
+ const prefix = `${oldSchema}.${oldName}(`;
223
+ const toRename = [];
224
+ for (const [k, v] of this.functions) {
225
+ if (k.startsWith(prefix))
226
+ toRename.push([k, v]);
227
+ }
228
+ for (const [k, v] of toRename) {
229
+ this.functions.delete(k);
230
+ const argsStr = k.slice(prefix.length, -1);
231
+ const newKey = buildFuncIdentity(oldSchema, newName, argsStr);
232
+ this.functions.set(newKey, { ...v, name: newName });
233
+ }
234
+ }
235
+ upsertTrigger(t) {
236
+ this.triggers.set(`${t.schema}.${t.table}.${t.name}`, t);
237
+ }
238
+ dropTrigger(schema, table, name) {
239
+ this.triggers.delete(`${schema}.${table}.${name}`);
240
+ }
241
+ upsertPolicy(p) {
242
+ this.policies.set(`${p.schema}.${p.table}.${p.name}`, p);
243
+ }
244
+ dropPolicy(schema, table, name) {
245
+ this.policies.delete(`${schema}.${table}.${name}`);
246
+ }
247
+ renamePolicy(schema, table, oldName, newName) {
248
+ const k = `${schema}.${table}.${oldName}`;
249
+ const p = this.policies.get(k);
250
+ if (p) {
251
+ this.policies.delete(k);
252
+ this.policies.set(`${schema}.${table}.${newName}`, { ...p, name: newName });
253
+ }
254
+ }
255
+ upsertView(v) {
256
+ this.views.set(`${v.schema}.${v.name}`, v);
257
+ }
258
+ dropView(schema, name) {
259
+ this.views.delete(`${schema}.${name}`);
260
+ }
261
+ upsertExtension(e) {
262
+ this.extensions.set(e.name, e);
263
+ }
264
+ dropExtension(name) {
265
+ this.extensions.delete(name);
266
+ }
267
+ toExtracted() {
268
+ return {
269
+ functions: [...this.functions.values()],
270
+ triggers: [...this.triggers.values()],
271
+ policies: [...this.policies.values()],
272
+ views: [...this.views.values()],
273
+ extensions: [...this.extensions.values()],
274
+ };
275
+ }
276
+ }
277
+ // ---------------------------------------------------------------------------
278
+ // Statement handlers
279
+ // ---------------------------------------------------------------------------
280
+ function handleCreateExtension(stmt, store) {
281
+ const options = stmt.options;
282
+ const schemaArg = getDefElem(options, 'schema');
283
+ const versionArg = getDefElem(options, 'new_version');
284
+ store.upsertExtension({
285
+ name: stmt.extname,
286
+ version: versionArg?.String?.sval ?? '',
287
+ schema: schemaArg?.String?.sval ?? 'public',
288
+ });
289
+ }
290
+ function handleCreateFunction(stmt, sql, parsed, sqlBuf, store) {
291
+ const { schema, name } = splitFuncName(stmt.funcname);
292
+ const argsStr = buildFuncArgs(stmt.parameters);
293
+ const identity = buildFuncIdentity(schema, name, argsStr);
294
+ const body = sliceStatement(sql, parsed, sqlBuf);
295
+ store.upsertFunction({
296
+ schema,
297
+ name,
298
+ language: getLanguage(stmt.options),
299
+ returnType: typeNameToString(stmt.returnType),
300
+ args: argsStr,
301
+ body,
302
+ securityDefiner: getSecurityDefiner(stmt.options),
303
+ }, identity);
304
+ }
305
+ function handleCreateTrigger(stmt, sql, parsed, sqlBuf, store) {
306
+ const schema = stmt.relation.schemaname ?? 'public';
307
+ const table = stmt.relation.relname;
308
+ const funcParts = svals(stmt.funcname);
309
+ const functionName = funcParts.length >= 2
310
+ ? `${funcParts[0]}.${funcParts[funcParts.length - 1]}`
311
+ : funcParts[0] ?? '';
312
+ store.upsertTrigger({
313
+ schema,
314
+ table,
315
+ name: stmt.trigname,
316
+ timing: decodeTriggerTiming(stmt.timing),
317
+ event: decodeTriggerEvents(stmt.events),
318
+ functionName,
319
+ body: sliceStatement(sql, parsed, sqlBuf),
320
+ });
321
+ }
322
+ function handleCreatePolicy(stmt, sql, parsed, sqlBuf, store) {
323
+ const schema = stmt.table.schemaname ?? 'public';
324
+ const table = stmt.table.relname;
325
+ const fullStmt = sliceStatement(sql, parsed, sqlBuf);
326
+ const roles = (stmt.roles ?? [])
327
+ .map(r => r.RoleSpec?.rolename)
328
+ .filter((x) => !!x);
329
+ // Default role list is 'public' per Postgres
330
+ if (roles.length === 0)
331
+ roles.push('public');
332
+ store.upsertPolicy({
333
+ schema,
334
+ table,
335
+ name: stmt.policy_name,
336
+ permissive: stmt.permissive !== false,
337
+ roles,
338
+ cmd: decodePolicyCmd(stmt.cmd_name),
339
+ qual: extractPolicyClause(fullStmt, 'USING'),
340
+ withCheck: extractPolicyClause(fullStmt, 'WITH CHECK'),
341
+ });
342
+ }
343
+ function handleViewStmt(stmt, sql, parsed, sqlBuf, store) {
344
+ const schema = stmt.view.schemaname ?? 'public';
345
+ const name = stmt.view.relname;
346
+ const full = sliceStatement(sql, parsed, sqlBuf);
347
+ // Extract the body after AS (first occurrence, greedy to end but without
348
+ // running past additional statements — the slice is already just this stmt)
349
+ const asIdx = full.search(/\bAS\b/i);
350
+ let definition = full;
351
+ if (asIdx >= 0) {
352
+ let body = full.slice(asIdx + 2).trim();
353
+ // Strip trailing semicolon
354
+ if (body.endsWith(';'))
355
+ body = body.slice(0, -1).trim();
356
+ definition = body;
357
+ }
358
+ store.upsertView({ schema, name, definition });
359
+ }
360
+ function handleDropStmt(stmt, store) {
361
+ const type = stmt.removeType;
362
+ for (const obj of stmt.objects) {
363
+ switch (type) {
364
+ case 'OBJECT_FUNCTION':
365
+ case 'OBJECT_PROCEDURE': {
366
+ const owa = obj.ObjectWithArgs;
367
+ if (!owa)
368
+ continue;
369
+ const { schema, name } = splitFuncName(owa.objname);
370
+ if (owa.objfuncargs || owa.objargs) {
371
+ const params = owa.objfuncargs ?? (owa.objargs ?? []).map(t => ({
372
+ FunctionParameter: { argType: t, mode: 'FUNC_PARAM_DEFAULT' },
373
+ }));
374
+ const argsStr = buildFuncArgs(params);
375
+ store.dropFunction(buildFuncIdentity(schema, name, argsStr));
376
+ }
377
+ else {
378
+ store.dropFunctionByName(schema, name);
379
+ }
380
+ break;
381
+ }
382
+ case 'OBJECT_POLICY': {
383
+ const list = obj.List?.items;
384
+ if (!list)
385
+ continue;
386
+ const items = svals(list);
387
+ // Shape: [schema, table, policyName] or [table, policyName]
388
+ if (items.length >= 3) {
389
+ store.dropPolicy(items[0], items[1], items[2]);
390
+ }
391
+ else if (items.length === 2) {
392
+ store.dropPolicy('public', items[0], items[1]);
393
+ }
394
+ break;
395
+ }
396
+ case 'OBJECT_EXTENSION': {
397
+ const s = obj.String?.sval;
398
+ if (s)
399
+ store.dropExtension(s);
400
+ break;
401
+ }
402
+ case 'OBJECT_VIEW':
403
+ case 'OBJECT_MATVIEW': {
404
+ const list = obj.List?.items;
405
+ if (!list)
406
+ continue;
407
+ const items = svals(list);
408
+ if (items.length >= 2) {
409
+ store.dropView(items[0], items[1]);
410
+ }
411
+ else if (items.length === 1) {
412
+ store.dropView('public', items[0]);
413
+ }
414
+ break;
415
+ }
416
+ case 'OBJECT_TRIGGER': {
417
+ const list = obj.List?.items;
418
+ if (!list)
419
+ continue;
420
+ const items = svals(list);
421
+ // Shape: [schema, table, triggerName] or [table, triggerName]
422
+ if (items.length >= 3) {
423
+ store.dropTrigger(items[0], items[1], items[2]);
424
+ }
425
+ else if (items.length === 2) {
426
+ store.dropTrigger('public', items[0], items[1]);
427
+ }
428
+ break;
429
+ }
430
+ }
431
+ }
432
+ }
433
+ function handleRenameStmt(stmt, store) {
434
+ switch (stmt.renameType) {
435
+ case 'OBJECT_POLICY': {
436
+ if (!stmt.relation)
437
+ return;
438
+ const schema = stmt.relation.schemaname ?? 'public';
439
+ const table = stmt.relation.relname;
440
+ if (stmt.subname && stmt.newname) {
441
+ store.renamePolicy(schema, table, stmt.subname, stmt.newname);
442
+ }
443
+ break;
444
+ }
445
+ case 'OBJECT_FUNCTION':
446
+ case 'OBJECT_PROCEDURE': {
447
+ const owa = stmt.object?.ObjectWithArgs;
448
+ if (!owa)
449
+ return;
450
+ const { schema, name } = splitFuncName(owa.objname);
451
+ store.renameFunction(schema, name, stmt.newname);
452
+ break;
453
+ }
454
+ // TRIGGERS, VIEWS, EXTENSIONS rarely renamed; not currently handled
455
+ }
456
+ }
457
+ // ---------------------------------------------------------------------------
458
+ // Main entry point
459
+ // ---------------------------------------------------------------------------
460
+ async function parseMigrationsForMeta(migrations) {
461
+ const parse = await getParseFn();
462
+ const store = new ObjectStore();
463
+ const warnings = [];
464
+ for (const { filename, sql } of migrations) {
465
+ let ast;
466
+ try {
467
+ ast = await parse(sql);
468
+ }
469
+ catch (err) {
470
+ warnings.push(`${filename}: parse failed — ${err.message.split('\n')[0]}`);
471
+ continue;
472
+ }
473
+ const sqlBuf = Buffer.from(sql, 'utf-8');
474
+ for (const parsed of ast.stmts) {
475
+ const node = parsed.stmt;
476
+ if (!node)
477
+ continue;
478
+ try {
479
+ if ('CreateExtensionStmt' in node) {
480
+ handleCreateExtension(node.CreateExtensionStmt, store);
481
+ }
482
+ else if ('CreateFunctionStmt' in node) {
483
+ handleCreateFunction(node.CreateFunctionStmt, sql, parsed, sqlBuf, store);
484
+ }
485
+ else if ('CreateTrigStmt' in node) {
486
+ handleCreateTrigger(node.CreateTrigStmt, sql, parsed, sqlBuf, store);
487
+ }
488
+ else if ('CreatePolicyStmt' in node) {
489
+ handleCreatePolicy(node.CreatePolicyStmt, sql, parsed, sqlBuf, store);
490
+ }
491
+ else if ('ViewStmt' in node) {
492
+ handleViewStmt(node.ViewStmt, sql, parsed, sqlBuf, store);
493
+ }
494
+ else if ('DropStmt' in node) {
495
+ handleDropStmt(node.DropStmt, store);
496
+ }
497
+ else if ('RenameStmt' in node) {
498
+ handleRenameStmt(node.RenameStmt, store);
499
+ }
500
+ }
501
+ catch (err) {
502
+ warnings.push(`${filename}: failed to process statement — ${err.message.split('\n')[0]}`);
503
+ }
504
+ }
505
+ }
506
+ return { objects: store.toExtracted(), warnings };
507
+ }
508
+ //# sourceMappingURL=sql-ast-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-ast-parser.js","sourceRoot":"","sources":["../../src/lib/sql-ast-parser.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schemalens/cli",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "SchemaLens CLI — pull, diff, and deploy PostgreSQL schemas",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -19,7 +19,9 @@
19
19
  "dotenv": "^16.4.7",
20
20
  "js-yaml": "^4.1.0",
21
21
  "ora": "^5.4.1",
22
- "pg": "^8.13.1"
22
+ "pg": "^8.13.1",
23
+ "pg-mem": "^3.0.14",
24
+ "pgsql-parser": "^17.9.15"
23
25
  },
24
26
  "devDependencies": {
25
27
  "@types/js-yaml": "^4.0.9",