@angular/core 19.0.0-next.8 → 19.0.0-next.9
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 +93 -13
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/primitives/event-dispatch.mjs +1 -1
- package/fesm2022/primitives/signals.mjs +1 -1
- package/fesm2022/primitives/signals.mjs.map +1 -1
- package/fesm2022/rxjs-interop.mjs +1 -1
- package/fesm2022/testing.mjs +6 -4
- package/fesm2022/testing.mjs.map +1 -1
- package/index.d.ts +41 -18
- package/package.json +1 -1
- package/primitives/event-dispatch/index.d.ts +1 -1
- package/primitives/signals/index.d.ts +5 -1
- package/rxjs-interop/index.d.ts +1 -1
- package/schematics/bundles/{checker-e68dd7ce.js → checker-3b2ea20f.js} +124 -76
- package/schematics/bundles/{compiler_host-9a4d0c2b.js → compiler_host-b4ba5a28.js} +2 -2
- package/schematics/bundles/control-flow-migration.js +3 -3
- package/schematics/bundles/explicit-standalone-flag.js +3 -3
- package/schematics/bundles/{group_replacements-472b2387.js → group_replacements-e1b5cbf8.js} +234 -108
- package/schematics/bundles/imports-4ac08251.js +1 -1
- package/schematics/bundles/inject-migration.js +3 -3
- package/schematics/bundles/leading_space-d190b83b.js +1 -1
- package/schematics/bundles/nodes-0e7d45ca.js +1 -1
- package/schematics/bundles/pending-tasks.js +3 -3
- package/schematics/bundles/{program-105283c5.js → program-6534a30a.js} +67 -21
- package/schematics/bundles/project_tsconfig_paths-e9ccccbf.js +1 -1
- package/schematics/bundles/route-lazy-loading.js +3 -3
- package/schematics/bundles/signal-input-migration.js +147 -171
- package/schematics/bundles/signal-queries-migration.js +93 -74
- package/schematics/bundles/standalone-migration.js +5 -5
- package/testing/index.d.ts +3 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v19.0.0-next.
|
|
3
|
+
* @license Angular v19.0.0-next.9
|
|
4
4
|
* (c) 2010-2024 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
@@ -10,15 +10,15 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
10
10
|
|
|
11
11
|
var schematics = require('@angular-devkit/schematics');
|
|
12
12
|
var project_tsconfig_paths = require('./project_tsconfig_paths-e9ccccbf.js');
|
|
13
|
-
var group_replacements = require('./group_replacements-
|
|
13
|
+
var group_replacements = require('./group_replacements-e1b5cbf8.js');
|
|
14
14
|
require('os');
|
|
15
15
|
var ts = require('typescript');
|
|
16
|
-
var checker = require('./checker-
|
|
17
|
-
var program = require('./program-
|
|
16
|
+
var checker = require('./checker-3b2ea20f.js');
|
|
17
|
+
var program = require('./program-6534a30a.js');
|
|
18
18
|
require('path');
|
|
19
19
|
var assert = require('assert');
|
|
20
20
|
require('@angular-devkit/core');
|
|
21
|
-
require('node:path');
|
|
21
|
+
require('node:path/posix');
|
|
22
22
|
require('fs');
|
|
23
23
|
require('module');
|
|
24
24
|
require('url');
|
|
@@ -97,48 +97,6 @@ function migrateTemplateReferences(host, references) {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
/**
|
|
101
|
-
* Migrates TypeScript "ts.Type" references. E.g.
|
|
102
|
-
|
|
103
|
-
* - `Partial<MyComp>` will be converted to `UnwrapSignalInputs<Partial<MyComp>>`.
|
|
104
|
-
in Catalyst test files.
|
|
105
|
-
*/
|
|
106
|
-
function migrateTypeScriptTypeReferences(host, references, importManager, info) {
|
|
107
|
-
const seenTypeNodes = new WeakSet();
|
|
108
|
-
for (const reference of references) {
|
|
109
|
-
// This pass only deals with TS input class type references.
|
|
110
|
-
if (!group_replacements.isTsClassTypeReference(reference)) {
|
|
111
|
-
continue;
|
|
112
|
-
}
|
|
113
|
-
// Skip references to classes that are not fully migrated.
|
|
114
|
-
if (!host.shouldMigrateReferencesToClass(reference.target)) {
|
|
115
|
-
continue;
|
|
116
|
-
}
|
|
117
|
-
// Skip duplicate references. E.g. in batching.
|
|
118
|
-
if (seenTypeNodes.has(reference.from.node)) {
|
|
119
|
-
continue;
|
|
120
|
-
}
|
|
121
|
-
seenTypeNodes.add(reference.from.node);
|
|
122
|
-
if (reference.isPartialReference && reference.isPartOfCatalystFile) {
|
|
123
|
-
assert__default["default"](reference.from.node.typeArguments, 'Expected type arguments for partial reference.');
|
|
124
|
-
assert__default["default"](reference.from.node.typeArguments.length === 1, 'Expected an argument for reference.');
|
|
125
|
-
const firstArg = reference.from.node.typeArguments[0];
|
|
126
|
-
const sf = firstArg.getSourceFile();
|
|
127
|
-
const unwrapImportExpr = importManager.addImport({
|
|
128
|
-
exportModuleSpecifier: 'google3/javascript/angular2/testing/catalyst',
|
|
129
|
-
exportSymbolName: 'UnwrapSignalInputs',
|
|
130
|
-
requestedFile: sf,
|
|
131
|
-
});
|
|
132
|
-
host.replacements.push(new group_replacements.Replacement(group_replacements.projectFile(sf, info), new group_replacements.TextUpdate({
|
|
133
|
-
position: firstArg.getStart(),
|
|
134
|
-
end: firstArg.getStart(),
|
|
135
|
-
toInsert: `${host.printer.printNode(ts__default["default"].EmitHint.Unspecified, unwrapImportExpr, sf)}<`,
|
|
136
|
-
})));
|
|
137
|
-
host.replacements.push(new group_replacements.Replacement(group_replacements.projectFile(sf, info), new group_replacements.TextUpdate({ position: firstArg.getEnd(), end: firstArg.getEnd(), toInsert: '>' })));
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
100
|
/**
|
|
143
101
|
* Extracts the type `T` of expressions referencing `QueryList<T>`.
|
|
144
102
|
*/
|
|
@@ -240,7 +198,7 @@ function computeReplacementsToMigrateQuery(node, metadata, importManager, info,
|
|
|
240
198
|
type = undefined;
|
|
241
199
|
}
|
|
242
200
|
const call = ts__default["default"].factory.createCallExpression(newQueryFn, type ? [type] : undefined, args);
|
|
243
|
-
const updated = ts__default["default"].factory.
|
|
201
|
+
const updated = ts__default["default"].factory.createPropertyDeclaration([ts__default["default"].factory.createModifier(ts__default["default"].SyntaxKind.ReadonlyKeyword)], node.name, undefined, undefined, call);
|
|
244
202
|
return [
|
|
245
203
|
new group_replacements.Replacement(group_replacements.projectFile(node.getSourceFile(), info), new group_replacements.TextUpdate({
|
|
246
204
|
position: node.getStart(),
|
|
@@ -341,7 +299,7 @@ class KnownQueries {
|
|
|
341
299
|
this.info = info;
|
|
342
300
|
this.globalMetadata = globalMetadata;
|
|
343
301
|
this.classToQueryFields = new Map();
|
|
344
|
-
this.knownQueryIDs = new
|
|
302
|
+
this.knownQueryIDs = new Map();
|
|
345
303
|
}
|
|
346
304
|
isFieldIncompatible(descriptor) {
|
|
347
305
|
return this.globalMetadata.problematicQueries[descriptor.key] !== undefined;
|
|
@@ -362,7 +320,7 @@ class KnownQueries {
|
|
|
362
320
|
key: id,
|
|
363
321
|
node: queryField,
|
|
364
322
|
});
|
|
365
|
-
this.knownQueryIDs.
|
|
323
|
+
this.knownQueryIDs.set(id, { key: id, node: queryField });
|
|
366
324
|
}
|
|
367
325
|
attemptRetrieveDescriptorFromSymbol(symbol) {
|
|
368
326
|
const descriptor = getClassFieldDescriptorForSymbol(symbol, this.info);
|
|
@@ -630,8 +588,6 @@ class SignalQueriesMigration extends group_replacements.TsurgeComplexMigration {
|
|
|
630
588
|
}
|
|
631
589
|
async analyze(info) {
|
|
632
590
|
assert__default["default"](info.ngCompiler !== null, 'Expected queries migration to have an Angular program.');
|
|
633
|
-
// TODO: This stage for this migration doesn't necessarily need a full
|
|
634
|
-
// compilation unit program.
|
|
635
591
|
// Pre-Analyze the program and get access to the template type checker.
|
|
636
592
|
const { templateTypeChecker } = info.ngCompiler['ensureAnalyzed']();
|
|
637
593
|
const { sourceFiles, program: program$1 } = info;
|
|
@@ -642,12 +598,27 @@ class SignalQueriesMigration extends group_replacements.TsurgeComplexMigration {
|
|
|
642
598
|
knownQueryFields: {},
|
|
643
599
|
potentialProblematicQueries: {},
|
|
644
600
|
potentialProblematicReferenceForMultiQueries: {},
|
|
601
|
+
reusableAnalysisReferences: null,
|
|
645
602
|
};
|
|
646
603
|
const groupedAstVisitor = new group_replacements.GroupedTsAstVisitor(sourceFiles);
|
|
647
604
|
const referenceResult = { references: [] };
|
|
605
|
+
const classesWithFilteredQueries = new WeakSet();
|
|
606
|
+
const filteredQueriesForCompilationUnit = new Map();
|
|
648
607
|
const findQueryDefinitionsVisitor = (node) => {
|
|
649
608
|
const extractedQuery = extractSourceQueryDefinition(node, reflector, evaluator, info);
|
|
650
609
|
if (extractedQuery !== null) {
|
|
610
|
+
const descriptor = {
|
|
611
|
+
key: extractedQuery.id,
|
|
612
|
+
node: extractedQuery.node,
|
|
613
|
+
};
|
|
614
|
+
const containingFile = group_replacements.projectFile(descriptor.node.getSourceFile(), info);
|
|
615
|
+
if (this.config.shouldMigrateQuery === undefined ||
|
|
616
|
+
this.config.shouldMigrateQuery(descriptor, containingFile)) {
|
|
617
|
+
classesWithFilteredQueries.add(extractedQuery.node.parent);
|
|
618
|
+
filteredQueriesForCompilationUnit.set(extractedQuery.id, {
|
|
619
|
+
fieldName: extractedQuery.queryInfo.propertyName,
|
|
620
|
+
});
|
|
621
|
+
}
|
|
651
622
|
res.knownQueryFields[extractedQuery.id] = {
|
|
652
623
|
fieldName: extractedQuery.queryInfo.propertyName,
|
|
653
624
|
isMulti: extractedQuery.queryInfo.first === false,
|
|
@@ -655,17 +626,45 @@ class SignalQueriesMigration extends group_replacements.TsurgeComplexMigration {
|
|
|
655
626
|
}
|
|
656
627
|
};
|
|
657
628
|
groupedAstVisitor.register(findQueryDefinitionsVisitor);
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
{
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
629
|
+
if (this.config.assumeNonBatch) {
|
|
630
|
+
// In non-batch, we need to find queries before, so we can perform
|
|
631
|
+
// improved reference resolution.
|
|
632
|
+
this.config.reportProgressFn?.(20, 'Scanning for queries..');
|
|
633
|
+
groupedAstVisitor.execute();
|
|
634
|
+
this.config.reportProgressFn?.(30, 'Scanning for references..');
|
|
635
|
+
}
|
|
636
|
+
else {
|
|
637
|
+
this.config.reportProgressFn?.(20, 'Scanning for queries and references..');
|
|
638
|
+
}
|
|
639
|
+
groupedAstVisitor.register(group_replacements.createFindAllSourceFileReferencesVisitor(info, checker$1, reflector, info.ngCompiler['resourceManager'], evaluator, templateTypeChecker, {
|
|
640
|
+
// Note: We don't support cross-target migration of `Partial<T>` usages.
|
|
641
|
+
// This is an acceptable limitation for performance reasons.
|
|
642
|
+
shouldTrackClassReference: (node) => classesWithFilteredQueries.has(node),
|
|
643
|
+
attemptRetrieveDescriptorFromSymbol: (s) => {
|
|
644
|
+
const descriptor = getClassFieldDescriptorForSymbol(s, info);
|
|
645
|
+
// If we are executing in upgraded analysis phase mode, we know all
|
|
646
|
+
// of the queries since there aren't any other compilation units.
|
|
647
|
+
// Ignore references to non-query class fields.
|
|
648
|
+
if (this.config.assumeNonBatch &&
|
|
649
|
+
descriptor !== null &&
|
|
650
|
+
!filteredQueriesForCompilationUnit.has(descriptor.key)) {
|
|
651
|
+
return null;
|
|
652
|
+
}
|
|
653
|
+
// TODO: Also consider skipping if we know this cannot be a query.
|
|
654
|
+
// e.g. missing class decorators or some other checks.
|
|
655
|
+
// In batch mode, we eagerly, rather expensively, track all references.
|
|
656
|
+
// We don't know yet if something refers to a different query or not, so we
|
|
657
|
+
// eagerly detect such and later filter those problematic references that
|
|
658
|
+
// turned out to refer to queries (once we have the global metadata).
|
|
659
|
+
return descriptor;
|
|
660
|
+
},
|
|
661
|
+
},
|
|
662
|
+
// In non-batch mode, we know what inputs exist and can optimize the reference
|
|
663
|
+
// resolution significantly (for e.g. VSCode integration)— as we know what
|
|
664
|
+
// field names may be used to reference potential queries.
|
|
665
|
+
this.config.assumeNonBatch
|
|
666
|
+
? new Set(Array.from(filteredQueriesForCompilationUnit.values()).map((f) => f.fieldName))
|
|
667
|
+
: null, referenceResult).visitor);
|
|
669
668
|
groupedAstVisitor.execute();
|
|
670
669
|
// Determine incompatible queries based on problematic references
|
|
671
670
|
// we saw in TS code, templates or host bindings.
|
|
@@ -684,12 +683,16 @@ class SignalQueriesMigration extends group_replacements.TsurgeComplexMigration {
|
|
|
684
683
|
// Check for other incompatible query list accesses.
|
|
685
684
|
checkForIncompatibleQueryListAccesses(ref, res);
|
|
686
685
|
}
|
|
686
|
+
if (this.config.assumeNonBatch) {
|
|
687
|
+
res.reusableAnalysisReferences = referenceResult.references;
|
|
688
|
+
}
|
|
687
689
|
return group_replacements.confirmAsSerializable(res);
|
|
688
690
|
}
|
|
689
691
|
async merge(units) {
|
|
690
692
|
const merged = {
|
|
691
693
|
knownQueryFields: {},
|
|
692
694
|
problematicQueries: {},
|
|
695
|
+
reusableAnalysisReferences: null,
|
|
693
696
|
};
|
|
694
697
|
for (const unit of units) {
|
|
695
698
|
for (const [id, value] of Object.entries(unit.knownQueryFields)) {
|
|
@@ -698,6 +701,10 @@ class SignalQueriesMigration extends group_replacements.TsurgeComplexMigration {
|
|
|
698
701
|
for (const id of Object.keys(unit.potentialProblematicQueries)) {
|
|
699
702
|
merged.problematicQueries[id] = true;
|
|
700
703
|
}
|
|
704
|
+
if (unit.reusableAnalysisReferences !== null) {
|
|
705
|
+
assert__default["default"](units.length === 1, 'Expected migration to not run in batch mode');
|
|
706
|
+
merged.reusableAnalysisReferences = unit.reusableAnalysisReferences;
|
|
707
|
+
}
|
|
701
708
|
}
|
|
702
709
|
for (const unit of units) {
|
|
703
710
|
for (const id of Object.keys(unit.potentialProblematicReferenceForMultiQueries)) {
|
|
@@ -711,7 +718,7 @@ class SignalQueriesMigration extends group_replacements.TsurgeComplexMigration {
|
|
|
711
718
|
async migrate(globalMetadata, info) {
|
|
712
719
|
assert__default["default"](info.ngCompiler !== null, 'Expected queries migration to have an Angular program.');
|
|
713
720
|
// Pre-Analyze the program and get access to the template type checker.
|
|
714
|
-
const { templateTypeChecker, metaReader } =
|
|
721
|
+
const { templateTypeChecker, metaReader } = info.ngCompiler['ensureAnalyzed']();
|
|
715
722
|
const { program: program$1, sourceFiles } = info;
|
|
716
723
|
const checker$1 = program$1.getTypeChecker();
|
|
717
724
|
const reflector = new checker.TypeScriptReflectionHost(checker$1);
|
|
@@ -719,9 +726,9 @@ class SignalQueriesMigration extends group_replacements.TsurgeComplexMigration {
|
|
|
719
726
|
const replacements = [];
|
|
720
727
|
const importManager = new checker.ImportManager();
|
|
721
728
|
const printer = ts__default["default"].createPrinter();
|
|
722
|
-
const
|
|
729
|
+
const filesWithSourceQueries = new Map();
|
|
723
730
|
const filesWithIncompleteMigration = new Map();
|
|
724
|
-
const
|
|
731
|
+
const filesWithQueryListOutsideOfDeclarations = new WeakSet();
|
|
725
732
|
const knownQueries = new KnownQueries(info, globalMetadata);
|
|
726
733
|
const referenceResult = { references: [] };
|
|
727
734
|
const sourceQueries = [];
|
|
@@ -751,10 +758,11 @@ class SignalQueriesMigration extends group_replacements.TsurgeComplexMigration {
|
|
|
751
758
|
if (ts__default["default"].isIdentifier(node) &&
|
|
752
759
|
node.text === 'QueryList' &&
|
|
753
760
|
ts__default["default"].findAncestor(node, ts__default["default"].isImportDeclaration) === undefined) {
|
|
754
|
-
|
|
761
|
+
filesWithQueryListOutsideOfDeclarations.add(node.getSourceFile());
|
|
755
762
|
}
|
|
756
763
|
ts__default["default"].forEachChild(node, queryWholeProgramVisitor);
|
|
757
764
|
};
|
|
765
|
+
this.config.reportProgressFn?.(40, 'Tracking query declarations..');
|
|
758
766
|
for (const sf of info.fullProgramSourceFiles) {
|
|
759
767
|
ts__default["default"].forEachChild(sf, queryWholeProgramVisitor);
|
|
760
768
|
}
|
|
@@ -763,25 +771,36 @@ class SignalQueriesMigration extends group_replacements.TsurgeComplexMigration {
|
|
|
763
771
|
const fieldNamesToConsiderForReferenceLookup = new Set(Object.values(globalMetadata.knownQueryFields).map((f) => f.fieldName));
|
|
764
772
|
// Find all references.
|
|
765
773
|
const groupedAstVisitor = new group_replacements.GroupedTsAstVisitor(sourceFiles);
|
|
766
|
-
|
|
774
|
+
// Re-use previous reference result if available, instead of
|
|
775
|
+
// looking for references which is quite expensive.
|
|
776
|
+
if (globalMetadata.reusableAnalysisReferences !== null) {
|
|
777
|
+
referenceResult.references = globalMetadata.reusableAnalysisReferences;
|
|
778
|
+
}
|
|
779
|
+
else {
|
|
780
|
+
groupedAstVisitor.register(group_replacements.createFindAllSourceFileReferencesVisitor(info, checker$1, reflector, info.ngCompiler['resourceManager'], evaluator, templateTypeChecker, knownQueries, fieldNamesToConsiderForReferenceLookup, referenceResult).visitor);
|
|
781
|
+
}
|
|
767
782
|
const inheritanceGraph = new group_replacements.InheritanceGraph(checker$1).expensivePopulate(info.sourceFiles);
|
|
768
783
|
group_replacements.checkIncompatiblePatterns(inheritanceGraph, checker$1, groupedAstVisitor, knownQueries, () => knownQueries.getAllClassesWithQueries());
|
|
784
|
+
this.config.reportProgressFn?.(60, 'Checking for problematic patterns..');
|
|
769
785
|
groupedAstVisitor.execute();
|
|
770
786
|
// Check inheritance.
|
|
787
|
+
this.config.reportProgressFn?.(70, 'Checking for inheritance patterns..');
|
|
771
788
|
group_replacements.checkInheritanceOfKnownFields(inheritanceGraph, metaReader, knownQueries, {
|
|
772
789
|
getFieldsForClass: (n) => knownQueries.getQueryFieldsOfClass(n) ?? [],
|
|
773
790
|
isClassWithKnownFields: (clazz) => knownQueries.getQueryFieldsOfClass(clazz) !== undefined,
|
|
774
791
|
});
|
|
792
|
+
this.config.reportProgressFn?.(80, 'Migrating queries..');
|
|
775
793
|
// Migrate declarations.
|
|
776
794
|
for (const extractedQuery of sourceQueries) {
|
|
777
795
|
const node = extractedQuery.node;
|
|
778
796
|
const sf = node.getSourceFile();
|
|
779
797
|
const descriptor = { key: extractedQuery.id, node: extractedQuery.node };
|
|
780
798
|
if (!isMigratedQuery(descriptor)) {
|
|
799
|
+
updateFileState(filesWithSourceQueries, sf, extractedQuery.kind);
|
|
781
800
|
updateFileState(filesWithIncompleteMigration, sf, extractedQuery.kind);
|
|
782
801
|
continue;
|
|
783
802
|
}
|
|
784
|
-
updateFileState(
|
|
803
|
+
updateFileState(filesWithSourceQueries, sf, extractedQuery.kind);
|
|
785
804
|
replacements.push(...computeReplacementsToMigrateQuery(node, extractedQuery, importManager, info, printer));
|
|
786
805
|
}
|
|
787
806
|
// Migrate references.
|
|
@@ -794,7 +813,7 @@ class SignalQueriesMigration extends group_replacements.TsurgeComplexMigration {
|
|
|
794
813
|
group_replacements.migrateTypeScriptReferences(referenceMigrationHost, referenceResult.references, checker$1, info);
|
|
795
814
|
migrateTemplateReferences(referenceMigrationHost, referenceResult.references);
|
|
796
815
|
migrateHostBindings(referenceMigrationHost, referenceResult.references, info);
|
|
797
|
-
migrateTypeScriptTypeReferences(referenceMigrationHost, referenceResult.references, importManager, info);
|
|
816
|
+
group_replacements.migrateTypeScriptTypeReferences(referenceMigrationHost, referenceResult.references, importManager, info);
|
|
798
817
|
// Fix problematic calls, like `QueryList#toArray`, or `QueryList#get`.
|
|
799
818
|
for (const ref of referenceResult.references) {
|
|
800
819
|
removeQueryListToArrayCall(ref, info, globalMetadata, replacements);
|
|
@@ -802,7 +821,7 @@ class SignalQueriesMigration extends group_replacements.TsurgeComplexMigration {
|
|
|
802
821
|
replaceQueryListFirstAndLastReferences(ref, info, globalMetadata, replacements);
|
|
803
822
|
}
|
|
804
823
|
// Remove imports if possible.
|
|
805
|
-
for (const [file, types] of
|
|
824
|
+
for (const [file, types] of filesWithSourceQueries) {
|
|
806
825
|
let seenIncompatibleMultiQuery = false;
|
|
807
826
|
for (const type of types) {
|
|
808
827
|
const incompatibleQueryTypesForFile = filesWithIncompleteMigration.get(file);
|
|
@@ -814,12 +833,12 @@ class SignalQueriesMigration extends group_replacements.TsurgeComplexMigration {
|
|
|
814
833
|
seenIncompatibleMultiQuery = true;
|
|
815
834
|
}
|
|
816
835
|
}
|
|
817
|
-
if (!seenIncompatibleMultiQuery && !
|
|
836
|
+
if (!seenIncompatibleMultiQuery && !filesWithQueryListOutsideOfDeclarations.has(file)) {
|
|
818
837
|
importManager.removeImport(file, 'QueryList', '@angular/core');
|
|
819
838
|
}
|
|
820
839
|
}
|
|
821
840
|
group_replacements.applyImportManagerChanges(importManager, replacements, sourceFiles, info);
|
|
822
|
-
return replacements;
|
|
841
|
+
return { replacements, knownQueries };
|
|
823
842
|
}
|
|
824
843
|
async stats(globalMetadata) {
|
|
825
844
|
// TODO: Add statistics.
|
|
@@ -879,7 +898,7 @@ function migrate(options) {
|
|
|
879
898
|
const replacementsPerFile = new Map();
|
|
880
899
|
for (const { info, tsconfigPath } of programInfos) {
|
|
881
900
|
context.logger.info(`Migrating: ${tsconfigPath}..`);
|
|
882
|
-
const replacements = await migration.migrate(merged, info);
|
|
901
|
+
const { replacements } = await migration.migrate(merged, info);
|
|
883
902
|
const changesPerFile = group_replacements.groupReplacementsByFile(replacements);
|
|
884
903
|
for (const [file, changes] of changesPerFile) {
|
|
885
904
|
if (!replacementsPerFile.has(file)) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v19.0.0-next.
|
|
3
|
+
* @license Angular v19.0.0-next.9
|
|
4
4
|
* (c) 2010-2024 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
@@ -11,11 +11,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
11
11
|
var schematics = require('@angular-devkit/schematics');
|
|
12
12
|
require('os');
|
|
13
13
|
var ts = require('typescript');
|
|
14
|
-
var checker = require('./checker-
|
|
14
|
+
var checker = require('./checker-3b2ea20f.js');
|
|
15
15
|
var p = require('path');
|
|
16
|
-
var program = require('./program-
|
|
16
|
+
var program = require('./program-6534a30a.js');
|
|
17
17
|
var fs = require('fs');
|
|
18
|
-
var compiler_host = require('./compiler_host-
|
|
18
|
+
var compiler_host = require('./compiler_host-b4ba5a28.js');
|
|
19
19
|
var project_tsconfig_paths = require('./project_tsconfig_paths-e9ccccbf.js');
|
|
20
20
|
var nodes = require('./nodes-0e7d45ca.js');
|
|
21
21
|
var imports = require('./imports-4ac08251.js');
|
|
@@ -32,7 +32,7 @@ var ts__default = /*#__PURE__*/_interopDefaultLegacy(ts);
|
|
|
32
32
|
* @description
|
|
33
33
|
* Entry point for all public APIs of the compiler-cli package.
|
|
34
34
|
*/
|
|
35
|
-
new checker.Version('19.0.0-next.
|
|
35
|
+
new checker.Version('19.0.0-next.9');
|
|
36
36
|
|
|
37
37
|
function createProgram({ rootNames, options, host, oldProgram, }) {
|
|
38
38
|
return new program.NgtscProgram(rootNames, options, host, oldProgram);
|
package/testing/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v19.0.0-next.
|
|
2
|
+
* @license Angular v19.0.0-next.9
|
|
3
3
|
* (c) 2010-2024 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -89,6 +89,8 @@ export declare class ComponentFixture<T> {
|
|
|
89
89
|
* Set whether the fixture should autodetect changes.
|
|
90
90
|
*
|
|
91
91
|
* Also runs detectChanges once so that any existing change is detected.
|
|
92
|
+
*
|
|
93
|
+
* @param autoDetect Whether to autodetect changes. By default, `true`.
|
|
92
94
|
*/
|
|
93
95
|
autoDetectChanges(autoDetect?: boolean): void;
|
|
94
96
|
/**
|