@angular/core 20.0.0-next.4 → 20.0.0-next.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api.d-DQLNOR5l.d.ts +297 -0
- package/discovery.d-CFs2MaLO.d.ts +7383 -0
- package/{event_dispatcher.d-pVP0-wST.d.ts → event_dispatcher.d-DlbccpYq.d.ts} +3 -2
- package/fesm2022/attribute-BWp59EjE.mjs +24 -0
- package/fesm2022/attribute-BWp59EjE.mjs.map +1 -0
- package/fesm2022/core.mjs +586 -36873
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/debug_node-z_3NG8qT.mjs +32079 -0
- package/fesm2022/debug_node-z_3NG8qT.mjs.map +1 -0
- package/fesm2022/primitives/di.mjs +18 -4
- package/fesm2022/primitives/di.mjs.map +1 -1
- package/fesm2022/primitives/event-dispatch.mjs +2 -16
- package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
- package/fesm2022/primitives/signals.mjs +5 -3
- package/fesm2022/primitives/signals.mjs.map +1 -1
- package/fesm2022/resource-CPPwEcg7.mjs +619 -0
- package/fesm2022/resource-CPPwEcg7.mjs.map +1 -0
- package/fesm2022/root_effect_scheduler-VSXfCzDX.mjs +3847 -0
- package/fesm2022/root_effect_scheduler-VSXfCzDX.mjs.map +1 -0
- package/fesm2022/rxjs-interop.mjs +16 -9
- package/fesm2022/rxjs-interop.mjs.map +1 -1
- package/fesm2022/{untracked-DkcXpNb_.mjs → signal-B6pMq7KS.mjs} +16 -114
- package/fesm2022/signal-B6pMq7KS.mjs.map +1 -0
- package/fesm2022/testing.mjs +265 -201
- package/fesm2022/testing.mjs.map +1 -1
- package/fesm2022/untracked-Bz5WMeU1.mjs +117 -0
- package/fesm2022/untracked-Bz5WMeU1.mjs.map +1 -0
- package/fesm2022/weak_ref-BaIq-pgY.mjs +12 -0
- package/fesm2022/weak_ref-BaIq-pgY.mjs.map +1 -0
- package/{weak_ref.d-BZ7gyRag.d.ts → graph.d-BcIOep_B.d.ts} +3 -24
- package/index.d.ts +2624 -10909
- package/ng_i18n_closure_mode.d-C9d2CaSt.d.ts +832 -0
- package/package.json +3 -3
- package/primitives/di/index.d.ts +3 -2
- package/primitives/event-dispatch/index.d.ts +3 -3
- package/primitives/signals/index.d.ts +8 -4
- package/rxjs-interop/index.d.ts +10 -7
- package/schematics/bundles/{apply_import_manager-CeNv8GIG.js → apply_import_manager-DnMqg1pY.js} +6 -6
- package/schematics/bundles/{compiler_host-DwM3ugW3.js → change_tracker-UMPkv-eH.js} +3 -121
- package/schematics/bundles/checker-BFBQyesT.js +17719 -0
- package/schematics/bundles/cleanup-unused-imports.js +25 -19
- package/schematics/bundles/{checker-k591b6WQ.js → compiler-BQ7R7w2v.js} +1325 -18286
- package/schematics/bundles/compiler_host-CAfDJO3W.js +129 -0
- package/schematics/bundles/control-flow-migration.js +28 -40
- package/schematics/bundles/document-core.js +96 -0
- package/schematics/bundles/imports-CIX-JgAN.js +1 -1
- package/schematics/bundles/{index-B4OAlHh8.js → index-Cv4Q415G.js} +641 -547
- package/schematics/bundles/{index-BhELUmYx.js → index-D8tMJPKa.js} +35 -34
- package/schematics/bundles/inject-flags.js +14 -13
- package/schematics/bundles/inject-migration.js +29 -10
- package/schematics/bundles/leading_space-D9nQ8UQC.js +1 -1
- package/schematics/bundles/{migrate_ts_type_references-Be0TNYen.js → migrate_ts_type_references-Cq_ZBuT4.js} +21 -20
- package/schematics/bundles/ng_decorators-DznZ5jMl.js +1 -1
- package/schematics/bundles/nodes-B16H9JUd.js +1 -1
- package/schematics/bundles/output-migration.js +88 -25
- package/schematics/bundles/{run_in_devkit-CkvEksWP.js → project_paths-ql6qcf_c.js} +254 -243
- package/schematics/bundles/project_tsconfig_paths-CDVxT6Ov.js +1 -1
- package/schematics/bundles/property_name-BBwFuqMe.js +1 -1
- package/schematics/bundles/route-lazy-loading.js +7 -5
- package/schematics/bundles/self-closing-tags-migration.js +25 -19
- package/schematics/bundles/signal-input-migration.js +26 -20
- package/schematics/bundles/signal-queries-migration.js +51 -33
- package/schematics/bundles/signals.js +8 -7
- package/schematics/bundles/standalone-migration.js +11 -9
- package/schematics/bundles/symbol-VPWguRxr.js +1 -1
- package/schematics/bundles/test-bed-get.js +13 -12
- package/schematics/collection.json +0 -6
- package/schematics/migrations.json +11 -0
- package/signal.d-E0e5nW1p.d.ts +31 -0
- package/testing/index.d.ts +16 -28
- package/weak_ref.d-eGOEP9S1.d.ts +9 -0
- package/fesm2022/injector-BlLwZ2sr.mjs +0 -24
- package/fesm2022/injector-BlLwZ2sr.mjs.map +0 -1
- package/fesm2022/untracked-DkcXpNb_.mjs.map +0 -1
- package/navigation_types.d-DgDrF5rp.d.ts +0 -121
- package/schematics/ng-generate/control-flow-migration/schema.json +0 -20
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.0.0-next.
|
|
3
|
+
* @license Angular v20.0.0-next.6
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
@@ -8,10 +8,11 @@
|
|
|
8
8
|
|
|
9
9
|
var ts = require('typescript');
|
|
10
10
|
require('os');
|
|
11
|
-
var checker = require('./checker-
|
|
12
|
-
require('./
|
|
11
|
+
var checker = require('./checker-BFBQyesT.js');
|
|
12
|
+
var compiler = require('./compiler-BQ7R7w2v.js');
|
|
13
|
+
require('./index-Cv4Q415G.js');
|
|
13
14
|
require('path');
|
|
14
|
-
var
|
|
15
|
+
var project_paths = require('./project_paths-ql6qcf_c.js');
|
|
15
16
|
var ng_decorators = require('./ng_decorators-DznZ5jMl.js');
|
|
16
17
|
var property_name = require('./property_name-BBwFuqMe.js');
|
|
17
18
|
require('@angular-devkit/core');
|
|
@@ -202,7 +203,7 @@ function parseTemplate(template) {
|
|
|
202
203
|
// interpolated text as text nodes containing a mixture of interpolation tokens and text tokens,
|
|
203
204
|
// rather than turning them into `BoundText` nodes like the Ivy AST does. This allows us to
|
|
204
205
|
// easily get the text-only ranges without having to reconstruct the original text.
|
|
205
|
-
parsed = new
|
|
206
|
+
parsed = new compiler.HtmlParser().parse(template, '', {
|
|
206
207
|
// Allows for ICUs to be parsed.
|
|
207
208
|
tokenizeExpansionForms: true,
|
|
208
209
|
// Explicitly disable blocks so that their characters are treated as plain text.
|
|
@@ -227,7 +228,7 @@ function migrateTemplateToSelfClosingTags(template) {
|
|
|
227
228
|
return { migrated: template, changed: false, replacementCount: 0 };
|
|
228
229
|
}
|
|
229
230
|
const visitor = new AngularElementCollector();
|
|
230
|
-
|
|
231
|
+
compiler.visitAll$1(visitor, parsed.tree.rootNodes);
|
|
231
232
|
let newTemplate = template;
|
|
232
233
|
let changedOffset = 0;
|
|
233
234
|
let replacementCount = 0;
|
|
@@ -255,8 +256,8 @@ function replaceWithSelfClosingTag(html, tagName) {
|
|
|
255
256
|
function replaceTemplate(template, replaceValue, start, end, offset) {
|
|
256
257
|
return template.slice(0, start + offset) + replaceValue + template.slice(end + offset);
|
|
257
258
|
}
|
|
258
|
-
const ALL_HTML_TAGS = new
|
|
259
|
-
class AngularElementCollector extends
|
|
259
|
+
const ALL_HTML_TAGS = new compiler.DomElementSchemaRegistry().allKnownElementNames();
|
|
260
|
+
class AngularElementCollector extends compiler.RecursiveVisitor$1 {
|
|
260
261
|
elements = [];
|
|
261
262
|
constructor() {
|
|
262
263
|
super();
|
|
@@ -283,7 +284,7 @@ class AngularElementCollector extends checker.RecursiveVisitor {
|
|
|
283
284
|
}
|
|
284
285
|
if (element.children.length === 1) {
|
|
285
286
|
const child = element.children[0];
|
|
286
|
-
return child instanceof
|
|
287
|
+
return child instanceof compiler.Text && /^\s*$/.test(child.value);
|
|
287
288
|
}
|
|
288
289
|
return false;
|
|
289
290
|
}
|
|
@@ -297,7 +298,7 @@ class AngularElementCollector extends checker.RecursiveVisitor {
|
|
|
297
298
|
}
|
|
298
299
|
}
|
|
299
300
|
|
|
300
|
-
class SelfClosingTagsMigration extends
|
|
301
|
+
class SelfClosingTagsMigration extends project_paths.TsurgeFunnelMigration {
|
|
301
302
|
config;
|
|
302
303
|
constructor(config = {}) {
|
|
303
304
|
super();
|
|
@@ -313,7 +314,7 @@ class SelfClosingTagsMigration extends run_in_devkit.TsurgeFunnelMigration {
|
|
|
313
314
|
if (!ts.isClassDeclaration(node)) {
|
|
314
315
|
return;
|
|
315
316
|
}
|
|
316
|
-
const file =
|
|
317
|
+
const file = project_paths.projectFile(node.getSourceFile(), info);
|
|
317
318
|
if (this.config.shouldMigrate && this.config.shouldMigrate(file) === false) {
|
|
318
319
|
return;
|
|
319
320
|
}
|
|
@@ -326,7 +327,7 @@ class SelfClosingTagsMigration extends run_in_devkit.TsurgeFunnelMigration {
|
|
|
326
327
|
}
|
|
327
328
|
const fileToMigrate = template.inline
|
|
328
329
|
? file
|
|
329
|
-
:
|
|
330
|
+
: project_paths.projectFile(template.filePath, info);
|
|
330
331
|
const end = template.start + template.content.length;
|
|
331
332
|
const replacements = [
|
|
332
333
|
prepareTextReplacement(fileToMigrate, migrated, template.start, end),
|
|
@@ -342,20 +343,20 @@ class SelfClosingTagsMigration extends run_in_devkit.TsurgeFunnelMigration {
|
|
|
342
343
|
});
|
|
343
344
|
});
|
|
344
345
|
}
|
|
345
|
-
return
|
|
346
|
+
return project_paths.confirmAsSerializable({ tagReplacements });
|
|
346
347
|
}
|
|
347
348
|
async combine(unitA, unitB) {
|
|
348
349
|
const uniqueReplacements = removeDuplicateReplacements([
|
|
349
350
|
...unitA.tagReplacements,
|
|
350
351
|
...unitB.tagReplacements,
|
|
351
352
|
]);
|
|
352
|
-
return
|
|
353
|
+
return project_paths.confirmAsSerializable({ tagReplacements: uniqueReplacements });
|
|
353
354
|
}
|
|
354
355
|
async globalMeta(combinedData) {
|
|
355
356
|
const globalMeta = {
|
|
356
357
|
tagReplacements: combinedData.tagReplacements,
|
|
357
358
|
};
|
|
358
|
-
return
|
|
359
|
+
return project_paths.confirmAsSerializable(globalMeta);
|
|
359
360
|
}
|
|
360
361
|
async stats(globalMetadata) {
|
|
361
362
|
const touchedFilesCount = globalMetadata.tagReplacements.length;
|
|
@@ -372,7 +373,7 @@ class SelfClosingTagsMigration extends run_in_devkit.TsurgeFunnelMigration {
|
|
|
372
373
|
}
|
|
373
374
|
}
|
|
374
375
|
function prepareTextReplacement(file, replacement, start, end) {
|
|
375
|
-
return new
|
|
376
|
+
return new project_paths.Replacement(file, new project_paths.TextUpdate({
|
|
376
377
|
position: start,
|
|
377
378
|
end: end,
|
|
378
379
|
toInsert: replacement,
|
|
@@ -393,7 +394,7 @@ function removeDuplicateReplacements(replacements) {
|
|
|
393
394
|
|
|
394
395
|
function migrate(options) {
|
|
395
396
|
return async (tree, context) => {
|
|
396
|
-
await
|
|
397
|
+
await project_paths.runMigrationInDevkit({
|
|
397
398
|
tree,
|
|
398
399
|
getMigration: (fs) => new SelfClosingTagsMigration({
|
|
399
400
|
shouldMigrate: (file) => {
|
|
@@ -401,8 +402,13 @@ function migrate(options) {
|
|
|
401
402
|
!/(^|\/)node_modules\//.test(file.rootRelativePath));
|
|
402
403
|
},
|
|
403
404
|
}),
|
|
404
|
-
beforeProgramCreation: (tsconfigPath) => {
|
|
405
|
-
|
|
405
|
+
beforeProgramCreation: (tsconfigPath, stage) => {
|
|
406
|
+
if (stage === project_paths.MigrationStage.Analysis) {
|
|
407
|
+
context.logger.info(`Preparing analysis for: ${tsconfigPath}...`);
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
context.logger.info(`Running migration for: ${tsconfigPath}...`);
|
|
411
|
+
}
|
|
406
412
|
},
|
|
407
413
|
beforeUnitAnalysis: (tsconfigPath) => {
|
|
408
414
|
context.logger.info(`Scanning for component tags: ${tsconfigPath}...`);
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.0.0-next.
|
|
3
|
+
* @license Angular v20.0.0-next.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 migrate_ts_type_references = require('./migrate_ts_type_references-
|
|
9
|
+
var migrate_ts_type_references = require('./migrate_ts_type_references-Cq_ZBuT4.js');
|
|
10
10
|
var ts = require('typescript');
|
|
11
11
|
require('os');
|
|
12
|
-
var checker = require('./checker-
|
|
13
|
-
|
|
12
|
+
var checker = require('./checker-BFBQyesT.js');
|
|
13
|
+
require('./compiler-BQ7R7w2v.js');
|
|
14
|
+
var index$1 = require('./index-Cv4Q415G.js');
|
|
14
15
|
require('path');
|
|
15
|
-
var
|
|
16
|
-
var index = require('./index-
|
|
16
|
+
var project_paths = require('./project_paths-ql6qcf_c.js');
|
|
17
|
+
var index = require('./index-D8tMJPKa.js');
|
|
17
18
|
var assert = require('assert');
|
|
18
|
-
var apply_import_manager = require('./apply_import_manager-
|
|
19
|
+
var apply_import_manager = require('./apply_import_manager-DnMqg1pY.js');
|
|
19
20
|
require('@angular-devkit/core');
|
|
20
21
|
require('node:path/posix');
|
|
21
22
|
require('./leading_space-D9nQ8UQC.js');
|
|
@@ -102,7 +103,7 @@ function getInputDescriptor(hostOrInfo, node) {
|
|
|
102
103
|
className = node.parent.name?.text ?? '<anonymous>';
|
|
103
104
|
}
|
|
104
105
|
const info = hostOrInfo instanceof MigrationHost ? hostOrInfo.programInfo : hostOrInfo;
|
|
105
|
-
const file =
|
|
106
|
+
const file = project_paths.projectFile(node.getSourceFile(), info);
|
|
106
107
|
// Inputs may be detected in `.d.ts` files. Ensure that if the file IDs
|
|
107
108
|
// match regardless of extension. E.g. `/google3/blaze-out/bin/my_file.ts` should
|
|
108
109
|
// have the same ID as `/google3/my_file.ts`.
|
|
@@ -181,7 +182,7 @@ class KnownInputs {
|
|
|
181
182
|
}
|
|
182
183
|
const directiveInfo = this._classToDirectiveInfo.get(data.node.parent);
|
|
183
184
|
const inputInfo = {
|
|
184
|
-
file:
|
|
185
|
+
file: project_paths.projectFile(data.node.getSourceFile(), this.programInfo),
|
|
185
186
|
metadata: data.metadata,
|
|
186
187
|
descriptor: data.descriptor,
|
|
187
188
|
container: directiveInfo,
|
|
@@ -1035,7 +1036,7 @@ function convertToSignalInput(node, { resolvedMetadata: metadata, resolvedType,
|
|
|
1035
1036
|
if (leadingTodoText !== null) {
|
|
1036
1037
|
replacements.push(migrate_ts_type_references.insertPrecedingLine(node, info, '// TODO: Notes from signal input migration:'), ...migrate_ts_type_references.cutStringToLineLimit(leadingTodoText, 70).map((line) => migrate_ts_type_references.insertPrecedingLine(node, info, `// ${line}`)));
|
|
1037
1038
|
}
|
|
1038
|
-
replacements.push(new
|
|
1039
|
+
replacements.push(new project_paths.Replacement(project_paths.projectFile(node.getSourceFile(), info), new project_paths.TextUpdate({
|
|
1039
1040
|
position: node.getStart(),
|
|
1040
1041
|
end: node.getEnd(),
|
|
1041
1042
|
toInsert: newPropertyText,
|
|
@@ -1153,7 +1154,7 @@ function pass7__migrateTemplateReferences(host, references) {
|
|
|
1153
1154
|
const appendText = reference.from.isObjectShorthandExpression
|
|
1154
1155
|
? `: ${reference.from.read.name}()`
|
|
1155
1156
|
: `()`;
|
|
1156
|
-
host.replacements.push(new
|
|
1157
|
+
host.replacements.push(new project_paths.Replacement(reference.from.templateFile, new project_paths.TextUpdate({
|
|
1157
1158
|
position: reference.from.read.sourceSpan.end,
|
|
1158
1159
|
end: reference.from.read.sourceSpan.end,
|
|
1159
1160
|
toInsert: appendText,
|
|
@@ -1193,7 +1194,7 @@ function pass8__migrateHostBindings(host, references, info) {
|
|
|
1193
1194
|
const appendText = reference.from.isObjectShorthandExpression
|
|
1194
1195
|
? `: ${reference.from.read.name}()`
|
|
1195
1196
|
: `()`;
|
|
1196
|
-
host.replacements.push(new
|
|
1197
|
+
host.replacements.push(new project_paths.Replacement(project_paths.projectFile(bindingField.getSourceFile(), info), new project_paths.TextUpdate({ position: readEndPos, end: readEndPos, toInsert: appendText })));
|
|
1197
1198
|
}
|
|
1198
1199
|
}
|
|
1199
1200
|
|
|
@@ -1256,7 +1257,7 @@ function filterIncompatibilitiesForBestEffortMode(knownInputs) {
|
|
|
1256
1257
|
* Tsurge migration for migrating Angular `@Input()` declarations to
|
|
1257
1258
|
* signal inputs, with support for batch execution.
|
|
1258
1259
|
*/
|
|
1259
|
-
class SignalInputMigration extends
|
|
1260
|
+
class SignalInputMigration extends project_paths.TsurgeComplexMigration {
|
|
1260
1261
|
config;
|
|
1261
1262
|
upgradedAnalysisPhaseResults = null;
|
|
1262
1263
|
constructor(config = {}) {
|
|
@@ -1265,7 +1266,7 @@ class SignalInputMigration extends run_in_devkit.TsurgeComplexMigration {
|
|
|
1265
1266
|
}
|
|
1266
1267
|
// Override the default program creation, to add extra flags.
|
|
1267
1268
|
createProgram(tsconfigAbsPath, fs) {
|
|
1268
|
-
return
|
|
1269
|
+
return project_paths.createBaseProgramInfo(tsconfigAbsPath, fs, {
|
|
1269
1270
|
_compilePoisonedComponents: true,
|
|
1270
1271
|
// We want to migrate non-exported classes too.
|
|
1271
1272
|
compileNonExportedClasses: true,
|
|
@@ -1337,13 +1338,13 @@ class SignalInputMigration extends run_in_devkit.TsurgeComplexMigration {
|
|
|
1337
1338
|
knownInputs,
|
|
1338
1339
|
};
|
|
1339
1340
|
}
|
|
1340
|
-
return
|
|
1341
|
+
return project_paths.confirmAsSerializable(unitData);
|
|
1341
1342
|
}
|
|
1342
1343
|
async combine(unitA, unitB) {
|
|
1343
|
-
return
|
|
1344
|
+
return project_paths.confirmAsSerializable(combineCompilationUnitData(unitA, unitB));
|
|
1344
1345
|
}
|
|
1345
1346
|
async globalMeta(combinedData) {
|
|
1346
|
-
return
|
|
1347
|
+
return project_paths.confirmAsSerializable(convertToGlobalMeta(combinedData));
|
|
1347
1348
|
}
|
|
1348
1349
|
async migrate(globalMetadata, info, nonBatchData) {
|
|
1349
1350
|
const knownInputs = nonBatchData?.knownInputs ?? new KnownInputs(info, this.config);
|
|
@@ -1433,7 +1434,7 @@ function createMigrationHost(info, config) {
|
|
|
1433
1434
|
|
|
1434
1435
|
function migrate(options) {
|
|
1435
1436
|
return async (tree, context) => {
|
|
1436
|
-
await
|
|
1437
|
+
await project_paths.runMigrationInDevkit({
|
|
1437
1438
|
tree,
|
|
1438
1439
|
getMigration: (fs) => new SignalInputMigration({
|
|
1439
1440
|
bestEffortMode: options.bestEffortMode,
|
|
@@ -1443,8 +1444,13 @@ function migrate(options) {
|
|
|
1443
1444
|
!/(^|\/)node_modules\//.test(input.file.rootRelativePath));
|
|
1444
1445
|
},
|
|
1445
1446
|
}),
|
|
1446
|
-
beforeProgramCreation: (tsconfigPath) => {
|
|
1447
|
-
|
|
1447
|
+
beforeProgramCreation: (tsconfigPath, stage) => {
|
|
1448
|
+
if (stage === project_paths.MigrationStage.Analysis) {
|
|
1449
|
+
context.logger.info(`Preparing analysis for: ${tsconfigPath}...`);
|
|
1450
|
+
}
|
|
1451
|
+
else {
|
|
1452
|
+
context.logger.info(`Running migration for: ${tsconfigPath}...`);
|
|
1453
|
+
}
|
|
1448
1454
|
},
|
|
1449
1455
|
afterProgramCreation: (info, fs) => {
|
|
1450
1456
|
const analysisPath = fs.resolve(options.analysisDir);
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.0.0-next.
|
|
3
|
+
* @license Angular v20.0.0-next.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
|
|
9
|
+
var compiler = require('./compiler-BQ7R7w2v.js');
|
|
10
10
|
var ts = require('typescript');
|
|
11
|
+
var checker = require('./checker-BFBQyesT.js');
|
|
11
12
|
require('os');
|
|
12
|
-
var index$1 = require('./index-
|
|
13
|
+
var index$1 = require('./index-Cv4Q415G.js');
|
|
13
14
|
require('path');
|
|
14
|
-
var
|
|
15
|
-
var apply_import_manager = require('./apply_import_manager-
|
|
16
|
-
var migrate_ts_type_references = require('./migrate_ts_type_references-
|
|
15
|
+
var project_paths = require('./project_paths-ql6qcf_c.js');
|
|
16
|
+
var apply_import_manager = require('./apply_import_manager-DnMqg1pY.js');
|
|
17
|
+
var migrate_ts_type_references = require('./migrate_ts_type_references-Cq_ZBuT4.js');
|
|
17
18
|
var assert = require('assert');
|
|
18
|
-
var index = require('./index-
|
|
19
|
+
var index = require('./index-D8tMJPKa.js');
|
|
19
20
|
require('@angular-devkit/core');
|
|
20
21
|
require('node:path/posix');
|
|
21
22
|
require('fs');
|
|
@@ -57,7 +58,7 @@ function migrateHostBindings(host, references, info) {
|
|
|
57
58
|
const appendText = reference.from.isObjectShorthandExpression
|
|
58
59
|
? `: ${reference.from.read.name}()`
|
|
59
60
|
: `()`;
|
|
60
|
-
host.replacements.push(new
|
|
61
|
+
host.replacements.push(new project_paths.Replacement(project_paths.projectFile(bindingField.getSourceFile(), info), new project_paths.TextUpdate({ position: readEndPos, end: readEndPos, toInsert: appendText })));
|
|
61
62
|
}
|
|
62
63
|
}
|
|
63
64
|
|
|
@@ -86,7 +87,7 @@ function migrateTemplateReferences(host, references) {
|
|
|
86
87
|
const appendText = reference.from.isObjectShorthandExpression
|
|
87
88
|
? `: ${reference.from.read.name}()`
|
|
88
89
|
: `()`;
|
|
89
|
-
host.replacements.push(new
|
|
90
|
+
host.replacements.push(new project_paths.Replacement(reference.from.templateFile, new project_paths.TextUpdate({
|
|
90
91
|
position: reference.from.read.sourceSpan.end,
|
|
91
92
|
end: reference.from.read.sourceSpan.end,
|
|
92
93
|
toInsert: appendText,
|
|
@@ -134,7 +135,7 @@ function extractQueryListType(node) {
|
|
|
134
135
|
* --> read stays
|
|
135
136
|
* --> emitDistinctChangesOnly is gone!
|
|
136
137
|
*/
|
|
137
|
-
function computeReplacementsToMigrateQuery(node, metadata, importManager, info, printer, options, checker
|
|
138
|
+
function computeReplacementsToMigrateQuery(node, metadata, importManager, info, printer, options, checker) {
|
|
138
139
|
const sf = node.getSourceFile();
|
|
139
140
|
let newQueryFn = importManager.addImport({
|
|
140
141
|
requestedFile: sf,
|
|
@@ -159,7 +160,7 @@ function computeReplacementsToMigrateQuery(node, metadata, importManager, info,
|
|
|
159
160
|
}
|
|
160
161
|
}
|
|
161
162
|
if (metadata.queryInfo.read !== null) {
|
|
162
|
-
assert(metadata.queryInfo.read instanceof
|
|
163
|
+
assert(metadata.queryInfo.read instanceof compiler.WrappedNodeExpr);
|
|
163
164
|
optionProperties.push(ts.factory.createPropertyAssignment('read', metadata.queryInfo.read.node));
|
|
164
165
|
}
|
|
165
166
|
if (metadata.queryInfo.descendants !== defaultDescendants) {
|
|
@@ -183,7 +184,7 @@ function computeReplacementsToMigrateQuery(node, metadata, importManager, info,
|
|
|
183
184
|
node.initializer === undefined &&
|
|
184
185
|
node.questionToken === undefined &&
|
|
185
186
|
type !== undefined &&
|
|
186
|
-
!checker
|
|
187
|
+
!checker.isTypeAssignableTo(checker.getUndefinedType(), checker.getTypeFromTypeNode(type))) {
|
|
187
188
|
isRequired = true;
|
|
188
189
|
}
|
|
189
190
|
if (isRequired && metadata.queryInfo.first) {
|
|
@@ -203,7 +204,7 @@ function computeReplacementsToMigrateQuery(node, metadata, importManager, info,
|
|
|
203
204
|
// If the original property type and the read type are matching, we can rely
|
|
204
205
|
// on the TS inference, instead of repeating types, like in `viewChild<Button>(Button)`.
|
|
205
206
|
if (type !== undefined &&
|
|
206
|
-
resolvedReadType instanceof
|
|
207
|
+
resolvedReadType instanceof compiler.WrappedNodeExpr &&
|
|
207
208
|
ts.isIdentifier(resolvedReadType.node) &&
|
|
208
209
|
ts.isTypeReferenceNode(type) &&
|
|
209
210
|
ts.isIdentifier(type.typeName) &&
|
|
@@ -215,15 +216,27 @@ function computeReplacementsToMigrateQuery(node, metadata, importManager, info,
|
|
|
215
216
|
// original type explicitly as generic. Otherwise, query API is smart
|
|
216
217
|
// enough to always infer.
|
|
217
218
|
resolvedReadType === null && type !== undefined ? [type] : undefined, args);
|
|
218
|
-
const
|
|
219
|
+
const accessibilityModifier = getAccessibilityModifier(node);
|
|
220
|
+
let modifiers = [
|
|
221
|
+
ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword),
|
|
222
|
+
];
|
|
223
|
+
if (accessibilityModifier) {
|
|
224
|
+
modifiers = [accessibilityModifier, ...modifiers];
|
|
225
|
+
}
|
|
226
|
+
const updated = ts.factory.createPropertyDeclaration(modifiers, node.name, undefined, undefined, call);
|
|
219
227
|
return [
|
|
220
|
-
new
|
|
228
|
+
new project_paths.Replacement(project_paths.projectFile(node.getSourceFile(), info), new project_paths.TextUpdate({
|
|
221
229
|
position: node.getStart(),
|
|
222
230
|
end: node.getEnd(),
|
|
223
231
|
toInsert: printer.printNode(ts.EmitHint.Unspecified, updated, sf),
|
|
224
232
|
})),
|
|
225
233
|
];
|
|
226
234
|
}
|
|
235
|
+
function getAccessibilityModifier(node) {
|
|
236
|
+
return node.modifiers?.find((mod) => mod.kind === ts.SyntaxKind.PublicKeyword ||
|
|
237
|
+
mod.kind === ts.SyntaxKind.PrivateKeyword ||
|
|
238
|
+
mod.kind === ts.SyntaxKind.ProtectedKeyword);
|
|
239
|
+
}
|
|
227
240
|
|
|
228
241
|
/**
|
|
229
242
|
* Attempts to get a class field descriptor if the given symbol
|
|
@@ -258,7 +271,7 @@ function getUniqueIDForClassProperty(property, info) {
|
|
|
258
271
|
if (property.name === undefined) {
|
|
259
272
|
return null;
|
|
260
273
|
}
|
|
261
|
-
const id =
|
|
274
|
+
const id = project_paths.projectFile(property.getSourceFile(), info).id.replace(/\.d\.ts$/, '.ts');
|
|
262
275
|
// Note: If a class is nested, there could be an ID clash.
|
|
263
276
|
// This is highly unlikely though, and this is not a problem because
|
|
264
277
|
// in such cases, there is even less chance there are any references to
|
|
@@ -382,7 +395,7 @@ class KnownQueries {
|
|
|
382
395
|
});
|
|
383
396
|
this.knownQueryIDs.set(id, { key: id, node: queryField });
|
|
384
397
|
const descriptor = { key: id, node: queryField };
|
|
385
|
-
const file =
|
|
398
|
+
const file = project_paths.projectFile(queryField.getSourceFile(), this.info);
|
|
386
399
|
if (this.config.shouldMigrateQuery !== undefined &&
|
|
387
400
|
!this.config.shouldMigrateQuery(descriptor, file)) {
|
|
388
401
|
this.markFieldIncompatible(descriptor, {
|
|
@@ -520,7 +533,7 @@ function checkNonTsReferenceAccessesField(ref, fieldName) {
|
|
|
520
533
|
if (ref.from.read !== readFromPath) {
|
|
521
534
|
return null;
|
|
522
535
|
}
|
|
523
|
-
if (!(parentRead instanceof
|
|
536
|
+
if (!(parentRead instanceof compiler.PropertyRead) || parentRead.name !== fieldName) {
|
|
524
537
|
return null;
|
|
525
538
|
}
|
|
526
539
|
return parentRead;
|
|
@@ -558,7 +571,7 @@ function checkNonTsReferenceCallsField(ref, fieldName) {
|
|
|
558
571
|
return null;
|
|
559
572
|
}
|
|
560
573
|
const potentialCall = ref.from.readAstPath[accessIdx - 1];
|
|
561
|
-
if (potentialCall === undefined || !(potentialCall instanceof
|
|
574
|
+
if (potentialCall === undefined || !(potentialCall instanceof compiler.Call)) {
|
|
562
575
|
return null;
|
|
563
576
|
}
|
|
564
577
|
return potentialCall;
|
|
@@ -581,7 +594,7 @@ function removeQueryListToArrayCall(ref, info, globalMetadata, knownQueries, rep
|
|
|
581
594
|
return;
|
|
582
595
|
}
|
|
583
596
|
const toArrayExpr = toArrayCallExpr.expression;
|
|
584
|
-
replacements.push(new
|
|
597
|
+
replacements.push(new project_paths.Replacement(project_paths.projectFile(toArrayExpr.getSourceFile(), info), new project_paths.TextUpdate({
|
|
585
598
|
// Delete from expression end to call end. E.g. `.toArray(<..>)`.
|
|
586
599
|
position: toArrayExpr.expression.getEnd(),
|
|
587
600
|
end: toArrayCallExpr.getEnd(),
|
|
@@ -596,7 +609,7 @@ function removeQueryListToArrayCall(ref, info, globalMetadata, knownQueries, rep
|
|
|
596
609
|
}
|
|
597
610
|
const file = index.isHostBindingReference(ref) ? ref.from.file : ref.from.templateFile;
|
|
598
611
|
const offset = index.isHostBindingReference(ref) ? ref.from.hostPropertyNode.getStart() + 1 : 0;
|
|
599
|
-
replacements.push(new
|
|
612
|
+
replacements.push(new project_paths.Replacement(file, new project_paths.TextUpdate({
|
|
600
613
|
// Delete from expression end to call end. E.g. `.toArray(<..>)`.
|
|
601
614
|
position: offset + callExpr.receiver.receiver.sourceSpan.end,
|
|
602
615
|
end: offset + callExpr.sourceSpan.end,
|
|
@@ -620,7 +633,7 @@ function replaceQueryListGetCall(ref, info, globalMetadata, knownQueries, replac
|
|
|
620
633
|
return;
|
|
621
634
|
}
|
|
622
635
|
const getExpr = getCallExpr.expression;
|
|
623
|
-
replacements.push(new
|
|
636
|
+
replacements.push(new project_paths.Replacement(project_paths.projectFile(getExpr.getSourceFile(), info), new project_paths.TextUpdate({
|
|
624
637
|
position: getExpr.name.getStart(),
|
|
625
638
|
end: getExpr.name.getEnd(),
|
|
626
639
|
toInsert: 'at',
|
|
@@ -634,7 +647,7 @@ function replaceQueryListGetCall(ref, info, globalMetadata, knownQueries, replac
|
|
|
634
647
|
}
|
|
635
648
|
const file = index.isHostBindingReference(ref) ? ref.from.file : ref.from.templateFile;
|
|
636
649
|
const offset = index.isHostBindingReference(ref) ? ref.from.hostPropertyNode.getStart() + 1 : 0;
|
|
637
|
-
replacements.push(new
|
|
650
|
+
replacements.push(new project_paths.Replacement(file, new project_paths.TextUpdate({
|
|
638
651
|
position: offset + callExpr.receiver.nameSpan.start,
|
|
639
652
|
end: offset + callExpr.receiver.nameSpan.end,
|
|
640
653
|
toInsert: 'at',
|
|
@@ -689,7 +702,7 @@ function replaceQueryListFirstAndLastReferences(ref, info, globalMetadata, known
|
|
|
689
702
|
if (expr === null) {
|
|
690
703
|
return;
|
|
691
704
|
}
|
|
692
|
-
replacements.push(new
|
|
705
|
+
replacements.push(new project_paths.Replacement(project_paths.projectFile(expr.getSourceFile(), info), new project_paths.TextUpdate({
|
|
693
706
|
position: expr.name.getStart(),
|
|
694
707
|
end: expr.name.getEnd(),
|
|
695
708
|
toInsert: mapping.get(expr.name.text),
|
|
@@ -703,14 +716,14 @@ function replaceQueryListFirstAndLastReferences(ref, info, globalMetadata, known
|
|
|
703
716
|
}
|
|
704
717
|
const file = index.isHostBindingReference(ref) ? ref.from.file : ref.from.templateFile;
|
|
705
718
|
const offset = index.isHostBindingReference(ref) ? ref.from.hostPropertyNode.getStart() + 1 : 0;
|
|
706
|
-
replacements.push(new
|
|
719
|
+
replacements.push(new project_paths.Replacement(file, new project_paths.TextUpdate({
|
|
707
720
|
position: offset + expr.nameSpan.start,
|
|
708
721
|
end: offset + expr.nameSpan.end,
|
|
709
722
|
toInsert: mapping.get(expr.name),
|
|
710
723
|
})));
|
|
711
724
|
}
|
|
712
725
|
|
|
713
|
-
class SignalQueriesMigration extends
|
|
726
|
+
class SignalQueriesMigration extends project_paths.TsurgeComplexMigration {
|
|
714
727
|
config;
|
|
715
728
|
constructor(config = {}) {
|
|
716
729
|
super();
|
|
@@ -748,7 +761,7 @@ class SignalQueriesMigration extends run_in_devkit.TsurgeComplexMigration {
|
|
|
748
761
|
key: extractedQuery.id,
|
|
749
762
|
node: queryNode,
|
|
750
763
|
};
|
|
751
|
-
const containingFile =
|
|
764
|
+
const containingFile = project_paths.projectFile(queryNode.getSourceFile(), info);
|
|
752
765
|
// If we have a config filter function, use it here for later
|
|
753
766
|
// perf-boosted reference lookups. Useful in non-batch mode.
|
|
754
767
|
if (this.config.shouldMigrateQuery === undefined ||
|
|
@@ -852,7 +865,7 @@ class SignalQueriesMigration extends run_in_devkit.TsurgeComplexMigration {
|
|
|
852
865
|
if (this.config.assumeNonBatch) {
|
|
853
866
|
res.reusableAnalysisReferences = referenceResult.references;
|
|
854
867
|
}
|
|
855
|
-
return
|
|
868
|
+
return project_paths.confirmAsSerializable(res);
|
|
856
869
|
}
|
|
857
870
|
async combine(unitA, unitB) {
|
|
858
871
|
const combined = {
|
|
@@ -892,7 +905,7 @@ class SignalQueriesMigration extends run_in_devkit.TsurgeComplexMigration {
|
|
|
892
905
|
}
|
|
893
906
|
}
|
|
894
907
|
}
|
|
895
|
-
return
|
|
908
|
+
return project_paths.confirmAsSerializable(combined);
|
|
896
909
|
}
|
|
897
910
|
async globalMeta(combinedData) {
|
|
898
911
|
const globalUnitData = {
|
|
@@ -905,7 +918,7 @@ class SignalQueriesMigration extends run_in_devkit.TsurgeComplexMigration {
|
|
|
905
918
|
markFieldIncompatibleInMetadata(globalUnitData.problematicQueries, id, migrate_ts_type_references.FieldIncompatibilityReason.SignalQueries__QueryListProblematicFieldAccessed);
|
|
906
919
|
}
|
|
907
920
|
}
|
|
908
|
-
return
|
|
921
|
+
return project_paths.confirmAsSerializable(globalUnitData);
|
|
909
922
|
}
|
|
910
923
|
async migrate(globalMetadata, info) {
|
|
911
924
|
// Pre-Analyze the program and get access to the template type checker.
|
|
@@ -1106,7 +1119,7 @@ function updateFileState(stateMap, node, queryType) {
|
|
|
1106
1119
|
|
|
1107
1120
|
function migrate(options) {
|
|
1108
1121
|
return async (tree, context) => {
|
|
1109
|
-
await
|
|
1122
|
+
await project_paths.runMigrationInDevkit({
|
|
1110
1123
|
tree,
|
|
1111
1124
|
getMigration: (fs) => new SignalQueriesMigration({
|
|
1112
1125
|
bestEffortMode: options.bestEffortMode,
|
|
@@ -1116,8 +1129,13 @@ function migrate(options) {
|
|
|
1116
1129
|
!/(^|\/)node_modules\//.test(file.rootRelativePath));
|
|
1117
1130
|
},
|
|
1118
1131
|
}),
|
|
1119
|
-
beforeProgramCreation: (tsconfigPath) => {
|
|
1120
|
-
|
|
1132
|
+
beforeProgramCreation: (tsconfigPath, stage) => {
|
|
1133
|
+
if (stage === project_paths.MigrationStage.Analysis) {
|
|
1134
|
+
context.logger.info(`Preparing analysis for: ${tsconfigPath}...`);
|
|
1135
|
+
}
|
|
1136
|
+
else {
|
|
1137
|
+
context.logger.info(`Running migration for: ${tsconfigPath}...`);
|
|
1138
|
+
}
|
|
1121
1139
|
},
|
|
1122
1140
|
afterProgramCreation: (info, fs) => {
|
|
1123
1141
|
const analysisPath = fs.resolve(options.analysisDir);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.0.0-next.
|
|
3
|
+
* @license Angular v20.0.0-next.6
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
@@ -10,22 +10,23 @@ var schematics = require('@angular-devkit/schematics');
|
|
|
10
10
|
var signalQueriesMigration = require('./signal-queries-migration.js');
|
|
11
11
|
var signalInputMigration = require('./signal-input-migration.js');
|
|
12
12
|
var outputMigration = require('./output-migration.js');
|
|
13
|
-
require('./
|
|
13
|
+
require('./compiler-BQ7R7w2v.js');
|
|
14
14
|
require('typescript');
|
|
15
|
+
require('./checker-BFBQyesT.js');
|
|
15
16
|
require('os');
|
|
16
17
|
require('fs');
|
|
17
18
|
require('module');
|
|
18
19
|
require('path');
|
|
19
20
|
require('url');
|
|
20
|
-
require('./index-
|
|
21
|
-
require('./
|
|
21
|
+
require('./index-Cv4Q415G.js');
|
|
22
|
+
require('./project_paths-ql6qcf_c.js');
|
|
22
23
|
require('@angular-devkit/core');
|
|
23
24
|
require('node:path/posix');
|
|
24
25
|
require('./project_tsconfig_paths-CDVxT6Ov.js');
|
|
25
|
-
require('./apply_import_manager-
|
|
26
|
-
require('./migrate_ts_type_references-
|
|
26
|
+
require('./apply_import_manager-DnMqg1pY.js');
|
|
27
|
+
require('./migrate_ts_type_references-Cq_ZBuT4.js');
|
|
27
28
|
require('assert');
|
|
28
|
-
require('./index-
|
|
29
|
+
require('./index-D8tMJPKa.js');
|
|
29
30
|
require('./leading_space-D9nQ8UQC.js');
|
|
30
31
|
|
|
31
32
|
function migrate(options) {
|
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.0.0-next.
|
|
3
|
+
* @license Angular v20.0.0-next.6
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
7
7
|
'use strict';
|
|
8
8
|
|
|
9
9
|
var schematics = require('@angular-devkit/schematics');
|
|
10
|
-
var index = require('./index-
|
|
10
|
+
var index = require('./index-Cv4Q415G.js');
|
|
11
11
|
var fs = require('fs');
|
|
12
12
|
var p = require('path');
|
|
13
13
|
var ts = require('typescript');
|
|
14
|
-
var
|
|
14
|
+
var change_tracker = require('./change_tracker-UMPkv-eH.js');
|
|
15
15
|
var project_tsconfig_paths = require('./project_tsconfig_paths-CDVxT6Ov.js');
|
|
16
|
+
var compiler_host = require('./compiler_host-CAfDJO3W.js');
|
|
16
17
|
var ng_decorators = require('./ng_decorators-DznZ5jMl.js');
|
|
17
18
|
var nodes = require('./nodes-B16H9JUd.js');
|
|
18
19
|
var symbol = require('./symbol-VPWguRxr.js');
|
|
19
20
|
var imports = require('./imports-CIX-JgAN.js');
|
|
20
|
-
|
|
21
|
+
require('./compiler-BQ7R7w2v.js');
|
|
22
|
+
var checker = require('./checker-BFBQyesT.js');
|
|
21
23
|
require('os');
|
|
22
24
|
require('@angular-devkit/core');
|
|
23
25
|
require('module');
|
|
@@ -234,7 +236,7 @@ function getRelativeImportPath(fromFile, toFile) {
|
|
|
234
236
|
path = './' + path;
|
|
235
237
|
}
|
|
236
238
|
// Using the Node utilities can yield paths with forward slashes on Windows.
|
|
237
|
-
return
|
|
239
|
+
return change_tracker.normalizePath(path);
|
|
238
240
|
}
|
|
239
241
|
/** Function used to remap the generated `imports` for a component to known shorter aliases. */
|
|
240
242
|
function knownInternalAliasRemapper(imports) {
|
|
@@ -331,7 +333,7 @@ function toStandalone(sourceFiles, program, printer, fileImportRemapper, declara
|
|
|
331
333
|
const modulesToMigrate = new Set();
|
|
332
334
|
const testObjectsToMigrate = new Set();
|
|
333
335
|
const declarations = new Set();
|
|
334
|
-
const tracker = new
|
|
336
|
+
const tracker = new change_tracker.ChangeTracker(printer, fileImportRemapper);
|
|
335
337
|
for (const sourceFile of sourceFiles) {
|
|
336
338
|
const modules = findNgModuleClassesToMigrate(sourceFile, typeChecker);
|
|
337
339
|
const testObjects = findTestObjectsToMigrate(sourceFile, typeChecker);
|
|
@@ -910,7 +912,7 @@ function isStandaloneDeclaration(node, declarationsInMigration, templateTypeChec
|
|
|
910
912
|
*/
|
|
911
913
|
function pruneNgModules(program, host, basePath, rootFileNames, sourceFiles, printer, importRemapper, referenceLookupExcludedFiles, declarationImportRemapper) {
|
|
912
914
|
const filesToRemove = new Set();
|
|
913
|
-
const tracker = new
|
|
915
|
+
const tracker = new change_tracker.ChangeTracker(printer, importRemapper);
|
|
914
916
|
const tsProgram = program.getTsProgram();
|
|
915
917
|
const typeChecker = tsProgram.getTypeChecker();
|
|
916
918
|
const templateTypeChecker = program.compiler.getTemplateTypeChecker();
|
|
@@ -1394,7 +1396,7 @@ function isInImportsArray(closestAssignment, closestArray) {
|
|
|
1394
1396
|
* found in the LICENSE file at https://angular.dev/license
|
|
1395
1397
|
*/
|
|
1396
1398
|
function toStandaloneBootstrap(program, host, basePath, rootFileNames, sourceFiles, printer, importRemapper, referenceLookupExcludedFiles, declarationImportRemapper) {
|
|
1397
|
-
const tracker = new
|
|
1399
|
+
const tracker = new change_tracker.ChangeTracker(printer, importRemapper);
|
|
1398
1400
|
const typeChecker = program.getTsProgram().getTypeChecker();
|
|
1399
1401
|
const templateTypeChecker = program.compiler.getTemplateTypeChecker();
|
|
1400
1402
|
const referenceResolver = new ReferenceResolver(program, host, rootFileNames, basePath, referenceLookupExcludedFiles);
|
|
@@ -1987,7 +1989,7 @@ function migrate(options) {
|
|
|
1987
1989
|
const allPaths = [...buildPaths, ...testPaths];
|
|
1988
1990
|
// TS and Schematic use paths in POSIX format even on Windows. This is needed as otherwise
|
|
1989
1991
|
// string matching such as `sourceFile.fileName.startsWith(pathToMigrate)` might not work.
|
|
1990
|
-
const pathToMigrate =
|
|
1992
|
+
const pathToMigrate = change_tracker.normalizePath(p.join(basePath, options.path));
|
|
1991
1993
|
let migratedFiles = 0;
|
|
1992
1994
|
if (!allPaths.length) {
|
|
1993
1995
|
throw new schematics.SchematicsException('Could not find any tsconfig file. Cannot run the standalone migration.');
|