@jalvin/compiler 2.0.42 → 2.0.43

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/codegen.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import * as AST from "./ast.js";
2
2
  import { JType } from "./typechecker.js";
3
3
  export interface CodegenOptions {
4
+ /** Emit .tsx (React JSX) output — set for files containing `component` decls */
5
+ readonly jsx: boolean;
4
6
  /** Target module format */
5
7
  readonly module: "esm" | "cjs";
6
8
  /** Emit type annotations in output (verbose but useful for debugging) */
@@ -20,18 +22,16 @@ export declare const DEFAULT_CODEGEN_OPTIONS: CodegenOptions;
20
22
  export interface CodegenResult {
21
23
  readonly code: string;
22
24
  readonly lineMap: number[];
23
- /** True if the program contains component declarations or UI imports. */
24
- readonly hasComponents: boolean;
25
+ /** Whether JSX was emitted (caller should rename output to .tsx) */
26
+ readonly isJsx: boolean;
25
27
  }
26
28
  export declare class CodeGenerator {
27
29
  private readonly w;
28
30
  private readonly opts;
29
31
  private hasComponents;
30
32
  private runtimeSymbolsNeeded;
31
- /** Names of true Jalvin components — used to detect functional calls */
32
- private userComponentNames;
33
- /** Names of all potential components (including UI primitives) — used to detect props-object calls */
34
- private allComponentLikeNames;
33
+ /** Names of component functions — used to detect component calls and emit them as JSX */
34
+ private componentNames;
35
35
  /**
36
36
  * Param names for components resolved from imported local .jalvin files.
37
37
  * Maps component name → ordered list of param names.
@@ -39,8 +39,6 @@ export declare class CodeGenerator {
39
39
  private componentParamNames;
40
40
  /** True when the program contains `import @jalvin/ui.*` — used to detect UI primitive calls */
41
41
  private hasUiStarImport;
42
- /** Names of symbols explicitly imported from @jalvin/ui */
43
- private uiNamedImports;
44
42
  /** Operator overload resolutions from the type checker */
45
43
  private operatorOverloadMap;
46
44
  /** Type map from the type checker */
@@ -64,23 +62,36 @@ export declare class CodeGenerator {
64
62
  * Maps module specifier (e.g. "src/views") → sorted list of exported names.
65
63
  */
66
64
  private localStarExports;
67
- private isInClass;
68
65
  constructor(opts?: Partial<CodegenOptions>);
69
66
  generate(program: AST.Program, operatorOverloads?: Map<AST.BinaryExpr, string>, typeMap?: Map<object, JType>): CodegenResult;
70
- /** Walk AST to see if it contains any JsxElement nodes */
71
- private containsJsx;
72
67
  private buildPreamble;
73
68
  private emitHeader;
69
+ /**
70
+ * Heuristic for non-scoped imports: if the first path segment resolves to an
71
+ * installed package in node_modules, treat the import as npm/ESM and strip
72
+ * the trailing symbol name from the module specifier.
73
+ */
74
74
  private isLikelyNodeModuleImport;
75
+ /** Emit a @deprecated JSDoc block if the declaration has @Nuked. */
75
76
  private emitAnnotations;
76
77
  private emitTopLevelDecl;
77
78
  private emitFunDecl;
78
79
  private emitMemberFunDecl;
79
80
  private emitComponentDecl;
81
+ /**
82
+ * Emit the body of a `component fun` block.
83
+ * The last statement is emitted in tail position — if it is an expression,
84
+ * an if/else chain, or a when block, the innermost UI call is implicitly
85
+ * returned (implicit return of the last expression).
86
+ */
80
87
  private emitComponentBlock;
88
+ /** Emit a statement in tail position, adding implicit return where applicable. */
81
89
  private emitTailStmt;
90
+ /** Emit a block in tail position, treating its last statement as a tail expression. */
82
91
  private emitTailBlock;
92
+ /** Like emitIfStmt but with tail-return applied recursively to each branch body. */
83
93
  private emitIfStmtWithTailReturn;
94
+ /** Like emitWhenStmt but with tail-return applied recursively to each branch body. */
84
95
  private emitWhenStmtWithTailReturn;
85
96
  private emitClassDecl;
86
97
  private emitDataClassDecl;
@@ -92,6 +103,11 @@ export declare class CodeGenerator {
92
103
  private emitTypeAliasDecl;
93
104
  private emitExtensionFunDecl;
94
105
  private receiverClassName;
106
+ /**
107
+ * Maps a JType to the primitive receiver type name used as a key
108
+ * in `primitiveExtensions` (e.g. JType `{ tag: "string" }` → `"String"`).
109
+ * Returns null for non-primitive / unknown types.
110
+ */
95
111
  private jTypeToReceiverName;
96
112
  private classHasInvokeOperator;
97
113
  private emitPropertyDecl;
@@ -114,9 +130,20 @@ export declare class CodeGenerator {
114
130
  private emitJsxChild;
115
131
  private emitStringTemplate;
116
132
  private emitCallExpr;
133
+ /**
134
+ * For each non-scoped local import (e.g. `import src.views.MoveCounterView.MoveCounter`),
135
+ * attempt to load and parse the corresponding .jalvin source file. If the named symbol is
136
+ * a `component fun`, register it in `componentNames` and record its param names so that
137
+ * call sites can emit the correct props-object invocation.
138
+ */
117
139
  private resolveLocalComponentImports;
140
+ /** Returns true if a call expression's callee looks like a class constructor.
141
+ * In Jalvin, class names always start with an uppercase letter. */
118
142
  private isConstructorCall;
143
+ /** Emit `Column(modifier = ...) { ... }` as `React.createElement(Column, { modifier: ... }, [children])` */
119
144
  private emitComponentCall;
145
+ /** Collect each expression statement in a trailing-lambda body as DOM children.
146
+ * For-loop statements are emitted as spread IIFEs so their dynamic output is preserved. */
120
147
  private emitLambdaBodyAsDomChildren;
121
148
  private emitLambdaExpr;
122
149
  private emitIfExpr;
@@ -131,12 +158,27 @@ export declare class CodeGenerator {
131
158
  private emitTypeRef;
132
159
  private emitTypeParamsStr;
133
160
  private emitParamsStr;
161
+ private emitComponentPropsStr;
134
162
  private emitSuperTypesStr;
135
163
  private exportPrefix;
136
164
  private visibilityPrefix;
137
165
  private unaryOpStr;
138
166
  private binaryOpStr;
167
+ /**
168
+ * Walk the entire program AST and collect all identifier names that are
169
+ * REFERENCED (i.e., used) in the code: NameExpr values and the first name
170
+ * component of SimpleTypeRef / GenericTypeRef nodes.
171
+ *
172
+ * Jalvin primitive type names (String, Boolean, …) that map to TS primitives
173
+ * are excluded from TypeRef collection since they never need an import.
174
+ */
139
175
  private gatherReferencedNames;
176
+ /**
177
+ * Walk the entire program AST and collect all names that are LOCALLY DEFINED:
178
+ * top-level declaration names, non-star import aliases, function/lambda
179
+ * parameters, local val/var bindings, for-loop variables, catch-clause names,
180
+ * when-subject bindings, and type parameter names.
181
+ */
140
182
  private gatherAllLocalBindings;
141
183
  }
142
184
  export declare function generate(program: AST.Program, opts?: Partial<CodegenOptions>, operatorOverloads?: Map<AST.BinaryExpr, string>, typeMap?: Map<object, JType>): CodegenResult;
@@ -1 +1 @@
1
- {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAoDzC,MAAM,WAAW,cAAc;IAC7B,gFAAgF;IAChF,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,2BAA2B;IAC3B,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,iDAAiD;IACjD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,uBAAuB,EAAE,cAKrC,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAgB;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,oBAAoB,CAAqB;IACjD,yFAAyF;IACzF,OAAO,CAAC,cAAc,CAAqB;IAC3C;;;OAGG;IACH,OAAO,CAAC,mBAAmB,CAA+B;IAC1D,+FAA+F;IAC/F,OAAO,CAAC,eAAe,CAAS;IAChC,0DAA0D;IAC1D,OAAO,CAAC,mBAAmB,CAAqC;IAChE,qCAAqC;IACrC,OAAO,CAAC,OAAO,CAA4B;IAC3C;;;;OAIG;IACH,OAAO,CAAC,mBAAmB,CAA0C;IACrE;;;;OAIG;IACH,OAAO,CAAC,sBAAsB,CAAqB;IACnD,4FAA4F;IAC5F,OAAO,CAAC,wBAAwB,CAAqB;IACrD;;;OAGG;IACH,OAAO,CAAC,gBAAgB,CAA+B;gBAE3C,IAAI,GAAE,OAAO,CAAC,cAAc,CAAM;IAI9C,QAAQ,CACN,OAAO,EAAE,GAAG,CAAC,OAAO,EACpB,iBAAiB,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,EAC/C,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAC3B,aAAa;IAmFhB,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,UAAU;IAuElB;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAkBhC,oEAAoE;IACpE,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,WAAW;IAyCnB,OAAO,CAAC,iBAAiB;IAgCzB,OAAO,CAAC,iBAAiB;IAmCzB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAY1B,kFAAkF;IAClF,OAAO,CAAC,YAAY;IAapB,uFAAuF;IACvF,OAAO,CAAC,aAAa;IAYrB,oFAAoF;IACpF,OAAO,CAAC,wBAAwB;IAqBhC,sFAAsF;IACtF,OAAO,CAAC,0BAA0B;IA4BlC,OAAO,CAAC,aAAa;IAqCrB,OAAO,CAAC,iBAAiB;IAiGzB,OAAO,CAAC,mBAAmB;IA6E3B,OAAO,CAAC,iBAAiB;IA2DzB,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,oBAAoB;IA6C5B,OAAO,CAAC,iBAAiB;IAMzB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,gBAAgB;IA+CxB,OAAO,CAAC,oBAAoB;IAwB5B,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,2BAA2B;IAwCnC,OAAO,CAAC,mBAAmB;IAiC3B,OAAO,CAAC,wBAAwB;IAehC,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,QAAQ;IAiEhB,OAAO,CAAC,UAAU;IAqBlB,OAAO,CAAC,YAAY;IA8BpB,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,YAAY;IA0BpB,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,MAAM;IAmJhC,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,YAAY;IAmMpB;;;;;OAKG;IACH,OAAO,CAAC,4BAA4B;IA0EpC;wEACoE;IACpE,OAAO,CAAC,iBAAiB;IAgBzB,4GAA4G;IAC5G,OAAO,CAAC,iBAAiB;IAgCzB;gGAC4F;IAC5F,OAAO,CAAC,2BAA2B;IA8BnC,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,WAAW;IA0BnB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,WAAW;IAmBnB;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;IAiD7B;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;CAsG/B;AAoFD,wBAAgB,QAAQ,CACtB,OAAO,EAAE,GAAG,CAAC,OAAO,EACpB,IAAI,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,EAC9B,iBAAiB,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,EAC/C,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAC3B,aAAa,CAEf"}