rawsql-ts 0.10.9-beta → 0.11.1-beta
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/README.md +175 -47
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +16 -14
- package/dist/esm/index.min.js.map +4 -4
- package/dist/esm/src/index.js +6 -0
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/tokenReaders/OperatorTokenReader.js +4 -0
- package/dist/esm/src/tokenReaders/OperatorTokenReader.js.map +1 -1
- package/dist/esm/src/transformers/CTEDependencyTracer.js +249 -0
- package/dist/esm/src/transformers/CTEDependencyTracer.js.map +1 -0
- package/dist/esm/src/transformers/DynamicQueryBuilder.js +155 -0
- package/dist/esm/src/transformers/DynamicQueryBuilder.js.map +1 -0
- package/dist/esm/src/transformers/JsonMappingUnifier.js +217 -0
- package/dist/esm/src/transformers/JsonMappingUnifier.js.map +1 -0
- package/dist/esm/src/transformers/ModelDrivenJsonMapping.js +103 -0
- package/dist/esm/src/transformers/ModelDrivenJsonMapping.js.map +1 -0
- package/dist/esm/src/transformers/PostgresArrayEntityCteBuilder.js +204 -16
- package/dist/esm/src/transformers/PostgresArrayEntityCteBuilder.js.map +1 -1
- package/dist/esm/src/transformers/PostgresJsonQueryBuilder.js +26 -21
- package/dist/esm/src/transformers/PostgresJsonQueryBuilder.js.map +1 -1
- package/dist/esm/src/transformers/PostgresObjectEntityCteBuilder.js +8 -5
- package/dist/esm/src/transformers/PostgresObjectEntityCteBuilder.js.map +1 -1
- package/dist/esm/src/transformers/SelectableColumnCollector.js +17 -5
- package/dist/esm/src/transformers/SelectableColumnCollector.js.map +1 -1
- package/dist/esm/src/transformers/SqlFormatter.js +1 -2
- package/dist/esm/src/transformers/SqlFormatter.js.map +1 -1
- package/dist/esm/src/transformers/TypeTransformationPostProcessor.js +342 -0
- package/dist/esm/src/transformers/TypeTransformationPostProcessor.js.map +1 -0
- package/dist/esm/src/transformers/UnifiedJsonMapping.js +57 -0
- package/dist/esm/src/transformers/UnifiedJsonMapping.js.map +1 -0
- package/dist/esm/src/transformers/UpstreamSelectQueryFinder.js +8 -1
- package/dist/esm/src/transformers/UpstreamSelectQueryFinder.js.map +1 -1
- package/dist/esm/src/utils/JsonSchemaValidator.js +211 -0
- package/dist/esm/src/utils/JsonSchemaValidator.js.map +1 -0
- package/dist/esm/src/utils/OperatorPrecedence.js +3 -1
- package/dist/esm/src/utils/OperatorPrecedence.js.map +1 -1
- package/dist/esm/src/utils/SchemaManager.js +0 -1
- package/dist/esm/src/utils/SchemaManager.js.map +1 -1
- package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
- package/dist/esm/types/src/index.d.ts +6 -0
- package/dist/esm/types/src/transformers/CTEDependencyTracer.d.ts +58 -0
- package/dist/esm/types/src/transformers/DynamicQueryBuilder.d.ts +108 -0
- package/dist/esm/types/src/transformers/JsonMappingUnifier.d.ts +95 -0
- package/dist/esm/types/src/transformers/ModelDrivenJsonMapping.d.ts +62 -0
- package/dist/esm/types/src/transformers/PostgresArrayEntityCteBuilder.d.ts +80 -1
- package/dist/esm/types/src/transformers/PostgresJsonQueryBuilder.d.ts +3 -2
- package/dist/esm/types/src/transformers/SelectableColumnCollector.d.ts +14 -3
- package/dist/esm/types/src/transformers/SqlFormatter.d.ts +2 -3
- package/dist/esm/types/src/transformers/TypeTransformationPostProcessor.d.ts +108 -0
- package/dist/esm/types/src/transformers/UnifiedJsonMapping.d.ts +53 -0
- package/dist/esm/types/src/transformers/UpstreamSelectQueryFinder.d.ts +5 -1
- package/dist/esm/types/src/utils/JsonSchemaValidator.d.ts +81 -0
- package/dist/index.min.js +16 -14
- package/dist/index.min.js.map +4 -4
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.js +14 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/tokenReaders/OperatorTokenReader.js +4 -0
- package/dist/src/tokenReaders/OperatorTokenReader.js.map +1 -1
- package/dist/src/transformers/CTEDependencyTracer.d.ts +58 -0
- package/dist/src/transformers/CTEDependencyTracer.js +253 -0
- package/dist/src/transformers/CTEDependencyTracer.js.map +1 -0
- package/dist/src/transformers/DynamicQueryBuilder.d.ts +108 -0
- package/dist/src/transformers/DynamicQueryBuilder.js +159 -0
- package/dist/src/transformers/DynamicQueryBuilder.js.map +1 -0
- package/dist/src/transformers/JsonMappingUnifier.d.ts +95 -0
- package/dist/src/transformers/JsonMappingUnifier.js +226 -0
- package/dist/src/transformers/JsonMappingUnifier.js.map +1 -0
- package/dist/src/transformers/ModelDrivenJsonMapping.d.ts +62 -0
- package/dist/src/transformers/ModelDrivenJsonMapping.js +110 -0
- package/dist/src/transformers/ModelDrivenJsonMapping.js.map +1 -0
- package/dist/src/transformers/PostgresArrayEntityCteBuilder.d.ts +80 -1
- package/dist/src/transformers/PostgresArrayEntityCteBuilder.js +204 -16
- package/dist/src/transformers/PostgresArrayEntityCteBuilder.js.map +1 -1
- package/dist/src/transformers/PostgresJsonQueryBuilder.d.ts +3 -2
- package/dist/src/transformers/PostgresJsonQueryBuilder.js +26 -21
- package/dist/src/transformers/PostgresJsonQueryBuilder.js.map +1 -1
- package/dist/src/transformers/PostgresObjectEntityCteBuilder.js +8 -5
- package/dist/src/transformers/PostgresObjectEntityCteBuilder.js.map +1 -1
- package/dist/src/transformers/SelectableColumnCollector.d.ts +14 -3
- package/dist/src/transformers/SelectableColumnCollector.js +17 -5
- package/dist/src/transformers/SelectableColumnCollector.js.map +1 -1
- package/dist/src/transformers/SqlFormatter.d.ts +2 -3
- package/dist/src/transformers/SqlFormatter.js +1 -2
- package/dist/src/transformers/SqlFormatter.js.map +1 -1
- package/dist/src/transformers/TypeTransformationPostProcessor.d.ts +108 -0
- package/dist/src/transformers/TypeTransformationPostProcessor.js +351 -0
- package/dist/src/transformers/TypeTransformationPostProcessor.js.map +1 -0
- package/dist/src/transformers/UnifiedJsonMapping.d.ts +53 -0
- package/dist/src/transformers/UnifiedJsonMapping.js +60 -0
- package/dist/src/transformers/UnifiedJsonMapping.js.map +1 -0
- package/dist/src/transformers/UpstreamSelectQueryFinder.d.ts +5 -1
- package/dist/src/transformers/UpstreamSelectQueryFinder.js +8 -1
- package/dist/src/transformers/UpstreamSelectQueryFinder.js.map +1 -1
- package/dist/src/utils/JsonSchemaValidator.d.ts +81 -0
- package/dist/src/utils/JsonSchemaValidator.js +215 -0
- package/dist/src/utils/JsonSchemaValidator.js.map +1 -0
- package/dist/src/utils/OperatorPrecedence.js +3 -1
- package/dist/src/utils/OperatorPrecedence.js.map +1 -1
- package/dist/src/utils/SchemaManager.js +0 -1
- package/dist/src/utils/SchemaManager.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -5
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Post-processor for transforming database values to appropriate TypeScript types
|
|
3
|
+
* after JSON serialization from PostgreSQL
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Applies type transformations to JSON results from PostgreSQL
|
|
7
|
+
*/
|
|
8
|
+
export class TypeTransformationPostProcessor {
|
|
9
|
+
constructor(config = {}) {
|
|
10
|
+
this.config = Object.assign({ enableValueBasedDetection: true, strictDateDetection: false }, config);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Transform a single result object
|
|
14
|
+
* @param result The result object from PostgreSQL JSON query
|
|
15
|
+
* @returns Transformed result with proper TypeScript types
|
|
16
|
+
*/
|
|
17
|
+
transformResult(result) {
|
|
18
|
+
if (result === null || result === undefined) {
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
if (Array.isArray(result)) {
|
|
22
|
+
return result.map(item => this.transformSingleObject(item));
|
|
23
|
+
}
|
|
24
|
+
return this.transformSingleObject(result);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Transform a single object recursively
|
|
28
|
+
*/
|
|
29
|
+
transformSingleObject(obj) {
|
|
30
|
+
var _a;
|
|
31
|
+
if (obj === null || obj === undefined || typeof obj !== 'object') {
|
|
32
|
+
return obj;
|
|
33
|
+
}
|
|
34
|
+
if (Array.isArray(obj)) {
|
|
35
|
+
return obj.map(item => this.transformSingleObject(item));
|
|
36
|
+
}
|
|
37
|
+
const transformed = {};
|
|
38
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
39
|
+
if (value === null || value === undefined) {
|
|
40
|
+
transformed[key] = value;
|
|
41
|
+
continue;
|
|
42
|
+
} // Check for column-specific transformation first (takes precedence)
|
|
43
|
+
const columnTransform = (_a = this.config.columnTransformations) === null || _a === void 0 ? void 0 : _a[key];
|
|
44
|
+
if (columnTransform) {
|
|
45
|
+
transformed[key] = this.applyTransformation(value, columnTransform);
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
// Only apply value-based detection if enabled and no column mapping exists
|
|
49
|
+
if (this.config.enableValueBasedDetection) {
|
|
50
|
+
const detectedTransform = this.detectValueBasedTransformation(value);
|
|
51
|
+
if (detectedTransform) {
|
|
52
|
+
transformed[key] = this.applyTransformation(value, detectedTransform);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Apply global transformations based on SQL type (if available)
|
|
57
|
+
const globalTransform = this.config.globalTransformations &&
|
|
58
|
+
this.getGlobalTransformationForValue(value);
|
|
59
|
+
if (globalTransform) {
|
|
60
|
+
transformed[key] = this.applyTransformation(value, globalTransform);
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
// Recursively transform nested objects
|
|
64
|
+
if (typeof value === 'object' && !Array.isArray(value)) {
|
|
65
|
+
transformed[key] = this.transformSingleObject(value);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (Array.isArray(value)) {
|
|
69
|
+
transformed[key] = value.map(item => typeof item === 'object' ? this.transformSingleObject(item) : item);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
// No transformation needed
|
|
73
|
+
transformed[key] = value;
|
|
74
|
+
}
|
|
75
|
+
return transformed;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Detect value type and create appropriate transformation based on value characteristics
|
|
79
|
+
* This is the core value-based detection logic
|
|
80
|
+
*/
|
|
81
|
+
detectValueBasedTransformation(value) {
|
|
82
|
+
// Date string detection
|
|
83
|
+
if (typeof value === 'string' && this.isDateString(value)) {
|
|
84
|
+
return {
|
|
85
|
+
sourceType: 'TIMESTAMP',
|
|
86
|
+
targetType: 'Date',
|
|
87
|
+
handleNull: true,
|
|
88
|
+
validator: (v) => typeof v === 'string' && !isNaN(Date.parse(v))
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// BigInt detection (number > MAX_SAFE_INTEGER)
|
|
92
|
+
if (typeof value === 'number' && !Number.isSafeInteger(value)) {
|
|
93
|
+
return {
|
|
94
|
+
sourceType: 'BIGINT',
|
|
95
|
+
targetType: 'bigint',
|
|
96
|
+
handleNull: true,
|
|
97
|
+
validator: (v) => {
|
|
98
|
+
try {
|
|
99
|
+
BigInt(v);
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
catch (_a) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
// Large string number detection (potential BIGINT)
|
|
109
|
+
if (typeof value === 'string' && /^\d{16,}$/.test(value)) {
|
|
110
|
+
return {
|
|
111
|
+
sourceType: 'BIGINT',
|
|
112
|
+
targetType: 'bigint',
|
|
113
|
+
handleNull: true,
|
|
114
|
+
validator: (v) => {
|
|
115
|
+
try {
|
|
116
|
+
BigInt(v);
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
catch (_a) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get global transformation for a specific value (if any match)
|
|
129
|
+
* This is separate from value-based detection and relies on configured global rules
|
|
130
|
+
*/
|
|
131
|
+
getGlobalTransformationForValue(value) {
|
|
132
|
+
if (!this.config.globalTransformations) {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
// This could be extended to match values against configured global rules
|
|
136
|
+
// For now, it's a placeholder for future SQL-type-based global transformations
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* @deprecated Use detectValueBasedTransformation instead
|
|
141
|
+
* Detect value type and get appropriate global transformation
|
|
142
|
+
*/
|
|
143
|
+
detectAndGetGlobalTransformation(value) {
|
|
144
|
+
return this.detectValueBasedTransformation(value);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Check if string is a valid date string
|
|
148
|
+
* Supports both strict (ISO 8601 with T separator) and loose detection
|
|
149
|
+
*/
|
|
150
|
+
isDateString(value) {
|
|
151
|
+
if (this.config.strictDateDetection) {
|
|
152
|
+
// Strict: Only ISO 8601 with T separator (safer for user input)
|
|
153
|
+
const strictIsoPattern = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?(?:Z|[+-]\d{2}:\d{2})?$/;
|
|
154
|
+
if (!strictIsoPattern.test(value)) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
// Loose: ISO 8601 date pattern (includes date-only strings)
|
|
160
|
+
const isoDatePattern = /^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d{3})?(?:Z|[+-]\d{2}:\d{2})?)?$/;
|
|
161
|
+
if (!isoDatePattern.test(value)) {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
const date = new Date(value);
|
|
166
|
+
return !isNaN(date.getTime());
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Apply a specific transformation to a value
|
|
170
|
+
*/
|
|
171
|
+
applyTransformation(value, transformation) {
|
|
172
|
+
var _a;
|
|
173
|
+
// Handle null values
|
|
174
|
+
if (value === null || value === undefined) {
|
|
175
|
+
return transformation.handleNull !== false ? value : null;
|
|
176
|
+
}
|
|
177
|
+
// Validate value if validator is provided
|
|
178
|
+
if (transformation.validator && !transformation.validator(value)) {
|
|
179
|
+
console.warn(`TypeTransformationPostProcessor: Value validation failed for ${value}`);
|
|
180
|
+
return value;
|
|
181
|
+
}
|
|
182
|
+
try {
|
|
183
|
+
switch (transformation.targetType) {
|
|
184
|
+
case 'Date':
|
|
185
|
+
return new Date(value);
|
|
186
|
+
case 'bigint':
|
|
187
|
+
// Handle both string and number inputs for BIGINT
|
|
188
|
+
// For scientific notation numbers, convert to integer first
|
|
189
|
+
if (typeof value === 'number') {
|
|
190
|
+
// Convert scientific notation to integer string
|
|
191
|
+
const integerValue = Math.trunc(value);
|
|
192
|
+
return BigInt(integerValue.toString());
|
|
193
|
+
}
|
|
194
|
+
return BigInt(value);
|
|
195
|
+
case 'string':
|
|
196
|
+
return value.toString();
|
|
197
|
+
case 'number':
|
|
198
|
+
return typeof value === 'string' ? parseFloat(value) : Number(value);
|
|
199
|
+
case 'object':
|
|
200
|
+
return typeof value === 'string' ? JSON.parse(value) : value;
|
|
201
|
+
case 'custom':
|
|
202
|
+
if (transformation.customTransformer &&
|
|
203
|
+
((_a = this.config.customTransformers) === null || _a === void 0 ? void 0 : _a[transformation.customTransformer])) {
|
|
204
|
+
return this.config.customTransformers[transformation.customTransformer](value);
|
|
205
|
+
}
|
|
206
|
+
break;
|
|
207
|
+
default:
|
|
208
|
+
return value;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
console.warn(`TypeTransformationPostProcessor: Transformation failed for ${value}:`, error);
|
|
213
|
+
return value;
|
|
214
|
+
}
|
|
215
|
+
return value;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Create a default configuration for common PostgreSQL types
|
|
219
|
+
* Enables value-based detection with loose date detection by default
|
|
220
|
+
*/
|
|
221
|
+
static createDefaultConfig() {
|
|
222
|
+
return {
|
|
223
|
+
enableValueBasedDetection: true,
|
|
224
|
+
strictDateDetection: false,
|
|
225
|
+
globalTransformations: {
|
|
226
|
+
'DATE': {
|
|
227
|
+
sourceType: 'DATE',
|
|
228
|
+
targetType: 'Date',
|
|
229
|
+
handleNull: true,
|
|
230
|
+
validator: (value) => typeof value === 'string' && !isNaN(Date.parse(value))
|
|
231
|
+
},
|
|
232
|
+
'TIMESTAMP': {
|
|
233
|
+
sourceType: 'TIMESTAMP',
|
|
234
|
+
targetType: 'Date',
|
|
235
|
+
handleNull: true,
|
|
236
|
+
validator: (value) => typeof value === 'string' && !isNaN(Date.parse(value))
|
|
237
|
+
},
|
|
238
|
+
'BIGINT': {
|
|
239
|
+
sourceType: 'BIGINT',
|
|
240
|
+
targetType: 'bigint',
|
|
241
|
+
handleNull: true,
|
|
242
|
+
validator: (value) => {
|
|
243
|
+
try {
|
|
244
|
+
BigInt(value);
|
|
245
|
+
return true;
|
|
246
|
+
}
|
|
247
|
+
catch (_a) {
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Create a safe configuration for handling user input
|
|
257
|
+
* Disables value-based detection and uses strict date detection
|
|
258
|
+
*/
|
|
259
|
+
static createSafeConfig(columnMappings) {
|
|
260
|
+
return {
|
|
261
|
+
enableValueBasedDetection: false,
|
|
262
|
+
strictDateDetection: true,
|
|
263
|
+
columnTransformations: columnMappings || {},
|
|
264
|
+
globalTransformations: {
|
|
265
|
+
'DATE': {
|
|
266
|
+
sourceType: 'DATE',
|
|
267
|
+
targetType: 'Date',
|
|
268
|
+
handleNull: true,
|
|
269
|
+
validator: (value) => typeof value === 'string' && !isNaN(Date.parse(value))
|
|
270
|
+
},
|
|
271
|
+
'TIMESTAMP': {
|
|
272
|
+
sourceType: 'TIMESTAMP',
|
|
273
|
+
targetType: 'Date',
|
|
274
|
+
handleNull: true,
|
|
275
|
+
validator: (value) => typeof value === 'string' && !isNaN(Date.parse(value))
|
|
276
|
+
},
|
|
277
|
+
'BIGINT': {
|
|
278
|
+
sourceType: 'BIGINT',
|
|
279
|
+
targetType: 'bigint',
|
|
280
|
+
handleNull: true,
|
|
281
|
+
validator: (value) => {
|
|
282
|
+
try {
|
|
283
|
+
BigInt(value);
|
|
284
|
+
return true;
|
|
285
|
+
}
|
|
286
|
+
catch (_a) {
|
|
287
|
+
return false;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Convenience function to create and apply transformations
|
|
297
|
+
*/
|
|
298
|
+
export function transformDatabaseResult(result, config) {
|
|
299
|
+
const processor = new TypeTransformationPostProcessor(config || TypeTransformationPostProcessor.createDefaultConfig());
|
|
300
|
+
return processor.transformResult(result);
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Type-safe transformation helpers
|
|
304
|
+
*/
|
|
305
|
+
export const TypeTransformers = {
|
|
306
|
+
/**
|
|
307
|
+
* Transform date string to Date object
|
|
308
|
+
*/
|
|
309
|
+
toDate: (value) => {
|
|
310
|
+
if (value === null || value === undefined)
|
|
311
|
+
return null;
|
|
312
|
+
const date = new Date(value);
|
|
313
|
+
return isNaN(date.getTime()) ? null : date;
|
|
314
|
+
},
|
|
315
|
+
/**
|
|
316
|
+
* Transform numeric string to BigInt
|
|
317
|
+
*/
|
|
318
|
+
toBigInt: (value) => {
|
|
319
|
+
if (value === null || value === undefined)
|
|
320
|
+
return null;
|
|
321
|
+
try {
|
|
322
|
+
return BigInt(value);
|
|
323
|
+
}
|
|
324
|
+
catch (_a) {
|
|
325
|
+
return null;
|
|
326
|
+
}
|
|
327
|
+
},
|
|
328
|
+
/**
|
|
329
|
+
* Transform JSON string to object
|
|
330
|
+
*/
|
|
331
|
+
toObject: (value) => {
|
|
332
|
+
if (value === null || value === undefined)
|
|
333
|
+
return null;
|
|
334
|
+
try {
|
|
335
|
+
return JSON.parse(value);
|
|
336
|
+
}
|
|
337
|
+
catch (_a) {
|
|
338
|
+
return null;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
};
|
|
342
|
+
//# sourceMappingURL=TypeTransformationPostProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypeTransformationPostProcessor.js","sourceRoot":"","sources":["../../../../src/transformers/TypeTransformationPostProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced JSON mapping structure that integrates column mapping and type protection configuration.
|
|
3
|
+
* This unified approach eliminates the need for separate .types.json files.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Convert a unified JSON mapping to separate JsonMapping and TypeProtectionConfig.
|
|
7
|
+
* This enables backward compatibility with existing code while supporting the new unified structure.
|
|
8
|
+
*/
|
|
9
|
+
export function convertUnifiedMapping(unified) {
|
|
10
|
+
const protectedStringFields = [];
|
|
11
|
+
// Helper function to process columns and extract string protection settings
|
|
12
|
+
const processColumns = (columns) => {
|
|
13
|
+
const result = {};
|
|
14
|
+
for (const [key, config] of Object.entries(columns)) {
|
|
15
|
+
if (typeof config === 'string') {
|
|
16
|
+
result[key] = config;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
result[key] = config.column;
|
|
20
|
+
if (config.type === 'string') {
|
|
21
|
+
protectedStringFields.push(config.column);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
};
|
|
27
|
+
// Convert the unified mapping to traditional JsonMapping
|
|
28
|
+
const jsonMapping = {
|
|
29
|
+
rootName: unified.rootName,
|
|
30
|
+
rootEntity: {
|
|
31
|
+
id: unified.rootEntity.id,
|
|
32
|
+
name: unified.rootEntity.name, columns: processColumns(unified.rootEntity.columns)
|
|
33
|
+
},
|
|
34
|
+
nestedEntities: [] // Initialize as empty array
|
|
35
|
+
};
|
|
36
|
+
// Add typeInfo if it exists
|
|
37
|
+
if (unified.typeInfo) {
|
|
38
|
+
// Note: JsonMapping doesn't have typeInfo in core, but we preserve it for backward compatibility
|
|
39
|
+
jsonMapping.typeInfo = unified.typeInfo;
|
|
40
|
+
}
|
|
41
|
+
// Process nested entities if they exist
|
|
42
|
+
if (unified.nestedEntities) {
|
|
43
|
+
jsonMapping.nestedEntities = unified.nestedEntities.map(entity => ({
|
|
44
|
+
id: entity.id,
|
|
45
|
+
name: entity.name,
|
|
46
|
+
parentId: entity.parentId,
|
|
47
|
+
propertyName: entity.propertyName,
|
|
48
|
+
relationshipType: entity.relationshipType,
|
|
49
|
+
columns: processColumns(entity.columns)
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
jsonMapping,
|
|
54
|
+
typeProtection: { protectedStringFields }
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=UnifiedJsonMapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnifiedJsonMapping.js","sourceRoot":"","sources":["../../../../src/transformers/UnifiedJsonMapping.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA+CH;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAA2B;IAI7D,MAAM,qBAAqB,GAAa,EAAE,CAAC;IAE3C,4EAA4E;IAC5E,MAAM,cAAc,GAAG,CAAC,OAA4C,EAA0B,EAAE;QAC5F,MAAM,MAAM,GAA2B,EAAE,CAAC;QAE1C,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC5B,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC3B,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC9C,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;IAEF,yDAAyD;IACzD,MAAM,WAAW,GAAgB;QAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,UAAU,EAAE;YACR,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE;YACzB,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;SACrF;QACD,cAAc,EAAE,EAAE,CAAE,4BAA4B;KACnD,CAAC;IAEF,4BAA4B;IAC5B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,iGAAiG;QAChG,WAAmB,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACrD,CAAC;IAED,wCAAwC;IACxC,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QACzB,WAAW,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/D,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC;SAC1C,CAAC,CAAC,CAAC;IACR,CAAC;IAED,OAAO;QACH,WAAW;QACX,cAAc,EAAE,EAAE,qBAAqB,EAAE;KAC5C,CAAC;AACN,CAAC"}
|
|
@@ -6,7 +6,11 @@ import { CTECollector } from "./CTECollector";
|
|
|
6
6
|
* UpstreamSelectQueryFinder searches upstream queries for the specified columns.
|
|
7
7
|
* If a query (including its upstream CTEs or subqueries) contains all columns,
|
|
8
8
|
* it returns the highest such SelectQuery. Otherwise, it searches downstream.
|
|
9
|
-
*
|
|
9
|
+
*
|
|
10
|
+
* For BinarySelectQuery (UNION/INTERSECT/EXCEPT), this finder processes each branch
|
|
11
|
+
* independently, as SelectableColumnCollector is designed for SimpleSelectQuery only.
|
|
12
|
+
* This approach ensures accurate column detection within individual SELECT branches
|
|
13
|
+
* while maintaining compatibility with compound query structures.
|
|
10
14
|
*/
|
|
11
15
|
export class UpstreamSelectQueryFinder {
|
|
12
16
|
constructor(tableColumnResolver, options) {
|
|
@@ -119,6 +123,9 @@ export class UpstreamSelectQueryFinder {
|
|
|
119
123
|
return [];
|
|
120
124
|
}
|
|
121
125
|
else if (query instanceof BinarySelectQuery) {
|
|
126
|
+
// Process BinarySelectQuery by decomposing into individual branches.
|
|
127
|
+
// SelectableColumnCollector is designed for SimpleSelectQuery only,
|
|
128
|
+
// so we handle UNION/INTERSECT/EXCEPT by processing left and right branches separately.
|
|
122
129
|
const left = this.findUpstream(query.left, columnNames, cteMap);
|
|
123
130
|
const right = this.findUpstream(query.right, columnNames, cteMap);
|
|
124
131
|
return [...left, ...right];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpstreamSelectQueryFinder.js","sourceRoot":"","sources":["../../../../src/transformers/UpstreamSelectQueryFinder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACvG,OAAO,EAAe,cAAc,EAAE,WAAW,EAAc,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C
|
|
1
|
+
{"version":3,"file":"UpstreamSelectQueryFinder.js","sourceRoot":"","sources":["../../../../src/transformers/UpstreamSelectQueryFinder.ts"],"names":[],"mappings":"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"}
|