@hpcc-js/dataflow 9.6.12 → 9.6.14

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/index.js CHANGED
@@ -1,2 +1,423 @@
1
- var e=Object.defineProperty,n=(n,t)=>e(n,"name",{value:t,configurable:!0});function t(e){return e&&("function"==typeof e[Symbol.iterator]||Array.isArray(e))}function r(e){return function*(n){yield*n,yield*e}}function o(e,n){return void 0!==n?r(n)(e):r(e)}function i(e){return function*(n){let t=-1;for(const r of n)e(r,++t),yield r}}function u(e,n){return t(e)?i(n)(e):i(e)}function c(){return function*(e){let n=-1;for(const t of e)yield[++n,t]}}function f(e){return e?function*(e){let n=-1;for(const t of e)yield[++n,t]}(e):function*(e){let n=-1;for(const t of e)yield[++n,t]}}function s(e){return function*(n){let t=-1;for(const r of n)e(r,++t)&&(yield r)}}function l(e,n){return t(e)?s(n)(e):s(e)}function a(e){return function*(n){let t=0;for(const r of n)if(yield r,++t>=e)break}}function v(e,n){return t(e)?a(n)(e):a(e)}function p(e){return function*(n){let t=-1;const r={};for(const o of n){const n=e(o,++t);r[n]||(r[n]=[]),r[n].push(o)}for(const e in r)yield{key:e,value:r[e]}}}function b(e,n){return t(e)?p(n)(e):p(e)}function d(e,t){const r=e();return{observe:/* @__PURE__ */n((e,n)=>{r.observe(t(e,n),n)},"observe"),peek:r.peek}}function k(e){return u((n,t)=>e.observe(n,t))}function y(e){return function*(n){let t=-1;for(const r of n)e.observe(r,++t);yield e.peek()}}function h(e){return function(n){let t=-1;for(const r of n)e.observe(r,++t);return e.peek()}}function m(){let e;return{observe:/* @__PURE__ */n((n,t)=>{(0===t||e<n)&&(e=n)},"observe"),peek:/* @__PURE__ */n(()=>e,"peek")}}function g(e){return e?d(m,e):m()}function G(){let e;return{observe:/* @__PURE__ */n((n,t)=>{(0===t||e>n)&&(e=n)},"observe"),peek:/* @__PURE__ */n(()=>e,"peek")}}function A(e){return e?d(G,e):G()}function _(){const e=A(),t=g();return{observe:/* @__PURE__ */n((n,r)=>{e.observe(n,r),t.observe(n,r)},"observe"),peek:/* @__PURE__ */n(()=>[e.peek(),t.peek()],"peek")}}function x(e){return e?d(_,e):_()}function M(e){return void 0!==e.buckets}function q(e,n){return function*(t){let r,o,i;if(M(n)){i=Array.isArray(t)?t:[...t];const u=h(x(e))(i);if(void 0===u||void 0===u[0]||void 0===u[1]){const e=n.buckets;for(let n=0;n<e;++n)yield{from:NaN,to:NaN,value:[]};return}r=u[0];o=(u[1]-r)/n.buckets}else i=t,r=n.min,o=n.range;const u={};let c=0,f=!1;for(const n of i){f=!0;const t=e(n),i=Math.floor((t-r)/o);c<i&&(c=i),void 0===u[i]&&(u[i]=[]),u[i].push(n)}if(!f)return;const s=u[c],l=r+c*o;for(let n=0;n<=c;++n){if(n===c-1&&s.every(n=>l===e(n))){yield{from:r+n*o,to:r+(n+1)*o,value:[...u[n]||[],...s]};break}yield{from:r+n*o,to:r+(n+1)*o,value:u[n]||[]}}}}function N(e,n,r){return t(e)?q(n,r)(e):q(e,n)}function j(e,n){const t=Array.isArray(e)?e[Symbol.iterator]():e;return function*(e){let r=-1;for(const o of e)yield n(o,t.next().value,++r)}}function S(e,n,r){return t(n)?j(n,r)(e):j(e,n)}function w(e){return function*(n){let t=-1;for(const r of n)yield e(r,++t)}}function z(e,n){return t(e)?w(n)(e):w(e)}function O(){const e=h(x());return function*(n){const t=Array.isArray(n)?n:[...n],r=e(t),o=r[1]-r[0]||1,i=z(e=>(e-r[0])/o);return yield*i(t)}}function E(e){return t(e)?O()(e):O()}function P(e){return function*(n){let t=-1;for(const r of n)++t>=e&&(yield r)}}function T(e,n){return t(e)?P(n)(e):P(e)}function B(e){return function*(n){yield*(Array.isArray(n)?n:[...n]).sort(e)}}function C(e,n){return t(e)?B(n)(e):B(e)}function D(){let e;return{observe:/* @__PURE__ */n((n,t)=>{0===t&&(e=0),++e},"observe"),peek:/* @__PURE__ */n(()=>e,"peek")}}function F(){let e,t,r;return{observe:/* @__PURE__ */n((n,o)=>{0===o&&(e=0,t=0,r=0);const i=n-t;t+=i/++e,r+=i*(n-t)},"observe"),peek:/* @__PURE__ */n(()=>e>1?r/(e-1):void 0,"peek")}}function H(e){return e?d(F,e):F()}function I(){const e=H();return{observe:/* @__PURE__ */n((n,t)=>{e.observe(n,t)},"observe"),peek:/* @__PURE__ */n(()=>{const n=e.peek();return void 0!==n?Math.sqrt(n):n},"peek")}}function J(e){return e?d(I,e):I()}function K(){let e,t;return{observe:/* @__PURE__ */n((n,r)=>{0===r?e=n:e+=n,t=r},"observe"),peek:/* @__PURE__ */n(()=>e/(t+1),"peek")}}function L(e){return e?d(K,e):K()}function Q(){const e=A(),t=g(),r=L(),o=H();return{observe:/* @__PURE__ */n((n,i)=>{e.observe(n,i),t.observe(n,i),r.observe(n,i),o.observe(n,i)},"observe"),peek:/* @__PURE__ */n(()=>{const n=e.peek();if(void 0===n)return;const i=o.peek();return{min:n,max:t.peek(),mean:r.peek(),variance:i,deviation:void 0!==i?Math.sqrt(i):void 0}},"peek")}}function R(e){return e?d(Q,e):Q()}function U(){let e;return{observe:/* @__PURE__ */n((n,t)=>{0===t&&(e=[]),e.push(n)},"observe"),peek:/* @__PURE__ */n(()=>{const n=e.sort((e,n)=>e-n),t=n.length/2;return n.length%2==0?(n[t-1]+n[t])/2:n[Math.floor(t)]},"peek")}}function V(e){return e?d(U,e):U()}function W(){let e;return{observe:/* @__PURE__ */n((n,t)=>{0===t&&(e=[]),e.push(n)},"observe"),peek:/* @__PURE__ */n(()=>{const n=e.sort((e,n)=>e-n),t=n.length/2;let r,o,i;if(!(n.length<2))return n.length%2==0?(r=(n[t-1]+n[t])/2,o=n.slice(0,t),i=n.slice(t)):(r=n[Math.floor(t)],o=n.slice(0,Math.floor(t)),i=n.slice(Math.ceil(t))),[n[0],h(V())(o),r,h(V())(i),n[n.length-1]]},"peek")}}function X(e){return e?d(W,e):W()}function Y(e,t){let r;return{observe:/* @__PURE__ */n((n,o)=>{r=0===o?void 0===t?n:e(t,n,o):e(r,n,o)},"observe"),peek:/* @__PURE__ */n(()=>r,"peek")}}function Z(e,n){return Y(e,n)}function*$(e,n){let t=-1;for(;void 0===n||++t<n;)yield e()}n(t,"isSource"),n(r,"concatGen"),n(o,"concat"),n(i,"eachGen"),n(u,"each"),n(c,"entriesGen"),n(f,"entries"),n(s,"filterGen"),n(l,"filter"),n(a,"firstGen"),n(v,"first"),n(p,"groupGen"),n(b,"group"),n(d,"Accessor"),n(k,"sensor"),n(y,"activity"),n(h,"scalar"),n(m,"_max"),n(g,"max"),n(G,"_min"),n(A,"min"),n(_,"_extent"),n(x,"extent"),n(M,"isOptionA"),n(q,"histogramGen"),n(N,"histogram"),n(j,"joinGen"),n(S,"join"),n(w,"mapGen"),n(z,"map"),n(O,"normalizeGen"),n(E,"normalize"),n(P,"skipGen"),n(T,"skip"),n(B,"sortGen"),n(C,"sort"),n(D,"count"),n(F,"_variance"),n(H,"variance"),n(I,"_deviation"),n(J,"deviation"),n(K,"_mean"),n(L,"mean"),n(Q,"_distribution"),n(R,"distribution"),n(U,"_median"),n(V,"median"),n(W,"_quartile"),n(X,"quartile"),n(Y,"_reduce"),n(Z,"reduce"),n($,"generate");const ee=function*(){}.constructor;function ne(...e){if(0===e.length)return e=>e;const n=e[e.length-1]instanceof ee,t=e.length;return n?function*(n){let r=n;for(let o=0;o<t;o++)r=e[o](r);yield*r}:n=>{let r=n;for(let o=0;o<t;o++)r=e[o](r);return r}}function te(...e){if(0===e.length)throw new TypeError("pipe requires at least one argument");return t(e[0])?1===e.length?e[0]:ne(...e.slice(1))(e[0]):ne(...e)}n(ne,"chainGen"),n(te,"pipe");const re=te;export{d as Accessor,y as activity,re as chain,o as concat,D as count,J as deviation,R as distribution,u as each,f as entries,x as extent,l as filter,v as first,$ as generate,b as group,N as histogram,t as isSource,S as join,z as map,g as max,L as mean,V as median,A as min,E as normalize,te as pipe,X as quartile,Z as reduce,h as scalar,k as sensor,T as skip,C as sort,H as variance};
2
- //# sourceMappingURL=index.js.map
1
+ //#endregion
2
+ //#region src/activities/activity.ts
3
+ function isSource(e) {
4
+ return e && (typeof e[Symbol.iterator] == "function" || Array.isArray(e));
5
+ }
6
+ //#endregion
7
+ //#region src/activities/concat.ts
8
+ function concatGen(e) {
9
+ return function* (t) {
10
+ yield* t, yield* e;
11
+ };
12
+ }
13
+ function concat(e, t) {
14
+ return t === void 0 ? concatGen(e) : concatGen(t)(e);
15
+ }
16
+ //#endregion
17
+ //#region src/activities/each.ts
18
+ function eachGen(e) {
19
+ return function* (t) {
20
+ let n = -1;
21
+ for (let r of t) e(r, ++n), yield r;
22
+ };
23
+ }
24
+ function each(e, t) {
25
+ return isSource(e) ? eachGen(t)(e) : eachGen(e);
26
+ }
27
+ //#endregion
28
+ //#region src/activities/entries.ts
29
+ function entriesGen() {
30
+ return function* (e) {
31
+ let t = -1;
32
+ for (let n of e) yield [++t, n];
33
+ };
34
+ }
35
+ function entries(e) {
36
+ return e ? entriesGen()(e) : entriesGen();
37
+ }
38
+ //#endregion
39
+ //#region src/activities/filter.ts
40
+ function filterGen(e) {
41
+ return function* (t) {
42
+ let n = -1;
43
+ for (let r of t) e(r, ++n) && (yield r);
44
+ };
45
+ }
46
+ function filter(e, t) {
47
+ return isSource(e) ? filterGen(t)(e) : filterGen(e);
48
+ }
49
+ //#endregion
50
+ //#region src/activities/first.ts
51
+ function firstGen(e) {
52
+ return function* (t) {
53
+ let n = 0;
54
+ for (let r of t) if (yield r, ++n >= e) break;
55
+ };
56
+ }
57
+ function first(e, t) {
58
+ return isSource(e) ? firstGen(t)(e) : firstGen(e);
59
+ }
60
+ //#endregion
61
+ //#region src/activities/group.ts
62
+ function groupGen(e) {
63
+ return function* (t) {
64
+ let n = -1, r = {};
65
+ for (let i of t) {
66
+ let t = e(i, ++n);
67
+ r[t] || (r[t] = []), r[t].push(i);
68
+ }
69
+ for (let e in r) yield {
70
+ key: e,
71
+ value: r[e]
72
+ };
73
+ };
74
+ }
75
+ function group(e, t) {
76
+ return isSource(e) ? groupGen(t)(e) : groupGen(e);
77
+ }
78
+ //#endregion
79
+ //#region src/observers/observer.ts
80
+ function Accessor(e, t) {
81
+ let n = e();
82
+ return {
83
+ observe: (e, r) => {
84
+ n.observe(t(e, r), r);
85
+ },
86
+ peek: n.peek
87
+ };
88
+ }
89
+ function sensor(e) {
90
+ return each((t, n) => e.observe(t, n));
91
+ }
92
+ function activity(e) {
93
+ return function* (t) {
94
+ let n = -1;
95
+ for (let r of t) e.observe(r, ++n);
96
+ yield e.peek();
97
+ };
98
+ }
99
+ function scalar(e) {
100
+ return function(t) {
101
+ let n = -1;
102
+ for (let r of t) e.observe(r, ++n);
103
+ return e.peek();
104
+ };
105
+ }
106
+ //#endregion
107
+ //#region src/observers/max.ts
108
+ function _max() {
109
+ let e;
110
+ return {
111
+ observe: (t, n) => {
112
+ (n === 0 || e < t) && (e = t);
113
+ },
114
+ peek: () => e
115
+ };
116
+ }
117
+ function max(e) {
118
+ return e ? Accessor(_max, e) : _max();
119
+ }
120
+ //#endregion
121
+ //#region src/observers/min.ts
122
+ function _min() {
123
+ let e;
124
+ return {
125
+ observe: (t, n) => {
126
+ (n === 0 || e > t) && (e = t);
127
+ },
128
+ peek: () => e
129
+ };
130
+ }
131
+ function min(e) {
132
+ return e ? Accessor(_min, e) : _min();
133
+ }
134
+ //#endregion
135
+ //#region src/observers/extent.ts
136
+ function _extent() {
137
+ let e = min(), t = max();
138
+ return {
139
+ observe: (n, r) => {
140
+ e.observe(n, r), t.observe(n, r);
141
+ },
142
+ peek: () => [e.peek(), t.peek()]
143
+ };
144
+ }
145
+ function extent(e) {
146
+ return e ? Accessor(_extent, e) : _extent();
147
+ }
148
+ //#endregion
149
+ //#region src/activities/histogram.ts
150
+ function isOptionA(e) {
151
+ return e.buckets !== void 0;
152
+ }
153
+ function histogramGen(e, t) {
154
+ return function* (n) {
155
+ let r, i, a;
156
+ if (isOptionA(t)) {
157
+ a = Array.isArray(n) ? n : [...n];
158
+ let o = scalar(extent(e))(a);
159
+ if (o === void 0 || o[0] === void 0 || o[1] === void 0) {
160
+ let e = t.buckets;
161
+ for (let t = 0; t < e; ++t) yield {
162
+ from: NaN,
163
+ to: NaN,
164
+ value: []
165
+ };
166
+ return;
167
+ }
168
+ r = o[0];
169
+ let s = o[1], c = t.buckets;
170
+ i = (s - r) / c;
171
+ } else a = n, r = t.min, i = t.range;
172
+ let o = {}, s = 0, c = !1;
173
+ for (let t of a) {
174
+ c = !0;
175
+ let n = e(t), a = Math.floor((n - r) / i);
176
+ s < a && (s = a), o[a] === void 0 && (o[a] = []), o[a].push(t);
177
+ }
178
+ if (!c) return;
179
+ let l = o[s], u = r + s * i;
180
+ for (let t = 0; t <= s; ++t) {
181
+ if (t === s - 1 && l.every((t) => u === e(t))) {
182
+ yield {
183
+ from: r + t * i,
184
+ to: r + (t + 1) * i,
185
+ value: [...o[t] || [], ...l]
186
+ };
187
+ break;
188
+ }
189
+ yield {
190
+ from: r + t * i,
191
+ to: r + (t + 1) * i,
192
+ value: o[t] || []
193
+ };
194
+ }
195
+ };
196
+ }
197
+ function histogram(e, t, n) {
198
+ return isSource(e) ? histogramGen(t, n)(e) : histogramGen(e, t);
199
+ }
200
+ //#endregion
201
+ //#region src/activities/join.ts
202
+ function joinGen(e, t) {
203
+ let n = Array.isArray(e) ? e[Symbol.iterator]() : e;
204
+ return function* (e) {
205
+ let r = -1;
206
+ for (let i of e) yield t(i, n.next().value, ++r);
207
+ };
208
+ }
209
+ function join(e, t, n) {
210
+ return isSource(t) ? joinGen(t, n)(e) : joinGen(e, t);
211
+ }
212
+ //#endregion
213
+ //#region src/activities/map.ts
214
+ function mapGen(e) {
215
+ return function* (t) {
216
+ let n = -1;
217
+ for (let r of t) yield e(r, ++n);
218
+ };
219
+ }
220
+ function map(e, t) {
221
+ return isSource(e) ? mapGen(t)(e) : mapGen(e);
222
+ }
223
+ //#endregion
224
+ //#region src/activities/normalize.ts
225
+ function normalizeGen() {
226
+ let e = scalar(extent());
227
+ return function* (t) {
228
+ let n = Array.isArray(t) ? t : [...t], r = e(n), i = r[1] - r[0] || 1;
229
+ return yield* map((e) => (e - r[0]) / i)(n);
230
+ };
231
+ }
232
+ function normalize(e) {
233
+ return isSource(e) ? normalizeGen()(e) : normalizeGen();
234
+ }
235
+ //#endregion
236
+ //#region src/activities/skip.ts
237
+ function skipGen(e) {
238
+ return function* (t) {
239
+ let n = -1;
240
+ for (let r of t) ++n >= e && (yield r);
241
+ };
242
+ }
243
+ function skip(e, t) {
244
+ return isSource(e) ? skipGen(t)(e) : skipGen(e);
245
+ }
246
+ //#endregion
247
+ //#region src/activities/sort.ts
248
+ function sortGen(e) {
249
+ return function* (t) {
250
+ yield* (Array.isArray(t) ? t : [...t]).sort(e);
251
+ };
252
+ }
253
+ function sort(e, t) {
254
+ return isSource(e) ? sortGen(t)(e) : sortGen(e);
255
+ }
256
+ //#endregion
257
+ //#region src/observers/count.ts
258
+ function count() {
259
+ let e;
260
+ return {
261
+ observe: (t, n) => {
262
+ n === 0 && (e = 0), ++e;
263
+ },
264
+ peek: () => e
265
+ };
266
+ }
267
+ //#endregion
268
+ //#region src/observers/variance.ts
269
+ function _variance() {
270
+ let e, t, n;
271
+ return {
272
+ observe: (r, i) => {
273
+ i === 0 && (e = 0, t = 0, n = 0);
274
+ let a = r - t;
275
+ t += a / ++e, n += a * (r - t);
276
+ },
277
+ peek: () => e > 1 ? n / (e - 1) : void 0
278
+ };
279
+ }
280
+ function variance(e) {
281
+ return e ? Accessor(_variance, e) : _variance();
282
+ }
283
+ //#endregion
284
+ //#region src/observers/deviation.ts
285
+ function _deviation() {
286
+ let e = variance();
287
+ return {
288
+ observe: (t, n) => {
289
+ e.observe(t, n);
290
+ },
291
+ peek: () => {
292
+ let t = e.peek();
293
+ return t === void 0 ? t : Math.sqrt(t);
294
+ }
295
+ };
296
+ }
297
+ function deviation(e) {
298
+ return e ? Accessor(_deviation, e) : _deviation();
299
+ }
300
+ //#endregion
301
+ //#region src/observers/mean.ts
302
+ function _mean() {
303
+ let e, t;
304
+ return {
305
+ observe: (n, r) => {
306
+ r === 0 ? e = n : e += n, t = r;
307
+ },
308
+ peek: () => e / (t + 1)
309
+ };
310
+ }
311
+ function mean(e) {
312
+ return e ? Accessor(_mean, e) : _mean();
313
+ }
314
+ //#endregion
315
+ //#region src/observers/distribution.ts
316
+ function _distribution() {
317
+ let e = min(), t = max(), n = mean(), r = variance();
318
+ return {
319
+ observe: (i, a) => {
320
+ e.observe(i, a), t.observe(i, a), n.observe(i, a), r.observe(i, a);
321
+ },
322
+ peek: () => {
323
+ let i = e.peek();
324
+ if (i === void 0) return;
325
+ let a = r.peek();
326
+ return {
327
+ min: i,
328
+ max: t.peek(),
329
+ mean: n.peek(),
330
+ variance: a,
331
+ deviation: a === void 0 ? void 0 : Math.sqrt(a)
332
+ };
333
+ }
334
+ };
335
+ }
336
+ function distribution(e) {
337
+ return e ? Accessor(_distribution, e) : _distribution();
338
+ }
339
+ //#endregion
340
+ //#region src/observers/median.ts
341
+ function _median() {
342
+ let e;
343
+ return {
344
+ observe: (t, n) => {
345
+ n === 0 && (e = []), e.push(t);
346
+ },
347
+ peek: () => {
348
+ let t = e.sort((e, t) => e - t), n = t.length / 2;
349
+ return t.length % 2 == 0 ? (t[n - 1] + t[n]) / 2 : t[Math.floor(n)];
350
+ }
351
+ };
352
+ }
353
+ function median(e) {
354
+ return e ? Accessor(_median, e) : _median();
355
+ }
356
+ //#endregion
357
+ //#region src/observers/quartile.ts
358
+ function _quartile() {
359
+ let e;
360
+ return {
361
+ observe: (t, n) => {
362
+ n === 0 && (e = []), e.push(t);
363
+ },
364
+ peek: () => {
365
+ let t = e.sort((e, t) => e - t), n = t.length / 2, r, i, a;
366
+ if (!(t.length < 2)) return t.length % 2 == 0 ? (r = (t[n - 1] + t[n]) / 2, i = t.slice(0, n), a = t.slice(n)) : (r = t[Math.floor(n)], i = t.slice(0, Math.floor(n)), a = t.slice(Math.ceil(n))), [
367
+ t[0],
368
+ scalar(median())(i),
369
+ r,
370
+ scalar(median())(a),
371
+ t[t.length - 1]
372
+ ];
373
+ }
374
+ };
375
+ }
376
+ function quartile(e) {
377
+ return e ? Accessor(_quartile, e) : _quartile();
378
+ }
379
+ //#endregion
380
+ //#region src/observers/reduce.ts
381
+ function _reduce(e, t) {
382
+ let n;
383
+ return {
384
+ observe: (r, i) => {
385
+ n = i === 0 ? t === void 0 ? r : e(t, r, i) : e(n, r, i);
386
+ },
387
+ peek: () => n
388
+ };
389
+ }
390
+ function reduce(e, t) {
391
+ return _reduce(e, t);
392
+ }
393
+ //#endregion
394
+ //#region src/utils/generate.ts
395
+ function* generate(e, t) {
396
+ let n = -1;
397
+ for (; t === void 0 || ++n < t;) yield e();
398
+ }
399
+ //#endregion
400
+ //#region src/utils/pipe.ts
401
+ var e = (function* () {}).constructor;
402
+ function chainGen(...t) {
403
+ if (t.length === 0) return (e) => e;
404
+ let n = t[t.length - 1] instanceof e, r = t.length;
405
+ return n ? function* (e) {
406
+ let n = e;
407
+ for (let e = 0; e < r; e++) n = t[e](n);
408
+ yield* n;
409
+ } : (e) => {
410
+ let n = e;
411
+ for (let e = 0; e < r; e++) n = t[e](n);
412
+ return n;
413
+ };
414
+ }
415
+ function pipe(...e) {
416
+ if (e.length === 0) throw TypeError("pipe requires at least one argument");
417
+ return isSource(e[0]) ? e.length === 1 ? e[0] : chainGen(...e.slice(1))(e[0]) : chainGen(...e);
418
+ }
419
+ var t = pipe;
420
+ //#endregion
421
+ export { Accessor, activity, t as chain, concat, count, deviation, distribution, each, entries, extent, filter, first, generate, group, histogram, isSource, join, map, max, mean, median, min, normalize, pipe, quartile, reduce, scalar, sensor, skip, sort, variance };
422
+
423
+ //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/activities/activity.ts","../src/activities/concat.ts","../src/activities/each.ts","../src/activities/entries.ts","../src/activities/filter.ts","../src/activities/first.ts","../src/activities/group.ts","../src/observers/observer.ts","../src/observers/max.ts","../src/observers/min.ts","../src/observers/extent.ts","../src/activities/histogram.ts","../src/activities/join.ts","../src/activities/map.ts","../src/activities/normalize.ts","../src/activities/skip.ts","../src/activities/sort.ts","../src/observers/count.ts","../src/observers/variance.ts","../src/observers/deviation.ts","../src/observers/mean.ts","../src/observers/distribution.ts","../src/observers/median.ts","../src/observers/quartile.ts","../src/observers/reduce.ts","../src/utils/generate.ts","../src/utils/pipe.ts"],"sourcesContent":["export type Source<T> = IterableIterator<T> | T[];\nexport type IterableActivity<T, U = T> = (source: Source<T>) => IterableIterator<U>;\nexport type ScalarActivity<T, U = T> = (source: Source<T>) => U;\nexport type Activity<T, U = T> = IterableActivity<T, U> | ScalarActivity<T, U>;\n\nexport function isSource<T>(source: Source<T> | any): source is Source<T> {\n return source && (typeof source[Symbol.iterator] === \"function\" || Array.isArray(source));\n}\n","import { Source, IterableActivity } from \"./activity.ts\";\n\nfunction concatGen<T = any>(concatSource: Source<T>): IterableActivity<T> {\n return function* (source: Source<T>) {\n yield* source;\n yield* concatSource;\n };\n}\n\nexport function concat<T = any>(concatSource: Source<T>): IterableActivity<T, T>;\nexport function concat<T>(source: Source<T>, concatSource: Source<T>): IterableIterator<T>;\nexport function concat<T = any>(s_or_n: Source<T>, concatSource?: Source<T>): IterableActivity<T, T> | IterableIterator<T> {\n return concatSource !== undefined ? concatGen<T>(concatSource!)(s_or_n) : concatGen<T>(s_or_n);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type EachCallback<T> = (value: T, index: number) => void;\n\nfunction eachGen<T = any>(callbackFn: EachCallback<T>): IterableActivity<T> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n callbackFn(item, ++i);\n yield item;\n }\n };\n}\n\nexport function each<T = any>(callbackFn: EachCallback<T>): IterableActivity<T>;\nexport function each<T>(source: Source<T>, callbackFn: EachCallback<T>): IterableIterator<T>;\nexport function each<T>(s_or_cb: Source<T> | EachCallback<T>, callbackFn?: EachCallback<T>): IterableActivity<T> | IterableIterator<T> {\n return isSource(s_or_cb) ? eachGen(callbackFn!)(s_or_cb) : eachGen(s_or_cb);\n}\n","import { IterableActivity, Source } from \"./activity.ts\";\n\n// Array.entries\nfunction entriesGen<T = any>(): IterableActivity<T, [number, T]> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n yield [++i, item];\n }\n };\n}\n\nexport function entries<T = any>(): IterableActivity<T, [number, T]>;\nexport function entries<T>(source: Source<T>): IterableIterator<[number, T]>;\nexport function entries<T>(source?: Source<T>): IterableActivity<T, [number, T]> | IterableIterator<[number, T]> {\n return source ? entriesGen<T>()(source) : entriesGen<T>();\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type FilterCallback<T> = (value: T, index: number) => boolean;\n\nfunction filterGen<T = any>(callbackFn: FilterCallback<T>): IterableActivity<T> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n if (callbackFn(item, ++i)) {\n yield item;\n }\n }\n };\n}\n\nexport function filter<T = any>(callbackFn: FilterCallback<T>): IterableActivity<T>;\nexport function filter<T>(source: Source<T>, callbackFn: FilterCallback<T>): IterableIterator<T>;\nexport function filter<T>(s_or_cb: Source<T> | FilterCallback<T>, callbackFn?: FilterCallback<T>): IterableActivity<T> | IterableIterator<T> {\n return isSource(s_or_cb) ? filterGen(callbackFn!)(s_or_cb) : filterGen(s_or_cb);\n}\n","import { IterableActivity, isSource, Source } from \"./activity.ts\";\n\nfunction firstGen<T = any>(n: number): IterableActivity<T, T> {\n return function* (source: Source<T>) {\n let i = 0;\n for (const item of source) {\n yield item;\n if (++i >= n) {\n break;\n }\n }\n };\n}\n\nexport function first<T = any>(n: number): IterableActivity<T, T>;\nexport function first<T>(source: Source<T>, n: number): IterableIterator<T>;\nexport function first<T = any>(s_or_n: Source<T> | number, n?: number): IterableActivity<T, T> | IterableIterator<T> {\n if (!isSource(s_or_n)) return firstGen<T>(s_or_n);\n return firstGen<T>(n!)(s_or_n);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type GroupFn<T> = (row: T, index: number) => number | string;\nexport type GroupRow<T> = { key: string, value: T[] };\n\nfunction groupGen<T = any>(groupFn: GroupFn<T>): IterableActivity<T, GroupRow<T>> {\n return function* (source: Source<T>) {\n let i = -1;\n const group: { [key: string]: T[] } = {};\n for (const row of source) {\n const key = groupFn(row, ++i);\n if (!group[key]) {\n group[key] = [];\n }\n group[key].push(row);\n }\n for (const key in group) {\n yield { key, value: group[key] };\n }\n };\n}\n\nexport function group<T>(groupByFn: GroupFn<T>): IterableActivity<T, GroupRow<T>>;\nexport function group<T>(source: Source<T>, groupByFn: GroupFn<T>): IterableIterator<GroupRow<T>>;\nexport function group<T>(s_or_gbf: Source<T> | GroupFn<T>, groupByFn?: GroupFn<T>): IterableActivity<T, GroupRow<T>> | IterableIterator<GroupRow<T>> {\n return isSource(s_or_gbf) ? groupGen<T>(groupByFn!)(s_or_gbf) : groupGen<T>(s_or_gbf);\n}\n","import { Source } from \"../activities/activity.ts\";\nimport { each } from \"../activities/each.ts\";\n\nexport type AccessorT<T, U> = (row: T, currentIndex: number) => U;\n\nexport interface ObserverFactory<T, U> {\n (): Observer<T, U>;\n}\n\nexport interface Observer<T, U> {\n observe(r: T, idx: number): void;\n peek(): U;\n}\n\nexport function Accessor<T = any, U = any, V = any>(fof: ObserverFactory<V, U>, accesor: AccessorT<T, V>): Observer<T, U> {\n const s = fof();\n\n return {\n observe: (_: T, i: number) => {\n s.observe(accesor(_, i), i);\n },\n peek: s.peek\n };\n}\n\n// This is an pass through activity so a FlowObserver can be inserted into a pipeline ---\nexport function sensor<T, U = any>(s: Observer<T, U>) {\n return each((r, i) => s.observe(r, i));\n}\n\n// This converts a FlowObserver to an Activity ---\nexport function activity<T, U>(s: Observer<T, U>) {\n return function* (source: Source<T>) {\n let i = -1;\n for (const row of source) {\n s.observe(row, ++i);\n }\n yield s.peek();\n };\n}\n\n// This converts a FlowObserver to an ScalarActivity ---\nexport function scalar<T = any, U = any>(s: Observer<T, U>) {\n return function (source: Source<T>) {\n let i = -1;\n for (const row of source) {\n s.observe(row, ++i);\n }\n return s.peek();\n };\n}\n\n","import { Observer, Accessor, AccessorT } from \"./observer.ts\";\n\nfunction _max(): Observer<number, number> {\n let max: number;\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n max = value;\n } else if (max < value) {\n max = value;\n }\n },\n peek: () => max\n };\n}\n\nexport type MaxAccessor<T> = AccessorT<T, number>;\n\nexport function max(): Observer<number, number>;\nexport function max<T = any>(callbackFn: MaxAccessor<T>): Observer<T, number>;\nexport function max<T = any>(callbackFn?: MaxAccessor<T>): Observer<number, number> | Observer<T, number> {\n return callbackFn ? Accessor(_max, callbackFn) : _max();\n}\n","import { Observer, Accessor, AccessorT } from \"./observer.ts\";\n\nfunction _min(): Observer<number, number> {\n let min: number;\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n min = value;\n } else if (min > value) {\n min = value;\n }\n },\n peek: () => min\n };\n}\n\nexport type MinAccessor<T> = AccessorT<T, number>;\n\nexport function min(): Observer<number, number>;\nexport function min<T = any>(callbackFn: MinAccessor<T>): Observer<T, number>;\nexport function min<T = any>(callbackFn?: MinAccessor<T>): Observer<number, number> | Observer<T, number> {\n return callbackFn ? Accessor(_min, callbackFn) : _min();\n}\n","import { AccessorT, Observer, Accessor } from \"./observer.ts\";\nimport { max } from \"./max.ts\";\nimport { min } from \"./min.ts\";\n\nfunction _extent(): Observer<number, [number, number]> {\n const minFO = min();\n const maxFO = max();\n\n return {\n observe: (value: number, idx: number) => {\n minFO.observe(value, idx);\n maxFO.observe(value, idx);\n },\n peek: () => [minFO.peek(), maxFO.peek()]\n };\n}\n\nexport type ExtentAccessor<T> = AccessorT<T, number>;\n\nexport function extent(): Observer<number, [number, number]>;\nexport function extent<T = any>(callbackFn: ExtentAccessor<T>): Observer<T, [number, number]>;\nexport function extent<T = any>(callbackFn?: ExtentAccessor<T>): Observer<number, [number, number]> | Observer<T, [number, number]> {\n return callbackFn ? Accessor(_extent, callbackFn) : _extent();\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\nimport { extent } from \"../observers/extent.ts\";\nimport { scalar } from \"../observers/observer.ts\";\n\nexport type HistogramFn<T> = (row: T) => number;\nexport type HistogramRow<T> = { from: number, to: number, value: T[] };\nexport type OptionA = { buckets: number };\n/** \n * Histogram options specifying the minimum value and bucket range (size).\n * @property min - The minimum value for the first bucket's lower bound\n * @property range - The size/width of each bucket (distance between bucket boundaries)\n */\nexport type OptionB = { min: number, range: number };\nexport type Options = OptionA | OptionB;\n\nfunction isOptionA(_: Options): _ is OptionA {\n return (_ as OptionA).buckets !== undefined;\n}\n\nfunction histogramGen<T = any>(callbackFn: HistogramFn<T>, options: Options): IterableActivity<T, HistogramRow<T>> {\n return function* (_source: Source<T>) {\n let min: number;\n let bucketSize: number;\n\n let source;\n if (isOptionA(options)) {\n source = Array.isArray(_source) ? _source : [..._source];\n const minMax = scalar(extent(callbackFn))(source);\n if (minMax === undefined || minMax[0] === undefined || minMax[1] === undefined) {\n // For empty sources with buckets option, generate empty buckets with NaN bounds\n const buckets = options.buckets;\n for (let i = 0; i < buckets; ++i) {\n yield {\n from: NaN,\n to: NaN,\n value: []\n };\n }\n return;\n }\n min = minMax[0];\n const max = minMax[1];\n const buckets = options.buckets;\n bucketSize = (max - min) / buckets;\n } else {\n source = _source;\n min = options.min;\n bucketSize = options.range;\n }\n\n const histogram: { [key: number]: T[] } = {};\n\n let maxBucketID = 0;\n let hasData = false;\n for (const row of source) {\n hasData = true;\n const value = callbackFn(row);\n const bucketID = Math.floor((value - min) / bucketSize);\n if (maxBucketID < bucketID) {\n maxBucketID = bucketID;\n }\n if (histogram[bucketID] === undefined) {\n histogram[bucketID] = [];\n }\n histogram[bucketID].push(row);\n }\n\n // If no data, return empty for OptionB (min/range)\n if (!hasData) {\n return;\n }\n\n const lastBucket = histogram[maxBucketID];\n const from = min + maxBucketID * bucketSize;\n\n for (let i = 0; i <= maxBucketID; ++i) {\n // If all items in the last bucket match the \"to\" of the previous bucket, put them in there...\n if (i === maxBucketID - 1 && lastBucket.every(row => from === callbackFn(row))) {\n yield {\n from: min + i * bucketSize,\n to: min + (i + 1) * bucketSize,\n value: [...(histogram[i] || []), ...lastBucket]\n };\n break;\n }\n yield {\n from: min + i * bucketSize,\n to: min + (i + 1) * bucketSize,\n value: histogram[i] || []\n };\n }\n };\n}\n\nexport function histogram<T>(histogramByFn: HistogramFn<T>, options: Options): IterableActivity<T, HistogramRow<T>>;\nexport function histogram<T>(source: Source<T>, histogramByFn: HistogramFn<T>, options: Options): IterableIterator<HistogramRow<T>>;\nexport function histogram<T>(s_or_hf: Source<T> | HistogramFn<T>, hf_or_b: HistogramFn<T> | Options, options?: Options): IterableActivity<T, HistogramRow<T>> | IterableIterator<HistogramRow<T>> {\n return isSource(s_or_hf) ? histogramGen<T>(hf_or_b as HistogramFn<T>, options!)(s_or_hf) : histogramGen<T>(s_or_hf as HistogramFn<T>, hf_or_b as Options);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type JoinCallback<T, U, V> = (rowT: T, rowU: U, index: number) => V;\n\nfunction joinGen<T = any, U = any, V = any>(_sourceU: Source<U>, callbackFn: JoinCallback<T, U, V>): IterableActivity<T, V> {\n const sourceB = Array.isArray(_sourceU) ? _sourceU[Symbol.iterator]() : _sourceU;\n return function* (sourceT: Source<T>) {\n let i = -1;\n for (const item of sourceT) {\n yield callbackFn(item, sourceB.next().value, ++i);\n }\n };\n}\n\nexport function join<T, U, V>(sourceU: Source<U>, callbackFn: JoinCallback<T, U, V>): IterableActivity<T, V>;\nexport function join<T, U, V>(sourceU: Source<U>, callbackFn: JoinCallback<T, U, V>): IterableIterator<V>;\nexport function join<T, U, V>(sT_or_sU: Source<T> | Source<U>, sU_or_cb: Source<U> | JoinCallback<T, U, V>, callbackFn?: JoinCallback<T, U, V>): IterableActivity<T, V> | IterableIterator<V> {\n return isSource(sU_or_cb) ? joinGen(sU_or_cb, callbackFn!)(sT_or_sU as Source<T>) : joinGen(sT_or_sU as Source<U>, sU_or_cb);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type MapCallback<T, U> = (row: T, index: number) => U;\n\nfunction mapGen<T = any, U = any>(callbackFn: MapCallback<T, U>): IterableActivity<T, U> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n yield callbackFn(item, ++i);\n }\n };\n}\n\nexport function map<T, U>(callbackFn: MapCallback<T, U>): IterableActivity<T, U>;\nexport function map<T, U>(source: Source<T>, callbackFn: MapCallback<T, U>): IterableIterator<U>;\nexport function map<T, U>(s_or_cb: Source<T> | MapCallback<T, U>, callbackFn?: MapCallback<T, U>): IterableActivity<T, U> | IterableIterator<U> {\n return isSource(s_or_cb) ? mapGen(callbackFn!)(s_or_cb) : mapGen(s_or_cb);\n}\n","import { Source, IterableActivity, isSource } from \"./activity.ts\";\nimport { extent } from \"../observers/extent.ts\";\nimport { scalar } from \"../observers/observer.ts\";\nimport { map } from \"./map.ts\";\n\nfunction normalizeGen(): IterableActivity<number> {\n const calcExtent = scalar(extent());\n return function* (_source: Source<number>) {\n const source = Array.isArray(_source) ? _source : [..._source];\n const range = calcExtent(source);\n const divisor = (range[1] - range[0]) || 1;\n const normalizeMap = map((row: number) => (row - range[0]) / divisor);\n return yield* normalizeMap(source);\n };\n}\n\nexport function normalize(): IterableActivity<number>;\nexport function normalize(source: Source<number>): IterableIterator<number>;\nexport function normalize(s_or_undef?: Source<number>): IterableActivity<number> | IterableIterator<number> {\n return isSource(s_or_undef) ? normalizeGen()(s_or_undef) : normalizeGen();\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nfunction skipGen<T = any>(n: number): IterableActivity<T, T> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n if (++i >= n) {\n yield item;\n }\n }\n };\n}\n\nexport function skip<T = any>(n: number): IterableActivity<T, T>;\nexport function skip<T>(source: Source<T>, n: number): IterableIterator<T>;\nexport function skip<T = any>(s_or_n: Source<T> | number, n?: number): IterableActivity<T, T> | IterableIterator<T> {\n return isSource(s_or_n) ? skipGen<T>(n!)(s_or_n) : skipGen<T>(s_or_n);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type SortCallback<T> = (a: T, b: T) => number;\n\nfunction sortGen<T = any>(compareFn?: SortCallback<T>): IterableActivity<T> {\n return function* (source: Source<T>) {\n yield* (Array.isArray(source) ? source : [...source]).sort(compareFn);\n };\n}\n\nexport function sort<T = any>(callbackFn: SortCallback<T>): IterableActivity<T>;\nexport function sort<T = any>(source: Source<T>, callbackFn: SortCallback<T>): IterableIterator<T>;\nexport function sort<T = any>(s_or_cb: Source<T> | SortCallback<T>, callbackFn?: SortCallback<T>): IterableActivity<T> | IterableIterator<T> {\n return isSource(s_or_cb) ? sortGen(callbackFn!)(s_or_cb) : sortGen(s_or_cb);\n}\n\n","import { Observer } from \"./observer.ts\";\n\nexport function count<T = any>(): Observer<T, number> {\n let count: number;\n\n return {\n observe: (value: T, idx: number) => {\n if (idx === 0) {\n count = 0;\n }\n ++count;\n },\n peek: () => count\n };\n}\n","import { AccessorT, Observer, Accessor } from \"./observer.ts\";\n\nfunction _variance(): Observer<number, number | undefined> {\n let count: number;\n let mean: number;\n let sum: number;\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n count = 0;\n mean = 0;\n sum = 0;\n }\n const delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n },\n peek: () => count > 1 ? sum / (count - 1) : undefined\n };\n}\n\nexport type VarianceAccessor<T> = AccessorT<T, number>;\n\nexport function variance(): Observer<number, number | undefined>;\nexport function variance<T = any>(callbackFn: VarianceAccessor<T>): Observer<T, number | undefined>;\nexport function variance<T = any>(callbackFn?: VarianceAccessor<T>): Observer<number, number | undefined> | Observer<T, number | undefined> {\n return callbackFn ? Accessor(_variance, callbackFn) : _variance();\n}\n","import { variance } from \"./variance.ts\";\nimport { AccessorT, Observer, Accessor } from \"./observer.ts\";\n\nfunction _deviation(): Observer<number, number | undefined> {\n const v = variance();\n\n return {\n observe: (value: number, idx: number) => {\n v.observe(value, idx);\n },\n peek: () => {\n const variance = v.peek();\n return variance !== undefined ? Math.sqrt(variance) : variance;\n }\n };\n}\n\nexport type DeviationAccessor<T> = AccessorT<T, number>;\n\nexport function deviation(): Observer<number, number | undefined>;\nexport function deviation<T = any>(callbackFn: DeviationAccessor<T>): Observer<T, number | undefined>;\nexport function deviation<T = any>(callbackFn?: DeviationAccessor<T>): Observer<number, number | undefined> | Observer<T, number | undefined> {\n return callbackFn ? Accessor(_deviation, callbackFn) : _deviation();\n}\n","import { Observer, Accessor } from \"./observer.ts\";\n\nfunction _mean(): Observer<number, number> {\n let total: number;\n let count: number;\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n total = value;\n } else {\n total += value;\n }\n count = idx;\n },\n peek: () => total / (count + 1)\n };\n}\n\nexport type MeanAccessor<T> = (row: T, currentIndex: number) => number;\n\nexport function mean(): Observer<number, number>;\nexport function mean<T = any>(callbackFn: MeanAccessor<T>): Observer<T, number>;\nexport function mean<T = any>(callbackFn?: MeanAccessor<T>): Observer<number, number> | Observer<T, number> {\n return callbackFn ? Accessor(_mean, callbackFn) : _mean();\n}\n","import { max } from \"./max.ts\";\nimport { min } from \"./min.ts\";\nimport { mean } from \"./mean.ts\";\nimport { variance } from \"./variance.ts\";\nimport { Observer, Accessor } from \"./observer.ts\";\n\nexport type DistributionCallback<T> = (row: T, currentIndex: number) => number;\n\nexport type DistributionT = {\n min: number,\n mean: number,\n max: number,\n deviation: number | undefined,\n variance: number | undefined\n} | undefined;\n\nfunction _distribution(): Observer<number, DistributionT> {\n const minFO = min();\n const maxFO = max();\n const meanFO = mean();\n const varianceFO = variance();\n\n return {\n observe: (value: number, idx: number) => {\n minFO.observe(value, idx);\n maxFO.observe(value, idx);\n meanFO.observe(value, idx);\n varianceFO.observe(value, idx);\n },\n peek: () => {\n const minResult = minFO.peek();\n if (minResult === undefined) return undefined;\n const varianceResult = varianceFO.peek();\n return {\n min: minResult,\n max: maxFO.peek(),\n mean: meanFO.peek(),\n variance: varianceResult,\n deviation: varianceResult !== undefined ? Math.sqrt(varianceResult) : undefined\n };\n }\n };\n}\n\nexport type DistributionAccessor<T> = (row: T, currentIndex: number) => number;\n\nexport function distribution(): Observer<number, DistributionT>;\nexport function distribution<T = any>(callbackFn: DistributionAccessor<T>): Observer<T, DistributionT>;\nexport function distribution<T = any>(callbackFn?: DistributionAccessor<T>): Observer<number, DistributionT> | Observer<T, DistributionT> {\n return callbackFn ? Accessor(_distribution, callbackFn) : _distribution();\n}\n","import { AccessorT, Observer, Accessor } from \"./observer.ts\";\n\nfunction _median(): Observer<number, number> {\n let values: number[];\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n values = [];\n }\n values.push(value);\n },\n peek: () => {\n const sorted = values.sort((l, r) => l - r);\n const mid = sorted.length / 2;\n if (sorted.length % 2 === 0) {\n return (sorted[mid - 1] + sorted[mid]) / 2;\n } else {\n return sorted[Math.floor(mid)];\n }\n }\n };\n}\n\nexport type MedianAccessor<T> = AccessorT<T, number>;\n\nexport function median(): Observer<number, number>;\nexport function median<T = any>(callbackFn: MedianAccessor<T>): Observer<T, number>;\nexport function median<T = any>(callbackFn?: MedianAccessor<T>): Observer<number, number> | Observer<T, number> {\n return callbackFn ? Accessor(_median, callbackFn) : _median();\n}","import { median } from \"./median.ts\";\nimport { AccessorT, Observer, Accessor, scalar } from \"./observer.ts\";\n\nexport type QuartileAccessor<T> = AccessorT<T, number>;\n\nexport type QuartileT = [number, number, number, number, number] | undefined;\n\nfunction _quartile(): Observer<number, QuartileT> {\n let values: number[];\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n values = [];\n }\n values.push(value);\n },\n peek: () => {\n const sorted = values.sort((l, r) => l - r);\n const mid = sorted.length / 2;\n let medianVal: number;\n let lower: number[];\n let upper: number[];\n if (sorted.length < 2) {\n return undefined;\n } else if (sorted.length % 2 === 0) {\n medianVal = (sorted[mid - 1] + sorted[mid]) / 2;\n lower = sorted.slice(0, mid);\n upper = sorted.slice(mid);\n } else {\n medianVal = sorted[Math.floor(mid)];\n lower = sorted.slice(0, Math.floor(mid));\n upper = sorted.slice(Math.ceil(mid));\n }\n return [sorted[0], scalar(median())(lower)!, medianVal, scalar(median())(upper)!, sorted[sorted.length - 1]];\n }\n };\n}\n\nexport function quartile(): Observer<number, QuartileT>;\nexport function quartile<T = any>(callbackFn: QuartileAccessor<T>): Observer<T, QuartileT>;\nexport function quartile<T = any>(callbackFn?: QuartileAccessor<T>): Observer<number, QuartileT> | Observer<T, QuartileT> {\n return callbackFn ? Accessor(_quartile, callbackFn) : _quartile();\n}","import { Observer } from \"./observer.ts\";\n\nexport type ReduceCallback<T, U> = (previousValue: U, currentValue: T, currentIndex: number) => U;\n\nfunction _reduce<T, U>(callback: ReduceCallback<T, U>, initialValue?: U): Observer<T, U> {\n let reduced: U;\n\n return {\n observe: (value: T, idx: number) => {\n if (idx === 0) {\n reduced = initialValue === undefined ? (value as unknown as U) : callback(initialValue, value, idx);\n } else {\n reduced = callback(reduced, value, idx);\n }\n },\n peek: () => reduced\n };\n}\n\nexport function reduce<T = any, U = any>(callbackFn: ReduceCallback<T, U>, initialValue?: U): Observer<T, U> {\n return _reduce(callbackFn, initialValue);\n}\n","export function* generate<U>(generatorFn: () => U, maxLen?: number): IterableIterator<U> {\n let i = -1;\n while (maxLen === undefined || ++i < maxLen) {\n yield generatorFn();\n }\n}\n","import { IterableActivity, ScalarActivity, Source, isSource } from \"../activities/activity.ts\";\n\n// =============================================================================\n// Constants and Base Types\n// =============================================================================\n\nconst GeneratorFunction = (function* () { }).constructor;\n\ntype AnyIterableActivity = IterableActivity<any, any>;\ntype AnyScalarActivity = ScalarActivity<any, any>;\ntype AnyActivity = AnyIterableActivity | AnyScalarActivity;\n\n// =============================================================================\n// Type Utilities for Activity Analysis\n// =============================================================================\n\ntype ActivityIn<A extends AnyActivity> = Parameters<A>[0] extends Source<infer Input> ? Input : never;\ntype ActivityOut<A extends AnyActivity> = ReturnType<A> extends IterableIterator<infer Output> ? Output : ReturnType<A>;\ntype ActivityIsScalar<A extends AnyActivity> = ReturnType<A> extends IterableIterator<any> ? false : true;\n\ntype FirstActivity<Activities extends readonly [AnyActivity, ...AnyActivity[]]> = Activities[0];\n\n// =============================================================================\n// Type Resolution for Activity Chains (Without Source)\n// =============================================================================\n\n/**\n * Recursively resolves the output type of a chain of activities starting from an iterable activity.\n * Validates that each activity's input type matches the previous activity's output type.\n */\n\n// Handle a scalar (non-iterable) activity in the chain\ntype ResolveScalarActivity<CurrentOut, InitialIn, Next extends AnyActivity, Rest extends readonly AnyActivity[]> =\n CurrentOut extends ActivityIn<Next>\n ? Rest extends []\n ? { kind: \"scalar\"; in: InitialIn; out: ActivityOut<Next> }\n : { kind: \"error\" } // Scalar activities must be terminal\n : { kind: \"error\" }; // Type mismatch\n\n// Handle an iterable activity in the chain\ntype ResolveIterableActivity<CurrentOut, InitialIn, Next extends AnyActivity, Rest extends readonly AnyActivity[]> =\n CurrentOut extends ActivityIn<Next>\n ? ResolveIterableTail<ActivityOut<Next>, InitialIn, Rest>\n : { kind: \"error\" }; // Type mismatch\n\n// Process the next activity in the chain\ntype ResolveNextActivity<CurrentOut, InitialIn, Next extends AnyActivity, Rest extends readonly AnyActivity[]> =\n ActivityIsScalar<Next> extends true\n ? ResolveScalarActivity<CurrentOut, InitialIn, Next, Rest>\n : ResolveIterableActivity<CurrentOut, InitialIn, Next, Rest>;\n\n// Check if we've reached the end of the activity chain\ntype ResolveIterableTail<CurrentOut, InitialIn, Tail extends readonly AnyActivity[]> =\n Tail extends []\n ? { kind: \"iterable\"; in: InitialIn; out: CurrentOut }\n : Tail extends readonly [infer Next extends AnyActivity, ...infer Rest extends readonly AnyActivity[]]\n ? ResolveNextActivity<CurrentOut, InitialIn, Next, Rest>\n : { kind: \"error\" };\n\n/**\n * Resolves the complete type signature for a chain of activities without a source.\n * Determines the input, output, and whether the final result is scalar or iterable.\n */\n\n// Handle when the first activity is scalar (must be the only activity)\ntype ResolveFirstScalarActivity<First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n Rest extends []\n ? { kind: \"scalar\"; in: ActivityIn<First>; out: ActivityOut<First> }\n : { kind: \"error\" }; // Scalar activities cannot be followed by others\n\n// Handle when the first activity is iterable\ntype ResolveFirstIterableActivity<First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n Rest extends []\n ? { kind: \"iterable\"; in: ActivityIn<First>; out: ActivityOut<First> }\n : ResolveIterableTail<ActivityOut<First>, ActivityIn<First>, Rest>;\n\n// Determine how to handle the first activity based on whether it's scalar or iterable\ntype ResolveFirstActivity<First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n ActivityIsScalar<First> extends true\n ? ResolveFirstScalarActivity<First, Rest>\n : ResolveFirstIterableActivity<First, Rest>;\n\ntype ResolveActivities<Activities extends readonly [AnyActivity, ...AnyActivity[]]> =\n Activities extends readonly [infer First extends AnyActivity, ...infer Rest extends readonly AnyActivity[]]\n ? ResolveFirstActivity<First, Rest>\n : { kind: \"error\" };\n\n/**\n * Return type for pipe when called without a source - returns a reusable activity function.\n */\ntype PipeWithoutSourceReturn<Activities extends readonly [AnyActivity, ...AnyActivity[]]> =\n ResolveActivities<Activities> extends infer Result\n ? Result extends { kind: \"iterable\"; in: infer In; out: infer Out }\n ? IterableActivity<In & ActivityIn<FirstActivity<Activities>>, Out>\n : Result extends { kind: \"scalar\"; in: infer In; out: infer Out }\n ? ScalarActivity<In & ActivityIn<FirstActivity<Activities>>, Out>\n : never\n : never;\n\n// =============================================================================\n// Type Resolution for Activity Chains (With Source)\n// =============================================================================\n\n/**\n * Resolves the output type when a source is provided as the first argument to pipe.\n * Validates that the source type is compatible with the first activity's input.\n */\n\n// Extract the final result kind from ResolveIterableTail\ntype ExtractFinalResultKind<Result> =\n Result extends { kind: \"iterable\"; out: infer Out }\n ? { kind: \"iterable\"; out: Out }\n : Result extends { kind: \"scalar\"; out: infer Out }\n ? { kind: \"scalar\"; out: Out }\n : { kind: \"error\" };\n\n// Handle when the first activity after source is scalar\ntype ResolveSourceWithScalarActivity<TSource, First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n TSource extends ActivityIn<First>\n ? Rest extends []\n ? { kind: \"scalar\"; out: ActivityOut<First> }\n : { kind: \"error\" } // Scalar activities must be terminal\n : { kind: \"error\" }; // Type mismatch\n\n// Handle when the first activity after source is iterable\ntype ResolveSourceWithIterableActivity<TSource, First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n TSource extends ActivityIn<First>\n ? Rest extends []\n ? { kind: \"iterable\"; out: ActivityOut<First> }\n : ExtractFinalResultKind<ResolveIterableTail<ActivityOut<First>, ActivityIn<First>, Rest>>\n : { kind: \"error\" }; // Type mismatch\n\n// Determine how to handle the source with the first activity\ntype ResolveSourceWithFirstActivity<TSource, First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n ActivityIsScalar<First> extends true\n ? ResolveSourceWithScalarActivity<TSource, First, Rest>\n : ResolveSourceWithIterableActivity<TSource, First, Rest>;\n\ntype ResolveSourceActivities<TSource, Activities extends readonly AnyActivity[]> =\n Activities extends []\n ? { kind: \"source\"; out: TSource }\n : Activities extends readonly [infer First extends AnyActivity, ...infer Rest extends readonly AnyActivity[]]\n ? ResolveSourceWithFirstActivity<TSource, First, Rest>\n : { kind: \"error\" };\n\n/**\n * Return type for pipe when called with a source - executes immediately and returns the result.\n */\ntype PipeWithSourceReturn<TSource, Activities extends readonly AnyActivity[]> =\n ResolveSourceActivities<TSource, Activities> extends infer Result\n ? Result extends { kind: \"iterable\"; out: infer Out }\n ? IterableIterator<Out>\n : Result extends { kind: \"scalar\"; out: infer Out }\n ? Out\n : Result extends { kind: \"source\"; out: infer Out }\n ? Source<Out>\n : never\n : never;\n\n// =============================================================================\n// Runtime Implementation\n// =============================================================================\n\n/**\n * Internal helper that chains activities together at runtime.\n * Returns a function that accepts a source and applies all activities in sequence.\n * Handles both generator (iterable) and scalar activities appropriately.\n */\nfunction chainGen(...activities: AnyActivity[]) {\n if (activities.length === 0) {\n return <T>(source: Source<T>) => source;\n }\n\n const isGenerator = activities[activities.length - 1] instanceof GeneratorFunction;\n const len = activities.length;\n\n if (isGenerator) {\n return function* (source: Source<unknown>) {\n let tail: unknown = source;\n for (let i = 0; i < len; i++) {\n tail = activities[i](tail as Source<unknown>);\n }\n yield* tail as IterableIterator<unknown>;\n };\n }\n\n return (source: Source<unknown>) => {\n let tail: unknown = source;\n for (let i = 0; i < len; i++) {\n tail = activities[i](tail as Source<unknown>);\n }\n return tail;\n };\n}\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Pipes activities together to create a data processing pipeline.\n * \n * Two usage modes:\n * 1. Without source: pipe(activity1, activity2, ...) - returns a reusable activity function\n * 2. With source: pipe(source, activity1, activity2, ...) - executes immediately and returns result\n * \n * Activities are chained left-to-right, with type checking ensuring output of each activity\n * matches the input of the next.\n */\nexport function pipe<const Activities extends readonly [AnyActivity, ...AnyActivity[]]>(...activities: Activities): PipeWithoutSourceReturn<Activities>;\nexport function pipe<TSource, const Activities extends readonly AnyActivity[]>(source: Source<TSource>, ...activities: Activities): PipeWithSourceReturn<TSource, Activities>;\nexport function pipe(...args: any[]): any {\n if (args.length === 0) {\n throw new TypeError(\"pipe requires at least one argument\");\n }\n\n // Handle source-based invocation\n if (isSource(args[0])) {\n return args.length === 1 ? args[0] : chainGen(...args.slice(1))(args[0]);\n }\n\n // Handle activity-based invocation\n return chainGen(...args);\n}\n\n// =============================================================================\n// Backward Compatibility\n// =============================================================================\n\n/**\n * @deprecated Use pipe instead. Maintained for backward compatibility.\n */\nexport const chain = pipe;\n"],"names":["isSource","source","Symbol","iterator","Array","isArray","concatGen","concatSource","concat","s_or_n","eachGen","callbackFn","i","item","each","s_or_cb","entriesGen","entries","filterGen","filter","firstGen","n","first","groupGen","groupFn","group","row","key","push","value","s_or_gbf","groupByFn","Accessor","fof","accesor","s","observe","__name","_","peek","sensor","r","activity","scalar","_max","max","idx","_min","min","_extent","minFO","maxFO","extent","isOptionA","buckets","histogramGen","options","_source","bucketSize","minMax","from","NaN","to","range","histogram","maxBucketID","hasData","bucketID","Math","floor","lastBucket","every","s_or_hf","hf_or_b","joinGen","_sourceU","sourceB","sourceT","next","join","sT_or_sU","sU_or_cb","mapGen","map","normalizeGen","calcExtent","divisor","normalizeMap","normalize","s_or_undef","skipGen","skip","sortGen","compareFn","sort","count","_variance","mean","sum","delta","variance","_deviation","v","sqrt","deviation","_mean","total","_distribution","meanFO","varianceFO","minResult","varianceResult","distribution","_median","values","sorted","l","mid","length","median","_quartile","medianVal","lower","upper","slice","ceil","quartile","_reduce","callback","initialValue","reduced","reduce","generate","generatorFn","maxLen","GeneratorFunction","constructor","chainGen","activities","isGenerator","len","tail","pipe","args","TypeError","chain"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/activities/activity.ts","../src/activities/concat.ts","../src/activities/each.ts","../src/activities/entries.ts","../src/activities/filter.ts","../src/activities/first.ts","../src/activities/group.ts","../src/observers/observer.ts","../src/observers/max.ts","../src/observers/min.ts","../src/observers/extent.ts","../src/activities/histogram.ts","../src/activities/join.ts","../src/activities/map.ts","../src/activities/normalize.ts","../src/activities/skip.ts","../src/activities/sort.ts","../src/observers/count.ts","../src/observers/variance.ts","../src/observers/deviation.ts","../src/observers/mean.ts","../src/observers/distribution.ts","../src/observers/median.ts","../src/observers/quartile.ts","../src/observers/reduce.ts","../src/utils/generate.ts","../src/utils/pipe.ts"],"sourcesContent":["export type Source<T> = IterableIterator<T> | T[];\nexport type IterableActivity<T, U = T> = (source: Source<T>) => IterableIterator<U>;\nexport type ScalarActivity<T, U = T> = (source: Source<T>) => U;\nexport type Activity<T, U = T> = IterableActivity<T, U> | ScalarActivity<T, U>;\n\nexport function isSource<T>(source: Source<T> | any): source is Source<T> {\n return source && (typeof source[Symbol.iterator] === \"function\" || Array.isArray(source));\n}\n","import { Source, IterableActivity } from \"./activity.ts\";\n\nfunction concatGen<T = any>(concatSource: Source<T>): IterableActivity<T> {\n return function* (source: Source<T>) {\n yield* source;\n yield* concatSource;\n };\n}\n\nexport function concat<T = any>(concatSource: Source<T>): IterableActivity<T, T>;\nexport function concat<T>(source: Source<T>, concatSource: Source<T>): IterableIterator<T>;\nexport function concat<T = any>(s_or_n: Source<T>, concatSource?: Source<T>): IterableActivity<T, T> | IterableIterator<T> {\n return concatSource !== undefined ? concatGen<T>(concatSource!)(s_or_n) : concatGen<T>(s_or_n);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type EachCallback<T> = (value: T, index: number) => void;\n\nfunction eachGen<T = any>(callbackFn: EachCallback<T>): IterableActivity<T> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n callbackFn(item, ++i);\n yield item;\n }\n };\n}\n\nexport function each<T = any>(callbackFn: EachCallback<T>): IterableActivity<T>;\nexport function each<T>(source: Source<T>, callbackFn: EachCallback<T>): IterableIterator<T>;\nexport function each<T>(s_or_cb: Source<T> | EachCallback<T>, callbackFn?: EachCallback<T>): IterableActivity<T> | IterableIterator<T> {\n return isSource(s_or_cb) ? eachGen(callbackFn!)(s_or_cb) : eachGen(s_or_cb);\n}\n","import { IterableActivity, Source } from \"./activity.ts\";\n\n// Array.entries\nfunction entriesGen<T = any>(): IterableActivity<T, [number, T]> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n yield [++i, item];\n }\n };\n}\n\nexport function entries<T = any>(): IterableActivity<T, [number, T]>;\nexport function entries<T>(source: Source<T>): IterableIterator<[number, T]>;\nexport function entries<T>(source?: Source<T>): IterableActivity<T, [number, T]> | IterableIterator<[number, T]> {\n return source ? entriesGen<T>()(source) : entriesGen<T>();\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type FilterCallback<T> = (value: T, index: number) => boolean;\n\nfunction filterGen<T = any>(callbackFn: FilterCallback<T>): IterableActivity<T> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n if (callbackFn(item, ++i)) {\n yield item;\n }\n }\n };\n}\n\nexport function filter<T = any>(callbackFn: FilterCallback<T>): IterableActivity<T>;\nexport function filter<T>(source: Source<T>, callbackFn: FilterCallback<T>): IterableIterator<T>;\nexport function filter<T>(s_or_cb: Source<T> | FilterCallback<T>, callbackFn?: FilterCallback<T>): IterableActivity<T> | IterableIterator<T> {\n return isSource(s_or_cb) ? filterGen(callbackFn!)(s_or_cb) : filterGen(s_or_cb);\n}\n","import { IterableActivity, isSource, Source } from \"./activity.ts\";\n\nfunction firstGen<T = any>(n: number): IterableActivity<T, T> {\n return function* (source: Source<T>) {\n let i = 0;\n for (const item of source) {\n yield item;\n if (++i >= n) {\n break;\n }\n }\n };\n}\n\nexport function first<T = any>(n: number): IterableActivity<T, T>;\nexport function first<T>(source: Source<T>, n: number): IterableIterator<T>;\nexport function first<T = any>(s_or_n: Source<T> | number, n?: number): IterableActivity<T, T> | IterableIterator<T> {\n if (!isSource(s_or_n)) return firstGen<T>(s_or_n);\n return firstGen<T>(n!)(s_or_n);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type GroupFn<T> = (row: T, index: number) => number | string;\nexport type GroupRow<T> = { key: string, value: T[] };\n\nfunction groupGen<T = any>(groupFn: GroupFn<T>): IterableActivity<T, GroupRow<T>> {\n return function* (source: Source<T>) {\n let i = -1;\n const group: { [key: string]: T[] } = {};\n for (const row of source) {\n const key = groupFn(row, ++i);\n if (!group[key]) {\n group[key] = [];\n }\n group[key].push(row);\n }\n for (const key in group) {\n yield { key, value: group[key] };\n }\n };\n}\n\nexport function group<T>(groupByFn: GroupFn<T>): IterableActivity<T, GroupRow<T>>;\nexport function group<T>(source: Source<T>, groupByFn: GroupFn<T>): IterableIterator<GroupRow<T>>;\nexport function group<T>(s_or_gbf: Source<T> | GroupFn<T>, groupByFn?: GroupFn<T>): IterableActivity<T, GroupRow<T>> | IterableIterator<GroupRow<T>> {\n return isSource(s_or_gbf) ? groupGen<T>(groupByFn!)(s_or_gbf) : groupGen<T>(s_or_gbf);\n}\n","import { Source } from \"../activities/activity.ts\";\nimport { each } from \"../activities/each.ts\";\n\nexport type AccessorT<T, U> = (row: T, currentIndex: number) => U;\n\nexport interface ObserverFactory<T, U> {\n (): Observer<T, U>;\n}\n\nexport interface Observer<T, U> {\n observe(r: T, idx: number): void;\n peek(): U;\n}\n\nexport function Accessor<T = any, U = any, V = any>(fof: ObserverFactory<V, U>, accesor: AccessorT<T, V>): Observer<T, U> {\n const s = fof();\n\n return {\n observe: (_: T, i: number) => {\n s.observe(accesor(_, i), i);\n },\n peek: s.peek\n };\n}\n\n// This is an pass through activity so a FlowObserver can be inserted into a pipeline ---\nexport function sensor<T, U = any>(s: Observer<T, U>) {\n return each((r, i) => s.observe(r, i));\n}\n\n// This converts a FlowObserver to an Activity ---\nexport function activity<T, U>(s: Observer<T, U>) {\n return function* (source: Source<T>) {\n let i = -1;\n for (const row of source) {\n s.observe(row, ++i);\n }\n yield s.peek();\n };\n}\n\n// This converts a FlowObserver to an ScalarActivity ---\nexport function scalar<T = any, U = any>(s: Observer<T, U>) {\n return function (source: Source<T>) {\n let i = -1;\n for (const row of source) {\n s.observe(row, ++i);\n }\n return s.peek();\n };\n}\n\n","import { Observer, Accessor, AccessorT } from \"./observer.ts\";\n\nfunction _max(): Observer<number, number> {\n let max: number;\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n max = value;\n } else if (max < value) {\n max = value;\n }\n },\n peek: () => max\n };\n}\n\nexport type MaxAccessor<T> = AccessorT<T, number>;\n\nexport function max(): Observer<number, number>;\nexport function max<T = any>(callbackFn: MaxAccessor<T>): Observer<T, number>;\nexport function max<T = any>(callbackFn?: MaxAccessor<T>): Observer<number, number> | Observer<T, number> {\n return callbackFn ? Accessor(_max, callbackFn) : _max();\n}\n","import { Observer, Accessor, AccessorT } from \"./observer.ts\";\n\nfunction _min(): Observer<number, number> {\n let min: number;\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n min = value;\n } else if (min > value) {\n min = value;\n }\n },\n peek: () => min\n };\n}\n\nexport type MinAccessor<T> = AccessorT<T, number>;\n\nexport function min(): Observer<number, number>;\nexport function min<T = any>(callbackFn: MinAccessor<T>): Observer<T, number>;\nexport function min<T = any>(callbackFn?: MinAccessor<T>): Observer<number, number> | Observer<T, number> {\n return callbackFn ? Accessor(_min, callbackFn) : _min();\n}\n","import { AccessorT, Observer, Accessor } from \"./observer.ts\";\nimport { max } from \"./max.ts\";\nimport { min } from \"./min.ts\";\n\nfunction _extent(): Observer<number, [number, number]> {\n const minFO = min();\n const maxFO = max();\n\n return {\n observe: (value: number, idx: number) => {\n minFO.observe(value, idx);\n maxFO.observe(value, idx);\n },\n peek: () => [minFO.peek(), maxFO.peek()]\n };\n}\n\nexport type ExtentAccessor<T> = AccessorT<T, number>;\n\nexport function extent(): Observer<number, [number, number]>;\nexport function extent<T = any>(callbackFn: ExtentAccessor<T>): Observer<T, [number, number]>;\nexport function extent<T = any>(callbackFn?: ExtentAccessor<T>): Observer<number, [number, number]> | Observer<T, [number, number]> {\n return callbackFn ? Accessor(_extent, callbackFn) : _extent();\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\nimport { extent } from \"../observers/extent.ts\";\nimport { scalar } from \"../observers/observer.ts\";\n\nexport type HistogramFn<T> = (row: T) => number;\nexport type HistogramRow<T> = { from: number, to: number, value: T[] };\nexport type OptionA = { buckets: number };\n/** \n * Histogram options specifying the minimum value and bucket range (size).\n * @property min - The minimum value for the first bucket's lower bound\n * @property range - The size/width of each bucket (distance between bucket boundaries)\n */\nexport type OptionB = { min: number, range: number };\nexport type Options = OptionA | OptionB;\n\nfunction isOptionA(_: Options): _ is OptionA {\n return (_ as OptionA).buckets !== undefined;\n}\n\nfunction histogramGen<T = any>(callbackFn: HistogramFn<T>, options: Options): IterableActivity<T, HistogramRow<T>> {\n return function* (_source: Source<T>) {\n let min: number;\n let bucketSize: number;\n\n let source;\n if (isOptionA(options)) {\n source = Array.isArray(_source) ? _source : [..._source];\n const minMax = scalar(extent(callbackFn))(source);\n if (minMax === undefined || minMax[0] === undefined || minMax[1] === undefined) {\n // For empty sources with buckets option, generate empty buckets with NaN bounds\n const buckets = options.buckets;\n for (let i = 0; i < buckets; ++i) {\n yield {\n from: NaN,\n to: NaN,\n value: []\n };\n }\n return;\n }\n min = minMax[0];\n const max = minMax[1];\n const buckets = options.buckets;\n bucketSize = (max - min) / buckets;\n } else {\n source = _source;\n min = options.min;\n bucketSize = options.range;\n }\n\n const histogram: { [key: number]: T[] } = {};\n\n let maxBucketID = 0;\n let hasData = false;\n for (const row of source) {\n hasData = true;\n const value = callbackFn(row);\n const bucketID = Math.floor((value - min) / bucketSize);\n if (maxBucketID < bucketID) {\n maxBucketID = bucketID;\n }\n if (histogram[bucketID] === undefined) {\n histogram[bucketID] = [];\n }\n histogram[bucketID].push(row);\n }\n\n // If no data, return empty for OptionB (min/range)\n if (!hasData) {\n return;\n }\n\n const lastBucket = histogram[maxBucketID];\n const from = min + maxBucketID * bucketSize;\n\n for (let i = 0; i <= maxBucketID; ++i) {\n // If all items in the last bucket match the \"to\" of the previous bucket, put them in there...\n if (i === maxBucketID - 1 && lastBucket.every(row => from === callbackFn(row))) {\n yield {\n from: min + i * bucketSize,\n to: min + (i + 1) * bucketSize,\n value: [...(histogram[i] || []), ...lastBucket]\n };\n break;\n }\n yield {\n from: min + i * bucketSize,\n to: min + (i + 1) * bucketSize,\n value: histogram[i] || []\n };\n }\n };\n}\n\nexport function histogram<T>(histogramByFn: HistogramFn<T>, options: Options): IterableActivity<T, HistogramRow<T>>;\nexport function histogram<T>(source: Source<T>, histogramByFn: HistogramFn<T>, options: Options): IterableIterator<HistogramRow<T>>;\nexport function histogram<T>(s_or_hf: Source<T> | HistogramFn<T>, hf_or_b: HistogramFn<T> | Options, options?: Options): IterableActivity<T, HistogramRow<T>> | IterableIterator<HistogramRow<T>> {\n return isSource(s_or_hf) ? histogramGen<T>(hf_or_b as HistogramFn<T>, options!)(s_or_hf) : histogramGen<T>(s_or_hf as HistogramFn<T>, hf_or_b as Options);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type JoinCallback<T, U, V> = (rowT: T, rowU: U, index: number) => V;\n\nfunction joinGen<T = any, U = any, V = any>(_sourceU: Source<U>, callbackFn: JoinCallback<T, U, V>): IterableActivity<T, V> {\n const sourceB = Array.isArray(_sourceU) ? _sourceU[Symbol.iterator]() : _sourceU;\n return function* (sourceT: Source<T>) {\n let i = -1;\n for (const item of sourceT) {\n yield callbackFn(item, sourceB.next().value, ++i);\n }\n };\n}\n\nexport function join<T, U, V>(sourceU: Source<U>, callbackFn: JoinCallback<T, U, V>): IterableActivity<T, V>;\nexport function join<T, U, V>(sourceU: Source<U>, callbackFn: JoinCallback<T, U, V>): IterableIterator<V>;\nexport function join<T, U, V>(sT_or_sU: Source<T> | Source<U>, sU_or_cb: Source<U> | JoinCallback<T, U, V>, callbackFn?: JoinCallback<T, U, V>): IterableActivity<T, V> | IterableIterator<V> {\n return isSource(sU_or_cb) ? joinGen(sU_or_cb, callbackFn!)(sT_or_sU as Source<T>) : joinGen(sT_or_sU as Source<U>, sU_or_cb);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type MapCallback<T, U> = (row: T, index: number) => U;\n\nfunction mapGen<T = any, U = any>(callbackFn: MapCallback<T, U>): IterableActivity<T, U> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n yield callbackFn(item, ++i);\n }\n };\n}\n\nexport function map<T, U>(callbackFn: MapCallback<T, U>): IterableActivity<T, U>;\nexport function map<T, U>(source: Source<T>, callbackFn: MapCallback<T, U>): IterableIterator<U>;\nexport function map<T, U>(s_or_cb: Source<T> | MapCallback<T, U>, callbackFn?: MapCallback<T, U>): IterableActivity<T, U> | IterableIterator<U> {\n return isSource(s_or_cb) ? mapGen(callbackFn!)(s_or_cb) : mapGen(s_or_cb);\n}\n","import { Source, IterableActivity, isSource } from \"./activity.ts\";\nimport { extent } from \"../observers/extent.ts\";\nimport { scalar } from \"../observers/observer.ts\";\nimport { map } from \"./map.ts\";\n\nfunction normalizeGen(): IterableActivity<number> {\n const calcExtent = scalar(extent());\n return function* (_source: Source<number>) {\n const source = Array.isArray(_source) ? _source : [..._source];\n const range = calcExtent(source);\n const divisor = (range[1] - range[0]) || 1;\n const normalizeMap = map((row: number) => (row - range[0]) / divisor);\n return yield* normalizeMap(source);\n };\n}\n\nexport function normalize(): IterableActivity<number>;\nexport function normalize(source: Source<number>): IterableIterator<number>;\nexport function normalize(s_or_undef?: Source<number>): IterableActivity<number> | IterableIterator<number> {\n return isSource(s_or_undef) ? normalizeGen()(s_or_undef) : normalizeGen();\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nfunction skipGen<T = any>(n: number): IterableActivity<T, T> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n if (++i >= n) {\n yield item;\n }\n }\n };\n}\n\nexport function skip<T = any>(n: number): IterableActivity<T, T>;\nexport function skip<T>(source: Source<T>, n: number): IterableIterator<T>;\nexport function skip<T = any>(s_or_n: Source<T> | number, n?: number): IterableActivity<T, T> | IterableIterator<T> {\n return isSource(s_or_n) ? skipGen<T>(n!)(s_or_n) : skipGen<T>(s_or_n);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type SortCallback<T> = (a: T, b: T) => number;\n\nfunction sortGen<T = any>(compareFn?: SortCallback<T>): IterableActivity<T> {\n return function* (source: Source<T>) {\n yield* (Array.isArray(source) ? source : [...source]).sort(compareFn);\n };\n}\n\nexport function sort<T = any>(callbackFn: SortCallback<T>): IterableActivity<T>;\nexport function sort<T = any>(source: Source<T>, callbackFn: SortCallback<T>): IterableIterator<T>;\nexport function sort<T = any>(s_or_cb: Source<T> | SortCallback<T>, callbackFn?: SortCallback<T>): IterableActivity<T> | IterableIterator<T> {\n return isSource(s_or_cb) ? sortGen(callbackFn!)(s_or_cb) : sortGen(s_or_cb);\n}\n\n","import { Observer } from \"./observer.ts\";\n\nexport function count<T = any>(): Observer<T, number> {\n let count: number;\n\n return {\n observe: (value: T, idx: number) => {\n if (idx === 0) {\n count = 0;\n }\n ++count;\n },\n peek: () => count\n };\n}\n","import { AccessorT, Observer, Accessor } from \"./observer.ts\";\n\nfunction _variance(): Observer<number, number | undefined> {\n let count: number;\n let mean: number;\n let sum: number;\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n count = 0;\n mean = 0;\n sum = 0;\n }\n const delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n },\n peek: () => count > 1 ? sum / (count - 1) : undefined\n };\n}\n\nexport type VarianceAccessor<T> = AccessorT<T, number>;\n\nexport function variance(): Observer<number, number | undefined>;\nexport function variance<T = any>(callbackFn: VarianceAccessor<T>): Observer<T, number | undefined>;\nexport function variance<T = any>(callbackFn?: VarianceAccessor<T>): Observer<number, number | undefined> | Observer<T, number | undefined> {\n return callbackFn ? Accessor(_variance, callbackFn) : _variance();\n}\n","import { variance } from \"./variance.ts\";\nimport { AccessorT, Observer, Accessor } from \"./observer.ts\";\n\nfunction _deviation(): Observer<number, number | undefined> {\n const v = variance();\n\n return {\n observe: (value: number, idx: number) => {\n v.observe(value, idx);\n },\n peek: () => {\n const variance = v.peek();\n return variance !== undefined ? Math.sqrt(variance) : variance;\n }\n };\n}\n\nexport type DeviationAccessor<T> = AccessorT<T, number>;\n\nexport function deviation(): Observer<number, number | undefined>;\nexport function deviation<T = any>(callbackFn: DeviationAccessor<T>): Observer<T, number | undefined>;\nexport function deviation<T = any>(callbackFn?: DeviationAccessor<T>): Observer<number, number | undefined> | Observer<T, number | undefined> {\n return callbackFn ? Accessor(_deviation, callbackFn) : _deviation();\n}\n","import { Observer, Accessor } from \"./observer.ts\";\n\nfunction _mean(): Observer<number, number> {\n let total: number;\n let count: number;\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n total = value;\n } else {\n total += value;\n }\n count = idx;\n },\n peek: () => total / (count + 1)\n };\n}\n\nexport type MeanAccessor<T> = (row: T, currentIndex: number) => number;\n\nexport function mean(): Observer<number, number>;\nexport function mean<T = any>(callbackFn: MeanAccessor<T>): Observer<T, number>;\nexport function mean<T = any>(callbackFn?: MeanAccessor<T>): Observer<number, number> | Observer<T, number> {\n return callbackFn ? Accessor(_mean, callbackFn) : _mean();\n}\n","import { max } from \"./max.ts\";\nimport { min } from \"./min.ts\";\nimport { mean } from \"./mean.ts\";\nimport { variance } from \"./variance.ts\";\nimport { Observer, Accessor } from \"./observer.ts\";\n\nexport type DistributionCallback<T> = (row: T, currentIndex: number) => number;\n\nexport type DistributionT = {\n min: number,\n mean: number,\n max: number,\n deviation: number | undefined,\n variance: number | undefined\n} | undefined;\n\nfunction _distribution(): Observer<number, DistributionT> {\n const minFO = min();\n const maxFO = max();\n const meanFO = mean();\n const varianceFO = variance();\n\n return {\n observe: (value: number, idx: number) => {\n minFO.observe(value, idx);\n maxFO.observe(value, idx);\n meanFO.observe(value, idx);\n varianceFO.observe(value, idx);\n },\n peek: () => {\n const minResult = minFO.peek();\n if (minResult === undefined) return undefined;\n const varianceResult = varianceFO.peek();\n return {\n min: minResult,\n max: maxFO.peek(),\n mean: meanFO.peek(),\n variance: varianceResult,\n deviation: varianceResult !== undefined ? Math.sqrt(varianceResult) : undefined\n };\n }\n };\n}\n\nexport type DistributionAccessor<T> = (row: T, currentIndex: number) => number;\n\nexport function distribution(): Observer<number, DistributionT>;\nexport function distribution<T = any>(callbackFn: DistributionAccessor<T>): Observer<T, DistributionT>;\nexport function distribution<T = any>(callbackFn?: DistributionAccessor<T>): Observer<number, DistributionT> | Observer<T, DistributionT> {\n return callbackFn ? Accessor(_distribution, callbackFn) : _distribution();\n}\n","import { AccessorT, Observer, Accessor } from \"./observer.ts\";\n\nfunction _median(): Observer<number, number> {\n let values: number[];\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n values = [];\n }\n values.push(value);\n },\n peek: () => {\n const sorted = values.sort((l, r) => l - r);\n const mid = sorted.length / 2;\n if (sorted.length % 2 === 0) {\n return (sorted[mid - 1] + sorted[mid]) / 2;\n } else {\n return sorted[Math.floor(mid)];\n }\n }\n };\n}\n\nexport type MedianAccessor<T> = AccessorT<T, number>;\n\nexport function median(): Observer<number, number>;\nexport function median<T = any>(callbackFn: MedianAccessor<T>): Observer<T, number>;\nexport function median<T = any>(callbackFn?: MedianAccessor<T>): Observer<number, number> | Observer<T, number> {\n return callbackFn ? Accessor(_median, callbackFn) : _median();\n}","import { median } from \"./median.ts\";\nimport { AccessorT, Observer, Accessor, scalar } from \"./observer.ts\";\n\nexport type QuartileAccessor<T> = AccessorT<T, number>;\n\nexport type QuartileT = [number, number, number, number, number] | undefined;\n\nfunction _quartile(): Observer<number, QuartileT> {\n let values: number[];\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n values = [];\n }\n values.push(value);\n },\n peek: () => {\n const sorted = values.sort((l, r) => l - r);\n const mid = sorted.length / 2;\n let medianVal: number;\n let lower: number[];\n let upper: number[];\n if (sorted.length < 2) {\n return undefined;\n } else if (sorted.length % 2 === 0) {\n medianVal = (sorted[mid - 1] + sorted[mid]) / 2;\n lower = sorted.slice(0, mid);\n upper = sorted.slice(mid);\n } else {\n medianVal = sorted[Math.floor(mid)];\n lower = sorted.slice(0, Math.floor(mid));\n upper = sorted.slice(Math.ceil(mid));\n }\n return [sorted[0], scalar(median())(lower)!, medianVal, scalar(median())(upper)!, sorted[sorted.length - 1]];\n }\n };\n}\n\nexport function quartile(): Observer<number, QuartileT>;\nexport function quartile<T = any>(callbackFn: QuartileAccessor<T>): Observer<T, QuartileT>;\nexport function quartile<T = any>(callbackFn?: QuartileAccessor<T>): Observer<number, QuartileT> | Observer<T, QuartileT> {\n return callbackFn ? Accessor(_quartile, callbackFn) : _quartile();\n}","import { Observer } from \"./observer.ts\";\n\nexport type ReduceCallback<T, U> = (previousValue: U, currentValue: T, currentIndex: number) => U;\n\nfunction _reduce<T, U>(callback: ReduceCallback<T, U>, initialValue?: U): Observer<T, U> {\n let reduced: U;\n\n return {\n observe: (value: T, idx: number) => {\n if (idx === 0) {\n reduced = initialValue === undefined ? (value as unknown as U) : callback(initialValue, value, idx);\n } else {\n reduced = callback(reduced, value, idx);\n }\n },\n peek: () => reduced\n };\n}\n\nexport function reduce<T = any, U = any>(callbackFn: ReduceCallback<T, U>, initialValue?: U): Observer<T, U> {\n return _reduce(callbackFn, initialValue);\n}\n","export function* generate<U>(generatorFn: () => U, maxLen?: number): IterableIterator<U> {\n let i = -1;\n while (maxLen === undefined || ++i < maxLen) {\n yield generatorFn();\n }\n}\n","import { IterableActivity, ScalarActivity, Source, isSource } from \"../activities/activity.ts\";\n\n// =============================================================================\n// Constants and Base Types\n// =============================================================================\n\nconst GeneratorFunction = (function* () { }).constructor;\n\ntype AnyIterableActivity = IterableActivity<any, any>;\ntype AnyScalarActivity = ScalarActivity<any, any>;\ntype AnyActivity = AnyIterableActivity | AnyScalarActivity;\n\n// =============================================================================\n// Type Utilities for Activity Analysis\n// =============================================================================\n\ntype ActivityIn<A extends AnyActivity> = Parameters<A>[0] extends Source<infer Input> ? Input : never;\ntype ActivityOut<A extends AnyActivity> = ReturnType<A> extends IterableIterator<infer Output> ? Output : ReturnType<A>;\ntype ActivityIsScalar<A extends AnyActivity> = ReturnType<A> extends IterableIterator<any> ? false : true;\n\ntype FirstActivity<Activities extends readonly [AnyActivity, ...AnyActivity[]]> = Activities[0];\n\n// =============================================================================\n// Type Resolution for Activity Chains (Without Source)\n// =============================================================================\n\n/**\n * Recursively resolves the output type of a chain of activities starting from an iterable activity.\n * Validates that each activity's input type matches the previous activity's output type.\n */\n\n// Handle a scalar (non-iterable) activity in the chain\ntype ResolveScalarActivity<CurrentOut, InitialIn, Next extends AnyActivity, Rest extends readonly AnyActivity[]> =\n CurrentOut extends ActivityIn<Next>\n ? Rest extends []\n ? { kind: \"scalar\"; in: InitialIn; out: ActivityOut<Next> }\n : { kind: \"error\" } // Scalar activities must be terminal\n : { kind: \"error\" }; // Type mismatch\n\n// Handle an iterable activity in the chain\ntype ResolveIterableActivity<CurrentOut, InitialIn, Next extends AnyActivity, Rest extends readonly AnyActivity[]> =\n CurrentOut extends ActivityIn<Next>\n ? ResolveIterableTail<ActivityOut<Next>, InitialIn, Rest>\n : { kind: \"error\" }; // Type mismatch\n\n// Process the next activity in the chain\ntype ResolveNextActivity<CurrentOut, InitialIn, Next extends AnyActivity, Rest extends readonly AnyActivity[]> =\n ActivityIsScalar<Next> extends true\n ? ResolveScalarActivity<CurrentOut, InitialIn, Next, Rest>\n : ResolveIterableActivity<CurrentOut, InitialIn, Next, Rest>;\n\n// Check if we've reached the end of the activity chain\ntype ResolveIterableTail<CurrentOut, InitialIn, Tail extends readonly AnyActivity[]> =\n Tail extends []\n ? { kind: \"iterable\"; in: InitialIn; out: CurrentOut }\n : Tail extends readonly [infer Next extends AnyActivity, ...infer Rest extends readonly AnyActivity[]]\n ? ResolveNextActivity<CurrentOut, InitialIn, Next, Rest>\n : { kind: \"error\" };\n\n/**\n * Resolves the complete type signature for a chain of activities without a source.\n * Determines the input, output, and whether the final result is scalar or iterable.\n */\n\n// Handle when the first activity is scalar (must be the only activity)\ntype ResolveFirstScalarActivity<First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n Rest extends []\n ? { kind: \"scalar\"; in: ActivityIn<First>; out: ActivityOut<First> }\n : { kind: \"error\" }; // Scalar activities cannot be followed by others\n\n// Handle when the first activity is iterable\ntype ResolveFirstIterableActivity<First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n Rest extends []\n ? { kind: \"iterable\"; in: ActivityIn<First>; out: ActivityOut<First> }\n : ResolveIterableTail<ActivityOut<First>, ActivityIn<First>, Rest>;\n\n// Determine how to handle the first activity based on whether it's scalar or iterable\ntype ResolveFirstActivity<First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n ActivityIsScalar<First> extends true\n ? ResolveFirstScalarActivity<First, Rest>\n : ResolveFirstIterableActivity<First, Rest>;\n\ntype ResolveActivities<Activities extends readonly [AnyActivity, ...AnyActivity[]]> =\n Activities extends readonly [infer First extends AnyActivity, ...infer Rest extends readonly AnyActivity[]]\n ? ResolveFirstActivity<First, Rest>\n : { kind: \"error\" };\n\n/**\n * Return type for pipe when called without a source - returns a reusable activity function.\n */\ntype PipeWithoutSourceReturn<Activities extends readonly [AnyActivity, ...AnyActivity[]]> =\n ResolveActivities<Activities> extends infer Result\n ? Result extends { kind: \"iterable\"; in: infer In; out: infer Out }\n ? IterableActivity<In & ActivityIn<FirstActivity<Activities>>, Out>\n : Result extends { kind: \"scalar\"; in: infer In; out: infer Out }\n ? ScalarActivity<In & ActivityIn<FirstActivity<Activities>>, Out>\n : never\n : never;\n\n// =============================================================================\n// Type Resolution for Activity Chains (With Source)\n// =============================================================================\n\n/**\n * Resolves the output type when a source is provided as the first argument to pipe.\n * Validates that the source type is compatible with the first activity's input.\n */\n\n// Extract the final result kind from ResolveIterableTail\ntype ExtractFinalResultKind<Result> =\n Result extends { kind: \"iterable\"; out: infer Out }\n ? { kind: \"iterable\"; out: Out }\n : Result extends { kind: \"scalar\"; out: infer Out }\n ? { kind: \"scalar\"; out: Out }\n : { kind: \"error\" };\n\n// Handle when the first activity after source is scalar\ntype ResolveSourceWithScalarActivity<TSource, First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n TSource extends ActivityIn<First>\n ? Rest extends []\n ? { kind: \"scalar\"; out: ActivityOut<First> }\n : { kind: \"error\" } // Scalar activities must be terminal\n : { kind: \"error\" }; // Type mismatch\n\n// Handle when the first activity after source is iterable\ntype ResolveSourceWithIterableActivity<TSource, First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n TSource extends ActivityIn<First>\n ? Rest extends []\n ? { kind: \"iterable\"; out: ActivityOut<First> }\n : ExtractFinalResultKind<ResolveIterableTail<ActivityOut<First>, ActivityIn<First>, Rest>>\n : { kind: \"error\" }; // Type mismatch\n\n// Determine how to handle the source with the first activity\ntype ResolveSourceWithFirstActivity<TSource, First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n ActivityIsScalar<First> extends true\n ? ResolveSourceWithScalarActivity<TSource, First, Rest>\n : ResolveSourceWithIterableActivity<TSource, First, Rest>;\n\ntype ResolveSourceActivities<TSource, Activities extends readonly AnyActivity[]> =\n Activities extends []\n ? { kind: \"source\"; out: TSource }\n : Activities extends readonly [infer First extends AnyActivity, ...infer Rest extends readonly AnyActivity[]]\n ? ResolveSourceWithFirstActivity<TSource, First, Rest>\n : { kind: \"error\" };\n\n/**\n * Return type for pipe when called with a source - executes immediately and returns the result.\n */\ntype PipeWithSourceReturn<TSource, Activities extends readonly AnyActivity[]> =\n ResolveSourceActivities<TSource, Activities> extends infer Result\n ? Result extends { kind: \"iterable\"; out: infer Out }\n ? IterableIterator<Out>\n : Result extends { kind: \"scalar\"; out: infer Out }\n ? Out\n : Result extends { kind: \"source\"; out: infer Out }\n ? Source<Out>\n : never\n : never;\n\n// =============================================================================\n// Runtime Implementation\n// =============================================================================\n\n/**\n * Internal helper that chains activities together at runtime.\n * Returns a function that accepts a source and applies all activities in sequence.\n * Handles both generator (iterable) and scalar activities appropriately.\n */\nfunction chainGen(...activities: AnyActivity[]) {\n if (activities.length === 0) {\n return <T>(source: Source<T>) => source;\n }\n\n const isGenerator = activities[activities.length - 1] instanceof GeneratorFunction;\n const len = activities.length;\n\n if (isGenerator) {\n return function* (source: Source<unknown>) {\n let tail: unknown = source;\n for (let i = 0; i < len; i++) {\n tail = activities[i](tail as Source<unknown>);\n }\n yield* tail as IterableIterator<unknown>;\n };\n }\n\n return (source: Source<unknown>) => {\n let tail: unknown = source;\n for (let i = 0; i < len; i++) {\n tail = activities[i](tail as Source<unknown>);\n }\n return tail;\n };\n}\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Pipes activities together to create a data processing pipeline.\n * \n * Two usage modes:\n * 1. Without source: pipe(activity1, activity2, ...) - returns a reusable activity function\n * 2. With source: pipe(source, activity1, activity2, ...) - executes immediately and returns result\n * \n * Activities are chained left-to-right, with type checking ensuring output of each activity\n * matches the input of the next.\n */\nexport function pipe<const Activities extends readonly [AnyActivity, ...AnyActivity[]]>(...activities: Activities): PipeWithoutSourceReturn<Activities>;\nexport function pipe<TSource, const Activities extends readonly AnyActivity[]>(source: Source<TSource>, ...activities: Activities): PipeWithSourceReturn<TSource, Activities>;\nexport function pipe(...args: any[]): any {\n if (args.length === 0) {\n throw new TypeError(\"pipe requires at least one argument\");\n }\n\n // Handle source-based invocation\n if (isSource(args[0])) {\n return args.length === 1 ? args[0] : chainGen(...args.slice(1))(args[0]);\n }\n\n // Handle activity-based invocation\n return chainGen(...args);\n}\n\n// =============================================================================\n// Backward Compatibility\n// =============================================================================\n\n/**\n * @deprecated Use pipe instead. Maintained for backward compatibility.\n */\nexport const chain = pipe;\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self)["@hpcc-js/dataflow"]={})}(this,function(e){"use strict";var n=Object.defineProperty,t=(e,t)=>n(e,"name",{value:t,configurable:!0});function r(e){return e&&("function"==typeof e[Symbol.iterator]||Array.isArray(e))}function o(e){return function*(n){yield*n,yield*e}}function i(e,n){return void 0!==n?o(n)(e):o(e)}function u(e){return function*(n){let t=-1;for(const r of n)e(r,++t),yield r}}function c(e,n){return r(e)?u(n)(e):u(e)}function f(){return function*(e){let n=-1;for(const t of e)yield[++n,t]}}function s(e){return e?function*(e){let n=-1;for(const t of e)yield[++n,t]}(e):function*(e){let n=-1;for(const t of e)yield[++n,t]}}function l(e){return function*(n){let t=-1;for(const r of n)e(r,++t)&&(yield r)}}function a(e,n){return r(e)?l(n)(e):l(e)}function v(e){return function*(n){let t=0;for(const r of n)if(yield r,++t>=e)break}}function p(e,n){return r(e)?v(n)(e):v(e)}function d(e){return function*(n){let t=-1;const r={};for(const o of n){const n=e(o,++t);r[n]||(r[n]=[]),r[n].push(o)}for(const e in r)yield{key:e,value:r[e]}}}function b(e,n){return r(e)?d(n)(e):d(e)}function y(e,n){const r=e();return{observe:t((e,t)=>{r.observe(n(e,t),t)},"observe"),peek:r.peek}}function k(e){return c((n,t)=>e.observe(n,t))}function h(e){return function*(n){let t=-1;for(const r of n)e.observe(r,++t);yield e.peek()}}function m(e){return function(n){let t=-1;for(const r of n)e.observe(r,++t);return e.peek()}}function g(){let e;return{observe:t((n,t)=>{(0===t||e<n)&&(e=n)},"observe"),peek:t(()=>e,"peek")}}function A(e){return e?y(g,e):g()}function G(){let e;return{observe:t((n,t)=>{(0===t||e>n)&&(e=n)},"observe"),peek:t(()=>e,"peek")}}function x(e){return e?y(G,e):G()}function _(){const e=x(),n=A();return{observe:t((t,r)=>{e.observe(t,r),n.observe(t,r)},"observe"),peek:t(()=>[e.peek(),n.peek()],"peek")}}function M(e){return e?y(_,e):_()}function j(e){return void 0!==e.buckets}function q(e,n){return function*(t){let r,o,i;if(j(n)){i=Array.isArray(t)?t:[...t];const u=m(M(e))(i);if(void 0===u||void 0===u[0]||void 0===u[1]){const e=n.buckets;for(let n=0;n<e;++n)yield{from:NaN,to:NaN,value:[]};return}r=u[0];o=(u[1]-r)/n.buckets}else i=t,r=n.min,o=n.range;const u={};let c=0,f=!1;for(const n of i){f=!0;const t=e(n),i=Math.floor((t-r)/o);c<i&&(c=i),void 0===u[i]&&(u[i]=[]),u[i].push(n)}if(!f)return;const s=u[c],l=r+c*o;for(let n=0;n<=c;++n){if(n===c-1&&s.every(n=>l===e(n))){yield{from:r+n*o,to:r+(n+1)*o,value:[...u[n]||[],...s]};break}yield{from:r+n*o,to:r+(n+1)*o,value:u[n]||[]}}}}function S(e,n,t){return r(e)?q(n,t)(e):q(e,n)}function N(e,n){const t=Array.isArray(e)?e[Symbol.iterator]():e;return function*(e){let r=-1;for(const o of e)yield n(o,t.next().value,++r)}}function T(e,n,t){return r(n)?N(n,t)(e):N(e,n)}function w(e){return function*(n){let t=-1;for(const r of n)yield e(r,++t)}}function z(e,n){return r(e)?w(n)(e):w(e)}function O(){const e=m(M());return function*(n){const t=Array.isArray(n)?n:[...n],r=e(t),o=r[1]-r[0]||1,i=z(e=>(e-r[0])/o);return yield*i(t)}}function P(e){return r(e)?O()(e):O()}function E(e){return function*(n){let t=-1;for(const r of n)++t>=e&&(yield r)}}function B(e,n){return r(e)?E(n)(e):E(e)}function C(e){return function*(n){yield*(Array.isArray(n)?n:[...n]).sort(e)}}function D(e,n){return r(e)?C(n)(e):C(e)}function F(){let e;return{observe:t((n,t)=>{0===t&&(e=0),++e},"observe"),peek:t(()=>e,"peek")}}function H(){let e,n,r;return{observe:t((t,o)=>{0===o&&(e=0,n=0,r=0);const i=t-n;n+=i/++e,r+=i*(t-n)},"observe"),peek:t(()=>e>1?r/(e-1):void 0,"peek")}}function I(e){return e?y(H,e):H()}function J(){const e=I();return{observe:t((n,t)=>{e.observe(n,t)},"observe"),peek:t(()=>{const n=e.peek();return void 0!==n?Math.sqrt(n):n},"peek")}}function K(e){return e?y(J,e):J()}function L(){let e,n;return{observe:t((t,r)=>{0===r?e=t:e+=t,n=r},"observe"),peek:t(()=>e/(n+1),"peek")}}function Q(e){return e?y(L,e):L()}function R(){const e=x(),n=A(),r=Q(),o=I();return{observe:t((t,i)=>{e.observe(t,i),n.observe(t,i),r.observe(t,i),o.observe(t,i)},"observe"),peek:t(()=>{const t=e.peek();if(void 0===t)return;const i=o.peek();return{min:t,max:n.peek(),mean:r.peek(),variance:i,deviation:void 0!==i?Math.sqrt(i):void 0}},"peek")}}function U(e){return e?y(R,e):R()}function V(){let e;return{observe:t((n,t)=>{0===t&&(e=[]),e.push(n)},"observe"),peek:t(()=>{const n=e.sort((e,n)=>e-n),t=n.length/2;return n.length%2==0?(n[t-1]+n[t])/2:n[Math.floor(t)]},"peek")}}function W(e){return e?y(V,e):V()}function X(){let e;return{observe:t((n,t)=>{0===t&&(e=[]),e.push(n)},"observe"),peek:t(()=>{const n=e.sort((e,n)=>e-n),t=n.length/2;let r,o,i;if(!(n.length<2))return n.length%2==0?(r=(n[t-1]+n[t])/2,o=n.slice(0,t),i=n.slice(t)):(r=n[Math.floor(t)],o=n.slice(0,Math.floor(t)),i=n.slice(Math.ceil(t))),[n[0],m(W())(o),r,m(W())(i),n[n.length-1]]},"peek")}}function Y(e){return e?y(X,e):X()}function Z(e,n){let r;return{observe:t((t,o)=>{r=0===o?void 0===n?t:e(n,t,o):e(r,t,o)},"observe"),peek:t(()=>r,"peek")}}function $(e,n){return Z(e,n)}function*ee(e,n){let t=-1;for(;void 0===n||++t<n;)yield e()}t(r,"isSource"),t(o,"concatGen"),t(i,"concat"),t(u,"eachGen"),t(c,"each"),t(f,"entriesGen"),t(s,"entries"),t(l,"filterGen"),t(a,"filter"),t(v,"firstGen"),t(p,"first"),t(d,"groupGen"),t(b,"group"),t(y,"Accessor"),t(k,"sensor"),t(h,"activity"),t(m,"scalar"),t(g,"_max"),t(A,"max"),t(G,"_min"),t(x,"min"),t(_,"_extent"),t(M,"extent"),t(j,"isOptionA"),t(q,"histogramGen"),t(S,"histogram"),t(N,"joinGen"),t(T,"join"),t(w,"mapGen"),t(z,"map"),t(O,"normalizeGen"),t(P,"normalize"),t(E,"skipGen"),t(B,"skip"),t(C,"sortGen"),t(D,"sort"),t(F,"count"),t(H,"_variance"),t(I,"variance"),t(J,"_deviation"),t(K,"deviation"),t(L,"_mean"),t(Q,"mean"),t(R,"_distribution"),t(U,"distribution"),t(V,"_median"),t(W,"median"),t(X,"_quartile"),t(Y,"quartile"),t(Z,"_reduce"),t($,"reduce"),t(ee,"generate");const ne=function*(){}.constructor;function te(...e){if(0===e.length)return e=>e;const n=e[e.length-1]instanceof ne,t=e.length;return n?function*(n){let r=n;for(let o=0;o<t;o++)r=e[o](r);yield*r}:n=>{let r=n;for(let o=0;o<t;o++)r=e[o](r);return r}}function re(...e){if(0===e.length)throw new TypeError("pipe requires at least one argument");return r(e[0])?1===e.length?e[0]:te(...e.slice(1))(e[0]):te(...e)}t(te,"chainGen"),t(re,"pipe");const oe=re;e.Accessor=y,e.activity=h,e.chain=oe,e.concat=i,e.count=F,e.deviation=K,e.distribution=U,e.each=c,e.entries=s,e.extent=M,e.filter=a,e.first=p,e.generate=ee,e.group=b,e.histogram=S,e.isSource=r,e.join=T,e.map=z,e.max=A,e.mean=Q,e.median=W,e.min=x,e.normalize=P,e.pipe=re,e.quartile=Y,e.reduce=$,e.scalar=m,e.sensor=k,e.skip=B,e.sort=D,e.variance=I,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
2
- //# sourceMappingURL=index.umd.cjs.map
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e[`@hpcc-js/dataflow`]={}))})(this,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function isSource(e){return e&&(typeof e[Symbol.iterator]==`function`||Array.isArray(e))}function concatGen(e){return function*(t){yield*t,yield*e}}function concat(e,t){return t===void 0?concatGen(e):concatGen(t)(e)}function eachGen(e){return function*(t){let n=-1;for(let r of t)e(r,++n),yield r}}function each(e,t){return isSource(e)?eachGen(t)(e):eachGen(e)}function entriesGen(){return function*(e){let t=-1;for(let n of e)yield[++t,n]}}function entries(e){return e?entriesGen()(e):entriesGen()}function filterGen(e){return function*(t){let n=-1;for(let r of t)e(r,++n)&&(yield r)}}function filter(e,t){return isSource(e)?filterGen(t)(e):filterGen(e)}function firstGen(e){return function*(t){let n=0;for(let r of t)if(yield r,++n>=e)break}}function first(e,t){return isSource(e)?firstGen(t)(e):firstGen(e)}function groupGen(e){return function*(t){let n=-1,r={};for(let i of t){let t=e(i,++n);r[t]||(r[t]=[]),r[t].push(i)}for(let e in r)yield{key:e,value:r[e]}}}function group(e,t){return isSource(e)?groupGen(t)(e):groupGen(e)}function Accessor(e,t){let n=e();return{observe:(e,r)=>{n.observe(t(e,r),r)},peek:n.peek}}function sensor(e){return each((t,n)=>e.observe(t,n))}function activity(e){return function*(t){let n=-1;for(let r of t)e.observe(r,++n);yield e.peek()}}function scalar(e){return function(t){let n=-1;for(let r of t)e.observe(r,++n);return e.peek()}}function _max(){let e;return{observe:(t,n)=>{(n===0||e<t)&&(e=t)},peek:()=>e}}function max(e){return e?Accessor(_max,e):_max()}function _min(){let e;return{observe:(t,n)=>{(n===0||e>t)&&(e=t)},peek:()=>e}}function min(e){return e?Accessor(_min,e):_min()}function _extent(){let e=min(),t=max();return{observe:(n,r)=>{e.observe(n,r),t.observe(n,r)},peek:()=>[e.peek(),t.peek()]}}function extent(e){return e?Accessor(_extent,e):_extent()}function isOptionA(e){return e.buckets!==void 0}function histogramGen(e,t){return function*(n){let r,i,a;if(isOptionA(t)){a=Array.isArray(n)?n:[...n];let o=scalar(extent(e))(a);if(o===void 0||o[0]===void 0||o[1]===void 0){let e=t.buckets;for(let t=0;t<e;++t)yield{from:NaN,to:NaN,value:[]};return}r=o[0];let s=o[1],c=t.buckets;i=(s-r)/c}else a=n,r=t.min,i=t.range;let o={},s=0,c=!1;for(let t of a){c=!0;let n=e(t),a=Math.floor((n-r)/i);s<a&&(s=a),o[a]===void 0&&(o[a]=[]),o[a].push(t)}if(!c)return;let l=o[s],u=r+s*i;for(let t=0;t<=s;++t){if(t===s-1&&l.every(t=>u===e(t))){yield{from:r+t*i,to:r+(t+1)*i,value:[...o[t]||[],...l]};break}yield{from:r+t*i,to:r+(t+1)*i,value:o[t]||[]}}}}function histogram(e,t,n){return isSource(e)?histogramGen(t,n)(e):histogramGen(e,t)}function joinGen(e,t){let n=Array.isArray(e)?e[Symbol.iterator]():e;return function*(e){let r=-1;for(let i of e)yield t(i,n.next().value,++r)}}function join(e,t,n){return isSource(t)?joinGen(t,n)(e):joinGen(e,t)}function mapGen(e){return function*(t){let n=-1;for(let r of t)yield e(r,++n)}}function map(e,t){return isSource(e)?mapGen(t)(e):mapGen(e)}function normalizeGen(){let e=scalar(extent());return function*(t){let n=Array.isArray(t)?t:[...t],r=e(n),i=r[1]-r[0]||1;return yield*map(e=>(e-r[0])/i)(n)}}function normalize(e){return isSource(e)?normalizeGen()(e):normalizeGen()}function skipGen(e){return function*(t){let n=-1;for(let r of t)++n>=e&&(yield r)}}function skip(e,t){return isSource(e)?skipGen(t)(e):skipGen(e)}function sortGen(e){return function*(t){yield*(Array.isArray(t)?t:[...t]).sort(e)}}function sort(e,t){return isSource(e)?sortGen(t)(e):sortGen(e)}function count(){let e;return{observe:(t,n)=>{n===0&&(e=0),++e},peek:()=>e}}function _variance(){let e,t,n;return{observe:(r,i)=>{i===0&&(e=0,t=0,n=0);let a=r-t;t+=a/++e,n+=a*(r-t)},peek:()=>e>1?n/(e-1):void 0}}function variance(e){return e?Accessor(_variance,e):_variance()}function _deviation(){let e=variance();return{observe:(t,n)=>{e.observe(t,n)},peek:()=>{let t=e.peek();return t===void 0?t:Math.sqrt(t)}}}function deviation(e){return e?Accessor(_deviation,e):_deviation()}function _mean(){let e,t;return{observe:(n,r)=>{r===0?e=n:e+=n,t=r},peek:()=>e/(t+1)}}function mean(e){return e?Accessor(_mean,e):_mean()}function _distribution(){let e=min(),t=max(),n=mean(),r=variance();return{observe:(i,a)=>{e.observe(i,a),t.observe(i,a),n.observe(i,a),r.observe(i,a)},peek:()=>{let i=e.peek();if(i===void 0)return;let a=r.peek();return{min:i,max:t.peek(),mean:n.peek(),variance:a,deviation:a===void 0?void 0:Math.sqrt(a)}}}}function distribution(e){return e?Accessor(_distribution,e):_distribution()}function _median(){let e;return{observe:(t,n)=>{n===0&&(e=[]),e.push(t)},peek:()=>{let t=e.sort((e,t)=>e-t),n=t.length/2;return t.length%2==0?(t[n-1]+t[n])/2:t[Math.floor(n)]}}}function median(e){return e?Accessor(_median,e):_median()}function _quartile(){let e;return{observe:(t,n)=>{n===0&&(e=[]),e.push(t)},peek:()=>{let t=e.sort((e,t)=>e-t),n=t.length/2,r,i,a;if(!(t.length<2))return t.length%2==0?(r=(t[n-1]+t[n])/2,i=t.slice(0,n),a=t.slice(n)):(r=t[Math.floor(n)],i=t.slice(0,Math.floor(n)),a=t.slice(Math.ceil(n))),[t[0],scalar(median())(i),r,scalar(median())(a),t[t.length-1]]}}}function quartile(e){return e?Accessor(_quartile,e):_quartile()}function _reduce(e,t){let n;return{observe:(r,i)=>{n=i===0?t===void 0?r:e(t,r,i):e(n,r,i)},peek:()=>n}}function reduce(e,t){return _reduce(e,t)}function*generate(e,t){let n=-1;for(;t===void 0||++n<t;)yield e()}var t=(function*(){}).constructor;function chainGen(...e){if(e.length===0)return e=>e;let n=e[e.length-1]instanceof t,r=e.length;return n?function*(t){let n=t;for(let t=0;t<r;t++)n=e[t](n);yield*n}:t=>{let n=t;for(let t=0;t<r;t++)n=e[t](n);return n}}function pipe(...e){if(e.length===0)throw TypeError(`pipe requires at least one argument`);return isSource(e[0])?e.length===1?e[0]:chainGen(...e.slice(1))(e[0]):chainGen(...e)}var n=pipe;e.Accessor=Accessor,e.activity=activity,e.chain=n,e.concat=concat,e.count=count,e.deviation=deviation,e.distribution=distribution,e.each=each,e.entries=entries,e.extent=extent,e.filter=filter,e.first=first,e.generate=generate,e.group=group,e.histogram=histogram,e.isSource=isSource,e.join=join,e.map=map,e.max=max,e.mean=mean,e.median=median,e.min=min,e.normalize=normalize,e.pipe=pipe,e.quartile=quartile,e.reduce=reduce,e.scalar=scalar,e.sensor=sensor,e.skip=skip,e.sort=sort,e.variance=variance});
2
+ //# sourceMappingURL=index.umd.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.cjs","sources":["../src/activities/activity.ts","../src/activities/concat.ts","../src/activities/each.ts","../src/activities/entries.ts","../src/activities/filter.ts","../src/activities/first.ts","../src/activities/group.ts","../src/observers/observer.ts","../src/observers/max.ts","../src/observers/min.ts","../src/observers/extent.ts","../src/activities/histogram.ts","../src/activities/join.ts","../src/activities/map.ts","../src/activities/normalize.ts","../src/activities/skip.ts","../src/activities/sort.ts","../src/observers/count.ts","../src/observers/variance.ts","../src/observers/deviation.ts","../src/observers/mean.ts","../src/observers/distribution.ts","../src/observers/median.ts","../src/observers/quartile.ts","../src/observers/reduce.ts","../src/utils/generate.ts","../src/utils/pipe.ts"],"sourcesContent":["export type Source<T> = IterableIterator<T> | T[];\nexport type IterableActivity<T, U = T> = (source: Source<T>) => IterableIterator<U>;\nexport type ScalarActivity<T, U = T> = (source: Source<T>) => U;\nexport type Activity<T, U = T> = IterableActivity<T, U> | ScalarActivity<T, U>;\n\nexport function isSource<T>(source: Source<T> | any): source is Source<T> {\n return source && (typeof source[Symbol.iterator] === \"function\" || Array.isArray(source));\n}\n","import { Source, IterableActivity } from \"./activity.ts\";\n\nfunction concatGen<T = any>(concatSource: Source<T>): IterableActivity<T> {\n return function* (source: Source<T>) {\n yield* source;\n yield* concatSource;\n };\n}\n\nexport function concat<T = any>(concatSource: Source<T>): IterableActivity<T, T>;\nexport function concat<T>(source: Source<T>, concatSource: Source<T>): IterableIterator<T>;\nexport function concat<T = any>(s_or_n: Source<T>, concatSource?: Source<T>): IterableActivity<T, T> | IterableIterator<T> {\n return concatSource !== undefined ? concatGen<T>(concatSource!)(s_or_n) : concatGen<T>(s_or_n);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type EachCallback<T> = (value: T, index: number) => void;\n\nfunction eachGen<T = any>(callbackFn: EachCallback<T>): IterableActivity<T> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n callbackFn(item, ++i);\n yield item;\n }\n };\n}\n\nexport function each<T = any>(callbackFn: EachCallback<T>): IterableActivity<T>;\nexport function each<T>(source: Source<T>, callbackFn: EachCallback<T>): IterableIterator<T>;\nexport function each<T>(s_or_cb: Source<T> | EachCallback<T>, callbackFn?: EachCallback<T>): IterableActivity<T> | IterableIterator<T> {\n return isSource(s_or_cb) ? eachGen(callbackFn!)(s_or_cb) : eachGen(s_or_cb);\n}\n","import { IterableActivity, Source } from \"./activity.ts\";\n\n// Array.entries\nfunction entriesGen<T = any>(): IterableActivity<T, [number, T]> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n yield [++i, item];\n }\n };\n}\n\nexport function entries<T = any>(): IterableActivity<T, [number, T]>;\nexport function entries<T>(source: Source<T>): IterableIterator<[number, T]>;\nexport function entries<T>(source?: Source<T>): IterableActivity<T, [number, T]> | IterableIterator<[number, T]> {\n return source ? entriesGen<T>()(source) : entriesGen<T>();\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type FilterCallback<T> = (value: T, index: number) => boolean;\n\nfunction filterGen<T = any>(callbackFn: FilterCallback<T>): IterableActivity<T> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n if (callbackFn(item, ++i)) {\n yield item;\n }\n }\n };\n}\n\nexport function filter<T = any>(callbackFn: FilterCallback<T>): IterableActivity<T>;\nexport function filter<T>(source: Source<T>, callbackFn: FilterCallback<T>): IterableIterator<T>;\nexport function filter<T>(s_or_cb: Source<T> | FilterCallback<T>, callbackFn?: FilterCallback<T>): IterableActivity<T> | IterableIterator<T> {\n return isSource(s_or_cb) ? filterGen(callbackFn!)(s_or_cb) : filterGen(s_or_cb);\n}\n","import { IterableActivity, isSource, Source } from \"./activity.ts\";\n\nfunction firstGen<T = any>(n: number): IterableActivity<T, T> {\n return function* (source: Source<T>) {\n let i = 0;\n for (const item of source) {\n yield item;\n if (++i >= n) {\n break;\n }\n }\n };\n}\n\nexport function first<T = any>(n: number): IterableActivity<T, T>;\nexport function first<T>(source: Source<T>, n: number): IterableIterator<T>;\nexport function first<T = any>(s_or_n: Source<T> | number, n?: number): IterableActivity<T, T> | IterableIterator<T> {\n if (!isSource(s_or_n)) return firstGen<T>(s_or_n);\n return firstGen<T>(n!)(s_or_n);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type GroupFn<T> = (row: T, index: number) => number | string;\nexport type GroupRow<T> = { key: string, value: T[] };\n\nfunction groupGen<T = any>(groupFn: GroupFn<T>): IterableActivity<T, GroupRow<T>> {\n return function* (source: Source<T>) {\n let i = -1;\n const group: { [key: string]: T[] } = {};\n for (const row of source) {\n const key = groupFn(row, ++i);\n if (!group[key]) {\n group[key] = [];\n }\n group[key].push(row);\n }\n for (const key in group) {\n yield { key, value: group[key] };\n }\n };\n}\n\nexport function group<T>(groupByFn: GroupFn<T>): IterableActivity<T, GroupRow<T>>;\nexport function group<T>(source: Source<T>, groupByFn: GroupFn<T>): IterableIterator<GroupRow<T>>;\nexport function group<T>(s_or_gbf: Source<T> | GroupFn<T>, groupByFn?: GroupFn<T>): IterableActivity<T, GroupRow<T>> | IterableIterator<GroupRow<T>> {\n return isSource(s_or_gbf) ? groupGen<T>(groupByFn!)(s_or_gbf) : groupGen<T>(s_or_gbf);\n}\n","import { Source } from \"../activities/activity.ts\";\nimport { each } from \"../activities/each.ts\";\n\nexport type AccessorT<T, U> = (row: T, currentIndex: number) => U;\n\nexport interface ObserverFactory<T, U> {\n (): Observer<T, U>;\n}\n\nexport interface Observer<T, U> {\n observe(r: T, idx: number): void;\n peek(): U;\n}\n\nexport function Accessor<T = any, U = any, V = any>(fof: ObserverFactory<V, U>, accesor: AccessorT<T, V>): Observer<T, U> {\n const s = fof();\n\n return {\n observe: (_: T, i: number) => {\n s.observe(accesor(_, i), i);\n },\n peek: s.peek\n };\n}\n\n// This is an pass through activity so a FlowObserver can be inserted into a pipeline ---\nexport function sensor<T, U = any>(s: Observer<T, U>) {\n return each((r, i) => s.observe(r, i));\n}\n\n// This converts a FlowObserver to an Activity ---\nexport function activity<T, U>(s: Observer<T, U>) {\n return function* (source: Source<T>) {\n let i = -1;\n for (const row of source) {\n s.observe(row, ++i);\n }\n yield s.peek();\n };\n}\n\n// This converts a FlowObserver to an ScalarActivity ---\nexport function scalar<T = any, U = any>(s: Observer<T, U>) {\n return function (source: Source<T>) {\n let i = -1;\n for (const row of source) {\n s.observe(row, ++i);\n }\n return s.peek();\n };\n}\n\n","import { Observer, Accessor, AccessorT } from \"./observer.ts\";\n\nfunction _max(): Observer<number, number> {\n let max: number;\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n max = value;\n } else if (max < value) {\n max = value;\n }\n },\n peek: () => max\n };\n}\n\nexport type MaxAccessor<T> = AccessorT<T, number>;\n\nexport function max(): Observer<number, number>;\nexport function max<T = any>(callbackFn: MaxAccessor<T>): Observer<T, number>;\nexport function max<T = any>(callbackFn?: MaxAccessor<T>): Observer<number, number> | Observer<T, number> {\n return callbackFn ? Accessor(_max, callbackFn) : _max();\n}\n","import { Observer, Accessor, AccessorT } from \"./observer.ts\";\n\nfunction _min(): Observer<number, number> {\n let min: number;\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n min = value;\n } else if (min > value) {\n min = value;\n }\n },\n peek: () => min\n };\n}\n\nexport type MinAccessor<T> = AccessorT<T, number>;\n\nexport function min(): Observer<number, number>;\nexport function min<T = any>(callbackFn: MinAccessor<T>): Observer<T, number>;\nexport function min<T = any>(callbackFn?: MinAccessor<T>): Observer<number, number> | Observer<T, number> {\n return callbackFn ? Accessor(_min, callbackFn) : _min();\n}\n","import { AccessorT, Observer, Accessor } from \"./observer.ts\";\nimport { max } from \"./max.ts\";\nimport { min } from \"./min.ts\";\n\nfunction _extent(): Observer<number, [number, number]> {\n const minFO = min();\n const maxFO = max();\n\n return {\n observe: (value: number, idx: number) => {\n minFO.observe(value, idx);\n maxFO.observe(value, idx);\n },\n peek: () => [minFO.peek(), maxFO.peek()]\n };\n}\n\nexport type ExtentAccessor<T> = AccessorT<T, number>;\n\nexport function extent(): Observer<number, [number, number]>;\nexport function extent<T = any>(callbackFn: ExtentAccessor<T>): Observer<T, [number, number]>;\nexport function extent<T = any>(callbackFn?: ExtentAccessor<T>): Observer<number, [number, number]> | Observer<T, [number, number]> {\n return callbackFn ? Accessor(_extent, callbackFn) : _extent();\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\nimport { extent } from \"../observers/extent.ts\";\nimport { scalar } from \"../observers/observer.ts\";\n\nexport type HistogramFn<T> = (row: T) => number;\nexport type HistogramRow<T> = { from: number, to: number, value: T[] };\nexport type OptionA = { buckets: number };\n/** \n * Histogram options specifying the minimum value and bucket range (size).\n * @property min - The minimum value for the first bucket's lower bound\n * @property range - The size/width of each bucket (distance between bucket boundaries)\n */\nexport type OptionB = { min: number, range: number };\nexport type Options = OptionA | OptionB;\n\nfunction isOptionA(_: Options): _ is OptionA {\n return (_ as OptionA).buckets !== undefined;\n}\n\nfunction histogramGen<T = any>(callbackFn: HistogramFn<T>, options: Options): IterableActivity<T, HistogramRow<T>> {\n return function* (_source: Source<T>) {\n let min: number;\n let bucketSize: number;\n\n let source;\n if (isOptionA(options)) {\n source = Array.isArray(_source) ? _source : [..._source];\n const minMax = scalar(extent(callbackFn))(source);\n if (minMax === undefined || minMax[0] === undefined || minMax[1] === undefined) {\n // For empty sources with buckets option, generate empty buckets with NaN bounds\n const buckets = options.buckets;\n for (let i = 0; i < buckets; ++i) {\n yield {\n from: NaN,\n to: NaN,\n value: []\n };\n }\n return;\n }\n min = minMax[0];\n const max = minMax[1];\n const buckets = options.buckets;\n bucketSize = (max - min) / buckets;\n } else {\n source = _source;\n min = options.min;\n bucketSize = options.range;\n }\n\n const histogram: { [key: number]: T[] } = {};\n\n let maxBucketID = 0;\n let hasData = false;\n for (const row of source) {\n hasData = true;\n const value = callbackFn(row);\n const bucketID = Math.floor((value - min) / bucketSize);\n if (maxBucketID < bucketID) {\n maxBucketID = bucketID;\n }\n if (histogram[bucketID] === undefined) {\n histogram[bucketID] = [];\n }\n histogram[bucketID].push(row);\n }\n\n // If no data, return empty for OptionB (min/range)\n if (!hasData) {\n return;\n }\n\n const lastBucket = histogram[maxBucketID];\n const from = min + maxBucketID * bucketSize;\n\n for (let i = 0; i <= maxBucketID; ++i) {\n // If all items in the last bucket match the \"to\" of the previous bucket, put them in there...\n if (i === maxBucketID - 1 && lastBucket.every(row => from === callbackFn(row))) {\n yield {\n from: min + i * bucketSize,\n to: min + (i + 1) * bucketSize,\n value: [...(histogram[i] || []), ...lastBucket]\n };\n break;\n }\n yield {\n from: min + i * bucketSize,\n to: min + (i + 1) * bucketSize,\n value: histogram[i] || []\n };\n }\n };\n}\n\nexport function histogram<T>(histogramByFn: HistogramFn<T>, options: Options): IterableActivity<T, HistogramRow<T>>;\nexport function histogram<T>(source: Source<T>, histogramByFn: HistogramFn<T>, options: Options): IterableIterator<HistogramRow<T>>;\nexport function histogram<T>(s_or_hf: Source<T> | HistogramFn<T>, hf_or_b: HistogramFn<T> | Options, options?: Options): IterableActivity<T, HistogramRow<T>> | IterableIterator<HistogramRow<T>> {\n return isSource(s_or_hf) ? histogramGen<T>(hf_or_b as HistogramFn<T>, options!)(s_or_hf) : histogramGen<T>(s_or_hf as HistogramFn<T>, hf_or_b as Options);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type JoinCallback<T, U, V> = (rowT: T, rowU: U, index: number) => V;\n\nfunction joinGen<T = any, U = any, V = any>(_sourceU: Source<U>, callbackFn: JoinCallback<T, U, V>): IterableActivity<T, V> {\n const sourceB = Array.isArray(_sourceU) ? _sourceU[Symbol.iterator]() : _sourceU;\n return function* (sourceT: Source<T>) {\n let i = -1;\n for (const item of sourceT) {\n yield callbackFn(item, sourceB.next().value, ++i);\n }\n };\n}\n\nexport function join<T, U, V>(sourceU: Source<U>, callbackFn: JoinCallback<T, U, V>): IterableActivity<T, V>;\nexport function join<T, U, V>(sourceU: Source<U>, callbackFn: JoinCallback<T, U, V>): IterableIterator<V>;\nexport function join<T, U, V>(sT_or_sU: Source<T> | Source<U>, sU_or_cb: Source<U> | JoinCallback<T, U, V>, callbackFn?: JoinCallback<T, U, V>): IterableActivity<T, V> | IterableIterator<V> {\n return isSource(sU_or_cb) ? joinGen(sU_or_cb, callbackFn!)(sT_or_sU as Source<T>) : joinGen(sT_or_sU as Source<U>, sU_or_cb);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type MapCallback<T, U> = (row: T, index: number) => U;\n\nfunction mapGen<T = any, U = any>(callbackFn: MapCallback<T, U>): IterableActivity<T, U> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n yield callbackFn(item, ++i);\n }\n };\n}\n\nexport function map<T, U>(callbackFn: MapCallback<T, U>): IterableActivity<T, U>;\nexport function map<T, U>(source: Source<T>, callbackFn: MapCallback<T, U>): IterableIterator<U>;\nexport function map<T, U>(s_or_cb: Source<T> | MapCallback<T, U>, callbackFn?: MapCallback<T, U>): IterableActivity<T, U> | IterableIterator<U> {\n return isSource(s_or_cb) ? mapGen(callbackFn!)(s_or_cb) : mapGen(s_or_cb);\n}\n","import { Source, IterableActivity, isSource } from \"./activity.ts\";\nimport { extent } from \"../observers/extent.ts\";\nimport { scalar } from \"../observers/observer.ts\";\nimport { map } from \"./map.ts\";\n\nfunction normalizeGen(): IterableActivity<number> {\n const calcExtent = scalar(extent());\n return function* (_source: Source<number>) {\n const source = Array.isArray(_source) ? _source : [..._source];\n const range = calcExtent(source);\n const divisor = (range[1] - range[0]) || 1;\n const normalizeMap = map((row: number) => (row - range[0]) / divisor);\n return yield* normalizeMap(source);\n };\n}\n\nexport function normalize(): IterableActivity<number>;\nexport function normalize(source: Source<number>): IterableIterator<number>;\nexport function normalize(s_or_undef?: Source<number>): IterableActivity<number> | IterableIterator<number> {\n return isSource(s_or_undef) ? normalizeGen()(s_or_undef) : normalizeGen();\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nfunction skipGen<T = any>(n: number): IterableActivity<T, T> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n if (++i >= n) {\n yield item;\n }\n }\n };\n}\n\nexport function skip<T = any>(n: number): IterableActivity<T, T>;\nexport function skip<T>(source: Source<T>, n: number): IterableIterator<T>;\nexport function skip<T = any>(s_or_n: Source<T> | number, n?: number): IterableActivity<T, T> | IterableIterator<T> {\n return isSource(s_or_n) ? skipGen<T>(n!)(s_or_n) : skipGen<T>(s_or_n);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type SortCallback<T> = (a: T, b: T) => number;\n\nfunction sortGen<T = any>(compareFn?: SortCallback<T>): IterableActivity<T> {\n return function* (source: Source<T>) {\n yield* (Array.isArray(source) ? source : [...source]).sort(compareFn);\n };\n}\n\nexport function sort<T = any>(callbackFn: SortCallback<T>): IterableActivity<T>;\nexport function sort<T = any>(source: Source<T>, callbackFn: SortCallback<T>): IterableIterator<T>;\nexport function sort<T = any>(s_or_cb: Source<T> | SortCallback<T>, callbackFn?: SortCallback<T>): IterableActivity<T> | IterableIterator<T> {\n return isSource(s_or_cb) ? sortGen(callbackFn!)(s_or_cb) : sortGen(s_or_cb);\n}\n\n","import { Observer } from \"./observer.ts\";\n\nexport function count<T = any>(): Observer<T, number> {\n let count: number;\n\n return {\n observe: (value: T, idx: number) => {\n if (idx === 0) {\n count = 0;\n }\n ++count;\n },\n peek: () => count\n };\n}\n","import { AccessorT, Observer, Accessor } from \"./observer.ts\";\n\nfunction _variance(): Observer<number, number | undefined> {\n let count: number;\n let mean: number;\n let sum: number;\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n count = 0;\n mean = 0;\n sum = 0;\n }\n const delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n },\n peek: () => count > 1 ? sum / (count - 1) : undefined\n };\n}\n\nexport type VarianceAccessor<T> = AccessorT<T, number>;\n\nexport function variance(): Observer<number, number | undefined>;\nexport function variance<T = any>(callbackFn: VarianceAccessor<T>): Observer<T, number | undefined>;\nexport function variance<T = any>(callbackFn?: VarianceAccessor<T>): Observer<number, number | undefined> | Observer<T, number | undefined> {\n return callbackFn ? Accessor(_variance, callbackFn) : _variance();\n}\n","import { variance } from \"./variance.ts\";\nimport { AccessorT, Observer, Accessor } from \"./observer.ts\";\n\nfunction _deviation(): Observer<number, number | undefined> {\n const v = variance();\n\n return {\n observe: (value: number, idx: number) => {\n v.observe(value, idx);\n },\n peek: () => {\n const variance = v.peek();\n return variance !== undefined ? Math.sqrt(variance) : variance;\n }\n };\n}\n\nexport type DeviationAccessor<T> = AccessorT<T, number>;\n\nexport function deviation(): Observer<number, number | undefined>;\nexport function deviation<T = any>(callbackFn: DeviationAccessor<T>): Observer<T, number | undefined>;\nexport function deviation<T = any>(callbackFn?: DeviationAccessor<T>): Observer<number, number | undefined> | Observer<T, number | undefined> {\n return callbackFn ? Accessor(_deviation, callbackFn) : _deviation();\n}\n","import { Observer, Accessor } from \"./observer.ts\";\n\nfunction _mean(): Observer<number, number> {\n let total: number;\n let count: number;\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n total = value;\n } else {\n total += value;\n }\n count = idx;\n },\n peek: () => total / (count + 1)\n };\n}\n\nexport type MeanAccessor<T> = (row: T, currentIndex: number) => number;\n\nexport function mean(): Observer<number, number>;\nexport function mean<T = any>(callbackFn: MeanAccessor<T>): Observer<T, number>;\nexport function mean<T = any>(callbackFn?: MeanAccessor<T>): Observer<number, number> | Observer<T, number> {\n return callbackFn ? Accessor(_mean, callbackFn) : _mean();\n}\n","import { max } from \"./max.ts\";\nimport { min } from \"./min.ts\";\nimport { mean } from \"./mean.ts\";\nimport { variance } from \"./variance.ts\";\nimport { Observer, Accessor } from \"./observer.ts\";\n\nexport type DistributionCallback<T> = (row: T, currentIndex: number) => number;\n\nexport type DistributionT = {\n min: number,\n mean: number,\n max: number,\n deviation: number | undefined,\n variance: number | undefined\n} | undefined;\n\nfunction _distribution(): Observer<number, DistributionT> {\n const minFO = min();\n const maxFO = max();\n const meanFO = mean();\n const varianceFO = variance();\n\n return {\n observe: (value: number, idx: number) => {\n minFO.observe(value, idx);\n maxFO.observe(value, idx);\n meanFO.observe(value, idx);\n varianceFO.observe(value, idx);\n },\n peek: () => {\n const minResult = minFO.peek();\n if (minResult === undefined) return undefined;\n const varianceResult = varianceFO.peek();\n return {\n min: minResult,\n max: maxFO.peek(),\n mean: meanFO.peek(),\n variance: varianceResult,\n deviation: varianceResult !== undefined ? Math.sqrt(varianceResult) : undefined\n };\n }\n };\n}\n\nexport type DistributionAccessor<T> = (row: T, currentIndex: number) => number;\n\nexport function distribution(): Observer<number, DistributionT>;\nexport function distribution<T = any>(callbackFn: DistributionAccessor<T>): Observer<T, DistributionT>;\nexport function distribution<T = any>(callbackFn?: DistributionAccessor<T>): Observer<number, DistributionT> | Observer<T, DistributionT> {\n return callbackFn ? Accessor(_distribution, callbackFn) : _distribution();\n}\n","import { AccessorT, Observer, Accessor } from \"./observer.ts\";\n\nfunction _median(): Observer<number, number> {\n let values: number[];\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n values = [];\n }\n values.push(value);\n },\n peek: () => {\n const sorted = values.sort((l, r) => l - r);\n const mid = sorted.length / 2;\n if (sorted.length % 2 === 0) {\n return (sorted[mid - 1] + sorted[mid]) / 2;\n } else {\n return sorted[Math.floor(mid)];\n }\n }\n };\n}\n\nexport type MedianAccessor<T> = AccessorT<T, number>;\n\nexport function median(): Observer<number, number>;\nexport function median<T = any>(callbackFn: MedianAccessor<T>): Observer<T, number>;\nexport function median<T = any>(callbackFn?: MedianAccessor<T>): Observer<number, number> | Observer<T, number> {\n return callbackFn ? Accessor(_median, callbackFn) : _median();\n}","import { median } from \"./median.ts\";\nimport { AccessorT, Observer, Accessor, scalar } from \"./observer.ts\";\n\nexport type QuartileAccessor<T> = AccessorT<T, number>;\n\nexport type QuartileT = [number, number, number, number, number] | undefined;\n\nfunction _quartile(): Observer<number, QuartileT> {\n let values: number[];\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n values = [];\n }\n values.push(value);\n },\n peek: () => {\n const sorted = values.sort((l, r) => l - r);\n const mid = sorted.length / 2;\n let medianVal: number;\n let lower: number[];\n let upper: number[];\n if (sorted.length < 2) {\n return undefined;\n } else if (sorted.length % 2 === 0) {\n medianVal = (sorted[mid - 1] + sorted[mid]) / 2;\n lower = sorted.slice(0, mid);\n upper = sorted.slice(mid);\n } else {\n medianVal = sorted[Math.floor(mid)];\n lower = sorted.slice(0, Math.floor(mid));\n upper = sorted.slice(Math.ceil(mid));\n }\n return [sorted[0], scalar(median())(lower)!, medianVal, scalar(median())(upper)!, sorted[sorted.length - 1]];\n }\n };\n}\n\nexport function quartile(): Observer<number, QuartileT>;\nexport function quartile<T = any>(callbackFn: QuartileAccessor<T>): Observer<T, QuartileT>;\nexport function quartile<T = any>(callbackFn?: QuartileAccessor<T>): Observer<number, QuartileT> | Observer<T, QuartileT> {\n return callbackFn ? Accessor(_quartile, callbackFn) : _quartile();\n}","import { Observer } from \"./observer.ts\";\n\nexport type ReduceCallback<T, U> = (previousValue: U, currentValue: T, currentIndex: number) => U;\n\nfunction _reduce<T, U>(callback: ReduceCallback<T, U>, initialValue?: U): Observer<T, U> {\n let reduced: U;\n\n return {\n observe: (value: T, idx: number) => {\n if (idx === 0) {\n reduced = initialValue === undefined ? (value as unknown as U) : callback(initialValue, value, idx);\n } else {\n reduced = callback(reduced, value, idx);\n }\n },\n peek: () => reduced\n };\n}\n\nexport function reduce<T = any, U = any>(callbackFn: ReduceCallback<T, U>, initialValue?: U): Observer<T, U> {\n return _reduce(callbackFn, initialValue);\n}\n","export function* generate<U>(generatorFn: () => U, maxLen?: number): IterableIterator<U> {\n let i = -1;\n while (maxLen === undefined || ++i < maxLen) {\n yield generatorFn();\n }\n}\n","import { IterableActivity, ScalarActivity, Source, isSource } from \"../activities/activity.ts\";\n\n// =============================================================================\n// Constants and Base Types\n// =============================================================================\n\nconst GeneratorFunction = (function* () { }).constructor;\n\ntype AnyIterableActivity = IterableActivity<any, any>;\ntype AnyScalarActivity = ScalarActivity<any, any>;\ntype AnyActivity = AnyIterableActivity | AnyScalarActivity;\n\n// =============================================================================\n// Type Utilities for Activity Analysis\n// =============================================================================\n\ntype ActivityIn<A extends AnyActivity> = Parameters<A>[0] extends Source<infer Input> ? Input : never;\ntype ActivityOut<A extends AnyActivity> = ReturnType<A> extends IterableIterator<infer Output> ? Output : ReturnType<A>;\ntype ActivityIsScalar<A extends AnyActivity> = ReturnType<A> extends IterableIterator<any> ? false : true;\n\ntype FirstActivity<Activities extends readonly [AnyActivity, ...AnyActivity[]]> = Activities[0];\n\n// =============================================================================\n// Type Resolution for Activity Chains (Without Source)\n// =============================================================================\n\n/**\n * Recursively resolves the output type of a chain of activities starting from an iterable activity.\n * Validates that each activity's input type matches the previous activity's output type.\n */\n\n// Handle a scalar (non-iterable) activity in the chain\ntype ResolveScalarActivity<CurrentOut, InitialIn, Next extends AnyActivity, Rest extends readonly AnyActivity[]> =\n CurrentOut extends ActivityIn<Next>\n ? Rest extends []\n ? { kind: \"scalar\"; in: InitialIn; out: ActivityOut<Next> }\n : { kind: \"error\" } // Scalar activities must be terminal\n : { kind: \"error\" }; // Type mismatch\n\n// Handle an iterable activity in the chain\ntype ResolveIterableActivity<CurrentOut, InitialIn, Next extends AnyActivity, Rest extends readonly AnyActivity[]> =\n CurrentOut extends ActivityIn<Next>\n ? ResolveIterableTail<ActivityOut<Next>, InitialIn, Rest>\n : { kind: \"error\" }; // Type mismatch\n\n// Process the next activity in the chain\ntype ResolveNextActivity<CurrentOut, InitialIn, Next extends AnyActivity, Rest extends readonly AnyActivity[]> =\n ActivityIsScalar<Next> extends true\n ? ResolveScalarActivity<CurrentOut, InitialIn, Next, Rest>\n : ResolveIterableActivity<CurrentOut, InitialIn, Next, Rest>;\n\n// Check if we've reached the end of the activity chain\ntype ResolveIterableTail<CurrentOut, InitialIn, Tail extends readonly AnyActivity[]> =\n Tail extends []\n ? { kind: \"iterable\"; in: InitialIn; out: CurrentOut }\n : Tail extends readonly [infer Next extends AnyActivity, ...infer Rest extends readonly AnyActivity[]]\n ? ResolveNextActivity<CurrentOut, InitialIn, Next, Rest>\n : { kind: \"error\" };\n\n/**\n * Resolves the complete type signature for a chain of activities without a source.\n * Determines the input, output, and whether the final result is scalar or iterable.\n */\n\n// Handle when the first activity is scalar (must be the only activity)\ntype ResolveFirstScalarActivity<First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n Rest extends []\n ? { kind: \"scalar\"; in: ActivityIn<First>; out: ActivityOut<First> }\n : { kind: \"error\" }; // Scalar activities cannot be followed by others\n\n// Handle when the first activity is iterable\ntype ResolveFirstIterableActivity<First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n Rest extends []\n ? { kind: \"iterable\"; in: ActivityIn<First>; out: ActivityOut<First> }\n : ResolveIterableTail<ActivityOut<First>, ActivityIn<First>, Rest>;\n\n// Determine how to handle the first activity based on whether it's scalar or iterable\ntype ResolveFirstActivity<First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n ActivityIsScalar<First> extends true\n ? ResolveFirstScalarActivity<First, Rest>\n : ResolveFirstIterableActivity<First, Rest>;\n\ntype ResolveActivities<Activities extends readonly [AnyActivity, ...AnyActivity[]]> =\n Activities extends readonly [infer First extends AnyActivity, ...infer Rest extends readonly AnyActivity[]]\n ? ResolveFirstActivity<First, Rest>\n : { kind: \"error\" };\n\n/**\n * Return type for pipe when called without a source - returns a reusable activity function.\n */\ntype PipeWithoutSourceReturn<Activities extends readonly [AnyActivity, ...AnyActivity[]]> =\n ResolveActivities<Activities> extends infer Result\n ? Result extends { kind: \"iterable\"; in: infer In; out: infer Out }\n ? IterableActivity<In & ActivityIn<FirstActivity<Activities>>, Out>\n : Result extends { kind: \"scalar\"; in: infer In; out: infer Out }\n ? ScalarActivity<In & ActivityIn<FirstActivity<Activities>>, Out>\n : never\n : never;\n\n// =============================================================================\n// Type Resolution for Activity Chains (With Source)\n// =============================================================================\n\n/**\n * Resolves the output type when a source is provided as the first argument to pipe.\n * Validates that the source type is compatible with the first activity's input.\n */\n\n// Extract the final result kind from ResolveIterableTail\ntype ExtractFinalResultKind<Result> =\n Result extends { kind: \"iterable\"; out: infer Out }\n ? { kind: \"iterable\"; out: Out }\n : Result extends { kind: \"scalar\"; out: infer Out }\n ? { kind: \"scalar\"; out: Out }\n : { kind: \"error\" };\n\n// Handle when the first activity after source is scalar\ntype ResolveSourceWithScalarActivity<TSource, First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n TSource extends ActivityIn<First>\n ? Rest extends []\n ? { kind: \"scalar\"; out: ActivityOut<First> }\n : { kind: \"error\" } // Scalar activities must be terminal\n : { kind: \"error\" }; // Type mismatch\n\n// Handle when the first activity after source is iterable\ntype ResolveSourceWithIterableActivity<TSource, First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n TSource extends ActivityIn<First>\n ? Rest extends []\n ? { kind: \"iterable\"; out: ActivityOut<First> }\n : ExtractFinalResultKind<ResolveIterableTail<ActivityOut<First>, ActivityIn<First>, Rest>>\n : { kind: \"error\" }; // Type mismatch\n\n// Determine how to handle the source with the first activity\ntype ResolveSourceWithFirstActivity<TSource, First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n ActivityIsScalar<First> extends true\n ? ResolveSourceWithScalarActivity<TSource, First, Rest>\n : ResolveSourceWithIterableActivity<TSource, First, Rest>;\n\ntype ResolveSourceActivities<TSource, Activities extends readonly AnyActivity[]> =\n Activities extends []\n ? { kind: \"source\"; out: TSource }\n : Activities extends readonly [infer First extends AnyActivity, ...infer Rest extends readonly AnyActivity[]]\n ? ResolveSourceWithFirstActivity<TSource, First, Rest>\n : { kind: \"error\" };\n\n/**\n * Return type for pipe when called with a source - executes immediately and returns the result.\n */\ntype PipeWithSourceReturn<TSource, Activities extends readonly AnyActivity[]> =\n ResolveSourceActivities<TSource, Activities> extends infer Result\n ? Result extends { kind: \"iterable\"; out: infer Out }\n ? IterableIterator<Out>\n : Result extends { kind: \"scalar\"; out: infer Out }\n ? Out\n : Result extends { kind: \"source\"; out: infer Out }\n ? Source<Out>\n : never\n : never;\n\n// =============================================================================\n// Runtime Implementation\n// =============================================================================\n\n/**\n * Internal helper that chains activities together at runtime.\n * Returns a function that accepts a source and applies all activities in sequence.\n * Handles both generator (iterable) and scalar activities appropriately.\n */\nfunction chainGen(...activities: AnyActivity[]) {\n if (activities.length === 0) {\n return <T>(source: Source<T>) => source;\n }\n\n const isGenerator = activities[activities.length - 1] instanceof GeneratorFunction;\n const len = activities.length;\n\n if (isGenerator) {\n return function* (source: Source<unknown>) {\n let tail: unknown = source;\n for (let i = 0; i < len; i++) {\n tail = activities[i](tail as Source<unknown>);\n }\n yield* tail as IterableIterator<unknown>;\n };\n }\n\n return (source: Source<unknown>) => {\n let tail: unknown = source;\n for (let i = 0; i < len; i++) {\n tail = activities[i](tail as Source<unknown>);\n }\n return tail;\n };\n}\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Pipes activities together to create a data processing pipeline.\n * \n * Two usage modes:\n * 1. Without source: pipe(activity1, activity2, ...) - returns a reusable activity function\n * 2. With source: pipe(source, activity1, activity2, ...) - executes immediately and returns result\n * \n * Activities are chained left-to-right, with type checking ensuring output of each activity\n * matches the input of the next.\n */\nexport function pipe<const Activities extends readonly [AnyActivity, ...AnyActivity[]]>(...activities: Activities): PipeWithoutSourceReturn<Activities>;\nexport function pipe<TSource, const Activities extends readonly AnyActivity[]>(source: Source<TSource>, ...activities: Activities): PipeWithSourceReturn<TSource, Activities>;\nexport function pipe(...args: any[]): any {\n if (args.length === 0) {\n throw new TypeError(\"pipe requires at least one argument\");\n }\n\n // Handle source-based invocation\n if (isSource(args[0])) {\n return args.length === 1 ? args[0] : chainGen(...args.slice(1))(args[0]);\n }\n\n // Handle activity-based invocation\n return chainGen(...args);\n}\n\n// =============================================================================\n// Backward Compatibility\n// =============================================================================\n\n/**\n * @deprecated Use pipe instead. Maintained for backward compatibility.\n */\nexport const chain = pipe;\n"],"names":["isSource","source","Symbol","iterator","Array","isArray","concatGen","concatSource","concat","s_or_n","eachGen","callbackFn","i","item","each","s_or_cb","entriesGen","entries","filterGen","filter","firstGen","n","first","groupGen","groupFn","group","row","key","push","value","s_or_gbf","groupByFn","Accessor","fof","accesor","s","observe","__name","_","peek","sensor","r","activity","scalar","_max","max","idx","_min","min","_extent","minFO","maxFO","extent","isOptionA","buckets","histogramGen","options","_source","bucketSize","minMax","from","NaN","to","range","histogram","maxBucketID","hasData","bucketID","Math","floor","lastBucket","every","s_or_hf","hf_or_b","joinGen","_sourceU","sourceB","sourceT","next","join","sT_or_sU","sU_or_cb","mapGen","map","normalizeGen","calcExtent","divisor","normalizeMap","normalize","s_or_undef","skipGen","skip","sortGen","compareFn","sort","count","_variance","mean","sum","delta","variance","_deviation","v","sqrt","deviation","_mean","total","_distribution","meanFO","varianceFO","minResult","varianceResult","distribution","_median","values","sorted","l","mid","length","median","_quartile","medianVal","lower","upper","slice","ceil","quartile","_reduce","callback","initialValue","reduced","reduce","generate","generatorFn","maxLen","GeneratorFunction","constructor","chainGen","activities","isGenerator","len","tail","pipe","args","TypeError","chain"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.cjs","names":[],"sources":["../src/activities/activity.ts","../src/activities/concat.ts","../src/activities/each.ts","../src/activities/entries.ts","../src/activities/filter.ts","../src/activities/first.ts","../src/activities/group.ts","../src/observers/observer.ts","../src/observers/max.ts","../src/observers/min.ts","../src/observers/extent.ts","../src/activities/histogram.ts","../src/activities/join.ts","../src/activities/map.ts","../src/activities/normalize.ts","../src/activities/skip.ts","../src/activities/sort.ts","../src/observers/count.ts","../src/observers/variance.ts","../src/observers/deviation.ts","../src/observers/mean.ts","../src/observers/distribution.ts","../src/observers/median.ts","../src/observers/quartile.ts","../src/observers/reduce.ts","../src/utils/generate.ts","../src/utils/pipe.ts"],"sourcesContent":["export type Source<T> = IterableIterator<T> | T[];\nexport type IterableActivity<T, U = T> = (source: Source<T>) => IterableIterator<U>;\nexport type ScalarActivity<T, U = T> = (source: Source<T>) => U;\nexport type Activity<T, U = T> = IterableActivity<T, U> | ScalarActivity<T, U>;\n\nexport function isSource<T>(source: Source<T> | any): source is Source<T> {\n return source && (typeof source[Symbol.iterator] === \"function\" || Array.isArray(source));\n}\n","import { Source, IterableActivity } from \"./activity.ts\";\n\nfunction concatGen<T = any>(concatSource: Source<T>): IterableActivity<T> {\n return function* (source: Source<T>) {\n yield* source;\n yield* concatSource;\n };\n}\n\nexport function concat<T = any>(concatSource: Source<T>): IterableActivity<T, T>;\nexport function concat<T>(source: Source<T>, concatSource: Source<T>): IterableIterator<T>;\nexport function concat<T = any>(s_or_n: Source<T>, concatSource?: Source<T>): IterableActivity<T, T> | IterableIterator<T> {\n return concatSource !== undefined ? concatGen<T>(concatSource!)(s_or_n) : concatGen<T>(s_or_n);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type EachCallback<T> = (value: T, index: number) => void;\n\nfunction eachGen<T = any>(callbackFn: EachCallback<T>): IterableActivity<T> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n callbackFn(item, ++i);\n yield item;\n }\n };\n}\n\nexport function each<T = any>(callbackFn: EachCallback<T>): IterableActivity<T>;\nexport function each<T>(source: Source<T>, callbackFn: EachCallback<T>): IterableIterator<T>;\nexport function each<T>(s_or_cb: Source<T> | EachCallback<T>, callbackFn?: EachCallback<T>): IterableActivity<T> | IterableIterator<T> {\n return isSource(s_or_cb) ? eachGen(callbackFn!)(s_or_cb) : eachGen(s_or_cb);\n}\n","import { IterableActivity, Source } from \"./activity.ts\";\n\n// Array.entries\nfunction entriesGen<T = any>(): IterableActivity<T, [number, T]> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n yield [++i, item];\n }\n };\n}\n\nexport function entries<T = any>(): IterableActivity<T, [number, T]>;\nexport function entries<T>(source: Source<T>): IterableIterator<[number, T]>;\nexport function entries<T>(source?: Source<T>): IterableActivity<T, [number, T]> | IterableIterator<[number, T]> {\n return source ? entriesGen<T>()(source) : entriesGen<T>();\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type FilterCallback<T> = (value: T, index: number) => boolean;\n\nfunction filterGen<T = any>(callbackFn: FilterCallback<T>): IterableActivity<T> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n if (callbackFn(item, ++i)) {\n yield item;\n }\n }\n };\n}\n\nexport function filter<T = any>(callbackFn: FilterCallback<T>): IterableActivity<T>;\nexport function filter<T>(source: Source<T>, callbackFn: FilterCallback<T>): IterableIterator<T>;\nexport function filter<T>(s_or_cb: Source<T> | FilterCallback<T>, callbackFn?: FilterCallback<T>): IterableActivity<T> | IterableIterator<T> {\n return isSource(s_or_cb) ? filterGen(callbackFn!)(s_or_cb) : filterGen(s_or_cb);\n}\n","import { IterableActivity, isSource, Source } from \"./activity.ts\";\n\nfunction firstGen<T = any>(n: number): IterableActivity<T, T> {\n return function* (source: Source<T>) {\n let i = 0;\n for (const item of source) {\n yield item;\n if (++i >= n) {\n break;\n }\n }\n };\n}\n\nexport function first<T = any>(n: number): IterableActivity<T, T>;\nexport function first<T>(source: Source<T>, n: number): IterableIterator<T>;\nexport function first<T = any>(s_or_n: Source<T> | number, n?: number): IterableActivity<T, T> | IterableIterator<T> {\n if (!isSource(s_or_n)) return firstGen<T>(s_or_n);\n return firstGen<T>(n!)(s_or_n);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type GroupFn<T> = (row: T, index: number) => number | string;\nexport type GroupRow<T> = { key: string, value: T[] };\n\nfunction groupGen<T = any>(groupFn: GroupFn<T>): IterableActivity<T, GroupRow<T>> {\n return function* (source: Source<T>) {\n let i = -1;\n const group: { [key: string]: T[] } = {};\n for (const row of source) {\n const key = groupFn(row, ++i);\n if (!group[key]) {\n group[key] = [];\n }\n group[key].push(row);\n }\n for (const key in group) {\n yield { key, value: group[key] };\n }\n };\n}\n\nexport function group<T>(groupByFn: GroupFn<T>): IterableActivity<T, GroupRow<T>>;\nexport function group<T>(source: Source<T>, groupByFn: GroupFn<T>): IterableIterator<GroupRow<T>>;\nexport function group<T>(s_or_gbf: Source<T> | GroupFn<T>, groupByFn?: GroupFn<T>): IterableActivity<T, GroupRow<T>> | IterableIterator<GroupRow<T>> {\n return isSource(s_or_gbf) ? groupGen<T>(groupByFn!)(s_or_gbf) : groupGen<T>(s_or_gbf);\n}\n","import { Source } from \"../activities/activity.ts\";\nimport { each } from \"../activities/each.ts\";\n\nexport type AccessorT<T, U> = (row: T, currentIndex: number) => U;\n\nexport interface ObserverFactory<T, U> {\n (): Observer<T, U>;\n}\n\nexport interface Observer<T, U> {\n observe(r: T, idx: number): void;\n peek(): U;\n}\n\nexport function Accessor<T = any, U = any, V = any>(fof: ObserverFactory<V, U>, accesor: AccessorT<T, V>): Observer<T, U> {\n const s = fof();\n\n return {\n observe: (_: T, i: number) => {\n s.observe(accesor(_, i), i);\n },\n peek: s.peek\n };\n}\n\n// This is an pass through activity so a FlowObserver can be inserted into a pipeline ---\nexport function sensor<T, U = any>(s: Observer<T, U>) {\n return each((r, i) => s.observe(r, i));\n}\n\n// This converts a FlowObserver to an Activity ---\nexport function activity<T, U>(s: Observer<T, U>) {\n return function* (source: Source<T>) {\n let i = -1;\n for (const row of source) {\n s.observe(row, ++i);\n }\n yield s.peek();\n };\n}\n\n// This converts a FlowObserver to an ScalarActivity ---\nexport function scalar<T = any, U = any>(s: Observer<T, U>) {\n return function (source: Source<T>) {\n let i = -1;\n for (const row of source) {\n s.observe(row, ++i);\n }\n return s.peek();\n };\n}\n\n","import { Observer, Accessor, AccessorT } from \"./observer.ts\";\n\nfunction _max(): Observer<number, number> {\n let max: number;\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n max = value;\n } else if (max < value) {\n max = value;\n }\n },\n peek: () => max\n };\n}\n\nexport type MaxAccessor<T> = AccessorT<T, number>;\n\nexport function max(): Observer<number, number>;\nexport function max<T = any>(callbackFn: MaxAccessor<T>): Observer<T, number>;\nexport function max<T = any>(callbackFn?: MaxAccessor<T>): Observer<number, number> | Observer<T, number> {\n return callbackFn ? Accessor(_max, callbackFn) : _max();\n}\n","import { Observer, Accessor, AccessorT } from \"./observer.ts\";\n\nfunction _min(): Observer<number, number> {\n let min: number;\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n min = value;\n } else if (min > value) {\n min = value;\n }\n },\n peek: () => min\n };\n}\n\nexport type MinAccessor<T> = AccessorT<T, number>;\n\nexport function min(): Observer<number, number>;\nexport function min<T = any>(callbackFn: MinAccessor<T>): Observer<T, number>;\nexport function min<T = any>(callbackFn?: MinAccessor<T>): Observer<number, number> | Observer<T, number> {\n return callbackFn ? Accessor(_min, callbackFn) : _min();\n}\n","import { AccessorT, Observer, Accessor } from \"./observer.ts\";\nimport { max } from \"./max.ts\";\nimport { min } from \"./min.ts\";\n\nfunction _extent(): Observer<number, [number, number]> {\n const minFO = min();\n const maxFO = max();\n\n return {\n observe: (value: number, idx: number) => {\n minFO.observe(value, idx);\n maxFO.observe(value, idx);\n },\n peek: () => [minFO.peek(), maxFO.peek()]\n };\n}\n\nexport type ExtentAccessor<T> = AccessorT<T, number>;\n\nexport function extent(): Observer<number, [number, number]>;\nexport function extent<T = any>(callbackFn: ExtentAccessor<T>): Observer<T, [number, number]>;\nexport function extent<T = any>(callbackFn?: ExtentAccessor<T>): Observer<number, [number, number]> | Observer<T, [number, number]> {\n return callbackFn ? Accessor(_extent, callbackFn) : _extent();\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\nimport { extent } from \"../observers/extent.ts\";\nimport { scalar } from \"../observers/observer.ts\";\n\nexport type HistogramFn<T> = (row: T) => number;\nexport type HistogramRow<T> = { from: number, to: number, value: T[] };\nexport type OptionA = { buckets: number };\n/** \n * Histogram options specifying the minimum value and bucket range (size).\n * @property min - The minimum value for the first bucket's lower bound\n * @property range - The size/width of each bucket (distance between bucket boundaries)\n */\nexport type OptionB = { min: number, range: number };\nexport type Options = OptionA | OptionB;\n\nfunction isOptionA(_: Options): _ is OptionA {\n return (_ as OptionA).buckets !== undefined;\n}\n\nfunction histogramGen<T = any>(callbackFn: HistogramFn<T>, options: Options): IterableActivity<T, HistogramRow<T>> {\n return function* (_source: Source<T>) {\n let min: number;\n let bucketSize: number;\n\n let source;\n if (isOptionA(options)) {\n source = Array.isArray(_source) ? _source : [..._source];\n const minMax = scalar(extent(callbackFn))(source);\n if (minMax === undefined || minMax[0] === undefined || minMax[1] === undefined) {\n // For empty sources with buckets option, generate empty buckets with NaN bounds\n const buckets = options.buckets;\n for (let i = 0; i < buckets; ++i) {\n yield {\n from: NaN,\n to: NaN,\n value: []\n };\n }\n return;\n }\n min = minMax[0];\n const max = minMax[1];\n const buckets = options.buckets;\n bucketSize = (max - min) / buckets;\n } else {\n source = _source;\n min = options.min;\n bucketSize = options.range;\n }\n\n const histogram: { [key: number]: T[] } = {};\n\n let maxBucketID = 0;\n let hasData = false;\n for (const row of source) {\n hasData = true;\n const value = callbackFn(row);\n const bucketID = Math.floor((value - min) / bucketSize);\n if (maxBucketID < bucketID) {\n maxBucketID = bucketID;\n }\n if (histogram[bucketID] === undefined) {\n histogram[bucketID] = [];\n }\n histogram[bucketID].push(row);\n }\n\n // If no data, return empty for OptionB (min/range)\n if (!hasData) {\n return;\n }\n\n const lastBucket = histogram[maxBucketID];\n const from = min + maxBucketID * bucketSize;\n\n for (let i = 0; i <= maxBucketID; ++i) {\n // If all items in the last bucket match the \"to\" of the previous bucket, put them in there...\n if (i === maxBucketID - 1 && lastBucket.every(row => from === callbackFn(row))) {\n yield {\n from: min + i * bucketSize,\n to: min + (i + 1) * bucketSize,\n value: [...(histogram[i] || []), ...lastBucket]\n };\n break;\n }\n yield {\n from: min + i * bucketSize,\n to: min + (i + 1) * bucketSize,\n value: histogram[i] || []\n };\n }\n };\n}\n\nexport function histogram<T>(histogramByFn: HistogramFn<T>, options: Options): IterableActivity<T, HistogramRow<T>>;\nexport function histogram<T>(source: Source<T>, histogramByFn: HistogramFn<T>, options: Options): IterableIterator<HistogramRow<T>>;\nexport function histogram<T>(s_or_hf: Source<T> | HistogramFn<T>, hf_or_b: HistogramFn<T> | Options, options?: Options): IterableActivity<T, HistogramRow<T>> | IterableIterator<HistogramRow<T>> {\n return isSource(s_or_hf) ? histogramGen<T>(hf_or_b as HistogramFn<T>, options!)(s_or_hf) : histogramGen<T>(s_or_hf as HistogramFn<T>, hf_or_b as Options);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type JoinCallback<T, U, V> = (rowT: T, rowU: U, index: number) => V;\n\nfunction joinGen<T = any, U = any, V = any>(_sourceU: Source<U>, callbackFn: JoinCallback<T, U, V>): IterableActivity<T, V> {\n const sourceB = Array.isArray(_sourceU) ? _sourceU[Symbol.iterator]() : _sourceU;\n return function* (sourceT: Source<T>) {\n let i = -1;\n for (const item of sourceT) {\n yield callbackFn(item, sourceB.next().value, ++i);\n }\n };\n}\n\nexport function join<T, U, V>(sourceU: Source<U>, callbackFn: JoinCallback<T, U, V>): IterableActivity<T, V>;\nexport function join<T, U, V>(sourceU: Source<U>, callbackFn: JoinCallback<T, U, V>): IterableIterator<V>;\nexport function join<T, U, V>(sT_or_sU: Source<T> | Source<U>, sU_or_cb: Source<U> | JoinCallback<T, U, V>, callbackFn?: JoinCallback<T, U, V>): IterableActivity<T, V> | IterableIterator<V> {\n return isSource(sU_or_cb) ? joinGen(sU_or_cb, callbackFn!)(sT_or_sU as Source<T>) : joinGen(sT_or_sU as Source<U>, sU_or_cb);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type MapCallback<T, U> = (row: T, index: number) => U;\n\nfunction mapGen<T = any, U = any>(callbackFn: MapCallback<T, U>): IterableActivity<T, U> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n yield callbackFn(item, ++i);\n }\n };\n}\n\nexport function map<T, U>(callbackFn: MapCallback<T, U>): IterableActivity<T, U>;\nexport function map<T, U>(source: Source<T>, callbackFn: MapCallback<T, U>): IterableIterator<U>;\nexport function map<T, U>(s_or_cb: Source<T> | MapCallback<T, U>, callbackFn?: MapCallback<T, U>): IterableActivity<T, U> | IterableIterator<U> {\n return isSource(s_or_cb) ? mapGen(callbackFn!)(s_or_cb) : mapGen(s_or_cb);\n}\n","import { Source, IterableActivity, isSource } from \"./activity.ts\";\nimport { extent } from \"../observers/extent.ts\";\nimport { scalar } from \"../observers/observer.ts\";\nimport { map } from \"./map.ts\";\n\nfunction normalizeGen(): IterableActivity<number> {\n const calcExtent = scalar(extent());\n return function* (_source: Source<number>) {\n const source = Array.isArray(_source) ? _source : [..._source];\n const range = calcExtent(source);\n const divisor = (range[1] - range[0]) || 1;\n const normalizeMap = map((row: number) => (row - range[0]) / divisor);\n return yield* normalizeMap(source);\n };\n}\n\nexport function normalize(): IterableActivity<number>;\nexport function normalize(source: Source<number>): IterableIterator<number>;\nexport function normalize(s_or_undef?: Source<number>): IterableActivity<number> | IterableIterator<number> {\n return isSource(s_or_undef) ? normalizeGen()(s_or_undef) : normalizeGen();\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nfunction skipGen<T = any>(n: number): IterableActivity<T, T> {\n return function* (source: Source<T>) {\n let i = -1;\n for (const item of source) {\n if (++i >= n) {\n yield item;\n }\n }\n };\n}\n\nexport function skip<T = any>(n: number): IterableActivity<T, T>;\nexport function skip<T>(source: Source<T>, n: number): IterableIterator<T>;\nexport function skip<T = any>(s_or_n: Source<T> | number, n?: number): IterableActivity<T, T> | IterableIterator<T> {\n return isSource(s_or_n) ? skipGen<T>(n!)(s_or_n) : skipGen<T>(s_or_n);\n}\n","import { IterableActivity, Source, isSource } from \"./activity.ts\";\n\nexport type SortCallback<T> = (a: T, b: T) => number;\n\nfunction sortGen<T = any>(compareFn?: SortCallback<T>): IterableActivity<T> {\n return function* (source: Source<T>) {\n yield* (Array.isArray(source) ? source : [...source]).sort(compareFn);\n };\n}\n\nexport function sort<T = any>(callbackFn: SortCallback<T>): IterableActivity<T>;\nexport function sort<T = any>(source: Source<T>, callbackFn: SortCallback<T>): IterableIterator<T>;\nexport function sort<T = any>(s_or_cb: Source<T> | SortCallback<T>, callbackFn?: SortCallback<T>): IterableActivity<T> | IterableIterator<T> {\n return isSource(s_or_cb) ? sortGen(callbackFn!)(s_or_cb) : sortGen(s_or_cb);\n}\n\n","import { Observer } from \"./observer.ts\";\n\nexport function count<T = any>(): Observer<T, number> {\n let count: number;\n\n return {\n observe: (value: T, idx: number) => {\n if (idx === 0) {\n count = 0;\n }\n ++count;\n },\n peek: () => count\n };\n}\n","import { AccessorT, Observer, Accessor } from \"./observer.ts\";\n\nfunction _variance(): Observer<number, number | undefined> {\n let count: number;\n let mean: number;\n let sum: number;\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n count = 0;\n mean = 0;\n sum = 0;\n }\n const delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n },\n peek: () => count > 1 ? sum / (count - 1) : undefined\n };\n}\n\nexport type VarianceAccessor<T> = AccessorT<T, number>;\n\nexport function variance(): Observer<number, number | undefined>;\nexport function variance<T = any>(callbackFn: VarianceAccessor<T>): Observer<T, number | undefined>;\nexport function variance<T = any>(callbackFn?: VarianceAccessor<T>): Observer<number, number | undefined> | Observer<T, number | undefined> {\n return callbackFn ? Accessor(_variance, callbackFn) : _variance();\n}\n","import { variance } from \"./variance.ts\";\nimport { AccessorT, Observer, Accessor } from \"./observer.ts\";\n\nfunction _deviation(): Observer<number, number | undefined> {\n const v = variance();\n\n return {\n observe: (value: number, idx: number) => {\n v.observe(value, idx);\n },\n peek: () => {\n const variance = v.peek();\n return variance !== undefined ? Math.sqrt(variance) : variance;\n }\n };\n}\n\nexport type DeviationAccessor<T> = AccessorT<T, number>;\n\nexport function deviation(): Observer<number, number | undefined>;\nexport function deviation<T = any>(callbackFn: DeviationAccessor<T>): Observer<T, number | undefined>;\nexport function deviation<T = any>(callbackFn?: DeviationAccessor<T>): Observer<number, number | undefined> | Observer<T, number | undefined> {\n return callbackFn ? Accessor(_deviation, callbackFn) : _deviation();\n}\n","import { Observer, Accessor } from \"./observer.ts\";\n\nfunction _mean(): Observer<number, number> {\n let total: number;\n let count: number;\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n total = value;\n } else {\n total += value;\n }\n count = idx;\n },\n peek: () => total / (count + 1)\n };\n}\n\nexport type MeanAccessor<T> = (row: T, currentIndex: number) => number;\n\nexport function mean(): Observer<number, number>;\nexport function mean<T = any>(callbackFn: MeanAccessor<T>): Observer<T, number>;\nexport function mean<T = any>(callbackFn?: MeanAccessor<T>): Observer<number, number> | Observer<T, number> {\n return callbackFn ? Accessor(_mean, callbackFn) : _mean();\n}\n","import { max } from \"./max.ts\";\nimport { min } from \"./min.ts\";\nimport { mean } from \"./mean.ts\";\nimport { variance } from \"./variance.ts\";\nimport { Observer, Accessor } from \"./observer.ts\";\n\nexport type DistributionCallback<T> = (row: T, currentIndex: number) => number;\n\nexport type DistributionT = {\n min: number,\n mean: number,\n max: number,\n deviation: number | undefined,\n variance: number | undefined\n} | undefined;\n\nfunction _distribution(): Observer<number, DistributionT> {\n const minFO = min();\n const maxFO = max();\n const meanFO = mean();\n const varianceFO = variance();\n\n return {\n observe: (value: number, idx: number) => {\n minFO.observe(value, idx);\n maxFO.observe(value, idx);\n meanFO.observe(value, idx);\n varianceFO.observe(value, idx);\n },\n peek: () => {\n const minResult = minFO.peek();\n if (minResult === undefined) return undefined;\n const varianceResult = varianceFO.peek();\n return {\n min: minResult,\n max: maxFO.peek(),\n mean: meanFO.peek(),\n variance: varianceResult,\n deviation: varianceResult !== undefined ? Math.sqrt(varianceResult) : undefined\n };\n }\n };\n}\n\nexport type DistributionAccessor<T> = (row: T, currentIndex: number) => number;\n\nexport function distribution(): Observer<number, DistributionT>;\nexport function distribution<T = any>(callbackFn: DistributionAccessor<T>): Observer<T, DistributionT>;\nexport function distribution<T = any>(callbackFn?: DistributionAccessor<T>): Observer<number, DistributionT> | Observer<T, DistributionT> {\n return callbackFn ? Accessor(_distribution, callbackFn) : _distribution();\n}\n","import { AccessorT, Observer, Accessor } from \"./observer.ts\";\n\nfunction _median(): Observer<number, number> {\n let values: number[];\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n values = [];\n }\n values.push(value);\n },\n peek: () => {\n const sorted = values.sort((l, r) => l - r);\n const mid = sorted.length / 2;\n if (sorted.length % 2 === 0) {\n return (sorted[mid - 1] + sorted[mid]) / 2;\n } else {\n return sorted[Math.floor(mid)];\n }\n }\n };\n}\n\nexport type MedianAccessor<T> = AccessorT<T, number>;\n\nexport function median(): Observer<number, number>;\nexport function median<T = any>(callbackFn: MedianAccessor<T>): Observer<T, number>;\nexport function median<T = any>(callbackFn?: MedianAccessor<T>): Observer<number, number> | Observer<T, number> {\n return callbackFn ? Accessor(_median, callbackFn) : _median();\n}","import { median } from \"./median.ts\";\nimport { AccessorT, Observer, Accessor, scalar } from \"./observer.ts\";\n\nexport type QuartileAccessor<T> = AccessorT<T, number>;\n\nexport type QuartileT = [number, number, number, number, number] | undefined;\n\nfunction _quartile(): Observer<number, QuartileT> {\n let values: number[];\n\n return {\n observe: (value: number, idx: number) => {\n if (idx === 0) {\n values = [];\n }\n values.push(value);\n },\n peek: () => {\n const sorted = values.sort((l, r) => l - r);\n const mid = sorted.length / 2;\n let medianVal: number;\n let lower: number[];\n let upper: number[];\n if (sorted.length < 2) {\n return undefined;\n } else if (sorted.length % 2 === 0) {\n medianVal = (sorted[mid - 1] + sorted[mid]) / 2;\n lower = sorted.slice(0, mid);\n upper = sorted.slice(mid);\n } else {\n medianVal = sorted[Math.floor(mid)];\n lower = sorted.slice(0, Math.floor(mid));\n upper = sorted.slice(Math.ceil(mid));\n }\n return [sorted[0], scalar(median())(lower)!, medianVal, scalar(median())(upper)!, sorted[sorted.length - 1]];\n }\n };\n}\n\nexport function quartile(): Observer<number, QuartileT>;\nexport function quartile<T = any>(callbackFn: QuartileAccessor<T>): Observer<T, QuartileT>;\nexport function quartile<T = any>(callbackFn?: QuartileAccessor<T>): Observer<number, QuartileT> | Observer<T, QuartileT> {\n return callbackFn ? Accessor(_quartile, callbackFn) : _quartile();\n}","import { Observer } from \"./observer.ts\";\n\nexport type ReduceCallback<T, U> = (previousValue: U, currentValue: T, currentIndex: number) => U;\n\nfunction _reduce<T, U>(callback: ReduceCallback<T, U>, initialValue?: U): Observer<T, U> {\n let reduced: U;\n\n return {\n observe: (value: T, idx: number) => {\n if (idx === 0) {\n reduced = initialValue === undefined ? (value as unknown as U) : callback(initialValue, value, idx);\n } else {\n reduced = callback(reduced, value, idx);\n }\n },\n peek: () => reduced\n };\n}\n\nexport function reduce<T = any, U = any>(callbackFn: ReduceCallback<T, U>, initialValue?: U): Observer<T, U> {\n return _reduce(callbackFn, initialValue);\n}\n","export function* generate<U>(generatorFn: () => U, maxLen?: number): IterableIterator<U> {\n let i = -1;\n while (maxLen === undefined || ++i < maxLen) {\n yield generatorFn();\n }\n}\n","import { IterableActivity, ScalarActivity, Source, isSource } from \"../activities/activity.ts\";\n\n// =============================================================================\n// Constants and Base Types\n// =============================================================================\n\nconst GeneratorFunction = (function* () { }).constructor;\n\ntype AnyIterableActivity = IterableActivity<any, any>;\ntype AnyScalarActivity = ScalarActivity<any, any>;\ntype AnyActivity = AnyIterableActivity | AnyScalarActivity;\n\n// =============================================================================\n// Type Utilities for Activity Analysis\n// =============================================================================\n\ntype ActivityIn<A extends AnyActivity> = Parameters<A>[0] extends Source<infer Input> ? Input : never;\ntype ActivityOut<A extends AnyActivity> = ReturnType<A> extends IterableIterator<infer Output> ? Output : ReturnType<A>;\ntype ActivityIsScalar<A extends AnyActivity> = ReturnType<A> extends IterableIterator<any> ? false : true;\n\ntype FirstActivity<Activities extends readonly [AnyActivity, ...AnyActivity[]]> = Activities[0];\n\n// =============================================================================\n// Type Resolution for Activity Chains (Without Source)\n// =============================================================================\n\n/**\n * Recursively resolves the output type of a chain of activities starting from an iterable activity.\n * Validates that each activity's input type matches the previous activity's output type.\n */\n\n// Handle a scalar (non-iterable) activity in the chain\ntype ResolveScalarActivity<CurrentOut, InitialIn, Next extends AnyActivity, Rest extends readonly AnyActivity[]> =\n CurrentOut extends ActivityIn<Next>\n ? Rest extends []\n ? { kind: \"scalar\"; in: InitialIn; out: ActivityOut<Next> }\n : { kind: \"error\" } // Scalar activities must be terminal\n : { kind: \"error\" }; // Type mismatch\n\n// Handle an iterable activity in the chain\ntype ResolveIterableActivity<CurrentOut, InitialIn, Next extends AnyActivity, Rest extends readonly AnyActivity[]> =\n CurrentOut extends ActivityIn<Next>\n ? ResolveIterableTail<ActivityOut<Next>, InitialIn, Rest>\n : { kind: \"error\" }; // Type mismatch\n\n// Process the next activity in the chain\ntype ResolveNextActivity<CurrentOut, InitialIn, Next extends AnyActivity, Rest extends readonly AnyActivity[]> =\n ActivityIsScalar<Next> extends true\n ? ResolveScalarActivity<CurrentOut, InitialIn, Next, Rest>\n : ResolveIterableActivity<CurrentOut, InitialIn, Next, Rest>;\n\n// Check if we've reached the end of the activity chain\ntype ResolveIterableTail<CurrentOut, InitialIn, Tail extends readonly AnyActivity[]> =\n Tail extends []\n ? { kind: \"iterable\"; in: InitialIn; out: CurrentOut }\n : Tail extends readonly [infer Next extends AnyActivity, ...infer Rest extends readonly AnyActivity[]]\n ? ResolveNextActivity<CurrentOut, InitialIn, Next, Rest>\n : { kind: \"error\" };\n\n/**\n * Resolves the complete type signature for a chain of activities without a source.\n * Determines the input, output, and whether the final result is scalar or iterable.\n */\n\n// Handle when the first activity is scalar (must be the only activity)\ntype ResolveFirstScalarActivity<First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n Rest extends []\n ? { kind: \"scalar\"; in: ActivityIn<First>; out: ActivityOut<First> }\n : { kind: \"error\" }; // Scalar activities cannot be followed by others\n\n// Handle when the first activity is iterable\ntype ResolveFirstIterableActivity<First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n Rest extends []\n ? { kind: \"iterable\"; in: ActivityIn<First>; out: ActivityOut<First> }\n : ResolveIterableTail<ActivityOut<First>, ActivityIn<First>, Rest>;\n\n// Determine how to handle the first activity based on whether it's scalar or iterable\ntype ResolveFirstActivity<First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n ActivityIsScalar<First> extends true\n ? ResolveFirstScalarActivity<First, Rest>\n : ResolveFirstIterableActivity<First, Rest>;\n\ntype ResolveActivities<Activities extends readonly [AnyActivity, ...AnyActivity[]]> =\n Activities extends readonly [infer First extends AnyActivity, ...infer Rest extends readonly AnyActivity[]]\n ? ResolveFirstActivity<First, Rest>\n : { kind: \"error\" };\n\n/**\n * Return type for pipe when called without a source - returns a reusable activity function.\n */\ntype PipeWithoutSourceReturn<Activities extends readonly [AnyActivity, ...AnyActivity[]]> =\n ResolveActivities<Activities> extends infer Result\n ? Result extends { kind: \"iterable\"; in: infer In; out: infer Out }\n ? IterableActivity<In & ActivityIn<FirstActivity<Activities>>, Out>\n : Result extends { kind: \"scalar\"; in: infer In; out: infer Out }\n ? ScalarActivity<In & ActivityIn<FirstActivity<Activities>>, Out>\n : never\n : never;\n\n// =============================================================================\n// Type Resolution for Activity Chains (With Source)\n// =============================================================================\n\n/**\n * Resolves the output type when a source is provided as the first argument to pipe.\n * Validates that the source type is compatible with the first activity's input.\n */\n\n// Extract the final result kind from ResolveIterableTail\ntype ExtractFinalResultKind<Result> =\n Result extends { kind: \"iterable\"; out: infer Out }\n ? { kind: \"iterable\"; out: Out }\n : Result extends { kind: \"scalar\"; out: infer Out }\n ? { kind: \"scalar\"; out: Out }\n : { kind: \"error\" };\n\n// Handle when the first activity after source is scalar\ntype ResolveSourceWithScalarActivity<TSource, First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n TSource extends ActivityIn<First>\n ? Rest extends []\n ? { kind: \"scalar\"; out: ActivityOut<First> }\n : { kind: \"error\" } // Scalar activities must be terminal\n : { kind: \"error\" }; // Type mismatch\n\n// Handle when the first activity after source is iterable\ntype ResolveSourceWithIterableActivity<TSource, First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n TSource extends ActivityIn<First>\n ? Rest extends []\n ? { kind: \"iterable\"; out: ActivityOut<First> }\n : ExtractFinalResultKind<ResolveIterableTail<ActivityOut<First>, ActivityIn<First>, Rest>>\n : { kind: \"error\" }; // Type mismatch\n\n// Determine how to handle the source with the first activity\ntype ResolveSourceWithFirstActivity<TSource, First extends AnyActivity, Rest extends readonly AnyActivity[]> =\n ActivityIsScalar<First> extends true\n ? ResolveSourceWithScalarActivity<TSource, First, Rest>\n : ResolveSourceWithIterableActivity<TSource, First, Rest>;\n\ntype ResolveSourceActivities<TSource, Activities extends readonly AnyActivity[]> =\n Activities extends []\n ? { kind: \"source\"; out: TSource }\n : Activities extends readonly [infer First extends AnyActivity, ...infer Rest extends readonly AnyActivity[]]\n ? ResolveSourceWithFirstActivity<TSource, First, Rest>\n : { kind: \"error\" };\n\n/**\n * Return type for pipe when called with a source - executes immediately and returns the result.\n */\ntype PipeWithSourceReturn<TSource, Activities extends readonly AnyActivity[]> =\n ResolveSourceActivities<TSource, Activities> extends infer Result\n ? Result extends { kind: \"iterable\"; out: infer Out }\n ? IterableIterator<Out>\n : Result extends { kind: \"scalar\"; out: infer Out }\n ? Out\n : Result extends { kind: \"source\"; out: infer Out }\n ? Source<Out>\n : never\n : never;\n\n// =============================================================================\n// Runtime Implementation\n// =============================================================================\n\n/**\n * Internal helper that chains activities together at runtime.\n * Returns a function that accepts a source and applies all activities in sequence.\n * Handles both generator (iterable) and scalar activities appropriately.\n */\nfunction chainGen(...activities: AnyActivity[]) {\n if (activities.length === 0) {\n return <T>(source: Source<T>) => source;\n }\n\n const isGenerator = activities[activities.length - 1] instanceof GeneratorFunction;\n const len = activities.length;\n\n if (isGenerator) {\n return function* (source: Source<unknown>) {\n let tail: unknown = source;\n for (let i = 0; i < len; i++) {\n tail = activities[i](tail as Source<unknown>);\n }\n yield* tail as IterableIterator<unknown>;\n };\n }\n\n return (source: Source<unknown>) => {\n let tail: unknown = source;\n for (let i = 0; i < len; i++) {\n tail = activities[i](tail as Source<unknown>);\n }\n return tail;\n };\n}\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Pipes activities together to create a data processing pipeline.\n * \n * Two usage modes:\n * 1. Without source: pipe(activity1, activity2, ...) - returns a reusable activity function\n * 2. With source: pipe(source, activity1, activity2, ...) - executes immediately and returns result\n * \n * Activities are chained left-to-right, with type checking ensuring output of each activity\n * matches the input of the next.\n */\nexport function pipe<const Activities extends readonly [AnyActivity, ...AnyActivity[]]>(...activities: Activities): PipeWithoutSourceReturn<Activities>;\nexport function pipe<TSource, const Activities extends readonly AnyActivity[]>(source: Source<TSource>, ...activities: Activities): PipeWithSourceReturn<TSource, Activities>;\nexport function pipe(...args: any[]): any {\n if (args.length === 0) {\n throw new TypeError(\"pipe requires at least one argument\");\n }\n\n // Handle source-based invocation\n if (isSource(args[0])) {\n return args.length === 1 ? args[0] : chainGen(...args.slice(1))(args[0]);\n }\n\n // Handle activity-based invocation\n return chainGen(...args);\n}\n\n// =============================================================================\n// Backward Compatibility\n// =============================================================================\n\n/**\n * @deprecated Use pipe instead. Maintained for backward compatibility.\n */\nexport const chain = pipe;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hpcc-js/dataflow",
3
- "version": "9.6.12",
3
+ "version": "9.6.14",
4
4
  "description": "hpcc-js - Data Flow",
5
5
  "type": "module",
6
6
  "main": "./dist/index.umd.cjs",
@@ -43,7 +43,7 @@
43
43
  "update-major": "npx --yes npm-check-updates -u"
44
44
  },
45
45
  "devDependencies": {
46
- "@hpcc-js/esbuild-plugins": "^1.8.9",
46
+ "@hpcc-js/esbuild-plugins": "^1.8.11",
47
47
  "@types/faker": "4.1.12",
48
48
  "faker": "4.1.0"
49
49
  },
@@ -58,5 +58,5 @@
58
58
  "url": "https://github.com/hpcc-systems/Visualization/issues"
59
59
  },
60
60
  "homepage": "https://github.com/hpcc-systems/Visualization/tree/main/packages/dataflow",
61
- "gitHead": "6695c9be7e44c9a4dd50e36fad2044b287685e2e"
61
+ "gitHead": "1c0e8862859769465f70f384183f1399191d76e6"
62
62
  }