@angular/core 20.1.3 → 20.1.5
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 +2 -2
- 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/core.mjs +3 -3
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/debug_node.mjs +19 -6
- package/fesm2022/debug_node.mjs.map +1 -1
- package/fesm2022/not_found.mjs +1 -1
- package/fesm2022/primitives/di.mjs +1 -1
- package/fesm2022/primitives/event-dispatch.mjs +1 -1
- package/fesm2022/primitives/signals.mjs +1 -1
- package/fesm2022/resource.mjs +12 -3
- 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/signal.mjs +154 -118
- package/fesm2022/signal.mjs.map +1 -1
- package/fesm2022/testing.mjs +1 -1
- package/fesm2022/untracked.mjs +1 -1
- package/fesm2022/weak_ref.mjs +1 -1
- package/graph.d.d.ts +20 -33
- package/index.d.ts +11 -2
- 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-4lhgojXS.cjs → apply_import_manager-BeiseOfz.cjs} +4 -4
- package/schematics/bundles/cleanup-unused-imports.cjs +7 -8
- package/schematics/bundles/{compiler_host-D9M-RwqC.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-BIFHM-Gi.cjs → index-CuCkSYir.cjs} +1254 -1246
- package/schematics/bundles/{index-B1wVLvRR.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-DEjd_J_s.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-B-mniue6.cjs → project_paths-BKtwr3ir.cjs} +16 -17
- package/schematics/bundles/{checker-B0RMVBjs.cjs → project_tsconfig_paths-DA1eve-D.cjs} +166 -30
- 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.5
|
|
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.5
|
|
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) {
|
|
@@ -18504,7 +18505,7 @@ class Parser {
|
|
|
18504
18505
|
parseAction(input, parseSourceSpan, absoluteOffset, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {
|
|
18505
18506
|
const errors = [];
|
|
18506
18507
|
this._checkNoInterpolation(errors, input, parseSourceSpan, interpolationConfig);
|
|
18507
|
-
const sourceToLex = this._stripComments(input);
|
|
18508
|
+
const { stripped: sourceToLex } = this._stripComments(input);
|
|
18508
18509
|
const tokens = this._lexer.tokenize(sourceToLex);
|
|
18509
18510
|
const ast = new _ParseAST(input, parseSourceSpan, absoluteOffset, tokens, 1 /* ParseFlags.Action */, errors, 0, this._supportsDirectPipeReferences).parseChain();
|
|
18510
18511
|
return new ASTWithSource(ast, input, getLocation(parseSourceSpan), absoluteOffset, errors);
|
|
@@ -18531,7 +18532,7 @@ class Parser {
|
|
|
18531
18532
|
}
|
|
18532
18533
|
_parseBindingAst(input, parseSourceSpan, absoluteOffset, interpolationConfig, errors) {
|
|
18533
18534
|
this._checkNoInterpolation(errors, input, parseSourceSpan, interpolationConfig);
|
|
18534
|
-
const sourceToLex = this._stripComments(input);
|
|
18535
|
+
const { stripped: sourceToLex } = this._stripComments(input);
|
|
18535
18536
|
const tokens = this._lexer.tokenize(sourceToLex);
|
|
18536
18537
|
return new _ParseAST(input, parseSourceSpan, absoluteOffset, tokens, 0 /* ParseFlags.None */, errors, 0, this._supportsDirectPipeReferences).parseChain();
|
|
18537
18538
|
}
|
|
@@ -18582,8 +18583,13 @@ class Parser {
|
|
|
18582
18583
|
// indexes inside the tokens.
|
|
18583
18584
|
const expressionSpan = interpolatedTokens?.[i * 2 + 1]?.sourceSpan;
|
|
18584
18585
|
const expressionText = expressions[i].text;
|
|
18585
|
-
const sourceToLex = this._stripComments(expressionText);
|
|
18586
|
+
const { stripped: sourceToLex, hasComments } = this._stripComments(expressionText);
|
|
18586
18587
|
const tokens = this._lexer.tokenize(sourceToLex);
|
|
18588
|
+
if (hasComments && sourceToLex.trim().length === 0 && tokens.length === 0) {
|
|
18589
|
+
// Empty expressions error are handled futher down, here we only take care of the comment case
|
|
18590
|
+
errors.push(getParseError('Interpolation expression cannot only contain a comment', input, `at column ${expressions[i].start} in`, parseSourceSpan));
|
|
18591
|
+
continue;
|
|
18592
|
+
}
|
|
18587
18593
|
const ast = new _ParseAST(expressionSpan ? expressionText : input, expressionSpan || parseSourceSpan, absoluteOffset, tokens, 0 /* ParseFlags.None */, errors, offsets[i], this._supportsDirectPipeReferences).parseChain();
|
|
18588
18594
|
expressionNodes.push(ast);
|
|
18589
18595
|
}
|
|
@@ -18595,7 +18601,7 @@ class Parser {
|
|
|
18595
18601
|
* This is used for parsing the switch expression in ICUs.
|
|
18596
18602
|
*/
|
|
18597
18603
|
parseInterpolationExpression(expression, parseSourceSpan, absoluteOffset) {
|
|
18598
|
-
const sourceToLex = this._stripComments(expression);
|
|
18604
|
+
const { stripped: sourceToLex } = this._stripComments(expression);
|
|
18599
18605
|
const tokens = this._lexer.tokenize(sourceToLex);
|
|
18600
18606
|
const errors = [];
|
|
18601
18607
|
const ast = new _ParseAST(expression, parseSourceSpan, absoluteOffset, tokens, 0 /* ParseFlags.None */, errors, 0, this._supportsDirectPipeReferences).parseChain();
|
|
@@ -18683,7 +18689,9 @@ class Parser {
|
|
|
18683
18689
|
}
|
|
18684
18690
|
_stripComments(input) {
|
|
18685
18691
|
const i = this._commentStart(input);
|
|
18686
|
-
return i != null
|
|
18692
|
+
return i != null
|
|
18693
|
+
? { stripped: input.substring(0, i), hasComments: true }
|
|
18694
|
+
: { stripped: input, hasComments: false };
|
|
18687
18695
|
}
|
|
18688
18696
|
_commentStart(input) {
|
|
18689
18697
|
let outerQuote = null;
|
|
@@ -27707,11 +27715,25 @@ class BindingParser {
|
|
|
27707
27715
|
return this._isAllowedAssignmentEvent(ast.args[0]);
|
|
27708
27716
|
}
|
|
27709
27717
|
if (ast instanceof PropertyRead || ast instanceof KeyedRead) {
|
|
27710
|
-
|
|
27718
|
+
if (!hasRecursiveSafeReceiver(ast)) {
|
|
27719
|
+
return true;
|
|
27720
|
+
}
|
|
27711
27721
|
}
|
|
27712
27722
|
return false;
|
|
27713
27723
|
}
|
|
27714
27724
|
}
|
|
27725
|
+
function hasRecursiveSafeReceiver(ast) {
|
|
27726
|
+
if (ast instanceof SafePropertyRead || ast instanceof SafeKeyedRead) {
|
|
27727
|
+
return true;
|
|
27728
|
+
}
|
|
27729
|
+
if (ast instanceof ParenthesizedExpression) {
|
|
27730
|
+
return hasRecursiveSafeReceiver(ast.expression);
|
|
27731
|
+
}
|
|
27732
|
+
if (ast instanceof PropertyRead || ast instanceof KeyedRead || ast instanceof Call) {
|
|
27733
|
+
return hasRecursiveSafeReceiver(ast.receiver);
|
|
27734
|
+
}
|
|
27735
|
+
return false;
|
|
27736
|
+
}
|
|
27715
27737
|
function isLegacyAnimationLabel(name) {
|
|
27716
27738
|
return name[0] == '@';
|
|
27717
27739
|
}
|
|
@@ -30284,7 +30306,8 @@ class R3TargetBinder {
|
|
|
30284
30306
|
// Bind the host element in a separate scope. Note that it only uses the
|
|
30285
30307
|
// `TemplateBinder` since directives don't apply inside a host context.
|
|
30286
30308
|
if (target.host) {
|
|
30287
|
-
|
|
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);
|
|
30288
30311
|
}
|
|
30289
30312
|
return new R3BoundTarget(target, directives, eagerDirectives, missingDirectives, bindings, references, expressions, symbols, nestingLevel, scopedNodeEntities, usedPipes, eagerPipes, deferBlocks);
|
|
30290
30313
|
}
|
|
@@ -31077,7 +31100,8 @@ class R3BoundTarget {
|
|
|
31077
31100
|
}
|
|
31078
31101
|
if (target instanceof Template ||
|
|
31079
31102
|
target.node instanceof Component$1 ||
|
|
31080
|
-
target.node instanceof Directive$1
|
|
31103
|
+
target.node instanceof Directive$1 ||
|
|
31104
|
+
target.node instanceof HostElement) {
|
|
31081
31105
|
return null;
|
|
31082
31106
|
}
|
|
31083
31107
|
return this.referenceTargetToElement(target.node);
|
|
@@ -32271,7 +32295,7 @@ function isAttrNode(ast) {
|
|
|
32271
32295
|
* @description
|
|
32272
32296
|
* Entry point for all public APIs of the compiler package.
|
|
32273
32297
|
*/
|
|
32274
|
-
new Version('20.1.
|
|
32298
|
+
new Version('20.1.5');
|
|
32275
32299
|
|
|
32276
32300
|
//////////////////////////////////////
|
|
32277
32301
|
// THIS FILE HAS GLOBAL SIDE EFFECT //
|
|
@@ -33291,7 +33315,7 @@ class NodeJSPathManipulation {
|
|
|
33291
33315
|
// G3-ESM-MARKER: G3 uses CommonJS, but externally everything in ESM.
|
|
33292
33316
|
// CommonJS/ESM interop for determining the current file name and containing dir.
|
|
33293
33317
|
const isCommonJS = typeof __filename !== 'undefined';
|
|
33294
|
-
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));
|
|
33295
33319
|
// Note, when this code loads in the browser, `url` may be an empty `{}` due to the Closure shims.
|
|
33296
33320
|
const currentFileName = isCommonJS
|
|
33297
33321
|
? __filename
|
|
@@ -44588,7 +44612,7 @@ function generateTypeCheckBlock(env, ref, name, meta, domSchemaChecker, oobRecor
|
|
|
44588
44612
|
}
|
|
44589
44613
|
// Add the host bindings type checking code.
|
|
44590
44614
|
if (tcb.boundTarget.target.host !== undefined) {
|
|
44591
|
-
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);
|
|
44592
44616
|
statements.push(renderBlockStatements(env, hostScope, createHostBindingsBlockGuard()));
|
|
44593
44617
|
}
|
|
44594
44618
|
const body = ts.factory.createBlock(statements);
|
|
@@ -44959,6 +44983,7 @@ class TcbDirectiveTypeOpBase extends TcbOp {
|
|
|
44959
44983
|
const dirRef = this.dir.ref;
|
|
44960
44984
|
const rawType = this.tcb.env.referenceType(this.dir.ref);
|
|
44961
44985
|
let type;
|
|
44986
|
+
let span;
|
|
44962
44987
|
if (this.dir.isGeneric === false || dirRef.node.typeParameters === undefined) {
|
|
44963
44988
|
type = rawType;
|
|
44964
44989
|
}
|
|
@@ -44969,9 +44994,15 @@ class TcbDirectiveTypeOpBase extends TcbOp {
|
|
|
44969
44994
|
const typeArguments = dirRef.node.typeParameters.map(() => ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword));
|
|
44970
44995
|
type = ts.factory.createTypeReferenceNode(rawType.typeName, typeArguments);
|
|
44971
44996
|
}
|
|
44997
|
+
if (this.node instanceof HostElement) {
|
|
44998
|
+
span = this.node.sourceSpan;
|
|
44999
|
+
}
|
|
45000
|
+
else {
|
|
45001
|
+
span = this.node.startSourceSpan || this.node.sourceSpan;
|
|
45002
|
+
}
|
|
44972
45003
|
const id = this.tcb.allocateId();
|
|
44973
45004
|
addExpressionIdentifier(id, ExpressionIdentifier.DIRECTIVE);
|
|
44974
|
-
addParseSpanInfo(id,
|
|
45005
|
+
addParseSpanInfo(id, span);
|
|
44975
45006
|
this.scope.addStatement(tsDeclareVariable(id, type));
|
|
44976
45007
|
return id;
|
|
44977
45008
|
}
|
|
@@ -45653,12 +45684,16 @@ class TcbDirectiveOutputsOp extends TcbOp {
|
|
|
45653
45684
|
tcb;
|
|
45654
45685
|
scope;
|
|
45655
45686
|
node;
|
|
45687
|
+
inputs;
|
|
45688
|
+
outputs;
|
|
45656
45689
|
dir;
|
|
45657
|
-
constructor(tcb, scope, node, dir) {
|
|
45690
|
+
constructor(tcb, scope, node, inputs, outputs, dir) {
|
|
45658
45691
|
super();
|
|
45659
45692
|
this.tcb = tcb;
|
|
45660
45693
|
this.scope = scope;
|
|
45661
45694
|
this.node = node;
|
|
45695
|
+
this.inputs = inputs;
|
|
45696
|
+
this.outputs = outputs;
|
|
45662
45697
|
this.dir = dir;
|
|
45663
45698
|
}
|
|
45664
45699
|
get optional() {
|
|
@@ -45667,14 +45702,16 @@ class TcbDirectiveOutputsOp extends TcbOp {
|
|
|
45667
45702
|
execute() {
|
|
45668
45703
|
let dirId = null;
|
|
45669
45704
|
const outputs = this.dir.outputs;
|
|
45670
|
-
for (const output of this.
|
|
45705
|
+
for (const output of this.outputs) {
|
|
45671
45706
|
if (output.type === exports.ParsedEventType.LegacyAnimation ||
|
|
45672
45707
|
!outputs.hasBindingPropertyName(output.name)) {
|
|
45673
45708
|
continue;
|
|
45674
45709
|
}
|
|
45675
|
-
if (this.tcb.env.config.checkTypeOfOutputEvents &&
|
|
45710
|
+
if (this.tcb.env.config.checkTypeOfOutputEvents &&
|
|
45711
|
+
this.inputs !== null &&
|
|
45712
|
+
output.name.endsWith('Change')) {
|
|
45676
45713
|
const inputName = output.name.slice(0, -6);
|
|
45677
|
-
checkSplitTwoWayBinding(inputName, output, this.
|
|
45714
|
+
checkSplitTwoWayBinding(inputName, output, this.inputs, this.tcb);
|
|
45678
45715
|
}
|
|
45679
45716
|
// TODO(alxhub): consider supporting multiple fields with the same property name for outputs.
|
|
45680
45717
|
const field = outputs.getByBindingPropertyName(output.name)[0].classPropertyName;
|
|
@@ -46449,7 +46486,8 @@ class Scope {
|
|
|
46449
46486
|
else if ((ref instanceof Element$1 ||
|
|
46450
46487
|
ref instanceof Template ||
|
|
46451
46488
|
ref instanceof Component$1 ||
|
|
46452
|
-
ref instanceof Directive$1
|
|
46489
|
+
ref instanceof Directive$1 ||
|
|
46490
|
+
ref instanceof HostElement) &&
|
|
46453
46491
|
directive !== undefined &&
|
|
46454
46492
|
this.directiveOpMap.has(ref)) {
|
|
46455
46493
|
// Resolving a directive on an element or sub-template.
|
|
@@ -46512,7 +46550,7 @@ class Scope {
|
|
|
46512
46550
|
this.appendContentProjectionCheckOp(node);
|
|
46513
46551
|
}
|
|
46514
46552
|
this.appendDirectivesAndInputsOfElementLikeNode(node);
|
|
46515
|
-
this.appendOutputsOfElementLikeNode(node);
|
|
46553
|
+
this.appendOutputsOfElementLikeNode(node, node.inputs, node.outputs);
|
|
46516
46554
|
this.appendSelectorlessDirectives(node);
|
|
46517
46555
|
this.appendChildren(node);
|
|
46518
46556
|
this.checkAndAppendReferencesOfNode(node);
|
|
@@ -46520,7 +46558,7 @@ class Scope {
|
|
|
46520
46558
|
else if (node instanceof Template) {
|
|
46521
46559
|
// Template children are rendered in a child scope.
|
|
46522
46560
|
this.appendDirectivesAndInputsOfElementLikeNode(node);
|
|
46523
|
-
this.appendOutputsOfElementLikeNode(node);
|
|
46561
|
+
this.appendOutputsOfElementLikeNode(node, node.inputs, node.outputs);
|
|
46524
46562
|
this.appendSelectorlessDirectives(node);
|
|
46525
46563
|
const ctxIndex = this.opQueue.push(new TcbTemplateContextOp(this.tcb, this)) - 1;
|
|
46526
46564
|
this.templateCtxOpMap.set(node, ctxIndex);
|
|
@@ -46567,9 +46605,7 @@ class Scope {
|
|
|
46567
46605
|
}
|
|
46568
46606
|
}
|
|
46569
46607
|
else if (node instanceof HostElement) {
|
|
46570
|
-
|
|
46571
|
-
this.hostElementOpMap.set(node, opIndex);
|
|
46572
|
-
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);
|
|
46573
46609
|
}
|
|
46574
46610
|
}
|
|
46575
46611
|
appendChildren(node) {
|
|
@@ -46643,7 +46679,7 @@ class Scope {
|
|
|
46643
46679
|
this.opQueue.push(new TcbDomSchemaCheckerOp(this.tcb, node, checkElement, claimedInputs));
|
|
46644
46680
|
}
|
|
46645
46681
|
}
|
|
46646
|
-
appendOutputsOfElementLikeNode(node) {
|
|
46682
|
+
appendOutputsOfElementLikeNode(node, bindings, events) {
|
|
46647
46683
|
// Collect all the outputs on the element.
|
|
46648
46684
|
const claimedOutputs = new Set();
|
|
46649
46685
|
// Don't resolve directives when selectorless is enabled and treat all the outputs on the
|
|
@@ -46654,24 +46690,24 @@ class Scope {
|
|
|
46654
46690
|
// If there are no directives, then all outputs are unclaimed outputs, so queue an operation
|
|
46655
46691
|
// to add them if needed.
|
|
46656
46692
|
if (node instanceof Element$1) {
|
|
46657
|
-
this.opQueue.push(new TcbUnclaimedOutputsOp(this.tcb, this, node,
|
|
46693
|
+
this.opQueue.push(new TcbUnclaimedOutputsOp(this.tcb, this, node, events, bindings, claimedOutputs));
|
|
46658
46694
|
}
|
|
46659
46695
|
return;
|
|
46660
46696
|
}
|
|
46661
46697
|
// Queue operations for all directives to check the relevant outputs for a directive.
|
|
46662
46698
|
for (const dir of directives) {
|
|
46663
|
-
this.opQueue.push(new TcbDirectiveOutputsOp(this.tcb, this, node, dir));
|
|
46699
|
+
this.opQueue.push(new TcbDirectiveOutputsOp(this.tcb, this, node, bindings, events, dir));
|
|
46664
46700
|
}
|
|
46665
46701
|
// After expanding the directives, we might need to queue an operation to check any unclaimed
|
|
46666
46702
|
// outputs.
|
|
46667
|
-
if (node instanceof Element$1) {
|
|
46703
|
+
if (node instanceof Element$1 || node instanceof HostElement) {
|
|
46668
46704
|
// Go through the directives and register any outputs that it claims in `claimedOutputs`.
|
|
46669
46705
|
for (const dir of directives) {
|
|
46670
46706
|
for (const outputProperty of dir.outputs.propertyNames) {
|
|
46671
46707
|
claimedOutputs.add(outputProperty);
|
|
46672
46708
|
}
|
|
46673
46709
|
}
|
|
46674
|
-
this.opQueue.push(new TcbUnclaimedOutputsOp(this.tcb, this, node,
|
|
46710
|
+
this.opQueue.push(new TcbUnclaimedOutputsOp(this.tcb, this, node, events, bindings, claimedOutputs));
|
|
46675
46711
|
}
|
|
46676
46712
|
}
|
|
46677
46713
|
appendInputsOfSelectorlessNode(node) {
|
|
@@ -46712,7 +46748,7 @@ class Scope {
|
|
|
46712
46748
|
const claimedOutputs = new Set();
|
|
46713
46749
|
if (directives !== null && directives.length > 0) {
|
|
46714
46750
|
for (const dir of directives) {
|
|
46715
|
-
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));
|
|
46716
46752
|
for (const outputProperty of dir.outputs.propertyNames) {
|
|
46717
46753
|
claimedOutputs.add(outputProperty);
|
|
46718
46754
|
}
|
|
@@ -46886,6 +46922,21 @@ class Scope {
|
|
|
46886
46922
|
this.validateReferenceBasedDeferredTrigger(block, triggers.viewport);
|
|
46887
46923
|
}
|
|
46888
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
|
+
}
|
|
46889
46940
|
validateReferenceBasedDeferredTrigger(block, trigger) {
|
|
46890
46941
|
if (trigger.reference === null) {
|
|
46891
46942
|
if (block.placeholder === null) {
|
|
@@ -47512,7 +47563,12 @@ class TypeCheckContextImpl {
|
|
|
47512
47563
|
}
|
|
47513
47564
|
const boundTarget = binder.bind({
|
|
47514
47565
|
template: templateContext?.nodes,
|
|
47515
|
-
host: hostBindingContext
|
|
47566
|
+
host: hostBindingContext === null
|
|
47567
|
+
? undefined
|
|
47568
|
+
: {
|
|
47569
|
+
node: hostBindingContext.node,
|
|
47570
|
+
directives: hostBindingContext.directives,
|
|
47571
|
+
},
|
|
47516
47572
|
});
|
|
47517
47573
|
if (this.inlining === InliningMode.InlineOps) {
|
|
47518
47574
|
// Get all of the directives used in the template and record inline type constructors when
|
|
@@ -49811,6 +49867,85 @@ function getClassDeclFromSymbol(symbol, checker) {
|
|
|
49811
49867
|
return null;
|
|
49812
49868
|
}
|
|
49813
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
|
+
|
|
49814
49949
|
exports.AST = AST;
|
|
49815
49950
|
exports.ASTWithSource = ASTWithSource;
|
|
49816
49951
|
exports.AbsoluteModuleStrategy = AbsoluteModuleStrategy;
|
|
@@ -49977,6 +50112,7 @@ exports.getDefaultImportDeclaration = getDefaultImportDeclaration;
|
|
|
49977
50112
|
exports.getDirectiveDiagnostics = getDirectiveDiagnostics;
|
|
49978
50113
|
exports.getFileSystem = getFileSystem;
|
|
49979
50114
|
exports.getOriginNodeForDiagnostics = getOriginNodeForDiagnostics;
|
|
50115
|
+
exports.getProjectTsConfigPaths = getProjectTsConfigPaths;
|
|
49980
50116
|
exports.getProviderDiagnostics = getProviderDiagnostics;
|
|
49981
50117
|
exports.getRootDirs = getRootDirs;
|
|
49982
50118
|
exports.getSourceFile = getSourceFile;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.1.
|
|
3
|
+
* @license Angular v20.1.5
|
|
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-B0RMVBjs.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.5
|
|
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
|
}
|