@analogjs/vite-plugin-angular 2.5.0-beta.9 → 2.5.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 (82) hide show
  1. package/README.md +24 -0
  2. package/package.json +23 -5
  3. package/src/lib/angular-vite-plugin.d.ts +12 -1
  4. package/src/lib/angular-vite-plugin.js +102 -300
  5. package/src/lib/angular-vite-plugin.js.map +1 -1
  6. package/src/lib/angular-vitest-plugin.js +2 -2
  7. package/src/lib/angular-vitest-plugin.js.map +1 -1
  8. package/src/lib/compiler/angular-version.d.ts +19 -0
  9. package/src/lib/compiler/angular-version.js +42 -0
  10. package/src/lib/compiler/angular-version.js.map +1 -0
  11. package/src/lib/compiler/class-field-lowering.d.ts +23 -0
  12. package/src/lib/compiler/class-field-lowering.js +213 -0
  13. package/src/lib/compiler/class-field-lowering.js.map +1 -0
  14. package/src/lib/compiler/compile.d.ts +44 -0
  15. package/src/lib/compiler/compile.js +1160 -0
  16. package/src/lib/compiler/compile.js.map +1 -0
  17. package/src/lib/compiler/constants.d.ts +18 -0
  18. package/src/lib/compiler/constants.js +48 -0
  19. package/src/lib/compiler/constants.js.map +1 -0
  20. package/src/lib/compiler/debug.d.ts +22 -0
  21. package/src/lib/compiler/debug.js +35 -0
  22. package/src/lib/compiler/debug.js.map +1 -0
  23. package/src/lib/compiler/defer.d.ts +47 -0
  24. package/src/lib/compiler/defer.js +203 -0
  25. package/src/lib/compiler/defer.js.map +1 -0
  26. package/src/lib/compiler/dts-reader.d.ts +35 -0
  27. package/src/lib/compiler/dts-reader.js +526 -0
  28. package/src/lib/compiler/dts-reader.js.map +1 -0
  29. package/src/lib/compiler/hmr.d.ts +16 -0
  30. package/src/lib/compiler/hmr.js +80 -0
  31. package/src/lib/compiler/hmr.js.map +1 -0
  32. package/src/lib/compiler/index.d.ts +7 -0
  33. package/src/lib/compiler/index.js +8 -0
  34. package/src/lib/compiler/index.js.map +1 -0
  35. package/src/lib/compiler/jit-metadata.d.ts +14 -0
  36. package/src/lib/compiler/jit-metadata.js +224 -0
  37. package/src/lib/compiler/jit-metadata.js.map +1 -0
  38. package/src/lib/compiler/jit-transform.d.ts +24 -0
  39. package/src/lib/compiler/jit-transform.js +269 -0
  40. package/src/lib/compiler/jit-transform.js.map +1 -0
  41. package/src/lib/compiler/js-emitter.d.ts +10 -0
  42. package/src/lib/compiler/js-emitter.js +502 -0
  43. package/src/lib/compiler/js-emitter.js.map +1 -0
  44. package/src/lib/compiler/metadata.d.ts +57 -0
  45. package/src/lib/compiler/metadata.js +894 -0
  46. package/src/lib/compiler/metadata.js.map +1 -0
  47. package/src/lib/compiler/registry.d.ts +49 -0
  48. package/src/lib/compiler/registry.js +273 -0
  49. package/src/lib/compiler/registry.js.map +1 -0
  50. package/src/lib/compiler/resource-inliner.d.ts +21 -0
  51. package/src/lib/compiler/resource-inliner.js +200 -0
  52. package/src/lib/compiler/resource-inliner.js.map +1 -0
  53. package/src/lib/compiler/style-ast.d.ts +8 -0
  54. package/src/lib/compiler/style-ast.js +110 -0
  55. package/src/lib/compiler/style-ast.js.map +1 -0
  56. package/src/lib/compiler/styles.d.ts +13 -0
  57. package/src/lib/compiler/styles.js +60 -0
  58. package/src/lib/compiler/styles.js.map +1 -0
  59. package/src/lib/compiler/test-helpers.d.ts +7 -0
  60. package/src/lib/compiler/test-helpers.js +28 -0
  61. package/src/lib/compiler/test-helpers.js.map +1 -0
  62. package/src/lib/compiler/type-elision.d.ts +26 -0
  63. package/src/lib/compiler/type-elision.js +313 -0
  64. package/src/lib/compiler/type-elision.js.map +1 -0
  65. package/src/lib/compiler/utils.d.ts +10 -0
  66. package/src/lib/compiler/utils.js +95 -0
  67. package/src/lib/compiler/utils.js.map +1 -0
  68. package/src/lib/fast-compile-plugin.d.ts +28 -0
  69. package/src/lib/fast-compile-plugin.js +404 -0
  70. package/src/lib/fast-compile-plugin.js.map +1 -0
  71. package/src/lib/utils/plugin-config.d.ts +45 -0
  72. package/src/lib/utils/plugin-config.js +89 -0
  73. package/src/lib/utils/plugin-config.js.map +1 -0
  74. package/src/lib/utils/safe-module-paths.d.ts +16 -0
  75. package/src/lib/utils/safe-module-paths.js +26 -0
  76. package/src/lib/utils/safe-module-paths.js.map +1 -0
  77. package/src/lib/utils/virtual-ids.d.ts +4 -0
  78. package/src/lib/utils/virtual-ids.js +30 -0
  79. package/src/lib/utils/virtual-ids.js.map +1 -0
  80. package/src/lib/utils/virtual-resources.d.ts +19 -0
  81. package/src/lib/utils/virtual-resources.js +47 -0
  82. package/src/lib/utils/virtual-resources.js.map +1 -0
@@ -0,0 +1,502 @@
1
+ import * as ts from 'typescript';
2
+ import * as o from '@angular/compiler';
3
+ /** Shared printer — only used as fallback for complex WrappedNodeExpr (e.g. decorator args). */
4
+ const sharedPrinter = ts.createPrinter({ removeComments: true });
5
+ const emptySourceFile = ts.createSourceFile('_.ts', '', ts.ScriptTarget.Latest, false);
6
+ // Operator metadata table — name, JS string, and precedence (higher = tighter
7
+ // binding). Used to build version-aware lookup maps below.
8
+ //
9
+ // Why a runtime build instead of static `[o.BinaryOperator.Equals]: '=='`
10
+ // literals: Angular's `BinaryOperator` enum gains members between major
11
+ // versions (Assign and the 9 compound assignments were added in v21,
12
+ // Exponentiation/In in v20, InstanceOf in v21). On older Angular versions
13
+ // the missing members evaluate to `undefined` at module load time, and
14
+ // every `[undefined]: '...'` entry collides on the single string key
15
+ // `"undefined"` — last write wins. Pre-Phase-1, that gave the v19 install
16
+ // `BINARY_OP_STR["undefined"] === '??='`, so any expression with an
17
+ // unknown operator emitted `??=` instead of failing loudly. Building the
18
+ // table by iterating known names and skipping `undefined` values
19
+ // eliminates the collision: members that don't exist on the installed
20
+ // Angular are simply absent from the map.
21
+ //
22
+ // Precedence values match MDN's table, skipping levels not used by Angular
23
+ // (bitwise XOR, shifts).
24
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_precedence
25
+ const OP_DEFINITIONS = [
26
+ ['Assign', '=', 2],
27
+ ['AdditionAssignment', '+=', 2],
28
+ ['SubtractionAssignment', '-=', 2],
29
+ ['MultiplicationAssignment', '*=', 2],
30
+ ['DivisionAssignment', '/=', 2],
31
+ ['RemainderAssignment', '%=', 2],
32
+ ['ExponentiationAssignment', '**=', 2],
33
+ ['AndAssignment', '&&=', 2],
34
+ ['OrAssignment', '||=', 2],
35
+ ['NullishCoalesceAssignment', '??=', 2],
36
+ ['NullishCoalesce', '??', 4],
37
+ ['Or', '||', 4],
38
+ ['And', '&&', 5],
39
+ ['BitwiseOr', '|', 6],
40
+ ['BitwiseAnd', '&', 8],
41
+ ['Equals', '==', 9],
42
+ ['NotEquals', '!=', 9],
43
+ ['Identical', '===', 9],
44
+ ['NotIdentical', '!==', 9],
45
+ ['Lower', '<', 10],
46
+ ['LowerEquals', '<=', 10],
47
+ ['Bigger', '>', 10],
48
+ ['BiggerEquals', '>=', 10],
49
+ ['In', 'in', 10],
50
+ ['InstanceOf', 'instanceof', 10],
51
+ ['Plus', '+', 12],
52
+ ['Minus', '-', 12],
53
+ ['Multiply', '*', 13],
54
+ ['Divide', '/', 13],
55
+ ['Modulo', '%', 13],
56
+ ['Exponentiation', '**', 14],
57
+ ];
58
+ /** Operator integer values that represent assignment forms (`=`, `+=`, etc.). */
59
+ const ASSIGNMENT_OP_NAMES = new Set([
60
+ 'Assign',
61
+ 'AdditionAssignment',
62
+ 'SubtractionAssignment',
63
+ 'MultiplicationAssignment',
64
+ 'DivisionAssignment',
65
+ 'RemainderAssignment',
66
+ 'ExponentiationAssignment',
67
+ 'AndAssignment',
68
+ 'OrAssignment',
69
+ 'NullishCoalesceAssignment',
70
+ ]);
71
+ const BINARY_OP_STR = new Map();
72
+ const BINARY_PRECEDENCE = new Map();
73
+ const ASSIGNMENT_OP_VALUES = new Set();
74
+ for (const [name, str, precedence] of OP_DEFINITIONS) {
75
+ const value = o.BinaryOperator[name];
76
+ if (typeof value !== 'number')
77
+ continue;
78
+ BINARY_OP_STR.set(value, str);
79
+ BINARY_PRECEDENCE.set(value, precedence);
80
+ if (ASSIGNMENT_OP_NAMES.has(name)) {
81
+ ASSIGNMENT_OP_VALUES.add(value);
82
+ }
83
+ }
84
+ /** Returns true when `op` represents any kind of assignment (`=`, `+=`, etc.). */
85
+ function isAssignmentOperator(op) {
86
+ return ASSIGNMENT_OP_VALUES.has(op);
87
+ }
88
+ /**
89
+ * Determine whether a child expression needs parentheses when it appears
90
+ * as an operand of `parentOp`.
91
+ */
92
+ function childNeedsParens(parentOp, child, isRhs) {
93
+ if (!(child instanceof o.BinaryOperatorExpr))
94
+ return false;
95
+ const childOp = child.operator;
96
+ const parentPrec = BINARY_PRECEDENCE.get(parentOp);
97
+ const childPrec = BINARY_PRECEDENCE.get(childOp);
98
+ if (parentPrec === undefined || childPrec === undefined)
99
+ return false;
100
+ // ?? cannot appear with || or && without explicit grouping (JS spec)
101
+ if ((parentOp === o.BinaryOperator.NullishCoalesce &&
102
+ (childOp === o.BinaryOperator.And || childOp === o.BinaryOperator.Or)) ||
103
+ (childOp === o.BinaryOperator.NullishCoalesce &&
104
+ (parentOp === o.BinaryOperator.And || parentOp === o.BinaryOperator.Or))) {
105
+ return true;
106
+ }
107
+ // Child has strictly lower precedence
108
+ if (childPrec < parentPrec)
109
+ return true;
110
+ // Same precedence — depends on associativity and position
111
+ if (childPrec === parentPrec) {
112
+ // ** is right-associative: LHS same-prec needs parens, RHS does not
113
+ if (parentOp === o.BinaryOperator.Exponentiation)
114
+ return !isRhs;
115
+ // All other ops are left-associative: RHS same-prec needs parens
116
+ return isRhs;
117
+ }
118
+ return false;
119
+ }
120
+ /** Polyfill for `__makeTemplateObject` used in downleveled `$localize` calls. */
121
+ const MAKE_TEMPLATE_OBJECT_POLYFILL = '(this&&this.__makeTemplateObject||function(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e})';
122
+ const SINGLE_QUOTE_ESCAPE_RE = /[\\\'\n\r]/g;
123
+ /** Escape a string for use as a single-quoted string literal. */
124
+ function escapeForLocalize(input) {
125
+ const body = input.replace(SINGLE_QUOTE_ESCAPE_RE, (match) => {
126
+ if (match === '\n')
127
+ return '\\n';
128
+ if (match === '\r')
129
+ return '\\r';
130
+ return `\\${match}`;
131
+ });
132
+ return `'${body}'`;
133
+ }
134
+ /**
135
+ * Emits Angular output AST directly to JavaScript strings, bypassing
136
+ * ts.factory node creation and ts.Printer serialization (~4x faster).
137
+ */
138
+ class JSEmitter {
139
+ /** Set by compile() so WrappedNodeExpr fallback can print with correct source context. */
140
+ static _currentSourceFile;
141
+ /** Set by compile() so OXC-based WrappedNodeExpr can slice original source. */
142
+ static _currentSourceCode;
143
+ emitExpr(e) {
144
+ if (!e)
145
+ return 'null';
146
+ if (typeof e.visitExpression === 'function')
147
+ return e.visitExpression(this, null);
148
+ // Angular v21 LiteralMapPropertyAssignment: {key, value, quoted}
149
+ if ('key' in e && 'value' in e) {
150
+ const key = e.quoted ? JSON.stringify(e.key) : e.key;
151
+ return key + ': ' + this.emitExpr(e.value);
152
+ }
153
+ return 'null';
154
+ }
155
+ visitWrappedNodeExpr(ast) {
156
+ const node = ast.node;
157
+ // Raw source text: already resolved to a string at wrap time
158
+ if (typeof node === 'string')
159
+ return node;
160
+ // OXC AST nodes: identified by string `type` property + numeric start/end
161
+ if (typeof node.type === 'string' && typeof node.start === 'number') {
162
+ const src = JSEmitter._currentSourceCode;
163
+ if (node.type === 'Identifier')
164
+ return node.name;
165
+ if (node.type === 'StringLiteral')
166
+ return JSON.stringify(node.value);
167
+ if (node.type === 'NumericLiteral')
168
+ return String(node.value);
169
+ if (node.type === 'BooleanLiteral')
170
+ return node.value ? 'true' : 'false';
171
+ if (node.type === 'NullLiteral')
172
+ return 'null';
173
+ if (node.type === 'TemplateLiteral' && !node.expressions?.length)
174
+ return '`' + node.quasis[0].value.raw + '`';
175
+ // Fallback: slice original source for complex OXC nodes
176
+ if (src)
177
+ return src.slice(node.start, node.end);
178
+ return 'null';
179
+ }
180
+ // TypeScript AST nodes: identified by numeric `kind` property
181
+ if (node.kind === ts.SyntaxKind.Identifier)
182
+ return node.escapedText;
183
+ if (node.kind === ts.SyntaxKind.StringLiteral)
184
+ return JSON.stringify(node.text);
185
+ if (node.kind === ts.SyntaxKind.NumericLiteral)
186
+ return node.text;
187
+ if (node.kind === ts.SyntaxKind.TrueKeyword)
188
+ return 'true';
189
+ if (node.kind === ts.SyntaxKind.FalseKeyword)
190
+ return 'false';
191
+ if (node.kind === ts.SyntaxKind.NullKeyword)
192
+ return 'null';
193
+ if (node.kind === ts.SyntaxKind.NoSubstitutionTemplateLiteral)
194
+ return '`' + node.text + '`';
195
+ // Fallback for complex wrapped TS nodes (e.g. decorator arguments, array literals).
196
+ // Use currentSourceFile when available for correct position-based printing.
197
+ return sharedPrinter.printNode(ts.EmitHint.Unspecified, node, JSEmitter._currentSourceFile || emptySourceFile);
198
+ }
199
+ visitExternalExpr(ast) {
200
+ const name = ast.value.name;
201
+ if (name === 'ngDevMode')
202
+ return name;
203
+ // When name is null/undefined, this is a bare module reference (e.g. ngImport: i0)
204
+ if (!name)
205
+ return 'i0';
206
+ return 'i0.' + name;
207
+ }
208
+ visitLiteralExpr(ast) {
209
+ const v = ast.value;
210
+ if (typeof v === 'string')
211
+ return JSON.stringify(v);
212
+ if (typeof v === 'number')
213
+ return v < 0 ? '(-' + -v + ')' : '' + v;
214
+ if (typeof v === 'boolean')
215
+ return v ? 'true' : 'false';
216
+ if (v === undefined)
217
+ return 'void 0';
218
+ return 'null';
219
+ }
220
+ visitLiteralArrayExpr(ast) {
221
+ return '[' + ast.entries.map((e) => this.emitExpr(e)).join(', ') + ']';
222
+ }
223
+ visitLiteralMapExpr(ast) {
224
+ return '{' + ast.entries.map((e) => this.emitExpr(e)).join(', ') + '}';
225
+ }
226
+ visitInvokeFunctionExpr(ast) {
227
+ const fn = ast.fn.visitExpression(this, null);
228
+ const args = ast.args.map((a) => this.emitExpr(a)).join(', ');
229
+ // Wrap arrow/function expressions in parens for valid IIFE syntax
230
+ if (ast.fn instanceof o.ArrowFunctionExpr ||
231
+ ast.fn instanceof o.FunctionExpr) {
232
+ return '(' + fn + ')(' + args + ')';
233
+ }
234
+ return fn + '(' + args + ')';
235
+ }
236
+ visitReadVarExpr(ast) {
237
+ if (ast.name === 'this')
238
+ return 'this';
239
+ if (ast.name === 'super')
240
+ return 'super';
241
+ return ast.name;
242
+ }
243
+ visitReadPropExpr(ast) {
244
+ return ast.receiver.visitExpression(this, null) + '.' + ast.name;
245
+ }
246
+ visitReadKeyExpr(ast) {
247
+ return (ast.receiver.visitExpression(this, null) +
248
+ '[' +
249
+ ast.index.visitExpression(this, null) +
250
+ ']');
251
+ }
252
+ visitConditionalExpr(ast) {
253
+ return ('(' +
254
+ ast.condition.visitExpression(this, null) +
255
+ ' ? ' +
256
+ ast.trueCase.visitExpression(this, null) +
257
+ ' : ' +
258
+ ast.falseCase.visitExpression(this, null) +
259
+ ')');
260
+ }
261
+ visitBinaryOperatorExpr(ast) {
262
+ // `BINARY_OP_STR.get(...)` returns `undefined` when the operator value
263
+ // doesn't exist in the installed Angular's `BinaryOperator` enum (the
264
+ // enum is missing 13 members on v19, 11 on v20). Falling back to `'='`
265
+ // would silently produce wrong code; instead, we throw so the error
266
+ // surfaces in the DEBUG output and the calling test fails loudly.
267
+ const op = BINARY_OP_STR.get(ast.operator);
268
+ if (op === undefined) {
269
+ throw new Error(`[fast-compile] Unsupported BinaryOperator value ${ast.operator} ` +
270
+ `on @angular/compiler ${o.VERSION?.full ?? '(unknown version)'}`);
271
+ }
272
+ const lhsRaw = ast.lhs.visitExpression(this, null);
273
+ const rhsRaw = ast.rhs.visitExpression(this, null);
274
+ const lhs = childNeedsParens(ast.operator, ast.lhs, false)
275
+ ? '(' + lhsRaw + ')'
276
+ : lhsRaw;
277
+ const rhs = childNeedsParens(ast.operator, ast.rhs, true)
278
+ ? '(' + rhsRaw + ')'
279
+ : rhsRaw;
280
+ const expr = lhs + ' ' + op + ' ' + rhs;
281
+ // Wrap assignments in parens so they work correctly as ternary conditions:
282
+ // (tmp = val) ? a : b vs tmp = val ? a : b
283
+ //
284
+ // `isAssignmentOperator` is built at module load time from the operator
285
+ // names that actually exist on the installed Angular's enum. This
286
+ // works whether `Assign` is present (v21+) or absent (v19/v20) — on
287
+ // older versions the assignment branch is simply unreachable because
288
+ // Angular's compiler never constructs an Assign-operator expression.
289
+ if (isAssignmentOperator(ast.operator)) {
290
+ return '(' + expr + ')';
291
+ }
292
+ return expr;
293
+ }
294
+ visitNotExpr(ast) {
295
+ return '!(' + ast.condition.visitExpression(this, null) + ')';
296
+ }
297
+ visitFunctionExpr(ast) {
298
+ return ('(' +
299
+ ast.params.map((p) => p.name).join(', ') +
300
+ ') => {' +
301
+ ast.statements.map((s) => s.visitStatement(this, null)).join(' ') +
302
+ '}');
303
+ }
304
+ visitArrowFunctionExpr(ast) {
305
+ const params = '(' + ast.params.map((p) => p.name).join(', ') + ')';
306
+ if (Array.isArray(ast.body))
307
+ return (params +
308
+ ' => {' +
309
+ ast.body.map((s) => s.visitStatement(this, null)).join(' ') +
310
+ '}');
311
+ const bodyExpr = ast.body.visitExpression(this, null);
312
+ // Wrap object literals in parens so `() => {key: val}` isn't parsed
313
+ // as a block with a labeled statement.
314
+ if (ast.body instanceof o.LiteralMapExpr) {
315
+ return params + ' => (' + bodyExpr + ')';
316
+ }
317
+ return params + ' => ' + bodyExpr;
318
+ }
319
+ // `Write*Expr` visitors must wrap the assignment in parentheses so that
320
+ // it composes correctly when nested inside higher-precedence parents
321
+ // (e.g. as the test of a `ConditionalExpr`). Without the wrapping,
322
+ // tmp = ctx.data() ? 0 : -1
323
+ // parses as `tmp = (ctx.data() ? 0 : -1)` because assignment binds
324
+ // looser than the ternary, which silently assigns the wrong value to
325
+ // `tmp`. Angular's own `AbstractEmitterVisitor.visitWriteVarExpr`
326
+ // applies the same context-sensitive wrapping (it skips the parens
327
+ // when the assignment is a top-level statement to avoid `(x = 1);`
328
+ // noise; we always wrap for simplicity — the redundant parens at
329
+ // statement level are harmless).
330
+ //
331
+ // This matters specifically on Angular v19/v20, where assignment is
332
+ // represented in the IR via `WriteVarExpr` / `AssignTemporaryExpr →
333
+ // WriteVarExpr`. On v21+ the same construct is represented via
334
+ // `BinaryOperatorExpr(Assign, ...)`, which `visitBinaryOperatorExpr`
335
+ // already wraps via `isAssignmentOperator`. Without these wrappers,
336
+ // `@if (data(); as item)` and similar conditional alias forms emit
337
+ // runtime-broken code on v19/v20.
338
+ visitWriteVarExpr(ast) {
339
+ return '(' + ast.name + ' = ' + ast.value.visitExpression(this, null) + ')';
340
+ }
341
+ visitWritePropExpr(ast) {
342
+ return ('(' +
343
+ ast.receiver.visitExpression(this, null) +
344
+ '.' +
345
+ ast.name +
346
+ ' = ' +
347
+ ast.value.visitExpression(this, null) +
348
+ ')');
349
+ }
350
+ visitWriteKeyExpr(ast) {
351
+ return ('(' +
352
+ ast.receiver.visitExpression(this, null) +
353
+ '[' +
354
+ ast.index.visitExpression(this, null) +
355
+ '] = ' +
356
+ ast.value.visitExpression(this, null) +
357
+ ')');
358
+ }
359
+ visitInvokeMethodExpr(ast) {
360
+ return (ast.receiver.visitExpression(this, null) +
361
+ '.' +
362
+ ast.name +
363
+ '(' +
364
+ ast.args.map((a) => this.emitExpr(a)).join(', ') +
365
+ ')');
366
+ }
367
+ visitTypeofExpr(ast) {
368
+ return 'typeof ' + ast.expr.visitExpression(this, null);
369
+ }
370
+ visitUnaryOperatorExpr(ast) {
371
+ return '-(' + ast.expr.visitExpression(this, null) + ')';
372
+ }
373
+ visitInstantiateExpr(ast) {
374
+ return ('new (' +
375
+ ast.classExpr.visitExpression(this, null) +
376
+ ')(' +
377
+ ast.args.map((a) => this.emitExpr(a)).join(', ') +
378
+ ')');
379
+ }
380
+ visitCommaExpr(ast) {
381
+ return ast.parts.map((p) => p.visitExpression(this, null)).join(', ');
382
+ }
383
+ visitParenthesizedExpr(ast) {
384
+ return '(' + ast.expr.visitExpression(this, null) + ')';
385
+ }
386
+ visitVoidExpr(ast) {
387
+ return 'void ' + ast.expr.visitExpression(this, null);
388
+ }
389
+ visitSpreadElementExpr(ast) {
390
+ return '...' + ast.expression.visitExpression(this, null);
391
+ }
392
+ visitDynamicImportExpr(ast) {
393
+ return ('import(' +
394
+ (typeof ast.url === 'string'
395
+ ? JSON.stringify(ast.url)
396
+ : ast.url.visitExpression(this, null)) +
397
+ ')');
398
+ }
399
+ visitTemplateLiteralExpr(ast) {
400
+ return ('`' +
401
+ ast.elements[0].text +
402
+ ast.expressions
403
+ .map((e, i) => '${' +
404
+ e.visitExpression(this, null) +
405
+ '}' +
406
+ ast.elements[i + 1].text)
407
+ .join('') +
408
+ '`');
409
+ }
410
+ visitTaggedTemplateLiteralExpr(ast) {
411
+ const elements = ast.template.elements;
412
+ const expressions = ast.template.expressions;
413
+ const head = elements[0].text;
414
+ const spans = expressions
415
+ .map((e, i) => '${' + e.visitExpression(this, null) + '}' + elements[i + 1].text)
416
+ .join('');
417
+ return ast.tag.visitExpression(this, null) + '`' + head + spans + '`';
418
+ }
419
+ visitLocalizedString(ast) {
420
+ // Emit the downleveled form:
421
+ // $localize(makeTemplateObject(cooked, raw), expr1, expr2, ...)
422
+ const parts = [ast.serializeI18nHead()];
423
+ for (let i = 1; i < ast.messageParts.length; i++) {
424
+ parts.push(ast.serializeI18nTemplatePart(i));
425
+ }
426
+ const cooked = parts.map((p) => escapeForLocalize(p.cooked)).join(', ');
427
+ const raw = parts.map((p) => escapeForLocalize(p.raw)).join(', ');
428
+ const exprs = ast.expressions.map((e) => this.emitExpr(e));
429
+ return ('$localize(' +
430
+ MAKE_TEMPLATE_OBJECT_POLYFILL +
431
+ '([' +
432
+ cooked +
433
+ '], [' +
434
+ raw +
435
+ '])' +
436
+ (exprs.length > 0 ? ', ' + exprs.join(', ') : '') +
437
+ ')');
438
+ }
439
+ visitRegularExpressionLiteral(ast) {
440
+ return '/' + (ast.body ?? ast.pattern) + '/' + ast.flags;
441
+ }
442
+ visitTemplateLiteralElementExpr(ast) {
443
+ return JSON.stringify(ast.text);
444
+ }
445
+ // Statement visitors
446
+ visitReturnStmt(stmt) {
447
+ return 'return ' + stmt.value.visitExpression(this, null) + ';';
448
+ }
449
+ visitExpressionStmt(stmt) {
450
+ return stmt.expr.visitExpression(this, null) + ';';
451
+ }
452
+ visitIfStmt(stmt) {
453
+ let s = 'if (' +
454
+ stmt.condition.visitExpression(this, null) +
455
+ ') {' +
456
+ stmt.trueCase.map((s2) => s2.visitStatement(this, null)).join(' ') +
457
+ '}';
458
+ if (stmt.falseCase.length)
459
+ s +=
460
+ ' else {' +
461
+ stmt.falseCase
462
+ .map((s2) => s2.visitStatement(this, null))
463
+ .join(' ') +
464
+ '}';
465
+ return s;
466
+ }
467
+ visitDeclareVarStmt(stmt) {
468
+ const kw = stmt.hasModifier(o.StmtModifier.Final) ? 'const' : 'let';
469
+ return (kw +
470
+ ' ' +
471
+ stmt.name +
472
+ (stmt.value ? ' = ' + stmt.value.visitExpression(this, null) : '') +
473
+ ';');
474
+ }
475
+ visitDeclareFunctionStmt(stmt) {
476
+ return ('function ' +
477
+ stmt.name +
478
+ '(' +
479
+ stmt.params.map((p) => p.name).join(', ') +
480
+ ') {' +
481
+ stmt.statements.map((s) => s.visitStatement(this, null)).join(' ') +
482
+ '}');
483
+ }
484
+ }
485
+ const stringEmitter = new JSEmitter();
486
+ /** Emit Angular output AST expression directly to a JavaScript string. */
487
+ export function emitAngularExpr(expr) {
488
+ return expr.visitExpression(stringEmitter, null);
489
+ }
490
+ /** Emit Angular output AST statement directly to a JavaScript string. */
491
+ export function emitAngularStmt(stmt) {
492
+ return stmt.visitStatement(stringEmitter, null);
493
+ }
494
+ /** Set the current source file for WrappedNodeExpr fallback printing. */
495
+ export function setEmitterSourceFile(sf) {
496
+ JSEmitter._currentSourceFile = sf;
497
+ }
498
+ /** Set the current source code for OXC-based WrappedNodeExpr slice fallback. */
499
+ export function setEmitterSourceCode(code) {
500
+ JSEmitter._currentSourceCode = code;
501
+ }
502
+ //# sourceMappingURL=js-emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js-emitter.js","sourceRoot":"","sources":["../../../../../../packages/vite-plugin-angular/src/lib/compiler/js-emitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Walk the top-level statements of an OXC program and collect a map of
3
+ * statically-resolvable string-valued `const NAME = ...` declarations.
4
+ *
5
+ * Used so decorator metadata fields like `template:` can reference
6
+ * module-level Tailwind class chains (or any other string constants) via
7
+ * JS template-literal interpolation. Resolution is iterative: a const may
8
+ * reference earlier-resolved consts via `${other}` interpolation.
9
+ *
10
+ * Only `const` declarations are considered. Non-string initializers,
11
+ * function calls, member access, and any expression that cannot be reduced
12
+ * to a string at parse time are ignored.
13
+ */
14
+ export declare function collectStringConstants(oxcProgram: any): Map<string, string>;
15
+ /**
16
+ * Extract decorator metadata from an OXC decorator AST node.
17
+ * Parses @Component, @Directive, @Pipe, @Injectable, @NgModule arguments.
18
+ *
19
+ * `stringConsts`, when provided, lets string-typed metadata fields
20
+ * (`template`, `selector`, `templateUrl`, `styles`, `styleUrl`, `styleUrls`,
21
+ * `name`, `exportAs`, `providedIn`) resolve module-level string constants
22
+ * referenced via template-literal interpolation, e.g.
23
+ * `template: \`<div class="${tw}">x</div>\``.
24
+ */
25
+ export declare function extractMetadata(dec: any | undefined, sourceCode: string, stringConsts?: Map<string, string>): any;
26
+ /**
27
+ * Detect signal-based APIs on class members: input(), model(), output(),
28
+ * viewChild(), contentChild(), viewChildren(), contentChildren().
29
+ */
30
+ export declare function detectSignals(classNode: any, sourceCode: string): {
31
+ inputs: any;
32
+ outputs: any;
33
+ viewQueries: any[];
34
+ contentQueries: any[];
35
+ };
36
+ /**
37
+ * Detect decorator-based field metadata: @Input, @Output, @ViewChild,
38
+ * @ContentChild, @ViewChildren, @ContentChildren, @HostBinding, @HostListener.
39
+ */
40
+ export declare function detectFieldDecorators(classNode: any, sourceCode: string): {
41
+ inputs: any;
42
+ outputs: any;
43
+ viewQueries: any[];
44
+ contentQueries: any[];
45
+ hostProperties: Record<string, string>;
46
+ hostListeners: Record<string, string>;
47
+ };
48
+ /**
49
+ * Analyze constructor parameters for dependency injection.
50
+ * Returns:
51
+ * - R3DependencyMetadata[] for normal constructors
52
+ * - null if class extends another without own constructor (use inherited factory)
53
+ * - 'invalid' if any parameter has a type-only import token
54
+ *
55
+ * Accepts an OXC ClassDeclaration node and the original source string.
56
+ */
57
+ export declare function extractConstructorDeps(classNode: any, sourceCode: string, typeOnlyImports: Set<string>): any[] | 'invalid' | null;