fp-pack 0.3.0 → 0.5.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 (38) hide show
  1. package/README.md +119 -32
  2. package/dist/fp-pack.umd.js +1 -1
  3. package/dist/fp-pack.umd.js.map +1 -1
  4. package/dist/implement/async/pipeAsync.d.ts +7 -0
  5. package/dist/implement/async/pipeAsync.d.ts.map +1 -1
  6. package/dist/implement/async/pipeAsync.mjs.map +1 -1
  7. package/dist/implement/async/pipeAsyncSideEffect.d.ts +7 -0
  8. package/dist/implement/async/pipeAsyncSideEffect.d.ts.map +1 -1
  9. package/dist/implement/async/pipeAsyncSideEffect.mjs.map +1 -1
  10. package/dist/implement/async/pipeAsyncSideEffectStrict.d.ts +90 -0
  11. package/dist/implement/async/pipeAsyncSideEffectStrict.d.ts.map +1 -1
  12. package/dist/implement/async/pipeAsyncSideEffectStrict.mjs.map +1 -1
  13. package/dist/implement/composition/from.d.ts +5 -1
  14. package/dist/implement/composition/from.d.ts.map +1 -1
  15. package/dist/implement/composition/from.mjs +4 -3
  16. package/dist/implement/composition/from.mjs.map +1 -1
  17. package/dist/implement/composition/pipe.d.ts +8 -0
  18. package/dist/implement/composition/pipe.d.ts.map +1 -1
  19. package/dist/implement/composition/pipe.mjs.map +1 -1
  20. package/dist/implement/composition/pipe.type-test.d.ts +98 -0
  21. package/dist/implement/composition/pipe.type-test.d.ts.map +1 -1
  22. package/dist/implement/composition/pipeSideEffect.d.ts +11 -0
  23. package/dist/implement/composition/pipeSideEffect.d.ts.map +1 -1
  24. package/dist/implement/composition/pipeSideEffect.mjs.map +1 -1
  25. package/dist/implement/composition/pipeSideEffectStrict.d.ts +90 -0
  26. package/dist/implement/composition/pipeSideEffectStrict.d.ts.map +1 -1
  27. package/dist/implement/composition/pipeSideEffectStrict.mjs.map +1 -1
  28. package/dist/skills/fp-pack/SKILL.md +14 -6
  29. package/dist/skills/fp-pack.md +14 -6
  30. package/package.json +3 -2
  31. package/src/implement/async/pipeAsync.ts +48 -0
  32. package/src/implement/async/pipeAsyncSideEffect.ts +49 -0
  33. package/src/implement/async/pipeAsyncSideEffectStrict.ts +170 -0
  34. package/src/implement/composition/from.ts +9 -2
  35. package/src/implement/composition/pipe.ts +84 -0
  36. package/src/implement/composition/pipe.type-test.ts +299 -0
  37. package/src/implement/composition/pipeSideEffect.ts +89 -0
  38. package/src/implement/composition/pipeSideEffectStrict.ts +170 -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';
@@ -36,6 +37,40 @@ export const purePipeSix = pipe(
36
37
  type PurePipeSixExpected = (input: number) => string;
37
38
  export type PipePureSixIsStrict = Expect<Equal<typeof purePipeSix, PurePipeSixExpected>>;
38
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
+
39
74
  export const pipeWithSideEffectInput = pipeSideEffect(
40
75
  (value: number) => value + 1,
41
76
  (value) => value * 2,
@@ -59,6 +94,49 @@ export const pipeSideEffectSix = pipeSideEffect(
59
94
  type PipeSideEffectSixExpected = (input: number | SideEffect<any>) => string | SideEffect<any>;
60
95
  export type PipeSideEffectSixIsStrict = Expect<Equal<typeof pipeSideEffectSix, PipeSideEffectSixExpected>>;
61
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
+
133
+ export const pipeSideEffectFromTenValueNoInput = pipeSideEffectFromTen();
134
+
135
+ type PipeSideEffectFromTenValueNoInputExpected = string | SideEffect<any>;
136
+ export type PipeSideEffectFromTenValueNoInputIsStrict = Expect<
137
+ Equal<typeof pipeSideEffectFromTenValueNoInput, PipeSideEffectFromTenValueNoInputExpected>
138
+ >;
139
+
62
140
  export const purePipeAsync = pipeAsync(
63
141
  (value: number) => value + 1,
64
142
  async (value) => value * 2,
@@ -80,6 +158,49 @@ export const purePipeAsyncSix = pipeAsync(
80
158
  type PurePipeAsyncSixExpected = (input: number) => Promise<string>;
81
159
  export type PipeAsyncPureSixIsStrict = Expect<Equal<typeof purePipeAsyncSix, PurePipeAsyncSixExpected>>;
82
160
 
161
+ export const purePipeAsyncTen = pipeAsync(
162
+ (value: number) => value + 1,
163
+ async (value) => value * 2,
164
+ (value) => `${value}`,
165
+ async (value) => value.length,
166
+ (value) => value + 3,
167
+ async (value) => value * 2,
168
+ (value) => `${value}`,
169
+ async (value) => value.length,
170
+ (value) => value + 1,
171
+ async (value) => `n:${value}`
172
+ );
173
+
174
+ type PurePipeAsyncTenExpected = (input: number) => Promise<string>;
175
+ export type PipeAsyncPureTenIsStrict = Expect<Equal<typeof purePipeAsyncTen, PurePipeAsyncTenExpected>>;
176
+
177
+ export const pipeAsyncFromTen = pipeAsync(
178
+ from(1),
179
+ async (value) => value + 1,
180
+ (value) => value * 2,
181
+ async (value) => `${value}`,
182
+ (value) => value.padStart(3, '0'),
183
+ async (value) => value.length,
184
+ (value) => value + 1,
185
+ async (value) => `${value}`,
186
+ (value) => value.padStart(4, '0'),
187
+ async (value) => `n:${value}`
188
+ );
189
+
190
+ export const pipeAsyncFromTenValue = pipeAsyncFromTen('input');
191
+
192
+ type PipeAsyncFromTenValueExpected = Promise<string>;
193
+ export type PipeAsyncFromTenValueIsStrict = Expect<
194
+ Equal<typeof pipeAsyncFromTenValue, PipeAsyncFromTenValueExpected>
195
+ >;
196
+
197
+ export const pipeAsyncFromTenValueNoInput = pipeAsyncFromTen();
198
+
199
+ type PipeAsyncFromTenValueNoInputExpected = Promise<string>;
200
+ export type PipeAsyncFromTenValueNoInputIsStrict = Expect<
201
+ Equal<typeof pipeAsyncFromTenValueNoInput, PipeAsyncFromTenValueNoInputExpected>
202
+ >;
203
+
83
204
  export const pipeAsyncWithSideEffectInput = pipeAsyncSideEffect(
84
205
  (value: number) => value + 1,
85
206
  async (value) => value * 2,
@@ -107,6 +228,51 @@ export type PipeAsyncSideEffectSixIsStrict = Expect<
107
228
  Equal<typeof pipeAsyncSideEffectSix, PipeAsyncSideEffectSixExpected>
108
229
  >;
109
230
 
231
+ export const pipeAsyncSideEffectTen = pipeAsyncSideEffect(
232
+ (value: number) => value + 1,
233
+ async (value) => value * 2,
234
+ (value) => `${value}`,
235
+ async (value) => value.length,
236
+ (value) => value + 3,
237
+ async (value) => value * 2,
238
+ (value) => `${value}`,
239
+ async (value) => value.length,
240
+ (value) => value + 1,
241
+ async (value) => `n:${value}`
242
+ );
243
+
244
+ type PipeAsyncSideEffectTenExpected = (input: number | SideEffect<any>) => Promise<string | SideEffect<any>>;
245
+ export type PipeAsyncSideEffectTenIsStrict = Expect<
246
+ Equal<typeof pipeAsyncSideEffectTen, PipeAsyncSideEffectTenExpected>
247
+ >;
248
+
249
+ export const pipeAsyncSideEffectFromTen = pipeAsyncSideEffect(
250
+ from(1),
251
+ async (value) => value + 1,
252
+ (value) => value * 2,
253
+ async (value) => `${value}`,
254
+ (value) => value.padStart(3, '0'),
255
+ async (value) => value.length,
256
+ (value) => value + 1,
257
+ async (value) => `${value}`,
258
+ (value) => value.padStart(4, '0'),
259
+ async (value) => `n:${value}`
260
+ );
261
+
262
+ export const pipeAsyncSideEffectFromTenValue = pipeAsyncSideEffectFromTen('input');
263
+
264
+ type PipeAsyncSideEffectFromTenValueExpected = Promise<string | SideEffect<any>>;
265
+ export type PipeAsyncSideEffectFromTenValueIsStrict = Expect<
266
+ Equal<typeof pipeAsyncSideEffectFromTenValue, PipeAsyncSideEffectFromTenValueExpected>
267
+ >;
268
+
269
+ export const pipeAsyncSideEffectFromTenValueNoInput = pipeAsyncSideEffectFromTen();
270
+
271
+ type PipeAsyncSideEffectFromTenValueNoInputExpected = Promise<string | SideEffect<any>>;
272
+ export type PipeAsyncSideEffectFromTenValueNoInputIsStrict = Expect<
273
+ Equal<typeof pipeAsyncSideEffectFromTenValueNoInput, PipeAsyncSideEffectFromTenValueNoInputExpected>
274
+ >;
275
+
110
276
  export const strictPipeSideEffect = pipeSideEffectStrict(
111
277
  (value: number) => value + 1,
112
278
  (value) => (value > 1 ? value : SideEffect.of(() => 'LOW' as const)),
@@ -150,6 +316,68 @@ type StrictSixValue = ValueUnion<typeof strictPipeSideEffectSixResult>;
150
316
  type StrictSixValueExpected = number;
151
317
  export type PipeSideEffectStrictSixValue = Expect<Equal<StrictSixValue, StrictSixValueExpected>>;
152
318
 
319
+ export const strictPipeSideEffectTen = pipeSideEffectStrict(
320
+ (value: number) => value + 1,
321
+ (value) => (value > 1 ? value : SideEffect.of(() => 'LOW' as const)),
322
+ (value) => value + 1,
323
+ (value) => (value > 3 ? value : SideEffect.of(() => 'MID' as const)),
324
+ (value) => value * 2,
325
+ (value) => value + 1,
326
+ (value) => (value > 10 ? value : SideEffect.of(() => 0 as const)),
327
+ (value) => value + 1,
328
+ (value) => value * 2,
329
+ (value) => value + 1
330
+ );
331
+
332
+ export const strictPipeSideEffectTenResult = strictPipeSideEffectTen(1);
333
+
334
+ type StrictTenEffects = EffectUnion<typeof strictPipeSideEffectTenResult>;
335
+ type StrictTenEffectsExpected = 'LOW' | 'MID' | 0;
336
+ export type PipeSideEffectStrictTenEffects = Expect<Equal<StrictTenEffects, StrictTenEffectsExpected>>;
337
+
338
+ type StrictTenValue = ValueUnion<typeof strictPipeSideEffectTenResult>;
339
+ type StrictTenValueExpected = number;
340
+ export type PipeSideEffectStrictTenValue = Expect<Equal<StrictTenValue, StrictTenValueExpected>>;
341
+
342
+ export const strictPipeSideEffectFromTen = pipeSideEffectStrict(
343
+ from(1),
344
+ (value) => value + 1,
345
+ (value) => (value > 1 ? value : SideEffect.of(() => 'LOW' as const)),
346
+ (value) => value * 2,
347
+ (value) => (value > 4 ? value : SideEffect.of(() => 'MID' as const)),
348
+ (value) => value + 1,
349
+ (value) => value * 2,
350
+ (value) => (value > 20 ? value : SideEffect.of(() => 0 as const)),
351
+ (value) => value + 1,
352
+ (value) => value * 2
353
+ );
354
+
355
+ export const strictPipeSideEffectFromTenResult = strictPipeSideEffectFromTen('input');
356
+
357
+ type StrictFromTenEffects = EffectUnion<typeof strictPipeSideEffectFromTenResult>;
358
+ type StrictFromTenEffectsExpected = 'LOW' | 'MID' | 0;
359
+ export type PipeSideEffectStrictFromTenEffects = Expect<
360
+ Equal<StrictFromTenEffects, StrictFromTenEffectsExpected>
361
+ >;
362
+
363
+ type StrictFromTenValue = ValueUnion<typeof strictPipeSideEffectFromTenResult>;
364
+ type StrictFromTenValueExpected = number;
365
+ export type PipeSideEffectStrictFromTenValue = Expect<Equal<StrictFromTenValue, StrictFromTenValueExpected>>;
366
+
367
+ export const strictPipeSideEffectFromTenResultNoInput = strictPipeSideEffectFromTen();
368
+
369
+ type StrictFromTenNoInputEffects = EffectUnion<typeof strictPipeSideEffectFromTenResultNoInput>;
370
+ type StrictFromTenNoInputEffectsExpected = 'LOW' | 'MID' | 0;
371
+ export type PipeSideEffectStrictFromTenNoInputEffects = Expect<
372
+ Equal<StrictFromTenNoInputEffects, StrictFromTenNoInputEffectsExpected>
373
+ >;
374
+
375
+ type StrictFromTenNoInputValue = ValueUnion<typeof strictPipeSideEffectFromTenResultNoInput>;
376
+ type StrictFromTenNoInputValueExpected = number;
377
+ export type PipeSideEffectStrictFromTenNoInputValue = Expect<
378
+ Equal<StrictFromTenNoInputValue, StrictFromTenNoInputValueExpected>
379
+ >;
380
+
153
381
  export const strictPipeAsyncSideEffect = pipeAsyncSideEffectStrict(
154
382
  (value: number) => value + 1,
155
383
  async (value) => (value > 1 ? value : SideEffect.of(() => 'LOW' as const)),
@@ -194,3 +422,74 @@ type StrictAsyncSixValueExpected = number;
194
422
  export type PipeAsyncSideEffectStrictSixValue = Expect<
195
423
  Equal<StrictAsyncSixValue, StrictAsyncSixValueExpected>
196
424
  >;
425
+
426
+ export const strictPipeAsyncSideEffectTen = pipeAsyncSideEffectStrict(
427
+ (value: number) => value + 1,
428
+ async (value) => (value > 1 ? value : SideEffect.of(() => 'LOW' as const)),
429
+ (value) => value + 1,
430
+ async (value) => (value > 3 ? value : SideEffect.of(() => 'MID' as const)),
431
+ (value) => value * 2,
432
+ async (value) => value + 1,
433
+ (value) => (value > 10 ? value : SideEffect.of(() => 0 as const)),
434
+ async (value) => value + 1,
435
+ (value) => value * 2,
436
+ async (value) => value + 1
437
+ );
438
+
439
+ export const strictPipeAsyncSideEffectTenResult = strictPipeAsyncSideEffectTen(1);
440
+
441
+ type StrictAsyncTenResolved = Awaited<typeof strictPipeAsyncSideEffectTenResult>;
442
+ type StrictAsyncTenEffects = EffectUnion<StrictAsyncTenResolved>;
443
+ type StrictAsyncTenEffectsExpected = 'LOW' | 'MID' | 0;
444
+ export type PipeAsyncSideEffectStrictTenEffects = Expect<
445
+ Equal<StrictAsyncTenEffects, StrictAsyncTenEffectsExpected>
446
+ >;
447
+
448
+ type StrictAsyncTenValue = ValueUnion<StrictAsyncTenResolved>;
449
+ type StrictAsyncTenValueExpected = number;
450
+ export type PipeAsyncSideEffectStrictTenValue = Expect<
451
+ Equal<StrictAsyncTenValue, StrictAsyncTenValueExpected>
452
+ >;
453
+
454
+ export const strictPipeAsyncSideEffectFromTen = pipeAsyncSideEffectStrict(
455
+ from(1),
456
+ async (value) => value + 1,
457
+ (value) => (value > 1 ? value : SideEffect.of(() => 'LOW' as const)),
458
+ async (value) => value * 2,
459
+ (value) => (value > 4 ? value : SideEffect.of(() => 'MID' as const)),
460
+ async (value) => value + 1,
461
+ (value) => value * 2,
462
+ async (value) => (value > 20 ? value : SideEffect.of(() => 0 as const)),
463
+ (value) => value + 1,
464
+ async (value) => value * 2
465
+ );
466
+
467
+ export const strictPipeAsyncSideEffectFromTenResult = strictPipeAsyncSideEffectFromTen('input');
468
+
469
+ type StrictAsyncFromTenResolved = Awaited<typeof strictPipeAsyncSideEffectFromTenResult>;
470
+ type StrictAsyncFromTenEffects = EffectUnion<StrictAsyncFromTenResolved>;
471
+ type StrictAsyncFromTenEffectsExpected = 'LOW' | 'MID' | 0;
472
+ export type PipeAsyncSideEffectStrictFromTenEffects = Expect<
473
+ Equal<StrictAsyncFromTenEffects, StrictAsyncFromTenEffectsExpected>
474
+ >;
475
+
476
+ type StrictAsyncFromTenValue = ValueUnion<StrictAsyncFromTenResolved>;
477
+ type StrictAsyncFromTenValueExpected = number;
478
+ export type PipeAsyncSideEffectStrictFromTenValue = Expect<
479
+ Equal<StrictAsyncFromTenValue, StrictAsyncFromTenValueExpected>
480
+ >;
481
+
482
+ export const strictPipeAsyncSideEffectFromTenResultNoInput = strictPipeAsyncSideEffectFromTen();
483
+
484
+ type StrictAsyncFromTenNoInputResolved = Awaited<typeof strictPipeAsyncSideEffectFromTenResultNoInput>;
485
+ type StrictAsyncFromTenNoInputEffects = EffectUnion<StrictAsyncFromTenNoInputResolved>;
486
+ type StrictAsyncFromTenNoInputEffectsExpected = 'LOW' | 'MID' | 0;
487
+ export type PipeAsyncSideEffectStrictFromTenNoInputEffects = Expect<
488
+ Equal<StrictAsyncFromTenNoInputEffects, StrictAsyncFromTenNoInputEffectsExpected>
489
+ >;
490
+
491
+ type StrictAsyncFromTenNoInputValue = ValueUnion<StrictAsyncFromTenNoInputResolved>;
492
+ type StrictAsyncFromTenNoInputValueExpected = number;
493
+ export type PipeAsyncSideEffectStrictFromTenNoInputValue = Expect<
494
+ Equal<StrictAsyncFromTenNoInputValue, StrictAsyncFromTenNoInputValueExpected>
495
+ >;
@@ -1,3 +1,4 @@
1
+ import type { FromFn } from './from';
1
2
  import SideEffect, { isSideEffect } from './sideEffect';
2
3
 
3
4
  type MaybeSideEffect<T> = T | SideEffect<any>;
@@ -18,6 +19,9 @@ type Resolve<T> = T extends infer R ? R : never;
18
19
  type PipeSideEffect<Fns extends UnaryFn<any, any>[]> = (
19
20
  input: PipeInput<Fns> | SideEffect<any>
20
21
  ) => Resolve<PipeOutput<Fns>>;
22
+ type PipeSideEffectFrom<Fns extends [FromFn<any>, ...UnaryFn<any, any>[]]> = (
23
+ input?: PipeInput<Fns> | SideEffect<any>
24
+ ) => Resolve<PipeOutput<Fns>>;
21
25
 
22
26
  function pipeSideEffect<R>(ab: ZeroFn<R>): () => MaybeSideEffect<R>;
23
27
  function pipeSideEffect<B, R>(ab: ZeroFn<B>, bc: UnaryFn<B, R>): () => MaybeSideEffect<R>;
@@ -43,6 +47,49 @@ function pipeSideEffect<B, C, D, E, F, R>(
43
47
  ef: UnaryFn<E, F>,
44
48
  fg: UnaryFn<F, R>
45
49
  ): () => MaybeSideEffect<R>;
50
+ function pipeSideEffect<B, C, D, E, F, G, R>(
51
+ ab: ZeroFn<B>,
52
+ bc: UnaryFn<B, C>,
53
+ cd: UnaryFn<C, D>,
54
+ de: UnaryFn<D, E>,
55
+ ef: UnaryFn<E, F>,
56
+ fg: UnaryFn<F, G>,
57
+ gh: UnaryFn<G, R>
58
+ ): () => MaybeSideEffect<R>;
59
+ function pipeSideEffect<B, C, D, E, F, G, H, R>(
60
+ ab: ZeroFn<B>,
61
+ bc: UnaryFn<B, C>,
62
+ cd: UnaryFn<C, D>,
63
+ de: UnaryFn<D, E>,
64
+ ef: UnaryFn<E, F>,
65
+ fg: UnaryFn<F, G>,
66
+ gh: UnaryFn<G, H>,
67
+ hi: UnaryFn<H, R>
68
+ ): () => MaybeSideEffect<R>;
69
+ function pipeSideEffect<B, C, D, E, F, G, H, I, R>(
70
+ ab: ZeroFn<B>,
71
+ bc: UnaryFn<B, C>,
72
+ cd: UnaryFn<C, D>,
73
+ de: UnaryFn<D, E>,
74
+ ef: UnaryFn<E, F>,
75
+ fg: UnaryFn<F, G>,
76
+ gh: UnaryFn<G, H>,
77
+ hi: UnaryFn<H, I>,
78
+ ij: UnaryFn<I, R>
79
+ ): () => MaybeSideEffect<R>;
80
+ function pipeSideEffect<B, C, D, E, F, G, H, I, J, R>(
81
+ ab: ZeroFn<B>,
82
+ bc: UnaryFn<B, C>,
83
+ cd: UnaryFn<C, D>,
84
+ de: UnaryFn<D, E>,
85
+ ef: UnaryFn<E, F>,
86
+ fg: UnaryFn<F, G>,
87
+ gh: UnaryFn<G, H>,
88
+ hi: UnaryFn<H, I>,
89
+ ij: UnaryFn<I, J>,
90
+ jk: UnaryFn<J, R>
91
+ ): () => MaybeSideEffect<R>;
92
+ function pipeSideEffect<Fns extends [FromFn<any>, ...UnaryFn<any, any>[]]>(...funcs: Fns): PipeSideEffectFrom<Fns>;
46
93
  function pipeSideEffect<A, R>(ab: UnaryFn<A, R>): (a: A | SideEffect<any>) => MaybeSideEffect<R>;
47
94
  function pipeSideEffect<A, B, R>(
48
95
  ab: UnaryFn<A, B>,
@@ -74,6 +121,48 @@ function pipeSideEffect<A, B, C, D, E, F, R>(
74
121
  ef: UnaryFn<E, F>,
75
122
  fg: UnaryFn<F, R>
76
123
  ): (a: A | SideEffect<any>) => MaybeSideEffect<R>;
124
+ function pipeSideEffect<A, B, C, D, E, F, G, R>(
125
+ ab: UnaryFn<A, B>,
126
+ bc: UnaryFn<B, C>,
127
+ cd: UnaryFn<C, D>,
128
+ de: UnaryFn<D, E>,
129
+ ef: UnaryFn<E, F>,
130
+ fg: UnaryFn<F, G>,
131
+ gh: UnaryFn<G, R>
132
+ ): (a: A | SideEffect<any>) => MaybeSideEffect<R>;
133
+ function pipeSideEffect<A, B, C, D, E, F, G, H, R>(
134
+ ab: UnaryFn<A, B>,
135
+ bc: UnaryFn<B, C>,
136
+ cd: UnaryFn<C, D>,
137
+ de: UnaryFn<D, E>,
138
+ ef: UnaryFn<E, F>,
139
+ fg: UnaryFn<F, G>,
140
+ gh: UnaryFn<G, H>,
141
+ hi: UnaryFn<H, R>
142
+ ): (a: A | SideEffect<any>) => MaybeSideEffect<R>;
143
+ function pipeSideEffect<A, B, C, D, E, F, G, H, I, R>(
144
+ ab: UnaryFn<A, B>,
145
+ bc: UnaryFn<B, C>,
146
+ cd: UnaryFn<C, D>,
147
+ de: UnaryFn<D, E>,
148
+ ef: UnaryFn<E, F>,
149
+ fg: UnaryFn<F, G>,
150
+ gh: UnaryFn<G, H>,
151
+ hi: UnaryFn<H, I>,
152
+ ij: UnaryFn<I, R>
153
+ ): (a: A | SideEffect<any>) => MaybeSideEffect<R>;
154
+ function pipeSideEffect<A, B, C, D, E, F, G, H, I, J, R>(
155
+ ab: UnaryFn<A, B>,
156
+ bc: UnaryFn<B, C>,
157
+ cd: UnaryFn<C, D>,
158
+ de: UnaryFn<D, E>,
159
+ ef: UnaryFn<E, F>,
160
+ fg: UnaryFn<F, G>,
161
+ gh: UnaryFn<G, H>,
162
+ hi: UnaryFn<H, I>,
163
+ ij: UnaryFn<I, J>,
164
+ jk: UnaryFn<J, R>
165
+ ): (a: A | SideEffect<any>) => MaybeSideEffect<R>;
77
166
 
78
167
  function pipeSideEffect<Fns extends [UnaryFn<any, any>, ...UnaryFn<any, any>[]]>(...funcs: Fns): PipeSideEffect<Fns>;
79
168
  function pipeSideEffect(...funcs: Array<UnaryFn<any, any>>): (input: any) => any;
@@ -1,3 +1,4 @@
1
+ import type { FromFn } from './from';
1
2
  import SideEffect, { isSideEffect } from './sideEffect';
2
3
 
3
4
  type AnyFn = (...args: any[]) => any;
@@ -43,6 +44,12 @@ type PipeSideEffectStrictUnary<Fns extends [AnyFn, ...AnyFn[]]> = {
43
44
  input: PipeInputStrict<Fns> | SideEffect<EIn>
44
45
  ): Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns> | EIn>>;
45
46
  };
47
+ type PipeSideEffectStrictUnaryOptional<Fns extends [AnyFn, ...AnyFn[]]> = {
48
+ (input?: PipeInputStrict<Fns>): Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns>>>;
49
+ <EIn>(
50
+ input?: PipeInputStrict<Fns> | SideEffect<EIn>
51
+ ): Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns> | EIn>>;
52
+ };
46
53
 
47
54
  type PipeSideEffectStrict<Fns extends [AnyFn, ...AnyFn[]]> = Fns extends [ZeroFn<any>, ...AnyFn[]]
48
55
  ? () => Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns>>>
@@ -97,6 +104,89 @@ function pipeSideEffectStrict<B, C, D, E, F, R>(
97
104
  UnaryFn<NonSideEffect<E>, F>,
98
105
  UnaryFn<NonSideEffect<F>, R>
99
106
  ]>;
107
+ function pipeSideEffectStrict<B, C, D, E, F, G, R>(
108
+ ab: ZeroFn<B>,
109
+ bc: UnaryFn<NonSideEffect<B>, C>,
110
+ cd: UnaryFn<NonSideEffect<C>, D>,
111
+ de: UnaryFn<NonSideEffect<D>, E>,
112
+ ef: UnaryFn<NonSideEffect<E>, F>,
113
+ fg: UnaryFn<NonSideEffect<F>, G>,
114
+ gh: UnaryFn<NonSideEffect<G>, R>
115
+ ): PipeSideEffectStrict<[
116
+ ZeroFn<B>,
117
+ UnaryFn<NonSideEffect<B>, C>,
118
+ UnaryFn<NonSideEffect<C>, D>,
119
+ UnaryFn<NonSideEffect<D>, E>,
120
+ UnaryFn<NonSideEffect<E>, F>,
121
+ UnaryFn<NonSideEffect<F>, G>,
122
+ UnaryFn<NonSideEffect<G>, R>
123
+ ]>;
124
+ function pipeSideEffectStrict<B, C, D, E, F, G, H, R>(
125
+ ab: ZeroFn<B>,
126
+ bc: UnaryFn<NonSideEffect<B>, C>,
127
+ cd: UnaryFn<NonSideEffect<C>, D>,
128
+ de: UnaryFn<NonSideEffect<D>, E>,
129
+ ef: UnaryFn<NonSideEffect<E>, F>,
130
+ fg: UnaryFn<NonSideEffect<F>, G>,
131
+ gh: UnaryFn<NonSideEffect<G>, H>,
132
+ hi: UnaryFn<NonSideEffect<H>, R>
133
+ ): PipeSideEffectStrict<[
134
+ ZeroFn<B>,
135
+ UnaryFn<NonSideEffect<B>, C>,
136
+ UnaryFn<NonSideEffect<C>, D>,
137
+ UnaryFn<NonSideEffect<D>, E>,
138
+ UnaryFn<NonSideEffect<E>, F>,
139
+ UnaryFn<NonSideEffect<F>, G>,
140
+ UnaryFn<NonSideEffect<G>, H>,
141
+ UnaryFn<NonSideEffect<H>, R>
142
+ ]>;
143
+ function pipeSideEffectStrict<B, C, D, E, F, G, H, I, R>(
144
+ ab: ZeroFn<B>,
145
+ bc: UnaryFn<NonSideEffect<B>, C>,
146
+ cd: UnaryFn<NonSideEffect<C>, D>,
147
+ de: UnaryFn<NonSideEffect<D>, E>,
148
+ ef: UnaryFn<NonSideEffect<E>, F>,
149
+ fg: UnaryFn<NonSideEffect<F>, G>,
150
+ gh: UnaryFn<NonSideEffect<G>, H>,
151
+ hi: UnaryFn<NonSideEffect<H>, I>,
152
+ ij: UnaryFn<NonSideEffect<I>, R>
153
+ ): PipeSideEffectStrict<[
154
+ ZeroFn<B>,
155
+ UnaryFn<NonSideEffect<B>, C>,
156
+ UnaryFn<NonSideEffect<C>, D>,
157
+ UnaryFn<NonSideEffect<D>, E>,
158
+ UnaryFn<NonSideEffect<E>, F>,
159
+ UnaryFn<NonSideEffect<F>, G>,
160
+ UnaryFn<NonSideEffect<G>, H>,
161
+ UnaryFn<NonSideEffect<H>, I>,
162
+ UnaryFn<NonSideEffect<I>, R>
163
+ ]>;
164
+ function pipeSideEffectStrict<B, C, D, E, F, G, H, I, J, R>(
165
+ ab: ZeroFn<B>,
166
+ bc: UnaryFn<NonSideEffect<B>, C>,
167
+ cd: UnaryFn<NonSideEffect<C>, D>,
168
+ de: UnaryFn<NonSideEffect<D>, E>,
169
+ ef: UnaryFn<NonSideEffect<E>, F>,
170
+ fg: UnaryFn<NonSideEffect<F>, G>,
171
+ gh: UnaryFn<NonSideEffect<G>, H>,
172
+ hi: UnaryFn<NonSideEffect<H>, I>,
173
+ ij: UnaryFn<NonSideEffect<I>, J>,
174
+ jk: UnaryFn<NonSideEffect<J>, R>
175
+ ): PipeSideEffectStrict<[
176
+ ZeroFn<B>,
177
+ UnaryFn<NonSideEffect<B>, C>,
178
+ UnaryFn<NonSideEffect<C>, D>,
179
+ UnaryFn<NonSideEffect<D>, E>,
180
+ UnaryFn<NonSideEffect<E>, F>,
181
+ UnaryFn<NonSideEffect<F>, G>,
182
+ UnaryFn<NonSideEffect<G>, H>,
183
+ UnaryFn<NonSideEffect<H>, I>,
184
+ UnaryFn<NonSideEffect<I>, J>,
185
+ UnaryFn<NonSideEffect<J>, R>
186
+ ]>;
187
+ function pipeSideEffectStrict<Fns extends [FromFn<any>, ...AnyFn[]]>(
188
+ ...funcs: Fns
189
+ ): PipeSideEffectStrictUnaryOptional<Fns>;
100
190
  function pipeSideEffectStrict<A, R>(ab: UnaryFn<A, R>): PipeSideEffectStrict<[UnaryFn<A, R>]>;
101
191
  function pipeSideEffectStrict<A, B, R>(
102
192
  ab: UnaryFn<A, B>,
@@ -146,6 +236,86 @@ function pipeSideEffectStrict<A, B, C, D, E, F, R>(
146
236
  UnaryFn<NonSideEffect<E>, F>,
147
237
  UnaryFn<NonSideEffect<F>, R>
148
238
  ]>;
239
+ function pipeSideEffectStrict<A, B, C, D, E, F, G, R>(
240
+ ab: UnaryFn<A, B>,
241
+ bc: UnaryFn<NonSideEffect<B>, C>,
242
+ cd: UnaryFn<NonSideEffect<C>, D>,
243
+ de: UnaryFn<NonSideEffect<D>, E>,
244
+ ef: UnaryFn<NonSideEffect<E>, F>,
245
+ fg: UnaryFn<NonSideEffect<F>, G>,
246
+ gh: UnaryFn<NonSideEffect<G>, R>
247
+ ): PipeSideEffectStrict<[
248
+ UnaryFn<A, B>,
249
+ UnaryFn<NonSideEffect<B>, C>,
250
+ UnaryFn<NonSideEffect<C>, D>,
251
+ UnaryFn<NonSideEffect<D>, E>,
252
+ UnaryFn<NonSideEffect<E>, F>,
253
+ UnaryFn<NonSideEffect<F>, G>,
254
+ UnaryFn<NonSideEffect<G>, R>
255
+ ]>;
256
+ function pipeSideEffectStrict<A, B, C, D, E, F, G, H, R>(
257
+ ab: UnaryFn<A, B>,
258
+ bc: UnaryFn<NonSideEffect<B>, C>,
259
+ cd: UnaryFn<NonSideEffect<C>, D>,
260
+ de: UnaryFn<NonSideEffect<D>, E>,
261
+ ef: UnaryFn<NonSideEffect<E>, F>,
262
+ fg: UnaryFn<NonSideEffect<F>, G>,
263
+ gh: UnaryFn<NonSideEffect<G>, H>,
264
+ hi: UnaryFn<NonSideEffect<H>, R>
265
+ ): PipeSideEffectStrict<[
266
+ UnaryFn<A, B>,
267
+ UnaryFn<NonSideEffect<B>, C>,
268
+ UnaryFn<NonSideEffect<C>, D>,
269
+ UnaryFn<NonSideEffect<D>, E>,
270
+ UnaryFn<NonSideEffect<E>, F>,
271
+ UnaryFn<NonSideEffect<F>, G>,
272
+ UnaryFn<NonSideEffect<G>, H>,
273
+ UnaryFn<NonSideEffect<H>, R>
274
+ ]>;
275
+ function pipeSideEffectStrict<A, B, C, D, E, F, G, H, I, R>(
276
+ ab: UnaryFn<A, B>,
277
+ bc: UnaryFn<NonSideEffect<B>, C>,
278
+ cd: UnaryFn<NonSideEffect<C>, D>,
279
+ de: UnaryFn<NonSideEffect<D>, E>,
280
+ ef: UnaryFn<NonSideEffect<E>, F>,
281
+ fg: UnaryFn<NonSideEffect<F>, G>,
282
+ gh: UnaryFn<NonSideEffect<G>, H>,
283
+ hi: UnaryFn<NonSideEffect<H>, I>,
284
+ ij: UnaryFn<NonSideEffect<I>, R>
285
+ ): PipeSideEffectStrict<[
286
+ UnaryFn<A, B>,
287
+ UnaryFn<NonSideEffect<B>, C>,
288
+ UnaryFn<NonSideEffect<C>, D>,
289
+ UnaryFn<NonSideEffect<D>, E>,
290
+ UnaryFn<NonSideEffect<E>, F>,
291
+ UnaryFn<NonSideEffect<F>, G>,
292
+ UnaryFn<NonSideEffect<G>, H>,
293
+ UnaryFn<NonSideEffect<H>, I>,
294
+ UnaryFn<NonSideEffect<I>, R>
295
+ ]>;
296
+ function pipeSideEffectStrict<A, B, C, D, E, F, G, H, I, J, R>(
297
+ ab: UnaryFn<A, B>,
298
+ bc: UnaryFn<NonSideEffect<B>, C>,
299
+ cd: UnaryFn<NonSideEffect<C>, D>,
300
+ de: UnaryFn<NonSideEffect<D>, E>,
301
+ ef: UnaryFn<NonSideEffect<E>, F>,
302
+ fg: UnaryFn<NonSideEffect<F>, G>,
303
+ gh: UnaryFn<NonSideEffect<G>, H>,
304
+ hi: UnaryFn<NonSideEffect<H>, I>,
305
+ ij: UnaryFn<NonSideEffect<I>, J>,
306
+ jk: UnaryFn<NonSideEffect<J>, R>
307
+ ): PipeSideEffectStrict<[
308
+ UnaryFn<A, B>,
309
+ UnaryFn<NonSideEffect<B>, C>,
310
+ UnaryFn<NonSideEffect<C>, D>,
311
+ UnaryFn<NonSideEffect<D>, E>,
312
+ UnaryFn<NonSideEffect<E>, F>,
313
+ UnaryFn<NonSideEffect<F>, G>,
314
+ UnaryFn<NonSideEffect<G>, H>,
315
+ UnaryFn<NonSideEffect<H>, I>,
316
+ UnaryFn<NonSideEffect<I>, J>,
317
+ UnaryFn<NonSideEffect<J>, R>
318
+ ]>;
149
319
 
150
320
  function pipeSideEffectStrict<Fns extends [AnyFn, ...AnyFn[]]>(...funcs: Fns): PipeSideEffectStrict<Fns>;
151
321
  function pipeSideEffectStrict(...funcs: Array<(input: any) => any>) {