rawsql-ts 0.20.0 → 0.21.1

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 (89) hide show
  1. package/README.md +12 -13
  2. package/dist/esm/index.d.ts +1 -11
  3. package/dist/esm/index.js +1 -11
  4. package/dist/esm/index.js.map +1 -1
  5. package/dist/esm/index.min.js +3 -39
  6. package/dist/esm/index.min.js.map +3 -3
  7. package/dist/esm/transformers/DynamicQueryBuilder.d.ts +4 -27
  8. package/dist/esm/transformers/DynamicQueryBuilder.js +10 -27
  9. package/dist/esm/transformers/DynamicQueryBuilder.js.map +1 -1
  10. package/dist/esm/transformers/PruneOptionalConditionBranches.d.ts +19 -0
  11. package/dist/esm/transformers/PruneOptionalConditionBranches.js +220 -0
  12. package/dist/esm/transformers/PruneOptionalConditionBranches.js.map +1 -1
  13. package/dist/esm/transformers/SSSQLFilterBuilder.js +2 -1
  14. package/dist/esm/transformers/SSSQLFilterBuilder.js.map +1 -1
  15. package/dist/esm/utils/SchemaManager.d.ts +3 -19
  16. package/dist/esm/utils/SchemaManager.js +2 -62
  17. package/dist/esm/utils/SchemaManager.js.map +1 -1
  18. package/dist/index.js +2 -18
  19. package/dist/index.js.map +1 -1
  20. package/dist/index.min.js +3 -39
  21. package/dist/index.min.js.map +3 -3
  22. package/dist/src/index.d.ts +1 -11
  23. package/dist/src/transformers/DynamicQueryBuilder.d.ts +4 -27
  24. package/dist/src/transformers/PruneOptionalConditionBranches.d.ts +19 -0
  25. package/dist/src/utils/SchemaManager.d.ts +3 -19
  26. package/dist/transformers/DynamicQueryBuilder.js +10 -27
  27. package/dist/transformers/DynamicQueryBuilder.js.map +1 -1
  28. package/dist/transformers/PruneOptionalConditionBranches.js +222 -1
  29. package/dist/transformers/PruneOptionalConditionBranches.js.map +1 -1
  30. package/dist/transformers/SSSQLFilterBuilder.js +2 -1
  31. package/dist/transformers/SSSQLFilterBuilder.js.map +1 -1
  32. package/dist/tsconfig.browser.tsbuildinfo +1 -1
  33. package/dist/utils/SchemaManager.js +2 -63
  34. package/dist/utils/SchemaManager.js.map +1 -1
  35. package/package.json +10 -2
  36. package/dist/esm/transformers/EnhancedJsonMapping.d.ts +0 -194
  37. package/dist/esm/transformers/EnhancedJsonMapping.js +0 -217
  38. package/dist/esm/transformers/EnhancedJsonMapping.js.map +0 -1
  39. package/dist/esm/transformers/JsonMappingConverter.d.ts +0 -200
  40. package/dist/esm/transformers/JsonMappingConverter.js +0 -388
  41. package/dist/esm/transformers/JsonMappingConverter.js.map +0 -1
  42. package/dist/esm/transformers/JsonMappingUnifier.d.ts +0 -100
  43. package/dist/esm/transformers/JsonMappingUnifier.js +0 -207
  44. package/dist/esm/transformers/JsonMappingUnifier.js.map +0 -1
  45. package/dist/esm/transformers/ModelDrivenJsonMapping.d.ts +0 -62
  46. package/dist/esm/transformers/ModelDrivenJsonMapping.js +0 -115
  47. package/dist/esm/transformers/ModelDrivenJsonMapping.js.map +0 -1
  48. package/dist/esm/transformers/PostgresArrayEntityCteBuilder.d.ts +0 -138
  49. package/dist/esm/transformers/PostgresArrayEntityCteBuilder.js +0 -454
  50. package/dist/esm/transformers/PostgresArrayEntityCteBuilder.js.map +0 -1
  51. package/dist/esm/transformers/PostgresJsonQueryBuilder.d.ts +0 -88
  52. package/dist/esm/transformers/PostgresJsonQueryBuilder.js +0 -241
  53. package/dist/esm/transformers/PostgresJsonQueryBuilder.js.map +0 -1
  54. package/dist/esm/transformers/PostgresObjectEntityCteBuilder.d.ts +0 -165
  55. package/dist/esm/transformers/PostgresObjectEntityCteBuilder.js +0 -343
  56. package/dist/esm/transformers/PostgresObjectEntityCteBuilder.js.map +0 -1
  57. package/dist/esm/transformers/TypeTransformationPostProcessor.d.ts +0 -108
  58. package/dist/esm/transformers/TypeTransformationPostProcessor.js +0 -354
  59. package/dist/esm/transformers/TypeTransformationPostProcessor.js.map +0 -1
  60. package/dist/esm/utils/JsonSchemaValidator.d.ts +0 -81
  61. package/dist/esm/utils/JsonSchemaValidator.js +0 -211
  62. package/dist/esm/utils/JsonSchemaValidator.js.map +0 -1
  63. package/dist/src/transformers/EnhancedJsonMapping.d.ts +0 -194
  64. package/dist/src/transformers/JsonMappingConverter.d.ts +0 -200
  65. package/dist/src/transformers/JsonMappingUnifier.d.ts +0 -100
  66. package/dist/src/transformers/ModelDrivenJsonMapping.d.ts +0 -62
  67. package/dist/src/transformers/PostgresArrayEntityCteBuilder.d.ts +0 -138
  68. package/dist/src/transformers/PostgresJsonQueryBuilder.d.ts +0 -88
  69. package/dist/src/transformers/PostgresObjectEntityCteBuilder.d.ts +0 -165
  70. package/dist/src/transformers/TypeTransformationPostProcessor.d.ts +0 -108
  71. package/dist/src/utils/JsonSchemaValidator.d.ts +0 -81
  72. package/dist/transformers/EnhancedJsonMapping.js +0 -223
  73. package/dist/transformers/EnhancedJsonMapping.js.map +0 -1
  74. package/dist/transformers/JsonMappingConverter.js +0 -392
  75. package/dist/transformers/JsonMappingConverter.js.map +0 -1
  76. package/dist/transformers/JsonMappingUnifier.js +0 -216
  77. package/dist/transformers/JsonMappingUnifier.js.map +0 -1
  78. package/dist/transformers/ModelDrivenJsonMapping.js +0 -122
  79. package/dist/transformers/ModelDrivenJsonMapping.js.map +0 -1
  80. package/dist/transformers/PostgresArrayEntityCteBuilder.js +0 -458
  81. package/dist/transformers/PostgresArrayEntityCteBuilder.js.map +0 -1
  82. package/dist/transformers/PostgresJsonQueryBuilder.js +0 -245
  83. package/dist/transformers/PostgresJsonQueryBuilder.js.map +0 -1
  84. package/dist/transformers/PostgresObjectEntityCteBuilder.js +0 -347
  85. package/dist/transformers/PostgresObjectEntityCteBuilder.js.map +0 -1
  86. package/dist/transformers/TypeTransformationPostProcessor.js +0 -363
  87. package/dist/transformers/TypeTransformationPostProcessor.js.map +0 -1
  88. package/dist/utils/JsonSchemaValidator.js +0 -215
  89. package/dist/utils/JsonSchemaValidator.js.map +0 -1
@@ -1,354 +0,0 @@
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
- if (typeof v === 'string' || typeof v === 'number' || typeof v === 'bigint' || typeof v === 'boolean') {
100
- BigInt(v);
101
- return true;
102
- }
103
- return false;
104
- }
105
- catch (_a) {
106
- return false;
107
- }
108
- }
109
- };
110
- }
111
- // Large string number detection (potential BIGINT)
112
- if (typeof value === 'string' && /^\d{16,}$/.test(value)) {
113
- return {
114
- sourceType: 'BIGINT',
115
- targetType: 'bigint',
116
- handleNull: true,
117
- validator: (v) => {
118
- try {
119
- if (typeof v === 'string' || typeof v === 'number' || typeof v === 'bigint' || typeof v === 'boolean') {
120
- BigInt(v);
121
- return true;
122
- }
123
- return false;
124
- }
125
- catch (_a) {
126
- return false;
127
- }
128
- }
129
- };
130
- }
131
- return null;
132
- }
133
- /**
134
- * Get global transformation for a specific value (if any match)
135
- * This is separate from value-based detection and relies on configured global rules
136
- */
137
- getGlobalTransformationForValue(value) {
138
- if (!this.config.globalTransformations) {
139
- return null;
140
- }
141
- // This could be extended to match values against configured global rules
142
- // For now, it's a placeholder for future SQL-type-based global transformations
143
- return null;
144
- }
145
- /**
146
- * @deprecated Use detectValueBasedTransformation instead
147
- * Detect value type and get appropriate global transformation
148
- */
149
- detectAndGetGlobalTransformation(value) {
150
- return this.detectValueBasedTransformation(value);
151
- }
152
- /**
153
- * Check if string is a valid date string
154
- * Supports both strict (ISO 8601 with T separator) and loose detection
155
- */
156
- isDateString(value) {
157
- if (this.config.strictDateDetection) {
158
- // Strict: Only ISO 8601 with T separator (safer for user input)
159
- const strictIsoPattern = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?(?:Z|[+-]\d{2}:\d{2})?$/;
160
- if (!strictIsoPattern.test(value)) {
161
- return false;
162
- }
163
- }
164
- else {
165
- // Loose: ISO 8601 date pattern (includes date-only strings)
166
- const isoDatePattern = /^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d{3})?(?:Z|[+-]\d{2}:\d{2})?)?$/;
167
- if (!isoDatePattern.test(value)) {
168
- return false;
169
- }
170
- }
171
- const date = new Date(value);
172
- return !isNaN(date.getTime());
173
- }
174
- /**
175
- * Apply a specific transformation to a value
176
- */
177
- applyTransformation(value, transformation) {
178
- var _a;
179
- // Handle null values
180
- if (value === null || value === undefined) {
181
- return transformation.handleNull !== false ? value : null;
182
- }
183
- // Validate value if validator is provided
184
- if (transformation.validator && !transformation.validator(value)) {
185
- console.warn(`TypeTransformationPostProcessor: Value validation failed for ${value}`);
186
- return value;
187
- }
188
- try {
189
- switch (transformation.targetType) {
190
- case 'Date':
191
- return new Date(value);
192
- case 'bigint':
193
- // Handle both string and number inputs for BIGINT
194
- // For scientific notation numbers, convert to integer first
195
- if (typeof value === 'number') {
196
- // Convert scientific notation to integer string
197
- const integerValue = Math.trunc(value);
198
- return BigInt(integerValue.toString());
199
- }
200
- return BigInt(value);
201
- case 'string':
202
- return value.toString();
203
- case 'number':
204
- return typeof value === 'string' ? parseFloat(value) : Number(value);
205
- case 'object':
206
- return typeof value === 'string' ? JSON.parse(value) : value;
207
- case 'custom':
208
- if (transformation.customTransformer &&
209
- ((_a = this.config.customTransformers) === null || _a === void 0 ? void 0 : _a[transformation.customTransformer])) {
210
- return this.config.customTransformers[transformation.customTransformer](value);
211
- }
212
- break;
213
- default:
214
- return value;
215
- }
216
- }
217
- catch (error) {
218
- console.warn(`TypeTransformationPostProcessor: Transformation failed for ${value}:`, error);
219
- return value;
220
- }
221
- return value;
222
- }
223
- /**
224
- * Create a default configuration for common PostgreSQL types
225
- * Enables value-based detection with loose date detection by default
226
- */
227
- static createDefaultConfig() {
228
- return {
229
- enableValueBasedDetection: true,
230
- strictDateDetection: false,
231
- globalTransformations: {
232
- 'DATE': {
233
- sourceType: 'DATE',
234
- targetType: 'Date',
235
- handleNull: true,
236
- validator: (value) => typeof value === 'string' && !isNaN(Date.parse(value))
237
- },
238
- 'TIMESTAMP': {
239
- sourceType: 'TIMESTAMP',
240
- targetType: 'Date',
241
- handleNull: true,
242
- validator: (value) => typeof value === 'string' && !isNaN(Date.parse(value))
243
- },
244
- 'BIGINT': {
245
- sourceType: 'BIGINT',
246
- targetType: 'bigint',
247
- handleNull: true,
248
- validator: (value) => {
249
- try {
250
- if (typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint' || typeof value === 'boolean') {
251
- BigInt(value);
252
- return true;
253
- }
254
- return false;
255
- }
256
- catch (_a) {
257
- return false;
258
- }
259
- }
260
- }
261
- }
262
- };
263
- }
264
- /**
265
- * Create a safe configuration for handling user input
266
- * Disables value-based detection and uses strict date detection
267
- */
268
- static createSafeConfig(columnMappings) {
269
- return {
270
- enableValueBasedDetection: false,
271
- strictDateDetection: true,
272
- columnTransformations: columnMappings || {},
273
- globalTransformations: {
274
- 'DATE': {
275
- sourceType: 'DATE',
276
- targetType: 'Date',
277
- handleNull: true,
278
- validator: (value) => typeof value === 'string' && !isNaN(Date.parse(value))
279
- },
280
- 'TIMESTAMP': {
281
- sourceType: 'TIMESTAMP',
282
- targetType: 'Date',
283
- handleNull: true,
284
- validator: (value) => typeof value === 'string' && !isNaN(Date.parse(value))
285
- },
286
- 'BIGINT': {
287
- sourceType: 'BIGINT',
288
- targetType: 'bigint',
289
- handleNull: true,
290
- validator: (value) => {
291
- try {
292
- if (typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint' || typeof value === 'boolean') {
293
- BigInt(value);
294
- return true;
295
- }
296
- return false;
297
- }
298
- catch (_a) {
299
- return false;
300
- }
301
- }
302
- }
303
- }
304
- };
305
- }
306
- }
307
- /**
308
- * Convenience function to create and apply transformations
309
- */
310
- export function transformDatabaseResult(result, config) {
311
- const processor = new TypeTransformationPostProcessor(config || TypeTransformationPostProcessor.createDefaultConfig());
312
- return processor.transformResult(result);
313
- }
314
- /**
315
- * Type-safe transformation helpers
316
- */
317
- export const TypeTransformers = {
318
- /**
319
- * Transform date string to Date object
320
- */
321
- toDate: (value) => {
322
- if (value === null || value === undefined)
323
- return null;
324
- const date = new Date(value);
325
- return isNaN(date.getTime()) ? null : date;
326
- },
327
- /**
328
- * Transform numeric string to BigInt
329
- */
330
- toBigInt: (value) => {
331
- if (value === null || value === undefined)
332
- return null;
333
- try {
334
- return BigInt(value);
335
- }
336
- catch (_a) {
337
- return null;
338
- }
339
- },
340
- /**
341
- * Transform JSON string to object
342
- */
343
- toObject: (value) => {
344
- if (value === null || value === undefined)
345
- return null;
346
- try {
347
- return JSON.parse(value);
348
- }
349
- catch (_a) {
350
- return null;
351
- }
352
- }
353
- };
354
- //# sourceMappingURL=TypeTransformationPostProcessor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TypeTransformationPostProcessor.js","sourceRoot":"","sources":["../../../src/transformers/TypeTransformationPostProcessor.ts"],"names":[],"mappings":"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"}
@@ -1,81 +0,0 @@
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
- }
@@ -1,211 +0,0 @@
1
- export class JsonSchemaValidator {
2
- /**
3
- * Validates JsonMapping structure against an expected type structure.
4
- * Checks if the JsonMapping covers all required properties and relationships.
5
- *
6
- * @param jsonMapping The JsonMapping configuration to validate
7
- * @param expectedStructure The expected type structure to validate against
8
- * @returns ValidationResult containing validation status and detailed errors
9
- */
10
- static validate(jsonMapping, expectedStructure) {
11
- const extractedStructure = this.extractStructureFromJsonMapping(jsonMapping);
12
- return this.compareStructures(extractedStructure, expectedStructure);
13
- }
14
- /**
15
- * Validates JsonMapping structure and throws an error if validation fails.
16
- * Convenience method for strict validation scenarios.
17
- *
18
- * @param jsonMapping The JsonMapping configuration to validate
19
- * @param expectedStructure The expected type structure to validate against
20
- * @throws Error if validation fails with detailed error messages
21
- */
22
- static validateStrict(jsonMapping, expectedStructure) {
23
- const result = this.validate(jsonMapping, expectedStructure);
24
- if (!result.isValid) {
25
- const errorMessage = [
26
- 'JsonMapping validation failed:',
27
- ...result.errors
28
- ].join('\n');
29
- throw new Error(errorMessage);
30
- }
31
- }
32
- /**
33
- * Extracts structure information from JsonMapping configuration.
34
- * Analyzes rootEntity and nestedEntities to build complete structure map.
35
- *
36
- * @param jsonMapping The JsonMapping to analyze
37
- * @returns ExtractedStructure representing the mapping structure
38
- */
39
- static extractStructureFromJsonMapping(jsonMapping) {
40
- const structure = {};
41
- // Extract root entity properties
42
- if (jsonMapping.rootEntity && jsonMapping.rootEntity.columns) {
43
- Object.keys(jsonMapping.rootEntity.columns).forEach(propertyName => {
44
- structure[propertyName] = 'primitive';
45
- });
46
- }
47
- // Extract nested entities
48
- if (jsonMapping.nestedEntities) {
49
- // Process direct children of root entity first
50
- jsonMapping.nestedEntities
51
- .filter((entity) => entity.parentId === jsonMapping.rootEntity.id)
52
- .forEach((entity) => {
53
- if (entity.propertyName && entity.columns) {
54
- if (entity.relationshipType === 'object') {
55
- // Single object relationship
56
- structure[entity.propertyName] = this.extractNestedEntityStructure(entity, jsonMapping);
57
- }
58
- else if (entity.relationshipType === 'array') {
59
- // Array relationship
60
- structure[entity.propertyName] = [this.extractNestedEntityStructure(entity, jsonMapping)];
61
- }
62
- }
63
- });
64
- }
65
- return structure;
66
- } /**
67
- * Extracts structure from a nested entity, including its children.
68
- */
69
- static extractNestedEntityStructure(entity, jsonMapping) {
70
- const entityStructure = {};
71
- // Add entity's own columns
72
- if (entity.columns) {
73
- Object.keys(entity.columns).forEach(propName => {
74
- entityStructure[propName] = 'primitive';
75
- });
76
- }
77
- // Add nested children of this entity
78
- if (jsonMapping.nestedEntities) {
79
- jsonMapping.nestedEntities
80
- .filter((childEntity) => childEntity.parentId === entity.id)
81
- .forEach((childEntity) => {
82
- if (childEntity.propertyName && childEntity.columns) {
83
- if (childEntity.relationshipType === 'object') {
84
- entityStructure[childEntity.propertyName] = this.extractNestedEntityStructure(childEntity, jsonMapping);
85
- }
86
- else if (childEntity.relationshipType === 'array') {
87
- entityStructure[childEntity.propertyName] = [this.extractNestedEntityStructure(childEntity, jsonMapping)];
88
- }
89
- }
90
- });
91
- }
92
- return entityStructure;
93
- } /**
94
- * Compares extracted structure with expected structure with proper type guards.
95
- */
96
- static compareStructures(extracted, expected, path = '') {
97
- const errors = [];
98
- const missingProperties = [];
99
- const extraProperties = [];
100
- // Handle primitive comparison
101
- if (extracted === 'primitive' && expected === 'primitive') {
102
- return { isValid: true, errors: [], missingProperties: [], extraProperties: [] };
103
- }
104
- // Handle array types
105
- if (Array.isArray(expected) && Array.isArray(extracted)) {
106
- if (expected.length > 0 && extracted.length > 0) {
107
- const nestedResult = this.compareStructures(extracted[0], expected[0], `${path}[]`);
108
- errors.push(...nestedResult.errors);
109
- missingProperties.push(...nestedResult.missingProperties);
110
- extraProperties.push(...nestedResult.extraProperties);
111
- }
112
- return { isValid: errors.length === 0, errors, missingProperties, extraProperties };
113
- } // Both should be objects for property comparison
114
- if (typeof extracted !== 'object' || typeof expected !== 'object' ||
115
- Array.isArray(extracted) || Array.isArray(expected) ||
116
- extracted === null || expected === null) {
117
- return { isValid: true, errors: [], missingProperties: [], extraProperties: [] };
118
- }
119
- // Now we know both are object types, safe to access properties
120
- const extractedObj = extracted;
121
- const expectedObj = expected;
122
- // Check for missing properties in extracted structure
123
- Object.keys(expectedObj).forEach(key => {
124
- const currentPath = path ? `${path}.${key}` : key;
125
- if (!(key in extractedObj)) {
126
- missingProperties.push(currentPath);
127
- errors.push(`Missing property: ${currentPath}`);
128
- return;
129
- }
130
- const extractedValue = extractedObj[key];
131
- const expectedValue = expectedObj[key];
132
- // Recursively compare nested structures
133
- const nestedResult = this.compareStructures(extractedValue, expectedValue, currentPath);
134
- errors.push(...nestedResult.errors);
135
- missingProperties.push(...nestedResult.missingProperties);
136
- extraProperties.push(...nestedResult.extraProperties);
137
- });
138
- // Check for extra properties in extracted structure
139
- Object.keys(extractedObj).forEach(key => {
140
- const currentPath = path ? `${path}.${key}` : key;
141
- if (!(key in expectedObj)) {
142
- extraProperties.push(currentPath);
143
- // Note: Extra properties are not considered errors in this implementation
144
- // as JsonMapping might include additional metadata
145
- }
146
- });
147
- return {
148
- isValid: errors.length === 0,
149
- errors,
150
- missingProperties,
151
- extraProperties
152
- };
153
- }
154
- /**
155
- * Validates JsonMapping structure against a sample object that implements the expected type.
156
- * This method extracts structure from the sample object and compares it with JsonMapping.
157
- *
158
- * @param jsonMapping The JsonMapping configuration to validate
159
- * @param sampleObject A sample object that implements the expected interface/type
160
- * @returns ValidationResult containing validation status and detailed errors
161
- */
162
- static validateAgainstSample(jsonMapping, sampleObject) {
163
- const expectedStructure = this.extractStructureFromSample(sampleObject);
164
- return this.validate(jsonMapping, expectedStructure);
165
- }
166
- /**
167
- * Validates JsonMapping structure against a sample object and throws an error if validation fails.
168
- * Convenience method for strict validation scenarios with sample objects.
169
- *
170
- * @param jsonMapping The JsonMapping configuration to validate
171
- * @param sampleObject A sample object that implements the expected interface/type
172
- * @throws Error if validation fails with detailed error messages
173
- */
174
- static validateAgainstSampleStrict(jsonMapping, sampleObject) {
175
- const result = this.validateAgainstSample(jsonMapping, sampleObject);
176
- if (!result.isValid) {
177
- const errorMessage = [
178
- 'JsonMapping validation against sample object failed:',
179
- ...result.errors
180
- ].join('\n');
181
- throw new Error(errorMessage);
182
- }
183
- } /**
184
- * Extracts structure information from a sample object.
185
- * Recursively analyzes the object properties to build a structure map.
186
- *
187
- * @param sampleObject The sample object to analyze
188
- * @returns ExpectedTypeStructure representing the object structure
189
- */
190
- static extractStructureFromSample(sampleObject) {
191
- if (sampleObject === null || sampleObject === undefined) {
192
- return 'primitive';
193
- }
194
- if (Array.isArray(sampleObject)) {
195
- if (sampleObject.length === 0) {
196
- return [];
197
- }
198
- return [this.extractStructureFromSample(sampleObject[0])];
199
- }
200
- if (typeof sampleObject === 'object') {
201
- const structure = {};
202
- Object.keys(sampleObject).forEach(key => {
203
- structure[key] = this.extractStructureFromSample(sampleObject[key]);
204
- });
205
- return structure;
206
- }
207
- // Primitive types (string, number, boolean, etc.)
208
- return 'primitive';
209
- }
210
- }
211
- //# sourceMappingURL=JsonSchemaValidator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"JsonSchemaValidator.js","sourceRoot":"","sources":["../../../src/utils/JsonSchemaValidator.ts"],"names":[],"mappings":"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"}