@angular/core 19.0.1 → 19.0.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 (32) hide show
  1. package/fesm2022/core.mjs +201 -210
  2. package/fesm2022/core.mjs.map +1 -1
  3. package/fesm2022/primitives/event-dispatch.mjs +1 -1
  4. package/fesm2022/primitives/signals.mjs +1 -1
  5. package/fesm2022/rxjs-interop.mjs +1 -1
  6. package/fesm2022/testing.mjs +4 -4
  7. package/index.d.ts +56 -38
  8. package/package.json +1 -1
  9. package/primitives/event-dispatch/index.d.ts +1 -1
  10. package/primitives/signals/index.d.ts +1 -1
  11. package/rxjs-interop/index.d.ts +1 -1
  12. package/schematics/bundles/{checker-3cbc9cc1.js → checker-a00b735e.js} +22 -23
  13. package/schematics/bundles/{combine_units-c36a3065.js → combine_units-60865867.js} +3 -3
  14. package/schematics/bundles/{compiler_host-087c5caa.js → compiler_host-3e96c3f7.js} +2 -2
  15. package/schematics/bundles/control-flow-migration.js +3 -3
  16. package/schematics/bundles/explicit-standalone-flag.js +5 -5
  17. package/schematics/bundles/{imports-4ac08251.js → imports-44987700.js} +1 -1
  18. package/schematics/bundles/inject-migration.js +60 -39
  19. package/schematics/bundles/{leading_space-d190b83b.js → leading_space-6e7a8ec6.js} +1 -1
  20. package/schematics/bundles/{migrate_ts_type_references-bb0c286a.js → migrate_ts_type_references-676612f5.js} +5 -5
  21. package/schematics/bundles/{nodes-0e7d45ca.js → nodes-b12e919a.js} +2 -2
  22. package/schematics/bundles/output-migration.js +5 -5
  23. package/schematics/bundles/pending-tasks.js +5 -5
  24. package/schematics/bundles/{program-561595c4.js → program-a6be5d4a.js} +53 -29
  25. package/schematics/bundles/{project_tsconfig_paths-e9ccccbf.js → project_tsconfig_paths-6c9cde78.js} +1 -1
  26. package/schematics/bundles/provide-initializer.js +5 -5
  27. package/schematics/bundles/route-lazy-loading.js +4 -4
  28. package/schematics/bundles/signal-input-migration.js +7 -7
  29. package/schematics/bundles/signal-queries-migration.js +7 -7
  30. package/schematics/bundles/signals.js +7 -7
  31. package/schematics/bundles/standalone-migration.js +8 -8
  32. package/testing/index.d.ts +1 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.0.1
3
+ * @license Angular v19.0.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-3e96c3f7.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-b12e919a.js');
16
+ var imports = require('./imports-44987700.js');
17
+ var leading_space = require('./leading_space-6e7a8ec6.js');
18
+ require('./checker-a00b735e.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,
@@ -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.0.1
3
+ * @license Angular v19.0.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.0.1
3
+ * @license Angular v19.0.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-a00b735e.js');
10
10
  var ts = require('typescript');
11
11
  require('os');
12
12
  var assert = require('assert');
13
- var combine_units = require('./combine_units-c36a3065.js');
14
- var leading_space = require('./leading_space-d190b83b.js');
15
- require('./program-561595c4.js');
13
+ var combine_units = require('./combine_units-60865867.js');
14
+ var leading_space = require('./leading_space-6e7a8ec6.js');
15
+ require('./program-a6be5d4a.js');
16
16
  require('path');
17
17
 
18
18
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.0.1
3
+ * @license Angular v19.0.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-44987700.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.0.1
3
+ * @license Angular v19.0.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-c36a3065.js');
12
+ var project_tsconfig_paths = require('./project_tsconfig_paths-6c9cde78.js');
13
+ var combine_units = require('./combine_units-60865867.js');
14
14
  require('os');
15
15
  var ts = require('typescript');
16
- var checker = require('./checker-3cbc9cc1.js');
17
- var program = require('./program-561595c4.js');
16
+ var checker = require('./checker-a00b735e.js');
17
+ var program = require('./program-a6be5d4a.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.0.1
3
+ * @license Angular v19.0.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-3e96c3f7.js');
15
15
  var ts = require('typescript');
16
- var imports = require('./imports-4ac08251.js');
16
+ var imports = require('./imports-44987700.js');
17
17
  require('@angular-devkit/core');
18
- require('./checker-3cbc9cc1.js');
18
+ require('./checker-a00b735e.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.0.1
3
+ * @license Angular v19.0.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-a00b735e.js');
10
10
  var ts = require('typescript');
11
11
  var p = require('path');
12
12
  require('os');
@@ -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.0.1'));
998
+ definitionMap.set('version', checker.literal('19.0.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.0.1'));
1016
+ definitionMap.set('version', checker.literal('19.0.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.0.1'));
1111
+ definitionMap.set('version', checker.literal('19.0.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.0.1'));
1527
+ definitionMap.set('version', checker.literal('19.0.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.0.1'));
1562
+ definitionMap.set('version', checker.literal('19.0.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.0.1'));
1613
+ definitionMap.set('version', checker.literal('19.0.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.0.1'));
1646
+ definitionMap.set('version', checker.literal('19.0.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.0.1'));
1697
+ definitionMap.set('version', checker.literal('19.0.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.0.1` usually means that core is at head so it supports
20165
+ // A version of `19.0.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.0.1
3
+ * @license Angular v19.0.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.0.1
3
+ * @license Angular v19.0.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-3e96c3f7.js');
15
15
  var ts = require('typescript');
16
- var imports = require('./imports-4ac08251.js');
16
+ var imports = require('./imports-44987700.js');
17
17
  require('@angular-devkit/core');
18
- require('./checker-3cbc9cc1.js');
18
+ require('./checker-a00b735e.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.0.1
3
+ * @license Angular v19.0.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-3e96c3f7.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-a00b735e.js');
18
18
  require('os');
19
19
  require('@angular-devkit/core');
20
20
  require('module');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.0.1
3
+ * @license Angular v19.0.2
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -9,16 +9,16 @@
9
9
  Object.defineProperty(exports, '__esModule', { value: true });
10
10
 
11
11
  var schematics = require('@angular-devkit/schematics');
12
- var migrate_ts_type_references = require('./migrate_ts_type_references-bb0c286a.js');
12
+ var migrate_ts_type_references = require('./migrate_ts_type_references-676612f5.js');
13
13
  var ts = require('typescript');
14
14
  require('os');
15
- var checker = require('./checker-3cbc9cc1.js');
16
- var program = require('./program-561595c4.js');
15
+ var checker = require('./checker-a00b735e.js');
16
+ var program = require('./program-a6be5d4a.js');
17
17
  require('path');
18
- var combine_units = require('./combine_units-c36a3065.js');
18
+ var combine_units = require('./combine_units-60865867.js');
19
19
  var assert = require('assert');
20
- var project_tsconfig_paths = require('./project_tsconfig_paths-e9ccccbf.js');
21
- require('./leading_space-d190b83b.js');
20
+ var project_tsconfig_paths = require('./project_tsconfig_paths-6c9cde78.js');
21
+ require('./leading_space-6e7a8ec6.js');
22
22
  require('fs');
23
23
  require('module');
24
24
  require('url');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.0.1
3
+ * @license Angular v19.0.2
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -9,21 +9,21 @@
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-c36a3065.js');
12
+ var project_tsconfig_paths = require('./project_tsconfig_paths-6c9cde78.js');
13
+ var combine_units = require('./combine_units-60865867.js');
14
14
  require('os');
15
15
  var ts = require('typescript');
16
- var checker = require('./checker-3cbc9cc1.js');
17
- var program = require('./program-561595c4.js');
16
+ var checker = require('./checker-a00b735e.js');
17
+ var program = require('./program-a6be5d4a.js');
18
18
  require('path');
19
- var migrate_ts_type_references = require('./migrate_ts_type_references-bb0c286a.js');
19
+ var migrate_ts_type_references = require('./migrate_ts_type_references-676612f5.js');
20
20
  var assert = require('assert');
21
21
  require('@angular-devkit/core');
22
22
  require('node:path/posix');
23
23
  require('fs');
24
24
  require('module');
25
25
  require('url');
26
- require('./leading_space-d190b83b.js');
26
+ require('./leading_space-6e7a8ec6.js');
27
27
 
28
28
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
29
29