@hpcc-js/dataflow 9.1.0 → 9.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/LICENSE +43 -43
  2. package/README.md +530 -530
  3. package/dist/index.js.map +1 -1
  4. package/dist/index.min.js +1 -1
  5. package/dist/index.min.js.map +1 -1
  6. package/lib-es6/__package__.js +2 -2
  7. package/package.json +3 -3
  8. package/src/__package__.ts +3 -3
  9. package/src/__tests__/chain.ts +85 -85
  10. package/src/__tests__/concat.ts +18 -18
  11. package/src/__tests__/count.ts +25 -25
  12. package/src/__tests__/data.ts +64 -64
  13. package/src/__tests__/deviation.ts +14 -14
  14. package/src/__tests__/distribution.ts +21 -21
  15. package/src/__tests__/each.ts +13 -13
  16. package/src/__tests__/entries.ts +14 -14
  17. package/src/__tests__/extent.ts +25 -25
  18. package/src/__tests__/filter.ts +16 -16
  19. package/src/__tests__/first.ts +15 -15
  20. package/src/__tests__/generate.ts +9 -9
  21. package/src/__tests__/group.ts +19 -19
  22. package/src/__tests__/histogram.ts +47 -47
  23. package/src/__tests__/index.ts +27 -27
  24. package/src/__tests__/join.ts +20 -20
  25. package/src/__tests__/map.ts +16 -16
  26. package/src/__tests__/max.ts +42 -42
  27. package/src/__tests__/mean.ts +11 -11
  28. package/src/__tests__/median.ts +14 -14
  29. package/src/__tests__/min.ts +42 -42
  30. package/src/__tests__/normalize.ts +14 -14
  31. package/src/__tests__/quartile.ts +14 -14
  32. package/src/__tests__/readme.ts +113 -113
  33. package/src/__tests__/reduce.ts +17 -17
  34. package/src/__tests__/skip.ts +15 -15
  35. package/src/__tests__/sort.ts +21 -21
  36. package/src/__tests__/variance.ts +14 -14
  37. package/src/activities/activity.ts +8 -8
  38. package/src/activities/concat.ts +14 -14
  39. package/src/activities/each.ts +19 -19
  40. package/src/activities/entries.ts +17 -17
  41. package/src/activities/filter.ts +20 -20
  42. package/src/activities/first.ts +20 -20
  43. package/src/activities/group.ts +27 -27
  44. package/src/activities/histogram.ts +78 -78
  45. package/src/activities/join.ts +19 -19
  46. package/src/activities/map.ts +18 -18
  47. package/src/activities/normalize.ts +21 -21
  48. package/src/activities/skip.ts +18 -18
  49. package/src/activities/sort.ts +16 -16
  50. package/src/index.ts +27 -27
  51. package/src/observers/count.ts +15 -15
  52. package/src/observers/deviation.ts +24 -24
  53. package/src/observers/distribution.ts +51 -51
  54. package/src/observers/extent.ts +24 -24
  55. package/src/observers/max.ts +24 -24
  56. package/src/observers/mean.ts +26 -26
  57. package/src/observers/median.ts +30 -30
  58. package/src/observers/min.ts +24 -24
  59. package/src/observers/observer.ts +52 -52
  60. package/src/observers/quartile.ts +43 -43
  61. package/src/observers/reduce.ts +22 -22
  62. package/src/observers/variance.ts +29 -29
  63. package/src/utils/generate.ts +6 -6
  64. package/src/utils/pipe.ts +74 -74
  65. package/types/__package__.d.ts +2 -2
  66. package/types/observers/observer.d.ts.map +1 -1
  67. package/types-3.4/__package__.d.ts +2 -2
@@ -1,24 +1,24 @@
1
- import { Observer, Accessor, AccessorT } from "./observer";
2
-
3
- function _max(): Observer<number, number> {
4
- let max: number;
5
-
6
- return {
7
- observe: (value: number, idx: number) => {
8
- if (idx === 0) {
9
- max = value;
10
- } else if (max < value) {
11
- max = value;
12
- }
13
- },
14
- peek: () => max
15
- };
16
- }
17
-
18
- export type MaxAccessor<T> = AccessorT<T, number>;
19
-
20
- export function max(): Observer<number, number>;
21
- export function max<T = any>(callbackFn: MaxAccessor<T>): Observer<T, number>;
22
- export function max<T = any>(callbackFn?: MaxAccessor<T>): Observer<number, number> | Observer<T, number> {
23
- return callbackFn ? Accessor(_max, callbackFn) : _max();
24
- }
1
+ import { Observer, Accessor, AccessorT } from "./observer";
2
+
3
+ function _max(): Observer<number, number> {
4
+ let max: number;
5
+
6
+ return {
7
+ observe: (value: number, idx: number) => {
8
+ if (idx === 0) {
9
+ max = value;
10
+ } else if (max < value) {
11
+ max = value;
12
+ }
13
+ },
14
+ peek: () => max
15
+ };
16
+ }
17
+
18
+ export type MaxAccessor<T> = AccessorT<T, number>;
19
+
20
+ export function max(): Observer<number, number>;
21
+ export function max<T = any>(callbackFn: MaxAccessor<T>): Observer<T, number>;
22
+ export function max<T = any>(callbackFn?: MaxAccessor<T>): Observer<number, number> | Observer<T, number> {
23
+ return callbackFn ? Accessor(_max, callbackFn) : _max();
24
+ }
@@ -1,26 +1,26 @@
1
- import { Observer, Accessor } from "./observer";
2
-
3
- function _mean(): Observer<number, number> {
4
- let total: number;
5
- let count: number;
6
-
7
- return {
8
- observe: (value: number, idx: number) => {
9
- if (idx === 0) {
10
- total = value;
11
- } else {
12
- total += value;
13
- }
14
- count = idx;
15
- },
16
- peek: () => total / (count + 1)
17
- };
18
- }
19
-
20
- export type MeanAccessor<T> = (row: T, currentIndex: number) => number;
21
-
22
- export function mean(): Observer<number, number>;
23
- export function mean<T = any>(callbackFn: MeanAccessor<T>): Observer<T, number>;
24
- export function mean<T = any>(callbackFn?: MeanAccessor<T>): Observer<number, number> | Observer<T, number> {
25
- return callbackFn ? Accessor(_mean, callbackFn) : _mean();
26
- }
1
+ import { Observer, Accessor } from "./observer";
2
+
3
+ function _mean(): Observer<number, number> {
4
+ let total: number;
5
+ let count: number;
6
+
7
+ return {
8
+ observe: (value: number, idx: number) => {
9
+ if (idx === 0) {
10
+ total = value;
11
+ } else {
12
+ total += value;
13
+ }
14
+ count = idx;
15
+ },
16
+ peek: () => total / (count + 1)
17
+ };
18
+ }
19
+
20
+ export type MeanAccessor<T> = (row: T, currentIndex: number) => number;
21
+
22
+ export function mean(): Observer<number, number>;
23
+ export function mean<T = any>(callbackFn: MeanAccessor<T>): Observer<T, number>;
24
+ export function mean<T = any>(callbackFn?: MeanAccessor<T>): Observer<number, number> | Observer<T, number> {
25
+ return callbackFn ? Accessor(_mean, callbackFn) : _mean();
26
+ }
@@ -1,31 +1,31 @@
1
- import { AccessorT, Observer, Accessor } from "./observer";
2
-
3
- function _median(): Observer<number, number> {
4
- let values: number[];
5
-
6
- return {
7
- observe: (value: number, idx: number) => {
8
- if (idx === 0) {
9
- values = [];
10
- }
11
- values.push(value);
12
- },
13
- peek: () => {
14
- const sorted = values.sort((l, r) => l - r);
15
- const mid = sorted.length / 2;
16
- if (sorted.length % 2 === 0) {
17
- return (sorted[mid - 1] + sorted[mid]) / 2;
18
- } else {
19
- return sorted[Math.floor(mid)];
20
- }
21
- }
22
- };
23
- }
24
-
25
- export type MedianAccessor<T> = AccessorT<T, number>;
26
-
27
- export function median(): Observer<number, number>;
28
- export function median<T = any>(callbackFn: MedianAccessor<T>): Observer<T, number>;
29
- export function median<T = any>(callbackFn?: MedianAccessor<T>): Observer<number, number> | Observer<T, number> {
30
- return callbackFn ? Accessor(_median, callbackFn) : _median();
1
+ import { AccessorT, Observer, Accessor } from "./observer";
2
+
3
+ function _median(): Observer<number, number> {
4
+ let values: number[];
5
+
6
+ return {
7
+ observe: (value: number, idx: number) => {
8
+ if (idx === 0) {
9
+ values = [];
10
+ }
11
+ values.push(value);
12
+ },
13
+ peek: () => {
14
+ const sorted = values.sort((l, r) => l - r);
15
+ const mid = sorted.length / 2;
16
+ if (sorted.length % 2 === 0) {
17
+ return (sorted[mid - 1] + sorted[mid]) / 2;
18
+ } else {
19
+ return sorted[Math.floor(mid)];
20
+ }
21
+ }
22
+ };
23
+ }
24
+
25
+ export type MedianAccessor<T> = AccessorT<T, number>;
26
+
27
+ export function median(): Observer<number, number>;
28
+ export function median<T = any>(callbackFn: MedianAccessor<T>): Observer<T, number>;
29
+ export function median<T = any>(callbackFn?: MedianAccessor<T>): Observer<number, number> | Observer<T, number> {
30
+ return callbackFn ? Accessor(_median, callbackFn) : _median();
31
31
  }
@@ -1,24 +1,24 @@
1
- import { Observer, Accessor, AccessorT } from "./observer";
2
-
3
- function _min(): Observer<number, number> {
4
- let min: number;
5
-
6
- return {
7
- observe: (value: number, idx: number) => {
8
- if (idx === 0) {
9
- min = value;
10
- } else if (min > value) {
11
- min = value;
12
- }
13
- },
14
- peek: () => min
15
- };
16
- }
17
-
18
- export type MinAccessor<T> = AccessorT<T, number>;
19
-
20
- export function min(): Observer<number, number>;
21
- export function min<T = any>(callbackFn: MinAccessor<T>): Observer<T, number>;
22
- export function min<T = any>(callbackFn?: MinAccessor<T>): Observer<number, number> | Observer<T, number> {
23
- return callbackFn ? Accessor(_min, callbackFn) : _min();
24
- }
1
+ import { Observer, Accessor, AccessorT } from "./observer";
2
+
3
+ function _min(): Observer<number, number> {
4
+ let min: number;
5
+
6
+ return {
7
+ observe: (value: number, idx: number) => {
8
+ if (idx === 0) {
9
+ min = value;
10
+ } else if (min > value) {
11
+ min = value;
12
+ }
13
+ },
14
+ peek: () => min
15
+ };
16
+ }
17
+
18
+ export type MinAccessor<T> = AccessorT<T, number>;
19
+
20
+ export function min(): Observer<number, number>;
21
+ export function min<T = any>(callbackFn: MinAccessor<T>): Observer<T, number>;
22
+ export function min<T = any>(callbackFn?: MinAccessor<T>): Observer<number, number> | Observer<T, number> {
23
+ return callbackFn ? Accessor(_min, callbackFn) : _min();
24
+ }
@@ -1,52 +1,52 @@
1
- import { Source } from "../activities/activity";
2
- import { each } from "../activities/each";
3
-
4
- export type AccessorT<T, U> = (row: T, currentIndex: number) => U;
5
-
6
- export interface ObserverFactory<T, U> {
7
- (): Observer<T, U>;
8
- }
9
-
10
- export interface Observer<T, U> {
11
- observe(r: T, idx: number): void;
12
- peek(): U;
13
- }
14
-
15
- export function Accessor<T = any, U = any, V = any>(fof: ObserverFactory<V, U>, accesor: AccessorT<T, V>): Observer<T, U> {
16
- const s = fof();
17
-
18
- return {
19
- observe: (_: T, i: number) => {
20
- s.observe(accesor(_, i), i);
21
- },
22
- peek: s.peek
23
- };
24
- }
25
-
26
- // This is an pass through activity so a FlowObserver can be inserted into a pipeline ---
27
- export function sensor<T, U = any>(s: Observer<T, U>) {
28
- return each((r, i) => s.observe(r, i));
29
- }
30
-
31
- // This converts a FlowObserver to an Activity ---
32
- export function activity<T, U>(s: Observer<T, U>) {
33
- return function* (source: Source<T>) {
34
- let i = -1;
35
- for (const row of source) {
36
- s.observe(row, ++i);
37
- }
38
- yield s.peek();
39
- };
40
- }
41
-
42
- // This converts a FlowObserver to an ScalarActivity ---
43
- export function scalar<T = any, U = any>(s: Observer<T, U>) {
44
- return function (source: Source<T>) {
45
- let i = -1;
46
- for (const row of source) {
47
- s.observe(row, ++i);
48
- }
49
- return s.peek();
50
- };
51
- }
52
-
1
+ import { Source } from "../activities/activity";
2
+ import { each } from "../activities/each";
3
+
4
+ export type AccessorT<T, U> = (row: T, currentIndex: number) => U;
5
+
6
+ export interface ObserverFactory<T, U> {
7
+ (): Observer<T, U>;
8
+ }
9
+
10
+ export interface Observer<T, U> {
11
+ observe(r: T, idx: number): void;
12
+ peek(): U;
13
+ }
14
+
15
+ export function Accessor<T = any, U = any, V = any>(fof: ObserverFactory<V, U>, accesor: AccessorT<T, V>): Observer<T, U> {
16
+ const s = fof();
17
+
18
+ return {
19
+ observe: (_: T, i: number) => {
20
+ s.observe(accesor(_, i), i);
21
+ },
22
+ peek: s.peek
23
+ };
24
+ }
25
+
26
+ // This is an pass through activity so a FlowObserver can be inserted into a pipeline ---
27
+ export function sensor<T, U = any>(s: Observer<T, U>) {
28
+ return each((r, i) => s.observe(r, i));
29
+ }
30
+
31
+ // This converts a FlowObserver to an Activity ---
32
+ export function activity<T, U>(s: Observer<T, U>) {
33
+ return function* (source: Source<T>) {
34
+ let i = -1;
35
+ for (const row of source) {
36
+ s.observe(row, ++i);
37
+ }
38
+ yield s.peek();
39
+ };
40
+ }
41
+
42
+ // This converts a FlowObserver to an ScalarActivity ---
43
+ export function scalar<T = any, U = any>(s: Observer<T, U>) {
44
+ return function (source: Source<T>) {
45
+ let i = -1;
46
+ for (const row of source) {
47
+ s.observe(row, ++i);
48
+ }
49
+ return s.peek();
50
+ };
51
+ }
52
+
@@ -1,44 +1,44 @@
1
- import { median } from "./median";
2
- import { AccessorT, Observer, Accessor, scalar } from "./observer";
3
-
4
- export type QuartileAccessor<T> = AccessorT<T, number>;
5
-
6
- export type QuartileT = [number, number, number, number, number] | undefined;
7
-
8
- function _quartile(): Observer<number, QuartileT> {
9
- let values: number[];
10
-
11
- return {
12
- observe: (value: number, idx: number) => {
13
- if (idx === 0) {
14
- values = [];
15
- }
16
- values.push(value);
17
- },
18
- peek: () => {
19
- const sorted = values.sort((l, r) => l - r);
20
- const mid = sorted.length / 2;
21
- let medianVal: number;
22
- let lower: number[];
23
- let upper: number[];
24
- if (sorted.length < 2) {
25
- return undefined;
26
- } else if (sorted.length % 2 === 0) {
27
- medianVal = (sorted[mid - 1] + sorted[mid]) / 2;
28
- lower = sorted.slice(0, mid);
29
- upper = sorted.slice(mid);
30
- } else {
31
- medianVal = sorted[Math.floor(mid)];
32
- lower = sorted.slice(0, Math.floor(mid));
33
- upper = sorted.slice(Math.ceil(mid));
34
- }
35
- return [sorted[0], scalar(median())(lower)!, medianVal, scalar(median())(upper)!, sorted[sorted.length - 1]];
36
- }
37
- };
38
- }
39
-
40
- export function quartile(): Observer<number, QuartileT>;
41
- export function quartile<T = any>(callbackFn: QuartileAccessor<T>): Observer<T, QuartileT>;
42
- export function quartile<T = any>(callbackFn?: QuartileAccessor<T>): Observer<number, QuartileT> | Observer<T, QuartileT> {
43
- return callbackFn ? Accessor(_quartile, callbackFn) : _quartile();
1
+ import { median } from "./median";
2
+ import { AccessorT, Observer, Accessor, scalar } from "./observer";
3
+
4
+ export type QuartileAccessor<T> = AccessorT<T, number>;
5
+
6
+ export type QuartileT = [number, number, number, number, number] | undefined;
7
+
8
+ function _quartile(): Observer<number, QuartileT> {
9
+ let values: number[];
10
+
11
+ return {
12
+ observe: (value: number, idx: number) => {
13
+ if (idx === 0) {
14
+ values = [];
15
+ }
16
+ values.push(value);
17
+ },
18
+ peek: () => {
19
+ const sorted = values.sort((l, r) => l - r);
20
+ const mid = sorted.length / 2;
21
+ let medianVal: number;
22
+ let lower: number[];
23
+ let upper: number[];
24
+ if (sorted.length < 2) {
25
+ return undefined;
26
+ } else if (sorted.length % 2 === 0) {
27
+ medianVal = (sorted[mid - 1] + sorted[mid]) / 2;
28
+ lower = sorted.slice(0, mid);
29
+ upper = sorted.slice(mid);
30
+ } else {
31
+ medianVal = sorted[Math.floor(mid)];
32
+ lower = sorted.slice(0, Math.floor(mid));
33
+ upper = sorted.slice(Math.ceil(mid));
34
+ }
35
+ return [sorted[0], scalar(median())(lower)!, medianVal, scalar(median())(upper)!, sorted[sorted.length - 1]];
36
+ }
37
+ };
38
+ }
39
+
40
+ export function quartile(): Observer<number, QuartileT>;
41
+ export function quartile<T = any>(callbackFn: QuartileAccessor<T>): Observer<T, QuartileT>;
42
+ export function quartile<T = any>(callbackFn?: QuartileAccessor<T>): Observer<number, QuartileT> | Observer<T, QuartileT> {
43
+ return callbackFn ? Accessor(_quartile, callbackFn) : _quartile();
44
44
  }
@@ -1,22 +1,22 @@
1
- import { Observer } from "./observer";
2
-
3
- export type ReduceCallback<T, U> = (previousValue: U, currentValue: T, currentIndex: number) => U;
4
-
5
- function _reduce<T, U>(callback: ReduceCallback<T, U>, initialValue?: U): Observer<T, U> {
6
- let reduced: U;
7
-
8
- return {
9
- observe: (value: T, idx: number) => {
10
- if (idx === 0) {
11
- reduced = initialValue === undefined ? (value as unknown as U) : callback(initialValue, value, idx);
12
- } else {
13
- reduced = callback(reduced, value, idx);
14
- }
15
- },
16
- peek: () => reduced
17
- };
18
- }
19
-
20
- export function reduce<T = any, U = any>(callbackFn: ReduceCallback<T, U>, initialValue?: U): Observer<T, U> {
21
- return _reduce(callbackFn, initialValue);
22
- }
1
+ import { Observer } from "./observer";
2
+
3
+ export type ReduceCallback<T, U> = (previousValue: U, currentValue: T, currentIndex: number) => U;
4
+
5
+ function _reduce<T, U>(callback: ReduceCallback<T, U>, initialValue?: U): Observer<T, U> {
6
+ let reduced: U;
7
+
8
+ return {
9
+ observe: (value: T, idx: number) => {
10
+ if (idx === 0) {
11
+ reduced = initialValue === undefined ? (value as unknown as U) : callback(initialValue, value, idx);
12
+ } else {
13
+ reduced = callback(reduced, value, idx);
14
+ }
15
+ },
16
+ peek: () => reduced
17
+ };
18
+ }
19
+
20
+ export function reduce<T = any, U = any>(callbackFn: ReduceCallback<T, U>, initialValue?: U): Observer<T, U> {
21
+ return _reduce(callbackFn, initialValue);
22
+ }
@@ -1,29 +1,29 @@
1
- import { AccessorT, Observer, Accessor } from "./observer";
2
-
3
- function _variance(): Observer<number, number | undefined> {
4
- let count: number;
5
- let mean: number;
6
- let sum: number;
7
-
8
- return {
9
- observe: (value: number, idx: number) => {
10
- if (idx === 0) {
11
- count = 0;
12
- mean = 0;
13
- sum = 0;
14
- }
15
- const delta = value - mean;
16
- mean += delta / ++count;
17
- sum += delta * (value - mean);
18
- },
19
- peek: () => count > 1 ? sum / (count - 1) : undefined
20
- };
21
- }
22
-
23
- export type VarianceAccessor<T> = AccessorT<T, number>;
24
-
25
- export function variance(): Observer<number, number | undefined>;
26
- export function variance<T = any>(callbackFn: VarianceAccessor<T>): Observer<T, number | undefined>;
27
- export function variance<T = any>(callbackFn?: VarianceAccessor<T>): Observer<number, number | undefined> | Observer<T, number | undefined> {
28
- return callbackFn ? Accessor(_variance, callbackFn) : _variance();
29
- }
1
+ import { AccessorT, Observer, Accessor } from "./observer";
2
+
3
+ function _variance(): Observer<number, number | undefined> {
4
+ let count: number;
5
+ let mean: number;
6
+ let sum: number;
7
+
8
+ return {
9
+ observe: (value: number, idx: number) => {
10
+ if (idx === 0) {
11
+ count = 0;
12
+ mean = 0;
13
+ sum = 0;
14
+ }
15
+ const delta = value - mean;
16
+ mean += delta / ++count;
17
+ sum += delta * (value - mean);
18
+ },
19
+ peek: () => count > 1 ? sum / (count - 1) : undefined
20
+ };
21
+ }
22
+
23
+ export type VarianceAccessor<T> = AccessorT<T, number>;
24
+
25
+ export function variance(): Observer<number, number | undefined>;
26
+ export function variance<T = any>(callbackFn: VarianceAccessor<T>): Observer<T, number | undefined>;
27
+ export function variance<T = any>(callbackFn?: VarianceAccessor<T>): Observer<number, number | undefined> | Observer<T, number | undefined> {
28
+ return callbackFn ? Accessor(_variance, callbackFn) : _variance();
29
+ }
@@ -1,6 +1,6 @@
1
- export function* generate<U>(generatorFn: () => U, maxLen?: number): IterableIterator<U> {
2
- let i = -1;
3
- while (maxLen === undefined || ++i < maxLen) {
4
- yield generatorFn();
5
- }
6
- }
1
+ export function* generate<U>(generatorFn: () => U, maxLen?: number): IterableIterator<U> {
2
+ let i = -1;
3
+ while (maxLen === undefined || ++i < maxLen) {
4
+ yield generatorFn();
5
+ }
6
+ }