@angular/core 19.0.0 → 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 +7117 -7025
  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 +107 -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-e3da3b0a.js → checker-a00b735e.js} +43 -27
  13. package/schematics/bundles/{combine_units-2adebceb.js → combine_units-60865867.js} +5 -3
  14. package/schematics/bundles/{compiler_host-d642e87e.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 +137 -51
  19. package/schematics/bundles/{leading_space-d190b83b.js → leading_space-6e7a8ec6.js} +1 -1
  20. package/schematics/bundles/{migrate_ts_type_references-ed2c0669.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-f984ab63.js → program-a6be5d4a.js} +75 -33
  25. package/schematics/bundles/{project_tsconfig_paths-e9ccccbf.js → project_tsconfig_paths-6c9cde78.js} +1 -1
  26. package/schematics/bundles/provide-initializer.js +38 -31
  27. package/schematics/bundles/route-lazy-loading.js +28 -24
  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.0
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.0
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-e3da3b0a.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-2adebceb.js');
14
- var leading_space = require('./leading_space-d190b83b.js');
15
- require('./program-f984ab63.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.0
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.0
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-2adebceb.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-e3da3b0a.js');
17
- var program = require('./program-f984ab63.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.0
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-d642e87e.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-e3da3b0a.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.0
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-e3da3b0a.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.0'));
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.0'));
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.0'));
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.0'));
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.0'));
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.0'));
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.0'));
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.0'));
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);
@@ -7670,13 +7678,31 @@ function evaluateHostExpressionBindings(hostExpr, evaluator) {
7670
7678
  const bindings = checker.parseHostBindings(hostMetadata);
7671
7679
  const errors = checker.verifyHostBindings(bindings, checker.createSourceSpan(hostExpr));
7672
7680
  if (errors.length > 0) {
7673
- throw new checker.FatalDiagnosticError(
7674
- // TODO: provide more granular diagnostic and output specific host expression that
7675
- // triggered an error instead of the whole host object.
7676
- checker.ErrorCode.HOST_BINDING_PARSE_ERROR, hostExpr, errors.map((error) => error.msg).join('\n'));
7681
+ throw new checker.FatalDiagnosticError(checker.ErrorCode.HOST_BINDING_PARSE_ERROR, getHostBindingErrorNode(errors[0], hostExpr), errors.map((error) => error.msg).join('\n'));
7677
7682
  }
7678
7683
  return bindings;
7679
7684
  }
7685
+ /**
7686
+ * Attempts to match a parser error to the host binding expression that caused it.
7687
+ * @param error Error to match.
7688
+ * @param hostExpr Expression declaring the host bindings.
7689
+ */
7690
+ function getHostBindingErrorNode(error, hostExpr) {
7691
+ // In the most common case the `host` object is an object literal with string values. We can
7692
+ // confidently match the error to its expression by looking at the string value that the parser
7693
+ // failed to parse and the initializers for each of the properties. If we fail to match, we fall
7694
+ // back to the old behavior where the error is reported on the entire `host` object.
7695
+ if (ts__default["default"].isObjectLiteralExpression(hostExpr) && error.relatedError instanceof checker.ParserError) {
7696
+ for (const prop of hostExpr.properties) {
7697
+ if (ts__default["default"].isPropertyAssignment(prop) &&
7698
+ ts__default["default"].isStringLiteralLike(prop.initializer) &&
7699
+ prop.initializer.text === error.relatedError.input) {
7700
+ return prop.initializer;
7701
+ }
7702
+ }
7703
+ }
7704
+ return hostExpr;
7705
+ }
7680
7706
  /**
7681
7707
  * Extracts and prepares the host directives metadata from an array literal expression.
7682
7708
  * @param rawHostDirectives Expression that defined the `hostDirectives`.
@@ -10102,15 +10128,14 @@ class TsCreateProgramDriver {
10102
10128
  * found in the LICENSE file at https://angular.dev/license
10103
10129
  */
10104
10130
  /**
10105
- * Determines the names of the file-level locals that the HMR
10106
- * initializer needs to capture and pass along.
10131
+ * Determines the file-level dependencies that the HMR initializer needs to capture and pass along.
10107
10132
  * @param sourceFile File in which the file is being compiled.
10108
10133
  * @param definition Compiled component definition.
10109
10134
  * @param factory Compiled component factory.
10110
10135
  * @param classMetadata Compiled `setClassMetadata` expression, if any.
10111
10136
  * @param debugInfo Compiled `setClassDebugInfo` expression, if any.
10112
10137
  */
10113
- function extractHmrLocals(node, definition, factory, classMetadata, debugInfo) {
10138
+ function extractHmrDependencies(node, definition, factory, classMetadata, debugInfo) {
10114
10139
  const name = ts__default["default"].isClassDeclaration(node) && node.name ? node.name.text : null;
10115
10140
  const visitor = new PotentialTopLevelReadsVisitor();
10116
10141
  const sourceFile = node.getSourceFile();
@@ -10126,7 +10151,13 @@ function extractHmrLocals(node, definition, factory, classMetadata, debugInfo) {
10126
10151
  // variables inside of functions. Note that we filter out the class name since it is always
10127
10152
  // defined and it saves us having to repeat this logic wherever the locals are consumed.
10128
10153
  const availableTopLevel = getTopLevelDeclarationNames(sourceFile);
10129
- 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
+ };
10130
10161
  }
10131
10162
  /**
10132
10163
  * Gets the names of all top-level declarations within the file (imports, declared classes etc).
@@ -10209,6 +10240,13 @@ function trackBindingName(node, results) {
10209
10240
  */
10210
10241
  class PotentialTopLevelReadsVisitor extends checker.RecursiveAstVisitor {
10211
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
+ }
10212
10250
  visitReadVarExpr(ast, context) {
10213
10251
  this.allReads.add(ast.name);
10214
10252
  super.visitReadVarExpr(ast, context);
@@ -10308,12 +10346,13 @@ function extractHmrMetatadata(clazz, reflection, compilerHost, rootDirs, definit
10308
10346
  const sourceFile = clazz.getSourceFile();
10309
10347
  const filePath = getProjectRelativePath(sourceFile, rootDirs, compilerHost) ||
10310
10348
  compilerHost.getCanonicalFileName(sourceFile.fileName);
10349
+ const dependencies = extractHmrDependencies(clazz, definition, factory, classMetadata, debugInfo);
10311
10350
  const meta = {
10312
10351
  type: new checker.WrappedNodeExpr(clazz.name),
10313
10352
  className: clazz.name.text,
10314
10353
  filePath,
10315
- locals: extractHmrLocals(clazz, definition, factory, classMetadata, debugInfo),
10316
- coreName: '__ngCore__',
10354
+ localDependencies: dependencies.local,
10355
+ namespaceDependencies: dependencies.external,
10317
10356
  };
10318
10357
  return meta;
10319
10358
  }
@@ -10332,7 +10371,11 @@ function extractHmrMetatadata(clazz, reflection, compilerHost, rootDirs, definit
10332
10371
  * @param sourceFile File in which the class is defined.
10333
10372
  */
10334
10373
  function getHmrUpdateDeclaration(compilationResults, constantStatements, meta, sourceFile) {
10335
- 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);
10336
10379
  const importManager = new checker.ImportManager({
10337
10380
  ...checker.presetImportManagerForceNamespaceImports,
10338
10381
  rewriter: importRewriter,
@@ -10346,14 +10389,13 @@ function getHmrUpdateDeclaration(compilationResults, constantStatements, meta, s
10346
10389
  ts__default["default"].factory.createToken(ts__default["default"].SyntaxKind.DefaultKeyword),
10347
10390
  ], node.asteriskToken, node.name, node.typeParameters, node.parameters, node.type, node.body);
10348
10391
  }
10349
- /** Rewriter that replaces namespace imports to `@angular/core` with a specifier identifier. */
10350
10392
  class HmrModuleImportRewriter {
10351
- coreName;
10352
- constructor(coreName) {
10353
- this.coreName = coreName;
10393
+ lookup;
10394
+ constructor(lookup) {
10395
+ this.lookup = lookup;
10354
10396
  }
10355
10397
  rewriteNamespaceImportIdentifier(specifier, moduleName) {
10356
- return moduleName === '@angular/core' ? this.coreName : specifier;
10398
+ return this.lookup.has(moduleName) ? this.lookup.get(moduleName) : specifier;
10357
10399
  }
10358
10400
  rewriteSymbol(symbol) {
10359
10401
  return symbol;
@@ -20120,7 +20162,7 @@ var semver = /*@__PURE__*/getDefaultExportFromCjs(semverExports);
20120
20162
  * @param minVersion Minimum required version for the feature.
20121
20163
  */
20122
20164
  function coreVersionSupportsFeature(coreVersion, minVersion) {
20123
- // A version of `19.0.0` 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
20124
20166
  // all features. Use string interpolation prevent the placeholder from being replaced
20125
20167
  // with the current version during build time.
20126
20168
  if (coreVersion === `0.0.0-${'PLACEHOLDER'}`) {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.0.0
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.0
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-d642e87e.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-e3da3b0a.js');
18
+ require('./checker-a00b735e.js');
19
19
  require('os');
20
20
  require('fs');
21
21
  require('module');
@@ -70,34 +70,38 @@ function tryParseProviderExpression(node) {
70
70
  let deps = [];
71
71
  let initializerToken;
72
72
  let useExisting;
73
- let useFactory;
73
+ let useFactoryCode;
74
74
  let useValue;
75
75
  let multi = false;
76
76
  for (const property of node.properties) {
77
- if (!ts__default["default"].isPropertyAssignment(property) || !ts__default["default"].isIdentifier(property.name)) {
78
- continue;
77
+ if (ts__default["default"].isPropertyAssignment(property) && ts__default["default"].isIdentifier(property.name)) {
78
+ switch (property.name.text) {
79
+ case 'deps':
80
+ if (ts__default["default"].isArrayLiteralExpression(property.initializer)) {
81
+ deps = property.initializer.elements.map((el) => el.getText());
82
+ }
83
+ break;
84
+ case 'provide':
85
+ initializerToken = property.initializer.getText();
86
+ break;
87
+ case 'useExisting':
88
+ useExisting = property.initializer;
89
+ break;
90
+ case 'useFactory':
91
+ useFactoryCode = property.initializer.getText();
92
+ break;
93
+ case 'useValue':
94
+ useValue = property.initializer;
95
+ break;
96
+ case 'multi':
97
+ multi = property.initializer.kind === ts__default["default"].SyntaxKind.TrueKeyword;
98
+ break;
99
+ }
79
100
  }
80
- switch (property.name.text) {
81
- case 'deps':
82
- if (ts__default["default"].isArrayLiteralExpression(property.initializer)) {
83
- deps = property.initializer.elements.map((el) => el.getText());
84
- }
85
- break;
86
- case 'provide':
87
- initializerToken = property.initializer.getText();
88
- break;
89
- case 'useExisting':
90
- useExisting = property.initializer;
91
- break;
92
- case 'useFactory':
93
- useFactory = property.initializer;
94
- break;
95
- case 'useValue':
96
- useValue = property.initializer;
97
- break;
98
- case 'multi':
99
- multi = property.initializer.kind === ts__default["default"].SyntaxKind.TrueKeyword;
100
- break;
101
+ // Handle the `useFactory() {}` shorthand case.
102
+ if (ts__default["default"].isMethodDeclaration(property) && property.name.getText() === 'useFactory') {
103
+ const params = property.parameters.map((param) => param.getText()).join(', ');
104
+ useFactoryCode = `(${params}) => ${property.body?.getText()}`;
101
105
  }
102
106
  }
103
107
  if (!initializerToken || !multi) {
@@ -119,12 +123,15 @@ function tryParseProviderExpression(node) {
119
123
  initializerCode: `() => inject(${useExisting.getText()})()`,
120
124
  };
121
125
  }
122
- if (useFactory) {
126
+ if (useFactoryCode) {
123
127
  const args = deps.map((dep) => `inject(${dep})`);
124
128
  return {
125
129
  ...info,
126
130
  importInject: deps.length > 0,
127
- initializerCode: `(${useFactory.getText()})(${args.join(', ')})`,
131
+ initializerCode: `() => {
132
+ const initializerFn = (${useFactoryCode})(${args.join(', ')});
133
+ return initializerFn();
134
+ }`,
128
135
  };
129
136
  }
130
137
  if (useValue) {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.0.0
3
+ * @license Angular v19.0.2
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -11,14 +11,14 @@ 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-d642e87e.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
- require('./checker-e3da3b0a.js');
17
+ var checker = require('./checker-a00b735e.js');
18
18
  require('os');
19
+ require('@angular-devkit/core');
19
20
  require('module');
20
21
  require('url');
21
- require('@angular-devkit/core');
22
22
 
23
23
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
24
24
 
@@ -51,22 +51,25 @@ function findLiteralProperty(literal, name) {
51
51
  /**
52
52
  * Checks whether a component is standalone.
53
53
  * @param node Class being checked.
54
+ * @param reflector The reflection host to use.
54
55
  */
55
- function isStandaloneComponent(node) {
56
- const decorator = node.modifiers?.find((m) => m.kind === ts__default["default"].SyntaxKind.Decorator);
57
- if (!decorator) {
56
+ function isStandaloneComponent(node, reflector) {
57
+ const decorators = reflector.getDecoratorsOfDeclaration(node);
58
+ if (decorators === null) {
58
59
  return false;
59
60
  }
60
- if (ts__default["default"].isCallExpression(decorator.expression)) {
61
- const arg = decorator.expression.arguments[0];
62
- if (ts__default["default"].isObjectLiteralExpression(arg)) {
63
- const property = findLiteralProperty(arg, 'standalone');
64
- if (property) {
65
- return property.initializer.getText() === 'true';
66
- }
67
- else {
68
- return true; // standalone is true by default in v19
69
- }
61
+ const decorator = checker.findAngularDecorator(decorators, 'Component', false);
62
+ if (decorator === undefined || decorator.args === null || decorator.args.length !== 1) {
63
+ return false;
64
+ }
65
+ const arg = decorator.args[0];
66
+ if (ts__default["default"].isObjectLiteralExpression(arg)) {
67
+ const property = findLiteralProperty(arg, 'standalone');
68
+ if (property) {
69
+ return property.initializer.getText() === 'true';
70
+ }
71
+ else {
72
+ return true; // standalone is true by default in v19
70
73
  }
71
74
  }
72
75
  return false;
@@ -161,13 +164,14 @@ function isProvideRoutesCallExpression(node, typeChecker) {
161
164
  */
162
165
  function migrateFileToLazyRoutes(sourceFile, program) {
163
166
  const typeChecker = program.getTypeChecker();
167
+ const reflector = new checker.TypeScriptReflectionHost(typeChecker);
164
168
  const printer = ts__default["default"].createPrinter();
165
169
  const tracker = new compiler_host.ChangeTracker(printer);
166
170
  const routeArraysToMigrate = findRoutesArrayToMigrate(sourceFile, typeChecker);
167
171
  if (routeArraysToMigrate.length === 0) {
168
172
  return { pendingChanges: [], skippedRoutes: [], migratedRoutes: [] };
169
173
  }
170
- const { skippedRoutes, migratedRoutes } = migrateRoutesArray(routeArraysToMigrate, typeChecker, tracker);
174
+ const { skippedRoutes, migratedRoutes } = migrateRoutesArray(routeArraysToMigrate, typeChecker, reflector, tracker);
171
175
  return {
172
176
  pendingChanges: tracker.recordChanges().get(sourceFile) || [],
173
177
  skippedRoutes,
@@ -239,14 +243,14 @@ function findRoutesArrayToMigrate(sourceFile, typeChecker) {
239
243
  return routesArrays;
240
244
  }
241
245
  /** Migrate a routes object standalone components to be lazy loaded. */
242
- function migrateRoutesArray(routesArray, typeChecker, tracker) {
246
+ function migrateRoutesArray(routesArray, typeChecker, reflector, tracker) {
243
247
  const migratedRoutes = [];
244
248
  const skippedRoutes = [];
245
249
  const importsToRemove = [];
246
250
  for (const route of routesArray) {
247
251
  route.array.elements.forEach((element) => {
248
252
  if (ts__default["default"].isObjectLiteralExpression(element)) {
249
- const { migratedRoutes: migrated, skippedRoutes: toBeSkipped, importsToRemove: toBeRemoved, } = migrateRoute(element, route, typeChecker, tracker);
253
+ const { migratedRoutes: migrated, skippedRoutes: toBeSkipped, importsToRemove: toBeRemoved, } = migrateRoute(element, route, typeChecker, reflector, tracker);
250
254
  migratedRoutes.push(...migrated);
251
255
  skippedRoutes.push(...toBeSkipped);
252
256
  importsToRemove.push(...toBeRemoved);
@@ -262,7 +266,7 @@ function migrateRoutesArray(routesArray, typeChecker, tracker) {
262
266
  * Migrates a single route object and returns the results of the migration
263
267
  * It recursively migrates the children routes if they exist
264
268
  */
265
- function migrateRoute(element, route, typeChecker, tracker) {
269
+ function migrateRoute(element, route, typeChecker, reflector, tracker) {
266
270
  const skippedRoutes = [];
267
271
  const migratedRoutes = [];
268
272
  const importsToRemove = [];
@@ -274,7 +278,7 @@ function migrateRoute(element, route, typeChecker, tracker) {
274
278
  if (children && ts__default["default"].isArrayLiteralExpression(children.initializer)) {
275
279
  for (const childRoute of children.initializer.elements) {
276
280
  if (ts__default["default"].isObjectLiteralExpression(childRoute)) {
277
- const { migratedRoutes: migrated, skippedRoutes: toBeSkipped, importsToRemove: toBeRemoved, } = migrateRoute(childRoute, route, typeChecker, tracker);
281
+ const { migratedRoutes: migrated, skippedRoutes: toBeSkipped, importsToRemove: toBeRemoved, } = migrateRoute(childRoute, route, typeChecker, reflector, tracker);
278
282
  migratedRoutes.push(...migrated);
279
283
  skippedRoutes.push(...toBeSkipped);
280
284
  importsToRemove.push(...toBeRemoved);
@@ -290,7 +294,7 @@ function migrateRoute(element, route, typeChecker, tracker) {
290
294
  return routeMigrationResults;
291
295
  }
292
296
  // if component is not a standalone component, skip it
293
- if (!isStandaloneComponent(componentDeclaration)) {
297
+ if (!isStandaloneComponent(componentDeclaration, reflector)) {
294
298
  skippedRoutes.push({ path: routePath, file: route.routeFilePath });
295
299
  return routeMigrationResults;
296
300
  }
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.0.0
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-ed2c0669.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-e3da3b0a.js');
16
- var program = require('./program-f984ab63.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-2adebceb.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');