@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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@angular/build",
|
|
3
|
-
"version": "22.1
|
|
3
|
+
"version": "22.2.0-next.1",
|
|
4
4
|
"description": "Official build system for Angular",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Angular CLI",
|
|
@@ -23,10 +23,8 @@
|
|
|
23
23
|
"builders": "builders.json",
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@ampproject/remapping": "2.3.0",
|
|
26
|
-
"@angular-devkit/architect": "0.
|
|
26
|
+
"@angular-devkit/architect": "0.2202.0-next.1",
|
|
27
27
|
"@babel/core": "8.0.1",
|
|
28
|
-
"@babel/helper-annotate-as-pure": "8.0.0",
|
|
29
|
-
"@babel/helper-split-export-declaration": "7.24.7",
|
|
30
28
|
"@inquirer/confirm": "6.1.1",
|
|
31
29
|
"@vitejs/plugin-basic-ssl": "2.3.0",
|
|
32
30
|
"beasties": "0.4.3",
|
|
@@ -34,37 +32,37 @@
|
|
|
34
32
|
"esbuild": "0.28.1",
|
|
35
33
|
"https-proxy-agent": "9.1.0",
|
|
36
34
|
"jsonc-parser": "3.3.1",
|
|
37
|
-
"listr2": "
|
|
38
|
-
"magic-string": "1.
|
|
35
|
+
"listr2": "11.0.0",
|
|
36
|
+
"magic-string": "1.1.0",
|
|
39
37
|
"mrmime": "2.0.1",
|
|
40
38
|
"oxc-parser": "0.142.0",
|
|
41
39
|
"parse5-html-rewriting-stream": "8.0.1",
|
|
42
40
|
"picomatch": "4.0.5",
|
|
43
|
-
"piscina": "5.
|
|
44
|
-
"rolldown": "1.2.
|
|
45
|
-
"sass": "1.
|
|
41
|
+
"piscina": "5.3.0",
|
|
42
|
+
"rolldown": "1.2.1",
|
|
43
|
+
"sass": "1.102.0",
|
|
46
44
|
"semver": "7.8.5",
|
|
47
45
|
"source-map-support": "0.5.21",
|
|
48
46
|
"tinyglobby": "0.2.17",
|
|
49
|
-
"vite": "8.
|
|
47
|
+
"vite": "8.2.0",
|
|
50
48
|
"watchpack": "2.5.2"
|
|
51
49
|
},
|
|
52
50
|
"optionalDependencies": {
|
|
53
51
|
"lmdb": "3.5.6"
|
|
54
52
|
},
|
|
55
53
|
"peerDependencies": {
|
|
56
|
-
"@angular/compiler": "^22.0.0",
|
|
57
|
-
"@angular/compiler-cli": "^22.0.0",
|
|
58
|
-
"@angular/core": "^22.0.0",
|
|
59
|
-
"@angular/localize": "^22.0.0",
|
|
60
|
-
"@angular/platform-browser": "^22.0.0",
|
|
61
|
-
"@angular/platform-server": "^22.0.0",
|
|
62
|
-
"@angular/service-worker": "^22.0.0",
|
|
63
|
-
"@angular/ssr": "^22.1
|
|
54
|
+
"@angular/compiler": "^22.0.0 || ^22.2.0-next.0",
|
|
55
|
+
"@angular/compiler-cli": "^22.0.0 || ^22.2.0-next.0",
|
|
56
|
+
"@angular/core": "^22.0.0 || ^22.2.0-next.0",
|
|
57
|
+
"@angular/localize": "^22.0.0 || ^22.2.0-next.0",
|
|
58
|
+
"@angular/platform-browser": "^22.0.0 || ^22.2.0-next.0",
|
|
59
|
+
"@angular/platform-server": "^22.0.0 || ^22.2.0-next.0",
|
|
60
|
+
"@angular/service-worker": "^22.0.0 || ^22.2.0-next.0",
|
|
61
|
+
"@angular/ssr": "^22.2.0-next.1",
|
|
64
62
|
"istanbul-lib-instrument": "^6.0.0",
|
|
65
63
|
"karma": "^6.4.0",
|
|
66
64
|
"less": "^4.2.0",
|
|
67
|
-
"ng-packagr": "^22.0.0",
|
|
65
|
+
"ng-packagr": "^22.0.0 || ^22.2.0-next.0",
|
|
68
66
|
"postcss": "^8.4.0",
|
|
69
67
|
"rollup": "^4.0.0",
|
|
70
68
|
"tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0",
|
package/src/private.d.ts
CHANGED
|
@@ -19,7 +19,6 @@ export type { ApplicationBuilderInternalOptions } from './builders/application/o
|
|
|
19
19
|
export { type Result, type ResultFile, ResultKind } from './builders/application/results';
|
|
20
20
|
export { serveWithVite } from './builders/dev-server/vite';
|
|
21
21
|
export { normalizeOptions as normalizeDevServerOptions, type NormalizedDevServerOptions, } from './builders/dev-server/options';
|
|
22
|
-
export * from './tools/babel/plugins';
|
|
23
22
|
export type { ExternalResultMetadata } from './tools/esbuild/bundler-execution-result';
|
|
24
23
|
export { emitFilesToDisk } from './tools/esbuild/utils';
|
|
25
24
|
export { transformSupportedBrowsersToTargets } from './tools/esbuild/utils';
|
package/src/private.js
CHANGED
|
@@ -42,8 +42,6 @@ var vite_1 = require("./builders/dev-server/vite");
|
|
|
42
42
|
Object.defineProperty(exports, "serveWithVite", { enumerable: true, get: function () { return vite_1.serveWithVite; } });
|
|
43
43
|
var options_1 = require("./builders/dev-server/options");
|
|
44
44
|
Object.defineProperty(exports, "normalizeDevServerOptions", { enumerable: true, get: function () { return options_1.normalizeOptions; } });
|
|
45
|
-
// Tools
|
|
46
|
-
__exportStar(require("./tools/babel/plugins"), exports);
|
|
47
45
|
var utils_1 = require("./tools/esbuild/utils");
|
|
48
46
|
Object.defineProperty(exports, "emitFilesToDisk", { enumerable: true, get: function () { return utils_1.emitFilesToDisk; } });
|
|
49
47
|
var utils_2 = require("./tools/esbuild/utils");
|
package/src/private.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"private.js","sourceRoot":"","sources":["private.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"private.js","sourceRoot":"","sources":["private.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;AAsCH,oDAkBC;AAtDD;;;;;GAKG;AAEH,6DAAwF;AAoD/E,yGApDiB,sCAAwB,OAoDjB;AAnDjC,6EAGiD;AACjD,yFAA2F;AAG3F,WAAW;AACX,sDAAkE;AAAzD,uHAAA,wBAAwB,OAAA;AAEjC,0DAA0F;AAAnD,qGAAA,UAAU,OAAA;AACjD,mDAA2D;AAAlD,qGAAA,aAAa,OAAA;AACtB,yDAGuC;AAFrC,oHAAA,gBAAgB,OAA6B;AAM/C,+CAAwD;AAA/C,wGAAA,eAAe,OAAA;AACxB,+CAA4E;AAAnE,4HAAA,mCAAmC,OAAA;AAC5C,0DAAqE;AAA5D,wHAAA,wBAAwB,OAAA;AAEjC,+EAA4E;AAAnE,oHAAA,eAAe,OAAA;AACxB,+CAA8C;AAArC,8FAAA,KAAK,OAAA;AACd,kGAAqG;AAA5F,wIAAA,4BAA4B,OAAA;AACrC,iFAA+E;AAAtE,+HAAA,qBAAqB,OAAA;AAE9B,SAAgB,oBAAoB,CAClC,aAGC,EACD,YAAuE;IAEvE,OAAO,IAAA,sCAA4B,EACjC,aAAa,EACb,aAAa,CAAC,yBAAyB;QACrC,CAAC,CAAC,IAAI,6BAAe,EAAE;QACvB,CAAC,CAAC,GAAG,EAAE,CAAC,IAAA,sCAAwB,EAAC,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,aAAa,CAAC,gBAAgB,CAAC,EACzF,IAAI,kDAA0B,CAC5B,YAAY,EACZ,YAAY,CAAC,mBAAmB,EAChC,aAAa,CAAC,WAAW,CAC1B,CACF,CAAC;AACJ,CAAC;AAID,2DAA8D;AAArD,8GAAA,eAAe,OAAA;AAExB,uFAA2F;AAAlF,mIAAA,0BAA0B,OAAA;AAEnC,YAAY;AACZ,4DAA0C;AAC1C,iDAA+C;AAAtC,uGAAA,SAAS,OAAA;AAClB,+DAA4D;AAAnD,oHAAA,eAAe,OAAA;AACxB,qDAA6F;AAAlE,iHAAA,iBAAiB,OAAA;AAAE,gHAAA,gBAAgB,OAAA;AAC9D,gFAKiD;AAJ/C,0HAAA,kBAAkB,OAAA;AAMpB,8EAIgD;AAF9C,iIAAA,0BAA0B,OAAA;AAG5B,+DAAmE;AAA1D,2HAAA,sBAAsB,OAAA;AAC/B,+DAA4F;AAA3D,4HAAA,uBAAuB,OAAA;AACxD,mDAA2D;AAAlD,mHAAA,oBAAoB,OAAA;AAC7B,yDAAqE;AAA5D,6HAAA,2BAA2B,OAAA;AACpC,mDAAgF;AAArD,sHAAA,uBAAuB,OAAA;AAClD,iEAAkE;AAAzD,0HAAA,oBAAoB,OAAA;AAC7B,2CAAiE;AAAxD,yHAAA,8BAA8B,OAAA;AACvC,0DAA4E;AAAnE,uGAAA,SAAS,OAAA;AAAE,gHAAA,kBAAkB,OAAA;AACtC,uEAIuC;AAHrC,kIAAA,yBAAyB,OAAA;AACzB,kIAAA,yBAAyB,OAAA;AACzB,iIAAA,wBAAwB,OAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
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
|
+
import type { AstHost, Range } from '@angular/compiler-cli/linker';
|
|
9
|
+
import type { ArrayExpression, ArrowFunctionExpression, BooleanLiteral, CallExpression, Function as FunctionNode, NullLiteral, NumericLiteral, ObjectExpression, StringLiteral, UnaryExpression } from '@oxc-project/types';
|
|
10
|
+
/**
|
|
11
|
+
* An implementation of `AstHost` that queries information from `oxc-parser` AST nodes.
|
|
12
|
+
*/
|
|
13
|
+
export declare class OxcAstHost implements AstHost<unknown> {
|
|
14
|
+
getSymbolName(node: unknown): string | null;
|
|
15
|
+
isStringLiteral(node: unknown): node is StringLiteral;
|
|
16
|
+
parseStringLiteral(str: unknown): string;
|
|
17
|
+
isNumericLiteral(node: unknown): node is NumericLiteral;
|
|
18
|
+
parseNumericLiteral(num: unknown): number;
|
|
19
|
+
isBooleanLiteral(node: unknown): node is BooleanLiteral | UnaryExpression;
|
|
20
|
+
parseBooleanLiteral(bool: unknown): boolean;
|
|
21
|
+
isNull(node: unknown): node is NullLiteral;
|
|
22
|
+
isArrayLiteral(node: unknown): node is ArrayExpression;
|
|
23
|
+
parseArrayLiteral(array: unknown): unknown[];
|
|
24
|
+
isObjectLiteral(node: unknown): node is ObjectExpression;
|
|
25
|
+
parseObjectLiteral(obj: unknown): Map<string, unknown>;
|
|
26
|
+
isFunctionExpression(node: unknown): node is FunctionNode | ArrowFunctionExpression;
|
|
27
|
+
parseReturnValue(fn: unknown): unknown;
|
|
28
|
+
parseParameters(fn: unknown): unknown[];
|
|
29
|
+
isCallExpression(node: unknown): node is CallExpression;
|
|
30
|
+
parseCallee(call: unknown): unknown;
|
|
31
|
+
parseArguments(call: unknown): unknown[];
|
|
32
|
+
getRange(node: unknown): Range;
|
|
33
|
+
}
|
|
@@ -0,0 +1,204 @@
|
|
|
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.OxcAstHost = void 0;
|
|
11
|
+
const linker_1 = require("@angular/compiler-cli/linker");
|
|
12
|
+
function isNode(node) {
|
|
13
|
+
return typeof node === 'object' && node !== null && 'type' in node;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* An implementation of `AstHost` that queries information from `oxc-parser` AST nodes.
|
|
17
|
+
*/
|
|
18
|
+
class OxcAstHost {
|
|
19
|
+
getSymbolName(node) {
|
|
20
|
+
if (!isNode(node)) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
if (node.type === 'Identifier') {
|
|
24
|
+
return node.name;
|
|
25
|
+
}
|
|
26
|
+
else if (node.type === 'MemberExpression') {
|
|
27
|
+
if (!node.computed && node.property.type === 'Identifier') {
|
|
28
|
+
return node.property.name;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
isStringLiteral(node) {
|
|
34
|
+
return isNode(node) && node.type === 'Literal' && typeof node.value === 'string';
|
|
35
|
+
}
|
|
36
|
+
parseStringLiteral(str) {
|
|
37
|
+
if (!this.isStringLiteral(str)) {
|
|
38
|
+
throw new linker_1.FatalLinkerError(str, 'Unsupported syntax, expected a string literal.');
|
|
39
|
+
}
|
|
40
|
+
return str.value;
|
|
41
|
+
}
|
|
42
|
+
isNumericLiteral(node) {
|
|
43
|
+
return isNode(node) && node.type === 'Literal' && typeof node.value === 'number';
|
|
44
|
+
}
|
|
45
|
+
parseNumericLiteral(num) {
|
|
46
|
+
if (!this.isNumericLiteral(num)) {
|
|
47
|
+
throw new linker_1.FatalLinkerError(num, 'Unsupported syntax, expected a numeric literal.');
|
|
48
|
+
}
|
|
49
|
+
return num.value;
|
|
50
|
+
}
|
|
51
|
+
isBooleanLiteral(node) {
|
|
52
|
+
if (!isNode(node)) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
return ((node.type === 'Literal' && typeof node.value === 'boolean') || isMinifiedBooleanLiteral(node));
|
|
56
|
+
}
|
|
57
|
+
parseBooleanLiteral(bool) {
|
|
58
|
+
if (isNode(bool)) {
|
|
59
|
+
if (bool.type === 'Literal' && typeof bool.value === 'boolean') {
|
|
60
|
+
return bool.value;
|
|
61
|
+
}
|
|
62
|
+
if (isMinifiedBooleanLiteral(bool)) {
|
|
63
|
+
return !bool.argument.value;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
throw new linker_1.FatalLinkerError(bool, 'Unsupported syntax, expected a boolean literal.');
|
|
67
|
+
}
|
|
68
|
+
isNull(node) {
|
|
69
|
+
return isNode(node) && node.type === 'Literal' && node.value === null;
|
|
70
|
+
}
|
|
71
|
+
isArrayLiteral(node) {
|
|
72
|
+
return isNode(node) && node.type === 'ArrayExpression';
|
|
73
|
+
}
|
|
74
|
+
parseArrayLiteral(array) {
|
|
75
|
+
if (!this.isArrayLiteral(array)) {
|
|
76
|
+
throw new linker_1.FatalLinkerError(array, 'Unsupported syntax, expected an array literal.');
|
|
77
|
+
}
|
|
78
|
+
const result = [];
|
|
79
|
+
for (const element of array.elements) {
|
|
80
|
+
if (element === null) {
|
|
81
|
+
throw new linker_1.FatalLinkerError(array, 'Unsupported syntax, element in array not to be empty.');
|
|
82
|
+
}
|
|
83
|
+
if (element.type === 'SpreadElement') {
|
|
84
|
+
throw new linker_1.FatalLinkerError(element, 'Unsupported syntax, element in array not to use spread syntax.');
|
|
85
|
+
}
|
|
86
|
+
result.push(element);
|
|
87
|
+
}
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
isObjectLiteral(node) {
|
|
91
|
+
return isNode(node) && node.type === 'ObjectExpression';
|
|
92
|
+
}
|
|
93
|
+
parseObjectLiteral(obj) {
|
|
94
|
+
if (!this.isObjectLiteral(obj)) {
|
|
95
|
+
throw new linker_1.FatalLinkerError(obj, 'Unsupported syntax, expected an object literal.');
|
|
96
|
+
}
|
|
97
|
+
const result = new Map();
|
|
98
|
+
for (const property of obj.properties) {
|
|
99
|
+
if (property.type !== 'Property') {
|
|
100
|
+
throw new linker_1.FatalLinkerError(property, 'Unsupported syntax, expected a property assignment.');
|
|
101
|
+
}
|
|
102
|
+
const keyNode = property.key;
|
|
103
|
+
let key;
|
|
104
|
+
if (keyNode.type === 'Identifier') {
|
|
105
|
+
key = keyNode.name;
|
|
106
|
+
}
|
|
107
|
+
else if (this.isStringLiteral(keyNode)) {
|
|
108
|
+
key = keyNode.value;
|
|
109
|
+
}
|
|
110
|
+
else if (this.isNumericLiteral(keyNode)) {
|
|
111
|
+
key = String(keyNode.value);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
throw new linker_1.FatalLinkerError(keyNode, 'Unsupported syntax, expected a property name.');
|
|
115
|
+
}
|
|
116
|
+
result.set(key, property.value);
|
|
117
|
+
}
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
isFunctionExpression(node) {
|
|
121
|
+
if (!isNode(node)) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
return (node.type === 'FunctionDeclaration' ||
|
|
125
|
+
node.type === 'FunctionExpression' ||
|
|
126
|
+
node.type === 'ArrowFunctionExpression');
|
|
127
|
+
}
|
|
128
|
+
parseReturnValue(fn) {
|
|
129
|
+
if (!this.isFunctionExpression(fn)) {
|
|
130
|
+
throw new linker_1.FatalLinkerError(fn, 'Unsupported syntax, expected a function.');
|
|
131
|
+
}
|
|
132
|
+
const body = fn.body;
|
|
133
|
+
if (!body || !isNode(body)) {
|
|
134
|
+
throw new linker_1.FatalLinkerError(fn, 'Unsupported syntax, expected a function body.');
|
|
135
|
+
}
|
|
136
|
+
if (body.type !== 'BlockStatement') {
|
|
137
|
+
return body;
|
|
138
|
+
}
|
|
139
|
+
const statements = body.body;
|
|
140
|
+
if (statements.length !== 1) {
|
|
141
|
+
throw new linker_1.FatalLinkerError(body, 'Unsupported syntax, expected a function body with a single return statement.');
|
|
142
|
+
}
|
|
143
|
+
const stmt = statements[0];
|
|
144
|
+
if (stmt.type !== 'ReturnStatement') {
|
|
145
|
+
throw new linker_1.FatalLinkerError(stmt, 'Unsupported syntax, expected a function body with a single return statement.');
|
|
146
|
+
}
|
|
147
|
+
if (!stmt.argument) {
|
|
148
|
+
throw new linker_1.FatalLinkerError(stmt, 'Unsupported syntax, expected function to return a value.');
|
|
149
|
+
}
|
|
150
|
+
return stmt.argument;
|
|
151
|
+
}
|
|
152
|
+
parseParameters(fn) {
|
|
153
|
+
if (!this.isFunctionExpression(fn)) {
|
|
154
|
+
throw new linker_1.FatalLinkerError(fn, 'Unsupported syntax, expected a function.');
|
|
155
|
+
}
|
|
156
|
+
return fn.params;
|
|
157
|
+
}
|
|
158
|
+
isCallExpression(node) {
|
|
159
|
+
return isNode(node) && node.type === 'CallExpression';
|
|
160
|
+
}
|
|
161
|
+
parseCallee(call) {
|
|
162
|
+
if (!this.isCallExpression(call)) {
|
|
163
|
+
throw new linker_1.FatalLinkerError(call, 'Unsupported syntax, expected a call expression.');
|
|
164
|
+
}
|
|
165
|
+
return call.callee;
|
|
166
|
+
}
|
|
167
|
+
parseArguments(call) {
|
|
168
|
+
if (!this.isCallExpression(call)) {
|
|
169
|
+
throw new linker_1.FatalLinkerError(call, 'Unsupported syntax, expected a call expression.');
|
|
170
|
+
}
|
|
171
|
+
const result = [];
|
|
172
|
+
for (const arg of call.arguments) {
|
|
173
|
+
if (arg.type === 'SpreadElement') {
|
|
174
|
+
throw new linker_1.FatalLinkerError(arg, 'Unsupported syntax, argument not to use spread syntax.');
|
|
175
|
+
}
|
|
176
|
+
result.push(arg);
|
|
177
|
+
}
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
getRange(node) {
|
|
181
|
+
if (!isNode(node) || typeof node.start !== 'number' || typeof node.end !== 'number') {
|
|
182
|
+
throw new linker_1.FatalLinkerError(node, 'Unable to read range for node - it is missing location information.');
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
startPos: node.start,
|
|
186
|
+
startLine: 0,
|
|
187
|
+
startCol: 0,
|
|
188
|
+
endPos: node.end,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
exports.OxcAstHost = OxcAstHost;
|
|
193
|
+
function isMinifiedBooleanLiteral(node) {
|
|
194
|
+
if (node.type !== 'UnaryExpression') {
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
const arg = node.argument;
|
|
198
|
+
return (node.prefix === true &&
|
|
199
|
+
node.operator === '!' &&
|
|
200
|
+
arg.type === 'Literal' &&
|
|
201
|
+
typeof arg.value === 'number' &&
|
|
202
|
+
(arg.value === 0 || arg.value === 1));
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=oxc-ast-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oxc-ast-host.js","sourceRoot":"","sources":["oxc-ast-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
export interface OxcLinkerOptions {
|
|
9
|
+
sourcemap?: boolean;
|
|
10
|
+
jit?: boolean;
|
|
11
|
+
skipCheck?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Executes Angular partial declaration linking on the specified JavaScript file
|
|
15
|
+
* using `oxc-parser` and `magic-string`.
|
|
16
|
+
*
|
|
17
|
+
* @param filename The full path to the file.
|
|
18
|
+
* @param code The source code content.
|
|
19
|
+
* @param options Linker options (sourcemap, jit, skipCheck).
|
|
20
|
+
* @returns An object containing the transformed code and optional source map.
|
|
21
|
+
*/
|
|
22
|
+
export declare function linkWithOxc(filename: string, code: string, options?: OxcLinkerOptions): {
|
|
23
|
+
code: string;
|
|
24
|
+
map: string | undefined;
|
|
25
|
+
};
|
|
@@ -0,0 +1,145 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.linkWithOxc = linkWithOxc;
|
|
14
|
+
const remapping_1 = __importDefault(require("@ampproject/remapping"));
|
|
15
|
+
const compiler_cli_1 = require("@angular/compiler-cli");
|
|
16
|
+
const linker_1 = require("@angular/compiler-cli/linker");
|
|
17
|
+
const magic_string_1 = __importDefault(require("magic-string"));
|
|
18
|
+
const oxc_parser_1 = require("oxc-parser");
|
|
19
|
+
const source_map_1 = require("../../../utils/source-map");
|
|
20
|
+
const oxc_ast_host_1 = require("./oxc-ast-host");
|
|
21
|
+
const string_ast_factory_1 = require("./string-ast-factory");
|
|
22
|
+
/**
|
|
23
|
+
* A declaration scope that instructs the Angular compiler to emit constant pools
|
|
24
|
+
* inside a local IIFE around each linked declaration rather than hoisting shared
|
|
25
|
+
* constants to the module level.
|
|
26
|
+
*
|
|
27
|
+
* Preferred due to:
|
|
28
|
+
* - In-Place String Replacement: Enables fast in-place string replacements in
|
|
29
|
+
* `MagicString` without parsing or mutating surrounding ES module statements.
|
|
30
|
+
* - Better Tree-Shaking Locality: Component constants are strictly encapsulated
|
|
31
|
+
* within the component's `@__PURE__` IIFE closure (`(function() { ... })()`). If a
|
|
32
|
+
* bundler tree-shakes an unused component from a library FESM, all of its associated
|
|
33
|
+
* constants are automatically eliminated without leaving orphan top-level variables.
|
|
34
|
+
* - Negligible Wire Size Impact: LZ77/Brotli compression deduplicates repeated IIFE
|
|
35
|
+
* wrappers and array literals over the wire to near-zero marginal cost.
|
|
36
|
+
*/
|
|
37
|
+
class InlineDeclarationScope {
|
|
38
|
+
getConstantScopeRef() {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const noopFileSystem = {
|
|
43
|
+
exists: () => false,
|
|
44
|
+
readFile: () => '',
|
|
45
|
+
resolve: (...paths) => paths.join('/'),
|
|
46
|
+
dirname: (path) => path.split('/').slice(0, -1).join('/'),
|
|
47
|
+
relative: (_from, to) => to,
|
|
48
|
+
};
|
|
49
|
+
const SHARED_LOGGER = new compiler_cli_1.ConsoleLogger(compiler_cli_1.LogLevel.info);
|
|
50
|
+
const SHARED_AST_HOST = new oxc_ast_host_1.OxcAstHost();
|
|
51
|
+
const SHARED_DECLARATION_SCOPE = new InlineDeclarationScope();
|
|
52
|
+
/**
|
|
53
|
+
* Recursively traverses ESTree AST nodes with subtree pruning.
|
|
54
|
+
* When `onCallExpression` returns `true` for a linked `CallExpression`,
|
|
55
|
+
* child traversal into `callee` and `arguments` is skipped.
|
|
56
|
+
*
|
|
57
|
+
* Why subtree pruning is safe for the linker:
|
|
58
|
+
* - Angular partial declarations (`ɵɵngDeclareComponent`, `ɵɵngDeclareDirective`,
|
|
59
|
+
* etc.) are never nested inside each other.
|
|
60
|
+
* - Once a declaration `CallExpression` is linked and replaced, there can never be
|
|
61
|
+
* another partial declaration within its metadata argument object. Pruning its
|
|
62
|
+
* subtree avoids traversing hundreds of unnecessary metadata argument nodes per
|
|
63
|
+
* component.
|
|
64
|
+
*/
|
|
65
|
+
function visitNode(node, onCallExpression) {
|
|
66
|
+
if (node === null || node === undefined || typeof node !== 'object') {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (Array.isArray(node)) {
|
|
70
|
+
for (let i = 0; i < node.length; i++) {
|
|
71
|
+
visitNode(node[i], onCallExpression);
|
|
72
|
+
}
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const nodeType = node.type;
|
|
76
|
+
if (!nodeType) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (nodeType === 'CallExpression') {
|
|
80
|
+
if (onCallExpression(node)) {
|
|
81
|
+
// Subtree pruning: partial declarations cannot be nested, so skip child traversal.
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const keys = oxc_parser_1.visitorKeys[nodeType];
|
|
86
|
+
if (keys) {
|
|
87
|
+
for (let i = 0; i < keys.length; i++) {
|
|
88
|
+
const child = node[keys[i]];
|
|
89
|
+
if (child !== undefined && child !== null) {
|
|
90
|
+
visitNode(child, onCallExpression);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Executes Angular partial declaration linking on the specified JavaScript file
|
|
97
|
+
* using `oxc-parser` and `magic-string`.
|
|
98
|
+
*
|
|
99
|
+
* @param filename The full path to the file.
|
|
100
|
+
* @param code The source code content.
|
|
101
|
+
* @param options Linker options (sourcemap, jit, skipCheck).
|
|
102
|
+
* @returns An object containing the transformed code and optional source map.
|
|
103
|
+
*/
|
|
104
|
+
function linkWithOxc(filename, code, options = {}) {
|
|
105
|
+
if (!options.skipCheck && !(0, linker_1.needsLinking)(filename, code)) {
|
|
106
|
+
return { code, map: undefined };
|
|
107
|
+
}
|
|
108
|
+
const astFactory = new string_ast_factory_1.StringAstFactory(code);
|
|
109
|
+
const linkerEnvironment = linker_1.LinkerEnvironment.create(noopFileSystem, SHARED_LOGGER, SHARED_AST_HOST, astFactory, { linkerJitMode: options.jit ?? false });
|
|
110
|
+
const fileLinker = new linker_1.FileLinker(linkerEnvironment, filename, code);
|
|
111
|
+
const { program } = (0, oxc_parser_1.parseSync)(filename, code, { range: true });
|
|
112
|
+
let s;
|
|
113
|
+
let hasLinked = false;
|
|
114
|
+
visitNode(program, (node) => {
|
|
115
|
+
const calleeName = SHARED_AST_HOST.getSymbolName(node.callee);
|
|
116
|
+
if (calleeName && fileLinker.isPartialDeclaration(calleeName)) {
|
|
117
|
+
const args = SHARED_AST_HOST.parseArguments(node);
|
|
118
|
+
const linkedCode = fileLinker.linkPartialDeclaration(calleeName, args, SHARED_DECLARATION_SCOPE);
|
|
119
|
+
s ??= new magic_string_1.default(code);
|
|
120
|
+
s.overwrite(node.start, node.end, linkedCode);
|
|
121
|
+
hasLinked = true;
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
return false;
|
|
125
|
+
});
|
|
126
|
+
if (!hasLinked || !s) {
|
|
127
|
+
return { code, map: undefined };
|
|
128
|
+
}
|
|
129
|
+
let map;
|
|
130
|
+
if (options.sourcemap) {
|
|
131
|
+
const rawMap = s.generateMap({ hires: true, source: filename });
|
|
132
|
+
const inputMap = (0, source_map_1.loadInputSourceMap)(filename, code);
|
|
133
|
+
if (inputMap) {
|
|
134
|
+
map = (0, remapping_1.default)([rawMap, inputMap], () => null).toString();
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
map = rawMap.toString();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
code: s.toString(),
|
|
142
|
+
map,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=oxc-linker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oxc-linker.js","sourceRoot":"","sources":["oxc-linker.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;AAuHH,kCA4DC;AAhLD,sEAA8C;AAC9C,wDAAgE;AAEhE,yDAA2F;AAM3F,gEAAuC;AACvC,2CAAoD;AACpD,0DAA+D;AAC/D,iDAA4C;AAC5C,6DAAwD;AAExD;;;;;;;;;;;;;;GAcG;AACH,MAAM,sBAAsB;IAC1B,mBAAmB;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,cAAc,GAAuB;IACzC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK;IACnB,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE;IAClB,OAAO,EAAE,CAAC,GAAG,KAAe,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IAChD,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACjE,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAU,EAAE,EAAE,CAAC,EAAE;CACX,CAAC;AAEnC,MAAM,aAAa,GAAG,IAAI,4BAAa,CAAC,uBAAQ,CAAC,IAAI,CAAC,CAAC;AAEvD,MAAM,eAAe,GAAG,IAAI,yBAAU,EAAE,CAAC;AACzC,MAAM,wBAAwB,GAAG,IAAI,sBAAsB,EAAE,CAAC;AAE9D;;;;;;;;;;;;GAYG;AACH,SAAS,SAAS,CAChB,IAAsC,EACtC,gBAAmD;IAEnD,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpE,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;QACvC,CAAC;QAED,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;QAClC,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,mFAAmF;YACnF,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,wBAAW,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,KAAK,GAAI,IAAoE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7F,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC1C,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAQD;;;;;;;;GAQG;AACH,SAAgB,WAAW,CAAC,QAAgB,EAAE,IAAY,EAAE,UAA4B,EAAE;IACxF,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,IAAA,qBAAY,EAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;QACxD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,qCAAgB,CAAC,IAAI,CAAC,CAAC;IAE9C,MAAM,iBAAiB,GAAG,0BAAiB,CAAC,MAAM,CAChD,cAAc,EACd,aAAa,EACb,eAAe,EACf,UAAU,EACV,EAAE,aAAa,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK,EAAE,CACxC,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,mBAAU,CAAC,iBAAiB,EAAE,QAA0B,EAAE,IAAI,CAAC,CAAC;IACvF,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,sBAAS,EAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/D,IAAI,CAA0B,CAAC;IAC/B,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAC1B,MAAM,UAAU,GAAG,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,UAAU,IAAI,UAAU,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAClD,MAAM,UAAU,GAAG,UAAU,CAAC,sBAAsB,CAClD,UAAU,EACV,IAAI,EACJ,wBAAwB,CACzB,CAAC;YAEF,CAAC,KAAK,IAAI,sBAAW,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,UAAoB,CAAC,CAAC;YACxD,SAAS,GAAG,IAAI,CAAC;YAEjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,GAAuB,CAAC;IAC5B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAA,+BAAkB,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,QAAQ,EAAE,CAAC;YACb,GAAG,GAAG,IAAA,mBAAS,EAAC,CAAC,MAA0B,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjF,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;QAClB,GAAG;KACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
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
|
+
import type { AstFactory, BinaryOperator, LeadingComment, ObjectLiteralProperty, SourceMapRange, TemplateLiteral, UnaryOperator, VariableDeclarationType } from '@angular/compiler-cli/src/ngtsc/translator';
|
|
9
|
+
import type { BuiltInType, Parameter } from '@angular/compiler-cli/src/ngtsc/translator/src/api/ast_factory';
|
|
10
|
+
/**
|
|
11
|
+
* An implementation of `AstFactory` that generates JavaScript code strings directly.
|
|
12
|
+
*/
|
|
13
|
+
export declare class StringAstFactory implements AstFactory<string, unknown, string> {
|
|
14
|
+
private readonly sourceCode;
|
|
15
|
+
constructor(sourceCode?: string);
|
|
16
|
+
private render;
|
|
17
|
+
/**
|
|
18
|
+
* Wraps an expression in parentheses if it has syntax or operator precedence
|
|
19
|
+
* traps when used as the receiver/callee of property access, element access,
|
|
20
|
+
* call chains, `new` expressions, or tagged templates.
|
|
21
|
+
*
|
|
22
|
+
* For example, arrow functions (`(() => {}).foo`), numbers (`(5).foo`), object
|
|
23
|
+
* literals (`({ a: 1 }).foo`), and unary operators (`(void 0)()`) require
|
|
24
|
+
* parenthesization when used as receivers.
|
|
25
|
+
*/
|
|
26
|
+
private wrapReceiver;
|
|
27
|
+
/**
|
|
28
|
+
* Wraps an expression in parentheses if it is an un-parenthesized complex
|
|
29
|
+
* operand (such as an un-parenthesized binary, logical, or assignment expression)
|
|
30
|
+
* to prevent operator precedence inversion when embedded inside an outer expression.
|
|
31
|
+
*
|
|
32
|
+
* Atomic expressions (identifiers, member/element access chains, and simple
|
|
33
|
+
* literals matching `/^[a-zA-Z0-9_$.[\]"'`]+$/`) and already-parenthesized
|
|
34
|
+
* expressions are returned as-is.
|
|
35
|
+
*/
|
|
36
|
+
private wrapOperand;
|
|
37
|
+
/**
|
|
38
|
+
* Attaching statement-level comments is a no-op in `StringAstFactory`.
|
|
39
|
+
*
|
|
40
|
+
* Why this is safe:
|
|
41
|
+
* - Load-bearing tree-shaking annotations (`@__PURE__` markers) are explicitly prepended by
|
|
42
|
+
* `createCallExpression` and `createCallChain` whenever `pure: true`.
|
|
43
|
+
* - In `@angular/compiler`, `LeadingComment` is only used for `@ts-ignore` (suppressing
|
|
44
|
+
* TypeScript checker errors in generated `.ts` code) and `webpackChunkName` (in dynamic
|
|
45
|
+
* imports), neither of which occur during `.js`/`.mjs` library partial linking.
|
|
46
|
+
*/
|
|
47
|
+
attachComments(_statement: string, _leadingComments: LeadingComment[]): void;
|
|
48
|
+
createArrayLiteral(elements: unknown[]): string;
|
|
49
|
+
createAssignment(target: unknown, operator: BinaryOperator, value: unknown): string;
|
|
50
|
+
createBinaryExpression(leftOperand: unknown, operator: BinaryOperator, rightOperand: unknown): string;
|
|
51
|
+
createBlock(body: string[]): string;
|
|
52
|
+
createCallExpression(callee: unknown, args: unknown[], pure: boolean): string;
|
|
53
|
+
createCallChain(callee: unknown, args: unknown[], pure: boolean, isOptional: boolean): string;
|
|
54
|
+
createConditional(condition: unknown, thenExpression: unknown, elseExpression: unknown): string;
|
|
55
|
+
createElementAccess(expression: unknown, element: unknown): string;
|
|
56
|
+
createElementAccessChain(expression: unknown, element: unknown, isOptional: boolean): string;
|
|
57
|
+
createExpressionStatement(expression: unknown): string;
|
|
58
|
+
createFunctionDeclaration(functionName: string, parameters: Parameter<string>[], body: string): string;
|
|
59
|
+
createFunctionExpression(functionName: string | null, parameters: Parameter<string>[], body: string): string;
|
|
60
|
+
createArrowFunctionExpression(parameters: Parameter<string>[], body: unknown): string;
|
|
61
|
+
createDynamicImport(url: unknown): string;
|
|
62
|
+
createIdentifier(name: string): string;
|
|
63
|
+
createIfStatement(condition: unknown, thenStatement: string, elseStatement: string | null): string;
|
|
64
|
+
createLiteral(value: string | number | boolean | null | undefined): string;
|
|
65
|
+
createNewExpression(expression: unknown, args: unknown[]): string;
|
|
66
|
+
createObjectLiteral(properties: ObjectLiteralProperty<unknown>[]): string;
|
|
67
|
+
createParenthesizedExpression(expression: unknown): string;
|
|
68
|
+
createPropertyAccess(expression: unknown, propertyName: string): string;
|
|
69
|
+
createPropertyAccessChain(expression: unknown, propertyName: string, isOptional: boolean): string;
|
|
70
|
+
createReturnStatement(expression: unknown | null): string;
|
|
71
|
+
createTaggedTemplate(tag: unknown, template: TemplateLiteral<unknown>): string;
|
|
72
|
+
createTemplateLiteral(template: TemplateLiteral<unknown>): string;
|
|
73
|
+
createThrowStatement(expression: unknown): string;
|
|
74
|
+
createTypeOfExpression(expression: unknown): string;
|
|
75
|
+
createVoidExpression(expression: unknown): string;
|
|
76
|
+
createUnaryExpression(operator: UnaryOperator, operand: unknown): string;
|
|
77
|
+
createVariableDeclaration(variableName: string, initializer: unknown | null, variableType: VariableDeclarationType, _type?: string | null): string;
|
|
78
|
+
createRegularExpressionLiteral(body: string, flags: string | null): string;
|
|
79
|
+
createSpreadElement(expression: unknown): string;
|
|
80
|
+
createBuiltInType(_type: BuiltInType): string;
|
|
81
|
+
createExpressionType(_expression: unknown, _typeParams: string[] | null): string;
|
|
82
|
+
createArrayType(_elementType: string): string;
|
|
83
|
+
createMapType(_valueType: string): string;
|
|
84
|
+
transplantType(_type: string): string;
|
|
85
|
+
setSourceMapRange<T extends string | unknown>(node: T, _sourceMapRange: SourceMapRange | null): T;
|
|
86
|
+
}
|