@marko/runtime-tags 6.1.9 → 6.1.10

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.
@@ -56,7 +56,9 @@ export declare enum PendingRenderProp {
56
56
  Key = "a",
57
57
  Scope = "b",
58
58
  Signal = "c",
59
- Value = "d"
59
+ Value = "d",
60
+ Gen = "e",
61
+ Pending = "f"
60
62
  }
61
63
  export declare enum ClosureSignalProp {
62
64
  ScopeInstancesAccessor = "a",
@@ -56,7 +56,9 @@ export declare enum PendingRenderProp {
56
56
  Key = "key",
57
57
  Scope = "scope",
58
58
  Signal = "signal",
59
- Value = "value"
59
+ Value = "value",
60
+ Gen = "gen",
61
+ Pending = "pending"
60
62
  }
61
63
  export declare enum ClosureSignalProp {
62
64
  ScopeInstancesAccessor = "scopeInstancesAccessor",
package/dist/debug/dom.js CHANGED
@@ -1550,9 +1550,8 @@ function byFirstArg(name) {
1550
1550
  }
1551
1551
  //#endregion
1552
1552
  //#region src/dom/queue.ts
1553
+ let runId = 1;
1553
1554
  let pendingRenders = [];
1554
- let pendingRendersLookup = {};
1555
- let asyncRendersLookup;
1556
1555
  const caughtError = /* @__PURE__ */ new WeakSet();
1557
1556
  const placeholderShown = /* @__PURE__ */ new WeakSet();
1558
1557
  let pendingEffects = [];
@@ -1560,18 +1559,22 @@ let pendingScopes = [];
1560
1559
  let rendering;
1561
1560
  const scopeKeyOffset = 1e3;
1562
1561
  function queueRender(scope, signal, signalKey, value, scopeKey = scope["#Id"]) {
1563
- const key = scopeKey * scopeKeyOffset + signalKey;
1564
- let render = signalKey >= 0 && pendingRendersLookup[key];
1565
- if (render) render["value"] = value;
1566
- else {
1567
- queuePendingRender(render = {
1568
- ["key"]: key,
1562
+ let render;
1563
+ if (signalKey >= 0 && (render = scope[signalKey + scopeKeyOffset])) {
1564
+ render["value"] = value;
1565
+ if (render["gen"] === runId || catchEnabled && render["pending"]) return;
1566
+ render["gen"] = runId;
1567
+ } else {
1568
+ render = {
1569
+ ["key"]: scopeKey * scopeKeyOffset + signalKey,
1569
1570
  ["scope"]: scope,
1570
1571
  ["signal"]: signal,
1571
- ["value"]: value
1572
- });
1573
- signalKey >= 0 && (pendingRendersLookup[key] = render);
1572
+ ["value"]: value,
1573
+ ["gen"]: runId
1574
+ };
1575
+ if (signalKey >= 0) scope[signalKey + scopeKeyOffset] = render;
1574
1576
  }
1577
+ queuePendingRender(render);
1575
1578
  }
1576
1579
  function queuePendingRender(render) {
1577
1580
  let i = pendingRenders.push(render) - 1;
@@ -1589,13 +1592,12 @@ function queueEffect(scope, fn) {
1589
1592
  }
1590
1593
  function run() {
1591
1594
  const effects = pendingEffects;
1592
- asyncRendersLookup = {};
1593
1595
  try {
1594
1596
  rendering = 1;
1595
1597
  runRenders();
1596
1598
  } finally {
1597
- pendingRendersLookup = asyncRendersLookup;
1598
- asyncRendersLookup = rendering = 0;
1599
+ runId++;
1600
+ rendering = 0;
1599
1601
  pendingRenders = [];
1600
1602
  pendingEffects = [];
1601
1603
  }
@@ -1608,19 +1610,15 @@ function queueAsyncRender(scope, signal, value) {
1608
1610
  function prepareEffects(fn) {
1609
1611
  const prevRenders = pendingRenders;
1610
1612
  const prevEffects = pendingEffects;
1611
- const prevLookup = asyncRendersLookup;
1612
1613
  const preparedEffects = pendingEffects = [];
1613
1614
  pendingRenders = [];
1614
- asyncRendersLookup = pendingRendersLookup;
1615
- pendingRendersLookup = {};
1616
1615
  try {
1617
1616
  rendering = 1;
1618
1617
  fn();
1619
1618
  runRenders();
1620
1619
  } finally {
1620
+ runId++;
1621
1621
  rendering = 0;
1622
- pendingRendersLookup = asyncRendersLookup;
1623
- asyncRendersLookup = prevLookup;
1624
1622
  pendingRenders = prevRenders;
1625
1623
  pendingEffects = prevEffects;
1626
1624
  }
@@ -1690,11 +1688,12 @@ function _enable_catch() {
1690
1688
  let branch = render["scope"]["#ClosestBranch"];
1691
1689
  while (branch) {
1692
1690
  if (branch["#PendingRenders"]) {
1693
- asyncRendersLookup[render["key"]] = render;
1691
+ render["pending"] = 1;
1694
1692
  return branch["#PendingRenders"].push(render);
1695
1693
  }
1696
1694
  branch = branch["#ParentBranch"];
1697
1695
  }
1696
+ render["pending"] = 0;
1698
1697
  runRender(render);
1699
1698
  } catch (error) {
1700
1699
  renderCatch(render["scope"], error);
@@ -1548,9 +1548,8 @@ function byFirstArg(name) {
1548
1548
  }
1549
1549
  //#endregion
1550
1550
  //#region src/dom/queue.ts
1551
+ let runId = 1;
1551
1552
  let pendingRenders = [];
1552
- let pendingRendersLookup = {};
1553
- let asyncRendersLookup;
1554
1553
  const caughtError = /* @__PURE__ */ new WeakSet();
1555
1554
  const placeholderShown = /* @__PURE__ */ new WeakSet();
1556
1555
  let pendingEffects = [];
@@ -1558,18 +1557,22 @@ let pendingScopes = [];
1558
1557
  let rendering;
1559
1558
  const scopeKeyOffset = 1e3;
1560
1559
  function queueRender(scope, signal, signalKey, value, scopeKey = scope["#Id"]) {
1561
- const key = scopeKey * scopeKeyOffset + signalKey;
1562
- let render = signalKey >= 0 && pendingRendersLookup[key];
1563
- if (render) render["value"] = value;
1564
- else {
1565
- queuePendingRender(render = {
1566
- ["key"]: key,
1560
+ let render;
1561
+ if (signalKey >= 0 && (render = scope[signalKey + scopeKeyOffset])) {
1562
+ render["value"] = value;
1563
+ if (render["gen"] === runId || catchEnabled && render["pending"]) return;
1564
+ render["gen"] = runId;
1565
+ } else {
1566
+ render = {
1567
+ ["key"]: scopeKey * scopeKeyOffset + signalKey,
1567
1568
  ["scope"]: scope,
1568
1569
  ["signal"]: signal,
1569
- ["value"]: value
1570
- });
1571
- signalKey >= 0 && (pendingRendersLookup[key] = render);
1570
+ ["value"]: value,
1571
+ ["gen"]: runId
1572
+ };
1573
+ if (signalKey >= 0) scope[signalKey + scopeKeyOffset] = render;
1572
1574
  }
1575
+ queuePendingRender(render);
1573
1576
  }
1574
1577
  function queuePendingRender(render) {
1575
1578
  let i = pendingRenders.push(render) - 1;
@@ -1587,13 +1590,12 @@ function queueEffect(scope, fn) {
1587
1590
  }
1588
1591
  function run() {
1589
1592
  const effects = pendingEffects;
1590
- asyncRendersLookup = {};
1591
1593
  try {
1592
1594
  rendering = 1;
1593
1595
  runRenders();
1594
1596
  } finally {
1595
- pendingRendersLookup = asyncRendersLookup;
1596
- asyncRendersLookup = rendering = 0;
1597
+ runId++;
1598
+ rendering = 0;
1597
1599
  pendingRenders = [];
1598
1600
  pendingEffects = [];
1599
1601
  }
@@ -1606,19 +1608,15 @@ function queueAsyncRender(scope, signal, value) {
1606
1608
  function prepareEffects(fn) {
1607
1609
  const prevRenders = pendingRenders;
1608
1610
  const prevEffects = pendingEffects;
1609
- const prevLookup = asyncRendersLookup;
1610
1611
  const preparedEffects = pendingEffects = [];
1611
1612
  pendingRenders = [];
1612
- asyncRendersLookup = pendingRendersLookup;
1613
- pendingRendersLookup = {};
1614
1613
  try {
1615
1614
  rendering = 1;
1616
1615
  fn();
1617
1616
  runRenders();
1618
1617
  } finally {
1618
+ runId++;
1619
1619
  rendering = 0;
1620
- pendingRendersLookup = asyncRendersLookup;
1621
- asyncRendersLookup = prevLookup;
1622
1620
  pendingRenders = prevRenders;
1623
1621
  pendingEffects = prevEffects;
1624
1622
  }
@@ -1688,11 +1686,12 @@ function _enable_catch() {
1688
1686
  let branch = render["scope"]["#ClosestBranch"];
1689
1687
  while (branch) {
1690
1688
  if (branch["#PendingRenders"]) {
1691
- asyncRendersLookup[render["key"]] = render;
1689
+ render["pending"] = 1;
1692
1690
  return branch["#PendingRenders"].push(render);
1693
1691
  }
1694
1692
  branch = branch["#ParentBranch"];
1695
1693
  }
1694
+ render["pending"] = 0;
1696
1695
  runRender(render);
1697
1696
  } catch (error) {
1698
1697
  renderCatch(render["scope"], error);
@@ -844,9 +844,10 @@ function writeArrayBuffer(state, val) {
844
844
  }
845
845
  function writeTypedArray(state, val, ref) {
846
846
  if (val.byteOffset || state.refs.has(val.buffer)) {
847
+ const needsLength = val.byteOffset + val.byteLength < val.buffer.byteLength;
847
848
  state.buf.push("new " + val.constructor.name + "(");
848
849
  writeProp(state, val.buffer, ref, "buffer");
849
- state.buf.push(val.byteOffset ? "," + val.byteOffset + ")" : ")");
850
+ state.buf.push((val.byteOffset || needsLength ? "," + val.byteOffset + (needsLength ? "," + val.length : "") : "") + ")");
850
851
  } else {
851
852
  state.refs.set(val.buffer, new Reference(ref, "buffer", state.flush, null));
852
853
  state.buf.push("new " + val.constructor.name + (val.length === 0 ? "" : "(" + (hasOnlyZeros(val) ? val.length : typedArrayToInitString(val)) + ")"));
@@ -900,11 +901,12 @@ function writeFormData(state, val) {
900
901
  sep = ",";
901
902
  }
902
903
  if (sep === "[") state.buf.push("new FormData");
903
- else state.buf.push(valStr + "].reduce((f,v,i,a)=>i%2&&f.append(v,a[i+1])||f,new FormData)");
904
+ else state.buf.push(valStr + "].reduce((f,v,i,a)=>i%2&&f.append(a[i-1],v)||f,new FormData)");
904
905
  return true;
905
906
  }
906
907
  function writeRequest(state, val, ref) {
907
908
  let sep = "";
909
+ let bodySerialized = false;
908
910
  const hasBody = val.body && !val.bodyUsed && val.duplex === "half";
909
911
  state.buf.push("new Request(" + quote(val.url, 0));
910
912
  if (hasBody) {
@@ -912,6 +914,7 @@ function writeRequest(state, val, ref) {
912
914
  if (writeProp(state, val.body, ref, "body")) {
913
915
  state.buf.push(",duplex:\"half\"");
914
916
  sep = ",";
917
+ bodySerialized = true;
915
918
  } else state.buf.pop();
916
919
  }
917
920
  let options = "";
@@ -954,7 +957,7 @@ function writeRequest(state, val, ref) {
954
957
  sep = ",";
955
958
  }
956
959
  if (val.referrerPolicy) options += sep + "referrerPolicy:" + quote(val.referrerPolicy, 0);
957
- state.buf.push(hasBody ? options + "})" : options ? ",{" + options + "})" : ")");
960
+ state.buf.push(bodySerialized ? options + "})" : options ? ",{" + options + "})" : ")");
958
961
  return true;
959
962
  }
960
963
  function writeResponse(state, val, ref) {
@@ -842,9 +842,10 @@ function writeArrayBuffer(state, val) {
842
842
  }
843
843
  function writeTypedArray(state, val, ref) {
844
844
  if (val.byteOffset || state.refs.has(val.buffer)) {
845
+ const needsLength = val.byteOffset + val.byteLength < val.buffer.byteLength;
845
846
  state.buf.push("new " + val.constructor.name + "(");
846
847
  writeProp(state, val.buffer, ref, "buffer");
847
- state.buf.push(val.byteOffset ? "," + val.byteOffset + ")" : ")");
848
+ state.buf.push((val.byteOffset || needsLength ? "," + val.byteOffset + (needsLength ? "," + val.length : "") : "") + ")");
848
849
  } else {
849
850
  state.refs.set(val.buffer, new Reference(ref, "buffer", state.flush, null));
850
851
  state.buf.push("new " + val.constructor.name + (val.length === 0 ? "" : "(" + (hasOnlyZeros(val) ? val.length : typedArrayToInitString(val)) + ")"));
@@ -898,11 +899,12 @@ function writeFormData(state, val) {
898
899
  sep = ",";
899
900
  }
900
901
  if (sep === "[") state.buf.push("new FormData");
901
- else state.buf.push(valStr + "].reduce((f,v,i,a)=>i%2&&f.append(v,a[i+1])||f,new FormData)");
902
+ else state.buf.push(valStr + "].reduce((f,v,i,a)=>i%2&&f.append(a[i-1],v)||f,new FormData)");
902
903
  return true;
903
904
  }
904
905
  function writeRequest(state, val, ref) {
905
906
  let sep = "";
907
+ let bodySerialized = false;
906
908
  const hasBody = val.body && !val.bodyUsed && val.duplex === "half";
907
909
  state.buf.push("new Request(" + quote(val.url, 0));
908
910
  if (hasBody) {
@@ -910,6 +912,7 @@ function writeRequest(state, val, ref) {
910
912
  if (writeProp(state, val.body, ref, "body")) {
911
913
  state.buf.push(",duplex:\"half\"");
912
914
  sep = ",";
915
+ bodySerialized = true;
913
916
  } else state.buf.pop();
914
917
  }
915
918
  let options = "";
@@ -952,7 +955,7 @@ function writeRequest(state, val, ref) {
952
955
  sep = ",";
953
956
  }
954
957
  if (val.referrerPolicy) options += sep + "referrerPolicy:" + quote(val.referrerPolicy, 0);
955
- state.buf.push(hasBody ? options + "})" : options ? ",{" + options + "})" : ")");
958
+ state.buf.push(bodySerialized ? options + "})" : options ? ",{" + options + "})" : ")");
956
959
  return true;
957
960
  }
958
961
  function writeResponse(state, val, ref) {
@@ -6,6 +6,8 @@ export type PendingRender = {
6
6
  [PendingRenderProp.Scope]: Scope;
7
7
  [PendingRenderProp.Signal]: Signal<any, any>;
8
8
  [PendingRenderProp.Value]: unknown;
9
+ [PendingRenderProp.Gen]: number;
10
+ [PendingRenderProp.Pending]?: 0 | 1;
9
11
  };
10
12
  export declare const caughtError: WeakSet<unknown[]>;
11
13
  export declare const placeholderShown: WeakSet<unknown[]>;
package/dist/dom.js CHANGED
@@ -49,7 +49,7 @@ let empty = [], rest = Symbol(), toDelimitedString = function toDelimitedString(
49
49
  };
50
50
  }, _for_of = /* @__PURE__ */ loop(([all, by = bySecondArg], cb) => {
51
51
  typeof by == "string" ? forOf(all, (item, i) => cb(item[by], [item, i])) : forOf(all, (item, i) => cb(by(item, i), [item, i]));
52
- }), _for_in = /* @__PURE__ */ loop(([obj, by = byFirstArg], cb) => forIn(obj, (key, value) => cb(by(key, value), [key, value]))), _for_to = /* @__PURE__ */ loop(([to, from, step, by = byFirstArg], cb) => forTo(to, from, step, (v) => cb(by(v), [v]))), _for_until = /* @__PURE__ */ loop(([until, from, step, by = byFirstArg], cb) => forUntil(until, from, step, (v) => cb(by(v), [v]))), pendingRenders = [], pendingRendersLookup = {}, asyncRendersLookup, caughtError = /* @__PURE__ */ new WeakSet(), placeholderShown = /* @__PURE__ */ new WeakSet(), pendingEffects = [], pendingScopes = [], rendering, runEffects = ((effects) => {
52
+ }), _for_in = /* @__PURE__ */ loop(([obj, by = byFirstArg], cb) => forIn(obj, (key, value) => cb(by(key, value), [key, value]))), _for_to = /* @__PURE__ */ loop(([to, from, step, by = byFirstArg], cb) => forTo(to, from, step, (v) => cb(by(v), [v]))), _for_until = /* @__PURE__ */ loop(([until, from, step, by = byFirstArg], cb) => forUntil(until, from, step, (v) => cb(by(v), [v]))), runId = 1, pendingRenders = [], caughtError = /* @__PURE__ */ new WeakSet(), placeholderShown = /* @__PURE__ */ new WeakSet(), pendingEffects = [], pendingScopes = [], rendering, scopeKeyOffset = 1e3, runEffects = ((effects) => {
53
53
  for (let i = 0; i < effects.length;) effects[i++](effects[i++]);
54
54
  }), runRender = (render) => render.c(render.b, render.d), catchEnabled, classIdToBranch = /* @__PURE__ */ new Map(), scopesByRender = /* @__PURE__ */ new WeakMap(), getRenderScopes = ($global) => {
55
55
  let render = self[$global.runtimeId]?.[$global.renderId], scopes = render && scopesByRender.get(render);
@@ -1008,13 +1008,18 @@ function byFirstArg(name) {
1008
1008
  //#endregion
1009
1009
  //#region src/dom/queue.ts
1010
1010
  function queueRender(scope, signal, signalKey, value, scopeKey = scope.L) {
1011
- let key = scopeKey * 1e3 + signalKey, render = signalKey >= 0 && pendingRendersLookup[key];
1012
- render ? render.d = value : (queuePendingRender(render = {
1013
- a: key,
1011
+ let render;
1012
+ if (signalKey >= 0 && (render = scope[signalKey + scopeKeyOffset])) {
1013
+ if (render.d = value, render.e === runId || catchEnabled && render.f) return;
1014
+ render.e = runId;
1015
+ } else render = {
1016
+ a: scopeKey * scopeKeyOffset + signalKey,
1014
1017
  b: scope,
1015
1018
  c: signal,
1016
- d: value
1017
- }), signalKey >= 0 && (pendingRendersLookup[key] = render));
1019
+ d: value,
1020
+ e: runId
1021
+ }, signalKey >= 0 && (scope[signalKey + scopeKeyOffset] = render);
1022
+ queuePendingRender(render);
1018
1023
  }
1019
1024
  function queuePendingRender(render) {
1020
1025
  let i = pendingRenders.push(render) - 1;
@@ -1030,11 +1035,10 @@ function queueEffect(scope, fn) {
1030
1035
  }
1031
1036
  function run() {
1032
1037
  let effects = pendingEffects;
1033
- asyncRendersLookup = {};
1034
1038
  try {
1035
1039
  rendering = 1, runRenders();
1036
1040
  } finally {
1037
- pendingRendersLookup = asyncRendersLookup, asyncRendersLookup = rendering = 0, pendingRenders = [], pendingEffects = [];
1041
+ runId++, rendering = 0, pendingRenders = [], pendingEffects = [];
1038
1042
  }
1039
1043
  runEffects(effects);
1040
1044
  }
@@ -1042,12 +1046,12 @@ function queueAsyncRender(scope, signal, value) {
1042
1046
  queueRender(scope, signal, -1, value), queueMicrotask(run);
1043
1047
  }
1044
1048
  function prepareEffects(fn) {
1045
- let prevRenders = pendingRenders, prevEffects = pendingEffects, prevLookup = asyncRendersLookup, preparedEffects = pendingEffects = [];
1046
- pendingRenders = [], asyncRendersLookup = pendingRendersLookup, pendingRendersLookup = {};
1049
+ let prevRenders = pendingRenders, prevEffects = pendingEffects, preparedEffects = pendingEffects = [];
1050
+ pendingRenders = [];
1047
1051
  try {
1048
1052
  rendering = 1, fn(), runRenders();
1049
1053
  } finally {
1050
- rendering = 0, pendingRendersLookup = asyncRendersLookup, asyncRendersLookup = prevLookup, pendingRenders = prevRenders, pendingEffects = prevEffects;
1054
+ runId++, rendering = 0, pendingRenders = prevRenders, pendingEffects = prevEffects;
1051
1055
  }
1052
1056
  return preparedEffects;
1053
1057
  }
@@ -1091,10 +1095,10 @@ function _enable_catch() {
1091
1095
  try {
1092
1096
  let branch = render.b.F;
1093
1097
  for (; branch;) {
1094
- if (branch.W) return asyncRendersLookup[render.a] = render, branch.W.push(render);
1098
+ if (branch.W) return render.f = 1, branch.W.push(render);
1095
1099
  branch = branch.N;
1096
1100
  }
1097
- runRender(render);
1101
+ render.f = 0, runRender(render);
1098
1102
  } catch (error) {
1099
1103
  renderCatch(render.b, error);
1100
1104
  }
package/dist/dom.mjs CHANGED
@@ -49,7 +49,7 @@ let empty = [], rest = Symbol(), toDelimitedString = function toDelimitedString(
49
49
  };
50
50
  }, _for_of = /* @__PURE__ */ loop(([all, by = bySecondArg], cb) => {
51
51
  typeof by == "string" ? forOf(all, (item, i) => cb(item[by], [item, i])) : forOf(all, (item, i) => cb(by(item, i), [item, i]));
52
- }), _for_in = /* @__PURE__ */ loop(([obj, by = byFirstArg], cb) => forIn(obj, (key, value) => cb(by(key, value), [key, value]))), _for_to = /* @__PURE__ */ loop(([to, from, step, by = byFirstArg], cb) => forTo(to, from, step, (v) => cb(by(v), [v]))), _for_until = /* @__PURE__ */ loop(([until, from, step, by = byFirstArg], cb) => forUntil(until, from, step, (v) => cb(by(v), [v]))), pendingRenders = [], pendingRendersLookup = {}, asyncRendersLookup, caughtError = /* @__PURE__ */ new WeakSet(), placeholderShown = /* @__PURE__ */ new WeakSet(), pendingEffects = [], pendingScopes = [], rendering, runEffects = ((effects) => {
52
+ }), _for_in = /* @__PURE__ */ loop(([obj, by = byFirstArg], cb) => forIn(obj, (key, value) => cb(by(key, value), [key, value]))), _for_to = /* @__PURE__ */ loop(([to, from, step, by = byFirstArg], cb) => forTo(to, from, step, (v) => cb(by(v), [v]))), _for_until = /* @__PURE__ */ loop(([until, from, step, by = byFirstArg], cb) => forUntil(until, from, step, (v) => cb(by(v), [v]))), runId = 1, pendingRenders = [], caughtError = /* @__PURE__ */ new WeakSet(), placeholderShown = /* @__PURE__ */ new WeakSet(), pendingEffects = [], pendingScopes = [], rendering, scopeKeyOffset = 1e3, runEffects = ((effects) => {
53
53
  for (let i = 0; i < effects.length;) effects[i++](effects[i++]);
54
54
  }), runRender = (render) => render.c(render.b, render.d), catchEnabled, classIdToBranch = /* @__PURE__ */ new Map(), scopesByRender = /* @__PURE__ */ new WeakMap(), getRenderScopes = ($global) => {
55
55
  let render = self[$global.runtimeId]?.[$global.renderId], scopes = render && scopesByRender.get(render);
@@ -1007,13 +1007,18 @@ function byFirstArg(name) {
1007
1007
  //#endregion
1008
1008
  //#region src/dom/queue.ts
1009
1009
  function queueRender(scope, signal, signalKey, value, scopeKey = scope.L) {
1010
- let key = scopeKey * 1e3 + signalKey, render = signalKey >= 0 && pendingRendersLookup[key];
1011
- render ? render.d = value : (queuePendingRender(render = {
1012
- a: key,
1010
+ let render;
1011
+ if (signalKey >= 0 && (render = scope[signalKey + scopeKeyOffset])) {
1012
+ if (render.d = value, render.e === runId || catchEnabled && render.f) return;
1013
+ render.e = runId;
1014
+ } else render = {
1015
+ a: scopeKey * scopeKeyOffset + signalKey,
1013
1016
  b: scope,
1014
1017
  c: signal,
1015
- d: value
1016
- }), signalKey >= 0 && (pendingRendersLookup[key] = render));
1018
+ d: value,
1019
+ e: runId
1020
+ }, signalKey >= 0 && (scope[signalKey + scopeKeyOffset] = render);
1021
+ queuePendingRender(render);
1017
1022
  }
1018
1023
  function queuePendingRender(render) {
1019
1024
  let i = pendingRenders.push(render) - 1;
@@ -1029,11 +1034,10 @@ function queueEffect(scope, fn) {
1029
1034
  }
1030
1035
  function run() {
1031
1036
  let effects = pendingEffects;
1032
- asyncRendersLookup = {};
1033
1037
  try {
1034
1038
  rendering = 1, runRenders();
1035
1039
  } finally {
1036
- pendingRendersLookup = asyncRendersLookup, asyncRendersLookup = rendering = 0, pendingRenders = [], pendingEffects = [];
1040
+ runId++, rendering = 0, pendingRenders = [], pendingEffects = [];
1037
1041
  }
1038
1042
  runEffects(effects);
1039
1043
  }
@@ -1041,12 +1045,12 @@ function queueAsyncRender(scope, signal, value) {
1041
1045
  queueRender(scope, signal, -1, value), queueMicrotask(run);
1042
1046
  }
1043
1047
  function prepareEffects(fn) {
1044
- let prevRenders = pendingRenders, prevEffects = pendingEffects, prevLookup = asyncRendersLookup, preparedEffects = pendingEffects = [];
1045
- pendingRenders = [], asyncRendersLookup = pendingRendersLookup, pendingRendersLookup = {};
1048
+ let prevRenders = pendingRenders, prevEffects = pendingEffects, preparedEffects = pendingEffects = [];
1049
+ pendingRenders = [];
1046
1050
  try {
1047
1051
  rendering = 1, fn(), runRenders();
1048
1052
  } finally {
1049
- rendering = 0, pendingRendersLookup = asyncRendersLookup, asyncRendersLookup = prevLookup, pendingRenders = prevRenders, pendingEffects = prevEffects;
1053
+ runId++, rendering = 0, pendingRenders = prevRenders, pendingEffects = prevEffects;
1050
1054
  }
1051
1055
  return preparedEffects;
1052
1056
  }
@@ -1090,10 +1094,10 @@ function _enable_catch() {
1090
1094
  try {
1091
1095
  let branch = render.b.F;
1092
1096
  for (; branch;) {
1093
- if (branch.W) return asyncRendersLookup[render.a] = render, branch.W.push(render);
1097
+ if (branch.W) return render.f = 1, branch.W.push(render);
1094
1098
  branch = branch.N;
1095
1099
  }
1096
- runRender(render);
1100
+ render.f = 0, runRender(render);
1097
1101
  } catch (error) {
1098
1102
  renderCatch(render.b, error);
1099
1103
  }
package/dist/html.js CHANGED
@@ -713,7 +713,11 @@ function writeArrayBuffer(state, val) {
713
713
  return state.buf.push(result), !0;
714
714
  }
715
715
  function writeTypedArray(state, val, ref) {
716
- return val.byteOffset || state.refs.has(val.buffer) ? (state.buf.push("new " + val.constructor.name + "("), writeProp(state, val.buffer, ref, "buffer"), state.buf.push(val.byteOffset ? "," + val.byteOffset + ")" : ")")) : (state.refs.set(val.buffer, new Reference(ref, "buffer", state.flush, null)), state.buf.push("new " + val.constructor.name + (val.length === 0 ? "" : "(" + (hasOnlyZeros(val) ? val.length : typedArrayToInitString(val)) + ")"))), !0;
716
+ if (val.byteOffset || state.refs.has(val.buffer)) {
717
+ let needsLength = val.byteOffset + val.byteLength < val.buffer.byteLength;
718
+ state.buf.push("new " + val.constructor.name + "("), writeProp(state, val.buffer, ref, "buffer"), state.buf.push((val.byteOffset || needsLength ? "," + val.byteOffset + (needsLength ? "," + val.length : "") : "") + ")");
719
+ } else state.refs.set(val.buffer, new Reference(ref, "buffer", state.flush, null)), state.buf.push("new " + val.constructor.name + (val.length === 0 ? "" : "(" + (hasOnlyZeros(val) ? val.length : typedArrayToInitString(val)) + ")"));
720
+ return !0;
717
721
  }
718
722
  function writeWeakSet(state) {
719
723
  return state.buf.push("new WeakSet"), !0;
@@ -742,15 +746,15 @@ function writeHeaders(state, val) {
742
746
  function writeFormData(state, val) {
743
747
  let sep = "[", valStr = "";
744
748
  for (let [key, value] of val) typeof value == "string" && (valStr += sep + quote(key, 0) + "," + quote(value, 0), sep = ",");
745
- return sep === "[" ? state.buf.push("new FormData") : state.buf.push(valStr + "].reduce((f,v,i,a)=>i%2&&f.append(v,a[i+1])||f,new FormData)"), !0;
749
+ 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;
746
750
  }
747
751
  function writeRequest(state, val, ref) {
748
- let sep = "", hasBody = val.body && !val.bodyUsed && val.duplex === "half";
749
- 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 = ",") : state.buf.pop());
752
+ let sep = "", bodySerialized = !1, hasBody = val.body && !val.bodyUsed && val.duplex === "half";
753
+ 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());
750
754
  let options = "";
751
755
  val.cache !== "default" && (options += sep + "cache:" + quote(val.cache, 0), sep = ","), val.credentials !== "same-origin" && (options += sep + "credentials:" + quote(val.credentials, 0), sep = ",");
752
756
  let headers = stringEntriesToProps(val.headers);
753
- 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(hasBody ? options + "})" : options ? ",{" + options + "})" : ")"), !0;
757
+ 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;
754
758
  }
755
759
  function writeResponse(state, val, ref) {
756
760
  let sep = "", options = "";
package/dist/html.mjs CHANGED
@@ -712,7 +712,11 @@ function writeArrayBuffer(state, val) {
712
712
  return state.buf.push(result), !0;
713
713
  }
714
714
  function writeTypedArray(state, val, ref) {
715
- return val.byteOffset || state.refs.has(val.buffer) ? (state.buf.push("new " + val.constructor.name + "("), writeProp(state, val.buffer, ref, "buffer"), state.buf.push(val.byteOffset ? "," + val.byteOffset + ")" : ")")) : (state.refs.set(val.buffer, new Reference(ref, "buffer", state.flush, null)), state.buf.push("new " + val.constructor.name + (val.length === 0 ? "" : "(" + (hasOnlyZeros(val) ? val.length : typedArrayToInitString(val)) + ")"))), !0;
715
+ if (val.byteOffset || state.refs.has(val.buffer)) {
716
+ let needsLength = val.byteOffset + val.byteLength < val.buffer.byteLength;
717
+ state.buf.push("new " + val.constructor.name + "("), writeProp(state, val.buffer, ref, "buffer"), state.buf.push((val.byteOffset || needsLength ? "," + val.byteOffset + (needsLength ? "," + val.length : "") : "") + ")");
718
+ } else state.refs.set(val.buffer, new Reference(ref, "buffer", state.flush, null)), state.buf.push("new " + val.constructor.name + (val.length === 0 ? "" : "(" + (hasOnlyZeros(val) ? val.length : typedArrayToInitString(val)) + ")"));
719
+ return !0;
716
720
  }
717
721
  function writeWeakSet(state) {
718
722
  return state.buf.push("new WeakSet"), !0;
@@ -741,15 +745,15 @@ function writeHeaders(state, val) {
741
745
  function writeFormData(state, val) {
742
746
  let sep = "[", valStr = "";
743
747
  for (let [key, value] of val) typeof value == "string" && (valStr += sep + quote(key, 0) + "," + quote(value, 0), sep = ",");
744
- return sep === "[" ? state.buf.push("new FormData") : state.buf.push(valStr + "].reduce((f,v,i,a)=>i%2&&f.append(v,a[i+1])||f,new FormData)"), !0;
748
+ 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;
745
749
  }
746
750
  function writeRequest(state, val, ref) {
747
- let sep = "", hasBody = val.body && !val.bodyUsed && val.duplex === "half";
748
- 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 = ",") : state.buf.pop());
751
+ let sep = "", bodySerialized = !1, hasBody = val.body && !val.bodyUsed && val.duplex === "half";
752
+ 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());
749
753
  let options = "";
750
754
  val.cache !== "default" && (options += sep + "cache:" + quote(val.cache, 0), sep = ","), val.credentials !== "same-origin" && (options += sep + "credentials:" + quote(val.credentials, 0), sep = ",");
751
755
  let headers = stringEntriesToProps(val.headers);
752
- 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(hasBody ? options + "})" : options ? ",{" + options + "})" : ")"), !0;
756
+ 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;
753
757
  }
754
758
  function writeResponse(state, val, ref) {
755
759
  let sep = "", options = "";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marko/runtime-tags",
3
- "version": "6.1.9",
3
+ "version": "6.1.10",
4
4
  "description": "Optimized runtime for Marko templates.",
5
5
  "keywords": [
6
6
  "api",