@angular/core 17.0.8 → 17.0.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 (50) hide show
  1. package/esm2022/src/application/application_ref.mjs +21 -5
  2. package/esm2022/src/change_detection/scheduling/zoneless_scheduling_impl.mjs +56 -0
  3. package/esm2022/src/core_private_export.mjs +2 -1
  4. package/esm2022/src/core_render3_private_export.mjs +1 -2
  5. package/esm2022/src/defer/dom_triggers.mjs +1 -5
  6. package/esm2022/src/di/inject_switch.mjs +2 -3
  7. package/esm2022/src/di/r3_injector.mjs +8 -6
  8. package/esm2022/src/errors.mjs +1 -1
  9. package/esm2022/src/hydration/utils.mjs +2 -2
  10. package/esm2022/src/hydration/views.mjs +2 -2
  11. package/esm2022/src/linker/view_container_ref.mjs +2 -2
  12. package/esm2022/src/render3/after_render_hooks.mjs +15 -33
  13. package/esm2022/src/render3/collect_native_nodes.mjs +2 -3
  14. package/esm2022/src/render3/component_ref.mjs +1 -1
  15. package/esm2022/src/render3/debug/injector_profiler.mjs +1 -1
  16. package/esm2022/src/render3/errors_di.mjs +4 -3
  17. package/esm2022/src/render3/instructions/advance.mjs +2 -2
  18. package/esm2022/src/render3/instructions/change_detection.mjs +1 -6
  19. package/esm2022/src/render3/instructions/mark_view_dirty.mjs +2 -2
  20. package/esm2022/src/render3/instructions/shared.mjs +2 -2
  21. package/esm2022/src/render3/interfaces/container.mjs +1 -6
  22. package/esm2022/src/render3/node_manipulation.mjs +8 -8
  23. package/esm2022/src/render3/reactivity/effect.mjs +8 -6
  24. package/esm2022/src/render3/styling/style_binding_list.mjs +4 -4
  25. package/esm2022/src/render3/util/discovery_utils.mjs +3 -3
  26. package/esm2022/src/render3/util/global_utils.mjs +28 -28
  27. package/esm2022/src/render3/util/injector_discovery_utils.mjs +1 -1
  28. package/esm2022/src/render3/util/injector_utils.mjs +6 -5
  29. package/esm2022/src/render3/util/view_traversal_utils.mjs +3 -12
  30. package/esm2022/src/render3/util/view_utils.mjs +19 -15
  31. package/esm2022/src/version.mjs +1 -1
  32. package/esm2022/testing/src/component_fixture.mjs +62 -58
  33. package/esm2022/testing/src/logger.mjs +3 -3
  34. package/fesm2022/core.mjs +206 -177
  35. package/fesm2022/core.mjs.map +1 -1
  36. package/fesm2022/primitives/signals.mjs +1 -1
  37. package/fesm2022/rxjs-interop.mjs +1 -1
  38. package/fesm2022/testing.mjs +62 -58
  39. package/fesm2022/testing.mjs.map +1 -1
  40. package/index.d.ts +368 -25
  41. package/package.json +1 -1
  42. package/primitives/signals/index.d.ts +1 -1
  43. package/rxjs-interop/index.d.ts +1 -1
  44. package/schematics/migrations/block-template-entities/bundle.js +66 -103
  45. package/schematics/migrations/block-template-entities/bundle.js.map +4 -4
  46. package/schematics/ng-generate/control-flow-migration/bundle.js +67 -104
  47. package/schematics/ng-generate/control-flow-migration/bundle.js.map +4 -4
  48. package/schematics/ng-generate/standalone-migration/bundle.js +83 -118
  49. package/schematics/ng-generate/standalone-migration/bundle.js.map +4 -4
  50. package/testing/index.d.ts +6 -2
@@ -7121,13 +7121,6 @@ var DeferTriggerKind;
7121
7121
  DeferTriggerKind2[DeferTriggerKind2["Interaction"] = 4] = "Interaction";
7122
7122
  DeferTriggerKind2[DeferTriggerKind2["Viewport"] = 5] = "Viewport";
7123
7123
  })(DeferTriggerKind || (DeferTriggerKind = {}));
7124
- var DerivedRepeaterVarIdentity;
7125
- (function(DerivedRepeaterVarIdentity2) {
7126
- DerivedRepeaterVarIdentity2[DerivedRepeaterVarIdentity2["First"] = 0] = "First";
7127
- DerivedRepeaterVarIdentity2[DerivedRepeaterVarIdentity2["Last"] = 1] = "Last";
7128
- DerivedRepeaterVarIdentity2[DerivedRepeaterVarIdentity2["Even"] = 2] = "Even";
7129
- DerivedRepeaterVarIdentity2[DerivedRepeaterVarIdentity2["Odd"] = 3] = "Odd";
7130
- })(DerivedRepeaterVarIdentity || (DerivedRepeaterVarIdentity = {}));
7131
7124
  var I18nContextKind;
7132
7125
  (function(I18nContextKind2) {
7133
7126
  I18nContextKind2[I18nContextKind2["RootI18n"] = 0] = "RootI18n";
@@ -7282,10 +7275,11 @@ function createClassMapOp(xref, expression, sourceSpan) {
7282
7275
  sourceSpan
7283
7276
  }, TRAIT_DEPENDS_ON_SLOT_CONTEXT), TRAIT_CONSUMES_VARS), NEW_OP);
7284
7277
  }
7285
- function createAttributeOp(target, name, expression, securityContext, isTextAttribute, isStructuralTemplateAttribute, templateKind, i18nMessage, sourceSpan) {
7278
+ function createAttributeOp(target, namespace, name, expression, securityContext, isTextAttribute, isStructuralTemplateAttribute, templateKind, i18nMessage, sourceSpan) {
7286
7279
  return __spreadValues(__spreadValues(__spreadValues({
7287
7280
  kind: OpKind.Attribute,
7288
7281
  target,
7282
+ namespace,
7289
7283
  name,
7290
7284
  expression,
7291
7285
  securityContext,
@@ -7940,27 +7934,6 @@ var ConditionalCaseExpr = class extends ExpressionBase {
7940
7934
  }
7941
7935
  }
7942
7936
  };
7943
- var DerivedRepeaterVarExpr = class extends ExpressionBase {
7944
- constructor(xref, identity) {
7945
- super();
7946
- this.xref = xref;
7947
- this.identity = identity;
7948
- this.kind = ExpressionKind.DerivedRepeaterVar;
7949
- }
7950
- transformInternalExpressions(transform2, flags) {
7951
- }
7952
- visitExpression(visitor, context) {
7953
- }
7954
- isEquivalent(e) {
7955
- return e instanceof DerivedRepeaterVarExpr && e.identity === this.identity && e.xref === this.xref;
7956
- }
7957
- isConstant() {
7958
- return false;
7959
- }
7960
- clone() {
7961
- return new DerivedRepeaterVarExpr(this.xref, this.identity);
7962
- }
7963
- };
7964
7937
  var ConstCollectedExpr = class extends ExpressionBase {
7965
7938
  constructor(expr) {
7966
7939
  super();
@@ -8556,11 +8529,12 @@ function createProjectionOp(xref, selector, i18nPlaceholder, attributes, sourceS
8556
8529
  sourceSpan
8557
8530
  }, NEW_OP), TRAIT_CONSUMES_SLOT);
8558
8531
  }
8559
- function createExtractedAttributeOp(target, bindingKind, name, expression, i18nContext, i18nMessage, securityContext) {
8532
+ function createExtractedAttributeOp(target, bindingKind, namespace, name, expression, i18nContext, i18nMessage, securityContext) {
8560
8533
  return __spreadValues({
8561
8534
  kind: OpKind.ExtractedAttribute,
8562
8535
  target,
8563
8536
  bindingKind,
8537
+ namespace,
8564
8538
  name,
8565
8539
  expression,
8566
8540
  i18nContext,
@@ -8950,6 +8924,7 @@ function extractAttributes(job) {
8950
8924
  createExtractedAttributeOp(
8951
8925
  op.target,
8952
8926
  bindingKind,
8927
+ null,
8953
8928
  op.name,
8954
8929
  null,
8955
8930
  null,
@@ -8966,6 +8941,7 @@ function extractAttributes(job) {
8966
8941
  OpList.insertBefore(createExtractedAttributeOp(
8967
8942
  op.target,
8968
8943
  BindingKind.Property,
8944
+ null,
8969
8945
  op.name,
8970
8946
  null,
8971
8947
  null,
@@ -8979,6 +8955,7 @@ function extractAttributes(job) {
8979
8955
  const extractedAttributeOp = createExtractedAttributeOp(
8980
8956
  op.target,
8981
8957
  BindingKind.Property,
8958
+ null,
8982
8959
  op.name,
8983
8960
  null,
8984
8961
  null,
@@ -9012,7 +8989,7 @@ function extractAttributeOp(unit, op, elements) {
9012
8989
  extractable && (extractable = op.isTextAttribute);
9013
8990
  }
9014
8991
  if (extractable) {
9015
- const extractedAttributeOp = createExtractedAttributeOp(op.target, op.isStructuralTemplateAttribute ? BindingKind.Template : BindingKind.Attribute, op.name, op.expression, op.i18nContext, op.i18nMessage, op.securityContext);
8992
+ const extractedAttributeOp = createExtractedAttributeOp(op.target, op.isStructuralTemplateAttribute ? BindingKind.Template : BindingKind.Attribute, op.namespace, op.name, op.expression, op.i18nContext, op.i18nMessage, op.securityContext);
9016
8993
  if (unit.job.kind === CompilationJobKind.Host) {
9017
8994
  unit.create.push(extractedAttributeOp);
9018
8995
  } else {
@@ -9053,7 +9030,8 @@ function specializeBindings(job) {
9053
9030
  const target = lookupElement2(elements, op.target);
9054
9031
  target.nonBindable = true;
9055
9032
  } else {
9056
- OpList.replace(op, createAttributeOp(op.target, op.name, op.expression, op.securityContext, op.isTextAttribute, op.isStructuralTemplateAttribute, op.templateKind, op.i18nMessage, op.sourceSpan));
9033
+ const [namespace, name] = splitNsName(op.name);
9034
+ OpList.replace(op, createAttributeOp(op.target, namespace, name, op.expression, op.securityContext, op.isTextAttribute, op.isStructuralTemplateAttribute, op.templateKind, op.i18nMessage, op.sourceSpan));
9057
9035
  }
9058
9036
  break;
9059
9037
  case BindingKind.Property:
@@ -9246,7 +9224,7 @@ function collectElementConsts(job) {
9246
9224
  if (op.kind === OpKind.ExtractedAttribute) {
9247
9225
  const attributes = allElementAttributes.get(op.target) || new ElementAttributes(job.compatibility);
9248
9226
  allElementAttributes.set(op.target, attributes);
9249
- attributes.add(op.bindingKind, op.name, op.expression, op.trustedValueFn);
9227
+ attributes.add(op.bindingKind, op.name, op.expression, op.namespace, op.trustedValueFn);
9250
9228
  OpList.remove(op);
9251
9229
  }
9252
9230
  }
@@ -9319,7 +9297,7 @@ var ElementAttributes = class {
9319
9297
  nameToValue.add(name);
9320
9298
  return false;
9321
9299
  }
9322
- add(kind, name, value, trustedValueFn) {
9300
+ add(kind, name, value, namespace, trustedValueFn) {
9323
9301
  var _a2;
9324
9302
  const allowDuplicates = this.compatibility === CompatibilityMode.TemplateDefinitionBuilder && (kind === BindingKind.Attribute || kind === BindingKind.ClassName || kind === BindingKind.StyleProperty);
9325
9303
  if (!allowDuplicates && this.isKnown(kind, name, value)) {
@@ -9332,7 +9310,7 @@ var ElementAttributes = class {
9332
9310
  this.projectAs = value.value.toString();
9333
9311
  }
9334
9312
  const array = this.arrayFor(kind);
9335
- array.push(...getAttributeNameLiterals(name));
9313
+ array.push(...getAttributeNameLiterals(namespace, name));
9336
9314
  if (kind === BindingKind.Attribute || kind === BindingKind.StyleProperty) {
9337
9315
  if (value === null) {
9338
9316
  throw Error("Attribute, i18n attribute, & style element attributes must have a value");
@@ -9354,15 +9332,10 @@ var ElementAttributes = class {
9354
9332
  return this.byKind.get(kind);
9355
9333
  }
9356
9334
  };
9357
- function getAttributeNameLiterals(name) {
9358
- const [attributeNamespace, attributeName] = splitNsName(name, false);
9359
- const nameLiteral = literal(attributeName);
9360
- if (attributeNamespace) {
9361
- return [
9362
- literal(0),
9363
- literal(attributeNamespace),
9364
- nameLiteral
9365
- ];
9335
+ function getAttributeNameLiterals(namespace, name) {
9336
+ const nameLiteral = literal(name);
9337
+ if (namespace) {
9338
+ return [literal(0), literal(namespace), nameLiteral];
9366
9339
  }
9367
9340
  return [nameLiteral];
9368
9341
  }
@@ -10153,7 +10126,7 @@ function parseHostStyleProperties(job) {
10153
10126
  if (op.name.startsWith(STYLE_DOT)) {
10154
10127
  op.bindingKind = BindingKind.StyleProperty;
10155
10128
  op.name = op.name.substring(STYLE_DOT.length);
10156
- if (isCssCustomProperty(op.name)) {
10129
+ if (!isCssCustomProperty(op.name)) {
10157
10130
  op.name = hyphenate(op.name);
10158
10131
  }
10159
10132
  const { property: property2, suffix } = parseProperty(op.name);
@@ -16831,13 +16804,13 @@ function parseExtractedStyles(job) {
16831
16804
  if (op.name === "style") {
16832
16805
  const parsedStyles = parse(op.expression.value);
16833
16806
  for (let i = 0; i < parsedStyles.length - 1; i += 2) {
16834
- OpList.insertBefore(createExtractedAttributeOp(op.target, BindingKind.StyleProperty, parsedStyles[i], literal(parsedStyles[i + 1]), null, null, SecurityContext.STYLE), op);
16807
+ OpList.insertBefore(createExtractedAttributeOp(op.target, BindingKind.StyleProperty, null, parsedStyles[i], literal(parsedStyles[i + 1]), null, null, SecurityContext.STYLE), op);
16835
16808
  }
16836
16809
  OpList.remove(op);
16837
16810
  } else if (op.name === "class") {
16838
16811
  const parsedClasses = op.expression.value.trim().split(/\s+/g);
16839
16812
  for (const parsedClass of parsedClasses) {
16840
- OpList.insertBefore(createExtractedAttributeOp(op.target, BindingKind.ClassName, parsedClass, null, null, null, SecurityContext.NONE), op);
16813
+ OpList.insertBefore(createExtractedAttributeOp(op.target, BindingKind.ClassName, null, parsedClass, null, null, null, SecurityContext.NONE), op);
16841
16814
  }
16842
16815
  OpList.remove(op);
16843
16816
  }
@@ -17167,9 +17140,7 @@ function namespaceMath() {
17167
17140
  return call(Identifiers.namespaceMathML, [], null);
17168
17141
  }
17169
17142
  function advance(delta, sourceSpan) {
17170
- return call(Identifiers.advance, [
17171
- literal(delta)
17172
- ], sourceSpan);
17143
+ return call(Identifiers.advance, delta > 1 ? [literal(delta)] : [], sourceSpan);
17173
17144
  }
17174
17145
  function reference(slot) {
17175
17146
  return importExpr(Identifiers.reference).callFn([
@@ -17307,10 +17278,13 @@ function property(name, expression, sanitizer, sourceSpan) {
17307
17278
  }
17308
17279
  return call(Identifiers.property, args, sourceSpan);
17309
17280
  }
17310
- function attribute(name, expression, sanitizer) {
17281
+ function attribute(name, expression, sanitizer, namespace) {
17311
17282
  const args = [literal(name), expression];
17312
- if (sanitizer !== null) {
17313
- args.push(sanitizer);
17283
+ if (sanitizer !== null || namespace !== null) {
17284
+ args.push(sanitizer != null ? sanitizer : literal(null));
17285
+ }
17286
+ if (namespace !== null) {
17287
+ args.push(literal(namespace));
17314
17288
  }
17315
17289
  return call(Identifiers.attribute, args, null);
17316
17290
  }
@@ -17823,7 +17797,7 @@ function reifyUpdateOperations(_unit, ops) {
17823
17797
  if (op.expression instanceof Interpolation2) {
17824
17798
  OpList.replace(op, attributeInterpolate(op.name, op.expression.strings, op.expression.expressions, op.sanitizer, op.sourceSpan));
17825
17799
  } else {
17826
- OpList.replace(op, attribute(op.name, op.expression, op.sanitizer));
17800
+ OpList.replace(op, attribute(op.name, op.expression, op.sanitizer, op.namespace));
17827
17801
  }
17828
17802
  break;
17829
17803
  case OpKind.HostProperty:
@@ -17992,38 +17966,6 @@ function removeUnusedI18nAttributesOps(job) {
17992
17966
  }
17993
17967
  }
17994
17968
 
17995
- // bazel-out/darwin_arm64-fastbuild/bin/packages/compiler/src/template/pipeline/src/phases/repeater_derived_vars.mjs
17996
- function generateRepeaterDerivedVars(job) {
17997
- const repeaters = /* @__PURE__ */ new Map();
17998
- for (const unit of job.units) {
17999
- for (const op of unit.ops()) {
18000
- if (op.kind === OpKind.RepeaterCreate) {
18001
- repeaters.set(op.xref, op);
18002
- }
18003
- }
18004
- }
18005
- for (const unit of job.units) {
18006
- for (const op of unit.ops()) {
18007
- transformExpressionsInOp(op, (expr) => {
18008
- if (!(expr instanceof DerivedRepeaterVarExpr)) {
18009
- return expr;
18010
- }
18011
- const repeaterOp = repeaters.get(expr.xref);
18012
- switch (expr.identity) {
18013
- case DerivedRepeaterVarIdentity.First:
18014
- return new BinaryOperatorExpr(BinaryOperator.Identical, new LexicalReadExpr(repeaterOp.varNames.$index), literal(0));
18015
- case DerivedRepeaterVarIdentity.Last:
18016
- return new BinaryOperatorExpr(BinaryOperator.Identical, new LexicalReadExpr(repeaterOp.varNames.$index), new BinaryOperatorExpr(BinaryOperator.Minus, new LexicalReadExpr(repeaterOp.varNames.$count), literal(1)));
18017
- case DerivedRepeaterVarIdentity.Even:
18018
- return new BinaryOperatorExpr(BinaryOperator.Identical, new BinaryOperatorExpr(BinaryOperator.Modulo, new LexicalReadExpr(repeaterOp.varNames.$index), literal(2)), literal(0));
18019
- case DerivedRepeaterVarIdentity.Odd:
18020
- return new BinaryOperatorExpr(BinaryOperator.NotIdentical, new BinaryOperatorExpr(BinaryOperator.Modulo, new LexicalReadExpr(repeaterOp.varNames.$index), literal(2)), literal(0));
18021
- }
18022
- }, VisitorContextFlag.None);
18023
- }
18024
- }
18025
- }
18026
-
18027
17969
  // bazel-out/darwin_arm64-fastbuild/bin/packages/compiler/src/template/pipeline/src/phases/resolve_contexts.mjs
18028
17970
  function resolveContexts(job) {
18029
17971
  for (const unit of job.units) {
@@ -19127,7 +19069,6 @@ var phases = [
19127
19069
  { kind: CompilationJobKind.Tmpl, fn: saveAndRestoreView },
19128
19070
  { kind: CompilationJobKind.Both, fn: deleteAnyCasts },
19129
19071
  { kind: CompilationJobKind.Both, fn: resolveDollarEvent },
19130
- { kind: CompilationJobKind.Tmpl, fn: generateRepeaterDerivedVars },
19131
19072
  { kind: CompilationJobKind.Tmpl, fn: generateTrackVariables },
19132
19073
  { kind: CompilationJobKind.Both, fn: resolveNames },
19133
19074
  { kind: CompilationJobKind.Tmpl, fn: resolveDeferTargetNames },
@@ -19478,6 +19419,9 @@ function ingestIfBlock(unit, ifBlock) {
19478
19419
  }
19479
19420
  function ingestSwitchBlock(unit, switchBlock) {
19480
19421
  var _a2;
19422
+ if (switchBlock.cases.length === 0) {
19423
+ return;
19424
+ }
19481
19425
  let firstXref = null;
19482
19426
  let firstSlotHandle = null;
19483
19427
  let conditions = [];
@@ -19622,21 +19566,37 @@ function ingestIcu(unit, icu) {
19622
19566
  function ingestForBlock(unit, forBlock) {
19623
19567
  var _a2, _b2, _c2;
19624
19568
  const repeaterView = unit.job.allocateView(unit.xref);
19625
- const createRepeaterAlias = (ident, repeaterVar) => {
19626
- repeaterView.aliases.add({
19627
- kind: SemanticVariableKind.Alias,
19628
- name: null,
19629
- identifier: ident,
19630
- expression: new DerivedRepeaterVarExpr(repeaterView.xref, repeaterVar)
19631
- });
19632
- };
19633
19569
  repeaterView.contextVariables.set(forBlock.item.name, forBlock.item.value);
19634
19570
  repeaterView.contextVariables.set(forBlock.contextVariables.$index.name, forBlock.contextVariables.$index.value);
19635
19571
  repeaterView.contextVariables.set(forBlock.contextVariables.$count.name, forBlock.contextVariables.$count.value);
19636
- createRepeaterAlias(forBlock.contextVariables.$first.name, DerivedRepeaterVarIdentity.First);
19637
- createRepeaterAlias(forBlock.contextVariables.$last.name, DerivedRepeaterVarIdentity.Last);
19638
- createRepeaterAlias(forBlock.contextVariables.$even.name, DerivedRepeaterVarIdentity.Even);
19639
- createRepeaterAlias(forBlock.contextVariables.$odd.name, DerivedRepeaterVarIdentity.Odd);
19572
+ const indexName = `\u0275${forBlock.contextVariables.$index.name}_${repeaterView.xref}`;
19573
+ const countName = `\u0275${forBlock.contextVariables.$count.name}_${repeaterView.xref}`;
19574
+ repeaterView.contextVariables.set(indexName, forBlock.contextVariables.$index.value);
19575
+ repeaterView.contextVariables.set(countName, forBlock.contextVariables.$count.value);
19576
+ repeaterView.aliases.add({
19577
+ kind: SemanticVariableKind.Alias,
19578
+ name: null,
19579
+ identifier: forBlock.contextVariables.$first.name,
19580
+ expression: new LexicalReadExpr(indexName).identical(literal(0))
19581
+ });
19582
+ repeaterView.aliases.add({
19583
+ kind: SemanticVariableKind.Alias,
19584
+ name: null,
19585
+ identifier: forBlock.contextVariables.$last.name,
19586
+ expression: new LexicalReadExpr(indexName).identical(new LexicalReadExpr(countName).minus(literal(1)))
19587
+ });
19588
+ repeaterView.aliases.add({
19589
+ kind: SemanticVariableKind.Alias,
19590
+ name: null,
19591
+ identifier: forBlock.contextVariables.$even.name,
19592
+ expression: new LexicalReadExpr(indexName).modulo(literal(2)).identical(literal(0))
19593
+ });
19594
+ repeaterView.aliases.add({
19595
+ kind: SemanticVariableKind.Alias,
19596
+ name: null,
19597
+ identifier: forBlock.contextVariables.$odd.name,
19598
+ expression: new LexicalReadExpr(indexName).modulo(literal(2)).notIdentical(literal(0))
19599
+ });
19640
19600
  const sourceSpan = convertSourceSpan(forBlock.trackBy.span, forBlock.sourceSpan);
19641
19601
  const track = convertAst(forBlock.trackBy, unit.job, sourceSpan);
19642
19602
  ingestNodes(repeaterView, forBlock.children);
@@ -19833,7 +19793,7 @@ function ingestTemplateBindings(unit, op, template2, templateKind) {
19833
19793
  }
19834
19794
  if (templateKind === TemplateKind.Structural && output.type !== 1) {
19835
19795
  const securityContext = domSchema.securityContext(NG_TEMPLATE_TAG_NAME, output.name, false);
19836
- unit.create.push(createExtractedAttributeOp(op.xref, BindingKind.Property, output.name, null, null, null, securityContext));
19796
+ unit.create.push(createExtractedAttributeOp(op.xref, BindingKind.Property, null, output.name, null, null, null, securityContext));
19837
19797
  }
19838
19798
  }
19839
19799
  if (bindings.some((b) => b == null ? void 0 : b.i18nMessage) !== null) {
@@ -19844,7 +19804,7 @@ function createTemplateBinding(view, xref, type, name, value, unit, securityCont
19844
19804
  const isTextBinding = typeof value === "string";
19845
19805
  if (templateKind === TemplateKind.Structural) {
19846
19806
  if (!isStructuralTemplateAttribute && (type === 0 || type === 2 || type === 3)) {
19847
- return createExtractedAttributeOp(xref, BindingKind.Property, name, null, null, i18nMessage, securityContext);
19807
+ return createExtractedAttributeOp(xref, BindingKind.Property, null, name, null, null, i18nMessage, securityContext);
19848
19808
  }
19849
19809
  if (!isTextBinding && (type === 1 || type === 4)) {
19850
19810
  return null;
@@ -22703,6 +22663,9 @@ var TemplateDefinitionBuilder = class {
22703
22663
  this.updateInstructionWithAdvance(containerIndex, block.branches[0].sourceSpan, Identifiers.conditional, paramsCallback);
22704
22664
  }
22705
22665
  visitSwitchBlock(block) {
22666
+ if (block.cases.length === 0) {
22667
+ return;
22668
+ }
22706
22669
  const caseData = block.cases.map((currentCase) => {
22707
22670
  const index = this.createEmbeddedTemplateFn(null, currentCase.children, "_Case", currentCase.sourceSpan, void 0, void 0, void 0, currentCase.i18n);
22708
22671
  const expression = currentCase.expression === null ? null : currentCase.expression.visit(this._valueConverter);
@@ -23025,7 +22988,7 @@ var TemplateDefinitionBuilder = class {
23025
22988
  if (delta < 1) {
23026
22989
  throw new Error("advance instruction can only go forwards");
23027
22990
  }
23028
- this.instructionFn(this._updateCodeFns, span, Identifiers.advance, [literal(delta)]);
22991
+ this.instructionFn(this._updateCodeFns, span, Identifiers.advance, delta > 1 ? [literal(delta)] : []);
23029
22992
  this._currentIndex = nodeIndex;
23030
22993
  }
23031
22994
  }
@@ -25452,7 +25415,7 @@ function publishFacade(global) {
25452
25415
  }
25453
25416
 
25454
25417
  // bazel-out/darwin_arm64-fastbuild/bin/packages/compiler/src/version.mjs
25455
- var VERSION2 = new Version("17.0.8");
25418
+ var VERSION2 = new Version("17.0.9");
25456
25419
 
25457
25420
  // bazel-out/darwin_arm64-fastbuild/bin/packages/compiler/src/i18n/extractor_merger.mjs
25458
25421
  var _VisitorMode;
@@ -26212,7 +26175,7 @@ function getMainBlock(etm, tmpl, offset) {
26212
26175
  const { childStart: childStart2, childEnd: childEnd2 } = etm.getChildSpan(offset);
26213
26176
  middle2 = tmpl.slice(childStart2, childEnd2);
26214
26177
  } else {
26215
- middle2 = startMarker + endMarker;
26178
+ middle2 = "";
26216
26179
  }
26217
26180
  return { start: "", middle: middle2, end: "" };
26218
26181
  } else if (isI18nTemplate(etm, i18nAttr)) {