rawsql-ts 0.11.0-beta → 0.11.2-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 (110) hide show
  1. package/README.md +1 -3
  2. package/dist/esm/index.js +8 -1
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/index.min.js +47 -13
  5. package/dist/esm/index.min.js.map +4 -4
  6. package/dist/esm/src/index.js +8 -1
  7. package/dist/esm/src/index.js.map +1 -1
  8. package/dist/esm/src/parsers/ValueParser.js +86 -4
  9. package/dist/esm/src/parsers/ValueParser.js.map +1 -1
  10. package/dist/esm/src/tokenReaders/OperatorTokenReader.js +4 -0
  11. package/dist/esm/src/tokenReaders/OperatorTokenReader.js.map +1 -1
  12. package/dist/esm/src/transformers/CTEDependencyTracer.js +249 -0
  13. package/dist/esm/src/transformers/CTEDependencyTracer.js.map +1 -0
  14. package/dist/esm/src/transformers/DynamicQueryBuilder.js.map +1 -1
  15. package/dist/esm/src/transformers/EnhancedJsonMapping.js +217 -0
  16. package/dist/esm/src/transformers/EnhancedJsonMapping.js.map +1 -0
  17. package/dist/esm/src/transformers/JsonMappingConverter.js +388 -0
  18. package/dist/esm/src/transformers/JsonMappingConverter.js.map +1 -0
  19. package/dist/esm/src/transformers/JsonMappingUnifier.js +207 -0
  20. package/dist/esm/src/transformers/JsonMappingUnifier.js.map +1 -0
  21. package/dist/esm/src/transformers/ModelDrivenJsonMapping.js +115 -0
  22. package/dist/esm/src/transformers/ModelDrivenJsonMapping.js.map +1 -0
  23. package/dist/esm/src/transformers/PostgresArrayEntityCteBuilder.js +293 -70
  24. package/dist/esm/src/transformers/PostgresArrayEntityCteBuilder.js.map +1 -1
  25. package/dist/esm/src/transformers/PostgresJsonQueryBuilder.js +26 -15
  26. package/dist/esm/src/transformers/PostgresJsonQueryBuilder.js.map +1 -1
  27. package/dist/esm/src/transformers/PostgresObjectEntityCteBuilder.js +75 -15
  28. package/dist/esm/src/transformers/PostgresObjectEntityCteBuilder.js.map +1 -1
  29. package/dist/esm/src/transformers/SelectableColumnCollector.js +17 -5
  30. package/dist/esm/src/transformers/SelectableColumnCollector.js.map +1 -1
  31. package/dist/esm/src/transformers/SqlParamInjector.js +189 -108
  32. package/dist/esm/src/transformers/SqlParamInjector.js.map +1 -1
  33. package/dist/esm/src/transformers/UnifiedJsonMapping.js +2 -4
  34. package/dist/esm/src/transformers/UnifiedJsonMapping.js.map +1 -1
  35. package/dist/esm/src/transformers/UpstreamSelectQueryFinder.js +51 -3
  36. package/dist/esm/src/transformers/UpstreamSelectQueryFinder.js.map +1 -1
  37. package/dist/esm/src/utils/OperatorPrecedence.js +3 -1
  38. package/dist/esm/src/utils/OperatorPrecedence.js.map +1 -1
  39. package/dist/esm/src/utils/SchemaManager.js +0 -1
  40. package/dist/esm/src/utils/SchemaManager.js.map +1 -1
  41. package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
  42. package/dist/esm/types/src/index.d.ts +8 -1
  43. package/dist/esm/types/src/parsers/ValueParser.d.ts +8 -0
  44. package/dist/esm/types/src/transformers/CTEDependencyTracer.d.ts +58 -0
  45. package/dist/esm/types/src/transformers/DynamicQueryBuilder.d.ts +6 -0
  46. package/dist/esm/types/src/transformers/EnhancedJsonMapping.d.ts +194 -0
  47. package/dist/esm/types/src/transformers/JsonMappingConverter.d.ts +200 -0
  48. package/dist/esm/types/src/transformers/JsonMappingUnifier.d.ts +100 -0
  49. package/dist/esm/types/src/transformers/ModelDrivenJsonMapping.d.ts +62 -0
  50. package/dist/esm/types/src/transformers/PostgresArrayEntityCteBuilder.d.ts +93 -52
  51. package/dist/esm/types/src/transformers/PostgresJsonQueryBuilder.d.ts +3 -3
  52. package/dist/esm/types/src/transformers/PostgresObjectEntityCteBuilder.d.ts +31 -6
  53. package/dist/esm/types/src/transformers/SelectableColumnCollector.d.ts +14 -3
  54. package/dist/esm/types/src/transformers/SqlParamInjector.d.ts +48 -0
  55. package/dist/esm/types/src/transformers/UnifiedJsonMapping.d.ts +0 -1
  56. package/dist/esm/types/src/transformers/UpstreamSelectQueryFinder.d.ts +13 -1
  57. package/dist/index.min.js +47 -13
  58. package/dist/index.min.js.map +4 -4
  59. package/dist/src/index.d.ts +8 -1
  60. package/dist/src/index.js +15 -1
  61. package/dist/src/index.js.map +1 -1
  62. package/dist/src/parsers/ValueParser.d.ts +8 -0
  63. package/dist/src/parsers/ValueParser.js +86 -4
  64. package/dist/src/parsers/ValueParser.js.map +1 -1
  65. package/dist/src/tokenReaders/OperatorTokenReader.js +4 -0
  66. package/dist/src/tokenReaders/OperatorTokenReader.js.map +1 -1
  67. package/dist/src/transformers/CTEDependencyTracer.d.ts +58 -0
  68. package/dist/src/transformers/CTEDependencyTracer.js +253 -0
  69. package/dist/src/transformers/CTEDependencyTracer.js.map +1 -0
  70. package/dist/src/transformers/DynamicQueryBuilder.d.ts +6 -0
  71. package/dist/src/transformers/DynamicQueryBuilder.js.map +1 -1
  72. package/dist/src/transformers/EnhancedJsonMapping.d.ts +194 -0
  73. package/dist/src/transformers/EnhancedJsonMapping.js +223 -0
  74. package/dist/src/transformers/EnhancedJsonMapping.js.map +1 -0
  75. package/dist/src/transformers/JsonMappingConverter.d.ts +200 -0
  76. package/dist/src/transformers/JsonMappingConverter.js +392 -0
  77. package/dist/src/transformers/JsonMappingConverter.js.map +1 -0
  78. package/dist/src/transformers/JsonMappingUnifier.d.ts +100 -0
  79. package/dist/src/transformers/JsonMappingUnifier.js +216 -0
  80. package/dist/src/transformers/JsonMappingUnifier.js.map +1 -0
  81. package/dist/src/transformers/ModelDrivenJsonMapping.d.ts +62 -0
  82. package/dist/src/transformers/ModelDrivenJsonMapping.js +122 -0
  83. package/dist/src/transformers/ModelDrivenJsonMapping.js.map +1 -0
  84. package/dist/src/transformers/PostgresArrayEntityCteBuilder.d.ts +93 -52
  85. package/dist/src/transformers/PostgresArrayEntityCteBuilder.js +293 -70
  86. package/dist/src/transformers/PostgresArrayEntityCteBuilder.js.map +1 -1
  87. package/dist/src/transformers/PostgresJsonQueryBuilder.d.ts +3 -3
  88. package/dist/src/transformers/PostgresJsonQueryBuilder.js +26 -15
  89. package/dist/src/transformers/PostgresJsonQueryBuilder.js.map +1 -1
  90. package/dist/src/transformers/PostgresObjectEntityCteBuilder.d.ts +31 -6
  91. package/dist/src/transformers/PostgresObjectEntityCteBuilder.js +75 -15
  92. package/dist/src/transformers/PostgresObjectEntityCteBuilder.js.map +1 -1
  93. package/dist/src/transformers/SelectableColumnCollector.d.ts +14 -3
  94. package/dist/src/transformers/SelectableColumnCollector.js +17 -5
  95. package/dist/src/transformers/SelectableColumnCollector.js.map +1 -1
  96. package/dist/src/transformers/SqlParamInjector.d.ts +48 -0
  97. package/dist/src/transformers/SqlParamInjector.js +189 -108
  98. package/dist/src/transformers/SqlParamInjector.js.map +1 -1
  99. package/dist/src/transformers/UnifiedJsonMapping.d.ts +0 -1
  100. package/dist/src/transformers/UnifiedJsonMapping.js +2 -4
  101. package/dist/src/transformers/UnifiedJsonMapping.js.map +1 -1
  102. package/dist/src/transformers/UpstreamSelectQueryFinder.d.ts +13 -1
  103. package/dist/src/transformers/UpstreamSelectQueryFinder.js +51 -3
  104. package/dist/src/transformers/UpstreamSelectQueryFinder.js.map +1 -1
  105. package/dist/src/utils/OperatorPrecedence.js +3 -1
  106. package/dist/src/utils/OperatorPrecedence.js.map +1 -1
  107. package/dist/src/utils/SchemaManager.js +0 -1
  108. package/dist/src/utils/SchemaManager.js.map +1 -1
  109. package/dist/tsconfig.tsbuildinfo +1 -1
  110. package/package.json +2 -2
@@ -0,0 +1,392 @@
1
+ "use strict";
2
+ /**
3
+ * Unified JSON mapping converter that handles all supported formats
4
+ * and provides a single interface for mapping transformations.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.JsonMappingConverter = void 0;
8
+ const ModelDrivenJsonMapping_1 = require("./ModelDrivenJsonMapping");
9
+ const EnhancedJsonMapping_1 = require("./EnhancedJsonMapping");
10
+ /**
11
+ * Type guard to check if input is valid JSON mapping input
12
+ */
13
+ function isValidMappingInput(input) {
14
+ return input !== null &&
15
+ input !== undefined &&
16
+ typeof input === 'object';
17
+ }
18
+ /**
19
+ * Enhanced format conversion strategy.
20
+ */
21
+ class EnhancedFormatStrategy {
22
+ detect(input) {
23
+ if (!isValidMappingInput(input)) {
24
+ return false;
25
+ }
26
+ const candidate = input;
27
+ if (!candidate ||
28
+ typeof candidate.rootName !== 'string' ||
29
+ !candidate.rootEntity ||
30
+ !Array.isArray(candidate.nestedEntities)) {
31
+ return false;
32
+ }
33
+ // Check if it has enhanced features
34
+ if (candidate.typeInfo || candidate.typeProtection || candidate.metadata) {
35
+ return true;
36
+ }
37
+ // Check if any column uses enhanced format (object with 'column' property)
38
+ const hasEnhancedColumns = (columns) => {
39
+ if (!columns || typeof columns !== 'object')
40
+ return false;
41
+ return Object.values(columns).some(col => typeof col === 'object' && col !== null && 'column' in col);
42
+ };
43
+ if (hasEnhancedColumns(candidate.rootEntity.columns)) {
44
+ return true;
45
+ }
46
+ return candidate.nestedEntities.some((entity) => entity && typeof entity === 'object' &&
47
+ hasEnhancedColumns(entity.columns));
48
+ }
49
+ convert(input) {
50
+ var _a, _b;
51
+ return {
52
+ format: 'enhanced',
53
+ mapping: (0, EnhancedJsonMapping_1.toLegacyMapping)(input),
54
+ typeProtection: (0, EnhancedJsonMapping_1.extractTypeProtection)(input),
55
+ originalInput: input,
56
+ metadata: {
57
+ typeInfo: input.typeInfo,
58
+ version: (_a = input.metadata) === null || _a === void 0 ? void 0 : _a.version,
59
+ description: (_b = input.metadata) === null || _b === void 0 ? void 0 : _b.description
60
+ }
61
+ };
62
+ }
63
+ }
64
+ /**
65
+ * Model-driven format conversion strategy.
66
+ */
67
+ class ModelDrivenFormatStrategy {
68
+ detect(input) {
69
+ if (!isValidMappingInput(input)) {
70
+ return false;
71
+ }
72
+ const candidate = input;
73
+ return candidate &&
74
+ candidate.typeInfo &&
75
+ candidate.structure &&
76
+ typeof candidate.typeInfo.interface === 'string';
77
+ }
78
+ convert(input) {
79
+ // Use the existing convertModelDrivenMapping function to avoid code duplication
80
+ const converted = (0, ModelDrivenJsonMapping_1.convertModelDrivenMapping)(input);
81
+ return {
82
+ format: 'model-driven',
83
+ mapping: converted.jsonMapping,
84
+ typeProtection: converted.typeProtection,
85
+ originalInput: input,
86
+ metadata: {
87
+ typeInfo: input.typeInfo
88
+ }
89
+ };
90
+ }
91
+ }
92
+ /**
93
+ * Legacy format conversion strategy.
94
+ */
95
+ class LegacyFormatStrategy {
96
+ detect(input) {
97
+ if (!isValidMappingInput(input)) {
98
+ return false;
99
+ }
100
+ const candidate = input;
101
+ if (!candidate ||
102
+ typeof candidate.rootName !== 'string' ||
103
+ !candidate.rootEntity ||
104
+ typeof candidate.rootEntity.columns !== 'object' ||
105
+ candidate.typeInfo || candidate.typeProtection || candidate.metadata) {
106
+ return false;
107
+ }
108
+ // Check if any column uses enhanced format (object with 'column' property)
109
+ const hasEnhancedColumns = (columns) => {
110
+ if (!columns || typeof columns !== 'object')
111
+ return false;
112
+ return Object.values(columns).some(col => typeof col === 'object' && col !== null && 'column' in col);
113
+ };
114
+ // If it has enhanced columns, it's not legacy format
115
+ if (hasEnhancedColumns(candidate.rootEntity.columns)) {
116
+ return false;
117
+ }
118
+ if (candidate.nestedEntities && Array.isArray(candidate.nestedEntities)) {
119
+ const hasEnhancedNested = candidate.nestedEntities.some((entity) => entity && typeof entity === 'object' && hasEnhancedColumns(entity.columns));
120
+ if (hasEnhancedNested) {
121
+ return false;
122
+ }
123
+ }
124
+ return true;
125
+ }
126
+ convert(input) {
127
+ return {
128
+ format: 'legacy',
129
+ mapping: input,
130
+ typeProtection: { protectedStringFields: [] },
131
+ originalInput: input
132
+ };
133
+ }
134
+ }
135
+ /**
136
+ * Unified JSON mapping converter that handles all supported formats using the Strategy pattern.
137
+ *
138
+ * This converter automatically detects the input format and applies the appropriate conversion
139
+ * strategy to transform any supported JSON mapping format into a standardized result.
140
+ *
141
+ * **Supported Formats:**
142
+ * - **Enhanced**: Rich format with metadata, type protection, and advanced column configurations
143
+ * - **Model-Driven**: TypeScript interface-based mapping with structured field definitions
144
+ * - **Legacy**: Simple format compatible with PostgresJsonQueryBuilder
145
+ *
146
+ * **Usage:**
147
+ * ```typescript
148
+ * const converter = new JsonMappingConverter();
149
+ * const result = converter.convert(someMapping);
150
+ * const legacyMapping = converter.toLegacyMapping(someMapping);
151
+ * ```
152
+ *
153
+ * @public
154
+ */
155
+ class JsonMappingConverter {
156
+ /**
157
+ * Creates a new JsonMappingConverter with all supported strategies.
158
+ *
159
+ * Strategies are checked in order of specificity:
160
+ * 1. Enhanced format (most feature-rich)
161
+ * 2. Model-driven format (TypeScript-based)
162
+ * 3. Legacy format (fallback)
163
+ */
164
+ constructor() {
165
+ this.strategies = [
166
+ new EnhancedFormatStrategy(),
167
+ new ModelDrivenFormatStrategy(),
168
+ new LegacyFormatStrategy()
169
+ ];
170
+ }
171
+ /**
172
+ * Detects the format of the input mapping without performing conversion.
173
+ *
174
+ * This method uses the same strategy pattern as conversion but only returns
175
+ * the detected format type for inspection purposes.
176
+ *
177
+ * @param input - The JSON mapping to analyze
178
+ * @returns The detected mapping format type
179
+ *
180
+ * @throws {Error} When input format is not supported by any strategy
181
+ *
182
+ * @example
183
+ * ```typescript
184
+ * const format = converter.detectFormat(myMapping);
185
+ * console.log(`Detected format: ${format}`); // "enhanced", "model-driven", or "legacy"
186
+ * ```
187
+ */
188
+ detectFormat(input) {
189
+ for (const strategy of this.strategies) {
190
+ if (strategy.detect(input)) {
191
+ const result = strategy.convert(input);
192
+ return result.format;
193
+ }
194
+ }
195
+ throw new Error('Unsupported JSON mapping format');
196
+ }
197
+ /**
198
+ * Converts any supported JSON mapping format to a comprehensive result with metadata.
199
+ *
200
+ * This is the primary conversion method that performs format detection and transformation
201
+ * in a single operation. The result includes the legacy mapping, type protection configuration,
202
+ * and metadata about the conversion process.
203
+ *
204
+ * @param input - The JSON mapping in any supported format (Enhanced, Model-Driven, or Legacy)
205
+ * @returns Complete conversion result with mapping, metadata, and type protection
206
+ *
207
+ * @throws {Error} When the input format is not recognized by any strategy
208
+ *
209
+ * @example
210
+ * ```typescript
211
+ * const result = converter.convert(enhancedMapping);
212
+ * console.log(`Format: ${result.format}`);
213
+ * console.log(`Type protection: ${result.typeProtection.protectedStringFields.length} fields`);
214
+ *
215
+ * // Use the converted mapping
216
+ * const queryBuilder = new PostgresJsonQueryBuilder(result.mapping);
217
+ * ```
218
+ *
219
+ * @see {@link toLegacyMapping} For simple mapping extraction
220
+ * @see {@link getTypeProtection} For type protection only
221
+ */
222
+ convert(input) {
223
+ for (const strategy of this.strategies) {
224
+ if (strategy.detect(input)) {
225
+ return strategy.convert(input);
226
+ }
227
+ }
228
+ throw new Error('Unsupported JSON mapping format: Unable to detect a compatible strategy for the provided input');
229
+ }
230
+ /**
231
+ * Extracts only the legacy JsonMapping for direct use with PostgresJsonQueryBuilder.
232
+ *
233
+ * This convenience method performs the full conversion but returns only the mapping portion,
234
+ * discarding metadata and type protection information. Use this when you only need
235
+ * the mapping for query building and don't require additional metadata.
236
+ *
237
+ * @param input - The JSON mapping in any supported format
238
+ * @returns Legacy-format JsonMapping ready for PostgresJsonQueryBuilder
239
+ *
240
+ * @throws {Error} When the input format is not supported
241
+ *
242
+ * @example
243
+ * ```typescript
244
+ * const legacyMapping = converter.toLegacyMapping(modelDrivenMapping);
245
+ * const queryBuilder = new PostgresJsonQueryBuilder(legacyMapping);
246
+ * const query = queryBuilder.build(selectQuery);
247
+ * ```
248
+ *
249
+ * @see {@link convert} For full conversion with metadata
250
+ */
251
+ toLegacyMapping(input) {
252
+ return this.convert(input).mapping;
253
+ }
254
+ /**
255
+ * Extracts type protection configuration for runtime type checking.
256
+ *
257
+ * Type protection helps identify fields that should be treated as strings
258
+ * to prevent injection attacks or type coercion issues. This is particularly
259
+ * useful when working with user input or external data sources.
260
+ *
261
+ * @param input - The JSON mapping in any supported format
262
+ * @returns Type protection configuration with protected field definitions
263
+ *
264
+ * @throws {Error} When the input format is not supported
265
+ *
266
+ * @example
267
+ * ```typescript
268
+ * const typeProtection = converter.getTypeProtection(enhancedMapping);
269
+ *
270
+ * // Apply type protection during data processing
271
+ * for (const field of typeProtection.protectedStringFields) {
272
+ * if (typeof data[field] !== 'string') {
273
+ * data[field] = String(data[field]);
274
+ * }
275
+ * }
276
+ * ```
277
+ */
278
+ getTypeProtection(input) {
279
+ return this.convert(input).typeProtection;
280
+ }
281
+ /**
282
+ * Validates that the input mapping is well-formed and can be successfully converted.
283
+ *
284
+ * This method performs comprehensive validation without attempting conversion,
285
+ * returning an array of error messages for any issues found. An empty array
286
+ * indicates the mapping is valid and ready for conversion.
287
+ *
288
+ * **Validation Checks:**
289
+ * - Basic structure validation (object type, required fields)
290
+ * - Format-specific validation (Enhanced, Model-Driven, Legacy)
291
+ * - Column configuration validation
292
+ * - Type protection configuration validation
293
+ *
294
+ * @param input - The JSON mapping to validate
295
+ * @returns Array of validation error messages (empty if valid)
296
+ *
297
+ * @example
298
+ * ```typescript
299
+ * const errors = converter.validate(suspiciousMapping);
300
+ * if (errors.length > 0) {
301
+ * console.error('Validation failed:', errors);
302
+ * throw new Error(`Invalid mapping: ${errors.join(', ')}`);
303
+ * }
304
+ *
305
+ * // Safe to convert
306
+ * const result = converter.convert(suspiciousMapping);
307
+ * ```
308
+ *
309
+ * @see {@link convert} Performs conversion after implicit validation
310
+ */
311
+ validate(input) {
312
+ const errors = [];
313
+ // Pre-validation checks
314
+ if (!input || typeof input !== 'object') {
315
+ errors.push('Input must be an object');
316
+ return errors;
317
+ }
318
+ // Check for rootName before attempting conversion
319
+ if (!('rootName' in input) || !input.rootName) {
320
+ errors.push('rootName is required');
321
+ }
322
+ try {
323
+ const result = this.convert(input);
324
+ // Basic validation
325
+ if (!result.mapping.rootName) {
326
+ errors.push('rootName is required');
327
+ }
328
+ if (!result.mapping.rootEntity) {
329
+ errors.push('rootEntity is required');
330
+ }
331
+ else {
332
+ if (!result.mapping.rootEntity.id) {
333
+ errors.push('rootEntity.id is required');
334
+ }
335
+ if (!result.mapping.rootEntity.columns) {
336
+ errors.push('rootEntity.columns is required');
337
+ }
338
+ }
339
+ // Validate nested entities
340
+ if (result.mapping.nestedEntities) {
341
+ for (const entity of result.mapping.nestedEntities) {
342
+ if (!entity.id) {
343
+ errors.push(`Nested entity missing id: ${entity.propertyName}`);
344
+ }
345
+ if (!entity.parentId) {
346
+ errors.push(`Nested entity missing parentId: ${entity.id}`);
347
+ }
348
+ if (!entity.propertyName) {
349
+ errors.push(`Nested entity missing propertyName: ${entity.id}`);
350
+ }
351
+ }
352
+ }
353
+ }
354
+ catch (error) {
355
+ // Only add conversion error if we haven't already found specific errors
356
+ if (errors.length === 0) {
357
+ errors.push(`Conversion failed: ${error instanceof Error ? error.message : String(error)}`);
358
+ }
359
+ }
360
+ return errors;
361
+ }
362
+ /**
363
+ * Creates a new enhanced mapping from legacy mapping.
364
+ */
365
+ upgradeToEnhanced(legacy, typeInfo) {
366
+ return {
367
+ rootName: legacy.rootName,
368
+ rootEntity: {
369
+ id: legacy.rootEntity.id,
370
+ name: legacy.rootEntity.name,
371
+ columns: legacy.rootEntity.columns
372
+ },
373
+ nestedEntities: legacy.nestedEntities.map(entity => ({
374
+ id: entity.id,
375
+ name: entity.name,
376
+ parentId: entity.parentId,
377
+ propertyName: entity.propertyName,
378
+ relationshipType: entity.relationshipType || 'object',
379
+ columns: entity.columns
380
+ })),
381
+ resultFormat: legacy.resultFormat,
382
+ emptyResult: legacy.emptyResult,
383
+ typeInfo,
384
+ metadata: {
385
+ version: '1.0',
386
+ description: 'Upgraded from legacy format'
387
+ }
388
+ };
389
+ }
390
+ }
391
+ exports.JsonMappingConverter = JsonMappingConverter;
392
+ //# sourceMappingURL=JsonMappingConverter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonMappingConverter.js","sourceRoot":"","sources":["../../../src/transformers/JsonMappingConverter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Unified JSON Mapping processor that supports both legacy and model-driven formats.
3
+ *
4
+ * @deprecated Use JsonMappingConverter instead. This module is kept for backward compatibility.
5
+ * This module provides backward compatibility while encouraging migration to the model-driven format.
6
+ * It automatically detects the input format and normalizes to a consistent internal representation.
7
+ */
8
+ import { JsonMapping } from './PostgresJsonQueryBuilder';
9
+ import { ModelDrivenJsonMapping } from './ModelDrivenJsonMapping';
10
+ /**
11
+ * Unified mapping format that can handle both legacy and model-driven inputs.
12
+ */
13
+ export interface UnifiedMappingInput {
14
+ typeInfo?: {
15
+ interface: string;
16
+ importPath: string;
17
+ };
18
+ structure?: any;
19
+ protectedStringFields?: string[];
20
+ rootName?: string;
21
+ rootEntity?: any;
22
+ nestedEntities?: any[];
23
+ columns?: any;
24
+ relationships?: any;
25
+ }
26
+ /**
27
+ * Result of mapping format detection and conversion.
28
+ */
29
+ export interface MappingProcessResult {
30
+ format: 'model-driven' | 'unified' | 'legacy';
31
+ jsonMapping: JsonMapping;
32
+ originalInput: UnifiedMappingInput;
33
+ metadata?: {
34
+ typeInfo?: {
35
+ interface: string;
36
+ importPath: string;
37
+ };
38
+ protectedStringFields?: string[];
39
+ typeProtection?: any;
40
+ };
41
+ }
42
+ /**
43
+ * Detects the format of a JSON mapping configuration.
44
+ *
45
+ * @param input - The mapping configuration to analyze
46
+ * @returns The detected format type
47
+ */
48
+ export declare function detectMappingFormat(input: UnifiedMappingInput): 'model-driven' | 'unified' | 'legacy';
49
+ /**
50
+ * Main processor that unifies all JSON mapping formats into a consistent JsonMapping.
51
+ *
52
+ * @deprecated Use JsonMappingConverter.convert() instead.
53
+ *
54
+ * Features:
55
+ * - Automatic format detection
56
+ * - Backward compatibility with all existing formats
57
+ * - Metadata preservation for advanced features
58
+ * - Zero external dependencies
59
+ *
60
+ * @param input - Any supported JSON mapping format
61
+ * @returns Unified processing result with JsonMapping and metadata
62
+ */
63
+ export declare function processJsonMapping(input: UnifiedMappingInput): MappingProcessResult;
64
+ /**
65
+ * Convenience function for direct JsonMapping extraction.
66
+ *
67
+ * @deprecated Use JsonMappingConverter.toLegacyMapping() instead.
68
+ *
69
+ * @param input - Any supported JSON mapping format
70
+ * @returns JsonMapping ready for use with PostgresJsonQueryBuilder
71
+ */
72
+ export declare function unifyJsonMapping(input: UnifiedMappingInput): JsonMapping;
73
+ /**
74
+ * Type guard to check if input uses model-driven format.
75
+ *
76
+ * @param input - Mapping input to check
77
+ * @returns True if input is model-driven format
78
+ */
79
+ export declare function isModelDrivenFormat(input: UnifiedMappingInput): input is ModelDrivenJsonMapping;
80
+ /**
81
+ * Type guard to check if input uses unified format.
82
+ *
83
+ * @param input - Mapping input to check
84
+ * @returns True if input is unified format
85
+ */
86
+ export declare function isUnifiedFormat(input: UnifiedMappingInput): boolean;
87
+ /**
88
+ * Type guard to check if input uses legacy format.
89
+ *
90
+ * @param input - Mapping input to check
91
+ * @returns True if input is legacy format
92
+ */
93
+ export declare function isLegacyFormat(input: UnifiedMappingInput): boolean;
94
+ /**
95
+ * Migration helper that suggests upgrading to model-driven format.
96
+ *
97
+ * @param input - Current mapping configuration
98
+ * @returns Suggestions for migration (if applicable)
99
+ */
100
+ export declare function suggestModelDrivenMigration(input: UnifiedMappingInput): string[];