tutuca 0.9.64 → 0.9.65

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.
@@ -6383,7 +6383,7 @@ class IterInfo {
6383
6383
  }
6384
6384
  }
6385
6385
  var filterAlwaysTrue = (_v, _k, _seq) => true;
6386
- var nullLoopWith = (seq) => ({ seq });
6386
+ var nullLoopWith = (seq) => ({ iterData: { seq } });
6387
6387
  var X_OP_CONSUMED = {
6388
6388
  slot: new Set,
6389
6389
  text: new Set,
@@ -8099,20 +8099,20 @@ class Renderer {
8099
8099
  renderEach(stack, iterInfo, node, viewName) {
8100
8100
  const { seq, filter, loopWith } = iterInfo.eval(stack);
8101
8101
  const r = [];
8102
- const iterData = loopWith.call(stack.it, seq);
8102
+ const { iterData, start, end } = unpackLoopResult(loopWith.call(stack.it, seq), seq);
8103
8103
  getSeqInfo(seq)(seq, (key, value, attrName) => {
8104
8104
  if (filter.call(stack.it, key, value, iterData)) {
8105
8105
  const dom = this.renderIt(stack.enter(value, { key }, true), node, key, viewName);
8106
8106
  this.pushEachEntry(r, node.nodeId, attrName, key, dom);
8107
8107
  }
8108
- });
8108
+ }, start, end);
8109
8109
  return r;
8110
8110
  }
8111
8111
  renderEachWhen(stack, iterInfo, view, nid) {
8112
8112
  const { seq, filter, loopWith, enricher } = iterInfo.eval(stack);
8113
8113
  const r = [];
8114
8114
  const it = stack.it;
8115
- const iterData = loopWith.call(it, seq);
8115
+ const { iterData, start, end } = unpackLoopResult(loopWith.call(it, seq), seq);
8116
8116
  getSeqInfo(seq)(seq, (key, value, attrName) => {
8117
8117
  if (filter.call(it, key, value, iterData)) {
8118
8118
  const cachePath = enricher ? [view, it, value] : [view, value];
@@ -8129,7 +8129,7 @@ class Renderer {
8129
8129
  this.cache.set(cachePath, cacheKey, dom);
8130
8130
  }
8131
8131
  }
8132
- });
8132
+ }, start, end);
8133
8133
  return r;
8134
8134
  }
8135
8135
  renderView(view, stack) {
@@ -8151,14 +8151,32 @@ class Renderer {
8151
8151
  }
8152
8152
  }
8153
8153
  var getSeqInfo = (seq) => isIndexed(seq) ? imIndexedIter : isKeyed(seq) ? imKeyedIter : seq?.[SEQ_INFO] ?? unkIter;
8154
- var imIndexedIter = (seq, visit) => {
8155
- let i = 0;
8156
- for (const v of seq)
8157
- visit(i++, v, "si");
8154
+ var normalizeRange = (start, end, size) => {
8155
+ let s = start == null ? 0 : start < 0 ? size + start : start;
8156
+ let e = end == null ? size : end < 0 ? size + end : end;
8157
+ s = s < 0 ? 0 : s > size ? size : s;
8158
+ e = e < 0 ? 0 : e > size ? size : e;
8159
+ return [s, e < s ? s : e];
8160
+ };
8161
+ var unpackLoopResult = (result, seq) => {
8162
+ const r = result ?? {};
8163
+ return { iterData: r.iterData ?? { seq }, start: r.start, end: r.end };
8158
8164
  };
8159
- var imKeyedIter = (seq, visit) => {
8160
- for (const [k, v] of seq.toSeq().entries())
8161
- visit(k, v, "sk");
8165
+ var imIndexedIter = (seq, visit, start, end) => {
8166
+ const [s, e] = normalizeRange(start, end, seq.size);
8167
+ for (let i = s;i < e; i++)
8168
+ visit(i, seq.get(i), "si");
8169
+ };
8170
+ var imKeyedIter = (seq, visit, start, end) => {
8171
+ const [s, e] = normalizeRange(start, end, seq.size);
8172
+ let i = 0;
8173
+ for (const [k, v] of seq.toSeq().entries()) {
8174
+ if (i >= e)
8175
+ break;
8176
+ if (i >= s)
8177
+ visit(k, v, "sk");
8178
+ i++;
8179
+ }
8162
8180
  };
8163
8181
  var unkIter = () => {};
8164
8182
  var SEQ_INFO = Symbol.for("tutuca.seqInfo");