@angular/core 20.0.0-next.6 → 20.0.0-next.7
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 → api.d-KjtSQajV.d.ts} +2 -2
- package/{ng_i18n_closure_mode.d-C9d2CaSt.d.ts → chrome_dev_tools_performance.d-qv7drdAl.d.ts} +17 -2
- package/{discovery.d-CFs2MaLO.d.ts → discovery.d-D6xf1HH-.d.ts} +4 -65
- package/event_dispatcher.d-DlbccpYq.d.ts +1 -1
- package/fesm2022/attribute-BWp59EjE.mjs +1 -1
- package/fesm2022/core.mjs +10 -21
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/{debug_node-z_3NG8qT.mjs → debug_node-B3CixwNH.mjs} +146 -78
- package/fesm2022/debug_node-B3CixwNH.mjs.map +1 -0
- package/fesm2022/primitives/di.mjs +1 -1
- package/fesm2022/primitives/event-dispatch.mjs +1 -1
- package/fesm2022/primitives/signals.mjs +1 -1
- package/fesm2022/{resource-CPPwEcg7.mjs → resource-DtpS_sTw.mjs} +3 -3
- package/fesm2022/resource-DtpS_sTw.mjs.map +1 -0
- package/fesm2022/{root_effect_scheduler-VSXfCzDX.mjs → root_effect_scheduler-BK3l7wIO.mjs} +105 -60
- package/fesm2022/root_effect_scheduler-BK3l7wIO.mjs.map +1 -0
- package/fesm2022/rxjs-interop.mjs +3 -3
- package/fesm2022/signal-B6pMq7KS.mjs +1 -1
- package/fesm2022/testing.mjs +5 -3
- package/fesm2022/testing.mjs.map +1 -1
- package/fesm2022/untracked-Bz5WMeU1.mjs +1 -1
- package/fesm2022/weak_ref-BaIq-pgY.mjs +1 -1
- package/graph.d-BcIOep_B.d.ts +1 -1
- package/index.d.ts +24 -29
- package/package.json +2 -2
- package/primitives/di/index.d.ts +1 -1
- package/primitives/event-dispatch/index.d.ts +1 -1
- package/primitives/signals/index.d.ts +1 -1
- package/rxjs-interop/index.d.ts +3 -3
- package/schematics/bundles/{apply_import_manager-DnMqg1pY.js → apply_import_manager-DczRKpTm.js} +3 -3
- package/schematics/bundles/{change_tracker-UMPkv-eH.js → change_tracker-CWLh-wes.js} +3 -3
- package/schematics/bundles/{checker-BFBQyesT.js → checker-_f5wM7PH.js} +3 -3
- package/schematics/bundles/cleanup-unused-imports.js +6 -6
- package/schematics/bundles/{compiler-BQ7R7w2v.js → compiler-BaCbbux6.js} +4 -3
- package/schematics/bundles/compiler_host-CAfDJO3W.js +1 -1
- package/schematics/bundles/control-flow-migration.js +2 -2
- package/schematics/bundles/document-core.js +6 -6
- package/schematics/bundles/imports-CIX-JgAN.js +1 -1
- package/schematics/bundles/{index-D8tMJPKa.js → index--W6S49uu.js} +5 -5
- package/schematics/bundles/{index-Cv4Q415G.js → index-rsJ8I_hu.js} +17 -41
- package/schematics/bundles/inject-flags.js +6 -6
- package/schematics/bundles/inject-migration.js +108 -19
- package/schematics/bundles/leading_space-D9nQ8UQC.js +1 -1
- package/schematics/bundles/{migrate_ts_type_references-Cq_ZBuT4.js → migrate_ts_type_references-C4D_SzJk.js} +6 -6
- package/schematics/bundles/ng_decorators-DznZ5jMl.js +1 -1
- package/schematics/bundles/nodes-B16H9JUd.js +1 -1
- package/schematics/bundles/output-migration.js +7 -7
- package/schematics/bundles/{project_paths-ql6qcf_c.js → project_paths-Ce0O2u-M.js} +4 -4
- 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 +4 -4
- package/schematics/bundles/self-closing-tags-migration.js +5 -5
- package/schematics/bundles/signal-input-migration.js +8 -8
- package/schematics/bundles/signal-queries-migration.js +8 -8
- package/schematics/bundles/signals.js +8 -8
- package/schematics/bundles/standalone-migration.js +5 -5
- package/schematics/bundles/symbol-VPWguRxr.js +1 -1
- package/schematics/bundles/test-bed-get.js +5 -5
- package/signal.d-E0e5nW1p.d.ts +1 -1
- package/testing/index.d.ts +3 -3
- package/weak_ref.d-eGOEP9S1.d.ts +1 -1
- package/fesm2022/debug_node-z_3NG8qT.mjs.map +0 -1
- package/fesm2022/resource-CPPwEcg7.mjs.map +0 -1
- package/fesm2022/root_effect_scheduler-VSXfCzDX.mjs.map +0 -1
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.0.0-next.
|
|
3
|
+
* @license Angular v20.0.0-next.7
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
7
7
|
'use strict';
|
|
8
8
|
|
|
9
|
-
var compiler = require('./compiler-
|
|
9
|
+
var compiler = require('./compiler-BaCbbux6.js');
|
|
10
10
|
var ts = require('typescript');
|
|
11
11
|
var p = require('path');
|
|
12
|
-
var checker = require('./checker-
|
|
12
|
+
var checker = require('./checker-_f5wM7PH.js');
|
|
13
13
|
require('os');
|
|
14
14
|
|
|
15
15
|
function _interopNamespaceDefault(e) {
|
|
@@ -892,7 +892,7 @@ const MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION = '18.0.0';
|
|
|
892
892
|
function compileDeclareClassMetadata(metadata) {
|
|
893
893
|
const definitionMap = new compiler.DefinitionMap();
|
|
894
894
|
definitionMap.set('minVersion', compiler.literal(MINIMUM_PARTIAL_LINKER_VERSION$5));
|
|
895
|
-
definitionMap.set('version', compiler.literal('20.0.0-next.
|
|
895
|
+
definitionMap.set('version', compiler.literal('20.0.0-next.7'));
|
|
896
896
|
definitionMap.set('ngImport', compiler.importExpr(compiler.Identifiers.core));
|
|
897
897
|
definitionMap.set('type', metadata.type);
|
|
898
898
|
definitionMap.set('decorators', metadata.decorators);
|
|
@@ -910,7 +910,7 @@ function compileComponentDeclareClassMetadata(metadata, dependencies) {
|
|
|
910
910
|
callbackReturnDefinitionMap.set('ctorParameters', metadata.ctorParameters ?? compiler.literal(null));
|
|
911
911
|
callbackReturnDefinitionMap.set('propDecorators', metadata.propDecorators ?? compiler.literal(null));
|
|
912
912
|
definitionMap.set('minVersion', compiler.literal(MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION));
|
|
913
|
-
definitionMap.set('version', compiler.literal('20.0.0-next.
|
|
913
|
+
definitionMap.set('version', compiler.literal('20.0.0-next.7'));
|
|
914
914
|
definitionMap.set('ngImport', compiler.importExpr(compiler.Identifiers.core));
|
|
915
915
|
definitionMap.set('type', metadata.type);
|
|
916
916
|
definitionMap.set('resolveDeferredDeps', compileComponentMetadataAsyncResolver(dependencies));
|
|
@@ -1005,7 +1005,7 @@ function createDirectiveDefinitionMap(meta) {
|
|
|
1005
1005
|
const definitionMap = new compiler.DefinitionMap();
|
|
1006
1006
|
const minVersion = getMinimumVersionForPartialOutput(meta);
|
|
1007
1007
|
definitionMap.set('minVersion', compiler.literal(minVersion));
|
|
1008
|
-
definitionMap.set('version', compiler.literal('20.0.0-next.
|
|
1008
|
+
definitionMap.set('version', compiler.literal('20.0.0-next.7'));
|
|
1009
1009
|
// e.g. `type: MyDirective`
|
|
1010
1010
|
definitionMap.set('type', meta.type.value);
|
|
1011
1011
|
if (meta.isStandalone !== undefined) {
|
|
@@ -1421,7 +1421,7 @@ const MINIMUM_PARTIAL_LINKER_VERSION$4 = '12.0.0';
|
|
|
1421
1421
|
function compileDeclareFactoryFunction(meta) {
|
|
1422
1422
|
const definitionMap = new compiler.DefinitionMap();
|
|
1423
1423
|
definitionMap.set('minVersion', compiler.literal(MINIMUM_PARTIAL_LINKER_VERSION$4));
|
|
1424
|
-
definitionMap.set('version', compiler.literal('20.0.0-next.
|
|
1424
|
+
definitionMap.set('version', compiler.literal('20.0.0-next.7'));
|
|
1425
1425
|
definitionMap.set('ngImport', compiler.importExpr(compiler.Identifiers.core));
|
|
1426
1426
|
definitionMap.set('type', meta.type.value);
|
|
1427
1427
|
definitionMap.set('deps', compileDependencies(meta.deps));
|
|
@@ -1456,7 +1456,7 @@ function compileDeclareInjectableFromMetadata(meta) {
|
|
|
1456
1456
|
function createInjectableDefinitionMap(meta) {
|
|
1457
1457
|
const definitionMap = new compiler.DefinitionMap();
|
|
1458
1458
|
definitionMap.set('minVersion', compiler.literal(MINIMUM_PARTIAL_LINKER_VERSION$3));
|
|
1459
|
-
definitionMap.set('version', compiler.literal('20.0.0-next.
|
|
1459
|
+
definitionMap.set('version', compiler.literal('20.0.0-next.7'));
|
|
1460
1460
|
definitionMap.set('ngImport', compiler.importExpr(compiler.Identifiers.core));
|
|
1461
1461
|
definitionMap.set('type', meta.type.value);
|
|
1462
1462
|
// Only generate providedIn property if it has a non-null value
|
|
@@ -1507,7 +1507,7 @@ function compileDeclareInjectorFromMetadata(meta) {
|
|
|
1507
1507
|
function createInjectorDefinitionMap(meta) {
|
|
1508
1508
|
const definitionMap = new compiler.DefinitionMap();
|
|
1509
1509
|
definitionMap.set('minVersion', compiler.literal(MINIMUM_PARTIAL_LINKER_VERSION$2));
|
|
1510
|
-
definitionMap.set('version', compiler.literal('20.0.0-next.
|
|
1510
|
+
definitionMap.set('version', compiler.literal('20.0.0-next.7'));
|
|
1511
1511
|
definitionMap.set('ngImport', compiler.importExpr(compiler.Identifiers.core));
|
|
1512
1512
|
definitionMap.set('type', meta.type.value);
|
|
1513
1513
|
definitionMap.set('providers', meta.providers);
|
|
@@ -1540,7 +1540,7 @@ function createNgModuleDefinitionMap(meta) {
|
|
|
1540
1540
|
throw new Error('Invalid path! Local compilation mode should not get into the partial compilation path');
|
|
1541
1541
|
}
|
|
1542
1542
|
definitionMap.set('minVersion', compiler.literal(MINIMUM_PARTIAL_LINKER_VERSION$1));
|
|
1543
|
-
definitionMap.set('version', compiler.literal('20.0.0-next.
|
|
1543
|
+
definitionMap.set('version', compiler.literal('20.0.0-next.7'));
|
|
1544
1544
|
definitionMap.set('ngImport', compiler.importExpr(compiler.Identifiers.core));
|
|
1545
1545
|
definitionMap.set('type', meta.type.value);
|
|
1546
1546
|
// We only generate the keys in the metadata if the arrays contain values.
|
|
@@ -1591,7 +1591,7 @@ function compileDeclarePipeFromMetadata(meta) {
|
|
|
1591
1591
|
function createPipeDefinitionMap(meta) {
|
|
1592
1592
|
const definitionMap = new compiler.DefinitionMap();
|
|
1593
1593
|
definitionMap.set('minVersion', compiler.literal(MINIMUM_PARTIAL_LINKER_VERSION));
|
|
1594
|
-
definitionMap.set('version', compiler.literal('20.0.0-next.
|
|
1594
|
+
definitionMap.set('version', compiler.literal('20.0.0-next.7'));
|
|
1595
1595
|
definitionMap.set('ngImport', compiler.importExpr(compiler.Identifiers.core));
|
|
1596
1596
|
// e.g. `type: MyPipe`
|
|
1597
1597
|
definitionMap.set('type', meta.type.value);
|
|
@@ -10870,7 +10870,7 @@ class PipeDecoratorHandler {
|
|
|
10870
10870
|
* @description
|
|
10871
10871
|
* Entry point for all public APIs of the compiler-cli package.
|
|
10872
10872
|
*/
|
|
10873
|
-
new compiler.Version('20.0.0-next.
|
|
10873
|
+
new compiler.Version('20.0.0-next.7');
|
|
10874
10874
|
|
|
10875
10875
|
/**
|
|
10876
10876
|
* Whether a given decorator should be treated as an Angular decorator.
|
|
@@ -16104,28 +16104,6 @@ class SourceFileValidator {
|
|
|
16104
16104
|
}
|
|
16105
16105
|
}
|
|
16106
16106
|
|
|
16107
|
-
function coreHasSymbol(program, symbol) {
|
|
16108
|
-
const checker = program.getTypeChecker();
|
|
16109
|
-
for (const sf of program.getSourceFiles().filter(isMaybeCore)) {
|
|
16110
|
-
const sym = checker.getSymbolAtLocation(sf);
|
|
16111
|
-
if (sym === undefined || sym.exports === undefined) {
|
|
16112
|
-
continue;
|
|
16113
|
-
}
|
|
16114
|
-
if (!sym.exports.has('ɵɵtemplate')) {
|
|
16115
|
-
// This is not @angular/core.
|
|
16116
|
-
continue;
|
|
16117
|
-
}
|
|
16118
|
-
return sym.exports.has(symbol.name);
|
|
16119
|
-
}
|
|
16120
|
-
// No @angular/core file found, so we have no information.
|
|
16121
|
-
return null;
|
|
16122
|
-
}
|
|
16123
|
-
function isMaybeCore(sf) {
|
|
16124
|
-
return (sf.isDeclarationFile &&
|
|
16125
|
-
sf.fileName.includes('@angular/core') &&
|
|
16126
|
-
sf.fileName.endsWith('index.d.ts'));
|
|
16127
|
-
}
|
|
16128
|
-
|
|
16129
16107
|
function getDefaultExportFromCjs (x) {
|
|
16130
16108
|
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
|
|
16131
16109
|
}
|
|
@@ -18801,7 +18779,7 @@ var semver = /*@__PURE__*/getDefaultExportFromCjs(semverExports);
|
|
|
18801
18779
|
* @param minVersion Minimum required version for the feature.
|
|
18802
18780
|
*/
|
|
18803
18781
|
function coreVersionSupportsFeature(coreVersion, minVersion) {
|
|
18804
|
-
// A version of `20.0.0-next.
|
|
18782
|
+
// A version of `20.0.0-next.7` usually means that core is at head so it supports
|
|
18805
18783
|
// all features. Use string interpolation prevent the placeholder from being replaced
|
|
18806
18784
|
// with the current version during build time.
|
|
18807
18785
|
if (coreVersion === `0.0.0-${'PLACEHOLDER'}`) {
|
|
@@ -19406,13 +19384,11 @@ class NgCompiler {
|
|
|
19406
19384
|
const useInlineTypeConstructors = this.programDriver.supportsInlineOperations;
|
|
19407
19385
|
const checkTwoWayBoundEvents = this.options['_checkTwoWayBoundEvents'] ?? false;
|
|
19408
19386
|
// Check whether the loaded version of `@angular/core` in the `ts.Program` supports unwrapping
|
|
19409
|
-
// writable signals for type-checking.
|
|
19410
|
-
//
|
|
19411
|
-
// to type check signals in two-way bindings. We also allow version 0.0.0 in case somebody is
|
|
19387
|
+
// writable signals for type-checking. Only Angular versions greater than 17.2 have the necessary
|
|
19388
|
+
// symbols to type check signals in two-way bindings. We also allow version 0.0.0 in case somebody is
|
|
19412
19389
|
// using Angular at head.
|
|
19413
|
-
|
|
19414
|
-
(this.angularCoreVersion
|
|
19415
|
-
coreVersionSupportsFeature(this.angularCoreVersion, '>= 17.2.0'));
|
|
19390
|
+
const allowSignalsInTwoWayBindings = this.angularCoreVersion === null ||
|
|
19391
|
+
coreVersionSupportsFeature(this.angularCoreVersion, '>= 17.2.0-0');
|
|
19416
19392
|
// First select a type-checking configuration, based on whether full template type-checking is
|
|
19417
19393
|
// requested.
|
|
19418
19394
|
let typeCheckingConfig;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.0.0-next.
|
|
3
|
+
* @license Angular v20.0.0-next.7
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
|
|
9
9
|
var ts = require('typescript');
|
|
10
10
|
require('os');
|
|
11
|
-
var checker = require('./checker-
|
|
12
|
-
require('./compiler-
|
|
13
|
-
require('./index-
|
|
11
|
+
var checker = require('./checker-_f5wM7PH.js');
|
|
12
|
+
require('./compiler-BaCbbux6.js');
|
|
13
|
+
require('./index-rsJ8I_hu.js');
|
|
14
14
|
require('path');
|
|
15
|
-
var project_paths = require('./project_paths-
|
|
16
|
-
var apply_import_manager = require('./apply_import_manager-
|
|
15
|
+
var project_paths = require('./project_paths-Ce0O2u-M.js');
|
|
16
|
+
var apply_import_manager = require('./apply_import_manager-DczRKpTm.js');
|
|
17
17
|
var imports = require('./imports-CIX-JgAN.js');
|
|
18
18
|
require('@angular-devkit/core');
|
|
19
19
|
require('node:path/posix');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.0.0-next.
|
|
3
|
+
* @license Angular v20.0.0-next.7
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
@@ -8,15 +8,15 @@
|
|
|
8
8
|
|
|
9
9
|
var schematics = require('@angular-devkit/schematics');
|
|
10
10
|
var p = require('path');
|
|
11
|
-
var change_tracker = require('./change_tracker-
|
|
11
|
+
var change_tracker = require('./change_tracker-CWLh-wes.js');
|
|
12
12
|
var compiler_host = require('./compiler_host-CAfDJO3W.js');
|
|
13
13
|
var ts = require('typescript');
|
|
14
14
|
var ng_decorators = require('./ng_decorators-DznZ5jMl.js');
|
|
15
15
|
var imports = require('./imports-CIX-JgAN.js');
|
|
16
16
|
var nodes = require('./nodes-B16H9JUd.js');
|
|
17
17
|
var leading_space = require('./leading_space-D9nQ8UQC.js');
|
|
18
|
-
require('./compiler-
|
|
19
|
-
require('./checker-
|
|
18
|
+
require('./compiler-BaCbbux6.js');
|
|
19
|
+
require('./checker-_f5wM7PH.js');
|
|
20
20
|
require('os');
|
|
21
21
|
require('fs');
|
|
22
22
|
require('module');
|
|
@@ -373,7 +373,7 @@ function isInlineFunction(node) {
|
|
|
373
373
|
* @param constructor Constructor declaration of the class being migrated.
|
|
374
374
|
* @param localTypeChecker Type checker scoped to the current file.
|
|
375
375
|
*/
|
|
376
|
-
function findUninitializedPropertiesToCombine(node, constructor, localTypeChecker) {
|
|
376
|
+
function findUninitializedPropertiesToCombine(node, constructor, localTypeChecker, options) {
|
|
377
377
|
let toCombine = null;
|
|
378
378
|
let toHoist = [];
|
|
379
379
|
const membersToDeclarations = new Map();
|
|
@@ -391,10 +391,13 @@ function findUninitializedPropertiesToCombine(node, constructor, localTypeChecke
|
|
|
391
391
|
if (memberInitializers === null) {
|
|
392
392
|
return null;
|
|
393
393
|
}
|
|
394
|
+
const inlinableParameters = options._internalReplaceParameterReferencesInInitializers
|
|
395
|
+
? findInlinableParameterReferences(constructor, localTypeChecker)
|
|
396
|
+
: new Set();
|
|
394
397
|
for (const [name, decl] of membersToDeclarations.entries()) {
|
|
395
398
|
if (memberInitializers.has(name)) {
|
|
396
399
|
const initializer = memberInitializers.get(name);
|
|
397
|
-
if (!hasLocalReferences(initializer, constructor, localTypeChecker)) {
|
|
400
|
+
if (!hasLocalReferences(initializer, constructor, inlinableParameters, localTypeChecker)) {
|
|
398
401
|
toCombine ??= [];
|
|
399
402
|
toCombine.push({ declaration: membersToDeclarations.get(name), initializer });
|
|
400
403
|
}
|
|
@@ -536,13 +539,70 @@ function getMemberInitializers(constructor) {
|
|
|
536
539
|
}
|
|
537
540
|
return memberInitializers;
|
|
538
541
|
}
|
|
542
|
+
/**
|
|
543
|
+
* Checks if the node is an identifier that references a property from the given
|
|
544
|
+
* list. Returns the property if it is.
|
|
545
|
+
*/
|
|
546
|
+
function getIdentifierReferencingProperty(node, localTypeChecker, propertyNames, properties) {
|
|
547
|
+
if (!ts.isIdentifier(node) || !propertyNames.has(node.text)) {
|
|
548
|
+
return undefined;
|
|
549
|
+
}
|
|
550
|
+
const declarations = localTypeChecker.getSymbolAtLocation(node)?.declarations;
|
|
551
|
+
if (!declarations) {
|
|
552
|
+
return undefined;
|
|
553
|
+
}
|
|
554
|
+
for (const decl of declarations) {
|
|
555
|
+
if (properties.has(decl)) {
|
|
556
|
+
return decl;
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
return undefined;
|
|
560
|
+
}
|
|
561
|
+
/**
|
|
562
|
+
* Returns true if the node introduces a new `this` scope (so we can't
|
|
563
|
+
* reference the outer this).
|
|
564
|
+
*/
|
|
565
|
+
function introducesNewThisScope(node) {
|
|
566
|
+
return (ts.isFunctionDeclaration(node) ||
|
|
567
|
+
ts.isFunctionExpression(node) ||
|
|
568
|
+
ts.isMethodDeclaration(node) ||
|
|
569
|
+
ts.isClassDeclaration(node) ||
|
|
570
|
+
ts.isClassExpression(node));
|
|
571
|
+
}
|
|
572
|
+
/**
|
|
573
|
+
* Finds constructor parameter references which can be inlined as `this.prop`.
|
|
574
|
+
* - prop must be a readonly property
|
|
575
|
+
* - the reference can't be in a nested function where `this` might refer
|
|
576
|
+
* to something else
|
|
577
|
+
*/
|
|
578
|
+
function findInlinableParameterReferences(constructorDeclaration, localTypeChecker) {
|
|
579
|
+
const eligibleProperties = constructorDeclaration.parameters.filter((p) => ts.isIdentifier(p.name) && p.modifiers?.some((s) => s.kind === ts.SyntaxKind.ReadonlyKeyword));
|
|
580
|
+
const eligibleNames = new Set(eligibleProperties.map((p) => p.name.text));
|
|
581
|
+
const eligiblePropertiesSet = new Set(eligibleProperties);
|
|
582
|
+
function walk(node, canReferenceThis) {
|
|
583
|
+
const property = getIdentifierReferencingProperty(node, localTypeChecker, eligibleNames, eligiblePropertiesSet);
|
|
584
|
+
if (property && !canReferenceThis) {
|
|
585
|
+
// The property is referenced in a nested context where
|
|
586
|
+
// we can't use `this`, so we can't inline it.
|
|
587
|
+
eligiblePropertiesSet.delete(property);
|
|
588
|
+
}
|
|
589
|
+
else if (introducesNewThisScope(node)) {
|
|
590
|
+
canReferenceThis = false;
|
|
591
|
+
}
|
|
592
|
+
ts.forEachChild(node, (child) => {
|
|
593
|
+
walk(child, canReferenceThis);
|
|
594
|
+
});
|
|
595
|
+
}
|
|
596
|
+
walk(constructorDeclaration, true);
|
|
597
|
+
return eligiblePropertiesSet;
|
|
598
|
+
}
|
|
539
599
|
/**
|
|
540
600
|
* Determines if a node has references to local symbols defined in the constructor.
|
|
541
601
|
* @param root Expression to check for local references.
|
|
542
602
|
* @param constructor Constructor within which the expression is used.
|
|
543
603
|
* @param localTypeChecker Type checker scoped to the current file.
|
|
544
604
|
*/
|
|
545
|
-
function hasLocalReferences(root, constructor, localTypeChecker) {
|
|
605
|
+
function hasLocalReferences(root, constructor, allowedParameters, localTypeChecker) {
|
|
546
606
|
const sourceFile = root.getSourceFile();
|
|
547
607
|
let hasLocalRefs = false;
|
|
548
608
|
const walk = (node) => {
|
|
@@ -564,7 +624,8 @@ function hasLocalReferences(root, constructor, localTypeChecker) {
|
|
|
564
624
|
// The source file check is a bit redundant since the type checker
|
|
565
625
|
// is local to the file, but it's inexpensive and it can prevent
|
|
566
626
|
// bugs in the future if we decide to use a full type checker.
|
|
567
|
-
|
|
627
|
+
!allowedParameters.has(decl) &&
|
|
628
|
+
decl.getSourceFile() === sourceFile &&
|
|
568
629
|
decl.getStart() >= constructor.getStart() &&
|
|
569
630
|
decl.getEnd() <= constructor.getEnd() &&
|
|
570
631
|
!isInsideInlineFunction(decl, constructor));
|
|
@@ -628,7 +689,7 @@ function migrateFile(sourceFile, options) {
|
|
|
628
689
|
const removedStatements = new Set();
|
|
629
690
|
const removedMembers = new Set();
|
|
630
691
|
if (options._internalCombineMemberInitializers) {
|
|
631
|
-
applyInternalOnlyChanges(node, constructor, localTypeChecker, tracker, printer, removedStatements, removedMembers, prependToClass, afterInjectCalls, memberIndentation);
|
|
692
|
+
applyInternalOnlyChanges(node, constructor, localTypeChecker, tracker, printer, removedStatements, removedMembers, prependToClass, afterInjectCalls, memberIndentation, options);
|
|
632
693
|
}
|
|
633
694
|
migrateClass(node, constructor, superCall, options, memberIndentation, prependToClass, afterInjectCalls, removedStatements, removedMembers, localTypeChecker, printer, tracker);
|
|
634
695
|
});
|
|
@@ -1099,8 +1160,8 @@ function getNextPreservedStatement(startNode, removedStatements) {
|
|
|
1099
1160
|
* @param afterInjectCalls Text that will be inserted after the newly-added `inject` calls.
|
|
1100
1161
|
* @param memberIndentation Indentation string of the class' members.
|
|
1101
1162
|
*/
|
|
1102
|
-
function applyInternalOnlyChanges(node, constructor, localTypeChecker, tracker, printer, removedStatements, removedMembers, prependToClass, afterInjectCalls, memberIndentation) {
|
|
1103
|
-
const result = findUninitializedPropertiesToCombine(node, constructor, localTypeChecker);
|
|
1163
|
+
function applyInternalOnlyChanges(node, constructor, localTypeChecker, tracker, printer, removedStatements, removedMembers, prependToClass, afterInjectCalls, memberIndentation, options) {
|
|
1164
|
+
const result = findUninitializedPropertiesToCombine(node, constructor, localTypeChecker, options);
|
|
1104
1165
|
if (result === null) {
|
|
1105
1166
|
return;
|
|
1106
1167
|
}
|
|
@@ -1113,21 +1174,25 @@ function applyInternalOnlyChanges(node, constructor, localTypeChecker, tracker,
|
|
|
1113
1174
|
}
|
|
1114
1175
|
result.toCombine.forEach(({ declaration, initializer }) => {
|
|
1115
1176
|
const initializerStatement = nodes.closestNode(initializer, ts.isStatement);
|
|
1177
|
+
// Strip comments if we are just going modify the node in-place.
|
|
1178
|
+
const modifiers = preserveInitOrder
|
|
1179
|
+
? declaration.modifiers
|
|
1180
|
+
: cloneModifiers(declaration.modifiers);
|
|
1181
|
+
const name = preserveInitOrder ? declaration.name : cloneName(declaration.name);
|
|
1182
|
+
const newProperty = ts.factory.createPropertyDeclaration(modifiers, name, declaration.questionToken, declaration.type, undefined);
|
|
1183
|
+
const propText = printer.printNode(ts.EmitHint.Unspecified, newProperty, declaration.getSourceFile());
|
|
1184
|
+
const initializerText = replaceParameterReferencesInInitializer(initializer, constructor, localTypeChecker);
|
|
1185
|
+
const withInitializer = `${propText.slice(0, -1)} = ${initializerText};`;
|
|
1116
1186
|
// If the initialization order is being preserved, we have to remove the original
|
|
1117
1187
|
// declaration and re-declare it. Otherwise we can do the replacement in-place.
|
|
1118
1188
|
if (preserveInitOrder) {
|
|
1119
|
-
// Preserve comment in the new property since we are removing the entire node.
|
|
1120
|
-
const newProperty = ts.factory.createPropertyDeclaration(declaration.modifiers, declaration.name, declaration.questionToken, declaration.type, initializer);
|
|
1121
1189
|
tracker.removeNode(declaration, true);
|
|
1122
1190
|
removedMembers.add(declaration);
|
|
1123
|
-
afterInjectCalls.push(memberIndentation +
|
|
1124
|
-
printer.printNode(ts.EmitHint.Unspecified, newProperty, declaration.getSourceFile()));
|
|
1191
|
+
afterInjectCalls.push(memberIndentation + withInitializer);
|
|
1125
1192
|
}
|
|
1126
1193
|
else {
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
const newProperty = ts.factory.createPropertyDeclaration(cloneModifiers(declaration.modifiers), cloneName(declaration.name), declaration.questionToken, declaration.type, initializer);
|
|
1130
|
-
tracker.replaceNode(declaration, newProperty);
|
|
1194
|
+
const sourceFile = declaration.getSourceFile();
|
|
1195
|
+
tracker.replaceText(sourceFile, declaration.getStart(), declaration.getWidth(), withInitializer);
|
|
1131
1196
|
}
|
|
1132
1197
|
// This should always be defined, but null check it just in case.
|
|
1133
1198
|
if (initializerStatement) {
|
|
@@ -1145,6 +1210,30 @@ function applyInternalOnlyChanges(node, constructor, localTypeChecker, tracker,
|
|
|
1145
1210
|
prependToClass.push('');
|
|
1146
1211
|
}
|
|
1147
1212
|
}
|
|
1213
|
+
function replaceParameterReferencesInInitializer(initializer, constructor, localTypeChecker) {
|
|
1214
|
+
// 1. Collect the locations of identifier nodes that reference constructor parameters.
|
|
1215
|
+
// 2. Add `this.` to those locations.
|
|
1216
|
+
const insertLocations = [0];
|
|
1217
|
+
function walk(node) {
|
|
1218
|
+
if (ts.isIdentifier(node) &&
|
|
1219
|
+
!(ts.isPropertyAccessExpression(node.parent) && node === node.parent.name) &&
|
|
1220
|
+
localTypeChecker
|
|
1221
|
+
.getSymbolAtLocation(node)
|
|
1222
|
+
?.declarations?.some((decl) => constructor.parameters.includes(decl))) {
|
|
1223
|
+
insertLocations.push(node.getStart() - initializer.getStart());
|
|
1224
|
+
}
|
|
1225
|
+
ts.forEachChild(node, walk);
|
|
1226
|
+
}
|
|
1227
|
+
walk(initializer);
|
|
1228
|
+
const initializerText = initializer.getText();
|
|
1229
|
+
insertLocations.push(initializerText.length);
|
|
1230
|
+
insertLocations.sort((a, b) => a - b);
|
|
1231
|
+
const result = [];
|
|
1232
|
+
for (let i = 0; i < insertLocations.length - 1; i++) {
|
|
1233
|
+
result.push(initializerText.slice(insertLocations[i], insertLocations[i + 1]));
|
|
1234
|
+
}
|
|
1235
|
+
return result.join('this.');
|
|
1236
|
+
}
|
|
1148
1237
|
|
|
1149
1238
|
function migrate(options) {
|
|
1150
1239
|
return async (tree) => {
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.0.0-next.
|
|
3
|
+
* @license Angular v20.0.0-next.7
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
7
7
|
'use strict';
|
|
8
8
|
|
|
9
|
-
require('./compiler-
|
|
9
|
+
require('./compiler-BaCbbux6.js');
|
|
10
10
|
var ts = require('typescript');
|
|
11
|
-
var checker = require('./checker-
|
|
11
|
+
var checker = require('./checker-_f5wM7PH.js');
|
|
12
12
|
require('os');
|
|
13
13
|
var assert = require('assert');
|
|
14
|
-
var index = require('./index
|
|
15
|
-
var project_paths = require('./project_paths-
|
|
14
|
+
var index = require('./index--W6S49uu.js');
|
|
15
|
+
var project_paths = require('./project_paths-Ce0O2u-M.js');
|
|
16
16
|
var leading_space = require('./leading_space-D9nQ8UQC.js');
|
|
17
|
-
require('./index-
|
|
17
|
+
require('./index-rsJ8I_hu.js');
|
|
18
18
|
require('path');
|
|
19
19
|
|
|
20
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.7
|
|
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 ts = require('typescript');
|
|
10
10
|
require('os');
|
|
11
|
-
var checker = require('./checker-
|
|
12
|
-
var compiler = require('./compiler-
|
|
13
|
-
var index$1 = require('./index-
|
|
11
|
+
var checker = require('./checker-_f5wM7PH.js');
|
|
12
|
+
var compiler = require('./compiler-BaCbbux6.js');
|
|
13
|
+
var index$1 = require('./index-rsJ8I_hu.js');
|
|
14
14
|
require('path');
|
|
15
|
-
var project_paths = require('./project_paths-
|
|
16
|
-
var apply_import_manager = require('./apply_import_manager-
|
|
17
|
-
var index = require('./index
|
|
15
|
+
var project_paths = require('./project_paths-Ce0O2u-M.js');
|
|
16
|
+
var apply_import_manager = require('./apply_import_manager-DczRKpTm.js');
|
|
17
|
+
var index = require('./index--W6S49uu.js');
|
|
18
18
|
require('@angular-devkit/core');
|
|
19
19
|
require('node:path/posix');
|
|
20
20
|
require('fs');
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.0.0-next.
|
|
3
|
+
* @license Angular v20.0.0-next.7
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
7
7
|
'use strict';
|
|
8
8
|
|
|
9
|
-
var index = require('./index-
|
|
9
|
+
var index = require('./index-rsJ8I_hu.js');
|
|
10
10
|
var schematics = require('@angular-devkit/schematics');
|
|
11
11
|
var core = require('@angular-devkit/core');
|
|
12
12
|
var posixPath = require('node:path/posix');
|
|
13
13
|
var os = require('os');
|
|
14
14
|
var ts = require('typescript');
|
|
15
|
-
var checker = require('./checker-
|
|
16
|
-
require('./compiler-
|
|
15
|
+
var checker = require('./checker-_f5wM7PH.js');
|
|
16
|
+
require('./compiler-BaCbbux6.js');
|
|
17
17
|
require('path');
|
|
18
18
|
var project_tsconfig_paths = require('./project_tsconfig_paths-CDVxT6Ov.js');
|
|
19
19
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.0.0-next.
|
|
3
|
+
* @license Angular v20.0.0-next.7
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
@@ -9,13 +9,13 @@
|
|
|
9
9
|
var schematics = require('@angular-devkit/schematics');
|
|
10
10
|
var fs = require('fs');
|
|
11
11
|
var p = require('path');
|
|
12
|
-
var change_tracker = require('./change_tracker-
|
|
12
|
+
var change_tracker = require('./change_tracker-CWLh-wes.js');
|
|
13
13
|
var project_tsconfig_paths = require('./project_tsconfig_paths-CDVxT6Ov.js');
|
|
14
14
|
var compiler_host = require('./compiler_host-CAfDJO3W.js');
|
|
15
15
|
var ts = require('typescript');
|
|
16
|
-
var checker = require('./checker-
|
|
16
|
+
var checker = require('./checker-_f5wM7PH.js');
|
|
17
17
|
var property_name = require('./property_name-BBwFuqMe.js');
|
|
18
|
-
require('./compiler-
|
|
18
|
+
require('./compiler-BaCbbux6.js');
|
|
19
19
|
require('os');
|
|
20
20
|
require('@angular-devkit/core');
|
|
21
21
|
require('module');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.0.0-next.
|
|
3
|
+
* @license Angular v20.0.0-next.7
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
|
|
9
9
|
var ts = require('typescript');
|
|
10
10
|
require('os');
|
|
11
|
-
var checker = require('./checker-
|
|
12
|
-
var compiler = require('./compiler-
|
|
13
|
-
require('./index-
|
|
11
|
+
var checker = require('./checker-_f5wM7PH.js');
|
|
12
|
+
var compiler = require('./compiler-BaCbbux6.js');
|
|
13
|
+
require('./index-rsJ8I_hu.js');
|
|
14
14
|
require('path');
|
|
15
|
-
var project_paths = require('./project_paths-
|
|
15
|
+
var project_paths = require('./project_paths-Ce0O2u-M.js');
|
|
16
16
|
var ng_decorators = require('./ng_decorators-DznZ5jMl.js');
|
|
17
17
|
var property_name = require('./property_name-BBwFuqMe.js');
|
|
18
18
|
require('@angular-devkit/core');
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.0.0-next.
|
|
3
|
+
* @license Angular v20.0.0-next.7
|
|
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-C4D_SzJk.js');
|
|
10
10
|
var ts = require('typescript');
|
|
11
11
|
require('os');
|
|
12
|
-
var checker = require('./checker-
|
|
13
|
-
require('./compiler-
|
|
14
|
-
var index$1 = require('./index-
|
|
12
|
+
var checker = require('./checker-_f5wM7PH.js');
|
|
13
|
+
require('./compiler-BaCbbux6.js');
|
|
14
|
+
var index$1 = require('./index-rsJ8I_hu.js');
|
|
15
15
|
require('path');
|
|
16
|
-
var project_paths = require('./project_paths-
|
|
17
|
-
var index = require('./index
|
|
16
|
+
var project_paths = require('./project_paths-Ce0O2u-M.js');
|
|
17
|
+
var index = require('./index--W6S49uu.js');
|
|
18
18
|
var assert = require('assert');
|
|
19
|
-
var apply_import_manager = require('./apply_import_manager-
|
|
19
|
+
var apply_import_manager = require('./apply_import_manager-DczRKpTm.js');
|
|
20
20
|
require('@angular-devkit/core');
|
|
21
21
|
require('node:path/posix');
|
|
22
22
|
require('./leading_space-D9nQ8UQC.js');
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* @license Angular v20.0.0-next.
|
|
3
|
+
* @license Angular v20.0.0-next.7
|
|
4
4
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
7
7
|
'use strict';
|
|
8
8
|
|
|
9
|
-
var compiler = require('./compiler-
|
|
9
|
+
var compiler = require('./compiler-BaCbbux6.js');
|
|
10
10
|
var ts = require('typescript');
|
|
11
|
-
var checker = require('./checker-
|
|
11
|
+
var checker = require('./checker-_f5wM7PH.js');
|
|
12
12
|
require('os');
|
|
13
|
-
var index$1 = require('./index-
|
|
13
|
+
var index$1 = require('./index-rsJ8I_hu.js');
|
|
14
14
|
require('path');
|
|
15
|
-
var project_paths = require('./project_paths-
|
|
16
|
-
var apply_import_manager = require('./apply_import_manager-
|
|
17
|
-
var migrate_ts_type_references = require('./migrate_ts_type_references-
|
|
15
|
+
var project_paths = require('./project_paths-Ce0O2u-M.js');
|
|
16
|
+
var apply_import_manager = require('./apply_import_manager-DczRKpTm.js');
|
|
17
|
+
var migrate_ts_type_references = require('./migrate_ts_type_references-C4D_SzJk.js');
|
|
18
18
|
var assert = require('assert');
|
|
19
|
-
var index = require('./index
|
|
19
|
+
var index = require('./index--W6S49uu.js');
|
|
20
20
|
require('@angular-devkit/core');
|
|
21
21
|
require('node:path/posix');
|
|
22
22
|
require('fs');
|