@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.
Files changed (49) hide show
  1. package/package.json +17 -19
  2. package/src/private.d.ts +0 -1
  3. package/src/private.js +0 -2
  4. package/src/private.js.map +1 -1
  5. package/src/tools/angular/linker/oxc-ast-host.d.ts +33 -0
  6. package/src/tools/angular/linker/oxc-ast-host.js +204 -0
  7. package/src/tools/angular/linker/oxc-ast-host.js.map +1 -0
  8. package/src/tools/angular/linker/oxc-linker.d.ts +25 -0
  9. package/src/tools/angular/linker/oxc-linker.js +145 -0
  10. package/src/tools/angular/linker/oxc-linker.js.map +1 -0
  11. package/src/tools/angular/linker/string-ast-factory.d.ts +86 -0
  12. package/src/tools/angular/linker/string-ast-factory.js +223 -0
  13. package/src/tools/angular/linker/string-ast-factory.js.map +1 -0
  14. package/src/tools/babel/plugins/types.d.ts +8 -8
  15. package/src/tools/esbuild/javascript-transformer-worker.js +78 -83
  16. package/src/tools/esbuild/javascript-transformer-worker.js.map +1 -1
  17. package/src/tools/esbuild/load-result-cache.d.ts +1 -1
  18. package/src/tools/esbuild/load-result-cache.js +4 -2
  19. package/src/tools/esbuild/load-result-cache.js.map +1 -1
  20. package/src/tools/esbuild/persistent-load-result-cache.d.ts +87 -0
  21. package/src/tools/esbuild/persistent-load-result-cache.js +267 -0
  22. package/src/tools/esbuild/persistent-load-result-cache.js.map +1 -0
  23. package/src/tools/esbuild/stylesheets/stylesheet-cache-key.d.ts +35 -0
  24. package/src/tools/esbuild/stylesheets/stylesheet-cache-key.js +68 -0
  25. package/src/tools/esbuild/stylesheets/stylesheet-cache-key.js.map +1 -0
  26. package/src/utils/environment-options.d.ts +6 -0
  27. package/src/utils/environment-options.js +7 -1
  28. package/src/utils/environment-options.js.map +1 -1
  29. package/src/utils/normalize-cache.js +1 -1
  30. package/src/utils/version.js +1 -1
  31. package/src/tools/babel/plugins/add-code-coverage.d.ts +0 -14
  32. package/src/tools/babel/plugins/add-code-coverage.js +0 -44
  33. package/src/tools/babel/plugins/add-code-coverage.js.map +0 -1
  34. package/src/tools/babel/plugins/adjust-static-class-members.d.ts +0 -25
  35. package/src/tools/babel/plugins/adjust-static-class-members.js +0 -349
  36. package/src/tools/babel/plugins/adjust-static-class-members.js.map +0 -1
  37. package/src/tools/babel/plugins/adjust-typescript-enums.d.ts +0 -21
  38. package/src/tools/babel/plugins/adjust-typescript-enums.js +0 -113
  39. package/src/tools/babel/plugins/adjust-typescript-enums.js.map +0 -1
  40. package/src/tools/babel/plugins/elide-angular-metadata.d.ts +0 -23
  41. package/src/tools/babel/plugins/elide-angular-metadata.js +0 -110
  42. package/src/tools/babel/plugins/elide-angular-metadata.js.map +0 -1
  43. package/src/tools/babel/plugins/index.d.ts +0 -11
  44. package/src/tools/babel/plugins/index.js +0 -22
  45. package/src/tools/babel/plugins/index.js.map +0 -1
  46. package/src/tools/babel/plugins/pure-toplevel-functions.d.ts +0 -13
  47. package/src/tools/babel/plugins/pure-toplevel-functions.js +0 -128
  48. package/src/tools/babel/plugins/pure-toplevel-functions.js.map +0 -1
  49. 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",
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.2201.3",
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": "10.2.2",
38
- "magic-string": "1.0.0",
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.2.0",
44
- "rolldown": "1.2.0",
45
- "sass": "1.101.0",
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.1.5",
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.3",
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");
@@ -1 +1 @@
1
- {"version":3,"file":"private.js","sourceRoot":"","sources":["private.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;AAuCH,oDAkBC;AAvDD;;;;;GAKG;AAEH,6DAAwF;AAqD/E,yGArDiB,sCAAwB,OAqDjB;AApDjC,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;AAI/C,QAAQ;AACR,wDAAsC;AAEtC,+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"}
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":"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"}
@@ -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
+ }