@angular/core 20.1.4 → 20.1.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/api.d.d.ts +1 -1
- package/chrome_dev_tools_performance.d.d.ts +1 -1
- package/discovery.d.d.ts +1 -1
- package/event_dispatcher.d.d.ts +1 -1
- package/fesm2022/attribute.mjs +1 -1
- package/fesm2022/attribute.mjs.map +1 -1
- package/fesm2022/core.mjs +2 -2
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/debug_node.mjs +14 -5
- package/fesm2022/debug_node.mjs.map +1 -1
- package/fesm2022/not_found.mjs +1 -1
- package/fesm2022/not_found.mjs.map +1 -1
- package/fesm2022/primitives/di.mjs +1 -1
- package/fesm2022/primitives/di.mjs.map +1 -1
- package/fesm2022/primitives/event-dispatch.mjs +1 -1
- package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
- package/fesm2022/primitives/signals.mjs +1 -1
- package/fesm2022/primitives/signals.mjs.map +1 -1
- package/fesm2022/resource.mjs +1 -1
- package/fesm2022/resource.mjs.map +1 -1
- package/fesm2022/root_effect_scheduler.mjs +1 -1
- package/fesm2022/root_effect_scheduler.mjs.map +1 -1
- package/fesm2022/rxjs-interop.mjs +1 -1
- package/fesm2022/rxjs-interop.mjs.map +1 -1
- package/fesm2022/signal.mjs +1 -1
- package/fesm2022/signal.mjs.map +1 -1
- package/fesm2022/testing.mjs +1 -1
- package/fesm2022/testing.mjs.map +1 -1
- package/fesm2022/untracked.mjs +1 -1
- package/fesm2022/untracked.mjs.map +1 -1
- package/fesm2022/weak_ref.mjs +1 -1
- package/fesm2022/weak_ref.mjs.map +1 -1
- package/graph.d.d.ts +1 -1
- package/index.d.ts +3 -1
- package/package.json +2 -2
- package/primitives/di/index.d.ts +1 -1
- package/primitives/event-dispatch/index.d.ts +1 -1
- package/primitives/signals/index.d.ts +1 -1
- package/rxjs-interop/index.d.ts +1 -1
- package/schematics/bundles/{apply_import_manager-BwG_XNz3.cjs → apply_import_manager-BeiseOfz.cjs} +4 -4
- package/schematics/bundles/cleanup-unused-imports.cjs +7 -8
- package/schematics/bundles/{compiler_host-BouiutKy.cjs → compiler_host-CIkS8EIQ.cjs} +3 -3
- package/schematics/bundles/control-flow-migration.cjs +18 -19
- package/schematics/bundles/document-core.cjs +6 -7
- package/schematics/bundles/imports-CIX-JgAN.cjs +1 -1
- package/schematics/bundles/{index-C7alPIzS.cjs → index-CuCkSYir.cjs} +1254 -1246
- package/schematics/bundles/{index-C4RI5-xz.cjs → index-Dek52tJB.cjs} +49 -49
- package/schematics/bundles/inject-flags.cjs +6 -7
- package/schematics/bundles/inject-migration.cjs +6 -7
- package/schematics/bundles/leading_space-D9nQ8UQC.cjs +1 -1
- package/schematics/bundles/{migrate_ts_type_references-BXdun0jT.cjs → migrate_ts_type_references-MVe5vYII.cjs} +14 -14
- package/schematics/bundles/ng_decorators-B5HCqr20.cjs +1 -1
- package/schematics/bundles/nodes-B16H9JUd.cjs +1 -1
- package/schematics/bundles/output-migration.cjs +20 -21
- package/schematics/bundles/{project_paths-KZ5syi8v.cjs → project_paths-BKtwr3ir.cjs} +16 -17
- package/schematics/bundles/{checker-B1MkHERe.cjs → project_tsconfig_paths-DA1eve-D.cjs} +139 -24
- package/schematics/bundles/property_name-BBwFuqMe.cjs +1 -1
- package/schematics/bundles/route-lazy-loading.cjs +6 -7
- package/schematics/bundles/self-closing-tags-migration.cjs +10 -11
- package/schematics/bundles/signal-input-migration.cjs +21 -22
- package/schematics/bundles/signal-queries-migration.cjs +31 -32
- package/schematics/bundles/signals.cjs +8 -9
- package/schematics/bundles/standalone-migration.cjs +10 -11
- package/schematics/bundles/symbol-VPWguRxr.cjs +1 -1
- package/schematics/bundles/test-bed-get.cjs +4 -5
- package/signal.d.d.ts +1 -1
- package/testing/index.d.ts +1 -1
- package/weak_ref.d.d.ts +1 -1
- package/schematics/bundles/project_tsconfig_paths-CDVxT6Ov.cjs +0 -90
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.1.
|
|
3
|
+
* @license Angular v20.1.6
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
7
7
|
'use strict';
|
|
8
8
|
|
|
9
|
-
var index = require('./index-
|
|
9
|
+
var index = require('./index-CuCkSYir.cjs');
|
|
10
10
|
var schematics = require('@angular-devkit/schematics');
|
|
11
11
|
var core = require('@angular-devkit/core');
|
|
12
12
|
var posixPath = require('node:path/posix');
|
|
13
13
|
var os = require('os');
|
|
14
14
|
var ts = require('typescript');
|
|
15
|
-
var
|
|
15
|
+
var project_tsconfig_paths = require('./project_tsconfig_paths-DA1eve-D.cjs');
|
|
16
16
|
require('path');
|
|
17
17
|
var path = require('node:path');
|
|
18
|
-
var project_tsconfig_paths = require('./project_tsconfig_paths-CDVxT6Ov.cjs');
|
|
19
18
|
|
|
20
19
|
function _interopNamespaceDefault(e) {
|
|
21
20
|
var n = Object.create(null);
|
|
@@ -59,7 +58,7 @@ class NgtscCompilerHost {
|
|
|
59
58
|
return this.fs.getDefaultLibLocation();
|
|
60
59
|
}
|
|
61
60
|
writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles) {
|
|
62
|
-
const path =
|
|
61
|
+
const path = project_tsconfig_paths.absoluteFrom(fileName);
|
|
63
62
|
this.fs.ensureDir(this.fs.dirname(path));
|
|
64
63
|
this.fs.writeFile(path, data);
|
|
65
64
|
}
|
|
@@ -143,7 +142,7 @@ function createFileSystemTsReadDirectoryFn(fs) {
|
|
|
143
142
|
};
|
|
144
143
|
}
|
|
145
144
|
|
|
146
|
-
function calcProjectFileAndBasePath(project, host =
|
|
145
|
+
function calcProjectFileAndBasePath(project, host = project_tsconfig_paths.getFileSystem()) {
|
|
147
146
|
const absProject = host.resolve(project);
|
|
148
147
|
const projectIsDir = host.lstat(absProject).isDirectory();
|
|
149
148
|
const projectFile = projectIsDir ? host.join(absProject, 'tsconfig.json') : absProject;
|
|
@@ -151,9 +150,9 @@ function calcProjectFileAndBasePath(project, host = checker.getFileSystem()) {
|
|
|
151
150
|
const basePath = host.resolve(projectDir);
|
|
152
151
|
return { projectFile, basePath };
|
|
153
152
|
}
|
|
154
|
-
function readConfiguration(project, existingOptions, host =
|
|
153
|
+
function readConfiguration(project, existingOptions, host = project_tsconfig_paths.getFileSystem()) {
|
|
155
154
|
try {
|
|
156
|
-
const fs =
|
|
155
|
+
const fs = project_tsconfig_paths.getFileSystem();
|
|
157
156
|
const readConfigFile = (configFile) => ts.readConfigFile(configFile, (file) => host.readFile(host.resolve(file)));
|
|
158
157
|
const readAngularCompilerOptions = (configFile, parentOptions = {}) => {
|
|
159
158
|
const { config, error } = readConfigFile(configFile);
|
|
@@ -226,7 +225,7 @@ function readConfiguration(project, existingOptions, host = checker.getFileSyste
|
|
|
226
225
|
return { project: '', errors, rootNames: [], options: {}, emitFlags: index.EmitFlags.Default };
|
|
227
226
|
}
|
|
228
227
|
}
|
|
229
|
-
function createParseConfigHost(host, fs =
|
|
228
|
+
function createParseConfigHost(host, fs = project_tsconfig_paths.getFileSystem()) {
|
|
230
229
|
return {
|
|
231
230
|
fileExists: host.exists.bind(host),
|
|
232
231
|
readDirectory: createFileSystemTsReadDirectoryFn(fs),
|
|
@@ -256,7 +255,7 @@ function getExtendedConfigPathWorker(configFile, extendsValue, host, fs) {
|
|
|
256
255
|
// Path isn't a rooted or relative path, resolve like a module.
|
|
257
256
|
const { resolvedModule } = ts.nodeModuleNameResolver(extendsValue, configFile, { moduleResolution: ts.ModuleResolutionKind.Node10, resolveJsonModule: true }, parseConfigHost);
|
|
258
257
|
if (resolvedModule) {
|
|
259
|
-
return
|
|
258
|
+
return project_tsconfig_paths.absoluteFrom(resolvedModule.resolvedFileName);
|
|
260
259
|
}
|
|
261
260
|
}
|
|
262
261
|
return null;
|
|
@@ -556,7 +555,7 @@ function createBaseProgramInfo(absoluteTsconfigPath, fs, optionOverrides = {}) {
|
|
|
556
555
|
// Make sure the FS becomes globally available. Some code paths
|
|
557
556
|
// of the Angular compiler, or tsconfig parsing aren't leveraging
|
|
558
557
|
// the specified file system.
|
|
559
|
-
|
|
558
|
+
project_tsconfig_paths.setFileSystem(fs);
|
|
560
559
|
const tsconfig = parseTsconfigOrDie(absoluteTsconfigPath, fs);
|
|
561
560
|
const tsHost = new NgtscCompilerHost(fs, tsconfig.options);
|
|
562
561
|
// When enabled, use a plain TS program if we are sure it's not
|
|
@@ -585,14 +584,14 @@ function getProgramInfoFromBaseInfo(baseInfo) {
|
|
|
585
584
|
const fullProgramSourceFiles = [...baseInfo.program.getSourceFiles()];
|
|
586
585
|
const sourceFiles = fullProgramSourceFiles.filter((f) => !f.isDeclarationFile &&
|
|
587
586
|
// Note `isShim` will work for the initial program, but for TCB programs, the shims are no longer annotated.
|
|
588
|
-
!
|
|
587
|
+
!project_tsconfig_paths.isShim(f) &&
|
|
589
588
|
!f.fileName.endsWith('.ngtypecheck.ts'));
|
|
590
589
|
// Sort it by length in reverse order (longest first). This speeds up lookups,
|
|
591
590
|
// since there's no need to keep going through the array once a match is found.
|
|
592
|
-
const sortedRootDirs =
|
|
591
|
+
const sortedRootDirs = project_tsconfig_paths.getRootDirs(baseInfo.host, baseInfo.userOptions).sort((a, b) => b.length - a.length);
|
|
593
592
|
// TODO: Consider also following TS's logic here, finding the common source root.
|
|
594
593
|
// See: Program#getCommonSourceDirectory.
|
|
595
|
-
const primaryRoot =
|
|
594
|
+
const primaryRoot = project_tsconfig_paths.absoluteFrom(baseInfo.userOptions.rootDir ?? sortedRootDirs.at(-1) ?? baseInfo.program.getCurrentDirectory());
|
|
596
595
|
return {
|
|
597
596
|
...baseInfo,
|
|
598
597
|
sourceFiles,
|
|
@@ -671,7 +670,7 @@ async function runMigrationInDevkit(config) {
|
|
|
671
670
|
}
|
|
672
671
|
const tsconfigPaths = [...buildPaths, ...testPaths];
|
|
673
672
|
const fs = new DevkitMigrationFilesystem(config.tree);
|
|
674
|
-
|
|
673
|
+
project_tsconfig_paths.setFileSystem(fs);
|
|
675
674
|
const migration = config.getMigration(fs);
|
|
676
675
|
const unitResults = [];
|
|
677
676
|
const isFunnelMigration = migration instanceof TsurgeFunnelMigration;
|
|
@@ -781,7 +780,7 @@ function confirmAsSerializable(data) {
|
|
|
781
780
|
* See {@link ProjectFile}.
|
|
782
781
|
*/
|
|
783
782
|
function projectFile(file, { sortedRootDirs, projectRoot }) {
|
|
784
|
-
const fs =
|
|
783
|
+
const fs = project_tsconfig_paths.getFileSystem();
|
|
785
784
|
const filePath = fs.resolve(typeof file === 'string' ? file : file.fileName);
|
|
786
785
|
// Sorted root directories are sorted longest to shortest. First match
|
|
787
786
|
// is the appropriate root directory for ID computation.
|
|
@@ -808,7 +807,7 @@ function projectFile(file, { sortedRootDirs, projectRoot }) {
|
|
|
808
807
|
* E.g. `a/b/c` is within `a/b` but not within `a/x`.
|
|
809
808
|
*/
|
|
810
809
|
function isWithinBasePath(fs, base, path) {
|
|
811
|
-
return
|
|
810
|
+
return project_tsconfig_paths.isLocalRelativePath(fs.relative(base, path));
|
|
812
811
|
}
|
|
813
812
|
|
|
814
813
|
exports.Replacement = Replacement;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.1.
|
|
3
|
+
* @license Angular v20.1.6
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
@@ -12,6 +12,7 @@ var fs$1 = require('fs');
|
|
|
12
12
|
var module$1 = require('module');
|
|
13
13
|
var p = require('path');
|
|
14
14
|
var url = require('url');
|
|
15
|
+
var core = require('@angular-devkit/core');
|
|
15
16
|
|
|
16
17
|
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
17
18
|
function _interopNamespaceDefault(e) {
|
|
@@ -30305,7 +30306,8 @@ class R3TargetBinder {
|
|
|
30305
30306
|
// Bind the host element in a separate scope. Note that it only uses the
|
|
30306
30307
|
// `TemplateBinder` since directives don't apply inside a host context.
|
|
30307
30308
|
if (target.host) {
|
|
30308
|
-
|
|
30309
|
+
directives.set(target.host.node, target.host.directives);
|
|
30310
|
+
TemplateBinder.applyWithScope(target.host.node, Scope$1.apply(target.host.node), expressions, symbols, nestingLevel, usedPipes, eagerPipes, deferBlocks);
|
|
30309
30311
|
}
|
|
30310
30312
|
return new R3BoundTarget(target, directives, eagerDirectives, missingDirectives, bindings, references, expressions, symbols, nestingLevel, scopedNodeEntities, usedPipes, eagerPipes, deferBlocks);
|
|
30311
30313
|
}
|
|
@@ -31098,7 +31100,8 @@ class R3BoundTarget {
|
|
|
31098
31100
|
}
|
|
31099
31101
|
if (target instanceof Template ||
|
|
31100
31102
|
target.node instanceof Component$1 ||
|
|
31101
|
-
target.node instanceof Directive$1
|
|
31103
|
+
target.node instanceof Directive$1 ||
|
|
31104
|
+
target.node instanceof HostElement) {
|
|
31102
31105
|
return null;
|
|
31103
31106
|
}
|
|
31104
31107
|
return this.referenceTargetToElement(target.node);
|
|
@@ -32292,7 +32295,7 @@ function isAttrNode(ast) {
|
|
|
32292
32295
|
* @description
|
|
32293
32296
|
* Entry point for all public APIs of the compiler package.
|
|
32294
32297
|
*/
|
|
32295
|
-
new Version('20.1.
|
|
32298
|
+
new Version('20.1.6');
|
|
32296
32299
|
|
|
32297
32300
|
//////////////////////////////////////
|
|
32298
32301
|
// THIS FILE HAS GLOBAL SIDE EFFECT //
|
|
@@ -33312,7 +33315,7 @@ class NodeJSPathManipulation {
|
|
|
33312
33315
|
// G3-ESM-MARKER: G3 uses CommonJS, but externally everything in ESM.
|
|
33313
33316
|
// CommonJS/ESM interop for determining the current file name and containing dir.
|
|
33314
33317
|
const isCommonJS = typeof __filename !== 'undefined';
|
|
33315
|
-
const currentFileUrl = isCommonJS ? null : (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('
|
|
33318
|
+
const currentFileUrl = isCommonJS ? null : (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('project_tsconfig_paths-DA1eve-D.cjs', document.baseURI).href));
|
|
33316
33319
|
// Note, when this code loads in the browser, `url` may be an empty `{}` due to the Closure shims.
|
|
33317
33320
|
const currentFileName = isCommonJS
|
|
33318
33321
|
? __filename
|
|
@@ -44609,7 +44612,7 @@ function generateTypeCheckBlock(env, ref, name, meta, domSchemaChecker, oobRecor
|
|
|
44609
44612
|
}
|
|
44610
44613
|
// Add the host bindings type checking code.
|
|
44611
44614
|
if (tcb.boundTarget.target.host !== undefined) {
|
|
44612
|
-
const hostScope = Scope.forNodes(tcb, null, tcb.boundTarget.target.host, null, null);
|
|
44615
|
+
const hostScope = Scope.forNodes(tcb, null, tcb.boundTarget.target.host.node, null, null);
|
|
44613
44616
|
statements.push(renderBlockStatements(env, hostScope, createHostBindingsBlockGuard()));
|
|
44614
44617
|
}
|
|
44615
44618
|
const body = ts.factory.createBlock(statements);
|
|
@@ -44980,6 +44983,7 @@ class TcbDirectiveTypeOpBase extends TcbOp {
|
|
|
44980
44983
|
const dirRef = this.dir.ref;
|
|
44981
44984
|
const rawType = this.tcb.env.referenceType(this.dir.ref);
|
|
44982
44985
|
let type;
|
|
44986
|
+
let span;
|
|
44983
44987
|
if (this.dir.isGeneric === false || dirRef.node.typeParameters === undefined) {
|
|
44984
44988
|
type = rawType;
|
|
44985
44989
|
}
|
|
@@ -44990,9 +44994,15 @@ class TcbDirectiveTypeOpBase extends TcbOp {
|
|
|
44990
44994
|
const typeArguments = dirRef.node.typeParameters.map(() => ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword));
|
|
44991
44995
|
type = ts.factory.createTypeReferenceNode(rawType.typeName, typeArguments);
|
|
44992
44996
|
}
|
|
44997
|
+
if (this.node instanceof HostElement) {
|
|
44998
|
+
span = this.node.sourceSpan;
|
|
44999
|
+
}
|
|
45000
|
+
else {
|
|
45001
|
+
span = this.node.startSourceSpan || this.node.sourceSpan;
|
|
45002
|
+
}
|
|
44993
45003
|
const id = this.tcb.allocateId();
|
|
44994
45004
|
addExpressionIdentifier(id, ExpressionIdentifier.DIRECTIVE);
|
|
44995
|
-
addParseSpanInfo(id,
|
|
45005
|
+
addParseSpanInfo(id, span);
|
|
44996
45006
|
this.scope.addStatement(tsDeclareVariable(id, type));
|
|
44997
45007
|
return id;
|
|
44998
45008
|
}
|
|
@@ -45674,12 +45684,16 @@ class TcbDirectiveOutputsOp extends TcbOp {
|
|
|
45674
45684
|
tcb;
|
|
45675
45685
|
scope;
|
|
45676
45686
|
node;
|
|
45687
|
+
inputs;
|
|
45688
|
+
outputs;
|
|
45677
45689
|
dir;
|
|
45678
|
-
constructor(tcb, scope, node, dir) {
|
|
45690
|
+
constructor(tcb, scope, node, inputs, outputs, dir) {
|
|
45679
45691
|
super();
|
|
45680
45692
|
this.tcb = tcb;
|
|
45681
45693
|
this.scope = scope;
|
|
45682
45694
|
this.node = node;
|
|
45695
|
+
this.inputs = inputs;
|
|
45696
|
+
this.outputs = outputs;
|
|
45683
45697
|
this.dir = dir;
|
|
45684
45698
|
}
|
|
45685
45699
|
get optional() {
|
|
@@ -45688,14 +45702,16 @@ class TcbDirectiveOutputsOp extends TcbOp {
|
|
|
45688
45702
|
execute() {
|
|
45689
45703
|
let dirId = null;
|
|
45690
45704
|
const outputs = this.dir.outputs;
|
|
45691
|
-
for (const output of this.
|
|
45705
|
+
for (const output of this.outputs) {
|
|
45692
45706
|
if (output.type === exports.ParsedEventType.LegacyAnimation ||
|
|
45693
45707
|
!outputs.hasBindingPropertyName(output.name)) {
|
|
45694
45708
|
continue;
|
|
45695
45709
|
}
|
|
45696
|
-
if (this.tcb.env.config.checkTypeOfOutputEvents &&
|
|
45710
|
+
if (this.tcb.env.config.checkTypeOfOutputEvents &&
|
|
45711
|
+
this.inputs !== null &&
|
|
45712
|
+
output.name.endsWith('Change')) {
|
|
45697
45713
|
const inputName = output.name.slice(0, -6);
|
|
45698
|
-
checkSplitTwoWayBinding(inputName, output, this.
|
|
45714
|
+
checkSplitTwoWayBinding(inputName, output, this.inputs, this.tcb);
|
|
45699
45715
|
}
|
|
45700
45716
|
// TODO(alxhub): consider supporting multiple fields with the same property name for outputs.
|
|
45701
45717
|
const field = outputs.getByBindingPropertyName(output.name)[0].classPropertyName;
|
|
@@ -46470,7 +46486,8 @@ class Scope {
|
|
|
46470
46486
|
else if ((ref instanceof Element$1 ||
|
|
46471
46487
|
ref instanceof Template ||
|
|
46472
46488
|
ref instanceof Component$1 ||
|
|
46473
|
-
ref instanceof Directive$1
|
|
46489
|
+
ref instanceof Directive$1 ||
|
|
46490
|
+
ref instanceof HostElement) &&
|
|
46474
46491
|
directive !== undefined &&
|
|
46475
46492
|
this.directiveOpMap.has(ref)) {
|
|
46476
46493
|
// Resolving a directive on an element or sub-template.
|
|
@@ -46533,7 +46550,7 @@ class Scope {
|
|
|
46533
46550
|
this.appendContentProjectionCheckOp(node);
|
|
46534
46551
|
}
|
|
46535
46552
|
this.appendDirectivesAndInputsOfElementLikeNode(node);
|
|
46536
|
-
this.appendOutputsOfElementLikeNode(node);
|
|
46553
|
+
this.appendOutputsOfElementLikeNode(node, node.inputs, node.outputs);
|
|
46537
46554
|
this.appendSelectorlessDirectives(node);
|
|
46538
46555
|
this.appendChildren(node);
|
|
46539
46556
|
this.checkAndAppendReferencesOfNode(node);
|
|
@@ -46541,7 +46558,7 @@ class Scope {
|
|
|
46541
46558
|
else if (node instanceof Template) {
|
|
46542
46559
|
// Template children are rendered in a child scope.
|
|
46543
46560
|
this.appendDirectivesAndInputsOfElementLikeNode(node);
|
|
46544
|
-
this.appendOutputsOfElementLikeNode(node);
|
|
46561
|
+
this.appendOutputsOfElementLikeNode(node, node.inputs, node.outputs);
|
|
46545
46562
|
this.appendSelectorlessDirectives(node);
|
|
46546
46563
|
const ctxIndex = this.opQueue.push(new TcbTemplateContextOp(this.tcb, this)) - 1;
|
|
46547
46564
|
this.templateCtxOpMap.set(node, ctxIndex);
|
|
@@ -46588,9 +46605,7 @@ class Scope {
|
|
|
46588
46605
|
}
|
|
46589
46606
|
}
|
|
46590
46607
|
else if (node instanceof HostElement) {
|
|
46591
|
-
|
|
46592
|
-
this.hostElementOpMap.set(node, opIndex);
|
|
46593
|
-
this.opQueue.push(new TcbUnclaimedInputsOp(this.tcb, this, node.bindings, node, null), new TcbUnclaimedOutputsOp(this.tcb, this, node, node.listeners, null, null), new TcbDomSchemaCheckerOp(this.tcb, node, false, null));
|
|
46608
|
+
this.appendHostElement(node);
|
|
46594
46609
|
}
|
|
46595
46610
|
}
|
|
46596
46611
|
appendChildren(node) {
|
|
@@ -46664,7 +46679,7 @@ class Scope {
|
|
|
46664
46679
|
this.opQueue.push(new TcbDomSchemaCheckerOp(this.tcb, node, checkElement, claimedInputs));
|
|
46665
46680
|
}
|
|
46666
46681
|
}
|
|
46667
|
-
appendOutputsOfElementLikeNode(node) {
|
|
46682
|
+
appendOutputsOfElementLikeNode(node, bindings, events) {
|
|
46668
46683
|
// Collect all the outputs on the element.
|
|
46669
46684
|
const claimedOutputs = new Set();
|
|
46670
46685
|
// Don't resolve directives when selectorless is enabled and treat all the outputs on the
|
|
@@ -46675,24 +46690,24 @@ class Scope {
|
|
|
46675
46690
|
// If there are no directives, then all outputs are unclaimed outputs, so queue an operation
|
|
46676
46691
|
// to add them if needed.
|
|
46677
46692
|
if (node instanceof Element$1) {
|
|
46678
|
-
this.opQueue.push(new TcbUnclaimedOutputsOp(this.tcb, this, node,
|
|
46693
|
+
this.opQueue.push(new TcbUnclaimedOutputsOp(this.tcb, this, node, events, bindings, claimedOutputs));
|
|
46679
46694
|
}
|
|
46680
46695
|
return;
|
|
46681
46696
|
}
|
|
46682
46697
|
// Queue operations for all directives to check the relevant outputs for a directive.
|
|
46683
46698
|
for (const dir of directives) {
|
|
46684
|
-
this.opQueue.push(new TcbDirectiveOutputsOp(this.tcb, this, node, dir));
|
|
46699
|
+
this.opQueue.push(new TcbDirectiveOutputsOp(this.tcb, this, node, bindings, events, dir));
|
|
46685
46700
|
}
|
|
46686
46701
|
// After expanding the directives, we might need to queue an operation to check any unclaimed
|
|
46687
46702
|
// outputs.
|
|
46688
|
-
if (node instanceof Element$1) {
|
|
46703
|
+
if (node instanceof Element$1 || node instanceof HostElement) {
|
|
46689
46704
|
// Go through the directives and register any outputs that it claims in `claimedOutputs`.
|
|
46690
46705
|
for (const dir of directives) {
|
|
46691
46706
|
for (const outputProperty of dir.outputs.propertyNames) {
|
|
46692
46707
|
claimedOutputs.add(outputProperty);
|
|
46693
46708
|
}
|
|
46694
46709
|
}
|
|
46695
|
-
this.opQueue.push(new TcbUnclaimedOutputsOp(this.tcb, this, node,
|
|
46710
|
+
this.opQueue.push(new TcbUnclaimedOutputsOp(this.tcb, this, node, events, bindings, claimedOutputs));
|
|
46696
46711
|
}
|
|
46697
46712
|
}
|
|
46698
46713
|
appendInputsOfSelectorlessNode(node) {
|
|
@@ -46733,7 +46748,7 @@ class Scope {
|
|
|
46733
46748
|
const claimedOutputs = new Set();
|
|
46734
46749
|
if (directives !== null && directives.length > 0) {
|
|
46735
46750
|
for (const dir of directives) {
|
|
46736
|
-
this.opQueue.push(new TcbDirectiveOutputsOp(this.tcb, this, node, dir));
|
|
46751
|
+
this.opQueue.push(new TcbDirectiveOutputsOp(this.tcb, this, node, node.inputs, node.outputs, dir));
|
|
46737
46752
|
for (const outputProperty of dir.outputs.propertyNames) {
|
|
46738
46753
|
claimedOutputs.add(outputProperty);
|
|
46739
46754
|
}
|
|
@@ -46907,6 +46922,21 @@ class Scope {
|
|
|
46907
46922
|
this.validateReferenceBasedDeferredTrigger(block, triggers.viewport);
|
|
46908
46923
|
}
|
|
46909
46924
|
}
|
|
46925
|
+
appendHostElement(node) {
|
|
46926
|
+
const opIndex = this.opQueue.push(new TcbHostElementOp(this.tcb, this, node)) - 1;
|
|
46927
|
+
const directives = this.tcb.boundTarget.getDirectivesOfNode(node);
|
|
46928
|
+
if (directives !== null && directives.length > 0) {
|
|
46929
|
+
const directiveOpMap = new Map();
|
|
46930
|
+
for (const directive of directives) {
|
|
46931
|
+
const directiveOp = new TcbNonGenericDirectiveTypeOp(this.tcb, this, node, directive);
|
|
46932
|
+
directiveOpMap.set(directive, this.opQueue.push(directiveOp) - 1);
|
|
46933
|
+
}
|
|
46934
|
+
this.directiveOpMap.set(node, directiveOpMap);
|
|
46935
|
+
}
|
|
46936
|
+
this.hostElementOpMap.set(node, opIndex);
|
|
46937
|
+
this.opQueue.push(new TcbUnclaimedInputsOp(this.tcb, this, node.bindings, node, null), new TcbDomSchemaCheckerOp(this.tcb, node, false, null));
|
|
46938
|
+
this.appendOutputsOfElementLikeNode(node, null, node.listeners);
|
|
46939
|
+
}
|
|
46910
46940
|
validateReferenceBasedDeferredTrigger(block, trigger) {
|
|
46911
46941
|
if (trigger.reference === null) {
|
|
46912
46942
|
if (block.placeholder === null) {
|
|
@@ -47533,7 +47563,12 @@ class TypeCheckContextImpl {
|
|
|
47533
47563
|
}
|
|
47534
47564
|
const boundTarget = binder.bind({
|
|
47535
47565
|
template: templateContext?.nodes,
|
|
47536
|
-
host: hostBindingContext
|
|
47566
|
+
host: hostBindingContext === null
|
|
47567
|
+
? undefined
|
|
47568
|
+
: {
|
|
47569
|
+
node: hostBindingContext.node,
|
|
47570
|
+
directives: hostBindingContext.directives,
|
|
47571
|
+
},
|
|
47537
47572
|
});
|
|
47538
47573
|
if (this.inlining === InliningMode.InlineOps) {
|
|
47539
47574
|
// Get all of the directives used in the template and record inline type constructors when
|
|
@@ -49832,6 +49867,85 @@ function getClassDeclFromSymbol(symbol, checker) {
|
|
|
49832
49867
|
return null;
|
|
49833
49868
|
}
|
|
49834
49869
|
|
|
49870
|
+
/**
|
|
49871
|
+
* Gets all tsconfig paths from a CLI project by reading the workspace configuration
|
|
49872
|
+
* and looking for common tsconfig locations.
|
|
49873
|
+
*/
|
|
49874
|
+
async function getProjectTsConfigPaths(tree) {
|
|
49875
|
+
// Start with some tsconfig paths that are generally used within CLI projects. Note
|
|
49876
|
+
// that we are not interested in IDE-specific tsconfig files (e.g. /tsconfig.json)
|
|
49877
|
+
const buildPaths = new Set();
|
|
49878
|
+
const testPaths = new Set();
|
|
49879
|
+
const workspace = await getWorkspace(tree);
|
|
49880
|
+
for (const [, project] of workspace.projects) {
|
|
49881
|
+
for (const [name, target] of project.targets) {
|
|
49882
|
+
if (name !== 'build' && name !== 'test') {
|
|
49883
|
+
continue;
|
|
49884
|
+
}
|
|
49885
|
+
for (const [, options] of allTargetOptions(target)) {
|
|
49886
|
+
const tsConfig = options['tsConfig'];
|
|
49887
|
+
// Filter out tsconfig files that don't exist in the CLI project.
|
|
49888
|
+
if (typeof tsConfig !== 'string' || !tree.exists(tsConfig)) {
|
|
49889
|
+
continue;
|
|
49890
|
+
}
|
|
49891
|
+
if (name === 'build') {
|
|
49892
|
+
buildPaths.add(core.normalize(tsConfig));
|
|
49893
|
+
}
|
|
49894
|
+
else {
|
|
49895
|
+
testPaths.add(core.normalize(tsConfig));
|
|
49896
|
+
}
|
|
49897
|
+
}
|
|
49898
|
+
}
|
|
49899
|
+
}
|
|
49900
|
+
return {
|
|
49901
|
+
buildPaths: [...buildPaths],
|
|
49902
|
+
testPaths: [...testPaths],
|
|
49903
|
+
};
|
|
49904
|
+
}
|
|
49905
|
+
/** Get options for all configurations for the passed builder target. */
|
|
49906
|
+
function* allTargetOptions(target) {
|
|
49907
|
+
if (target.options) {
|
|
49908
|
+
yield [undefined, target.options];
|
|
49909
|
+
}
|
|
49910
|
+
if (!target.configurations) {
|
|
49911
|
+
return;
|
|
49912
|
+
}
|
|
49913
|
+
for (const [name, options] of Object.entries(target.configurations)) {
|
|
49914
|
+
if (options) {
|
|
49915
|
+
yield [name, options];
|
|
49916
|
+
}
|
|
49917
|
+
}
|
|
49918
|
+
}
|
|
49919
|
+
function createHost(tree) {
|
|
49920
|
+
return {
|
|
49921
|
+
async readFile(path) {
|
|
49922
|
+
const data = tree.read(path);
|
|
49923
|
+
if (!data) {
|
|
49924
|
+
throw new Error('File not found.');
|
|
49925
|
+
}
|
|
49926
|
+
return core.virtualFs.fileBufferToString(data);
|
|
49927
|
+
},
|
|
49928
|
+
async writeFile(path, data) {
|
|
49929
|
+
return tree.overwrite(path, data);
|
|
49930
|
+
},
|
|
49931
|
+
async isDirectory(path) {
|
|
49932
|
+
// Approximate a directory check.
|
|
49933
|
+
// We don't need to consider empty directories and hence this is a good enough approach.
|
|
49934
|
+
// This is also per documentation, see:
|
|
49935
|
+
// https://angular.dev/tools/cli/schematics-for-libraries#get-the-project-configuration
|
|
49936
|
+
return !tree.exists(path) && tree.getDir(path).subfiles.length > 0;
|
|
49937
|
+
},
|
|
49938
|
+
async isFile(path) {
|
|
49939
|
+
return tree.exists(path);
|
|
49940
|
+
},
|
|
49941
|
+
};
|
|
49942
|
+
}
|
|
49943
|
+
async function getWorkspace(tree) {
|
|
49944
|
+
const host = createHost(tree);
|
|
49945
|
+
const { workspace } = await core.workspaces.readWorkspace('/', host);
|
|
49946
|
+
return workspace;
|
|
49947
|
+
}
|
|
49948
|
+
|
|
49835
49949
|
exports.AST = AST;
|
|
49836
49950
|
exports.ASTWithSource = ASTWithSource;
|
|
49837
49951
|
exports.AbsoluteModuleStrategy = AbsoluteModuleStrategy;
|
|
@@ -49998,6 +50112,7 @@ exports.getDefaultImportDeclaration = getDefaultImportDeclaration;
|
|
|
49998
50112
|
exports.getDirectiveDiagnostics = getDirectiveDiagnostics;
|
|
49999
50113
|
exports.getFileSystem = getFileSystem;
|
|
50000
50114
|
exports.getOriginNodeForDiagnostics = getOriginNodeForDiagnostics;
|
|
50115
|
+
exports.getProjectTsConfigPaths = getProjectTsConfigPaths;
|
|
50001
50116
|
exports.getProviderDiagnostics = getProviderDiagnostics;
|
|
50002
50117
|
exports.getRootDirs = getRootDirs;
|
|
50003
50118
|
exports.getSourceFile = getSourceFile;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.1.
|
|
3
|
+
* @license Angular v20.1.6
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
@@ -9,15 +9,14 @@
|
|
|
9
9
|
var schematics = require('@angular-devkit/schematics');
|
|
10
10
|
var fs = require('fs');
|
|
11
11
|
var p = require('path');
|
|
12
|
-
var compiler_host = require('./compiler_host-
|
|
13
|
-
var project_tsconfig_paths = require('./project_tsconfig_paths-
|
|
12
|
+
var compiler_host = require('./compiler_host-CIkS8EIQ.cjs');
|
|
13
|
+
var project_tsconfig_paths = require('./project_tsconfig_paths-DA1eve-D.cjs');
|
|
14
14
|
var ts = require('typescript');
|
|
15
|
-
var checker = require('./checker-B1MkHERe.cjs');
|
|
16
15
|
var property_name = require('./property_name-BBwFuqMe.cjs');
|
|
17
16
|
require('os');
|
|
18
|
-
require('@angular-devkit/core');
|
|
19
17
|
require('module');
|
|
20
18
|
require('url');
|
|
19
|
+
require('@angular-devkit/core');
|
|
21
20
|
|
|
22
21
|
/**
|
|
23
22
|
* Finds the class declaration that is being referred to by a node.
|
|
@@ -48,7 +47,7 @@ function isStandaloneComponent(node, reflector) {
|
|
|
48
47
|
if (decorators === null) {
|
|
49
48
|
return false;
|
|
50
49
|
}
|
|
51
|
-
const decorator =
|
|
50
|
+
const decorator = project_tsconfig_paths.findAngularDecorator(decorators, 'Component', false);
|
|
52
51
|
if (decorator === undefined || decorator.args === null || decorator.args.length !== 1) {
|
|
53
52
|
return false;
|
|
54
53
|
}
|
|
@@ -154,7 +153,7 @@ function isProvideRoutesCallExpression(node, typeChecker) {
|
|
|
154
153
|
*/
|
|
155
154
|
function migrateFileToLazyRoutes(sourceFile, program) {
|
|
156
155
|
const typeChecker = program.getTypeChecker();
|
|
157
|
-
const reflector = new
|
|
156
|
+
const reflector = new project_tsconfig_paths.TypeScriptReflectionHost(typeChecker);
|
|
158
157
|
const printer = ts.createPrinter();
|
|
159
158
|
const tracker = new compiler_host.ChangeTracker(printer);
|
|
160
159
|
const routeArraysToMigrate = findRoutesArrayToMigrate(sourceFile, typeChecker);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.1.
|
|
3
|
+
* @license Angular v20.1.6
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
|
|
9
9
|
var ts = require('typescript');
|
|
10
10
|
require('os');
|
|
11
|
-
var
|
|
12
|
-
require('./index-
|
|
11
|
+
var project_tsconfig_paths = require('./project_tsconfig_paths-DA1eve-D.cjs');
|
|
12
|
+
require('./index-CuCkSYir.cjs');
|
|
13
13
|
require('path');
|
|
14
14
|
require('node:path');
|
|
15
|
-
var project_paths = require('./project_paths-
|
|
15
|
+
var project_paths = require('./project_paths-BKtwr3ir.cjs');
|
|
16
16
|
var ng_decorators = require('./ng_decorators-B5HCqr20.cjs');
|
|
17
17
|
var property_name = require('./property_name-BBwFuqMe.cjs');
|
|
18
18
|
require('@angular-devkit/core');
|
|
@@ -21,7 +21,6 @@ require('fs');
|
|
|
21
21
|
require('module');
|
|
22
22
|
require('url');
|
|
23
23
|
require('@angular-devkit/schematics');
|
|
24
|
-
require('./project_tsconfig_paths-CDVxT6Ov.cjs');
|
|
25
24
|
require('./imports-CIX-JgAN.cjs');
|
|
26
25
|
|
|
27
26
|
/**
|
|
@@ -128,7 +127,7 @@ function findClosestLineStartPosition(linesMap, position, low = 0, high = linesM
|
|
|
128
127
|
class NgComponentTemplateVisitor {
|
|
129
128
|
typeChecker;
|
|
130
129
|
resolvedTemplates = [];
|
|
131
|
-
fs =
|
|
130
|
+
fs = project_tsconfig_paths.getFileSystem();
|
|
132
131
|
constructor(typeChecker) {
|
|
133
132
|
this.typeChecker = typeChecker;
|
|
134
133
|
}
|
|
@@ -203,7 +202,7 @@ function parseTemplate(template) {
|
|
|
203
202
|
// interpolated text as text nodes containing a mixture of interpolation tokens and text tokens,
|
|
204
203
|
// rather than turning them into `BoundText` nodes like the Ivy AST does. This allows us to
|
|
205
204
|
// easily get the text-only ranges without having to reconstruct the original text.
|
|
206
|
-
parsed = new
|
|
205
|
+
parsed = new project_tsconfig_paths.HtmlParser().parse(template, '', {
|
|
207
206
|
// Allows for ICUs to be parsed.
|
|
208
207
|
tokenizeExpansionForms: true,
|
|
209
208
|
// Explicitly disable blocks so that their characters are treated as plain text.
|
|
@@ -228,7 +227,7 @@ function migrateTemplateToSelfClosingTags(template) {
|
|
|
228
227
|
return { migrated: template, changed: false, replacementCount: 0 };
|
|
229
228
|
}
|
|
230
229
|
const visitor = new AngularElementCollector();
|
|
231
|
-
|
|
230
|
+
project_tsconfig_paths.visitAll$1(visitor, parsed.tree.rootNodes);
|
|
232
231
|
let newTemplate = template;
|
|
233
232
|
let changedOffset = 0;
|
|
234
233
|
let replacementCount = 0;
|
|
@@ -256,8 +255,8 @@ function replaceWithSelfClosingTag(html, tagName) {
|
|
|
256
255
|
function replaceTemplate(template, replaceValue, start, end, offset) {
|
|
257
256
|
return template.slice(0, start + offset) + replaceValue + template.slice(end + offset);
|
|
258
257
|
}
|
|
259
|
-
const ALL_HTML_TAGS = new
|
|
260
|
-
class AngularElementCollector extends
|
|
258
|
+
const ALL_HTML_TAGS = new project_tsconfig_paths.DomElementSchemaRegistry().allKnownElementNames();
|
|
259
|
+
class AngularElementCollector extends project_tsconfig_paths.RecursiveVisitor$1 {
|
|
261
260
|
elements = [];
|
|
262
261
|
constructor() {
|
|
263
262
|
super();
|
|
@@ -280,7 +279,7 @@ class AngularElementCollector extends checker.RecursiveVisitor$1 {
|
|
|
280
279
|
}
|
|
281
280
|
if (element.children.length === 1) {
|
|
282
281
|
const child = element.children[0];
|
|
283
|
-
return child instanceof
|
|
282
|
+
return child instanceof project_tsconfig_paths.Text && /^\s*$/.test(child.value);
|
|
284
283
|
}
|
|
285
284
|
return false;
|
|
286
285
|
}
|