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.
Files changed (104) hide show
  1. package/README.md +175 -47
  2. package/dist/esm/index.js +6 -0
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/index.min.js +16 -14
  5. package/dist/esm/index.min.js.map +4 -4
  6. package/dist/esm/src/index.js +6 -0
  7. package/dist/esm/src/index.js.map +1 -1
  8. package/dist/esm/src/tokenReaders/OperatorTokenReader.js +4 -0
  9. package/dist/esm/src/tokenReaders/OperatorTokenReader.js.map +1 -1
  10. package/dist/esm/src/transformers/CTEDependencyTracer.js +249 -0
  11. package/dist/esm/src/transformers/CTEDependencyTracer.js.map +1 -0
  12. package/dist/esm/src/transformers/DynamicQueryBuilder.js +155 -0
  13. package/dist/esm/src/transformers/DynamicQueryBuilder.js.map +1 -0
  14. package/dist/esm/src/transformers/JsonMappingUnifier.js +217 -0
  15. package/dist/esm/src/transformers/JsonMappingUnifier.js.map +1 -0
  16. package/dist/esm/src/transformers/ModelDrivenJsonMapping.js +103 -0
  17. package/dist/esm/src/transformers/ModelDrivenJsonMapping.js.map +1 -0
  18. package/dist/esm/src/transformers/PostgresArrayEntityCteBuilder.js +204 -16
  19. package/dist/esm/src/transformers/PostgresArrayEntityCteBuilder.js.map +1 -1
  20. package/dist/esm/src/transformers/PostgresJsonQueryBuilder.js +26 -21
  21. package/dist/esm/src/transformers/PostgresJsonQueryBuilder.js.map +1 -1
  22. package/dist/esm/src/transformers/PostgresObjectEntityCteBuilder.js +8 -5
  23. package/dist/esm/src/transformers/PostgresObjectEntityCteBuilder.js.map +1 -1
  24. package/dist/esm/src/transformers/SelectableColumnCollector.js +17 -5
  25. package/dist/esm/src/transformers/SelectableColumnCollector.js.map +1 -1
  26. package/dist/esm/src/transformers/SqlFormatter.js +1 -2
  27. package/dist/esm/src/transformers/SqlFormatter.js.map +1 -1
  28. package/dist/esm/src/transformers/TypeTransformationPostProcessor.js +342 -0
  29. package/dist/esm/src/transformers/TypeTransformationPostProcessor.js.map +1 -0
  30. package/dist/esm/src/transformers/UnifiedJsonMapping.js +57 -0
  31. package/dist/esm/src/transformers/UnifiedJsonMapping.js.map +1 -0
  32. package/dist/esm/src/transformers/UpstreamSelectQueryFinder.js +8 -1
  33. package/dist/esm/src/transformers/UpstreamSelectQueryFinder.js.map +1 -1
  34. package/dist/esm/src/utils/JsonSchemaValidator.js +211 -0
  35. package/dist/esm/src/utils/JsonSchemaValidator.js.map +1 -0
  36. package/dist/esm/src/utils/OperatorPrecedence.js +3 -1
  37. package/dist/esm/src/utils/OperatorPrecedence.js.map +1 -1
  38. package/dist/esm/src/utils/SchemaManager.js +0 -1
  39. package/dist/esm/src/utils/SchemaManager.js.map +1 -1
  40. package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
  41. package/dist/esm/types/src/index.d.ts +6 -0
  42. package/dist/esm/types/src/transformers/CTEDependencyTracer.d.ts +58 -0
  43. package/dist/esm/types/src/transformers/DynamicQueryBuilder.d.ts +108 -0
  44. package/dist/esm/types/src/transformers/JsonMappingUnifier.d.ts +95 -0
  45. package/dist/esm/types/src/transformers/ModelDrivenJsonMapping.d.ts +62 -0
  46. package/dist/esm/types/src/transformers/PostgresArrayEntityCteBuilder.d.ts +80 -1
  47. package/dist/esm/types/src/transformers/PostgresJsonQueryBuilder.d.ts +3 -2
  48. package/dist/esm/types/src/transformers/SelectableColumnCollector.d.ts +14 -3
  49. package/dist/esm/types/src/transformers/SqlFormatter.d.ts +2 -3
  50. package/dist/esm/types/src/transformers/TypeTransformationPostProcessor.d.ts +108 -0
  51. package/dist/esm/types/src/transformers/UnifiedJsonMapping.d.ts +53 -0
  52. package/dist/esm/types/src/transformers/UpstreamSelectQueryFinder.d.ts +5 -1
  53. package/dist/esm/types/src/utils/JsonSchemaValidator.d.ts +81 -0
  54. package/dist/index.min.js +16 -14
  55. package/dist/index.min.js.map +4 -4
  56. package/dist/src/index.d.ts +6 -0
  57. package/dist/src/index.js +14 -0
  58. package/dist/src/index.js.map +1 -1
  59. package/dist/src/tokenReaders/OperatorTokenReader.js +4 -0
  60. package/dist/src/tokenReaders/OperatorTokenReader.js.map +1 -1
  61. package/dist/src/transformers/CTEDependencyTracer.d.ts +58 -0
  62. package/dist/src/transformers/CTEDependencyTracer.js +253 -0
  63. package/dist/src/transformers/CTEDependencyTracer.js.map +1 -0
  64. package/dist/src/transformers/DynamicQueryBuilder.d.ts +108 -0
  65. package/dist/src/transformers/DynamicQueryBuilder.js +159 -0
  66. package/dist/src/transformers/DynamicQueryBuilder.js.map +1 -0
  67. package/dist/src/transformers/JsonMappingUnifier.d.ts +95 -0
  68. package/dist/src/transformers/JsonMappingUnifier.js +226 -0
  69. package/dist/src/transformers/JsonMappingUnifier.js.map +1 -0
  70. package/dist/src/transformers/ModelDrivenJsonMapping.d.ts +62 -0
  71. package/dist/src/transformers/ModelDrivenJsonMapping.js +110 -0
  72. package/dist/src/transformers/ModelDrivenJsonMapping.js.map +1 -0
  73. package/dist/src/transformers/PostgresArrayEntityCteBuilder.d.ts +80 -1
  74. package/dist/src/transformers/PostgresArrayEntityCteBuilder.js +204 -16
  75. package/dist/src/transformers/PostgresArrayEntityCteBuilder.js.map +1 -1
  76. package/dist/src/transformers/PostgresJsonQueryBuilder.d.ts +3 -2
  77. package/dist/src/transformers/PostgresJsonQueryBuilder.js +26 -21
  78. package/dist/src/transformers/PostgresJsonQueryBuilder.js.map +1 -1
  79. package/dist/src/transformers/PostgresObjectEntityCteBuilder.js +8 -5
  80. package/dist/src/transformers/PostgresObjectEntityCteBuilder.js.map +1 -1
  81. package/dist/src/transformers/SelectableColumnCollector.d.ts +14 -3
  82. package/dist/src/transformers/SelectableColumnCollector.js +17 -5
  83. package/dist/src/transformers/SelectableColumnCollector.js.map +1 -1
  84. package/dist/src/transformers/SqlFormatter.d.ts +2 -3
  85. package/dist/src/transformers/SqlFormatter.js +1 -2
  86. package/dist/src/transformers/SqlFormatter.js.map +1 -1
  87. package/dist/src/transformers/TypeTransformationPostProcessor.d.ts +108 -0
  88. package/dist/src/transformers/TypeTransformationPostProcessor.js +351 -0
  89. package/dist/src/transformers/TypeTransformationPostProcessor.js.map +1 -0
  90. package/dist/src/transformers/UnifiedJsonMapping.d.ts +53 -0
  91. package/dist/src/transformers/UnifiedJsonMapping.js +60 -0
  92. package/dist/src/transformers/UnifiedJsonMapping.js.map +1 -0
  93. package/dist/src/transformers/UpstreamSelectQueryFinder.d.ts +5 -1
  94. package/dist/src/transformers/UpstreamSelectQueryFinder.js +8 -1
  95. package/dist/src/transformers/UpstreamSelectQueryFinder.js.map +1 -1
  96. package/dist/src/utils/JsonSchemaValidator.d.ts +81 -0
  97. package/dist/src/utils/JsonSchemaValidator.js +215 -0
  98. package/dist/src/utils/JsonSchemaValidator.js.map +1 -0
  99. package/dist/src/utils/OperatorPrecedence.js +3 -1
  100. package/dist/src/utils/OperatorPrecedence.js.map +1 -1
  101. package/dist/src/utils/SchemaManager.js +0 -1
  102. package/dist/src/utils/SchemaManager.js.map +1 -1
  103. package/dist/tsconfig.tsbuildinfo +1 -1
  104. 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
- * For UNION queries, it checks each branch independently.
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
- * For UNION queries, it checks each branch independently.
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;;;;;GAKG;AACH,MAAa,yBAAyB;IAKlC,YAAY,mBAAqD,EAAE,OAA+C;QAC9G,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC/C,wEAAwE;QACxE,IAAI,CAAC,eAAe,GAAG,IAAI,qDAAyB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACnF,CAAC;IAED;;;;;OAKG;IACI,IAAI,CAAC,KAAkB,EAAE,WAA8B;QAC1D,iCAAiC;QACjC,MAAM,UAAU,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QACjF,2EAA2E;QAC3E,MAAM,YAAY,GAAG,IAAI,2BAAY,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,MAAM,GAA6B,IAAI,GAAG,EAAE,CAAC;QACnD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAEO,iBAAiB,CAAC,GAAgB,EAAE,WAAqB,EAAE,MAAgC;QAC/F,oDAAoD;QACpD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,GAAG,EAAE,CAAC;YACN,yEAAyE;YACzE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;YACnC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;YACrE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,oBAAoB,CAAC,GAAmB,EAAE,WAAqB,EAAE,MAAiD;QACtH,uDAAuD;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QACjE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;OAGG;IACK,yBAAyB,CAC7B,UAAe,EACf,WAAqB,EACrB,MAAgC;QAEhC,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC;QACxC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEtC,IAAI,gBAAgB,GAA0B,EAAE,CAAC;QACjD,IAAI,aAAa,GAAG,IAAI,CAAC;QACzB,IAAI,gBAAgB,GAAG,CAAC,CAAC,CAAC,iCAAiC;QAE3D,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC;YAClC,IAAI,YAAY,GAA+B,IAAI,CAAC;YACpD,IAAI,GAAG,YAAY,oBAAW,EAAE,CAAC;gBAC7B,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;gBAChE,gBAAgB,EAAE,CAAC;YACvB,CAAC;iBAAM,IAAI,GAAG,YAAY,uBAAc,EAAE,CAAC;gBACvC,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;gBACnE,gBAAgB,EAAE,CAAC;YACvB,CAAC;iBAAM,IAAI,GAAG,YAAY,yBAAW,EAAE,CAAC;gBACpC,mEAAmE;gBACnE,SAAS;YACb,CAAC;iBAAM,CAAC;gBACJ,aAAa,GAAG,KAAK,CAAC;gBACtB,MAAM;YACV,CAAC;YAED,iCAAiC;YACjC,8DAA8D;YAC9D,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;gBACxB,aAAa,GAAG,KAAK,CAAC;gBACtB,MAAM;YACV,CAAC;YACD,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxC,CAAC;QAED,sFAAsF;QACtF,IAAI,aAAa,IAAI,gBAAgB,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;YAChE,OAAO,gBAAgB,CAAC,IAAI,EAAE,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,YAAY,CAAC,KAAkB,EAAE,WAAqB,EAAE,MAAgC;QAC5F,IAAI,KAAK,YAAY,+BAAiB,EAAE,CAAC;YACrC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YACpC,IAAI,UAAU,EAAE,CAAC;gBACb,MAAM,YAAY,GAAG,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;gBACrF,IAAI,YAAY,EAAE,CAAC;oBACf,OAAO,YAAY,CAAC;gBACxB,CAAC;YACL,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzE,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,EAAE,CAC5B,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,oEAAoE;YACpE,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClG,IAAI,MAAM,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;YACD,OAAO,EAAE,CAAC;QACd,CAAC;aAAM,IAAI,KAAK,YAAY,+BAAiB,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;YAChE,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;CACJ;AAlID,8DAkIC"}
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
+ }