pond-ts 0.11.7 → 0.12.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 +187 -1
- package/dist/LivePartitionedSeries.d.ts +11 -1
- package/dist/LivePartitionedSeries.d.ts.map +1 -1
- package/dist/LivePartitionedSeries.js +67 -15
- package/dist/LivePartitionedSeries.js.map +1 -1
- package/dist/LivePartitionedSyncRolling.d.ts +60 -0
- package/dist/LivePartitionedSyncRolling.d.ts.map +1 -0
- package/dist/LivePartitionedSyncRolling.js +307 -0
- package/dist/LivePartitionedSyncRolling.js.map +1 -0
- package/dist/LiveRollingAggregation.d.ts +25 -1
- package/dist/LiveRollingAggregation.d.ts.map +1 -1
- package/dist/LiveRollingAggregation.js +53 -1
- package/dist/LiveRollingAggregation.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/triggers.d.ts +97 -0
- package/dist/triggers.d.ts.map +1 -0
- package/dist/triggers.js +52 -0
- package/dist/triggers.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,10 +7,196 @@ 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.12.0...HEAD
|
|
11
11
|
|
|
12
12
|
## [Unreleased]
|
|
13
13
|
|
|
14
|
+
## [0.12.0] — 2026-05-01
|
|
15
|
+
|
|
16
|
+
The "triggers" release. Major redesign of how live accumulators
|
|
17
|
+
control emission cadence — `Trigger` is now a first-class concept
|
|
18
|
+
shaped by two converging real-world use cases (synchronised
|
|
19
|
+
partitioned tick aggregation in the gRPC pipeline experiment,
|
|
20
|
+
sequence-sampled rolling in webapp telemetry).
|
|
21
|
+
|
|
22
|
+
Two correctness audits before publish: a Layer 2 Claude review
|
|
23
|
+
(column collision, dispose, late-spawn, peer-dep) and a Codex
|
|
24
|
+
adversarial review (quiet-partition stale samples, pre-existing
|
|
25
|
+
data replay at construction, spawn-listener cleanup). All findings
|
|
26
|
+
fixed and pinned with regression tests. 1039 / 1039 tests pass.
|
|
27
|
+
|
|
28
|
+
### Added
|
|
29
|
+
|
|
30
|
+
- **Trigger as a first-class concept.** A new `Trigger` factory
|
|
31
|
+
exposed at the package root lets `LiveRollingAggregation` switch
|
|
32
|
+
emission cadence without changing any other shape:
|
|
33
|
+
|
|
34
|
+
```ts
|
|
35
|
+
import { LiveSeries, Sequence, Trigger } from 'pond-ts';
|
|
36
|
+
|
|
37
|
+
// Webapp telemetry: rolling 1m p95, emit on every 30 s of event-time
|
|
38
|
+
const rolling = timings.rolling(
|
|
39
|
+
'1m',
|
|
40
|
+
{ latency: 'p95' },
|
|
41
|
+
{ trigger: Trigger.clock(Sequence.every('30s')) },
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
rolling.on('event', (e) =>
|
|
45
|
+
fetch('/api/telemetry', { method: 'POST', body: JSON.stringify(e.data()) }),
|
|
46
|
+
);
|
|
47
|
+
rolling.value(); // current rolling-window snapshot, independent of trigger
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Two trigger variants in this release:
|
|
51
|
+
- **`Trigger.event()`** — per-event emission. Default; the historical
|
|
52
|
+
behavior of `LiveRollingAggregation` when no trigger is specified.
|
|
53
|
+
- **`Trigger.clock(sequence)`** — sequence-triggered emission. One
|
|
54
|
+
snapshot fires when a source event crosses an epoch-aligned
|
|
55
|
+
boundary of the (fixed-step) `Sequence`. Output keyed at boundary
|
|
56
|
+
instants. Calendar sequences are rejected upfront.
|
|
57
|
+
|
|
58
|
+
Future variants (`Trigger.count(n)`, custom predicates, compound
|
|
59
|
+
triggers) are reserved but not yet shipped.
|
|
60
|
+
|
|
61
|
+
- **Synchronised partitioned rolling.** `LivePartitionedSeries.rolling`
|
|
62
|
+
now accepts a clock trigger. The output is a
|
|
63
|
+
`LiveSource<RowSchema>` whose schema is `[time, <partitionColumn>,
|
|
64
|
+
...mappingColumns]`; on every boundary crossing, one event fires
|
|
65
|
+
per known partition, all sharing the same boundary timestamp.
|
|
66
|
+
Synchronised across partitions by construction (the bucket index is
|
|
67
|
+
shared, not per-partition).
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
// Dashboard tick aggregation: 100 hosts, 200ms cadence
|
|
71
|
+
const ticks = live
|
|
72
|
+
.partitionBy('host')
|
|
73
|
+
.rolling(
|
|
74
|
+
'1m',
|
|
75
|
+
{ cpu: 'avg' },
|
|
76
|
+
{ trigger: Trigger.clock(Sequence.every('200ms')) },
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
ticks.on('event', (e) => {
|
|
80
|
+
// e.begin() === <boundary timestamp>, same for every host this tick
|
|
81
|
+
// e.get('host') === 'api-1' | 'api-2' | …
|
|
82
|
+
// e.get('cpu') === <rolling avg for that host>
|
|
83
|
+
});
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Restricted to direct-after-`partitionBy` in this release: chained
|
|
87
|
+
sugar (`partitionBy(c).fill(...).rolling(...)`) rejects clock
|
|
88
|
+
triggers with a clear error. Lifts in a future release once a real
|
|
89
|
+
use case appears.
|
|
90
|
+
|
|
91
|
+
Closes the gRPC experiment's M3.5 dashboard friction note (the
|
|
92
|
+
hand-rolled `HostAggregator` becomes ~10 lines of pond code).
|
|
93
|
+
|
|
94
|
+
### Removed (breaking — pre-1.0)
|
|
95
|
+
|
|
96
|
+
- **`LiveSequenceRollingAggregation`** class deleted. Its capability
|
|
97
|
+
is preserved as `LiveRollingAggregation` with
|
|
98
|
+
`{ trigger: Trigger.clock(sequence) }`. Migration: replace
|
|
99
|
+
`live.rolling('1m', m).sample(seq)` with
|
|
100
|
+
`live.rolling('1m', m, { trigger: Trigger.clock(seq) })`. Single
|
|
101
|
+
rolling object now serves both backend reporting and direct
|
|
102
|
+
`.value()` reads (no separate sampler reference).
|
|
103
|
+
- **`.sample(sequence)`** method removed from `LiveRollingAggregation`.
|
|
104
|
+
Use the trigger option above.
|
|
105
|
+
|
|
106
|
+
### Changed
|
|
107
|
+
|
|
108
|
+
- **`LiveRollingOptions`** gains an optional `trigger?: Trigger`
|
|
109
|
+
field. Default behavior (no `trigger` specified) is unchanged from
|
|
110
|
+
v0.11.x — per-event emission. Backward compatible for everyone
|
|
111
|
+
who didn't use `.sample()`.
|
|
112
|
+
|
|
113
|
+
### Performance
|
|
114
|
+
|
|
115
|
+
- New benchmark `scripts/perf-triggers.mjs` covers both
|
|
116
|
+
non-partitioned and synchronised partitioned cases. Headline numbers
|
|
117
|
+
on a current MacBook Pro:
|
|
118
|
+
- Non-partitioned: clock(30s) ~50% faster than per-event baseline
|
|
119
|
+
(emission is rarer); clock(1s) similar.
|
|
120
|
+
- Synchronised partitioned (100 hosts, 30k events at realistic
|
|
121
|
+
rates): ~300 ns/emission at 200ms cadence; +205% over per-
|
|
122
|
+
partition baseline at the high end. Well within budget for the
|
|
123
|
+
motivating dashboard use case.
|
|
124
|
+
|
|
125
|
+
### Notes
|
|
126
|
+
|
|
127
|
+
- **`docs/rfcs/triggers.md`** captures the full design rationale,
|
|
128
|
+
the four sign-off questions, and the migration plan. Read this if
|
|
129
|
+
you want the "why this shape" context.
|
|
130
|
+
|
|
131
|
+
### Known limitations
|
|
132
|
+
|
|
133
|
+
- **Synchronised partitioned rolling output type is loose** —
|
|
134
|
+
`LiveSource<SeriesSchema>` rather than a schema-narrowed shape.
|
|
135
|
+
Runtime schema is correct; only static types widen. Tightening is
|
|
136
|
+
queued for a follow-up release.
|
|
137
|
+
- **Synchronised partitioned rolling rejects column-name collisions**
|
|
138
|
+
between the partition column and any reducer-output column at
|
|
139
|
+
construction (e.g. `partitionBy('cpu').rolling('1m', { cpu: 'avg' }, { trigger })`).
|
|
140
|
+
Rename the reducer output (once `AggregateOutputMap` lands on live
|
|
141
|
+
rolling) or partition by a different column.
|
|
142
|
+
- **Late-spawn partitions only appear in ticks after their first event
|
|
143
|
+
arrives.** A partition unknown to the sync source contributes no
|
|
144
|
+
row to the current tick. Use `partitionBy(col, { groups: [...] })`
|
|
145
|
+
to eagerly include partitions from construction.
|
|
146
|
+
|
|
147
|
+
## [0.11.8] — 2026-04-30
|
|
148
|
+
|
|
149
|
+
### Added
|
|
150
|
+
|
|
151
|
+
- **`rolling.sample(sequence)`** on `LiveRollingAggregation` — taps a
|
|
152
|
+
rolling aggregation and emits one snapshot of the rolling state each
|
|
153
|
+
time a source event crosses an epoch-aligned boundary of `sequence`.
|
|
154
|
+
Closes the frontend-telemetry gap: collect high-frequency timing
|
|
155
|
+
events, sample p95 latency to a backend every 30 s, while the same
|
|
156
|
+
rolling drives an in-app live display (no duplicated deque).
|
|
157
|
+
|
|
158
|
+
```ts
|
|
159
|
+
const rolling = timings.rolling('1m', { latency: 'p95' });
|
|
160
|
+
|
|
161
|
+
// One sampler → backend report every 30 s of event time
|
|
162
|
+
const reported = rolling.sample(Sequence.every('30s'));
|
|
163
|
+
reported.on('event', (e) =>
|
|
164
|
+
fetch('/api/telemetry', { method: 'POST', body: JSON.stringify(e.data()) }),
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
// Same rolling drives the UI live display
|
|
168
|
+
useLiveQuery(timings, () => rolling.value());
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
`sequence` must be a fixed-step `Sequence`; calendar sequences
|
|
172
|
+
(`Sequence.daily()` etc.) are rejected upfront — boundary indexing
|
|
173
|
+
needs a constant step.
|
|
174
|
+
|
|
175
|
+
Emission is **data-driven**: no `setInterval`. If the source goes
|
|
176
|
+
quiet, no events fire. A single source event spanning multiple
|
|
177
|
+
boundaries fires exactly one event at the new bucket. Snapshot is
|
|
178
|
+
taken after the boundary-crossing event is ingested by the rolling,
|
|
179
|
+
so the emitted value includes that event's contribution.
|
|
180
|
+
|
|
181
|
+
**Independent lifetimes.** `sample.dispose()` only detaches the
|
|
182
|
+
sampler from the rolling; the rolling's lifecycle stays the user's
|
|
183
|
+
responsibility. One rolling can power multiple `.sample()` cadences
|
|
184
|
+
plus direct `rolling.value()` reads without coupling.
|
|
185
|
+
|
|
186
|
+
- **`LiveSequenceRollingAggregation` exported** from package root with
|
|
187
|
+
full `LiveSource<Out>` surface and the same view-transform set as
|
|
188
|
+
`LiveRollingAggregation` (`filter`, `map`, `select`, `window`,
|
|
189
|
+
`diff`, `rate`, `pctChange`, `fill`, `cumulative`, `rolling`,
|
|
190
|
+
`aggregate`).
|
|
191
|
+
|
|
192
|
+
- **Telemetry-reporting recipe** at
|
|
193
|
+
`website/docs/recipes/telemetry-reporting.mdx` — end-to-end
|
|
194
|
+
frontend-collection → backend-summary pattern using `.sample()`,
|
|
195
|
+
plus the React in-app display via `useLiveQuery`.
|
|
196
|
+
|
|
197
|
+
[0.12.0]: https://github.com/pjm17971/pond-ts/compare/v0.11.8...v0.12.0
|
|
198
|
+
[0.11.8]: https://github.com/pjm17971/pond-ts/compare/v0.11.7...v0.11.8
|
|
199
|
+
|
|
14
200
|
## [0.11.7] — 2026-04-29
|
|
15
201
|
|
|
16
202
|
### Added
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { LiveSeries, type LiveSeriesOptions } from './LiveSeries.js';
|
|
2
2
|
import { type LiveFillMapping, type LiveFillStrategy } from './LiveView.js';
|
|
3
|
+
import type { Trigger } from './triggers.js';
|
|
3
4
|
import { type AggregateMap, type DiffSchema, type EventDataForSchema, type LiveSource, type NumericColumnNameForSchema, type RollingSchema, type SeriesSchema } from './types.js';
|
|
4
5
|
import type { DurationInput } from './utils/duration.js';
|
|
5
6
|
import type { LiveRollingOptions, RollingWindow } from './LiveRollingAggregation.js';
|
|
@@ -177,7 +178,16 @@ export declare class LivePartitionedSeries<S extends SeriesSchema, K extends str
|
|
|
177
178
|
* // ^^^^^^^^^^^^^^
|
|
178
179
|
* ```
|
|
179
180
|
*/
|
|
180
|
-
rolling<const M extends AggregateMap<S>>(window: RollingWindow, mapping: M, options?: LiveRollingOptions
|
|
181
|
+
rolling<const M extends AggregateMap<S>>(window: RollingWindow, mapping: M, options?: LiveRollingOptions & {
|
|
182
|
+
trigger?: {
|
|
183
|
+
kind: 'event';
|
|
184
|
+
};
|
|
185
|
+
}): LivePartitionedView<S, RollingSchema<S, M>, K>;
|
|
186
|
+
rolling<const M extends AggregateMap<S>>(window: RollingWindow, mapping: M, options: LiveRollingOptions & {
|
|
187
|
+
trigger: {
|
|
188
|
+
kind: 'clock';
|
|
189
|
+
} & Trigger;
|
|
190
|
+
}): LiveSource<SeriesSchema>;
|
|
181
191
|
/**
|
|
182
192
|
* Dispose of the partitioned view: unsubscribe from the source,
|
|
183
193
|
* disconnect every per-partition pipeline subscriber (created
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LivePartitionedSeries.d.ts","sourceRoot":"","sources":["../src/LivePartitionedSeries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"LivePartitionedSeries.d.ts","sourceRoot":"","sources":["../src/LivePartitionedSeries.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { LiveSeries } from './LiveSeries.js';
|
|
2
2
|
import { LiveRollingAggregation } from './LiveRollingAggregation.js';
|
|
3
|
+
import { LivePartitionedSyncRolling } from './LivePartitionedSyncRolling.js';
|
|
3
4
|
import { makeCumulativeView, makeDiffView, makeFillView, } from './LiveView.js';
|
|
4
5
|
/** Encoder for partition values → keys. Mirrors the batch single-column case. */
|
|
5
6
|
function partitionKey(event, col) {
|
|
@@ -314,22 +315,63 @@ export class LivePartitionedSeries {
|
|
|
314
315
|
cumulative(spec) {
|
|
315
316
|
return new LivePartitionedView(this, (sub) => makeCumulativeView(sub, spec));
|
|
316
317
|
}
|
|
317
|
-
/**
|
|
318
|
-
* Per-partition `rolling`. See {@link LiveSeries.rolling}.
|
|
319
|
-
*
|
|
320
|
-
* **Partition column drops by default.** `rolling`'s output
|
|
321
|
-
* schema only retains columns named in `mapping`. Without
|
|
322
|
-
* including the partition column, the unified output of the
|
|
323
|
-
* chain loses the partition tag (e.g. `host` becomes
|
|
324
|
-
* `undefined`). To keep the partition column visible, include
|
|
325
|
-
* it in `mapping` with a passthrough reducer:
|
|
326
|
-
*
|
|
327
|
-
* ```ts
|
|
328
|
-
* partitioned.rolling('5m', { cpu: 'avg', host: 'last' })
|
|
329
|
-
* // ^^^^^^^^^^^^^^
|
|
330
|
-
* ```
|
|
331
|
-
*/
|
|
332
318
|
rolling(window, mapping, options) {
|
|
319
|
+
// Clock trigger → synchronised partitioned emission. Returns a
|
|
320
|
+
// LiveSource<RowSchema> directly (no LivePartitionedView wrap)
|
|
321
|
+
// because the output is already a flat per-partition-row stream;
|
|
322
|
+
// each tick fires N events (one per known partition) at the same
|
|
323
|
+
// boundary timestamp.
|
|
324
|
+
if (options?.trigger?.kind === 'clock') {
|
|
325
|
+
const syncOptions = {};
|
|
326
|
+
if (options.minSamples !== undefined)
|
|
327
|
+
syncOptions.minSamples = options.minSamples;
|
|
328
|
+
if (this.groups !== undefined)
|
|
329
|
+
syncOptions.declaredGroups = this.groups;
|
|
330
|
+
const sync = new LivePartitionedSyncRolling(this.name, this.schema, this.by, window, mapping, options.trigger, syncOptions);
|
|
331
|
+
// Wire existing partitions and future spawns into the sync
|
|
332
|
+
// rolling. Each per-partition LiveSeries emits its own events;
|
|
333
|
+
// we forward them all into the shared sync state.
|
|
334
|
+
//
|
|
335
|
+
// Disposer ownership: each partition listener's unsubscribe is
|
|
336
|
+
// registered with BOTH the sync rolling (so `sync.dispose()`
|
|
337
|
+
// detaches them) and the parent series's `#disposers` (so the
|
|
338
|
+
// parent's dispose path also detaches them). Both paths are
|
|
339
|
+
// idempotent — calling them in either order, or both, is safe.
|
|
340
|
+
const subscribe = (key, partition) => {
|
|
341
|
+
const unsub = partition.on('event', (event) => sync.ingest(key, event));
|
|
342
|
+
sync._registerUnsubscribe(unsub);
|
|
343
|
+
this.#disposers.add(unsub);
|
|
344
|
+
};
|
|
345
|
+
const existing = [];
|
|
346
|
+
for (const [key, partition] of this.#partitions) {
|
|
347
|
+
for (let i = 0; i < partition.length; i++) {
|
|
348
|
+
const ev = partition.at(i);
|
|
349
|
+
existing.push({ ts: ev.begin(), key, event: ev });
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
existing.sort((a, b) => a.ts - b.ts);
|
|
353
|
+
for (const { key, event } of existing) {
|
|
354
|
+
sync.ingest(key, event);
|
|
355
|
+
}
|
|
356
|
+
// Subscribe to future events on every existing partition.
|
|
357
|
+
for (const [key, partition] of this.#partitions) {
|
|
358
|
+
subscribe(key, partition);
|
|
359
|
+
}
|
|
360
|
+
// Spawn listener — captures `sync` to subscribe future
|
|
361
|
+
// partitions. Register a remover with `sync.dispose()` so the
|
|
362
|
+
// parent series doesn't retain a closure on the disposed sync
|
|
363
|
+
// (which would prevent garbage collection on long-lived
|
|
364
|
+
// high-cardinality partitioned sources with create/dispose
|
|
365
|
+
// cycles).
|
|
366
|
+
const onSpawnSet = this.#onSpawn;
|
|
367
|
+
const spawnHandler = (key, partition) => {
|
|
368
|
+
subscribe(key, partition);
|
|
369
|
+
};
|
|
370
|
+
onSpawnSet.add(spawnHandler);
|
|
371
|
+
sync._registerUnsubscribe(() => onSpawnSet.delete(spawnHandler));
|
|
372
|
+
return sync;
|
|
373
|
+
}
|
|
374
|
+
// Default: per-partition rolling with per-partition emission.
|
|
333
375
|
return new LivePartitionedView(this, (sub) => new LiveRollingAggregation(sub, window, mapping, options));
|
|
334
376
|
}
|
|
335
377
|
/**
|
|
@@ -533,6 +575,16 @@ export class LivePartitionedView {
|
|
|
533
575
|
* `host: 'last'`) to keep it visible in the unified output.
|
|
534
576
|
*/
|
|
535
577
|
rolling(window, mapping, options) {
|
|
578
|
+
// MVP cap: synchronised partitioned rolling (clock trigger) is
|
|
579
|
+
// only supported directly after partitionBy(), not after chained
|
|
580
|
+
// sugar like fill().rolling(...). The chained shape needs the
|
|
581
|
+
// factory output's schema threaded into the sync rolling, which
|
|
582
|
+
// we'll plumb when a real use case appears.
|
|
583
|
+
if (options?.trigger && options.trigger.kind !== 'event') {
|
|
584
|
+
throw new TypeError('Clock-triggered partitioned rolling is only supported directly ' +
|
|
585
|
+
'after partitionBy(), not after chained sugar methods. Restructure as ' +
|
|
586
|
+
'`live.partitionBy(col).rolling(window, mapping, { trigger: ... })`.');
|
|
587
|
+
}
|
|
536
588
|
const prev = this.#factory;
|
|
537
589
|
return new LivePartitionedView(this.#root, (sub) => new LiveRollingAggregation(prev(sub), window, mapping, options));
|
|
538
590
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LivePartitionedSeries.js","sourceRoot":"","sources":["../src/LivePartitionedSeries.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LivePartitionedSeries.js","sourceRoot":"","sources":["../src/LivePartitionedSeries.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { type ClockTrigger } from './triggers.js';
|
|
2
|
+
import type { RollingWindow } from './LiveRollingAggregation.js';
|
|
3
|
+
import type { AggregateMap, EventForSchema, LiveSource, SeriesSchema } from './types.js';
|
|
4
|
+
type EventListener = (event: any) => void;
|
|
5
|
+
/**
|
|
6
|
+
* A `LiveSource<Out>` produced by `LivePartitionedSeries.rolling(window, mapping, { trigger: Trigger.clock(...) })`.
|
|
7
|
+
* Maintains a rolling-window aggregation per partition and emits a
|
|
8
|
+
* **synchronised burst of events on every clock-trigger boundary
|
|
9
|
+
* crossing**: when any partition's event crosses the boundary, every
|
|
10
|
+
* known partition's rolling-window snapshot fires at the same instant.
|
|
11
|
+
*
|
|
12
|
+
* Output schema is `[time, <partitionColumn>, ...mappingColumns]` —
|
|
13
|
+
* the partition column is added automatically so each emitted row
|
|
14
|
+
* carries the partition tag for downstream consumers to rebucket on.
|
|
15
|
+
*
|
|
16
|
+
* **Internal** — no public class name. The public API surface is
|
|
17
|
+
* `LiveSource<Out>`. Constructed via `LivePartitionedSeries.rolling`'s
|
|
18
|
+
* trigger-bearing overload; user code never imports this class.
|
|
19
|
+
*/
|
|
20
|
+
export declare class LivePartitionedSyncRolling<S extends SeriesSchema, K extends string, Out extends SeriesSchema> implements LiveSource<Out> {
|
|
21
|
+
#private;
|
|
22
|
+
readonly name: string;
|
|
23
|
+
readonly schema: Out;
|
|
24
|
+
constructor(upstreamName: string, upstreamSchema: S, byColumn: string, window: RollingWindow, mapping: AggregateMap<S>, trigger: ClockTrigger, options?: {
|
|
25
|
+
minSamples?: number;
|
|
26
|
+
declaredGroups?: ReadonlyArray<K>;
|
|
27
|
+
});
|
|
28
|
+
get length(): number;
|
|
29
|
+
at(index: number): EventForSchema<Out> | undefined;
|
|
30
|
+
on(type: 'event', fn: EventListener): () => void;
|
|
31
|
+
/**
|
|
32
|
+
* Detach this sync source from every upstream partition it has
|
|
33
|
+
* subscribed to. Idempotent — calling twice is a no-op. After
|
|
34
|
+
* dispose, subsequent source events do not update internal state
|
|
35
|
+
* and no further events are emitted.
|
|
36
|
+
*
|
|
37
|
+
* The sync source's lifetime is independent of the
|
|
38
|
+
* `LivePartitionedSeries` that produced it: disposing the sync
|
|
39
|
+
* does not detach the partitioned series's other consumers, and
|
|
40
|
+
* disposing the partitioned series detaches this sync via the
|
|
41
|
+
* parent-disposer wiring in `LivePartitionedSeries.rolling`.
|
|
42
|
+
*/
|
|
43
|
+
dispose(): void;
|
|
44
|
+
/**
|
|
45
|
+
* @internal — used by `LivePartitionedSeries.rolling` to register
|
|
46
|
+
* each per-partition `'event'` listener disposer so this sync
|
|
47
|
+
* source can detach them on `dispose()`.
|
|
48
|
+
*/
|
|
49
|
+
_registerUnsubscribe(unsub: () => void): void;
|
|
50
|
+
/**
|
|
51
|
+
* Called by `LivePartitionedSeries` for each event arriving on a
|
|
52
|
+
* partition's `LiveSource`. Updates that partition's rolling window
|
|
53
|
+
* state and, if the bucket index advances, emits a synchronised
|
|
54
|
+
* burst of one event per known partition at the new boundary
|
|
55
|
+
* timestamp.
|
|
56
|
+
*/
|
|
57
|
+
ingest(partitionKey: K, event: EventForSchema<S>): void;
|
|
58
|
+
}
|
|
59
|
+
export {};
|
|
60
|
+
//# sourceMappingURL=LivePartitionedSyncRolling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LivePartitionedSyncRolling.d.ts","sourceRoot":"","sources":["../src/LivePartitionedSyncRolling.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,OAAO,KAAK,EACV,YAAY,EAEZ,cAAc,EACd,UAAU,EACV,YAAY,EACb,MAAM,YAAY,CAAC;AAoBpB,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;AAE1C;;;;;;;;;;;;;;GAcG;AACH,qBAAa,0BAA0B,CACrC,CAAC,SAAS,YAAY,EACtB,CAAC,SAAS,MAAM,EAChB,GAAG,SAAS,YAAY,CACxB,YAAW,UAAU,CAAC,GAAG,CAAC;;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;gBA8BnB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,CAAC,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EACxB,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;KAAO;IA0G1E,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,SAAS;IAKlD,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI;IAYhD;;;;;;;;;;;OAWG;IACH,OAAO,IAAI,IAAI;IASf;;;;OAIG;IACH,oBAAoB,CAAC,KAAK,EAAE,MAAM,IAAI,GAAG,IAAI;IAM7C;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI;CA+HxD"}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import { Event } from './Event.js';
|
|
2
|
+
import { Time } from './Time.js';
|
|
3
|
+
import { resolveReducer } from './reducers/index.js';
|
|
4
|
+
import { bucketIndexFor, boundaryTimestampFor, } from './triggers.js';
|
|
5
|
+
import { parseDuration } from './utils/duration.js';
|
|
6
|
+
/**
|
|
7
|
+
* A `LiveSource<Out>` produced by `LivePartitionedSeries.rolling(window, mapping, { trigger: Trigger.clock(...) })`.
|
|
8
|
+
* Maintains a rolling-window aggregation per partition and emits a
|
|
9
|
+
* **synchronised burst of events on every clock-trigger boundary
|
|
10
|
+
* crossing**: when any partition's event crosses the boundary, every
|
|
11
|
+
* known partition's rolling-window snapshot fires at the same instant.
|
|
12
|
+
*
|
|
13
|
+
* Output schema is `[time, <partitionColumn>, ...mappingColumns]` —
|
|
14
|
+
* the partition column is added automatically so each emitted row
|
|
15
|
+
* carries the partition tag for downstream consumers to rebucket on.
|
|
16
|
+
*
|
|
17
|
+
* **Internal** — no public class name. The public API surface is
|
|
18
|
+
* `LiveSource<Out>`. Constructed via `LivePartitionedSeries.rolling`'s
|
|
19
|
+
* trigger-bearing overload; user code never imports this class.
|
|
20
|
+
*/
|
|
21
|
+
export class LivePartitionedSyncRolling {
|
|
22
|
+
name;
|
|
23
|
+
schema;
|
|
24
|
+
#byColumn;
|
|
25
|
+
#columns;
|
|
26
|
+
#trigger;
|
|
27
|
+
#windowMs;
|
|
28
|
+
#windowCount;
|
|
29
|
+
#minSamples;
|
|
30
|
+
#partitionStates;
|
|
31
|
+
/**
|
|
32
|
+
* Partition keys in observation order — used as the stable iteration
|
|
33
|
+
* order when emitting per-tick frames. If `groups` was provided
|
|
34
|
+
* upstream, those keys are pre-seeded in declared order so emission
|
|
35
|
+
* is deterministic across runs even before any events arrive.
|
|
36
|
+
*/
|
|
37
|
+
#partitionOrder;
|
|
38
|
+
#lastBucketIdx;
|
|
39
|
+
#outputEvents;
|
|
40
|
+
#onEvent;
|
|
41
|
+
/**
|
|
42
|
+
* Disposer functions for upstream subscriptions (one per partition
|
|
43
|
+
* `'event'` listener registered by the wiring in
|
|
44
|
+
* `LivePartitionedSeries.rolling`). `dispose()` runs and clears them.
|
|
45
|
+
*/
|
|
46
|
+
#unsubscribes;
|
|
47
|
+
#disposed;
|
|
48
|
+
constructor(upstreamName, upstreamSchema, byColumn, window, mapping, trigger, options = {}) {
|
|
49
|
+
this.name = upstreamName;
|
|
50
|
+
this.#byColumn = byColumn;
|
|
51
|
+
this.#trigger = trigger;
|
|
52
|
+
this.#minSamples = options.minSamples ?? 0;
|
|
53
|
+
if (!Number.isInteger(this.#minSamples) || this.#minSamples < 0) {
|
|
54
|
+
throw new TypeError('rolling minSamples must be a non-negative integer (default 0)');
|
|
55
|
+
}
|
|
56
|
+
if (typeof window === 'number' && Number.isInteger(window) && window > 0) {
|
|
57
|
+
this.#windowMs = undefined;
|
|
58
|
+
this.#windowCount = window;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
this.#windowMs =
|
|
62
|
+
typeof window === 'string' ? parseDuration(window) : undefined;
|
|
63
|
+
if (this.#windowMs === undefined && typeof window === 'number') {
|
|
64
|
+
throw new TypeError('window must be a positive integer (event count) or duration string');
|
|
65
|
+
}
|
|
66
|
+
this.#windowCount = undefined;
|
|
67
|
+
}
|
|
68
|
+
// Resolve the rolling output columns from `mapping`.
|
|
69
|
+
const colsByName = new Map(upstreamSchema.slice(1).map((c) => [c.name, c]));
|
|
70
|
+
this.#columns = [];
|
|
71
|
+
for (const [name, reducer] of Object.entries(mapping)) {
|
|
72
|
+
const col = colsByName.get(name);
|
|
73
|
+
if (!col)
|
|
74
|
+
throw new TypeError(`unknown column '${name}'`);
|
|
75
|
+
const outputKind = resolveReducer(reducer).outputKind;
|
|
76
|
+
const kind = outputKind === 'number'
|
|
77
|
+
? 'number'
|
|
78
|
+
: outputKind === 'array'
|
|
79
|
+
? 'array'
|
|
80
|
+
: col.kind;
|
|
81
|
+
this.#columns.push({ source: name, reducer, kind });
|
|
82
|
+
}
|
|
83
|
+
// Locate the partition column's kind in the upstream schema.
|
|
84
|
+
const byCol = upstreamSchema.find((c) => c.name === byColumn);
|
|
85
|
+
if (!byCol) {
|
|
86
|
+
throw new TypeError(`LivePartitionedSyncRolling: column '${byColumn}' not in upstream schema`);
|
|
87
|
+
}
|
|
88
|
+
// Reject column-name collisions between the partition column and
|
|
89
|
+
// any reducer output column. Without this, the emit loop's record
|
|
90
|
+
// would overwrite the partition tag with the reducer output (or
|
|
91
|
+
// vice versa) silently — both columns share a name in the output
|
|
92
|
+
// schema, but `record[name]` only holds one value. Catch it at
|
|
93
|
+
// construction with a clear error.
|
|
94
|
+
if (this.#columns.some((c) => c.source === byColumn)) {
|
|
95
|
+
throw new TypeError(`LivePartitionedSyncRolling: partition column '${byColumn}' collides ` +
|
|
96
|
+
`with a reducer-output column of the same name. Rename the reducer ` +
|
|
97
|
+
`output (e.g. via a dedicated alias once AggregateOutputMap is ` +
|
|
98
|
+
`supported on live rolling), or partition by a different column.`);
|
|
99
|
+
}
|
|
100
|
+
// Also reject collision with 'time' — though unlikely (partition
|
|
101
|
+
// columns can't be the first column of the schema), defend against
|
|
102
|
+
// future schema shapes that might break this assumption.
|
|
103
|
+
if (byColumn === 'time') {
|
|
104
|
+
throw new TypeError("LivePartitionedSyncRolling: partition column cannot be named 'time' " +
|
|
105
|
+
'(reserved for the time-keyed first column of the output schema).');
|
|
106
|
+
}
|
|
107
|
+
// Output schema: [time, <byColumn>, ...mappingColumns].
|
|
108
|
+
this.schema = Object.freeze([
|
|
109
|
+
{ name: 'time', kind: 'time' },
|
|
110
|
+
{ name: byColumn, kind: byCol.kind, required: false },
|
|
111
|
+
...this.#columns.map((c) => ({
|
|
112
|
+
name: c.source,
|
|
113
|
+
kind: c.kind,
|
|
114
|
+
required: false,
|
|
115
|
+
})),
|
|
116
|
+
]);
|
|
117
|
+
this.#partitionStates = new Map();
|
|
118
|
+
this.#partitionOrder = [];
|
|
119
|
+
this.#lastBucketIdx = undefined;
|
|
120
|
+
this.#outputEvents = [];
|
|
121
|
+
this.#onEvent = new Set();
|
|
122
|
+
this.#unsubscribes = new Set();
|
|
123
|
+
this.#disposed = false;
|
|
124
|
+
if (options.declaredGroups) {
|
|
125
|
+
for (const k of options.declaredGroups) {
|
|
126
|
+
this.#ensurePartition(k);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// ── LiveSource<Out> contract ────────────────────────────────
|
|
131
|
+
get length() {
|
|
132
|
+
return this.#outputEvents.length;
|
|
133
|
+
}
|
|
134
|
+
at(index) {
|
|
135
|
+
if (index < 0)
|
|
136
|
+
index = this.#outputEvents.length + index;
|
|
137
|
+
return this.#outputEvents[index];
|
|
138
|
+
}
|
|
139
|
+
on(type, fn) {
|
|
140
|
+
if (type !== 'event') {
|
|
141
|
+
throw new TypeError(`LivePartitionedSyncRolling.on: unsupported event type '${String(type)}'`);
|
|
142
|
+
}
|
|
143
|
+
this.#onEvent.add(fn);
|
|
144
|
+
return () => {
|
|
145
|
+
this.#onEvent.delete(fn);
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Detach this sync source from every upstream partition it has
|
|
150
|
+
* subscribed to. Idempotent — calling twice is a no-op. After
|
|
151
|
+
* dispose, subsequent source events do not update internal state
|
|
152
|
+
* and no further events are emitted.
|
|
153
|
+
*
|
|
154
|
+
* The sync source's lifetime is independent of the
|
|
155
|
+
* `LivePartitionedSeries` that produced it: disposing the sync
|
|
156
|
+
* does not detach the partitioned series's other consumers, and
|
|
157
|
+
* disposing the partitioned series detaches this sync via the
|
|
158
|
+
* parent-disposer wiring in `LivePartitionedSeries.rolling`.
|
|
159
|
+
*/
|
|
160
|
+
dispose() {
|
|
161
|
+
if (this.#disposed)
|
|
162
|
+
return;
|
|
163
|
+
this.#disposed = true;
|
|
164
|
+
for (const unsub of this.#unsubscribes) {
|
|
165
|
+
unsub();
|
|
166
|
+
}
|
|
167
|
+
this.#unsubscribes.clear();
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* @internal — used by `LivePartitionedSeries.rolling` to register
|
|
171
|
+
* each per-partition `'event'` listener disposer so this sync
|
|
172
|
+
* source can detach them on `dispose()`.
|
|
173
|
+
*/
|
|
174
|
+
_registerUnsubscribe(unsub) {
|
|
175
|
+
this.#unsubscribes.add(unsub);
|
|
176
|
+
}
|
|
177
|
+
// ── Wiring entry point ──────────────────────────────────────
|
|
178
|
+
/**
|
|
179
|
+
* Called by `LivePartitionedSeries` for each event arriving on a
|
|
180
|
+
* partition's `LiveSource`. Updates that partition's rolling window
|
|
181
|
+
* state and, if the bucket index advances, emits a synchronised
|
|
182
|
+
* burst of one event per known partition at the new boundary
|
|
183
|
+
* timestamp.
|
|
184
|
+
*/
|
|
185
|
+
ingest(partitionKey, event) {
|
|
186
|
+
if (this.#disposed)
|
|
187
|
+
return;
|
|
188
|
+
const state = this.#ensurePartition(partitionKey);
|
|
189
|
+
const data = event.data();
|
|
190
|
+
const values = this.#columns.map((c) => data[c.source]);
|
|
191
|
+
const index = state.nextIndex++;
|
|
192
|
+
const ts = event.begin();
|
|
193
|
+
const entry = { index, timestamp: ts, values };
|
|
194
|
+
for (let i = 0; i < this.#columns.length; i++) {
|
|
195
|
+
state.states[i].add(index, values[i]);
|
|
196
|
+
}
|
|
197
|
+
state.entries.push(entry);
|
|
198
|
+
this.#evictPartition(state, ts);
|
|
199
|
+
const bucketIdx = bucketIndexFor(this.#trigger, ts);
|
|
200
|
+
if (this.#lastBucketIdx === undefined) {
|
|
201
|
+
// First event — establish the starting bucket; no emission yet.
|
|
202
|
+
this.#lastBucketIdx = bucketIdx;
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
if (bucketIdx > this.#lastBucketIdx) {
|
|
206
|
+
// Pass `ts` (the triggering event's timestamp) into emitTick so
|
|
207
|
+
// every partition's window is evicted against "now" before we
|
|
208
|
+
// snapshot. Without this, a quiet partition's stale entries from
|
|
209
|
+
// before the window cutoff would still appear in the emitted
|
|
210
|
+
// aggregate — corrupting synchronized rollups for sparse
|
|
211
|
+
// partitions.
|
|
212
|
+
this.#emitTick(bucketIdx, ts);
|
|
213
|
+
this.#lastBucketIdx = bucketIdx;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// ── Internal ────────────────────────────────────────────────
|
|
217
|
+
#ensurePartition(key) {
|
|
218
|
+
let state = this.#partitionStates.get(key);
|
|
219
|
+
if (state)
|
|
220
|
+
return state;
|
|
221
|
+
state = {
|
|
222
|
+
states: this.#columns.map((c) => resolveReducer(c.reducer).rollingState()),
|
|
223
|
+
entries: [],
|
|
224
|
+
nextIndex: 0,
|
|
225
|
+
};
|
|
226
|
+
this.#partitionStates.set(key, state);
|
|
227
|
+
this.#partitionOrder.push(key);
|
|
228
|
+
return state;
|
|
229
|
+
}
|
|
230
|
+
#evictPartition(state, latestTs) {
|
|
231
|
+
if (this.#windowMs !== undefined) {
|
|
232
|
+
const cutoff = latestTs - this.#windowMs;
|
|
233
|
+
while (state.entries.length > 0 && state.entries[0].timestamp < cutoff) {
|
|
234
|
+
const entry = state.entries.shift();
|
|
235
|
+
for (let i = 0; i < this.#columns.length; i++) {
|
|
236
|
+
state.states[i].remove(entry.index, entry.values[i]);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (this.#windowCount !== undefined) {
|
|
241
|
+
while (state.entries.length > this.#windowCount) {
|
|
242
|
+
const entry = state.entries.shift();
|
|
243
|
+
for (let i = 0; i < this.#columns.length; i++) {
|
|
244
|
+
state.states[i].remove(entry.index, entry.values[i]);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Walk every known partition (in observation / declared-groups
|
|
251
|
+
* order), evict each partition's rolling-window state against the
|
|
252
|
+
* triggering event's timestamp `latestTs`, then emit one row per
|
|
253
|
+
* partition keyed at the new bucket's boundary timestamp. All
|
|
254
|
+
* emitted events share the same boundary `ts`.
|
|
255
|
+
*
|
|
256
|
+
* **Why eviction here?** The partition that received the
|
|
257
|
+
* boundary-crossing event was already evicted in `ingest()`, but
|
|
258
|
+
* other (quiet) partitions haven't been touched since their last
|
|
259
|
+
* event. If a partition's last event landed before the window
|
|
260
|
+
* cutoff (`latestTs - windowMs`), its entries are stale from the
|
|
261
|
+
* data clock's perspective — they shouldn't contribute to a
|
|
262
|
+
* snapshot taken at "now." Without this pass, a 30 s window can
|
|
263
|
+
* still emit a 90-second-old value from a partition that went
|
|
264
|
+
* silent at t=0.
|
|
265
|
+
*
|
|
266
|
+
* Hot path: hoists invariants (column count, listener iterable,
|
|
267
|
+
* byColumn name) out of the per-partition loop, uses an indexed
|
|
268
|
+
* for over `partitionOrder` (cheaper than for-of), and constructs
|
|
269
|
+
* the record object via a plain assignment rather than a computed-
|
|
270
|
+
* property literal (which V8 deopts at scale).
|
|
271
|
+
*/
|
|
272
|
+
#emitTick(bucketIdx, latestTs) {
|
|
273
|
+
const boundaryMs = boundaryTimestampFor(this.#trigger, bucketIdx);
|
|
274
|
+
const time = new Time(boundaryMs);
|
|
275
|
+
const order = this.#partitionOrder;
|
|
276
|
+
const states = this.#partitionStates;
|
|
277
|
+
const cols = this.#columns;
|
|
278
|
+
const colsLen = cols.length;
|
|
279
|
+
const byCol = this.#byColumn;
|
|
280
|
+
const minSamples = this.#minSamples;
|
|
281
|
+
const out = this.#outputEvents;
|
|
282
|
+
const listeners = this.#onEvent;
|
|
283
|
+
const orderLen = order.length;
|
|
284
|
+
for (let p = 0; p < orderLen; p++) {
|
|
285
|
+
const key = order[p];
|
|
286
|
+
const state = states.get(key);
|
|
287
|
+
// Evict this partition's stale window entries against the
|
|
288
|
+
// triggering event's timestamp before snapshotting.
|
|
289
|
+
this.#evictPartition(state, latestTs);
|
|
290
|
+
const warmup = state.entries.length < minSamples;
|
|
291
|
+
const record = {};
|
|
292
|
+
record[byCol] = key;
|
|
293
|
+
for (let i = 0; i < colsLen; i++) {
|
|
294
|
+
record[cols[i].source] = warmup
|
|
295
|
+
? undefined
|
|
296
|
+
: state.states[i].snapshot();
|
|
297
|
+
}
|
|
298
|
+
const evt = new Event(time, record);
|
|
299
|
+
out.push(evt);
|
|
300
|
+
if (listeners.size > 0) {
|
|
301
|
+
for (const fn of listeners)
|
|
302
|
+
fn(evt);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=LivePartitionedSyncRolling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LivePartitionedSyncRolling.js","sourceRoot":"","sources":["../src/LivePartitionedSyncRolling.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { LiveAggregation } from './LiveAggregation.js';
|
|
2
2
|
import { LiveView, type LiveFillMapping, type LiveFillStrategy } from './LiveView.js';
|
|
3
3
|
import type { Sequence } from './Sequence.js';
|
|
4
|
-
import
|
|
4
|
+
import { type Trigger } from './triggers.js';
|
|
5
|
+
import type { AggregateMap, DiffSchema, EventDataForSchema, EventForSchema, LiveSource, NumericColumnNameForSchema, SelectSchema, SeriesSchema, ColumnValue } from './types.js';
|
|
5
6
|
import type { DurationInput } from './utils/duration.js';
|
|
6
7
|
type UpdateListener = (value: Record<string, ColumnValue | undefined>) => void;
|
|
7
8
|
type EventListener = (event: any) => void;
|
|
@@ -15,6 +16,29 @@ export type LiveRollingOptions = {
|
|
|
15
16
|
* opens — output is `undefined` forever.
|
|
16
17
|
*/
|
|
17
18
|
minSamples?: number;
|
|
19
|
+
/**
|
|
20
|
+
* Emission cadence. Defaults to `Trigger.event()` — emits one
|
|
21
|
+
* snapshot per source event push (the historical behavior).
|
|
22
|
+
*
|
|
23
|
+
* Pass `Trigger.clock(Sequence.every('30s'))` to switch to
|
|
24
|
+
* sequence-triggered emission: one snapshot fires when a source
|
|
25
|
+
* event crosses an epoch-aligned boundary of the sequence; output
|
|
26
|
+
* timestamps are the boundary instants. If no events arrive during
|
|
27
|
+
* an interval, no event is emitted (data-driven, not wall-clock-
|
|
28
|
+
* driven).
|
|
29
|
+
*
|
|
30
|
+
* For partitioned rollings (`live.partitionBy(col).rolling(...)`),
|
|
31
|
+
* a clock trigger emits **synchronised across partitions**: when
|
|
32
|
+
* any partition's event crosses the boundary, every partition's
|
|
33
|
+
* rolling-window snapshot fires at the same instant. See
|
|
34
|
+
* {@link Trigger} for the full trigger taxonomy.
|
|
35
|
+
*
|
|
36
|
+
* @experimental Trigger types beyond `clock` and `event` are
|
|
37
|
+
* reserved for future expansion (`count`, `custom`, compound
|
|
38
|
+
* triggers). The current API surface is locked at these two for
|
|
39
|
+
* the experimental release.
|
|
40
|
+
*/
|
|
41
|
+
trigger?: Trigger;
|
|
18
42
|
};
|
|
19
43
|
export declare class LiveRollingAggregation<S extends SeriesSchema, Out extends SeriesSchema = SeriesSchema> {
|
|
20
44
|
#private;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveRollingAggregation.d.ts","sourceRoot":"","sources":["../src/LiveRollingAggregation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LiveRollingAggregation.d.ts","sourceRoot":"","sources":["../src/LiveRollingAggregation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Event } from './Event.js';
|
|
2
|
+
import { Time } from './Time.js';
|
|
2
3
|
import { LiveAggregation } from './LiveAggregation.js';
|
|
3
4
|
import { LiveView, makeDiffView, makeFillView, makeCumulativeView, } from './LiveView.js';
|
|
4
5
|
import { resolveReducer } from './reducers/index.js';
|
|
6
|
+
import { bucketIndexFor, boundaryTimestampFor, } from './triggers.js';
|
|
5
7
|
import { parseDuration } from './utils/duration.js';
|
|
6
8
|
export class LiveRollingAggregation {
|
|
7
9
|
name;
|
|
@@ -13,6 +15,18 @@ export class LiveRollingAggregation {
|
|
|
13
15
|
#windowCount;
|
|
14
16
|
#minSamples;
|
|
15
17
|
#nextIndex;
|
|
18
|
+
/**
|
|
19
|
+
* The configured trigger. Stored as a strict union; emission paths
|
|
20
|
+
* dispatch on `kind`.
|
|
21
|
+
*/
|
|
22
|
+
#trigger;
|
|
23
|
+
/**
|
|
24
|
+
* For clock triggers: the bucket index of the most recently
|
|
25
|
+
* crossed boundary. Undefined until the first event is ingested
|
|
26
|
+
* (the first event establishes the starting bucket; emission begins
|
|
27
|
+
* on the next crossing).
|
|
28
|
+
*/
|
|
29
|
+
#lastClockBucketIdx;
|
|
16
30
|
#outputEvents;
|
|
17
31
|
#onUpdate;
|
|
18
32
|
#onEvent;
|
|
@@ -24,6 +38,8 @@ export class LiveRollingAggregation {
|
|
|
24
38
|
throw new TypeError('rolling minSamples must be a non-negative integer (default 0)');
|
|
25
39
|
}
|
|
26
40
|
this.#minSamples = minSamples;
|
|
41
|
+
this.#trigger = options.trigger ?? { kind: 'event' };
|
|
42
|
+
this.#lastClockBucketIdx = undefined;
|
|
27
43
|
if (typeof window === 'number' && Number.isInteger(window) && window > 0) {
|
|
28
44
|
this.#windowMs = undefined;
|
|
29
45
|
this.#windowCount = window;
|
|
@@ -160,6 +176,21 @@ export class LiveRollingAggregation {
|
|
|
160
176
|
}
|
|
161
177
|
this.#entries.push(entry);
|
|
162
178
|
this.#evict(event.begin());
|
|
179
|
+
// Emission is gated by the configured trigger.
|
|
180
|
+
switch (this.#trigger.kind) {
|
|
181
|
+
case 'event':
|
|
182
|
+
this.#emitEvent(event.key());
|
|
183
|
+
return;
|
|
184
|
+
case 'clock':
|
|
185
|
+
this.#emitClock(event.begin(), this.#trigger);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Emit one output event keyed at `key`, carrying the current
|
|
191
|
+
* rolling-window snapshot. Used by Trigger.event() (the default).
|
|
192
|
+
*/
|
|
193
|
+
#emitEvent(key) {
|
|
163
194
|
const warmup = this.#entries.length < this.#minSamples;
|
|
164
195
|
const record = {};
|
|
165
196
|
for (let i = 0; i < this.#columns.length; i++) {
|
|
@@ -167,11 +198,32 @@ export class LiveRollingAggregation {
|
|
|
167
198
|
? undefined
|
|
168
199
|
: this.#states[i].snapshot();
|
|
169
200
|
}
|
|
170
|
-
const outputEvent = new Event(
|
|
201
|
+
const outputEvent = new Event(key, record);
|
|
171
202
|
this.#outputEvents.push(outputEvent);
|
|
172
203
|
for (const fn of this.#onEvent)
|
|
173
204
|
fn(outputEvent);
|
|
174
205
|
}
|
|
206
|
+
/**
|
|
207
|
+
* Clock-triggered emission: fire one output event at the new
|
|
208
|
+
* bucket's start timestamp when an incoming event crosses an
|
|
209
|
+
* epoch-aligned boundary. The first event ingested establishes
|
|
210
|
+
* the starting bucket; emission begins on the next crossing.
|
|
211
|
+
* A single event jumping multiple boundaries fires exactly one
|
|
212
|
+
* event at the new bucket's start, not one per skipped boundary.
|
|
213
|
+
*/
|
|
214
|
+
#emitClock(eventTs, trigger) {
|
|
215
|
+
const bucketIdx = bucketIndexFor(trigger, eventTs);
|
|
216
|
+
if (this.#lastClockBucketIdx === undefined) {
|
|
217
|
+
// First event — record the starting bucket; no emission yet.
|
|
218
|
+
this.#lastClockBucketIdx = bucketIdx;
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
if (bucketIdx > this.#lastClockBucketIdx) {
|
|
222
|
+
const boundaryMs = boundaryTimestampFor(trigger, bucketIdx);
|
|
223
|
+
this.#emitEvent(new Time(boundaryMs));
|
|
224
|
+
this.#lastClockBucketIdx = bucketIdx;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
175
227
|
#evict(latestTimestamp) {
|
|
176
228
|
if (this.#windowMs !== undefined) {
|
|
177
229
|
const cutoff = latestTimestamp - this.#windowMs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveRollingAggregation.js","sourceRoot":"","sources":["../src/LiveRollingAggregation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,kBAAkB,GAGnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAA4B,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"LiveRollingAggregation.js","sourceRoot":"","sources":["../src/LiveRollingAggregation.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,8 @@ export { LiveSeries } from './LiveSeries.js';
|
|
|
8
8
|
export { LiveView } from './LiveView.js';
|
|
9
9
|
export type { LiveFillMapping, LiveFillStrategy } from './LiveView.js';
|
|
10
10
|
export { LiveRollingAggregation } from './LiveRollingAggregation.js';
|
|
11
|
+
export { Trigger } from './triggers.js';
|
|
12
|
+
export type { ClockTrigger, EventTrigger } from './triggers.js';
|
|
11
13
|
export { PartitionedTimeSeries } from './PartitionedTimeSeries.js';
|
|
12
14
|
export { Time } from './Time.js';
|
|
13
15
|
export { TimeRange, toTimeRange } from './TimeRange.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,7 @@ export { LivePartitionedSeries, LivePartitionedView, } from './LivePartitionedSe
|
|
|
6
6
|
export { LiveSeries } from './LiveSeries.js';
|
|
7
7
|
export { LiveView } from './LiveView.js';
|
|
8
8
|
export { LiveRollingAggregation } from './LiveRollingAggregation.js';
|
|
9
|
+
export { Trigger } from './triggers.js';
|
|
9
10
|
export { PartitionedTimeSeries } from './PartitionedTimeSeries.js';
|
|
10
11
|
export { Time } from './Time.js';
|
|
11
12
|
export { TimeRange, toTimeRange } from './TimeRange.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GAEpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GAEpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { Sequence } from './Sequence.js';
|
|
2
|
+
/**
|
|
3
|
+
* A `Trigger` describes when an accumulator should emit. Pond's live
|
|
4
|
+
* layer factors emission cadence as a first-class concept — orthogonal
|
|
5
|
+
* to the accumulator's aggregation choice — so the same primitive can
|
|
6
|
+
* fire on every event, on sequence boundaries, or (in future) on count
|
|
7
|
+
* thresholds.
|
|
8
|
+
*
|
|
9
|
+
* Triggers are constructed via the `Trigger` factory:
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { Trigger, Sequence } from 'pond-ts';
|
|
13
|
+
*
|
|
14
|
+
* const event = Trigger.event(); // per-event (default)
|
|
15
|
+
* const clock = Trigger.clock(Sequence.every('30s')); // per sequence boundary
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* Pass to an accumulator's `trigger` option to switch its emission
|
|
19
|
+
* cadence:
|
|
20
|
+
*
|
|
21
|
+
* ```ts
|
|
22
|
+
* live.rolling('1m', { latency: 'p95' }, {
|
|
23
|
+
* trigger: Trigger.clock(Sequence.every('30s')),
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* For partitioned accumulators, a clock trigger synchronises emission
|
|
28
|
+
* across all partitions: when any partition's event crosses a boundary,
|
|
29
|
+
* every partition emits its current rolling-window snapshot at the
|
|
30
|
+
* same boundary timestamp.
|
|
31
|
+
*/
|
|
32
|
+
export type Trigger = ClockTrigger | EventTrigger;
|
|
33
|
+
/**
|
|
34
|
+
* Sequence-triggered emission. The accumulator emits one snapshot each
|
|
35
|
+
* time a source event crosses an epoch-aligned boundary of `sequence`.
|
|
36
|
+
*
|
|
37
|
+
* - **Output timestamps** are the boundary instants (`Sequence.every('30s')`
|
|
38
|
+
* → 0, 30 000, 60 000 … ms).
|
|
39
|
+
* - **Data-driven**, not wall-clock-driven. If no source events arrive
|
|
40
|
+
* during an interval, no event is emitted for that interval.
|
|
41
|
+
* - **One emission per crossing.** A single event jumping multiple
|
|
42
|
+
* boundaries fires exactly one event at the new bucket's start.
|
|
43
|
+
* - **Synchronised across partitions.** When applied via a partitioned
|
|
44
|
+
* accumulator's `trigger` option, all partitions share the same
|
|
45
|
+
* bucket index — any partition's event crossing a boundary fires
|
|
46
|
+
* emission for every partition at the same instant.
|
|
47
|
+
*
|
|
48
|
+
* Calendar sequences (`Sequence.calendar('day')`) are rejected — boundary
|
|
49
|
+
* indexing requires a constant millisecond step.
|
|
50
|
+
*/
|
|
51
|
+
export type ClockTrigger = Readonly<{
|
|
52
|
+
kind: 'clock';
|
|
53
|
+
sequence: Sequence;
|
|
54
|
+
}>;
|
|
55
|
+
/**
|
|
56
|
+
* Per-event emission. The accumulator emits one snapshot per source
|
|
57
|
+
* event push. This is the default for accumulators that don't specify
|
|
58
|
+
* a trigger; calling `Trigger.event()` explicitly is useful for
|
|
59
|
+
* documentation but produces the same behavior as omitting the option.
|
|
60
|
+
*/
|
|
61
|
+
export type EventTrigger = Readonly<{
|
|
62
|
+
kind: 'event';
|
|
63
|
+
}>;
|
|
64
|
+
/**
|
|
65
|
+
* Factory for constructing `Trigger` values. See {@link Trigger} for
|
|
66
|
+
* the conceptual overview and {@link ClockTrigger} / {@link EventTrigger}
|
|
67
|
+
* for the individual variants.
|
|
68
|
+
*/
|
|
69
|
+
export declare const Trigger: Readonly<{
|
|
70
|
+
/**
|
|
71
|
+
* Construct a sequence-triggered emission rule. See
|
|
72
|
+
* {@link ClockTrigger} for full semantics.
|
|
73
|
+
*
|
|
74
|
+
* @throws TypeError if `sequence` is calendar-based — boundary indexing
|
|
75
|
+
* requires a constant millisecond step. Use a fixed-step sequence
|
|
76
|
+
* (`Sequence.every('30s')`, `Sequence.hourly()`, etc.).
|
|
77
|
+
*/
|
|
78
|
+
clock(sequence: Sequence): ClockTrigger;
|
|
79
|
+
/**
|
|
80
|
+
* Construct a per-event trigger. This is the default behaviour of
|
|
81
|
+
* accumulators (`live.rolling(...)` etc.) when no `trigger` option
|
|
82
|
+
* is specified — passing `Trigger.event()` explicitly is documentary.
|
|
83
|
+
*/
|
|
84
|
+
event(): EventTrigger;
|
|
85
|
+
}>;
|
|
86
|
+
/**
|
|
87
|
+
* Internal helper: compute the bucket index for a timestamp under a
|
|
88
|
+
* clock trigger. Used by accumulators implementing clock-triggered
|
|
89
|
+
* emission.
|
|
90
|
+
*/
|
|
91
|
+
export declare function bucketIndexFor(trigger: ClockTrigger, ts: number): number;
|
|
92
|
+
/**
|
|
93
|
+
* Internal helper: compute the boundary timestamp at the start of a
|
|
94
|
+
* given bucket index for a clock trigger.
|
|
95
|
+
*/
|
|
96
|
+
export declare function boundaryTimestampFor(trigger: ClockTrigger, bucketIdx: number): number;
|
|
97
|
+
//# sourceMappingURL=triggers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triggers.d.ts","sourceRoot":"","sources":["../src/triggers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,YAAY,CAAC;AAElD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAKvD;;;;GAIG;AACH,eAAO,MAAM,OAAO;IAClB;;;;;;;OAOG;oBACa,QAAQ,GAAG,YAAY;IAUvC;;;;OAIG;aACM,YAAY;EAGrB,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAIxE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,GAChB,MAAM,CAIR"}
|
package/dist/triggers.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** Sentinel default trigger — frozen, shared. */
|
|
2
|
+
const EVENT_TRIGGER = Object.freeze({ kind: 'event' });
|
|
3
|
+
/**
|
|
4
|
+
* Factory for constructing `Trigger` values. See {@link Trigger} for
|
|
5
|
+
* the conceptual overview and {@link ClockTrigger} / {@link EventTrigger}
|
|
6
|
+
* for the individual variants.
|
|
7
|
+
*/
|
|
8
|
+
export const Trigger = Object.freeze({
|
|
9
|
+
/**
|
|
10
|
+
* Construct a sequence-triggered emission rule. See
|
|
11
|
+
* {@link ClockTrigger} for full semantics.
|
|
12
|
+
*
|
|
13
|
+
* @throws TypeError if `sequence` is calendar-based — boundary indexing
|
|
14
|
+
* requires a constant millisecond step. Use a fixed-step sequence
|
|
15
|
+
* (`Sequence.every('30s')`, `Sequence.hourly()`, etc.).
|
|
16
|
+
*/
|
|
17
|
+
clock(sequence) {
|
|
18
|
+
if (sequence.kind() !== 'fixed') {
|
|
19
|
+
throw new TypeError('Trigger.clock(sequence) requires a fixed-step Sequence; ' +
|
|
20
|
+
'calendar sequences have no constant boundary spacing.');
|
|
21
|
+
}
|
|
22
|
+
return Object.freeze({ kind: 'clock', sequence });
|
|
23
|
+
},
|
|
24
|
+
/**
|
|
25
|
+
* Construct a per-event trigger. This is the default behaviour of
|
|
26
|
+
* accumulators (`live.rolling(...)` etc.) when no `trigger` option
|
|
27
|
+
* is specified — passing `Trigger.event()` explicitly is documentary.
|
|
28
|
+
*/
|
|
29
|
+
event() {
|
|
30
|
+
return EVENT_TRIGGER;
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
/**
|
|
34
|
+
* Internal helper: compute the bucket index for a timestamp under a
|
|
35
|
+
* clock trigger. Used by accumulators implementing clock-triggered
|
|
36
|
+
* emission.
|
|
37
|
+
*/
|
|
38
|
+
export function bucketIndexFor(trigger, ts) {
|
|
39
|
+
const stepMs = trigger.sequence.stepMs();
|
|
40
|
+
const anchorMs = trigger.sequence.anchor();
|
|
41
|
+
return Math.floor((ts - anchorMs) / stepMs);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Internal helper: compute the boundary timestamp at the start of a
|
|
45
|
+
* given bucket index for a clock trigger.
|
|
46
|
+
*/
|
|
47
|
+
export function boundaryTimestampFor(trigger, bucketIdx) {
|
|
48
|
+
const stepMs = trigger.sequence.stepMs();
|
|
49
|
+
const anchorMs = trigger.sequence.anchor();
|
|
50
|
+
return anchorMs + bucketIdx * stepMs;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=triggers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triggers.js","sourceRoot":"","sources":["../src/triggers.ts"],"names":[],"mappings":"AA8DA,iDAAiD;AACjD,MAAM,aAAa,GAAiB,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAErE;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC;;;;;;;OAOG;IACH,KAAK,CAAC,QAAkB;QACtB,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;YAChC,MAAM,IAAI,SAAS,CACjB,0DAA0D;gBACxD,uDAAuD,CAC1D,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,OAAO,aAAa,CAAC;IACvB,CAAC;CACF,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAAqB,EAAE,EAAU;IAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAqB,EACrB,SAAiB;IAEjB,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC3C,OAAO,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AACvC,CAAC"}
|