rawsql-ts 0.17.0 → 0.18.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.
Files changed (37) hide show
  1. package/LICENSE +21 -0
  2. package/dist/esm/index.d.ts +4 -0
  3. package/dist/esm/index.js +4 -0
  4. package/dist/esm/index.js.map +1 -1
  5. package/dist/esm/index.min.js +4 -4
  6. package/dist/esm/index.min.js.map +4 -4
  7. package/dist/esm/transformers/DynamicQueryBuilder.d.ts +9 -13
  8. package/dist/esm/transformers/DynamicQueryBuilder.js +8 -108
  9. package/dist/esm/transformers/DynamicQueryBuilder.js.map +1 -1
  10. package/dist/esm/transformers/PruneOptionalConditionBranches.d.ts +14 -2
  11. package/dist/esm/transformers/PruneOptionalConditionBranches.js +105 -37
  12. package/dist/esm/transformers/PruneOptionalConditionBranches.js.map +1 -1
  13. package/dist/esm/transformers/SSSQLFilterBuilder.d.ts +30 -0
  14. package/dist/esm/transformers/SSSQLFilterBuilder.js +253 -0
  15. package/dist/esm/transformers/SSSQLFilterBuilder.js.map +1 -0
  16. package/dist/esm/utils/RelationGraph.d.ts +43 -0
  17. package/dist/esm/utils/RelationGraph.js +117 -0
  18. package/dist/esm/utils/RelationGraph.js.map +1 -0
  19. package/dist/index.js +4 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/index.min.js +4 -4
  22. package/dist/index.min.js.map +4 -4
  23. package/dist/src/index.d.ts +4 -0
  24. package/dist/src/transformers/DynamicQueryBuilder.d.ts +9 -13
  25. package/dist/src/transformers/PruneOptionalConditionBranches.d.ts +14 -2
  26. package/dist/src/transformers/SSSQLFilterBuilder.d.ts +30 -0
  27. package/dist/src/utils/RelationGraph.d.ts +43 -0
  28. package/dist/transformers/DynamicQueryBuilder.js +8 -97
  29. package/dist/transformers/DynamicQueryBuilder.js.map +1 -1
  30. package/dist/transformers/PruneOptionalConditionBranches.js +106 -37
  31. package/dist/transformers/PruneOptionalConditionBranches.js.map +1 -1
  32. package/dist/transformers/SSSQLFilterBuilder.js +259 -0
  33. package/dist/transformers/SSSQLFilterBuilder.js.map +1 -0
  34. package/dist/tsconfig.browser.tsbuildinfo +1 -1
  35. package/dist/utils/RelationGraph.js +123 -0
  36. package/dist/utils/RelationGraph.js.map +1 -0
  37. package/package.json +64 -65
@@ -0,0 +1,253 @@
1
+ import { WhereClause, TableSource } from "../models/Clause";
2
+ import { BinaryExpression, ColumnReference, IdentifierString, LiteralValue, ParameterExpression, ParenExpression } from "../models/ValueComponent";
3
+ import { SelectQueryParser } from "../parsers/SelectQueryParser";
4
+ import { UpstreamSelectQueryFinder } from "./UpstreamSelectQueryFinder";
5
+ import { SelectableColumnCollector, DuplicateDetectionMode } from "./SelectableColumnCollector";
6
+ import { ColumnReferenceCollector } from "./ColumnReferenceCollector";
7
+ import { collectSupportedOptionalConditionBranches } from "./PruneOptionalConditionBranches";
8
+ const normalizeIdentifier = (value) => value.trim().toLowerCase();
9
+ const normalizeColumnReferenceKey = (reference) => {
10
+ return `${normalizeIdentifier(reference.getNamespace())}.${normalizeIdentifier(reference.column.name)}`;
11
+ };
12
+ const isExplicitEqualityScaffoldValue = (value) => {
13
+ var _a;
14
+ if (value === null || value === undefined) {
15
+ return true;
16
+ }
17
+ if (Array.isArray(value)) {
18
+ return false;
19
+ }
20
+ if (typeof value !== "object") {
21
+ return true;
22
+ }
23
+ const entries = Object.entries(value).filter(([, entry]) => entry !== undefined);
24
+ return entries.length === 1 && ((_a = entries[0]) === null || _a === void 0 ? void 0 : _a[0]) === "=";
25
+ };
26
+ const parseQualifiedFilterName = (filterName) => {
27
+ const segments = filterName.split(".");
28
+ if (segments.length !== 2) {
29
+ return null;
30
+ }
31
+ const [table, column] = segments.map(segment => segment.trim());
32
+ if (!table || !column) {
33
+ return null;
34
+ }
35
+ return { table, column };
36
+ };
37
+ const makeParameterName = (filterName) => {
38
+ return filterName
39
+ .trim()
40
+ .replace(/\./g, "_")
41
+ .replace(/[^a-zA-Z0-9_]/g, "_");
42
+ };
43
+ const buildOptionalEqualityBranch = (column, parameterName) => {
44
+ const parameter = new ParameterExpression(parameterName);
45
+ const guard = new BinaryExpression(new ParameterExpression(parameterName), "is", new LiteralValue(null));
46
+ const equality = new BinaryExpression(new ColumnReference(column.getNamespace() || null, column.column.name), "=", parameter);
47
+ return new ParenExpression(new BinaryExpression(guard, "or", equality));
48
+ };
49
+ const rebuildWhereWithoutTerm = (query, termToRemove) => {
50
+ if (!query.whereClause) {
51
+ return;
52
+ }
53
+ const collectTopLevelAndTerms = (expression) => {
54
+ if (expression instanceof BinaryExpression &&
55
+ expression.operator.value.trim().toLowerCase() === "and") {
56
+ return [
57
+ ...collectTopLevelAndTerms(expression.left),
58
+ ...collectTopLevelAndTerms(expression.right)
59
+ ];
60
+ }
61
+ return [expression];
62
+ };
63
+ const terms = collectTopLevelAndTerms(query.whereClause.condition).filter(term => term !== termToRemove);
64
+ if (terms.length === 0) {
65
+ query.whereClause = null;
66
+ return;
67
+ }
68
+ let rebuilt = terms[0];
69
+ for (let index = 1; index < terms.length; index += 1) {
70
+ rebuilt = new BinaryExpression(rebuilt, "and", terms[index]);
71
+ }
72
+ query.whereClause = new WhereClause(rebuilt);
73
+ };
74
+ /**
75
+ * Builds and refreshes truthful SSSQL optional filter branches.
76
+ * Runtime callers should use pruning, not dynamic predicate injection.
77
+ */
78
+ export class SSSQLFilterBuilder {
79
+ constructor(tableColumnResolver) {
80
+ this.tableColumnResolver = tableColumnResolver;
81
+ this.finder = new UpstreamSelectQueryFinder(this.tableColumnResolver);
82
+ }
83
+ scaffold(query, filters) {
84
+ const parsed = this.parseQuery(query);
85
+ for (const [filterName, filterValue] of Object.entries(filters)) {
86
+ if (!isExplicitEqualityScaffoldValue(filterValue)) {
87
+ throw new Error(`SSSQL scaffold only supports equality filters in v1. Use refresh for pre-authored branches: '${filterName}'.`);
88
+ }
89
+ const target = this.resolveTarget(parsed, filterName);
90
+ target.query.appendWhere(buildOptionalEqualityBranch(target.column, target.parameterName));
91
+ }
92
+ return parsed;
93
+ }
94
+ refresh(query, filters) {
95
+ const parsed = this.parseQuery(query);
96
+ for (const [filterName, filterValue] of Object.entries(filters)) {
97
+ const target = this.resolveTarget(parsed, filterName);
98
+ const matches = collectSupportedOptionalConditionBranches(parsed)
99
+ .filter(branch => branch.parameterName === target.parameterName);
100
+ if (matches.length === 0) {
101
+ if (!isExplicitEqualityScaffoldValue(filterValue)) {
102
+ throw new Error(`No existing SSSQL branch was found for '${filterName}', and v1 scaffold only supports equality filters.`);
103
+ }
104
+ target.query.appendWhere(buildOptionalEqualityBranch(target.column, target.parameterName));
105
+ continue;
106
+ }
107
+ if (matches.length > 1) {
108
+ throw new Error(`Multiple SSSQL branches matched parameter ':${target.parameterName}'. Refresh is ambiguous.`);
109
+ }
110
+ const [match] = matches;
111
+ if (!match) {
112
+ continue;
113
+ }
114
+ if (match.query === target.query) {
115
+ continue;
116
+ }
117
+ this.rebaseMovedBranch(match.expression, match.query, target.column);
118
+ rebuildWhereWithoutTerm(match.query, match.expression);
119
+ target.query.appendWhere(match.expression);
120
+ }
121
+ return parsed;
122
+ }
123
+ parseQuery(query) {
124
+ return typeof query === "string" ? SelectQueryParser.parse(query) : query;
125
+ }
126
+ resolveTarget(root, filterName) {
127
+ var _a;
128
+ const qualified = parseQualifiedFilterName(filterName);
129
+ const lookupColumn = (_a = qualified === null || qualified === void 0 ? void 0 : qualified.column) !== null && _a !== void 0 ? _a : filterName.trim();
130
+ const candidateQueries = [...new Set(this.finder.find(root, lookupColumn))];
131
+ const matches = candidateQueries
132
+ .map(query => this.resolveTargetInQuery(query, filterName, qualified))
133
+ .filter((target) => target !== null);
134
+ if (matches.length === 0) {
135
+ throw new Error(`Could not resolve SSSQL filter target '${filterName}' in the current query graph.`);
136
+ }
137
+ if (matches.length > 1) {
138
+ throw new Error(`SSSQL filter target '${filterName}' is ambiguous across multiple query scopes.`);
139
+ }
140
+ return matches[0];
141
+ }
142
+ resolveTargetInQuery(query, filterName, qualified) {
143
+ if (qualified) {
144
+ return this.resolveQualifiedTarget(query, qualified);
145
+ }
146
+ return this.resolveUnqualifiedTarget(query, filterName);
147
+ }
148
+ resolveQualifiedTarget(query, filterName) {
149
+ const alias = this.findAliasForTable(query, filterName.table);
150
+ if (!alias) {
151
+ return null;
152
+ }
153
+ const collector = new SelectableColumnCollector(this.tableColumnResolver, false, DuplicateDetectionMode.FullName, { upstream: true });
154
+ const matches = collector.collect(query)
155
+ .filter((entry) => entry.value instanceof ColumnReference)
156
+ .filter(entry => normalizeColumnReferenceKey(entry.value) === `${normalizeIdentifier(alias)}.${normalizeIdentifier(filterName.column)}`);
157
+ if (matches.length === 0) {
158
+ return null;
159
+ }
160
+ if (matches.length > 1) {
161
+ throw new Error(`SSSQL scaffold target '${filterName.table}.${filterName.column}' resolved to multiple columns.`);
162
+ }
163
+ return {
164
+ query,
165
+ column: matches[0].value,
166
+ parameterName: makeParameterName(`${filterName.table}.${filterName.column}`)
167
+ };
168
+ }
169
+ resolveUnqualifiedTarget(query, filterName) {
170
+ const collector = new SelectableColumnCollector(this.tableColumnResolver, false, DuplicateDetectionMode.FullName, { upstream: true });
171
+ const matches = collector.collect(query)
172
+ .filter((entry) => entry.value instanceof ColumnReference)
173
+ .filter(entry => normalizeIdentifier(entry.name) === normalizeIdentifier(filterName));
174
+ if (matches.length === 0) {
175
+ return null;
176
+ }
177
+ if (matches.length > 1) {
178
+ throw new Error(`SSSQL scaffold target '${filterName}' is ambiguous. Use a qualified table.column reference.`);
179
+ }
180
+ return {
181
+ query,
182
+ column: matches[0].value,
183
+ parameterName: makeParameterName(filterName)
184
+ };
185
+ }
186
+ findAliasForTable(query, tableName) {
187
+ var _a, _b;
188
+ const normalizedTable = normalizeIdentifier(tableName);
189
+ const sources = (_b = (_a = query.fromClause) === null || _a === void 0 ? void 0 : _a.getSources()) !== null && _b !== void 0 ? _b : [];
190
+ const matchingAliases = sources
191
+ .map(source => this.resolveAliasForSource(source, normalizedTable))
192
+ .filter((alias) => alias !== null);
193
+ if (matchingAliases.length === 0) {
194
+ return null;
195
+ }
196
+ if (matchingAliases.length > 1) {
197
+ throw new Error(`SSSQL scaffold target table '${tableName}' is ambiguous in the selected query scope.`);
198
+ }
199
+ return matchingAliases[0];
200
+ }
201
+ resolveAliasForSource(source, normalizedTable) {
202
+ var _a;
203
+ if (!(source.datasource instanceof TableSource)) {
204
+ return null;
205
+ }
206
+ const sourceName = normalizeIdentifier(source.datasource.getSourceName());
207
+ const shortName = normalizeIdentifier(source.datasource.table.name);
208
+ if (sourceName !== normalizedTable && shortName !== normalizedTable) {
209
+ return null;
210
+ }
211
+ return (_a = source.getAliasName()) !== null && _a !== void 0 ? _a : source.datasource.table.name;
212
+ }
213
+ rebaseMovedBranch(expression, sourceQuery, targetColumn) {
214
+ var _a, _b, _c;
215
+ const targetNamespace = targetColumn.qualifiedName.namespaces
216
+ ? targetColumn.qualifiedName.namespaces.map(namespace => namespace.name)
217
+ : null;
218
+ const targetColumnName = normalizeIdentifier(targetColumn.column.name);
219
+ const sourceAliases = new Set(new ColumnReferenceCollector()
220
+ .collect(expression)
221
+ .filter(reference => normalizeIdentifier(reference.column.name) === targetColumnName)
222
+ .map(reference => normalizeIdentifier(reference.getNamespace()))
223
+ .filter(namespace => namespace.length > 0));
224
+ if (sourceAliases.size === 0) {
225
+ return;
226
+ }
227
+ if (sourceAliases.size > 1) {
228
+ const aliases = [...sourceAliases].join(", ");
229
+ throw new Error(`SSSQL refresh cannot safely rebase '${targetColumn.column.name}' across multiple aliases (${aliases}).`);
230
+ }
231
+ const [sourceAlias] = [...sourceAliases];
232
+ const availableAliases = new Set(((_b = (_a = sourceQuery.fromClause) === null || _a === void 0 ? void 0 : _a.getSources()) !== null && _b !== void 0 ? _b : [])
233
+ .map(source => source.getAliasName())
234
+ .filter((alias) => typeof alias === "string")
235
+ .map(alias => normalizeIdentifier(alias)));
236
+ if (!availableAliases.has(sourceAlias)) {
237
+ return;
238
+ }
239
+ for (const reference of new ColumnReferenceCollector().collect(expression)) {
240
+ if (normalizeIdentifier(reference.getNamespace()) !== sourceAlias) {
241
+ continue;
242
+ }
243
+ reference.qualifiedName.namespaces = (_c = targetNamespace === null || targetNamespace === void 0 ? void 0 : targetNamespace.map(namespace => new IdentifierString(namespace))) !== null && _c !== void 0 ? _c : null;
244
+ }
245
+ }
246
+ }
247
+ export const scaffoldSssqlQuery = (sqlContent, filters) => ({
248
+ query: new SSSQLFilterBuilder().scaffold(sqlContent, filters)
249
+ });
250
+ export const refreshSssqlQuery = (sqlContent, filters) => ({
251
+ query: new SSSQLFilterBuilder().refresh(sqlContent, filters)
252
+ });
253
+ //# sourceMappingURL=SSSQLFilterBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SSSQLFilterBuilder.js","sourceRoot":"","sources":["../../../src/transformers/SSSQLFilterBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { CreateTableQuery } from '../models/CreateTableQuery';
2
+ import { QualifiedName } from '../models/ValueComponent';
3
+ export type RelationConstraintKind = 'column-reference' | 'table-foreign-key';
4
+ export type RelationEvidenceKind = RelationConstraintKind | 'primary-key' | 'unique-key';
5
+ export type RelationConfidence = 'confirmed' | 'inferred' | 'unknown';
6
+ export interface RelationGraphEdge {
7
+ childTable: string;
8
+ parentTable: string;
9
+ childColumns: string[];
10
+ parentColumns: string[];
11
+ constraintKind: RelationConstraintKind;
12
+ constraintName: string | null;
13
+ /**
14
+ * Evidence behind the relation edge. v1 uses FK evidence, but callers can
15
+ * keep the same edge shape when PK / UNIQUE inference is added later.
16
+ */
17
+ evidenceKind: RelationEvidenceKind;
18
+ /**
19
+ * Indicates whether the relation is directly confirmed or inferred from
20
+ * broader schema evidence.
21
+ */
22
+ confidence: RelationConfidence;
23
+ isSelfReference: boolean;
24
+ }
25
+ export interface RelationGraph {
26
+ relations: RelationGraphEdge[];
27
+ byChildTable: Map<string, RelationGraphEdge[]>;
28
+ byParentTable: Map<string, RelationGraphEdge[]>;
29
+ tableNames: Set<string>;
30
+ }
31
+ /**
32
+ * Build a direction-aware relation graph from parsed CREATE TABLE statements.
33
+ */
34
+ export declare function buildRelationGraphFromCreateTableQueries(queries: CreateTableQuery[]): RelationGraph;
35
+ /**
36
+ * Return the known parent relations for a child table.
37
+ */
38
+ export declare function getOutgoingRelations(graph: RelationGraph, childTable: string): RelationGraphEdge[];
39
+ /**
40
+ * Return the known child relations for a parent table.
41
+ */
42
+ export declare function getIncomingRelations(graph: RelationGraph, parentTable: string): RelationGraphEdge[];
43
+ export declare function getQualifiedNameText(value: QualifiedName): string;
@@ -0,0 +1,117 @@
1
+ import { normalizeTableName } from './TableNameUtils';
2
+ /**
3
+ * Build a direction-aware relation graph from parsed CREATE TABLE statements.
4
+ */
5
+ export function buildRelationGraphFromCreateTableQueries(queries) {
6
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
7
+ const relations = [];
8
+ const byChildTable = new Map();
9
+ const byParentTable = new Map();
10
+ const tableNames = new Set();
11
+ const seen = new Set();
12
+ for (const query of queries) {
13
+ const childTable = normalizeRelationTableName(buildQualifiedName(query.namespaces, query.tableName.name));
14
+ tableNames.add(childTable);
15
+ for (const column of query.columns) {
16
+ for (const constraint of column.constraints) {
17
+ if (constraint.kind !== 'references' || !constraint.reference) {
18
+ continue;
19
+ }
20
+ const edge = createEdge({
21
+ childTable,
22
+ parentTable: normalizeRelationTableName(constraint.reference.targetTable.toString()),
23
+ childColumns: [column.name.name],
24
+ parentColumns: (_b = (_a = constraint.reference.columns) === null || _a === void 0 ? void 0 : _a.map((item) => item.name)) !== null && _b !== void 0 ? _b : [],
25
+ constraintKind: 'column-reference',
26
+ constraintName: (_d = (_c = constraint.constraintName) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : null,
27
+ evidenceKind: 'column-reference',
28
+ confidence: 'confirmed'
29
+ });
30
+ addEdge(relations, byChildTable, byParentTable, seen, tableNames, edge);
31
+ }
32
+ }
33
+ for (const constraint of query.tableConstraints) {
34
+ if (constraint.kind !== 'foreign-key' || !constraint.reference) {
35
+ continue;
36
+ }
37
+ const edge = createEdge({
38
+ childTable,
39
+ parentTable: normalizeRelationTableName(constraint.reference.targetTable.toString()),
40
+ childColumns: (_f = (_e = constraint.columns) === null || _e === void 0 ? void 0 : _e.map((item) => item.name)) !== null && _f !== void 0 ? _f : [],
41
+ parentColumns: (_h = (_g = constraint.reference.columns) === null || _g === void 0 ? void 0 : _g.map((item) => item.name)) !== null && _h !== void 0 ? _h : [],
42
+ constraintKind: 'table-foreign-key',
43
+ constraintName: (_k = (_j = constraint.constraintName) === null || _j === void 0 ? void 0 : _j.name) !== null && _k !== void 0 ? _k : null,
44
+ evidenceKind: 'table-foreign-key',
45
+ confidence: 'confirmed'
46
+ });
47
+ addEdge(relations, byChildTable, byParentTable, seen, tableNames, edge);
48
+ }
49
+ }
50
+ return {
51
+ relations,
52
+ byChildTable,
53
+ byParentTable,
54
+ tableNames
55
+ };
56
+ }
57
+ /**
58
+ * Return the known parent relations for a child table.
59
+ */
60
+ export function getOutgoingRelations(graph, childTable) {
61
+ var _a;
62
+ return [...((_a = graph.byChildTable.get(normalizeRelationTableName(childTable))) !== null && _a !== void 0 ? _a : [])];
63
+ }
64
+ /**
65
+ * Return the known child relations for a parent table.
66
+ */
67
+ export function getIncomingRelations(graph, parentTable) {
68
+ var _a;
69
+ return [...((_a = graph.byParentTable.get(normalizeRelationTableName(parentTable))) !== null && _a !== void 0 ? _a : [])];
70
+ }
71
+ function addEdge(relations, byChildTable, byParentTable, seen, tableNames, edge) {
72
+ tableNames.add(edge.childTable);
73
+ tableNames.add(edge.parentTable);
74
+ const signature = [
75
+ edge.childTable,
76
+ edge.parentTable,
77
+ edge.childColumns.join(','),
78
+ edge.parentColumns.join(','),
79
+ edge.constraintKind
80
+ ].join('|');
81
+ if (seen.has(signature)) {
82
+ return;
83
+ }
84
+ seen.add(signature);
85
+ relations.push(edge);
86
+ pushIndexedEdge(byChildTable, edge.childTable, edge);
87
+ pushIndexedEdge(byParentTable, edge.parentTable, edge);
88
+ }
89
+ function pushIndexedEdge(index, key, edge) {
90
+ var _a;
91
+ const bucket = (_a = index.get(key)) !== null && _a !== void 0 ? _a : [];
92
+ bucket.push(edge);
93
+ index.set(key, bucket);
94
+ }
95
+ function createEdge(params) {
96
+ return {
97
+ childTable: params.childTable,
98
+ parentTable: params.parentTable,
99
+ childColumns: [...params.childColumns],
100
+ parentColumns: [...params.parentColumns],
101
+ constraintKind: params.constraintKind,
102
+ constraintName: params.constraintName,
103
+ evidenceKind: params.evidenceKind,
104
+ confidence: params.confidence,
105
+ isSelfReference: params.childTable === params.parentTable
106
+ };
107
+ }
108
+ function buildQualifiedName(namespaces, name) {
109
+ return [...(namespaces !== null && namespaces !== void 0 ? namespaces : []), name].join('.');
110
+ }
111
+ function normalizeRelationTableName(tableName) {
112
+ return normalizeTableName(tableName);
113
+ }
114
+ export function getQualifiedNameText(value) {
115
+ return normalizeRelationTableName(value.toString());
116
+ }
117
+ //# sourceMappingURL=RelationGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationGraph.js","sourceRoot":"","sources":["../../../src/utils/RelationGraph.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -86,6 +86,7 @@ __exportStar(require("./transformers/FilterableItemCollector"), exports);
86
86
  var FixtureCteBuilder_1 = require("./transformers/FixtureCteBuilder");
87
87
  Object.defineProperty(exports, "FixtureCteBuilder", { enumerable: true, get: function () { return FixtureCteBuilder_1.FixtureCteBuilder; } });
88
88
  __exportStar(require("./transformers/DynamicQueryBuilder"), exports);
89
+ __exportStar(require("./transformers/SSSQLFilterBuilder"), exports);
89
90
  __exportStar(require("./transformers/PruneOptionalConditionBranches"), exports);
90
91
  var OptimizeUnusedLeftJoins_1 = require("./transformers/OptimizeUnusedLeftJoins");
91
92
  Object.defineProperty(exports, "optimizeUnusedLeftJoins", { enumerable: true, get: function () { return OptimizeUnusedLeftJoins_1.optimizeUnusedLeftJoins; } });
@@ -121,9 +122,12 @@ __exportStar(require("./transformers/SqlParamInjector"), exports);
121
122
  __exportStar(require("./transformers/SqlSortInjector"), exports);
122
123
  __exportStar(require("./transformers/SqlPaginationInjector"), exports);
123
124
  __exportStar(require("./transformers/DynamicQueryBuilder"), exports);
125
+ __exportStar(require("./utils/ParameterHelper"), exports);
126
+ __exportStar(require("./transformers/SqlParameterBinder"), exports);
124
127
  __exportStar(require("./utils/SqlSchemaValidator"), exports);
125
128
  __exportStar(require("./utils/JsonSchemaValidator"), exports);
126
129
  __exportStar(require("./utils/SchemaManager"), exports);
130
+ __exportStar(require("./utils/RelationGraph"), exports);
127
131
  __exportStar(require("./utils/CommentEditor"), exports);
128
132
  __exportStar(require("./utils/LexemeCursor"), exports);
129
133
  __exportStar(require("./utils/CTERegionDetector"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}