relq 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/cli/commands/add.cjs +252 -12
- package/dist/cjs/cli/commands/commit.cjs +12 -1
- package/dist/cjs/cli/commands/export.cjs +25 -19
- package/dist/cjs/cli/commands/import.cjs +219 -100
- package/dist/cjs/cli/commands/init.cjs +86 -14
- package/dist/cjs/cli/commands/pull.cjs +104 -23
- package/dist/cjs/cli/commands/push.cjs +38 -3
- package/dist/cjs/cli/index.cjs +9 -1
- package/dist/cjs/cli/utils/ast/codegen/builder.cjs +297 -0
- package/dist/cjs/cli/utils/ast/codegen/constraints.cjs +185 -0
- package/dist/cjs/cli/utils/ast/codegen/defaults.cjs +311 -0
- package/dist/cjs/cli/utils/ast/codegen/index.cjs +24 -0
- package/dist/cjs/cli/utils/ast/codegen/type-map.cjs +116 -0
- package/dist/cjs/cli/utils/ast/codegen/utils.cjs +69 -0
- package/dist/cjs/cli/utils/ast/index.cjs +19 -0
- package/dist/cjs/cli/utils/ast/transformer/helpers.cjs +154 -0
- package/dist/cjs/cli/utils/ast/transformer/index.cjs +25 -0
- package/dist/cjs/cli/utils/ast/types.cjs +2 -0
- package/dist/cjs/cli/utils/ast-codegen.cjs +949 -0
- package/dist/cjs/cli/utils/ast-transformer.cjs +916 -0
- package/dist/cjs/cli/utils/change-tracker.cjs +50 -1
- package/dist/cjs/cli/utils/cli-utils.cjs +151 -0
- package/dist/cjs/cli/utils/fast-introspect.cjs +149 -23
- package/dist/cjs/cli/utils/pg-parser.cjs +1 -0
- package/dist/cjs/cli/utils/repo-manager.cjs +121 -4
- package/dist/cjs/cli/utils/schema-comparator.cjs +98 -14
- package/dist/cjs/cli/utils/schema-introspect.cjs +56 -19
- package/dist/cjs/cli/utils/snapshot-manager.cjs +0 -1
- package/dist/cjs/cli/utils/sql-generator.cjs +353 -64
- package/dist/cjs/cli/utils/type-generator.cjs +114 -15
- package/dist/cjs/core/relq-client.cjs +22 -6
- package/dist/cjs/schema-definition/column-types.cjs +149 -13
- package/dist/cjs/schema-definition/defaults.cjs +72 -0
- package/dist/cjs/schema-definition/index.cjs +15 -1
- package/dist/cjs/schema-definition/introspection.cjs +7 -3
- package/dist/cjs/schema-definition/pg-relations.cjs +169 -0
- package/dist/cjs/schema-definition/pg-view.cjs +30 -0
- package/dist/cjs/schema-definition/table-definition.cjs +110 -4
- package/dist/cjs/types/config-types.cjs +13 -4
- package/dist/cjs/utils/aws-dsql.cjs +177 -0
- package/dist/config.d.ts +146 -1
- package/dist/esm/cli/commands/add.js +250 -13
- package/dist/esm/cli/commands/commit.js +12 -1
- package/dist/esm/cli/commands/export.js +25 -19
- package/dist/esm/cli/commands/import.js +221 -102
- package/dist/esm/cli/commands/init.js +86 -14
- package/dist/esm/cli/commands/pull.js +106 -25
- package/dist/esm/cli/commands/push.js +39 -4
- package/dist/esm/cli/index.js +9 -1
- package/dist/esm/cli/utils/ast/codegen/builder.js +291 -0
- package/dist/esm/cli/utils/ast/codegen/constraints.js +176 -0
- package/dist/esm/cli/utils/ast/codegen/defaults.js +305 -0
- package/dist/esm/cli/utils/ast/codegen/index.js +6 -0
- package/dist/esm/cli/utils/ast/codegen/type-map.js +111 -0
- package/dist/esm/cli/utils/ast/codegen/utils.js +60 -0
- package/dist/esm/cli/utils/ast/index.js +3 -0
- package/dist/esm/cli/utils/ast/transformer/helpers.js +141 -0
- package/dist/esm/cli/utils/ast/transformer/index.js +2 -0
- package/dist/esm/cli/utils/ast/types.js +1 -0
- package/dist/esm/cli/utils/ast-codegen.js +945 -0
- package/dist/esm/cli/utils/ast-transformer.js +907 -0
- package/dist/esm/cli/utils/change-tracker.js +50 -1
- package/dist/esm/cli/utils/cli-utils.js +147 -0
- package/dist/esm/cli/utils/fast-introspect.js +149 -23
- package/dist/esm/cli/utils/pg-parser.js +1 -0
- package/dist/esm/cli/utils/repo-manager.js +114 -4
- package/dist/esm/cli/utils/schema-comparator.js +98 -14
- package/dist/esm/cli/utils/schema-introspect.js +56 -19
- package/dist/esm/cli/utils/snapshot-manager.js +0 -1
- package/dist/esm/cli/utils/sql-generator.js +353 -64
- package/dist/esm/cli/utils/type-generator.js +114 -15
- package/dist/esm/core/relq-client.js +23 -7
- package/dist/esm/schema-definition/column-types.js +146 -12
- package/dist/esm/schema-definition/defaults.js +69 -0
- package/dist/esm/schema-definition/index.js +3 -0
- package/dist/esm/schema-definition/introspection.js +7 -3
- package/dist/esm/schema-definition/pg-relations.js +161 -0
- package/dist/esm/schema-definition/pg-view.js +24 -0
- package/dist/esm/schema-definition/table-definition.js +110 -4
- package/dist/esm/types/config-types.js +12 -4
- package/dist/esm/utils/aws-dsql.js +139 -0
- package/dist/index.d.ts +159 -1
- package/dist/schema-builder.d.ts +1314 -32
- package/package.json +1 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toCamelCase = toCamelCase;
|
|
4
|
+
exports.toPascalCase = toPascalCase;
|
|
5
|
+
exports.escapeString = escapeString;
|
|
6
|
+
exports.escapeJsDocString = escapeJsDocString;
|
|
7
|
+
exports.pluralize = pluralize;
|
|
8
|
+
exports.isBalanced = isBalanced;
|
|
9
|
+
exports.getComparisonMethod = getComparisonMethod;
|
|
10
|
+
function toCamelCase(str) {
|
|
11
|
+
if (!str)
|
|
12
|
+
return 'unknown';
|
|
13
|
+
const cleaned = str.replace(/^[_0-9]+/, '');
|
|
14
|
+
return cleaned
|
|
15
|
+
.split('_')
|
|
16
|
+
.map((word, i) => i === 0 ? word.toLowerCase() : word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
17
|
+
.join('');
|
|
18
|
+
}
|
|
19
|
+
function toPascalCase(str) {
|
|
20
|
+
if (!str)
|
|
21
|
+
return 'Unknown';
|
|
22
|
+
const cleaned = str.replace(/^[_0-9]+/, '');
|
|
23
|
+
return cleaned
|
|
24
|
+
.split('_')
|
|
25
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
26
|
+
.join('');
|
|
27
|
+
}
|
|
28
|
+
function escapeString(str) {
|
|
29
|
+
return str.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
|
|
30
|
+
}
|
|
31
|
+
function escapeJsDocString(str) {
|
|
32
|
+
return str.replace(/\*\//g, '*\\/').replace(/\n/g, '\n * ');
|
|
33
|
+
}
|
|
34
|
+
function pluralize(word) {
|
|
35
|
+
if (!word)
|
|
36
|
+
return word;
|
|
37
|
+
if (word.endsWith('s') || word.endsWith('x') || word.endsWith('z') ||
|
|
38
|
+
word.endsWith('ch') || word.endsWith('sh')) {
|
|
39
|
+
return word + 'es';
|
|
40
|
+
}
|
|
41
|
+
if (word.endsWith('y') && !['a', 'e', 'i', 'o', 'u'].includes(word[word.length - 2])) {
|
|
42
|
+
return word.slice(0, -1) + 'ies';
|
|
43
|
+
}
|
|
44
|
+
return word + 's';
|
|
45
|
+
}
|
|
46
|
+
function isBalanced(str) {
|
|
47
|
+
let count = 0;
|
|
48
|
+
for (const char of str) {
|
|
49
|
+
if (char === '(')
|
|
50
|
+
count++;
|
|
51
|
+
if (char === ')')
|
|
52
|
+
count--;
|
|
53
|
+
if (count < 0)
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
return count === 0;
|
|
57
|
+
}
|
|
58
|
+
function getComparisonMethod(op) {
|
|
59
|
+
switch (op) {
|
|
60
|
+
case '>': return 'gt';
|
|
61
|
+
case '>=': return 'gte';
|
|
62
|
+
case '<': return 'lt';
|
|
63
|
+
case '<=': return 'lte';
|
|
64
|
+
case '=': return 'eq';
|
|
65
|
+
case '<>':
|
|
66
|
+
case '!=': return 'neq';
|
|
67
|
+
default: return 'eq';
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types.cjs"), exports);
|
|
18
|
+
__exportStar(require("./codegen/index.cjs"), exports);
|
|
19
|
+
__exportStar(require("./transformer/index.cjs"), exports);
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extractTypeName = extractTypeName;
|
|
4
|
+
exports.extractConstraintType = extractConstraintType;
|
|
5
|
+
exports.extractFkAction = extractFkAction;
|
|
6
|
+
exports.extractFkMatch = extractFkMatch;
|
|
7
|
+
exports.deparseNode = deparseNode;
|
|
8
|
+
exports.normalizeTypeName = normalizeTypeName;
|
|
9
|
+
exports.extractTypeParams = extractTypeParams;
|
|
10
|
+
exports.extractColumnsFromDefinition = extractColumnsFromDefinition;
|
|
11
|
+
exports.extractCheckExpression = extractCheckExpression;
|
|
12
|
+
exports.extractExcludeExpression = extractExcludeExpression;
|
|
13
|
+
exports.parseArgTypes = parseArgTypes;
|
|
14
|
+
const pgsql_deparser_1 = require("pgsql-deparser");
|
|
15
|
+
function extractTypeName(typeName) {
|
|
16
|
+
if (!typeName)
|
|
17
|
+
return { name: 'text', isArray: false };
|
|
18
|
+
const names = typeName.names?.map((n) => n.String?.sval).filter(Boolean) || [];
|
|
19
|
+
let name = names.length > 1 ? names[names.length - 1] : names[0] || 'text';
|
|
20
|
+
if (names[0] === 'pg_catalog') {
|
|
21
|
+
name = names[1] || 'text';
|
|
22
|
+
}
|
|
23
|
+
const isArray = (typeName.arrayBounds?.length ?? 0) > 0;
|
|
24
|
+
const arrayDims = typeName.arrayBounds?.length;
|
|
25
|
+
let params;
|
|
26
|
+
if (typeName.typmods && typeName.typmods.length > 0) {
|
|
27
|
+
const mods = typeName.typmods.map((m) => {
|
|
28
|
+
if (m.A_Const?.ival?.ival !== undefined)
|
|
29
|
+
return m.A_Const.ival.ival;
|
|
30
|
+
if (m.A_Const?.sval?.sval !== undefined)
|
|
31
|
+
return m.A_Const.sval.sval;
|
|
32
|
+
return undefined;
|
|
33
|
+
}).filter((v) => v !== undefined);
|
|
34
|
+
if (mods.length === 1) {
|
|
35
|
+
if (['varchar', 'character varying', 'char', 'character', 'bit', 'varbit'].includes(name.toLowerCase())) {
|
|
36
|
+
params = { length: mods[0] };
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
params = { precision: mods[0] };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else if (mods.length === 2) {
|
|
43
|
+
params = { precision: mods[0], scale: mods[1] };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return { name, params, isArray, arrayDims };
|
|
47
|
+
}
|
|
48
|
+
function extractConstraintType(contype) {
|
|
49
|
+
const types = {
|
|
50
|
+
0: 'NULL',
|
|
51
|
+
1: 'NOT NULL',
|
|
52
|
+
2: 'DEFAULT',
|
|
53
|
+
3: 'IDENTITY',
|
|
54
|
+
4: 'GENERATED',
|
|
55
|
+
5: 'CHECK',
|
|
56
|
+
6: 'PRIMARY KEY',
|
|
57
|
+
7: 'UNIQUE',
|
|
58
|
+
8: 'EXCLUSION',
|
|
59
|
+
9: 'FOREIGN KEY',
|
|
60
|
+
};
|
|
61
|
+
return types[contype] || 'UNKNOWN';
|
|
62
|
+
}
|
|
63
|
+
function extractFkAction(action) {
|
|
64
|
+
if (!action)
|
|
65
|
+
return undefined;
|
|
66
|
+
const actions = {
|
|
67
|
+
'a': 'NO ACTION',
|
|
68
|
+
'r': 'RESTRICT',
|
|
69
|
+
'c': 'CASCADE',
|
|
70
|
+
'n': 'SET NULL',
|
|
71
|
+
'd': 'SET DEFAULT',
|
|
72
|
+
};
|
|
73
|
+
return actions[action];
|
|
74
|
+
}
|
|
75
|
+
function extractFkMatch(matchType) {
|
|
76
|
+
if (!matchType)
|
|
77
|
+
return undefined;
|
|
78
|
+
const matches = {
|
|
79
|
+
's': 'SIMPLE',
|
|
80
|
+
'f': 'FULL',
|
|
81
|
+
};
|
|
82
|
+
return matches[matchType];
|
|
83
|
+
}
|
|
84
|
+
async function deparseNode(node) {
|
|
85
|
+
try {
|
|
86
|
+
const result = await (0, pgsql_deparser_1.deparse)([node]);
|
|
87
|
+
return result.trim();
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return '';
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function normalizeTypeName(dataType, udtName) {
|
|
94
|
+
if (dataType === 'ARRAY' && udtName) {
|
|
95
|
+
const baseType = udtName.replace(/^_/, '');
|
|
96
|
+
return baseType;
|
|
97
|
+
}
|
|
98
|
+
const typeMap = {
|
|
99
|
+
'integer': 'int4',
|
|
100
|
+
'smallint': 'int2',
|
|
101
|
+
'bigint': 'int8',
|
|
102
|
+
'real': 'float4',
|
|
103
|
+
'double precision': 'float8',
|
|
104
|
+
'character varying': 'varchar',
|
|
105
|
+
'character': 'char',
|
|
106
|
+
'boolean': 'bool',
|
|
107
|
+
'timestamp without time zone': 'timestamp',
|
|
108
|
+
'timestamp with time zone': 'timestamptz',
|
|
109
|
+
'time without time zone': 'time',
|
|
110
|
+
'time with time zone': 'timetz',
|
|
111
|
+
};
|
|
112
|
+
const lower = dataType.toLowerCase();
|
|
113
|
+
return typeMap[lower] || udtName || lower;
|
|
114
|
+
}
|
|
115
|
+
function extractTypeParams(col) {
|
|
116
|
+
if (col.characterMaxLength) {
|
|
117
|
+
return { length: col.characterMaxLength };
|
|
118
|
+
}
|
|
119
|
+
if (col.numericPrecision != null) {
|
|
120
|
+
if (col.numericScale != null && col.numericScale > 0) {
|
|
121
|
+
return { precision: col.numericPrecision, scale: col.numericScale };
|
|
122
|
+
}
|
|
123
|
+
return { precision: col.numericPrecision };
|
|
124
|
+
}
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
function extractColumnsFromDefinition(definition) {
|
|
128
|
+
const match = definition.match(/\(([^)]+)\)/);
|
|
129
|
+
if (!match)
|
|
130
|
+
return [];
|
|
131
|
+
return match[1].split(',').map(s => s.trim().replace(/"/g, ''));
|
|
132
|
+
}
|
|
133
|
+
function extractCheckExpression(definition) {
|
|
134
|
+
const match = definition.match(/CHECK\s*\((.+)\)/is);
|
|
135
|
+
return match ? match[1].trim() : definition;
|
|
136
|
+
}
|
|
137
|
+
function extractExcludeExpression(definition) {
|
|
138
|
+
const match = definition.match(/EXCLUDE\s+USING\s+\w+\s*\((.+)\)/is);
|
|
139
|
+
return match ? match[1].trim() : definition;
|
|
140
|
+
}
|
|
141
|
+
function parseArgTypes(argTypes) {
|
|
142
|
+
if (!argTypes)
|
|
143
|
+
return [];
|
|
144
|
+
if (Array.isArray(argTypes)) {
|
|
145
|
+
return argTypes.map(t => ({ type: t }));
|
|
146
|
+
}
|
|
147
|
+
return argTypes.split(',').map(arg => {
|
|
148
|
+
const parts = arg.trim().split(/\s+/);
|
|
149
|
+
if (parts.length > 1) {
|
|
150
|
+
return { name: parts[0], type: parts.slice(1).join(' ') };
|
|
151
|
+
}
|
|
152
|
+
return { type: parts[0] };
|
|
153
|
+
}).filter(a => a.type);
|
|
154
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.deparse = exports.parse = exports.normalizedToParsedSchema = exports.introspectedToParsedSchema = exports.deparseSchema = exports.parseSQL = void 0;
|
|
18
|
+
__exportStar(require("./helpers.cjs"), exports);
|
|
19
|
+
var ast_transformer_1 = require("../../ast-transformer.cjs");
|
|
20
|
+
Object.defineProperty(exports, "parseSQL", { enumerable: true, get: function () { return ast_transformer_1.parseSQL; } });
|
|
21
|
+
Object.defineProperty(exports, "deparseSchema", { enumerable: true, get: function () { return ast_transformer_1.deparseSchema; } });
|
|
22
|
+
Object.defineProperty(exports, "introspectedToParsedSchema", { enumerable: true, get: function () { return ast_transformer_1.introspectedToParsedSchema; } });
|
|
23
|
+
Object.defineProperty(exports, "normalizedToParsedSchema", { enumerable: true, get: function () { return ast_transformer_1.normalizedToParsedSchema; } });
|
|
24
|
+
Object.defineProperty(exports, "parse", { enumerable: true, get: function () { return ast_transformer_1.parse; } });
|
|
25
|
+
Object.defineProperty(exports, "deparse", { enumerable: true, get: function () { return ast_transformer_1.deparse; } });
|