@graphrefly/graphrefly 0.11.0 → 0.13.0
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/{chunk-FMVFRP7L.js → chunk-5RN7NBNG.js} +5 -5
- package/dist/{chunk-UG2QZMRN.js → chunk-6B2ZCCNN.js} +40 -39
- package/dist/chunk-6B2ZCCNN.js.map +1 -0
- package/dist/{chunk-2VHNCFGG.js → chunk-H4UFM6WD.js} +46 -17
- package/dist/chunk-H4UFM6WD.js.map +1 -0
- package/dist/{chunk-PZCDQD2U.js → chunk-HA6QMDKQ.js} +4 -4
- package/dist/{chunk-5WXTWOD7.js → chunk-KNGOJEYP.js} +2 -2
- package/dist/{chunk-OHUECHWY.js → chunk-PFMXKG4Y.js} +2 -2
- package/dist/{chunk-U5HFZGAQ.js → chunk-QOGWU5K7.js} +3 -3
- package/dist/{chunk-3WACHRHV.js → chunk-UPC5OEB5.js} +17 -17
- package/dist/chunk-UPC5OEB5.js.map +1 -0
- package/dist/{chunk-2OTXEZQO.js → chunk-UQI4GAHD.js} +3 -3
- package/dist/compat/nestjs/index.cjs +37 -37
- package/dist/compat/nestjs/index.cjs.map +1 -1
- package/dist/compat/nestjs/index.d.cts +4 -4
- package/dist/compat/nestjs/index.d.ts +4 -4
- package/dist/compat/nestjs/index.js +7 -7
- package/dist/core/index.cjs +39 -39
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +2 -2
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +5 -5
- package/dist/extra/index.cjs +79 -51
- package/dist/extra/index.cjs.map +1 -1
- package/dist/extra/index.d.cts +4 -4
- package/dist/extra/index.d.ts +4 -4
- package/dist/extra/index.js +5 -5
- package/dist/graph/index.cjs +37 -37
- package/dist/graph/index.cjs.map +1 -1
- package/dist/graph/index.d.cts +3 -3
- package/dist/graph/index.d.ts +3 -3
- package/dist/graph/index.js +4 -4
- package/dist/{graph-DXT95WZ3.d.ts → graph-BXIK5Dq5.d.ts} +1 -1
- package/dist/{graph-BE10ujU9.d.cts → graph-BhADtuFU.d.cts} +1 -1
- package/dist/{index-QfbXNW1N.d.cts → index-BNB0KjKe.d.ts} +24 -21
- package/dist/{index-C0_7g9sj.d.ts → index-BkToATim.d.ts} +1 -1
- package/dist/{index-Bbgvinsi.d.ts → index-CKyYg4IP.d.ts} +17 -13
- package/dist/{index-CCvzN5GB.d.cts → index-DANO9Gg7.d.cts} +2 -2
- package/dist/{index-DpZozxaJ.d.cts → index-DBhLjWSV.d.cts} +17 -13
- package/dist/{index-Dzdm20sx.d.ts → index-DKIyo4Bq.d.cts} +24 -21
- package/dist/{index-53cDGX7F.d.ts → index-DSp5R3Xq.d.ts} +3 -3
- package/dist/{index-aBZ2RoP0.d.cts → index-Dqemj9q0.d.cts} +3 -3
- package/dist/{index-nRulwTr-.d.cts → index-Wa8jXne6.d.cts} +1 -1
- package/dist/{index-B10Q0sQB.d.ts → index-fYObbpUw.d.ts} +2 -2
- package/dist/index.cjs +283 -71
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +85 -15
- package/dist/index.d.ts +85 -15
- package/dist/index.js +200 -16
- package/dist/index.js.map +1 -1
- package/dist/{meta-BcuDhtwu.d.cts → meta-CrZUQAJ6.d.cts} +1 -1
- package/dist/{meta-BcuDhtwu.d.ts → meta-CrZUQAJ6.d.ts} +1 -1
- package/dist/patterns/reactive-layout/index.cjs +50 -50
- package/dist/patterns/reactive-layout/index.cjs.map +1 -1
- package/dist/patterns/reactive-layout/index.d.cts +3 -3
- package/dist/patterns/reactive-layout/index.d.ts +3 -3
- package/dist/patterns/reactive-layout/index.js +4 -4
- package/dist/{reactive-log-OULQssZg.d.cts → reactive-log-ChbpUrY2.d.cts} +2 -2
- package/dist/{reactive-log-Cu0VdqkT.d.ts → reactive-log-DV--7BWd.d.ts} +2 -2
- package/package.json +1 -1
- package/dist/chunk-2VHNCFGG.js.map +0 -1
- package/dist/chunk-3WACHRHV.js.map +0 -1
- package/dist/chunk-UG2QZMRN.js.map +0 -1
- /package/dist/{chunk-FMVFRP7L.js.map → chunk-5RN7NBNG.js.map} +0 -0
- /package/dist/{chunk-PZCDQD2U.js.map → chunk-HA6QMDKQ.js.map} +0 -0
- /package/dist/{chunk-5WXTWOD7.js.map → chunk-KNGOJEYP.js.map} +0 -0
- /package/dist/{chunk-OHUECHWY.js.map → chunk-PFMXKG4Y.js.map} +0 -0
- /package/dist/{chunk-U5HFZGAQ.js.map → chunk-QOGWU5K7.js.map} +0 -0
- /package/dist/{chunk-2OTXEZQO.js.map → chunk-UQI4GAHD.js.map} +0 -0
|
@@ -148,7 +148,7 @@ declare function accessHintForGuard(guard: NodeGuard): string;
|
|
|
148
148
|
* | 3 | COMPLETE, ERROR | Terminal lifecycle | Deferred to after phase-2 |
|
|
149
149
|
* | 4 | TEARDOWN | Destruction | Immediate (usually sent alone) |
|
|
150
150
|
*
|
|
151
|
-
* **Rule:** Within `
|
|
151
|
+
* **Rule:** Within `downWithBatch`, messages are partitioned by tier and delivered
|
|
152
152
|
* in tier order. This ensures phase-2 values (DATA/RESOLVED) reach sinks before
|
|
153
153
|
* terminal signals (COMPLETE/ERROR) mark the node as done, preventing the
|
|
154
154
|
* "COMPLETE-before-DATA" class of bugs. Sources that emit in canonical order
|
|
@@ -148,7 +148,7 @@ declare function accessHintForGuard(guard: NodeGuard): string;
|
|
|
148
148
|
* | 3 | COMPLETE, ERROR | Terminal lifecycle | Deferred to after phase-2 |
|
|
149
149
|
* | 4 | TEARDOWN | Destruction | Immediate (usually sent alone) |
|
|
150
150
|
*
|
|
151
|
-
* **Rule:** Within `
|
|
151
|
+
* **Rule:** Within `downWithBatch`, messages are partitioned by tier and delivered
|
|
152
152
|
* in tier order. This ensures phase-2 values (DATA/RESOLVED) reach sinks before
|
|
153
153
|
* terminal signals (COMPLETE/ERROR) mark the node as done, preventing the
|
|
154
154
|
* "COMPLETE-before-DATA" class of bugs. Sources that emit in canonical order
|
|
@@ -368,12 +368,12 @@ function partitionForBatch(messages) {
|
|
|
368
368
|
}
|
|
369
369
|
return { immediate, deferred, terminal };
|
|
370
370
|
}
|
|
371
|
-
function
|
|
371
|
+
function downWithBatch(sink, messages, phase = 2, options) {
|
|
372
372
|
if (messages.length === 0) {
|
|
373
373
|
return;
|
|
374
374
|
}
|
|
375
375
|
if (options?.strategy === "sequential") {
|
|
376
|
-
|
|
376
|
+
_downSequential(sink, messages, phase);
|
|
377
377
|
return;
|
|
378
378
|
}
|
|
379
379
|
const queue = phase === 3 ? pendingPhase3 : pendingPhase2;
|
|
@@ -381,61 +381,61 @@ function emitWithBatch(emit, messages, phase = 2, options) {
|
|
|
381
381
|
const t = messages[0][0];
|
|
382
382
|
if (t === DATA || t === RESOLVED) {
|
|
383
383
|
if (isBatching()) {
|
|
384
|
-
queue.push(() =>
|
|
384
|
+
queue.push(() => sink(messages));
|
|
385
385
|
} else {
|
|
386
|
-
|
|
386
|
+
sink(messages);
|
|
387
387
|
}
|
|
388
388
|
} else if (isTerminalMessage(t)) {
|
|
389
389
|
if (isBatching()) {
|
|
390
|
-
queue.push(() =>
|
|
390
|
+
queue.push(() => sink(messages));
|
|
391
391
|
} else {
|
|
392
|
-
|
|
392
|
+
sink(messages);
|
|
393
393
|
}
|
|
394
394
|
} else {
|
|
395
|
-
|
|
395
|
+
sink(messages);
|
|
396
396
|
}
|
|
397
397
|
return;
|
|
398
398
|
}
|
|
399
399
|
const { immediate, deferred, terminal } = partitionForBatch(messages);
|
|
400
400
|
if (immediate.length > 0) {
|
|
401
|
-
|
|
401
|
+
sink(immediate);
|
|
402
402
|
}
|
|
403
403
|
if (isBatching()) {
|
|
404
404
|
if (deferred.length > 0) {
|
|
405
|
-
queue.push(() =>
|
|
405
|
+
queue.push(() => sink(deferred));
|
|
406
406
|
}
|
|
407
407
|
if (terminal.length > 0) {
|
|
408
|
-
queue.push(() =>
|
|
408
|
+
queue.push(() => sink(terminal));
|
|
409
409
|
}
|
|
410
410
|
} else {
|
|
411
411
|
if (deferred.length > 0) {
|
|
412
|
-
|
|
412
|
+
sink(deferred);
|
|
413
413
|
}
|
|
414
414
|
if (terminal.length > 0) {
|
|
415
|
-
|
|
415
|
+
sink(terminal);
|
|
416
416
|
}
|
|
417
417
|
}
|
|
418
418
|
}
|
|
419
|
-
function
|
|
419
|
+
function _downSequential(sink, messages, phase = 2) {
|
|
420
420
|
const dataQueue = phase === 3 ? pendingPhase3 : pendingPhase2;
|
|
421
421
|
for (const msg of messages) {
|
|
422
422
|
const tier = messageTier(msg[0]);
|
|
423
423
|
if (tier === 2) {
|
|
424
424
|
if (isBatching()) {
|
|
425
425
|
const m = msg;
|
|
426
|
-
dataQueue.push(() =>
|
|
426
|
+
dataQueue.push(() => sink([m]));
|
|
427
427
|
} else {
|
|
428
|
-
|
|
428
|
+
sink([msg]);
|
|
429
429
|
}
|
|
430
430
|
} else if (tier >= 3) {
|
|
431
431
|
if (isBatching()) {
|
|
432
432
|
const m = msg;
|
|
433
|
-
pendingPhase3.push(() =>
|
|
433
|
+
pendingPhase3.push(() => sink([m]));
|
|
434
434
|
} else {
|
|
435
|
-
|
|
435
|
+
sink([msg]);
|
|
436
436
|
}
|
|
437
437
|
} else {
|
|
438
|
-
|
|
438
|
+
sink([msg]);
|
|
439
439
|
}
|
|
440
440
|
}
|
|
441
441
|
}
|
|
@@ -663,7 +663,7 @@ var NodeImpl = class {
|
|
|
663
663
|
_singleDepSinks = /* @__PURE__ */ new WeakSet();
|
|
664
664
|
_upstreamUnsubs = [];
|
|
665
665
|
_actions;
|
|
666
|
-
|
|
666
|
+
_boundDownToSinks;
|
|
667
667
|
_inspectorHook;
|
|
668
668
|
_versioning;
|
|
669
669
|
_hashFn;
|
|
@@ -710,7 +710,7 @@ var NodeImpl = class {
|
|
|
710
710
|
},
|
|
711
711
|
emit(value) {
|
|
712
712
|
self._manualEmitUsed = true;
|
|
713
|
-
self.
|
|
713
|
+
self._downAutoValue(value);
|
|
714
714
|
},
|
|
715
715
|
up(messages) {
|
|
716
716
|
self._upInternal(messages);
|
|
@@ -718,7 +718,7 @@ var NodeImpl = class {
|
|
|
718
718
|
};
|
|
719
719
|
this.down = this.down.bind(this);
|
|
720
720
|
this.up = this.up.bind(this);
|
|
721
|
-
this.
|
|
721
|
+
this._boundDownToSinks = this._downToSinks.bind(this);
|
|
722
722
|
}
|
|
723
723
|
get name() {
|
|
724
724
|
return this._registryName ?? this._optsName;
|
|
@@ -824,12 +824,12 @@ var NodeImpl = class {
|
|
|
824
824
|
if (sinkMessages[i][0] !== DIRTY) filtered.push(sinkMessages[i]);
|
|
825
825
|
}
|
|
826
826
|
if (filtered.length > 0) {
|
|
827
|
-
|
|
827
|
+
downWithBatch(this._boundDownToSinks, filtered);
|
|
828
828
|
}
|
|
829
829
|
return;
|
|
830
830
|
}
|
|
831
831
|
}
|
|
832
|
-
|
|
832
|
+
downWithBatch(this._boundDownToSinks, sinkMessages);
|
|
833
833
|
}
|
|
834
834
|
subscribe(sink, hints) {
|
|
835
835
|
if (hints?.actor != null && this._guard != null) {
|
|
@@ -916,7 +916,7 @@ var NodeImpl = class {
|
|
|
916
916
|
this._disconnectUpstream();
|
|
917
917
|
}
|
|
918
918
|
// --- Private methods (prototype, _ prefix) ---
|
|
919
|
-
|
|
919
|
+
_downToSinks(messages) {
|
|
920
920
|
if (this._sinks == null) return;
|
|
921
921
|
if (typeof this._sinks === "function") {
|
|
922
922
|
this._sinks(messages);
|
|
@@ -978,7 +978,7 @@ var NodeImpl = class {
|
|
|
978
978
|
_canSkipDirty() {
|
|
979
979
|
return this._sinkCount === 1 && this._singleDepSinkCount === 1;
|
|
980
980
|
}
|
|
981
|
-
|
|
981
|
+
_downAutoValue(value) {
|
|
982
982
|
const wasDirty = this._status === "dirty";
|
|
983
983
|
let unchanged;
|
|
984
984
|
try {
|
|
@@ -1031,7 +1031,7 @@ var NodeImpl = class {
|
|
|
1031
1031
|
this._cleanup = out.cleanup;
|
|
1032
1032
|
if (this._manualEmitUsed) return;
|
|
1033
1033
|
if ("value" in out) {
|
|
1034
|
-
this.
|
|
1034
|
+
this._downAutoValue(out.value);
|
|
1035
1035
|
}
|
|
1036
1036
|
return;
|
|
1037
1037
|
}
|
|
@@ -1041,7 +1041,7 @@ var NodeImpl = class {
|
|
|
1041
1041
|
}
|
|
1042
1042
|
if (this._manualEmitUsed) return;
|
|
1043
1043
|
if (out === void 0) return;
|
|
1044
|
-
this.
|
|
1044
|
+
this._downAutoValue(out);
|
|
1045
1045
|
} catch (err) {
|
|
1046
1046
|
const errMsg = err instanceof Error ? err.message : String(err);
|
|
1047
1047
|
const wrapped = new Error(`Node "${this.name}": fn threw: ${errMsg}`, { cause: err });
|
|
@@ -1223,7 +1223,7 @@ var DynamicNodeImpl = class {
|
|
|
1223
1223
|
_singleDepSinks = /* @__PURE__ */ new WeakSet();
|
|
1224
1224
|
// Actions object (for onMessage handler)
|
|
1225
1225
|
_actions;
|
|
1226
|
-
|
|
1226
|
+
_boundDownToSinks;
|
|
1227
1227
|
// Mutable state
|
|
1228
1228
|
_cached = NO_VALUE;
|
|
1229
1229
|
_status = "disconnected";
|
|
@@ -1270,7 +1270,7 @@ var DynamicNodeImpl = class {
|
|
|
1270
1270
|
self._downInternal(messages);
|
|
1271
1271
|
},
|
|
1272
1272
|
emit(value) {
|
|
1273
|
-
self.
|
|
1273
|
+
self._downAutoValue(value);
|
|
1274
1274
|
},
|
|
1275
1275
|
up(messages) {
|
|
1276
1276
|
for (const dep of self._deps) {
|
|
@@ -1278,7 +1278,7 @@ var DynamicNodeImpl = class {
|
|
|
1278
1278
|
}
|
|
1279
1279
|
}
|
|
1280
1280
|
};
|
|
1281
|
-
this.
|
|
1281
|
+
this._boundDownToSinks = this._downToSinks.bind(this);
|
|
1282
1282
|
}
|
|
1283
1283
|
get name() {
|
|
1284
1284
|
return this._registryName ?? this._optsName;
|
|
@@ -1358,12 +1358,12 @@ var DynamicNodeImpl = class {
|
|
|
1358
1358
|
if (sinkMessages[i][0] !== DIRTY) filtered.push(sinkMessages[i]);
|
|
1359
1359
|
}
|
|
1360
1360
|
if (filtered.length > 0) {
|
|
1361
|
-
|
|
1361
|
+
downWithBatch(this._boundDownToSinks, filtered);
|
|
1362
1362
|
}
|
|
1363
1363
|
return;
|
|
1364
1364
|
}
|
|
1365
1365
|
}
|
|
1366
|
-
|
|
1366
|
+
downWithBatch(this._boundDownToSinks, sinkMessages);
|
|
1367
1367
|
}
|
|
1368
1368
|
_canSkipDirty() {
|
|
1369
1369
|
return this._sinkCount === 1 && this._singleDepSinkCount === 1;
|
|
@@ -1439,7 +1439,7 @@ var DynamicNodeImpl = class {
|
|
|
1439
1439
|
this._disconnect();
|
|
1440
1440
|
}
|
|
1441
1441
|
// --- Private methods ---
|
|
1442
|
-
|
|
1442
|
+
_downToSinks(messages) {
|
|
1443
1443
|
if (this._sinks == null) return;
|
|
1444
1444
|
if (typeof this._sinks === "function") {
|
|
1445
1445
|
this._sinks(messages);
|
|
@@ -1493,7 +1493,7 @@ var DynamicNodeImpl = class {
|
|
|
1493
1493
|
}
|
|
1494
1494
|
}
|
|
1495
1495
|
}
|
|
1496
|
-
|
|
1496
|
+
_downAutoValue(value) {
|
|
1497
1497
|
const wasDirty = this._status === "dirty";
|
|
1498
1498
|
let unchanged;
|
|
1499
1499
|
try {
|
|
@@ -1553,7 +1553,7 @@ var DynamicNodeImpl = class {
|
|
|
1553
1553
|
const result = this._fn(get);
|
|
1554
1554
|
this._rewire(trackedDeps);
|
|
1555
1555
|
if (result === void 0) return;
|
|
1556
|
-
this.
|
|
1556
|
+
this._downAutoValue(result);
|
|
1557
1557
|
} catch (err) {
|
|
1558
1558
|
this._downInternal([[ERROR, err]]);
|
|
1559
1559
|
}
|
|
@@ -1617,14 +1617,14 @@ var DynamicNodeImpl = class {
|
|
|
1617
1617
|
this._dirtyBits.add(index);
|
|
1618
1618
|
this._settledBits.delete(index);
|
|
1619
1619
|
if (this._dirtyBits.size === 1) {
|
|
1620
|
-
|
|
1620
|
+
downWithBatch(this._boundDownToSinks, [[DIRTY]]);
|
|
1621
1621
|
}
|
|
1622
1622
|
continue;
|
|
1623
1623
|
}
|
|
1624
1624
|
if (t === DATA || t === RESOLVED) {
|
|
1625
1625
|
if (!this._dirtyBits.has(index)) {
|
|
1626
1626
|
this._dirtyBits.add(index);
|
|
1627
|
-
|
|
1627
|
+
downWithBatch(this._boundDownToSinks, [[DIRTY]]);
|
|
1628
1628
|
}
|
|
1629
1629
|
this._settledBits.add(index);
|
|
1630
1630
|
if (this._allDirtySettled()) {
|
|
@@ -3803,7 +3803,7 @@ function computeLineBreaks(segments, maxWidth, adapter, font, cache) {
|
|
|
3803
3803
|
hyphenWidth = adapter.measureSegment("-", font).width;
|
|
3804
3804
|
fontCache.set("-", hyphenWidth);
|
|
3805
3805
|
}
|
|
3806
|
-
function
|
|
3806
|
+
function flushLine(endSeg = lineEndSeg, endGrapheme = lineEndGrapheme, width = lineW) {
|
|
3807
3807
|
let text = "";
|
|
3808
3808
|
for (let i = lineStartSeg; i < endSeg; i++) {
|
|
3809
3809
|
const seg = segments[i];
|
|
@@ -3866,7 +3866,7 @@ function computeLineBreaks(segments, maxWidth, adapter, font, cache) {
|
|
|
3866
3866
|
const seg = segments[i];
|
|
3867
3867
|
if (seg.kind === "hard-break") {
|
|
3868
3868
|
if (hasContent) {
|
|
3869
|
-
|
|
3869
|
+
flushLine();
|
|
3870
3870
|
} else {
|
|
3871
3871
|
lines.push({
|
|
3872
3872
|
text: "",
|
|
@@ -3900,20 +3900,20 @@ function computeLineBreaks(segments, maxWidth, adapter, font, cache) {
|
|
|
3900
3900
|
lineW += w;
|
|
3901
3901
|
lineEndSeg = i + 1;
|
|
3902
3902
|
lineEndGrapheme = 0;
|
|
3903
|
-
|
|
3903
|
+
flushLine(i + 1, 0, seg.kind === "space" ? lineW - w : lineW);
|
|
3904
3904
|
continue;
|
|
3905
3905
|
}
|
|
3906
3906
|
if (pendingBreakSeg >= 0) {
|
|
3907
|
-
|
|
3907
|
+
flushLine(pendingBreakSeg, 0, pendingBreakWidth);
|
|
3908
3908
|
i--;
|
|
3909
3909
|
continue;
|
|
3910
3910
|
}
|
|
3911
3911
|
if (w > maxWidth && seg.graphemeWidths) {
|
|
3912
|
-
|
|
3912
|
+
flushLine();
|
|
3913
3913
|
appendBreakableSegment(i, 0, seg.graphemeWidths);
|
|
3914
3914
|
continue;
|
|
3915
3915
|
}
|
|
3916
|
-
|
|
3916
|
+
flushLine();
|
|
3917
3917
|
i--;
|
|
3918
3918
|
continue;
|
|
3919
3919
|
}
|
|
@@ -3926,7 +3926,7 @@ function computeLineBreaks(segments, maxWidth, adapter, font, cache) {
|
|
|
3926
3926
|
}
|
|
3927
3927
|
}
|
|
3928
3928
|
if (hasContent) {
|
|
3929
|
-
|
|
3929
|
+
flushLine();
|
|
3930
3930
|
}
|
|
3931
3931
|
return { lines, lineCount: lines.length };
|
|
3932
3932
|
function appendBreakableSegment(segIdx, startG, gWidths) {
|
|
@@ -3937,7 +3937,7 @@ function computeLineBreaks(segments, maxWidth, adapter, font, cache) {
|
|
|
3937
3937
|
continue;
|
|
3938
3938
|
}
|
|
3939
3939
|
if (lineW + gw > maxWidth + 5e-3) {
|
|
3940
|
-
|
|
3940
|
+
flushLine();
|
|
3941
3941
|
startLineAtGrapheme(segIdx, g, gw);
|
|
3942
3942
|
} else {
|
|
3943
3943
|
lineW += gw;
|
|
@@ -4028,9 +4028,9 @@ function reactiveLayout(opts) {
|
|
|
4028
4028
|
const hr = hitRate;
|
|
4029
4029
|
const len = result.length;
|
|
4030
4030
|
const el = elapsed;
|
|
4031
|
-
|
|
4032
|
-
|
|
4033
|
-
|
|
4031
|
+
downWithBatch((msgs) => meta["cache-hit-rate"]?.down(msgs), [[DATA, hr]], 3);
|
|
4032
|
+
downWithBatch((msgs) => meta["segment-count"]?.down(msgs), [[DATA, len]], 3);
|
|
4033
|
+
downWithBatch((msgs) => meta["layout-time-ns"]?.down(msgs), [[DATA, el]], 3);
|
|
4034
4034
|
}
|
|
4035
4035
|
return result;
|
|
4036
4036
|
},
|
|
@@ -4260,8 +4260,8 @@ function reactiveBlockLayout(opts) {
|
|
|
4260
4260
|
const elapsed = monotonicNs() - t0;
|
|
4261
4261
|
const meta = measuredBlocksNode.meta;
|
|
4262
4262
|
if (meta) {
|
|
4263
|
-
|
|
4264
|
-
|
|
4263
|
+
downWithBatch((msgs) => meta["block-count"]?.down(msgs), [[DATA, result.length]], 3);
|
|
4264
|
+
downWithBatch((msgs) => meta["layout-time-ns"]?.down(msgs), [[DATA, elapsed]], 3);
|
|
4265
4265
|
}
|
|
4266
4266
|
return result;
|
|
4267
4267
|
},
|