fp-pack 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +1 -1
  2. package/dist/fp-pack.umd.js.map +1 -1
  3. package/dist/implement/async/pipeAsync.d.ts +5 -0
  4. package/dist/implement/async/pipeAsync.d.ts.map +1 -1
  5. package/dist/implement/async/pipeAsync.mjs.map +1 -1
  6. package/dist/implement/async/pipeAsyncSideEffect.d.ts +5 -0
  7. package/dist/implement/async/pipeAsyncSideEffect.d.ts.map +1 -1
  8. package/dist/implement/async/pipeAsyncSideEffect.mjs.map +1 -1
  9. package/dist/implement/async/pipeAsyncSideEffectStrict.d.ts +100 -0
  10. package/dist/implement/async/pipeAsyncSideEffectStrict.d.ts.map +1 -1
  11. package/dist/implement/async/pipeAsyncSideEffectStrict.mjs.map +1 -1
  12. package/dist/implement/composition/pipe.d.ts +10 -0
  13. package/dist/implement/composition/pipe.d.ts.map +1 -1
  14. package/dist/implement/composition/pipe.mjs.map +1 -1
  15. package/dist/implement/composition/pipe.type-test.d.ts +109 -0
  16. package/dist/implement/composition/pipe.type-test.d.ts.map +1 -1
  17. package/dist/implement/composition/pipeSideEffect.d.ts +10 -0
  18. package/dist/implement/composition/pipeSideEffect.d.ts.map +1 -1
  19. package/dist/implement/composition/pipeSideEffect.mjs.map +1 -1
  20. package/dist/implement/composition/pipeSideEffectStrict.d.ts +100 -0
  21. package/dist/implement/composition/pipeSideEffectStrict.d.ts.map +1 -1
  22. package/dist/implement/composition/pipeSideEffectStrict.mjs.map +1 -1
  23. package/dist/skills/fp-pack/SKILL.md +2 -2
  24. package/dist/skills/fp-pack.md +2 -2
  25. package/package.json +1 -1
  26. package/src/implement/async/pipeAsync.ts +50 -0
  27. package/src/implement/async/pipeAsyncSideEffect.ts +50 -0
  28. package/src/implement/async/pipeAsyncSideEffectStrict.ts +190 -0
  29. package/src/implement/composition/pipe.ts +100 -0
  30. package/src/implement/composition/pipe.type-test.ts +342 -0
  31. package/src/implement/composition/pipeSideEffect.ts +100 -0
  32. package/src/implement/composition/pipeSideEffectStrict.ts +190 -0
@@ -1,4 +1,5 @@
1
1
  import SideEffect from './sideEffect';
2
+ import from from './from';
2
3
  import pipe from './pipe';
3
4
  import pipeSideEffect from './pipeSideEffect';
4
5
  import pipeSideEffectStrict from './pipeSideEffectStrict';
@@ -24,6 +25,52 @@ export const purePipe = pipe(
24
25
  type PurePipeExpected = (input: number) => string;
25
26
  export type PipePureIsStrict = Expect<Equal<typeof purePipe, PurePipeExpected>>;
26
27
 
28
+ export const purePipeSix = pipe(
29
+ (value: number) => value + 1,
30
+ (value) => value * 2,
31
+ (value) => `${value}`,
32
+ (value) => value.length,
33
+ (value) => value + 1,
34
+ (value) => `n:${value}`
35
+ );
36
+
37
+ type PurePipeSixExpected = (input: number) => string;
38
+ export type PipePureSixIsStrict = Expect<Equal<typeof purePipeSix, PurePipeSixExpected>>;
39
+
40
+ export const purePipeTen = pipe(
41
+ (value: number) => value + 1,
42
+ (value) => value * 2,
43
+ (value) => `v:${value}`,
44
+ (value) => value.toUpperCase(),
45
+ (value) => value.length,
46
+ (value) => value + 1,
47
+ (value) => `${value}`,
48
+ (value) => value.padStart(3, '0'),
49
+ (value) => value.length,
50
+ (value) => `n:${value}`
51
+ );
52
+
53
+ type PurePipeTenExpected = (input: number) => string;
54
+ export type PipePureTenIsStrict = Expect<Equal<typeof purePipeTen, PurePipeTenExpected>>;
55
+
56
+ export const pipeFromTen = pipe(
57
+ from(1),
58
+ (value) => value + 1,
59
+ (value) => value * 2,
60
+ (value) => `${value}`,
61
+ (value) => value.padStart(3, '0'),
62
+ (value) => value.length,
63
+ (value) => value + 1,
64
+ (value) => `${value}`,
65
+ (value) => value.padStart(4, '0'),
66
+ (value) => `n:${value}`
67
+ );
68
+
69
+ export const pipeFromTenValue = pipeFromTen('input');
70
+
71
+ type PipeFromTenValueExpected = string;
72
+ export type PipeFromTenValueIsStrict = Expect<Equal<typeof pipeFromTenValue, PipeFromTenValueExpected>>;
73
+
27
74
  export const pipeWithSideEffectInput = pipeSideEffect(
28
75
  (value: number) => value + 1,
29
76
  (value) => value * 2,
@@ -35,6 +82,54 @@ export const pipeWithSideEffectValue = pipeWithSideEffectInput(sideEffectInput);
35
82
  type PipeExpected = (input: number | SideEffect<any>) => string | SideEffect<any>;
36
83
  export type PipeAcceptsSideEffectInput = Expect<Equal<typeof pipeWithSideEffectInput, PipeExpected>>;
37
84
 
85
+ export const pipeSideEffectSix = pipeSideEffect(
86
+ (value: number) => value + 1,
87
+ (value) => value * 2,
88
+ (value) => value + 3,
89
+ (value) => value - 1,
90
+ (value) => value * 2,
91
+ (value) => `n:${value}`
92
+ );
93
+
94
+ type PipeSideEffectSixExpected = (input: number | SideEffect<any>) => string | SideEffect<any>;
95
+ export type PipeSideEffectSixIsStrict = Expect<Equal<typeof pipeSideEffectSix, PipeSideEffectSixExpected>>;
96
+
97
+ export const pipeSideEffectTen = pipeSideEffect(
98
+ (value: number) => value + 1,
99
+ (value) => value * 2,
100
+ (value) => `v:${value}`,
101
+ (value) => value.toUpperCase(),
102
+ (value) => value.length,
103
+ (value) => value + 1,
104
+ (value) => `${value}`,
105
+ (value) => value.padStart(3, '0'),
106
+ (value) => value.length,
107
+ (value) => `n:${value}`
108
+ );
109
+
110
+ type PipeSideEffectTenExpected = (input: number | SideEffect<any>) => string | SideEffect<any>;
111
+ export type PipeSideEffectTenIsStrict = Expect<Equal<typeof pipeSideEffectTen, PipeSideEffectTenExpected>>;
112
+
113
+ export const pipeSideEffectFromTen = pipeSideEffect(
114
+ from(1),
115
+ (value) => value + 1,
116
+ (value) => value * 2,
117
+ (value) => `${value}`,
118
+ (value) => value.padStart(3, '0'),
119
+ (value) => value.length,
120
+ (value) => value + 1,
121
+ (value) => `${value}`,
122
+ (value) => value.padStart(4, '0'),
123
+ (value) => `n:${value}`
124
+ );
125
+
126
+ export const pipeSideEffectFromTenValue = pipeSideEffectFromTen('input');
127
+
128
+ type PipeSideEffectFromTenValueExpected = string | SideEffect<any>;
129
+ export type PipeSideEffectFromTenValueIsStrict = Expect<
130
+ Equal<typeof pipeSideEffectFromTenValue, PipeSideEffectFromTenValueExpected>
131
+ >;
132
+
38
133
  export const purePipeAsync = pipeAsync(
39
134
  (value: number) => value + 1,
40
135
  async (value) => value * 2,
@@ -44,6 +139,54 @@ export const purePipeAsync = pipeAsync(
44
139
  type PurePipeAsyncExpected = (input: number) => Promise<string>;
45
140
  export type PipeAsyncPureIsStrict = Expect<Equal<typeof purePipeAsync, PurePipeAsyncExpected>>;
46
141
 
142
+ export const purePipeAsyncSix = pipeAsync(
143
+ (value: number) => value + 1,
144
+ async (value) => value * 2,
145
+ (value) => `${value}`,
146
+ async (value) => value.length,
147
+ (value) => value + 3,
148
+ async (value) => `n:${value}`
149
+ );
150
+
151
+ type PurePipeAsyncSixExpected = (input: number) => Promise<string>;
152
+ export type PipeAsyncPureSixIsStrict = Expect<Equal<typeof purePipeAsyncSix, PurePipeAsyncSixExpected>>;
153
+
154
+ export const purePipeAsyncTen = pipeAsync(
155
+ (value: number) => value + 1,
156
+ async (value) => value * 2,
157
+ (value) => `${value}`,
158
+ async (value) => value.length,
159
+ (value) => value + 3,
160
+ async (value) => value * 2,
161
+ (value) => `${value}`,
162
+ async (value) => value.length,
163
+ (value) => value + 1,
164
+ async (value) => `n:${value}`
165
+ );
166
+
167
+ type PurePipeAsyncTenExpected = (input: number) => Promise<string>;
168
+ export type PipeAsyncPureTenIsStrict = Expect<Equal<typeof purePipeAsyncTen, PurePipeAsyncTenExpected>>;
169
+
170
+ export const pipeAsyncFromTen = pipeAsync(
171
+ from(1),
172
+ async (value) => value + 1,
173
+ (value) => value * 2,
174
+ async (value) => `${value}`,
175
+ (value) => value.padStart(3, '0'),
176
+ async (value) => value.length,
177
+ (value) => value + 1,
178
+ async (value) => `${value}`,
179
+ (value) => value.padStart(4, '0'),
180
+ async (value) => `n:${value}`
181
+ );
182
+
183
+ export const pipeAsyncFromTenValue = pipeAsyncFromTen('input');
184
+
185
+ type PipeAsyncFromTenValueExpected = Promise<string>;
186
+ export type PipeAsyncFromTenValueIsStrict = Expect<
187
+ Equal<typeof pipeAsyncFromTenValue, PipeAsyncFromTenValueExpected>
188
+ >;
189
+
47
190
  export const pipeAsyncWithSideEffectInput = pipeAsyncSideEffect(
48
191
  (value: number) => value + 1,
49
192
  async (value) => value * 2,
@@ -57,6 +200,58 @@ export type PipeAsyncAcceptsSideEffectInput = Expect<
57
200
  Equal<typeof pipeAsyncWithSideEffectInput, PipeAsyncExpected>
58
201
  >;
59
202
 
203
+ export const pipeAsyncSideEffectSix = pipeAsyncSideEffect(
204
+ (value: number) => value + 1,
205
+ async (value) => value * 2,
206
+ (value) => value + 3,
207
+ async (value) => value - 1,
208
+ (value) => value * 2,
209
+ async (value) => `n:${value}`
210
+ );
211
+
212
+ type PipeAsyncSideEffectSixExpected = (input: number | SideEffect<any>) => Promise<string | SideEffect<any>>;
213
+ export type PipeAsyncSideEffectSixIsStrict = Expect<
214
+ Equal<typeof pipeAsyncSideEffectSix, PipeAsyncSideEffectSixExpected>
215
+ >;
216
+
217
+ export const pipeAsyncSideEffectTen = pipeAsyncSideEffect(
218
+ (value: number) => value + 1,
219
+ async (value) => value * 2,
220
+ (value) => `${value}`,
221
+ async (value) => value.length,
222
+ (value) => value + 3,
223
+ async (value) => value * 2,
224
+ (value) => `${value}`,
225
+ async (value) => value.length,
226
+ (value) => value + 1,
227
+ async (value) => `n:${value}`
228
+ );
229
+
230
+ type PipeAsyncSideEffectTenExpected = (input: number | SideEffect<any>) => Promise<string | SideEffect<any>>;
231
+ export type PipeAsyncSideEffectTenIsStrict = Expect<
232
+ Equal<typeof pipeAsyncSideEffectTen, PipeAsyncSideEffectTenExpected>
233
+ >;
234
+
235
+ export const pipeAsyncSideEffectFromTen = pipeAsyncSideEffect(
236
+ from(1),
237
+ async (value) => value + 1,
238
+ (value) => value * 2,
239
+ async (value) => `${value}`,
240
+ (value) => value.padStart(3, '0'),
241
+ async (value) => value.length,
242
+ (value) => value + 1,
243
+ async (value) => `${value}`,
244
+ (value) => value.padStart(4, '0'),
245
+ async (value) => `n:${value}`
246
+ );
247
+
248
+ export const pipeAsyncSideEffectFromTenValue = pipeAsyncSideEffectFromTen('input');
249
+
250
+ type PipeAsyncSideEffectFromTenValueExpected = Promise<string | SideEffect<any>>;
251
+ export type PipeAsyncSideEffectFromTenValueIsStrict = Expect<
252
+ Equal<typeof pipeAsyncSideEffectFromTenValue, PipeAsyncSideEffectFromTenValueExpected>
253
+ >;
254
+
60
255
  export const strictPipeSideEffect = pipeSideEffectStrict(
61
256
  (value: number) => value + 1,
62
257
  (value) => (value > 1 ? value : SideEffect.of(() => 'LOW' as const)),
@@ -81,6 +276,73 @@ export type PipeSideEffectStrictInputEffects = Expect<
81
276
  Equal<StrictSideEffectInputEffects, StrictSideEffectInputEffectsExpected>
82
277
  >;
83
278
 
279
+ export const strictPipeSideEffectSix = pipeSideEffectStrict(
280
+ (value: number) => value + 1,
281
+ (value) => (value > 2 ? value : SideEffect.of(() => 'LOW' as const)),
282
+ (value) => value + 1,
283
+ (value) => (value > 10 ? value : SideEffect.of(() => 'SMALL' as const)),
284
+ (value) => value * 2,
285
+ (value) => (value > 40 ? value : SideEffect.of(() => 0 as const))
286
+ );
287
+
288
+ export const strictPipeSideEffectSixResult = strictPipeSideEffectSix(1);
289
+
290
+ type StrictSixEffects = EffectUnion<typeof strictPipeSideEffectSixResult>;
291
+ type StrictSixEffectsExpected = 'LOW' | 'SMALL' | 0;
292
+ export type PipeSideEffectStrictSixEffects = Expect<Equal<StrictSixEffects, StrictSixEffectsExpected>>;
293
+
294
+ type StrictSixValue = ValueUnion<typeof strictPipeSideEffectSixResult>;
295
+ type StrictSixValueExpected = number;
296
+ export type PipeSideEffectStrictSixValue = Expect<Equal<StrictSixValue, StrictSixValueExpected>>;
297
+
298
+ export const strictPipeSideEffectTen = pipeSideEffectStrict(
299
+ (value: number) => value + 1,
300
+ (value) => (value > 1 ? value : SideEffect.of(() => 'LOW' as const)),
301
+ (value) => value + 1,
302
+ (value) => (value > 3 ? value : SideEffect.of(() => 'MID' as const)),
303
+ (value) => value * 2,
304
+ (value) => value + 1,
305
+ (value) => (value > 10 ? value : SideEffect.of(() => 0 as const)),
306
+ (value) => value + 1,
307
+ (value) => value * 2,
308
+ (value) => value + 1
309
+ );
310
+
311
+ export const strictPipeSideEffectTenResult = strictPipeSideEffectTen(1);
312
+
313
+ type StrictTenEffects = EffectUnion<typeof strictPipeSideEffectTenResult>;
314
+ type StrictTenEffectsExpected = 'LOW' | 'MID' | 0;
315
+ export type PipeSideEffectStrictTenEffects = Expect<Equal<StrictTenEffects, StrictTenEffectsExpected>>;
316
+
317
+ type StrictTenValue = ValueUnion<typeof strictPipeSideEffectTenResult>;
318
+ type StrictTenValueExpected = number;
319
+ export type PipeSideEffectStrictTenValue = Expect<Equal<StrictTenValue, StrictTenValueExpected>>;
320
+
321
+ export const strictPipeSideEffectFromTen = pipeSideEffectStrict(
322
+ from(1),
323
+ (value) => value + 1,
324
+ (value) => (value > 1 ? value : SideEffect.of(() => 'LOW' as const)),
325
+ (value) => value * 2,
326
+ (value) => (value > 4 ? value : SideEffect.of(() => 'MID' as const)),
327
+ (value) => value + 1,
328
+ (value) => value * 2,
329
+ (value) => (value > 20 ? value : SideEffect.of(() => 0 as const)),
330
+ (value) => value + 1,
331
+ (value) => value * 2
332
+ );
333
+
334
+ export const strictPipeSideEffectFromTenResult = strictPipeSideEffectFromTen('input');
335
+
336
+ type StrictFromTenEffects = EffectUnion<typeof strictPipeSideEffectFromTenResult>;
337
+ type StrictFromTenEffectsExpected = 'LOW' | 'MID' | 0;
338
+ export type PipeSideEffectStrictFromTenEffects = Expect<
339
+ Equal<StrictFromTenEffects, StrictFromTenEffectsExpected>
340
+ >;
341
+
342
+ type StrictFromTenValue = ValueUnion<typeof strictPipeSideEffectFromTenResult>;
343
+ type StrictFromTenValueExpected = number;
344
+ export type PipeSideEffectStrictFromTenValue = Expect<Equal<StrictFromTenValue, StrictFromTenValueExpected>>;
345
+
84
346
  export const strictPipeAsyncSideEffect = pipeAsyncSideEffectStrict(
85
347
  (value: number) => value + 1,
86
348
  async (value) => (value > 1 ? value : SideEffect.of(() => 'LOW' as const)),
@@ -101,3 +363,83 @@ type StrictPipeAsyncValueExpected = number;
101
363
  export type PipeAsyncSideEffectStrictValue = Expect<
102
364
  Equal<StrictPipeAsyncValue, StrictPipeAsyncValueExpected>
103
365
  >;
366
+
367
+ export const strictPipeAsyncSideEffectSix = pipeAsyncSideEffectStrict(
368
+ (value: number) => value + 1,
369
+ async (value) => (value > 2 ? value : SideEffect.of(() => 'LOW' as const)),
370
+ (value) => value + 1,
371
+ async (value) => (value > 10 ? value : SideEffect.of(() => 'SMALL' as const)),
372
+ (value) => value * 2,
373
+ async (value) => (value > 40 ? value : SideEffect.of(() => 0 as const))
374
+ );
375
+
376
+ export const strictPipeAsyncSideEffectSixResult = strictPipeAsyncSideEffectSix(1);
377
+
378
+ type StrictAsyncSixResolved = Awaited<typeof strictPipeAsyncSideEffectSixResult>;
379
+ type StrictAsyncSixEffects = EffectUnion<StrictAsyncSixResolved>;
380
+ type StrictAsyncSixEffectsExpected = 'LOW' | 'SMALL' | 0;
381
+ export type PipeAsyncSideEffectStrictSixEffects = Expect<
382
+ Equal<StrictAsyncSixEffects, StrictAsyncSixEffectsExpected>
383
+ >;
384
+
385
+ type StrictAsyncSixValue = ValueUnion<StrictAsyncSixResolved>;
386
+ type StrictAsyncSixValueExpected = number;
387
+ export type PipeAsyncSideEffectStrictSixValue = Expect<
388
+ Equal<StrictAsyncSixValue, StrictAsyncSixValueExpected>
389
+ >;
390
+
391
+ export const strictPipeAsyncSideEffectTen = pipeAsyncSideEffectStrict(
392
+ (value: number) => value + 1,
393
+ async (value) => (value > 1 ? value : SideEffect.of(() => 'LOW' as const)),
394
+ (value) => value + 1,
395
+ async (value) => (value > 3 ? value : SideEffect.of(() => 'MID' as const)),
396
+ (value) => value * 2,
397
+ async (value) => value + 1,
398
+ (value) => (value > 10 ? value : SideEffect.of(() => 0 as const)),
399
+ async (value) => value + 1,
400
+ (value) => value * 2,
401
+ async (value) => value + 1
402
+ );
403
+
404
+ export const strictPipeAsyncSideEffectTenResult = strictPipeAsyncSideEffectTen(1);
405
+
406
+ type StrictAsyncTenResolved = Awaited<typeof strictPipeAsyncSideEffectTenResult>;
407
+ type StrictAsyncTenEffects = EffectUnion<StrictAsyncTenResolved>;
408
+ type StrictAsyncTenEffectsExpected = 'LOW' | 'MID' | 0;
409
+ export type PipeAsyncSideEffectStrictTenEffects = Expect<
410
+ Equal<StrictAsyncTenEffects, StrictAsyncTenEffectsExpected>
411
+ >;
412
+
413
+ type StrictAsyncTenValue = ValueUnion<StrictAsyncTenResolved>;
414
+ type StrictAsyncTenValueExpected = number;
415
+ export type PipeAsyncSideEffectStrictTenValue = Expect<
416
+ Equal<StrictAsyncTenValue, StrictAsyncTenValueExpected>
417
+ >;
418
+
419
+ export const strictPipeAsyncSideEffectFromTen = pipeAsyncSideEffectStrict(
420
+ from(1),
421
+ async (value) => value + 1,
422
+ (value) => (value > 1 ? value : SideEffect.of(() => 'LOW' as const)),
423
+ async (value) => value * 2,
424
+ (value) => (value > 4 ? value : SideEffect.of(() => 'MID' as const)),
425
+ async (value) => value + 1,
426
+ (value) => value * 2,
427
+ async (value) => (value > 20 ? value : SideEffect.of(() => 0 as const)),
428
+ (value) => value + 1,
429
+ async (value) => value * 2
430
+ );
431
+
432
+ export const strictPipeAsyncSideEffectFromTenResult = strictPipeAsyncSideEffectFromTen('input');
433
+
434
+ type StrictAsyncFromTenResolved = Awaited<typeof strictPipeAsyncSideEffectFromTenResult>;
435
+ type StrictAsyncFromTenEffects = EffectUnion<StrictAsyncFromTenResolved>;
436
+ type StrictAsyncFromTenEffectsExpected = 'LOW' | 'MID' | 0;
437
+ export type PipeAsyncSideEffectStrictFromTenEffects = Expect<
438
+ Equal<StrictAsyncFromTenEffects, StrictAsyncFromTenEffectsExpected>
439
+ >;
440
+
441
+ type StrictAsyncFromTenValue = ValueUnion<StrictAsyncFromTenResolved>;
442
+ type StrictAsyncFromTenValueExpected = number;
443
+ export type PipeAsyncSideEffectStrictFromTenValue = Expect<
444
+ Equal<StrictAsyncFromTenValue, StrictAsyncFromTenValueExpected>
445
+ >;
@@ -35,6 +35,56 @@ function pipeSideEffect<B, C, D, E, R>(
35
35
  de: UnaryFn<D, E>,
36
36
  ef: UnaryFn<E, R>
37
37
  ): () => MaybeSideEffect<R>;
38
+ function pipeSideEffect<B, C, D, E, F, R>(
39
+ ab: ZeroFn<B>,
40
+ bc: UnaryFn<B, C>,
41
+ cd: UnaryFn<C, D>,
42
+ de: UnaryFn<D, E>,
43
+ ef: UnaryFn<E, F>,
44
+ fg: UnaryFn<F, R>
45
+ ): () => MaybeSideEffect<R>;
46
+ function pipeSideEffect<B, C, D, E, F, G, R>(
47
+ ab: ZeroFn<B>,
48
+ bc: UnaryFn<B, C>,
49
+ cd: UnaryFn<C, D>,
50
+ de: UnaryFn<D, E>,
51
+ ef: UnaryFn<E, F>,
52
+ fg: UnaryFn<F, G>,
53
+ gh: UnaryFn<G, R>
54
+ ): () => MaybeSideEffect<R>;
55
+ function pipeSideEffect<B, C, D, E, F, G, H, R>(
56
+ ab: ZeroFn<B>,
57
+ bc: UnaryFn<B, C>,
58
+ cd: UnaryFn<C, D>,
59
+ de: UnaryFn<D, E>,
60
+ ef: UnaryFn<E, F>,
61
+ fg: UnaryFn<F, G>,
62
+ gh: UnaryFn<G, H>,
63
+ hi: UnaryFn<H, R>
64
+ ): () => MaybeSideEffect<R>;
65
+ function pipeSideEffect<B, C, D, E, F, G, H, I, R>(
66
+ ab: ZeroFn<B>,
67
+ bc: UnaryFn<B, C>,
68
+ cd: UnaryFn<C, D>,
69
+ de: UnaryFn<D, E>,
70
+ ef: UnaryFn<E, F>,
71
+ fg: UnaryFn<F, G>,
72
+ gh: UnaryFn<G, H>,
73
+ hi: UnaryFn<H, I>,
74
+ ij: UnaryFn<I, R>
75
+ ): () => MaybeSideEffect<R>;
76
+ function pipeSideEffect<B, C, D, E, F, G, H, I, J, R>(
77
+ ab: ZeroFn<B>,
78
+ bc: UnaryFn<B, C>,
79
+ cd: UnaryFn<C, D>,
80
+ de: UnaryFn<D, E>,
81
+ ef: UnaryFn<E, F>,
82
+ fg: UnaryFn<F, G>,
83
+ gh: UnaryFn<G, H>,
84
+ hi: UnaryFn<H, I>,
85
+ ij: UnaryFn<I, J>,
86
+ jk: UnaryFn<J, R>
87
+ ): () => MaybeSideEffect<R>;
38
88
  function pipeSideEffect<A, R>(ab: UnaryFn<A, R>): (a: A | SideEffect<any>) => MaybeSideEffect<R>;
39
89
  function pipeSideEffect<A, B, R>(
40
90
  ab: UnaryFn<A, B>,
@@ -58,6 +108,56 @@ function pipeSideEffect<A, B, C, D, E, R>(
58
108
  de: UnaryFn<D, E>,
59
109
  ef: UnaryFn<E, R>
60
110
  ): (a: A | SideEffect<any>) => MaybeSideEffect<R>;
111
+ function pipeSideEffect<A, B, C, D, E, F, R>(
112
+ ab: UnaryFn<A, B>,
113
+ bc: UnaryFn<B, C>,
114
+ cd: UnaryFn<C, D>,
115
+ de: UnaryFn<D, E>,
116
+ ef: UnaryFn<E, F>,
117
+ fg: UnaryFn<F, R>
118
+ ): (a: A | SideEffect<any>) => MaybeSideEffect<R>;
119
+ function pipeSideEffect<A, B, C, D, E, F, G, R>(
120
+ ab: UnaryFn<A, B>,
121
+ bc: UnaryFn<B, C>,
122
+ cd: UnaryFn<C, D>,
123
+ de: UnaryFn<D, E>,
124
+ ef: UnaryFn<E, F>,
125
+ fg: UnaryFn<F, G>,
126
+ gh: UnaryFn<G, R>
127
+ ): (a: A | SideEffect<any>) => MaybeSideEffect<R>;
128
+ function pipeSideEffect<A, B, C, D, E, F, G, H, R>(
129
+ ab: UnaryFn<A, B>,
130
+ bc: UnaryFn<B, C>,
131
+ cd: UnaryFn<C, D>,
132
+ de: UnaryFn<D, E>,
133
+ ef: UnaryFn<E, F>,
134
+ fg: UnaryFn<F, G>,
135
+ gh: UnaryFn<G, H>,
136
+ hi: UnaryFn<H, R>
137
+ ): (a: A | SideEffect<any>) => MaybeSideEffect<R>;
138
+ function pipeSideEffect<A, B, C, D, E, F, G, H, I, R>(
139
+ ab: UnaryFn<A, B>,
140
+ bc: UnaryFn<B, C>,
141
+ cd: UnaryFn<C, D>,
142
+ de: UnaryFn<D, E>,
143
+ ef: UnaryFn<E, F>,
144
+ fg: UnaryFn<F, G>,
145
+ gh: UnaryFn<G, H>,
146
+ hi: UnaryFn<H, I>,
147
+ ij: UnaryFn<I, R>
148
+ ): (a: A | SideEffect<any>) => MaybeSideEffect<R>;
149
+ function pipeSideEffect<A, B, C, D, E, F, G, H, I, J, R>(
150
+ ab: UnaryFn<A, B>,
151
+ bc: UnaryFn<B, C>,
152
+ cd: UnaryFn<C, D>,
153
+ de: UnaryFn<D, E>,
154
+ ef: UnaryFn<E, F>,
155
+ fg: UnaryFn<F, G>,
156
+ gh: UnaryFn<G, H>,
157
+ hi: UnaryFn<H, I>,
158
+ ij: UnaryFn<I, J>,
159
+ jk: UnaryFn<J, R>
160
+ ): (a: A | SideEffect<any>) => MaybeSideEffect<R>;
61
161
 
62
162
  function pipeSideEffect<Fns extends [UnaryFn<any, any>, ...UnaryFn<any, any>[]]>(...funcs: Fns): PipeSideEffect<Fns>;
63
163
  function pipeSideEffect(...funcs: Array<UnaryFn<any, any>>): (input: any) => any;
@@ -82,6 +82,101 @@ function pipeSideEffectStrict<B, C, D, E, R>(
82
82
  UnaryFn<NonSideEffect<D>, E>,
83
83
  UnaryFn<NonSideEffect<E>, R>
84
84
  ]>;
85
+ function pipeSideEffectStrict<B, C, D, E, F, R>(
86
+ ab: ZeroFn<B>,
87
+ bc: UnaryFn<NonSideEffect<B>, C>,
88
+ cd: UnaryFn<NonSideEffect<C>, D>,
89
+ de: UnaryFn<NonSideEffect<D>, E>,
90
+ ef: UnaryFn<NonSideEffect<E>, F>,
91
+ fg: UnaryFn<NonSideEffect<F>, R>
92
+ ): PipeSideEffectStrict<[
93
+ ZeroFn<B>,
94
+ UnaryFn<NonSideEffect<B>, C>,
95
+ UnaryFn<NonSideEffect<C>, D>,
96
+ UnaryFn<NonSideEffect<D>, E>,
97
+ UnaryFn<NonSideEffect<E>, F>,
98
+ UnaryFn<NonSideEffect<F>, R>
99
+ ]>;
100
+ function pipeSideEffectStrict<B, C, D, E, F, G, R>(
101
+ ab: ZeroFn<B>,
102
+ bc: UnaryFn<NonSideEffect<B>, C>,
103
+ cd: UnaryFn<NonSideEffect<C>, D>,
104
+ de: UnaryFn<NonSideEffect<D>, E>,
105
+ ef: UnaryFn<NonSideEffect<E>, F>,
106
+ fg: UnaryFn<NonSideEffect<F>, G>,
107
+ gh: UnaryFn<NonSideEffect<G>, R>
108
+ ): PipeSideEffectStrict<[
109
+ ZeroFn<B>,
110
+ UnaryFn<NonSideEffect<B>, C>,
111
+ UnaryFn<NonSideEffect<C>, D>,
112
+ UnaryFn<NonSideEffect<D>, E>,
113
+ UnaryFn<NonSideEffect<E>, F>,
114
+ UnaryFn<NonSideEffect<F>, G>,
115
+ UnaryFn<NonSideEffect<G>, R>
116
+ ]>;
117
+ function pipeSideEffectStrict<B, C, D, E, F, G, H, R>(
118
+ ab: ZeroFn<B>,
119
+ bc: UnaryFn<NonSideEffect<B>, C>,
120
+ cd: UnaryFn<NonSideEffect<C>, D>,
121
+ de: UnaryFn<NonSideEffect<D>, E>,
122
+ ef: UnaryFn<NonSideEffect<E>, F>,
123
+ fg: UnaryFn<NonSideEffect<F>, G>,
124
+ gh: UnaryFn<NonSideEffect<G>, H>,
125
+ hi: UnaryFn<NonSideEffect<H>, R>
126
+ ): PipeSideEffectStrict<[
127
+ ZeroFn<B>,
128
+ UnaryFn<NonSideEffect<B>, C>,
129
+ UnaryFn<NonSideEffect<C>, D>,
130
+ UnaryFn<NonSideEffect<D>, E>,
131
+ UnaryFn<NonSideEffect<E>, F>,
132
+ UnaryFn<NonSideEffect<F>, G>,
133
+ UnaryFn<NonSideEffect<G>, H>,
134
+ UnaryFn<NonSideEffect<H>, R>
135
+ ]>;
136
+ function pipeSideEffectStrict<B, C, D, E, F, G, H, I, R>(
137
+ ab: ZeroFn<B>,
138
+ bc: UnaryFn<NonSideEffect<B>, C>,
139
+ cd: UnaryFn<NonSideEffect<C>, D>,
140
+ de: UnaryFn<NonSideEffect<D>, E>,
141
+ ef: UnaryFn<NonSideEffect<E>, F>,
142
+ fg: UnaryFn<NonSideEffect<F>, G>,
143
+ gh: UnaryFn<NonSideEffect<G>, H>,
144
+ hi: UnaryFn<NonSideEffect<H>, I>,
145
+ ij: UnaryFn<NonSideEffect<I>, R>
146
+ ): PipeSideEffectStrict<[
147
+ ZeroFn<B>,
148
+ UnaryFn<NonSideEffect<B>, C>,
149
+ UnaryFn<NonSideEffect<C>, D>,
150
+ UnaryFn<NonSideEffect<D>, E>,
151
+ UnaryFn<NonSideEffect<E>, F>,
152
+ UnaryFn<NonSideEffect<F>, G>,
153
+ UnaryFn<NonSideEffect<G>, H>,
154
+ UnaryFn<NonSideEffect<H>, I>,
155
+ UnaryFn<NonSideEffect<I>, R>
156
+ ]>;
157
+ function pipeSideEffectStrict<B, C, D, E, F, G, H, I, J, R>(
158
+ ab: ZeroFn<B>,
159
+ bc: UnaryFn<NonSideEffect<B>, C>,
160
+ cd: UnaryFn<NonSideEffect<C>, D>,
161
+ de: UnaryFn<NonSideEffect<D>, E>,
162
+ ef: UnaryFn<NonSideEffect<E>, F>,
163
+ fg: UnaryFn<NonSideEffect<F>, G>,
164
+ gh: UnaryFn<NonSideEffect<G>, H>,
165
+ hi: UnaryFn<NonSideEffect<H>, I>,
166
+ ij: UnaryFn<NonSideEffect<I>, J>,
167
+ jk: UnaryFn<NonSideEffect<J>, R>
168
+ ): PipeSideEffectStrict<[
169
+ ZeroFn<B>,
170
+ UnaryFn<NonSideEffect<B>, C>,
171
+ UnaryFn<NonSideEffect<C>, D>,
172
+ UnaryFn<NonSideEffect<D>, E>,
173
+ UnaryFn<NonSideEffect<E>, F>,
174
+ UnaryFn<NonSideEffect<F>, G>,
175
+ UnaryFn<NonSideEffect<G>, H>,
176
+ UnaryFn<NonSideEffect<H>, I>,
177
+ UnaryFn<NonSideEffect<I>, J>,
178
+ UnaryFn<NonSideEffect<J>, R>
179
+ ]>;
85
180
  function pipeSideEffectStrict<A, R>(ab: UnaryFn<A, R>): PipeSideEffectStrict<[UnaryFn<A, R>]>;
86
181
  function pipeSideEffectStrict<A, B, R>(
87
182
  ab: UnaryFn<A, B>,
@@ -116,6 +211,101 @@ function pipeSideEffectStrict<A, B, C, D, E, R>(
116
211
  UnaryFn<NonSideEffect<D>, E>,
117
212
  UnaryFn<NonSideEffect<E>, R>
118
213
  ]>;
214
+ function pipeSideEffectStrict<A, B, C, D, E, F, R>(
215
+ ab: UnaryFn<A, B>,
216
+ bc: UnaryFn<NonSideEffect<B>, C>,
217
+ cd: UnaryFn<NonSideEffect<C>, D>,
218
+ de: UnaryFn<NonSideEffect<D>, E>,
219
+ ef: UnaryFn<NonSideEffect<E>, F>,
220
+ fg: UnaryFn<NonSideEffect<F>, R>
221
+ ): PipeSideEffectStrict<[
222
+ UnaryFn<A, B>,
223
+ UnaryFn<NonSideEffect<B>, C>,
224
+ UnaryFn<NonSideEffect<C>, D>,
225
+ UnaryFn<NonSideEffect<D>, E>,
226
+ UnaryFn<NonSideEffect<E>, F>,
227
+ UnaryFn<NonSideEffect<F>, R>
228
+ ]>;
229
+ function pipeSideEffectStrict<A, B, C, D, E, F, G, R>(
230
+ ab: UnaryFn<A, B>,
231
+ bc: UnaryFn<NonSideEffect<B>, C>,
232
+ cd: UnaryFn<NonSideEffect<C>, D>,
233
+ de: UnaryFn<NonSideEffect<D>, E>,
234
+ ef: UnaryFn<NonSideEffect<E>, F>,
235
+ fg: UnaryFn<NonSideEffect<F>, G>,
236
+ gh: UnaryFn<NonSideEffect<G>, R>
237
+ ): PipeSideEffectStrict<[
238
+ UnaryFn<A, B>,
239
+ UnaryFn<NonSideEffect<B>, C>,
240
+ UnaryFn<NonSideEffect<C>, D>,
241
+ UnaryFn<NonSideEffect<D>, E>,
242
+ UnaryFn<NonSideEffect<E>, F>,
243
+ UnaryFn<NonSideEffect<F>, G>,
244
+ UnaryFn<NonSideEffect<G>, R>
245
+ ]>;
246
+ function pipeSideEffectStrict<A, B, C, D, E, F, G, H, R>(
247
+ ab: UnaryFn<A, B>,
248
+ bc: UnaryFn<NonSideEffect<B>, C>,
249
+ cd: UnaryFn<NonSideEffect<C>, D>,
250
+ de: UnaryFn<NonSideEffect<D>, E>,
251
+ ef: UnaryFn<NonSideEffect<E>, F>,
252
+ fg: UnaryFn<NonSideEffect<F>, G>,
253
+ gh: UnaryFn<NonSideEffect<G>, H>,
254
+ hi: UnaryFn<NonSideEffect<H>, R>
255
+ ): PipeSideEffectStrict<[
256
+ UnaryFn<A, B>,
257
+ UnaryFn<NonSideEffect<B>, C>,
258
+ UnaryFn<NonSideEffect<C>, D>,
259
+ UnaryFn<NonSideEffect<D>, E>,
260
+ UnaryFn<NonSideEffect<E>, F>,
261
+ UnaryFn<NonSideEffect<F>, G>,
262
+ UnaryFn<NonSideEffect<G>, H>,
263
+ UnaryFn<NonSideEffect<H>, R>
264
+ ]>;
265
+ function pipeSideEffectStrict<A, B, C, D, E, F, G, H, I, R>(
266
+ ab: UnaryFn<A, B>,
267
+ bc: UnaryFn<NonSideEffect<B>, C>,
268
+ cd: UnaryFn<NonSideEffect<C>, D>,
269
+ de: UnaryFn<NonSideEffect<D>, E>,
270
+ ef: UnaryFn<NonSideEffect<E>, F>,
271
+ fg: UnaryFn<NonSideEffect<F>, G>,
272
+ gh: UnaryFn<NonSideEffect<G>, H>,
273
+ hi: UnaryFn<NonSideEffect<H>, I>,
274
+ ij: UnaryFn<NonSideEffect<I>, R>
275
+ ): PipeSideEffectStrict<[
276
+ UnaryFn<A, B>,
277
+ UnaryFn<NonSideEffect<B>, C>,
278
+ UnaryFn<NonSideEffect<C>, D>,
279
+ UnaryFn<NonSideEffect<D>, E>,
280
+ UnaryFn<NonSideEffect<E>, F>,
281
+ UnaryFn<NonSideEffect<F>, G>,
282
+ UnaryFn<NonSideEffect<G>, H>,
283
+ UnaryFn<NonSideEffect<H>, I>,
284
+ UnaryFn<NonSideEffect<I>, R>
285
+ ]>;
286
+ function pipeSideEffectStrict<A, B, C, D, E, F, G, H, I, J, R>(
287
+ ab: UnaryFn<A, B>,
288
+ bc: UnaryFn<NonSideEffect<B>, C>,
289
+ cd: UnaryFn<NonSideEffect<C>, D>,
290
+ de: UnaryFn<NonSideEffect<D>, E>,
291
+ ef: UnaryFn<NonSideEffect<E>, F>,
292
+ fg: UnaryFn<NonSideEffect<F>, G>,
293
+ gh: UnaryFn<NonSideEffect<G>, H>,
294
+ hi: UnaryFn<NonSideEffect<H>, I>,
295
+ ij: UnaryFn<NonSideEffect<I>, J>,
296
+ jk: UnaryFn<NonSideEffect<J>, R>
297
+ ): PipeSideEffectStrict<[
298
+ UnaryFn<A, B>,
299
+ UnaryFn<NonSideEffect<B>, C>,
300
+ UnaryFn<NonSideEffect<C>, D>,
301
+ UnaryFn<NonSideEffect<D>, E>,
302
+ UnaryFn<NonSideEffect<E>, F>,
303
+ UnaryFn<NonSideEffect<F>, G>,
304
+ UnaryFn<NonSideEffect<G>, H>,
305
+ UnaryFn<NonSideEffect<H>, I>,
306
+ UnaryFn<NonSideEffect<I>, J>,
307
+ UnaryFn<NonSideEffect<J>, R>
308
+ ]>;
119
309
 
120
310
  function pipeSideEffectStrict<Fns extends [AnyFn, ...AnyFn[]]>(...funcs: Fns): PipeSideEffectStrict<Fns>;
121
311
  function pipeSideEffectStrict(...funcs: Array<(input: any) => any>) {