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,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified JSON Mapping processor that supports both legacy and model-driven formats.
|
|
3
|
+
*
|
|
4
|
+
* This module provides backward compatibility while encouraging migration to the model-driven format.
|
|
5
|
+
* It automatically detects the input format and normalizes to a consistent internal representation.
|
|
6
|
+
*/
|
|
7
|
+
import { convertModelDrivenMapping } from './ModelDrivenJsonMapping';
|
|
8
|
+
/**
|
|
9
|
+
* Detects the format of a JSON mapping configuration.
|
|
10
|
+
*
|
|
11
|
+
* @param input - The mapping configuration to analyze
|
|
12
|
+
* @returns The detected format type
|
|
13
|
+
*/
|
|
14
|
+
export function detectMappingFormat(input) {
|
|
15
|
+
// Model-driven format: has typeInfo and structure
|
|
16
|
+
if (input.typeInfo && input.structure) {
|
|
17
|
+
return 'model-driven';
|
|
18
|
+
}
|
|
19
|
+
// Unified format: has rootName and rootEntity
|
|
20
|
+
if (input.rootName && input.rootEntity) {
|
|
21
|
+
return 'unified';
|
|
22
|
+
}
|
|
23
|
+
// Legacy format: direct JsonMapping structure
|
|
24
|
+
if (input.columns || input.relationships) {
|
|
25
|
+
return 'legacy';
|
|
26
|
+
}
|
|
27
|
+
// Default fallback
|
|
28
|
+
return 'legacy';
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Converts legacy unified format to JsonMapping.
|
|
32
|
+
*
|
|
33
|
+
* @param input - Unified format mapping configuration
|
|
34
|
+
* @returns Converted JsonMapping
|
|
35
|
+
*/
|
|
36
|
+
function convertUnifiedFormat(input) {
|
|
37
|
+
if (!input.rootEntity) {
|
|
38
|
+
throw new Error('Unified format requires rootEntity');
|
|
39
|
+
}
|
|
40
|
+
const result = {
|
|
41
|
+
rootName: input.rootName || 'root',
|
|
42
|
+
rootEntity: {
|
|
43
|
+
id: input.rootEntity.id || 'root',
|
|
44
|
+
name: input.rootEntity.name || 'Root',
|
|
45
|
+
columns: input.rootEntity.columns || {}
|
|
46
|
+
},
|
|
47
|
+
nestedEntities: []
|
|
48
|
+
};
|
|
49
|
+
// Convert nestedEntities
|
|
50
|
+
if (input.nestedEntities && Array.isArray(input.nestedEntities)) {
|
|
51
|
+
result.nestedEntities = input.nestedEntities.map(entity => ({
|
|
52
|
+
id: entity.id || entity.propertyName || 'nested',
|
|
53
|
+
name: entity.name || entity.propertyName || 'Nested',
|
|
54
|
+
parentId: entity.parentId || result.rootEntity.id,
|
|
55
|
+
propertyName: entity.propertyName || 'nested',
|
|
56
|
+
relationshipType: entity.relationshipType || 'object',
|
|
57
|
+
columns: entity.columns || {}
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
return result;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Converts legacy format directly to JsonMapping.
|
|
64
|
+
*
|
|
65
|
+
* @param input - Legacy format mapping configuration
|
|
66
|
+
* @returns JsonMapping
|
|
67
|
+
*/
|
|
68
|
+
function convertLegacyFormat(input) {
|
|
69
|
+
const result = {
|
|
70
|
+
rootName: input.rootName || 'root',
|
|
71
|
+
rootEntity: {
|
|
72
|
+
id: 'root',
|
|
73
|
+
name: input.rootName || 'Root',
|
|
74
|
+
columns: input.columns || {}
|
|
75
|
+
},
|
|
76
|
+
nestedEntities: []
|
|
77
|
+
};
|
|
78
|
+
// Convert relationships to nestedEntities
|
|
79
|
+
if (input.relationships && typeof input.relationships === 'object') {
|
|
80
|
+
for (const [propertyName, relationship] of Object.entries(input.relationships)) {
|
|
81
|
+
// Type assertion for legacy relationship format
|
|
82
|
+
const rel = relationship;
|
|
83
|
+
result.nestedEntities.push({
|
|
84
|
+
id: propertyName,
|
|
85
|
+
name: propertyName.charAt(0).toUpperCase() + propertyName.slice(1),
|
|
86
|
+
parentId: 'root',
|
|
87
|
+
propertyName,
|
|
88
|
+
relationshipType: rel.type === 'hasMany' ? 'array' : 'object',
|
|
89
|
+
columns: rel.columns || {}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Main processor that unifies all JSON mapping formats into a consistent JsonMapping.
|
|
97
|
+
*
|
|
98
|
+
* Features:
|
|
99
|
+
* - Automatic format detection
|
|
100
|
+
* - Backward compatibility with all existing formats
|
|
101
|
+
* - Metadata preservation for advanced features
|
|
102
|
+
* - Zero external dependencies
|
|
103
|
+
*
|
|
104
|
+
* @param input - Any supported JSON mapping format
|
|
105
|
+
* @returns Unified processing result with JsonMapping and metadata
|
|
106
|
+
*/
|
|
107
|
+
export function processJsonMapping(input) {
|
|
108
|
+
const format = detectMappingFormat(input);
|
|
109
|
+
let jsonMapping;
|
|
110
|
+
let metadata = {};
|
|
111
|
+
try {
|
|
112
|
+
switch (format) {
|
|
113
|
+
case 'model-driven':
|
|
114
|
+
// Validate model-driven input
|
|
115
|
+
if (!input.typeInfo || !input.structure) {
|
|
116
|
+
throw new Error('Model-driven format requires typeInfo and structure fields');
|
|
117
|
+
}
|
|
118
|
+
// Convert model-driven to JsonMapping
|
|
119
|
+
const modelDrivenInput = {
|
|
120
|
+
typeInfo: input.typeInfo,
|
|
121
|
+
structure: input.structure
|
|
122
|
+
};
|
|
123
|
+
const converted = convertModelDrivenMapping(modelDrivenInput);
|
|
124
|
+
jsonMapping = converted.jsonMapping;
|
|
125
|
+
// Preserve metadata
|
|
126
|
+
metadata = {
|
|
127
|
+
typeInfo: input.typeInfo,
|
|
128
|
+
typeProtection: converted.typeProtection
|
|
129
|
+
};
|
|
130
|
+
break;
|
|
131
|
+
case 'unified':
|
|
132
|
+
// Validate unified input
|
|
133
|
+
if (!input.rootEntity) {
|
|
134
|
+
throw new Error('Unified format requires rootEntity field');
|
|
135
|
+
}
|
|
136
|
+
jsonMapping = convertUnifiedFormat(input);
|
|
137
|
+
break;
|
|
138
|
+
case 'legacy':
|
|
139
|
+
// Validate legacy input
|
|
140
|
+
if (!input.columns && !input.relationships) {
|
|
141
|
+
throw new Error('Legacy format requires at least columns or relationships field');
|
|
142
|
+
}
|
|
143
|
+
jsonMapping = convertLegacyFormat(input);
|
|
144
|
+
break;
|
|
145
|
+
default:
|
|
146
|
+
throw new Error(`Unsupported mapping format: ${format}`);
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
format,
|
|
150
|
+
jsonMapping,
|
|
151
|
+
originalInput: input,
|
|
152
|
+
metadata
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
throw new Error(`Failed to process JSON mapping (format: ${format}): ${error instanceof Error ? error.message : String(error)}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Convenience function for direct JsonMapping extraction.
|
|
161
|
+
*
|
|
162
|
+
* @param input - Any supported JSON mapping format
|
|
163
|
+
* @returns JsonMapping ready for use with PostgresJsonQueryBuilder
|
|
164
|
+
*/
|
|
165
|
+
export function unifyJsonMapping(input) {
|
|
166
|
+
return processJsonMapping(input).jsonMapping;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Type guard to check if input uses model-driven format.
|
|
170
|
+
*
|
|
171
|
+
* @param input - Mapping input to check
|
|
172
|
+
* @returns True if input is model-driven format
|
|
173
|
+
*/
|
|
174
|
+
export function isModelDrivenFormat(input) {
|
|
175
|
+
return detectMappingFormat(input) === 'model-driven';
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Type guard to check if input uses unified format.
|
|
179
|
+
*
|
|
180
|
+
* @param input - Mapping input to check
|
|
181
|
+
* @returns True if input is unified format
|
|
182
|
+
*/
|
|
183
|
+
export function isUnifiedFormat(input) {
|
|
184
|
+
return detectMappingFormat(input) === 'unified';
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Type guard to check if input uses legacy format.
|
|
188
|
+
*
|
|
189
|
+
* @param input - Mapping input to check
|
|
190
|
+
* @returns True if input is legacy format
|
|
191
|
+
*/
|
|
192
|
+
export function isLegacyFormat(input) {
|
|
193
|
+
return detectMappingFormat(input) === 'legacy';
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Migration helper that suggests upgrading to model-driven format.
|
|
197
|
+
*
|
|
198
|
+
* @param input - Current mapping configuration
|
|
199
|
+
* @returns Suggestions for migration (if applicable)
|
|
200
|
+
*/
|
|
201
|
+
export function suggestModelDrivenMigration(input) {
|
|
202
|
+
const format = detectMappingFormat(input);
|
|
203
|
+
const suggestions = [];
|
|
204
|
+
if (format !== 'model-driven') {
|
|
205
|
+
suggestions.push('Consider migrating to model-driven JSON mapping format');
|
|
206
|
+
suggestions.push('Benefits: Better type safety, IDE support, and future-proof design');
|
|
207
|
+
suggestions.push('See: Model-Driven JSON Mapping Guide for migration instructions');
|
|
208
|
+
if (format === 'unified') {
|
|
209
|
+
suggestions.push('Your current unified format can be automatically converted');
|
|
210
|
+
}
|
|
211
|
+
if (format === 'legacy') {
|
|
212
|
+
suggestions.push('Legacy format support will be maintained but new features target model-driven format');
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return suggestions;
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=JsonMappingUnifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonMappingUnifier.js","sourceRoot":"","sources":["../../../../src/transformers/JsonMappingUnifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model-driven JSON mapping structure that mirrors TypeScript model definitions.
|
|
3
|
+
* This approach provides intuitive, hierarchical mapping that closely resembles the target data structure.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Convert a model-driven JSON mapping to the traditional JsonMapping format.
|
|
7
|
+
* This enables backward compatibility with existing PostgresJsonQueryBuilder.
|
|
8
|
+
*/
|
|
9
|
+
export function convertModelDrivenMapping(modelMapping) {
|
|
10
|
+
const protectedStringFields = [];
|
|
11
|
+
let entityIdCounter = 0;
|
|
12
|
+
// Generate unique entity IDs
|
|
13
|
+
const generateEntityId = () => `entity_${++entityIdCounter}`;
|
|
14
|
+
// Helper function to process structure fields and extract entities
|
|
15
|
+
const processStructure = (structure, parentId = null) => {
|
|
16
|
+
const columns = {};
|
|
17
|
+
const nestedEntities = [];
|
|
18
|
+
for (const [fieldName, config] of Object.entries(structure)) {
|
|
19
|
+
if (typeof config === 'string') {
|
|
20
|
+
// Simple field mapping: "fieldName": "column_name"
|
|
21
|
+
columns[fieldName] = config;
|
|
22
|
+
}
|
|
23
|
+
else if ('column' in config && typeof config.column === 'string' && !('type' in config && (config.type === 'object' || config.type === 'array'))) {
|
|
24
|
+
// Enhanced field mapping: "fieldName": { "column": "column_name", "type": "string" }
|
|
25
|
+
const fieldConfig = config;
|
|
26
|
+
if (typeof fieldConfig === 'object' && 'column' in fieldConfig) {
|
|
27
|
+
columns[fieldName] = fieldConfig.column;
|
|
28
|
+
if (fieldConfig.type === 'string') {
|
|
29
|
+
protectedStringFields.push(fieldConfig.column);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else if ('from' in config && typeof config.from === 'string' && !('type' in config && (config.type === 'object' || config.type === 'array'))) {
|
|
34
|
+
// Legacy field mapping: "fieldName": { "from": "column_name", "type": "string" }
|
|
35
|
+
const fieldConfig = config;
|
|
36
|
+
if (typeof fieldConfig === 'object' && 'from' in fieldConfig) {
|
|
37
|
+
columns[fieldName] = fieldConfig.from;
|
|
38
|
+
if (fieldConfig.type === 'string') {
|
|
39
|
+
protectedStringFields.push(fieldConfig.from);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else if ('type' in config && (config.type === 'object' || config.type === 'array')) {
|
|
44
|
+
// Nested structure: object or array
|
|
45
|
+
const nestedStructure = config;
|
|
46
|
+
const entityId = generateEntityId();
|
|
47
|
+
const processedNested = processStructure(nestedStructure.structure, entityId);
|
|
48
|
+
nestedEntities.push({
|
|
49
|
+
id: entityId,
|
|
50
|
+
name: fieldName.charAt(0).toUpperCase() + fieldName.slice(1), // Capitalize first letter
|
|
51
|
+
parentId: parentId || 'root',
|
|
52
|
+
propertyName: fieldName,
|
|
53
|
+
relationshipType: nestedStructure.type,
|
|
54
|
+
columns: processedNested.columns
|
|
55
|
+
});
|
|
56
|
+
// Add nested entities from deeper levels
|
|
57
|
+
nestedEntities.push(...processedNested.nestedEntities.map(entity => (Object.assign(Object.assign({}, entity), { parentId: entity.parentId === 'root' ? entityId : entity.parentId }))));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return { columns, nestedEntities };
|
|
61
|
+
};
|
|
62
|
+
// Process the root structure
|
|
63
|
+
const processed = processStructure(modelMapping.structure); // Build the traditional JsonMapping
|
|
64
|
+
const jsonMapping = {
|
|
65
|
+
rootName: 'root', // Default root name
|
|
66
|
+
rootEntity: {
|
|
67
|
+
id: 'root',
|
|
68
|
+
name: 'Root',
|
|
69
|
+
columns: processed.columns
|
|
70
|
+
},
|
|
71
|
+
nestedEntities: processed.nestedEntities
|
|
72
|
+
};
|
|
73
|
+
// Add typeInfo for backward compatibility
|
|
74
|
+
jsonMapping.typeInfo = modelMapping.typeInfo;
|
|
75
|
+
return {
|
|
76
|
+
jsonMapping,
|
|
77
|
+
typeProtection: { protectedStringFields }
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Validate that a model-driven mapping structure is well-formed.
|
|
82
|
+
*/
|
|
83
|
+
export function validateModelDrivenMapping(mapping) {
|
|
84
|
+
const errors = [];
|
|
85
|
+
// Validate typeInfo
|
|
86
|
+
if (!mapping.typeInfo) {
|
|
87
|
+
errors.push('typeInfo is required');
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
if (!mapping.typeInfo.interface) {
|
|
91
|
+
errors.push('typeInfo.interface is required');
|
|
92
|
+
}
|
|
93
|
+
if (!mapping.typeInfo.importPath) {
|
|
94
|
+
errors.push('typeInfo.importPath is required');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Validate structure
|
|
98
|
+
if (!mapping.structure || typeof mapping.structure !== 'object') {
|
|
99
|
+
errors.push('structure is required and must be an object');
|
|
100
|
+
}
|
|
101
|
+
return errors;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=ModelDrivenJsonMapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelDrivenJsonMapping.js","sourceRoot":"","sources":["../../../../src/transformers/ModelDrivenJsonMapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -147,29 +147,48 @@ export class PostgresArrayEntityCteBuilder {
|
|
|
147
147
|
buildDepthCte(infos, currentCteAlias, currentCtes, depth, mapping) {
|
|
148
148
|
var _a;
|
|
149
149
|
// Collect columns that will be compressed into arrays
|
|
150
|
+
// This includes both direct columns and columns from nested entities within the array
|
|
150
151
|
const arrayColumns = new Set();
|
|
151
152
|
infos.forEach(info => {
|
|
153
|
+
// Add direct columns from the array entity
|
|
152
154
|
Object.values(info.entity.columns).forEach(col => arrayColumns.add(col));
|
|
155
|
+
// Also add columns from all nested entities within this array entity
|
|
156
|
+
const collectNestedColumns = (parentEntityId) => {
|
|
157
|
+
mapping.nestedEntities
|
|
158
|
+
.filter(nestedEntity => nestedEntity.parentId === parentEntityId)
|
|
159
|
+
.forEach(nestedEntity => {
|
|
160
|
+
Object.values(nestedEntity.columns).forEach(column => {
|
|
161
|
+
const columnName = typeof column === 'string' ? column : column.column;
|
|
162
|
+
arrayColumns.add(columnName);
|
|
163
|
+
});
|
|
164
|
+
// Recursively collect from deeper nested entities
|
|
165
|
+
collectNestedColumns(nestedEntity.id);
|
|
166
|
+
});
|
|
167
|
+
};
|
|
168
|
+
collectNestedColumns(info.entity.id);
|
|
153
169
|
});
|
|
154
170
|
// Get columns from previous CTE
|
|
155
171
|
const prevCte = (_a = currentCtes.find(c => c.aliasExpression.table.name === currentCteAlias)) === null || _a === void 0 ? void 0 : _a.query;
|
|
156
172
|
if (!prevCte) {
|
|
157
173
|
throw new Error(`CTE not found: ${currentCteAlias}`);
|
|
158
174
|
}
|
|
159
|
-
const prevSelects = new SelectValueCollector(null, currentCtes).collect(prevCte);
|
|
160
|
-
// Build SELECT items: columns that are NOT being compressed (for GROUP BY)
|
|
175
|
+
const prevSelects = new SelectValueCollector(null, currentCtes).collect(prevCte); // Build SELECT items: columns that are NOT being compressed (for GROUP BY)
|
|
161
176
|
const groupByItems = [];
|
|
162
177
|
const selectItems = [];
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
178
|
+
// Get columns from the current level's array entities that will be aggregated
|
|
179
|
+
// These should be included in GROUP BY since they're being processed at this level
|
|
180
|
+
const currentLevelArrayColumns = new Set();
|
|
181
|
+
infos.forEach(info => {
|
|
182
|
+
Object.values(info.entity.columns).forEach(col => currentLevelArrayColumns.add(col));
|
|
168
183
|
});
|
|
184
|
+
// Collect array entity columns organized by depth for GROUP BY exclusion strategy
|
|
185
|
+
const arrayEntityColumns = this.collectArrayEntityColumnsByDepth(mapping, depth);
|
|
186
|
+
// Process existing SELECT variables to determine which should be included in GROUP BY
|
|
187
|
+
this.processSelectVariablesForGroupBy(prevSelects, arrayColumns, arrayEntityColumns, depth, selectItems, groupByItems);
|
|
169
188
|
// Add JSON aggregation columns for each array entity at this depth
|
|
170
189
|
for (const info of infos) {
|
|
171
|
-
const agg = this.buildAggregationDetailsForArrayEntity(info.entity, mapping.nestedEntities, new Map()
|
|
172
|
-
|
|
190
|
+
const agg = this.buildAggregationDetailsForArrayEntity(info.entity, mapping.nestedEntities, new Map() // allEntities - not needed for array aggregation
|
|
191
|
+
);
|
|
173
192
|
selectItems.push(new SelectItem(agg.jsonAgg, info.entity.propertyName));
|
|
174
193
|
}
|
|
175
194
|
// Create the new CTE
|
|
@@ -192,12 +211,11 @@ export class PostgresArrayEntityCteBuilder {
|
|
|
192
211
|
* @param entity The array entity being processed
|
|
193
212
|
* @param nestedEntities All nested entities from the mapping
|
|
194
213
|
* @param allEntities Map of all entities (not used in current implementation)
|
|
195
|
-
* @param useJsonb Whether to use JSONB functions
|
|
196
214
|
* @returns Object containing the JSON aggregation function
|
|
197
215
|
*/
|
|
198
|
-
buildAggregationDetailsForArrayEntity(entity, nestedEntities, allEntities
|
|
199
|
-
// Build JSON object for array elements
|
|
200
|
-
const jsonBuildFunction =
|
|
216
|
+
buildAggregationDetailsForArrayEntity(entity, nestedEntities, allEntities) {
|
|
217
|
+
// Build JSON object for array elements using JSONB functions
|
|
218
|
+
const jsonBuildFunction = "jsonb_build_object";
|
|
201
219
|
const args = [];
|
|
202
220
|
// Add the entity's own columns
|
|
203
221
|
Object.entries(entity.columns).forEach(([jsonKey, sqlColumn]) => {
|
|
@@ -210,7 +228,8 @@ export class PostgresArrayEntityCteBuilder {
|
|
|
210
228
|
args.push(new LiteralValue(childEntity.propertyName));
|
|
211
229
|
if (childEntity.relationshipType === "object") {
|
|
212
230
|
// For object relationships, use pre-computed JSON column
|
|
213
|
-
|
|
231
|
+
// Use entity ID instead of name to avoid naming conflicts
|
|
232
|
+
const jsonColumnName = `${childEntity.id.toLowerCase()}_json`;
|
|
214
233
|
args.push(new ColumnReference(null, new IdentifierString(jsonColumnName)));
|
|
215
234
|
}
|
|
216
235
|
else if (childEntity.relationshipType === "array") {
|
|
@@ -220,11 +239,180 @@ export class PostgresArrayEntityCteBuilder {
|
|
|
220
239
|
});
|
|
221
240
|
// Create JSON object
|
|
222
241
|
const jsonObject = new FunctionCall(null, new RawString(jsonBuildFunction), new ValueList(args), null);
|
|
223
|
-
// Create JSON aggregation
|
|
224
|
-
|
|
242
|
+
// Create JSON aggregation using JSONB with NULL filtering
|
|
243
|
+
// Use FILTER clause to exclude rows where primary key is NULL (no actual data)
|
|
244
|
+
const jsonAggFunction = "jsonb_agg";
|
|
245
|
+
// Find the primary column (typically the first column) to use for NULL filtering
|
|
246
|
+
const primaryColumn = Object.values(entity.columns)[0];
|
|
247
|
+
// For now, create standard jsonb_agg and handle NULL filtering in post-processing
|
|
248
|
+
// TODO: Implement proper FILTER clause support in SQL AST
|
|
225
249
|
const jsonAgg = new FunctionCall(null, new RawString(jsonAggFunction), new ValueList([jsonObject]), null);
|
|
226
250
|
return { jsonAgg };
|
|
227
251
|
}
|
|
252
|
+
/**
|
|
253
|
+
* Collects array entity columns organized by depth for the GROUP BY exclusion strategy.
|
|
254
|
+
*
|
|
255
|
+
* This method creates a mapping from depth levels to sets of column names that belong to
|
|
256
|
+
* array entities at each depth. This is used to determine which columns should be excluded
|
|
257
|
+
* from GROUP BY clauses when performing array aggregation at specific depths.
|
|
258
|
+
*
|
|
259
|
+
* @param mapping The JSON mapping configuration containing all entities
|
|
260
|
+
* @param currentDepth The current aggregation depth being processed
|
|
261
|
+
* @returns A map where keys are depth levels and values are sets of column names
|
|
262
|
+
*/
|
|
263
|
+
collectArrayEntityColumnsByDepth(mapping, currentDepth) {
|
|
264
|
+
const arrayEntitiesByDepth = new Map(); // Initialize depth maps for current and deeper levels
|
|
265
|
+
// Use a reasonable maximum depth limit to avoid infinite loops
|
|
266
|
+
const maxDepth = Math.max(currentDepth + 3, 5); // Allow up to 3 additional levels or minimum 5 levels
|
|
267
|
+
for (let d = currentDepth; d <= maxDepth; d++) {
|
|
268
|
+
arrayEntitiesByDepth.set(d, new Set());
|
|
269
|
+
}
|
|
270
|
+
// Process all array entities to collect their columns by depth
|
|
271
|
+
mapping.nestedEntities
|
|
272
|
+
.filter(entity => entity.relationshipType === 'array')
|
|
273
|
+
.forEach(entity => {
|
|
274
|
+
// Calculate entity depth in the hierarchy
|
|
275
|
+
const entityDepth = this.calculateEntityDepth(entity, mapping);
|
|
276
|
+
if (!arrayEntitiesByDepth.has(entityDepth)) {
|
|
277
|
+
arrayEntitiesByDepth.set(entityDepth, new Set());
|
|
278
|
+
}
|
|
279
|
+
// Add direct columns from the array entity
|
|
280
|
+
this.addEntityColumnsToDepthSet(entity, entityDepth, arrayEntitiesByDepth);
|
|
281
|
+
// Collect columns from all descendant entities recursively
|
|
282
|
+
this.collectDescendantColumns(entity.id, entityDepth, mapping, arrayEntitiesByDepth);
|
|
283
|
+
});
|
|
284
|
+
return arrayEntitiesByDepth;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Calculates the depth of an entity in the hierarchy by traversing up to the root.
|
|
288
|
+
*
|
|
289
|
+
* @param entity The entity to calculate depth for
|
|
290
|
+
* @param mapping The JSON mapping containing all entities
|
|
291
|
+
* @returns The depth level (0 for root level, 1 for first level, etc.)
|
|
292
|
+
*/
|
|
293
|
+
calculateEntityDepth(entity, mapping) {
|
|
294
|
+
let entityDepth = 0;
|
|
295
|
+
let currentEntity = entity;
|
|
296
|
+
while (currentEntity.parentId && currentEntity.parentId !== mapping.rootEntity.id) {
|
|
297
|
+
entityDepth++;
|
|
298
|
+
currentEntity = mapping.nestedEntities.find(e => e.id === currentEntity.parentId) || currentEntity;
|
|
299
|
+
}
|
|
300
|
+
return entityDepth;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Adds all columns from an entity to the specified depth set.
|
|
304
|
+
*
|
|
305
|
+
* @param entity The entity whose columns should be added
|
|
306
|
+
* @param depth The depth level to add columns to
|
|
307
|
+
* @param arrayEntitiesByDepth The map to update
|
|
308
|
+
*/
|
|
309
|
+
addEntityColumnsToDepthSet(entity, depth, arrayEntitiesByDepth) {
|
|
310
|
+
Object.values(entity.columns).forEach(column => {
|
|
311
|
+
const columnName = typeof column === 'string' ? column : column.column;
|
|
312
|
+
arrayEntitiesByDepth.get(depth).add(columnName);
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Recursively collects columns from all descendant entities under a parent entity.
|
|
317
|
+
*
|
|
318
|
+
* This method ensures that all nested entities (at any depth) under an array entity
|
|
319
|
+
* have their columns properly categorized by the array entity's depth level.
|
|
320
|
+
*
|
|
321
|
+
* @param parentEntityId The ID of the parent entity
|
|
322
|
+
* @param targetDepth The depth level to assign collected columns to
|
|
323
|
+
* @param mapping The JSON mapping containing all entities
|
|
324
|
+
* @param arrayEntitiesByDepth The map to update with collected columns
|
|
325
|
+
*/
|
|
326
|
+
collectDescendantColumns(parentEntityId, targetDepth, mapping, arrayEntitiesByDepth) {
|
|
327
|
+
mapping.nestedEntities
|
|
328
|
+
.filter(nestedEntity => nestedEntity.parentId === parentEntityId)
|
|
329
|
+
.forEach(nestedEntity => {
|
|
330
|
+
// Add all columns from this descendant to the target depth
|
|
331
|
+
this.addEntityColumnsToDepthSet(nestedEntity, targetDepth, arrayEntitiesByDepth);
|
|
332
|
+
// Recursively collect from deeper nested entities
|
|
333
|
+
this.collectDescendantColumns(nestedEntity.id, targetDepth, mapping, arrayEntitiesByDepth);
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Processes SELECT variables to determine which should be included in GROUP BY clauses.
|
|
338
|
+
*
|
|
339
|
+
* This method implements the core logic for deciding which columns from previous CTEs
|
|
340
|
+
* should be included in the GROUP BY clause when performing array aggregation. It handles
|
|
341
|
+
* special cases for JSON columns and applies depth-based filtering to prevent over-grouping.
|
|
342
|
+
*
|
|
343
|
+
* @param prevSelects SELECT variables from the previous CTE
|
|
344
|
+
* @param arrayColumns Columns that are being aggregated (should be excluded from GROUP BY)
|
|
345
|
+
* @param arrayEntitiesByDepth Map of depth levels to their column sets
|
|
346
|
+
* @param currentDepth The current aggregation depth being processed
|
|
347
|
+
* @param selectItems Output array for SELECT items
|
|
348
|
+
* @param groupByItems Output array for GROUP BY items
|
|
349
|
+
*/
|
|
350
|
+
processSelectVariablesForGroupBy(prevSelects, arrayColumns, arrayEntitiesByDepth, currentDepth, selectItems, groupByItems) {
|
|
351
|
+
prevSelects.forEach(sv => {
|
|
352
|
+
if (!arrayColumns.has(sv.name)) {
|
|
353
|
+
const shouldInclude = this.shouldIncludeColumnInGroupBy(sv.name, arrayEntitiesByDepth, currentDepth);
|
|
354
|
+
if (shouldInclude) {
|
|
355
|
+
selectItems.push(new SelectItem(new ColumnReference(null, new IdentifierString(sv.name)), sv.name));
|
|
356
|
+
groupByItems.push(new ColumnReference(null, new IdentifierString(sv.name)));
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Determines whether a column should be included in the GROUP BY clause.
|
|
363
|
+
*
|
|
364
|
+
* This method applies depth-based filtering and special handling for JSON columns
|
|
365
|
+
* to prevent over-grouping during array aggregation. It implements heuristics for
|
|
366
|
+
* excluding columns that belong to nested entities within array contexts.
|
|
367
|
+
*
|
|
368
|
+
* @param columnName The name of the column to evaluate
|
|
369
|
+
* @param arrayEntitiesByDepth Map of depth levels to their column sets
|
|
370
|
+
* @param currentDepth The current aggregation depth
|
|
371
|
+
* @returns True if the column should be included in GROUP BY, false otherwise
|
|
372
|
+
*/
|
|
373
|
+
shouldIncludeColumnInGroupBy(columnName, arrayEntitiesByDepth, currentDepth) {
|
|
374
|
+
const isJsonColumn = columnName.endsWith('_json');
|
|
375
|
+
let shouldInclude = true;
|
|
376
|
+
// Check if this column belongs to array entities at current depth or deeper
|
|
377
|
+
// These columns are being aggregated and should not be in GROUP BY
|
|
378
|
+
for (const [entityDepth, columns] of arrayEntitiesByDepth.entries()) {
|
|
379
|
+
if (entityDepth >= currentDepth && columns.has(columnName)) {
|
|
380
|
+
shouldInclude = false;
|
|
381
|
+
break;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
// Special handling for JSON columns to prevent over-grouping
|
|
385
|
+
if (isJsonColumn && columnName.startsWith('entity_')) {
|
|
386
|
+
shouldInclude = this.shouldIncludeJsonColumn(columnName, currentDepth);
|
|
387
|
+
}
|
|
388
|
+
// Always include non-entity JSON columns (e.g., computed columns)
|
|
389
|
+
return shouldInclude || (isJsonColumn && !columnName.startsWith('entity_'));
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Applies heuristics to determine if an entity JSON column should be included in GROUP BY.
|
|
393
|
+
*
|
|
394
|
+
* This method uses entity numbering patterns to identify deeply nested entities
|
|
395
|
+
* that should be excluded from GROUP BY when processing array aggregations.
|
|
396
|
+
* This is a simplified heuristic approach that works for current use cases.
|
|
397
|
+
*
|
|
398
|
+
* @param columnName The JSON column name (expected format: entity_N_json)
|
|
399
|
+
* @param currentDepth The current aggregation depth
|
|
400
|
+
* @returns True if the JSON column should be included, false otherwise
|
|
401
|
+
*/
|
|
402
|
+
shouldIncludeJsonColumn(columnName, currentDepth) {
|
|
403
|
+
const entityMatch = columnName.match(/entity_(\d+)_json/);
|
|
404
|
+
if (!entityMatch) {
|
|
405
|
+
return true;
|
|
406
|
+
}
|
|
407
|
+
// For depth > 0, exclude JSON columns from highly nested entities
|
|
408
|
+
// This heuristic assumes entities with higher numbers are more deeply nested
|
|
409
|
+
if (currentDepth > 0) {
|
|
410
|
+
const entityNumber = parseInt(entityMatch[1]);
|
|
411
|
+
// Entities with numbers > 2 are typically nested within arrays and should be excluded
|
|
412
|
+
return entityNumber <= 2;
|
|
413
|
+
}
|
|
414
|
+
return true;
|
|
415
|
+
}
|
|
228
416
|
}
|
|
229
417
|
// Constants for consistent naming conventions
|
|
230
418
|
PostgresArrayEntityCteBuilder.CTE_ARRAY_PREFIX = 'cte_array_depth_';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostgresArrayEntityCteBuilder.js","sourceRoot":"","sources":["../../../../src/transformers/PostgresArrayEntityCteBuilder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PostgresArrayEntityCteBuilder.js","sourceRoot":"","sources":["../../../../src/transformers/PostgresArrayEntityCteBuilder.ts"],"names":[],"mappings":"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"}
|