pond-ts 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/PartitionedTimeSeries.d.ts +118 -18
- package/dist/PartitionedTimeSeries.d.ts.map +1 -1
- package/dist/PartitionedTimeSeries.js +206 -28
- package/dist/PartitionedTimeSeries.js.map +1 -1
- package/dist/TimeSeries.d.ts +88 -14
- package/dist/TimeSeries.d.ts.map +1 -1
- package/dist/TimeSeries.js +151 -39
- package/dist/TimeSeries.js.map +1 -1
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -3,7 +3,7 @@ import type { BoundedSequence } from './BoundedSequence.js';
|
|
|
3
3
|
import type { Sequence } from './Sequence.js';
|
|
4
4
|
import type { DurationInput } from './utils/duration.js';
|
|
5
5
|
import type { TemporalLike } from './temporal.js';
|
|
6
|
-
import type { AggregateMap, AggregateOutputMap, AggregateSchema, AlignSchema, BaselineSchema, DedupeKeep, DiffSchema, EventDataForSchema, FillMapping, FillStrategy, NumericColumnNameForSchema, RollingAlignment, RollingSchema, SeriesSchema, SmoothAppendSchema, SmoothMethod, SmoothSchema } from './types.js';
|
|
6
|
+
import type { AggregateMap, AggregateOutputMap, AggregateSchema, AlignSchema, BaselineSchema, DedupeKeep, DiffSchema, EventDataForSchema, FillMapping, FillStrategy, MaterializeSchema, NumericColumnNameForSchema, RollingAlignment, RollingSchema, SeriesSchema, SmoothAppendSchema, SmoothMethod, SmoothSchema } from './types.js';
|
|
7
7
|
import type { AggregateOutputMapResultSchema, RollingOutputMapSchema } from './types-aggregate.js';
|
|
8
8
|
type SequenceLike = Sequence | BoundedSequence;
|
|
9
9
|
type AlignMethod = 'hold' | 'linear';
|
|
@@ -51,10 +51,21 @@ type AlignSample = 'begin' | 'center' | 'end';
|
|
|
51
51
|
* );
|
|
52
52
|
* ```
|
|
53
53
|
*/
|
|
54
|
-
export declare class PartitionedTimeSeries<S extends SeriesSchema> {
|
|
54
|
+
export declare class PartitionedTimeSeries<S extends SeriesSchema, K extends string = string> {
|
|
55
|
+
#private;
|
|
55
56
|
readonly source: TimeSeries<S>;
|
|
56
57
|
readonly by: ReadonlyArray<keyof EventDataForSchema<S> & string>;
|
|
57
|
-
|
|
58
|
+
/**
|
|
59
|
+
* Declared partition values when `partitionBy(col, { groups })` was
|
|
60
|
+
* used. When set, `toMap` iterates in declared order (not insertion
|
|
61
|
+
* order), empty declared groups still appear as empty `TimeSeries`
|
|
62
|
+
* entries, and unknown partition values throw at construction time.
|
|
63
|
+
*/
|
|
64
|
+
readonly groups?: ReadonlyArray<K>;
|
|
65
|
+
constructor(source: TimeSeries<S>, by: (keyof EventDataForSchema<S> & string) | ReadonlyArray<keyof EventDataForSchema<S> & string>, options?: {
|
|
66
|
+
groups?: ReadonlyArray<K>;
|
|
67
|
+
});
|
|
68
|
+
private validateGroupMembership;
|
|
58
69
|
/**
|
|
59
70
|
* Materialize the partitioned view back into a regular `TimeSeries`.
|
|
60
71
|
* Terminal operation — call this at the end of a chain to "collect"
|
|
@@ -90,12 +101,85 @@ export declare class PartitionedTimeSeries<S extends SeriesSchema> {
|
|
|
90
101
|
* ```
|
|
91
102
|
*/
|
|
92
103
|
apply<R extends SeriesSchema>(fn: (group: TimeSeries<S>) => TimeSeries<R>): TimeSeries<R>;
|
|
104
|
+
/**
|
|
105
|
+
* Materialize the partitioned view as a `Map<key, TimeSeries<S>>`,
|
|
106
|
+
* one entry per partition. Terminal — exits the partition view.
|
|
107
|
+
*
|
|
108
|
+
* Use this when downstream code needs to iterate or look up per
|
|
109
|
+
* partition (typical in dashboards: one chart line per host, one
|
|
110
|
+
* tooltip per region). Without this, the equivalent dance was
|
|
111
|
+
* `.collect().groupBy(col, fn)` — two operators where one would do.
|
|
112
|
+
*
|
|
113
|
+
* The map key is the stringified partition value for single-column
|
|
114
|
+
* partitions, or a `JSON.stringify`'d array of values for composite
|
|
115
|
+
* partitions. The single-column form preserves the value's natural
|
|
116
|
+
* string representation (a `host` column with values `'api-1'`
|
|
117
|
+
* yields keys `'api-1'`); composite keys produce JSON like
|
|
118
|
+
* `'["api-1","eu"]'`. Map iteration order matches the order each
|
|
119
|
+
* partition was first encountered in the source events.
|
|
120
|
+
*
|
|
121
|
+
* `undefined` partition values become the literal `' undefined'`
|
|
122
|
+
* with a **leading space** — this avoids colliding with a string
|
|
123
|
+
* column whose value happens to be the literal text `'undefined'`.
|
|
124
|
+
* The two are distinct buckets:
|
|
125
|
+
*
|
|
126
|
+
* ```ts
|
|
127
|
+
* series // events with host=undefined and host='undefined'
|
|
128
|
+
* .partitionBy('host')
|
|
129
|
+
* .toMap();
|
|
130
|
+
* // → 2 entries: ' undefined' (missing) vs 'undefined' (string literal)
|
|
131
|
+
* ```
|
|
132
|
+
*
|
|
133
|
+
* **Divergence from `series.groupBy(col)`:** `groupBy` uses bare
|
|
134
|
+
* `'undefined'` (no leading space) for missing values, so it
|
|
135
|
+
* collapses these two cases. `toMap`'s leading-space sentinel is
|
|
136
|
+
* an intentional improvement — the older `groupBy` shape silently
|
|
137
|
+
* loses the distinction between "missing" and "the string
|
|
138
|
+
* 'undefined'". Migrating from `groupBy` to `toMap` will produce
|
|
139
|
+
* different keys for partitions with `undefined` values; lookup
|
|
140
|
+
* code that previously did `.get('undefined')` should change to
|
|
141
|
+
* `.get(' undefined')` (note the leading space) to find the
|
|
142
|
+
* missing-value bucket.
|
|
143
|
+
*
|
|
144
|
+
* **Composite encoder.** For composite partitions, `JSON.stringify`
|
|
145
|
+
* with a `?? null` fallback emits both `null` and `undefined` as
|
|
146
|
+
* JSON `null`. In practice this only matters if event data
|
|
147
|
+
* contains explicit `null` values, which the standard
|
|
148
|
+
* validation/ingest paths convert to `undefined` upfront — so the
|
|
149
|
+
* single-column-vs-composite asymmetry is unreachable through the
|
|
150
|
+
* normal API.
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* ```ts
|
|
154
|
+
* // Per-host event lookup
|
|
155
|
+
* const byHost = events.partitionBy('host').toMap();
|
|
156
|
+
* const apiEvents = byHost.get('api-1');
|
|
157
|
+
*
|
|
158
|
+
* // With a transform — one-shot per-partition shape change
|
|
159
|
+
* const points = events.partitionBy('host').toMap((g) => g.toPoints());
|
|
160
|
+
* for (const [host, rows] of points) {
|
|
161
|
+
* chart.addSeries(host, rows);
|
|
162
|
+
* }
|
|
163
|
+
*
|
|
164
|
+
* // Composite partition
|
|
165
|
+
* const byHostRegion = events
|
|
166
|
+
* .partitionBy(['host', 'region'])
|
|
167
|
+
* .toMap();
|
|
168
|
+
* const apiEu = byHostRegion.get('["api-1","eu"]');
|
|
169
|
+
* ```
|
|
170
|
+
*/
|
|
171
|
+
toMap(): Map<K, TimeSeries<S>>;
|
|
172
|
+
toMap<R extends SeriesSchema>(transform: (group: TimeSeries<S>) => TimeSeries<R>): Map<K, TimeSeries<R>>;
|
|
173
|
+
toMap<R>(transform: (group: TimeSeries<S>) => R): Map<K, R>;
|
|
174
|
+
private static partitionKeyOf;
|
|
175
|
+
private static bucketByPartition;
|
|
93
176
|
private static applyToSource;
|
|
94
177
|
private rewrap;
|
|
95
178
|
/** Per-partition `fill`. See {@link TimeSeries.fill}. */
|
|
96
179
|
fill(strategy: FillStrategy | FillMapping<S>, options?: {
|
|
97
180
|
limit?: number;
|
|
98
|
-
|
|
181
|
+
maxGap?: DurationInput;
|
|
182
|
+
}): PartitionedTimeSeries<S, K>;
|
|
99
183
|
/**
|
|
100
184
|
* Per-partition `dedupe`. The duplicate key becomes "same partition
|
|
101
185
|
* columns AND same timestamp" — `partitionBy` provides the partition
|
|
@@ -106,30 +190,46 @@ export declare class PartitionedTimeSeries<S extends SeriesSchema> {
|
|
|
106
190
|
*/
|
|
107
191
|
dedupe(options?: {
|
|
108
192
|
keep?: DedupeKeep<S>;
|
|
109
|
-
}): PartitionedTimeSeries<S>;
|
|
193
|
+
}): PartitionedTimeSeries<S, K>;
|
|
110
194
|
/** Per-partition `align`. See {@link TimeSeries.align}. */
|
|
111
195
|
align(sequence: SequenceLike, options?: {
|
|
112
196
|
method?: AlignMethod;
|
|
113
197
|
sample?: AlignSample;
|
|
114
198
|
range?: TemporalLike;
|
|
115
|
-
}): PartitionedTimeSeries<AlignSchema<S
|
|
199
|
+
}): PartitionedTimeSeries<AlignSchema<S>, K>;
|
|
200
|
+
/**
|
|
201
|
+
* Per-partition `materialize`. See {@link TimeSeries.materialize}.
|
|
202
|
+
*
|
|
203
|
+
* **Bonus over the bare `TimeSeries.materialize` call:** every
|
|
204
|
+
* output row, including empty-bucket rows, gets the partition
|
|
205
|
+
* columns auto-populated from the partition's known key values.
|
|
206
|
+
* Without this, empty buckets would emit rows with `undefined`
|
|
207
|
+
* partition columns — forcing a follow-up
|
|
208
|
+
* `.fill({ host: 'hold' })` step that fails for partitions where
|
|
209
|
+
* every event sits in a long-outage gap.
|
|
210
|
+
*/
|
|
211
|
+
materialize(sequence: SequenceLike, options?: {
|
|
212
|
+
sample?: AlignSample;
|
|
213
|
+
select?: 'first' | 'last' | 'nearest';
|
|
214
|
+
range?: TemporalLike;
|
|
215
|
+
}): PartitionedTimeSeries<MaterializeSchema<S>, K>;
|
|
116
216
|
/** Per-partition `rolling`. See {@link TimeSeries.rolling}. */
|
|
117
217
|
rolling<const Mapping extends AggregateMap<S>>(window: DurationInput, mapping: Mapping, options?: {
|
|
118
218
|
alignment?: RollingAlignment;
|
|
119
|
-
}): PartitionedTimeSeries<RollingSchema<S, Mapping
|
|
219
|
+
}): PartitionedTimeSeries<RollingSchema<S, Mapping>, K>;
|
|
120
220
|
rolling<const Mapping extends AggregateOutputMap<S>>(window: DurationInput, mapping: Mapping, options?: {
|
|
121
221
|
alignment?: RollingAlignment;
|
|
122
|
-
}): PartitionedTimeSeries<RollingOutputMapSchema<S, Mapping
|
|
222
|
+
}): PartitionedTimeSeries<RollingOutputMapSchema<S, Mapping>, K>;
|
|
123
223
|
rolling<const Mapping extends AggregateMap<S>>(sequence: SequenceLike, window: DurationInput, mapping: Mapping, options?: {
|
|
124
224
|
alignment?: RollingAlignment;
|
|
125
225
|
sample?: AlignSample;
|
|
126
226
|
range?: TemporalLike;
|
|
127
|
-
}): PartitionedTimeSeries<AggregateSchema<S, Mapping
|
|
227
|
+
}): PartitionedTimeSeries<AggregateSchema<S, Mapping>, K>;
|
|
128
228
|
rolling<const Mapping extends AggregateOutputMap<S>>(sequence: SequenceLike, window: DurationInput, mapping: Mapping, options?: {
|
|
129
229
|
alignment?: RollingAlignment;
|
|
130
230
|
sample?: AlignSample;
|
|
131
231
|
range?: TemporalLike;
|
|
132
|
-
}): PartitionedTimeSeries<AggregateOutputMapResultSchema<S, Mapping
|
|
232
|
+
}): PartitionedTimeSeries<AggregateOutputMapResultSchema<S, Mapping>, K>;
|
|
133
233
|
/** Per-partition `smooth`. See {@link TimeSeries.smooth}. */
|
|
134
234
|
smooth<const Target extends NumericColumnNameForSchema<S>, const Output extends string | undefined = undefined>(column: Target, method: SmoothMethod, options: {
|
|
135
235
|
alpha: number;
|
|
@@ -160,32 +260,32 @@ export declare class PartitionedTimeSeries<S extends SeriesSchema> {
|
|
|
160
260
|
window: DurationInput;
|
|
161
261
|
sigma: number;
|
|
162
262
|
alignment?: RollingAlignment;
|
|
163
|
-
}): PartitionedTimeSeries<S>;
|
|
263
|
+
}): PartitionedTimeSeries<S, K>;
|
|
164
264
|
/** Per-partition `diff`. See {@link TimeSeries.diff}. */
|
|
165
265
|
diff<const Target extends NumericColumnNameForSchema<S>>(columns: Target | readonly Target[], options?: {
|
|
166
266
|
drop?: boolean;
|
|
167
|
-
}): PartitionedTimeSeries<DiffSchema<S, Target
|
|
267
|
+
}): PartitionedTimeSeries<DiffSchema<S, Target>, K>;
|
|
168
268
|
/** Per-partition `rate`. See {@link TimeSeries.rate}. */
|
|
169
269
|
rate<const Target extends NumericColumnNameForSchema<S>>(columns: Target | readonly Target[], options?: {
|
|
170
270
|
drop?: boolean;
|
|
171
|
-
}): PartitionedTimeSeries<DiffSchema<S, Target
|
|
271
|
+
}): PartitionedTimeSeries<DiffSchema<S, Target>, K>;
|
|
172
272
|
/** Per-partition `pctChange`. See {@link TimeSeries.pctChange}. */
|
|
173
273
|
pctChange<const Target extends NumericColumnNameForSchema<S>>(columns: Target | readonly Target[], options?: {
|
|
174
274
|
drop?: boolean;
|
|
175
|
-
}): PartitionedTimeSeries<DiffSchema<S, Target
|
|
275
|
+
}): PartitionedTimeSeries<DiffSchema<S, Target>, K>;
|
|
176
276
|
/** Per-partition `cumulative`. See {@link TimeSeries.cumulative}. */
|
|
177
277
|
cumulative<const Targets extends NumericColumnNameForSchema<S>>(spec: {
|
|
178
278
|
[K in Targets]: 'sum' | 'max' | 'min' | 'count' | ((acc: number, value: number) => number);
|
|
179
|
-
}): PartitionedTimeSeries<DiffSchema<S, Targets
|
|
279
|
+
}): PartitionedTimeSeries<DiffSchema<S, Targets>, K>;
|
|
180
280
|
/** Per-partition `shift`. See {@link TimeSeries.shift}. */
|
|
181
|
-
shift<const Target extends NumericColumnNameForSchema<S>>(columns: Target | readonly Target[], n: number): PartitionedTimeSeries<DiffSchema<S, Target
|
|
281
|
+
shift<const Target extends NumericColumnNameForSchema<S>>(columns: Target | readonly Target[], n: number): PartitionedTimeSeries<DiffSchema<S, Target>, K>;
|
|
182
282
|
/** Per-partition `aggregate`. See {@link TimeSeries.aggregate}. */
|
|
183
283
|
aggregate<const Mapping extends AggregateMap<S>>(sequence: SequenceLike, mapping: Mapping, options?: {
|
|
184
284
|
range?: TemporalLike;
|
|
185
|
-
}): PartitionedTimeSeries<AggregateSchema<S, Mapping
|
|
285
|
+
}): PartitionedTimeSeries<AggregateSchema<S, Mapping>, K>;
|
|
186
286
|
aggregate<const Mapping extends AggregateOutputMap<S>>(sequence: SequenceLike, mapping: Mapping, options?: {
|
|
187
287
|
range?: TemporalLike;
|
|
188
|
-
}): PartitionedTimeSeries<AggregateOutputMapResultSchema<S, Mapping
|
|
288
|
+
}): PartitionedTimeSeries<AggregateOutputMapResultSchema<S, Mapping>, K>;
|
|
189
289
|
}
|
|
190
290
|
export {};
|
|
191
291
|
//# sourceMappingURL=PartitionedTimeSeries.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PartitionedTimeSeries.d.ts","sourceRoot":"","sources":["../src/PartitionedTimeSeries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,cAAc,EACd,UAAU,EACV,UAAU,EACV,kBAAkB,EAElB,WAAW,EACX,YAAY,EACZ,0BAA0B,EAC1B,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,8BAA8B,EAC9B,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAE9B,KAAK,YAAY,GAAG,QAAQ,GAAG,eAAe,CAAC;AAC/C,KAAK,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC;AACrC,KAAK,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,qBAAa,qBAAqB,
|
|
1
|
+
{"version":3,"file":"PartitionedTimeSeries.d.ts","sourceRoot":"","sources":["../src/PartitionedTimeSeries.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,7 +45,14 @@ import { TimeSeries } from './TimeSeries.js';
|
|
|
45
45
|
export class PartitionedTimeSeries {
|
|
46
46
|
source;
|
|
47
47
|
by;
|
|
48
|
-
|
|
48
|
+
/**
|
|
49
|
+
* Declared partition values when `partitionBy(col, { groups })` was
|
|
50
|
+
* used. When set, `toMap` iterates in declared order (not insertion
|
|
51
|
+
* order), empty declared groups still appear as empty `TimeSeries`
|
|
52
|
+
* entries, and unknown partition values throw at construction time.
|
|
53
|
+
*/
|
|
54
|
+
groups;
|
|
55
|
+
constructor(source, by, options) {
|
|
49
56
|
this.source = source;
|
|
50
57
|
this.by = (Array.isArray(by) ? by : [by]);
|
|
51
58
|
if (this.by.length === 0) {
|
|
@@ -56,6 +63,65 @@ export class PartitionedTimeSeries {
|
|
|
56
63
|
throw new TypeError(`PartitionedTimeSeries: column "${String(col)}" not in schema`);
|
|
57
64
|
}
|
|
58
65
|
}
|
|
66
|
+
if (options?.groups !== undefined) {
|
|
67
|
+
if (this.by.length > 1) {
|
|
68
|
+
throw new TypeError('PartitionedTimeSeries: typed `groups` option requires a single ' +
|
|
69
|
+
'partition column. Drop `groups` for composite partitions, or ' +
|
|
70
|
+
'narrow to a single column.');
|
|
71
|
+
}
|
|
72
|
+
if (options.groups.length === 0) {
|
|
73
|
+
throw new TypeError('PartitionedTimeSeries: `groups` cannot be empty. Drop the ' +
|
|
74
|
+
'option to allow any partition value, or list at least one ' +
|
|
75
|
+
'declared group.');
|
|
76
|
+
}
|
|
77
|
+
const seen = new Set();
|
|
78
|
+
for (const g of options.groups) {
|
|
79
|
+
if (seen.has(g)) {
|
|
80
|
+
throw new TypeError(`PartitionedTimeSeries: duplicate value ${JSON.stringify(g)} ` +
|
|
81
|
+
`in \`groups\`. Each declared group must be unique.`);
|
|
82
|
+
}
|
|
83
|
+
seen.add(g);
|
|
84
|
+
}
|
|
85
|
+
this.groups = options.groups;
|
|
86
|
+
this.validateGroupMembership();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Validate that every event's partition value appears in the
|
|
90
|
+
// declared groups. Mirrors the partition encoder so the comparison
|
|
91
|
+
// accepts the same string forms toMap will produce as keys.
|
|
92
|
+
validateGroupMembership() {
|
|
93
|
+
if (!this.groups)
|
|
94
|
+
return;
|
|
95
|
+
const col = this.by[0];
|
|
96
|
+
const declared = new Set(this.groups);
|
|
97
|
+
const keyOf = PartitionedTimeSeries.partitionKeyOf(this.by);
|
|
98
|
+
for (const event of this.source.events) {
|
|
99
|
+
const key = keyOf(event);
|
|
100
|
+
if (!declared.has(key)) {
|
|
101
|
+
// Decode the encoder's leading-space sentinel so the message
|
|
102
|
+
// shows the user-facing concept, not the internal encoding.
|
|
103
|
+
const display = key === ' undefined' ? 'undefined' : JSON.stringify(key);
|
|
104
|
+
throw new TypeError(`PartitionedTimeSeries: encountered partition value ${display} ` +
|
|
105
|
+
`for column "${String(col)}" which is not in declared groups ` +
|
|
106
|
+
`[${this.groups.map((g) => JSON.stringify(g)).join(', ')}].`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Class-private factory used by `rewrap` to construct a
|
|
111
|
+
// partitioned view from a per-partition transform output. Skips
|
|
112
|
+
// groups validation because the events came from this view's
|
|
113
|
+
// pre-validated source — partition values cannot change inside a
|
|
114
|
+
// per-partition transform. JS-private (`static #fromValidated`) so
|
|
115
|
+
// the trusted path is unreachable from outside the class.
|
|
116
|
+
static #fromValidated(source, by, groups) {
|
|
117
|
+
const p = new PartitionedTimeSeries(source, by);
|
|
118
|
+
if (groups !== undefined) {
|
|
119
|
+
// groups was already validated when the user constructed the
|
|
120
|
+
// upstream view; partition values are preserved through any
|
|
121
|
+
// per-partition transform.
|
|
122
|
+
p.groups = groups;
|
|
123
|
+
}
|
|
124
|
+
return p;
|
|
59
125
|
}
|
|
60
126
|
/**
|
|
61
127
|
* Materialize the partitioned view back into a regular `TimeSeries`.
|
|
@@ -96,38 +162,70 @@ export class PartitionedTimeSeries {
|
|
|
96
162
|
apply(fn) {
|
|
97
163
|
return PartitionedTimeSeries.applyToSource(this.source, this.by, fn);
|
|
98
164
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
if (
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
165
|
+
toMap(transform) {
|
|
166
|
+
const result = new Map();
|
|
167
|
+
const buckets = this.source.events.length === 0
|
|
168
|
+
? new Map()
|
|
169
|
+
: PartitionedTimeSeries.bucketByPartition(this.source, this.by);
|
|
170
|
+
if (this.groups) {
|
|
171
|
+
// Declared-order iteration. Empty groups produce empty
|
|
172
|
+
// TimeSeries entries (consistent with pivotByGroup's typed
|
|
173
|
+
// groups behavior, which emits a column for every declared
|
|
174
|
+
// value even when no events match).
|
|
175
|
+
for (const g of this.groups) {
|
|
176
|
+
const events = buckets.get(g) ?? [];
|
|
177
|
+
const sub = TimeSeries.fromEvents(events, {
|
|
178
|
+
schema: this.source.schema,
|
|
179
|
+
name: this.source.name,
|
|
180
|
+
});
|
|
181
|
+
result.set(g, transform ? transform(sub) : sub);
|
|
182
|
+
}
|
|
183
|
+
return result;
|
|
184
|
+
}
|
|
185
|
+
// Insertion-order iteration (matches the order each partition was
|
|
186
|
+
// first encountered in the source events).
|
|
187
|
+
for (const [key, events] of buckets) {
|
|
188
|
+
const sub = TimeSeries.fromEvents(events, {
|
|
189
|
+
schema: this.source.schema,
|
|
190
|
+
name: this.source.name,
|
|
108
191
|
});
|
|
109
|
-
|
|
192
|
+
result.set(key, transform ? transform(sub) : sub);
|
|
110
193
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
194
|
+
return result;
|
|
195
|
+
}
|
|
196
|
+
// Build the encoder that produces a string key for an event given
|
|
197
|
+
// the partition columns. Single-column case avoids the JSON encoding
|
|
198
|
+
// overhead. Multi-column uses JSON.stringify to guarantee no key
|
|
199
|
+
// collisions on values containing separators (e.g. region names with
|
|
200
|
+
// spaces) — a naive `parts.join('|')` would collide. `undefined` in a
|
|
201
|
+
// single-column key becomes the literal `' undefined'` (with the
|
|
202
|
+
// leading space ensuring it can never collide with a string column
|
|
203
|
+
// whose value is the literal `'undefined'`).
|
|
204
|
+
static partitionKeyOf(by) {
|
|
205
|
+
if (by.length === 1) {
|
|
206
|
+
const col = by[0];
|
|
207
|
+
return (event) => {
|
|
208
|
+
const v = event.data()[col];
|
|
116
209
|
return v === undefined ? ' undefined' : `${String(v)}`;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
// containing the separator.
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
return (event) => {
|
|
213
|
+
const data = event.data();
|
|
122
214
|
const parts = new Array(by.length);
|
|
123
215
|
for (let i = 0; i < by.length; i += 1) {
|
|
124
216
|
parts[i] = data[by[i]] ?? null;
|
|
125
217
|
}
|
|
126
218
|
return JSON.stringify(parts);
|
|
127
219
|
};
|
|
220
|
+
}
|
|
221
|
+
// Group source events into buckets keyed by partition value. Returned
|
|
222
|
+
// Map iteration order = insertion order, which matches the order
|
|
223
|
+
// partitions were first seen in the source events array.
|
|
224
|
+
static bucketByPartition(source, by) {
|
|
225
|
+
const keyOf = PartitionedTimeSeries.partitionKeyOf(by);
|
|
128
226
|
const buckets = new Map();
|
|
129
227
|
for (const event of source.events) {
|
|
130
|
-
const key =
|
|
228
|
+
const key = keyOf(event);
|
|
131
229
|
let bucket = buckets.get(key);
|
|
132
230
|
if (!bucket) {
|
|
133
231
|
bucket = [];
|
|
@@ -135,6 +233,21 @@ export class PartitionedTimeSeries {
|
|
|
135
233
|
}
|
|
136
234
|
bucket.push(event);
|
|
137
235
|
}
|
|
236
|
+
return buckets;
|
|
237
|
+
}
|
|
238
|
+
// Internal helper used by both `apply` (terminal) and the sugar
|
|
239
|
+
// methods (which re-wrap the result back into a partitioned view).
|
|
240
|
+
static applyToSource(source, by, fn) {
|
|
241
|
+
// Empty source: apply fn to an empty group so the output schema
|
|
242
|
+
// and name come from fn, not from inferring R structurally.
|
|
243
|
+
if (source.events.length === 0) {
|
|
244
|
+
const empty = TimeSeries.fromEvents([], {
|
|
245
|
+
schema: source.schema,
|
|
246
|
+
name: source.name,
|
|
247
|
+
});
|
|
248
|
+
return fn(empty);
|
|
249
|
+
}
|
|
250
|
+
const buckets = PartitionedTimeSeries.bucketByPartition(source, by);
|
|
138
251
|
const transformed = [];
|
|
139
252
|
for (const events of buckets.values()) {
|
|
140
253
|
const sub = TimeSeries.fromEvents(events, {
|
|
@@ -146,13 +259,21 @@ export class PartitionedTimeSeries {
|
|
|
146
259
|
return TimeSeries.concat(transformed);
|
|
147
260
|
}
|
|
148
261
|
// Wrap a transform result back into a PartitionedTimeSeries with the
|
|
149
|
-
// same partition columns. Used by the sugar
|
|
150
|
-
// in partition view. Cast at the boundary
|
|
151
|
-
// the partition columns type-narrowly
|
|
152
|
-
// drop columns); runtime constructor
|
|
153
|
-
// columns are still present in the
|
|
262
|
+
// same partition columns and groups (if declared). Used by the sugar
|
|
263
|
+
// methods to keep the chain in partition view. Cast at the boundary
|
|
264
|
+
// because R may not preserve the partition columns type-narrowly
|
|
265
|
+
// (e.g. RollingSchema<S, M> may drop columns); runtime constructor
|
|
266
|
+
// validates that the partition columns are still present in the
|
|
267
|
+
// result schema.
|
|
268
|
+
//
|
|
269
|
+
// Routes through the class-private `#fromValidated` factory so the
|
|
270
|
+
// per-event groups validation is skipped on chain steps — the events
|
|
271
|
+
// came from this view's pre-validated source, and stateful
|
|
272
|
+
// per-partition transforms preserve the partition columns by
|
|
273
|
+
// construction. The trusted path is class-private (JS `#`) so it
|
|
274
|
+
// can't be called from outside the class.
|
|
154
275
|
rewrap(out) {
|
|
155
|
-
return
|
|
276
|
+
return PartitionedTimeSeries.#fromValidated(out, this.by, this.groups);
|
|
156
277
|
}
|
|
157
278
|
// ─── Sugar: stateful ops, applied per partition ─────────────────────
|
|
158
279
|
//
|
|
@@ -180,6 +301,63 @@ export class PartitionedTimeSeries {
|
|
|
180
301
|
align(sequence, options) {
|
|
181
302
|
return this.rewrap(PartitionedTimeSeries.applyToSource(this.source, this.by, (g) => g.align(sequence, options)));
|
|
182
303
|
}
|
|
304
|
+
/**
|
|
305
|
+
* Per-partition `materialize`. See {@link TimeSeries.materialize}.
|
|
306
|
+
*
|
|
307
|
+
* **Bonus over the bare `TimeSeries.materialize` call:** every
|
|
308
|
+
* output row, including empty-bucket rows, gets the partition
|
|
309
|
+
* columns auto-populated from the partition's known key values.
|
|
310
|
+
* Without this, empty buckets would emit rows with `undefined`
|
|
311
|
+
* partition columns — forcing a follow-up
|
|
312
|
+
* `.fill({ host: 'hold' })` step that fails for partitions where
|
|
313
|
+
* every event sits in a long-outage gap.
|
|
314
|
+
*/
|
|
315
|
+
materialize(sequence, options) {
|
|
316
|
+
const partitionCols = this.by;
|
|
317
|
+
return this.rewrap(PartitionedTimeSeries.applyToSource(this.source, this.by, (g) => {
|
|
318
|
+
const out = g.materialize(sequence, options);
|
|
319
|
+
if (g.events.length === 0)
|
|
320
|
+
return out;
|
|
321
|
+
// Detect whether any output row needs partition-column patching
|
|
322
|
+
// (i.e., whether any bucket was empty). If the source covered
|
|
323
|
+
// the grid, every row already carries the partition columns
|
|
324
|
+
// from its source event — skip the map() pass entirely. This
|
|
325
|
+
// avoids the per-event closure-call + new event allocation
|
|
326
|
+
// cost when no patching is required.
|
|
327
|
+
const events = out.events;
|
|
328
|
+
let needsPatch = false;
|
|
329
|
+
outer: for (let i = 0; i < events.length; i += 1) {
|
|
330
|
+
const data = events[i].data();
|
|
331
|
+
for (let c = 0; c < partitionCols.length; c += 1) {
|
|
332
|
+
if (data[partitionCols[c]] === undefined) {
|
|
333
|
+
needsPatch = true;
|
|
334
|
+
break outer;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
if (!needsPatch)
|
|
339
|
+
return out;
|
|
340
|
+
// Patch partition columns where undefined (empty-bucket rows).
|
|
341
|
+
// All events in this partition share the partition columns —
|
|
342
|
+
// capture them once from the first source event.
|
|
343
|
+
const firstData = g.events[0].data();
|
|
344
|
+
const partValues = {};
|
|
345
|
+
for (const col of partitionCols) {
|
|
346
|
+
partValues[col] = firstData[col];
|
|
347
|
+
}
|
|
348
|
+
return out.map(out.schema, (event) => {
|
|
349
|
+
const data = event.data();
|
|
350
|
+
let result = event;
|
|
351
|
+
for (const col of partitionCols) {
|
|
352
|
+
if (data[col] === undefined) {
|
|
353
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
354
|
+
result = result.set(col, partValues[col]);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return result;
|
|
358
|
+
});
|
|
359
|
+
}));
|
|
360
|
+
}
|
|
183
361
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
184
362
|
rolling(...args) {
|
|
185
363
|
return this.rewrap(PartitionedTimeSeries.applyToSource(this.source, this.by, (g) =>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PartitionedTimeSeries.js","sourceRoot":"","sources":["../src/PartitionedTimeSeries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAkC7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,OAAO,qBAAqB;IACvB,MAAM,CAAgB;IACtB,EAAE,CAAsD;IAEjE,YACE,MAAqB,EACrB,EAEuD;QAEvD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAEvC,CAAC;QACF,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,SAAS,CACjB,+DAA+D,CAChE,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC/C,MAAM,IAAI,SAAS,CACjB,kCAAkC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAC/D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,KAAK,CACH,EAA2C;QAE3C,OAAO,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,gEAAgE;IAChE,mEAAmE;IAC3D,MAAM,CAAC,aAAa,CAC1B,MAAsB,EACtB,EAAwD,EACxD,EAA4C;QAE5C,gEAAgE;QAChE,4DAA4D;QAC5D,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CACjC,EAAuC,EACvC;gBACE,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB,CACF,CAAC;YACF,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;QAED,MAAM,YAAY,GAAG,CAAC,KAAyB,EAAU,EAAE;YACzD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAA6B,CAAC;YACrD,mDAAmD;YACnD,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpB,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC;gBACvB,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,CAAC;YACD,4DAA4D;YAC5D,8DAA8D;YAC9D,8DAA8D;YAC9D,4BAA4B;YAC5B,MAAM,KAAK,GAAc,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;YAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,IAAI,IAAI,CAAC;YAClC,CAAC;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgC,CAAC;QACxD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,GAAG,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC3B,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,MAAM,WAAW,GAAoB,EAAE,CAAC;QACxC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE;gBACxC,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB,CAAC,CAAC;YACH,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC;IAED,qEAAqE;IACrE,sEAAsE;IACtE,qEAAqE;IACrE,oEAAoE;IACpE,kEAAkE;IAClE,kDAAkD;IAC1C,MAAM,CACZ,GAAkB;QAElB,OAAO,IAAI,qBAAqB,CAC9B,GAAG,EACH,IAAI,CAAC,EAAoE,CAC1E,CAAC;IACJ,CAAC;IAED,uEAAuE;IACvE,EAAE;IACF,6DAA6D;IAC7D,oEAAoE;IACpE,sEAAsE;IACtE,kEAAkE;IAClE,gEAAgE;IAEhE,yDAAyD;IACzD,IAAI,CACF,QAAuC,EACvC,OAA4B;QAE5B,OAAO,IAAI,CAAC,MAAM,CAChB,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAC9D,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAC1B,CACF,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,OAAkC;QACvC,OAAO,IAAI,CAAC,MAAM,CAChB,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAC9D,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAClB,CACF,CAAC;IACJ,CAAC;IAED,2DAA2D;IAC3D,KAAK,CACH,QAAsB,EACtB,OAIC;QAED,OAAO,IAAI,CAAC,MAAM,CAChB,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAC9D,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAC3B,CACF,CAAC;IACJ,CAAC;IAiCD,8DAA8D;IAC9D,OAAO,CAAC,GAAG,IAAW;QACpB,OAAO,IAAI,CAAC,MAAM,CAChB,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;QAC9D,8DAA8D;QAC7D,CAAC,CAAC,OAAe,CAAC,GAAG,IAAI,CAAC,CAC5B,CACF,CAAC;IACJ,CAAC;IAED,6DAA6D;IAC7D,MAAM,CAIJ,MAAc,EACd,MAAoB,EACpB,OAGqC;QAMrC,OAAO,IAAI,CAAC,MAAM,CAChB,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAC9D,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAClC,CACF,CAAC;IACJ,CAAC;IAED,iEAAiE;IACjE,QAAQ,CAON,GAAQ,EACR,OAUC;QAID,OAAO,IAAI,CAAC,MAAM,CAChB,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAC9D,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CACzB,CACF,CAAC;IACJ,CAAC;IAED,iEAAiE;IACjE,QAAQ,CACN,GAAQ,EACR,OAIC;QAED,OAAO,IAAI,CAAC,MAAM,CAChB,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAC9D,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CACzB,CACF,CAAC;IACJ,CAAC;IAED,yDAAyD;IACzD,IAAI,CACF,OAAmC,EACnC,OAA4B;QAE5B,OAAO,IAAI,CAAC,MAAM,CAChB,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAC9D,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CACzB,CACF,CAAC;IACJ,CAAC;IAED,yDAAyD;IACzD,IAAI,CACF,OAAmC,EACnC,OAA4B;QAE5B,OAAO,IAAI,CAAC,MAAM,CAChB,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAC9D,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CACzB,CACF,CAAC;IACJ,CAAC;IAED,mEAAmE;IACnE,SAAS,CACP,OAAmC,EACnC,OAA4B;QAE5B,OAAO,IAAI,CAAC,MAAM,CAChB,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAC9D,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAC9B,CACF,CAAC;IACJ,CAAC;IAED,qEAAqE;IACrE,UAAU,CAAsD,IAO/D;QACC,OAAO,IAAI,CAAC,MAAM,CAChB,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAC9D,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CACnB,CACF,CAAC;IACJ,CAAC;IAED,2DAA2D;IAC3D,KAAK,CACH,OAAmC,EACnC,CAAS;QAET,OAAO,IAAI,CAAC,MAAM,CAChB,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAC9D,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CACpB,CACF,CAAC;IACJ,CAAC;IAaD,8DAA8D;IAC9D,SAAS,CAAC,GAAG,IAAW;QACtB,OAAO,IAAI,CAAC,MAAM,CAChB,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;QAC9D,8DAA8D;QAC7D,CAAC,CAAC,SAAiB,CAAC,GAAG,IAAI,CAAC,CAC9B,CACF,CAAC;IACJ,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"PartitionedTimeSeries.js","sourceRoot":"","sources":["../src/PartitionedTimeSeries.ts"],"names":[],"mappings":"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"}
|