@angular/core 19.0.0-next.7 → 19.0.0-next.8

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 (31) hide show
  1. package/LICENSE +21 -0
  2. package/fesm2022/core.mjs +274 -147
  3. package/fesm2022/core.mjs.map +1 -1
  4. package/fesm2022/primitives/event-dispatch.mjs +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 +67 -52
  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-637eee78.js → checker-e68dd7ce.js} +15 -5
  14. package/schematics/bundles/{compiler_host-1e62b899.js → compiler_host-9a4d0c2b.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/group_replacements-472b2387.js +31445 -0
  18. package/schematics/bundles/{imports-44987700.js → imports-4ac08251.js} +1 -1
  19. package/schematics/bundles/inject-migration.js +24 -8
  20. package/schematics/bundles/{leading_space-6e7a8ec6.js → leading_space-d190b83b.js} +1 -1
  21. package/schematics/bundles/{nodes-b12e919a.js → nodes-0e7d45ca.js} +2 -2
  22. package/schematics/bundles/pending-tasks.js +5 -5
  23. package/schematics/bundles/{program-893e3fe7.js → program-105283c5.js} +66 -24
  24. package/schematics/bundles/{project_tsconfig_paths-6c9cde78.js → project_tsconfig_paths-e9ccccbf.js} +1 -1
  25. package/schematics/bundles/route-lazy-loading.js +4 -4
  26. package/schematics/bundles/signal-input-migration.js +371 -31688
  27. package/schematics/bundles/signal-queries-migration.js +905 -0
  28. package/schematics/bundles/standalone-migration.js +8 -8
  29. package/schematics/collection.json +6 -0
  30. package/schematics/ng-generate/signal-queries-migration/schema.json +19 -0
  31. package/testing/index.d.ts +1 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.0.0-next.7
3
+ * @license Angular v19.0.0-next.8
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-next.7
3
+ * @license Angular v19.0.0-next.8
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -10,12 +10,12 @@ Object.defineProperty(exports, '__esModule', { value: true });
10
10
 
11
11
  var schematics = require('@angular-devkit/schematics');
12
12
  var p = require('path');
13
- var compiler_host = require('./compiler_host-1e62b899.js');
13
+ var compiler_host = require('./compiler_host-9a4d0c2b.js');
14
14
  var ts = require('typescript');
15
- var nodes = require('./nodes-b12e919a.js');
16
- var imports = require('./imports-44987700.js');
17
- var leading_space = require('./leading_space-6e7a8ec6.js');
18
- require('./checker-637eee78.js');
15
+ var nodes = require('./nodes-0e7d45ca.js');
16
+ var imports = require('./imports-4ac08251.js');
17
+ var leading_space = require('./leading_space-d190b83b.js');
18
+ require('./checker-e68dd7ce.js');
19
19
  require('os');
20
20
  require('fs');
21
21
  require('module');
@@ -514,8 +514,7 @@ function migrateClass(node, constructor, superCall, options, removedStatements,
514
514
  tracker.replaceText(sourceFile, member.getFullStart(), member.getFullWidth(), '');
515
515
  }
516
516
  }
517
- if (!options.backwardsCompatibleConstructors &&
518
- (!constructor.body || constructor.body.statements.length - removedStatementCount === 0)) {
517
+ if (canRemoveConstructor(options, constructor, removedStatementCount, superCall)) {
519
518
  // Drop the constructor if it was empty.
520
519
  removedMembers.add(constructor);
521
520
  tracker.replaceText(sourceFile, constructor.getFullStart(), constructor.getFullWidth(), '');
@@ -861,6 +860,23 @@ function cloneName(node) {
861
860
  return node;
862
861
  }
863
862
  }
863
+ /**
864
+ * Determines whether it's safe to delete a class constructor.
865
+ * @param options Options used to configure the migration.
866
+ * @param constructor Node representing the constructor.
867
+ * @param removedStatementCount Number of statements that were removed by the migration.
868
+ * @param superCall Node representing the `super()` call within the constructor.
869
+ */
870
+ function canRemoveConstructor(options, constructor, removedStatementCount, superCall) {
871
+ if (options.backwardsCompatibleConstructors) {
872
+ return false;
873
+ }
874
+ const statementCount = constructor.body
875
+ ? constructor.body.statements.length - removedStatementCount
876
+ : 0;
877
+ return (statementCount === 0 ||
878
+ (statementCount === 1 && superCall !== null && superCall.arguments.length === 0));
879
+ }
864
880
 
865
881
  function migrate(options) {
866
882
  return async (tree) => {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.0.0-next.7
3
+ * @license Angular v19.0.0-next.8
4
4
  * (c) 2010-2024 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.0.0-next.7
3
+ * @license Angular v19.0.0-next.8
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-44987700.js');
10
+ var imports = require('./imports-4ac08251.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-next.7
3
+ * @license Angular v19.0.0-next.8
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-6c9cde78.js');
14
- var compiler_host = require('./compiler_host-1e62b899.js');
13
+ var project_tsconfig_paths = require('./project_tsconfig_paths-e9ccccbf.js');
14
+ var compiler_host = require('./compiler_host-9a4d0c2b.js');
15
15
  var ts = require('typescript');
16
- var imports = require('./imports-44987700.js');
16
+ var imports = require('./imports-4ac08251.js');
17
17
  require('@angular-devkit/core');
18
- require('./checker-637eee78.js');
18
+ require('./checker-e68dd7ce.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-next.7
3
+ * @license Angular v19.0.0-next.8
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-637eee78.js');
9
+ var checker = require('./checker-e68dd7ce.js');
10
10
  var ts = require('typescript');
11
11
  var p = require('path');
12
12
  require('os');
@@ -864,7 +864,7 @@ const MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION = '18.0.0';
864
864
  function compileDeclareClassMetadata(metadata) {
865
865
  const definitionMap = new checker.DefinitionMap();
866
866
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$5));
867
- definitionMap.set('version', checker.literal('19.0.0-next.7'));
867
+ definitionMap.set('version', checker.literal('19.0.0-next.8'));
868
868
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
869
869
  definitionMap.set('type', metadata.type);
870
870
  definitionMap.set('decorators', metadata.decorators);
@@ -882,7 +882,7 @@ function compileComponentDeclareClassMetadata(metadata, dependencies) {
882
882
  callbackReturnDefinitionMap.set('ctorParameters', metadata.ctorParameters ?? checker.literal(null));
883
883
  callbackReturnDefinitionMap.set('propDecorators', metadata.propDecorators ?? checker.literal(null));
884
884
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION));
885
- definitionMap.set('version', checker.literal('19.0.0-next.7'));
885
+ definitionMap.set('version', checker.literal('19.0.0-next.8'));
886
886
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
887
887
  definitionMap.set('type', metadata.type);
888
888
  definitionMap.set('resolveDeferredDeps', compileComponentMetadataAsyncResolver(dependencies));
@@ -977,7 +977,7 @@ function createDirectiveDefinitionMap(meta) {
977
977
  const definitionMap = new checker.DefinitionMap();
978
978
  const minVersion = getMinimumVersionForPartialOutput(meta);
979
979
  definitionMap.set('minVersion', checker.literal(minVersion));
980
- definitionMap.set('version', checker.literal('19.0.0-next.7'));
980
+ definitionMap.set('version', checker.literal('19.0.0-next.8'));
981
981
  // e.g. `type: MyDirective`
982
982
  definitionMap.set('type', meta.type.value);
983
983
  if (meta.isStandalone) {
@@ -1396,7 +1396,7 @@ const MINIMUM_PARTIAL_LINKER_VERSION$4 = '12.0.0';
1396
1396
  function compileDeclareFactoryFunction(meta) {
1397
1397
  const definitionMap = new checker.DefinitionMap();
1398
1398
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$4));
1399
- definitionMap.set('version', checker.literal('19.0.0-next.7'));
1399
+ definitionMap.set('version', checker.literal('19.0.0-next.8'));
1400
1400
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1401
1401
  definitionMap.set('type', meta.type.value);
1402
1402
  definitionMap.set('deps', compileDependencies(meta.deps));
@@ -1431,7 +1431,7 @@ function compileDeclareInjectableFromMetadata(meta) {
1431
1431
  function createInjectableDefinitionMap(meta) {
1432
1432
  const definitionMap = new checker.DefinitionMap();
1433
1433
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$3));
1434
- definitionMap.set('version', checker.literal('19.0.0-next.7'));
1434
+ definitionMap.set('version', checker.literal('19.0.0-next.8'));
1435
1435
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1436
1436
  definitionMap.set('type', meta.type.value);
1437
1437
  // Only generate providedIn property if it has a non-null value
@@ -1482,7 +1482,7 @@ function compileDeclareInjectorFromMetadata(meta) {
1482
1482
  function createInjectorDefinitionMap(meta) {
1483
1483
  const definitionMap = new checker.DefinitionMap();
1484
1484
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$2));
1485
- definitionMap.set('version', checker.literal('19.0.0-next.7'));
1485
+ definitionMap.set('version', checker.literal('19.0.0-next.8'));
1486
1486
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1487
1487
  definitionMap.set('type', meta.type.value);
1488
1488
  definitionMap.set('providers', meta.providers);
@@ -1515,7 +1515,7 @@ function createNgModuleDefinitionMap(meta) {
1515
1515
  throw new Error('Invalid path! Local compilation mode should not get into the partial compilation path');
1516
1516
  }
1517
1517
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$1));
1518
- definitionMap.set('version', checker.literal('19.0.0-next.7'));
1518
+ definitionMap.set('version', checker.literal('19.0.0-next.8'));
1519
1519
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1520
1520
  definitionMap.set('type', meta.type.value);
1521
1521
  // We only generate the keys in the metadata if the arrays contain values.
@@ -1566,7 +1566,7 @@ function compileDeclarePipeFromMetadata(meta) {
1566
1566
  function createPipeDefinitionMap(meta) {
1567
1567
  const definitionMap = new checker.DefinitionMap();
1568
1568
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION));
1569
- definitionMap.set('version', checker.literal('19.0.0-next.7'));
1569
+ definitionMap.set('version', checker.literal('19.0.0-next.8'));
1570
1570
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1571
1571
  // e.g. `type: MyPipe`
1572
1572
  definitionMap.set('type', meta.type.value);
@@ -6531,7 +6531,7 @@ const QUERY_TYPES = new Set(queryDecoratorNames);
6531
6531
  * appear in the declarations of an `NgModule` and additional verification is done when processing
6532
6532
  * the module.
6533
6533
  */
6534
- function extractDirectiveMetadata(clazz, decorator, reflector, importTracker, evaluator, refEmitter, referencesRegistry, isCore, annotateForClosureCompiler, compilationMode, defaultSelector) {
6534
+ function extractDirectiveMetadata(clazz, decorator, reflector, importTracker, evaluator, refEmitter, referencesRegistry, isCore, annotateForClosureCompiler, compilationMode, defaultSelector, strictStandalone) {
6535
6535
  let directive;
6536
6536
  if (decorator.args === null || decorator.args.length === 0) {
6537
6537
  directive = new Map();
@@ -6643,6 +6643,9 @@ function extractDirectiveMetadata(clazz, decorator, reflector, importTracker, ev
6643
6643
  throw createValueHasWrongTypeError(expr, resolved, `standalone flag must be a boolean`);
6644
6644
  }
6645
6645
  isStandalone = resolved;
6646
+ if (!isStandalone && strictStandalone) {
6647
+ throw new checker.FatalDiagnosticError(checker.ErrorCode.NON_STANDALONE_NOT_ALLOWED, expr, `Only standalone components/directives are allowed when 'strictStandalone' is enabled.`);
6648
+ }
6646
6649
  }
6647
6650
  let isSignal = false;
6648
6651
  if (directive.has('signals')) {
@@ -7636,7 +7639,7 @@ const LIFECYCLE_HOOKS = new Set([
7636
7639
  'ngAfterContentChecked',
7637
7640
  ]);
7638
7641
  class DirectiveDecoratorHandler {
7639
- constructor(reflector, evaluator, metaRegistry, scopeRegistry, metaReader, injectableRegistry, refEmitter, referencesRegistry, isCore, strictCtorDeps, semanticDepGraphUpdater, annotateForClosureCompiler, perf, importTracker, includeClassMetadata, compilationMode, jitDeclarationRegistry) {
7642
+ constructor(reflector, evaluator, metaRegistry, scopeRegistry, metaReader, injectableRegistry, refEmitter, referencesRegistry, isCore, strictCtorDeps, semanticDepGraphUpdater, annotateForClosureCompiler, perf, importTracker, includeClassMetadata, compilationMode, jitDeclarationRegistry, strictStandalone) {
7640
7643
  this.reflector = reflector;
7641
7644
  this.evaluator = evaluator;
7642
7645
  this.metaRegistry = metaRegistry;
@@ -7654,6 +7657,7 @@ class DirectiveDecoratorHandler {
7654
7657
  this.includeClassMetadata = includeClassMetadata;
7655
7658
  this.compilationMode = compilationMode;
7656
7659
  this.jitDeclarationRegistry = jitDeclarationRegistry;
7660
+ this.strictStandalone = strictStandalone;
7657
7661
  this.precedence = checker.HandlerPrecedence.PRIMARY;
7658
7662
  this.name = 'DirectiveDecoratorHandler';
7659
7663
  }
@@ -7687,7 +7691,7 @@ class DirectiveDecoratorHandler {
7687
7691
  }
7688
7692
  this.perf.eventCount(checker.PerfEvent.AnalyzeDirective);
7689
7693
  const directiveResult = extractDirectiveMetadata(node, decorator, this.reflector, this.importTracker, this.evaluator, this.refEmitter, this.referencesRegistry, this.isCore, this.annotateForClosureCompiler, this.compilationMode,
7690
- /* defaultSelector */ null);
7694
+ /* defaultSelector */ null, this.strictStandalone);
7691
7695
  // `extractDirectiveMetadata` returns `jitForced = true` when the `@Directive` has
7692
7696
  // set `jit: true`. In this case, compilation of the decorator is skipped. Returning
7693
7697
  // an empty object signifies that no analysis was produced.
@@ -9731,7 +9735,7 @@ const isUsedPipe = (decl) => decl.kind === checker.R3TemplateDependencyKind.Pipe
9731
9735
  * `DecoratorHandler` which handles the `@Component` annotation.
9732
9736
  */
9733
9737
  class ComponentDecoratorHandler {
9734
- constructor(reflector, evaluator, metaRegistry, metaReader, scopeReader, dtsScopeReader, scopeRegistry, typeCheckScopeRegistry, resourceRegistry, isCore, strictCtorDeps, resourceLoader, rootDirs, defaultPreserveWhitespaces, i18nUseExternalIds, enableI18nLegacyMessageIdFormat, usePoisonedData, i18nNormalizeLineEndingsInICUs, moduleResolver, cycleAnalyzer, cycleHandlingStrategy, refEmitter, referencesRegistry, depTracker, injectableRegistry, semanticDepGraphUpdater, annotateForClosureCompiler, perf, hostDirectivesResolver, importTracker, includeClassMetadata, compilationMode, deferredSymbolTracker, forbidOrphanRendering, enableBlockSyntax, enableLetSyntax, localCompilationExtraImportsTracker, jitDeclarationRegistry, i18nPreserveSignificantWhitespace) {
9738
+ constructor(reflector, evaluator, metaRegistry, metaReader, scopeReader, dtsScopeReader, scopeRegistry, typeCheckScopeRegistry, resourceRegistry, isCore, strictCtorDeps, resourceLoader, rootDirs, defaultPreserveWhitespaces, i18nUseExternalIds, enableI18nLegacyMessageIdFormat, usePoisonedData, i18nNormalizeLineEndingsInICUs, moduleResolver, cycleAnalyzer, cycleHandlingStrategy, refEmitter, referencesRegistry, depTracker, injectableRegistry, semanticDepGraphUpdater, annotateForClosureCompiler, perf, hostDirectivesResolver, importTracker, includeClassMetadata, compilationMode, deferredSymbolTracker, forbidOrphanRendering, enableBlockSyntax, enableLetSyntax, localCompilationExtraImportsTracker, jitDeclarationRegistry, i18nPreserveSignificantWhitespace, strictStandalone) {
9735
9739
  this.reflector = reflector;
9736
9740
  this.evaluator = evaluator;
9737
9741
  this.metaRegistry = metaRegistry;
@@ -9771,6 +9775,7 @@ class ComponentDecoratorHandler {
9771
9775
  this.localCompilationExtraImportsTracker = localCompilationExtraImportsTracker;
9772
9776
  this.jitDeclarationRegistry = jitDeclarationRegistry;
9773
9777
  this.i18nPreserveSignificantWhitespace = i18nPreserveSignificantWhitespace;
9778
+ this.strictStandalone = strictStandalone;
9774
9779
  this.literalCache = new Map();
9775
9780
  this.elementSchemaRegistry = new checker.DomElementSchemaRegistry();
9776
9781
  /**
@@ -9883,7 +9888,7 @@ class ComponentDecoratorHandler {
9883
9888
  let isPoisoned = false;
9884
9889
  // @Component inherits @Directive, so begin by extracting the @Directive metadata and building
9885
9890
  // on it.
9886
- const directiveResult = extractDirectiveMetadata(node, decorator, this.reflector, this.importTracker, this.evaluator, this.refEmitter, this.referencesRegistry, this.isCore, this.annotateForClosureCompiler, this.compilationMode, this.elementSchemaRegistry.getDefaultComponentElementName());
9891
+ const directiveResult = extractDirectiveMetadata(node, decorator, this.reflector, this.importTracker, this.evaluator, this.refEmitter, this.referencesRegistry, this.isCore, this.annotateForClosureCompiler, this.compilationMode, this.elementSchemaRegistry.getDefaultComponentElementName(), this.strictStandalone);
9887
9892
  // `extractDirectiveMetadata` returns `jitForced = true` when the `@Component` has
9888
9893
  // set `jit: true`. In this case, compilation of the decorator is skipped. Returning
9889
9894
  // an empty object signifies that no analysis was produced.
@@ -11374,7 +11379,7 @@ class PipeSymbol extends SemanticSymbol {
11374
11379
  }
11375
11380
  }
11376
11381
  class PipeDecoratorHandler {
11377
- constructor(reflector, evaluator, metaRegistry, scopeRegistry, injectableRegistry, isCore, perf, includeClassMetadata, compilationMode, generateExtraImportsInLocalMode) {
11382
+ constructor(reflector, evaluator, metaRegistry, scopeRegistry, injectableRegistry, isCore, perf, includeClassMetadata, compilationMode, generateExtraImportsInLocalMode, strictStandalone) {
11378
11383
  this.reflector = reflector;
11379
11384
  this.evaluator = evaluator;
11380
11385
  this.metaRegistry = metaRegistry;
@@ -11385,6 +11390,7 @@ class PipeDecoratorHandler {
11385
11390
  this.includeClassMetadata = includeClassMetadata;
11386
11391
  this.compilationMode = compilationMode;
11387
11392
  this.generateExtraImportsInLocalMode = generateExtraImportsInLocalMode;
11393
+ this.strictStandalone = strictStandalone;
11388
11394
  this.precedence = checker.HandlerPrecedence.PRIMARY;
11389
11395
  this.name = 'PipeDecoratorHandler';
11390
11396
  }
@@ -11444,6 +11450,9 @@ class PipeDecoratorHandler {
11444
11450
  throw createValueHasWrongTypeError(expr, resolved, `standalone flag must be a boolean`);
11445
11451
  }
11446
11452
  isStandalone = resolved;
11453
+ if (!isStandalone && this.strictStandalone) {
11454
+ throw new checker.FatalDiagnosticError(checker.ErrorCode.NON_STANDALONE_NOT_ALLOWED, expr, `Only standalone pipes are allowed when 'strictStandalone' is enabled.`);
11455
+ }
11447
11456
  }
11448
11457
  return {
11449
11458
  analysis: {
@@ -16454,15 +16463,18 @@ class UnusedStandaloneImportsRule {
16454
16463
  return checker.makeDiagnostic(checker.ErrorCode.UNUSED_STANDALONE_IMPORTS, metadata.rawImports, 'Imports array contains unused imports', unused.map(([ref, type, name]) => checker.makeRelatedInformation(ref.getOriginForDiagnostics(metadata.rawImports), `${type} "${name}" is not used within the template`)), category);
16455
16464
  }
16456
16465
  getUnusedSymbols(metadata, usedDirectives, usedPipes) {
16457
- if (metadata.imports === null || metadata.rawImports === null) {
16466
+ const { imports, rawImports } = metadata;
16467
+ if (imports === null || rawImports === null) {
16458
16468
  return null;
16459
16469
  }
16460
16470
  let unused = null;
16461
- for (const current of metadata.imports) {
16471
+ for (const current of imports) {
16462
16472
  const currentNode = current.node;
16463
16473
  const dirMeta = this.templateTypeChecker.getDirectiveMetadata(currentNode);
16464
16474
  if (dirMeta !== null) {
16465
- if (dirMeta.isStandalone && (usedDirectives === null || !usedDirectives.has(currentNode))) {
16475
+ if (dirMeta.isStandalone &&
16476
+ !usedDirectives.has(currentNode) &&
16477
+ !this.isPotentialSharedReference(current, rawImports)) {
16466
16478
  unused ??= [];
16467
16479
  unused.push([current, dirMeta.isComponent ? 'Component' : 'Directive', dirMeta.name]);
16468
16480
  }
@@ -16471,13 +16483,41 @@ class UnusedStandaloneImportsRule {
16471
16483
  const pipeMeta = this.templateTypeChecker.getPipeMetadata(currentNode);
16472
16484
  if (pipeMeta !== null &&
16473
16485
  pipeMeta.isStandalone &&
16474
- (usedPipes === null || !usedPipes.has(pipeMeta.name))) {
16486
+ !usedPipes.has(pipeMeta.name) &&
16487
+ !this.isPotentialSharedReference(current, rawImports)) {
16475
16488
  unused ??= [];
16476
16489
  unused.push([current, 'Pipe', pipeMeta.ref.node.name.text]);
16477
16490
  }
16478
16491
  }
16479
16492
  return unused;
16480
16493
  }
16494
+ /**
16495
+ * Determines if an import reference *might* be coming from a shared imports array.
16496
+ * @param reference Reference to be checked.
16497
+ * @param rawImports AST node that defines the `imports` array.
16498
+ */
16499
+ isPotentialSharedReference(reference, rawImports) {
16500
+ // If the reference is defined directly in the `imports` array, it cannot be shared.
16501
+ if (reference.getIdentityInExpression(rawImports) !== null) {
16502
+ return false;
16503
+ }
16504
+ // The reference might be shared if it comes from an exported array. If the variable is local
16505
+ /// to the file, then it likely isn't shared. Note that this has the potential for false
16506
+ // positives if a non-exported array of imports is shared between components in the same
16507
+ // file. This scenario is unlikely and even if we report the diagnostic for it, it would be
16508
+ // okay since the user only has to refactor components within the same file, rather than the
16509
+ // entire application.
16510
+ let current = reference.getIdentityIn(rawImports.getSourceFile());
16511
+ while (current !== null) {
16512
+ if (ts__default["default"].isVariableStatement(current)) {
16513
+ return !!current.modifiers?.some((m) => m.kind === ts__default["default"].SyntaxKind.ExportKeyword);
16514
+ }
16515
+ current = current.parent;
16516
+ }
16517
+ // Otherwise the reference likely comes from an imported
16518
+ // symbol like an array of shared common components.
16519
+ return true;
16520
+ }
16481
16521
  }
16482
16522
 
16483
16523
  /*!
@@ -19222,7 +19262,7 @@ var semver = /*@__PURE__*/getDefaultExportFromCjs(semverExports);
19222
19262
  * @param minVersion Minimum required version for the feature.
19223
19263
  */
19224
19264
  function coreVersionSupportsFeature(coreVersion, minVersion) {
19225
- // A version of `19.0.0-next.7` usually means that core is at head so it supports
19265
+ // A version of `19.0.0-next.8` usually means that core is at head so it supports
19226
19266
  // all features. Use string interpolation prevent the placeholder from being replaced
19227
19267
  // with the current version during build time.
19228
19268
  if (coreVersion === `0.0.0-${'PLACEHOLDER'}`) {
@@ -20096,13 +20136,13 @@ class NgCompiler {
20096
20136
  const jitDeclarationRegistry = new JitDeclarationRegistry();
20097
20137
  // Set up the IvyCompilation, which manages state for the Ivy transformer.
20098
20138
  const handlers = [
20099
- new ComponentDecoratorHandler(reflector, evaluator, metaRegistry, metaReader, scopeReader, depScopeReader, ngModuleScopeRegistry, typeCheckScopeRegistry, resourceRegistry, isCore, strictCtorDeps, this.resourceManager, this.adapter.rootDirs, this.options.preserveWhitespaces || false, this.options.i18nUseExternalIds !== false, this.options.enableI18nLegacyMessageIdFormat !== false, this.usePoisonedData, this.options.i18nNormalizeLineEndingsInICUs === true, this.moduleResolver, this.cycleAnalyzer, cycleHandlingStrategy, refEmitter, referencesRegistry, this.incrementalCompilation.depGraph, injectableRegistry, semanticDepGraphUpdater, this.closureCompilerEnabled, this.delegatingPerfRecorder, hostDirectivesResolver, importTracker, supportTestBed, compilationMode, deferredSymbolsTracker, !!this.options.forbidOrphanComponents, this.enableBlockSyntax, this.enableLetSyntax, localCompilationExtraImportsTracker, jitDeclarationRegistry, this.options.i18nPreserveWhitespaceForLegacyExtraction ?? true),
20139
+ new ComponentDecoratorHandler(reflector, evaluator, metaRegistry, metaReader, scopeReader, depScopeReader, ngModuleScopeRegistry, typeCheckScopeRegistry, resourceRegistry, isCore, strictCtorDeps, this.resourceManager, this.adapter.rootDirs, this.options.preserveWhitespaces || false, this.options.i18nUseExternalIds !== false, this.options.enableI18nLegacyMessageIdFormat !== false, this.usePoisonedData, this.options.i18nNormalizeLineEndingsInICUs === true, this.moduleResolver, this.cycleAnalyzer, cycleHandlingStrategy, refEmitter, referencesRegistry, this.incrementalCompilation.depGraph, injectableRegistry, semanticDepGraphUpdater, this.closureCompilerEnabled, this.delegatingPerfRecorder, hostDirectivesResolver, importTracker, supportTestBed, compilationMode, deferredSymbolsTracker, !!this.options.forbidOrphanComponents, this.enableBlockSyntax, this.enableLetSyntax, localCompilationExtraImportsTracker, jitDeclarationRegistry, this.options.i18nPreserveWhitespaceForLegacyExtraction ?? true, !!this.options.strictStandalone),
20100
20140
  // TODO(alxhub): understand why the cast here is necessary (something to do with `null`
20101
20141
  // not being assignable to `unknown` when wrapped in `Readonly`).
20102
- new DirectiveDecoratorHandler(reflector, evaluator, metaRegistry, ngModuleScopeRegistry, metaReader, injectableRegistry, refEmitter, referencesRegistry, isCore, strictCtorDeps, semanticDepGraphUpdater, this.closureCompilerEnabled, this.delegatingPerfRecorder, importTracker, supportTestBed, compilationMode, jitDeclarationRegistry),
20142
+ new DirectiveDecoratorHandler(reflector, evaluator, metaRegistry, ngModuleScopeRegistry, metaReader, injectableRegistry, refEmitter, referencesRegistry, isCore, strictCtorDeps, semanticDepGraphUpdater, this.closureCompilerEnabled, this.delegatingPerfRecorder, importTracker, supportTestBed, compilationMode, jitDeclarationRegistry, !!this.options.strictStandalone),
20103
20143
  // Pipe handler must be before injectable handler in list so pipe factories are printed
20104
20144
  // before injectable factories (so injectable factories can delegate to them)
20105
- new PipeDecoratorHandler(reflector, evaluator, metaRegistry, ngModuleScopeRegistry, injectableRegistry, isCore, this.delegatingPerfRecorder, supportTestBed, compilationMode, !!this.options.generateExtraImportsInLocalMode),
20145
+ new PipeDecoratorHandler(reflector, evaluator, metaRegistry, ngModuleScopeRegistry, injectableRegistry, isCore, this.delegatingPerfRecorder, supportTestBed, compilationMode, !!this.options.generateExtraImportsInLocalMode, !!this.options.strictStandalone),
20106
20146
  new InjectableDecoratorHandler(reflector, evaluator, isCore, strictCtorDeps, injectableRegistry, this.delegatingPerfRecorder, supportTestBed, compilationMode),
20107
20147
  new NgModuleDecoratorHandler(reflector, evaluator, metaReader, metaRegistry, ngModuleScopeRegistry, referencesRegistry, exportedProviderStatusResolver, semanticDepGraphUpdater, isCore, refEmitter, this.closureCompilerEnabled, this.options.onlyPublishPublicTypingsForNgModules ?? false, injectableRegistry, this.delegatingPerfRecorder, supportTestBed, supportJitMode, compilationMode, localCompilationExtraImportsTracker, jitDeclarationRegistry),
20108
20148
  ];
@@ -20815,5 +20855,7 @@ exports.DtsMetadataReader = DtsMetadataReader;
20815
20855
  exports.NgtscProgram = NgtscProgram;
20816
20856
  exports.PartialEvaluator = PartialEvaluator;
20817
20857
  exports.UNKNOWN_ERROR_CODE = UNKNOWN_ERROR_CODE;
20858
+ exports.extractDecoratorQueryMetadata = extractDecoratorQueryMetadata;
20818
20859
  exports.extractTemplate = extractTemplate;
20819
20860
  exports.parseDecoratorInputTransformFunction = parseDecoratorInputTransformFunction;
20861
+ exports.queryDecoratorNames = queryDecoratorNames;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.0.0-next.7
3
+ * @license Angular v19.0.0-next.8
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-next.7
3
+ * @license Angular v19.0.0-next.8
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-1e62b899.js');
15
- var project_tsconfig_paths = require('./project_tsconfig_paths-6c9cde78.js');
14
+ var compiler_host = require('./compiler_host-9a4d0c2b.js');
15
+ var project_tsconfig_paths = require('./project_tsconfig_paths-e9ccccbf.js');
16
16
  var ts = require('typescript');
17
- require('./checker-637eee78.js');
17
+ require('./checker-e68dd7ce.js');
18
18
  require('os');
19
19
  require('module');
20
20
  require('url');