@angular/core 19.0.0-rc.1 → 19.0.0-rc.3

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 +13164 -13060
  2. package/fesm2022/core.mjs.map +1 -1
  3. package/fesm2022/primitives/event-dispatch.mjs +2 -2
  4. package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
  5. package/fesm2022/primitives/signals.mjs +1 -1
  6. package/fesm2022/rxjs-interop.mjs +1 -1
  7. package/fesm2022/testing.mjs +4 -4
  8. package/index.d.ts +74 -13
  9. package/package.json +1 -1
  10. package/primitives/event-dispatch/index.d.ts +1 -1
  11. package/primitives/signals/index.d.ts +1 -1
  12. package/rxjs-interop/index.d.ts +1 -1
  13. package/schematics/bundles/{checker-9ca42e51.js → checker-e3da3b0a.js} +95 -54
  14. package/schematics/bundles/{combine_units-a16385aa.js → combine_units-2adebceb.js} +97 -28
  15. package/schematics/bundles/{compiler_host-31afa4ed.js → compiler_host-d642e87e.js} +2 -2
  16. package/schematics/bundles/control-flow-migration.js +3 -3
  17. package/schematics/bundles/explicit-standalone-flag.js +3 -3
  18. package/schematics/bundles/imports-4ac08251.js +1 -1
  19. package/schematics/bundles/inject-migration.js +3 -3
  20. package/schematics/bundles/leading_space-d190b83b.js +1 -1
  21. package/schematics/bundles/{migrate_ts_type_references-b2a28742.js → migrate_ts_type_references-ed2c0669.js} +527 -31
  22. package/schematics/bundles/nodes-0e7d45ca.js +1 -1
  23. package/schematics/bundles/output-migration.js +17 -14
  24. package/schematics/bundles/pending-tasks.js +3 -3
  25. package/schematics/bundles/{program-71beec0b.js → program-f984ab63.js} +45 -52
  26. package/schematics/bundles/project_tsconfig_paths-e9ccccbf.js +1 -1
  27. package/schematics/bundles/provide-initializer.js +3 -3
  28. package/schematics/bundles/route-lazy-loading.js +3 -3
  29. package/schematics/bundles/signal-input-migration.js +48 -35
  30. package/schematics/bundles/signal-queries-migration.js +21 -14
  31. package/schematics/bundles/signals.js +5 -5
  32. package/schematics/bundles/standalone-migration.js +159 -75
  33. package/schematics/ng-generate/signals/schema.json +1 -0
  34. package/testing/index.d.ts +1 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.0.0-rc.1
3
+ * @license Angular v19.0.0-rc.3
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-rc.1
3
+ * @license Angular v19.0.0-rc.3
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -10,12 +10,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
10
10
 
11
11
  var schematics = require('@angular-devkit/schematics');
12
12
  var project_tsconfig_paths = require('./project_tsconfig_paths-e9ccccbf.js');
13
- var combine_units = require('./combine_units-a16385aa.js');
13
+ var combine_units = require('./combine_units-2adebceb.js');
14
14
  require('os');
15
15
  var ts = require('typescript');
16
- var checker = require('./checker-9ca42e51.js');
17
- var assert = require('assert');
18
- var program = require('./program-71beec0b.js');
16
+ var checker = require('./checker-e3da3b0a.js');
17
+ var program = require('./program-f984ab63.js');
19
18
  require('path');
20
19
  require('@angular-devkit/core');
21
20
  require('node:path/posix');
@@ -26,7 +25,6 @@ require('url');
26
25
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
27
26
 
28
27
  var ts__default = /*#__PURE__*/_interopDefaultLegacy(ts);
29
- var assert__default = /*#__PURE__*/_interopDefaultLegacy(assert);
30
28
 
31
29
  function isOutputDeclarationEligibleForMigration(node) {
32
30
  return (node.initializer !== undefined &&
@@ -261,15 +259,16 @@ class OutputMigration extends combine_units.TsurgeFunnelMigration {
261
259
  const reflector = new checker.TypeScriptReflectionHost(checker$1);
262
260
  const dtsReader = new program.DtsMetadataReader(checker$1, reflector);
263
261
  const evaluator = new program.PartialEvaluator(reflector, checker$1, null);
264
- const ngCompiler = info.ngCompiler;
265
- assert__default["default"](ngCompiler !== null, 'Requires ngCompiler to run the migration');
266
- const resourceLoader = ngCompiler['resourceManager'];
267
- // Pre-Analyze the program and get access to the template type checker.
268
- const { templateTypeChecker } = ngCompiler['ensureAnalyzed']();
262
+ const resourceLoader = info.ngCompiler?.['resourceManager'] ?? null;
263
+ // Pre-analyze the program and get access to the template type checker.
264
+ // If we are processing a non-Angular target, there is no template info.
265
+ const { templateTypeChecker } = info.ngCompiler?.['ensureAnalyzed']() ?? {
266
+ templateTypeChecker: null,
267
+ };
269
268
  const knownFields = {
270
269
  // Note: We don't support cross-target migration of `Partial<T>` usages.
271
270
  // This is an acceptable limitation for performance reasons.
272
- shouldTrackClassReference: (node) => false,
271
+ shouldTrackClassReference: () => false,
273
272
  attemptRetrieveDescriptorFromSymbol: (s) => {
274
273
  const propDeclaration = getTargetPropertyDeclaration(s);
275
274
  if (propDeclaration !== null) {
@@ -378,13 +377,17 @@ class OutputMigration extends combine_units.TsurgeFunnelMigration {
378
377
  // detect .next usages that should be migrated to .emit in template and host binding expressions
379
378
  if (ref.kind === combine_units.ReferenceKind.InTemplate) {
380
379
  const callExpr = checkNonTsReferenceCallsField(ref, 'next');
381
- if (callExpr !== null) {
380
+ // TODO: here and below for host bindings, we should ideally filter in the global meta stage
381
+ // (instead of using the `outputFieldReplacements` map)
382
+ // as technically, the call expression could refer to an output
383
+ // from a whole different compilation unit (e.g. tsconfig.json).
384
+ if (callExpr !== null && outputFieldReplacements[ref.target.key] !== undefined) {
382
385
  addOutputReplacement(outputFieldReplacements, ref.target.key, ref.from.templateFile, calculateNextFnReplacementInTemplate(ref.from.templateFile, callExpr.nameSpan));
383
386
  }
384
387
  }
385
388
  else if (ref.kind === combine_units.ReferenceKind.InHostBinding) {
386
389
  const callExpr = checkNonTsReferenceCallsField(ref, 'next');
387
- if (callExpr !== null) {
390
+ if (callExpr !== null && outputFieldReplacements[ref.target.key] !== undefined) {
388
391
  addOutputReplacement(outputFieldReplacements, ref.target.key, ref.from.file, calculateNextFnReplacementInHostBinding(ref.from.file, ref.from.hostPropertyNode.getStart() + 1, callExpr.nameSpan));
389
392
  }
390
393
  }
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.0.0-rc.1
3
+ * @license Angular v19.0.0-rc.3
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -11,11 +11,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
11
11
  var schematics = require('@angular-devkit/schematics');
12
12
  var p = require('path');
13
13
  var project_tsconfig_paths = require('./project_tsconfig_paths-e9ccccbf.js');
14
- var compiler_host = require('./compiler_host-31afa4ed.js');
14
+ var compiler_host = require('./compiler_host-d642e87e.js');
15
15
  var ts = require('typescript');
16
16
  var imports = require('./imports-4ac08251.js');
17
17
  require('@angular-devkit/core');
18
- require('./checker-9ca42e51.js');
18
+ require('./checker-e3da3b0a.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-rc.1
3
+ * @license Angular v19.0.0-rc.3
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-9ca42e51.js');
9
+ var checker = require('./checker-e3da3b0a.js');
10
10
  var ts = require('typescript');
11
11
  var p = require('path');
12
12
  require('os');
@@ -987,7 +987,7 @@ const MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION = '18.0.0';
987
987
  function compileDeclareClassMetadata(metadata) {
988
988
  const definitionMap = new checker.DefinitionMap();
989
989
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$5));
990
- definitionMap.set('version', checker.literal('19.0.0-rc.1'));
990
+ definitionMap.set('version', checker.literal('19.0.0-rc.3'));
991
991
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
992
992
  definitionMap.set('type', metadata.type);
993
993
  definitionMap.set('decorators', metadata.decorators);
@@ -1005,7 +1005,7 @@ function compileComponentDeclareClassMetadata(metadata, dependencies) {
1005
1005
  callbackReturnDefinitionMap.set('ctorParameters', metadata.ctorParameters ?? checker.literal(null));
1006
1006
  callbackReturnDefinitionMap.set('propDecorators', metadata.propDecorators ?? checker.literal(null));
1007
1007
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION));
1008
- definitionMap.set('version', checker.literal('19.0.0-rc.1'));
1008
+ definitionMap.set('version', checker.literal('19.0.0-rc.3'));
1009
1009
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1010
1010
  definitionMap.set('type', metadata.type);
1011
1011
  definitionMap.set('resolveDeferredDeps', compileComponentMetadataAsyncResolver(dependencies));
@@ -1100,7 +1100,7 @@ function createDirectiveDefinitionMap(meta) {
1100
1100
  const definitionMap = new checker.DefinitionMap();
1101
1101
  const minVersion = getMinimumVersionForPartialOutput(meta);
1102
1102
  definitionMap.set('minVersion', checker.literal(minVersion));
1103
- definitionMap.set('version', checker.literal('19.0.0-rc.1'));
1103
+ definitionMap.set('version', checker.literal('19.0.0-rc.3'));
1104
1104
  // e.g. `type: MyDirective`
1105
1105
  definitionMap.set('type', meta.type.value);
1106
1106
  if (meta.isStandalone !== undefined) {
@@ -1516,7 +1516,7 @@ const MINIMUM_PARTIAL_LINKER_VERSION$4 = '12.0.0';
1516
1516
  function compileDeclareFactoryFunction(meta) {
1517
1517
  const definitionMap = new checker.DefinitionMap();
1518
1518
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$4));
1519
- definitionMap.set('version', checker.literal('19.0.0-rc.1'));
1519
+ definitionMap.set('version', checker.literal('19.0.0-rc.3'));
1520
1520
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1521
1521
  definitionMap.set('type', meta.type.value);
1522
1522
  definitionMap.set('deps', compileDependencies(meta.deps));
@@ -1551,7 +1551,7 @@ function compileDeclareInjectableFromMetadata(meta) {
1551
1551
  function createInjectableDefinitionMap(meta) {
1552
1552
  const definitionMap = new checker.DefinitionMap();
1553
1553
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$3));
1554
- definitionMap.set('version', checker.literal('19.0.0-rc.1'));
1554
+ definitionMap.set('version', checker.literal('19.0.0-rc.3'));
1555
1555
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1556
1556
  definitionMap.set('type', meta.type.value);
1557
1557
  // Only generate providedIn property if it has a non-null value
@@ -1602,7 +1602,7 @@ function compileDeclareInjectorFromMetadata(meta) {
1602
1602
  function createInjectorDefinitionMap(meta) {
1603
1603
  const definitionMap = new checker.DefinitionMap();
1604
1604
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$2));
1605
- definitionMap.set('version', checker.literal('19.0.0-rc.1'));
1605
+ definitionMap.set('version', checker.literal('19.0.0-rc.3'));
1606
1606
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1607
1607
  definitionMap.set('type', meta.type.value);
1608
1608
  definitionMap.set('providers', meta.providers);
@@ -1635,7 +1635,7 @@ function createNgModuleDefinitionMap(meta) {
1635
1635
  throw new Error('Invalid path! Local compilation mode should not get into the partial compilation path');
1636
1636
  }
1637
1637
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$1));
1638
- definitionMap.set('version', checker.literal('19.0.0-rc.1'));
1638
+ definitionMap.set('version', checker.literal('19.0.0-rc.3'));
1639
1639
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1640
1640
  definitionMap.set('type', meta.type.value);
1641
1641
  // We only generate the keys in the metadata if the arrays contain values.
@@ -1686,7 +1686,7 @@ function compileDeclarePipeFromMetadata(meta) {
1686
1686
  function createPipeDefinitionMap(meta) {
1687
1687
  const definitionMap = new checker.DefinitionMap();
1688
1688
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION));
1689
- definitionMap.set('version', checker.literal('19.0.0-rc.1'));
1689
+ definitionMap.set('version', checker.literal('19.0.0-rc.3'));
1690
1690
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1691
1691
  // e.g. `type: MyPipe`
1692
1692
  definitionMap.set('type', meta.type.value);
@@ -1838,7 +1838,7 @@ class AliasStrategy {
1838
1838
  return null;
1839
1839
  }
1840
1840
  return {
1841
- kind: 0 /* ReferenceEmitKind.Success */,
1841
+ kind: checker.ReferenceEmitKind.Success,
1842
1842
  expression: ref.alias,
1843
1843
  importedFile: 'unknown',
1844
1844
  };
@@ -13932,22 +13932,18 @@ class ClassExtractor {
13932
13932
  /** The result only contains properties, method implementations and abstracts */
13933
13933
  filterMethodOverloads(declarations) {
13934
13934
  return declarations.filter((declaration, index) => {
13935
+ // Check if the declaration is a function or method
13935
13936
  if (ts__default["default"].isFunctionDeclaration(declaration) || ts__default["default"].isMethodDeclaration(declaration)) {
13936
- if (ts__default["default"].getCombinedModifierFlags(declaration) & ts__default["default"].ModifierFlags.Abstract) {
13937
- // TS enforces that all declarations of an abstract method are consecutive
13938
- const previousDeclaration = declarations[index - 1];
13939
- const samePreviousAbstractMethod = previousDeclaration &&
13940
- ts__default["default"].isMethodDeclaration(previousDeclaration) &&
13941
- ts__default["default"].getCombinedModifierFlags(previousDeclaration) & ts__default["default"].ModifierFlags.Abstract &&
13942
- previousDeclaration.name.getText() === declaration.name?.getText();
13943
- // We just need a reference to one member
13944
- // In the case of Abstract Methods we only want to return the first abstract.
13945
- // Others with the same name are considered as overloads
13946
- // Later on, the function extractor will handle overloads and implementation detection
13947
- return !samePreviousAbstractMethod;
13948
- }
13949
- return !!declaration.body;
13950
- }
13937
+ // TypeScript ensures that all declarations for a given abstract method appear consecutively.
13938
+ const nextDeclaration = declarations[index + 1];
13939
+ const isNextAbstractMethodWithSameName = nextDeclaration &&
13940
+ ts__default["default"].isMethodDeclaration(nextDeclaration) &&
13941
+ nextDeclaration.name.getText() === declaration.name?.getText();
13942
+ // Return only the last occurrence of an abstract method to avoid overload duplication.
13943
+ // Subsequent overloads or implementations are handled separately by the function extractor.
13944
+ return !isNextAbstractMethodWithSameName;
13945
+ }
13946
+ // Include non-method declarations, such as properties, without filtering.
13951
13947
  return true;
13952
13948
  });
13953
13949
  }
@@ -14518,6 +14514,7 @@ function extractTypeAlias(declaration) {
14518
14514
  name: declaration.name.getText(),
14519
14515
  type: declaration.type.getText(),
14520
14516
  entryType: EntryType.TypeAlias,
14517
+ generics: extractGenerics(declaration),
14521
14518
  rawComment: extractRawJsDoc(declaration),
14522
14519
  description: extractJsDocDescription(declaration),
14523
14520
  jsdocTags: extractJsDocTags(declaration),
@@ -17295,21 +17292,19 @@ class UnusedStandaloneImportsRule {
17295
17292
  if (unused === null) {
17296
17293
  return null;
17297
17294
  }
17295
+ const propertyAssignment = closestNode(metadata.rawImports, ts__default["default"].isPropertyAssignment);
17298
17296
  const category = this.typeCheckingConfig.unusedStandaloneImports === 'error'
17299
17297
  ? ts__default["default"].DiagnosticCategory.Error
17300
17298
  : ts__default["default"].DiagnosticCategory.Warning;
17301
- if (unused.length === metadata.imports.length) {
17302
- return checker.makeDiagnostic(checker.ErrorCode.UNUSED_STANDALONE_IMPORTS, this.getDiagnosticNode(metadata.rawImports), 'All imports are unused', undefined, category);
17303
- }
17304
- return checker.makeDiagnostic(checker.ErrorCode.UNUSED_STANDALONE_IMPORTS, this.getDiagnosticNode(metadata.rawImports), 'Imports array contains unused imports', unused.map((ref) => {
17305
- return checker.makeRelatedInformation(
17306
- // Intentionally don't pass a message to `makeRelatedInformation` to make the diagnostic
17307
- // less noisy. The node will already be highlighted so the user can see which node is
17308
- // unused. Note that in the case where an origin can't be resolved, we fall back to
17309
- // the original node's identifier so the user can still see the name. This can happen
17310
- // when the unused is coming from an imports array within the same file.
17311
- ref.getOriginForDiagnostics(metadata.rawImports, ref.node.name), '');
17312
- }), category);
17299
+ if (unused.length === metadata.imports.length && propertyAssignment !== null) {
17300
+ return checker.makeDiagnostic(checker.ErrorCode.UNUSED_STANDALONE_IMPORTS, propertyAssignment.name, 'All imports are unused', undefined, category);
17301
+ }
17302
+ return unused.map((ref) => {
17303
+ const diagnosticNode = ref.getIdentityInExpression(metadata.rawImports) ||
17304
+ ref.getIdentityIn(node.getSourceFile()) ||
17305
+ metadata.rawImports;
17306
+ return checker.makeDiagnostic(checker.ErrorCode.UNUSED_STANDALONE_IMPORTS, diagnosticNode, `${ref.node.name.text} is not used within the template of ${metadata.name}`, undefined, category);
17307
+ });
17313
17308
  }
17314
17309
  getUnusedSymbols(metadata, usedDirectives, usedPipes) {
17315
17310
  const { imports, rawImports } = metadata;
@@ -17367,21 +17362,19 @@ class UnusedStandaloneImportsRule {
17367
17362
  // symbol like an array of shared common components.
17368
17363
  return true;
17369
17364
  }
17370
- /** Gets the node on which to report the diagnostic. */
17371
- getDiagnosticNode(importsExpression) {
17372
- let current = importsExpression.parent;
17373
- while (current) {
17374
- // Highlight the `imports:` part of the node instead of the entire node, because
17375
- // imports arrays can be long which makes the diagnostic harder to scan visually.
17376
- if (ts__default["default"].isPropertyAssignment(current)) {
17377
- return current.name;
17378
- }
17379
- else {
17380
- current = current.parent;
17381
- }
17365
+ }
17366
+ /** Gets the closest parent node of a certain type. */
17367
+ function closestNode(start, predicate) {
17368
+ let current = start.parent;
17369
+ while (current) {
17370
+ if (predicate(current)) {
17371
+ return current;
17372
+ }
17373
+ else {
17374
+ current = current.parent;
17382
17375
  }
17383
- return importsExpression;
17384
17376
  }
17377
+ return null;
17385
17378
  }
17386
17379
 
17387
17380
  /*!
@@ -20127,7 +20120,7 @@ var semver = /*@__PURE__*/getDefaultExportFromCjs(semverExports);
20127
20120
  * @param minVersion Minimum required version for the feature.
20128
20121
  */
20129
20122
  function coreVersionSupportsFeature(coreVersion, minVersion) {
20130
- // A version of `19.0.0-rc.1` usually means that core is at head so it supports
20123
+ // A version of `19.0.0-rc.3` usually means that core is at head so it supports
20131
20124
  // all features. Use string interpolation prevent the placeholder from being replaced
20132
20125
  // with the current version during build time.
20133
20126
  if (coreVersion === `0.0.0-${'PLACEHOLDER'}`) {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.0.0-rc.1
3
+ * @license Angular v19.0.0-rc.3
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-rc.1
3
+ * @license Angular v19.0.0-rc.3
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -11,11 +11,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
11
11
  var schematics = require('@angular-devkit/schematics');
12
12
  var p = require('path');
13
13
  var project_tsconfig_paths = require('./project_tsconfig_paths-e9ccccbf.js');
14
- var compiler_host = require('./compiler_host-31afa4ed.js');
14
+ var compiler_host = require('./compiler_host-d642e87e.js');
15
15
  var ts = require('typescript');
16
16
  var imports = require('./imports-4ac08251.js');
17
17
  require('@angular-devkit/core');
18
- require('./checker-9ca42e51.js');
18
+ require('./checker-e3da3b0a.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.0-rc.1
3
+ * @license Angular v19.0.0-rc.3
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-31afa4ed.js');
14
+ var compiler_host = require('./compiler_host-d642e87e.js');
15
15
  var project_tsconfig_paths = require('./project_tsconfig_paths-e9ccccbf.js');
16
16
  var ts = require('typescript');
17
- require('./checker-9ca42e51.js');
17
+ require('./checker-e3da3b0a.js');
18
18
  require('os');
19
19
  require('module');
20
20
  require('url');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.0.0-rc.1
3
+ * @license Angular v19.0.0-rc.3
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -9,13 +9,13 @@
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-b2a28742.js');
12
+ var migrate_ts_type_references = require('./migrate_ts_type_references-ed2c0669.js');
13
13
  var ts = require('typescript');
14
14
  require('os');
15
- var checker = require('./checker-9ca42e51.js');
16
- var program = require('./program-71beec0b.js');
15
+ var checker = require('./checker-e3da3b0a.js');
16
+ var program = require('./program-f984ab63.js');
17
17
  require('path');
18
- var combine_units = require('./combine_units-a16385aa.js');
18
+ var combine_units = require('./combine_units-2adebceb.js');
19
19
  var assert = require('assert');
20
20
  var project_tsconfig_paths = require('./project_tsconfig_paths-e9ccccbf.js');
21
21
  require('./leading_space-d190b83b.js');
@@ -259,27 +259,29 @@ class KnownInputs {
259
259
  * and can be used for integrations with e.g. the language service.
260
260
  */
261
261
  function prepareAnalysisInfo(userProgram, compiler, programAbsoluteRootPaths) {
262
- // Analyze sync and retrieve necessary dependencies.
263
- // Note: `getTemplateTypeChecker` requires the `enableTemplateTypeChecker` flag, but
264
- // this has negative effects as it causes optional TCB operations to execute, which may
265
- // error with unsuccessful reference emits that previously were ignored outside of the migration.
266
- // The migration is resilient to TCB information missing, so this is fine, and all the information
267
- // we need is part of required TCB operations anyway.
268
- const { refEmitter, metaReader, templateTypeChecker } = compiler['ensureAnalyzed']();
269
- // Generate all type check blocks.
270
- templateTypeChecker.generateAllTypeCheckBlocks();
262
+ let refEmitter = null;
263
+ let metaReader = null;
264
+ let templateTypeChecker = null;
265
+ let resourceLoader = null;
266
+ if (compiler !== null) {
267
+ // Analyze sync and retrieve necessary dependencies.
268
+ // Note: `getTemplateTypeChecker` requires the `enableTemplateTypeChecker` flag, but
269
+ // this has negative effects as it causes optional TCB operations to execute, which may
270
+ // error with unsuccessful reference emits that previously were ignored outside of the migration.
271
+ // The migration is resilient to TCB information missing, so this is fine, and all the information
272
+ // we need is part of required TCB operations anyway.
273
+ const state = compiler['ensureAnalyzed']();
274
+ resourceLoader = compiler['resourceManager'];
275
+ refEmitter = state.refEmitter;
276
+ metaReader = state.metaReader;
277
+ templateTypeChecker = state.templateTypeChecker;
278
+ // Generate all type check blocks.
279
+ state.templateTypeChecker.generateAllTypeCheckBlocks();
280
+ }
271
281
  const typeChecker = userProgram.getTypeChecker();
272
282
  const reflector = new checker.TypeScriptReflectionHost(typeChecker);
273
283
  const evaluator = new program.PartialEvaluator(reflector, typeChecker, null);
274
284
  const dtsMetadataReader = new program.DtsMetadataReader(typeChecker, reflector);
275
- const resourceLoader = compiler['resourceManager'];
276
- // Optional filter for testing. Allows for simulation of parallel execution
277
- // even if some tsconfig's have overlap due to sharing of TS sources.
278
- // (this is commonly not the case in g3 where deps are `.d.ts` files).
279
- const limitToRootNamesOnly = process.env['LIMIT_TO_ROOT_NAMES_ONLY'] === '1';
280
- if (limitToRootNamesOnly) {
281
- assert__default["default"](programAbsoluteRootPaths !== undefined, 'Expected absolute root paths when limiting to root names.');
282
- }
283
285
  return {
284
286
  metaRegistry: metaReader,
285
287
  dtsMetadataReader,
@@ -315,8 +317,8 @@ class MigrationResult {
315
317
  }
316
318
 
317
319
  /** Attempts to extract metadata of a potential TypeScript `@Input()` declaration. */
318
- function extractDecoratorInput(node, host, reflector, metadataReader, evaluator, refEmitter) {
319
- return (extractSourceCodeInput(node, host, reflector, evaluator, refEmitter) ??
320
+ function extractDecoratorInput(node, host, reflector, metadataReader, evaluator) {
321
+ return (extractSourceCodeInput(node, host, reflector, evaluator) ??
320
322
  extractDtsInput(node, metadataReader));
321
323
  }
322
324
  /**
@@ -366,7 +368,7 @@ function extractDtsInput(node, metadataReader) {
366
368
  * Attempts to extract `@Input()` information for the given node, assuming it's
367
369
  * directly defined inside a source file (`.ts`).
368
370
  */
369
- function extractSourceCodeInput(node, host, reflector, evaluator, refEmitter) {
371
+ function extractSourceCodeInput(node, host, reflector, evaluator) {
370
372
  if (!combine_units.isInputContainerNode(node) ||
371
373
  !ts__default["default"].isIdentifier(node.name) ||
372
374
  node.getSourceFile().isDeclarationFile) {
@@ -399,7 +401,7 @@ function extractSourceCodeInput(node, host, reflector, evaluator, refEmitter) {
399
401
  isRequired = !!evaluatedInputOpts.get('required');
400
402
  }
401
403
  if (evaluatedInputOpts.has('transform') && evaluatedInputOpts.get('transform') != null) {
402
- transformResult = parseTransformOfInput(evaluatedInputOpts, node, reflector, refEmitter);
404
+ transformResult = parseTransformOfInput(evaluatedInputOpts, node, reflector);
403
405
  }
404
406
  }
405
407
  }
@@ -418,13 +420,25 @@ function extractSourceCodeInput(node, host, reflector, evaluator, refEmitter) {
418
420
  * Gracefully attempts to parse the `transform` option of an `@Input()`
419
421
  * and extracts its metadata.
420
422
  */
421
- function parseTransformOfInput(evaluatedInputOpts, node, reflector, refEmitter) {
423
+ function parseTransformOfInput(evaluatedInputOpts, node, reflector) {
422
424
  const transformValue = evaluatedInputOpts.get('transform');
423
425
  if (!(transformValue instanceof checker.DynamicValue) && !(transformValue instanceof checker.Reference)) {
424
426
  return null;
425
427
  }
428
+ // For parsing the transform, we don't need a real reference emitter, as
429
+ // the emitter is only used for verifying that the transform type could be
430
+ // copied into e.g. an `ngInputAccept` class member.
431
+ const noopRefEmitter = new checker.ReferenceEmitter([
432
+ {
433
+ emit: () => ({
434
+ kind: checker.ReferenceEmitKind.Success,
435
+ expression: migrate_ts_type_references.NULL_EXPR,
436
+ importedFile: null,
437
+ }),
438
+ },
439
+ ]);
426
440
  try {
427
- return program.parseDecoratorInputTransformFunction(node.parent, node.name.text, transformValue, reflector, refEmitter, checker.CompilationMode.FULL);
441
+ return program.parseDecoratorInputTransformFunction(node.parent, node.name.text, transformValue, reflector, noopRefEmitter, checker.CompilationMode.FULL);
428
442
  }
429
443
  catch (e) {
430
444
  if (!(e instanceof checker.FatalDiagnosticError)) {
@@ -584,9 +598,9 @@ function isPrimitiveImportableTypeNode(type) {
584
598
  * Phase where we iterate through all source files of the program (including `.d.ts`)
585
599
  * and keep track of all `@Input`'s we discover.
586
600
  */
587
- function pass1__IdentifySourceFileAndDeclarationInputs(sf, host, checker, reflector, dtsMetadataReader, evaluator, refEmitter, knownDecoratorInputs, result) {
601
+ function pass1__IdentifySourceFileAndDeclarationInputs(sf, host, checker, reflector, dtsMetadataReader, evaluator, knownDecoratorInputs, result) {
588
602
  const visitor = (node) => {
589
- const decoratorInput = extractDecoratorInput(node, host, reflector, dtsMetadataReader, evaluator, refEmitter);
603
+ const decoratorInput = extractDecoratorInput(node, host, reflector, dtsMetadataReader, evaluator);
590
604
  if (decoratorInput !== null) {
591
605
  assert__default["default"](combine_units.isInputContainerNode(node), 'Expected input to be declared on accessor or property.');
592
606
  const inputDescr = getInputDescriptor(host, node);
@@ -671,13 +685,13 @@ function pass2_IdentifySourceFileReferences(programInfo, checker, reflector, res
671
685
  * - determining incompatible inputs
672
686
  * - checking inheritance
673
687
  */
674
- function executeAnalysisPhase(host, knownInputs, result, { sourceFiles, fullProgramSourceFiles, reflector, dtsMetadataReader, typeChecker, templateTypeChecker, resourceLoader, evaluator, refEmitter, }) {
688
+ function executeAnalysisPhase(host, knownInputs, result, { sourceFiles, fullProgramSourceFiles, reflector, dtsMetadataReader, typeChecker, templateTypeChecker, resourceLoader, evaluator, }) {
675
689
  // Pass 1
676
690
  fullProgramSourceFiles.forEach((sf) =>
677
691
  // Shim shim files. Those are unnecessary and might cause unexpected slowness.
678
692
  // e.g. `ngtypecheck` files.
679
693
  !checker.isShim(sf) &&
680
- pass1__IdentifySourceFileAndDeclarationInputs(sf, host, typeChecker, reflector, dtsMetadataReader, evaluator, refEmitter, knownInputs, result));
694
+ pass1__IdentifySourceFileAndDeclarationInputs(sf, host, typeChecker, reflector, dtsMetadataReader, evaluator, knownInputs, result));
681
695
  const fieldNamesToConsiderForReferenceLookup = new Set();
682
696
  for (const input of knownInputs.knownInputIds.values()) {
683
697
  if (host.config.shouldMigrateInput?.(input) === false) {
@@ -1254,9 +1268,9 @@ class SignalInputMigration extends combine_units.TsurgeComplexMigration {
1254
1268
  super();
1255
1269
  this.config = config;
1256
1270
  }
1257
- // Override the default ngtsc program creation, to add extra flags.
1271
+ // Override the default program creation, to add extra flags.
1258
1272
  createProgram(tsconfigAbsPath, fs) {
1259
- return combine_units.createNgtscProgram(tsconfigAbsPath, fs, {
1273
+ return combine_units.createBaseProgramInfo(tsconfigAbsPath, fs, {
1260
1274
  _compilePoisonedComponents: true,
1261
1275
  // We want to migrate non-exported classes too.
1262
1276
  compileNonExportedClasses: true,
@@ -1284,7 +1298,6 @@ class SignalInputMigration extends combine_units.TsurgeComplexMigration {
1284
1298
  }
1285
1299
  // Extend the program info with the analysis information we need in every phase.
1286
1300
  prepareAnalysisDeps(info) {
1287
- assert__default["default"](info.ngCompiler !== null, 'Expected `NgCompiler` to be configured.');
1288
1301
  const analysisInfo = {
1289
1302
  ...info,
1290
1303
  ...prepareAnalysisInfo(info.program, info.ngCompiler, info.programAbsoluteRootFileNames),
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.0.0-rc.1
3
+ * @license Angular v19.0.0-rc.3
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -10,14 +10,14 @@ Object.defineProperty(exports, '__esModule', { value: true });
10
10
 
11
11
  var schematics = require('@angular-devkit/schematics');
12
12
  var project_tsconfig_paths = require('./project_tsconfig_paths-e9ccccbf.js');
13
- var combine_units = require('./combine_units-a16385aa.js');
13
+ var combine_units = require('./combine_units-2adebceb.js');
14
14
  require('os');
15
15
  var ts = require('typescript');
16
- var checker = require('./checker-9ca42e51.js');
17
- var program = require('./program-71beec0b.js');
18
- var assert = require('assert');
16
+ var checker = require('./checker-e3da3b0a.js');
17
+ var program = require('./program-f984ab63.js');
19
18
  require('path');
20
- var migrate_ts_type_references = require('./migrate_ts_type_references-b2a28742.js');
19
+ var migrate_ts_type_references = require('./migrate_ts_type_references-ed2c0669.js');
20
+ var assert = require('assert');
21
21
  require('@angular-devkit/core');
22
22
  require('node:path/posix');
23
23
  require('fs');
@@ -722,11 +722,15 @@ class SignalQueriesMigration extends combine_units.TsurgeComplexMigration {
722
722
  this.config = config;
723
723
  }
724
724
  async analyze(info) {
725
- assert__default["default"](info.ngCompiler !== null, 'Expected queries migration to have an Angular program.');
726
725
  // Pre-Analyze the program and get access to the template type checker.
727
- const { templateTypeChecker } = info.ngCompiler['ensureAnalyzed']();
728
- // Generate all type check blocks.
729
- templateTypeChecker.generateAllTypeCheckBlocks();
726
+ const { templateTypeChecker } = info.ngCompiler?.['ensureAnalyzed']() ?? {
727
+ templateTypeChecker: null,
728
+ };
729
+ const resourceLoader = info.ngCompiler?.['resourceManager'] ?? null;
730
+ // Generate all type check blocks, if we have Angular template information.
731
+ if (templateTypeChecker !== null) {
732
+ templateTypeChecker.generateAllTypeCheckBlocks();
733
+ }
730
734
  const { sourceFiles, program: program$1 } = info;
731
735
  const checker$1 = program$1.getTypeChecker();
732
736
  const reflector = new checker.TypeScriptReflectionHost(checker$1);
@@ -808,7 +812,7 @@ class SignalQueriesMigration extends combine_units.TsurgeComplexMigration {
808
812
  return descriptor;
809
813
  },
810
814
  };
811
- groupedAstVisitor.register(combine_units.createFindAllSourceFileReferencesVisitor(info, checker$1, reflector, info.ngCompiler['resourceManager'], evaluator, templateTypeChecker, allFieldsOrKnownQueries,
815
+ groupedAstVisitor.register(combine_units.createFindAllSourceFileReferencesVisitor(info, checker$1, reflector, resourceLoader, evaluator, templateTypeChecker, allFieldsOrKnownQueries,
812
816
  // In non-batch mode, we know what inputs exist and can optimize the reference
813
817
  // resolution significantly (for e.g. VSCode integration)— as we know what
814
818
  // field names may be used to reference potential queries.
@@ -909,9 +913,12 @@ class SignalQueriesMigration extends combine_units.TsurgeComplexMigration {
909
913
  return combine_units.confirmAsSerializable(globalUnitData);
910
914
  }
911
915
  async migrate(globalMetadata, info) {
912
- assert__default["default"](info.ngCompiler !== null, 'Expected queries migration to have an Angular program.');
913
916
  // Pre-Analyze the program and get access to the template type checker.
914
- const { templateTypeChecker, metaReader } = info.ngCompiler['ensureAnalyzed']();
917
+ const { templateTypeChecker, metaReader } = info.ngCompiler?.['ensureAnalyzed']() ?? {
918
+ templateTypeChecker: null,
919
+ metaReader: null,
920
+ };
921
+ const resourceLoader = info.ngCompiler?.['resourceManager'] ?? null;
915
922
  const { program: program$1, sourceFiles } = info;
916
923
  const checker$1 = program$1.getTypeChecker();
917
924
  const reflector = new checker.TypeScriptReflectionHost(checker$1);
@@ -966,7 +973,7 @@ class SignalQueriesMigration extends combine_units.TsurgeComplexMigration {
966
973
  referenceResult.references = globalMetadata.reusableAnalysisReferences;
967
974
  }
968
975
  else {
969
- groupedAstVisitor.register(combine_units.createFindAllSourceFileReferencesVisitor(info, checker$1, reflector, info.ngCompiler['resourceManager'], evaluator, templateTypeChecker, knownQueries, fieldNamesToConsiderForReferenceLookup, referenceResult).visitor);
976
+ groupedAstVisitor.register(combine_units.createFindAllSourceFileReferencesVisitor(info, checker$1, reflector, resourceLoader, evaluator, templateTypeChecker, knownQueries, fieldNamesToConsiderForReferenceLookup, referenceResult).visitor);
970
977
  }
971
978
  // Check inheritance.
972
979
  // NOTE: Inheritance is only checked in the migrate stage as we cannot reliably