@hpcc-js/dataflow 8.0.1 → 8.1.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 (164) hide show
  1. package/LICENSE +43 -43
  2. package/README.md +530 -530
  3. package/dist/index.js +446 -446
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.min.js +1 -1
  6. package/dist/index.min.js.map +1 -1
  7. package/lib-es6/__package__.js +3 -3
  8. package/lib-es6/__tests__/chain.js +48 -48
  9. package/lib-es6/__tests__/concat.js +16 -16
  10. package/lib-es6/__tests__/count.js +18 -18
  11. package/lib-es6/__tests__/data.js +55 -55
  12. package/lib-es6/__tests__/deviation.js +12 -12
  13. package/lib-es6/__tests__/distribution.js +18 -18
  14. package/lib-es6/__tests__/each.js +11 -11
  15. package/lib-es6/__tests__/entries.js +12 -12
  16. package/lib-es6/__tests__/extent.js +18 -18
  17. package/lib-es6/__tests__/filter.js +13 -13
  18. package/lib-es6/__tests__/first.js +13 -13
  19. package/lib-es6/__tests__/generate.js +7 -7
  20. package/lib-es6/__tests__/group.js +17 -17
  21. package/lib-es6/__tests__/histogram.js +41 -41
  22. package/lib-es6/__tests__/map.js +13 -13
  23. package/lib-es6/__tests__/max.js +29 -29
  24. package/lib-es6/__tests__/mean.js +9 -9
  25. package/lib-es6/__tests__/median.js +12 -12
  26. package/lib-es6/__tests__/min.js +29 -29
  27. package/lib-es6/__tests__/quartile.js +11 -11
  28. package/lib-es6/__tests__/readme.js +95 -95
  29. package/lib-es6/__tests__/reduce.js +14 -14
  30. package/lib-es6/__tests__/skip.js +13 -13
  31. package/lib-es6/__tests__/sort.js +18 -18
  32. package/lib-es6/__tests__/variance.js +12 -12
  33. package/lib-es6/activities/activity.js +3 -3
  34. package/lib-es6/activities/concat.js +9 -9
  35. package/lib-es6/activities/each.js +13 -13
  36. package/lib-es6/activities/entries.js +12 -12
  37. package/lib-es6/activities/filter.js +14 -14
  38. package/lib-es6/activities/first.js +17 -17
  39. package/lib-es6/activities/group.js +20 -20
  40. package/lib-es6/activities/histogram.js +63 -63
  41. package/lib-es6/activities/map.js +12 -12
  42. package/lib-es6/activities/skip.js +16 -16
  43. package/lib-es6/activities/sort.js +9 -9
  44. package/lib-es6/index.js +25 -25
  45. package/lib-es6/observers/count.js +12 -12
  46. package/lib-es6/observers/deviation.js +17 -17
  47. package/lib-es6/observers/distribution.js +35 -35
  48. package/lib-es6/observers/extent.js +17 -17
  49. package/lib-es6/observers/max.js +18 -18
  50. package/lib-es6/observers/mean.js +20 -20
  51. package/lib-es6/observers/median.js +25 -25
  52. package/lib-es6/observers/min.js +18 -18
  53. package/lib-es6/observers/observer.js +34 -34
  54. package/lib-es6/observers/quartile.js +37 -37
  55. package/lib-es6/observers/reduce.js +17 -17
  56. package/lib-es6/observers/variance.js +22 -22
  57. package/lib-es6/utils/generate.js +6 -6
  58. package/lib-es6/utils/pipe.js +31 -31
  59. package/package.json +6 -24
  60. package/src/__package__.ts +3 -3
  61. package/src/__tests__/chain.ts +85 -85
  62. package/src/__tests__/concat.ts +18 -18
  63. package/src/__tests__/count.ts +25 -25
  64. package/src/__tests__/data.ts +64 -64
  65. package/src/__tests__/deviation.ts +14 -14
  66. package/src/__tests__/distribution.ts +21 -21
  67. package/src/__tests__/each.ts +13 -13
  68. package/src/__tests__/entries.ts +14 -14
  69. package/src/__tests__/extent.ts +25 -25
  70. package/src/__tests__/filter.ts +16 -16
  71. package/src/__tests__/first.ts +15 -15
  72. package/src/__tests__/generate.ts +9 -9
  73. package/src/__tests__/group.ts +19 -19
  74. package/src/__tests__/histogram.ts +47 -47
  75. package/src/__tests__/map.ts +16 -16
  76. package/src/__tests__/max.ts +42 -42
  77. package/src/__tests__/mean.ts +11 -11
  78. package/src/__tests__/median.ts +14 -14
  79. package/src/__tests__/min.ts +42 -42
  80. package/src/__tests__/quartile.ts +14 -14
  81. package/src/__tests__/readme.ts +113 -113
  82. package/src/__tests__/reduce.ts +17 -17
  83. package/src/__tests__/skip.ts +15 -15
  84. package/src/__tests__/sort.ts +21 -21
  85. package/src/__tests__/variance.ts +14 -14
  86. package/src/activities/activity.ts +8 -8
  87. package/src/activities/concat.ts +14 -14
  88. package/src/activities/each.ts +19 -19
  89. package/src/activities/entries.ts +17 -17
  90. package/src/activities/filter.ts +20 -20
  91. package/src/activities/first.ts +20 -20
  92. package/src/activities/group.ts +27 -27
  93. package/src/activities/histogram.ts +78 -78
  94. package/src/activities/map.ts +18 -18
  95. package/src/activities/skip.ts +19 -19
  96. package/src/activities/sort.ts +16 -16
  97. package/src/index.ts +25 -25
  98. package/src/observers/count.ts +15 -15
  99. package/src/observers/deviation.ts +24 -24
  100. package/src/observers/distribution.ts +51 -51
  101. package/src/observers/extent.ts +24 -24
  102. package/src/observers/max.ts +24 -24
  103. package/src/observers/mean.ts +26 -26
  104. package/src/observers/median.ts +30 -30
  105. package/src/observers/min.ts +24 -24
  106. package/src/observers/observer.ts +52 -52
  107. package/src/observers/quartile.ts +43 -43
  108. package/src/observers/reduce.ts +22 -22
  109. package/src/observers/variance.ts +29 -29
  110. package/src/utils/generate.ts +6 -6
  111. package/src/utils/pipe.ts +74 -74
  112. package/types/__package__.d.ts +3 -3
  113. package/types/__tests__/chain.d.ts +1 -1
  114. package/types/__tests__/concat.d.ts +1 -1
  115. package/types/__tests__/count.d.ts +1 -1
  116. package/types/__tests__/data.d.ts +61 -61
  117. package/types/__tests__/deviation.d.ts +1 -1
  118. package/types/__tests__/distribution.d.ts +1 -1
  119. package/types/__tests__/each.d.ts +1 -1
  120. package/types/__tests__/entries.d.ts +1 -1
  121. package/types/__tests__/extent.d.ts +1 -1
  122. package/types/__tests__/filter.d.ts +1 -1
  123. package/types/__tests__/first.d.ts +1 -1
  124. package/types/__tests__/generate.d.ts +1 -1
  125. package/types/__tests__/group.d.ts +1 -1
  126. package/types/__tests__/histogram.d.ts +1 -1
  127. package/types/__tests__/map.d.ts +1 -1
  128. package/types/__tests__/max.d.ts +1 -1
  129. package/types/__tests__/mean.d.ts +1 -1
  130. package/types/__tests__/median.d.ts +1 -1
  131. package/types/__tests__/min.d.ts +1 -1
  132. package/types/__tests__/quartile.d.ts +1 -1
  133. package/types/__tests__/readme.d.ts +1 -1
  134. package/types/__tests__/reduce.d.ts +1 -1
  135. package/types/__tests__/skip.d.ts +1 -1
  136. package/types/__tests__/sort.d.ts +1 -1
  137. package/types/__tests__/variance.d.ts +1 -1
  138. package/types/activities/activity.d.ts +5 -5
  139. package/types/activities/concat.d.ts +3 -3
  140. package/types/activities/each.d.ts +4 -4
  141. package/types/activities/entries.d.ts +3 -3
  142. package/types/activities/filter.d.ts +4 -4
  143. package/types/activities/first.d.ts +3 -3
  144. package/types/activities/group.d.ts +8 -8
  145. package/types/activities/histogram.d.ts +17 -17
  146. package/types/activities/map.d.ts +4 -4
  147. package/types/activities/skip.d.ts +3 -3
  148. package/types/activities/sort.d.ts +4 -4
  149. package/types/index.d.ts +25 -25
  150. package/types/observers/count.d.ts +2 -2
  151. package/types/observers/deviation.d.ts +4 -4
  152. package/types/observers/distribution.d.ts +12 -12
  153. package/types/observers/extent.d.ts +4 -4
  154. package/types/observers/max.d.ts +4 -4
  155. package/types/observers/mean.d.ts +4 -4
  156. package/types/observers/median.d.ts +4 -4
  157. package/types/observers/min.d.ts +4 -4
  158. package/types/observers/observer.d.ts +13 -13
  159. package/types/observers/quartile.d.ts +5 -5
  160. package/types/observers/reduce.d.ts +3 -3
  161. package/types/observers/variance.d.ts +4 -4
  162. package/types/utils/generate.d.ts +1 -1
  163. package/types/utils/pipe.d.ts +41 -41
  164. package/types-3.4/__package__.d.ts +2 -2
@@ -1,42 +1,42 @@
1
- import { expect } from "chai";
2
- import { pipe, filter, max, scalar, sensor } from "../index";
3
- import { population } from "./data";
4
-
5
- describe("max", () => {
6
- it("NumberArray", () => {
7
- const s1 = max();
8
- const s2 = max();
9
- const p1 = pipe(
10
- sensor(s1),
11
- filter(r => r < 3),
12
- sensor(s2),
13
- );
14
- const data = [...p1([1, 2, 3, 4, 5, 0])];
15
- expect(data.length).to.equal(3);
16
- expect(s1.peek()).to.equal(5);
17
- expect(s2.peek()).to.equal(2);
18
- });
19
-
20
- it("Population", () => {
21
- const s1 = max(r => r.age);
22
- const s2 = max(r => r.age);
23
- const p1 = pipe(
24
- sensor(s1),
25
- filter(r => r.age < 30),
26
- sensor(s2),
27
- );
28
- const data = [...p1(population)];
29
- expect(data.length).to.equal(286);
30
- expect(s1.peek()).to.equal(66);
31
- expect(s2.peek()).to.equal(29);
32
- });
33
-
34
- it("scalarActivity", () => {
35
- const s1 = scalar(max());
36
- expect(s1([1, 2, 3, 4, 5, 0])).to.equal(5);
37
-
38
- const s2 = scalar(max(r => r.age));
39
- expect(s2(population)).to.equal(66);
40
- });
41
- });
42
-
1
+ import { expect } from "chai";
2
+ import { pipe, filter, max, scalar, sensor } from "../index";
3
+ import { population } from "./data";
4
+
5
+ describe("max", () => {
6
+ it("NumberArray", () => {
7
+ const s1 = max();
8
+ const s2 = max();
9
+ const p1 = pipe(
10
+ sensor(s1),
11
+ filter(r => r < 3),
12
+ sensor(s2),
13
+ );
14
+ const data = [...p1([1, 2, 3, 4, 5, 0])];
15
+ expect(data.length).to.equal(3);
16
+ expect(s1.peek()).to.equal(5);
17
+ expect(s2.peek()).to.equal(2);
18
+ });
19
+
20
+ it("Population", () => {
21
+ const s1 = max(r => r.age);
22
+ const s2 = max(r => r.age);
23
+ const p1 = pipe(
24
+ sensor(s1),
25
+ filter(r => r.age < 30),
26
+ sensor(s2),
27
+ );
28
+ const data = [...p1(population)];
29
+ expect(data.length).to.equal(286);
30
+ expect(s1.peek()).to.equal(66);
31
+ expect(s2.peek()).to.equal(29);
32
+ });
33
+
34
+ it("scalarActivity", () => {
35
+ const s1 = scalar(max());
36
+ expect(s1([1, 2, 3, 4, 5, 0])).to.equal(5);
37
+
38
+ const s2 = scalar(max(r => r.age));
39
+ expect(s2(population)).to.equal(66);
40
+ });
41
+ });
42
+
@@ -1,11 +1,11 @@
1
- import { expect } from "chai";
2
- import { mean, scalar } from "../index";
3
-
4
- describe("mean", () => {
5
- it("scalarActivity", () => {
6
- const a1 = scalar(mean());
7
- expect(a1([5, -6, 1, 2, -2])).to.equal(0);
8
- expect(a1([9])).to.deep.equal(9);
9
- });
10
- });
11
-
1
+ import { expect } from "chai";
2
+ import { mean, scalar } from "../index";
3
+
4
+ describe("mean", () => {
5
+ it("scalarActivity", () => {
6
+ const a1 = scalar(mean());
7
+ expect(a1([5, -6, 1, 2, -2])).to.equal(0);
8
+ expect(a1([9])).to.deep.equal(9);
9
+ });
10
+ });
11
+
@@ -1,14 +1,14 @@
1
- import { expect } from "chai";
2
- import { median, scalar } from "../index";
3
-
4
- describe("median", () => {
5
-
6
- it("scalarActivity", () => {
7
- const calcMedian = scalar(median());
8
- expect(calcMedian([-6, -2, 1, 2, 5])).to.equal(1);
9
- expect(calcMedian([5, -6, 1, 2, -2])).to.equal(1);
10
- expect(calcMedian([-6, -2, 1, 2, 5, 6])).to.equal(1.5);
11
- expect(calcMedian([5, -6, 1, 2, -2, 6])).to.equal(1.5);
12
- expect(calcMedian([9])).to.deep.equal(9);
13
- });
14
- });
1
+ import { expect } from "chai";
2
+ import { median, scalar } from "../index";
3
+
4
+ describe("median", () => {
5
+
6
+ it("scalarActivity", () => {
7
+ const calcMedian = scalar(median());
8
+ expect(calcMedian([-6, -2, 1, 2, 5])).to.equal(1);
9
+ expect(calcMedian([5, -6, 1, 2, -2])).to.equal(1);
10
+ expect(calcMedian([-6, -2, 1, 2, 5, 6])).to.equal(1.5);
11
+ expect(calcMedian([5, -6, 1, 2, -2, 6])).to.equal(1.5);
12
+ expect(calcMedian([9])).to.deep.equal(9);
13
+ });
14
+ });
@@ -1,42 +1,42 @@
1
- import { expect } from "chai";
2
- import { pipe, filter, min, scalar, sensor } from "../index";
3
- import { population } from "./data";
4
-
5
- describe("min", () => {
6
- it("NumberArray", () => {
7
- const s1 = min();
8
- const s2 = min();
9
- const p1 = pipe(
10
- sensor(s1),
11
- filter(r => r > 3),
12
- sensor(s2),
13
- );
14
- const data = [...p1([1, 2, 3, 4, 5, 0])];
15
- expect(data.length).to.equal(2);
16
- expect(s1.peek()).to.equal(0);
17
- expect(s2.peek()).to.equal(4);
18
- });
19
-
20
- it("Population", () => {
21
- const s1 = min(r => r.age);
22
- const s2 = min(r => r.age);
23
- const p1 = pipe(
24
- sensor(s1),
25
- filter(r => r.age > 30),
26
- sensor(s2),
27
- );
28
- const data = [...p1(population)];
29
- expect(data.length).to.equal(699);
30
- expect(s1.peek()).to.equal(16);
31
- expect(s2.peek()).to.equal(31);
32
- });
33
-
34
- it("scalarActivity", () => {
35
- const a1 = scalar(min());
36
- expect(a1([1, 2, 3, 4, 5, 0])).to.equal(0);
37
-
38
- const a2 = scalar(min(r => r.age));
39
- expect(a2(population)).to.equal(16);
40
- });
41
- });
42
-
1
+ import { expect } from "chai";
2
+ import { pipe, filter, min, scalar, sensor } from "../index";
3
+ import { population } from "./data";
4
+
5
+ describe("min", () => {
6
+ it("NumberArray", () => {
7
+ const s1 = min();
8
+ const s2 = min();
9
+ const p1 = pipe(
10
+ sensor(s1),
11
+ filter(r => r > 3),
12
+ sensor(s2),
13
+ );
14
+ const data = [...p1([1, 2, 3, 4, 5, 0])];
15
+ expect(data.length).to.equal(2);
16
+ expect(s1.peek()).to.equal(0);
17
+ expect(s2.peek()).to.equal(4);
18
+ });
19
+
20
+ it("Population", () => {
21
+ const s1 = min(r => r.age);
22
+ const s2 = min(r => r.age);
23
+ const p1 = pipe(
24
+ sensor(s1),
25
+ filter(r => r.age > 30),
26
+ sensor(s2),
27
+ );
28
+ const data = [...p1(population)];
29
+ expect(data.length).to.equal(699);
30
+ expect(s1.peek()).to.equal(16);
31
+ expect(s2.peek()).to.equal(31);
32
+ });
33
+
34
+ it("scalarActivity", () => {
35
+ const a1 = scalar(min());
36
+ expect(a1([1, 2, 3, 4, 5, 0])).to.equal(0);
37
+
38
+ const a2 = scalar(min(r => r.age));
39
+ expect(a2(population)).to.equal(16);
40
+ });
41
+ });
42
+
@@ -1,14 +1,14 @@
1
- import { expect } from "chai";
2
- import { quartile, scalar } from "../index";
3
-
4
- describe("quartile", () => {
5
-
6
- it("scalarActivity", () => {
7
- const calcQuartile = scalar(quartile());
8
- expect(calcQuartile([6, 7, 15, 36, 39, 40, 41, 42, 43, 47, 49])).to.deep.equal([6, 15, 40, 43, 49]);
9
- expect(calcQuartile([7, 15, 36, 39, 40, 41])).to.deep.equal([7, 15, 37.5, 40, 41]);
10
- expect(calcQuartile([1, 22, 133])).to.deep.equal([1, 1, 22, 133, 133]);
11
- expect(calcQuartile([2, 144, 33])).to.deep.equal([2, 2, 33, 144, 144]);
12
- });
13
- });
14
-
1
+ import { expect } from "chai";
2
+ import { quartile, scalar } from "../index";
3
+
4
+ describe("quartile", () => {
5
+
6
+ it("scalarActivity", () => {
7
+ const calcQuartile = scalar(quartile());
8
+ expect(calcQuartile([6, 7, 15, 36, 39, 40, 41, 42, 43, 47, 49])).to.deep.equal([6, 15, 40, 43, 49]);
9
+ expect(calcQuartile([7, 15, 36, 39, 40, 41])).to.deep.equal([7, 15, 37.5, 40, 41]);
10
+ expect(calcQuartile([1, 22, 133])).to.deep.equal([1, 1, 22, 133, 133]);
11
+ expect(calcQuartile([2, 144, 33])).to.deep.equal([2, 2, 33, 144, 144]);
12
+ });
13
+ });
14
+
@@ -1,113 +1,113 @@
1
- import { expect } from "chai";
2
-
3
- import { count, filter, first, generate, map, max, pipe, sensor } from "../index";
4
-
5
- describe("readme", () => {
6
-
7
- it("quick example", () => {
8
-
9
- const c1 = count();
10
- const c2 = count();
11
- const c3 = count();
12
- const m1 = max(row => row.value);
13
-
14
- const p1 = pipe(
15
- sensor(c1), // Keep running count of input
16
- filter(n => n <= 0.5), // Filter out numbers > 0.5
17
- sensor(c2), // Keep running count of filtered rows
18
- map((n, idx) => // Convert to JSON Object
19
- ({ index: idx, value: n })),
20
- filter(row => row.index % 2 === 0), // Filter even row indecies
21
- sensor(c3), // Keep running count of final rows
22
- sensor(m1), // Track largest value
23
- first(3) // Take first 3 rows
24
- );
25
-
26
- console.log(`Counts: ${c1.peek()}, ${c2.peek()}, ${c3.peek()}`);
27
- // [1] => Counts: undefined, undefined, undefined
28
- const outIterable = p1(generate(Math.random, 1000));
29
- console.log(`Counts: ${c1.peek()}, ${c2.peek()}, ${c3.peek()}`);
30
- // [2] => Counts: undefined, undefined, undefined
31
- console.log(JSON.stringify([...outIterable]));
32
- // [3] => [{"index":0,"value":0.19075931906641008},{"index":2,"value":0.4873469062925415},{"index":4,"value":0.4412516774100035}]
33
- console.log(`Counts: ${c1.peek()}, ${c2.peek()}, ${c3.peek()}, ${m1.peek()}`);
34
- // [4] => Counts: 6, 5, 3, 0.4873469062925415
35
-
36
- const outArray = [...p1([0.7, 0.5, 0.4, 0.8, 0.3, 1])];
37
- console.log(JSON.stringify(outArray));
38
- // [5] => [{"index":0,"value":0.5},{"index":2,"value":0.3}]
39
- console.log(`Counts: ${c1.peek()}, ${c2.peek()}, ${c3.peek()}, ${m1.peek()}`);
40
- // [6] => Counts: 6, 3, 2, 0.5
41
-
42
- expect(outArray.length).to.equal(2);
43
-
44
- for (const row of p1(generate(Math.random, 1000000))) {
45
- console.log(`${row.index}: ${c1.peek()}, ${c2.peek()}, ${c3.peek()}, ${m1.peek()}`);
46
- }
47
- });
48
-
49
- it("interesting example", () => {
50
- const c1 = count();
51
- const c2 = count();
52
- const c3 = count();
53
- const m1 = max(row => row.value);
54
-
55
- const p1 = pipe(
56
- sensor(c1), // Keep running count of input
57
- filter(n => n <= 0.5), // Filter out numbers > 0.5
58
- sensor(c2), // Keep running count of filtered rows
59
- map((n, idx) => // Convert to JSON Object
60
- ({ index: idx, value: n })),
61
- filter(row => row.index % 2 === 0), // Filter even row indecies
62
- sensor(c3), // Keep running count of final rows
63
- sensor(m1), // Track largest value
64
- );
65
-
66
- for (const row of p1(generate(Math.random, 1000000))) {
67
- if (row.index % 100000 === 0) {
68
- console.log(`${row.index}: ${c1.peek()}, ${c2.peek()}, ${c3.peek()}, ${m1.peek()}`);
69
- }
70
- }
71
- });
72
- });
73
-
74
- /*
75
- const process3 = pipe(
76
- filter(n => n <= 0.5),
77
- map((n, idx) => ({ index: idx, value: n })),
78
- filter(row => row.index % 2 === 0),
79
- sort((l, r) => l.value - r.value),
80
- first(3)
81
- );
82
- console.log(...process3([]));
83
-
84
- // Iterable output
85
- pipe([0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
86
- filter(n => n <= 5),
87
- map((n, idx) => ({ index: idx, value: n })),
88
- filter(row => row.index % 2 === 0),
89
- sort((l, r) => l.value - r.value),
90
- first(3)
91
- ); // => { index: 0, value: 0 }, { index: 2, value: 2 }, { index: 4, value: 4 }
92
-
93
- const process = pipe(
94
- filter(n => n <= 5),
95
- map((n, idx) => ({ index: idx, value: n })),
96
- filter(row => row.index % 2 === 0),
97
- sort((l, r) => l.value - r.value),
98
- first(3)
99
- );
100
- console.log([...process([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])]); // => { index: 0, value: 0 }, { index: 2, value: 2 }, { index: 4, value: 4 }
101
-
102
- // Scalar output
103
- pipe([0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
104
- process,
105
- scalar(max(row => row.value))
106
- ); // => 4
107
-
108
- const process_2 = pipe(
109
- process,
110
- scalar(min(row => row.value))
111
- );
112
- console.log(process_2([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])); // => 0
113
- */
1
+ import { expect } from "chai";
2
+
3
+ import { count, filter, first, generate, map, max, pipe, sensor } from "../index";
4
+
5
+ describe("readme", () => {
6
+
7
+ it("quick example", () => {
8
+
9
+ const c1 = count();
10
+ const c2 = count();
11
+ const c3 = count();
12
+ const m1 = max(row => row.value);
13
+
14
+ const p1 = pipe(
15
+ sensor(c1), // Keep running count of input
16
+ filter(n => n <= 0.5), // Filter out numbers > 0.5
17
+ sensor(c2), // Keep running count of filtered rows
18
+ map((n, idx) => // Convert to JSON Object
19
+ ({ index: idx, value: n })),
20
+ filter(row => row.index % 2 === 0), // Filter even row indecies
21
+ sensor(c3), // Keep running count of final rows
22
+ sensor(m1), // Track largest value
23
+ first(3) // Take first 3 rows
24
+ );
25
+
26
+ console.log(`Counts: ${c1.peek()}, ${c2.peek()}, ${c3.peek()}`);
27
+ // [1] => Counts: undefined, undefined, undefined
28
+ const outIterable = p1(generate(Math.random, 1000));
29
+ console.log(`Counts: ${c1.peek()}, ${c2.peek()}, ${c3.peek()}`);
30
+ // [2] => Counts: undefined, undefined, undefined
31
+ console.log(JSON.stringify([...outIterable]));
32
+ // [3] => [{"index":0,"value":0.19075931906641008},{"index":2,"value":0.4873469062925415},{"index":4,"value":0.4412516774100035}]
33
+ console.log(`Counts: ${c1.peek()}, ${c2.peek()}, ${c3.peek()}, ${m1.peek()}`);
34
+ // [4] => Counts: 6, 5, 3, 0.4873469062925415
35
+
36
+ const outArray = [...p1([0.7, 0.5, 0.4, 0.8, 0.3, 1])];
37
+ console.log(JSON.stringify(outArray));
38
+ // [5] => [{"index":0,"value":0.5},{"index":2,"value":0.3}]
39
+ console.log(`Counts: ${c1.peek()}, ${c2.peek()}, ${c3.peek()}, ${m1.peek()}`);
40
+ // [6] => Counts: 6, 3, 2, 0.5
41
+
42
+ expect(outArray.length).to.equal(2);
43
+
44
+ for (const row of p1(generate(Math.random, 1000000))) {
45
+ console.log(`${row.index}: ${c1.peek()}, ${c2.peek()}, ${c3.peek()}, ${m1.peek()}`);
46
+ }
47
+ });
48
+
49
+ it("interesting example", () => {
50
+ const c1 = count();
51
+ const c2 = count();
52
+ const c3 = count();
53
+ const m1 = max(row => row.value);
54
+
55
+ const p1 = pipe(
56
+ sensor(c1), // Keep running count of input
57
+ filter(n => n <= 0.5), // Filter out numbers > 0.5
58
+ sensor(c2), // Keep running count of filtered rows
59
+ map((n, idx) => // Convert to JSON Object
60
+ ({ index: idx, value: n })),
61
+ filter(row => row.index % 2 === 0), // Filter even row indecies
62
+ sensor(c3), // Keep running count of final rows
63
+ sensor(m1), // Track largest value
64
+ );
65
+
66
+ for (const row of p1(generate(Math.random, 1000000))) {
67
+ if (row.index % 100000 === 0) {
68
+ console.log(`${row.index}: ${c1.peek()}, ${c2.peek()}, ${c3.peek()}, ${m1.peek()}`);
69
+ }
70
+ }
71
+ });
72
+ });
73
+
74
+ /*
75
+ const process3 = pipe(
76
+ filter(n => n <= 0.5),
77
+ map((n, idx) => ({ index: idx, value: n })),
78
+ filter(row => row.index % 2 === 0),
79
+ sort((l, r) => l.value - r.value),
80
+ first(3)
81
+ );
82
+ console.log(...process3([]));
83
+
84
+ // Iterable output
85
+ pipe([0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
86
+ filter(n => n <= 5),
87
+ map((n, idx) => ({ index: idx, value: n })),
88
+ filter(row => row.index % 2 === 0),
89
+ sort((l, r) => l.value - r.value),
90
+ first(3)
91
+ ); // => { index: 0, value: 0 }, { index: 2, value: 2 }, { index: 4, value: 4 }
92
+
93
+ const process = pipe(
94
+ filter(n => n <= 5),
95
+ map((n, idx) => ({ index: idx, value: n })),
96
+ filter(row => row.index % 2 === 0),
97
+ sort((l, r) => l.value - r.value),
98
+ first(3)
99
+ );
100
+ console.log([...process([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])]); // => { index: 0, value: 0 }, { index: 2, value: 2 }, { index: 4, value: 4 }
101
+
102
+ // Scalar output
103
+ pipe([0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
104
+ process,
105
+ scalar(max(row => row.value))
106
+ ); // => 4
107
+
108
+ const process_2 = pipe(
109
+ process,
110
+ scalar(min(row => row.value))
111
+ );
112
+ console.log(process_2([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])); // => 0
113
+ */
@@ -1,17 +1,17 @@
1
- import { expect } from "chai";
2
- import { reduce, scalar } from "../index";
3
-
4
- const data = [1, 2, 3, 4, 5];
5
- const reduceFunc = (prev, row) => prev + row;
6
- const expectedA = data.reduce(reduceFunc);
7
- const expectedB = data.reduce(reduceFunc, 10);
8
-
9
- describe("reduce", () => {
10
-
11
- it("scalarActivity", () => {
12
- const calcReduce = scalar(reduce(reduceFunc));
13
- const calcReduce2 = scalar(reduce(reduceFunc, 10));
14
- expect(calcReduce(data)).to.equal(expectedA);
15
- expect(calcReduce2(data)).to.equal(expectedB);
16
- });
17
- });
1
+ import { expect } from "chai";
2
+ import { reduce, scalar } from "../index";
3
+
4
+ const data = [1, 2, 3, 4, 5];
5
+ const reduceFunc = (prev, row) => prev + row;
6
+ const expectedA = data.reduce(reduceFunc);
7
+ const expectedB = data.reduce(reduceFunc, 10);
8
+
9
+ describe("reduce", () => {
10
+
11
+ it("scalarActivity", () => {
12
+ const calcReduce = scalar(reduce(reduceFunc));
13
+ const calcReduce2 = scalar(reduce(reduceFunc, 10));
14
+ expect(calcReduce(data)).to.equal(expectedA);
15
+ expect(calcReduce2(data)).to.equal(expectedB);
16
+ });
17
+ });
@@ -1,15 +1,15 @@
1
- import { expect } from "chai";
2
- import { skip } from "../index";
3
-
4
- describe("skip", () => {
5
- it("generator", () => {
6
- expect([...skip(2)([])]).to.deep.equal([]);
7
- expect([...skip(2)(["a", "b", "c"])]).to.deep.equal(["c"]);
8
- });
9
-
10
- it("scalarActivity", () => {
11
- expect([...skip([], 22)]).to.deep.equal([]);
12
- expect([...skip(["a", "b", "c"], 2)]).to.deep.equal(["c"]);
13
- expect([...skip(["a", "b", "c"], 22)]).to.deep.equal([]);
14
- });
15
- });
1
+ import { expect } from "chai";
2
+ import { skip } from "../index";
3
+
4
+ describe("skip", () => {
5
+ it("generator", () => {
6
+ expect([...skip(2)([])]).to.deep.equal([]);
7
+ expect([...skip(2)(["a", "b", "c"])]).to.deep.equal(["c"]);
8
+ });
9
+
10
+ it("scalarActivity", () => {
11
+ expect([...skip([], 22)]).to.deep.equal([]);
12
+ expect([...skip(["a", "b", "c"], 2)]).to.deep.equal(["c"]);
13
+ expect([...skip(["a", "b", "c"], 22)]).to.deep.equal([]);
14
+ });
15
+ });
@@ -1,21 +1,21 @@
1
- import { expect } from "chai";
2
- import { sort } from "../index";
3
- import { Person, population } from "./data";
4
-
5
- function sortFunc(l: Person, r: Person): number {
6
- const retVal = l.lname.localeCompare(r.lname);
7
- if (retVal === 0) return l.fname.localeCompare(r.fname);
8
- return retVal;
9
- }
10
-
11
- const expected = [...population].sort(sortFunc);
12
-
13
- describe("sort", () => {
14
- it("generator", () => {
15
- expect([...sort(sortFunc)(population)]).to.deep.equal(expected);
16
- });
17
-
18
- it("scalarActivity", () => {
19
- expect([...sort(population, sortFunc)]).to.deep.equal(expected);
20
- });
21
- });
1
+ import { expect } from "chai";
2
+ import { sort } from "../index";
3
+ import { Person, population } from "./data";
4
+
5
+ function sortFunc(l: Person, r: Person): number {
6
+ const retVal = l.lname.localeCompare(r.lname);
7
+ if (retVal === 0) return l.fname.localeCompare(r.fname);
8
+ return retVal;
9
+ }
10
+
11
+ const expected = [...population].sort(sortFunc);
12
+
13
+ describe("sort", () => {
14
+ it("generator", () => {
15
+ expect([...sort(sortFunc)(population)]).to.deep.equal(expected);
16
+ });
17
+
18
+ it("scalarActivity", () => {
19
+ expect([...sort(population, sortFunc)]).to.deep.equal(expected);
20
+ });
21
+ });
@@ -1,14 +1,14 @@
1
- import { expect } from "chai";
2
- import { variance, scalar } from "../index";
3
-
4
- describe("variance", () => {
5
- it("scalarActivity", () => {
6
- const calcVariance = scalar(variance());
7
- expect(calcVariance([5, 1, 2, 3, 4])).to.equal(2.5);
8
- });
9
-
10
- it("empty array", () => {
11
- const varianceActivity = scalar(variance());
12
- expect(varianceActivity([])).to.be.undefined;
13
- });
14
- });
1
+ import { expect } from "chai";
2
+ import { variance, scalar } from "../index";
3
+
4
+ describe("variance", () => {
5
+ it("scalarActivity", () => {
6
+ const calcVariance = scalar(variance());
7
+ expect(calcVariance([5, 1, 2, 3, 4])).to.equal(2.5);
8
+ });
9
+
10
+ it("empty array", () => {
11
+ const varianceActivity = scalar(variance());
12
+ expect(varianceActivity([])).to.be.undefined;
13
+ });
14
+ });
@@ -1,8 +1,8 @@
1
- export type Source<T> = IterableIterator<T> | T[];
2
- export type IterableActivity<T, U = T> = (source: Source<T>) => IterableIterator<U>;
3
- export type ScalarActivity<T, U = T> = (source: Source<T>) => U;
4
- export type Activity<T, U = T> = IterableActivity<T, U> | ScalarActivity<T, U>;
5
-
6
- export function isSource<T>(source: Source<T> | any): source is Source<T> {
7
- return typeof source[Symbol.iterator] === "function" || Array.isArray(source);
8
- }
1
+ export type Source<T> = IterableIterator<T> | T[];
2
+ export type IterableActivity<T, U = T> = (source: Source<T>) => IterableIterator<U>;
3
+ export type ScalarActivity<T, U = T> = (source: Source<T>) => U;
4
+ export type Activity<T, U = T> = IterableActivity<T, U> | ScalarActivity<T, U>;
5
+
6
+ export function isSource<T>(source: Source<T> | any): source is Source<T> {
7
+ return typeof source[Symbol.iterator] === "function" || Array.isArray(source);
8
+ }