@ahsankhanamu/json-transformer 0.1.0
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/ast.d.ts +259 -0
- package/dist/ast.d.ts.map +1 -0
- package/dist/ast.js +12 -0
- package/dist/ast.js.map +1 -0
- package/dist/codegen/base.d.ts +83 -0
- package/dist/codegen/base.d.ts.map +1 -0
- package/dist/codegen/base.js +494 -0
- package/dist/codegen/base.js.map +1 -0
- package/dist/codegen/index.d.ts +35 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/index.js +42 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/codegen/library.d.ts +42 -0
- package/dist/codegen/library.d.ts.map +1 -0
- package/dist/codegen/library.js +406 -0
- package/dist/codegen/library.js.map +1 -0
- package/dist/codegen/native.d.ts +33 -0
- package/dist/codegen/native.d.ts.map +1 -0
- package/dist/codegen/native.js +452 -0
- package/dist/codegen/native.js.map +1 -0
- package/dist/codegen.d.ts +13 -0
- package/dist/codegen.d.ts.map +1 -0
- package/dist/codegen.js +12 -0
- package/dist/codegen.js.map +1 -0
- package/dist/index.d.ts +257 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +231 -0
- package/dist/index.js.map +1 -0
- package/dist/lexer.d.ts +37 -0
- package/dist/lexer.d.ts.map +1 -0
- package/dist/lexer.js +499 -0
- package/dist/lexer.js.map +1 -0
- package/dist/parser.d.ts +63 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +1045 -0
- package/dist/parser.js.map +1 -0
- package/dist/playground.d.ts +6 -0
- package/dist/playground.d.ts.map +1 -0
- package/dist/playground.js +216 -0
- package/dist/playground.js.map +1 -0
- package/dist/runtime.d.ts +229 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +933 -0
- package/dist/runtime.js.map +1 -0
- package/dist/tokens.d.ts +80 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +88 -0
- package/dist/tokens.js.map +1 -0
- package/package.json +30 -0
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Code Generator - Shared functionality for all code generators
|
|
3
|
+
*/
|
|
4
|
+
export const DEFAULT_OPTIONS = {
|
|
5
|
+
pretty: true,
|
|
6
|
+
inputVar: 'input',
|
|
7
|
+
bindingsVar: 'bindings',
|
|
8
|
+
parentVar: 'parent',
|
|
9
|
+
wrapInFunction: true,
|
|
10
|
+
functionName: 'transform',
|
|
11
|
+
};
|
|
12
|
+
export class BaseCodeGenerator {
|
|
13
|
+
options;
|
|
14
|
+
localVariables = new Set();
|
|
15
|
+
currentPath = [];
|
|
16
|
+
pipeContextVar = null;
|
|
17
|
+
tempVarCounter = 0;
|
|
18
|
+
constructor(options = {}) {
|
|
19
|
+
this.options = { ...DEFAULT_OPTIONS, ...options };
|
|
20
|
+
}
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// PUBLIC API
|
|
23
|
+
// ============================================================================
|
|
24
|
+
generate(program) {
|
|
25
|
+
const body = this.generateProgram(program);
|
|
26
|
+
if (this.options.wrapInFunction) {
|
|
27
|
+
const params = [this.options.inputVar];
|
|
28
|
+
if (this.options.bindingsVar) {
|
|
29
|
+
params.push(`${this.options.bindingsVar} = {}`);
|
|
30
|
+
}
|
|
31
|
+
return `function ${this.options.functionName}(${params.join(', ')}) {\n${this.indentCode(body, 1)}\n}`;
|
|
32
|
+
}
|
|
33
|
+
return body;
|
|
34
|
+
}
|
|
35
|
+
// ============================================================================
|
|
36
|
+
// PROGRAM GENERATION
|
|
37
|
+
// ============================================================================
|
|
38
|
+
generateProgram(program) {
|
|
39
|
+
const parts = [];
|
|
40
|
+
for (const stmt of program.statements) {
|
|
41
|
+
parts.push(this.generateLetBinding(stmt));
|
|
42
|
+
}
|
|
43
|
+
if (program.expression) {
|
|
44
|
+
if (program.expression.type === 'PipeExpression') {
|
|
45
|
+
const pipeStatements = this.generateFlattenedPipeChain(program.expression);
|
|
46
|
+
parts.push(...pipeStatements);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const expr = this.generateExpression(program.expression);
|
|
50
|
+
parts.push(`return ${expr};`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return parts.join('\n');
|
|
54
|
+
}
|
|
55
|
+
generateLetBinding(node) {
|
|
56
|
+
const keyword = node.constant ? 'const' : 'let';
|
|
57
|
+
const value = this.generateExpression(node.value);
|
|
58
|
+
this.localVariables.add(node.name);
|
|
59
|
+
return `${keyword} ${node.name} = ${value};`;
|
|
60
|
+
}
|
|
61
|
+
// ============================================================================
|
|
62
|
+
// PIPE CHAIN FLATTENING
|
|
63
|
+
// ============================================================================
|
|
64
|
+
generateFlattenedPipeChain(node) {
|
|
65
|
+
const steps = [];
|
|
66
|
+
let current = node;
|
|
67
|
+
while (current.type === 'PipeExpression') {
|
|
68
|
+
steps.unshift(current.right);
|
|
69
|
+
current = current.left;
|
|
70
|
+
}
|
|
71
|
+
const initial = current;
|
|
72
|
+
const needsPipeVar = steps.some((step) => step.type === 'ObjectLiteral' ||
|
|
73
|
+
step.type === 'ArrayLiteral' ||
|
|
74
|
+
this.containsPipeContextRef(step));
|
|
75
|
+
if (steps.length === 1 && !needsPipeVar) {
|
|
76
|
+
const expr = this.generateExpression(node);
|
|
77
|
+
return [`return ${expr};`];
|
|
78
|
+
}
|
|
79
|
+
const statements = [];
|
|
80
|
+
const pipeVar = '_pipe';
|
|
81
|
+
statements.push(`let ${pipeVar} = ${this.generateExpression(initial)};`);
|
|
82
|
+
for (let i = 0; i < steps.length - 1; i++) {
|
|
83
|
+
const step = steps[i];
|
|
84
|
+
const transformed = this.generatePipeStep(step, pipeVar);
|
|
85
|
+
statements.push(`${pipeVar} = ${transformed};`);
|
|
86
|
+
}
|
|
87
|
+
const lastStep = steps[steps.length - 1];
|
|
88
|
+
const finalExpr = this.generatePipeStep(lastStep, pipeVar);
|
|
89
|
+
statements.push(`return ${finalExpr};`);
|
|
90
|
+
return statements;
|
|
91
|
+
}
|
|
92
|
+
generatePipeStep(step, pipeVar) {
|
|
93
|
+
if (step.type === 'ObjectLiteral' || step.type === 'ArrayLiteral') {
|
|
94
|
+
const prevPipeVar = this.pipeContextVar;
|
|
95
|
+
this.pipeContextVar = pipeVar;
|
|
96
|
+
const result = this.generateExpression(step);
|
|
97
|
+
this.pipeContextVar = prevPipeVar;
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
if (this.containsPipeContextRef(step)) {
|
|
101
|
+
const prevPipeVar = this.pipeContextVar;
|
|
102
|
+
this.pipeContextVar = pipeVar;
|
|
103
|
+
const result = this.generateExpression(step);
|
|
104
|
+
this.pipeContextVar = prevPipeVar;
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
const pipedResult = this.tryGeneratePipedCall(step, pipeVar);
|
|
108
|
+
if (pipedResult) {
|
|
109
|
+
return pipedResult;
|
|
110
|
+
}
|
|
111
|
+
const stepCode = this.generateExpression(step);
|
|
112
|
+
return `${stepCode}(${pipeVar})`;
|
|
113
|
+
}
|
|
114
|
+
// ============================================================================
|
|
115
|
+
// EXPRESSION GENERATION - Main dispatcher
|
|
116
|
+
// ============================================================================
|
|
117
|
+
generateExpression(node) {
|
|
118
|
+
switch (node.type) {
|
|
119
|
+
case 'NumberLiteral':
|
|
120
|
+
return String(node.value);
|
|
121
|
+
case 'StringLiteral':
|
|
122
|
+
return JSON.stringify(node.value);
|
|
123
|
+
case 'BooleanLiteral':
|
|
124
|
+
return String(node.value);
|
|
125
|
+
case 'NullLiteral':
|
|
126
|
+
return 'null';
|
|
127
|
+
case 'UndefinedLiteral':
|
|
128
|
+
return 'undefined';
|
|
129
|
+
case 'TemplateLiteral':
|
|
130
|
+
return this.generateTemplateLiteral(node);
|
|
131
|
+
case 'ObjectLiteral':
|
|
132
|
+
return this.generateObjectLiteral(node);
|
|
133
|
+
case 'ArrayLiteral':
|
|
134
|
+
return this.generateArrayLiteral(node);
|
|
135
|
+
case 'Identifier':
|
|
136
|
+
return this.generateIdentifier(node);
|
|
137
|
+
case 'MemberAccess':
|
|
138
|
+
return this.generateMemberAccess(node);
|
|
139
|
+
case 'IndexAccess':
|
|
140
|
+
return this.generateIndexAccess(node);
|
|
141
|
+
case 'SliceAccess':
|
|
142
|
+
return this.generateSliceAccess(node);
|
|
143
|
+
case 'SpreadAccess':
|
|
144
|
+
return this.generateSpreadAccess(node);
|
|
145
|
+
case 'FilterAccess':
|
|
146
|
+
return this.generateFilterAccess(node);
|
|
147
|
+
case 'MapTransform':
|
|
148
|
+
return this.generateMapTransform(node);
|
|
149
|
+
case 'RootAccess':
|
|
150
|
+
return this.generateRootAccess(node);
|
|
151
|
+
case 'ParentAccess':
|
|
152
|
+
return this.generateParentAccess(node);
|
|
153
|
+
case 'CurrentAccess':
|
|
154
|
+
return this.generateCurrentAccess(node);
|
|
155
|
+
case 'BindingAccess':
|
|
156
|
+
return this.generateBindingAccess(node);
|
|
157
|
+
case 'BinaryExpression':
|
|
158
|
+
return this.generateBinaryExpression(node);
|
|
159
|
+
case 'UnaryExpression':
|
|
160
|
+
return this.generateUnaryExpression(node);
|
|
161
|
+
case 'TernaryExpression':
|
|
162
|
+
return this.generateTernaryExpression(node);
|
|
163
|
+
case 'PipeExpression':
|
|
164
|
+
return this.generatePipeExpression(node);
|
|
165
|
+
case 'PipeContextRef':
|
|
166
|
+
return this.pipeContextVar || this.options.inputVar;
|
|
167
|
+
case 'NullCoalesce':
|
|
168
|
+
return this.generateNullCoalesce(node);
|
|
169
|
+
case 'CallExpression':
|
|
170
|
+
return this.generateCallExpression(node);
|
|
171
|
+
case 'ArrowFunction':
|
|
172
|
+
return this.generateArrowFunction(node);
|
|
173
|
+
case 'IfExpression':
|
|
174
|
+
return this.generateIfExpression(node);
|
|
175
|
+
case 'TypeAssertion':
|
|
176
|
+
return this.generateTypeAssertion(node);
|
|
177
|
+
case 'NonNullAssertion':
|
|
178
|
+
return this.generateNonNullAssertion(node);
|
|
179
|
+
default:
|
|
180
|
+
throw new Error(`Unknown node type: ${node.type}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// ============================================================================
|
|
184
|
+
// LITERAL GENERATION (shared)
|
|
185
|
+
// ============================================================================
|
|
186
|
+
generateTemplateLiteral(node) {
|
|
187
|
+
const parts = node.parts.map((part) => {
|
|
188
|
+
if (typeof part === 'string') {
|
|
189
|
+
return part.replace(/`/g, '\\`').replace(/\$\{/g, '\\${');
|
|
190
|
+
}
|
|
191
|
+
return `\${${this.generateExpression(part)}}`;
|
|
192
|
+
});
|
|
193
|
+
return '`' + parts.join('') + '`';
|
|
194
|
+
}
|
|
195
|
+
generateObjectLiteral(node) {
|
|
196
|
+
if (node.properties.length === 0)
|
|
197
|
+
return '{}';
|
|
198
|
+
const props = node.properties.map((prop) => {
|
|
199
|
+
switch (prop.type) {
|
|
200
|
+
case 'StandardProperty':
|
|
201
|
+
const key = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(prop.key)
|
|
202
|
+
? prop.key
|
|
203
|
+
: JSON.stringify(prop.key);
|
|
204
|
+
return `${key}: ${this.generateExpression(prop.value)}`;
|
|
205
|
+
case 'ShorthandProperty':
|
|
206
|
+
return prop.key;
|
|
207
|
+
case 'ComputedProperty':
|
|
208
|
+
return `[${this.generateExpression(prop.key)}]: ${this.generateExpression(prop.value)}`;
|
|
209
|
+
case 'SpreadProperty':
|
|
210
|
+
return `...${this.generateExpression(prop.argument)}`;
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
if (this.options.pretty && props.length > 2) {
|
|
214
|
+
return `{\n${this.indentCode(props.join(',\n'), 1)}\n}`;
|
|
215
|
+
}
|
|
216
|
+
return `{ ${props.join(', ')} }`;
|
|
217
|
+
}
|
|
218
|
+
generateArrayLiteral(node) {
|
|
219
|
+
if (node.elements.length === 0)
|
|
220
|
+
return '[]';
|
|
221
|
+
const elements = node.elements.map((el) => {
|
|
222
|
+
if (el.type === 'SpreadElement') {
|
|
223
|
+
return `...${this.generateExpression(el.argument)}`;
|
|
224
|
+
}
|
|
225
|
+
return this.generateExpression(el);
|
|
226
|
+
});
|
|
227
|
+
return `[${elements.join(', ')}]`;
|
|
228
|
+
}
|
|
229
|
+
// ============================================================================
|
|
230
|
+
// BINARY/UNARY/TERNARY (shared)
|
|
231
|
+
// ============================================================================
|
|
232
|
+
generateBinaryExpression(node) {
|
|
233
|
+
const op = node.operator;
|
|
234
|
+
if (op === '&') {
|
|
235
|
+
return this.generateConcatenation(node);
|
|
236
|
+
}
|
|
237
|
+
const left = this.generateExpression(node.left);
|
|
238
|
+
const right = this.generateExpression(node.right);
|
|
239
|
+
if (op === 'in') {
|
|
240
|
+
return `(${right}).includes(${left})`;
|
|
241
|
+
}
|
|
242
|
+
return `(${left} ${op} ${right})`;
|
|
243
|
+
}
|
|
244
|
+
generateConcatenation(node) {
|
|
245
|
+
const parts = this.flattenConcatenation(node);
|
|
246
|
+
let template = '`';
|
|
247
|
+
for (const part of parts) {
|
|
248
|
+
if (part.type === 'StringLiteral') {
|
|
249
|
+
const escaped = part.value
|
|
250
|
+
.replace(/\\/g, '\\\\')
|
|
251
|
+
.replace(/`/g, '\\`')
|
|
252
|
+
.replace(/\$\{/g, '\\${');
|
|
253
|
+
template += escaped;
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
const generated = this.generateExpression(part);
|
|
257
|
+
const wrapped = this.canBeNullish(part) ? `${generated} ?? ''` : generated;
|
|
258
|
+
template += '${' + wrapped + '}';
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
template += '`';
|
|
262
|
+
return template;
|
|
263
|
+
}
|
|
264
|
+
flattenConcatenation(node) {
|
|
265
|
+
if (node.type === 'BinaryExpression' && node.operator === '&') {
|
|
266
|
+
return [...this.flattenConcatenation(node.left), ...this.flattenConcatenation(node.right)];
|
|
267
|
+
}
|
|
268
|
+
return [node];
|
|
269
|
+
}
|
|
270
|
+
canBeNullish(node) {
|
|
271
|
+
switch (node.type) {
|
|
272
|
+
case 'StringLiteral':
|
|
273
|
+
case 'NumberLiteral':
|
|
274
|
+
case 'BooleanLiteral':
|
|
275
|
+
case 'TemplateLiteral':
|
|
276
|
+
case 'ArrayLiteral':
|
|
277
|
+
case 'ObjectLiteral':
|
|
278
|
+
return false;
|
|
279
|
+
case 'BinaryExpression':
|
|
280
|
+
if (node.operator === '&' || ['+', '-', '*', '/', '%'].includes(node.operator)) {
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
return true;
|
|
284
|
+
default:
|
|
285
|
+
return true;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
generateUnaryExpression(node) {
|
|
289
|
+
const argument = this.generateExpression(node.argument);
|
|
290
|
+
let op = node.operator;
|
|
291
|
+
if (op === 'not')
|
|
292
|
+
op = '!';
|
|
293
|
+
return `${op}${argument}`;
|
|
294
|
+
}
|
|
295
|
+
generateTernaryExpression(node) {
|
|
296
|
+
const test = this.generateExpression(node.test);
|
|
297
|
+
const consequent = this.generateExpression(node.consequent);
|
|
298
|
+
const alternate = this.generateExpression(node.alternate);
|
|
299
|
+
return `(${test} ? ${consequent} : ${alternate})`;
|
|
300
|
+
}
|
|
301
|
+
generateNullCoalesce(node) {
|
|
302
|
+
const left = this.generateExpression(node.left);
|
|
303
|
+
const right = this.generateExpression(node.right);
|
|
304
|
+
return `(${left} ?? ${right})`;
|
|
305
|
+
}
|
|
306
|
+
// ============================================================================
|
|
307
|
+
// ARROW FUNCTION (shared)
|
|
308
|
+
// ============================================================================
|
|
309
|
+
generateArrowFunction(node) {
|
|
310
|
+
const params = node.params.map((p) => p.name).join(', ');
|
|
311
|
+
const savedLocals = new Set(this.localVariables);
|
|
312
|
+
for (const param of node.params) {
|
|
313
|
+
this.localVariables.add(param.name);
|
|
314
|
+
}
|
|
315
|
+
const body = this.generateExpression(node.body);
|
|
316
|
+
this.localVariables = savedLocals;
|
|
317
|
+
return `(${params}) => ${body}`;
|
|
318
|
+
}
|
|
319
|
+
// ============================================================================
|
|
320
|
+
// IF EXPRESSION (shared)
|
|
321
|
+
// ============================================================================
|
|
322
|
+
generateIfExpression(node) {
|
|
323
|
+
let result = '';
|
|
324
|
+
for (let i = 0; i < node.conditions.length; i++) {
|
|
325
|
+
const cond = node.conditions[i];
|
|
326
|
+
const test = this.generateExpression(cond.test);
|
|
327
|
+
const consequent = this.generateExpression(cond.consequent);
|
|
328
|
+
if (i === 0) {
|
|
329
|
+
result = `(${test} ? ${consequent}`;
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
result += ` : ${test} ? ${consequent}`;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
const alternate = node.alternate ? this.generateExpression(node.alternate) : 'undefined';
|
|
336
|
+
result += ` : ${alternate}`;
|
|
337
|
+
result += ')'.repeat(node.conditions.length);
|
|
338
|
+
return result;
|
|
339
|
+
}
|
|
340
|
+
// ============================================================================
|
|
341
|
+
// UTILITY METHODS
|
|
342
|
+
// ============================================================================
|
|
343
|
+
indentCode(code, levels = 1) {
|
|
344
|
+
const indent = ' '.repeat(levels);
|
|
345
|
+
return code
|
|
346
|
+
.split('\n')
|
|
347
|
+
.map((line) => indent + line)
|
|
348
|
+
.join('\n');
|
|
349
|
+
}
|
|
350
|
+
getTempVar(prefix = '_temp') {
|
|
351
|
+
return `${prefix}${this.tempVarCounter++}`;
|
|
352
|
+
}
|
|
353
|
+
buildPathFromNode(node) {
|
|
354
|
+
switch (node.type) {
|
|
355
|
+
case 'Identifier':
|
|
356
|
+
return node.name;
|
|
357
|
+
case 'MemberAccess':
|
|
358
|
+
return `${this.buildPathFromNode(node.object)}.${node.property}`;
|
|
359
|
+
case 'IndexAccess':
|
|
360
|
+
const idx = node.index.type === 'NumberLiteral' ? node.index.value : '*';
|
|
361
|
+
return `${this.buildPathFromNode(node.object)}[${idx}]`;
|
|
362
|
+
case 'SpreadAccess':
|
|
363
|
+
return `${this.buildPathFromNode(node.object)}[*]`;
|
|
364
|
+
case 'RootAccess':
|
|
365
|
+
return node.path ?? '$';
|
|
366
|
+
case 'CurrentAccess':
|
|
367
|
+
return node.path ?? '.';
|
|
368
|
+
default:
|
|
369
|
+
return '';
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
/** Known array methods that return arrays */
|
|
373
|
+
static ARRAY_RETURNING_METHODS = new Set([
|
|
374
|
+
'map',
|
|
375
|
+
'filter',
|
|
376
|
+
'slice',
|
|
377
|
+
'sort',
|
|
378
|
+
'flatMap',
|
|
379
|
+
'concat',
|
|
380
|
+
'reverse',
|
|
381
|
+
'flat',
|
|
382
|
+
'toSorted',
|
|
383
|
+
'toReversed',
|
|
384
|
+
'toSpliced',
|
|
385
|
+
]);
|
|
386
|
+
/**
|
|
387
|
+
* Check if an expression produces an array that should auto-project on property access.
|
|
388
|
+
* Returns true for: SpreadAccess, FilterAccess, SliceAccess, array-returning CallExpressions,
|
|
389
|
+
* and MemberAccess chains that end in any of these.
|
|
390
|
+
*/
|
|
391
|
+
isArrayProducingExpression(node) {
|
|
392
|
+
switch (node.type) {
|
|
393
|
+
case 'SpreadAccess':
|
|
394
|
+
case 'FilterAccess':
|
|
395
|
+
case 'SliceAccess':
|
|
396
|
+
return true;
|
|
397
|
+
case 'CallExpression':
|
|
398
|
+
return this.isArrayReturningCall(node);
|
|
399
|
+
case 'MemberAccess':
|
|
400
|
+
return this.isArrayProducingExpression(node.object);
|
|
401
|
+
default:
|
|
402
|
+
return false;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
/** Check if a CallExpression is a call to a known array-returning method */
|
|
406
|
+
isArrayReturningCall(node) {
|
|
407
|
+
if (node.callee.type === 'MemberAccess') {
|
|
408
|
+
return BaseCodeGenerator.ARRAY_RETURNING_METHODS.has(node.callee.property);
|
|
409
|
+
}
|
|
410
|
+
return false;
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Check if property access after an array-producing expression should auto-project.
|
|
414
|
+
* Skips auto-projection when the property is itself an array method (method chaining).
|
|
415
|
+
*/
|
|
416
|
+
shouldAutoProject(node) {
|
|
417
|
+
// Skip if property is an array method name (method chaining like .filter().map())
|
|
418
|
+
if (BaseCodeGenerator.ARRAY_RETURNING_METHODS.has(node.property)) {
|
|
419
|
+
return false;
|
|
420
|
+
}
|
|
421
|
+
return this.isArrayProducingExpression(node.object);
|
|
422
|
+
}
|
|
423
|
+
containsPipeContextRef(node) {
|
|
424
|
+
if (node.type === 'PipeContextRef')
|
|
425
|
+
return true;
|
|
426
|
+
if (node.type === 'MemberAccess')
|
|
427
|
+
return this.containsPipeContextRef(node.object);
|
|
428
|
+
if (node.type === 'IndexAccess')
|
|
429
|
+
return this.containsPipeContextRef(node.object);
|
|
430
|
+
if (node.type === 'CallExpression') {
|
|
431
|
+
return (this.containsPipeContextRef(node.callee) ||
|
|
432
|
+
node.arguments.some((a) => this.containsPipeContextRef(a)));
|
|
433
|
+
}
|
|
434
|
+
if (node.type === 'ObjectLiteral') {
|
|
435
|
+
return node.properties.some((prop) => {
|
|
436
|
+
if (prop.type === 'StandardProperty' || prop.type === 'ComputedProperty') {
|
|
437
|
+
return this.containsPipeContextRef(prop.value);
|
|
438
|
+
}
|
|
439
|
+
if (prop.type === 'SpreadProperty') {
|
|
440
|
+
return this.containsPipeContextRef(prop.argument);
|
|
441
|
+
}
|
|
442
|
+
return false;
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
if (node.type === 'ArrayLiteral') {
|
|
446
|
+
return node.elements.some((el) => {
|
|
447
|
+
if (el.type === 'SpreadElement') {
|
|
448
|
+
return this.containsPipeContextRef(el.argument);
|
|
449
|
+
}
|
|
450
|
+
return this.containsPipeContextRef(el);
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
if (node.type === 'BinaryExpression') {
|
|
454
|
+
return this.containsPipeContextRef(node.left) || this.containsPipeContextRef(node.right);
|
|
455
|
+
}
|
|
456
|
+
if (node.type === 'TernaryExpression') {
|
|
457
|
+
return (this.containsPipeContextRef(node.test) ||
|
|
458
|
+
this.containsPipeContextRef(node.consequent) ||
|
|
459
|
+
this.containsPipeContextRef(node.alternate));
|
|
460
|
+
}
|
|
461
|
+
if (node.type === 'PipeExpression') {
|
|
462
|
+
return this.containsPipeContextRef(node.left) || this.containsPipeContextRef(node.right);
|
|
463
|
+
}
|
|
464
|
+
return false;
|
|
465
|
+
}
|
|
466
|
+
tryExtractPropertyPath(node) {
|
|
467
|
+
if (node.type === 'CurrentAccess') {
|
|
468
|
+
return node.path ?? null;
|
|
469
|
+
}
|
|
470
|
+
if (node.type === 'PipeContextRef') {
|
|
471
|
+
return '';
|
|
472
|
+
}
|
|
473
|
+
if (node.type === 'MemberAccess' && !node.optional) {
|
|
474
|
+
if (node.object.type === 'PipeContextRef') {
|
|
475
|
+
return node.property;
|
|
476
|
+
}
|
|
477
|
+
if (node.object.type === 'CurrentAccess' && node.object.path) {
|
|
478
|
+
return `${node.object.path}.${node.property}`;
|
|
479
|
+
}
|
|
480
|
+
const objectPath = this.tryExtractPropertyPath(node.object);
|
|
481
|
+
if (objectPath !== null) {
|
|
482
|
+
return objectPath === '' ? node.property : `${objectPath}.${node.property}`;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
if (node.type === 'Identifier') {
|
|
486
|
+
if (this.localVariables.has(node.name)) {
|
|
487
|
+
return null;
|
|
488
|
+
}
|
|
489
|
+
return node.name;
|
|
490
|
+
}
|
|
491
|
+
return null;
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/codegen/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Generator Module
|
|
3
|
+
*
|
|
4
|
+
* Provides two code generators:
|
|
5
|
+
* - NativeCodeGenerator: Generates pure JavaScript without any dependencies
|
|
6
|
+
* - LibraryCodeGenerator: Generates JavaScript with __helpers runtime (supports strict mode)
|
|
7
|
+
*/
|
|
8
|
+
import * as AST from '../ast.js';
|
|
9
|
+
import { NativeCodeGenerator } from './native.js';
|
|
10
|
+
import { LibraryCodeGenerator, LibraryCodeGenOptions } from './library.js';
|
|
11
|
+
export { CodeGenOptions } from './base.js';
|
|
12
|
+
export { NativeCodeGenerator } from './native.js';
|
|
13
|
+
export { LibraryCodeGenerator, LibraryCodeGenOptions } from './library.js';
|
|
14
|
+
export interface FullCodeGenOptions extends LibraryCodeGenOptions {
|
|
15
|
+
/** Generate native JS without helper dependencies */
|
|
16
|
+
native?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Factory function to create the appropriate code generator
|
|
20
|
+
*/
|
|
21
|
+
export declare function createCodeGenerator(options?: FullCodeGenOptions): NativeCodeGenerator | LibraryCodeGenerator;
|
|
22
|
+
/**
|
|
23
|
+
* Generate JavaScript code from an AST program
|
|
24
|
+
*
|
|
25
|
+
* @param program - The AST program to generate code from
|
|
26
|
+
* @param options - Code generation options
|
|
27
|
+
* @returns Generated JavaScript code as a string
|
|
28
|
+
*/
|
|
29
|
+
export declare function generate(program: AST.Program, options?: FullCodeGenOptions): string;
|
|
30
|
+
export declare class CodeGenerator {
|
|
31
|
+
private generator;
|
|
32
|
+
constructor(options?: FullCodeGenOptions);
|
|
33
|
+
generate(program: AST.Program): string;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/codegen/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,GAAG,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAG3E,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAG3E,MAAM,WAAW,kBAAmB,SAAQ,qBAAqB;IAC/D,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,kBAAuB,8CAKnE;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,GAAE,kBAAuB,GAAG,MAAM,CAGvF;AAGD,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAA6C;gBAElD,OAAO,GAAE,kBAAuB;IAI5C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM;CAGvC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Generator Module
|
|
3
|
+
*
|
|
4
|
+
* Provides two code generators:
|
|
5
|
+
* - NativeCodeGenerator: Generates pure JavaScript without any dependencies
|
|
6
|
+
* - LibraryCodeGenerator: Generates JavaScript with __helpers runtime (supports strict mode)
|
|
7
|
+
*/
|
|
8
|
+
import { NativeCodeGenerator } from './native.js';
|
|
9
|
+
import { LibraryCodeGenerator } from './library.js';
|
|
10
|
+
export { NativeCodeGenerator } from './native.js';
|
|
11
|
+
export { LibraryCodeGenerator } from './library.js';
|
|
12
|
+
/**
|
|
13
|
+
* Factory function to create the appropriate code generator
|
|
14
|
+
*/
|
|
15
|
+
export function createCodeGenerator(options = {}) {
|
|
16
|
+
if (options.native) {
|
|
17
|
+
return new NativeCodeGenerator(options);
|
|
18
|
+
}
|
|
19
|
+
return new LibraryCodeGenerator(options);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Generate JavaScript code from an AST program
|
|
23
|
+
*
|
|
24
|
+
* @param program - The AST program to generate code from
|
|
25
|
+
* @param options - Code generation options
|
|
26
|
+
* @returns Generated JavaScript code as a string
|
|
27
|
+
*/
|
|
28
|
+
export function generate(program, options = {}) {
|
|
29
|
+
const generator = createCodeGenerator(options);
|
|
30
|
+
return generator.generate(program);
|
|
31
|
+
}
|
|
32
|
+
// Legacy class for backward compatibility
|
|
33
|
+
export class CodeGenerator {
|
|
34
|
+
generator;
|
|
35
|
+
constructor(options = {}) {
|
|
36
|
+
this.generator = createCodeGenerator(options);
|
|
37
|
+
}
|
|
38
|
+
generate(program) {
|
|
39
|
+
return this.generator.generate(program);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/codegen/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAyB,MAAM,cAAc,CAAC;AAI3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAyB,MAAM,cAAc,CAAC;AAQ3E;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAA8B,EAAE;IAClE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAoB,EAAE,UAA8B,EAAE;IAC7E,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,0CAA0C;AAC1C,MAAM,OAAO,aAAa;IAChB,SAAS,CAA6C;IAE9D,YAAY,UAA8B,EAAE;QAC1C,IAAI,CAAC,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,QAAQ,CAAC,OAAoB;QAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;CACF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Library Code Generator - Generates JavaScript with __helpers runtime
|
|
3
|
+
* Supports strict mode with enhanced error messages
|
|
4
|
+
*/
|
|
5
|
+
import * as AST from '../ast.js';
|
|
6
|
+
import { BaseCodeGenerator, CodeGenOptions } from './base.js';
|
|
7
|
+
export interface LibraryCodeGenOptions extends CodeGenOptions {
|
|
8
|
+
/** Use strict mode (throws errors) vs forgiving mode (returns undefined) */
|
|
9
|
+
strict?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare class LibraryCodeGenerator extends BaseCodeGenerator {
|
|
12
|
+
protected strict: boolean;
|
|
13
|
+
constructor(options?: LibraryCodeGenOptions);
|
|
14
|
+
protected generateIdentifier(node: AST.Identifier): string;
|
|
15
|
+
protected generateMemberAccess(node: AST.MemberAccess): string;
|
|
16
|
+
/** Generate auto-projection for property access after array-producing expressions */
|
|
17
|
+
private generateAutoProjection;
|
|
18
|
+
/** Get path suffix for strict mode error messages */
|
|
19
|
+
private getPathSuffix;
|
|
20
|
+
/** Get base path for strict mode error messages */
|
|
21
|
+
private getBasePath;
|
|
22
|
+
protected generateIndexAccess(node: AST.IndexAccess): string;
|
|
23
|
+
protected generateSliceAccess(node: AST.SliceAccess): string;
|
|
24
|
+
protected generateSpreadAccess(node: AST.SpreadAccess): string;
|
|
25
|
+
protected generateFilterAccess(node: AST.FilterAccess): string;
|
|
26
|
+
protected generatePredicateFunction(predicate: AST.Expression): string;
|
|
27
|
+
generateExpressionPublic(node: AST.Expression): string;
|
|
28
|
+
protected generateMapTransform(node: AST.MapTransform): string;
|
|
29
|
+
protected generateObjectLiteralForMap(node: AST.ObjectLiteral): string;
|
|
30
|
+
protected generateRootAccess(node: AST.RootAccess): string;
|
|
31
|
+
protected generateParentAccess(node: AST.ParentAccess): string;
|
|
32
|
+
protected generateCurrentAccess(node: AST.CurrentAccess): string;
|
|
33
|
+
protected generateBindingAccess(node: AST.BindingAccess): string;
|
|
34
|
+
protected generatePipeExpression(node: AST.PipeExpression): string;
|
|
35
|
+
protected generateCallExpression(node: AST.CallExpression): string;
|
|
36
|
+
protected tryGeneratePipedCall(node: AST.Expression, pipeValue: string): string | null;
|
|
37
|
+
protected generateTypeAssertion(node: AST.TypeAssertion): string;
|
|
38
|
+
protected generateTypeCheck(expr: string, type: AST.TypeAnnotation): string;
|
|
39
|
+
protected generateNonNullAssertion(node: AST.NonNullAssertion): string;
|
|
40
|
+
protected createChildGenerator(inputVar: string): LibraryCodeGenerator;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=library.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../src/codegen/library.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,GAAG,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE9D,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IAC3D,4EAA4E;IAC5E,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,oBAAqB,SAAQ,iBAAiB;IACzD,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;gBAEd,OAAO,GAAE,qBAA0B;IAS/C,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,MAAM;IAkC1D,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,GAAG,MAAM;IAiB9D,qFAAqF;IACrF,OAAO,CAAC,sBAAsB;IAwB9B,qDAAqD;IACrD,OAAO,CAAC,aAAa;IAWrB,mDAAmD;IACnD,OAAO,CAAC,WAAW;IAcnB,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,WAAW,GAAG,MAAM;IAiB5D,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,WAAW,GAAG,MAAM;IAgB5D,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,GAAG,MAAM;IAc9D,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,GAAG,MAAM;IAW9D,SAAS,CAAC,yBAAyB,CAAC,SAAS,EAAE,GAAG,CAAC,UAAU,GAAG,MAAM;IAM/D,wBAAwB,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,MAAM;IAQ7D,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,GAAG,MAAM;IAY9D,SAAS,CAAC,2BAA2B,CAAC,IAAI,EAAE,GAAG,CAAC,aAAa,GAAG,MAAM;IA0BtE,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,MAAM;IAW1D,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,GAAG,MAAM;IAW9D,SAAS,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,aAAa,GAAG,MAAM;IAWhE,SAAS,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,aAAa,GAAG,MAAM;IAYhE,SAAS,CAAC,sBAAsB,CAAC,IAAI,EAAE,GAAG,CAAC,cAAc,GAAG,MAAM;IAgDlE,SAAS,CAAC,sBAAsB,CAAC,IAAI,EAAE,GAAG,CAAC,cAAc,GAAG,MAAM;IAkDlE,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA2DtF,SAAS,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,aAAa,GAAG,MAAM;IAWhE,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,cAAc,GAAG,MAAM;IAc3E,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,GAAG,CAAC,gBAAgB,GAAG,MAAM;IActE,SAAS,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB;CAQvE"}
|