@angular/core 19.0.0-rc.0 → 19.0.0-rc.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 (40) hide show
  1. package/fesm2022/core.mjs +13699 -13802
  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/primitives/signals.mjs.map +1 -1
  7. package/fesm2022/rxjs-interop.mjs +1 -1
  8. package/fesm2022/rxjs-interop.mjs.map +1 -1
  9. package/fesm2022/testing.mjs +6 -6
  10. package/fesm2022/testing.mjs.map +1 -1
  11. package/index.d.ts +28 -62
  12. package/package.json +1 -1
  13. package/primitives/event-dispatch/index.d.ts +1 -1
  14. package/primitives/signals/index.d.ts +1 -1
  15. package/rxjs-interop/index.d.ts +1 -1
  16. package/schematics/bundles/{checker-2451e7c5.js → checker-cd95ebda.js} +191 -169
  17. package/schematics/bundles/combine_units-528c4a5d.js +1703 -0
  18. package/schematics/bundles/{compiler_host-f54f8309.js → compiler_host-40e8d55f.js} +8 -5
  19. package/schematics/bundles/control-flow-migration.js +3 -3
  20. package/schematics/bundles/explicit-standalone-flag.js +5 -5
  21. package/schematics/bundles/{imports-44987700.js → imports-4ac08251.js} +1 -1
  22. package/schematics/bundles/inject-migration.js +131 -37
  23. package/schematics/bundles/{leading_space-6e7a8ec6.js → leading_space-d190b83b.js} +1 -1
  24. package/schematics/bundles/{migrate_ts_type_references-ab18a7c3.js → migrate_ts_type_references-0bcee7cb.js} +528 -32
  25. package/schematics/bundles/{ng_decorators-3ad437d2.js → nodes-0e7d45ca.js} +15 -2
  26. package/schematics/bundles/output-migration.js +30 -6906
  27. package/schematics/bundles/pending-tasks.js +5 -5
  28. package/schematics/bundles/{program-58424797.js → program-8f30df93.js} +119 -59
  29. package/schematics/bundles/{project_tsconfig_paths-6c9cde78.js → project_tsconfig_paths-e9ccccbf.js} +1 -1
  30. package/schematics/bundles/provide-initializer.js +17 -28
  31. package/schematics/bundles/route-lazy-loading.js +10 -5
  32. package/schematics/bundles/signal-input-migration.js +50 -37
  33. package/schematics/bundles/signal-queries-migration.js +26 -19
  34. package/schematics/bundles/signals.js +7 -7
  35. package/schematics/bundles/standalone-migration.js +167 -84
  36. package/schematics/migrations.json +1 -1
  37. package/schematics/ng-generate/signals/schema.json +1 -0
  38. package/testing/index.d.ts +1 -1
  39. package/schematics/bundles/combine_units-c52492ab.js +0 -31202
  40. package/schematics/bundles/nodes-ffdce442.js +0 -27
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.0.0-rc.0
3
+ * @license Angular v19.0.0-rc.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-ab18a7c3.js');
12
+ var migrate_ts_type_references = require('./migrate_ts_type_references-0bcee7cb.js');
13
13
  var ts = require('typescript');
14
14
  require('os');
15
- var checker = require('./checker-2451e7c5.js');
16
- var program = require('./program-58424797.js');
15
+ var checker = require('./checker-cd95ebda.js');
16
+ var program = require('./program-8f30df93.js');
17
17
  require('path');
18
- var combine_units = require('./combine_units-c52492ab.js');
18
+ var combine_units = require('./combine_units-528c4a5d.js');
19
19
  var assert = require('assert');
20
- var project_tsconfig_paths = require('./project_tsconfig_paths-6c9cde78.js');
21
- require('./leading_space-6e7a8ec6.js');
20
+ var project_tsconfig_paths = require('./project_tsconfig_paths-e9ccccbf.js');
21
+ require('./leading_space-d190b83b.js');
22
22
  require('fs');
23
23
  require('module');
24
24
  require('url');
@@ -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.0
3
+ * @license Angular v19.0.0-rc.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-6c9cde78.js');
13
- var combine_units = require('./combine_units-c52492ab.js');
12
+ var project_tsconfig_paths = require('./project_tsconfig_paths-e9ccccbf.js');
13
+ var combine_units = require('./combine_units-528c4a5d.js');
14
14
  require('os');
15
15
  var ts = require('typescript');
16
- var checker = require('./checker-2451e7c5.js');
17
- var program = require('./program-58424797.js');
18
- var assert = require('assert');
16
+ var checker = require('./checker-cd95ebda.js');
17
+ var program = require('./program-8f30df93.js');
19
18
  require('path');
20
- var migrate_ts_type_references = require('./migrate_ts_type_references-ab18a7c3.js');
19
+ var migrate_ts_type_references = require('./migrate_ts_type_references-0bcee7cb.js');
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-6e7a8ec6.js');
26
+ require('./leading_space-d190b83b.js');
27
27
 
28
28
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
29
29
 
@@ -722,9 +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']();
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
+ }
728
734
  const { sourceFiles, program: program$1 } = info;
729
735
  const checker$1 = program$1.getTypeChecker();
730
736
  const reflector = new checker.TypeScriptReflectionHost(checker$1);
@@ -796,8 +802,7 @@ class SignalQueriesMigration extends combine_units.TsurgeComplexMigration {
796
802
  // of the queries since there aren't any other compilation units.
797
803
  // Ignore references to non-query class fields.
798
804
  if (this.config.assumeNonBatch &&
799
- descriptor !== null &&
800
- !filteredQueriesForCompilationUnit.has(descriptor.key)) {
805
+ (descriptor === null || !filteredQueriesForCompilationUnit.has(descriptor.key))) {
801
806
  return null;
802
807
  }
803
808
  // In batch mode, we eagerly, rather expensively, track all references.
@@ -807,7 +812,7 @@ class SignalQueriesMigration extends combine_units.TsurgeComplexMigration {
807
812
  return descriptor;
808
813
  },
809
814
  };
810
- 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,
811
816
  // In non-batch mode, we know what inputs exist and can optimize the reference
812
817
  // resolution significantly (for e.g. VSCode integration)— as we know what
813
818
  // field names may be used to reference potential queries.
@@ -908,9 +913,12 @@ class SignalQueriesMigration extends combine_units.TsurgeComplexMigration {
908
913
  return combine_units.confirmAsSerializable(globalUnitData);
909
914
  }
910
915
  async migrate(globalMetadata, info) {
911
- assert__default["default"](info.ngCompiler !== null, 'Expected queries migration to have an Angular program.');
912
916
  // Pre-Analyze the program and get access to the template type checker.
913
- 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;
914
922
  const { program: program$1, sourceFiles } = info;
915
923
  const checker$1 = program$1.getTypeChecker();
916
924
  const reflector = new checker.TypeScriptReflectionHost(checker$1);
@@ -951,7 +959,6 @@ class SignalQueriesMigration extends combine_units.TsurgeComplexMigration {
951
959
  }
952
960
  ts__default["default"].forEachChild(node, queryWholeProgramVisitor);
953
961
  };
954
- this.config.reportProgressFn?.(40, 'Tracking query declarations..');
955
962
  for (const sf of info.fullProgramSourceFiles) {
956
963
  ts__default["default"].forEachChild(sf, queryWholeProgramVisitor);
957
964
  }
@@ -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
@@ -977,12 +984,12 @@ class SignalQueriesMigration extends combine_units.TsurgeComplexMigration {
977
984
  getFieldsForClass: (n) => knownQueries.getQueryFieldsOfClass(n) ?? [],
978
985
  isClassWithKnownFields: (clazz) => knownQueries.getQueryFieldsOfClass(clazz) !== undefined,
979
986
  });
980
- this.config.reportProgressFn?.(70, 'Checking inheritance..');
987
+ this.config.reportProgressFn?.(80, 'Checking inheritance..');
981
988
  groupedAstVisitor.execute();
982
989
  if (this.config.bestEffortMode) {
983
990
  filterBestEffortIncompatibilities(knownQueries);
984
991
  }
985
- this.config.reportProgressFn?.(80, 'Migrating queries..');
992
+ this.config.reportProgressFn?.(90, 'Migrating queries..');
986
993
  // Migrate declarations.
987
994
  for (const extractedQuery of sourceQueries) {
988
995
  const node = extractedQuery.node;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.0.0-rc.0
3
+ * @license Angular v19.0.0-rc.2
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -12,21 +12,21 @@ var schematics = require('@angular-devkit/schematics');
12
12
  var signalQueriesMigration = require('./signal-queries-migration.js');
13
13
  var signalInputMigration = require('./signal-input-migration.js');
14
14
  var outputMigration = require('./output-migration.js');
15
- require('./project_tsconfig_paths-6c9cde78.js');
15
+ require('./project_tsconfig_paths-e9ccccbf.js');
16
16
  require('@angular-devkit/core');
17
- require('./combine_units-c52492ab.js');
17
+ require('./combine_units-528c4a5d.js');
18
18
  require('node:path/posix');
19
19
  require('os');
20
20
  require('typescript');
21
- require('./checker-2451e7c5.js');
21
+ require('./checker-cd95ebda.js');
22
22
  require('fs');
23
23
  require('module');
24
24
  require('path');
25
25
  require('url');
26
- require('./program-58424797.js');
26
+ require('./program-8f30df93.js');
27
+ require('./migrate_ts_type_references-0bcee7cb.js');
27
28
  require('assert');
28
- require('./migrate_ts_type_references-ab18a7c3.js');
29
- require('./leading_space-6e7a8ec6.js');
29
+ require('./leading_space-d190b83b.js');
30
30
 
31
31
  function migrate(options) {
32
32
  // The migrations are independent so we can run them in any order, but we sort them here