@angular/core 18.2.7 → 18.2.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 (30) hide show
  1. package/esm2022/src/linker/view_ref.mjs +1 -1
  2. package/esm2022/src/platform/bootstrap.mjs +8 -4
  3. package/esm2022/src/platform/platform_ref.mjs +6 -2
  4. package/esm2022/src/render3/after_render/manager.mjs +4 -1
  5. package/esm2022/src/render3/component_ref.mjs +1 -1
  6. package/esm2022/src/render3/view_ref.mjs +1 -1
  7. package/esm2022/src/version.mjs +1 -1
  8. package/esm2022/testing/src/application_error_handler.mjs +3 -3
  9. package/esm2022/testing/src/component_fixture.mjs +1 -1
  10. package/esm2022/testing/src/logger.mjs +3 -3
  11. package/fesm2022/core.mjs +18 -7
  12. package/fesm2022/core.mjs.map +1 -1
  13. package/fesm2022/primitives/event-dispatch.mjs +1 -1
  14. package/fesm2022/primitives/signals.mjs +1 -1
  15. package/fesm2022/rxjs-interop.mjs +1 -1
  16. package/fesm2022/testing.mjs +4 -4
  17. package/fesm2022/testing.mjs.map +1 -1
  18. package/index.d.ts +2 -12
  19. package/package.json +1 -1
  20. package/primitives/event-dispatch/index.d.ts +1 -1
  21. package/primitives/signals/index.d.ts +1 -1
  22. package/rxjs-interop/index.d.ts +1 -1
  23. package/schematics/migrations/after-render-phase/bundle.js +64 -22
  24. package/schematics/migrations/http-providers/bundle.js +64 -22
  25. package/schematics/migrations/invalid-two-way-bindings/bundle.js +64 -22
  26. package/schematics/ng-generate/control-flow-migration/bundle.js +64 -22
  27. package/schematics/ng-generate/inject-migration/bundle.js +64 -22
  28. package/schematics/ng-generate/route-lazy-loading/bundle.js +64 -22
  29. package/schematics/ng-generate/standalone-migration/bundle.js +79 -34
  30. package/testing/index.d.ts +3 -1
@@ -8640,7 +8640,7 @@ var ShadowCss = class {
8640
8640
  });
8641
8641
  }
8642
8642
  _convertColonHostContext(cssText) {
8643
- return cssText.replace(_cssColonHostContextReGlobal, (selectorText) => {
8643
+ return cssText.replace(_cssColonHostContextReGlobal, (selectorText, pseudoPrefix) => {
8644
8644
  var _a2;
8645
8645
  const contextSelectorGroups = [[]];
8646
8646
  let match;
@@ -8655,7 +8655,7 @@ var ShadowCss = class {
8655
8655
  }
8656
8656
  selectorText = match[2];
8657
8657
  }
8658
- return contextSelectorGroups.map((contextSelectors) => combineHostContextSelectors(contextSelectors, selectorText)).join(", ");
8658
+ return contextSelectorGroups.map((contextSelectors) => _combineHostContextSelectors(contextSelectors, selectorText, pseudoPrefix)).join(", ");
8659
8659
  });
8660
8660
  }
8661
8661
  _convertShadowDOMSelectors(cssText) {
@@ -8666,7 +8666,12 @@ var ShadowCss = class {
8666
8666
  let selector = rule.selector;
8667
8667
  let content = rule.content;
8668
8668
  if (rule.selector[0] !== "@") {
8669
- selector = this._scopeSelector(rule.selector, scopeSelector, hostSelector);
8669
+ selector = this._scopeSelector({
8670
+ selector,
8671
+ scopeSelector,
8672
+ hostSelector,
8673
+ isParentSelector: true
8674
+ });
8670
8675
  } else if (scopedAtRuleIdentifiers.some((atRule) => rule.selector.startsWith(atRule))) {
8671
8676
  content = this._scopeSelectors(rule.content, scopeSelector, hostSelector);
8672
8677
  } else if (rule.selector.startsWith("@font-face") || rule.selector.startsWith("@page")) {
@@ -8681,12 +8686,18 @@ var ShadowCss = class {
8681
8686
  return new CssRule(selector, rule.content);
8682
8687
  });
8683
8688
  }
8684
- _scopeSelector(selector, scopeSelector, hostSelector) {
8685
- return selector.split(/ ?, ?/).map((part) => part.split(_shadowDeepSelectors)).map((deepParts) => {
8689
+ _scopeSelector({ selector, scopeSelector, hostSelector, isParentSelector = false }) {
8690
+ const selectorSplitRe = / ?,(?!(?:[^)(]*(?:\([^)(]*(?:\([^)(]*(?:\([^)(]*\)[^)(]*)*\)[^)(]*)*\)[^)(]*)*\))) ?/;
8691
+ return selector.split(selectorSplitRe).map((part) => part.split(_shadowDeepSelectors)).map((deepParts) => {
8686
8692
  const [shallowPart, ...otherParts] = deepParts;
8687
8693
  const applyScope = (shallowPart2) => {
8688
8694
  if (this._selectorNeedsScoping(shallowPart2, scopeSelector)) {
8689
- return this._applySelectorScope(shallowPart2, scopeSelector, hostSelector);
8695
+ return this._applySelectorScope({
8696
+ selector: shallowPart2,
8697
+ scopeSelector,
8698
+ hostSelector,
8699
+ isParentSelector
8700
+ });
8690
8701
  } else {
8691
8702
  return shallowPart2;
8692
8703
  }
@@ -8708,15 +8719,15 @@ var ShadowCss = class {
8708
8719
  _polyfillHostRe.lastIndex = 0;
8709
8720
  if (_polyfillHostRe.test(selector)) {
8710
8721
  const replaceBy = `[${hostSelector}]`;
8711
- return selector.replace(_polyfillHostNoCombinatorRe, (hnc, selector2) => {
8712
- return selector2.replace(/([^:]*)(:*)(.*)/, (_, before, colon, after) => {
8722
+ return selector.replace(_polyfillHostNoCombinatorReGlobal, (_hnc, selector2) => {
8723
+ return selector2.replace(/([^:\)]*)(:*)(.*)/, (_, before, colon, after) => {
8713
8724
  return before + replaceBy + colon + after;
8714
8725
  });
8715
8726
  }).replace(_polyfillHostRe, replaceBy + " ");
8716
8727
  }
8717
8728
  return scopeSelector + " " + selector;
8718
8729
  }
8719
- _applySelectorScope(selector, scopeSelector, hostSelector) {
8730
+ _applySelectorScope({ selector, scopeSelector, hostSelector, isParentSelector }) {
8720
8731
  var _a2;
8721
8732
  const isRe = /\[is=([^\]]*)\]/g;
8722
8733
  scopeSelector = scopeSelector.replace(isRe, (_, ...parts) => parts[0]);
@@ -8728,6 +8739,10 @@ var ShadowCss = class {
8728
8739
  }
8729
8740
  if (p2.includes(_polyfillHostNoCombinator)) {
8730
8741
  scopedP = this._applySimpleSelectorScope(p2, scopeSelector, hostSelector);
8742
+ if (_polyfillHostNoCombinatorWithinPseudoFunction.test(p2)) {
8743
+ const [_, before, colon, after] = scopedP.match(/([^:]*)(:*)(.*)/);
8744
+ scopedP = before + attrName + colon + after;
8745
+ }
8731
8746
  } else {
8732
8747
  const t = p2.replace(_polyfillHostRe, "");
8733
8748
  if (t.length > 0) {
@@ -8739,29 +8754,52 @@ var ShadowCss = class {
8739
8754
  }
8740
8755
  return scopedP;
8741
8756
  };
8742
- const safeContent = new SafeSelector(selector);
8743
- selector = safeContent.content();
8757
+ const _pseudoFunctionAwareScopeSelectorPart = (selectorPart) => {
8758
+ let scopedPart = "";
8759
+ const cssPrefixWithPseudoSelectorFunctionMatch = selectorPart.match(_cssPrefixWithPseudoSelectorFunction);
8760
+ if (cssPrefixWithPseudoSelectorFunctionMatch) {
8761
+ const [cssPseudoSelectorFunction] = cssPrefixWithPseudoSelectorFunctionMatch;
8762
+ const selectorToScope = selectorPart.slice(cssPseudoSelectorFunction.length, -1);
8763
+ if (selectorToScope.includes(_polyfillHostNoCombinator)) {
8764
+ this._shouldScopeIndicator = true;
8765
+ }
8766
+ const scopedInnerPart = this._scopeSelector({
8767
+ selector: selectorToScope,
8768
+ scopeSelector,
8769
+ hostSelector
8770
+ });
8771
+ scopedPart = `${cssPseudoSelectorFunction}${scopedInnerPart})`;
8772
+ } else {
8773
+ this._shouldScopeIndicator = this._shouldScopeIndicator || selectorPart.includes(_polyfillHostNoCombinator);
8774
+ scopedPart = this._shouldScopeIndicator ? _scopeSelectorPart(selectorPart) : selectorPart;
8775
+ }
8776
+ return scopedPart;
8777
+ };
8778
+ if (isParentSelector) {
8779
+ this._safeSelector = new SafeSelector(selector);
8780
+ selector = this._safeSelector.content();
8781
+ }
8744
8782
  let scopedSelector = "";
8745
8783
  let startIndex = 0;
8746
8784
  let res;
8747
- const sep2 = /( |>|\+|~(?!=))\s*/g;
8785
+ const sep2 = /( |>|\+|~(?!=))(?!([^)(]*(?:\([^)(]*(?:\([^)(]*(?:\([^)(]*\)[^)(]*)*\)[^)(]*)*\)[^)(]*)*\)))\s*/g;
8748
8786
  const hasHost = selector.includes(_polyfillHostNoCombinator);
8749
- let shouldScope = !hasHost;
8787
+ if (isParentSelector || this._shouldScopeIndicator) {
8788
+ this._shouldScopeIndicator = !hasHost;
8789
+ }
8750
8790
  while ((res = sep2.exec(selector)) !== null) {
8751
8791
  const separator = res[1];
8752
8792
  const part2 = selector.slice(startIndex, res.index);
8753
8793
  if (part2.match(/__esc-ph-(\d+)__/) && ((_a2 = selector[res.index + 1]) == null ? void 0 : _a2.match(/[a-fA-F\d]/))) {
8754
8794
  continue;
8755
8795
  }
8756
- shouldScope = shouldScope || part2.includes(_polyfillHostNoCombinator);
8757
- const scopedPart = shouldScope ? _scopeSelectorPart(part2) : part2;
8796
+ const scopedPart = _pseudoFunctionAwareScopeSelectorPart(part2);
8758
8797
  scopedSelector += `${scopedPart} ${separator} `;
8759
8798
  startIndex = sep2.lastIndex;
8760
8799
  }
8761
8800
  const part = selector.substring(startIndex);
8762
- shouldScope = shouldScope || part.includes(_polyfillHostNoCombinator);
8763
- scopedSelector += shouldScope ? _scopeSelectorPart(part) : part;
8764
- return safeContent.restore(scopedSelector);
8801
+ scopedSelector += _pseudoFunctionAwareScopeSelectorPart(part);
8802
+ return this._safeSelector.restore(scopedSelector);
8765
8803
  }
8766
8804
  _insertPolyfillHostInCssText(selector) {
8767
8805
  return selector.replace(_colonHostContextRe, _polyfillHostContext).replace(_colonHostRe, _polyfillHost);
@@ -8800,6 +8838,8 @@ var SafeSelector = class {
8800
8838
  });
8801
8839
  }
8802
8840
  };
8841
+ var _cssScopedPseudoFunctionPrefix = "(:(where|is)\\()?";
8842
+ var _cssPrefixWithPseudoSelectorFunction = /^:(where|is)\(/i;
8803
8843
  var _cssContentNextSelectorRe = /polyfill-next-selector[^}]*content:[\s]*?(['"])(.*?)\1[;\s]*}([^{]*?){/gim;
8804
8844
  var _cssContentRuleRe = /(polyfill-rule)[^}]*(content:[\s]*(['"])(.*?)\3)[;\s]*[^}]*}/gim;
8805
8845
  var _cssContentUnscopedRuleRe = /(polyfill-unscoped-rule)[^}]*(content:[\s]*(['"])(.*?)\3)[;\s]*[^}]*}/gim;
@@ -8807,10 +8847,12 @@ var _polyfillHost = "-shadowcsshost";
8807
8847
  var _polyfillHostContext = "-shadowcsscontext";
8808
8848
  var _parenSuffix = "(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))?([^,{]*)";
8809
8849
  var _cssColonHostRe = new RegExp(_polyfillHost + _parenSuffix, "gim");
8810
- var _cssColonHostContextReGlobal = new RegExp(_polyfillHostContext + _parenSuffix, "gim");
8850
+ var _cssColonHostContextReGlobal = new RegExp(_cssScopedPseudoFunctionPrefix + "(" + _polyfillHostContext + _parenSuffix + ")", "gim");
8811
8851
  var _cssColonHostContextRe = new RegExp(_polyfillHostContext + _parenSuffix, "im");
8812
8852
  var _polyfillHostNoCombinator = _polyfillHost + "-no-combinator";
8853
+ var _polyfillHostNoCombinatorWithinPseudoFunction = new RegExp(`:.*\\(.*${_polyfillHostNoCombinator}.*\\)`);
8813
8854
  var _polyfillHostNoCombinatorRe = /-shadowcsshost-no-combinator([^\s]*)/;
8855
+ var _polyfillHostNoCombinatorReGlobal = new RegExp(_polyfillHostNoCombinatorRe, "g");
8814
8856
  var _shadowDOMSelectorsRe = [
8815
8857
  /::shadow/g,
8816
8858
  /::content/g,
@@ -8945,7 +8987,7 @@ function unescapeInStrings(input) {
8945
8987
  function unescapeQuotes(str, isQuoted) {
8946
8988
  return !isQuoted ? str : str.replace(/((?:^|[^\\])(?:\\\\)*)\\(?=['"])/g, "$1");
8947
8989
  }
8948
- function combineHostContextSelectors(contextSelectors, otherSelectors) {
8990
+ function _combineHostContextSelectors(contextSelectors, otherSelectors, pseudoPrefix = "") {
8949
8991
  const hostMarker = _polyfillHostNoCombinator;
8950
8992
  _polyfillHostRe.lastIndex = 0;
8951
8993
  const otherSelectorsHasHost = _polyfillHostRe.test(otherSelectors);
@@ -8963,7 +9005,7 @@ function combineHostContextSelectors(contextSelectors, otherSelectors) {
8963
9005
  combined[i] = contextSelector + previousSelectors;
8964
9006
  }
8965
9007
  }
8966
- return combined.map((s) => otherSelectorsHasHost ? `${s}${otherSelectors}` : `${s}${hostMarker}${otherSelectors}, ${s} ${hostMarker}${otherSelectors}`).join(",");
9008
+ return combined.map((s) => otherSelectorsHasHost ? `${pseudoPrefix}${s}${otherSelectors}` : `${pseudoPrefix}${s}${hostMarker}${otherSelectors}, ${pseudoPrefix}${s} ${hostMarker}${otherSelectors}`).join(",");
8967
9009
  }
8968
9010
  function repeatGroups(groups, multiples) {
8969
9011
  const length = groups.length;
@@ -26226,7 +26268,7 @@ function publishFacade(global) {
26226
26268
  }
26227
26269
 
26228
26270
  // bazel-out/k8-fastbuild/bin/packages/compiler/src/version.mjs
26229
- var VERSION2 = new Version("18.2.7");
26271
+ var VERSION2 = new Version("18.2.8");
26230
26272
 
26231
26273
  // bazel-out/k8-fastbuild/bin/packages/compiler/src/i18n/extractor_merger.mjs
26232
26274
  var _I18N_ATTR = "i18n";
@@ -27343,7 +27385,7 @@ var MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION = "18.0.0";
27343
27385
  function compileDeclareClassMetadata(metadata) {
27344
27386
  const definitionMap = new DefinitionMap();
27345
27387
  definitionMap.set("minVersion", literal(MINIMUM_PARTIAL_LINKER_VERSION));
27346
- definitionMap.set("version", literal("18.2.7"));
27388
+ definitionMap.set("version", literal("18.2.8"));
27347
27389
  definitionMap.set("ngImport", importExpr(Identifiers.core));
27348
27390
  definitionMap.set("type", metadata.type);
27349
27391
  definitionMap.set("decorators", metadata.decorators);
@@ -27362,7 +27404,7 @@ function compileComponentDeclareClassMetadata(metadata, dependencies) {
27362
27404
  callbackReturnDefinitionMap.set("ctorParameters", (_a2 = metadata.ctorParameters) != null ? _a2 : literal(null));
27363
27405
  callbackReturnDefinitionMap.set("propDecorators", (_b2 = metadata.propDecorators) != null ? _b2 : literal(null));
27364
27406
  definitionMap.set("minVersion", literal(MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION));
27365
- definitionMap.set("version", literal("18.2.7"));
27407
+ definitionMap.set("version", literal("18.2.8"));
27366
27408
  definitionMap.set("ngImport", importExpr(Identifiers.core));
27367
27409
  definitionMap.set("type", metadata.type);
27368
27410
  definitionMap.set("resolveDeferredDeps", compileComponentMetadataAsyncResolver(dependencies));
@@ -27430,7 +27472,7 @@ function createDirectiveDefinitionMap(meta) {
27430
27472
  const definitionMap = new DefinitionMap();
27431
27473
  const minVersion = getMinimumVersionForPartialOutput(meta);
27432
27474
  definitionMap.set("minVersion", literal(minVersion));
27433
- definitionMap.set("version", literal("18.2.7"));
27475
+ definitionMap.set("version", literal("18.2.8"));
27434
27476
  definitionMap.set("type", meta.type.value);
27435
27477
  if (meta.isStandalone) {
27436
27478
  definitionMap.set("isStandalone", literal(meta.isStandalone));
@@ -27748,7 +27790,7 @@ var MINIMUM_PARTIAL_LINKER_VERSION2 = "12.0.0";
27748
27790
  function compileDeclareFactoryFunction(meta) {
27749
27791
  const definitionMap = new DefinitionMap();
27750
27792
  definitionMap.set("minVersion", literal(MINIMUM_PARTIAL_LINKER_VERSION2));
27751
- definitionMap.set("version", literal("18.2.7"));
27793
+ definitionMap.set("version", literal("18.2.8"));
27752
27794
  definitionMap.set("ngImport", importExpr(Identifiers.core));
27753
27795
  definitionMap.set("type", meta.type.value);
27754
27796
  definitionMap.set("deps", compileDependencies(meta.deps));
@@ -27771,7 +27813,7 @@ function compileDeclareInjectableFromMetadata(meta) {
27771
27813
  function createInjectableDefinitionMap(meta) {
27772
27814
  const definitionMap = new DefinitionMap();
27773
27815
  definitionMap.set("minVersion", literal(MINIMUM_PARTIAL_LINKER_VERSION3));
27774
- definitionMap.set("version", literal("18.2.7"));
27816
+ definitionMap.set("version", literal("18.2.8"));
27775
27817
  definitionMap.set("ngImport", importExpr(Identifiers.core));
27776
27818
  definitionMap.set("type", meta.type.value);
27777
27819
  if (meta.providedIn !== void 0) {
@@ -27809,7 +27851,7 @@ function compileDeclareInjectorFromMetadata(meta) {
27809
27851
  function createInjectorDefinitionMap(meta) {
27810
27852
  const definitionMap = new DefinitionMap();
27811
27853
  definitionMap.set("minVersion", literal(MINIMUM_PARTIAL_LINKER_VERSION4));
27812
- definitionMap.set("version", literal("18.2.7"));
27854
+ definitionMap.set("version", literal("18.2.8"));
27813
27855
  definitionMap.set("ngImport", importExpr(Identifiers.core));
27814
27856
  definitionMap.set("type", meta.type.value);
27815
27857
  definitionMap.set("providers", meta.providers);
@@ -27833,7 +27875,7 @@ function createNgModuleDefinitionMap(meta) {
27833
27875
  throw new Error("Invalid path! Local compilation mode should not get into the partial compilation path");
27834
27876
  }
27835
27877
  definitionMap.set("minVersion", literal(MINIMUM_PARTIAL_LINKER_VERSION5));
27836
- definitionMap.set("version", literal("18.2.7"));
27878
+ definitionMap.set("version", literal("18.2.8"));
27837
27879
  definitionMap.set("ngImport", importExpr(Identifiers.core));
27838
27880
  definitionMap.set("type", meta.type.value);
27839
27881
  if (meta.bootstrap.length > 0) {
@@ -27868,7 +27910,7 @@ function compileDeclarePipeFromMetadata(meta) {
27868
27910
  function createPipeDefinitionMap(meta) {
27869
27911
  const definitionMap = new DefinitionMap();
27870
27912
  definitionMap.set("minVersion", literal(MINIMUM_PARTIAL_LINKER_VERSION6));
27871
- definitionMap.set("version", literal("18.2.7"));
27913
+ definitionMap.set("version", literal("18.2.8"));
27872
27914
  definitionMap.set("ngImport", importExpr(Identifiers.core));
27873
27915
  definitionMap.set("type", meta.type.value);
27874
27916
  if (meta.isStandalone) {
@@ -27885,7 +27927,7 @@ function createPipeDefinitionMap(meta) {
27885
27927
  publishFacade(_global);
27886
27928
 
27887
27929
  // bazel-out/k8-fastbuild/bin/packages/compiler-cli/src/version.mjs
27888
- var VERSION3 = new Version("18.2.7");
27930
+ var VERSION3 = new Version("18.2.8");
27889
27931
 
27890
27932
  // bazel-out/k8-fastbuild/bin/packages/compiler-cli/src/ngtsc/imports/src/emitter.mjs
27891
27933
  var import_typescript5 = __toESM(require("typescript"), 1);
@@ -29443,7 +29485,7 @@ var DeferredSymbolTracker = class {
29443
29485
  return false;
29444
29486
  }
29445
29487
  const symbolsMap = this.imports.get(importDecl);
29446
- for (const [symbol, refs] of symbolsMap) {
29488
+ for (const refs of symbolsMap.values()) {
29447
29489
  if (refs === AssumeEager || refs.size > 0) {
29448
29490
  return false;
29449
29491
  }
@@ -29462,7 +29504,7 @@ var DeferredSymbolTracker = class {
29462
29504
  lookupIdentifiersInSourceFile(name, importDecl) {
29463
29505
  const results = /* @__PURE__ */ new Set();
29464
29506
  const visit2 = (node) => {
29465
- if (node === importDecl) {
29507
+ if (node === importDecl || import_typescript13.default.isTypeNode(node)) {
29466
29508
  return;
29467
29509
  }
29468
29510
  if (import_typescript13.default.isIdentifier(node) && node.text === name) {
@@ -46760,7 +46802,7 @@ var ClassExtractor = class {
46760
46802
  extractClassMember(memberDeclaration) {
46761
46803
  if (this.isMethod(memberDeclaration)) {
46762
46804
  return this.extractMethod(memberDeclaration);
46763
- } else if (this.isProperty(memberDeclaration)) {
46805
+ } else if (this.isProperty(memberDeclaration) && !this.hasPrivateComputedProperty(memberDeclaration)) {
46764
46806
  return this.extractClassProperty(memberDeclaration);
46765
46807
  } else if (import_typescript102.default.isAccessor(memberDeclaration)) {
46766
46808
  return this.extractGetterSetter(memberDeclaration);
@@ -46917,6 +46959,9 @@ var ClassExtractor = class {
46917
46959
  const modifiers = (_a2 = this.declaration.modifiers) != null ? _a2 : [];
46918
46960
  return modifiers.some((mod) => mod.kind === import_typescript102.default.SyntaxKind.AbstractKeyword);
46919
46961
  }
46962
+ hasPrivateComputedProperty(property2) {
46963
+ return import_typescript102.default.isComputedPropertyName(property2.name) && property2.name.expression.getText().startsWith("\u0275");
46964
+ }
46920
46965
  };
46921
46966
  var DirectiveExtractor = class extends ClassExtractor {
46922
46967
  constructor(declaration, reference2, metadata, checker) {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v18.2.7
2
+ * @license Angular v18.2.8
3
3
  * (c) 2010-2024 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -81,6 +81,8 @@ export declare abstract class ComponentFixture<T> {
81
81
  * Set whether the fixture should autodetect changes.
82
82
  *
83
83
  * Also runs detectChanges once so that any existing change is detected.
84
+ *
85
+ * @param autoDetect Whether to autodetect changes. By default, `true`.
84
86
  */
85
87
  abstract autoDetectChanges(autoDetect?: boolean): void;
86
88
  /**