@marko/runtime-tags 6.3.13 → 6.3.14

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.
@@ -856,13 +856,15 @@ function writeUnknownObject(state, val, ref) {
856
856
  case Int32Array:
857
857
  case Uint32Array:
858
858
  case Float32Array:
859
- case Float64Array: return writeTypedArray(state, val, ref);
859
+ case Float64Array:
860
+ case BigInt64Array:
861
+ case BigUint64Array: return writeTypedArray(state, val, ref);
860
862
  case WeakSet: return writeWeakSet(state);
861
863
  case WeakMap: return writeWeakMap(state);
862
864
  case globalThis.URL: return writeURL(state, val);
863
865
  case globalThis.URLSearchParams: return writeURLSearchParams(state, val);
864
866
  case globalThis.Headers: return writeHeaders(state, val);
865
- case globalThis.FormData: return writeFormData(state, val);
867
+ case globalThis.FormData: return writeFormData(state, val, ref);
866
868
  case globalThis.ReadableStream: return writeReadableStream(state, val, ref);
867
869
  case globalThis.Request: return writeRequest(state, val, ref);
868
870
  case globalThis.Response: return writeResponse(state, val, ref);
@@ -1054,14 +1056,18 @@ function writeURLSearchParams(state, val) {
1054
1056
  return true;
1055
1057
  }
1056
1058
  function writeHeaders(state, val) {
1057
- const headers = stringEntriesToProps(val);
1058
- state.buf.push("new Headers" + (headers ? "({" + headers + "})" : ""));
1059
+ const headers = stringEntriesToHeadersInit(val);
1060
+ state.buf.push("new Headers" + (headers ? "(" + headers + ")" : ""));
1059
1061
  return true;
1060
1062
  }
1061
- function writeFormData(state, val) {
1063
+ function writeFormData(state, val, ref) {
1062
1064
  let sep = "[";
1063
1065
  let valStr = "";
1064
- for (const [key, value] of val) if (typeof value === "string") {
1066
+ for (const [key, value] of val) {
1067
+ if (typeof value !== "string") {
1068
+ throwUnserializable(state, value, ref, key);
1069
+ return false;
1070
+ }
1065
1071
  valStr += sep + quote(key, 0) + "," + quote(value, 0);
1066
1072
  sep = ",";
1067
1073
  }
@@ -1091,10 +1097,10 @@ function writeRequest(state, val, ref) {
1091
1097
  options += sep + "credentials:" + quote(val.credentials, 0);
1092
1098
  sep = ",";
1093
1099
  }
1094
- const headers = stringEntriesToProps(val.headers);
1100
+ const headers = stringEntriesToHeadersInit(val.headers);
1095
1101
  state.refs.set(val.headers, new Reference(ref, "headers", state.flush, null));
1096
1102
  if (headers) {
1097
- options += sep + "headers:{" + headers + "}";
1103
+ options += sep + "headers:" + headers;
1098
1104
  sep = ",";
1099
1105
  }
1100
1106
  if (val.integrity) {
@@ -1136,9 +1142,9 @@ function writeResponse(state, val, ref) {
1136
1142
  options += sep + "statusText:" + quote(val.statusText, 0);
1137
1143
  sep = ",";
1138
1144
  }
1139
- const headers = stringEntriesToProps(val.headers);
1145
+ const headers = stringEntriesToHeadersInit(val.headers);
1140
1146
  state.refs.set(val.headers, new Reference(ref, "headers", state.flush, null));
1141
- if (headers) options += sep + "headers:{" + headers + "}";
1147
+ if (headers) options += sep + "headers:" + headers;
1142
1148
  if (!val.body || val.bodyUsed) state.buf.push("new Response" + (options ? "(null,{" + options + "})" : ""));
1143
1149
  else {
1144
1150
  state.buf.push("new Response(");
@@ -1471,27 +1477,40 @@ function nextId(state) {
1471
1477
  function hasSymbolIterator(value) {
1472
1478
  return Symbol.iterator in value;
1473
1479
  }
1474
- function stringEntriesToProps(entries) {
1480
+ function stringEntriesToHeadersInit(entries) {
1481
+ const list = [...entries];
1482
+ if (!list.length) return "";
1483
+ let duplicate = false;
1484
+ const seen = /* @__PURE__ */ new Set();
1485
+ for (const [key] of list) {
1486
+ if (seen.has(key)) {
1487
+ duplicate = true;
1488
+ break;
1489
+ }
1490
+ seen.add(key);
1491
+ }
1475
1492
  let result = "";
1476
1493
  let sep = "";
1477
- for (const [key, value] of entries) {
1478
- result += sep + toObjectKey(key) + ":" + quote(value, 0);
1494
+ for (const [key, value] of list) {
1495
+ result += duplicate ? sep + "[" + quote(key, 0) + "," + quote(value, 0) + "]" : sep + toObjectKey(key) + ":" + quote(value, 0);
1479
1496
  sep = ",";
1480
1497
  }
1481
- return result;
1498
+ return duplicate ? "[" + result + "]" : "{" + result + "}";
1482
1499
  }
1483
1500
  function typedArrayToInitString(view) {
1501
+ const suffix = typeof view[0] === "bigint" ? "n" : "";
1484
1502
  let result = "[";
1485
1503
  let sep = "";
1486
1504
  for (let i = 0; i < view.length; i++) {
1487
- result += sep + view[i];
1505
+ result += sep + view[i] + suffix;
1488
1506
  sep = ",";
1489
1507
  }
1490
1508
  result += "]";
1491
1509
  return result;
1492
1510
  }
1493
1511
  function hasOnlyZeros(typedArray) {
1494
- for (let i = 0; i < typedArray.length; i++) if (typedArray[i] !== 0) return false;
1512
+ const zero = typeof typedArray[0] === "bigint" ? 0n : 0;
1513
+ for (let i = 0; i < typedArray.length; i++) if (typedArray[i] !== zero) return false;
1495
1514
  return true;
1496
1515
  }
1497
1516
  function patchIteratorNext(proto) {
@@ -854,13 +854,15 @@ function writeUnknownObject(state, val, ref) {
854
854
  case Int32Array:
855
855
  case Uint32Array:
856
856
  case Float32Array:
857
- case Float64Array: return writeTypedArray(state, val, ref);
857
+ case Float64Array:
858
+ case BigInt64Array:
859
+ case BigUint64Array: return writeTypedArray(state, val, ref);
858
860
  case WeakSet: return writeWeakSet(state);
859
861
  case WeakMap: return writeWeakMap(state);
860
862
  case globalThis.URL: return writeURL(state, val);
861
863
  case globalThis.URLSearchParams: return writeURLSearchParams(state, val);
862
864
  case globalThis.Headers: return writeHeaders(state, val);
863
- case globalThis.FormData: return writeFormData(state, val);
865
+ case globalThis.FormData: return writeFormData(state, val, ref);
864
866
  case globalThis.ReadableStream: return writeReadableStream(state, val, ref);
865
867
  case globalThis.Request: return writeRequest(state, val, ref);
866
868
  case globalThis.Response: return writeResponse(state, val, ref);
@@ -1052,14 +1054,18 @@ function writeURLSearchParams(state, val) {
1052
1054
  return true;
1053
1055
  }
1054
1056
  function writeHeaders(state, val) {
1055
- const headers = stringEntriesToProps(val);
1056
- state.buf.push("new Headers" + (headers ? "({" + headers + "})" : ""));
1057
+ const headers = stringEntriesToHeadersInit(val);
1058
+ state.buf.push("new Headers" + (headers ? "(" + headers + ")" : ""));
1057
1059
  return true;
1058
1060
  }
1059
- function writeFormData(state, val) {
1061
+ function writeFormData(state, val, ref) {
1060
1062
  let sep = "[";
1061
1063
  let valStr = "";
1062
- for (const [key, value] of val) if (typeof value === "string") {
1064
+ for (const [key, value] of val) {
1065
+ if (typeof value !== "string") {
1066
+ throwUnserializable(state, value, ref, key);
1067
+ return false;
1068
+ }
1063
1069
  valStr += sep + quote(key, 0) + "," + quote(value, 0);
1064
1070
  sep = ",";
1065
1071
  }
@@ -1089,10 +1095,10 @@ function writeRequest(state, val, ref) {
1089
1095
  options += sep + "credentials:" + quote(val.credentials, 0);
1090
1096
  sep = ",";
1091
1097
  }
1092
- const headers = stringEntriesToProps(val.headers);
1098
+ const headers = stringEntriesToHeadersInit(val.headers);
1093
1099
  state.refs.set(val.headers, new Reference(ref, "headers", state.flush, null));
1094
1100
  if (headers) {
1095
- options += sep + "headers:{" + headers + "}";
1101
+ options += sep + "headers:" + headers;
1096
1102
  sep = ",";
1097
1103
  }
1098
1104
  if (val.integrity) {
@@ -1134,9 +1140,9 @@ function writeResponse(state, val, ref) {
1134
1140
  options += sep + "statusText:" + quote(val.statusText, 0);
1135
1141
  sep = ",";
1136
1142
  }
1137
- const headers = stringEntriesToProps(val.headers);
1143
+ const headers = stringEntriesToHeadersInit(val.headers);
1138
1144
  state.refs.set(val.headers, new Reference(ref, "headers", state.flush, null));
1139
- if (headers) options += sep + "headers:{" + headers + "}";
1145
+ if (headers) options += sep + "headers:" + headers;
1140
1146
  if (!val.body || val.bodyUsed) state.buf.push("new Response" + (options ? "(null,{" + options + "})" : ""));
1141
1147
  else {
1142
1148
  state.buf.push("new Response(");
@@ -1469,27 +1475,40 @@ function nextId(state) {
1469
1475
  function hasSymbolIterator(value) {
1470
1476
  return Symbol.iterator in value;
1471
1477
  }
1472
- function stringEntriesToProps(entries) {
1478
+ function stringEntriesToHeadersInit(entries) {
1479
+ const list = [...entries];
1480
+ if (!list.length) return "";
1481
+ let duplicate = false;
1482
+ const seen = /* @__PURE__ */ new Set();
1483
+ for (const [key] of list) {
1484
+ if (seen.has(key)) {
1485
+ duplicate = true;
1486
+ break;
1487
+ }
1488
+ seen.add(key);
1489
+ }
1473
1490
  let result = "";
1474
1491
  let sep = "";
1475
- for (const [key, value] of entries) {
1476
- result += sep + toObjectKey(key) + ":" + quote(value, 0);
1492
+ for (const [key, value] of list) {
1493
+ result += duplicate ? sep + "[" + quote(key, 0) + "," + quote(value, 0) + "]" : sep + toObjectKey(key) + ":" + quote(value, 0);
1477
1494
  sep = ",";
1478
1495
  }
1479
- return result;
1496
+ return duplicate ? "[" + result + "]" : "{" + result + "}";
1480
1497
  }
1481
1498
  function typedArrayToInitString(view) {
1499
+ const suffix = typeof view[0] === "bigint" ? "n" : "";
1482
1500
  let result = "[";
1483
1501
  let sep = "";
1484
1502
  for (let i = 0; i < view.length; i++) {
1485
- result += sep + view[i];
1503
+ result += sep + view[i] + suffix;
1486
1504
  sep = ",";
1487
1505
  }
1488
1506
  result += "]";
1489
1507
  return result;
1490
1508
  }
1491
1509
  function hasOnlyZeros(typedArray) {
1492
- for (let i = 0; i < typedArray.length; i++) if (typedArray[i] !== 0) return false;
1510
+ const zero = typeof typedArray[0] === "bigint" ? 0n : 0;
1511
+ for (let i = 0; i < typedArray.length; i++) if (typedArray[i] !== zero) return false;
1493
1512
  return true;
1494
1513
  }
1495
1514
  function patchIteratorNext(proto) {
package/dist/html.js CHANGED
@@ -674,13 +674,15 @@ function writeUnknownObject(state, val, ref) {
674
674
  case Int32Array:
675
675
  case Uint32Array:
676
676
  case Float32Array:
677
- case Float64Array: return writeTypedArray(state, val, ref);
677
+ case Float64Array:
678
+ case BigInt64Array:
679
+ case BigUint64Array: return writeTypedArray(state, val, ref);
678
680
  case WeakSet: return writeWeakSet(state);
679
681
  case WeakMap: return writeWeakMap(state);
680
682
  case globalThis.URL: return writeURL(state, val);
681
683
  case globalThis.URLSearchParams: return writeURLSearchParams(state, val);
682
684
  case globalThis.Headers: return writeHeaders(state, val);
683
- case globalThis.FormData: return writeFormData(state, val);
685
+ case globalThis.FormData: return writeFormData(state, val, ref);
684
686
  case globalThis.ReadableStream: return writeReadableStream(state, val, ref);
685
687
  case globalThis.Request: return writeRequest(state, val, ref);
686
688
  case globalThis.Response: return writeResponse(state, val, ref);
@@ -789,12 +791,15 @@ function writeURLSearchParams(state, val) {
789
791
  return str ? state.buf.push("new URLSearchParams(" + quote(str, 0) + ")") : state.buf.push("new URLSearchParams"), !0;
790
792
  }
791
793
  function writeHeaders(state, val) {
792
- let headers = stringEntriesToProps(val);
793
- return state.buf.push("new Headers" + (headers ? "({" + headers + "})" : "")), !0;
794
+ let headers = stringEntriesToHeadersInit(val);
795
+ return state.buf.push("new Headers" + (headers ? "(" + headers + ")" : "")), !0;
794
796
  }
795
- function writeFormData(state, val) {
797
+ function writeFormData(state, val, ref) {
796
798
  let sep = "[", valStr = "";
797
- for (let [key, value] of val) typeof value == "string" && (valStr += sep + quote(key, 0) + "," + quote(value, 0), sep = ",");
799
+ for (let [key, value] of val) {
800
+ if (typeof value != "string") return !1;
801
+ valStr += sep + quote(key, 0) + "," + quote(value, 0), sep = ",";
802
+ }
798
803
  return sep === "[" ? state.buf.push("new FormData") : state.buf.push(valStr + "].reduce((f,v,i,a)=>i%2&&f.append(a[i-1],v)||f,new FormData)"), !0;
799
804
  }
800
805
  function writeRequest(state, val, ref) {
@@ -802,14 +807,14 @@ function writeRequest(state, val, ref) {
802
807
  state.buf.push("new Request(" + quote(val.url, 0)), hasBody && (state.buf.push(",{body:"), writeProp(state, val.body, ref, "body") ? (state.buf.push(",duplex:\"half\""), sep = ",", bodySerialized = !0) : state.buf.pop());
803
808
  let options = "";
804
809
  val.cache !== "default" && (options += sep + "cache:" + quote(val.cache, 0), sep = ","), val.credentials !== "same-origin" && (options += sep + "credentials:" + quote(val.credentials, 0), sep = ",");
805
- let headers = stringEntriesToProps(val.headers);
806
- return state.refs.set(val.headers, new Reference(ref, "headers", state.flush, null)), headers && (options += sep + "headers:{" + headers + "}", sep = ","), val.integrity && (options += sep + "integrity:" + quote(val.integrity, 0), sep = ","), val.keepalive && (options += sep + "keepalive:true", sep = ","), val.method !== "GET" && (options += sep + "method:" + quote(val.method, 0), sep = ","), val.mode !== "cors" && (options += sep + "mode:" + quote(val.mode, 0), sep = ","), val.redirect !== "follow" && (options += sep + "redirect:" + quote(val.redirect, 0), sep = ","), val.referrer !== "about:client" && (options += sep + "referrer:" + quote(val.referrer, 0), sep = ","), val.referrerPolicy && (options += sep + "referrerPolicy:" + quote(val.referrerPolicy, 0)), state.buf.push(bodySerialized ? options + "})" : options ? ",{" + options + "})" : ")"), !0;
810
+ let headers = stringEntriesToHeadersInit(val.headers);
811
+ return state.refs.set(val.headers, new Reference(ref, "headers", state.flush, null)), headers && (options += sep + "headers:" + headers, sep = ","), val.integrity && (options += sep + "integrity:" + quote(val.integrity, 0), sep = ","), val.keepalive && (options += sep + "keepalive:true", sep = ","), val.method !== "GET" && (options += sep + "method:" + quote(val.method, 0), sep = ","), val.mode !== "cors" && (options += sep + "mode:" + quote(val.mode, 0), sep = ","), val.redirect !== "follow" && (options += sep + "redirect:" + quote(val.redirect, 0), sep = ","), val.referrer !== "about:client" && (options += sep + "referrer:" + quote(val.referrer, 0), sep = ","), val.referrerPolicy && (options += sep + "referrerPolicy:" + quote(val.referrerPolicy, 0)), state.buf.push(bodySerialized ? options + "})" : options ? ",{" + options + "})" : ")"), !0;
807
812
  }
808
813
  function writeResponse(state, val, ref) {
809
814
  let sep = "", options = "";
810
815
  val.status !== 200 && (options += "status:" + val.status, sep = ","), val.statusText && (options += sep + "statusText:" + quote(val.statusText, 0), sep = ",");
811
- let headers = stringEntriesToProps(val.headers);
812
- return state.refs.set(val.headers, new Reference(ref, "headers", state.flush, null)), headers && (options += sep + "headers:{" + headers + "}"), !val.body || val.bodyUsed ? state.buf.push("new Response" + (options ? "(null,{" + options + "})" : "")) : (state.buf.push("new Response("), state.buf.push((writeProp(state, val.body, ref, "body") ? "" : "null") + (options ? ",{" + options + "})" : ")"))), !0;
816
+ let headers = stringEntriesToHeadersInit(val.headers);
817
+ return state.refs.set(val.headers, new Reference(ref, "headers", state.flush, null)), headers && (options += sep + "headers:" + headers), !val.body || val.bodyUsed ? state.buf.push("new Response" + (options ? "(null,{" + options + "})" : "")) : (state.buf.push("new Response("), state.buf.push((writeProp(state, val.body, ref, "body") ? "" : "null") + (options ? ",{" + options + "})" : ")"))), !0;
813
818
  }
814
819
  function writeReadableStream(state, val, ref) {
815
820
  let { boundary, channel } = state;
@@ -1021,18 +1026,29 @@ function nextId(state) {
1021
1026
  function hasSymbolIterator(value) {
1022
1027
  return Symbol.iterator in value;
1023
1028
  }
1024
- function stringEntriesToProps(entries) {
1029
+ function stringEntriesToHeadersInit(entries) {
1030
+ let list = [...entries];
1031
+ if (!list.length) return "";
1032
+ let duplicate = !1, seen = /* @__PURE__ */ new Set();
1033
+ for (let [key] of list) {
1034
+ if (seen.has(key)) {
1035
+ duplicate = !0;
1036
+ break;
1037
+ }
1038
+ seen.add(key);
1039
+ }
1025
1040
  let result = "", sep = "";
1026
- for (let [key, value] of entries) result += sep + toObjectKey(key) + ":" + quote(value, 0), sep = ",";
1027
- return result;
1041
+ for (let [key, value] of list) result += duplicate ? sep + "[" + quote(key, 0) + "," + quote(value, 0) + "]" : sep + toObjectKey(key) + ":" + quote(value, 0), sep = ",";
1042
+ return duplicate ? "[" + result + "]" : "{" + result + "}";
1028
1043
  }
1029
1044
  function typedArrayToInitString(view) {
1030
- let result = "[", sep = "";
1031
- for (let i = 0; i < view.length; i++) result += sep + view[i], sep = ",";
1045
+ let suffix = typeof view[0] == "bigint" ? "n" : "", result = "[", sep = "";
1046
+ for (let i = 0; i < view.length; i++) result += sep + view[i] + suffix, sep = ",";
1032
1047
  return result += "]", result;
1033
1048
  }
1034
1049
  function hasOnlyZeros(typedArray) {
1035
- for (let i = 0; i < typedArray.length; i++) if (typedArray[i] !== 0) return !1;
1050
+ let zero = typeof typedArray[0] == "bigint" ? 0n : 0;
1051
+ for (let i = 0; i < typedArray.length; i++) if (typedArray[i] !== zero) return !1;
1036
1052
  return !0;
1037
1053
  }
1038
1054
  function patchIteratorNext(proto) {
package/dist/html.mjs CHANGED
@@ -673,13 +673,15 @@ function writeUnknownObject(state, val, ref) {
673
673
  case Int32Array:
674
674
  case Uint32Array:
675
675
  case Float32Array:
676
- case Float64Array: return writeTypedArray(state, val, ref);
676
+ case Float64Array:
677
+ case BigInt64Array:
678
+ case BigUint64Array: return writeTypedArray(state, val, ref);
677
679
  case WeakSet: return writeWeakSet(state);
678
680
  case WeakMap: return writeWeakMap(state);
679
681
  case globalThis.URL: return writeURL(state, val);
680
682
  case globalThis.URLSearchParams: return writeURLSearchParams(state, val);
681
683
  case globalThis.Headers: return writeHeaders(state, val);
682
- case globalThis.FormData: return writeFormData(state, val);
684
+ case globalThis.FormData: return writeFormData(state, val, ref);
683
685
  case globalThis.ReadableStream: return writeReadableStream(state, val, ref);
684
686
  case globalThis.Request: return writeRequest(state, val, ref);
685
687
  case globalThis.Response: return writeResponse(state, val, ref);
@@ -788,12 +790,15 @@ function writeURLSearchParams(state, val) {
788
790
  return str ? state.buf.push("new URLSearchParams(" + quote(str, 0) + ")") : state.buf.push("new URLSearchParams"), !0;
789
791
  }
790
792
  function writeHeaders(state, val) {
791
- let headers = stringEntriesToProps(val);
792
- return state.buf.push("new Headers" + (headers ? "({" + headers + "})" : "")), !0;
793
+ let headers = stringEntriesToHeadersInit(val);
794
+ return state.buf.push("new Headers" + (headers ? "(" + headers + ")" : "")), !0;
793
795
  }
794
- function writeFormData(state, val) {
796
+ function writeFormData(state, val, ref) {
795
797
  let sep = "[", valStr = "";
796
- for (let [key, value] of val) typeof value == "string" && (valStr += sep + quote(key, 0) + "," + quote(value, 0), sep = ",");
798
+ for (let [key, value] of val) {
799
+ if (typeof value != "string") return !1;
800
+ valStr += sep + quote(key, 0) + "," + quote(value, 0), sep = ",";
801
+ }
797
802
  return sep === "[" ? state.buf.push("new FormData") : state.buf.push(valStr + "].reduce((f,v,i,a)=>i%2&&f.append(a[i-1],v)||f,new FormData)"), !0;
798
803
  }
799
804
  function writeRequest(state, val, ref) {
@@ -801,14 +806,14 @@ function writeRequest(state, val, ref) {
801
806
  state.buf.push("new Request(" + quote(val.url, 0)), hasBody && (state.buf.push(",{body:"), writeProp(state, val.body, ref, "body") ? (state.buf.push(",duplex:\"half\""), sep = ",", bodySerialized = !0) : state.buf.pop());
802
807
  let options = "";
803
808
  val.cache !== "default" && (options += sep + "cache:" + quote(val.cache, 0), sep = ","), val.credentials !== "same-origin" && (options += sep + "credentials:" + quote(val.credentials, 0), sep = ",");
804
- let headers = stringEntriesToProps(val.headers);
805
- return state.refs.set(val.headers, new Reference(ref, "headers", state.flush, null)), headers && (options += sep + "headers:{" + headers + "}", sep = ","), val.integrity && (options += sep + "integrity:" + quote(val.integrity, 0), sep = ","), val.keepalive && (options += sep + "keepalive:true", sep = ","), val.method !== "GET" && (options += sep + "method:" + quote(val.method, 0), sep = ","), val.mode !== "cors" && (options += sep + "mode:" + quote(val.mode, 0), sep = ","), val.redirect !== "follow" && (options += sep + "redirect:" + quote(val.redirect, 0), sep = ","), val.referrer !== "about:client" && (options += sep + "referrer:" + quote(val.referrer, 0), sep = ","), val.referrerPolicy && (options += sep + "referrerPolicy:" + quote(val.referrerPolicy, 0)), state.buf.push(bodySerialized ? options + "})" : options ? ",{" + options + "})" : ")"), !0;
809
+ let headers = stringEntriesToHeadersInit(val.headers);
810
+ return state.refs.set(val.headers, new Reference(ref, "headers", state.flush, null)), headers && (options += sep + "headers:" + headers, sep = ","), val.integrity && (options += sep + "integrity:" + quote(val.integrity, 0), sep = ","), val.keepalive && (options += sep + "keepalive:true", sep = ","), val.method !== "GET" && (options += sep + "method:" + quote(val.method, 0), sep = ","), val.mode !== "cors" && (options += sep + "mode:" + quote(val.mode, 0), sep = ","), val.redirect !== "follow" && (options += sep + "redirect:" + quote(val.redirect, 0), sep = ","), val.referrer !== "about:client" && (options += sep + "referrer:" + quote(val.referrer, 0), sep = ","), val.referrerPolicy && (options += sep + "referrerPolicy:" + quote(val.referrerPolicy, 0)), state.buf.push(bodySerialized ? options + "})" : options ? ",{" + options + "})" : ")"), !0;
806
811
  }
807
812
  function writeResponse(state, val, ref) {
808
813
  let sep = "", options = "";
809
814
  val.status !== 200 && (options += "status:" + val.status, sep = ","), val.statusText && (options += sep + "statusText:" + quote(val.statusText, 0), sep = ",");
810
- let headers = stringEntriesToProps(val.headers);
811
- return state.refs.set(val.headers, new Reference(ref, "headers", state.flush, null)), headers && (options += sep + "headers:{" + headers + "}"), !val.body || val.bodyUsed ? state.buf.push("new Response" + (options ? "(null,{" + options + "})" : "")) : (state.buf.push("new Response("), state.buf.push((writeProp(state, val.body, ref, "body") ? "" : "null") + (options ? ",{" + options + "})" : ")"))), !0;
815
+ let headers = stringEntriesToHeadersInit(val.headers);
816
+ return state.refs.set(val.headers, new Reference(ref, "headers", state.flush, null)), headers && (options += sep + "headers:" + headers), !val.body || val.bodyUsed ? state.buf.push("new Response" + (options ? "(null,{" + options + "})" : "")) : (state.buf.push("new Response("), state.buf.push((writeProp(state, val.body, ref, "body") ? "" : "null") + (options ? ",{" + options + "})" : ")"))), !0;
812
817
  }
813
818
  function writeReadableStream(state, val, ref) {
814
819
  let { boundary, channel } = state;
@@ -1020,18 +1025,29 @@ function nextId(state) {
1020
1025
  function hasSymbolIterator(value) {
1021
1026
  return Symbol.iterator in value;
1022
1027
  }
1023
- function stringEntriesToProps(entries) {
1028
+ function stringEntriesToHeadersInit(entries) {
1029
+ let list = [...entries];
1030
+ if (!list.length) return "";
1031
+ let duplicate = !1, seen = /* @__PURE__ */ new Set();
1032
+ for (let [key] of list) {
1033
+ if (seen.has(key)) {
1034
+ duplicate = !0;
1035
+ break;
1036
+ }
1037
+ seen.add(key);
1038
+ }
1024
1039
  let result = "", sep = "";
1025
- for (let [key, value] of entries) result += sep + toObjectKey(key) + ":" + quote(value, 0), sep = ",";
1026
- return result;
1040
+ for (let [key, value] of list) result += duplicate ? sep + "[" + quote(key, 0) + "," + quote(value, 0) + "]" : sep + toObjectKey(key) + ":" + quote(value, 0), sep = ",";
1041
+ return duplicate ? "[" + result + "]" : "{" + result + "}";
1027
1042
  }
1028
1043
  function typedArrayToInitString(view) {
1029
- let result = "[", sep = "";
1030
- for (let i = 0; i < view.length; i++) result += sep + view[i], sep = ",";
1044
+ let suffix = typeof view[0] == "bigint" ? "n" : "", result = "[", sep = "";
1045
+ for (let i = 0; i < view.length; i++) result += sep + view[i] + suffix, sep = ",";
1031
1046
  return result += "]", result;
1032
1047
  }
1033
1048
  function hasOnlyZeros(typedArray) {
1034
- for (let i = 0; i < typedArray.length; i++) if (typedArray[i] !== 0) return !1;
1049
+ let zero = typeof typedArray[0] == "bigint" ? 0n : 0;
1050
+ for (let i = 0; i < typedArray.length; i++) if (typedArray[i] !== zero) return !1;
1035
1051
  return !0;
1036
1052
  }
1037
1053
  function patchIteratorNext(proto) {
@@ -8488,7 +8488,7 @@ function checkStyleInterpolations(tag) {
8488
8488
  let runAfterColon = false;
8489
8489
  let runDecl = false;
8490
8490
  const endRun = (selector) => {
8491
- if (runPlaceholder && !runAfterColon && (selector || runDecl)) throw tag.hub.buildError(runPlaceholder, selector ? styleSelectorMsg : stylePropertyMsg);
8491
+ if (runPlaceholder && (selector || !runAfterColon && runDecl)) throw tag.hub.buildError(runPlaceholder, selector ? styleSelectorMsg : stylePropertyMsg);
8492
8492
  valueColon = false;
8493
8493
  runPlaceholder = void 0;
8494
8494
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marko/runtime-tags",
3
- "version": "6.3.13",
3
+ "version": "6.3.14",
4
4
  "description": "Optimized runtime for Marko templates.",
5
5
  "keywords": [
6
6
  "api",