pond-ts 0.15.1 → 0.16.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/CHANGELOG.md +230 -1
- package/dist/LiveAggregation.d.ts +34 -1
- package/dist/LiveAggregation.d.ts.map +1 -1
- package/dist/LiveAggregation.js +49 -0
- package/dist/LiveAggregation.js.map +1 -1
- package/dist/LiveFusedRolling.d.ts +46 -0
- package/dist/LiveFusedRolling.d.ts.map +1 -1
- package/dist/LiveFusedRolling.js +137 -18
- package/dist/LiveFusedRolling.js.map +1 -1
- package/dist/LivePartitionedFusedRolling.d.ts +31 -0
- package/dist/LivePartitionedFusedRolling.d.ts.map +1 -1
- package/dist/LivePartitionedFusedRolling.js +100 -11
- package/dist/LivePartitionedFusedRolling.js.map +1 -1
- package/dist/LivePartitionedSeries.d.ts +40 -13
- package/dist/LivePartitionedSeries.d.ts.map +1 -1
- package/dist/LivePartitionedSeries.js +42 -0
- package/dist/LivePartitionedSeries.js.map +1 -1
- package/dist/LivePartitionedSyncRolling.d.ts +30 -0
- package/dist/LivePartitionedSyncRolling.d.ts.map +1 -1
- package/dist/LivePartitionedSyncRolling.js +91 -6
- package/dist/LivePartitionedSyncRolling.js.map +1 -1
- package/dist/LiveReduce.d.ts +137 -0
- package/dist/LiveReduce.d.ts.map +1 -0
- package/dist/LiveReduce.js +355 -0
- package/dist/LiveReduce.js.map +1 -0
- package/dist/LiveRollingAggregation.d.ts +55 -0
- package/dist/LiveRollingAggregation.d.ts.map +1 -1
- package/dist/LiveRollingAggregation.js +110 -7
- package/dist/LiveRollingAggregation.js.map +1 -1
- package/dist/LiveSeries.d.ts +90 -3
- package/dist/LiveSeries.d.ts.map +1 -1
- package/dist/LiveSeries.js +181 -2
- package/dist/LiveSeries.js.map +1 -1
- package/dist/LiveView.d.ts +40 -3
- package/dist/LiveView.d.ts.map +1 -1
- package/dist/LiveView.js +115 -3
- package/dist/LiveView.js.map +1 -1
- package/dist/TimeSeries.d.ts +7 -1
- package/dist/TimeSeries.d.ts.map +1 -1
- package/dist/TimeSeries.js +1 -1
- package/dist/TimeSeries.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/live-history.d.ts +56 -0
- package/dist/live-history.d.ts.map +1 -0
- package/dist/live-history.js +78 -0
- package/dist/live-history.js.map +1 -0
- package/dist/types-fused-rolling.d.ts +52 -8
- package/dist/types-fused-rolling.d.ts.map +1 -1
- package/dist/utils/duration.d.ts +19 -1
- package/dist/utils/duration.d.ts.map +1 -1
- package/dist/utils/duration.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,10 +7,239 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
7
7
|
file covers both packages. Pre-1.0: minor bumps may include new features and
|
|
8
8
|
type-level changes; patch bumps are strictly additive.
|
|
9
9
|
|
|
10
|
-
[Unreleased]: https://github.com/pjm17971/pond-ts/compare/v0.
|
|
10
|
+
[Unreleased]: https://github.com/pjm17971/pond-ts/compare/v0.16.0...HEAD
|
|
11
11
|
|
|
12
12
|
## [Unreleased]
|
|
13
13
|
|
|
14
|
+
## [0.16.0] — 2026-05-06
|
|
15
|
+
|
|
16
|
+
Live-API ergonomic wave. Four PRs:
|
|
17
|
+
[#122](https://github.com/pjm17971/pond-ts/pull/122) (buffer-as-window
|
|
18
|
+
Tier 1), [#123](https://github.com/pjm17971/pond-ts/pull/123)
|
|
19
|
+
(`stats()` accessor), [#124](https://github.com/pjm17971/pond-ts/pull/124)
|
|
20
|
+
(`history` option + compile-time fused uniqueness),
|
|
21
|
+
[#125](https://github.com/pjm17971/pond-ts/pull/125) (Tier 2 query
|
|
22
|
+
primitives). Strictly additive surface — no public-API removals or
|
|
23
|
+
narrowings.
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
- **`live.reduce(mapping, opts?)`** on `LiveSeries` and `LiveView`
|
|
28
|
+
— streaming reduce over the source's current buffer. Mirrors
|
|
29
|
+
`series.reduce(mapping)` from batch but reactive: per-event
|
|
30
|
+
`add`, per-eviction `remove`, microtask-deferred trigger
|
|
31
|
+
emission so retention has run before the snapshot. Closes the
|
|
32
|
+
buffer-as-window persona's biggest ergonomic gap.
|
|
33
|
+
- **`live.timeRange()`** on `LiveSeries` and `LiveView` — O(1)
|
|
34
|
+
temporal extent of the current buffer (`undefined` when empty).
|
|
35
|
+
- **`live.eventRate()`** on `LiveSeries` and `LiveView` — O(1)
|
|
36
|
+
events-per-second over the buffer's time span (zero when fewer
|
|
37
|
+
than two events). Convenience over the existing
|
|
38
|
+
`view.eventRate()` shape; no window argument required.
|
|
39
|
+
- **`live.count()`** on `LiveSeries` (alias for `length`) for
|
|
40
|
+
parity with `LiveView.count()` and chainable composition with
|
|
41
|
+
`eventRate()`.
|
|
42
|
+
- **`stats()` accessor on every live accumulator/series.** Per-class
|
|
43
|
+
shapes, all returning a plain record (cumulative integer counters
|
|
44
|
+
+ current-state fields):
|
|
45
|
+
|
|
46
|
+
| Class | Shape |
|
|
47
|
+
|---|---|
|
|
48
|
+
| LiveSeries | `{ ingested, evicted, rejected, length, earliestTs?, latestTs? }` |
|
|
49
|
+
| LiveRollingAggregation | `{ eventsObserved, evictions, emissions, windowSize }` |
|
|
50
|
+
| LiveFusedRolling | `{ eventsObserved, evictions, emissions, windowSize, windowsCount }` |
|
|
51
|
+
| LiveAggregation | `{ eventsObserved, bucketsClosed, openBuckets, openBucketStart? }` |
|
|
52
|
+
| LiveReduce | `{ eventsObserved, evictions, emissions, bufferSize }` |
|
|
53
|
+
| LivePartitionedSeries | `{ partitions, eventsRouted }` |
|
|
54
|
+
| LivePartitionedSyncRolling | `{ partitions, eventsObserved, emissions, windowSize }` |
|
|
55
|
+
| LivePartitionedFusedRolling | `{ partitions, eventsObserved, emissions, windowSize, windowsCount }` |
|
|
56
|
+
|
|
57
|
+
Per-event cost: ~1-3 integer increments in already-existing
|
|
58
|
+
handlers. `stats()` itself is O(1) — or O(partitions) for the
|
|
59
|
+
max-across-partitions `windowSize` on partitioned variants.
|
|
60
|
+
Polling-based by design — wall-clock timers inside pond would
|
|
61
|
+
break the data-is-the-clock invariant.
|
|
62
|
+
|
|
63
|
+
- **`history: false | RetentionPolicy` option on
|
|
64
|
+
`LiveRollingAggregation` and `LiveFusedRolling`** (and
|
|
65
|
+
partitioned variants — threaded through
|
|
66
|
+
`LivePartitionedSeries.rolling` end-to-end). Controls how much
|
|
67
|
+
of the rolling's emitted history the accumulator keeps in its
|
|
68
|
+
own output buffer (the one read by `length` / `at(i)`). Default
|
|
69
|
+
`true` preserves current behavior; `false` skips the push
|
|
70
|
+
entirely (`'event'` listeners and `value()` still work, but
|
|
71
|
+
`length` stays at 0); `RetentionPolicy` (`{ maxEvents?, maxAge? }`)
|
|
72
|
+
caps the buffer using the same shape as `LiveSeries.retention`.
|
|
73
|
+
Stricter validation: rejects 0, negative, or non-integer
|
|
74
|
+
`maxEvents`; `Infinity` is the documented "no cap" sentinel.
|
|
75
|
+
|
|
76
|
+
- **Compile-time uniqueness check on fused output columns**
|
|
77
|
+
(`FusedMappingValid<FM>`). Two windows declaring the same
|
|
78
|
+
output name now fail at the call site with a branded error
|
|
79
|
+
type naming the conflict. Wired into all four fused-rolling
|
|
80
|
+
overloads (LiveSeries, LiveView, root + view
|
|
81
|
+
LivePartitionedSeries). Runtime check still in place.
|
|
82
|
+
|
|
83
|
+
- **Tier 2 query primitives on `LiveSeries` and `LiveView`** —
|
|
84
|
+
pure parity additions mirroring `TimeSeries`:
|
|
85
|
+
- `find(pred)`, `some(pred)`, `every(pred)` — O(N) predicate query
|
|
86
|
+
- `includesKey(key)`, `bisect(key)`, `atOrBefore(key)`,
|
|
87
|
+
`atOrAfter(key)` — O(log N) binary search on the sorted buffer
|
|
88
|
+
|
|
89
|
+
Use cases: "is there already an event with key K?" / "what was
|
|
90
|
+
the most recent event before time T?" Both come up in dashboard
|
|
91
|
+
patterns where the live buffer IS the working set.
|
|
92
|
+
|
|
93
|
+
- **`KeyLike` type** exported from the package root (re-exported
|
|
94
|
+
from `TimeSeries`). Accepts `EventKey | TimestampInput |
|
|
95
|
+
TimeRangeInput | IntervalInput`; normalised by the new query
|
|
96
|
+
primitives.
|
|
97
|
+
|
|
98
|
+
- **`DurationLiteral` and `DurationUnit` types** extracted from
|
|
99
|
+
`utils/duration.ts` and exported. Same shape as before, just
|
|
100
|
+
named.
|
|
101
|
+
|
|
102
|
+
- **Concrete return types from partitioned rolling overloads.**
|
|
103
|
+
`LivePartitionedSeries.rolling` and `LivePartitionedView.rolling`
|
|
104
|
+
clock-trigger and fused-mapping overloads now return the concrete
|
|
105
|
+
`LivePartitionedSyncRolling` / `LivePartitionedFusedRolling`
|
|
106
|
+
classes (instead of bare `LiveSource<...>`), exposing `stats()`
|
|
107
|
+
to callers without a cast. Strictly additive — concrete classes
|
|
108
|
+
implement `LiveSource` plus `stats()`.
|
|
109
|
+
|
|
110
|
+
### Changed
|
|
111
|
+
|
|
112
|
+
- **`LiveSeries.clear()`** now increments the `evicted` counter
|
|
113
|
+
on `stats()` to match the existing `'evict'` listener fan-out.
|
|
114
|
+
Previously cleared the buffer and fired listeners but didn't
|
|
115
|
+
update the counter.
|
|
116
|
+
- **`LiveSeries` insertion comparator** delegates to
|
|
117
|
+
`EventKey.compare` (was previously `begin/end` only). Affects
|
|
118
|
+
interval-keyed series with same-span / different-value
|
|
119
|
+
intervals: previously stored in arrival order — and broke
|
|
120
|
+
`bisect`/`includesKey` queries — now stored in value-ascending
|
|
121
|
+
order. Time-keyed and timeRange-keyed series unaffected.
|
|
122
|
+
- **`LiveView.map(fn)` runtime check** rejects re-keying maps
|
|
123
|
+
that produce non-monotonic outputs. Throws `ValidationError`
|
|
124
|
+
at append time rather than silently breaking the view's
|
|
125
|
+
sorted-buffer invariant (which Tier 2 query primitives rely
|
|
126
|
+
on). Sane transforms (data-only maps, monotonic time-shifts)
|
|
127
|
+
unaffected.
|
|
128
|
+
- **`LiveAggregationOptions.grace`** type tightened from
|
|
129
|
+
`DurationInput | \`${number}${unit}\`` (redundant union) to
|
|
130
|
+
just `DurationInput`. No behavioral change.
|
|
131
|
+
|
|
132
|
+
### Notes
|
|
133
|
+
|
|
134
|
+
- React package (`@pond-ts/react`) version-bumped lock-step; no
|
|
135
|
+
hook surface changes in this release. New core hooks
|
|
136
|
+
(`useLiveReduce`, `useStats`, optional-window `useEventRate`)
|
|
137
|
+
are queued for a follow-up — see PLAN.md for the design.
|
|
138
|
+
- Codex caught real bugs on every Layer-2-reviewed PR in this
|
|
139
|
+
wave (1 HIGH + 1 MEDIUM on PR #123, 1 HIGH + 1 MEDIUM on
|
|
140
|
+
PR #124, 2 MEDIUM on PR #125). The Layer 2 + Codex two-pass
|
|
141
|
+
protocol earned its keep again.
|
|
142
|
+
|
|
143
|
+
## [0.15.2] — 2026-05-06
|
|
144
|
+
|
|
145
|
+
Performance fix for live rolling at firehose rates. The gRPC
|
|
146
|
+
experiment's step 6
|
|
147
|
+
([pond-grpc-experiment#26](https://github.com/pjm17971/pond-grpc-experiment/pull/26))
|
|
148
|
+
attempted to use the non-partitioned `live.rolling({...}, opts)`
|
|
149
|
+
overload for global counters and saw throughput collapse from 88k/s
|
|
150
|
+
to 21k/s — a 4× regression even worse than the V7→V6 gap that
|
|
151
|
+
motivated v0.15.0. The cliff is the same `Array.shift()` pattern
|
|
152
|
+
already flagged as queued tactical work in PLAN; the gRPC encounter
|
|
153
|
+
made it urgent.
|
|
154
|
+
|
|
155
|
+
### Fixed
|
|
156
|
+
|
|
157
|
+
- **Eviction is now O(1) per ingest in all live rolling classes.**
|
|
158
|
+
Replaced `entries.shift()` (worst-case O(N) on the deque length)
|
|
159
|
+
with a head-index pointer + periodic batched compaction:
|
|
160
|
+
- `LiveFusedRolling.#compactFront` — non-partitioned multi-window
|
|
161
|
+
- `LivePartitionedFusedRolling.#compactPartitionFront` —
|
|
162
|
+
per-partition fused
|
|
163
|
+
- `LiveRollingAggregation.#removeFirst` — single-window
|
|
164
|
+
non-partitioned
|
|
165
|
+
- `LivePartitionedSyncRolling.#evictPartition` — per-partition
|
|
166
|
+
single-window synced
|
|
167
|
+
|
|
168
|
+
The pattern: track a `frontIdx` field; "evicting" advances the
|
|
169
|
+
pointer instead of shifting. When the dead prefix grows past
|
|
170
|
+
half the array length, batch-splice it off and reset the
|
|
171
|
+
pointer. Per-event cost stays O(1) amortized at every live-
|
|
172
|
+
window size — each surviving entry is copied at most once
|
|
173
|
+
between two compactions, and compactions fire at most every
|
|
174
|
+
(live-size) events.
|
|
175
|
+
|
|
176
|
+
An earlier draft also compacted on a fixed 1024-entry threshold;
|
|
177
|
+
Codex's adversarial review on PR #119 caught that this would
|
|
178
|
+
reintroduce O(live_size / 1024) per-eviction cost on large
|
|
179
|
+
windows (100k+ live entries) — the threshold would fire
|
|
180
|
+
repeatedly and copy the entire live slice each time. The
|
|
181
|
+
proportional guard alone has the right amortization invariant.
|
|
182
|
+
|
|
183
|
+
### Performance
|
|
184
|
+
|
|
185
|
+
`packages/core/scripts/perf-fused-rolling.mjs` — new regression
|
|
186
|
+
scenario that reproduces the cliff (50k-event deque with continuous
|
|
187
|
+
eviction):
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
Worst-case shift pattern (50s window, 50k fill + 50k evict):
|
|
191
|
+
median (ms) min (ms) max (ms)
|
|
192
|
+
pre-fix 1123.12 1118.47 1149.95
|
|
193
|
+
v0.15.2 53.00 52.34 53.56
|
|
194
|
+
speedup 21.2×
|
|
195
|
+
|
|
196
|
+
Steady-state deque, no eviction (5m window, 200k events):
|
|
197
|
+
median (ms) min (ms) max (ms)
|
|
198
|
+
pre-fix 91.28 89.84 97.04
|
|
199
|
+
v0.15.2 99.28 96.80 103.94
|
|
200
|
+
delta +9% (within noise)
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
The fix targets the eviction-loop case specifically. Workloads with
|
|
204
|
+
no eviction (or rare eviction relative to ingest) see no change —
|
|
205
|
+
V8's internal hidden-offset optimization handles those well. The
|
|
206
|
+
cliff appears once eviction fires per-ingest at large deque size,
|
|
207
|
+
which is exactly the firehose-rolling shape.
|
|
208
|
+
|
|
209
|
+
### Why the cliff was hidden
|
|
210
|
+
|
|
211
|
+
V8's `Array.shift()` is amortized O(1) for shift-heavy workloads up
|
|
212
|
+
to ~10k-element arrays — it maintains a hidden offset and only
|
|
213
|
+
periodically compacts. Beyond that size or with mixed access
|
|
214
|
+
patterns, the optimization breaks down and shift falls back to true
|
|
215
|
+
O(N) memcpy. The bench scales from 1k to 50k deque sizes and the
|
|
216
|
+
cliff appears around 30k-40k. Pond's tests pin behavior at small
|
|
217
|
+
window sizes; the cliff was invisible to the test suite, only
|
|
218
|
+
showed up under the gRPC experiment's firehose load.
|
|
219
|
+
|
|
220
|
+
### What this unlocks
|
|
221
|
+
|
|
222
|
+
The agent's manual-counter workaround in `aggregator/src/aggregate.ts`
|
|
223
|
+
can now drop. The natural shape — a non-partitioned
|
|
224
|
+
`live.rolling({...}, { trigger })` over the firehose — is now
|
|
225
|
+
viable at the rates the experiment cares about. PLAN's
|
|
226
|
+
"`samples` reducer would exhibit a similar shape at firehose"
|
|
227
|
+
caveat also resolves: same fix in the same call sites covers
|
|
228
|
+
samples too.
|
|
229
|
+
|
|
230
|
+
### Note for downstream consumers
|
|
231
|
+
|
|
232
|
+
This is a **strict-additive perf fix.** All output behavior is
|
|
233
|
+
preserved — same eviction order, same emission timing, same
|
|
234
|
+
snapshot values. The deque's internal representation changed
|
|
235
|
+
(`#entries[0]` may now be a logically-evicted entry until periodic
|
|
236
|
+
compaction); any downstream code reading `#entries` directly would
|
|
237
|
+
break, but those fields are private. Public APIs and types are
|
|
238
|
+
unchanged.
|
|
239
|
+
|
|
240
|
+
[0.16.0]: https://github.com/pjm17971/pond-ts/compare/v0.15.2...v0.16.0
|
|
241
|
+
[0.15.2]: https://github.com/pjm17971/pond-ts/compare/v0.15.1...v0.15.2
|
|
242
|
+
|
|
14
243
|
## [0.15.1] — 2026-05-05
|
|
15
244
|
|
|
16
245
|
Type-narrowing follow-up to v0.15.0. The fused partitioned-rolling
|
|
@@ -12,7 +12,7 @@ type BucketListener = (event: ClosedEvent) => void;
|
|
|
12
12
|
type CloseListener = (event: ClosedEvent) => void;
|
|
13
13
|
type UpdateListener = () => void;
|
|
14
14
|
export type LiveAggregationOptions = {
|
|
15
|
-
grace?: DurationInput
|
|
15
|
+
grace?: DurationInput;
|
|
16
16
|
};
|
|
17
17
|
export declare class LiveAggregation<S extends SeriesSchema, Out extends SeriesSchema = SeriesSchema> {
|
|
18
18
|
#private;
|
|
@@ -50,6 +50,39 @@ export declare class LiveAggregation<S extends SeriesSchema, Out extends SeriesS
|
|
|
50
50
|
}): LiveView<DiffSchema<Out, Targets>>;
|
|
51
51
|
rolling<const M extends AggregateMap<Out>>(windowSize: RollingWindow, mapping: M, options?: LiveRollingOptions): LiveRollingAggregation<Out, RollingSchema<Out, M>>;
|
|
52
52
|
rolling<const M extends AggregateOutputMap<Out>>(windowSize: RollingWindow, mapping: M, options?: LiveRollingOptions): LiveRollingAggregation<Out, RollingOutputMapSchema<Out, M>>;
|
|
53
|
+
/**
|
|
54
|
+
* Pipeline stats snapshot — cumulative counters since
|
|
55
|
+
* construction plus current bucket-state. Cheap O(1).
|
|
56
|
+
*
|
|
57
|
+
* - `eventsObserved`: total source events that contributed to a
|
|
58
|
+
* bucket. Includes events replayed at construction from a
|
|
59
|
+
* non-empty source. Late events (those whose bucket was
|
|
60
|
+
* already closed under the watermark + grace window) are
|
|
61
|
+
* silently dropped and do NOT increment this counter — match
|
|
62
|
+
* the silent-drop shape in {@link LiveSeries.stats} for
|
|
63
|
+
* late-event handling. Never decreases.
|
|
64
|
+
* - `bucketsClosed`: total buckets finalized (= length of the
|
|
65
|
+
* closed-event stream, also exposed via `length`). Never
|
|
66
|
+
* decreases.
|
|
67
|
+
* - `openBuckets`: current count of pending (unclosed) buckets.
|
|
68
|
+
* Equal to `#pending.size`. Drops back as the watermark
|
|
69
|
+
* advances and buckets close.
|
|
70
|
+
* - `openBucketStart`: earliest open bucket's start ms, or
|
|
71
|
+
* undefined if no buckets are pending.
|
|
72
|
+
*
|
|
73
|
+
* Note on field omission vs `LiveRollingAggregation.stats`: this
|
|
74
|
+
* shape doesn't carry an `emissions` field because every closed
|
|
75
|
+
* bucket pushes exactly one event to the output stream — the
|
|
76
|
+
* count would be identical to `bucketsClosed`. `openBuckets` and
|
|
77
|
+
* `openBucketStart` give the bucket-lifecycle observability
|
|
78
|
+
* users actually reach for.
|
|
79
|
+
*/
|
|
80
|
+
stats(): {
|
|
81
|
+
eventsObserved: number;
|
|
82
|
+
bucketsClosed: number;
|
|
83
|
+
openBuckets: number;
|
|
84
|
+
openBucketStart?: number;
|
|
85
|
+
};
|
|
53
86
|
dispose(): void;
|
|
54
87
|
}
|
|
55
88
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveAggregation.d.ts","sourceRoot":"","sources":["../src/LiveAggregation.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,QAAQ,EAIR,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAElB,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,0BAA0B,EAC1B,WAAW,EACX,aAAa,EACb,YAAY,EACZ,YAAY,EAEb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAGnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAQzD,KAAK,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC;AAE5E,KAAK,cAAc,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AACnD,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAClD,KAAK,cAAc,GAAG,MAAM,IAAI,CAAC;AAEjC,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,CAAC,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"LiveAggregation.d.ts","sourceRoot":"","sources":["../src/LiveAggregation.ts"],"names":[],"mappings":"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"}
|
package/dist/LiveAggregation.js
CHANGED
|
@@ -20,6 +20,10 @@ export class LiveAggregation {
|
|
|
20
20
|
#onClose;
|
|
21
21
|
#onUpdate;
|
|
22
22
|
#unsubscribe;
|
|
23
|
+
// Pipeline counters for {@link LiveAggregation.stats}.
|
|
24
|
+
// Cumulative since construction; never reset.
|
|
25
|
+
#statsEventsObserved = 0;
|
|
26
|
+
#statsBucketsClosed = 0;
|
|
23
27
|
constructor(source, sequence, mapping, options) {
|
|
24
28
|
this.name = source.name;
|
|
25
29
|
this.#stepMs = sequence.stepMs();
|
|
@@ -134,6 +138,49 @@ export class LiveAggregation {
|
|
|
134
138
|
rolling(windowSize, mapping, options) {
|
|
135
139
|
return new LiveRollingAggregation(this, windowSize, mapping, options);
|
|
136
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Pipeline stats snapshot — cumulative counters since
|
|
143
|
+
* construction plus current bucket-state. Cheap O(1).
|
|
144
|
+
*
|
|
145
|
+
* - `eventsObserved`: total source events that contributed to a
|
|
146
|
+
* bucket. Includes events replayed at construction from a
|
|
147
|
+
* non-empty source. Late events (those whose bucket was
|
|
148
|
+
* already closed under the watermark + grace window) are
|
|
149
|
+
* silently dropped and do NOT increment this counter — match
|
|
150
|
+
* the silent-drop shape in {@link LiveSeries.stats} for
|
|
151
|
+
* late-event handling. Never decreases.
|
|
152
|
+
* - `bucketsClosed`: total buckets finalized (= length of the
|
|
153
|
+
* closed-event stream, also exposed via `length`). Never
|
|
154
|
+
* decreases.
|
|
155
|
+
* - `openBuckets`: current count of pending (unclosed) buckets.
|
|
156
|
+
* Equal to `#pending.size`. Drops back as the watermark
|
|
157
|
+
* advances and buckets close.
|
|
158
|
+
* - `openBucketStart`: earliest open bucket's start ms, or
|
|
159
|
+
* undefined if no buckets are pending.
|
|
160
|
+
*
|
|
161
|
+
* Note on field omission vs `LiveRollingAggregation.stats`: this
|
|
162
|
+
* shape doesn't carry an `emissions` field because every closed
|
|
163
|
+
* bucket pushes exactly one event to the output stream — the
|
|
164
|
+
* count would be identical to `bucketsClosed`. `openBuckets` and
|
|
165
|
+
* `openBucketStart` give the bucket-lifecycle observability
|
|
166
|
+
* users actually reach for.
|
|
167
|
+
*/
|
|
168
|
+
stats() {
|
|
169
|
+
const result = {
|
|
170
|
+
eventsObserved: this.#statsEventsObserved,
|
|
171
|
+
bucketsClosed: this.#statsBucketsClosed,
|
|
172
|
+
openBuckets: this.#pending.size,
|
|
173
|
+
};
|
|
174
|
+
if (this.#pending.size > 0) {
|
|
175
|
+
let minStart = Infinity;
|
|
176
|
+
for (const start of this.#pending.keys()) {
|
|
177
|
+
if (start < minStart)
|
|
178
|
+
minStart = start;
|
|
179
|
+
}
|
|
180
|
+
result.openBucketStart = minStart;
|
|
181
|
+
}
|
|
182
|
+
return result;
|
|
183
|
+
}
|
|
137
184
|
dispose() {
|
|
138
185
|
this.#unsubscribe();
|
|
139
186
|
}
|
|
@@ -151,6 +198,7 @@ export class LiveAggregation {
|
|
|
151
198
|
const closeCutoff = this.#watermark - this.#graceMs;
|
|
152
199
|
if (bucket.end <= closeCutoff)
|
|
153
200
|
return;
|
|
201
|
+
this.#statsEventsObserved++;
|
|
154
202
|
let pending = this.#pending.get(bucket.start);
|
|
155
203
|
if (!pending) {
|
|
156
204
|
// Built-ins use their dedicated O(1) machinery; custom functions
|
|
@@ -210,6 +258,7 @@ export class LiveAggregation {
|
|
|
210
258
|
}
|
|
211
259
|
const evt = new Event(interval, record);
|
|
212
260
|
this.#closedEvents.push(evt);
|
|
261
|
+
this.#statsBucketsClosed++;
|
|
213
262
|
for (const fn of this.#onClose)
|
|
214
263
|
fn(evt);
|
|
215
264
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveAggregation.js","sourceRoot":"","sources":["../src/LiveAggregation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LiveAggregation.js","sourceRoot":"","sources":["../src/LiveAggregation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,GAE1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,kBAAkB,GAGnB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,GAGvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAA6B,MAAM,qBAAqB,CAAC;AAmBhF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAmBpD,MAAM,OAAO,eAAe;IAIjB,IAAI,CAAS;IACb,MAAM,CAAM;IAEZ,QAAQ,CAAwB;IAChC,OAAO,CAAS;IAChB,SAAS,CAAS;IAClB,QAAQ,CAAS;IAEjB,QAAQ,CAA6B;IAC9C,UAAU,CAAS;IACV,aAAa,CAAgB;IAE7B,SAAS,CAAsB;IAC/B,QAAQ,CAAqB;IAC7B,SAAS,CAAsB;IAC/B,YAAY,CAAa;IAElC,uDAAuD;IACvD,8CAA8C;IAC9C,oBAAoB,GAAG,CAAC,CAAC;IACzB,mBAAmB,GAAG,CAAC,CAAC;IAExB,YACE,MAAqB,EACrB,QAAkB,EAClB,OAAgD,EAChD,OAAgC;QAEhC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,aAAa,GACjB,eAAe,IAAI,MAAM;YACzB,OAAQ,MAAc,CAAC,aAAa,KAAK,QAAQ;YACjD,QAAQ,CAAE,MAAc,CAAC,aAAa,CAAC;YACrC,CAAC,CAAE,MAAc,CAAC,aAAa;YAC/B,CAAC,CAAC,CAAC,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,KAAK;YAC5B,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,KAAY,CAAC;YACrC,CAAC,CAAC,aAAa,CAAC;QAElB,gEAAgE;QAChE,2DAA2D;QAC3D,gEAAgE;QAChE,yDAAyD;QACzD,+BAA+B;QAC/B,IAAI,CAAC,QAAQ,GAAG,yBAAyB,CACvC,MAAM,CAAC,MAAM,EACb,OAAkD,CACnD,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC1B,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE;YAClC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3B,IAAI,EAAE,CAAC,CAAC,MAAM;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;SACJ,CAAmB,CAAC;QAErB,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,CAAC,QAAQ,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC/C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS;gBAAE,EAAE,EAAE,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IACnC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IACnC,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,EAAE,CAAC,KAAa;QACd,IAAI,KAAK,GAAG,CAAC;YAAE,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,KAAK,CAAC;QACzD,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAoC,CAAC;IACtE,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAMD,EAAE,CACA,IAA6C,EAC7C,EAAmD;QAEnD,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACzC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAmB,CAAC,CAAC;YACvC,IAAI,IAAI,KAAK,OAAO;gBAClB,OAAO,GAAG,EAAE;oBACV,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAmB,CAAC,CAAC;gBAC5C,CAAC,CAAC;YACJ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAoB,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAoB,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+DAA+D;IAE/D,MAAM,CAAC,SAAkD;QACvD,OAAO,IAAI,QAAQ,CAAC,IAAW,EAAE,CAAC,KAAU,EAAE,EAAE,CAC9C,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CACrC,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,EAAuD;QACzD,OAAO,IAAI,QAAQ,CAAC,IAAW,EAAE,EAAS,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CACJ,GAAG,IAAU;QAEb,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE;YACf,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAW,CAAC,CAAC;SACpE,CAAwD,CAAC;QAE1D,OAAO,IAAI,QAAQ,CAAC,IAAW,EAAE,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE;YACtE,MAAM,EAAE,SAAgB;SACzB,CAAQ,CAAC;IACZ,CAAC;IAED,MAAM,CAAC,IAAmB;QACxB,OAAO,IAAI,QAAQ,CAAC,IAAW,EAAE,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAQ,CAAC;IAC9E,CAAC;IAED,IAAI,CACF,OAAmC,EACnC,OAA4B;QAE5B,OAAO,YAAY,CAAC,IAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CACF,OAAmC,EACnC,OAA4B;QAE5B,OAAO,YAAY,CAAC,IAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED,SAAS,CACP,OAAmC,EACnC,OAA4B;QAE5B,OAAO,YAAY,CAAC,IAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,CACF,QAAiD,EACjD,OAA4B;QAE5B,OAAO,YAAY,CAAC,IAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,UAAU,CAAwD,IAOjE;QACC,OAAO,kBAAkB,CAAC,IAAW,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAYD,OAAO,CACL,UAAyB,EACzB,OAAoD,EACpD,OAA4B;QAE5B,OAAO,IAAI,sBAAsB,CAC/B,IAAW,EACX,UAAU,EACV,OAAO,EACP,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,KAAK;QAMH,MAAM,MAAM,GAKR;YACF,cAAc,EAAE,IAAI,CAAC,oBAAoB;YACzC,aAAa,EAAE,IAAI,CAAC,mBAAmB;YACvC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;SAChC,CAAC;QACF,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,QAAQ,GAAG,QAAQ,CAAC;YACxB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;gBACzC,IAAI,KAAK,GAAG,QAAQ;oBAAE,QAAQ,GAAG,KAAK,CAAC;YACzC,CAAC;YACD,MAAM,CAAC,eAAe,GAAG,QAAQ,CAAC;QACpC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,+DAA+D;IAE/D,UAAU,CAAC,SAAiB;QAC1B,MAAM,KAAK,GACT,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO;YACtE,IAAI,CAAC,SAAS,CAAC;QACjB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,KAAwB;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9C,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAEzB,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QAE/C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEpD,IAAI,MAAM,CAAC,GAAG,IAAI,WAAW;YAAE,OAAO;QAEtC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,iEAAiE;YACjE,yDAAyD;YACzD,iDAAiD;YACjD,OAAO,GAAG;gBACR,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;aAC5D,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAA6C,CAAC;QACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,OAAO,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;gBAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC,CAAC;YACH,MAAM,MAAM,GAA4C,EAAE,CAAC;YAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,QAAQ,EAAE,CAAC;YACnE,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACxC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS;gBAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAED,cAAc,CAAC,WAAmB;QAChC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACvC,IAAI,CAAC,CAAC,GAAG,IAAI,WAAW;gBAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAClC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,eAAe,CAAC,MAAqB;QACnC,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;YAC5B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,GAAG,EAAE,MAAM,CAAC,GAAG;SAChB,CAAC,CAAC;QACH,MAAM,MAAM,GAA4C,EAAE,CAAC;QAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,QAAQ,EAAE,CAAC;QAClE,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ;YAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,YAAY,CAAC,WAAoB;QAC/B,MAAM,IAAI,GAAgB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACzD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAA6C,CAAC;YACrE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CACrD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAC5B,CAAC;YACF,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;gBAC/B,IAAI,CAAC,IAAI,CAAC;oBACR,IAAI,QAAQ,CAAC;wBACX,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,GAAG,EAAE,CAAC,CAAC,GAAG;qBACX,CAAC;oBACF,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;iBACrC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,IAAI,UAAU,CAAC;YACpB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAW;SAClB,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -2,6 +2,20 @@ import type { ColumnValue, EventForSchema, LiveSource, SeriesSchema } from './ty
|
|
|
2
2
|
import type { FusedMapping } from './types-fused-rolling.js';
|
|
3
3
|
import type { LiveRollingOptions } from './LiveRollingAggregation.js';
|
|
4
4
|
type EventListener = (event: any) => void;
|
|
5
|
+
/**
|
|
6
|
+
* Compaction policy: splice off the dead prefix only when it grows
|
|
7
|
+
* to at least half the array (the proportional guard). This keeps
|
|
8
|
+
* per-event cost O(1) amortized at every live-window size — each
|
|
9
|
+
* surviving entry is copied at most once between two compactions,
|
|
10
|
+
* and compactions fire at most every (live-size) events.
|
|
11
|
+
*
|
|
12
|
+
* An earlier draft also compacted on a fixed 1024-entry threshold,
|
|
13
|
+
* but Codex's adversarial review on PR #119 flagged the obvious
|
|
14
|
+
* problem: at live windows of 100k+ entries, the 1024-evictions
|
|
15
|
+
* trigger fires repeatedly and copies the entire live slice each
|
|
16
|
+
* time, reintroducing O(live_size / 1024) per-eviction cost. The
|
|
17
|
+
* proportional guard alone has the right amortization invariant.
|
|
18
|
+
*/
|
|
5
19
|
/**
|
|
6
20
|
* Multi-window rolling that maintains N windows in one ingest pass
|
|
7
21
|
* over a single shared deque. Replaces the workaround of multiple
|
|
@@ -49,6 +63,38 @@ export declare class LiveFusedRolling<S extends SeriesSchema, Out extends Series
|
|
|
49
63
|
*/
|
|
50
64
|
value(): Record<string, ColumnValue | undefined>;
|
|
51
65
|
on(type: 'event', fn: EventListener): () => void;
|
|
66
|
+
/**
|
|
67
|
+
* Pipeline stats snapshot — cumulative counters since
|
|
68
|
+
* construction plus current shared-deque state. Cheap O(1).
|
|
69
|
+
*
|
|
70
|
+
* - `eventsObserved`: total source events ingested. Includes
|
|
71
|
+
* events replayed at construction from a non-empty source.
|
|
72
|
+
* Never decreases.
|
|
73
|
+
* - `evictions`: total events that have aged out of every
|
|
74
|
+
* declared window (= shared-deque front advances). Each value
|
|
75
|
+
* counts a single source event, regardless of how many
|
|
76
|
+
* per-window `remove` calls it triggered. Never decreases.
|
|
77
|
+
* - `emissions`: total merged output events fired. Never
|
|
78
|
+
* decreases. For `Trigger.event` it equals `eventsObserved`;
|
|
79
|
+
* for `Trigger.count(n)` and `Trigger.clock` it can be
|
|
80
|
+
* smaller.
|
|
81
|
+
* - `windowSize`: current live size of the shared deque
|
|
82
|
+
* (= max across all windows' live counts). Use
|
|
83
|
+
* {@link LiveFusedRolling.value} for per-window snapshots.
|
|
84
|
+
* **Note:** the partitioned variant
|
|
85
|
+
* {@link LivePartitionedSyncRolling.stats} also has a
|
|
86
|
+
* `windowSize` field, but it means "max across partitions"
|
|
87
|
+
* rather than "max across windows." Different axis, same name.
|
|
88
|
+
* - `windowsCount`: number of declared windows. Static after
|
|
89
|
+
* construction.
|
|
90
|
+
*/
|
|
91
|
+
stats(): {
|
|
92
|
+
eventsObserved: number;
|
|
93
|
+
evictions: number;
|
|
94
|
+
emissions: number;
|
|
95
|
+
windowSize: number;
|
|
96
|
+
windowsCount: number;
|
|
97
|
+
};
|
|
52
98
|
dispose(): void;
|
|
53
99
|
}
|
|
54
100
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveFusedRolling.d.ts","sourceRoot":"","sources":["../src/LiveFusedRolling.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LiveFusedRolling.d.ts","sourceRoot":"","sources":["../src/LiveFusedRolling.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAGV,WAAW,EACX,cAAc,EACd,UAAU,EACV,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,YAAY,EAAqB,MAAM,0BAA0B,CAAC;AAChF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAwCtE,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;AAE1C;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,gBAAgB,CAC3B,CAAC,SAAS,YAAY,EACtB,GAAG,SAAS,YAAY,GAAG,YAAY,CACvC,YAAW,UAAU,CAAC,GAAG,CAAC;;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;gBA+DnB,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EACrB,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,EAC7B,OAAO,GAAE,kBAAuB;IAiHlC,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,SAAS;IAKlD;;;;;OAKG;IACH,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAahD,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI;IAYhD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,KAAK,IAAI;QACP,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB;IAUD,OAAO,IAAI,IAAI;CAqLhB"}
|