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,351 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Post-processor for transforming database values to appropriate TypeScript types
|
|
4
|
+
* after JSON serialization from PostgreSQL
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.TypeTransformers = exports.TypeTransformationPostProcessor = void 0;
|
|
8
|
+
exports.transformDatabaseResult = transformDatabaseResult;
|
|
9
|
+
/**
|
|
10
|
+
* Applies type transformations to JSON results from PostgreSQL
|
|
11
|
+
*/
|
|
12
|
+
class TypeTransformationPostProcessor {
|
|
13
|
+
constructor(config = {}) {
|
|
14
|
+
this.config = {
|
|
15
|
+
enableValueBasedDetection: true,
|
|
16
|
+
strictDateDetection: false,
|
|
17
|
+
...config
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Transform a single result object
|
|
22
|
+
* @param result The result object from PostgreSQL JSON query
|
|
23
|
+
* @returns Transformed result with proper TypeScript types
|
|
24
|
+
*/
|
|
25
|
+
transformResult(result) {
|
|
26
|
+
if (result === null || result === undefined) {
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
if (Array.isArray(result)) {
|
|
30
|
+
return result.map(item => this.transformSingleObject(item));
|
|
31
|
+
}
|
|
32
|
+
return this.transformSingleObject(result);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Transform a single object recursively
|
|
36
|
+
*/
|
|
37
|
+
transformSingleObject(obj) {
|
|
38
|
+
var _a;
|
|
39
|
+
if (obj === null || obj === undefined || typeof obj !== 'object') {
|
|
40
|
+
return obj;
|
|
41
|
+
}
|
|
42
|
+
if (Array.isArray(obj)) {
|
|
43
|
+
return obj.map(item => this.transformSingleObject(item));
|
|
44
|
+
}
|
|
45
|
+
const transformed = {};
|
|
46
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
47
|
+
if (value === null || value === undefined) {
|
|
48
|
+
transformed[key] = value;
|
|
49
|
+
continue;
|
|
50
|
+
} // Check for column-specific transformation first (takes precedence)
|
|
51
|
+
const columnTransform = (_a = this.config.columnTransformations) === null || _a === void 0 ? void 0 : _a[key];
|
|
52
|
+
if (columnTransform) {
|
|
53
|
+
transformed[key] = this.applyTransformation(value, columnTransform);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
// Only apply value-based detection if enabled and no column mapping exists
|
|
57
|
+
if (this.config.enableValueBasedDetection) {
|
|
58
|
+
const detectedTransform = this.detectValueBasedTransformation(value);
|
|
59
|
+
if (detectedTransform) {
|
|
60
|
+
transformed[key] = this.applyTransformation(value, detectedTransform);
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Apply global transformations based on SQL type (if available)
|
|
65
|
+
const globalTransform = this.config.globalTransformations &&
|
|
66
|
+
this.getGlobalTransformationForValue(value);
|
|
67
|
+
if (globalTransform) {
|
|
68
|
+
transformed[key] = this.applyTransformation(value, globalTransform);
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
// Recursively transform nested objects
|
|
72
|
+
if (typeof value === 'object' && !Array.isArray(value)) {
|
|
73
|
+
transformed[key] = this.transformSingleObject(value);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (Array.isArray(value)) {
|
|
77
|
+
transformed[key] = value.map(item => typeof item === 'object' ? this.transformSingleObject(item) : item);
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
// No transformation needed
|
|
81
|
+
transformed[key] = value;
|
|
82
|
+
}
|
|
83
|
+
return transformed;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Detect value type and create appropriate transformation based on value characteristics
|
|
87
|
+
* This is the core value-based detection logic
|
|
88
|
+
*/
|
|
89
|
+
detectValueBasedTransformation(value) {
|
|
90
|
+
// Date string detection
|
|
91
|
+
if (typeof value === 'string' && this.isDateString(value)) {
|
|
92
|
+
return {
|
|
93
|
+
sourceType: 'TIMESTAMP',
|
|
94
|
+
targetType: 'Date',
|
|
95
|
+
handleNull: true,
|
|
96
|
+
validator: (v) => typeof v === 'string' && !isNaN(Date.parse(v))
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
// BigInt detection (number > MAX_SAFE_INTEGER)
|
|
100
|
+
if (typeof value === 'number' && !Number.isSafeInteger(value)) {
|
|
101
|
+
return {
|
|
102
|
+
sourceType: 'BIGINT',
|
|
103
|
+
targetType: 'bigint',
|
|
104
|
+
handleNull: true,
|
|
105
|
+
validator: (v) => {
|
|
106
|
+
try {
|
|
107
|
+
BigInt(v);
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
// Large string number detection (potential BIGINT)
|
|
117
|
+
if (typeof value === 'string' && /^\d{16,}$/.test(value)) {
|
|
118
|
+
return {
|
|
119
|
+
sourceType: 'BIGINT',
|
|
120
|
+
targetType: 'bigint',
|
|
121
|
+
handleNull: true,
|
|
122
|
+
validator: (v) => {
|
|
123
|
+
try {
|
|
124
|
+
BigInt(v);
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Get global transformation for a specific value (if any match)
|
|
137
|
+
* This is separate from value-based detection and relies on configured global rules
|
|
138
|
+
*/
|
|
139
|
+
getGlobalTransformationForValue(value) {
|
|
140
|
+
if (!this.config.globalTransformations) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
// This could be extended to match values against configured global rules
|
|
144
|
+
// For now, it's a placeholder for future SQL-type-based global transformations
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* @deprecated Use detectValueBasedTransformation instead
|
|
149
|
+
* Detect value type and get appropriate global transformation
|
|
150
|
+
*/
|
|
151
|
+
detectAndGetGlobalTransformation(value) {
|
|
152
|
+
return this.detectValueBasedTransformation(value);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Check if string is a valid date string
|
|
156
|
+
* Supports both strict (ISO 8601 with T separator) and loose detection
|
|
157
|
+
*/
|
|
158
|
+
isDateString(value) {
|
|
159
|
+
if (this.config.strictDateDetection) {
|
|
160
|
+
// Strict: Only ISO 8601 with T separator (safer for user input)
|
|
161
|
+
const strictIsoPattern = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?(?:Z|[+-]\d{2}:\d{2})?$/;
|
|
162
|
+
if (!strictIsoPattern.test(value)) {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
// Loose: ISO 8601 date pattern (includes date-only strings)
|
|
168
|
+
const isoDatePattern = /^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d{3})?(?:Z|[+-]\d{2}:\d{2})?)?$/;
|
|
169
|
+
if (!isoDatePattern.test(value)) {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
const date = new Date(value);
|
|
174
|
+
return !isNaN(date.getTime());
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Apply a specific transformation to a value
|
|
178
|
+
*/
|
|
179
|
+
applyTransformation(value, transformation) {
|
|
180
|
+
var _a;
|
|
181
|
+
// Handle null values
|
|
182
|
+
if (value === null || value === undefined) {
|
|
183
|
+
return transformation.handleNull !== false ? value : null;
|
|
184
|
+
}
|
|
185
|
+
// Validate value if validator is provided
|
|
186
|
+
if (transformation.validator && !transformation.validator(value)) {
|
|
187
|
+
console.warn(`TypeTransformationPostProcessor: Value validation failed for ${value}`);
|
|
188
|
+
return value;
|
|
189
|
+
}
|
|
190
|
+
try {
|
|
191
|
+
switch (transformation.targetType) {
|
|
192
|
+
case 'Date':
|
|
193
|
+
return new Date(value);
|
|
194
|
+
case 'bigint':
|
|
195
|
+
// Handle both string and number inputs for BIGINT
|
|
196
|
+
// For scientific notation numbers, convert to integer first
|
|
197
|
+
if (typeof value === 'number') {
|
|
198
|
+
// Convert scientific notation to integer string
|
|
199
|
+
const integerValue = Math.trunc(value);
|
|
200
|
+
return BigInt(integerValue.toString());
|
|
201
|
+
}
|
|
202
|
+
return BigInt(value);
|
|
203
|
+
case 'string':
|
|
204
|
+
return value.toString();
|
|
205
|
+
case 'number':
|
|
206
|
+
return typeof value === 'string' ? parseFloat(value) : Number(value);
|
|
207
|
+
case 'object':
|
|
208
|
+
return typeof value === 'string' ? JSON.parse(value) : value;
|
|
209
|
+
case 'custom':
|
|
210
|
+
if (transformation.customTransformer &&
|
|
211
|
+
((_a = this.config.customTransformers) === null || _a === void 0 ? void 0 : _a[transformation.customTransformer])) {
|
|
212
|
+
return this.config.customTransformers[transformation.customTransformer](value);
|
|
213
|
+
}
|
|
214
|
+
break;
|
|
215
|
+
default:
|
|
216
|
+
return value;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
console.warn(`TypeTransformationPostProcessor: Transformation failed for ${value}:`, error);
|
|
221
|
+
return value;
|
|
222
|
+
}
|
|
223
|
+
return value;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Create a default configuration for common PostgreSQL types
|
|
227
|
+
* Enables value-based detection with loose date detection by default
|
|
228
|
+
*/
|
|
229
|
+
static createDefaultConfig() {
|
|
230
|
+
return {
|
|
231
|
+
enableValueBasedDetection: true,
|
|
232
|
+
strictDateDetection: false,
|
|
233
|
+
globalTransformations: {
|
|
234
|
+
'DATE': {
|
|
235
|
+
sourceType: 'DATE',
|
|
236
|
+
targetType: 'Date',
|
|
237
|
+
handleNull: true,
|
|
238
|
+
validator: (value) => typeof value === 'string' && !isNaN(Date.parse(value))
|
|
239
|
+
},
|
|
240
|
+
'TIMESTAMP': {
|
|
241
|
+
sourceType: 'TIMESTAMP',
|
|
242
|
+
targetType: 'Date',
|
|
243
|
+
handleNull: true,
|
|
244
|
+
validator: (value) => typeof value === 'string' && !isNaN(Date.parse(value))
|
|
245
|
+
},
|
|
246
|
+
'BIGINT': {
|
|
247
|
+
sourceType: 'BIGINT',
|
|
248
|
+
targetType: 'bigint',
|
|
249
|
+
handleNull: true,
|
|
250
|
+
validator: (value) => {
|
|
251
|
+
try {
|
|
252
|
+
BigInt(value);
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
catch {
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Create a safe configuration for handling user input
|
|
265
|
+
* Disables value-based detection and uses strict date detection
|
|
266
|
+
*/
|
|
267
|
+
static createSafeConfig(columnMappings) {
|
|
268
|
+
return {
|
|
269
|
+
enableValueBasedDetection: false,
|
|
270
|
+
strictDateDetection: true,
|
|
271
|
+
columnTransformations: columnMappings || {},
|
|
272
|
+
globalTransformations: {
|
|
273
|
+
'DATE': {
|
|
274
|
+
sourceType: 'DATE',
|
|
275
|
+
targetType: 'Date',
|
|
276
|
+
handleNull: true,
|
|
277
|
+
validator: (value) => typeof value === 'string' && !isNaN(Date.parse(value))
|
|
278
|
+
},
|
|
279
|
+
'TIMESTAMP': {
|
|
280
|
+
sourceType: 'TIMESTAMP',
|
|
281
|
+
targetType: 'Date',
|
|
282
|
+
handleNull: true,
|
|
283
|
+
validator: (value) => typeof value === 'string' && !isNaN(Date.parse(value))
|
|
284
|
+
},
|
|
285
|
+
'BIGINT': {
|
|
286
|
+
sourceType: 'BIGINT',
|
|
287
|
+
targetType: 'bigint',
|
|
288
|
+
handleNull: true,
|
|
289
|
+
validator: (value) => {
|
|
290
|
+
try {
|
|
291
|
+
BigInt(value);
|
|
292
|
+
return true;
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
exports.TypeTransformationPostProcessor = TypeTransformationPostProcessor;
|
|
304
|
+
/**
|
|
305
|
+
* Convenience function to create and apply transformations
|
|
306
|
+
*/
|
|
307
|
+
function transformDatabaseResult(result, config) {
|
|
308
|
+
const processor = new TypeTransformationPostProcessor(config || TypeTransformationPostProcessor.createDefaultConfig());
|
|
309
|
+
return processor.transformResult(result);
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Type-safe transformation helpers
|
|
313
|
+
*/
|
|
314
|
+
exports.TypeTransformers = {
|
|
315
|
+
/**
|
|
316
|
+
* Transform date string to Date object
|
|
317
|
+
*/
|
|
318
|
+
toDate: (value) => {
|
|
319
|
+
if (value === null || value === undefined)
|
|
320
|
+
return null;
|
|
321
|
+
const date = new Date(value);
|
|
322
|
+
return isNaN(date.getTime()) ? null : date;
|
|
323
|
+
},
|
|
324
|
+
/**
|
|
325
|
+
* Transform numeric string to BigInt
|
|
326
|
+
*/
|
|
327
|
+
toBigInt: (value) => {
|
|
328
|
+
if (value === null || value === undefined)
|
|
329
|
+
return null;
|
|
330
|
+
try {
|
|
331
|
+
return BigInt(value);
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
return null;
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
/**
|
|
338
|
+
* Transform JSON string to object
|
|
339
|
+
*/
|
|
340
|
+
toObject: (value) => {
|
|
341
|
+
if (value === null || value === undefined)
|
|
342
|
+
return null;
|
|
343
|
+
try {
|
|
344
|
+
return JSON.parse(value);
|
|
345
|
+
}
|
|
346
|
+
catch {
|
|
347
|
+
return null;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
};
|
|
351
|
+
//# 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,53 @@
|
|
|
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
|
+
import { JsonMapping } from './PostgresJsonQueryBuilder';
|
|
6
|
+
/**
|
|
7
|
+
* Supported column type enforcement options.
|
|
8
|
+
*/
|
|
9
|
+
export type ColumnType = 'string' | 'auto';
|
|
10
|
+
/**
|
|
11
|
+
* Column configuration that can either be a simple string mapping or an enhanced mapping with type control.
|
|
12
|
+
*/
|
|
13
|
+
export type ColumnMappingConfig = string | {
|
|
14
|
+
column: string;
|
|
15
|
+
type?: ColumnType;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Enhanced JSON mapping configuration with integrated type protection.
|
|
19
|
+
*/
|
|
20
|
+
export interface UnifiedJsonMapping {
|
|
21
|
+
rootName: string;
|
|
22
|
+
typeInfo?: {
|
|
23
|
+
interface: string;
|
|
24
|
+
importPath: string;
|
|
25
|
+
};
|
|
26
|
+
rootEntity: {
|
|
27
|
+
id: string;
|
|
28
|
+
name: string;
|
|
29
|
+
columns: Record<string, ColumnMappingConfig>;
|
|
30
|
+
};
|
|
31
|
+
nestedEntities?: Array<{
|
|
32
|
+
id: string;
|
|
33
|
+
name: string;
|
|
34
|
+
parentId: string;
|
|
35
|
+
propertyName: string;
|
|
36
|
+
relationshipType: 'object' | 'array';
|
|
37
|
+
columns: Record<string, ColumnMappingConfig>;
|
|
38
|
+
}>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Type protection configuration extracted from the unified mapping.
|
|
42
|
+
*/
|
|
43
|
+
export interface TypeProtectionConfig {
|
|
44
|
+
protectedStringFields: string[];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Convert a unified JSON mapping to separate JsonMapping and TypeProtectionConfig.
|
|
48
|
+
* This enables backward compatibility with existing code while supporting the new unified structure.
|
|
49
|
+
*/
|
|
50
|
+
export declare function convertUnifiedMapping(unified: UnifiedJsonMapping): {
|
|
51
|
+
jsonMapping: JsonMapping;
|
|
52
|
+
typeProtection: TypeProtectionConfig;
|
|
53
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Enhanced JSON mapping structure that integrates column mapping and type protection configuration.
|
|
4
|
+
* This unified approach eliminates the need for separate .types.json files.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.convertUnifiedMapping = convertUnifiedMapping;
|
|
8
|
+
/**
|
|
9
|
+
* Convert a unified JSON mapping to separate JsonMapping and TypeProtectionConfig.
|
|
10
|
+
* This enables backward compatibility with existing code while supporting the new unified structure.
|
|
11
|
+
*/
|
|
12
|
+
function convertUnifiedMapping(unified) {
|
|
13
|
+
const protectedStringFields = [];
|
|
14
|
+
// Helper function to process columns and extract string protection settings
|
|
15
|
+
const processColumns = (columns) => {
|
|
16
|
+
const result = {};
|
|
17
|
+
for (const [key, config] of Object.entries(columns)) {
|
|
18
|
+
if (typeof config === 'string') {
|
|
19
|
+
result[key] = config;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
result[key] = config.column;
|
|
23
|
+
if (config.type === 'string') {
|
|
24
|
+
protectedStringFields.push(config.column);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
|
+
};
|
|
30
|
+
// Convert the unified mapping to traditional JsonMapping
|
|
31
|
+
const jsonMapping = {
|
|
32
|
+
rootName: unified.rootName,
|
|
33
|
+
rootEntity: {
|
|
34
|
+
id: unified.rootEntity.id,
|
|
35
|
+
name: unified.rootEntity.name, columns: processColumns(unified.rootEntity.columns)
|
|
36
|
+
},
|
|
37
|
+
nestedEntities: [] // Initialize as empty array
|
|
38
|
+
};
|
|
39
|
+
// Add typeInfo if it exists
|
|
40
|
+
if (unified.typeInfo) {
|
|
41
|
+
// Note: JsonMapping doesn't have typeInfo in core, but we preserve it for backward compatibility
|
|
42
|
+
jsonMapping.typeInfo = unified.typeInfo;
|
|
43
|
+
}
|
|
44
|
+
// Process nested entities if they exist
|
|
45
|
+
if (unified.nestedEntities) {
|
|
46
|
+
jsonMapping.nestedEntities = unified.nestedEntities.map(entity => ({
|
|
47
|
+
id: entity.id,
|
|
48
|
+
name: entity.name,
|
|
49
|
+
parentId: entity.parentId,
|
|
50
|
+
propertyName: entity.propertyName,
|
|
51
|
+
relationshipType: entity.relationshipType,
|
|
52
|
+
columns: processColumns(entity.columns)
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
jsonMapping,
|
|
57
|
+
typeProtection: { protectedStringFields }
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=UnifiedJsonMapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnifiedJsonMapping.js","sourceRoot":"","sources":["../../../src/transformers/UnifiedJsonMapping.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAmDH,sDAwDC;AA5DD;;;GAGG;AACH,SAAgB,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"}
|
|
@@ -3,7 +3,11 @@ import { SelectQuery, SimpleSelectQuery } from "../models/SelectQuery";
|
|
|
3
3
|
* UpstreamSelectQueryFinder searches upstream queries for the specified columns.
|
|
4
4
|
* If a query (including its upstream CTEs or subqueries) contains all columns,
|
|
5
5
|
* it returns the highest such SelectQuery. Otherwise, it searches downstream.
|
|
6
|
-
*
|
|
6
|
+
*
|
|
7
|
+
* For BinarySelectQuery (UNION/INTERSECT/EXCEPT), this finder processes each branch
|
|
8
|
+
* independently, as SelectableColumnCollector is designed for SimpleSelectQuery only.
|
|
9
|
+
* This approach ensures accurate column detection within individual SELECT branches
|
|
10
|
+
* while maintaining compatibility with compound query structures.
|
|
7
11
|
*/
|
|
8
12
|
export declare class UpstreamSelectQueryFinder {
|
|
9
13
|
private options;
|
|
@@ -9,7 +9,11 @@ const CTECollector_1 = require("./CTECollector");
|
|
|
9
9
|
* UpstreamSelectQueryFinder searches upstream queries for the specified columns.
|
|
10
10
|
* If a query (including its upstream CTEs or subqueries) contains all columns,
|
|
11
11
|
* it returns the highest such SelectQuery. Otherwise, it searches downstream.
|
|
12
|
-
*
|
|
12
|
+
*
|
|
13
|
+
* For BinarySelectQuery (UNION/INTERSECT/EXCEPT), this finder processes each branch
|
|
14
|
+
* independently, as SelectableColumnCollector is designed for SimpleSelectQuery only.
|
|
15
|
+
* This approach ensures accurate column detection within individual SELECT branches
|
|
16
|
+
* while maintaining compatibility with compound query structures.
|
|
13
17
|
*/
|
|
14
18
|
class UpstreamSelectQueryFinder {
|
|
15
19
|
constructor(tableColumnResolver, options) {
|
|
@@ -122,6 +126,9 @@ class UpstreamSelectQueryFinder {
|
|
|
122
126
|
return [];
|
|
123
127
|
}
|
|
124
128
|
else if (query instanceof SelectQuery_1.BinarySelectQuery) {
|
|
129
|
+
// Process BinarySelectQuery by decomposing into individual branches.
|
|
130
|
+
// SelectableColumnCollector is designed for SimpleSelectQuery only,
|
|
131
|
+
// so we handle UNION/INTERSECT/EXCEPT by processing left and right branches separately.
|
|
125
132
|
const left = this.findUpstream(query.left, columnNames, cteMap);
|
|
126
133
|
const right = this.findUpstream(query.right, columnNames, cteMap);
|
|
127
134
|
return [...left, ...right];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpstreamSelectQueryFinder.js","sourceRoot":"","sources":["../../../src/transformers/UpstreamSelectQueryFinder.ts"],"names":[],"mappings":";;;AAAA,uDAAuG;AACvG,6CAAwF;AACxF,2EAAwE;AACxE,iDAA8C;AAE9C
|
|
1
|
+
{"version":3,"file":"UpstreamSelectQueryFinder.js","sourceRoot":"","sources":["../../../src/transformers/UpstreamSelectQueryFinder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { JsonMapping } from '../transformers/PostgresJsonQueryBuilder';
|
|
2
|
+
/**
|
|
3
|
+
* Represents the structure extracted from JsonMapping analysis
|
|
4
|
+
*/
|
|
5
|
+
export type ExtractedStructure = 'primitive' | {
|
|
6
|
+
[key: string]: ExtractedStructure;
|
|
7
|
+
} | ExtractedStructure[];
|
|
8
|
+
/**
|
|
9
|
+
* Represents the expected type structure for validation
|
|
10
|
+
*/
|
|
11
|
+
export type ExpectedTypeStructure = 'primitive' | {
|
|
12
|
+
[key: string]: ExpectedTypeStructure;
|
|
13
|
+
} | ExpectedTypeStructure[];
|
|
14
|
+
/**
|
|
15
|
+
* Result of JsonMapping validation
|
|
16
|
+
*/
|
|
17
|
+
export interface ValidationResult {
|
|
18
|
+
isValid: boolean;
|
|
19
|
+
errors: string[];
|
|
20
|
+
missingProperties: string[];
|
|
21
|
+
extraProperties: string[];
|
|
22
|
+
}
|
|
23
|
+
export declare class JsonSchemaValidator {
|
|
24
|
+
/**
|
|
25
|
+
* Validates JsonMapping structure against an expected type structure.
|
|
26
|
+
* Checks if the JsonMapping covers all required properties and relationships.
|
|
27
|
+
*
|
|
28
|
+
* @param jsonMapping The JsonMapping configuration to validate
|
|
29
|
+
* @param expectedStructure The expected type structure to validate against
|
|
30
|
+
* @returns ValidationResult containing validation status and detailed errors
|
|
31
|
+
*/
|
|
32
|
+
static validate(jsonMapping: JsonMapping, expectedStructure: ExpectedTypeStructure): ValidationResult;
|
|
33
|
+
/**
|
|
34
|
+
* Validates JsonMapping structure and throws an error if validation fails.
|
|
35
|
+
* Convenience method for strict validation scenarios.
|
|
36
|
+
*
|
|
37
|
+
* @param jsonMapping The JsonMapping configuration to validate
|
|
38
|
+
* @param expectedStructure The expected type structure to validate against
|
|
39
|
+
* @throws Error if validation fails with detailed error messages
|
|
40
|
+
*/
|
|
41
|
+
static validateStrict(jsonMapping: JsonMapping, expectedStructure: ExpectedTypeStructure): void;
|
|
42
|
+
/**
|
|
43
|
+
* Extracts structure information from JsonMapping configuration.
|
|
44
|
+
* Analyzes rootEntity and nestedEntities to build complete structure map.
|
|
45
|
+
*
|
|
46
|
+
* @param jsonMapping The JsonMapping to analyze
|
|
47
|
+
* @returns ExtractedStructure representing the mapping structure
|
|
48
|
+
*/
|
|
49
|
+
private static extractStructureFromJsonMapping; /**
|
|
50
|
+
* Extracts structure from a nested entity, including its children.
|
|
51
|
+
*/
|
|
52
|
+
private static extractNestedEntityStructure; /**
|
|
53
|
+
* Compares extracted structure with expected structure with proper type guards.
|
|
54
|
+
*/
|
|
55
|
+
private static compareStructures;
|
|
56
|
+
/**
|
|
57
|
+
* Validates JsonMapping structure against a sample object that implements the expected type.
|
|
58
|
+
* This method extracts structure from the sample object and compares it with JsonMapping.
|
|
59
|
+
*
|
|
60
|
+
* @param jsonMapping The JsonMapping configuration to validate
|
|
61
|
+
* @param sampleObject A sample object that implements the expected interface/type
|
|
62
|
+
* @returns ValidationResult containing validation status and detailed errors
|
|
63
|
+
*/
|
|
64
|
+
static validateAgainstSample<T>(jsonMapping: JsonMapping, sampleObject: T): ValidationResult;
|
|
65
|
+
/**
|
|
66
|
+
* Validates JsonMapping structure against a sample object and throws an error if validation fails.
|
|
67
|
+
* Convenience method for strict validation scenarios with sample objects.
|
|
68
|
+
*
|
|
69
|
+
* @param jsonMapping The JsonMapping configuration to validate
|
|
70
|
+
* @param sampleObject A sample object that implements the expected interface/type
|
|
71
|
+
* @throws Error if validation fails with detailed error messages
|
|
72
|
+
*/
|
|
73
|
+
static validateAgainstSampleStrict<T>(jsonMapping: JsonMapping, sampleObject: T): void; /**
|
|
74
|
+
* Extracts structure information from a sample object.
|
|
75
|
+
* Recursively analyzes the object properties to build a structure map.
|
|
76
|
+
*
|
|
77
|
+
* @param sampleObject The sample object to analyze
|
|
78
|
+
* @returns ExpectedTypeStructure representing the object structure
|
|
79
|
+
*/
|
|
80
|
+
private static extractStructureFromSample;
|
|
81
|
+
}
|