@angular/core 20.0.0-next.1 → 20.0.0-next.3
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/fesm2022/core.mjs +770 -2144
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/primitives/di.mjs +3 -2
- package/fesm2022/primitives/di.mjs.map +1 -1
- package/fesm2022/primitives/event-dispatch.mjs +2 -589
- package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
- package/fesm2022/primitives/signals.mjs +44 -13
- package/fesm2022/primitives/signals.mjs.map +1 -1
- package/fesm2022/rxjs-interop.mjs +7 -39
- package/fesm2022/rxjs-interop.mjs.map +1 -1
- package/fesm2022/testing.mjs +116 -143
- package/fesm2022/testing.mjs.map +1 -1
- package/fesm2022/weak_ref-DrMdAIDh.mjs +12 -0
- package/fesm2022/weak_ref-DrMdAIDh.mjs.map +1 -0
- package/index.d.ts +14366 -15214
- package/navigation_types.d-u4EOrrdZ.d.ts +121 -0
- package/package.json +2 -2
- package/primitives/di/index.d.ts +66 -59
- package/primitives/event-dispatch/index.d.ts +205 -309
- package/primitives/signals/index.d.ts +161 -195
- package/rxjs-interop/index.d.ts +71 -100
- package/schematics/bundles/{apply_import_manager-e2a7fe5b.js → apply_import_manager-BXQEjo09.js} +15 -19
- package/schematics/bundles/{checker-af521da6.js → checker-BHb19MHt.js} +3695 -1175
- package/schematics/bundles/cleanup-unused-imports.js +56 -89
- package/schematics/bundles/{compiler_host-5a29293c.js → compiler_host-Bk3repE2.js} +19 -23
- package/schematics/bundles/control-flow-migration.js +81 -38
- package/schematics/bundles/{imports-047fbbc8.js → imports-CIX-JgAN.js} +9 -14
- package/schematics/bundles/{index-1bef3025.js → index-BL9kAIe5.js} +62 -66
- package/schematics/bundles/{program-a449f9bf.js → index-I8VbxQcO.js} +1508 -3178
- package/schematics/bundles/inject-flags.js +147 -0
- package/schematics/bundles/inject-migration.js +121 -127
- package/schematics/bundles/{leading_space-f8944434.js → leading_space-D9nQ8UQC.js} +1 -1
- package/schematics/bundles/{migrate_ts_type_references-2a3e9e6b.js → migrate_ts_type_references-KlOTWeDl.js} +121 -126
- package/schematics/bundles/{ng_decorators-b0d8b324.js → ng_decorators-DznZ5jMl.js} +4 -8
- package/schematics/bundles/{nodes-7758dbf6.js → nodes-B16H9JUd.js} +2 -6
- package/schematics/bundles/output-migration.js +94 -128
- package/schematics/bundles/{project_tsconfig_paths-b558633b.js → project_tsconfig_paths-CDVxT6Ov.js} +1 -1
- package/schematics/bundles/{property_name-ac18447e.js → property_name-BBwFuqMe.js} +3 -7
- package/schematics/bundles/route-lazy-loading.js +35 -41
- package/schematics/bundles/{project_paths-17dc204d.js → run_in_devkit-C0JPtK2u.js} +283 -216
- package/schematics/bundles/self-closing-tags-migration.js +55 -91
- package/schematics/bundles/signal-input-migration.js +121 -156
- package/schematics/bundles/signal-queries-migration.js +119 -154
- package/schematics/bundles/signals.js +12 -14
- package/schematics/bundles/standalone-migration.js +180 -200
- package/schematics/bundles/symbol-VPWguRxr.js +25 -0
- package/schematics/bundles/test-bed-get.js +98 -0
- package/schematics/migrations.json +8 -14
- package/testing/index.d.ts +289 -471
- package/weak_ref.d-ttyj86RV.d.ts +9 -0
- package/schematics/bundles/explicit-standalone-flag.js +0 -184
- package/schematics/bundles/index-ef1bffbb.js +0 -30
- package/schematics/bundles/pending-tasks.js +0 -103
- package/schematics/bundles/provide-initializer.js +0 -186
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.0.0-next.
|
|
3
|
+
* @license Angular v20.0.0-next.3
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
@@ -8,10 +8,6 @@
|
|
|
8
8
|
|
|
9
9
|
var ts = require('typescript');
|
|
10
10
|
|
|
11
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
12
|
-
|
|
13
|
-
var ts__default = /*#__PURE__*/_interopDefaultLegacy(ts);
|
|
14
|
-
|
|
15
11
|
/** Gets import information about the specified identifier by using the Type checker. */
|
|
16
12
|
function getImportOfIdentifier(typeChecker, node) {
|
|
17
13
|
const symbol = typeChecker.getSymbolAtLocation(node);
|
|
@@ -19,11 +15,11 @@ function getImportOfIdentifier(typeChecker, node) {
|
|
|
19
15
|
return null;
|
|
20
16
|
}
|
|
21
17
|
const decl = symbol.declarations[0];
|
|
22
|
-
if (!
|
|
18
|
+
if (!ts.isImportSpecifier(decl)) {
|
|
23
19
|
return null;
|
|
24
20
|
}
|
|
25
21
|
const importDecl = decl.parent.parent.parent;
|
|
26
|
-
if (!
|
|
22
|
+
if (!ts.isImportDeclaration(importDecl) || !ts.isStringLiteral(importDecl.moduleSpecifier)) {
|
|
27
23
|
return null;
|
|
28
24
|
}
|
|
29
25
|
return {
|
|
@@ -56,14 +52,14 @@ function getImportSpecifier(sourceFile, moduleName, specifierName) {
|
|
|
56
52
|
function getImportSpecifiers(sourceFile, moduleName, specifierOrSpecifiers) {
|
|
57
53
|
const matches = [];
|
|
58
54
|
for (const node of sourceFile.statements) {
|
|
59
|
-
if (!
|
|
55
|
+
if (!ts.isImportDeclaration(node) || !ts.isStringLiteral(node.moduleSpecifier)) {
|
|
60
56
|
continue;
|
|
61
57
|
}
|
|
62
58
|
const namedBindings = node.importClause?.namedBindings;
|
|
63
59
|
const isMatch = typeof moduleName === 'string'
|
|
64
60
|
? node.moduleSpecifier.text === moduleName
|
|
65
61
|
: moduleName.test(node.moduleSpecifier.text);
|
|
66
|
-
if (!isMatch || !namedBindings || !
|
|
62
|
+
if (!isMatch || !namedBindings || !ts.isNamedImports(namedBindings)) {
|
|
67
63
|
continue;
|
|
68
64
|
}
|
|
69
65
|
if (typeof specifierOrSpecifiers === 'string') {
|
|
@@ -85,12 +81,11 @@ function getImportSpecifiers(sourceFile, moduleName, specifierOrSpecifiers) {
|
|
|
85
81
|
}
|
|
86
82
|
function getNamedImports(sourceFile, moduleName) {
|
|
87
83
|
for (const node of sourceFile.statements) {
|
|
88
|
-
if (
|
|
89
|
-
const isMatch =
|
|
90
|
-
|
|
91
|
-
: moduleName.test(node.moduleSpecifier.text);
|
|
84
|
+
if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {
|
|
85
|
+
const isMatch = node.moduleSpecifier.text === moduleName
|
|
86
|
+
;
|
|
92
87
|
const namedBindings = node.importClause?.namedBindings;
|
|
93
|
-
if (isMatch && namedBindings &&
|
|
88
|
+
if (isMatch && namedBindings && ts.isNamedImports(namedBindings)) {
|
|
94
89
|
return namedBindings;
|
|
95
90
|
}
|
|
96
91
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.0.0-next.
|
|
3
|
+
* @license Angular v20.0.0-next.3
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
@@ -8,23 +8,19 @@
|
|
|
8
8
|
|
|
9
9
|
var ts = require('typescript');
|
|
10
10
|
require('os');
|
|
11
|
-
var checker = require('./checker-
|
|
12
|
-
var
|
|
11
|
+
var checker = require('./checker-BHb19MHt.js');
|
|
12
|
+
var index = require('./index-I8VbxQcO.js');
|
|
13
13
|
require('path');
|
|
14
|
-
var
|
|
15
|
-
|
|
16
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
17
|
-
|
|
18
|
-
var ts__default = /*#__PURE__*/_interopDefaultLegacy(ts);
|
|
14
|
+
var run_in_devkit = require('./run_in_devkit-C0JPtK2u.js');
|
|
19
15
|
|
|
20
16
|
function getMemberName(member) {
|
|
21
17
|
if (member.name === undefined) {
|
|
22
18
|
return null;
|
|
23
19
|
}
|
|
24
|
-
if (
|
|
20
|
+
if (ts.isIdentifier(member.name) || ts.isStringLiteralLike(member.name)) {
|
|
25
21
|
return member.name.text;
|
|
26
22
|
}
|
|
27
|
-
if (
|
|
23
|
+
if (ts.isPrivateIdentifier(member.name)) {
|
|
28
24
|
return `#${member.name.text}`;
|
|
29
25
|
}
|
|
30
26
|
return null;
|
|
@@ -32,8 +28,8 @@ function getMemberName(member) {
|
|
|
32
28
|
|
|
33
29
|
/** Checks whether the given node can be an `@Input()` declaration node. */
|
|
34
30
|
function isInputContainerNode(node) {
|
|
35
|
-
return (((
|
|
36
|
-
|
|
31
|
+
return (((ts.isAccessor(node) && ts.isClassDeclaration(node.parent)) ||
|
|
32
|
+
ts.isPropertyDeclaration(node)) &&
|
|
37
33
|
getMemberName(node) !== null);
|
|
38
34
|
}
|
|
39
35
|
|
|
@@ -56,17 +52,17 @@ class DebugElementComponentInstance {
|
|
|
56
52
|
if (this.cache.has(node)) {
|
|
57
53
|
return this.cache.get(node);
|
|
58
54
|
}
|
|
59
|
-
if (!
|
|
55
|
+
if (!ts.isPropertyAccessExpression(node)) {
|
|
60
56
|
return null;
|
|
61
57
|
}
|
|
62
58
|
// Check for `<>.componentInstance`.
|
|
63
|
-
if (!
|
|
59
|
+
if (!ts.isIdentifier(node.name) || node.name.text !== 'componentInstance') {
|
|
64
60
|
return null;
|
|
65
61
|
}
|
|
66
62
|
// Check for `<>.query(..).<>`.
|
|
67
|
-
if (!
|
|
68
|
-
!
|
|
69
|
-
!
|
|
63
|
+
if (!ts.isCallExpression(node.expression) ||
|
|
64
|
+
!ts.isPropertyAccessExpression(node.expression.expression) ||
|
|
65
|
+
!ts.isIdentifier(node.expression.expression.name) ||
|
|
70
66
|
node.expression.expression.name.text !== 'query') {
|
|
71
67
|
return null;
|
|
72
68
|
}
|
|
@@ -76,13 +72,13 @@ class DebugElementComponentInstance {
|
|
|
76
72
|
}
|
|
77
73
|
const queryArg = queryCall.arguments[0];
|
|
78
74
|
let typeExpr;
|
|
79
|
-
if (
|
|
75
|
+
if (ts.isCallExpression(queryArg) &&
|
|
80
76
|
queryArg.arguments.length === 1 &&
|
|
81
|
-
|
|
77
|
+
ts.isIdentifier(queryArg.arguments[0])) {
|
|
82
78
|
// Detect references, like: `query(By.directive(T))`.
|
|
83
79
|
typeExpr = queryArg.arguments[0];
|
|
84
80
|
}
|
|
85
|
-
else if (
|
|
81
|
+
else if (ts.isIdentifier(queryArg)) {
|
|
86
82
|
// Detect references, like: `harness.query(T)`.
|
|
87
83
|
typeExpr = queryArg;
|
|
88
84
|
}
|
|
@@ -91,7 +87,7 @@ class DebugElementComponentInstance {
|
|
|
91
87
|
}
|
|
92
88
|
const symbol = this.checker.getSymbolAtLocation(typeExpr);
|
|
93
89
|
if (symbol?.valueDeclaration === undefined ||
|
|
94
|
-
!
|
|
90
|
+
!ts.isClassDeclaration(symbol?.valueDeclaration)) {
|
|
95
91
|
// Cache this as we use the expensive type checker.
|
|
96
92
|
this.cache.set(node, null);
|
|
97
93
|
return null;
|
|
@@ -123,8 +119,8 @@ class PartialDirectiveTypeInCatalystTests {
|
|
|
123
119
|
}
|
|
124
120
|
detect(node) {
|
|
125
121
|
// Detect `Partial<...>`
|
|
126
|
-
if (!
|
|
127
|
-
!
|
|
122
|
+
if (!ts.isTypeReferenceNode(node) ||
|
|
123
|
+
!ts.isIdentifier(node.typeName) ||
|
|
128
124
|
node.typeName.text !== 'Partial') {
|
|
129
125
|
return null;
|
|
130
126
|
}
|
|
@@ -135,8 +131,8 @@ class PartialDirectiveTypeInCatalystTests {
|
|
|
135
131
|
// Extract T of `Partial<T>`.
|
|
136
132
|
const cmpTypeArg = node.typeArguments?.[0];
|
|
137
133
|
if (!cmpTypeArg ||
|
|
138
|
-
!
|
|
139
|
-
!
|
|
134
|
+
!ts.isTypeReferenceNode(cmpTypeArg) ||
|
|
135
|
+
!ts.isIdentifier(cmpTypeArg.typeName)) {
|
|
140
136
|
return null;
|
|
141
137
|
}
|
|
142
138
|
const cmpType = cmpTypeArg.typeName;
|
|
@@ -144,7 +140,7 @@ class PartialDirectiveTypeInCatalystTests {
|
|
|
144
140
|
// Note: Technically the class might be derived of an input-containing class,
|
|
145
141
|
// but this is out of scope for now. We can expand if we see it's a common case.
|
|
146
142
|
if (symbol?.valueDeclaration === undefined ||
|
|
147
|
-
!
|
|
143
|
+
!ts.isClassDeclaration(symbol.valueDeclaration) ||
|
|
148
144
|
!this.knownFields.shouldTrackClassReference(symbol.valueDeclaration)) {
|
|
149
145
|
return null;
|
|
150
146
|
}
|
|
@@ -320,7 +316,7 @@ class TemplateReferenceVisitor extends checker.RecursiveVisitor$1 {
|
|
|
320
316
|
* This resolution is important to be able to migrate references to inputs
|
|
321
317
|
* that will be migrated to signal inputs.
|
|
322
318
|
*/
|
|
323
|
-
class TemplateExpressionReferenceVisitor extends checker.RecursiveAstVisitor
|
|
319
|
+
class TemplateExpressionReferenceVisitor extends checker.RecursiveAstVisitor {
|
|
324
320
|
typeChecker;
|
|
325
321
|
templateTypeChecker;
|
|
326
322
|
componentClass;
|
|
@@ -547,7 +543,7 @@ function identifyHostBindingReferences(node, programInfo, checker$1, reflector,
|
|
|
547
543
|
return;
|
|
548
544
|
}
|
|
549
545
|
const metadataNode = checker.unwrapExpression(ngDecorator.args[0]);
|
|
550
|
-
if (!
|
|
546
|
+
if (!ts.isObjectLiteralExpression(metadataNode)) {
|
|
551
547
|
return;
|
|
552
548
|
}
|
|
553
549
|
const metadata = checker.reflectObjectLiteral(metadataNode);
|
|
@@ -557,26 +553,26 @@ function identifyHostBindingReferences(node, programInfo, checker$1, reflector,
|
|
|
557
553
|
let hostField = checker.unwrapExpression(metadata.get('host'));
|
|
558
554
|
// Special-case in case host bindings are shared via a variable.
|
|
559
555
|
// e.g. Material button shares host bindings as a constant in the same target.
|
|
560
|
-
if (
|
|
556
|
+
if (ts.isIdentifier(hostField)) {
|
|
561
557
|
let symbol = checker$1.getSymbolAtLocation(hostField);
|
|
562
558
|
// Plain identifier references can point to alias symbols (e.g. imports).
|
|
563
|
-
if (symbol !== undefined && symbol.flags &
|
|
559
|
+
if (symbol !== undefined && symbol.flags & ts.SymbolFlags.Alias) {
|
|
564
560
|
symbol = checker$1.getAliasedSymbol(symbol);
|
|
565
561
|
}
|
|
566
562
|
if (symbol !== undefined &&
|
|
567
563
|
symbol.valueDeclaration !== undefined &&
|
|
568
|
-
|
|
564
|
+
ts.isVariableDeclaration(symbol.valueDeclaration)) {
|
|
569
565
|
hostField = symbol?.valueDeclaration.initializer;
|
|
570
566
|
}
|
|
571
567
|
}
|
|
572
|
-
if (hostField === undefined || !
|
|
568
|
+
if (hostField === undefined || !ts.isObjectLiteralExpression(hostField)) {
|
|
573
569
|
return;
|
|
574
570
|
}
|
|
575
571
|
const hostMap = checker.reflectObjectLiteral(hostField);
|
|
576
572
|
const expressionResult = [];
|
|
577
573
|
const expressionVisitor = new TemplateExpressionReferenceVisitor(checker$1, null, node, knownFields, fieldNamesToConsiderForReferenceLookup);
|
|
578
574
|
for (const [rawName, expression] of hostMap.entries()) {
|
|
579
|
-
if (!
|
|
575
|
+
if (!ts.isStringLiteralLike(expression)) {
|
|
580
576
|
continue;
|
|
581
577
|
}
|
|
582
578
|
const isEventBinding = rawName.startsWith('(');
|
|
@@ -615,7 +611,7 @@ function identifyHostBindingReferences(node, programInfo, checker$1, reflector,
|
|
|
615
611
|
readAstPath: ref.readAstPath,
|
|
616
612
|
isObjectShorthandExpression: ref.isObjectShorthandExpression,
|
|
617
613
|
isWrite: ref.isWrite,
|
|
618
|
-
file:
|
|
614
|
+
file: run_in_devkit.projectFile(ref.context.getSourceFile(), programInfo),
|
|
619
615
|
hostPropertyNode: ref.context,
|
|
620
616
|
},
|
|
621
617
|
target: ref.targetField,
|
|
@@ -632,14 +628,14 @@ function identifyHostBindingReferences(node, programInfo, checker$1, reflector,
|
|
|
632
628
|
*/
|
|
633
629
|
function attemptExtractTemplateDefinition(node, checker$1, reflector, resourceLoader) {
|
|
634
630
|
const classDecorators = reflector.getDecoratorsOfDeclaration(node);
|
|
635
|
-
const evaluator = new
|
|
631
|
+
const evaluator = new index.PartialEvaluator(reflector, checker$1, null);
|
|
636
632
|
const ngDecorators = classDecorators !== null
|
|
637
633
|
? checker.getAngularDecorators(classDecorators, ['Component'], /* isAngularCore */ false)
|
|
638
634
|
: [];
|
|
639
635
|
if (ngDecorators.length === 0 ||
|
|
640
636
|
ngDecorators[0].args === null ||
|
|
641
637
|
ngDecorators[0].args.length === 0 ||
|
|
642
|
-
!
|
|
638
|
+
!ts.isObjectLiteralExpression(ngDecorators[0].args[0])) {
|
|
643
639
|
return null;
|
|
644
640
|
}
|
|
645
641
|
const properties = checker.reflectObjectLiteral(ngDecorators[0].args[0]);
|
|
@@ -715,8 +711,8 @@ function identifyTemplateReferences(programInfo, node, reflector, checker$1, eva
|
|
|
715
711
|
readAstPath: res.readAstPath,
|
|
716
712
|
node: res.context,
|
|
717
713
|
isObjectShorthandExpression: res.isObjectShorthandExpression,
|
|
718
|
-
originatingTsFile:
|
|
719
|
-
templateFile:
|
|
714
|
+
originatingTsFile: run_in_devkit.projectFile(node.getSourceFile(), programInfo),
|
|
715
|
+
templateFile: run_in_devkit.projectFile(checker.absoluteFrom(templateFilePath), programInfo),
|
|
720
716
|
isLikelyPartOfNarrowing: res.isLikelyNarrowed,
|
|
721
717
|
isWrite: res.isWrite,
|
|
722
718
|
},
|
|
@@ -742,7 +738,7 @@ function extractTemplateWithoutCompilerAnalysis(node, checker$1, reflector, reso
|
|
|
742
738
|
if (tmplDef === null) {
|
|
743
739
|
return null;
|
|
744
740
|
}
|
|
745
|
-
return
|
|
741
|
+
return index.extractTemplate(node, tmplDef, evaluator, null, resourceLoader, {
|
|
746
742
|
enableBlockSyntax: true,
|
|
747
743
|
enableLetSyntax: true,
|
|
748
744
|
usePoisonedData: true,
|
|
@@ -755,7 +751,7 @@ function extractTemplateWithoutCompilerAnalysis(node, checker$1, reflector, reso
|
|
|
755
751
|
function resolveBindingElement(node) {
|
|
756
752
|
const name = node.propertyName ?? node.name;
|
|
757
753
|
// If we are discovering a non-analyzable element in the path, abort.
|
|
758
|
-
if (!
|
|
754
|
+
if (!ts.isStringLiteralLike(name) && !ts.isIdentifier(name)) {
|
|
759
755
|
return null;
|
|
760
756
|
}
|
|
761
757
|
return {
|
|
@@ -766,7 +762,7 @@ function resolveBindingElement(node) {
|
|
|
766
762
|
/** Gets the declaration node of the given binding element. */
|
|
767
763
|
function getBindingElementDeclaration(node) {
|
|
768
764
|
while (true) {
|
|
769
|
-
if (
|
|
765
|
+
if (ts.isBindingElement(node.parent.parent)) {
|
|
770
766
|
node = node.parent.parent;
|
|
771
767
|
}
|
|
772
768
|
else {
|
|
@@ -786,10 +782,10 @@ function getBindingElementDeclaration(node) {
|
|
|
786
782
|
* variable for narrowing. Replacing just the identifier is wrong.
|
|
787
783
|
*/
|
|
788
784
|
function traverseAccess(access) {
|
|
789
|
-
if (
|
|
785
|
+
if (ts.isPropertyAccessExpression(access.parent) && access.parent.name === access) {
|
|
790
786
|
return access.parent;
|
|
791
787
|
}
|
|
792
|
-
else if (
|
|
788
|
+
else if (ts.isElementAccessExpression(access.parent) &&
|
|
793
789
|
access.parent.argumentExpression === access) {
|
|
794
790
|
return access.parent;
|
|
795
791
|
}
|
|
@@ -801,10 +797,10 @@ function traverseAccess(access) {
|
|
|
801
797
|
* parenthesized expression or `as` expression.
|
|
802
798
|
*/
|
|
803
799
|
function unwrapParent(node) {
|
|
804
|
-
if (
|
|
800
|
+
if (ts.isParenthesizedExpression(node.parent)) {
|
|
805
801
|
return unwrapParent(node.parent);
|
|
806
802
|
}
|
|
807
|
-
else if (
|
|
803
|
+
else if (ts.isAsExpression(node.parent)) {
|
|
808
804
|
return unwrapParent(node.parent);
|
|
809
805
|
}
|
|
810
806
|
return node;
|
|
@@ -817,18 +813,18 @@ function unwrapParent(node) {
|
|
|
817
813
|
* something or not.
|
|
818
814
|
*/
|
|
819
815
|
const writeBinaryOperators = [
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
816
|
+
ts.SyntaxKind.EqualsToken,
|
|
817
|
+
ts.SyntaxKind.BarBarEqualsToken,
|
|
818
|
+
ts.SyntaxKind.BarEqualsToken,
|
|
819
|
+
ts.SyntaxKind.AmpersandEqualsToken,
|
|
820
|
+
ts.SyntaxKind.AmpersandAmpersandEqualsToken,
|
|
821
|
+
ts.SyntaxKind.SlashEqualsToken,
|
|
822
|
+
ts.SyntaxKind.MinusEqualsToken,
|
|
823
|
+
ts.SyntaxKind.PlusEqualsToken,
|
|
824
|
+
ts.SyntaxKind.CaretEqualsToken,
|
|
825
|
+
ts.SyntaxKind.PercentEqualsToken,
|
|
826
|
+
ts.SyntaxKind.AsteriskEqualsToken,
|
|
827
|
+
ts.SyntaxKind.ExclamationEqualsToken,
|
|
832
828
|
];
|
|
833
829
|
|
|
834
830
|
/**
|
|
@@ -849,7 +845,7 @@ function identifyPotentialTypeScriptReference(node, programInfo, checker, knownF
|
|
|
849
845
|
let target = undefined;
|
|
850
846
|
// Resolve binding elements to their declaration symbol.
|
|
851
847
|
// Commonly inputs are accessed via object expansion. e.g. `const {input} = this;`.
|
|
852
|
-
if (
|
|
848
|
+
if (ts.isBindingElement(node.parent)) {
|
|
853
849
|
// Skip binding elements that are using spread.
|
|
854
850
|
if (node.parent.dotDotDotToken !== undefined) {
|
|
855
851
|
return;
|
|
@@ -867,11 +863,11 @@ function identifyPotentialTypeScriptReference(node, programInfo, checker, knownF
|
|
|
867
863
|
target = checker.getSymbolAtLocation(node);
|
|
868
864
|
}
|
|
869
865
|
noTargetSymbolCheck: if (target === undefined) {
|
|
870
|
-
if (
|
|
866
|
+
if (ts.isPropertyAccessExpression(node.parent) && node.parent.name === node) {
|
|
871
867
|
const propAccessSymbol = checker.getSymbolAtLocation(node.parent.expression);
|
|
872
868
|
if (propAccessSymbol !== undefined &&
|
|
873
869
|
propAccessSymbol.valueDeclaration !== undefined &&
|
|
874
|
-
|
|
870
|
+
ts.isVariableDeclaration(propAccessSymbol.valueDeclaration) &&
|
|
875
871
|
propAccessSymbol.valueDeclaration.initializer !== undefined) {
|
|
876
872
|
target = advisors.debugElComponentInstanceTracker
|
|
877
873
|
.detect(propAccessSymbol.valueDeclaration.initializer)
|
|
@@ -890,7 +886,7 @@ function identifyPotentialTypeScriptReference(node, programInfo, checker, knownF
|
|
|
890
886
|
}
|
|
891
887
|
const access = unwrapParent(traverseAccess(node));
|
|
892
888
|
const accessParent = access.parent;
|
|
893
|
-
const isWriteReference =
|
|
889
|
+
const isWriteReference = ts.isBinaryExpression(accessParent) &&
|
|
894
890
|
accessParent.left === access &&
|
|
895
891
|
writeBinaryOperators.includes(accessParent.operatorToken.kind);
|
|
896
892
|
// track accesses from source files to known fields.
|
|
@@ -898,9 +894,9 @@ function identifyPotentialTypeScriptReference(node, programInfo, checker, knownF
|
|
|
898
894
|
kind: exports.ReferenceKind.TsReference,
|
|
899
895
|
from: {
|
|
900
896
|
node,
|
|
901
|
-
file:
|
|
897
|
+
file: run_in_devkit.projectFile(node.getSourceFile(), programInfo),
|
|
902
898
|
isWrite: isWriteReference,
|
|
903
|
-
isPartOfElementBinding:
|
|
899
|
+
isPartOfElementBinding: ts.isBindingElement(node.parent),
|
|
904
900
|
},
|
|
905
901
|
target: targetInput,
|
|
906
902
|
});
|
|
@@ -935,7 +931,7 @@ function createFindAllSourceFileReferencesVisitor(programInfo, checker, reflecto
|
|
|
935
931
|
let lastTime = currentTimeInMs();
|
|
936
932
|
// Note: If there is no template type checker and resource loader, we aren't processing
|
|
937
933
|
// an Angular program, and can skip template detection.
|
|
938
|
-
if (
|
|
934
|
+
if (ts.isClassDeclaration(node) && templateTypeChecker !== null && resourceLoader !== null) {
|
|
939
935
|
identifyTemplateReferences(programInfo, node, reflector, checker, evaluator, templateTypeChecker, resourceLoader, programInfo.userOptions, result, knownFields, fieldNamesToConsiderForReferenceLookup);
|
|
940
936
|
perfCounters.template += (currentTimeInMs() - lastTime) / 1000;
|
|
941
937
|
lastTime = currentTimeInMs();
|
|
@@ -945,7 +941,7 @@ function createFindAllSourceFileReferencesVisitor(programInfo, checker, reflecto
|
|
|
945
941
|
}
|
|
946
942
|
lastTime = currentTimeInMs();
|
|
947
943
|
// find references, but do not capture input declarations itself.
|
|
948
|
-
if (
|
|
944
|
+
if (ts.isIdentifier(node) &&
|
|
949
945
|
!(isInputContainerNode(node.parent) && node.parent.name === node)) {
|
|
950
946
|
identifyPotentialTypeScriptReference(node, programInfo, checker, knownFields, result, fieldNamesToConsiderForReferenceLookup, {
|
|
951
947
|
debugElComponentInstanceTracker,
|
|
@@ -962,7 +958,7 @@ function createFindAllSourceFileReferencesVisitor(programInfo, checker, reflecto
|
|
|
962
958
|
result.references.push({
|
|
963
959
|
kind: exports.ReferenceKind.TsClassTypeReference,
|
|
964
960
|
from: {
|
|
965
|
-
file:
|
|
961
|
+
file: run_in_devkit.projectFile(partialDirectiveInCatalyst.referenceNode.getSourceFile(), programInfo),
|
|
966
962
|
node: partialDirectiveInCatalyst.referenceNode,
|
|
967
963
|
},
|
|
968
964
|
isPartialReference: true,
|