bridgelist 1.0.2 → 1.0.4
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/dist/analyzers/ast-analyzer.js +167 -191
- package/dist/analyzers/ast-analyzer.js.map +1 -1
- package/docs/example-mapping.html +1170 -836
- package/package.json +1 -1
|
@@ -64,10 +64,11 @@ function analyzeMethod(filePath, className, methodName) {
|
|
|
64
64
|
return result;
|
|
65
65
|
}
|
|
66
66
|
function extractMappings(methodNode) {
|
|
67
|
+
// Initialize results array
|
|
67
68
|
const results = [];
|
|
68
|
-
//
|
|
69
|
-
const
|
|
70
|
-
//
|
|
69
|
+
// Store all variable declarations with their initializers
|
|
70
|
+
const variableDeclarations = new Map();
|
|
71
|
+
// Identify all parameters of the method
|
|
71
72
|
const parameterNames = new Set();
|
|
72
73
|
if (methodNode.parameters) {
|
|
73
74
|
methodNode.parameters.forEach(param => {
|
|
@@ -76,211 +77,186 @@ function analyzeMethod(filePath, className, methodName) {
|
|
|
76
77
|
}
|
|
77
78
|
});
|
|
78
79
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
let baseName = "";
|
|
90
|
-
// navigate through PropertyAccessExpression recursively
|
|
91
|
-
while (typescript_1.default.isPropertyAccessExpression(current)) {
|
|
92
|
-
partialPaths.add(current.getText());
|
|
93
|
-
current = current.expression;
|
|
94
|
-
}
|
|
95
|
-
// now current is the base variable
|
|
96
|
-
if (typescript_1.default.isIdentifier(current)) {
|
|
97
|
-
baseName = current.getText();
|
|
98
|
-
}
|
|
99
|
-
// verify if base variable is a parameter or this
|
|
100
|
-
const isSourceObject = parameterNames.has(baseName) || baseName === "this";
|
|
101
|
-
// if base variable is a parameter or this, save PropertyAccessExpression
|
|
102
|
-
if (isSourceObject && typescript_1.default.isIdentifier(n.name)) {
|
|
103
|
-
allPropertyAccesses.add(fullText);
|
|
80
|
+
// Keep track of decorator nodes to exclude them from analysis
|
|
81
|
+
const decoratorNodes = new Set();
|
|
82
|
+
if (methodNode.modifiers) {
|
|
83
|
+
methodNode.modifiers.forEach(modifier => {
|
|
84
|
+
if (typescript_1.default.isDecorator(modifier)) {
|
|
85
|
+
decoratorNodes.add(modifier);
|
|
86
|
+
// Also add the decorator's children to the exclusion set
|
|
87
|
+
function addAllChildren(node) {
|
|
88
|
+
decoratorNodes.add(node);
|
|
89
|
+
typescript_1.default.forEachChild(node, addAllChildren);
|
|
104
90
|
}
|
|
105
|
-
|
|
106
|
-
typescript_1.default.forEachChild(n, visit);
|
|
107
|
-
}
|
|
108
|
-
visit(node);
|
|
109
|
-
// keep only PropertyAccessExpressions with a full path
|
|
110
|
-
allPropertyAccesses.forEach(path => {
|
|
111
|
-
if (!partialPaths.has(path)) {
|
|
112
|
-
sourceFields.add(path);
|
|
91
|
+
typescript_1.default.forEachChild(modifier, addAllChildren);
|
|
113
92
|
}
|
|
114
93
|
});
|
|
115
|
-
return Array.from(sourceFields);
|
|
116
94
|
}
|
|
117
|
-
//
|
|
118
|
-
function
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
95
|
+
// Check if a node is part of a decorator
|
|
96
|
+
function isPartOfDecorator(node) {
|
|
97
|
+
return decoratorNodes.has(node);
|
|
98
|
+
}
|
|
99
|
+
// First pass: collect all variable declarations
|
|
100
|
+
function collectVariables(node) {
|
|
101
|
+
// Skip decorator nodes
|
|
102
|
+
if (isPartOfDecorator(node)) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// Handle variable declarations
|
|
106
|
+
if (typescript_1.default.isVariableDeclaration(node) && typescript_1.default.isIdentifier(node.name) && node.initializer) {
|
|
107
|
+
variableDeclarations.set(node.name.getText(), node.initializer);
|
|
108
|
+
}
|
|
109
|
+
typescript_1.default.forEachChild(node, collectVariables);
|
|
110
|
+
}
|
|
111
|
+
// Second pass: analyze object property assignments and mapping relations
|
|
112
|
+
function analyzePropertyAssignments(node) {
|
|
113
|
+
// Skip decorator nodes
|
|
114
|
+
if (isPartOfDecorator(node)) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
// Handle object literal properties
|
|
118
|
+
if (typescript_1.default.isPropertyAssignment(node) && node.parent && typescript_1.default.isObjectLiteralExpression(node.parent)) {
|
|
119
|
+
const targetField = node.name.getText();
|
|
120
|
+
const initializer = node.initializer;
|
|
121
|
+
// Find the variable that this object belongs to
|
|
122
|
+
let containerVar = findContainingVariable(node.parent);
|
|
123
|
+
// Process different types of initializers
|
|
124
|
+
if (typescript_1.default.isElementAccessExpression(initializer)) {
|
|
125
|
+
// Handle element access (e.g., obj[key])
|
|
126
|
+
processElementAccess(initializer, targetField, containerVar);
|
|
127
|
+
}
|
|
128
|
+
else if (typescript_1.default.isPropertyAccessExpression(initializer)) {
|
|
129
|
+
// Handle property access (e.g., obj.prop)
|
|
130
|
+
results.push({
|
|
131
|
+
targetField: containerVar ? `${containerVar}.${targetField}` : targetField,
|
|
132
|
+
sourceField: initializer.getText()
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
else if (typescript_1.default.isCallExpression(initializer)) {
|
|
136
|
+
// Handle function calls
|
|
137
|
+
const sourceFields = findPropertyAccesses(initializer);
|
|
138
|
+
results.push({
|
|
139
|
+
targetField: containerVar ? `${containerVar}.${targetField}` : targetField,
|
|
140
|
+
sourceField: sourceFields.length > 0 ? sourceFields.join(', ') : initializer.getText(),
|
|
141
|
+
transformation: initializer.expression.getText()
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
else if (typescript_1.default.isObjectLiteralExpression(initializer)) {
|
|
145
|
+
// For nested objects, we'll handle them recursively
|
|
146
|
+
// Child properties will be analyzed in subsequent recursive calls
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
// Handle other expressions or literals
|
|
150
|
+
const sourceFields = findPropertyAccesses(initializer);
|
|
151
|
+
if (sourceFields.length > 0) {
|
|
152
|
+
results.push({
|
|
153
|
+
targetField: containerVar ? `${containerVar}.${targetField}` : targetField,
|
|
154
|
+
sourceField: sourceFields.join(', '),
|
|
155
|
+
transformation: "Expression"
|
|
156
|
+
});
|
|
148
157
|
}
|
|
149
158
|
else {
|
|
150
|
-
//
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
}
|
|
157
|
-
else if (typescript_1.default.isCallExpression(initializer)) {
|
|
158
|
-
// find all PropertyAccessExpressions in the arguments of the function call
|
|
159
|
-
const sourceFields = initializer.arguments.flatMap(arg => findPropertyAccesses(arg));
|
|
160
|
-
nestedResults.push({
|
|
161
|
-
targetField: fieldPath,
|
|
162
|
-
sourceField: sourceFields.length > 0 ? sourceFields.join(', ') : initializer.arguments.map(arg => arg.getText()).join(', '),
|
|
163
|
-
transformation: initializer.expression.getText()
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
const sourceFields = findPropertyAccesses(initializer);
|
|
168
|
-
if (sourceFields.length > 0) {
|
|
169
|
-
nestedResults.push({
|
|
170
|
-
targetField: fieldPath,
|
|
171
|
-
sourceField: sourceFields.join(', '),
|
|
172
|
-
transformation: initializer.kind !== typescript_1.default.SyntaxKind.StringLiteral &&
|
|
173
|
-
initializer.kind !== typescript_1.default.SyntaxKind.NumericLiteral &&
|
|
174
|
-
initializer.kind !== typescript_1.default.SyntaxKind.TrueKeyword &&
|
|
175
|
-
initializer.kind !== typescript_1.default.SyntaxKind.FalseKeyword ?
|
|
176
|
-
'Transformed' : 'Direct mapping'
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
nestedResults.push({
|
|
181
|
-
targetField: fieldPath,
|
|
182
|
-
sourceField: 'Constant value',
|
|
183
|
-
transformation: initializer.getText()
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
}
|
|
159
|
+
// Constant values
|
|
160
|
+
results.push({
|
|
161
|
+
targetField: containerVar ? `${containerVar}.${targetField}` : targetField,
|
|
162
|
+
sourceField: "Constant value",
|
|
163
|
+
transformation: initializer.getText()
|
|
164
|
+
});
|
|
187
165
|
}
|
|
188
166
|
}
|
|
167
|
+
}
|
|
168
|
+
typescript_1.default.forEachChild(node, analyzePropertyAssignments);
|
|
169
|
+
}
|
|
170
|
+
// Helper to find the variable an object belongs to
|
|
171
|
+
function findContainingVariable(objectLiteral) {
|
|
172
|
+
let result;
|
|
173
|
+
variableDeclarations.forEach((value, key) => {
|
|
174
|
+
if (value === objectLiteral) {
|
|
175
|
+
result = key;
|
|
176
|
+
}
|
|
189
177
|
});
|
|
190
|
-
return
|
|
178
|
+
return result;
|
|
191
179
|
}
|
|
192
|
-
//
|
|
193
|
-
function
|
|
194
|
-
|
|
195
|
-
if (typescript_1.default.
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
180
|
+
// Helper to process element access expressions
|
|
181
|
+
function processElementAccess(expr, targetField, containerVar) {
|
|
182
|
+
const objExpr = expr.expression;
|
|
183
|
+
if (typescript_1.default.isPropertyAccessExpression(objExpr) &&
|
|
184
|
+
objExpr.expression &&
|
|
185
|
+
typescript_1.default.isIdentifier(objExpr.expression) &&
|
|
186
|
+
parameterNames.has(objExpr.expression.getText())) {
|
|
187
|
+
// Handle dynamic property access with string concatenation
|
|
188
|
+
if (typescript_1.default.isBinaryExpression(expr.argumentExpression) &&
|
|
189
|
+
expr.argumentExpression.operatorToken.kind === typescript_1.default.SyntaxKind.PlusToken &&
|
|
190
|
+
typescript_1.default.isPropertyAccessExpression(expr.argumentExpression.left) &&
|
|
191
|
+
typescript_1.default.isStringLiteral(expr.argumentExpression.right)) {
|
|
192
|
+
const prefix = expr.argumentExpression.left.getText();
|
|
193
|
+
const suffix = expr.argumentExpression.right.text;
|
|
194
|
+
results.push({
|
|
195
|
+
targetField: containerVar ? `${containerVar}.${targetField}` : targetField,
|
|
196
|
+
sourceField: `Dynamic access: ${objExpr.getText()}[${prefix} + '${suffix}']`,
|
|
197
|
+
transformation: "Dynamic property mapping"
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
// Handle direct string literal access
|
|
201
|
+
else if (typescript_1.default.isStringLiteral(expr.argumentExpression)) {
|
|
202
|
+
results.push({
|
|
203
|
+
targetField: containerVar ? `${containerVar}.${targetField}` : targetField,
|
|
204
|
+
sourceField: `${objExpr.getText()}['${expr.argumentExpression.text}']`
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
// Handle other dynamic access
|
|
208
|
+
else {
|
|
209
|
+
results.push({
|
|
210
|
+
targetField: containerVar ? `${containerVar}.${targetField}` : targetField,
|
|
211
|
+
sourceField: `Dynamic access: ${expr.getText()}`,
|
|
212
|
+
transformation: "Dynamic property mapping"
|
|
213
|
+
});
|
|
214
|
+
}
|
|
203
215
|
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
216
|
+
}
|
|
217
|
+
// Find all property accesses in an expression
|
|
218
|
+
function findPropertyAccesses(node) {
|
|
219
|
+
const sourceFields = new Set();
|
|
220
|
+
function visit(n) {
|
|
221
|
+
// Skip decorator nodes
|
|
222
|
+
if (isPartOfDecorator(n)) {
|
|
223
|
+
return;
|
|
211
224
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
225
|
+
if (typescript_1.default.isPropertyAccessExpression(n) &&
|
|
226
|
+
n.expression &&
|
|
227
|
+
typescript_1.default.isIdentifier(n.expression) &&
|
|
228
|
+
parameterNames.has(n.expression.getText())) {
|
|
229
|
+
sourceFields.add(n.getText());
|
|
215
230
|
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
231
|
+
else if (typescript_1.default.isElementAccessExpression(n) &&
|
|
232
|
+
n.expression &&
|
|
233
|
+
typescript_1.default.isPropertyAccessExpression(n.expression) &&
|
|
234
|
+
n.expression.expression &&
|
|
235
|
+
typescript_1.default.isIdentifier(n.expression.expression) &&
|
|
236
|
+
parameterNames.has(n.expression.expression.getText())) {
|
|
237
|
+
if (typescript_1.default.isStringLiteral(n.argumentExpression)) {
|
|
238
|
+
sourceFields.add(`${n.expression.getText()}['${n.argumentExpression.text}']`);
|
|
239
|
+
}
|
|
240
|
+
else if (typescript_1.default.isBinaryExpression(n.argumentExpression) &&
|
|
241
|
+
n.argumentExpression.operatorToken.kind === typescript_1.default.SyntaxKind.PlusToken &&
|
|
242
|
+
typescript_1.default.isPropertyAccessExpression(n.argumentExpression.left) &&
|
|
243
|
+
typescript_1.default.isStringLiteral(n.argumentExpression.right)) {
|
|
244
|
+
const prefix = n.argumentExpression.left.getText();
|
|
245
|
+
const suffix = n.argumentExpression.right.text;
|
|
246
|
+
sourceFields.add(`${n.expression.getText()}[${prefix} + '${suffix}']`);
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
sourceFields.add(n.getText());
|
|
222
250
|
}
|
|
223
251
|
}
|
|
224
|
-
|
|
225
|
-
if (objectLiteral) {
|
|
226
|
-
// analyze all properties in the object literal
|
|
227
|
-
objectLiteral.properties.forEach(prop => {
|
|
228
|
-
if (typescript_1.default.isPropertyAssignment(prop)) {
|
|
229
|
-
const targetField = prop.name.getText();
|
|
230
|
-
const initializer = prop.initializer;
|
|
231
|
-
// simple PropertyAccessExpression
|
|
232
|
-
if (typescript_1.default.isPropertyAccessExpression(initializer)) {
|
|
233
|
-
results.push({
|
|
234
|
-
targetField,
|
|
235
|
-
sourceField: initializer.getText()
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
// complex case: FunctionCallExpression
|
|
239
|
-
else if (typescript_1.default.isCallExpression(initializer)) {
|
|
240
|
-
// find all PropertyAccessExpressions in the arguments of the function call
|
|
241
|
-
const sourceFields = initializer.arguments.flatMap(arg => findPropertyAccesses(arg));
|
|
242
|
-
results.push({
|
|
243
|
-
targetField,
|
|
244
|
-
sourceField: sourceFields.length > 0 ? sourceFields.join(', ') : initializer.arguments.map(arg => arg.getText()).join(', '),
|
|
245
|
-
transformation: initializer.expression.getText()
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
// complex case: nested ObjectLiteralExpression
|
|
249
|
-
else if (typescript_1.default.isObjectLiteralExpression(initializer)) {
|
|
250
|
-
// extract all nested mappings from the nested object literal
|
|
251
|
-
const nestedMappings = extractNestedProperties(initializer, targetField);
|
|
252
|
-
results.push(...nestedMappings);
|
|
253
|
-
}
|
|
254
|
-
// other cases: constant value or transformation
|
|
255
|
-
else {
|
|
256
|
-
const sourceFields = findPropertyAccesses(initializer);
|
|
257
|
-
if (sourceFields.length > 0) {
|
|
258
|
-
results.push({
|
|
259
|
-
targetField,
|
|
260
|
-
sourceField: sourceFields.join(', '),
|
|
261
|
-
transformation: initializer.kind !== typescript_1.default.SyntaxKind.StringLiteral &&
|
|
262
|
-
initializer.kind !== typescript_1.default.SyntaxKind.NumericLiteral &&
|
|
263
|
-
initializer.kind !== typescript_1.default.SyntaxKind.TrueKeyword &&
|
|
264
|
-
initializer.kind !== typescript_1.default.SyntaxKind.FalseKeyword ?
|
|
265
|
-
'Transformed' : 'Direct mapping'
|
|
266
|
-
});
|
|
267
|
-
}
|
|
268
|
-
else {
|
|
269
|
-
results.push({
|
|
270
|
-
targetField,
|
|
271
|
-
sourceField: 'Constant value',
|
|
272
|
-
transformation: initializer.getText()
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
});
|
|
278
|
-
}
|
|
252
|
+
typescript_1.default.forEachChild(n, visit);
|
|
279
253
|
}
|
|
280
|
-
|
|
281
|
-
|
|
254
|
+
visit(node);
|
|
255
|
+
return Array.from(sourceFields);
|
|
282
256
|
}
|
|
283
|
-
|
|
257
|
+
// Run our analysis passes
|
|
258
|
+
collectVariables(methodNode);
|
|
259
|
+
analyzePropertyAssignments(methodNode);
|
|
284
260
|
return results;
|
|
285
261
|
}
|
|
286
262
|
// find method in AST and extract mappings
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-analyzer.js","sourceRoot":"","sources":["../../src/analyzers/ast-analyzer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,
|
|
1
|
+
{"version":3,"file":"ast-analyzer.js","sourceRoot":"","sources":["../../src/analyzers/ast-analyzer.ts"],"names":[],"mappings":"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"}
|