@analogjs/angular-compiler 2.5.0-beta.1

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 (54) hide show
  1. package/COMPILER.md +474 -0
  2. package/README.md +5 -0
  3. package/package.json +51 -0
  4. package/src/index.d.ts +5 -0
  5. package/src/index.js +6 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/ast-translator.d.ts +40 -0
  8. package/src/lib/ast-translator.js +243 -0
  9. package/src/lib/ast-translator.js.map +1 -0
  10. package/src/lib/compile.d.ts +24 -0
  11. package/src/lib/compile.js +630 -0
  12. package/src/lib/compile.js.map +1 -0
  13. package/src/lib/defer.d.ts +23 -0
  14. package/src/lib/defer.js +158 -0
  15. package/src/lib/defer.js.map +1 -0
  16. package/src/lib/dts-reader.d.ts +25 -0
  17. package/src/lib/dts-reader.js +326 -0
  18. package/src/lib/dts-reader.js.map +1 -0
  19. package/src/lib/hmr.d.ts +12 -0
  20. package/src/lib/hmr.js +49 -0
  21. package/src/lib/hmr.js.map +1 -0
  22. package/src/lib/index.d.ts +5 -0
  23. package/src/lib/index.js +6 -0
  24. package/src/lib/index.js.map +1 -0
  25. package/src/lib/jit-metadata.d.ts +11 -0
  26. package/src/lib/jit-metadata.js +201 -0
  27. package/src/lib/jit-metadata.js.map +1 -0
  28. package/src/lib/jit-transform.d.ts +21 -0
  29. package/src/lib/jit-transform.js +207 -0
  30. package/src/lib/jit-transform.js.map +1 -0
  31. package/src/lib/js-emitter.d.ts +8 -0
  32. package/src/lib/js-emitter.js +317 -0
  33. package/src/lib/js-emitter.js.map +1 -0
  34. package/src/lib/metadata.d.ts +36 -0
  35. package/src/lib/metadata.js +465 -0
  36. package/src/lib/metadata.js.map +1 -0
  37. package/src/lib/registry.d.ts +32 -0
  38. package/src/lib/registry.js +177 -0
  39. package/src/lib/registry.js.map +1 -0
  40. package/src/lib/resource-inliner.d.ts +17 -0
  41. package/src/lib/resource-inliner.js +109 -0
  42. package/src/lib/resource-inliner.js.map +1 -0
  43. package/src/lib/style-ast.d.ts +8 -0
  44. package/src/lib/style-ast.js +110 -0
  45. package/src/lib/style-ast.js.map +1 -0
  46. package/src/lib/styles.d.ts +13 -0
  47. package/src/lib/styles.js +60 -0
  48. package/src/lib/styles.js.map +1 -0
  49. package/src/lib/utils.d.ts +8 -0
  50. package/src/lib/utils.js +71 -0
  51. package/src/lib/utils.js.map +1 -0
  52. package/vite.config.d.ts +2 -0
  53. package/vite.config.js +19 -0
  54. package/vite.config.js.map +1 -0
package/src/lib/hmr.js ADDED
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Generate HMR code using Angular's ɵɵreplaceMetadata.
3
+ *
4
+ * The applyMetadata callback re-defines ɵcmp and ɵfac on the old class
5
+ * by copying from the newly compiled class in the hot-updated module.
6
+ * ɵɵreplaceMetadata then merges the old/new definitions and recreates
7
+ * matching LViews in the component tree.
8
+ *
9
+ * Falls back to page reload if ɵɵreplaceMetadata throws.
10
+ */
11
+ export function generateHmrCode(components) {
12
+ // Export applyMetadata functions so the accept callback can access them
13
+ const applyFns = components
14
+ .map((c) => `
15
+ export function ɵhmr_${c.className}(type, namespaces) {
16
+ type.ɵcmp = ${c.className}.ɵcmp;
17
+ type.ɵfac = ${c.className}.ɵfac;
18
+ }`)
19
+ .join('\n');
20
+ const replaceBlocks = components
21
+ .map((c) => `
22
+ try {
23
+ i0.ɵɵreplaceMetadata(
24
+ ${c.className},
25
+ newModule.ɵhmr_${c.className},
26
+ { i0 },
27
+ [],
28
+ import.meta,
29
+ "${c.className}"
30
+ );
31
+ replaced = true;
32
+ } catch(e) {
33
+ // ɵɵreplaceMetadata failed — will fall back to page reload
34
+ }`)
35
+ .join('\n');
36
+ return `\n${applyFns}
37
+ if (import.meta.hot) {
38
+ import.meta.hot.accept((newModule) => {
39
+ if (!newModule) return;
40
+ let replaced = false;${replaceBlocks}
41
+ if (!replaced) {
42
+ // Fallback: if no component was successfully replaced (e.g. root component),
43
+ // trigger a full page reload
44
+ import.meta.hot.invalidate('Component HMR failed, reloading');
45
+ }
46
+ });
47
+ }`;
48
+ }
49
+ //# sourceMappingURL=hmr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmr.js","sourceRoot":"","sources":["../../../../../packages/angular-compiler/src/lib/hmr.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,UAA2B;IACzD,wEAAwE;IACxE,MAAM,QAAQ,GAAG,UAAU;SACxB,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CAAC;uBACU,CAAC,CAAC,SAAS;gBAClB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,SAAS;EACzB,CACG;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,aAAa,GAAG,UAAU;SAC7B,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CAAC;;;YAGD,CAAC,CAAC,SAAS;2BACI,CAAC,CAAC,SAAS;;;;aAIzB,CAAC,CAAC,SAAS;;;;;QAKhB,CACH;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,KAAK,QAAQ;;;;2BAIK,aAAa;;;;;;;EAOtC,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { compile, type CompileResult, type CompileOptions } from './compile.js';
2
+ export { scanFile, type RegistryEntry, type ComponentRegistry, } from './registry.js';
3
+ export { scanDtsFile, scanPackageDts, collectImportedPackages, } from './dts-reader.js';
4
+ export { jitTransform, type JitTransformResult } from './jit-transform.js';
5
+ export { inlineResourceUrls, extractInlineStyles } from './resource-inliner.js';
@@ -0,0 +1,6 @@
1
+ export { compile } from './compile.js';
2
+ export { scanFile, } from './registry.js';
3
+ export { scanDtsFile, scanPackageDts, collectImportedPackages, } from './dts-reader.js';
4
+ export { jitTransform } from './jit-transform.js';
5
+ export { inlineResourceUrls, extractInlineStyles } from './resource-inliner.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/angular-compiler/src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA2C,MAAM,cAAc,CAAC;AAChF,OAAO,EACL,QAAQ,GAGT,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,WAAW,EACX,cAAc,EACd,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAA2B,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import * as ts from 'typescript';
2
+ /**
3
+ * Build ctorParameters for constructor DI in JIT format:
4
+ * [{ type: ServiceA }, { type: ServiceB, decorators: [{type: Optional}] }]
5
+ */
6
+ export declare function buildCtorParameters(node: ts.ClassDeclaration, sf: ts.SourceFile, typeOnlyImports: Set<string>): string | null;
7
+ /**
8
+ * Build propDecorators for field decorators + signal API downleveling.
9
+ * Returns a JS object literal string or null if no props.
10
+ */
11
+ export declare function buildPropDecorators(node: ts.ClassDeclaration, sf: ts.SourceFile): string | null;
@@ -0,0 +1,201 @@
1
+ import * as ts from 'typescript';
2
+ function getCallApi(call) {
3
+ const expr = call.expression;
4
+ if (ts.isIdentifier(expr)) {
5
+ return { api: expr.text, required: false };
6
+ }
7
+ if (ts.isPropertyAccessExpression(expr) &&
8
+ ts.isIdentifier(expr.expression) &&
9
+ expr.name.text === 'required') {
10
+ return { api: expr.expression.text, required: true };
11
+ }
12
+ return null;
13
+ }
14
+ /**
15
+ * Build ctorParameters for constructor DI in JIT format:
16
+ * [{ type: ServiceA }, { type: ServiceB, decorators: [{type: Optional}] }]
17
+ */
18
+ export function buildCtorParameters(node, sf, typeOnlyImports) {
19
+ const ctor = node.members.find(ts.isConstructorDeclaration);
20
+ if (!ctor || ctor.parameters.length === 0)
21
+ return null;
22
+ const params = [];
23
+ for (const param of ctor.parameters) {
24
+ const parts = [];
25
+ // Extract type
26
+ let typeName = null;
27
+ if (param.type && ts.isTypeReferenceNode(param.type)) {
28
+ typeName = param.type.typeName.getText(sf);
29
+ }
30
+ else if (param.type && ts.isUnionTypeNode(param.type)) {
31
+ for (const t of param.type.types) {
32
+ if (ts.isTypeReferenceNode(t)) {
33
+ typeName = t.typeName.getText(sf);
34
+ break;
35
+ }
36
+ }
37
+ }
38
+ if (typeName && !typeOnlyImports.has(typeName)) {
39
+ parts.push(`type: ${typeName}`);
40
+ }
41
+ else {
42
+ parts.push(`type: undefined`);
43
+ }
44
+ // Extract parameter decorators
45
+ const paramDecs = ts.getDecorators(param);
46
+ if (paramDecs && paramDecs.length > 0) {
47
+ const decEntries = paramDecs
48
+ .map((dec) => {
49
+ if (!ts.isCallExpression(dec.expression))
50
+ return '';
51
+ const name = dec.expression.expression.getText(sf);
52
+ const args = dec.expression.arguments;
53
+ if (args.length > 0) {
54
+ return `{type: ${name}, args: [${args.map((a) => a.getText(sf)).join(', ')}]}`;
55
+ }
56
+ return `{type: ${name}}`;
57
+ })
58
+ .filter(Boolean);
59
+ if (decEntries.length > 0) {
60
+ parts.push(`decorators: [${decEntries.join(', ')}]`);
61
+ }
62
+ }
63
+ params.push(`{${parts.join(', ')}}`);
64
+ }
65
+ return params.join(', ');
66
+ }
67
+ /**
68
+ * Build propDecorators for field decorators + signal API downleveling.
69
+ * Returns a JS object literal string or null if no props.
70
+ */
71
+ export function buildPropDecorators(node, sf) {
72
+ const props = {};
73
+ for (const member of node.members) {
74
+ const memberName = member.name?.getText(sf);
75
+ if (!memberName)
76
+ continue;
77
+ // Check for field decorators (@Input, @Output, @ViewChild, etc.)
78
+ const decorators = ts.getDecorators(member);
79
+ if (decorators) {
80
+ for (const dec of decorators) {
81
+ if (!ts.isCallExpression(dec.expression))
82
+ continue;
83
+ const decName = dec.expression.expression.getText(sf);
84
+ if ([
85
+ 'Input',
86
+ 'Output',
87
+ 'ViewChild',
88
+ 'ViewChildren',
89
+ 'ContentChild',
90
+ 'ContentChildren',
91
+ 'HostBinding',
92
+ 'HostListener',
93
+ ].includes(decName)) {
94
+ if (!props[memberName])
95
+ props[memberName] = [];
96
+ const args = dec.expression.arguments;
97
+ if (args.length > 0) {
98
+ props[memberName].push(`{type: ${decName}, args: [${args.map((a) => a.getText(sf)).join(', ')}]}`);
99
+ }
100
+ else {
101
+ props[memberName].push(`{type: ${decName}}`);
102
+ }
103
+ }
104
+ }
105
+ }
106
+ // Signal API downleveling
107
+ if (ts.isPropertyDeclaration(member) &&
108
+ member.initializer &&
109
+ ts.isCallExpression(member.initializer)) {
110
+ const signalCall = getCallApi(member.initializer);
111
+ if (!signalCall)
112
+ continue;
113
+ const { api, required } = signalCall;
114
+ const args = member.initializer.arguments;
115
+ if (api === 'input') {
116
+ if (!props[memberName])
117
+ props[memberName] = [];
118
+ // Extract alias from options
119
+ let alias = null;
120
+ const optArg = required ? args[0] : args[1];
121
+ if (optArg && ts.isObjectLiteralExpression(optArg)) {
122
+ for (const p of optArg.properties) {
123
+ if (ts.isPropertyAssignment(p) &&
124
+ p.name.getText(sf) === 'alias' &&
125
+ ts.isStringLiteral(p.initializer)) {
126
+ alias = p.initializer.text;
127
+ }
128
+ }
129
+ }
130
+ const inputArgs = [];
131
+ if (alias)
132
+ inputArgs.push(`{alias: '${alias}', isSignal: true, required: ${required}}`);
133
+ else
134
+ inputArgs.push(`{isSignal: true, required: ${required}}`);
135
+ props[memberName].push(`{type: Input, args: [${inputArgs.join(', ')}]}`);
136
+ }
137
+ else if (api === 'model') {
138
+ if (!props[memberName])
139
+ props[memberName] = [];
140
+ props[memberName].push(`{type: Input, args: [{isSignal: true}]}`);
141
+ // Model also generates a Change output
142
+ const changeName = memberName + 'Change';
143
+ if (!props[changeName])
144
+ props[changeName] = [];
145
+ props[changeName].push(`{type: Output, args: ['${changeName}']}`);
146
+ }
147
+ else if (api === 'output' || api === 'outputFromObservable') {
148
+ if (!props[memberName])
149
+ props[memberName] = [];
150
+ // Extract alias
151
+ let alias = null;
152
+ const optArg = args[0];
153
+ if (optArg && ts.isObjectLiteralExpression(optArg)) {
154
+ for (const p of optArg.properties) {
155
+ if (ts.isPropertyAssignment(p) &&
156
+ p.name.getText(sf) === 'alias' &&
157
+ ts.isStringLiteral(p.initializer)) {
158
+ alias = p.initializer.text;
159
+ }
160
+ }
161
+ }
162
+ if (alias) {
163
+ props[memberName].push(`{type: Output, args: ['${alias}']}`);
164
+ }
165
+ else {
166
+ props[memberName].push(`{type: Output}`);
167
+ }
168
+ }
169
+ else if (api === 'viewChild' || api === 'viewChildren') {
170
+ if (!props[memberName])
171
+ props[memberName] = [];
172
+ const queryType = api === 'viewChildren' ? 'ViewChildren' : 'ViewChild';
173
+ if (args.length > 0) {
174
+ props[memberName].push(`{type: ${queryType}, args: [${args[0].getText(sf)}]}`);
175
+ }
176
+ else {
177
+ props[memberName].push(`{type: ${queryType}}`);
178
+ }
179
+ }
180
+ else if (api === 'contentChild' || api === 'contentChildren') {
181
+ if (!props[memberName])
182
+ props[memberName] = [];
183
+ const queryType = api === 'contentChildren' ? 'ContentChildren' : 'ContentChild';
184
+ if (args.length > 0) {
185
+ props[memberName].push(`{type: ${queryType}, args: [${args[0].getText(sf)}]}`);
186
+ }
187
+ else {
188
+ props[memberName].push(`{type: ${queryType}}`);
189
+ }
190
+ }
191
+ }
192
+ }
193
+ const entries = Object.entries(props);
194
+ if (entries.length === 0)
195
+ return null;
196
+ const propsStr = entries
197
+ .map(([key, decs]) => `${key}: [${decs.join(', ')}]`)
198
+ .join(', ');
199
+ return `{${propsStr}}`;
200
+ }
201
+ //# sourceMappingURL=jit-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jit-metadata.js","sourceRoot":"","sources":["../../../../../packages/angular-compiler/src/lib/jit-metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface JitTransformResult {
2
+ code: string;
3
+ map: any;
4
+ }
5
+ /**
6
+ * JIT transform for Angular files.
7
+ *
8
+ * Converts Angular decorators to static metadata arrays that Angular's
9
+ * runtime JIT compiler reads via ReflectionCapabilities:
10
+ *
11
+ * - Class.decorators = [{ type: Component, args: [{...}] }]
12
+ * - Class.ctorParameters = () => [{ type: ServiceA, decorators: [{type: Optional}] }]
13
+ * - Class.propDecorators = { name: [{ type: Input }], ... }
14
+ *
15
+ * Also emits ɵfac (factory function) with constructor DI and downlevels
16
+ * signal APIs (input, model, output, viewChild, etc.) to propDecorators.
17
+ *
18
+ * No template compilation — Angular's JIT compiler handles that at runtime.
19
+ * Requires `import '@angular/compiler'` in main.ts for the browser JIT.
20
+ */
21
+ export declare function jitTransform(sourceCode: string, fileName: string): JitTransformResult;
@@ -0,0 +1,207 @@
1
+ import * as ts from 'typescript';
2
+ import MagicString from 'magic-string';
3
+ import { collectTypeOnlyImports, findAllClasses, ANGULAR_DECORATORS, } from './utils.js';
4
+ import { buildCtorParameters, buildPropDecorators } from './jit-metadata.js';
5
+ /**
6
+ * JIT transform for Angular files.
7
+ *
8
+ * Converts Angular decorators to static metadata arrays that Angular's
9
+ * runtime JIT compiler reads via ReflectionCapabilities:
10
+ *
11
+ * - Class.decorators = [{ type: Component, args: [{...}] }]
12
+ * - Class.ctorParameters = () => [{ type: ServiceA, decorators: [{type: Optional}] }]
13
+ * - Class.propDecorators = { name: [{ type: Input }], ... }
14
+ *
15
+ * Also emits ɵfac (factory function) with constructor DI and downlevels
16
+ * signal APIs (input, model, output, viewChild, etc.) to propDecorators.
17
+ *
18
+ * No template compilation — Angular's JIT compiler handles that at runtime.
19
+ * Requires `import '@angular/compiler'` in main.ts for the browser JIT.
20
+ */
21
+ export function jitTransform(sourceCode, fileName) {
22
+ const sourceFile = ts.createSourceFile(fileName, sourceCode, ts.ScriptTarget.Latest, true);
23
+ const ms = new MagicString(sourceCode, { filename: fileName });
24
+ const typeOnlyImports = collectTypeOnlyImports(sourceFile);
25
+ let hasAngularClass = false;
26
+ const allClasses = findAllClasses(sourceFile);
27
+ const postClassStatements = [];
28
+ let importCounter = 0;
29
+ const resourceImports = [];
30
+ let needsJitImport = false;
31
+ for (const node of allClasses) {
32
+ const decorators = ts.getDecorators(node);
33
+ if (!decorators)
34
+ continue;
35
+ const angularDecs = decorators.filter((dec) => {
36
+ if (!ts.isCallExpression(dec.expression))
37
+ return false;
38
+ return ANGULAR_DECORATORS.has(dec.expression.expression.getText(sourceFile));
39
+ });
40
+ if (angularDecs.length === 0)
41
+ continue;
42
+ const className = node.name?.text;
43
+ if (!className)
44
+ continue;
45
+ hasAngularClass = true;
46
+ // 1. Remove Angular decorators from source
47
+ for (const dec of angularDecs) {
48
+ const start = dec.getStart(sourceFile);
49
+ const end = dec.getEnd();
50
+ let trimEnd = end;
51
+ while (trimEnd < sourceCode.length && /\s/.test(sourceCode[trimEnd]))
52
+ trimEnd++;
53
+ ms.remove(start, trimEnd);
54
+ }
55
+ // 2. Emit Class.decorators = [{ type: DecName, args: [...] }]
56
+ // For @Component: convert templateUrl/styleUrl/styleUrls to ESM imports
57
+ const decoratorMeta = [];
58
+ const decoratorEntries = angularDecs.map((dec) => {
59
+ const call = dec.expression;
60
+ const decName = call.expression.getText(sourceFile);
61
+ const args = call.arguments;
62
+ if (args.length > 0 &&
63
+ decName === 'Component' &&
64
+ ts.isObjectLiteralExpression(args[0])) {
65
+ // Rewrite component metadata: convert external resources to imports
66
+ const obj = args[0];
67
+ const rewrittenProps = [];
68
+ for (const prop of obj.properties) {
69
+ if (!ts.isPropertyAssignment(prop)) {
70
+ rewrittenProps.push(prop.getText(sourceFile));
71
+ continue;
72
+ }
73
+ const key = prop.name.getText(sourceFile);
74
+ const val = prop.initializer;
75
+ if (key === 'templateUrl' &&
76
+ (ts.isStringLiteral(val) || ts.isNoSubstitutionTemplateLiteral(val))) {
77
+ // templateUrl: './foo.html' → template: _tpl0 (with import)
78
+ const varName = `_jit_tpl_${importCounter++}`;
79
+ resourceImports.push(`import ${varName} from '${val.text}?raw';`);
80
+ rewrittenProps.push(`template: ${varName}`);
81
+ }
82
+ else if (key === 'styleUrl' &&
83
+ (ts.isStringLiteral(val) || ts.isNoSubstitutionTemplateLiteral(val))) {
84
+ // styleUrl: './foo.scss' → styles: [_style0]
85
+ const varName = `_jit_style_${importCounter++}`;
86
+ resourceImports.push(`import ${varName} from '${val.text}?inline';`);
87
+ rewrittenProps.push(`styles: [${varName}]`);
88
+ }
89
+ else if (key === 'styleUrls' && ts.isArrayLiteralExpression(val)) {
90
+ // styleUrls: ['./a.scss', './b.css'] → styles: [_style0, _style1]
91
+ const vars = [];
92
+ for (const el of val.elements) {
93
+ if (ts.isStringLiteral(el) ||
94
+ ts.isNoSubstitutionTemplateLiteral(el)) {
95
+ const varName = `_jit_style_${importCounter++}`;
96
+ resourceImports.push(`import ${varName} from '${el.text}?inline';`);
97
+ vars.push(varName);
98
+ }
99
+ }
100
+ rewrittenProps.push(`styles: [${vars.join(', ')}]`);
101
+ }
102
+ else {
103
+ rewrittenProps.push(prop.getText(sourceFile));
104
+ }
105
+ }
106
+ const rewrittenArgsText = `{${rewrittenProps.join(', ')}}`;
107
+ decoratorMeta.push({
108
+ name: decName,
109
+ argsText: rewrittenArgsText,
110
+ entry: '',
111
+ });
112
+ return `{ type: ${decName}, args: [${rewrittenArgsText}] }`;
113
+ }
114
+ if (args.length > 0) {
115
+ const argsText = args.map((a) => a.getText(sourceFile)).join(', ');
116
+ decoratorMeta.push({ name: decName, argsText, entry: '' });
117
+ return `{ type: ${decName}, args: [${argsText}] }`;
118
+ }
119
+ decoratorMeta.push({ name: decName, argsText: '{}', entry: '' });
120
+ return `{ type: ${decName} }`;
121
+ });
122
+ postClassStatements.push(`${className}.decorators = [${decoratorEntries.join(', ')}];`);
123
+ // 2b. Trigger JIT compilation with the rewritten decorator metadata
124
+ for (const dm of decoratorMeta) {
125
+ needsJitImport = true;
126
+ switch (dm.name) {
127
+ case 'Component':
128
+ postClassStatements.push(`_jitCompileComponent(${className}, ${dm.argsText});`);
129
+ break;
130
+ case 'Directive':
131
+ postClassStatements.push(`_jitCompileDirective(${className}, ${dm.argsText});`);
132
+ break;
133
+ case 'Pipe':
134
+ postClassStatements.push(`_jitCompilePipe(${className}, ${dm.argsText});`);
135
+ break;
136
+ case 'NgModule':
137
+ postClassStatements.push(`_jitCompileNgModule(${className}, ${dm.argsText});`);
138
+ break;
139
+ }
140
+ }
141
+ // 3. Emit Class.ctorParameters for constructor DI
142
+ const ctorParams = buildCtorParameters(node, sourceFile, typeOnlyImports);
143
+ if (ctorParams) {
144
+ postClassStatements.push(`${className}.ctorParameters = () => [${ctorParams}];`);
145
+ }
146
+ // 4. Emit Class.propDecorators for field decorators + signal APIs
147
+ const propDecorators = buildPropDecorators(node, sourceFile);
148
+ if (propDecorators) {
149
+ postClassStatements.push(`${className}.propDecorators = ${propDecorators};`);
150
+ }
151
+ // 5. Remove member and parameter decorators from source now that
152
+ // they have been extracted into static metadata above.
153
+ for (const member of node.members) {
154
+ const memberDecs = ts.getDecorators(member);
155
+ if (memberDecs) {
156
+ for (const dec of memberDecs) {
157
+ const start = dec.getStart(sourceFile);
158
+ const end = dec.getEnd();
159
+ let trimEnd = end;
160
+ while (trimEnd < sourceCode.length && /\s/.test(sourceCode[trimEnd]))
161
+ trimEnd++;
162
+ ms.remove(start, trimEnd);
163
+ }
164
+ }
165
+ // Constructor parameter decorators
166
+ if (ts.isConstructorDeclaration(member)) {
167
+ for (const param of member.parameters) {
168
+ const paramDecs = ts.getDecorators(param);
169
+ if (paramDecs) {
170
+ for (const dec of paramDecs) {
171
+ const start = dec.getStart(sourceFile);
172
+ const end = dec.getEnd();
173
+ let trimEnd = end;
174
+ while (trimEnd < sourceCode.length &&
175
+ /\s/.test(sourceCode[trimEnd]))
176
+ trimEnd++;
177
+ ms.remove(start, trimEnd);
178
+ }
179
+ }
180
+ }
181
+ }
182
+ }
183
+ }
184
+ if (!hasAngularClass) {
185
+ return { code: sourceCode, map: null };
186
+ }
187
+ // Prepend ESM imports for external templates/styles
188
+ if (resourceImports.length > 0) {
189
+ ms.prepend(resourceImports.join('\n') + '\n');
190
+ }
191
+ // Prepend JIT compiler imports
192
+ if (needsJitImport) {
193
+ ms.prepend(`import { ɵcompileComponent as _jitCompileComponent, ɵcompileDirective as _jitCompileDirective, ɵcompilePipe as _jitCompilePipe, ɵcompileNgModule as _jitCompileNgModule } from '@angular/core';\n`);
194
+ }
195
+ // Append all post-class statements at the end
196
+ if (postClassStatements.length > 0) {
197
+ ms.append('\n' + postClassStatements.join('\n') + '\n');
198
+ }
199
+ const map = ms.generateMap({
200
+ source: fileName,
201
+ file: fileName + '.js',
202
+ includeContent: true,
203
+ hires: 'boundary',
204
+ });
205
+ return { code: ms.toString(), map };
206
+ }
207
+ //# sourceMappingURL=jit-transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jit-transform.js","sourceRoot":"","sources":["../../../../../packages/angular-compiler/src/lib/jit-transform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import * as ts from 'typescript';
2
+ import * as o from '@angular/compiler';
3
+ /** Emit Angular output AST expression directly to a JavaScript string. */
4
+ export declare function emitAngularExpr(expr: o.Expression): string;
5
+ /** Emit Angular output AST statement directly to a JavaScript string. */
6
+ export declare function emitAngularStmt(stmt: o.Statement): string;
7
+ /** Set the current source file for WrappedNodeExpr fallback printing. */
8
+ export declare function setEmitterSourceFile(sf: ts.SourceFile | undefined): void;