@angular/core 19.1.0-next.0 → 19.1.0-next.2

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.
Files changed (34) hide show
  1. package/fesm2022/core.mjs +295 -300
  2. package/fesm2022/core.mjs.map +1 -1
  3. package/fesm2022/primitives/event-dispatch.mjs +1 -1
  4. package/fesm2022/primitives/signals.mjs +4 -1
  5. package/fesm2022/primitives/signals.mjs.map +1 -1
  6. package/fesm2022/rxjs-interop.mjs +1 -1
  7. package/fesm2022/testing.mjs +8 -8
  8. package/fesm2022/testing.mjs.map +1 -1
  9. package/index.d.ts +150 -139
  10. package/package.json +1 -1
  11. package/primitives/event-dispatch/index.d.ts +1 -1
  12. package/primitives/signals/index.d.ts +10 -1
  13. package/rxjs-interop/index.d.ts +1 -1
  14. package/schematics/bundles/{checker-3cbc9cc1.js → checker-c58f97d2.js} +49 -50
  15. package/schematics/bundles/{combine_units-ab03aca8.js → combine_units-8b29b7f6.js} +3 -3
  16. package/schematics/bundles/{compiler_host-087c5caa.js → compiler_host-f5d588fe.js} +2 -2
  17. package/schematics/bundles/control-flow-migration.js +3 -3
  18. package/schematics/bundles/explicit-standalone-flag.js +5 -5
  19. package/schematics/bundles/{imports-4ac08251.js → imports-31a38653.js} +2 -2
  20. package/schematics/bundles/inject-migration.js +64 -43
  21. package/schematics/bundles/{leading_space-d190b83b.js → leading_space-6e7a8ec6.js} +1 -1
  22. package/schematics/bundles/{migrate_ts_type_references-efb52bf2.js → migrate_ts_type_references-a8676ec1.js} +9 -9
  23. package/schematics/bundles/{nodes-0e7d45ca.js → nodes-88c2157f.js} +2 -2
  24. package/schematics/bundles/output-migration.js +5 -5
  25. package/schematics/bundles/pending-tasks.js +5 -5
  26. package/schematics/bundles/{program-ed10d149.js → program-30e02255.js} +54 -30
  27. package/schematics/bundles/{project_tsconfig_paths-e9ccccbf.js → project_tsconfig_paths-6c9cde78.js} +1 -1
  28. package/schematics/bundles/provide-initializer.js +5 -5
  29. package/schematics/bundles/route-lazy-loading.js +4 -4
  30. package/schematics/bundles/signal-input-migration.js +8 -8
  31. package/schematics/bundles/signal-queries-migration.js +7 -7
  32. package/schematics/bundles/signals.js +7 -7
  33. package/schematics/bundles/standalone-migration.js +8 -8
  34. package/testing/index.d.ts +5 -5
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.1.0-next.0
3
+ * @license Angular v19.1.0-next.2
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -10,12 +10,12 @@ Object.defineProperty(exports, '__esModule', { value: true });
10
10
 
11
11
  var schematics = require('@angular-devkit/schematics');
12
12
  var p = require('path');
13
- var compiler_host = require('./compiler_host-087c5caa.js');
13
+ var compiler_host = require('./compiler_host-f5d588fe.js');
14
14
  var ts = require('typescript');
15
- var nodes = require('./nodes-0e7d45ca.js');
16
- var imports = require('./imports-4ac08251.js');
17
- var leading_space = require('./leading_space-d190b83b.js');
18
- require('./checker-3cbc9cc1.js');
15
+ var nodes = require('./nodes-88c2157f.js');
16
+ var imports = require('./imports-31a38653.js');
17
+ var leading_space = require('./leading_space-6e7a8ec6.js');
18
+ require('./checker-c58f97d2.js');
19
19
  require('os');
20
20
  require('fs');
21
21
  require('module');
@@ -50,6 +50,15 @@ const DI_PARAM_SYMBOLS = new Set([
50
50
  'Host',
51
51
  'forwardRef',
52
52
  ]);
53
+ /** Kinds of nodes which aren't injectable when set as a type of a parameter. */
54
+ const UNINJECTABLE_TYPE_KINDS = new Set([
55
+ ts__default["default"].SyntaxKind.TrueKeyword,
56
+ ts__default["default"].SyntaxKind.FalseKeyword,
57
+ ts__default["default"].SyntaxKind.NumberKeyword,
58
+ ts__default["default"].SyntaxKind.StringKeyword,
59
+ ts__default["default"].SyntaxKind.NullKeyword,
60
+ ts__default["default"].SyntaxKind.VoidKeyword,
61
+ ]);
53
62
  /**
54
63
  * Finds the necessary information for the `inject` migration in a file.
55
64
  * @param sourceFile File which to analyze.
@@ -76,12 +85,23 @@ function analyzeFile(sourceFile, localTypeChecker, options) {
76
85
  if (ts__default["default"].isImportDeclaration(node)) {
77
86
  return;
78
87
  }
79
- // Only visit the initializer of parameters, because we won't exclude
80
- // their decorators from the identifier counting result below.
81
88
  if (ts__default["default"].isParameter(node)) {
89
+ const closestConstructor = nodes.closestNode(node, ts__default["default"].isConstructorDeclaration);
90
+ // Visiting the same parameters that we're about to remove can throw off the reference
91
+ // counting logic below. If we run into an initializer, we always visit its initializer
92
+ // and optionally visit the modifiers/decorators if it's not due to be deleted. Note that
93
+ // here we technically aren't dealing with the the full list of classes, but the parent class
94
+ // will have been visited by the time we reach the parameters.
82
95
  if (node.initializer) {
83
96
  walk(node.initializer);
84
97
  }
98
+ if (closestConstructor === null ||
99
+ // This is meant to avoid the case where this is a
100
+ // parameter inside a function placed in a constructor.
101
+ !closestConstructor.parameters.includes(node) ||
102
+ !classes.some((c) => c.constructor === closestConstructor)) {
103
+ node.modifiers?.forEach(walk);
104
+ }
85
105
  return;
86
106
  }
87
107
  if (ts__default["default"].isIdentifier(node) && importsToSpecifiers.size > 0) {
@@ -111,9 +131,21 @@ function analyzeFile(sourceFile, localTypeChecker, options) {
111
131
  const constructorNode = node.members.find((member) => ts__default["default"].isConstructorDeclaration(member) &&
112
132
  member.body != null &&
113
133
  member.parameters.length > 0);
134
+ // Basic check to determine if all parameters are injectable. This isn't exhaustive, but it
135
+ // should catch the majority of cases. An exhaustive check would require a full type checker
136
+ // which we don't have in this migration.
137
+ const allParamsInjectable = !!constructorNode?.parameters.every((param) => {
138
+ if (!param.type || !UNINJECTABLE_TYPE_KINDS.has(param.type.kind)) {
139
+ return true;
140
+ }
141
+ return nodes.getAngularDecorators(localTypeChecker, ts__default["default"].getDecorators(param) || []).some((dec) => dec.name === 'Inject' || dec.name === 'Attribute');
142
+ });
114
143
  // Don't migrate abstract classes by default, because
115
144
  // their parameters aren't guaranteed to be injectable.
116
- if (supportsDI && constructorNode && (!isAbstract || options.migrateAbstractClasses)) {
145
+ if (supportsDI &&
146
+ constructorNode &&
147
+ allParamsInjectable &&
148
+ (!isAbstract || options.migrateAbstractClasses)) {
117
149
  classes.push({
118
150
  node,
119
151
  constructor: constructorNode,
@@ -314,7 +346,7 @@ function findSuperCall(root) {
314
346
  * Finds class property declarations without initializers whose constructor-based initialization
315
347
  * can be inlined into the declaration spot after migrating to `inject`. For example:
316
348
  *
317
- * ```
349
+ * ```ts
318
350
  * private foo: number;
319
351
  *
320
352
  * constructor(private service: MyService) {
@@ -381,7 +413,7 @@ function findUninitializedPropertiesToCombine(node, constructor, localTypeChecke
381
413
  * The internal-specific migration will combine such properties which will result in a compilation
382
414
  * error, for example:
383
415
  *
384
- * ```
416
+ * ```ts
385
417
  * class MyClass {
386
418
  * foo: Foo;
387
419
  * bar: Bar;
@@ -395,7 +427,7 @@ function findUninitializedPropertiesToCombine(node, constructor, localTypeChecke
395
427
  *
396
428
  * Will become:
397
429
  *
398
- * ```
430
+ * ```ts
399
431
  * class MyClass {
400
432
  * foo: Foo = this.bar.getFoo();
401
433
  * bar: Bar = inject(Bar);
@@ -449,7 +481,7 @@ function shouldCombineInInitializationOrder(toCombine, constructor) {
449
481
  /**
450
482
  * Finds the expressions from the constructor that initialize class members, for example:
451
483
  *
452
- * ```
484
+ * ```ts
453
485
  * private foo: number;
454
486
  *
455
487
  * constructor() {
@@ -666,7 +698,7 @@ function migrateClass(node, constructor, superCall, options, memberIndentation,
666
698
  // the text if the statement after the `super` call is being deleted. This appears to be because
667
699
  // the full start of the next statement appears to always be the end of the `super` call plus 1.
668
700
  const nextStatement = getNextPreservedStatement(superCall, removedStatements);
669
- tracker.insertText(sourceFile, nextStatement ? nextStatement.getFullStart() : superCall.getEnd() + 1, `\n${afterSuper.join('\n')}\n`);
701
+ tracker.insertText(sourceFile, nextStatement ? nextStatement.getFullStart() : constructor.getEnd() - 1, `\n${afterSuper.join('\n')}\n` + (nextStatement ? '' : memberIndentation));
670
702
  }
671
703
  // Need to resolve this once all constructor signatures have been removed.
672
704
  const memberReference = node.members.find((m) => !removedMembers.has(m)) || node.members[0];
@@ -688,7 +720,12 @@ function migrateClass(node, constructor, superCall, options, memberIndentation,
688
720
  prependToClass.push(...afterInjectCalls);
689
721
  if (prependToClass.length > 0) {
690
722
  if (removedMembers.size === node.members.length) {
691
- tracker.insertText(sourceFile, constructor.getEnd() + 1, `${prependToClass.join('\n')}\n`);
723
+ tracker.insertText(sourceFile,
724
+ // If all members were deleted, insert after the last one.
725
+ // This allows us to preserve the indentation.
726
+ node.members.length > 0
727
+ ? node.members[node.members.length - 1].getEnd() + 1
728
+ : node.getEnd() - 1, `${prependToClass.join('\n')}\n`);
692
729
  }
693
730
  else {
694
731
  // Insert the new properties after the first member that hasn't been deleted.
@@ -902,15 +939,10 @@ function migrateInjectDecorator(firstArg, type, localTypeChecker) {
902
939
  }
903
940
  }
904
941
  }
905
- else if (
906
- // Pass the type for cases like `@Inject(FOO_TOKEN) foo: Foo`, because:
907
- // 1. It guarantees that the type stays the same as before.
908
- // 2. Avoids leaving unused imports behind.
909
- // We only do this for type references since the `@Inject` pattern above is fairly common and
910
- // apps don't necessarily type their injection tokens correctly, whereas doing it for literal
911
- // types will add a lot of noise to the generated code.
912
- type &&
942
+ else if (type &&
913
943
  (ts__default["default"].isTypeReferenceNode(type) ||
944
+ ts__default["default"].isTypeLiteralNode(type) ||
945
+ ts__default["default"].isTupleTypeNode(type) ||
914
946
  (ts__default["default"].isUnionTypeNode(type) && type.types.some(ts__default["default"].isTypeReferenceNode)))) {
915
947
  typeArguments = [type];
916
948
  }
@@ -932,28 +964,17 @@ function stripConstructorParameters(node, tracker) {
932
964
  const constructorText = node.getText();
933
965
  const lastParamText = node.parameters[node.parameters.length - 1].getText();
934
966
  const lastParamStart = constructorText.indexOf(lastParamText);
935
- const whitespacePattern = /\s/;
936
- let trailingCharacters = 0;
937
- if (lastParamStart > -1) {
938
- let lastParamEnd = lastParamStart + lastParamText.length;
939
- let closeParenIndex = -1;
940
- for (let i = lastParamEnd; i < constructorText.length; i++) {
941
- const char = constructorText[i];
942
- if (char === ')') {
943
- closeParenIndex = i;
944
- break;
945
- }
946
- else if (!whitespacePattern.test(char)) {
947
- // The end of the last parameter won't include
948
- // any trailing commas which we need to account for.
949
- lastParamEnd = i + 1;
950
- }
951
- }
952
- if (closeParenIndex > -1) {
953
- trailingCharacters = closeParenIndex - lastParamEnd;
967
+ // This shouldn't happen, but bail out just in case so we don't mangle the code.
968
+ if (lastParamStart === -1) {
969
+ return;
970
+ }
971
+ for (let i = lastParamStart + lastParamText.length; i < constructorText.length; i++) {
972
+ const char = constructorText[i];
973
+ if (char === ')') {
974
+ tracker.replaceText(node.getSourceFile(), node.parameters.pos, node.getStart() + i - node.parameters.pos, '');
975
+ break;
954
976
  }
955
977
  }
956
- tracker.replaceText(node.getSourceFile(), node.parameters.pos, node.parameters.end - node.parameters.pos + trailingCharacters, '');
957
978
  }
958
979
  /**
959
980
  * Creates a type checker scoped to a specific file.
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.1.0-next.0
3
+ * @license Angular v19.1.0-next.2
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,18 +1,18 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.1.0-next.0
3
+ * @license Angular v19.1.0-next.2
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
7
7
  'use strict';
8
8
 
9
- var checker = require('./checker-3cbc9cc1.js');
9
+ var checker = require('./checker-c58f97d2.js');
10
10
  var ts = require('typescript');
11
11
  require('os');
12
12
  var assert = require('assert');
13
- var combine_units = require('./combine_units-ab03aca8.js');
14
- var leading_space = require('./leading_space-d190b83b.js');
15
- require('./program-ed10d149.js');
13
+ var combine_units = require('./combine_units-8b29b7f6.js');
14
+ var leading_space = require('./leading_space-6e7a8ec6.js');
15
+ require('./program-30e02255.js');
16
16
  require('path');
17
17
 
18
18
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -816,7 +816,7 @@ class GroupedTsAstVisitor {
816
816
  * Phase that propagates incompatibilities to derived classes or
817
817
  * base classes. For example, consider:
818
818
  *
819
- * ```
819
+ * ```ts
820
820
  * class Base {
821
821
  * bla = true;
822
822
  * }
@@ -1556,7 +1556,7 @@ function getFlowNode(node) {
1556
1556
  *
1557
1557
  * E.g. consider the following snippet:
1558
1558
  *
1559
- * ```
1559
+ * ```ts
1560
1560
  * someMethod() {
1561
1561
  * if (this.bla) {
1562
1562
  * this.bla.charAt(0);
@@ -1837,7 +1837,7 @@ function migrateStandardTsReference(tsReferencesWithNarrowing, checker, info, re
1837
1837
  * The phase takes care of control flow analysis and generates temporary variables
1838
1838
  * where needed to ensure narrowing continues to work. E.g.
1839
1839
  *
1840
- * ```
1840
+ * ```ts
1841
1841
  * someMethod() {
1842
1842
  * if (this.input) {
1843
1843
  * this.input.charAt(0);
@@ -1847,7 +1847,7 @@ function migrateStandardTsReference(tsReferencesWithNarrowing, checker, info, re
1847
1847
  *
1848
1848
  * will be transformed into:
1849
1849
  *
1850
- * ```
1850
+ * ```ts
1851
1851
  * someMethod() {
1852
1852
  * const input_1 = this.input();
1853
1853
  * if (input_1) {
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.1.0-next.0
3
+ * @license Angular v19.1.0-next.2
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
7
7
  'use strict';
8
8
 
9
9
  var ts = require('typescript');
10
- var imports = require('./imports-4ac08251.js');
10
+ var imports = require('./imports-31a38653.js');
11
11
 
12
12
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
13
 
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.1.0-next.0
3
+ * @license Angular v19.1.0-next.2
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -9,12 +9,12 @@
9
9
  Object.defineProperty(exports, '__esModule', { value: true });
10
10
 
11
11
  var schematics = require('@angular-devkit/schematics');
12
- var project_tsconfig_paths = require('./project_tsconfig_paths-e9ccccbf.js');
13
- var combine_units = require('./combine_units-ab03aca8.js');
12
+ var project_tsconfig_paths = require('./project_tsconfig_paths-6c9cde78.js');
13
+ var combine_units = require('./combine_units-8b29b7f6.js');
14
14
  require('os');
15
15
  var ts = require('typescript');
16
- var checker = require('./checker-3cbc9cc1.js');
17
- var program = require('./program-ed10d149.js');
16
+ var checker = require('./checker-c58f97d2.js');
17
+ var program = require('./program-30e02255.js');
18
18
  require('path');
19
19
  require('@angular-devkit/core');
20
20
  require('node:path/posix');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.1.0-next.0
3
+ * @license Angular v19.1.0-next.2
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -10,12 +10,12 @@ Object.defineProperty(exports, '__esModule', { value: true });
10
10
 
11
11
  var schematics = require('@angular-devkit/schematics');
12
12
  var p = require('path');
13
- var project_tsconfig_paths = require('./project_tsconfig_paths-e9ccccbf.js');
14
- var compiler_host = require('./compiler_host-087c5caa.js');
13
+ var project_tsconfig_paths = require('./project_tsconfig_paths-6c9cde78.js');
14
+ var compiler_host = require('./compiler_host-f5d588fe.js');
15
15
  var ts = require('typescript');
16
- var imports = require('./imports-4ac08251.js');
16
+ var imports = require('./imports-31a38653.js');
17
17
  require('@angular-devkit/core');
18
- require('./checker-3cbc9cc1.js');
18
+ require('./checker-c58f97d2.js');
19
19
  require('os');
20
20
  require('fs');
21
21
  require('module');
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.1.0-next.0
3
+ * @license Angular v19.1.0-next.2
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
7
7
  'use strict';
8
8
 
9
- var checker = require('./checker-3cbc9cc1.js');
9
+ var checker = require('./checker-c58f97d2.js');
10
10
  var ts = require('typescript');
11
11
  var p = require('path');
12
12
  require('os');
@@ -809,7 +809,7 @@ function internalCompileClassMetadata(metadata) {
809
809
  * loads dependencies from `@defer` blocks.
810
810
  *
811
811
  * Generates a call like this:
812
- * ```
812
+ * ```ts
813
813
  * setClassMetadataAsync(type, () => [
814
814
  * import('./cmp-a').then(m => m.CmpA);
815
815
  * import('./cmp-b').then(m => m.CmpB);
@@ -900,12 +900,15 @@ function compileHmrInitializer(meta) {
900
900
  const dataName = 'd';
901
901
  const timestampName = 't';
902
902
  const importCallbackName = `${meta.className}_HmrLoad`;
903
- const locals = meta.locals.map((localName) => checker.variable(localName));
903
+ const locals = meta.localDependencies.map((localName) => checker.variable(localName));
904
+ const namespaces = meta.namespaceDependencies.map((dep) => {
905
+ return new checker.ExternalExpr({ moduleName: dep.moduleName, name: null });
906
+ });
904
907
  // m.default
905
908
  const defaultRead = checker.variable(moduleName).prop('default');
906
- // ɵɵreplaceMetadata(Comp, m.default, [...]);
909
+ // ɵɵreplaceMetadata(Comp, m.default, [...namespaces], [...locals]);
907
910
  const replaceCall = checker.importExpr(checker.Identifiers.replaceMetadata)
908
- .callFn([meta.type, defaultRead, new checker.ExternalExpr(checker.Identifiers.core), checker.literalArr(locals)]);
911
+ .callFn([meta.type, defaultRead, checker.literalArr(namespaces), checker.literalArr(locals)]);
909
912
  // (m) => m.default && ɵɵreplaceMetadata(...)
910
913
  const replaceCallback = checker.arrowFn([new checker.FnParam(moduleName)], defaultRead.and(replaceCall));
911
914
  // '<urlPartial>' + encodeURIComponent(t)
@@ -958,9 +961,14 @@ function compileHmrInitializer(meta) {
958
961
  * @param meta HMR metadata extracted from the class.
959
962
  */
960
963
  function compileHmrUpdateCallback(definitions, constantStatements, meta) {
961
- // The class name should always be first and core should be second.
962
- const params = [meta.className, meta.coreName, ...meta.locals].map((name) => new checker.FnParam(name, checker.DYNAMIC_TYPE));
963
- const body = [...constantStatements];
964
+ const namespaces = 'ɵɵnamespaces';
965
+ const params = [meta.className, namespaces, ...meta.localDependencies].map((name) => new checker.FnParam(name, checker.DYNAMIC_TYPE));
966
+ const body = [];
967
+ // Declare variables that read out the individual namespaces.
968
+ for (let i = 0; i < meta.namespaceDependencies.length; i++) {
969
+ body.push(new checker.DeclareVarStmt(meta.namespaceDependencies[i].assignedName, checker.variable(namespaces).key(checker.literal(i)), checker.DYNAMIC_TYPE, checker.StmtModifier.Final));
970
+ }
971
+ body.push(...constantStatements);
964
972
  for (const field of definitions) {
965
973
  if (field.initializer !== null) {
966
974
  body.push(checker.variable(meta.className).prop(field.name).set(field.initializer).toStmt());
@@ -987,7 +995,7 @@ const MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION = '18.0.0';
987
995
  function compileDeclareClassMetadata(metadata) {
988
996
  const definitionMap = new checker.DefinitionMap();
989
997
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$5));
990
- definitionMap.set('version', checker.literal('19.1.0-next.0'));
998
+ definitionMap.set('version', checker.literal('19.1.0-next.2'));
991
999
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
992
1000
  definitionMap.set('type', metadata.type);
993
1001
  definitionMap.set('decorators', metadata.decorators);
@@ -1005,7 +1013,7 @@ function compileComponentDeclareClassMetadata(metadata, dependencies) {
1005
1013
  callbackReturnDefinitionMap.set('ctorParameters', metadata.ctorParameters ?? checker.literal(null));
1006
1014
  callbackReturnDefinitionMap.set('propDecorators', metadata.propDecorators ?? checker.literal(null));
1007
1015
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION));
1008
- definitionMap.set('version', checker.literal('19.1.0-next.0'));
1016
+ definitionMap.set('version', checker.literal('19.1.0-next.2'));
1009
1017
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1010
1018
  definitionMap.set('type', metadata.type);
1011
1019
  definitionMap.set('resolveDeferredDeps', compileComponentMetadataAsyncResolver(dependencies));
@@ -1100,7 +1108,7 @@ function createDirectiveDefinitionMap(meta) {
1100
1108
  const definitionMap = new checker.DefinitionMap();
1101
1109
  const minVersion = getMinimumVersionForPartialOutput(meta);
1102
1110
  definitionMap.set('minVersion', checker.literal(minVersion));
1103
- definitionMap.set('version', checker.literal('19.1.0-next.0'));
1111
+ definitionMap.set('version', checker.literal('19.1.0-next.2'));
1104
1112
  // e.g. `type: MyDirective`
1105
1113
  definitionMap.set('type', meta.type.value);
1106
1114
  if (meta.isStandalone !== undefined) {
@@ -1516,7 +1524,7 @@ const MINIMUM_PARTIAL_LINKER_VERSION$4 = '12.0.0';
1516
1524
  function compileDeclareFactoryFunction(meta) {
1517
1525
  const definitionMap = new checker.DefinitionMap();
1518
1526
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$4));
1519
- definitionMap.set('version', checker.literal('19.1.0-next.0'));
1527
+ definitionMap.set('version', checker.literal('19.1.0-next.2'));
1520
1528
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1521
1529
  definitionMap.set('type', meta.type.value);
1522
1530
  definitionMap.set('deps', compileDependencies(meta.deps));
@@ -1551,7 +1559,7 @@ function compileDeclareInjectableFromMetadata(meta) {
1551
1559
  function createInjectableDefinitionMap(meta) {
1552
1560
  const definitionMap = new checker.DefinitionMap();
1553
1561
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$3));
1554
- definitionMap.set('version', checker.literal('19.1.0-next.0'));
1562
+ definitionMap.set('version', checker.literal('19.1.0-next.2'));
1555
1563
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1556
1564
  definitionMap.set('type', meta.type.value);
1557
1565
  // Only generate providedIn property if it has a non-null value
@@ -1602,7 +1610,7 @@ function compileDeclareInjectorFromMetadata(meta) {
1602
1610
  function createInjectorDefinitionMap(meta) {
1603
1611
  const definitionMap = new checker.DefinitionMap();
1604
1612
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$2));
1605
- definitionMap.set('version', checker.literal('19.1.0-next.0'));
1613
+ definitionMap.set('version', checker.literal('19.1.0-next.2'));
1606
1614
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1607
1615
  definitionMap.set('type', meta.type.value);
1608
1616
  definitionMap.set('providers', meta.providers);
@@ -1635,7 +1643,7 @@ function createNgModuleDefinitionMap(meta) {
1635
1643
  throw new Error('Invalid path! Local compilation mode should not get into the partial compilation path');
1636
1644
  }
1637
1645
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$1));
1638
- definitionMap.set('version', checker.literal('19.1.0-next.0'));
1646
+ definitionMap.set('version', checker.literal('19.1.0-next.2'));
1639
1647
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1640
1648
  definitionMap.set('type', meta.type.value);
1641
1649
  // We only generate the keys in the metadata if the arrays contain values.
@@ -1686,7 +1694,7 @@ function compileDeclarePipeFromMetadata(meta) {
1686
1694
  function createPipeDefinitionMap(meta) {
1687
1695
  const definitionMap = new checker.DefinitionMap();
1688
1696
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION));
1689
- definitionMap.set('version', checker.literal('19.1.0-next.0'));
1697
+ definitionMap.set('version', checker.literal('19.1.0-next.2'));
1690
1698
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1691
1699
  // e.g. `type: MyPipe`
1692
1700
  definitionMap.set('type', meta.type.value);
@@ -10120,15 +10128,14 @@ class TsCreateProgramDriver {
10120
10128
  * found in the LICENSE file at https://angular.dev/license
10121
10129
  */
10122
10130
  /**
10123
- * Determines the names of the file-level locals that the HMR
10124
- * initializer needs to capture and pass along.
10131
+ * Determines the file-level dependencies that the HMR initializer needs to capture and pass along.
10125
10132
  * @param sourceFile File in which the file is being compiled.
10126
10133
  * @param definition Compiled component definition.
10127
10134
  * @param factory Compiled component factory.
10128
10135
  * @param classMetadata Compiled `setClassMetadata` expression, if any.
10129
10136
  * @param debugInfo Compiled `setClassDebugInfo` expression, if any.
10130
10137
  */
10131
- function extractHmrLocals(node, definition, factory, classMetadata, debugInfo) {
10138
+ function extractHmrDependencies(node, definition, factory, classMetadata, debugInfo) {
10132
10139
  const name = ts__default["default"].isClassDeclaration(node) && node.name ? node.name.text : null;
10133
10140
  const visitor = new PotentialTopLevelReadsVisitor();
10134
10141
  const sourceFile = node.getSourceFile();
@@ -10144,7 +10151,13 @@ function extractHmrLocals(node, definition, factory, classMetadata, debugInfo) {
10144
10151
  // variables inside of functions. Note that we filter out the class name since it is always
10145
10152
  // defined and it saves us having to repeat this logic wherever the locals are consumed.
10146
10153
  const availableTopLevel = getTopLevelDeclarationNames(sourceFile);
10147
- return Array.from(visitor.allReads).filter((r) => r !== name && availableTopLevel.has(r));
10154
+ return {
10155
+ local: Array.from(visitor.allReads).filter((r) => r !== name && availableTopLevel.has(r)),
10156
+ external: Array.from(visitor.namespaceReads, (name, index) => ({
10157
+ moduleName: name,
10158
+ assignedName: `ɵhmr${index}`,
10159
+ })),
10160
+ };
10148
10161
  }
10149
10162
  /**
10150
10163
  * Gets the names of all top-level declarations within the file (imports, declared classes etc).
@@ -10227,6 +10240,13 @@ function trackBindingName(node, results) {
10227
10240
  */
10228
10241
  class PotentialTopLevelReadsVisitor extends checker.RecursiveAstVisitor {
10229
10242
  allReads = new Set();
10243
+ namespaceReads = new Set();
10244
+ visitExternalExpr(ast, context) {
10245
+ if (ast.value.moduleName !== null) {
10246
+ this.namespaceReads.add(ast.value.moduleName);
10247
+ }
10248
+ super.visitExternalExpr(ast, context);
10249
+ }
10230
10250
  visitReadVarExpr(ast, context) {
10231
10251
  this.allReads.add(ast.name);
10232
10252
  super.visitReadVarExpr(ast, context);
@@ -10326,12 +10346,13 @@ function extractHmrMetatadata(clazz, reflection, compilerHost, rootDirs, definit
10326
10346
  const sourceFile = clazz.getSourceFile();
10327
10347
  const filePath = getProjectRelativePath(sourceFile, rootDirs, compilerHost) ||
10328
10348
  compilerHost.getCanonicalFileName(sourceFile.fileName);
10349
+ const dependencies = extractHmrDependencies(clazz, definition, factory, classMetadata, debugInfo);
10329
10350
  const meta = {
10330
10351
  type: new checker.WrappedNodeExpr(clazz.name),
10331
10352
  className: clazz.name.text,
10332
10353
  filePath,
10333
- locals: extractHmrLocals(clazz, definition, factory, classMetadata, debugInfo),
10334
- coreName: '__ngCore__',
10354
+ localDependencies: dependencies.local,
10355
+ namespaceDependencies: dependencies.external,
10335
10356
  };
10336
10357
  return meta;
10337
10358
  }
@@ -10350,7 +10371,11 @@ function extractHmrMetatadata(clazz, reflection, compilerHost, rootDirs, definit
10350
10371
  * @param sourceFile File in which the class is defined.
10351
10372
  */
10352
10373
  function getHmrUpdateDeclaration(compilationResults, constantStatements, meta, sourceFile) {
10353
- const importRewriter = new HmrModuleImportRewriter(meta.coreName);
10374
+ const namespaceSpecifiers = meta.namespaceDependencies.reduce((result, current) => {
10375
+ result.set(current.moduleName, current.assignedName);
10376
+ return result;
10377
+ }, new Map());
10378
+ const importRewriter = new HmrModuleImportRewriter(namespaceSpecifiers);
10354
10379
  const importManager = new checker.ImportManager({
10355
10380
  ...checker.presetImportManagerForceNamespaceImports,
10356
10381
  rewriter: importRewriter,
@@ -10364,14 +10389,13 @@ function getHmrUpdateDeclaration(compilationResults, constantStatements, meta, s
10364
10389
  ts__default["default"].factory.createToken(ts__default["default"].SyntaxKind.DefaultKeyword),
10365
10390
  ], node.asteriskToken, node.name, node.typeParameters, node.parameters, node.type, node.body);
10366
10391
  }
10367
- /** Rewriter that replaces namespace imports to `@angular/core` with a specifier identifier. */
10368
10392
  class HmrModuleImportRewriter {
10369
- coreName;
10370
- constructor(coreName) {
10371
- this.coreName = coreName;
10393
+ lookup;
10394
+ constructor(lookup) {
10395
+ this.lookup = lookup;
10372
10396
  }
10373
10397
  rewriteNamespaceImportIdentifier(specifier, moduleName) {
10374
- return moduleName === '@angular/core' ? this.coreName : specifier;
10398
+ return this.lookup.has(moduleName) ? this.lookup.get(moduleName) : specifier;
10375
10399
  }
10376
10400
  rewriteSymbol(symbol) {
10377
10401
  return symbol;
@@ -20138,7 +20162,7 @@ var semver = /*@__PURE__*/getDefaultExportFromCjs(semverExports);
20138
20162
  * @param minVersion Minimum required version for the feature.
20139
20163
  */
20140
20164
  function coreVersionSupportsFeature(coreVersion, minVersion) {
20141
- // A version of `19.1.0-next.0` usually means that core is at head so it supports
20165
+ // A version of `19.1.0-next.2` usually means that core is at head so it supports
20142
20166
  // all features. Use string interpolation prevent the placeholder from being replaced
20143
20167
  // with the current version during build time.
20144
20168
  if (coreVersion === `0.0.0-${'PLACEHOLDER'}`) {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.1.0-next.0
3
+ * @license Angular v19.1.0-next.2
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.1.0-next.0
3
+ * @license Angular v19.1.0-next.2
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -10,12 +10,12 @@ Object.defineProperty(exports, '__esModule', { value: true });
10
10
 
11
11
  var schematics = require('@angular-devkit/schematics');
12
12
  var p = require('path');
13
- var project_tsconfig_paths = require('./project_tsconfig_paths-e9ccccbf.js');
14
- var compiler_host = require('./compiler_host-087c5caa.js');
13
+ var project_tsconfig_paths = require('./project_tsconfig_paths-6c9cde78.js');
14
+ var compiler_host = require('./compiler_host-f5d588fe.js');
15
15
  var ts = require('typescript');
16
- var imports = require('./imports-4ac08251.js');
16
+ var imports = require('./imports-31a38653.js');
17
17
  require('@angular-devkit/core');
18
- require('./checker-3cbc9cc1.js');
18
+ require('./checker-c58f97d2.js');
19
19
  require('os');
20
20
  require('fs');
21
21
  require('module');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.1.0-next.0
3
+ * @license Angular v19.1.0-next.2
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -11,10 +11,10 @@ Object.defineProperty(exports, '__esModule', { value: true });
11
11
  var schematics = require('@angular-devkit/schematics');
12
12
  var fs = require('fs');
13
13
  var p = require('path');
14
- var compiler_host = require('./compiler_host-087c5caa.js');
15
- var project_tsconfig_paths = require('./project_tsconfig_paths-e9ccccbf.js');
14
+ var compiler_host = require('./compiler_host-f5d588fe.js');
15
+ var project_tsconfig_paths = require('./project_tsconfig_paths-6c9cde78.js');
16
16
  var ts = require('typescript');
17
- var checker = require('./checker-3cbc9cc1.js');
17
+ var checker = require('./checker-c58f97d2.js');
18
18
  require('os');
19
19
  require('@angular-devkit/core');
20
20
  require('module');