@angular/core 19.2.5 → 19.2.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/{event_dispatcher.d-PWnbqZDx.d.ts → event_dispatcher.d-DlbccpYq.d.ts} +3 -3
- package/fesm2022/core.mjs +9 -6
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/primitives/di.mjs +1 -1
- package/fesm2022/primitives/event-dispatch.mjs +1 -1
- package/fesm2022/primitives/signals.mjs +3 -3
- package/fesm2022/rxjs-interop.mjs +2 -2
- package/fesm2022/rxjs-interop.mjs.map +1 -1
- package/fesm2022/testing.mjs +148 -97
- package/fesm2022/testing.mjs.map +1 -1
- package/fesm2022/{untracked-CS7WUAzb.mjs → untracked-BKcld_ew.mjs} +3 -3
- package/fesm2022/{untracked-CS7WUAzb.mjs.map → untracked-BKcld_ew.mjs.map} +1 -1
- package/index.d.ts +6 -5
- package/{navigation_types.d-Lh6SmhKv.d.ts → navigation_types.d-fAxd92YV.d.ts} +3 -3
- package/package.json +1 -1
- package/primitives/di/index.d.ts +1 -1
- package/primitives/event-dispatch/index.d.ts +3 -3
- package/primitives/signals/index.d.ts +3 -3
- package/rxjs-interop/index.d.ts +2 -2
- package/schematics/bundles/{apply_import_manager-CTrezOPF.js → apply_import_manager-DFADpdFu.js} +3 -3
- package/schematics/bundles/{checker-CQvNmpT3.js → checker-DoX_7XCa.js} +7 -8
- package/schematics/bundles/cleanup-unused-imports.js +42 -64
- package/schematics/bundles/{compiler_host-IULKT7OF.js → compiler_host-BUKEE1cA.js} +2 -2
- package/schematics/bundles/control-flow-migration.js +3 -3
- package/schematics/bundles/explicit-standalone-flag.js +3 -3
- package/schematics/bundles/imports-CIX-JgAN.js +1 -1
- package/schematics/bundles/{program-XYcLSXb1.js → index-B4b0V0Vo.js} +36 -12
- package/schematics/bundles/{index-BKWl7N44.js → index-CpZKzrqM.js} +6 -6
- package/schematics/bundles/inject-migration.js +3 -3
- package/schematics/bundles/leading_space-D9nQ8UQC.js +1 -1
- package/schematics/bundles/{migrate_ts_type_references-CHRyhQvi.js → migrate_ts_type_references-DQVDid4G.js} +5 -5
- package/schematics/bundles/ng_decorators-DznZ5jMl.js +1 -1
- package/schematics/bundles/nodes-B16H9JUd.js +1 -1
- package/schematics/bundles/output-migration.js +108 -78
- package/schematics/bundles/pending-tasks.js +3 -3
- package/schematics/bundles/{project_paths-CTgTxqrW.js → project_paths-C3etOlgT.js} +88 -13
- package/schematics/bundles/project_tsconfig_paths-CDVxT6Ov.js +1 -1
- package/schematics/bundles/property_name-BBwFuqMe.js +1 -1
- package/schematics/bundles/provide-initializer.js +3 -3
- package/schematics/bundles/route-lazy-loading.js +3 -3
- package/schematics/bundles/self-closing-tags-migration.js +39 -64
- package/schematics/bundles/signal-input-migration.js +64 -87
- package/schematics/bundles/signal-queries-migration.js +69 -92
- package/schematics/bundles/signals.js +11 -11
- package/schematics/bundles/standalone-migration.js +5 -6
- package/testing/index.d.ts +5 -21
- package/{weak_ref.d-DOjz-6fK.d.ts → weak_ref.d-DWHPG08n.d.ts} +3 -3
- package/schematics/bundles/index-CH_G_p3D.js +0 -30
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v19.2.
|
|
3
|
+
* @license Angular v19.2.6
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
var schematics = require('@angular-devkit/schematics');
|
|
10
10
|
var p = require('path');
|
|
11
11
|
var project_tsconfig_paths = require('./project_tsconfig_paths-CDVxT6Ov.js');
|
|
12
|
-
var compiler_host = require('./compiler_host-
|
|
12
|
+
var compiler_host = require('./compiler_host-BUKEE1cA.js');
|
|
13
13
|
var ts = require('typescript');
|
|
14
14
|
var imports = require('./imports-CIX-JgAN.js');
|
|
15
15
|
require('@angular-devkit/core');
|
|
16
|
-
require('./checker-
|
|
16
|
+
require('./checker-DoX_7XCa.js');
|
|
17
17
|
require('os');
|
|
18
18
|
require('fs');
|
|
19
19
|
require('module');
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v19.2.
|
|
3
|
+
* @license Angular v19.2.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 checker = require('./checker-
|
|
9
|
+
var checker = require('./checker-DoX_7XCa.js');
|
|
10
10
|
var ts = require('typescript');
|
|
11
11
|
var p = require('path');
|
|
12
12
|
require('os');
|
|
@@ -1007,7 +1007,7 @@ const MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION = '18.0.0';
|
|
|
1007
1007
|
function compileDeclareClassMetadata(metadata) {
|
|
1008
1008
|
const definitionMap = new checker.DefinitionMap();
|
|
1009
1009
|
definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$5));
|
|
1010
|
-
definitionMap.set('version', checker.literal('19.2.
|
|
1010
|
+
definitionMap.set('version', checker.literal('19.2.6'));
|
|
1011
1011
|
definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
|
|
1012
1012
|
definitionMap.set('type', metadata.type);
|
|
1013
1013
|
definitionMap.set('decorators', metadata.decorators);
|
|
@@ -1025,7 +1025,7 @@ function compileComponentDeclareClassMetadata(metadata, dependencies) {
|
|
|
1025
1025
|
callbackReturnDefinitionMap.set('ctorParameters', metadata.ctorParameters ?? checker.literal(null));
|
|
1026
1026
|
callbackReturnDefinitionMap.set('propDecorators', metadata.propDecorators ?? checker.literal(null));
|
|
1027
1027
|
definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION));
|
|
1028
|
-
definitionMap.set('version', checker.literal('19.2.
|
|
1028
|
+
definitionMap.set('version', checker.literal('19.2.6'));
|
|
1029
1029
|
definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
|
|
1030
1030
|
definitionMap.set('type', metadata.type);
|
|
1031
1031
|
definitionMap.set('resolveDeferredDeps', compileComponentMetadataAsyncResolver(dependencies));
|
|
@@ -1120,7 +1120,7 @@ function createDirectiveDefinitionMap(meta) {
|
|
|
1120
1120
|
const definitionMap = new checker.DefinitionMap();
|
|
1121
1121
|
const minVersion = getMinimumVersionForPartialOutput(meta);
|
|
1122
1122
|
definitionMap.set('minVersion', checker.literal(minVersion));
|
|
1123
|
-
definitionMap.set('version', checker.literal('19.2.
|
|
1123
|
+
definitionMap.set('version', checker.literal('19.2.6'));
|
|
1124
1124
|
// e.g. `type: MyDirective`
|
|
1125
1125
|
definitionMap.set('type', meta.type.value);
|
|
1126
1126
|
if (meta.isStandalone !== undefined) {
|
|
@@ -1536,7 +1536,7 @@ const MINIMUM_PARTIAL_LINKER_VERSION$4 = '12.0.0';
|
|
|
1536
1536
|
function compileDeclareFactoryFunction(meta) {
|
|
1537
1537
|
const definitionMap = new checker.DefinitionMap();
|
|
1538
1538
|
definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$4));
|
|
1539
|
-
definitionMap.set('version', checker.literal('19.2.
|
|
1539
|
+
definitionMap.set('version', checker.literal('19.2.6'));
|
|
1540
1540
|
definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
|
|
1541
1541
|
definitionMap.set('type', meta.type.value);
|
|
1542
1542
|
definitionMap.set('deps', compileDependencies(meta.deps));
|
|
@@ -1571,7 +1571,7 @@ function compileDeclareInjectableFromMetadata(meta) {
|
|
|
1571
1571
|
function createInjectableDefinitionMap(meta) {
|
|
1572
1572
|
const definitionMap = new checker.DefinitionMap();
|
|
1573
1573
|
definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$3));
|
|
1574
|
-
definitionMap.set('version', checker.literal('19.2.
|
|
1574
|
+
definitionMap.set('version', checker.literal('19.2.6'));
|
|
1575
1575
|
definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
|
|
1576
1576
|
definitionMap.set('type', meta.type.value);
|
|
1577
1577
|
// Only generate providedIn property if it has a non-null value
|
|
@@ -1622,7 +1622,7 @@ function compileDeclareInjectorFromMetadata(meta) {
|
|
|
1622
1622
|
function createInjectorDefinitionMap(meta) {
|
|
1623
1623
|
const definitionMap = new checker.DefinitionMap();
|
|
1624
1624
|
definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$2));
|
|
1625
|
-
definitionMap.set('version', checker.literal('19.2.
|
|
1625
|
+
definitionMap.set('version', checker.literal('19.2.6'));
|
|
1626
1626
|
definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
|
|
1627
1627
|
definitionMap.set('type', meta.type.value);
|
|
1628
1628
|
definitionMap.set('providers', meta.providers);
|
|
@@ -1655,7 +1655,7 @@ function createNgModuleDefinitionMap(meta) {
|
|
|
1655
1655
|
throw new Error('Invalid path! Local compilation mode should not get into the partial compilation path');
|
|
1656
1656
|
}
|
|
1657
1657
|
definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$1));
|
|
1658
|
-
definitionMap.set('version', checker.literal('19.2.
|
|
1658
|
+
definitionMap.set('version', checker.literal('19.2.6'));
|
|
1659
1659
|
definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
|
|
1660
1660
|
definitionMap.set('type', meta.type.value);
|
|
1661
1661
|
// We only generate the keys in the metadata if the arrays contain values.
|
|
@@ -1706,7 +1706,7 @@ function compileDeclarePipeFromMetadata(meta) {
|
|
|
1706
1706
|
function createPipeDefinitionMap(meta) {
|
|
1707
1707
|
const definitionMap = new checker.DefinitionMap();
|
|
1708
1708
|
definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION));
|
|
1709
|
-
definitionMap.set('version', checker.literal('19.2.
|
|
1709
|
+
definitionMap.set('version', checker.literal('19.2.6'));
|
|
1710
1710
|
definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
|
|
1711
1711
|
// e.g. `type: MyPipe`
|
|
1712
1712
|
definitionMap.set('type', meta.type.value);
|
|
@@ -10723,6 +10723,13 @@ class PipeDecoratorHandler {
|
|
|
10723
10723
|
}
|
|
10724
10724
|
}
|
|
10725
10725
|
|
|
10726
|
+
/**
|
|
10727
|
+
* @module
|
|
10728
|
+
* @description
|
|
10729
|
+
* Entry point for all public APIs of the compiler-cli package.
|
|
10730
|
+
*/
|
|
10731
|
+
new checker.Version('19.2.6');
|
|
10732
|
+
|
|
10726
10733
|
/**
|
|
10727
10734
|
* Whether a given decorator should be treated as an Angular decorator.
|
|
10728
10735
|
* Either it's used in @angular/core, or it's imported from there.
|
|
@@ -18555,7 +18562,7 @@ var semver = /*@__PURE__*/getDefaultExportFromCjs(semverExports);
|
|
|
18555
18562
|
* @param minVersion Minimum required version for the feature.
|
|
18556
18563
|
*/
|
|
18557
18564
|
function coreVersionSupportsFeature(coreVersion, minVersion) {
|
|
18558
|
-
// A version of `19.2.
|
|
18565
|
+
// A version of `19.2.6` usually means that core is at head so it supports
|
|
18559
18566
|
// all features. Use string interpolation prevent the placeholder from being replaced
|
|
18560
18567
|
// with the current version during build time.
|
|
18561
18568
|
if (coreVersion === `0.0.0-${'PLACEHOLDER'}`) {
|
|
@@ -19102,7 +19109,14 @@ class NgCompiler {
|
|
|
19102
19109
|
const printer = ts.createPrinter();
|
|
19103
19110
|
const nodeText = printer.printNode(ts.EmitHint.Unspecified, callback, sourceFile);
|
|
19104
19111
|
return ts.transpileModule(nodeText, {
|
|
19105
|
-
compilerOptions:
|
|
19112
|
+
compilerOptions: {
|
|
19113
|
+
...this.options,
|
|
19114
|
+
// Some module types can produce additional code (see #60795) whereas we need the
|
|
19115
|
+
// HMR update module to use a native `export`. Override the `target` and `module`
|
|
19116
|
+
// to ensure that it looks as expected.
|
|
19117
|
+
module: ts.ModuleKind.ES2022,
|
|
19118
|
+
target: ts.ScriptTarget.ES2022,
|
|
19119
|
+
},
|
|
19106
19120
|
fileName: sourceFile.fileName,
|
|
19107
19121
|
reportDiagnostics: false,
|
|
19108
19122
|
}).outputText;
|
|
@@ -20249,6 +20263,16 @@ function mergeEmitResults(emitResults) {
|
|
|
20249
20263
|
return { diagnostics, emitSkipped, emittedFiles };
|
|
20250
20264
|
}
|
|
20251
20265
|
|
|
20266
|
+
var LogLevel;
|
|
20267
|
+
(function (LogLevel) {
|
|
20268
|
+
LogLevel[LogLevel["debug"] = 0] = "debug";
|
|
20269
|
+
LogLevel[LogLevel["info"] = 1] = "info";
|
|
20270
|
+
LogLevel[LogLevel["warn"] = 2] = "warn";
|
|
20271
|
+
LogLevel[LogLevel["error"] = 3] = "error";
|
|
20272
|
+
})(LogLevel || (LogLevel = {}));
|
|
20273
|
+
|
|
20274
|
+
checker.setFileSystem(new checker.NodeJSFileSystem());
|
|
20275
|
+
|
|
20252
20276
|
exports.DtsMetadataReader = DtsMetadataReader;
|
|
20253
20277
|
exports.NgtscProgram = NgtscProgram;
|
|
20254
20278
|
exports.PartialEvaluator = PartialEvaluator;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v19.2.
|
|
3
|
+
* @license Angular v19.2.6
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
|
|
9
9
|
var ts = require('typescript');
|
|
10
10
|
require('os');
|
|
11
|
-
var checker = require('./checker-
|
|
12
|
-
var
|
|
11
|
+
var checker = require('./checker-DoX_7XCa.js');
|
|
12
|
+
var index = require('./index-B4b0V0Vo.js');
|
|
13
13
|
require('path');
|
|
14
|
-
var project_paths = require('./project_paths-
|
|
14
|
+
var project_paths = require('./project_paths-C3etOlgT.js');
|
|
15
15
|
|
|
16
16
|
function getMemberName(member) {
|
|
17
17
|
if (member.name === undefined) {
|
|
@@ -628,7 +628,7 @@ function identifyHostBindingReferences(node, programInfo, checker$1, reflector,
|
|
|
628
628
|
*/
|
|
629
629
|
function attemptExtractTemplateDefinition(node, checker$1, reflector, resourceLoader) {
|
|
630
630
|
const classDecorators = reflector.getDecoratorsOfDeclaration(node);
|
|
631
|
-
const evaluator = new
|
|
631
|
+
const evaluator = new index.PartialEvaluator(reflector, checker$1, null);
|
|
632
632
|
const ngDecorators = classDecorators !== null
|
|
633
633
|
? checker.getAngularDecorators(classDecorators, ['Component'], /* isAngularCore */ false)
|
|
634
634
|
: [];
|
|
@@ -738,7 +738,7 @@ function extractTemplateWithoutCompilerAnalysis(node, checker$1, reflector, reso
|
|
|
738
738
|
if (tmplDef === null) {
|
|
739
739
|
return null;
|
|
740
740
|
}
|
|
741
|
-
return
|
|
741
|
+
return index.extractTemplate(node, tmplDef, evaluator, null, resourceLoader, {
|
|
742
742
|
enableBlockSyntax: true,
|
|
743
743
|
enableLetSyntax: true,
|
|
744
744
|
usePoisonedData: true,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v19.2.
|
|
3
|
+
* @license Angular v19.2.6
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
|
|
9
9
|
var schematics = require('@angular-devkit/schematics');
|
|
10
10
|
var p = require('path');
|
|
11
|
-
var compiler_host = require('./compiler_host-
|
|
11
|
+
var compiler_host = require('./compiler_host-BUKEE1cA.js');
|
|
12
12
|
var ts = require('typescript');
|
|
13
13
|
var ng_decorators = require('./ng_decorators-DznZ5jMl.js');
|
|
14
14
|
var imports = require('./imports-CIX-JgAN.js');
|
|
15
15
|
var nodes = require('./nodes-B16H9JUd.js');
|
|
16
16
|
var leading_space = require('./leading_space-D9nQ8UQC.js');
|
|
17
|
-
require('./checker-
|
|
17
|
+
require('./checker-DoX_7XCa.js');
|
|
18
18
|
require('os');
|
|
19
19
|
require('fs');
|
|
20
20
|
require('module');
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v19.2.
|
|
3
|
+
* @license Angular v19.2.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 checker = require('./checker-
|
|
9
|
+
var checker = require('./checker-DoX_7XCa.js');
|
|
10
10
|
var ts = require('typescript');
|
|
11
11
|
require('os');
|
|
12
12
|
var assert = require('assert');
|
|
13
|
-
var index = require('./index-
|
|
14
|
-
var project_paths = require('./project_paths-
|
|
13
|
+
var index = require('./index-CpZKzrqM.js');
|
|
14
|
+
var project_paths = require('./project_paths-C3etOlgT.js');
|
|
15
15
|
var leading_space = require('./leading_space-D9nQ8UQC.js');
|
|
16
|
-
require('./
|
|
16
|
+
require('./index-B4b0V0Vo.js');
|
|
17
17
|
require('path');
|
|
18
18
|
|
|
19
19
|
/**
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v19.2.
|
|
3
|
+
* @license Angular v19.2.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 schematics = require('@angular-devkit/schematics');
|
|
10
|
-
var project_tsconfig_paths = require('./project_tsconfig_paths-CDVxT6Ov.js');
|
|
11
|
-
var project_paths = require('./project_paths-CTgTxqrW.js');
|
|
12
|
-
require('os');
|
|
13
9
|
var ts = require('typescript');
|
|
14
|
-
|
|
15
|
-
var
|
|
10
|
+
require('os');
|
|
11
|
+
var checker = require('./checker-DoX_7XCa.js');
|
|
12
|
+
var index$1 = require('./index-B4b0V0Vo.js');
|
|
16
13
|
require('path');
|
|
17
|
-
var
|
|
18
|
-
var
|
|
14
|
+
var project_paths = require('./project_paths-C3etOlgT.js');
|
|
15
|
+
var apply_import_manager = require('./apply_import_manager-DFADpdFu.js');
|
|
16
|
+
var index = require('./index-CpZKzrqM.js');
|
|
19
17
|
require('@angular-devkit/core');
|
|
20
18
|
require('node:path/posix');
|
|
21
19
|
require('fs');
|
|
22
20
|
require('module');
|
|
23
21
|
require('url');
|
|
22
|
+
require('@angular-devkit/schematics');
|
|
23
|
+
require('./project_tsconfig_paths-CDVxT6Ov.js');
|
|
24
24
|
|
|
25
25
|
function isOutputDeclarationEligibleForMigration(node) {
|
|
26
26
|
return (node.initializer !== undefined &&
|
|
@@ -250,15 +250,15 @@ class OutputMigration extends project_paths.TsurgeFunnelMigration {
|
|
|
250
250
|
this.config = config;
|
|
251
251
|
}
|
|
252
252
|
async analyze(info) {
|
|
253
|
-
const { sourceFiles, program
|
|
253
|
+
const { sourceFiles, program } = info;
|
|
254
254
|
const outputFieldReplacements = {};
|
|
255
255
|
const problematicUsages = {};
|
|
256
256
|
let problematicDeclarationCount = 0;
|
|
257
257
|
const filesWithOutputDeclarations = new Set();
|
|
258
|
-
const checker$1 = program
|
|
258
|
+
const checker$1 = program.getTypeChecker();
|
|
259
259
|
const reflector = new checker.TypeScriptReflectionHost(checker$1);
|
|
260
|
-
const dtsReader = new
|
|
261
|
-
const evaluator = new
|
|
260
|
+
const dtsReader = new index$1.DtsMetadataReader(checker$1, reflector);
|
|
261
|
+
const evaluator = new index$1.PartialEvaluator(reflector, checker$1, null);
|
|
262
262
|
const resourceLoader = info.ngCompiler?.['resourceManager'] ?? null;
|
|
263
263
|
// Pre-analyze the program and get access to the template type checker.
|
|
264
264
|
// If we are processing a non-Angular target, there is no template info.
|
|
@@ -340,6 +340,7 @@ class OutputMigration extends project_paths.TsurgeFunnelMigration {
|
|
|
340
340
|
}
|
|
341
341
|
}
|
|
342
342
|
}
|
|
343
|
+
addCommentForEmptyEmit(node, info, checker$1, reflector, dtsReader, outputFieldReplacements);
|
|
343
344
|
// detect imports of test runners
|
|
344
345
|
if (isTestRunnerImport(node)) {
|
|
345
346
|
isTestFile = true;
|
|
@@ -502,76 +503,105 @@ function addOutputReplacement(outputFieldReplacements, outputId, file, ...replac
|
|
|
502
503
|
}
|
|
503
504
|
existingReplacements.replacements.push(...replacements);
|
|
504
505
|
}
|
|
506
|
+
function addCommentForEmptyEmit(node, info, checker, reflector, dtsReader, outputFieldReplacements) {
|
|
507
|
+
if (!isEmptyEmitCall(node))
|
|
508
|
+
return;
|
|
509
|
+
const propertyAccess = getPropertyAccess(node);
|
|
510
|
+
if (!propertyAccess)
|
|
511
|
+
return;
|
|
512
|
+
const symbol = checker.getSymbolAtLocation(propertyAccess.name);
|
|
513
|
+
if (!symbol || !symbol.declarations?.length)
|
|
514
|
+
return;
|
|
515
|
+
const propertyDeclaration = isTargetOutputDeclaration(propertyAccess, checker, reflector, dtsReader);
|
|
516
|
+
if (!propertyDeclaration)
|
|
517
|
+
return;
|
|
518
|
+
const eventEmitterType = getEventEmitterArgumentType(propertyDeclaration);
|
|
519
|
+
if (!eventEmitterType)
|
|
520
|
+
return;
|
|
521
|
+
const id = getUniqueIdForProperty(info, propertyDeclaration);
|
|
522
|
+
const file = project_paths.projectFile(node.getSourceFile(), info);
|
|
523
|
+
const formatter = getFormatterText(node);
|
|
524
|
+
const todoReplacement = new project_paths.TextUpdate({
|
|
525
|
+
toInsert: `${formatter.indent}// TODO: The 'emit' function requires a mandatory ${eventEmitterType} argument\n`,
|
|
526
|
+
end: formatter.lineStartPos,
|
|
527
|
+
position: formatter.lineStartPos,
|
|
528
|
+
});
|
|
529
|
+
addOutputReplacement(outputFieldReplacements, id, file, new project_paths.Replacement(file, todoReplacement));
|
|
530
|
+
}
|
|
531
|
+
function isEmptyEmitCall(node) {
|
|
532
|
+
return (ts.isCallExpression(node) &&
|
|
533
|
+
ts.isPropertyAccessExpression(node.expression) &&
|
|
534
|
+
node.expression.name.text === 'emit' &&
|
|
535
|
+
node.arguments.length === 0);
|
|
536
|
+
}
|
|
537
|
+
function getPropertyAccess(node) {
|
|
538
|
+
const propertyAccessExpression = node.expression.expression;
|
|
539
|
+
return ts.isPropertyAccessExpression(propertyAccessExpression) ? propertyAccessExpression : null;
|
|
540
|
+
}
|
|
541
|
+
function getEventEmitterArgumentType(propertyDeclaration) {
|
|
542
|
+
const initializer = propertyDeclaration.initializer;
|
|
543
|
+
if (!initializer || !ts.isNewExpression(initializer))
|
|
544
|
+
return null;
|
|
545
|
+
const isEventEmitter = ts.isIdentifier(initializer.expression) && initializer.expression.getText() === 'EventEmitter';
|
|
546
|
+
if (!isEventEmitter)
|
|
547
|
+
return null;
|
|
548
|
+
const [typeArg] = initializer.typeArguments ?? [];
|
|
549
|
+
return typeArg ? typeArg.getText() : null;
|
|
550
|
+
}
|
|
551
|
+
function getFormatterText(node) {
|
|
552
|
+
const sourceFile = node.getSourceFile();
|
|
553
|
+
const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
|
|
554
|
+
const lineStartPos = sourceFile.getPositionOfLineAndCharacter(line, 0);
|
|
555
|
+
const indent = sourceFile.text.slice(lineStartPos, node.getStart());
|
|
556
|
+
return { indent, lineStartPos };
|
|
557
|
+
}
|
|
505
558
|
|
|
506
559
|
function migrate(options) {
|
|
507
560
|
return async (tree, context) => {
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
561
|
+
await project_paths.runMigrationInDevkit({
|
|
562
|
+
tree,
|
|
563
|
+
getMigration: (fs) => new OutputMigration({
|
|
564
|
+
shouldMigrate: (_, file) => {
|
|
565
|
+
return (file.rootRelativePath.startsWith(fs.normalize(options.path)) &&
|
|
566
|
+
!/(^|\/)node_modules\//.test(file.rootRelativePath));
|
|
567
|
+
},
|
|
568
|
+
}),
|
|
569
|
+
beforeProgramCreation: (tsconfigPath, stage) => {
|
|
570
|
+
if (stage === project_paths.MigrationStage.Analysis) {
|
|
571
|
+
context.logger.info(`Preparing analysis for: ${tsconfigPath}...`);
|
|
572
|
+
}
|
|
573
|
+
else {
|
|
574
|
+
context.logger.info(`Running migration for: ${tsconfigPath}...`);
|
|
575
|
+
}
|
|
518
576
|
},
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
const info = migration.prepareProgram(baseInfo);
|
|
526
|
-
// Support restricting the analysis to subfolders for larger projects.
|
|
527
|
-
if (analysisPath !== '/') {
|
|
528
|
-
info.sourceFiles = info.sourceFiles.filter((sf) => sf.fileName.startsWith(analysisPath));
|
|
529
|
-
info.fullProgramSourceFiles = info.fullProgramSourceFiles.filter((sf) => sf.fileName.startsWith(analysisPath));
|
|
530
|
-
}
|
|
531
|
-
return { info, tsconfigPath };
|
|
532
|
-
});
|
|
533
|
-
// Analyze phase. Treat all projects as compilation units as
|
|
534
|
-
// this allows us to support references between those.
|
|
535
|
-
for (const { info, tsconfigPath } of programInfos) {
|
|
536
|
-
context.logger.info(`Scanning for outputs: ${tsconfigPath}..`);
|
|
537
|
-
unitResults.push(await migration.analyze(info));
|
|
538
|
-
}
|
|
539
|
-
context.logger.info(``);
|
|
540
|
-
context.logger.info(`Processing analysis data between targets..`);
|
|
541
|
-
context.logger.info(``);
|
|
542
|
-
const combined = await project_paths.synchronouslyCombineUnitData(migration, unitResults);
|
|
543
|
-
if (combined === null) {
|
|
544
|
-
context.logger.error('Migration failed unexpectedly with no analysis data');
|
|
545
|
-
return;
|
|
546
|
-
}
|
|
547
|
-
const globalMeta = await migration.globalMeta(combined);
|
|
548
|
-
const replacementsPerFile = new Map();
|
|
549
|
-
for (const { info, tsconfigPath } of programInfos) {
|
|
550
|
-
context.logger.info(`Migrating: ${tsconfigPath}..`);
|
|
551
|
-
const { replacements } = await migration.migrate(globalMeta);
|
|
552
|
-
const changesPerFile = project_paths.groupReplacementsByFile(replacements);
|
|
553
|
-
for (const [file, changes] of changesPerFile) {
|
|
554
|
-
if (!replacementsPerFile.has(file)) {
|
|
555
|
-
replacementsPerFile.set(file, changes);
|
|
577
|
+
afterProgramCreation: (info, fs) => {
|
|
578
|
+
const analysisPath = fs.resolve(options.analysisDir);
|
|
579
|
+
// Support restricting the analysis to subfolders for larger projects.
|
|
580
|
+
if (analysisPath !== '/') {
|
|
581
|
+
info.sourceFiles = info.sourceFiles.filter((sf) => sf.fileName.startsWith(analysisPath));
|
|
582
|
+
info.fullProgramSourceFiles = info.fullProgramSourceFiles.filter((sf) => sf.fileName.startsWith(analysisPath));
|
|
556
583
|
}
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
584
|
+
},
|
|
585
|
+
beforeUnitAnalysis: (tsconfigPath) => {
|
|
586
|
+
context.logger.info(`Scanning for outputs: ${tsconfigPath}...`);
|
|
587
|
+
},
|
|
588
|
+
afterAllAnalyzed: () => {
|
|
589
|
+
context.logger.info(``);
|
|
590
|
+
context.logger.info(`Processing analysis data between targets...`);
|
|
591
|
+
context.logger.info(``);
|
|
592
|
+
},
|
|
593
|
+
afterAnalysisFailure: () => {
|
|
594
|
+
context.logger.error('Migration failed unexpectedly with no analysis data');
|
|
595
|
+
},
|
|
596
|
+
whenDone: ({ counters }) => {
|
|
597
|
+
const { detectedOutputs, problematicOutputs, successRate } = counters;
|
|
598
|
+
const migratedOutputs = detectedOutputs - problematicOutputs;
|
|
599
|
+
const successRatePercent = (successRate * 100).toFixed(2);
|
|
600
|
+
context.logger.info('');
|
|
601
|
+
context.logger.info(`Successfully migrated to outputs as functions 🎉`);
|
|
602
|
+
context.logger.info(` -> Migrated ${migratedOutputs} out of ${detectedOutputs} detected outputs (${successRatePercent} %).`);
|
|
603
|
+
},
|
|
604
|
+
});
|
|
575
605
|
};
|
|
576
606
|
}
|
|
577
607
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v19.2.
|
|
3
|
+
* @license Angular v19.2.6
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
var schematics = require('@angular-devkit/schematics');
|
|
10
10
|
var p = require('path');
|
|
11
11
|
var project_tsconfig_paths = require('./project_tsconfig_paths-CDVxT6Ov.js');
|
|
12
|
-
var compiler_host = require('./compiler_host-
|
|
12
|
+
var compiler_host = require('./compiler_host-BUKEE1cA.js');
|
|
13
13
|
var ts = require('typescript');
|
|
14
14
|
var imports = require('./imports-CIX-JgAN.js');
|
|
15
15
|
require('@angular-devkit/core');
|
|
16
|
-
require('./checker-
|
|
16
|
+
require('./checker-DoX_7XCa.js');
|
|
17
17
|
require('os');
|
|
18
18
|
require('fs');
|
|
19
19
|
require('module');
|