marko 6.1.10 → 6.1.12

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.
package/dist/html.js CHANGED
@@ -982,6 +982,9 @@ function getEventHandlerName(name) {
982
982
  function isVoid(value) {
983
983
  return value == null || value === !1;
984
984
  }
985
+ function isNotVoid(value) {
986
+ return value != null && value !== !1;
987
+ }
985
988
  function normalizeDynamicRenderer(value) {
986
989
  if (value) {
987
990
  if (typeof value == "string") return value;
@@ -1611,7 +1614,7 @@ function _attr_input_value(scopeId, nodeAccessor, value, valueChange) {
1611
1614
  return valueChange && writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange), _attr("value", value);
1612
1615
  }
1613
1616
  function _attr_input_checked(scopeId, nodeAccessor, checked, checkedChange) {
1614
- return checkedChange && writeControlledScope(0, scopeId, nodeAccessor, void 0, checkedChange), normalizeBoolAttrValue(checked) ? " checked" : "";
1617
+ return checkedChange && writeControlledScope(0, scopeId, nodeAccessor, void 0, checkedChange), isNotVoid(checked) ? " checked" : "";
1615
1618
  }
1616
1619
  function _attr_input_checkedValue(scopeId, nodeAccessor, checkedValue, checkedValueChange, value) {
1617
1620
  let valueAttr = _attr("value", value);
@@ -1624,8 +1627,8 @@ function getCheckedValueRef(checkedValue) {
1624
1627
  }
1625
1628
  }
1626
1629
  function _attr_details_or_dialog_open(scopeId, nodeAccessor, open, openChange) {
1627
- let normalizedOpen = normalizeBoolAttrValue(open);
1628
- return openChange && writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen, openChange), normalizedOpen ? " open" : "";
1630
+ let normalizedOpen = isNotVoid(open);
1631
+ return openChange && writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen || void 0, openChange), normalizedOpen ? " open" : "";
1629
1632
  }
1630
1633
  function _attr_nonce() {
1631
1634
  return getChunk().boundary.state.nonceAttr;
@@ -1638,17 +1641,17 @@ function _attrs(data, nodeAccessor, scopeId, tagName) {
1638
1641
  switch (tagName) {
1639
1642
  case "input":
1640
1643
  if (data.checkedChange) result += _attr_input_checked(scopeId, nodeAccessor, data.checked, data.checkedChange);
1641
- else if (data.checkedValue || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value);
1644
+ else if ("checkedValue" in data || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value);
1642
1645
  else if (data.valueChange) result += _attr_input_value(scopeId, nodeAccessor, data.value, data.valueChange);
1643
1646
  else break;
1644
1647
  skip = /^(?:value|checked(?:Value)?)(?:Change)?$|[\s/>"'=]/;
1645
1648
  break;
1646
1649
  case "select":
1647
1650
  case "textarea":
1648
- (data.value || data.valueChange) && (skip = /^value(?:Change)?$|[\s/>"'=]/);
1651
+ ("value" in data || data.valueChange) && (skip = /^value(?:Change)?$|[\s/>"'=]/);
1649
1652
  break;
1650
1653
  case "option":
1651
- data.value && (result += _attr_option_value(data.value), skip = /^value$|[\s/>"'=]/);
1654
+ "value" in data && (result += _attr_option_value(data.value), skip = /^value$|[\s/>"'=]/);
1652
1655
  break;
1653
1656
  case "details":
1654
1657
  case "dialog":
@@ -1731,9 +1734,6 @@ function normalizedValueMatches(a, b) {
1731
1734
  function normalizeStrAttrValue(value) {
1732
1735
  return value && value !== !0 || value === 0 ? value + "" : "";
1733
1736
  }
1734
- function normalizeBoolAttrValue(value) {
1735
- if (value != null && value !== !1) return !0;
1736
- }
1737
1737
  //#endregion
1738
1738
  //#region src/html/dynamic-tag.ts
1739
1739
  function _content(id, fn) {
package/dist/html.mjs CHANGED
@@ -981,6 +981,9 @@ function getEventHandlerName(name) {
981
981
  function isVoid(value) {
982
982
  return value == null || value === !1;
983
983
  }
984
+ function isNotVoid(value) {
985
+ return value != null && value !== !1;
986
+ }
984
987
  function normalizeDynamicRenderer(value) {
985
988
  if (value) {
986
989
  if (typeof value == "string") return value;
@@ -1610,7 +1613,7 @@ function _attr_input_value(scopeId, nodeAccessor, value, valueChange) {
1610
1613
  return valueChange && writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange), _attr("value", value);
1611
1614
  }
1612
1615
  function _attr_input_checked(scopeId, nodeAccessor, checked, checkedChange) {
1613
- return checkedChange && writeControlledScope(0, scopeId, nodeAccessor, void 0, checkedChange), normalizeBoolAttrValue(checked) ? " checked" : "";
1616
+ return checkedChange && writeControlledScope(0, scopeId, nodeAccessor, void 0, checkedChange), isNotVoid(checked) ? " checked" : "";
1614
1617
  }
1615
1618
  function _attr_input_checkedValue(scopeId, nodeAccessor, checkedValue, checkedValueChange, value) {
1616
1619
  let valueAttr = _attr("value", value);
@@ -1623,8 +1626,8 @@ function getCheckedValueRef(checkedValue) {
1623
1626
  }
1624
1627
  }
1625
1628
  function _attr_details_or_dialog_open(scopeId, nodeAccessor, open, openChange) {
1626
- let normalizedOpen = normalizeBoolAttrValue(open);
1627
- return openChange && writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen, openChange), normalizedOpen ? " open" : "";
1629
+ let normalizedOpen = isNotVoid(open);
1630
+ return openChange && writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen || void 0, openChange), normalizedOpen ? " open" : "";
1628
1631
  }
1629
1632
  function _attr_nonce() {
1630
1633
  return getChunk().boundary.state.nonceAttr;
@@ -1637,17 +1640,17 @@ function _attrs(data, nodeAccessor, scopeId, tagName) {
1637
1640
  switch (tagName) {
1638
1641
  case "input":
1639
1642
  if (data.checkedChange) result += _attr_input_checked(scopeId, nodeAccessor, data.checked, data.checkedChange);
1640
- else if (data.checkedValue || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value);
1643
+ else if ("checkedValue" in data || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value);
1641
1644
  else if (data.valueChange) result += _attr_input_value(scopeId, nodeAccessor, data.value, data.valueChange);
1642
1645
  else break;
1643
1646
  skip = /^(?:value|checked(?:Value)?)(?:Change)?$|[\s/>"'=]/;
1644
1647
  break;
1645
1648
  case "select":
1646
1649
  case "textarea":
1647
- (data.value || data.valueChange) && (skip = /^value(?:Change)?$|[\s/>"'=]/);
1650
+ ("value" in data || data.valueChange) && (skip = /^value(?:Change)?$|[\s/>"'=]/);
1648
1651
  break;
1649
1652
  case "option":
1650
- data.value && (result += _attr_option_value(data.value), skip = /^value$|[\s/>"'=]/);
1653
+ "value" in data && (result += _attr_option_value(data.value), skip = /^value$|[\s/>"'=]/);
1651
1654
  break;
1652
1655
  case "details":
1653
1656
  case "dialog":
@@ -1730,9 +1733,6 @@ function normalizedValueMatches(a, b) {
1730
1733
  function normalizeStrAttrValue(value) {
1731
1734
  return value && value !== !0 || value === 0 ? value + "" : "";
1732
1735
  }
1733
- function normalizeBoolAttrValue(value) {
1734
- if (value != null && value !== !1) return !0;
1735
- }
1736
1736
  //#endregion
1737
1737
  //#region src/html/dynamic-tag.ts
1738
1738
  function _content(id, fn) {
@@ -113,8 +113,7 @@ let AccessorProp$1 = /* @__PURE__ */ function(AccessorProp) {
113
113
  AccessorProp["CatchContent"] = "#CatchContent";
114
114
  AccessorProp["ClosestBranch"] = "#ClosestBranch";
115
115
  AccessorProp["ClosestBranchId"] = "#ClosestBranchId";
116
- AccessorProp["Creating"] = "#Creating";
117
- AccessorProp["Destroyed"] = "#Destroyed";
116
+ AccessorProp["Gen"] = "#Gen";
118
117
  AccessorProp["DetachedAwait"] = "#DetachedAwait";
119
118
  AccessorProp["EndNode"] = "#EndNode";
120
119
  AccessorProp["Id"] = "#Id";
@@ -123,6 +122,7 @@ let AccessorProp$1 = /* @__PURE__ */ function(AccessorProp) {
123
122
  AccessorProp["ParentBranch"] = "#ParentBranch";
124
123
  AccessorProp["PendingEffects"] = "#PendingEffects";
125
124
  AccessorProp["PendingRenders"] = "#PendingRenders";
125
+ AccessorProp["PendingScopes"] = "#PendingScopes";
126
126
  AccessorProp["PlaceholderBranch"] = "#PlaceholderBranch";
127
127
  AccessorProp["PlaceholderContent"] = "#PlaceholderContent";
128
128
  AccessorProp["Renderer"] = "#Renderer";
@@ -239,6 +239,9 @@ function getEventHandlerName(name) {
239
239
  function isVoid(value) {
240
240
  return value == null || value === false;
241
241
  }
242
+ function isNotVoid(value) {
243
+ return value != null && value !== false;
244
+ }
242
245
  function normalizeDynamicRenderer(value) {
243
246
  if (value) {
244
247
  if (typeof value === "string") return value;
@@ -1049,8 +1052,7 @@ let AccessorProp = /* @__PURE__ */ function(AccessorProp) {
1049
1052
  AccessorProp["CatchContent"] = "E";
1050
1053
  AccessorProp["ClosestBranch"] = "F";
1051
1054
  AccessorProp["ClosestBranchId"] = "G";
1052
- AccessorProp["Creating"] = "H";
1053
- AccessorProp["Destroyed"] = "I";
1055
+ AccessorProp["Gen"] = "H";
1054
1056
  AccessorProp["DetachedAwait"] = "V";
1055
1057
  AccessorProp["EndNode"] = "K";
1056
1058
  AccessorProp["Id"] = "L";
@@ -1059,6 +1061,7 @@ let AccessorProp = /* @__PURE__ */ function(AccessorProp) {
1059
1061
  AccessorProp["ParentBranch"] = "N";
1060
1062
  AccessorProp["PendingEffects"] = "J";
1061
1063
  AccessorProp["PendingRenders"] = "W";
1064
+ AccessorProp["PendingScopes"] = "Y";
1062
1065
  AccessorProp["PlaceholderBranch"] = "P";
1063
1066
  AccessorProp["PlaceholderContent"] = "Q";
1064
1067
  AccessorProp["Renderer"] = "R";
@@ -1932,7 +1935,7 @@ function _attr_input_value(scopeId, nodeAccessor, value, valueChange) {
1932
1935
  }
1933
1936
  function _attr_input_checked(scopeId, nodeAccessor, checked, checkedChange) {
1934
1937
  if (checkedChange) writeControlledScope(0, scopeId, nodeAccessor, void 0, checkedChange);
1935
- return normalizeBoolAttrValue(checked) ? " checked" : "";
1938
+ return isNotVoid(checked) ? " checked" : "";
1936
1939
  }
1937
1940
  function _attr_input_checkedValue(scopeId, nodeAccessor, checkedValue, checkedValueChange, value) {
1938
1941
  const valueAttr = _attr("value", value);
@@ -1951,8 +1954,8 @@ function getCheckedValueRef(checkedValue) {
1951
1954
  }
1952
1955
  }
1953
1956
  function _attr_details_or_dialog_open(scopeId, nodeAccessor, open, openChange) {
1954
- const normalizedOpen = normalizeBoolAttrValue(open);
1955
- if (openChange) writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen, openChange);
1957
+ const normalizedOpen = isNotVoid(open);
1958
+ if (openChange) writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen || void 0, openChange);
1956
1959
  return normalizedOpen ? " open" : "";
1957
1960
  }
1958
1961
  function _attr(name, value) {
@@ -1965,17 +1968,17 @@ function _attrs(data, nodeAccessor, scopeId, tagName) {
1965
1968
  switch (tagName) {
1966
1969
  case "input":
1967
1970
  if (data.checkedChange) result += _attr_input_checked(scopeId, nodeAccessor, data.checked, data.checkedChange);
1968
- else if (data.checkedValue || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value);
1971
+ else if ("checkedValue" in data || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value);
1969
1972
  else if (data.valueChange) result += _attr_input_value(scopeId, nodeAccessor, data.value, data.valueChange);
1970
1973
  else break;
1971
1974
  skip = /^(?:value|checked(?:Value)?)(?:Change)?$|[\s/>"'=]/;
1972
1975
  break;
1973
1976
  case "select":
1974
1977
  case "textarea":
1975
- if (data.value || data.valueChange) skip = /^value(?:Change)?$|[\s/>"'=]/;
1978
+ if ("value" in data || data.valueChange) skip = /^value(?:Change)?$|[\s/>"'=]/;
1976
1979
  break;
1977
1980
  case "option":
1978
- if (data.value) {
1981
+ if ("value" in data) {
1979
1982
  result += _attr_option_value(data.value);
1980
1983
  skip = /^value$|[\s/>"'=]/;
1981
1984
  }
@@ -2059,9 +2062,6 @@ function normalizedValueMatches(a, b) {
2059
2062
  function normalizeStrAttrValue(value) {
2060
2063
  return value && value !== true || value === 0 ? value + "" : "";
2061
2064
  }
2062
- function normalizeBoolAttrValue(value) {
2063
- if (value != null && value !== false) return true;
2064
- }
2065
2065
  //#endregion
2066
2066
  //#region src/html/dynamic-tag.ts
2067
2067
  const voidElementsReg = /^(?:area|b(?:ase|r)|col|embed|hr|i(?:mg|nput)|link|meta|param|source|track|wbr)$/;
@@ -3249,9 +3249,21 @@ function writeHTMLResumeStatements(path) {
3249
3249
  const writeSerializedBinding = (binding) => {
3250
3250
  const reason = getSerializeReason(section, binding);
3251
3251
  if (!reason) return;
3252
+ if (binding.noSerialize) {
3253
+ serializedLookup.delete(getScopeAccessor(binding));
3254
+ return;
3255
+ }
3252
3256
  const accessor = getScopeAccessor(binding);
3253
3257
  serializedLookup.delete(accessor);
3254
- serializedProperties.push(toObjectProperty(accessor, ifSerialized(reason, getDeclaredBindingExpression(binding))));
3258
+ let expr = getDeclaredBindingExpression(binding);
3259
+ if (binding.noSerializeProperties) {
3260
+ const props = [_marko_compiler.types.spreadElement(expr)];
3261
+ forEach(binding.noSerializeProperties, (prop) => {
3262
+ props.push(toObjectProperty(prop, _marko_compiler.types.identifier("undefined")));
3263
+ });
3264
+ expr = _marko_compiler.types.objectExpression(props);
3265
+ }
3266
+ serializedProperties.push(toObjectProperty(accessor, ifSerialized(reason, expr)));
3255
3267
  if (debug) {
3256
3268
  const { root, access } = getDebugScopeAccess(binding);
3257
3269
  const locExpr = root.loc && _marko_compiler.types.stringLiteral(`${root.loc.start.line}:${root.loc.start.column + 1}`);
@@ -4064,10 +4076,16 @@ function finalizeTagDownstreams(section) {
4064
4076
  function crawlSectionsAndSetBinding(tag, binding, properties, skip) {
4065
4077
  if (!skip) {
4066
4078
  const contentSection = getSectionForBody(tag.get("body"));
4067
- if (contentSection) contentSection.downstreamBinding = {
4068
- binding,
4069
- properties: concat(properties, "content")
4070
- };
4079
+ if (contentSection) {
4080
+ let target = binding;
4081
+ forEach(properties, (property) => {
4082
+ target = target?.propertyAliases.get(property);
4083
+ });
4084
+ contentSection.downstreamBinding = target && (target.noSerialize || includes(target.noSerializeProperties, "content")) ? false : {
4085
+ binding,
4086
+ properties: concat(properties, "content")
4087
+ };
4088
+ }
4071
4089
  }
4072
4090
  const attrTagLookup = analyzeAttributeTags(tag);
4073
4091
  if (!attrTagLookup) return;
@@ -4194,11 +4212,26 @@ var native_tag_default = {
4194
4212
  const nodeBinding = tagExtra[kNativeTagBinding] = createBinding("#" + getCanonicalTagName(tag), 0, tagSection, void 0, void 0, void 0, void 0, !!node.var);
4195
4213
  if (hasEventHandlers) (0, _marko_compiler_babel_utils.getProgram)().node.extra.isInteractive = true;
4196
4214
  if (spreadReferenceNodes) {
4215
+ const isMergedSpread = !!relatedControllable;
4197
4216
  if (relatedControllable && !relatedControllable.attrs.every(Boolean)) {
4198
4217
  for (const attr of relatedControllable.attrs) if (attr) spreadReferenceNodes.push(attr.value);
4199
4218
  relatedControllable = void 0;
4200
4219
  }
4201
- mergeReferences(tagSection, tag.node, spreadReferenceNodes);
4220
+ const spreadExtra = mergeReferences(tagSection, tag.node, spreadReferenceNodes);
4221
+ spreadExtra.nativeTagSpread = true;
4222
+ if (isMergedSpread) spreadExtra.nativeTagSpreadMerged = true;
4223
+ let carveProperties = getSpreadControllableValueProps(tagName);
4224
+ if (!tag.node.body.body.length && !isTextOnly && !(0, _marko_compiler_babel_utils.getTagDef)(tag)?.parseOptions?.openTagOnly && !seen.content) if (carveProperties) carveProperties.push("content");
4225
+ else carveProperties = ["content"];
4226
+ for (const node of spreadReferenceNodes) {
4227
+ const spreadBinding = node.extra?.spreadFrom;
4228
+ if (spreadBinding) {
4229
+ spreadBinding.noSerialize = true;
4230
+ if (carveProperties) {
4231
+ for (const property of carveProperties) if (!includes(spreadBinding.noSerializeProperties, property)) spreadBinding.noSerializeProperties = push(spreadBinding.noSerializeProperties, property);
4232
+ }
4233
+ }
4234
+ }
4202
4235
  } else relatedControllable = getRelatedControllable(tagName, seen);
4203
4236
  if (relatedControllable) mergeReferences(tagSection, relatedControllable.attrs.find(Boolean).value, relatedControllable.attrs.map((it) => it?.value));
4204
4237
  if (textPlaceholders) exprExtras = push(exprExtras, textPlaceholders.length === 1 ? textPlaceholders[0].extra ??= {} : mergeReferences(tagSection, textPlaceholders[0], textPlaceholders.slice(1)));
@@ -4428,6 +4461,19 @@ var native_tag_default = {
4428
4461
  }
4429
4462
  })
4430
4463
  };
4464
+ function getSpreadControllableValueProps(tagName) {
4465
+ switch (tagName) {
4466
+ case "input": return [
4467
+ "value",
4468
+ "checked",
4469
+ "checkedValue"
4470
+ ];
4471
+ case "select":
4472
+ case "textarea": return ["value"];
4473
+ case "details":
4474
+ case "dialog": return ["open"];
4475
+ }
4476
+ }
4431
4477
  function getRelatedControllable(tagName, attrs) {
4432
4478
  switch (tagName) {
4433
4479
  case "input":
@@ -5687,6 +5733,8 @@ function createBinding(name, type, refSection, upstreamAlias, property, excludeP
5687
5733
  closureSections: void 0,
5688
5734
  assignmentSections: void 0,
5689
5735
  excludeProperties,
5736
+ noSerialize: false,
5737
+ noSerializeProperties: void 0,
5690
5738
  sources: void 0,
5691
5739
  reads: /* @__PURE__ */ new Set(),
5692
5740
  aliases: /* @__PURE__ */ new Set(),
@@ -5993,8 +6041,22 @@ function finalizeReferences() {
5993
6041
  }
5994
6042
  }
5995
6043
  }
5996
- for (const binding of bindings) if (binding.type !== 0) {
5997
- if (pruneBinding(binding)) bindings.delete(binding);
6044
+ for (const binding of bindings) {
6045
+ if (binding.type !== 0) {
6046
+ if (pruneBinding(binding)) bindings.delete(binding);
6047
+ }
6048
+ if (binding.noSerialize) if (isPureSpreadResolved(binding)) if (hasAnyMemberAccess(binding)) {
6049
+ let kept = void 0;
6050
+ binding.noSerialize = false;
6051
+ forEach(binding.noSerializeProperties, (property) => {
6052
+ if (!isPropertyMemberAccessed(binding, property)) kept = push(kept, property);
6053
+ });
6054
+ binding.noSerializeProperties = kept;
6055
+ } else binding.noSerializeProperties = void 0;
6056
+ else {
6057
+ binding.noSerialize = false;
6058
+ binding.noSerializeProperties = void 0;
6059
+ }
5998
6060
  }
5999
6061
  forEachSection(finalizeTagDownstreams);
6000
6062
  for (const binding of bindings) {
@@ -6722,6 +6784,21 @@ function getAllSerializeReasonsForBinding(binding, properties) {
6722
6784
  }
6723
6785
  return reason;
6724
6786
  }
6787
+ function isPureSpreadResolved(binding) {
6788
+ for (const read of binding.reads) if (!read.nativeTagSpread || read.nativeTagSpreadMerged) return false;
6789
+ for (const alias of binding.aliases) if (!isPureSpreadResolved(alias)) return false;
6790
+ return true;
6791
+ }
6792
+ function hasAnyMemberAccess(binding) {
6793
+ if (binding.propertyAliases.size) return true;
6794
+ for (const alias of binding.aliases) if (hasAnyMemberAccess(alias)) return true;
6795
+ return false;
6796
+ }
6797
+ function isPropertyMemberAccessed(binding, property) {
6798
+ if (binding.propertyAliases.has(property)) return true;
6799
+ for (const alias of binding.aliases) if (isPropertyMemberAccessed(alias, property)) return true;
6800
+ return false;
6801
+ }
6725
6802
  function addNumericPropertiesUntil(props, len) {
6726
6803
  let result = props;
6727
6804
  for (let i = len; i--;) result = propsUtil.add(result, i + "");
@@ -8117,7 +8194,7 @@ function isStaticText(node) {
8117
8194
  case "MarkoText": return true;
8118
8195
  case "MarkoPlaceholder": if (node.escape) {
8119
8196
  const { confident, computed } = evaluate(node.value);
8120
- return confident && !isVoid(computed);
8197
+ return confident && isNotVoid(computed);
8121
8198
  } else return false;
8122
8199
  }
8123
8200
  }
@@ -37,6 +37,8 @@ export interface Binding {
37
37
  property: string | undefined;
38
38
  propertyAliases: Map<string, Binding>;
39
39
  excludeProperties: Opt<string>;
40
+ noSerialize: boolean;
41
+ noSerializeProperties: Opt<string>;
40
42
  upstreamAlias: Binding | undefined;
41
43
  restOffset: number | undefined;
42
44
  scopeOffset: Binding | undefined;
@@ -84,6 +86,8 @@ declare module "@marko/compiler/dist/types" {
84
86
  pruned?: true;
85
87
  isEffect?: true;
86
88
  spreadFrom?: Binding;
89
+ nativeTagSpread?: true;
90
+ nativeTagSpreadMerged?: true;
87
91
  merged?: NodeExtra;
88
92
  }
89
93
  interface FunctionExtra {
@@ -45,7 +45,7 @@ export interface Section {
45
45
  downstreamBinding: {
46
46
  binding: Binding;
47
47
  properties: Opt<string>;
48
- } | undefined;
48
+ } | false | undefined;
49
49
  hasAbortSignal: boolean;
50
50
  readsOwner: boolean;
51
51
  isBranch: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "marko",
3
- "version": "6.1.10",
3
+ "version": "6.1.12",
4
4
  "description": "Optimized runtime for Marko templates.",
5
5
  "keywords": [
6
6
  "api",