pond-ts 0.2.0 → 0.3.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/README.md +14 -0
- package/dist/TimeSeries.d.ts +132 -2
- package/dist/TimeSeries.d.ts.map +1 -1
- package/dist/TimeSeries.js +745 -418
- package/dist/TimeSeries.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/reducers/avg.d.ts +3 -0
- package/dist/reducers/avg.d.ts.map +1 -0
- package/dist/reducers/avg.js +45 -0
- package/dist/reducers/avg.js.map +1 -0
- package/dist/reducers/count.d.ts +3 -0
- package/dist/reducers/count.d.ts.map +1 -0
- package/dist/reducers/count.js +35 -0
- package/dist/reducers/count.js.map +1 -0
- package/dist/reducers/difference.d.ts +3 -0
- package/dist/reducers/difference.d.ts.map +1 -0
- package/dist/reducers/difference.js +48 -0
- package/dist/reducers/difference.js.map +1 -0
- package/dist/reducers/first.d.ts +3 -0
- package/dist/reducers/first.d.ts.map +1 -0
- package/dist/reducers/first.js +23 -0
- package/dist/reducers/first.js.map +1 -0
- package/dist/reducers/index.d.ts +4 -0
- package/dist/reducers/index.d.ts.map +1 -0
- package/dist/reducers/index.js +35 -0
- package/dist/reducers/index.js.map +1 -0
- package/dist/reducers/keep.d.ts +3 -0
- package/dist/reducers/keep.d.ts.map +1 -0
- package/dist/reducers/keep.js +56 -0
- package/dist/reducers/keep.js.map +1 -0
- package/dist/reducers/last.d.ts +3 -0
- package/dist/reducers/last.d.ts.map +1 -0
- package/dist/reducers/last.js +23 -0
- package/dist/reducers/last.js.map +1 -0
- package/dist/reducers/max.d.ts +3 -0
- package/dist/reducers/max.d.ts.map +1 -0
- package/dist/reducers/max.js +25 -0
- package/dist/reducers/max.js.map +1 -0
- package/dist/reducers/median.d.ts +3 -0
- package/dist/reducers/median.d.ts.map +1 -0
- package/dist/reducers/median.js +39 -0
- package/dist/reducers/median.js.map +1 -0
- package/dist/reducers/min.d.ts +3 -0
- package/dist/reducers/min.d.ts.map +1 -0
- package/dist/reducers/min.js +25 -0
- package/dist/reducers/min.js.map +1 -0
- package/dist/reducers/percentile.d.ts +5 -0
- package/dist/reducers/percentile.d.ts.map +1 -0
- package/dist/reducers/percentile.js +56 -0
- package/dist/reducers/percentile.js.map +1 -0
- package/dist/reducers/rolling.d.ts +15 -0
- package/dist/reducers/rolling.d.ts.map +1 -0
- package/dist/reducers/rolling.js +84 -0
- package/dist/reducers/rolling.js.map +1 -0
- package/dist/reducers/stdev.d.ts +3 -0
- package/dist/reducers/stdev.d.ts.map +1 -0
- package/dist/reducers/stdev.js +58 -0
- package/dist/reducers/stdev.js.map +1 -0
- package/dist/reducers/sum.d.ts +3 -0
- package/dist/reducers/sum.d.ts.map +1 -0
- package/dist/reducers/sum.js +35 -0
- package/dist/reducers/sum.js.map +1 -0
- package/dist/reducers/types.d.ts +58 -0
- package/dist/reducers/types.d.ts.map +1 -0
- package/dist/reducers/types.js +2 -0
- package/dist/reducers/types.js.map +1 -0
- package/dist/types.d.ts +28 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export const keep = {
|
|
2
|
+
outputKind: 'source',
|
|
3
|
+
reduce(defined) {
|
|
4
|
+
if (defined.length === 0)
|
|
5
|
+
return undefined;
|
|
6
|
+
const ref = defined[0];
|
|
7
|
+
for (let i = 1; i < defined.length; i++) {
|
|
8
|
+
if (defined[i] !== ref)
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
return ref;
|
|
12
|
+
},
|
|
13
|
+
bucketState() {
|
|
14
|
+
let ref;
|
|
15
|
+
let hasDefined = false;
|
|
16
|
+
let allSame = true;
|
|
17
|
+
return {
|
|
18
|
+
add(v) {
|
|
19
|
+
if (v === undefined)
|
|
20
|
+
return;
|
|
21
|
+
if (!hasDefined) {
|
|
22
|
+
ref = v;
|
|
23
|
+
hasDefined = true;
|
|
24
|
+
}
|
|
25
|
+
else if (v !== ref)
|
|
26
|
+
allSame = false;
|
|
27
|
+
},
|
|
28
|
+
snapshot() {
|
|
29
|
+
return hasDefined && allSame ? ref : undefined;
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
rollingState() {
|
|
34
|
+
const counts = new Map();
|
|
35
|
+
return {
|
|
36
|
+
add(_i, v) {
|
|
37
|
+
if (v === undefined)
|
|
38
|
+
return;
|
|
39
|
+
counts.set(v, (counts.get(v) ?? 0) + 1);
|
|
40
|
+
},
|
|
41
|
+
remove(_i, v) {
|
|
42
|
+
if (v === undefined)
|
|
43
|
+
return;
|
|
44
|
+
const c = counts.get(v) - 1;
|
|
45
|
+
if (c === 0)
|
|
46
|
+
counts.delete(v);
|
|
47
|
+
else
|
|
48
|
+
counts.set(v, c);
|
|
49
|
+
},
|
|
50
|
+
snapshot() {
|
|
51
|
+
return counts.size === 1 ? counts.keys().next().value : undefined;
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=keep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keep.js","sourceRoot":"","sources":["../../src/reducers/keep.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,IAAI,GAAe;IAC9B,UAAU,EAAE,QAAQ;IACpB,MAAM,CAAC,OAAO;QACZ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,OAAO,SAAS,CAAC;QAC3C,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,WAAW;QACT,IAAI,GAA4B,CAAC;QACjC,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,OAAO;YACL,GAAG,CAAC,CAAC;gBACH,IAAI,CAAC,KAAK,SAAS;oBAAE,OAAO;gBAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,GAAG,GAAG,CAAC,CAAC;oBACR,UAAU,GAAG,IAAI,CAAC;gBACpB,CAAC;qBAAM,IAAI,CAAC,KAAK,GAAG;oBAAE,OAAO,GAAG,KAAK,CAAC;YACxC,CAAC;YACD,QAAQ;gBACN,OAAO,UAAU,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;YACjD,CAAC;SACF,CAAC;IACJ,CAAC;IACD,YAAY;QACV,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;QAC9C,OAAO;YACL,GAAG,CAAC,EAAE,EAAE,CAAC;gBACP,IAAI,CAAC,KAAK,SAAS;oBAAE,OAAO;gBAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1C,CAAC;YACD,MAAM,CAAC,EAAE,EAAE,CAAC;gBACV,IAAI,CAAC,KAAK,SAAS;oBAAE,OAAO;gBAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC;gBAC7B,IAAI,CAAC,KAAK,CAAC;oBAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;;oBACzB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,CAAC;YACD,QAAQ;gBACN,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YACpE,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"last.d.ts","sourceRoot":"","sources":["../../src/reducers/last.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,eAAO,MAAM,IAAI,EAAE,UAqBlB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { rollingOrderedEntries } from './rolling.js';
|
|
2
|
+
export const last = {
|
|
3
|
+
outputKind: 'source',
|
|
4
|
+
reduce(defined) {
|
|
5
|
+
return defined[defined.length - 1];
|
|
6
|
+
},
|
|
7
|
+
bucketState() {
|
|
8
|
+
let val;
|
|
9
|
+
return {
|
|
10
|
+
add(v) {
|
|
11
|
+
if (v !== undefined)
|
|
12
|
+
val = v;
|
|
13
|
+
},
|
|
14
|
+
snapshot() {
|
|
15
|
+
return val;
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
},
|
|
19
|
+
rollingState() {
|
|
20
|
+
return rollingOrderedEntries((entries) => entries[entries.length - 1]?.value);
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=last.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"last.js","sourceRoot":"","sources":["../../src/reducers/last.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,CAAC,MAAM,IAAI,GAAe;IAC9B,UAAU,EAAE,QAAQ;IACpB,MAAM,CAAC,OAAO;QACZ,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,WAAW;QACT,IAAI,GAA4B,CAAC;QACjC,OAAO;YACL,GAAG,CAAC,CAAC;gBACH,IAAI,CAAC,KAAK,SAAS;oBAAE,GAAG,GAAG,CAAC,CAAC;YAC/B,CAAC;YACD,QAAQ;gBACN,OAAO,GAAG,CAAC;YACb,CAAC;SACF,CAAC;IACJ,CAAC;IACD,YAAY;QACV,OAAO,qBAAqB,CAC1B,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,CAChD,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"max.d.ts","sourceRoot":"","sources":["../../src/reducers/max.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,eAAO,MAAM,GAAG,EAAE,UAqBjB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { rollingMonotoneDeque } from './rolling.js';
|
|
2
|
+
export const max = {
|
|
3
|
+
outputKind: 'number',
|
|
4
|
+
reduce(_d, numeric) {
|
|
5
|
+
return numeric.length === 0
|
|
6
|
+
? undefined
|
|
7
|
+
: numeric.reduce((a, b) => (a >= b ? a : b));
|
|
8
|
+
},
|
|
9
|
+
bucketState() {
|
|
10
|
+
let hi;
|
|
11
|
+
return {
|
|
12
|
+
add(v) {
|
|
13
|
+
if (typeof v === 'number' && (hi === undefined || v > hi))
|
|
14
|
+
hi = v;
|
|
15
|
+
},
|
|
16
|
+
snapshot() {
|
|
17
|
+
return hi;
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
rollingState() {
|
|
22
|
+
return rollingMonotoneDeque((existing, incoming) => existing >= incoming);
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=max.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"max.js","sourceRoot":"","sources":["../../src/reducers/max.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,CAAC,MAAM,GAAG,GAAe;IAC7B,UAAU,EAAE,QAAQ;IACpB,MAAM,CAAC,EAAE,EAAE,OAAO;QAChB,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC;YACzB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,WAAW;QACT,IAAI,EAAsB,CAAC;QAC3B,OAAO;YACL,GAAG,CAAC,CAAC;gBACH,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC;oBAAE,EAAE,GAAG,CAAC,CAAC;YACpE,CAAC;YACD,QAAQ;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;SACF,CAAC;IACJ,CAAC;IACD,YAAY;QACV,OAAO,oBAAoB,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC;IAC5E,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"median.d.ts","sourceRoot":"","sources":["../../src/reducers/median.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,eAAO,MAAM,MAAM,EAAE,UAgCpB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { rollingSortedArray } from './rolling.js';
|
|
2
|
+
import { percentileOfSorted } from './percentile.js';
|
|
3
|
+
export const median = {
|
|
4
|
+
outputKind: 'number',
|
|
5
|
+
reduce(_d, numeric) {
|
|
6
|
+
if (numeric.length === 0)
|
|
7
|
+
return undefined;
|
|
8
|
+
const sorted = numeric.slice().sort((a, b) => a - b);
|
|
9
|
+
return percentileOfSorted(sorted, 50);
|
|
10
|
+
},
|
|
11
|
+
bucketState() {
|
|
12
|
+
const collected = [];
|
|
13
|
+
return {
|
|
14
|
+
add(v) {
|
|
15
|
+
if (typeof v === 'number')
|
|
16
|
+
collected.push(v);
|
|
17
|
+
},
|
|
18
|
+
snapshot() {
|
|
19
|
+
if (collected.length === 0)
|
|
20
|
+
return undefined;
|
|
21
|
+
const sorted = collected.slice().sort((a, b) => a - b);
|
|
22
|
+
return percentileOfSorted(sorted, 50);
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
rollingState() {
|
|
27
|
+
const arr = rollingSortedArray();
|
|
28
|
+
return {
|
|
29
|
+
add: arr.add,
|
|
30
|
+
remove: arr.remove,
|
|
31
|
+
snapshot() {
|
|
32
|
+
return arr.sorted.length === 0
|
|
33
|
+
? undefined
|
|
34
|
+
: percentileOfSorted(arr.sorted, 50);
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=median.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"median.js","sourceRoot":"","sources":["../../src/reducers/median.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,CAAC,MAAM,MAAM,GAAe;IAChC,UAAU,EAAE,QAAQ;IACpB,MAAM,CAAC,EAAE,EAAE,OAAO;QAChB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,OAAO,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,WAAW;QACT,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,OAAO;YACL,GAAG,CAAC,CAAC;gBACH,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;YACD,QAAQ;gBACN,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,SAAS,CAAC;gBAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvD,OAAO,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACxC,CAAC;SACF,CAAC;IACJ,CAAC;IACD,YAAY;QACV,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;QACjC,OAAO;YACL,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,QAAQ;gBACN,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;oBAC5B,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACzC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"min.d.ts","sourceRoot":"","sources":["../../src/reducers/min.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,eAAO,MAAM,GAAG,EAAE,UAqBjB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { rollingMonotoneDeque } from './rolling.js';
|
|
2
|
+
export const min = {
|
|
3
|
+
outputKind: 'number',
|
|
4
|
+
reduce(_d, numeric) {
|
|
5
|
+
return numeric.length === 0
|
|
6
|
+
? undefined
|
|
7
|
+
: numeric.reduce((a, b) => (a <= b ? a : b));
|
|
8
|
+
},
|
|
9
|
+
bucketState() {
|
|
10
|
+
let lo;
|
|
11
|
+
return {
|
|
12
|
+
add(v) {
|
|
13
|
+
if (typeof v === 'number' && (lo === undefined || v < lo))
|
|
14
|
+
lo = v;
|
|
15
|
+
},
|
|
16
|
+
snapshot() {
|
|
17
|
+
return lo;
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
rollingState() {
|
|
22
|
+
return rollingMonotoneDeque((existing, incoming) => existing <= incoming);
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"min.js","sourceRoot":"","sources":["../../src/reducers/min.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,CAAC,MAAM,GAAG,GAAe;IAC7B,UAAU,EAAE,QAAQ;IACpB,MAAM,CAAC,EAAE,EAAE,OAAO;QAChB,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC;YACzB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,WAAW;QACT,IAAI,EAAsB,CAAC;QAC3B,OAAO;YACL,GAAG,CAAC,CAAC;gBACH,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC;oBAAE,EAAE,GAAG,CAAC,CAAC;YACpE,CAAC;YACD,QAAQ;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;SACF,CAAC;IACJ,CAAC;IACD,YAAY;QACV,OAAO,oBAAoB,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC;IAC5E,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ReducerDef } from './types.js';
|
|
2
|
+
export declare function percentileOfSorted(sorted: number[], q: number): number;
|
|
3
|
+
export declare function parsePercentile(op: string): number | undefined;
|
|
4
|
+
export declare function percentileReducer(q: number): ReducerDef;
|
|
5
|
+
//# sourceMappingURL=percentile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"percentile.d.ts","sourceRoot":"","sources":["../../src/reducers/percentile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAMtE;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM9D;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAkCvD"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { rollingSortedArray } from './rolling.js';
|
|
2
|
+
export function percentileOfSorted(sorted, q) {
|
|
3
|
+
const rank = (q / 100) * (sorted.length - 1);
|
|
4
|
+
const lo = Math.floor(rank);
|
|
5
|
+
const hi = Math.ceil(rank);
|
|
6
|
+
if (lo === hi)
|
|
7
|
+
return sorted[lo];
|
|
8
|
+
return sorted[lo] + (sorted[hi] - sorted[lo]) * (rank - lo);
|
|
9
|
+
}
|
|
10
|
+
export function parsePercentile(op) {
|
|
11
|
+
if (op.length > 1 && op.charCodeAt(0) === 112) {
|
|
12
|
+
const q = Number(op.slice(1));
|
|
13
|
+
if (q >= 0 && q <= 100)
|
|
14
|
+
return q;
|
|
15
|
+
}
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
export function percentileReducer(q) {
|
|
19
|
+
return {
|
|
20
|
+
outputKind: 'number',
|
|
21
|
+
reduce(_d, numeric) {
|
|
22
|
+
if (numeric.length === 0)
|
|
23
|
+
return undefined;
|
|
24
|
+
const sorted = numeric.slice().sort((a, b) => a - b);
|
|
25
|
+
return percentileOfSorted(sorted, q);
|
|
26
|
+
},
|
|
27
|
+
bucketState() {
|
|
28
|
+
const collected = [];
|
|
29
|
+
return {
|
|
30
|
+
add(v) {
|
|
31
|
+
if (typeof v === 'number')
|
|
32
|
+
collected.push(v);
|
|
33
|
+
},
|
|
34
|
+
snapshot() {
|
|
35
|
+
if (collected.length === 0)
|
|
36
|
+
return undefined;
|
|
37
|
+
const sorted = collected.slice().sort((a, b) => a - b);
|
|
38
|
+
return percentileOfSorted(sorted, q);
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
},
|
|
42
|
+
rollingState() {
|
|
43
|
+
const arr = rollingSortedArray();
|
|
44
|
+
return {
|
|
45
|
+
add: arr.add,
|
|
46
|
+
remove: arr.remove,
|
|
47
|
+
snapshot() {
|
|
48
|
+
return arr.sorted.length === 0
|
|
49
|
+
? undefined
|
|
50
|
+
: percentileOfSorted(arr.sorted, q);
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=percentile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"percentile.js","sourceRoot":"","sources":["../../src/reducers/percentile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,kBAAkB,CAAC,MAAgB,EAAE,CAAS;IAC5D,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,MAAM,CAAC,EAAE,CAAE,CAAC;IAClC,OAAO,MAAM,CAAC,EAAE,CAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAE,GAAG,MAAM,CAAC,EAAE,CAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAU;IACxC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG;YAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,OAAO;QACL,UAAU,EAAE,QAAQ;QACpB,MAAM,CAAC,EAAE,EAAE,OAAO;YAChB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC;YAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACrD,OAAO,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,WAAW;YACT,MAAM,SAAS,GAAa,EAAE,CAAC;YAC/B,OAAO;gBACL,GAAG,CAAC,CAAC;oBACH,IAAI,OAAO,CAAC,KAAK,QAAQ;wBAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC/C,CAAC;gBACD,QAAQ;oBACN,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;wBAAE,OAAO,SAAS,CAAC;oBAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACvD,OAAO,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACvC,CAAC;aACF,CAAC;QACJ,CAAC;QACD,YAAY;YACV,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;YACjC,OAAO;gBACL,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,QAAQ;oBACN,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;wBAC5B,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACxC,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ScalarValue } from '../types.js';
|
|
2
|
+
import type { RollingReducerState } from './types.js';
|
|
3
|
+
type RollingWindowEntry<T> = {
|
|
4
|
+
index: number;
|
|
5
|
+
value: T;
|
|
6
|
+
};
|
|
7
|
+
export declare function rollingMonotoneDeque(compare: (a: number, b: number) => boolean): RollingReducerState;
|
|
8
|
+
export declare function rollingOrderedEntries(pick: (entries: RollingWindowEntry<ScalarValue>[], head: number) => ScalarValue | undefined): RollingReducerState;
|
|
9
|
+
export declare function rollingSortedArray(): {
|
|
10
|
+
sorted: number[];
|
|
11
|
+
add(index: number, value: ScalarValue | undefined): void;
|
|
12
|
+
remove(index: number, value: ScalarValue | undefined): void;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=rolling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rolling.d.ts","sourceRoot":"","sources":["../../src/reducers/rolling.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,KAAK,kBAAkB,CAAC,CAAC,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC;AAUzD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,GACzC,mBAAmB,CAuBrB;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,CACJ,OAAO,EAAE,kBAAkB,CAAC,WAAW,CAAC,EAAE,EAC1C,IAAI,EAAE,MAAM,KACT,WAAW,GAAG,SAAS,GAC3B,mBAAmB,CAkBrB;AAED,wBAAgB,kBAAkB,IAAI;IACpC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC;IACzD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC;CAC7D,CAwBA"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
function compactEntries(entries, head) {
|
|
2
|
+
if (head > 0 && head * 2 >= entries.length)
|
|
3
|
+
return [entries.slice(head), 0];
|
|
4
|
+
return [entries, head];
|
|
5
|
+
}
|
|
6
|
+
export function rollingMonotoneDeque(compare) {
|
|
7
|
+
let entries = [];
|
|
8
|
+
let head = 0;
|
|
9
|
+
return {
|
|
10
|
+
add(index, value) {
|
|
11
|
+
if (typeof value !== 'number')
|
|
12
|
+
return;
|
|
13
|
+
while (entries.length > head) {
|
|
14
|
+
if (compare(entries[entries.length - 1].value, value))
|
|
15
|
+
break;
|
|
16
|
+
entries.pop();
|
|
17
|
+
}
|
|
18
|
+
entries.push({ index, value });
|
|
19
|
+
},
|
|
20
|
+
remove(index, value) {
|
|
21
|
+
if (typeof value !== 'number')
|
|
22
|
+
return;
|
|
23
|
+
if (entries[head]?.index === index) {
|
|
24
|
+
head += 1;
|
|
25
|
+
[entries, head] = compactEntries(entries, head);
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
snapshot() {
|
|
29
|
+
return entries[head]?.value;
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export function rollingOrderedEntries(pick) {
|
|
34
|
+
let entries = [];
|
|
35
|
+
let head = 0;
|
|
36
|
+
return {
|
|
37
|
+
add(index, value) {
|
|
38
|
+
if (value !== undefined)
|
|
39
|
+
entries.push({ index, value });
|
|
40
|
+
},
|
|
41
|
+
remove(index, value) {
|
|
42
|
+
if (value === undefined)
|
|
43
|
+
return;
|
|
44
|
+
if (entries[head]?.index === index) {
|
|
45
|
+
head += 1;
|
|
46
|
+
[entries, head] = compactEntries(entries, head);
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
snapshot() {
|
|
50
|
+
return pick(entries, head);
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export function rollingSortedArray() {
|
|
55
|
+
const sorted = [];
|
|
56
|
+
function bisect(v) {
|
|
57
|
+
let lo = 0;
|
|
58
|
+
let hi = sorted.length;
|
|
59
|
+
while (lo < hi) {
|
|
60
|
+
const mid = (lo + hi) >>> 1;
|
|
61
|
+
if (sorted[mid] < v)
|
|
62
|
+
lo = mid + 1;
|
|
63
|
+
else
|
|
64
|
+
hi = mid;
|
|
65
|
+
}
|
|
66
|
+
return lo;
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
sorted,
|
|
70
|
+
add(_index, value) {
|
|
71
|
+
if (typeof value !== 'number')
|
|
72
|
+
return;
|
|
73
|
+
sorted.splice(bisect(value), 0, value);
|
|
74
|
+
},
|
|
75
|
+
remove(_index, value) {
|
|
76
|
+
if (typeof value !== 'number')
|
|
77
|
+
return;
|
|
78
|
+
const pos = bisect(value);
|
|
79
|
+
if (pos < sorted.length && sorted[pos] === value)
|
|
80
|
+
sorted.splice(pos, 1);
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=rolling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rolling.js","sourceRoot":"","sources":["../../src/reducers/rolling.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdev.d.ts","sourceRoot":"","sources":["../../src/reducers/stdev.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,eAAO,MAAM,KAAK,EAAE,UAsDnB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export const stdev = {
|
|
2
|
+
outputKind: 'number',
|
|
3
|
+
reduce(_d, numeric) {
|
|
4
|
+
if (numeric.length === 0)
|
|
5
|
+
return undefined;
|
|
6
|
+
const mean = numeric.reduce((s, v) => s + v, 0) / numeric.length;
|
|
7
|
+
const variance = numeric.reduce((s, v) => s + (v - mean) ** 2, 0) / numeric.length;
|
|
8
|
+
return Math.sqrt(variance);
|
|
9
|
+
},
|
|
10
|
+
bucketState() {
|
|
11
|
+
let s = 0;
|
|
12
|
+
let sq = 0;
|
|
13
|
+
let n = 0;
|
|
14
|
+
return {
|
|
15
|
+
add(v) {
|
|
16
|
+
if (typeof v === 'number') {
|
|
17
|
+
s += v;
|
|
18
|
+
sq += v * v;
|
|
19
|
+
n++;
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
snapshot() {
|
|
23
|
+
if (n === 0)
|
|
24
|
+
return undefined;
|
|
25
|
+
const mean = s / n;
|
|
26
|
+
return Math.sqrt(sq / n - mean * mean);
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
rollingState() {
|
|
31
|
+
let s = 0;
|
|
32
|
+
let sq = 0;
|
|
33
|
+
let n = 0;
|
|
34
|
+
return {
|
|
35
|
+
add(_i, v) {
|
|
36
|
+
if (typeof v === 'number') {
|
|
37
|
+
s += v;
|
|
38
|
+
sq += v * v;
|
|
39
|
+
n++;
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
remove(_i, v) {
|
|
43
|
+
if (typeof v === 'number') {
|
|
44
|
+
s -= v;
|
|
45
|
+
sq -= v * v;
|
|
46
|
+
n--;
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
snapshot() {
|
|
50
|
+
if (n === 0)
|
|
51
|
+
return undefined;
|
|
52
|
+
const mean = s / n;
|
|
53
|
+
return Math.sqrt(Math.max(0, sq / n - mean * mean));
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=stdev.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdev.js","sourceRoot":"","sources":["../../src/reducers/stdev.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,KAAK,GAAe;IAC/B,UAAU,EAAE,QAAQ;IACpB,MAAM,CAAC,EAAE,EAAE,OAAO;QAChB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QACjE,MAAM,QAAQ,GACZ,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QACpE,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IACD,WAAW;QACT,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO;YACL,GAAG,CAAC,CAAC;gBACH,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAC1B,CAAC,IAAI,CAAC,CAAC;oBACP,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;oBACZ,CAAC,EAAE,CAAC;gBACN,CAAC;YACH,CAAC;YACD,QAAQ;gBACN,IAAI,CAAC,KAAK,CAAC;oBAAE,OAAO,SAAS,CAAC;gBAC9B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBACnB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;YACzC,CAAC;SACF,CAAC;IACJ,CAAC;IACD,YAAY;QACV,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO;YACL,GAAG,CAAC,EAAE,EAAE,CAAC;gBACP,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAC1B,CAAC,IAAI,CAAC,CAAC;oBACP,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;oBACZ,CAAC,EAAE,CAAC;gBACN,CAAC;YACH,CAAC;YACD,MAAM,CAAC,EAAE,EAAE,CAAC;gBACV,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAC1B,CAAC,IAAI,CAAC,CAAC;oBACP,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;oBACZ,CAAC,EAAE,CAAC;gBACN,CAAC;YACH,CAAC;YACD,QAAQ;gBACN,IAAI,CAAC,KAAK,CAAC;oBAAE,OAAO,SAAS,CAAC;gBAC9B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBACnB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;YACtD,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sum.d.ts","sourceRoot":"","sources":["../../src/reducers/sum.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,eAAO,MAAM,GAAG,EAAE,UA8BjB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export const sum = {
|
|
2
|
+
outputKind: 'number',
|
|
3
|
+
reduce(_d, numeric) {
|
|
4
|
+
return numeric.reduce((s, v) => s + v, 0);
|
|
5
|
+
},
|
|
6
|
+
bucketState() {
|
|
7
|
+
let s = 0;
|
|
8
|
+
return {
|
|
9
|
+
add(v) {
|
|
10
|
+
if (typeof v === 'number')
|
|
11
|
+
s += v;
|
|
12
|
+
},
|
|
13
|
+
snapshot() {
|
|
14
|
+
return s;
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
},
|
|
18
|
+
rollingState() {
|
|
19
|
+
let s = 0;
|
|
20
|
+
return {
|
|
21
|
+
add(_i, v) {
|
|
22
|
+
if (typeof v === 'number')
|
|
23
|
+
s += v;
|
|
24
|
+
},
|
|
25
|
+
remove(_i, v) {
|
|
26
|
+
if (typeof v === 'number')
|
|
27
|
+
s -= v;
|
|
28
|
+
},
|
|
29
|
+
snapshot() {
|
|
30
|
+
return s;
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=sum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sum.js","sourceRoot":"","sources":["../../src/reducers/sum.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,GAAG,GAAe;IAC7B,UAAU,EAAE,QAAQ;IACpB,MAAM,CAAC,EAAE,EAAE,OAAO;QAChB,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,WAAW;QACT,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO;YACL,GAAG,CAAC,CAAC;gBACH,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;YACD,QAAQ;gBACN,OAAO,CAAC,CAAC;YACX,CAAC;SACF,CAAC;IACJ,CAAC;IACD,YAAY;QACV,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO;YACL,GAAG,CAAC,EAAE,EAAE,CAAC;gBACP,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;YACD,MAAM,CAAC,EAAE,EAAE,CAAC;gBACV,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;YACD,QAAQ;gBACN,OAAO,CAAC,CAAC;YACX,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { ScalarValue } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Incremental state for a single column within one aggregation bucket.
|
|
4
|
+
* Created fresh per bucket. Values are fed in via `add()` as events are
|
|
5
|
+
* assigned to the bucket; `snapshot()` reads the current result without
|
|
6
|
+
* consuming the state.
|
|
7
|
+
*/
|
|
8
|
+
export type AggregateBucketState = {
|
|
9
|
+
add(value: ScalarValue | undefined): void;
|
|
10
|
+
snapshot(): ScalarValue | undefined;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Incremental state for a single column within a sliding rolling window.
|
|
14
|
+
* Unlike `AggregateBucketState`, this must also support `remove()` so
|
|
15
|
+
* values can leave the window efficiently. `index` is a monotonically
|
|
16
|
+
* increasing event counter used to identify which value to evict.
|
|
17
|
+
*/
|
|
18
|
+
export type RollingReducerState = {
|
|
19
|
+
add(index: number, value: ScalarValue | undefined): void;
|
|
20
|
+
remove(index: number, value: ScalarValue | undefined): void;
|
|
21
|
+
snapshot(): ScalarValue | undefined;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Complete definition of a named reducer. Every built-in reducer (sum,
|
|
25
|
+
* avg, median, etc.) implements this interface. Each definition provides
|
|
26
|
+
* three capabilities:
|
|
27
|
+
*
|
|
28
|
+
* - `reduce` — batch reduction over a materialized array of values.
|
|
29
|
+
* Used by `TimeSeries.reduce()`.
|
|
30
|
+
*
|
|
31
|
+
* - `bucketState` — factory for incremental bucket state. Used by
|
|
32
|
+
* `TimeSeries.aggregate()` where events stream into buckets one at a
|
|
33
|
+
* time. Only needs `add` + `snapshot` (values never leave a bucket).
|
|
34
|
+
*
|
|
35
|
+
* - `rollingState` — factory for incremental sliding-window state. Used
|
|
36
|
+
* by `TimeSeries.rolling()` where events both enter and leave the
|
|
37
|
+
* window. Must support `add`, `remove`, and `snapshot`.
|
|
38
|
+
*
|
|
39
|
+
* `outputKind` tells the aggregate schema builder whether the reducer
|
|
40
|
+
* always produces a number (`'number'`) or preserves the source column
|
|
41
|
+
* type (`'source'`). Numeric reducers like sum and avg use `'number'`;
|
|
42
|
+
* type-agnostic reducers like first, last, and keep use `'source'`.
|
|
43
|
+
*/
|
|
44
|
+
export type ReducerDef = {
|
|
45
|
+
outputKind: 'number' | 'source';
|
|
46
|
+
/**
|
|
47
|
+
* Batch reduce over a complete value array. `defined` contains all
|
|
48
|
+
* non-undefined values (any type); `numeric` contains only the number
|
|
49
|
+
* values. Both are pre-filtered from the raw event data — reducers do
|
|
50
|
+
* not need to filter themselves.
|
|
51
|
+
*/
|
|
52
|
+
reduce(defined: ReadonlyArray<ScalarValue>, numeric: ReadonlyArray<number>): ScalarValue | undefined;
|
|
53
|
+
/** Return a fresh incremental state for one aggregation bucket. */
|
|
54
|
+
bucketState(): AggregateBucketState;
|
|
55
|
+
/** Return a fresh incremental state for one rolling window column. */
|
|
56
|
+
rollingState(): RollingReducerState;
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/reducers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1C,QAAQ,IAAI,WAAW,GAAG,SAAS,CAAC;CACrC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC;IACzD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC;IAC5D,QAAQ,IAAI,WAAW,GAAG,SAAS,CAAC;CACrC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAEhC;;;;;OAKG;IACH,MAAM,CACJ,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,EACnC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,GAC7B,WAAW,GAAG,SAAS,CAAC;IAE3B,mEAAmE;IACnE,WAAW,IAAI,oBAAoB,CAAC;IAEpC,sEAAsE;IACtE,YAAY,IAAI,mBAAmB,CAAC;CACrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/reducers/types.ts"],"names":[],"mappings":""}
|