tutuca 0.9.64 → 0.9.66
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 +95 -56
- package/dist/tutuca-dev.ext.js +11566 -0
- package/dist/tutuca-dev.js +113 -64
- package/dist/tutuca-dev.min.js +2 -2
- package/dist/tutuca-extra.ext.js +4184 -0
- package/dist/tutuca-extra.js +97 -56
- package/dist/tutuca-extra.min.js +2 -2
- package/dist/tutuca.ext.js +3824 -0
- package/dist/tutuca.js +97 -56
- package/dist/tutuca.min.js +2 -2
- package/package.json +17 -2
- package/skill/tutuca/core.md +28 -5
- package/skill/tutuca/testing.md +6 -3
package/dist/tutuca-cli.js
CHANGED
|
@@ -4344,49 +4344,67 @@ class Path {
|
|
|
4344
4344
|
let handlers = null;
|
|
4345
4345
|
let nodeIds = [];
|
|
4346
4346
|
let isLeafComponent = true;
|
|
4347
|
+
const crossComponent = (cidNum, vid) => {
|
|
4348
|
+
const comp = comps.getComponentForId(cidNum);
|
|
4349
|
+
let pushStep = true;
|
|
4350
|
+
if (handlers === null && (isLeafComponent || bubbles)) {
|
|
4351
|
+
handlers = findHandlers(comp, eventIds, vid, eventName);
|
|
4352
|
+
if (handlers === null) {
|
|
4353
|
+
if (isLeafComponent && stopOnNoEvent && !bubbles)
|
|
4354
|
+
return false;
|
|
4355
|
+
} else if (!isLeafComponent) {
|
|
4356
|
+
pathSteps.length = 0;
|
|
4357
|
+
pendingDyns.length = 0;
|
|
4358
|
+
pushStep = false;
|
|
4359
|
+
}
|
|
4360
|
+
}
|
|
4361
|
+
isLeafComponent = false;
|
|
4362
|
+
for (const dyn of pendingDyns)
|
|
4363
|
+
dyn.interiorCids.add(cidNum);
|
|
4364
|
+
if (pushStep) {
|
|
4365
|
+
const step = resolvePathStep(comp, nodeIds, vid);
|
|
4366
|
+
if (step) {
|
|
4367
|
+
step._originCid = cidNum;
|
|
4368
|
+
pathSteps.push(step);
|
|
4369
|
+
if (step instanceof DynStep) {
|
|
4370
|
+
step.interiorCids.add(cidNum);
|
|
4371
|
+
pendingDyns.push(step);
|
|
4372
|
+
}
|
|
4373
|
+
}
|
|
4374
|
+
}
|
|
4375
|
+
for (let i = pendingDyns.length - 1;i >= 0; i--)
|
|
4376
|
+
if (pendingDyns[i].producerCompId === cidNum)
|
|
4377
|
+
pendingDyns.splice(i, 1);
|
|
4378
|
+
eventIds = [];
|
|
4379
|
+
nodeIds = [];
|
|
4380
|
+
return true;
|
|
4381
|
+
};
|
|
4347
4382
|
while (node && node !== rootNode && depth < maxDepth) {
|
|
4348
4383
|
if (node?.dataset) {
|
|
4349
|
-
const { nid, si, sk } = parseMetaComment(node.previousSibling);
|
|
4350
4384
|
const { eid, cid, vid } = node.dataset;
|
|
4351
4385
|
if (eid !== undefined)
|
|
4352
4386
|
eventIds.push(eid);
|
|
4353
|
-
|
|
4354
|
-
|
|
4355
|
-
|
|
4356
|
-
|
|
4357
|
-
if (
|
|
4358
|
-
|
|
4359
|
-
if (
|
|
4360
|
-
|
|
4361
|
-
|
|
4362
|
-
|
|
4363
|
-
|
|
4364
|
-
|
|
4365
|
-
|
|
4366
|
-
|
|
4367
|
-
}
|
|
4368
|
-
isLeafComponent = false;
|
|
4369
|
-
for (const dyn of pendingDyns)
|
|
4370
|
-
dyn.interiorCids.add(cidNum);
|
|
4371
|
-
if (pushStep) {
|
|
4372
|
-
const step = resolvePathStep(comp, nodeIds, vid);
|
|
4373
|
-
if (step) {
|
|
4374
|
-
step._originCid = cidNum;
|
|
4375
|
-
pathSteps.push(step);
|
|
4376
|
-
if (step instanceof DynStep) {
|
|
4377
|
-
step.interiorCids.add(cidNum);
|
|
4378
|
-
pendingDyns.push(step);
|
|
4379
|
-
}
|
|
4387
|
+
const metas = metaChain(node.previousSibling);
|
|
4388
|
+
let sawComp = false;
|
|
4389
|
+
for (let i = 0;i < metas.length; i++) {
|
|
4390
|
+
const m = metas[i];
|
|
4391
|
+
if (m.$ === "Comp") {
|
|
4392
|
+
sawComp = true;
|
|
4393
|
+
if (!crossComponent(m.cid, m.vid))
|
|
4394
|
+
return NO_EVENT_INFO;
|
|
4395
|
+
const outer = metas[i + 1];
|
|
4396
|
+
if (outer?.$ === "Each" && outer.nid === m.nid) {
|
|
4397
|
+
nodeIds.push({ nid: outer.nid, si: outer.si, sk: outer.sk });
|
|
4398
|
+
i += 1;
|
|
4399
|
+
} else {
|
|
4400
|
+
nodeIds.push({ nid: m.nid });
|
|
4380
4401
|
}
|
|
4402
|
+
} else {
|
|
4403
|
+
nodeIds.push({ nid: m.nid, si: m.si, sk: m.sk });
|
|
4381
4404
|
}
|
|
4382
|
-
for (let i = pendingDyns.length - 1;i >= 0; i--)
|
|
4383
|
-
if (pendingDyns[i].producerCompId === cidNum)
|
|
4384
|
-
pendingDyns.splice(i, 1);
|
|
4385
|
-
eventIds = [];
|
|
4386
|
-
nodeIds = [];
|
|
4387
4405
|
}
|
|
4388
|
-
if (
|
|
4389
|
-
|
|
4406
|
+
if (!sawComp && cid !== undefined && !crossComponent(+cid, vid))
|
|
4407
|
+
return NO_EVENT_INFO;
|
|
4390
4408
|
}
|
|
4391
4409
|
depth += 1;
|
|
4392
4410
|
node = node.parentNode;
|
|
@@ -4400,18 +4418,17 @@ class Path {
|
|
|
4400
4418
|
return Path.fromNodeAndEventName(target, type, rNode, maxDepth, comps, stopOnNoEvent);
|
|
4401
4419
|
}
|
|
4402
4420
|
}
|
|
4403
|
-
function
|
|
4404
|
-
|
|
4405
|
-
|
|
4406
|
-
if (m !== EMPTY_META)
|
|
4407
|
-
return m;
|
|
4421
|
+
function metaChain(n) {
|
|
4422
|
+
const out = [];
|
|
4423
|
+
while (n?.nodeType === 8 && n.textContent[0] === "§") {
|
|
4408
4424
|
try {
|
|
4409
|
-
|
|
4425
|
+
out.push(JSON.parse(n.textContent.slice(1, -1)));
|
|
4410
4426
|
} catch (err) {
|
|
4411
4427
|
console.warn(err, n);
|
|
4412
4428
|
}
|
|
4429
|
+
n = n.previousSibling;
|
|
4413
4430
|
}
|
|
4414
|
-
return
|
|
4431
|
+
return out;
|
|
4415
4432
|
}
|
|
4416
4433
|
function findHandlers(comp, eventIds, vid, eventName) {
|
|
4417
4434
|
for (const eid of eventIds) {
|
|
@@ -4486,7 +4503,7 @@ class PathBuilder {
|
|
|
4486
4503
|
return this.add(new SeqStep(name, key));
|
|
4487
4504
|
}
|
|
4488
4505
|
}
|
|
4489
|
-
var NONE, BindStep, FieldStep, SeqStep, SeqAccessStep, EachBindStep, EachRenderItStep, DynStep, DynEachStep,
|
|
4506
|
+
var NONE, BindStep, FieldStep, SeqStep, SeqAccessStep, EachBindStep, EachRenderItStep, DynStep, DynEachStep, NO_EVENT_INFO, BUBBLING_EVENTS;
|
|
4490
4507
|
var init_path = __esm(() => {
|
|
4491
4508
|
NONE = Symbol("NONE");
|
|
4492
4509
|
BindStep = class BindStep extends Step {
|
|
@@ -4634,7 +4651,6 @@ var init_path = __esm(() => {
|
|
|
4634
4651
|
return producerSteps.slice(0, -1).concat(new SeqStep(last.field, key));
|
|
4635
4652
|
}
|
|
4636
4653
|
};
|
|
4637
|
-
EMPTY_META = {};
|
|
4638
4654
|
NO_EVENT_INFO = [null, null];
|
|
4639
4655
|
BUBBLING_EVENTS = new Set(["drop"]);
|
|
4640
4656
|
});
|
|
@@ -5978,7 +5994,7 @@ function compileModifiers(eventName, names) {
|
|
|
5978
5994
|
return w(this, f, args, ctx);
|
|
5979
5995
|
};
|
|
5980
5996
|
}
|
|
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) => {
|
|
5997
|
+
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
5998
|
const node = n instanceof FragmentNode ? n.childs[0] : n;
|
|
5983
5999
|
return node instanceof DomNode && HTML_BLOCK_TAGS.has(node.tagName);
|
|
5984
6000
|
}, 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;
|
|
@@ -6177,6 +6193,7 @@ var init_anode = __esm(() => {
|
|
|
6177
6193
|
super(nodeId, val);
|
|
6178
6194
|
this.viewId = viewId;
|
|
6179
6195
|
}
|
|
6196
|
+
setDataAttr(_key, _val) {}
|
|
6180
6197
|
};
|
|
6181
6198
|
RenderNode = class RenderNode extends RenderViewId {
|
|
6182
6199
|
render(stack, rx) {
|
|
@@ -6249,6 +6266,7 @@ var init_anode = __esm(() => {
|
|
|
6249
6266
|
render(stack, _rx) {
|
|
6250
6267
|
return this.val.eval(stack);
|
|
6251
6268
|
}
|
|
6269
|
+
setDataAttr(_key, _val) {}
|
|
6252
6270
|
};
|
|
6253
6271
|
RenderOnceNode = class RenderOnceNode extends BaseNode {
|
|
6254
6272
|
constructor(node) {
|
|
@@ -14192,7 +14210,12 @@ class Renderer {
|
|
|
14192
14210
|
if (cachedNode)
|
|
14193
14211
|
return cachedNode;
|
|
14194
14212
|
const view = viewName ? comp.getView(viewName) : stack.lookupBestView(comp.views, "main");
|
|
14195
|
-
const meta = this._renderMetadata({
|
|
14213
|
+
const meta = this._renderMetadata({
|
|
14214
|
+
$: "Comp",
|
|
14215
|
+
nid: node?.nodeId ?? null,
|
|
14216
|
+
cid: comp.id,
|
|
14217
|
+
vid: view.name
|
|
14218
|
+
});
|
|
14196
14219
|
const dom = new VFragment([meta, this.renderView(view, stack)]);
|
|
14197
14220
|
this.cache.set(cachePath, cacheKey, dom);
|
|
14198
14221
|
return dom;
|
|
@@ -14203,20 +14226,20 @@ class Renderer {
|
|
|
14203
14226
|
renderEach(stack, iterInfo, node, viewName) {
|
|
14204
14227
|
const { seq, filter, loopWith } = iterInfo.eval(stack);
|
|
14205
14228
|
const r = [];
|
|
14206
|
-
const iterData = loopWith.call(stack.it, seq);
|
|
14229
|
+
const { iterData, start, end } = unpackLoopResult(loopWith.call(stack.it, seq), seq);
|
|
14207
14230
|
getSeqInfo(seq)(seq, (key, value, attrName) => {
|
|
14208
14231
|
if (filter.call(stack.it, key, value, iterData)) {
|
|
14209
14232
|
const dom = this.renderIt(stack.enter(value, { key }, true), node, key, viewName);
|
|
14210
14233
|
this.pushEachEntry(r, node.nodeId, attrName, key, dom);
|
|
14211
14234
|
}
|
|
14212
|
-
});
|
|
14235
|
+
}, start, end);
|
|
14213
14236
|
return r;
|
|
14214
14237
|
}
|
|
14215
14238
|
renderEachWhen(stack, iterInfo, view, nid) {
|
|
14216
14239
|
const { seq, filter, loopWith, enricher } = iterInfo.eval(stack);
|
|
14217
14240
|
const r = [];
|
|
14218
14241
|
const it = stack.it;
|
|
14219
|
-
const iterData = loopWith.call(it, seq);
|
|
14242
|
+
const { iterData, start, end } = unpackLoopResult(loopWith.call(it, seq), seq);
|
|
14220
14243
|
getSeqInfo(seq)(seq, (key, value, attrName) => {
|
|
14221
14244
|
if (filter.call(it, key, value, iterData)) {
|
|
14222
14245
|
const cachePath = enricher ? [view, it, value] : [view, value];
|
|
@@ -14233,7 +14256,7 @@ class Renderer {
|
|
|
14233
14256
|
this.cache.set(cachePath, cacheKey, dom);
|
|
14234
14257
|
}
|
|
14235
14258
|
}
|
|
14236
|
-
});
|
|
14259
|
+
}, start, end);
|
|
14237
14260
|
return r;
|
|
14238
14261
|
}
|
|
14239
14262
|
renderView(view, stack) {
|
|
@@ -14254,13 +14277,29 @@ class Renderer {
|
|
|
14254
14277
|
return new VComment(`§${JSON.stringify(info)}§`);
|
|
14255
14278
|
}
|
|
14256
14279
|
}
|
|
14257
|
-
var DATASET_ATTRS, getSeqInfo = (seq) => isIndexed(seq) ? imIndexedIter : isKeyed(seq) ? imKeyedIter : seq?.[SEQ_INFO] ?? unkIter,
|
|
14280
|
+
var DATASET_ATTRS, getSeqInfo = (seq) => isIndexed(seq) ? imIndexedIter : isKeyed(seq) ? imKeyedIter : seq?.[SEQ_INFO] ?? unkIter, normalizeRange = (start, end, size) => {
|
|
14281
|
+
let s = start == null ? 0 : start < 0 ? size + start : start;
|
|
14282
|
+
let e = end == null ? size : end < 0 ? size + end : end;
|
|
14283
|
+
s = s < 0 ? 0 : s > size ? size : s;
|
|
14284
|
+
e = e < 0 ? 0 : e > size ? size : e;
|
|
14285
|
+
return [s, e < s ? s : e];
|
|
14286
|
+
}, unpackLoopResult = (result, seq) => {
|
|
14287
|
+
const r = result ?? {};
|
|
14288
|
+
return { iterData: r.iterData ?? { seq }, start: r.start, end: r.end };
|
|
14289
|
+
}, imIndexedIter = (seq, visit, start, end) => {
|
|
14290
|
+
const [s, e] = normalizeRange(start, end, seq.size);
|
|
14291
|
+
for (let i = s;i < e; i++)
|
|
14292
|
+
visit(i, seq.get(i), "si");
|
|
14293
|
+
}, imKeyedIter = (seq, visit, start, end) => {
|
|
14294
|
+
const [s, e] = normalizeRange(start, end, seq.size);
|
|
14258
14295
|
let i = 0;
|
|
14259
|
-
for (const v of seq)
|
|
14260
|
-
|
|
14261
|
-
|
|
14262
|
-
|
|
14263
|
-
|
|
14296
|
+
for (const [k, v] of seq.toSeq().entries()) {
|
|
14297
|
+
if (i >= e)
|
|
14298
|
+
break;
|
|
14299
|
+
if (i >= s)
|
|
14300
|
+
visit(k, v, "sk");
|
|
14301
|
+
i++;
|
|
14302
|
+
}
|
|
14264
14303
|
}, unkIter = () => {}, SEQ_INFO;
|
|
14265
14304
|
var init_renderer = __esm(() => {
|
|
14266
14305
|
init_immutable();
|