@graphrefly/graphrefly 0.22.0 → 0.23.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.
Files changed (78) hide show
  1. package/dist/{chunk-RHI3GHZW.js → chunk-263BEJJO.js} +3 -3
  2. package/dist/{chunk-44HD4BTA.js → chunk-2GQLMQVJ.js} +3 -3
  3. package/dist/chunk-32N5A454.js +36 -0
  4. package/dist/chunk-32N5A454.js.map +1 -0
  5. package/dist/{chunk-IR3KMOLX.js → chunk-CWYPA63G.js} +3 -383
  6. package/dist/chunk-CWYPA63G.js.map +1 -0
  7. package/dist/{chunk-TH6COGOP.js → chunk-HVBX5KIW.js} +2 -2
  8. package/dist/chunk-JFONSPNF.js +391 -0
  9. package/dist/chunk-JFONSPNF.js.map +1 -0
  10. package/dist/{chunk-QA3RP5NH.js → chunk-NZMBRXQV.js} +101 -5
  11. package/dist/chunk-NZMBRXQV.js.map +1 -0
  12. package/dist/{chunk-MQBQOFDS.js → chunk-PNUZM7PC.js} +12 -31
  13. package/dist/chunk-PNUZM7PC.js.map +1 -0
  14. package/dist/{chunk-EQUZ5NLD.js → chunk-PX6PDUJ5.js} +11 -16
  15. package/dist/chunk-PX6PDUJ5.js.map +1 -0
  16. package/dist/{chunk-NXC35KC5.js → chunk-XRFJJ2IU.js} +3 -3
  17. package/dist/{chunk-BLD3IFYF.js → chunk-XTLYW4FR.js} +9 -7
  18. package/dist/{chunk-BLD3IFYF.js.map → chunk-XTLYW4FR.js.map} +1 -1
  19. package/dist/compat/nestjs/index.cjs +100 -4
  20. package/dist/compat/nestjs/index.cjs.map +1 -1
  21. package/dist/compat/nestjs/index.d.cts +6 -6
  22. package/dist/compat/nestjs/index.d.ts +6 -6
  23. package/dist/compat/nestjs/index.js +9 -7
  24. package/dist/core/index.cjs +100 -4
  25. package/dist/core/index.cjs.map +1 -1
  26. package/dist/core/index.d.cts +3 -3
  27. package/dist/core/index.d.ts +3 -3
  28. package/dist/core/index.js +3 -3
  29. package/dist/extra/index.cjs +100 -4
  30. package/dist/extra/index.cjs.map +1 -1
  31. package/dist/extra/index.d.cts +4 -4
  32. package/dist/extra/index.d.ts +4 -4
  33. package/dist/extra/index.js +9 -7
  34. package/dist/graph/index.cjs +100 -4
  35. package/dist/graph/index.cjs.map +1 -1
  36. package/dist/graph/index.d.cts +5 -5
  37. package/dist/graph/index.d.ts +5 -5
  38. package/dist/graph/index.js +4 -4
  39. package/dist/{graph-ab1yPwIB.d.cts → graph-BtdSRHUc.d.cts} +3 -3
  40. package/dist/{graph-DFr0diXB.d.ts → graph-CEO2FkLY.d.ts} +3 -3
  41. package/dist/{index-BvWfZCTt.d.cts → index-B0tfuXwV.d.cts} +3 -3
  42. package/dist/{index-Dy04P4W3.d.cts → index-BFGjXbiP.d.cts} +2 -2
  43. package/dist/{index-DrJq9B1T.d.cts → index-BPlWVAKY.d.cts} +3 -3
  44. package/dist/{index-C9z6rU9P.d.cts → index-BUj3ASVe.d.cts} +25 -7
  45. package/dist/{index-DLE1Sp-L.d.cts → index-C59uSJAH.d.cts} +2 -2
  46. package/dist/{index-DsGxLfwL.d.ts → index-CkElcUY6.d.ts} +2 -2
  47. package/dist/{index-HdJx_BjO.d.ts → index-DSPc5rkv.d.ts} +25 -7
  48. package/dist/{index-D36MAQ3f.d.ts → index-DgscL7v0.d.ts} +3 -3
  49. package/dist/{index-BbYZma8G.d.ts → index-RXN94sHK.d.ts} +3 -3
  50. package/dist/{index-BHm3Ba5q.d.ts → index-jEtF4N7L.d.ts} +2 -2
  51. package/dist/index.cjs +109 -14
  52. package/dist/index.cjs.map +1 -1
  53. package/dist/index.d.cts +15 -15
  54. package/dist/index.d.ts +15 -15
  55. package/dist/index.js +26 -22
  56. package/dist/index.js.map +1 -1
  57. package/dist/{meta-n3FoVWML.d.ts → meta-3QjzotRv.d.ts} +1 -1
  58. package/dist/{meta--fr9sxRM.d.cts → meta-B-Lbs4-O.d.cts} +1 -1
  59. package/dist/{node-C5UD5MGq.d.cts → node-C7PD3sn9.d.cts} +42 -0
  60. package/dist/{node-C5UD5MGq.d.ts → node-C7PD3sn9.d.ts} +42 -0
  61. package/dist/{observable-CQRBtEbq.d.ts → observable-EyO-moQY.d.ts} +1 -1
  62. package/dist/{observable-DWydVy5b.d.cts → observable-axpzv1K2.d.cts} +1 -1
  63. package/dist/patterns/reactive-layout/index.cjs +214 -117
  64. package/dist/patterns/reactive-layout/index.cjs.map +1 -1
  65. package/dist/patterns/reactive-layout/index.d.cts +5 -5
  66. package/dist/patterns/reactive-layout/index.d.ts +5 -5
  67. package/dist/patterns/reactive-layout/index.js +6 -4
  68. package/dist/{storage-C9fZfMfM.d.ts → storage-CHT5WE9m.d.ts} +1 -1
  69. package/dist/{storage-Bew05Xy6.d.cts → storage-DIgAr7M_.d.cts} +1 -1
  70. package/package.json +2 -1
  71. package/dist/chunk-EQUZ5NLD.js.map +0 -1
  72. package/dist/chunk-IR3KMOLX.js.map +0 -1
  73. package/dist/chunk-MQBQOFDS.js.map +0 -1
  74. package/dist/chunk-QA3RP5NH.js.map +0 -1
  75. /package/dist/{chunk-RHI3GHZW.js.map → chunk-263BEJJO.js.map} +0 -0
  76. /package/dist/{chunk-44HD4BTA.js.map → chunk-2GQLMQVJ.js.map} +0 -0
  77. /package/dist/{chunk-TH6COGOP.js.map → chunk-HVBX5KIW.js.map} +0 -0
  78. /package/dist/{chunk-NXC35KC5.js.map → chunk-XRFJJ2IU.js.map} +0 -0
@@ -1,5 +1,5 @@
1
- export { E as ENVELOPE_VERSION, a as EvictedSubgraphInfo, b as EvictionPolicy, G as GraphCodec, J as JsonCodec, L as LazyGraphCodec, O as SIZEOF_OVERHEAD, S as SIZEOF_SYMBOL, W as WALEntry, c as createDagCborCodec, d as createDagCborZstdCodec, e as decodeEnvelope, f as encodeEnvelope, r as registerBuiltinCodecs, g as replayWAL, s as sizeof } from '../index-Dy04P4W3.cjs';
2
- export { D as DescribeFilter, e as GRAPH_META_SEGMENT, G as Graph, f as GraphActorOptions, b as GraphAttachStorageOptions, g as GraphCheckpointRecord, h as GraphDescribeOptions, i as GraphDescribeOutput, j as GraphDiagramDirection, k as GraphDiagramOptions, l as GraphDiffChange, m as GraphDiffResult, n as GraphFactoryContext, o as GraphNodeFactory, p as GraphObserveAll, q as GraphObserveOne, a as GraphOptions, r as GraphPersistSnapshot, d as GraphProfileOptions, c as GraphProfileResult, s as GraphVersionChange, t as GraphWALDiff, N as NodeProfile, O as ObserveDetail, u as ObserveEvent, v as ObserveOptions, w as ObserveResult, x as ObserveTheme, y as ObserveThemeName, R as ReachableDirection, z as ReachableOptions, T as TraceEntry, A as diffForWAL, B as graphProfile, C as reachable } from '../graph-ab1yPwIB.cjs';
3
- import '../node-C5UD5MGq.cjs';
4
- import '../meta--fr9sxRM.cjs';
5
- import '../storage-Bew05Xy6.cjs';
1
+ export { E as ENVELOPE_VERSION, a as EvictedSubgraphInfo, b as EvictionPolicy, G as GraphCodec, J as JsonCodec, L as LazyGraphCodec, O as SIZEOF_OVERHEAD, S as SIZEOF_SYMBOL, W as WALEntry, c as createDagCborCodec, d as createDagCborZstdCodec, e as decodeEnvelope, f as encodeEnvelope, r as registerBuiltinCodecs, g as replayWAL, s as sizeof } from '../index-BFGjXbiP.cjs';
2
+ export { D as DescribeFilter, e as GRAPH_META_SEGMENT, G as Graph, f as GraphActorOptions, b as GraphAttachStorageOptions, g as GraphCheckpointRecord, h as GraphDescribeOptions, i as GraphDescribeOutput, j as GraphDiagramDirection, k as GraphDiagramOptions, l as GraphDiffChange, m as GraphDiffResult, n as GraphFactoryContext, o as GraphNodeFactory, p as GraphObserveAll, q as GraphObserveOne, a as GraphOptions, r as GraphPersistSnapshot, d as GraphProfileOptions, c as GraphProfileResult, s as GraphVersionChange, t as GraphWALDiff, N as NodeProfile, O as ObserveDetail, u as ObserveEvent, v as ObserveOptions, w as ObserveResult, x as ObserveTheme, y as ObserveThemeName, R as ReachableDirection, z as ReachableOptions, T as TraceEntry, A as diffForWAL, B as graphProfile, C as reachable } from '../graph-BtdSRHUc.cjs';
3
+ import '../node-C7PD3sn9.cjs';
4
+ import '../meta-B-Lbs4-O.cjs';
5
+ import '../storage-DIgAr7M_.cjs';
@@ -1,5 +1,5 @@
1
- export { E as ENVELOPE_VERSION, a as EvictedSubgraphInfo, b as EvictionPolicy, G as GraphCodec, J as JsonCodec, L as LazyGraphCodec, O as SIZEOF_OVERHEAD, S as SIZEOF_SYMBOL, W as WALEntry, c as createDagCborCodec, d as createDagCborZstdCodec, e as decodeEnvelope, f as encodeEnvelope, r as registerBuiltinCodecs, g as replayWAL, s as sizeof } from '../index-DsGxLfwL.js';
2
- export { D as DescribeFilter, e as GRAPH_META_SEGMENT, G as Graph, f as GraphActorOptions, b as GraphAttachStorageOptions, g as GraphCheckpointRecord, h as GraphDescribeOptions, i as GraphDescribeOutput, j as GraphDiagramDirection, k as GraphDiagramOptions, l as GraphDiffChange, m as GraphDiffResult, n as GraphFactoryContext, o as GraphNodeFactory, p as GraphObserveAll, q as GraphObserveOne, a as GraphOptions, r as GraphPersistSnapshot, d as GraphProfileOptions, c as GraphProfileResult, s as GraphVersionChange, t as GraphWALDiff, N as NodeProfile, O as ObserveDetail, u as ObserveEvent, v as ObserveOptions, w as ObserveResult, x as ObserveTheme, y as ObserveThemeName, R as ReachableDirection, z as ReachableOptions, T as TraceEntry, A as diffForWAL, B as graphProfile, C as reachable } from '../graph-DFr0diXB.js';
3
- import '../node-C5UD5MGq.js';
4
- import '../meta-n3FoVWML.js';
5
- import '../storage-C9fZfMfM.js';
1
+ export { E as ENVELOPE_VERSION, a as EvictedSubgraphInfo, b as EvictionPolicy, G as GraphCodec, J as JsonCodec, L as LazyGraphCodec, O as SIZEOF_OVERHEAD, S as SIZEOF_SYMBOL, W as WALEntry, c as createDagCborCodec, d as createDagCborZstdCodec, e as decodeEnvelope, f as encodeEnvelope, r as registerBuiltinCodecs, g as replayWAL, s as sizeof } from '../index-CkElcUY6.js';
2
+ export { D as DescribeFilter, e as GRAPH_META_SEGMENT, G as Graph, f as GraphActorOptions, b as GraphAttachStorageOptions, g as GraphCheckpointRecord, h as GraphDescribeOptions, i as GraphDescribeOutput, j as GraphDiagramDirection, k as GraphDiagramOptions, l as GraphDiffChange, m as GraphDiffResult, n as GraphFactoryContext, o as GraphNodeFactory, p as GraphObserveAll, q as GraphObserveOne, a as GraphOptions, r as GraphPersistSnapshot, d as GraphProfileOptions, c as GraphProfileResult, s as GraphVersionChange, t as GraphWALDiff, N as NodeProfile, O as ObserveDetail, u as ObserveEvent, v as ObserveOptions, w as ObserveResult, x as ObserveTheme, y as ObserveThemeName, R as ReachableDirection, z as ReachableOptions, T as TraceEntry, A as diffForWAL, B as graphProfile, C as reachable } from '../graph-CEO2FkLY.js';
3
+ import '../node-C7PD3sn9.js';
4
+ import '../meta-3QjzotRv.js';
5
+ import '../storage-CHT5WE9m.js';
@@ -1,4 +1,4 @@
1
- import "../chunk-44HD4BTA.js";
1
+ import "../chunk-2GQLMQVJ.js";
2
2
  import {
3
3
  GRAPH_META_SEGMENT,
4
4
  Graph,
@@ -8,8 +8,8 @@ import {
8
8
  graphProfile,
9
9
  reachable,
10
10
  sizeof
11
- } from "../chunk-NXC35KC5.js";
12
- import "../chunk-TH6COGOP.js";
11
+ } from "../chunk-XRFJJ2IU.js";
12
+ import "../chunk-HVBX5KIW.js";
13
13
  import "../chunk-7TAQJHQV.js";
14
14
  import {
15
15
  ENVELOPE_VERSION,
@@ -20,7 +20,7 @@ import {
20
20
  encodeEnvelope,
21
21
  registerBuiltinCodecs,
22
22
  replayWAL
23
- } from "../chunk-QA3RP5NH.js";
23
+ } from "../chunk-NZMBRXQV.js";
24
24
  export {
25
25
  ENVELOPE_VERSION,
26
26
  GRAPH_META_SEGMENT,
@@ -1,6 +1,6 @@
1
- import { k as GraphReFlyConfig, a6 as VersioningLevel, N as Node, A as Actor, t as Messages, K as NodeSink } from './node-C5UD5MGq.cjs';
2
- import { b as DescribeNodeOutput, D as DescribeDetail, a as DescribeField } from './meta--fr9sxRM.cjs';
3
- import { a as StorageTier, S as StorageHandle } from './storage-Bew05Xy6.cjs';
1
+ import { k as GraphReFlyConfig, a6 as VersioningLevel, N as Node, A as Actor, t as Messages, K as NodeSink } from './node-C7PD3sn9.cjs';
2
+ import { b as DescribeNodeOutput, D as DescribeDetail, a as DescribeField } from './meta-B-Lbs4-O.cjs';
3
+ import { a as StorageTier, S as StorageHandle } from './storage-DIgAr7M_.cjs';
4
4
 
5
5
  /**
6
6
  * Graph profiling and inspection utilities.
@@ -1,6 +1,6 @@
1
- import { k as GraphReFlyConfig, a6 as VersioningLevel, N as Node, A as Actor, t as Messages, K as NodeSink } from './node-C5UD5MGq.js';
2
- import { b as DescribeNodeOutput, D as DescribeDetail, a as DescribeField } from './meta-n3FoVWML.js';
3
- import { a as StorageTier, S as StorageHandle } from './storage-C9fZfMfM.js';
1
+ import { k as GraphReFlyConfig, a6 as VersioningLevel, N as Node, A as Actor, t as Messages, K as NodeSink } from './node-C7PD3sn9.js';
2
+ import { b as DescribeNodeOutput, D as DescribeDetail, a as DescribeField } from './meta-3QjzotRv.js';
3
+ import { a as StorageTier, S as StorageHandle } from './storage-CHT5WE9m.js';
4
4
 
5
5
  /**
6
6
  * Graph profiling and inspection utilities.
@@ -1,6 +1,6 @@
1
- import { a as NodeOptions, N as Node, M as Message, t as Messages, a6 as VersioningLevel } from './node-C5UD5MGq.cjs';
2
- import { a as StorageTier, I as IndexedDbStorageSpec, S as StorageHandle, d as dictStorage, f as fileStorage, b as fromIDBRequest, c as fromIDBTransaction, i as indexedDbStorage, m as memoryStorage, s as sqliteStorage } from './storage-Bew05Xy6.cjs';
3
- import { T as ToObservableOptions, t as toObservable } from './observable-DWydVy5b.cjs';
1
+ import { a as NodeOptions, N as Node, M as Message, t as Messages, a6 as VersioningLevel } from './node-C7PD3sn9.cjs';
2
+ import { a as StorageTier, I as IndexedDbStorageSpec, S as StorageHandle, d as dictStorage, f as fileStorage, b as fromIDBRequest, c as fromIDBTransaction, i as indexedDbStorage, m as memoryStorage, s as sqliteStorage } from './storage-DIgAr7M_.cjs';
3
+ import { T as ToObservableOptions, t as toObservable } from './observable-axpzv1K2.cjs';
4
4
 
5
5
  /**
6
6
  * External-register helpers — the common `register({emit, error, complete})`
@@ -1,5 +1,5 @@
1
- import { k as GraphReFlyConfig } from './node-C5UD5MGq.cjs';
2
- import { r as GraphPersistSnapshot, g as GraphCheckpointRecord, D as DescribeFilter, e as GRAPH_META_SEGMENT, G as Graph, f as GraphActorOptions, b as GraphAttachStorageOptions, h as GraphDescribeOptions, i as GraphDescribeOutput, j as GraphDiagramDirection, k as GraphDiagramOptions, l as GraphDiffChange, m as GraphDiffResult, n as GraphFactoryContext, o as GraphNodeFactory, p as GraphObserveAll, q as GraphObserveOne, a as GraphOptions, d as GraphProfileOptions, c as GraphProfileResult, s as GraphVersionChange, t as GraphWALDiff, N as NodeProfile, O as ObserveDetail, u as ObserveEvent, v as ObserveOptions, w as ObserveResult, x as ObserveTheme, y as ObserveThemeName, R as ReachableDirection, z as ReachableOptions, T as TraceEntry, A as diffForWAL, B as graphProfile, C as reachable } from './graph-ab1yPwIB.cjs';
1
+ import { k as GraphReFlyConfig } from './node-C7PD3sn9.cjs';
2
+ import { r as GraphPersistSnapshot, g as GraphCheckpointRecord, D as DescribeFilter, e as GRAPH_META_SEGMENT, G as Graph, f as GraphActorOptions, b as GraphAttachStorageOptions, h as GraphDescribeOptions, i as GraphDescribeOutput, j as GraphDiagramDirection, k as GraphDiagramOptions, l as GraphDiffChange, m as GraphDiffResult, n as GraphFactoryContext, o as GraphNodeFactory, p as GraphObserveAll, q as GraphObserveOne, a as GraphOptions, d as GraphProfileOptions, c as GraphProfileResult, s as GraphVersionChange, t as GraphWALDiff, N as NodeProfile, O as ObserveDetail, u as ObserveEvent, v as ObserveOptions, w as ObserveResult, x as ObserveTheme, y as ObserveThemeName, R as ReachableDirection, z as ReachableOptions, T as TraceEntry, A as diffForWAL, B as graphProfile, C as reachable } from './graph-BtdSRHUc.cjs';
3
3
 
4
4
  /**
5
5
  * Approximate in-memory size estimation for arbitrary JS values.
@@ -1,8 +1,8 @@
1
- import { T as ToObservableOptions, t as toObservable } from './observable-DWydVy5b.cjs';
1
+ import { T as ToObservableOptions, t as toObservable } from './observable-axpzv1K2.cjs';
2
2
  import { OnModuleInit, OnModuleDestroy, ExecutionContext, CanActivate, DynamicModule } from '@nestjs/common';
3
3
  import { ModuleRef } from '@nestjs/core';
4
- import { G as Graph, a as GraphOptions, r as GraphPersistSnapshot } from './graph-ab1yPwIB.cjs';
5
- import { A as Actor, N as Node } from './node-C5UD5MGq.cjs';
4
+ import { G as Graph, a as GraphOptions, r as GraphPersistSnapshot } from './graph-BtdSRHUc.cjs';
5
+ import { A as Actor, N as Node } from './node-C7PD3sn9.cjs';
6
6
 
7
7
  /** Class constructor key for decorator registries and Nest `ModuleRef.get()`. */
8
8
  type DecoratorHostConstructor = abstract new (...args: unknown[]) => unknown;
@@ -1,28 +1,46 @@
1
- import { t as Messages, a as NodeOptions, F as FnCtx, N as Node, b as NodeActions, x as NodeFnCleanup, A as Actor, C as COMPLETE, c as COMPLETE_MSG, d as COMPLETE_ONLY_BATCH, D as DATA, e as DEFAULT_ACTOR, f as DIRTY, g as DIRTY_MSG, h as DIRTY_ONLY_BATCH, i as DepRecord, E as ERROR, G as GlobalInspectorEvent, j as GlobalInspectorHook, k as GraphReFlyConfig, l as GuardAction, m as GuardDenied, n as GuardDeniedDetails, H as HashFn, I as INVALIDATE, o as INVALIDATE_MSG, p as INVALIDATE_ONLY_BATCH, M as Message, q as MessageContext, r as MessageTypeRegistration, s as MessageTypeRegistrationInput, u as NodeCtx, v as NodeDescribeKind, w as NodeFn, y as NodeGuard, z as NodeImpl, B as NodeInspectorHook, J as NodeInspectorHookEvent, K as NodeSink, L as NodeStatus, O as NodeTransportOptions, P as NodeVersionInfo, Q as OnMessageHandler, R as OnSubscribeHandler, S as PAUSE, T as PolicyAllow, U as PolicyDeny, V as PolicyRuleData, W as RESOLVED, X as RESOLVED_MSG, Y as RESOLVED_ONLY_BATCH, Z as RESUME, _ as START, $ as START_MSG, a0 as SubscribeContext, a1 as TEARDOWN, a2 as TEARDOWN_MSG, a3 as TEARDOWN_ONLY_BATCH, a4 as V0, a5 as V1, a6 as VersioningLevel, a7 as VersioningOptions, a8 as accessHintForGuard, a9 as advanceVersion, aa as configure, ab as createVersioning, ac as defaultConfig, ad as defaultHash, ae as isV1, af as node, ag as normalizeActor, ah as policy, ai as policyFromRules, aj as registerBuiltins } from './node-C5UD5MGq.cjs';
2
- import { D as DescribeDetail, a as DescribeField, b as DescribeNodeOutput, r as resolveDescribeFields } from './meta--fr9sxRM.cjs';
1
+ import { t as Messages, a as NodeOptions, F as FnCtx, N as Node, b as NodeActions, x as NodeFnCleanup, A as Actor, C as COMPLETE, c as COMPLETE_MSG, d as COMPLETE_ONLY_BATCH, D as DATA, e as DEFAULT_ACTOR, f as DIRTY, g as DIRTY_MSG, h as DIRTY_ONLY_BATCH, i as DepRecord, E as ERROR, G as GlobalInspectorEvent, j as GlobalInspectorHook, k as GraphReFlyConfig, l as GuardAction, m as GuardDenied, n as GuardDeniedDetails, H as HashFn, I as INVALIDATE, o as INVALIDATE_MSG, p as INVALIDATE_ONLY_BATCH, M as Message, q as MessageContext, r as MessageTypeRegistration, s as MessageTypeRegistrationInput, u as NodeCtx, v as NodeDescribeKind, w as NodeFn, y as NodeGuard, z as NodeImpl, B as NodeInspectorHook, J as NodeInspectorHookEvent, K as NodeSink, L as NodeStatus, O as NodeTransportOptions, P as NodeVersionInfo, Q as OnMessageHandler, R as OnSubscribeHandler, S as PAUSE, T as PolicyAllow, U as PolicyDeny, V as PolicyRuleData, W as RESOLVED, X as RESOLVED_MSG, Y as RESOLVED_ONLY_BATCH, Z as RESUME, _ as START, $ as START_MSG, a0 as SubscribeContext, a1 as TEARDOWN, a2 as TEARDOWN_MSG, a3 as TEARDOWN_ONLY_BATCH, a4 as V0, a5 as V1, a6 as VersioningLevel, a7 as VersioningOptions, a8 as accessHintForGuard, a9 as advanceVersion, aa as configure, ab as createVersioning, ac as defaultConfig, ad as defaultHash, ae as isV1, af as node, ag as normalizeActor, ah as policy, ai as policyFromRules, aj as registerBuiltins } from './node-C7PD3sn9.cjs';
2
+ import { D as DescribeDetail, a as DescribeField, b as DescribeNodeOutput, r as resolveDescribeFields } from './meta-B-Lbs4-O.cjs';
3
3
 
4
4
  /**
5
- * Batch deferral for tier-3+ messages.
5
+ * Batch deferral for tier-3+ messages, plus per-node emit coalescing inside
6
+ * explicit `batch()` scopes.
6
7
  *
7
8
  * §1.3.7 — Inside a batch, tier 0–2 signals propagate immediately. Tier 3
8
9
  * (DATA/RESOLVED), tier 4 (COMPLETE/ERROR), and tier 5 (TEARDOWN) are queued
9
10
  * and drained in ascending phase order after the outermost `batch()` callback
10
11
  * returns.
11
12
  *
13
+ * **Per-node emit coalescing (Bug 2 fix, 2026-04-17).** Inside an explicit
14
+ * `batch()` scope, consecutive emissions from the same node accumulate in
15
+ * `NodeImpl._batchPendingMessages` instead of each producing a separate
16
+ * downstream wave. At batch end, each node flushes its accumulated messages
17
+ * as ONE multi-message `downWithBatch` call — K `.emit()`s to the same
18
+ * source collapse to K DIRTYs in one tier-1 sink call + K DATAs in one
19
+ * tier-3 sink call. Downstream nodes' fns run once per wave with the full
20
+ * `batchData` (dep's `dataBatch` accumulates all K values, fn sees
21
+ * `[[v1, v2, ..., vK]]`). Resolves the K+1 fan-in over-fire.
22
+ *
23
+ * Outside batch — and during drain (where `flushInProgress` is true but
24
+ * `batchDepth` is 0) — coalescing does NOT apply: each emit goes through
25
+ * its own `downWithBatch` call and produces its own wave.
26
+ *
12
27
  * **Phase vocabulary:**
13
28
  * - Phase 1 = tiers 0–2 — immediate, never queued.
14
29
  * - Phase 2 = tier 3 — {@link drainPhase2}. Value settlements.
15
30
  * - Phase 3 = tier 4 — {@link drainPhase3}. Terminal signals.
16
31
  * - Phase 4 = tier 5 — {@link drainPhase4}. TEARDOWN (unified deferral).
17
32
  *
18
- * Drain rule: lowest non-empty phase first. Re-enqueues during drain bump the
19
- * loop back to the lowest non-empty phase, preserving "earlier values settle
20
- * before later terminals/teardown" across callback re-entry.
33
+ * Drain rule: fire any pending flush hooks first, then the lowest non-empty
34
+ * phase. Re-enqueues during drain (and hooks registered by reentrant batches
35
+ * inside subscriber callbacks) bump the loop back to the top so newly-added
36
+ * hooks and closures get processed.
21
37
  *
22
38
  * **Pre-sorted input invariant.** `downWithBatch` assumes `messages` is
23
39
  * already sorted in ascending tier order (produced by `_frameBatch` in
24
40
  * `node.ts`). The walker exploits monotonicity for a single O(n) pass and
25
- * slices at phase boundaries without re-sorting.
41
+ * slices at phase boundaries without re-sorting. Flushed multi-emit batches
42
+ * re-run `_frameBatch` to restore monotonicity (the per-emit framings
43
+ * accumulate in interleaved order: `[DIRTY, DATA, DIRTY, DATA, ...]`).
26
44
  */
27
45
 
28
46
  /**
@@ -1,5 +1,5 @@
1
- import { N as Node } from './node-C5UD5MGq.cjs';
2
- import { G as Graph } from './graph-ab1yPwIB.cjs';
1
+ import { N as Node } from './node-C7PD3sn9.cjs';
2
+ import { G as Graph } from './graph-BtdSRHUc.cjs';
3
3
 
4
4
  /** Pluggable measurement backend. */
5
5
  interface MeasurementAdapter {
@@ -1,5 +1,5 @@
1
- import { k as GraphReFlyConfig } from './node-C5UD5MGq.js';
2
- import { r as GraphPersistSnapshot, g as GraphCheckpointRecord, D as DescribeFilter, e as GRAPH_META_SEGMENT, G as Graph, f as GraphActorOptions, b as GraphAttachStorageOptions, h as GraphDescribeOptions, i as GraphDescribeOutput, j as GraphDiagramDirection, k as GraphDiagramOptions, l as GraphDiffChange, m as GraphDiffResult, n as GraphFactoryContext, o as GraphNodeFactory, p as GraphObserveAll, q as GraphObserveOne, a as GraphOptions, d as GraphProfileOptions, c as GraphProfileResult, s as GraphVersionChange, t as GraphWALDiff, N as NodeProfile, O as ObserveDetail, u as ObserveEvent, v as ObserveOptions, w as ObserveResult, x as ObserveTheme, y as ObserveThemeName, R as ReachableDirection, z as ReachableOptions, T as TraceEntry, A as diffForWAL, B as graphProfile, C as reachable } from './graph-DFr0diXB.js';
1
+ import { k as GraphReFlyConfig } from './node-C7PD3sn9.js';
2
+ import { r as GraphPersistSnapshot, g as GraphCheckpointRecord, D as DescribeFilter, e as GRAPH_META_SEGMENT, G as Graph, f as GraphActorOptions, b as GraphAttachStorageOptions, h as GraphDescribeOptions, i as GraphDescribeOutput, j as GraphDiagramDirection, k as GraphDiagramOptions, l as GraphDiffChange, m as GraphDiffResult, n as GraphFactoryContext, o as GraphNodeFactory, p as GraphObserveAll, q as GraphObserveOne, a as GraphOptions, d as GraphProfileOptions, c as GraphProfileResult, s as GraphVersionChange, t as GraphWALDiff, N as NodeProfile, O as ObserveDetail, u as ObserveEvent, v as ObserveOptions, w as ObserveResult, x as ObserveTheme, y as ObserveThemeName, R as ReachableDirection, z as ReachableOptions, T as TraceEntry, A as diffForWAL, B as graphProfile, C as reachable } from './graph-CEO2FkLY.js';
3
3
 
4
4
  /**
5
5
  * Approximate in-memory size estimation for arbitrary JS values.
@@ -1,28 +1,46 @@
1
- import { t as Messages, a as NodeOptions, F as FnCtx, N as Node, b as NodeActions, x as NodeFnCleanup, A as Actor, C as COMPLETE, c as COMPLETE_MSG, d as COMPLETE_ONLY_BATCH, D as DATA, e as DEFAULT_ACTOR, f as DIRTY, g as DIRTY_MSG, h as DIRTY_ONLY_BATCH, i as DepRecord, E as ERROR, G as GlobalInspectorEvent, j as GlobalInspectorHook, k as GraphReFlyConfig, l as GuardAction, m as GuardDenied, n as GuardDeniedDetails, H as HashFn, I as INVALIDATE, o as INVALIDATE_MSG, p as INVALIDATE_ONLY_BATCH, M as Message, q as MessageContext, r as MessageTypeRegistration, s as MessageTypeRegistrationInput, u as NodeCtx, v as NodeDescribeKind, w as NodeFn, y as NodeGuard, z as NodeImpl, B as NodeInspectorHook, J as NodeInspectorHookEvent, K as NodeSink, L as NodeStatus, O as NodeTransportOptions, P as NodeVersionInfo, Q as OnMessageHandler, R as OnSubscribeHandler, S as PAUSE, T as PolicyAllow, U as PolicyDeny, V as PolicyRuleData, W as RESOLVED, X as RESOLVED_MSG, Y as RESOLVED_ONLY_BATCH, Z as RESUME, _ as START, $ as START_MSG, a0 as SubscribeContext, a1 as TEARDOWN, a2 as TEARDOWN_MSG, a3 as TEARDOWN_ONLY_BATCH, a4 as V0, a5 as V1, a6 as VersioningLevel, a7 as VersioningOptions, a8 as accessHintForGuard, a9 as advanceVersion, aa as configure, ab as createVersioning, ac as defaultConfig, ad as defaultHash, ae as isV1, af as node, ag as normalizeActor, ah as policy, ai as policyFromRules, aj as registerBuiltins } from './node-C5UD5MGq.js';
2
- import { D as DescribeDetail, a as DescribeField, b as DescribeNodeOutput, r as resolveDescribeFields } from './meta-n3FoVWML.js';
1
+ import { t as Messages, a as NodeOptions, F as FnCtx, N as Node, b as NodeActions, x as NodeFnCleanup, A as Actor, C as COMPLETE, c as COMPLETE_MSG, d as COMPLETE_ONLY_BATCH, D as DATA, e as DEFAULT_ACTOR, f as DIRTY, g as DIRTY_MSG, h as DIRTY_ONLY_BATCH, i as DepRecord, E as ERROR, G as GlobalInspectorEvent, j as GlobalInspectorHook, k as GraphReFlyConfig, l as GuardAction, m as GuardDenied, n as GuardDeniedDetails, H as HashFn, I as INVALIDATE, o as INVALIDATE_MSG, p as INVALIDATE_ONLY_BATCH, M as Message, q as MessageContext, r as MessageTypeRegistration, s as MessageTypeRegistrationInput, u as NodeCtx, v as NodeDescribeKind, w as NodeFn, y as NodeGuard, z as NodeImpl, B as NodeInspectorHook, J as NodeInspectorHookEvent, K as NodeSink, L as NodeStatus, O as NodeTransportOptions, P as NodeVersionInfo, Q as OnMessageHandler, R as OnSubscribeHandler, S as PAUSE, T as PolicyAllow, U as PolicyDeny, V as PolicyRuleData, W as RESOLVED, X as RESOLVED_MSG, Y as RESOLVED_ONLY_BATCH, Z as RESUME, _ as START, $ as START_MSG, a0 as SubscribeContext, a1 as TEARDOWN, a2 as TEARDOWN_MSG, a3 as TEARDOWN_ONLY_BATCH, a4 as V0, a5 as V1, a6 as VersioningLevel, a7 as VersioningOptions, a8 as accessHintForGuard, a9 as advanceVersion, aa as configure, ab as createVersioning, ac as defaultConfig, ad as defaultHash, ae as isV1, af as node, ag as normalizeActor, ah as policy, ai as policyFromRules, aj as registerBuiltins } from './node-C7PD3sn9.js';
2
+ import { D as DescribeDetail, a as DescribeField, b as DescribeNodeOutput, r as resolveDescribeFields } from './meta-3QjzotRv.js';
3
3
 
4
4
  /**
5
- * Batch deferral for tier-3+ messages.
5
+ * Batch deferral for tier-3+ messages, plus per-node emit coalescing inside
6
+ * explicit `batch()` scopes.
6
7
  *
7
8
  * §1.3.7 — Inside a batch, tier 0–2 signals propagate immediately. Tier 3
8
9
  * (DATA/RESOLVED), tier 4 (COMPLETE/ERROR), and tier 5 (TEARDOWN) are queued
9
10
  * and drained in ascending phase order after the outermost `batch()` callback
10
11
  * returns.
11
12
  *
13
+ * **Per-node emit coalescing (Bug 2 fix, 2026-04-17).** Inside an explicit
14
+ * `batch()` scope, consecutive emissions from the same node accumulate in
15
+ * `NodeImpl._batchPendingMessages` instead of each producing a separate
16
+ * downstream wave. At batch end, each node flushes its accumulated messages
17
+ * as ONE multi-message `downWithBatch` call — K `.emit()`s to the same
18
+ * source collapse to K DIRTYs in one tier-1 sink call + K DATAs in one
19
+ * tier-3 sink call. Downstream nodes' fns run once per wave with the full
20
+ * `batchData` (dep's `dataBatch` accumulates all K values, fn sees
21
+ * `[[v1, v2, ..., vK]]`). Resolves the K+1 fan-in over-fire.
22
+ *
23
+ * Outside batch — and during drain (where `flushInProgress` is true but
24
+ * `batchDepth` is 0) — coalescing does NOT apply: each emit goes through
25
+ * its own `downWithBatch` call and produces its own wave.
26
+ *
12
27
  * **Phase vocabulary:**
13
28
  * - Phase 1 = tiers 0–2 — immediate, never queued.
14
29
  * - Phase 2 = tier 3 — {@link drainPhase2}. Value settlements.
15
30
  * - Phase 3 = tier 4 — {@link drainPhase3}. Terminal signals.
16
31
  * - Phase 4 = tier 5 — {@link drainPhase4}. TEARDOWN (unified deferral).
17
32
  *
18
- * Drain rule: lowest non-empty phase first. Re-enqueues during drain bump the
19
- * loop back to the lowest non-empty phase, preserving "earlier values settle
20
- * before later terminals/teardown" across callback re-entry.
33
+ * Drain rule: fire any pending flush hooks first, then the lowest non-empty
34
+ * phase. Re-enqueues during drain (and hooks registered by reentrant batches
35
+ * inside subscriber callbacks) bump the loop back to the top so newly-added
36
+ * hooks and closures get processed.
21
37
  *
22
38
  * **Pre-sorted input invariant.** `downWithBatch` assumes `messages` is
23
39
  * already sorted in ascending tier order (produced by `_frameBatch` in
24
40
  * `node.ts`). The walker exploits monotonicity for a single O(n) pass and
25
- * slices at phase boundaries without re-sorting.
41
+ * slices at phase boundaries without re-sorting. Flushed multi-emit batches
42
+ * re-run `_frameBatch` to restore monotonicity (the per-emit framings
43
+ * accumulate in interleaved order: `[DIRTY, DATA, DIRTY, DATA, ...]`).
26
44
  */
27
45
 
28
46
  /**
@@ -1,8 +1,8 @@
1
- import { T as ToObservableOptions, t as toObservable } from './observable-CQRBtEbq.js';
1
+ import { T as ToObservableOptions, t as toObservable } from './observable-EyO-moQY.js';
2
2
  import { OnModuleInit, OnModuleDestroy, ExecutionContext, CanActivate, DynamicModule } from '@nestjs/common';
3
3
  import { ModuleRef } from '@nestjs/core';
4
- import { G as Graph, a as GraphOptions, r as GraphPersistSnapshot } from './graph-DFr0diXB.js';
5
- import { A as Actor, N as Node } from './node-C5UD5MGq.js';
4
+ import { G as Graph, a as GraphOptions, r as GraphPersistSnapshot } from './graph-CEO2FkLY.js';
5
+ import { A as Actor, N as Node } from './node-C7PD3sn9.js';
6
6
 
7
7
  /** Class constructor key for decorator registries and Nest `ModuleRef.get()`. */
8
8
  type DecoratorHostConstructor = abstract new (...args: unknown[]) => unknown;
@@ -1,6 +1,6 @@
1
- import { a as NodeOptions, N as Node, M as Message, t as Messages, a6 as VersioningLevel } from './node-C5UD5MGq.js';
2
- import { a as StorageTier, I as IndexedDbStorageSpec, S as StorageHandle, d as dictStorage, f as fileStorage, b as fromIDBRequest, c as fromIDBTransaction, i as indexedDbStorage, m as memoryStorage, s as sqliteStorage } from './storage-C9fZfMfM.js';
3
- import { T as ToObservableOptions, t as toObservable } from './observable-CQRBtEbq.js';
1
+ import { a as NodeOptions, N as Node, M as Message, t as Messages, a6 as VersioningLevel } from './node-C7PD3sn9.js';
2
+ import { a as StorageTier, I as IndexedDbStorageSpec, S as StorageHandle, d as dictStorage, f as fileStorage, b as fromIDBRequest, c as fromIDBTransaction, i as indexedDbStorage, m as memoryStorage, s as sqliteStorage } from './storage-CHT5WE9m.js';
3
+ import { T as ToObservableOptions, t as toObservable } from './observable-EyO-moQY.js';
4
4
 
5
5
  /**
6
6
  * External-register helpers — the common `register({emit, error, complete})`
@@ -1,5 +1,5 @@
1
- import { N as Node } from './node-C5UD5MGq.js';
2
- import { G as Graph } from './graph-DFr0diXB.js';
1
+ import { N as Node } from './node-C7PD3sn9.js';
2
+ import { G as Graph } from './graph-CEO2FkLY.js';
3
3
 
4
4
  /** Pluggable measurement backend. */
5
5
  interface MeasurementAdapter {
package/dist/index.cjs CHANGED
@@ -544,9 +544,20 @@ var flushInProgress = false;
544
544
  var drainPhase2 = [];
545
545
  var drainPhase3 = [];
546
546
  var drainPhase4 = [];
547
+ var flushHooks = [];
547
548
  function isBatching() {
548
549
  return batchDepth > 0 || flushInProgress;
549
550
  }
551
+ function isExplicitlyBatching() {
552
+ return batchDepth > 0;
553
+ }
554
+ function registerBatchFlushHook(hook) {
555
+ if (batchDepth > 0) {
556
+ flushHooks.push(hook);
557
+ } else {
558
+ hook();
559
+ }
560
+ }
550
561
  function batch(fn) {
551
562
  batchDepth += 1;
552
563
  let threw = false;
@@ -560,6 +571,13 @@ function batch(fn) {
560
571
  if (batchDepth === 0) {
561
572
  if (threw) {
562
573
  if (!flushInProgress) {
574
+ const hooks = flushHooks.splice(0);
575
+ for (const h of hooks) {
576
+ try {
577
+ h();
578
+ } catch {
579
+ }
580
+ }
563
581
  drainPhase2.length = 0;
564
582
  drainPhase3.length = 0;
565
583
  drainPhase4.length = 0;
@@ -576,7 +594,18 @@ function drainPending() {
576
594
  const errors = [];
577
595
  let iterations = 0;
578
596
  try {
579
- while (drainPhase2.length > 0 || drainPhase3.length > 0 || drainPhase4.length > 0) {
597
+ while (drainPhase2.length > 0 || drainPhase3.length > 0 || drainPhase4.length > 0 || ownsFlush && flushHooks.length > 0) {
598
+ if (ownsFlush && flushHooks.length > 0) {
599
+ const hooks = flushHooks.splice(0);
600
+ for (const h of hooks) {
601
+ try {
602
+ h();
603
+ } catch (e) {
604
+ errors.push(e);
605
+ }
606
+ }
607
+ continue;
608
+ }
580
609
  iterations += 1;
581
610
  if (iterations > MAX_DRAIN_ITERATIONS) {
582
611
  drainPhase2.length = 0;
@@ -1266,6 +1295,22 @@ var NodeImpl = class _NodeImpl {
1266
1295
  * treats `0` as "wave settled" — O(1) check for full dep settlement.
1267
1296
  */
1268
1297
  _dirtyDepCount = 0;
1298
+ // --- Per-batch emit accumulator (Bug 2: K+1 fan-in fix) ---
1299
+ /**
1300
+ * Inside an explicit `batch(() => ...)` scope, every `_emit` accumulates
1301
+ * its already-framed messages here instead of dispatching synchronously.
1302
+ * At batch end, `_flushBatchPending` runs (registered via
1303
+ * `registerBatchFlushHook`) and delivers the whole accumulated batch as
1304
+ * one `downWithBatch` call — collapsing what would otherwise be K
1305
+ * separate sink invocations into one. This is the fix for the diamond
1306
+ * fan-in K+1 over-fire.
1307
+ *
1308
+ * `null` outside batch (or after flush). Only ever appended to within
1309
+ * a single explicit batch lifetime; reset to `null` on flush. State
1310
+ * updates (cache, version, status) still happen per-emit via
1311
+ * `_updateState` — only the downstream delivery is coalesced.
1312
+ */
1313
+ _batchPendingMessages = null;
1269
1314
  // --- PAUSE/RESUME lock tracking (C0) ---
1270
1315
  /**
1271
1316
  * Set of active pause locks held against this node. Every `[PAUSE, lockId]`
@@ -1643,7 +1688,10 @@ var NodeImpl = class _NodeImpl {
1643
1688
  dep.unsub = noopUnsub;
1644
1689
  dep.unsub = dep.node.subscribe((msgs) => {
1645
1690
  if (dep.unsub === null) return;
1691
+ const tierOf = this._config.tierOf;
1692
+ let sawSettlement = false;
1646
1693
  for (const m of msgs) {
1694
+ if (tierOf(m[0]) >= 3) sawSettlement = true;
1647
1695
  this._config.onMessage(
1648
1696
  this,
1649
1697
  m,
@@ -1651,6 +1699,7 @@ var NodeImpl = class _NodeImpl {
1651
1699
  this._actions
1652
1700
  );
1653
1701
  }
1702
+ if (sawSettlement) this._maybeRunFnOnSettlement();
1654
1703
  });
1655
1704
  subscribedCount++;
1656
1705
  }
@@ -1705,7 +1754,10 @@ var NodeImpl = class _NodeImpl {
1705
1754
  try {
1706
1755
  record.unsub = depNode.subscribe((msgs) => {
1707
1756
  if (record.unsub === null) return;
1757
+ const tierOf = this._config.tierOf;
1758
+ let sawSettlement = false;
1708
1759
  for (const m of msgs) {
1760
+ if (tierOf(m[0]) >= 3) sawSettlement = true;
1709
1761
  this._config.onMessage(
1710
1762
  this,
1711
1763
  m,
@@ -1713,6 +1765,7 @@ var NodeImpl = class _NodeImpl {
1713
1765
  this._actions
1714
1766
  );
1715
1767
  }
1768
+ if (sawSettlement) this._maybeRunFnOnSettlement();
1716
1769
  });
1717
1770
  } catch (err) {
1718
1771
  record.unsub = null;
@@ -1834,7 +1887,6 @@ var NodeImpl = class _NodeImpl {
1834
1887
  }
1835
1888
  return;
1836
1889
  }
1837
- this._maybeRunFnOnSettlement();
1838
1890
  }
1839
1891
  // --- Centralized dep-state transitions (A3 settlement counters) ---
1840
1892
  //
@@ -2206,10 +2258,10 @@ var NodeImpl = class _NodeImpl {
2206
2258
  }
2207
2259
  }
2208
2260
  if (immediate.length > 0) {
2209
- downWithBatch(this._deliverToSinks, immediate, tierOf);
2261
+ this._dispatchOrAccumulate(immediate);
2210
2262
  }
2211
2263
  } else {
2212
- downWithBatch(this._deliverToSinks, finalMessages, this._config.tierOf);
2264
+ this._dispatchOrAccumulate(finalMessages);
2213
2265
  }
2214
2266
  }
2215
2267
  if (equalsError != null) {
@@ -2332,6 +2384,50 @@ var NodeImpl = class _NodeImpl {
2332
2384
  const snapshot = [...this._sinks];
2333
2385
  for (const sink of snapshot) sink(messages);
2334
2386
  };
2387
+ /**
2388
+ * @internal Dispatch entry point that respects the per-batch emit
2389
+ * accumulator (Bug 2). Inside an explicit `batch()` scope, append to
2390
+ * `_batchPendingMessages` and register a flush hook on first append.
2391
+ * Outside batch — or during a drain (where `flushInProgress` is true
2392
+ * but `batchDepth` is 0) — dispatch synchronously through `downWithBatch`.
2393
+ *
2394
+ * Per-emit state updates (`_frameBatch`, `_updateState`) have already
2395
+ * happened by the time we reach here; only the **downstream delivery**
2396
+ * is coalesced. Cache, version, and status are visible mid-batch on
2397
+ * the emitting node itself.
2398
+ */
2399
+ _dispatchOrAccumulate(messages) {
2400
+ if (isExplicitlyBatching()) {
2401
+ if (this._batchPendingMessages === null) {
2402
+ this._batchPendingMessages = [];
2403
+ registerBatchFlushHook(() => this._flushBatchPending());
2404
+ }
2405
+ for (const m of messages) this._batchPendingMessages.push(m);
2406
+ return;
2407
+ }
2408
+ downWithBatch(this._deliverToSinks, messages, this._config.tierOf);
2409
+ }
2410
+ /**
2411
+ * @internal Flushes the accumulated batch through `downWithBatch` and
2412
+ * clears the pending state. Idempotent — safe to call when pending is
2413
+ * already null or empty (e.g. on a `batch()` throw, where the hook
2414
+ * fires for cleanup but the drainPhase queues are wiped after).
2415
+ *
2416
+ * Critical: the accumulated batch is interleaved per-emit framings like
2417
+ * `[DIRTY, DATA(1), DIRTY, DATA(2)]` — non-monotone tier order. We must
2418
+ * re-frame to sort by tier before handing to `downWithBatch`, which
2419
+ * assumes pre-sorted input. `_frameBatch` also handles the synthetic
2420
+ * DIRTY prepend rule (no-op here — `hasDirty` is true since each
2421
+ * accumulated emit already carries its own DIRTY prefix).
2422
+ */
2423
+ _flushBatchPending() {
2424
+ const pending = this._batchPendingMessages;
2425
+ if (pending === null) return;
2426
+ this._batchPendingMessages = null;
2427
+ if (pending.length === 0) return;
2428
+ const framed = this._frameBatch(pending);
2429
+ downWithBatch(this._deliverToSinks, framed, this._config.tierOf);
2430
+ }
2335
2431
  };
2336
2432
  var isNodeArray = (value) => Array.isArray(value);
2337
2433
  var isNodeOptionsObject = (value) => typeof value === "object" && value != null && !Array.isArray(value);
@@ -7182,6 +7278,10 @@ __export(graph_exports, {
7182
7278
  });
7183
7279
 
7184
7280
  // src/patterns/_internal.ts
7281
+ function emitToMeta(metaNode, value) {
7282
+ if (metaNode == null) return;
7283
+ downWithBatch((msgs) => metaNode.down(msgs), [[DATA, value]], defaultConfig.tierOf);
7284
+ }
7185
7285
  function tryIncrementBounded(counter, cap) {
7186
7286
  const cur = counter.cache ?? 0;
7187
7287
  if (cur >= cap) return false;
@@ -18324,13 +18424,9 @@ function reactiveLayout(opts) {
18324
18424
  const hitRate = lookups === 0 ? 1 : measureStats.hits / lookups;
18325
18425
  const meta = segmentsNode.meta;
18326
18426
  if (meta) {
18327
- const hr = hitRate;
18328
- const len = result.length;
18329
- const el = elapsed;
18330
- const tierOf = defaultConfig.tierOf;
18331
- downWithBatch((msgs) => meta["cache-hit-rate"]?.down(msgs), [[DATA, hr]], tierOf);
18332
- downWithBatch((msgs) => meta["segment-count"]?.down(msgs), [[DATA, len]], tierOf);
18333
- downWithBatch((msgs) => meta["layout-time-ns"]?.down(msgs), [[DATA, el]], tierOf);
18427
+ emitToMeta(meta["cache-hit-rate"], hitRate);
18428
+ emitToMeta(meta["segment-count"], result.length);
18429
+ emitToMeta(meta["layout-time-ns"], elapsed);
18334
18430
  }
18335
18431
  actions.emit(result);
18336
18432
  return () => {
@@ -21659,9 +21755,8 @@ function reactiveBlockLayout(opts) {
21659
21755
  const elapsed = monotonicNs() - t0;
21660
21756
  const meta = measuredBlocksNode.meta;
21661
21757
  if (meta) {
21662
- const tierOf = defaultConfig.tierOf;
21663
- downWithBatch((msgs) => meta["block-count"]?.down(msgs), [[DATA, result.length]], tierOf);
21664
- downWithBatch((msgs) => meta["layout-time-ns"]?.down(msgs), [[DATA, elapsed]], tierOf);
21758
+ emitToMeta(meta["block-count"], result.length);
21759
+ emitToMeta(meta["layout-time-ns"], elapsed);
21665
21760
  }
21666
21761
  actions.emit(result);
21667
21762
  return () => {