@angular/build 22.1.3 → 22.2.0-next.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.
- package/package.json +17 -19
- package/src/private.d.ts +0 -1
- package/src/private.js +0 -2
- package/src/private.js.map +1 -1
- package/src/tools/angular/linker/oxc-ast-host.d.ts +33 -0
- package/src/tools/angular/linker/oxc-ast-host.js +204 -0
- package/src/tools/angular/linker/oxc-ast-host.js.map +1 -0
- package/src/tools/angular/linker/oxc-linker.d.ts +25 -0
- package/src/tools/angular/linker/oxc-linker.js +145 -0
- package/src/tools/angular/linker/oxc-linker.js.map +1 -0
- package/src/tools/angular/linker/string-ast-factory.d.ts +86 -0
- package/src/tools/angular/linker/string-ast-factory.js +223 -0
- package/src/tools/angular/linker/string-ast-factory.js.map +1 -0
- package/src/tools/babel/plugins/types.d.ts +8 -8
- package/src/tools/esbuild/javascript-transformer-worker.js +78 -83
- package/src/tools/esbuild/javascript-transformer-worker.js.map +1 -1
- package/src/tools/esbuild/load-result-cache.d.ts +1 -1
- package/src/tools/esbuild/load-result-cache.js +4 -2
- package/src/tools/esbuild/load-result-cache.js.map +1 -1
- package/src/tools/esbuild/persistent-load-result-cache.d.ts +87 -0
- package/src/tools/esbuild/persistent-load-result-cache.js +267 -0
- package/src/tools/esbuild/persistent-load-result-cache.js.map +1 -0
- package/src/tools/esbuild/stylesheets/stylesheet-cache-key.d.ts +35 -0
- package/src/tools/esbuild/stylesheets/stylesheet-cache-key.js +68 -0
- package/src/tools/esbuild/stylesheets/stylesheet-cache-key.js.map +1 -0
- package/src/utils/environment-options.d.ts +6 -0
- package/src/utils/environment-options.js +7 -1
- package/src/utils/environment-options.js.map +1 -1
- package/src/utils/normalize-cache.js +1 -1
- package/src/utils/version.js +1 -1
- package/src/tools/babel/plugins/add-code-coverage.d.ts +0 -14
- package/src/tools/babel/plugins/add-code-coverage.js +0 -44
- package/src/tools/babel/plugins/add-code-coverage.js.map +0 -1
- package/src/tools/babel/plugins/adjust-static-class-members.d.ts +0 -25
- package/src/tools/babel/plugins/adjust-static-class-members.js +0 -349
- package/src/tools/babel/plugins/adjust-static-class-members.js.map +0 -1
- package/src/tools/babel/plugins/adjust-typescript-enums.d.ts +0 -21
- package/src/tools/babel/plugins/adjust-typescript-enums.js +0 -113
- package/src/tools/babel/plugins/adjust-typescript-enums.js.map +0 -1
- package/src/tools/babel/plugins/elide-angular-metadata.d.ts +0 -23
- package/src/tools/babel/plugins/elide-angular-metadata.js +0 -110
- package/src/tools/babel/plugins/elide-angular-metadata.js.map +0 -1
- package/src/tools/babel/plugins/index.d.ts +0 -11
- package/src/tools/babel/plugins/index.js +0 -22
- package/src/tools/babel/plugins/index.js.map +0 -1
- package/src/tools/babel/plugins/pure-toplevel-functions.d.ts +0 -13
- package/src/tools/babel/plugins/pure-toplevel-functions.js +0 -128
- package/src/tools/babel/plugins/pure-toplevel-functions.js.map +0 -1
- package/src/tools/babel/typings.d.ts +0 -21
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright Google LLC All Rights Reserved.
|
|
5
|
+
*
|
|
6
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
+
* found in the LICENSE file at https://angular.dev/license
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.StringAstFactory = void 0;
|
|
11
|
+
/**
|
|
12
|
+
* An implementation of `AstFactory` that generates JavaScript code strings directly.
|
|
13
|
+
*/
|
|
14
|
+
class StringAstFactory {
|
|
15
|
+
sourceCode;
|
|
16
|
+
constructor(sourceCode = '') {
|
|
17
|
+
this.sourceCode = sourceCode;
|
|
18
|
+
}
|
|
19
|
+
render(expr) {
|
|
20
|
+
if (typeof expr === 'string') {
|
|
21
|
+
return expr;
|
|
22
|
+
}
|
|
23
|
+
if (typeof expr === 'object' &&
|
|
24
|
+
expr !== null &&
|
|
25
|
+
typeof expr.start === 'number' &&
|
|
26
|
+
typeof expr.end === 'number') {
|
|
27
|
+
const { start, end } = expr;
|
|
28
|
+
return this.sourceCode.slice(start, end);
|
|
29
|
+
}
|
|
30
|
+
return String(expr);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Wraps an expression in parentheses if it has syntax or operator precedence
|
|
34
|
+
* traps when used as the receiver/callee of property access, element access,
|
|
35
|
+
* call chains, `new` expressions, or tagged templates.
|
|
36
|
+
*
|
|
37
|
+
* For example, arrow functions (`(() => {}).foo`), numbers (`(5).foo`), object
|
|
38
|
+
* literals (`({ a: 1 }).foo`), and unary operators (`(void 0)()`) require
|
|
39
|
+
* parenthesization when used as receivers.
|
|
40
|
+
*/
|
|
41
|
+
wrapReceiver(receiver) {
|
|
42
|
+
let rendered = this.render(receiver);
|
|
43
|
+
if (rendered.startsWith('function') ||
|
|
44
|
+
rendered.startsWith('{') ||
|
|
45
|
+
rendered.includes('=>') ||
|
|
46
|
+
/^(?:typeof|void|delete|new|await|throw|return)\b/.test(rendered) ||
|
|
47
|
+
/^[!~+-]/.test(rendered) ||
|
|
48
|
+
/^\d/.test(rendered)) {
|
|
49
|
+
rendered = `(${rendered})`;
|
|
50
|
+
}
|
|
51
|
+
return rendered;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Wraps an expression in parentheses if it is an un-parenthesized complex
|
|
55
|
+
* operand (such as an un-parenthesized binary, logical, or assignment expression)
|
|
56
|
+
* to prevent operator precedence inversion when embedded inside an outer expression.
|
|
57
|
+
*
|
|
58
|
+
* Atomic expressions (identifiers, member/element access chains, and simple
|
|
59
|
+
* literals matching `/^[a-zA-Z0-9_$.[\]"'`]+$/`) and already-parenthesized
|
|
60
|
+
* expressions are returned as-is.
|
|
61
|
+
*/
|
|
62
|
+
wrapOperand(expr) {
|
|
63
|
+
const rendered = this.render(expr);
|
|
64
|
+
if ((rendered.startsWith('(') && rendered.endsWith(')')) ||
|
|
65
|
+
/^[a-zA-Z0-9_$.[\]"'`]+$/.test(rendered)) {
|
|
66
|
+
return rendered;
|
|
67
|
+
}
|
|
68
|
+
return `(${rendered})`;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Attaching statement-level comments is a no-op in `StringAstFactory`.
|
|
72
|
+
*
|
|
73
|
+
* Why this is safe:
|
|
74
|
+
* - Load-bearing tree-shaking annotations (`@__PURE__` markers) are explicitly prepended by
|
|
75
|
+
* `createCallExpression` and `createCallChain` whenever `pure: true`.
|
|
76
|
+
* - In `@angular/compiler`, `LeadingComment` is only used for `@ts-ignore` (suppressing
|
|
77
|
+
* TypeScript checker errors in generated `.ts` code) and `webpackChunkName` (in dynamic
|
|
78
|
+
* imports), neither of which occur during `.js`/`.mjs` library partial linking.
|
|
79
|
+
*/
|
|
80
|
+
attachComments(_statement, _leadingComments) { }
|
|
81
|
+
createArrayLiteral(elements) {
|
|
82
|
+
return `[${elements.map((e) => this.render(e)).join(', ')}]`;
|
|
83
|
+
}
|
|
84
|
+
createAssignment(target, operator, value) {
|
|
85
|
+
return `(${this.render(target)} ${operator} ${this.render(value)})`;
|
|
86
|
+
}
|
|
87
|
+
createBinaryExpression(leftOperand, operator, rightOperand) {
|
|
88
|
+
return `(${this.wrapOperand(leftOperand)} ${operator} ${this.wrapOperand(rightOperand)})`;
|
|
89
|
+
}
|
|
90
|
+
createBlock(body) {
|
|
91
|
+
return `{\n${body.join('\n')}\n}`;
|
|
92
|
+
}
|
|
93
|
+
createCallExpression(callee, args, pure) {
|
|
94
|
+
const annotation = pure ? '/*@__PURE__*/ ' : '';
|
|
95
|
+
return `${annotation}${this.wrapReceiver(callee)}(${args.map((a) => this.render(a)).join(', ')})`;
|
|
96
|
+
}
|
|
97
|
+
createCallChain(callee, args, pure, isOptional) {
|
|
98
|
+
const annotation = pure ? '/*@__PURE__*/ ' : '';
|
|
99
|
+
const operator = isOptional ? '?.' : '';
|
|
100
|
+
return `${annotation}${this.wrapReceiver(callee)}${operator}(${args.map((a) => this.render(a)).join(', ')})`;
|
|
101
|
+
}
|
|
102
|
+
createConditional(condition, thenExpression, elseExpression) {
|
|
103
|
+
return `(${this.render(condition)} ? ${this.render(thenExpression)} : ${this.render(elseExpression)})`;
|
|
104
|
+
}
|
|
105
|
+
createElementAccess(expression, element) {
|
|
106
|
+
return `${this.wrapReceiver(expression)}[${this.render(element)}]`;
|
|
107
|
+
}
|
|
108
|
+
createElementAccessChain(expression, element, isOptional) {
|
|
109
|
+
const operator = isOptional ? '?.' : '';
|
|
110
|
+
return `${this.wrapReceiver(expression)}${operator}[${this.render(element)}]`;
|
|
111
|
+
}
|
|
112
|
+
createExpressionStatement(expression) {
|
|
113
|
+
return `${this.render(expression)};`;
|
|
114
|
+
}
|
|
115
|
+
createFunctionDeclaration(functionName, parameters, body) {
|
|
116
|
+
const params = parameters.map((p) => p.name).join(', ');
|
|
117
|
+
return `function ${functionName}(${params}) ${body}`;
|
|
118
|
+
}
|
|
119
|
+
createFunctionExpression(functionName, parameters, body) {
|
|
120
|
+
const name = functionName ? ` ${functionName}` : '';
|
|
121
|
+
const params = parameters.map((p) => p.name).join(', ');
|
|
122
|
+
return `function${name}(${params}) ${body}`;
|
|
123
|
+
}
|
|
124
|
+
createArrowFunctionExpression(parameters, body) {
|
|
125
|
+
const params = parameters.map((p) => p.name).join(', ');
|
|
126
|
+
return `(${params}) => ${this.render(body)}`;
|
|
127
|
+
}
|
|
128
|
+
createDynamicImport(url) {
|
|
129
|
+
return `import(${this.render(url)})`;
|
|
130
|
+
}
|
|
131
|
+
createIdentifier(name) {
|
|
132
|
+
return name;
|
|
133
|
+
}
|
|
134
|
+
createIfStatement(condition, thenStatement, elseStatement) {
|
|
135
|
+
const elseClause = elseStatement ? ` else ${elseStatement}` : '';
|
|
136
|
+
return `if (${this.render(condition)}) ${thenStatement}${elseClause}`;
|
|
137
|
+
}
|
|
138
|
+
createLiteral(value) {
|
|
139
|
+
return typeof value === 'string' ? JSON.stringify(value) : String(value);
|
|
140
|
+
}
|
|
141
|
+
createNewExpression(expression, args) {
|
|
142
|
+
return `new ${this.wrapReceiver(expression)}(${args.map((a) => this.render(a)).join(', ')})`;
|
|
143
|
+
}
|
|
144
|
+
createObjectLiteral(properties) {
|
|
145
|
+
const props = properties.map((p) => {
|
|
146
|
+
if (p.kind === 'spread') {
|
|
147
|
+
return `...${this.render(p.expression)}`;
|
|
148
|
+
}
|
|
149
|
+
const key = p.quoted ? JSON.stringify(p.propertyName) : p.propertyName;
|
|
150
|
+
return `${key}: ${this.render(p.value)}`;
|
|
151
|
+
});
|
|
152
|
+
return `{\n${props.join(',\n')}\n}`;
|
|
153
|
+
}
|
|
154
|
+
createParenthesizedExpression(expression) {
|
|
155
|
+
return `(${this.render(expression)})`;
|
|
156
|
+
}
|
|
157
|
+
createPropertyAccess(expression, propertyName) {
|
|
158
|
+
return `${this.wrapReceiver(expression)}.${propertyName}`;
|
|
159
|
+
}
|
|
160
|
+
createPropertyAccessChain(expression, propertyName, isOptional) {
|
|
161
|
+
const operator = isOptional ? '?.' : '.';
|
|
162
|
+
return `${this.wrapReceiver(expression)}${operator}${propertyName}`;
|
|
163
|
+
}
|
|
164
|
+
createReturnStatement(expression) {
|
|
165
|
+
return `return${expression !== null ? ` ${this.render(expression)}` : ''};`;
|
|
166
|
+
}
|
|
167
|
+
createTaggedTemplate(tag, template) {
|
|
168
|
+
return `${this.wrapReceiver(tag)}${this.createTemplateLiteral(template)}`;
|
|
169
|
+
}
|
|
170
|
+
createTemplateLiteral(template) {
|
|
171
|
+
let result = '`';
|
|
172
|
+
for (let i = 0; i < template.elements.length; i++) {
|
|
173
|
+
result += template.elements[i].raw;
|
|
174
|
+
if (i < template.expressions.length) {
|
|
175
|
+
result += `\${${this.render(template.expressions[i])}}`;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
result += '`';
|
|
179
|
+
return result;
|
|
180
|
+
}
|
|
181
|
+
createThrowStatement(expression) {
|
|
182
|
+
return `throw ${this.render(expression)};`;
|
|
183
|
+
}
|
|
184
|
+
createTypeOfExpression(expression) {
|
|
185
|
+
return `typeof ${this.wrapOperand(expression)}`;
|
|
186
|
+
}
|
|
187
|
+
createVoidExpression(expression) {
|
|
188
|
+
return `void ${this.wrapOperand(expression)}`;
|
|
189
|
+
}
|
|
190
|
+
createUnaryExpression(operator, operand) {
|
|
191
|
+
return `${operator}${this.wrapOperand(operand)}`;
|
|
192
|
+
}
|
|
193
|
+
createVariableDeclaration(variableName, initializer, variableType, _type = null) {
|
|
194
|
+
const init = initializer !== null ? ` = ${this.render(initializer)}` : '';
|
|
195
|
+
return `${variableType} ${variableName}${init};`;
|
|
196
|
+
}
|
|
197
|
+
createRegularExpressionLiteral(body, flags) {
|
|
198
|
+
return `/${body}/${flags ?? ''}`;
|
|
199
|
+
}
|
|
200
|
+
createSpreadElement(expression) {
|
|
201
|
+
return `...${this.render(expression)}`;
|
|
202
|
+
}
|
|
203
|
+
createBuiltInType(_type) {
|
|
204
|
+
return '';
|
|
205
|
+
}
|
|
206
|
+
createExpressionType(_expression, _typeParams) {
|
|
207
|
+
return '';
|
|
208
|
+
}
|
|
209
|
+
createArrayType(_elementType) {
|
|
210
|
+
return '';
|
|
211
|
+
}
|
|
212
|
+
createMapType(_valueType) {
|
|
213
|
+
return '';
|
|
214
|
+
}
|
|
215
|
+
transplantType(_type) {
|
|
216
|
+
return '';
|
|
217
|
+
}
|
|
218
|
+
setSourceMapRange(node, _sourceMapRange) {
|
|
219
|
+
return node;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
exports.StringAstFactory = StringAstFactory;
|
|
223
|
+
//# sourceMappingURL=string-ast-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string-ast-factory.js","sourceRoot":"","sources":["string-ast-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
declare module 'istanbul-lib-instrument' {
|
|
10
|
-
export interface
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
export interface Instrumenter {
|
|
11
|
+
instrumentSync(code: string, filename: string, inputSourceMap?: object): string;
|
|
12
|
+
lastSourceMap(): object | undefined;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
export function
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
):
|
|
15
|
+
export function createInstrumenter(options?: {
|
|
16
|
+
produceSourceMap?: boolean;
|
|
17
|
+
esModules?: boolean;
|
|
18
|
+
coverageVariable?: string;
|
|
19
|
+
}): Instrumenter;
|
|
20
20
|
}
|
|
@@ -45,10 +45,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
45
45
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
46
|
exports.default = transformJavaScript;
|
|
47
47
|
const core_1 = require("@babel/core");
|
|
48
|
-
const node_fs_1 = __importDefault(require("node:fs"));
|
|
49
48
|
const node_module_1 = require("node:module");
|
|
50
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
51
49
|
const piscina_1 = __importDefault(require("piscina"));
|
|
50
|
+
const environment_options_js_1 = require("../../utils/environment-options.js");
|
|
52
51
|
const source_map_1 = require("../../utils/source-map");
|
|
53
52
|
const textDecoder = new TextDecoder();
|
|
54
53
|
const textEncoder = new TextEncoder();
|
|
@@ -59,6 +58,34 @@ const textEncoder = new TextEncoder();
|
|
|
59
58
|
* the names MUST begin with this prefix.
|
|
60
59
|
*/
|
|
61
60
|
const LINKER_DECLARATION_PREFIX = 'ɵɵngDeclare';
|
|
61
|
+
async function instrumentCoverage(filename, data, useInputSourcemap) {
|
|
62
|
+
try {
|
|
63
|
+
let resolvedPath = 'istanbul-lib-instrument';
|
|
64
|
+
try {
|
|
65
|
+
const requireFn = (0, node_module_1.createRequire)(filename);
|
|
66
|
+
resolvedPath = requireFn.resolve('istanbul-lib-instrument');
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// Fallback to pool worker import traversal
|
|
70
|
+
}
|
|
71
|
+
const { createInstrumenter } = (await Promise.resolve(`${resolvedPath}`).then(s => __importStar(require(s))));
|
|
72
|
+
const instrumenter = createInstrumenter({
|
|
73
|
+
produceSourceMap: useInputSourcemap,
|
|
74
|
+
esModules: true,
|
|
75
|
+
});
|
|
76
|
+
const inputSourceMap = useInputSourcemap ? (0, source_map_1.loadInputSourceMap)(filename, data) : undefined;
|
|
77
|
+
const instrumentedCode = instrumenter.instrumentSync(data, filename, inputSourceMap);
|
|
78
|
+
const lastMap = instrumenter.lastSourceMap();
|
|
79
|
+
if (useInputSourcemap && lastMap) {
|
|
80
|
+
const inlineMap = Buffer.from(JSON.stringify(lastMap)).toString('base64');
|
|
81
|
+
return instrumentedCode + `\n//# sourceMappingURL=data:application/json;base64,${inlineMap}`;
|
|
82
|
+
}
|
|
83
|
+
return (0, source_map_1.removeSourceMappingURL)(instrumentedCode);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
throw new Error(`The 'istanbul-lib-instrument' package is required for code coverage but was not found. Please install the package.`, { cause: error });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
62
89
|
async function transformJavaScript(request) {
|
|
63
90
|
const { filename, data, ...options } = request;
|
|
64
91
|
const textData = typeof data === 'string' ? data : textDecoder.decode(data);
|
|
@@ -67,55 +94,61 @@ async function transformJavaScript(request) {
|
|
|
67
94
|
return piscina_1.default.move(textEncoder.encode(transformedData));
|
|
68
95
|
}
|
|
69
96
|
/**
|
|
70
|
-
* Cached instance of the
|
|
97
|
+
* Cached instance of the OXC linker module.
|
|
71
98
|
*/
|
|
72
|
-
let
|
|
99
|
+
let oxcLinkerModule;
|
|
73
100
|
async function transformJavaScriptImpl(filename, data, options) {
|
|
74
|
-
const shouldLink = !options.skipLinker &&
|
|
101
|
+
const shouldLink = !options.skipLinker && requiresLinking(filename, data);
|
|
75
102
|
const useInputSourcemap = options.sourcemap &&
|
|
76
103
|
(!!options.thirdPartySourcemaps || !/[\\/]node_modules[\\/]/.test(filename));
|
|
77
|
-
|
|
104
|
+
let code = data;
|
|
78
105
|
if (options.instrumentForCoverage) {
|
|
79
|
-
|
|
80
|
-
let resolvedPath = 'istanbul-lib-instrument';
|
|
81
|
-
try {
|
|
82
|
-
const requireFn = (0, node_module_1.createRequire)(filename);
|
|
83
|
-
resolvedPath = requireFn.resolve('istanbul-lib-instrument');
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
// Fallback to pool worker import traversal
|
|
87
|
-
}
|
|
88
|
-
const istanbul = await Promise.resolve(`${resolvedPath}`).then(s => __importStar(require(s)));
|
|
89
|
-
const programVisitor = istanbul.programVisitor ?? istanbul.default?.programVisitor;
|
|
90
|
-
if (!programVisitor) {
|
|
91
|
-
throw new Error('programVisitor is not available in istanbul-lib-instrument.');
|
|
92
|
-
}
|
|
93
|
-
const { default: coveragePluginFactory } = await Promise.resolve().then(() => __importStar(require('../babel/plugins/add-code-coverage.js')));
|
|
94
|
-
babelPlugins.push(coveragePluginFactory(programVisitor));
|
|
95
|
-
}
|
|
96
|
-
catch (error) {
|
|
97
|
-
throw new Error(`The 'istanbul-lib-instrument' package is required for code coverage but was not found. Please install the package.`, { cause: error });
|
|
98
|
-
}
|
|
106
|
+
code = await instrumentCoverage(filename, code, useInputSourcemap);
|
|
99
107
|
}
|
|
100
108
|
if (shouldLink) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
109
|
+
if (environment_options_js_1.useBabelLinker) {
|
|
110
|
+
const { createEs2015LinkerPlugin } = await Promise.resolve().then(() => __importStar(require('@angular/compiler-cli/linker/babel')));
|
|
111
|
+
const { ConsoleLogger, LogLevel } = await Promise.resolve().then(() => __importStar(require('@angular/compiler-cli')));
|
|
112
|
+
const result = await (0, core_1.transformAsync)(code, {
|
|
113
|
+
filename,
|
|
114
|
+
inputSourceMap: (useInputSourcemap ? undefined : false),
|
|
115
|
+
sourceMaps: useInputSourcemap ? 'inline' : false,
|
|
116
|
+
compact: false,
|
|
117
|
+
configFile: false,
|
|
118
|
+
babelrc: false,
|
|
119
|
+
browserslistConfigFile: false,
|
|
120
|
+
plugins: [
|
|
121
|
+
createEs2015LinkerPlugin({
|
|
122
|
+
fileSystem: {
|
|
123
|
+
exists: () => false,
|
|
124
|
+
readFile: () => '',
|
|
125
|
+
resolve: (...paths) => paths.join('/'),
|
|
126
|
+
dirname: (path) => path.split('/').slice(0, -1).join('/'),
|
|
127
|
+
relative: (_from, to) => to,
|
|
128
|
+
},
|
|
129
|
+
logger: new ConsoleLogger(LogLevel.info),
|
|
130
|
+
linkerJitMode: options.jit,
|
|
131
|
+
// This is a workaround until https://github.com/angular/angular/issues/42769 is fixed.
|
|
132
|
+
sourceMapping: false,
|
|
133
|
+
}),
|
|
134
|
+
],
|
|
135
|
+
});
|
|
136
|
+
code = result?.code ?? code;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
oxcLinkerModule ??= await Promise.resolve().then(() => __importStar(require('../angular/linker/oxc-linker.js')));
|
|
140
|
+
const result = oxcLinkerModule.linkWithOxc(filename, code, {
|
|
141
|
+
sourcemap: useInputSourcemap,
|
|
142
|
+
jit: options.jit,
|
|
143
|
+
skipCheck: true,
|
|
144
|
+
});
|
|
145
|
+
code = result.code;
|
|
146
|
+
if (useInputSourcemap && result.map) {
|
|
147
|
+
code = (0, source_map_1.removeSourceMappingURL)(code);
|
|
148
|
+
const base64Map = Buffer.from(result.map).toString('base64');
|
|
149
|
+
code += `\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,${base64Map}`;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
119
152
|
}
|
|
120
153
|
// Run advanced optimizations using our fast oxc-transform
|
|
121
154
|
if (options.advancedOptimizations) {
|
|
@@ -140,7 +173,7 @@ async function transformJavaScriptImpl(filename, data, options) {
|
|
|
140
173
|
// Strip sourcemaps if they should not be used
|
|
141
174
|
return useInputSourcemap ? code : (0, source_map_1.removeSourceMappingURL)(code);
|
|
142
175
|
}
|
|
143
|
-
|
|
176
|
+
function requiresLinking(path, source) {
|
|
144
177
|
// @angular/core and @angular/compiler will cause false positives
|
|
145
178
|
// Also, TypeScript files do not require linking
|
|
146
179
|
if (/[\\/]@angular[\\/](?:compiler|core)|\.tsx?$/.test(path)) {
|
|
@@ -151,42 +184,4 @@ async function requiresLinking(path, source) {
|
|
|
151
184
|
// and the result would be an unnecessary no-op additional plugin pass.
|
|
152
185
|
return source.includes(LINKER_DECLARATION_PREFIX);
|
|
153
186
|
}
|
|
154
|
-
async function createLinkerPlugin(options) {
|
|
155
|
-
linkerPluginCreator ??= (await Promise.resolve().then(() => __importStar(require('@angular/compiler-cli/linker/babel'))))
|
|
156
|
-
.createEs2015LinkerPlugin;
|
|
157
|
-
const linkerPlugin = linkerPluginCreator({
|
|
158
|
-
linkerJitMode: options.jit,
|
|
159
|
-
// This is a workaround until https://github.com/angular/angular/issues/42769 is fixed.
|
|
160
|
-
sourceMapping: false,
|
|
161
|
-
logger: {
|
|
162
|
-
level: 1, // Info level
|
|
163
|
-
debug(...args) {
|
|
164
|
-
// eslint-disable-next-line no-console
|
|
165
|
-
console.debug(args);
|
|
166
|
-
},
|
|
167
|
-
info(...args) {
|
|
168
|
-
// eslint-disable-next-line no-console
|
|
169
|
-
console.info(args);
|
|
170
|
-
},
|
|
171
|
-
warn(...args) {
|
|
172
|
-
// eslint-disable-next-line no-console
|
|
173
|
-
console.warn(args);
|
|
174
|
-
},
|
|
175
|
-
error(...args) {
|
|
176
|
-
// eslint-disable-next-line no-console
|
|
177
|
-
console.error(args);
|
|
178
|
-
},
|
|
179
|
-
},
|
|
180
|
-
fileSystem: {
|
|
181
|
-
resolve: node_path_1.default.resolve,
|
|
182
|
-
exists: node_fs_1.default.existsSync,
|
|
183
|
-
dirname: node_path_1.default.dirname,
|
|
184
|
-
relative: node_path_1.default.relative,
|
|
185
|
-
readFile: node_fs_1.default.readFileSync,
|
|
186
|
-
// Node.JS types don't overlap the Compiler types.
|
|
187
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
188
|
-
},
|
|
189
|
-
});
|
|
190
|
-
return linkerPlugin;
|
|
191
|
-
}
|
|
192
187
|
//# sourceMappingURL=javascript-transformer-worker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"javascript-transformer-worker.js","sourceRoot":"","sources":["javascript-transformer-worker.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"javascript-transformer-worker.js","sourceRoot":"","sources":["javascript-transformer-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { OnLoadResult, PluginBuild } from 'esbuild';
|
|
9
9
|
export interface LoadResultCache {
|
|
10
|
-
get(path: string): OnLoadResult | undefined;
|
|
10
|
+
get(path: string): OnLoadResult | Promise<OnLoadResult | undefined> | undefined;
|
|
11
11
|
put(path: string, result: OnLoadResult): Promise<void>;
|
|
12
12
|
readonly watchFiles: ReadonlyArray<string>;
|
|
13
13
|
}
|
|
@@ -16,7 +16,7 @@ function createCachedLoad(cache, callback) {
|
|
|
16
16
|
}
|
|
17
17
|
return async (args) => {
|
|
18
18
|
const loadCacheKey = `${args.namespace}:${args.path}`;
|
|
19
|
-
let result = cache.get(loadCacheKey);
|
|
19
|
+
let result = await cache.get(loadCacheKey);
|
|
20
20
|
if (result === undefined) {
|
|
21
21
|
result = await callback(args);
|
|
22
22
|
// Do not cache null or undefined
|
|
@@ -24,7 +24,9 @@ function createCachedLoad(cache, callback) {
|
|
|
24
24
|
// Ensure requested path is included if it was a resolved file
|
|
25
25
|
if (args.namespace === 'file') {
|
|
26
26
|
result.watchFiles ??= [];
|
|
27
|
-
result.watchFiles.
|
|
27
|
+
if (!result.watchFiles.includes(args.path)) {
|
|
28
|
+
result.watchFiles.push(args.path);
|
|
29
|
+
}
|
|
28
30
|
}
|
|
29
31
|
await cache.put(loadCacheKey, result);
|
|
30
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-result-cache.js","sourceRoot":"","sources":["load-result-cache.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAWH,
|
|
1
|
+
{"version":3,"file":"load-result-cache.js","sourceRoot":"","sources":["load-result-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.dev/license
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* @fileoverview
|
|
10
|
+
* Implements a generic, two-tier (L1 memory + L2 persistent disk store) caching system for
|
|
11
|
+
* esbuild plugin `OnLoadResult` outcomes across the `@angular/build` compiler pipeline.
|
|
12
|
+
*
|
|
13
|
+
* Supported Module Types:
|
|
14
|
+
* 1. **Disk File Modules** (`file:` namespace): Standard disk-based source files (TS, JS, CSS, Sass, Less).
|
|
15
|
+
* Cache keys are computed using the root `globalConfigHash`, file path, and file content. Validity is
|
|
16
|
+
* verified via fast-path metadata (`mtimeMs` + `size`) with fallback to content hashing (`sha256`).
|
|
17
|
+
* 2. **Custom Plugin Namespace Modules** (e.g. `angular:script/global`, `sass:`): Modules loaded through
|
|
18
|
+
* custom esbuild namespaces that resolve to disk source files.
|
|
19
|
+
* 3. **Virtual Modules & Remote Resources** (e.g. `angular:styles/component`, `css-inline-fonts`): Synthetic
|
|
20
|
+
* in-memory modules or remote asset declarations whose compiled outcomes depend on parent source file
|
|
21
|
+
* dependencies (`watchFiles`) or global configuration options (`globalConfigHash`).
|
|
22
|
+
*
|
|
23
|
+
* Key Exported Types:
|
|
24
|
+
* - {@link PersistentLoadResultCache}: Primary two-tier cache manager implementing `LoadResultCache`.
|
|
25
|
+
* - {@link CachedLoadResultEntry}: Serialized structure persisted to disk for cached esbuild `OnLoadResult` items.
|
|
26
|
+
* - {@link CachedDependencyMetadata}: Per-dependency file metadata (`hash`, `mtimeMs`, `size`) used for cache validation and healing.
|
|
27
|
+
*/
|
|
28
|
+
import type { Loader, OnLoadResult, PartialMessage } from 'esbuild';
|
|
29
|
+
import type { Cache as PersistentCacheStore } from './cache';
|
|
30
|
+
import { LoadResultCache } from './load-result-cache';
|
|
31
|
+
/**
|
|
32
|
+
* Metadata for a single watch file dependency.
|
|
33
|
+
*/
|
|
34
|
+
export interface CachedDependencyMetadata {
|
|
35
|
+
hash: string;
|
|
36
|
+
mtimeMs: number;
|
|
37
|
+
size: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Serialized representation of any esbuild load result stored in persistent cache.
|
|
41
|
+
*/
|
|
42
|
+
export interface CachedLoadResultEntry {
|
|
43
|
+
/** Compiled output string or binary data */
|
|
44
|
+
contents: string | Uint8Array;
|
|
45
|
+
/** esbuild loader type */
|
|
46
|
+
loader?: Loader;
|
|
47
|
+
/** Absolute paths of all imported/watched dependency files */
|
|
48
|
+
watchFiles: string[];
|
|
49
|
+
/** Absolute paths of all watched directories */
|
|
50
|
+
watchDirs?: string[];
|
|
51
|
+
/** Map of watchFile absolute paths to dependency metadata */
|
|
52
|
+
watchFilesMetadata: Record<string, CachedDependencyMetadata>;
|
|
53
|
+
/** Warnings emitted during load processing */
|
|
54
|
+
warnings?: PartialMessage[];
|
|
55
|
+
/** Errors emitted during load processing */
|
|
56
|
+
errors?: PartialMessage[];
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Normalizes a namespaced cache key into a valid disk file path if one exists.
|
|
60
|
+
* Handles 'file:' URIs, OS platform differences, and custom plugin namespaces.
|
|
61
|
+
*/
|
|
62
|
+
export declare function extractDiskFilePath(path: string): string | undefined;
|
|
63
|
+
export declare class PersistentLoadResultCache implements LoadResultCache {
|
|
64
|
+
private readonly persistentStore?;
|
|
65
|
+
private readonly globalConfigHash;
|
|
66
|
+
private readonly memoryCache;
|
|
67
|
+
constructor(persistentStore?: PersistentCacheStore<CachedLoadResultEntry> | undefined, globalConfigHash?: string);
|
|
68
|
+
/**
|
|
69
|
+
* Retrieves a load result from cache.
|
|
70
|
+
* Checks L1 memory cache first for immediate watch-mode speed, falling back to L2 persistent disk
|
|
71
|
+
* store on L1 cache miss. L2 persistent cache entries are validated against dependency metadata.
|
|
72
|
+
*/
|
|
73
|
+
get(path: string): Promise<OnLoadResult | undefined>;
|
|
74
|
+
/**
|
|
75
|
+
* Stores a load result in both L1 memory cache and L2 persistent disk store.
|
|
76
|
+
*/
|
|
77
|
+
put(path: string, result: OnLoadResult): Promise<void>;
|
|
78
|
+
/**
|
|
79
|
+
* Invalidates cached entries affected by a modified dependency file during watch mode.
|
|
80
|
+
*
|
|
81
|
+
* Note: Invalidation of L1 memory cache is sufficient for active watch mode.
|
|
82
|
+
* Cross-process/cold start stale entries in L2 persistent store are automatically handled
|
|
83
|
+
* during `get()` via dependency metadata verification (`validateAndHealCacheEntry`).
|
|
84
|
+
*/
|
|
85
|
+
invalidate(path: string): boolean;
|
|
86
|
+
get watchFiles(): ReadonlyArray<string>;
|
|
87
|
+
}
|