@angular/build 22.2.0-next.4 → 22.2.0-next.6
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 +13 -12
- package/src/builders/application/build-action.js +47 -39
- package/src/builders/application/build-action.js.map +1 -1
- package/src/builders/application/execute-build.js +1 -1
- package/src/builders/application/execute-build.js.map +1 -1
- package/src/builders/application/execute-post-bundle.js +2 -5
- package/src/builders/application/execute-post-bundle.js.map +1 -1
- package/src/builders/application/i18n.js +20 -10
- package/src/builders/application/i18n.js.map +1 -1
- package/src/builders/application/index.js +2 -2
- package/src/builders/application/index.js.map +1 -1
- package/src/builders/application/results.d.ts +3 -2
- package/src/builders/application/setup-bundling.js +3 -1
- package/src/builders/application/setup-bundling.js.map +1 -1
- package/src/builders/dev-server/vite/index.js +4 -7
- package/src/builders/dev-server/vite/index.js.map +1 -1
- package/src/builders/dev-server/vite/server.js +1 -1
- package/src/builders/dev-server/vite/server.js.map +1 -1
- package/src/builders/dev-server/vite/utils.d.ts +1 -1
- package/src/builders/dev-server/vite/utils.js +9 -4
- package/src/builders/dev-server/vite/utils.js.map +1 -1
- package/src/builders/extract-i18n/application-extraction.js +6 -5
- package/src/builders/extract-i18n/application-extraction.js.map +1 -1
- package/src/builders/karma/application_builder.js +1 -1
- package/src/builders/karma/application_builder.js.map +1 -1
- package/src/builders/karma/assets-middleware.d.ts +2 -2
- package/src/builders/karma/assets-middleware.js +5 -2
- package/src/builders/karma/assets-middleware.js.map +1 -1
- package/src/builders/karma/progress-reporter.js +7 -5
- package/src/builders/karma/progress-reporter.js.map +1 -1
- package/src/builders/karma/utils.d.ts +2 -1
- package/src/builders/karma/utils.js +2 -2
- package/src/builders/karma/utils.js.map +1 -1
- package/src/builders/unit-test/builder.js +1 -1
- package/src/builders/unit-test/options.d.ts +1 -0
- package/src/builders/unit-test/options.js +2 -1
- package/src/builders/unit-test/options.js.map +1 -1
- package/src/builders/unit-test/runners/vitest/build-options.js +5 -6
- package/src/builders/unit-test/runners/vitest/build-options.js.map +1 -1
- package/src/builders/unit-test/runners/vitest/executor.js +4 -4
- package/src/builders/unit-test/runners/vitest/executor.js.map +1 -1
- package/src/builders/unit-test/schema.d.ts +7 -0
- package/src/builders/unit-test/schema.js.map +1 -1
- package/src/builders/unit-test/schema.json +5 -0
- package/src/private.d.ts +1 -1
- package/src/private.js +4 -3
- package/src/private.js.map +1 -1
- package/src/tools/angular/compilation/angular-compilation.d.ts +3 -8
- package/src/tools/angular/compilation/angular-compilation.js +2 -88
- package/src/tools/angular/compilation/angular-compilation.js.map +1 -1
- package/src/tools/angular/compilation/aot-compilation.d.ts +5 -5
- package/src/tools/angular/compilation/aot-compilation.js +9 -13
- package/src/tools/angular/compilation/aot-compilation.js.map +1 -1
- package/src/tools/angular/compilation/compiler-options.d.ts +24 -0
- package/src/tools/angular/compilation/compiler-options.js +135 -0
- package/src/tools/angular/compilation/compiler-options.js.map +1 -0
- package/src/tools/angular/compilation/index.d.ts +1 -1
- package/src/tools/angular/compilation/index.js +1 -3
- package/src/tools/angular/compilation/index.js.map +1 -1
- package/src/tools/angular/compilation/jit-compilation.d.ts +5 -5
- package/src/tools/angular/compilation/jit-compilation.js +8 -15
- package/src/tools/angular/compilation/jit-compilation.js.map +1 -1
- package/src/tools/angular/compilation/parallel-compilation.d.ts +2 -7
- package/src/tools/angular/compilation/parallel-compilation.js +39 -41
- package/src/tools/angular/compilation/parallel-compilation.js.map +1 -1
- package/src/tools/angular/compilation/parallel-worker.d.ts +2 -2
- package/src/tools/angular/compilation/parallel-worker.js +79 -63
- package/src/tools/angular/compilation/parallel-worker.js.map +1 -1
- package/src/tools/angular/compilation/typescript-compilation.d.ts +24 -0
- package/src/tools/angular/compilation/typescript-compilation.js +107 -0
- package/src/tools/angular/compilation/typescript-compilation.js.map +1 -0
- package/src/tools/angular/linker/oxc-linker.d.ts +13 -17
- package/src/tools/angular/linker/oxc-linker.js +27 -89
- package/src/tools/angular/linker/oxc-linker.js.map +1 -1
- package/src/tools/esbuild/angular/compilation-state.d.ts +23 -3
- package/src/tools/esbuild/angular/compilation-state.js +51 -13
- package/src/tools/esbuild/angular/compilation-state.js.map +1 -1
- package/src/tools/esbuild/angular/compiler-plugin.js +36 -101
- package/src/tools/esbuild/angular/compiler-plugin.js.map +1 -1
- package/src/tools/esbuild/angular/component-stylesheets.d.ts +3 -3
- package/src/tools/esbuild/angular/component-stylesheets.js +42 -15
- package/src/tools/esbuild/angular/component-stylesheets.js.map +1 -1
- package/src/tools/esbuild/application-code-bundle.js +5 -9
- package/src/tools/esbuild/application-code-bundle.js.map +1 -1
- package/src/tools/esbuild/bundler-context.d.ts +4 -4
- package/src/tools/esbuild/bundler-context.js +93 -27
- package/src/tools/esbuild/bundler-context.js.map +1 -1
- package/src/tools/esbuild/bundler-execution-result.d.ts +1 -0
- package/src/tools/esbuild/bundler-execution-result.js +2 -2
- package/src/tools/esbuild/bundler-execution-result.js.map +1 -1
- package/src/tools/esbuild/cache.d.ts +10 -0
- package/src/tools/esbuild/cache.js +18 -0
- package/src/tools/esbuild/cache.js.map +1 -1
- package/src/tools/esbuild/i18n-inliner-worker.d.ts +82 -37
- package/src/tools/esbuild/i18n-inliner-worker.js +134 -97
- package/src/tools/esbuild/i18n-inliner-worker.js.map +1 -1
- package/src/tools/esbuild/i18n-inliner.d.ts +42 -11
- package/src/tools/esbuild/i18n-inliner.js +335 -121
- package/src/tools/esbuild/i18n-inliner.js.map +1 -1
- package/src/tools/esbuild/i18n-locale-plugin.d.ts +32 -0
- package/src/tools/esbuild/i18n-locale-plugin.js +112 -103
- package/src/tools/esbuild/i18n-locale-plugin.js.map +1 -1
- package/src/tools/esbuild/i18n-translation-encoder.d.ts +21 -0
- package/src/tools/esbuild/i18n-translation-encoder.js +92 -0
- package/src/tools/esbuild/i18n-translation-encoder.js.map +1 -0
- package/src/tools/esbuild/i18n-translation-reader.d.ts +41 -0
- package/src/tools/esbuild/i18n-translation-reader.js +164 -0
- package/src/tools/esbuild/i18n-translation-reader.js.map +1 -0
- package/src/tools/esbuild/javascript-transformer-worker.js +41 -47
- package/src/tools/esbuild/javascript-transformer-worker.js.map +1 -1
- package/src/tools/esbuild/javascript-transformer.js +53 -1
- package/src/tools/esbuild/javascript-transformer.js.map +1 -1
- package/src/tools/esbuild/load-result-cache.d.ts +1 -0
- package/src/tools/esbuild/load-result-cache.js +24 -11
- package/src/tools/esbuild/load-result-cache.js.map +1 -1
- package/src/tools/esbuild/sqlite-cache-store.d.ts +8 -0
- package/src/tools/esbuild/sqlite-cache-store.js +19 -7
- package/src/tools/esbuild/sqlite-cache-store.js.map +1 -1
- package/src/tools/esbuild/stylesheets/sass-language.js +19 -14
- package/src/tools/esbuild/stylesheets/sass-language.js.map +1 -1
- package/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.d.ts +1 -1
- package/src/tools/esbuild/utils.d.ts +1 -1
- package/src/tools/esbuild/utils.js.map +1 -1
- package/src/tools/oxc/oxc-transform.d.ts +3 -0
- package/src/tools/oxc/oxc-transform.js +103 -124
- package/src/tools/oxc/oxc-transform.js.map +1 -1
- package/src/tools/oxc/traversal.d.ts +32 -0
- package/src/tools/oxc/traversal.js +299 -0
- package/src/tools/oxc/traversal.js.map +1 -0
- package/src/tools/sass/rebasing-importer.d.ts +8 -14
- package/src/tools/sass/rebasing-importer.js +18 -24
- package/src/tools/sass/rebasing-importer.js.map +1 -1
- package/src/tools/sass/sass-service.d.ts +11 -38
- package/src/tools/sass/sass-service.js +124 -187
- package/src/tools/sass/sass-service.js.map +1 -1
- package/src/utils/environment-options.d.ts +12 -0
- package/src/utils/environment-options.js +20 -12
- package/src/utils/environment-options.js.map +1 -1
- package/src/utils/i18n-options.d.ts +2 -1
- package/src/utils/i18n-options.js.map +1 -1
- package/src/utils/normalize-cache.d.ts +11 -1
- package/src/utils/normalize-cache.js +6 -3
- package/src/utils/normalize-cache.js.map +1 -1
- package/src/utils/purge-cache.js +24 -13
- package/src/utils/purge-cache.js.map +1 -1
- package/src/utils/server-rendering/esm-in-memory-loader/loader-hooks.d.ts +1 -1
- package/src/utils/server-rendering/esm-in-memory-loader/loader-hooks.js +12 -9
- package/src/utils/server-rendering/esm-in-memory-loader/loader-hooks.js.map +1 -1
- package/src/utils/server-rendering/esm-in-memory-loader/utils.d.ts +8 -0
- package/src/utils/server-rendering/esm-in-memory-loader/utils.js +30 -0
- package/src/utils/server-rendering/esm-in-memory-loader/utils.js.map +1 -1
- package/src/utils/server-rendering/prerender.d.ts +2 -1
- package/src/utils/server-rendering/prerender.js +83 -30
- package/src/utils/server-rendering/prerender.js.map +1 -1
- package/src/utils/server-rendering/render-worker.d.ts +10 -5
- package/src/utils/server-rendering/render-worker.js +31 -7
- package/src/utils/server-rendering/render-worker.js.map +1 -1
- package/src/utils/test-files.d.ts +2 -2
- package/src/utils/test-files.js +3 -3
- package/src/utils/test-files.js.map +1 -1
- package/src/tools/angular/compilation/noop-compilation.d.ts +0 -15
- package/src/tools/angular/compilation/noop-compilation.js +0 -27
- package/src/tools/angular/compilation/noop-compilation.js.map +0 -1
- package/src/tools/sass/worker.d.ts +0 -63
- package/src/tools/sass/worker.js +0 -202
- package/src/tools/sass/worker.js.map +0 -1
- /package/src/tools/{esbuild/angular → angular/compilation}/diagnostics.d.ts +0 -0
- /package/src/tools/{esbuild/angular → angular/compilation}/diagnostics.js +0 -0
- /package/src/tools/{esbuild/angular → angular/compilation}/diagnostics.js.map +0 -0
|
@@ -0,0 +1,107 @@
|
|
|
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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
43
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
44
|
+
};
|
|
45
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
exports.TypeScriptCompilation = void 0;
|
|
47
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
48
|
+
const path_1 = require("../../../utils/path");
|
|
49
|
+
const profiling_1 = require("../../esbuild/profiling");
|
|
50
|
+
const angular_compilation_1 = require("./angular-compilation");
|
|
51
|
+
const diagnostics_1 = require("./diagnostics");
|
|
52
|
+
class TypeScriptCompilation extends angular_compilation_1.AngularCompilation {
|
|
53
|
+
static #angularCompilerCliModule;
|
|
54
|
+
static async loadCompilerCli() {
|
|
55
|
+
TypeScriptCompilation.#angularCompilerCliModule ??= await Promise.resolve().then(() => __importStar(require('@angular/compiler-cli')));
|
|
56
|
+
return TypeScriptCompilation.#angularCompilerCliModule;
|
|
57
|
+
}
|
|
58
|
+
async loadConfiguration(tsconfig) {
|
|
59
|
+
const { readConfiguration } = await TypeScriptCompilation.loadCompilerCli();
|
|
60
|
+
return (0, profiling_1.profileSync)('NG_READ_CONFIG', () => readConfiguration(tsconfig, {
|
|
61
|
+
// Angular specific configuration defaults and overrides to ensure a functioning compilation.
|
|
62
|
+
suppressOutputPathCheck: true,
|
|
63
|
+
outDir: undefined,
|
|
64
|
+
sourceMap: false,
|
|
65
|
+
declaration: false,
|
|
66
|
+
declarationMap: false,
|
|
67
|
+
allowEmptyCodegenFiles: false,
|
|
68
|
+
annotationsAs: 'decorators',
|
|
69
|
+
enableResourceInlining: false,
|
|
70
|
+
supportTestBed: false,
|
|
71
|
+
supportJitMode: false,
|
|
72
|
+
// Disable removing of comments as TS is quite aggressive with these and can
|
|
73
|
+
// remove important annotations, such as /* @__PURE__ */ and comments like /* vite-ignore */.
|
|
74
|
+
removeComments: false,
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
sourceFiles = new Map();
|
|
78
|
+
invalidateFiles(files) {
|
|
79
|
+
for (const file of files) {
|
|
80
|
+
this.sourceFiles.delete((0, path_1.toPosixPath)(file));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async update(files) {
|
|
84
|
+
this.invalidateFiles(files);
|
|
85
|
+
}
|
|
86
|
+
async diagnoseFiles(modes = angular_compilation_1.DiagnosticModes.All) {
|
|
87
|
+
if (modes === angular_compilation_1.DiagnosticModes.None) {
|
|
88
|
+
return {};
|
|
89
|
+
}
|
|
90
|
+
const result = {};
|
|
91
|
+
await (0, profiling_1.profileAsync)('NG_DIAGNOSTICS_TOTAL', async () => {
|
|
92
|
+
const diagnostics = await this.collectDiagnostics(modes);
|
|
93
|
+
for (const diagnostic of diagnostics) {
|
|
94
|
+
const message = (0, diagnostics_1.convertTypeScriptDiagnostic)(typescript_1.default, diagnostic);
|
|
95
|
+
if (diagnostic.category === typescript_1.default.DiagnosticCategory.Error) {
|
|
96
|
+
(result.errors ??= []).push(message);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
(result.warnings ??= []).push(message);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
exports.TypeScriptCompilation = TypeScriptCompilation;
|
|
107
|
+
//# sourceMappingURL=typescript-compilation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript-compilation.js","sourceRoot":"","sources":["typescript-compilation.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIH,4DAA4B;AAC5B,8CAAkD;AAClD,uDAAoE;AACpE,+DAA4E;AAC5E,+CAA4D;AAE5D,MAAsB,qBAAsB,SAAQ,wCAAkB;IACpE,MAAM,CAAC,yBAAyB,CAAa;IAE7C,MAAM,CAAC,KAAK,CAAC,eAAe;QAC1B,qBAAqB,CAAC,yBAAyB,KAAK,wDAAa,uBAAuB,GAAC,CAAC;QAE1F,OAAO,qBAAqB,CAAC,yBAAyB,CAAC;IACzD,CAAC;IAES,KAAK,CAAC,iBAAiB,CAAC,QAAgB;QAChD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,qBAAqB,CAAC,eAAe,EAAE,CAAC;QAE5E,OAAO,IAAA,uBAAW,EAAC,gBAAgB,EAAE,GAAG,EAAE,CACxC,iBAAiB,CAAC,QAAQ,EAAE;YAC1B,6FAA6F;YAC7F,uBAAuB,EAAE,IAAI;YAC7B,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,KAAK;YAChB,WAAW,EAAE,KAAK;YAClB,cAAc,EAAE,KAAK;YACrB,sBAAsB,EAAE,KAAK;YAC7B,aAAa,EAAE,YAAY;YAC3B,sBAAsB,EAAE,KAAK;YAC7B,cAAc,EAAE,KAAK;YACrB,cAAc,EAAE,KAAK;YACrB,4EAA4E;YAC5E,6FAA6F;YAC7F,cAAc,EAAE,KAAK;SACtB,CAAC,CACH,CAAC;IACJ,CAAC;IAEkB,WAAW,GAAG,IAAI,GAAG,EAAyB,CAAC;IAExD,eAAe,CAAC,KAAuB;QAC/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAA,kBAAW,EAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAEQ,KAAK,CAAC,MAAM,CAAC,KAAkB;QACtC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAMQ,KAAK,CAAC,aAAa,CAC1B,KAAK,GAAG,qCAAe,CAAC,GAAG;QAE3B,IAAI,KAAK,KAAK,qCAAe,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,MAAM,GAA+D,EAAE,CAAC;QAE9E,MAAM,IAAA,wBAAY,EAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAEzD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACrC,MAAM,OAAO,GAAG,IAAA,yCAA2B,EAAC,oBAAE,EAAE,UAAU,CAAC,CAAC;gBAC5D,IAAI,UAAU,CAAC,QAAQ,KAAK,oBAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;oBACxD,CAAC,MAAM,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvC,CAAC;qBAAM,CAAC;oBACN,CAAC,MAAM,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAxED,sDAwEC"}
|
|
@@ -5,22 +5,18 @@
|
|
|
5
5
|
* Use of this source code is governed by an MIT-style license that can be
|
|
6
6
|
* found in the LICENSE file at https://angular.dev/license
|
|
7
7
|
*/
|
|
8
|
-
import type {
|
|
9
|
-
export interface OxcLinkerOptions {
|
|
10
|
-
sourcemap?: boolean;
|
|
11
|
-
jit?: boolean;
|
|
12
|
-
skipCheck?: boolean;
|
|
13
|
-
}
|
|
8
|
+
import type { CallExpression } from '@oxc-project/types';
|
|
14
9
|
/**
|
|
15
|
-
*
|
|
16
|
-
* using `oxc-parser` and `magic-string`.
|
|
17
|
-
*
|
|
18
|
-
* @param filename The full path to the file.
|
|
19
|
-
* @param code The source code content.
|
|
20
|
-
* @param options Linker options (sourcemap, jit, skipCheck).
|
|
21
|
-
* @returns An object containing the transformed code and optional source map.
|
|
10
|
+
* Manages Angular partial declaration linking using Oxc AST nodes.
|
|
22
11
|
*/
|
|
23
|
-
export declare
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
12
|
+
export declare class OxcLinker {
|
|
13
|
+
#private;
|
|
14
|
+
constructor(filename: string, code: string, jit?: boolean);
|
|
15
|
+
/**
|
|
16
|
+
* Attempts to link an Angular partial declaration CallExpression.
|
|
17
|
+
*
|
|
18
|
+
* @param node The CallExpression AST node to check and link.
|
|
19
|
+
* @returns The linked code string if the node is a partial declaration, or undefined otherwise.
|
|
20
|
+
*/
|
|
21
|
+
linkCallExpression(node: CallExpression): string | undefined;
|
|
22
|
+
}
|
|
@@ -6,15 +6,10 @@
|
|
|
6
6
|
* Use of this source code is governed by an MIT-style license that can be
|
|
7
7
|
* found in the LICENSE file at https://angular.dev/license
|
|
8
8
|
*/
|
|
9
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
-
};
|
|
12
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.
|
|
10
|
+
exports.OxcLinker = void 0;
|
|
14
11
|
const compiler_cli_1 = require("@angular/compiler-cli");
|
|
15
12
|
const linker_1 = require("@angular/compiler-cli/linker");
|
|
16
|
-
const magic_string_1 = __importDefault(require("magic-string"));
|
|
17
|
-
const oxc_parser_1 = require("oxc-parser");
|
|
18
13
|
const oxc_ast_host_1 = require("./oxc-ast-host");
|
|
19
14
|
const string_ast_factory_1 = require("./string-ast-factory");
|
|
20
15
|
/**
|
|
@@ -44,94 +39,37 @@ const noopFileSystem = {
|
|
|
44
39
|
dirname: (path) => path.split('/').slice(0, -1).join('/'),
|
|
45
40
|
relative: (_from, to) => to,
|
|
46
41
|
};
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
42
|
+
let SHARED_LOGGER;
|
|
43
|
+
let SHARED_AST_HOST;
|
|
44
|
+
let SHARED_DECLARATION_SCOPE;
|
|
50
45
|
/**
|
|
51
|
-
*
|
|
52
|
-
* When `onCallExpression` returns `true` for a linked `CallExpression`,
|
|
53
|
-
* child traversal into `callee` and `arguments` is skipped.
|
|
54
|
-
*
|
|
55
|
-
* Why subtree pruning is safe for the linker:
|
|
56
|
-
* - Angular partial declarations (`ɵɵngDeclareComponent`, `ɵɵngDeclareDirective`,
|
|
57
|
-
* etc.) are never nested inside each other.
|
|
58
|
-
* - Once a declaration `CallExpression` is linked and replaced, there can never be
|
|
59
|
-
* another partial declaration within its metadata argument object. Pruning its
|
|
60
|
-
* subtree avoids traversing hundreds of unnecessary metadata argument nodes per
|
|
61
|
-
* component.
|
|
46
|
+
* Manages Angular partial declaration linking using Oxc AST nodes.
|
|
62
47
|
*/
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
|
|
48
|
+
class OxcLinker {
|
|
49
|
+
#fileLinker;
|
|
50
|
+
constructor(filename, code, jit = false) {
|
|
51
|
+
SHARED_LOGGER ??= new compiler_cli_1.ConsoleLogger(compiler_cli_1.LogLevel.info);
|
|
52
|
+
SHARED_AST_HOST ??= new oxc_ast_host_1.OxcAstHost();
|
|
53
|
+
SHARED_DECLARATION_SCOPE ??= new InlineDeclarationScope();
|
|
54
|
+
const astFactory = new string_ast_factory_1.StringAstFactory(code);
|
|
55
|
+
const linkerEnvironment = linker_1.LinkerEnvironment.create(noopFileSystem, SHARED_LOGGER, SHARED_AST_HOST, astFactory, { linkerJitMode: jit, sourceMapping: false });
|
|
56
|
+
this.#fileLinker = new linker_1.FileLinker(linkerEnvironment, filename, code);
|
|
72
57
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
const keys = oxc_parser_1.visitorKeys[nodeType];
|
|
84
|
-
if (keys) {
|
|
85
|
-
for (let i = 0; i < keys.length; i++) {
|
|
86
|
-
const child = node[keys[i]];
|
|
87
|
-
if (child !== undefined && child !== null) {
|
|
88
|
-
visitNode(child, onCallExpression);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Executes Angular partial declaration linking on the specified JavaScript file
|
|
95
|
-
* using `oxc-parser` and `magic-string`.
|
|
96
|
-
*
|
|
97
|
-
* @param filename The full path to the file.
|
|
98
|
-
* @param code The source code content.
|
|
99
|
-
* @param options Linker options (sourcemap, jit, skipCheck).
|
|
100
|
-
* @returns An object containing the transformed code and optional source map.
|
|
101
|
-
*/
|
|
102
|
-
function linkWithOxc(filename, code, options = {}) {
|
|
103
|
-
if (!options.skipCheck && !(0, linker_1.needsLinking)(filename, code)) {
|
|
104
|
-
return { code, map: undefined };
|
|
105
|
-
}
|
|
106
|
-
const astFactory = new string_ast_factory_1.StringAstFactory(code);
|
|
107
|
-
const linkerEnvironment = linker_1.LinkerEnvironment.create(noopFileSystem, SHARED_LOGGER, SHARED_AST_HOST, astFactory, { linkerJitMode: options.jit ?? false, sourceMapping: false });
|
|
108
|
-
const fileLinker = new linker_1.FileLinker(linkerEnvironment, filename, code);
|
|
109
|
-
const { program } = (0, oxc_parser_1.parseSync)(filename, code, { range: true });
|
|
110
|
-
let s;
|
|
111
|
-
let hasLinked = false;
|
|
112
|
-
visitNode(program, (node) => {
|
|
58
|
+
/**
|
|
59
|
+
* Attempts to link an Angular partial declaration CallExpression.
|
|
60
|
+
*
|
|
61
|
+
* @param node The CallExpression AST node to check and link.
|
|
62
|
+
* @returns The linked code string if the node is a partial declaration, or undefined otherwise.
|
|
63
|
+
*/
|
|
64
|
+
linkCallExpression(node) {
|
|
113
65
|
const calleeName = SHARED_AST_HOST.getSymbolName(node.callee);
|
|
114
|
-
if (calleeName
|
|
115
|
-
|
|
116
|
-
const linkedCode = fileLinker.linkPartialDeclaration(calleeName, args, SHARED_DECLARATION_SCOPE);
|
|
117
|
-
s ??= new magic_string_1.default(code);
|
|
118
|
-
s.overwrite(node.start, node.end, linkedCode);
|
|
119
|
-
hasLinked = true;
|
|
120
|
-
return true;
|
|
66
|
+
if (!calleeName || !this.#fileLinker.isPartialDeclaration(calleeName)) {
|
|
67
|
+
return undefined;
|
|
121
68
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
return { code, map: undefined };
|
|
126
|
-
}
|
|
127
|
-
let map;
|
|
128
|
-
if (options.sourcemap) {
|
|
129
|
-
const rawMap = s.generateDecodedMap({ hires: true, source: filename });
|
|
130
|
-
map = { ...rawMap, version: 3 };
|
|
69
|
+
const args = SHARED_AST_HOST.parseArguments(node);
|
|
70
|
+
const linkedCode = this.#fileLinker.linkPartialDeclaration(calleeName, args, SHARED_DECLARATION_SCOPE);
|
|
71
|
+
return linkedCode;
|
|
131
72
|
}
|
|
132
|
-
return {
|
|
133
|
-
code: s.toString(),
|
|
134
|
-
map,
|
|
135
|
-
};
|
|
136
73
|
}
|
|
74
|
+
exports.OxcLinker = OxcLinker;
|
|
137
75
|
//# sourceMappingURL=oxc-linker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxc-linker.js","sourceRoot":"","sources":["oxc-linker.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG
|
|
1
|
+
{"version":3,"file":"oxc-linker.js","sourceRoot":"","sources":["oxc-linker.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,wDAAgE;AAChE,yDAAoG;AAMpG,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,IAAI,aAA4B,CAAC;AACjC,IAAI,eAA2B,CAAC;AAChC,IAAI,wBAAgD,CAAC;AAErD;;GAEG;AACH,MAAa,SAAS;IACX,WAAW,CAA2D;IAE/E,YAAY,QAAgB,EAAE,IAAY,EAAE,GAAG,GAAG,KAAK;QACrD,aAAa,KAAK,IAAI,4BAAa,CAAC,uBAAQ,CAAC,IAAI,CAAC,CAAC;QACnD,eAAe,KAAK,IAAI,yBAAU,EAAE,CAAC;QACrC,wBAAwB,KAAK,IAAI,sBAAsB,EAAE,CAAC;QAE1D,MAAM,UAAU,GAAG,IAAI,qCAAgB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,iBAAiB,GAAG,0BAAiB,CAAC,MAAM,CAChD,cAAc,EACd,aAAa,EACb,eAAe,EACf,UAAU,EACV,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,CAC7C,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,IAAI,mBAAU,CAAC,iBAAiB,EAAE,QAA0B,EAAE,IAAI,CAAC,CAAC;IACzF,CAAC;IAED;;;;;OAKG;IACH,kBAAkB,CAAC,IAAoB;QACrC,MAAM,UAAU,GAAG,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAC;YACtE,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,sBAAsB,CACxD,UAAU,EACV,IAAI,EACJ,wBAAwB,CACzB,CAAC;QAEF,OAAO,UAAoB,CAAC;IAC9B,CAAC;CACF;AAzCD,8BAyCC"}
|
|
@@ -5,14 +5,34 @@
|
|
|
5
5
|
* Use of this source code is governed by an MIT-style license that can be
|
|
6
6
|
* found in the LICENSE file at https://angular.dev/license
|
|
7
7
|
*/
|
|
8
|
-
import {
|
|
9
|
-
|
|
8
|
+
import type { CompilerOptions } from '@angular/compiler-cli';
|
|
9
|
+
import type { AngularCompilation } from '../../angular/compilation';
|
|
10
|
+
export declare abstract class AngularCompilationContext {
|
|
11
|
+
abstract readonly compilation?: AngularCompilation;
|
|
12
|
+
abstract isPrimary(): this is PrimaryCompilationContext;
|
|
13
|
+
abstract readonly waitUntilReady: Promise<boolean>;
|
|
14
|
+
abstract getCompilerOptions(): Promise<CompilerOptions>;
|
|
15
|
+
abstract dispose(): Promise<void>;
|
|
16
|
+
createSecondaryContext(): AngularCompilationContext;
|
|
17
|
+
}
|
|
18
|
+
export declare class PrimaryCompilationContext extends AngularCompilationContext {
|
|
10
19
|
#private;
|
|
11
20
|
constructor(compilation: AngularCompilation);
|
|
21
|
+
isPrimary(): this is PrimaryCompilationContext;
|
|
12
22
|
get compilation(): AngularCompilation;
|
|
13
23
|
get waitUntilReady(): Promise<boolean>;
|
|
24
|
+
getCompilerOptions(): Promise<CompilerOptions>;
|
|
25
|
+
setCompilerOptions(options: CompilerOptions): void;
|
|
14
26
|
markAsReady(hasErrors: boolean): void;
|
|
15
27
|
markAsInProgress(): void;
|
|
16
28
|
dispose(): Promise<void>;
|
|
17
|
-
|
|
29
|
+
}
|
|
30
|
+
export declare class SecondaryCompilationContext extends AngularCompilationContext {
|
|
31
|
+
private readonly primaryContext?;
|
|
32
|
+
constructor(primaryContext?: AngularCompilationContext | undefined);
|
|
33
|
+
isPrimary(): this is PrimaryCompilationContext;
|
|
34
|
+
get compilation(): undefined;
|
|
35
|
+
get waitUntilReady(): Promise<boolean>;
|
|
36
|
+
getCompilerOptions(): Promise<CompilerOptions>;
|
|
37
|
+
dispose(): Promise<void>;
|
|
18
38
|
}
|
|
@@ -7,17 +7,29 @@
|
|
|
7
7
|
* found in the LICENSE file at https://angular.dev/license
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.AngularCompilationContext = void 0;
|
|
11
|
-
const compilation_1 = require("../../angular/compilation");
|
|
10
|
+
exports.SecondaryCompilationContext = exports.PrimaryCompilationContext = exports.AngularCompilationContext = void 0;
|
|
12
11
|
class AngularCompilationContext {
|
|
12
|
+
createSecondaryContext() {
|
|
13
|
+
return new SecondaryCompilationContext(this);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.AngularCompilationContext = AngularCompilationContext;
|
|
17
|
+
class PrimaryCompilationContext extends AngularCompilationContext {
|
|
13
18
|
#compilation;
|
|
14
19
|
#pendingCompilation = true;
|
|
15
20
|
#resolveCompilationReady;
|
|
16
21
|
#compilationReadyPromise;
|
|
17
22
|
#hasErrors = true;
|
|
23
|
+
#compilerOptions;
|
|
24
|
+
#resolveCompilerOptions;
|
|
25
|
+
#compilerOptionsPromise;
|
|
18
26
|
constructor(compilation) {
|
|
27
|
+
super();
|
|
19
28
|
this.#compilation = compilation;
|
|
20
29
|
}
|
|
30
|
+
isPrimary() {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
21
33
|
get compilation() {
|
|
22
34
|
return this.#compilation;
|
|
23
35
|
}
|
|
@@ -30,14 +42,39 @@ class AngularCompilationContext {
|
|
|
30
42
|
});
|
|
31
43
|
return this.#compilationReadyPromise;
|
|
32
44
|
}
|
|
45
|
+
getCompilerOptions() {
|
|
46
|
+
if (this.#compilerOptions) {
|
|
47
|
+
return Promise.resolve(this.#compilerOptions);
|
|
48
|
+
}
|
|
49
|
+
if (!this.#pendingCompilation) {
|
|
50
|
+
return Promise.resolve({});
|
|
51
|
+
}
|
|
52
|
+
this.#compilerOptionsPromise ??= new Promise((resolve) => {
|
|
53
|
+
this.#resolveCompilerOptions = resolve;
|
|
54
|
+
});
|
|
55
|
+
return this.#compilerOptionsPromise;
|
|
56
|
+
}
|
|
57
|
+
setCompilerOptions(options) {
|
|
58
|
+
this.#compilerOptions = options;
|
|
59
|
+
this.#resolveCompilerOptions?.(options);
|
|
60
|
+
this.#resolveCompilerOptions = undefined;
|
|
61
|
+
this.#compilerOptionsPromise = undefined;
|
|
62
|
+
}
|
|
33
63
|
markAsReady(hasErrors) {
|
|
34
64
|
this.#hasErrors = hasErrors;
|
|
35
65
|
this.#resolveCompilationReady?.(hasErrors);
|
|
66
|
+
this.#resolveCompilationReady = undefined;
|
|
36
67
|
this.#compilationReadyPromise = undefined;
|
|
37
68
|
this.#pendingCompilation = false;
|
|
69
|
+
if (this.#resolveCompilerOptions) {
|
|
70
|
+
this.#resolveCompilerOptions(this.#compilerOptions ?? {});
|
|
71
|
+
this.#resolveCompilerOptions = undefined;
|
|
72
|
+
this.#compilerOptionsPromise = undefined;
|
|
73
|
+
}
|
|
38
74
|
}
|
|
39
75
|
markAsInProgress() {
|
|
40
76
|
this.#pendingCompilation = true;
|
|
77
|
+
this.#compilerOptions = undefined;
|
|
41
78
|
}
|
|
42
79
|
#disposal;
|
|
43
80
|
dispose() {
|
|
@@ -53,28 +90,29 @@ class AngularCompilationContext {
|
|
|
53
90
|
// Suppress closure errors to avoid unhandled rejections during teardown.
|
|
54
91
|
}
|
|
55
92
|
}
|
|
56
|
-
createSecondaryContext() {
|
|
57
|
-
return new SecondaryCompilationContext(this);
|
|
58
|
-
}
|
|
59
93
|
}
|
|
60
|
-
exports.
|
|
94
|
+
exports.PrimaryCompilationContext = PrimaryCompilationContext;
|
|
61
95
|
class SecondaryCompilationContext extends AngularCompilationContext {
|
|
62
96
|
primaryContext;
|
|
63
97
|
constructor(primaryContext) {
|
|
64
|
-
super(
|
|
98
|
+
super();
|
|
65
99
|
this.primaryContext = primaryContext;
|
|
66
100
|
}
|
|
67
|
-
|
|
68
|
-
return
|
|
101
|
+
isPrimary() {
|
|
102
|
+
return false;
|
|
69
103
|
}
|
|
70
|
-
|
|
71
|
-
|
|
104
|
+
get compilation() {
|
|
105
|
+
return undefined;
|
|
72
106
|
}
|
|
73
|
-
|
|
74
|
-
|
|
107
|
+
get waitUntilReady() {
|
|
108
|
+
return this.primaryContext?.waitUntilReady ?? Promise.resolve(false);
|
|
109
|
+
}
|
|
110
|
+
getCompilerOptions() {
|
|
111
|
+
return this.primaryContext?.getCompilerOptions() ?? Promise.resolve({});
|
|
75
112
|
}
|
|
76
113
|
async dispose() {
|
|
77
114
|
// No-op for secondary context to avoid disposing the primary compilation worker
|
|
78
115
|
}
|
|
79
116
|
}
|
|
117
|
+
exports.SecondaryCompilationContext = SecondaryCompilationContext;
|
|
80
118
|
//# sourceMappingURL=compilation-state.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compilation-state.js","sourceRoot":"","sources":["compilation-state.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;
|
|
1
|
+
{"version":3,"file":"compilation-state.js","sourceRoot":"","sources":["compilation-state.ts"],"names":[],"mappings":"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"}
|