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.
- package/dist/tutuca-cli.js +27 -11
- package/dist/tutuca-dev.js +46 -20
- package/dist/tutuca-dev.min.js +2 -2
- package/dist/tutuca-extra.js +30 -12
- package/dist/tutuca-extra.min.js +2 -2
- package/dist/tutuca.js +30 -12
- package/dist/tutuca.min.js +2 -2
- package/package.json +1 -1
- package/skill/tutuca/core.md +28 -5
- package/skill/tutuca/testing.md +6 -3
package/dist/tutuca-cli.js
CHANGED
|
@@ -5978,7 +5978,7 @@ function compileModifiers(eventName, names) {
|
|
|
5978
5978
|
return w(this, f, args, ctx);
|
|
5979
5979
|
};
|
|
5980
5980
|
}
|
|
5981
|
-
var TextNode, CommentNode, ChildsNode, DomNode, FragmentNode, maybeFragment = (xs) => xs.length === 1 ? xs[0] : new FragmentNode(xs), VALID_NODE_RE, ANode, MacroNode, RenderViewId, RenderNode, RenderItNode, RenderEachNode, RenderTextNode, RenderOnceNode, WrapperNode, ShowNode, HideNode, PushViewNameNode, SlotNode, ScopeNode, EachNode, filterAlwaysTrue = (_v, _k, _seq) => true, nullLoopWith = (seq) => ({ seq }), X_OP_CONSUMED, X_OP_WRAPPABLE, X_ATTR_WRAPPERS, WRAPPER_NODES, _htmlBlockTags = "ADDRESS,ARTICLE,ASIDE,BLOCKQUOTE,CAPTION,COL,COLGROUP,DETAILS,DIALOG,DIV,DD,DL,DT,FIELDSET,FIGCAPTION,FIGURE,FOOTER,FORM,H1,H2,H3,H4,H5,H6,HEADER,HGROUP,HR,LEGEND,LI,MAIN,MENU,NAV,OL,P,PRE,SECTION,SUMMARY,TABLE,TBODY,TD,TFOOT,TH,THEAD,TR,UL", HTML_BLOCK_TAGS, isBlockDomNode = (n) => {
|
|
5981
|
+
var TextNode, CommentNode, ChildsNode, DomNode, FragmentNode, maybeFragment = (xs) => xs.length === 1 ? xs[0] : new FragmentNode(xs), VALID_NODE_RE, ANode, MacroNode, RenderViewId, RenderNode, RenderItNode, RenderEachNode, RenderTextNode, RenderOnceNode, WrapperNode, ShowNode, HideNode, PushViewNameNode, SlotNode, ScopeNode, EachNode, filterAlwaysTrue = (_v, _k, _seq) => true, nullLoopWith = (seq) => ({ iterData: { seq } }), X_OP_CONSUMED, X_OP_WRAPPABLE, X_ATTR_WRAPPERS, WRAPPER_NODES, _htmlBlockTags = "ADDRESS,ARTICLE,ASIDE,BLOCKQUOTE,CAPTION,COL,COLGROUP,DETAILS,DIALOG,DIV,DD,DL,DT,FIELDSET,FIGCAPTION,FIGURE,FOOTER,FORM,H1,H2,H3,H4,H5,H6,HEADER,HGROUP,HR,LEGEND,LI,MAIN,MENU,NAV,OL,P,PRE,SECTION,SUMMARY,TABLE,TBODY,TD,TFOOT,TH,THEAD,TR,UL", HTML_BLOCK_TAGS, isBlockDomNode = (n) => {
|
|
5982
5982
|
const node = n instanceof FragmentNode ? n.childs[0] : n;
|
|
5983
5983
|
return node instanceof DomNode && HTML_BLOCK_TAGS.has(node.tagName);
|
|
5984
5984
|
}, isMac, fwdIfCtxPred = (pred) => (w) => (that, f, args, ctx) => pred(ctx) ? w(that, f, args, ctx) : that, fwdIfKey = (keyName) => fwdIfCtxPred((ctx) => ctx.e.key === keyName), fwdCtrl, fwdMeta, fwdAlt, metaWraps, MOD_WRAPPERS_BY_EVENT, identityModifierWrapper = (f, _ctx) => f;
|
|
@@ -14203,20 +14203,20 @@ class Renderer {
|
|
|
14203
14203
|
renderEach(stack, iterInfo, node, viewName) {
|
|
14204
14204
|
const { seq, filter, loopWith } = iterInfo.eval(stack);
|
|
14205
14205
|
const r = [];
|
|
14206
|
-
const iterData = loopWith.call(stack.it, seq);
|
|
14206
|
+
const { iterData, start, end } = unpackLoopResult(loopWith.call(stack.it, seq), seq);
|
|
14207
14207
|
getSeqInfo(seq)(seq, (key, value, attrName) => {
|
|
14208
14208
|
if (filter.call(stack.it, key, value, iterData)) {
|
|
14209
14209
|
const dom = this.renderIt(stack.enter(value, { key }, true), node, key, viewName);
|
|
14210
14210
|
this.pushEachEntry(r, node.nodeId, attrName, key, dom);
|
|
14211
14211
|
}
|
|
14212
|
-
});
|
|
14212
|
+
}, start, end);
|
|
14213
14213
|
return r;
|
|
14214
14214
|
}
|
|
14215
14215
|
renderEachWhen(stack, iterInfo, view, nid) {
|
|
14216
14216
|
const { seq, filter, loopWith, enricher } = iterInfo.eval(stack);
|
|
14217
14217
|
const r = [];
|
|
14218
14218
|
const it = stack.it;
|
|
14219
|
-
const iterData = loopWith.call(it, seq);
|
|
14219
|
+
const { iterData, start, end } = unpackLoopResult(loopWith.call(it, seq), seq);
|
|
14220
14220
|
getSeqInfo(seq)(seq, (key, value, attrName) => {
|
|
14221
14221
|
if (filter.call(it, key, value, iterData)) {
|
|
14222
14222
|
const cachePath = enricher ? [view, it, value] : [view, value];
|
|
@@ -14233,7 +14233,7 @@ class Renderer {
|
|
|
14233
14233
|
this.cache.set(cachePath, cacheKey, dom);
|
|
14234
14234
|
}
|
|
14235
14235
|
}
|
|
14236
|
-
});
|
|
14236
|
+
}, start, end);
|
|
14237
14237
|
return r;
|
|
14238
14238
|
}
|
|
14239
14239
|
renderView(view, stack) {
|
|
@@ -14254,13 +14254,29 @@ class Renderer {
|
|
|
14254
14254
|
return new VComment(`§${JSON.stringify(info)}§`);
|
|
14255
14255
|
}
|
|
14256
14256
|
}
|
|
14257
|
-
var DATASET_ATTRS, getSeqInfo = (seq) => isIndexed(seq) ? imIndexedIter : isKeyed(seq) ? imKeyedIter : seq?.[SEQ_INFO] ?? unkIter,
|
|
14257
|
+
var DATASET_ATTRS, getSeqInfo = (seq) => isIndexed(seq) ? imIndexedIter : isKeyed(seq) ? imKeyedIter : seq?.[SEQ_INFO] ?? unkIter, normalizeRange = (start, end, size) => {
|
|
14258
|
+
let s = start == null ? 0 : start < 0 ? size + start : start;
|
|
14259
|
+
let e = end == null ? size : end < 0 ? size + end : end;
|
|
14260
|
+
s = s < 0 ? 0 : s > size ? size : s;
|
|
14261
|
+
e = e < 0 ? 0 : e > size ? size : e;
|
|
14262
|
+
return [s, e < s ? s : e];
|
|
14263
|
+
}, unpackLoopResult = (result, seq) => {
|
|
14264
|
+
const r = result ?? {};
|
|
14265
|
+
return { iterData: r.iterData ?? { seq }, start: r.start, end: r.end };
|
|
14266
|
+
}, imIndexedIter = (seq, visit, start, end) => {
|
|
14267
|
+
const [s, e] = normalizeRange(start, end, seq.size);
|
|
14268
|
+
for (let i = s;i < e; i++)
|
|
14269
|
+
visit(i, seq.get(i), "si");
|
|
14270
|
+
}, imKeyedIter = (seq, visit, start, end) => {
|
|
14271
|
+
const [s, e] = normalizeRange(start, end, seq.size);
|
|
14258
14272
|
let i = 0;
|
|
14259
|
-
for (const v of seq)
|
|
14260
|
-
|
|
14261
|
-
|
|
14262
|
-
|
|
14263
|
-
|
|
14273
|
+
for (const [k, v] of seq.toSeq().entries()) {
|
|
14274
|
+
if (i >= e)
|
|
14275
|
+
break;
|
|
14276
|
+
if (i >= s)
|
|
14277
|
+
visit(k, v, "sk");
|
|
14278
|
+
i++;
|
|
14279
|
+
}
|
|
14264
14280
|
}, unkIter = () => {}, SEQ_INFO;
|
|
14265
14281
|
var init_renderer = __esm(() => {
|
|
14266
14282
|
init_immutable();
|
package/dist/tutuca-dev.js
CHANGED
|
@@ -9678,7 +9678,7 @@ class IterInfo {
|
|
|
9678
9678
|
}
|
|
9679
9679
|
}
|
|
9680
9680
|
var filterAlwaysTrue = (_v, _k, _seq) => true;
|
|
9681
|
-
var nullLoopWith = (seq) => ({ seq });
|
|
9681
|
+
var nullLoopWith = (seq) => ({ iterData: { seq } });
|
|
9682
9682
|
var X_OP_CONSUMED = {
|
|
9683
9683
|
slot: new Set,
|
|
9684
9684
|
text: new Set,
|
|
@@ -14941,20 +14941,20 @@ class Renderer {
|
|
|
14941
14941
|
renderEach(stack, iterInfo, node, viewName) {
|
|
14942
14942
|
const { seq, filter, loopWith } = iterInfo.eval(stack);
|
|
14943
14943
|
const r = [];
|
|
14944
|
-
const iterData = loopWith.call(stack.it, seq);
|
|
14944
|
+
const { iterData, start, end } = unpackLoopResult(loopWith.call(stack.it, seq), seq);
|
|
14945
14945
|
getSeqInfo(seq)(seq, (key, value, attrName) => {
|
|
14946
14946
|
if (filter.call(stack.it, key, value, iterData)) {
|
|
14947
14947
|
const dom = this.renderIt(stack.enter(value, { key }, true), node, key, viewName);
|
|
14948
14948
|
this.pushEachEntry(r, node.nodeId, attrName, key, dom);
|
|
14949
14949
|
}
|
|
14950
|
-
});
|
|
14950
|
+
}, start, end);
|
|
14951
14951
|
return r;
|
|
14952
14952
|
}
|
|
14953
14953
|
renderEachWhen(stack, iterInfo, view, nid) {
|
|
14954
14954
|
const { seq, filter, loopWith, enricher } = iterInfo.eval(stack);
|
|
14955
14955
|
const r = [];
|
|
14956
14956
|
const it = stack.it;
|
|
14957
|
-
const iterData = loopWith.call(it, seq);
|
|
14957
|
+
const { iterData, start, end } = unpackLoopResult(loopWith.call(it, seq), seq);
|
|
14958
14958
|
getSeqInfo(seq)(seq, (key, value, attrName) => {
|
|
14959
14959
|
if (filter.call(it, key, value, iterData)) {
|
|
14960
14960
|
const cachePath = enricher ? [view, it, value] : [view, value];
|
|
@@ -14971,7 +14971,7 @@ class Renderer {
|
|
|
14971
14971
|
this.cache.set(cachePath, cacheKey, dom);
|
|
14972
14972
|
}
|
|
14973
14973
|
}
|
|
14974
|
-
});
|
|
14974
|
+
}, start, end);
|
|
14975
14975
|
return r;
|
|
14976
14976
|
}
|
|
14977
14977
|
renderView(view, stack) {
|
|
@@ -14993,14 +14993,32 @@ class Renderer {
|
|
|
14993
14993
|
}
|
|
14994
14994
|
}
|
|
14995
14995
|
var getSeqInfo = (seq) => isIndexed(seq) ? imIndexedIter : isKeyed(seq) ? imKeyedIter : seq?.[SEQ_INFO] ?? unkIter;
|
|
14996
|
-
var
|
|
14996
|
+
var normalizeRange = (start, end, size) => {
|
|
14997
|
+
let s = start == null ? 0 : start < 0 ? size + start : start;
|
|
14998
|
+
let e = end == null ? size : end < 0 ? size + end : end;
|
|
14999
|
+
s = s < 0 ? 0 : s > size ? size : s;
|
|
15000
|
+
e = e < 0 ? 0 : e > size ? size : e;
|
|
15001
|
+
return [s, e < s ? s : e];
|
|
15002
|
+
};
|
|
15003
|
+
var unpackLoopResult = (result, seq) => {
|
|
15004
|
+
const r = result ?? {};
|
|
15005
|
+
return { iterData: r.iterData ?? { seq }, start: r.start, end: r.end };
|
|
15006
|
+
};
|
|
15007
|
+
var imIndexedIter = (seq, visit, start, end) => {
|
|
15008
|
+
const [s, e] = normalizeRange(start, end, seq.size);
|
|
15009
|
+
for (let i = s;i < e; i++)
|
|
15010
|
+
visit(i, seq.get(i), "si");
|
|
15011
|
+
};
|
|
15012
|
+
var imKeyedIter = (seq, visit, start, end) => {
|
|
15013
|
+
const [s, e] = normalizeRange(start, end, seq.size);
|
|
14997
15014
|
let i = 0;
|
|
14998
|
-
for (const v of seq)
|
|
14999
|
-
|
|
15000
|
-
|
|
15001
|
-
|
|
15002
|
-
|
|
15003
|
-
|
|
15015
|
+
for (const [k, v] of seq.toSeq().entries()) {
|
|
15016
|
+
if (i >= e)
|
|
15017
|
+
break;
|
|
15018
|
+
if (i >= s)
|
|
15019
|
+
visit(k, v, "sk");
|
|
15020
|
+
i++;
|
|
15021
|
+
}
|
|
15004
15022
|
};
|
|
15005
15023
|
var unkIter = () => {};
|
|
15006
15024
|
var SEQ_INFO = Symbol.for("tutuca.seqInfo");
|
|
@@ -15304,14 +15322,22 @@ function docComponents(normalized, { name = null } = {}) {
|
|
|
15304
15322
|
}
|
|
15305
15323
|
// src/util/testing.js
|
|
15306
15324
|
var filterAlwaysTrue2 = () => true;
|
|
15307
|
-
var nullLoopWith2 = (seq) => ({ seq });
|
|
15308
|
-
var plainArrayIter = (seq, visit) => {
|
|
15309
|
-
|
|
15325
|
+
var nullLoopWith2 = (seq) => ({ iterData: { seq } });
|
|
15326
|
+
var plainArrayIter = (seq, visit, start, end) => {
|
|
15327
|
+
const [s, e] = normalizeRange(start, end, seq.length);
|
|
15328
|
+
for (let i = s;i < e; i++)
|
|
15310
15329
|
visit(i, seq[i]);
|
|
15311
15330
|
};
|
|
15312
|
-
var plainMapIter = (seq, visit) => {
|
|
15313
|
-
|
|
15314
|
-
|
|
15331
|
+
var plainMapIter = (seq, visit, start, end) => {
|
|
15332
|
+
const [s, e] = normalizeRange(start, end, seq.size);
|
|
15333
|
+
let i = 0;
|
|
15334
|
+
for (const [k, v] of seq.entries()) {
|
|
15335
|
+
if (i >= e)
|
|
15336
|
+
break;
|
|
15337
|
+
if (i >= s)
|
|
15338
|
+
visit(k, v);
|
|
15339
|
+
i++;
|
|
15340
|
+
}
|
|
15315
15341
|
};
|
|
15316
15342
|
function pickIter(seq) {
|
|
15317
15343
|
if (Array.isArray(seq))
|
|
@@ -15334,7 +15360,7 @@ function collectIterBindings(Comp, compInstance, seq, opts = {}) {
|
|
|
15334
15360
|
const loopWithFn = resolveAlter(Comp, opts.loopWith) ?? nullLoopWith2;
|
|
15335
15361
|
const enrichFn = resolveAlter(Comp, opts.enrichWith);
|
|
15336
15362
|
const it = compInstance;
|
|
15337
|
-
const iterData = loopWithFn.call(it, seq);
|
|
15363
|
+
const { iterData, start, end } = unpackLoopResult(loopWithFn.call(it, seq), seq);
|
|
15338
15364
|
const out = [];
|
|
15339
15365
|
const iter = pickIter(seq);
|
|
15340
15366
|
iter(seq, (key, value) => {
|
|
@@ -15344,7 +15370,7 @@ function collectIterBindings(Comp, compInstance, seq, opts = {}) {
|
|
|
15344
15370
|
if (enrichFn)
|
|
15345
15371
|
enrichFn.call(it, binds, key, value, iterData);
|
|
15346
15372
|
out.push(binds);
|
|
15347
|
-
});
|
|
15373
|
+
}, start, end);
|
|
15348
15374
|
return out;
|
|
15349
15375
|
}
|
|
15350
15376
|
|