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

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 (33) hide show
  1. package/LICENSE +21 -0
  2. package/fesm2022/core.mjs +363 -156
  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/primitives/signals.mjs.map +1 -1
  7. package/fesm2022/rxjs-interop.mjs +1 -1
  8. package/fesm2022/testing.mjs +6 -4
  9. package/fesm2022/testing.mjs.map +1 -1
  10. package/index.d.ts +107 -69
  11. package/package.json +1 -1
  12. package/primitives/event-dispatch/index.d.ts +1 -1
  13. package/primitives/signals/index.d.ts +5 -1
  14. package/rxjs-interop/index.d.ts +1 -1
  15. package/schematics/bundles/{checker-637eee78.js → checker-3b2ea20f.js} +136 -78
  16. package/schematics/bundles/{compiler_host-1e62b899.js → compiler_host-b4ba5a28.js} +2 -2
  17. package/schematics/bundles/control-flow-migration.js +3 -3
  18. package/schematics/bundles/explicit-standalone-flag.js +5 -5
  19. package/schematics/bundles/group_replacements-e1b5cbf8.js +31571 -0
  20. package/schematics/bundles/{imports-44987700.js → imports-4ac08251.js} +1 -1
  21. package/schematics/bundles/inject-migration.js +24 -8
  22. package/schematics/bundles/{leading_space-6e7a8ec6.js → leading_space-d190b83b.js} +1 -1
  23. package/schematics/bundles/{nodes-b12e919a.js → nodes-0e7d45ca.js} +2 -2
  24. package/schematics/bundles/pending-tasks.js +5 -5
  25. package/schematics/bundles/{program-893e3fe7.js → program-6534a30a.js} +120 -32
  26. package/schematics/bundles/{project_tsconfig_paths-6c9cde78.js → project_tsconfig_paths-e9ccccbf.js} +1 -1
  27. package/schematics/bundles/route-lazy-loading.js +4 -4
  28. package/schematics/bundles/signal-input-migration.js +386 -31727
  29. package/schematics/bundles/signal-queries-migration.js +924 -0
  30. package/schematics/bundles/standalone-migration.js +8 -8
  31. package/schematics/collection.json +6 -0
  32. package/schematics/ng-generate/signal-queries-migration/schema.json +19 -0
  33. package/testing/index.d.ts +3 -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.9
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.9
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-b4ba5a28.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-3b2ea20f.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.9
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.9
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.9
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-b4ba5a28.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-3b2ea20f.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.9
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-3b2ea20f.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.9'));
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.9'));
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.9'));
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.9'));
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.9'));
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.9'));
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.9'));
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.9'));
1570
1570
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1571
1571
  // e.g. `type: MyPipe`
1572
1572
  definitionMap.set('type', meta.type.value);
@@ -1923,7 +1923,7 @@ class DeferredSymbolTracker {
1923
1923
  return false;
1924
1924
  }
1925
1925
  const symbolsMap = this.imports.get(importDecl);
1926
- for (const [symbol, refs] of symbolsMap) {
1926
+ for (const refs of symbolsMap.values()) {
1927
1927
  if (refs === AssumeEager || refs.size > 0) {
1928
1928
  // There may be still eager references to this symbol.
1929
1929
  return false;
@@ -1947,8 +1947,9 @@ class DeferredSymbolTracker {
1947
1947
  lookupIdentifiersInSourceFile(name, importDecl) {
1948
1948
  const results = new Set();
1949
1949
  const visit = (node) => {
1950
- if (node === importDecl) {
1951
- // Don't record references from the declaration itself.
1950
+ // Don't record references from the declaration itself or inside
1951
+ // type nodes which will be stripped from the JS output.
1952
+ if (node === importDecl || ts__default["default"].isTypeNode(node)) {
1952
1953
  return;
1953
1954
  }
1954
1955
  if (ts__default["default"].isIdentifier(node) && node.text === name) {
@@ -6531,7 +6532,7 @@ const QUERY_TYPES = new Set(queryDecoratorNames);
6531
6532
  * appear in the declarations of an `NgModule` and additional verification is done when processing
6532
6533
  * the module.
6533
6534
  */
6534
- function extractDirectiveMetadata(clazz, decorator, reflector, importTracker, evaluator, refEmitter, referencesRegistry, isCore, annotateForClosureCompiler, compilationMode, defaultSelector) {
6535
+ function extractDirectiveMetadata(clazz, decorator, reflector, importTracker, evaluator, refEmitter, referencesRegistry, isCore, annotateForClosureCompiler, compilationMode, defaultSelector, strictStandalone) {
6535
6536
  let directive;
6536
6537
  if (decorator.args === null || decorator.args.length === 0) {
6537
6538
  directive = new Map();
@@ -6643,6 +6644,9 @@ function extractDirectiveMetadata(clazz, decorator, reflector, importTracker, ev
6643
6644
  throw createValueHasWrongTypeError(expr, resolved, `standalone flag must be a boolean`);
6644
6645
  }
6645
6646
  isStandalone = resolved;
6647
+ if (!isStandalone && strictStandalone) {
6648
+ throw new checker.FatalDiagnosticError(checker.ErrorCode.NON_STANDALONE_NOT_ALLOWED, expr, `Only standalone components/directives are allowed when 'strictStandalone' is enabled.`);
6649
+ }
6646
6650
  }
6647
6651
  let isSignal = false;
6648
6652
  if (directive.has('signals')) {
@@ -7636,7 +7640,7 @@ const LIFECYCLE_HOOKS = new Set([
7636
7640
  'ngAfterContentChecked',
7637
7641
  ]);
7638
7642
  class DirectiveDecoratorHandler {
7639
- constructor(reflector, evaluator, metaRegistry, scopeRegistry, metaReader, injectableRegistry, refEmitter, referencesRegistry, isCore, strictCtorDeps, semanticDepGraphUpdater, annotateForClosureCompiler, perf, importTracker, includeClassMetadata, compilationMode, jitDeclarationRegistry) {
7643
+ constructor(reflector, evaluator, metaRegistry, scopeRegistry, metaReader, injectableRegistry, refEmitter, referencesRegistry, isCore, strictCtorDeps, semanticDepGraphUpdater, annotateForClosureCompiler, perf, importTracker, includeClassMetadata, compilationMode, jitDeclarationRegistry, strictStandalone) {
7640
7644
  this.reflector = reflector;
7641
7645
  this.evaluator = evaluator;
7642
7646
  this.metaRegistry = metaRegistry;
@@ -7654,6 +7658,7 @@ class DirectiveDecoratorHandler {
7654
7658
  this.includeClassMetadata = includeClassMetadata;
7655
7659
  this.compilationMode = compilationMode;
7656
7660
  this.jitDeclarationRegistry = jitDeclarationRegistry;
7661
+ this.strictStandalone = strictStandalone;
7657
7662
  this.precedence = checker.HandlerPrecedence.PRIMARY;
7658
7663
  this.name = 'DirectiveDecoratorHandler';
7659
7664
  }
@@ -7687,7 +7692,7 @@ class DirectiveDecoratorHandler {
7687
7692
  }
7688
7693
  this.perf.eventCount(checker.PerfEvent.AnalyzeDirective);
7689
7694
  const directiveResult = extractDirectiveMetadata(node, decorator, this.reflector, this.importTracker, this.evaluator, this.refEmitter, this.referencesRegistry, this.isCore, this.annotateForClosureCompiler, this.compilationMode,
7690
- /* defaultSelector */ null);
7695
+ /* defaultSelector */ null, this.strictStandalone);
7691
7696
  // `extractDirectiveMetadata` returns `jitForced = true` when the `@Directive` has
7692
7697
  // set `jit: true`. In this case, compilation of the decorator is skipped. Returning
7693
7698
  // an empty object signifies that no analysis was produced.
@@ -8956,6 +8961,7 @@ function preloadAndParseTemplate(evaluator, resourceLoader, depTracker, preanaly
8956
8961
  const templatePromise = resourceLoader.preload(resourceUrl, {
8957
8962
  type: 'template',
8958
8963
  containingFile,
8964
+ className: node.name.text,
8959
8965
  });
8960
8966
  // If the preload worked, then actually load and parse the template, and wait for any
8961
8967
  // style URLs to resolve.
@@ -9731,7 +9737,7 @@ const isUsedPipe = (decl) => decl.kind === checker.R3TemplateDependencyKind.Pipe
9731
9737
  * `DecoratorHandler` which handles the `@Component` annotation.
9732
9738
  */
9733
9739
  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) {
9740
+ 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, externalRuntimeStyles, localCompilationExtraImportsTracker, jitDeclarationRegistry, i18nPreserveSignificantWhitespace, strictStandalone) {
9735
9741
  this.reflector = reflector;
9736
9742
  this.evaluator = evaluator;
9737
9743
  this.metaRegistry = metaRegistry;
@@ -9768,9 +9774,11 @@ class ComponentDecoratorHandler {
9768
9774
  this.forbidOrphanRendering = forbidOrphanRendering;
9769
9775
  this.enableBlockSyntax = enableBlockSyntax;
9770
9776
  this.enableLetSyntax = enableLetSyntax;
9777
+ this.externalRuntimeStyles = externalRuntimeStyles;
9771
9778
  this.localCompilationExtraImportsTracker = localCompilationExtraImportsTracker;
9772
9779
  this.jitDeclarationRegistry = jitDeclarationRegistry;
9773
9780
  this.i18nPreserveSignificantWhitespace = i18nPreserveSignificantWhitespace;
9781
+ this.strictStandalone = strictStandalone;
9774
9782
  this.literalCache = new Map();
9775
9783
  this.elementSchemaRegistry = new checker.DomElementSchemaRegistry();
9776
9784
  /**
@@ -9828,7 +9836,11 @@ class ComponentDecoratorHandler {
9828
9836
  const resolveStyleUrl = (styleUrl) => {
9829
9837
  try {
9830
9838
  const resourceUrl = this.resourceLoader.resolve(styleUrl, containingFile);
9831
- return this.resourceLoader.preload(resourceUrl, { type: 'style', containingFile });
9839
+ return this.resourceLoader.preload(resourceUrl, {
9840
+ type: 'style',
9841
+ containingFile,
9842
+ className: node.name.text,
9843
+ });
9832
9844
  }
9833
9845
  catch {
9834
9846
  // Don't worry about failures to preload. We can handle this problem during analysis by
@@ -9856,18 +9868,31 @@ class ComponentDecoratorHandler {
9856
9868
  return templateAndTemplateStyleResources.then(async (templateInfo) => {
9857
9869
  // Extract inline styles, process, and cache for use in synchronous analyze phase
9858
9870
  let styles = null;
9871
+ // Order plus className allows inline styles to be identified per component by a preprocessor
9872
+ let orderOffset = 0;
9859
9873
  const rawStyles = parseDirectiveStyles(component, this.evaluator, this.compilationMode);
9860
9874
  if (rawStyles?.length) {
9861
- styles = await Promise.all(rawStyles.map((style) => this.resourceLoader.preprocessInline(style, { type: 'style', containingFile })));
9875
+ styles = await Promise.all(rawStyles.map((style) => this.resourceLoader.preprocessInline(style, {
9876
+ type: 'style',
9877
+ containingFile,
9878
+ order: orderOffset++,
9879
+ className: node.name.text,
9880
+ })));
9862
9881
  }
9863
9882
  if (templateInfo.templateStyles) {
9864
9883
  styles ??= [];
9865
9884
  styles.push(...(await Promise.all(templateInfo.templateStyles.map((style) => this.resourceLoader.preprocessInline(style, {
9866
9885
  type: 'style',
9867
9886
  containingFile: templateInfo.templateUrl ?? containingFile,
9887
+ order: orderOffset++,
9888
+ className: node.name.text,
9868
9889
  })))));
9869
9890
  }
9870
9891
  this.preanalyzeStylesCache.set(node, styles);
9892
+ if (this.externalRuntimeStyles) {
9893
+ // No preanalysis required for style URLs with external runtime styles
9894
+ return;
9895
+ }
9871
9896
  // Wait for both the template and all styleUrl resources to resolve.
9872
9897
  await Promise.all([
9873
9898
  ...componentStyleUrls.map((styleUrl) => resolveStyleUrl(styleUrl.url)),
@@ -9883,7 +9908,7 @@ class ComponentDecoratorHandler {
9883
9908
  let isPoisoned = false;
9884
9909
  // @Component inherits @Directive, so begin by extracting the @Directive metadata and building
9885
9910
  // 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());
9911
+ 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
9912
  // `extractDirectiveMetadata` returns `jitForced = true` when the `@Component` has
9888
9913
  // set `jit: true`. In this case, compilation of the decorator is skipped. Returning
9889
9914
  // an empty object signifies that no analysis was produced.
@@ -10043,6 +10068,7 @@ class ComponentDecoratorHandler {
10043
10068
  // precede inline styles, and styles defined in the template override styles defined in the
10044
10069
  // component.
10045
10070
  let styles = [];
10071
+ const externalStyles = [];
10046
10072
  const styleResources = extractInlineStyleResources(component);
10047
10073
  const styleUrls = [
10048
10074
  ...extractComponentStyleUrls(this.evaluator, component),
@@ -10051,6 +10077,11 @@ class ComponentDecoratorHandler {
10051
10077
  for (const styleUrl of styleUrls) {
10052
10078
  try {
10053
10079
  const resourceUrl = this.resourceLoader.resolve(styleUrl.url, containingFile);
10080
+ if (this.externalRuntimeStyles) {
10081
+ // External runtime styles are not considered disk-based and may not actually exist on disk
10082
+ externalStyles.push(resourceUrl);
10083
+ continue;
10084
+ }
10054
10085
  if (styleUrl.source === 2 /* ResourceTypeForDiagnostics.StylesheetFromDecorator */ &&
10055
10086
  ts__default["default"].isStringLiteralLike(styleUrl.expression)) {
10056
10087
  // Only string literal values from the decorator are considered style resources
@@ -10095,8 +10126,14 @@ class ComponentDecoratorHandler {
10095
10126
  if (this.preanalyzeStylesCache.has(node)) {
10096
10127
  inlineStyles = this.preanalyzeStylesCache.get(node);
10097
10128
  this.preanalyzeStylesCache.delete(node);
10098
- if (inlineStyles !== null) {
10099
- styles.push(...inlineStyles);
10129
+ if (inlineStyles?.length) {
10130
+ if (this.externalRuntimeStyles) {
10131
+ // When external runtime styles is enabled, a list of URLs is provided
10132
+ externalStyles.push(...inlineStyles);
10133
+ }
10134
+ else {
10135
+ styles.push(...inlineStyles);
10136
+ }
10100
10137
  }
10101
10138
  }
10102
10139
  else {
@@ -10150,6 +10187,7 @@ class ComponentDecoratorHandler {
10150
10187
  changeDetection,
10151
10188
  interpolation: template.interpolationConfig ?? checker.DEFAULT_INTERPOLATION_CONFIG,
10152
10189
  styles,
10190
+ externalStyles,
10153
10191
  // These will be replaced during the compilation step, after all `NgModule`s have been
10154
10192
  // analyzed and the full compilation scope for the component can be realized.
10155
10193
  animations,
@@ -11374,7 +11412,7 @@ class PipeSymbol extends SemanticSymbol {
11374
11412
  }
11375
11413
  }
11376
11414
  class PipeDecoratorHandler {
11377
- constructor(reflector, evaluator, metaRegistry, scopeRegistry, injectableRegistry, isCore, perf, includeClassMetadata, compilationMode, generateExtraImportsInLocalMode) {
11415
+ constructor(reflector, evaluator, metaRegistry, scopeRegistry, injectableRegistry, isCore, perf, includeClassMetadata, compilationMode, generateExtraImportsInLocalMode, strictStandalone) {
11378
11416
  this.reflector = reflector;
11379
11417
  this.evaluator = evaluator;
11380
11418
  this.metaRegistry = metaRegistry;
@@ -11385,6 +11423,7 @@ class PipeDecoratorHandler {
11385
11423
  this.includeClassMetadata = includeClassMetadata;
11386
11424
  this.compilationMode = compilationMode;
11387
11425
  this.generateExtraImportsInLocalMode = generateExtraImportsInLocalMode;
11426
+ this.strictStandalone = strictStandalone;
11388
11427
  this.precedence = checker.HandlerPrecedence.PRIMARY;
11389
11428
  this.name = 'PipeDecoratorHandler';
11390
11429
  }
@@ -11444,6 +11483,9 @@ class PipeDecoratorHandler {
11444
11483
  throw createValueHasWrongTypeError(expr, resolved, `standalone flag must be a boolean`);
11445
11484
  }
11446
11485
  isStandalone = resolved;
11486
+ if (!isStandalone && this.strictStandalone) {
11487
+ throw new checker.FatalDiagnosticError(checker.ErrorCode.NON_STANDALONE_NOT_ALLOWED, expr, `Only standalone pipes are allowed when 'strictStandalone' is enabled.`);
11488
+ }
11447
11489
  }
11448
11490
  return {
11449
11491
  analysis: {
@@ -12997,7 +13039,8 @@ class ClassExtractor {
12997
13039
  if (this.isMethod(memberDeclaration)) {
12998
13040
  return this.extractMethod(memberDeclaration);
12999
13041
  }
13000
- else if (this.isProperty(memberDeclaration)) {
13042
+ else if (this.isProperty(memberDeclaration) &&
13043
+ !this.hasPrivateComputedProperty(memberDeclaration)) {
13001
13044
  return this.extractClassProperty(memberDeclaration);
13002
13045
  }
13003
13046
  else if (ts__default["default"].isAccessor(memberDeclaration)) {
@@ -13205,6 +13248,14 @@ class ClassExtractor {
13205
13248
  const modifiers = this.declaration.modifiers ?? [];
13206
13249
  return modifiers.some((mod) => mod.kind === ts__default["default"].SyntaxKind.AbstractKeyword);
13207
13250
  }
13251
+ /**
13252
+ * Check wether a member has a private computed property name like [ɵWRITABLE_SIGNAL]
13253
+ *
13254
+ * This will prevent exposing private computed properties in the docs.
13255
+ */
13256
+ hasPrivateComputedProperty(property) {
13257
+ return (ts__default["default"].isComputedPropertyName(property.name) && property.name.expression.getText().startsWith('ɵ'));
13258
+ }
13208
13259
  }
13209
13260
  /** Extractor to pull info for API reference documentation for an Angular directive. */
13210
13261
  class DirectiveExtractor extends ClassExtractor {
@@ -15157,6 +15208,7 @@ class AdapterResourceLoader {
15157
15208
  type: 'style',
15158
15209
  containingFile: context.containingFile,
15159
15210
  resourceFile: resolvedUrl,
15211
+ className: context.className,
15160
15212
  };
15161
15213
  result = Promise.resolve(result).then(async (str) => {
15162
15214
  const transformResult = await this.adapter.transformResource(str, resourceContext);
@@ -15192,6 +15244,8 @@ class AdapterResourceLoader {
15192
15244
  type: 'style',
15193
15245
  containingFile: context.containingFile,
15194
15246
  resourceFile: null,
15247
+ order: context.order,
15248
+ className: context.className,
15195
15249
  });
15196
15250
  if (transformResult === null) {
15197
15251
  return data;
@@ -16454,15 +16508,18 @@ class UnusedStandaloneImportsRule {
16454
16508
  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
16509
  }
16456
16510
  getUnusedSymbols(metadata, usedDirectives, usedPipes) {
16457
- if (metadata.imports === null || metadata.rawImports === null) {
16511
+ const { imports, rawImports } = metadata;
16512
+ if (imports === null || rawImports === null) {
16458
16513
  return null;
16459
16514
  }
16460
16515
  let unused = null;
16461
- for (const current of metadata.imports) {
16516
+ for (const current of imports) {
16462
16517
  const currentNode = current.node;
16463
16518
  const dirMeta = this.templateTypeChecker.getDirectiveMetadata(currentNode);
16464
16519
  if (dirMeta !== null) {
16465
- if (dirMeta.isStandalone && (usedDirectives === null || !usedDirectives.has(currentNode))) {
16520
+ if (dirMeta.isStandalone &&
16521
+ !usedDirectives.has(currentNode) &&
16522
+ !this.isPotentialSharedReference(current, rawImports)) {
16466
16523
  unused ??= [];
16467
16524
  unused.push([current, dirMeta.isComponent ? 'Component' : 'Directive', dirMeta.name]);
16468
16525
  }
@@ -16471,13 +16528,41 @@ class UnusedStandaloneImportsRule {
16471
16528
  const pipeMeta = this.templateTypeChecker.getPipeMetadata(currentNode);
16472
16529
  if (pipeMeta !== null &&
16473
16530
  pipeMeta.isStandalone &&
16474
- (usedPipes === null || !usedPipes.has(pipeMeta.name))) {
16531
+ !usedPipes.has(pipeMeta.name) &&
16532
+ !this.isPotentialSharedReference(current, rawImports)) {
16475
16533
  unused ??= [];
16476
16534
  unused.push([current, 'Pipe', pipeMeta.ref.node.name.text]);
16477
16535
  }
16478
16536
  }
16479
16537
  return unused;
16480
16538
  }
16539
+ /**
16540
+ * Determines if an import reference *might* be coming from a shared imports array.
16541
+ * @param reference Reference to be checked.
16542
+ * @param rawImports AST node that defines the `imports` array.
16543
+ */
16544
+ isPotentialSharedReference(reference, rawImports) {
16545
+ // If the reference is defined directly in the `imports` array, it cannot be shared.
16546
+ if (reference.getIdentityInExpression(rawImports) !== null) {
16547
+ return false;
16548
+ }
16549
+ // The reference might be shared if it comes from an exported array. If the variable is local
16550
+ /// to the file, then it likely isn't shared. Note that this has the potential for false
16551
+ // positives if a non-exported array of imports is shared between components in the same
16552
+ // file. This scenario is unlikely and even if we report the diagnostic for it, it would be
16553
+ // okay since the user only has to refactor components within the same file, rather than the
16554
+ // entire application.
16555
+ let current = reference.getIdentityIn(rawImports.getSourceFile());
16556
+ while (current !== null) {
16557
+ if (ts__default["default"].isVariableStatement(current)) {
16558
+ return !!current.modifiers?.some((m) => m.kind === ts__default["default"].SyntaxKind.ExportKeyword);
16559
+ }
16560
+ current = current.parent;
16561
+ }
16562
+ // Otherwise the reference likely comes from an imported
16563
+ // symbol like an array of shared common components.
16564
+ return true;
16565
+ }
16481
16566
  }
16482
16567
 
16483
16568
  /*!
@@ -19222,7 +19307,7 @@ var semver = /*@__PURE__*/getDefaultExportFromCjs(semverExports);
19222
19307
  * @param minVersion Minimum required version for the feature.
19223
19308
  */
19224
19309
  function coreVersionSupportsFeature(coreVersion, minVersion) {
19225
- // A version of `19.0.0-next.7` usually means that core is at head so it supports
19310
+ // A version of `19.0.0-next.9` usually means that core is at head so it supports
19226
19311
  // all features. Use string interpolation prevent the placeholder from being replaced
19227
19312
  // with the current version during build time.
19228
19313
  if (coreVersion === `0.0.0-${'PLACEHOLDER'}`) {
@@ -20078,6 +20163,7 @@ class NgCompiler {
20078
20163
  const strictCtorDeps = this.options.strictInjectionParameters || false;
20079
20164
  const supportJitMode = this.options['supportJitMode'] ?? true;
20080
20165
  const supportTestBed = this.options['supportTestBed'] ?? true;
20166
+ const externalRuntimeStyles = this.options['externalRuntimeStyles'] ?? false;
20081
20167
  // Libraries compiled in partial mode could potentially be used with TestBed within an
20082
20168
  // application. Since this is not known at library compilation time, support is required to
20083
20169
  // prevent potential downstream application testing breakage.
@@ -20096,13 +20182,13 @@ class NgCompiler {
20096
20182
  const jitDeclarationRegistry = new JitDeclarationRegistry();
20097
20183
  // Set up the IvyCompilation, which manages state for the Ivy transformer.
20098
20184
  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),
20185
+ 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, externalRuntimeStyles, localCompilationExtraImportsTracker, jitDeclarationRegistry, this.options.i18nPreserveWhitespaceForLegacyExtraction ?? true, !!this.options.strictStandalone),
20100
20186
  // TODO(alxhub): understand why the cast here is necessary (something to do with `null`
20101
20187
  // 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),
20188
+ 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
20189
  // Pipe handler must be before injectable handler in list so pipe factories are printed
20104
20190
  // 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),
20191
+ new PipeDecoratorHandler(reflector, evaluator, metaRegistry, ngModuleScopeRegistry, injectableRegistry, isCore, this.delegatingPerfRecorder, supportTestBed, compilationMode, !!this.options.generateExtraImportsInLocalMode, !!this.options.strictStandalone),
20106
20192
  new InjectableDecoratorHandler(reflector, evaluator, isCore, strictCtorDeps, injectableRegistry, this.delegatingPerfRecorder, supportTestBed, compilationMode),
20107
20193
  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
20194
  ];
@@ -20815,5 +20901,7 @@ exports.DtsMetadataReader = DtsMetadataReader;
20815
20901
  exports.NgtscProgram = NgtscProgram;
20816
20902
  exports.PartialEvaluator = PartialEvaluator;
20817
20903
  exports.UNKNOWN_ERROR_CODE = UNKNOWN_ERROR_CODE;
20904
+ exports.extractDecoratorQueryMetadata = extractDecoratorQueryMetadata;
20818
20905
  exports.extractTemplate = extractTemplate;
20819
20906
  exports.parseDecoratorInputTransformFunction = parseDecoratorInputTransformFunction;
20907
+ 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.9
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.9
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-b4ba5a28.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-3b2ea20f.js');
18
18
  require('os');
19
19
  require('module');
20
20
  require('url');