@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.
Files changed (49) hide show
  1. package/dist/ast.d.ts +259 -0
  2. package/dist/ast.d.ts.map +1 -0
  3. package/dist/ast.js +12 -0
  4. package/dist/ast.js.map +1 -0
  5. package/dist/codegen/base.d.ts +83 -0
  6. package/dist/codegen/base.d.ts.map +1 -0
  7. package/dist/codegen/base.js +494 -0
  8. package/dist/codegen/base.js.map +1 -0
  9. package/dist/codegen/index.d.ts +35 -0
  10. package/dist/codegen/index.d.ts.map +1 -0
  11. package/dist/codegen/index.js +42 -0
  12. package/dist/codegen/index.js.map +1 -0
  13. package/dist/codegen/library.d.ts +42 -0
  14. package/dist/codegen/library.d.ts.map +1 -0
  15. package/dist/codegen/library.js +406 -0
  16. package/dist/codegen/library.js.map +1 -0
  17. package/dist/codegen/native.d.ts +33 -0
  18. package/dist/codegen/native.d.ts.map +1 -0
  19. package/dist/codegen/native.js +452 -0
  20. package/dist/codegen/native.js.map +1 -0
  21. package/dist/codegen.d.ts +13 -0
  22. package/dist/codegen.d.ts.map +1 -0
  23. package/dist/codegen.js +12 -0
  24. package/dist/codegen.js.map +1 -0
  25. package/dist/index.d.ts +257 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +231 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/lexer.d.ts +37 -0
  30. package/dist/lexer.d.ts.map +1 -0
  31. package/dist/lexer.js +499 -0
  32. package/dist/lexer.js.map +1 -0
  33. package/dist/parser.d.ts +63 -0
  34. package/dist/parser.d.ts.map +1 -0
  35. package/dist/parser.js +1045 -0
  36. package/dist/parser.js.map +1 -0
  37. package/dist/playground.d.ts +6 -0
  38. package/dist/playground.d.ts.map +1 -0
  39. package/dist/playground.js +216 -0
  40. package/dist/playground.js.map +1 -0
  41. package/dist/runtime.d.ts +229 -0
  42. package/dist/runtime.d.ts.map +1 -0
  43. package/dist/runtime.js +933 -0
  44. package/dist/runtime.js.map +1 -0
  45. package/dist/tokens.d.ts +80 -0
  46. package/dist/tokens.d.ts.map +1 -0
  47. package/dist/tokens.js +88 -0
  48. package/dist/tokens.js.map +1 -0
  49. 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"}