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.
- package/README.md +119 -32
- package/dist/fp-pack.umd.js +1 -1
- package/dist/fp-pack.umd.js.map +1 -1
- package/dist/implement/async/pipeAsync.d.ts +7 -0
- package/dist/implement/async/pipeAsync.d.ts.map +1 -1
- package/dist/implement/async/pipeAsync.mjs.map +1 -1
- package/dist/implement/async/pipeAsyncSideEffect.d.ts +7 -0
- package/dist/implement/async/pipeAsyncSideEffect.d.ts.map +1 -1
- package/dist/implement/async/pipeAsyncSideEffect.mjs.map +1 -1
- package/dist/implement/async/pipeAsyncSideEffectStrict.d.ts +90 -0
- package/dist/implement/async/pipeAsyncSideEffectStrict.d.ts.map +1 -1
- package/dist/implement/async/pipeAsyncSideEffectStrict.mjs.map +1 -1
- package/dist/implement/composition/from.d.ts +5 -1
- package/dist/implement/composition/from.d.ts.map +1 -1
- package/dist/implement/composition/from.mjs +4 -3
- package/dist/implement/composition/from.mjs.map +1 -1
- package/dist/implement/composition/pipe.d.ts +8 -0
- package/dist/implement/composition/pipe.d.ts.map +1 -1
- package/dist/implement/composition/pipe.mjs.map +1 -1
- package/dist/implement/composition/pipe.type-test.d.ts +98 -0
- package/dist/implement/composition/pipe.type-test.d.ts.map +1 -1
- package/dist/implement/composition/pipeSideEffect.d.ts +11 -0
- package/dist/implement/composition/pipeSideEffect.d.ts.map +1 -1
- package/dist/implement/composition/pipeSideEffect.mjs.map +1 -1
- package/dist/implement/composition/pipeSideEffectStrict.d.ts +90 -0
- package/dist/implement/composition/pipeSideEffectStrict.d.ts.map +1 -1
- package/dist/implement/composition/pipeSideEffectStrict.mjs.map +1 -1
- package/dist/skills/fp-pack/SKILL.md +14 -6
- package/dist/skills/fp-pack.md +14 -6
- package/package.json +3 -2
- package/src/implement/async/pipeAsync.ts +48 -0
- package/src/implement/async/pipeAsyncSideEffect.ts +49 -0
- package/src/implement/async/pipeAsyncSideEffectStrict.ts +170 -0
- package/src/implement/composition/from.ts +9 -2
- package/src/implement/composition/pipe.ts +84 -0
- package/src/implement/composition/pipe.type-test.ts +299 -0
- package/src/implement/composition/pipeSideEffect.ts +89 -0
- package/src/implement/composition/pipeSideEffectStrict.ts +170 -0
package/dist/skills/fp-pack.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# fp-pack AI Agent Skills
|
|
2
2
|
|
|
3
|
-
Document Version: 0.
|
|
3
|
+
Document Version: 0.5.0
|
|
4
4
|
|
|
5
5
|
This document provides guidelines for AI coding assistants when working in projects that use fp-pack. Follow these instructions to write clean, declarative, functional code using fp-pack's utilities.
|
|
6
6
|
|
|
@@ -519,13 +519,13 @@ const gradeToLetter = cond([
|
|
|
519
519
|
### 6.1 Type-Safety Tips (prop/ifElse/cond)
|
|
520
520
|
|
|
521
521
|
- `prop` returns `T[K] | undefined`. Use `propOr` (or guard) before array operations.
|
|
522
|
-
- `ifElse` expects **functions** for both branches. If you already have a value, wrap it: `() => value
|
|
523
|
-
- Use `from(value)` when you need a unary function that ignores input (handy for `ifElse` branches).
|
|
522
|
+
- `ifElse` expects **functions** for both branches. If you already have a value, wrap it: `() => value` or use `from(value)` for cleaner constant branches.
|
|
523
|
+
- Use `from(value)` when you need a unary function that ignores input (handy for `ifElse`/`cond` branches and data-first patterns).
|
|
524
524
|
- `cond` returns `R | undefined`. Add a default branch and coalesce when you need a strict result.
|
|
525
525
|
- In `pipeSideEffect`, keep step return types aligned to avoid wide unions.
|
|
526
526
|
|
|
527
527
|
```typescript
|
|
528
|
-
import { pipe, propOr, append, assoc, ifElse, cond, from } from 'fp-pack';
|
|
528
|
+
import { pipe, propOr, append, assoc, ifElse, cond, from, filter, map } from 'fp-pack';
|
|
529
529
|
|
|
530
530
|
// propOr keeps the type strict for array ops
|
|
531
531
|
const addTodo = (text: string, state: AppState) =>
|
|
@@ -542,13 +542,21 @@ const toggleTodo = (id: string) => ifElse(
|
|
|
542
542
|
(todo) => todo
|
|
543
543
|
);
|
|
544
544
|
|
|
545
|
-
// from is useful for constant branches
|
|
545
|
+
// from is useful for constant branches - cleaner than () => value
|
|
546
546
|
const statusLabel = ifElse(
|
|
547
547
|
(score: number) => score >= 60,
|
|
548
|
-
from('pass'),
|
|
548
|
+
from('pass'), // Constant value
|
|
549
549
|
from('fail')
|
|
550
550
|
);
|
|
551
551
|
|
|
552
|
+
// Data-first pattern with from: inject data into pipeline
|
|
553
|
+
const processData = pipe(
|
|
554
|
+
from([1, 2, 3, 4, 5]),
|
|
555
|
+
filter((n: number) => n % 2 === 0),
|
|
556
|
+
map(n => n * 2)
|
|
557
|
+
);
|
|
558
|
+
const result = processData(); // [4, 8]
|
|
559
|
+
|
|
552
560
|
// cond still returns R | undefined, so coalesce if needed
|
|
553
561
|
const grade = (score: number) =>
|
|
554
562
|
cond([
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fp-pack",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Functional programming utilities library for TypeScript",
|
|
6
6
|
"keywords": [
|
|
@@ -73,7 +73,8 @@
|
|
|
73
73
|
"preview": "vite preview",
|
|
74
74
|
"test": "vitest",
|
|
75
75
|
"test:ui": "vitest --ui",
|
|
76
|
-
"test:run": "vitest run",
|
|
76
|
+
"test:run": "pnpm test:types && vitest run",
|
|
77
|
+
"test:types": "tsc --noEmit",
|
|
77
78
|
"clean": "pnpm clean:dist && pnpm clean:module",
|
|
78
79
|
"clean:dist": "rm -rf dist docs/dist",
|
|
79
80
|
"clean:module": "rm -rf dist docs/dist node_modules",
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { FromFn } from '../composition/from';
|
|
2
|
+
|
|
1
3
|
/** pipeAsync - 비동기 함수 합성 */
|
|
2
4
|
type AsyncOrSync<A, R> = (a: A) => R | Promise<R>;
|
|
3
5
|
type PipeInput<Fns extends AsyncOrSync<any, any>[]> = Fns extends [AsyncOrSync<infer A, any>, ...AsyncOrSync<any, any>[]]
|
|
@@ -11,7 +13,11 @@ type PipeOutput<Fns extends AsyncOrSync<any, any>[]> = Fns extends [AsyncOrSync<
|
|
|
11
13
|
: never
|
|
12
14
|
: never;
|
|
13
15
|
type PipeAsync<Fns extends AsyncOrSync<any, any>[]> = (input: PipeInput<Fns>) => Promise<PipeOutput<Fns>>;
|
|
16
|
+
type PipeAsyncFrom<Fns extends [FromFn<any>, ...AsyncOrSync<any, any>[]]> = (
|
|
17
|
+
input?: PipeInput<Fns>
|
|
18
|
+
) => Promise<PipeOutput<Fns>>;
|
|
14
19
|
|
|
20
|
+
function pipeAsync<Fns extends [FromFn<any>, ...AsyncOrSync<any, any>[]]>(...funcs: Fns): PipeAsyncFrom<Fns>;
|
|
15
21
|
function pipeAsync<A, R>(ab: AsyncOrSync<A, R>): (a: A) => Promise<Awaited<R>>;
|
|
16
22
|
function pipeAsync<A, B, R>(ab: AsyncOrSync<A, B>, bc: AsyncOrSync<Awaited<B>, R>): (a: A) => Promise<Awaited<R>>;
|
|
17
23
|
function pipeAsync<A, B, C, R>(
|
|
@@ -40,6 +46,48 @@ function pipeAsync<A, B, C, D, E, F, R>(
|
|
|
40
46
|
ef: AsyncOrSync<Awaited<E>, F>,
|
|
41
47
|
fg: AsyncOrSync<Awaited<F>, R>
|
|
42
48
|
): (a: A) => Promise<Awaited<R>>;
|
|
49
|
+
function pipeAsync<A, B, C, D, E, F, G, R>(
|
|
50
|
+
ab: AsyncOrSync<A, B>,
|
|
51
|
+
bc: AsyncOrSync<Awaited<B>, C>,
|
|
52
|
+
cd: AsyncOrSync<Awaited<C>, D>,
|
|
53
|
+
de: AsyncOrSync<Awaited<D>, E>,
|
|
54
|
+
ef: AsyncOrSync<Awaited<E>, F>,
|
|
55
|
+
fg: AsyncOrSync<Awaited<F>, G>,
|
|
56
|
+
gh: AsyncOrSync<Awaited<G>, R>
|
|
57
|
+
): (a: A) => Promise<Awaited<R>>;
|
|
58
|
+
function pipeAsync<A, B, C, D, E, F, G, H, R>(
|
|
59
|
+
ab: AsyncOrSync<A, B>,
|
|
60
|
+
bc: AsyncOrSync<Awaited<B>, C>,
|
|
61
|
+
cd: AsyncOrSync<Awaited<C>, D>,
|
|
62
|
+
de: AsyncOrSync<Awaited<D>, E>,
|
|
63
|
+
ef: AsyncOrSync<Awaited<E>, F>,
|
|
64
|
+
fg: AsyncOrSync<Awaited<F>, G>,
|
|
65
|
+
gh: AsyncOrSync<Awaited<G>, H>,
|
|
66
|
+
hi: AsyncOrSync<Awaited<H>, R>
|
|
67
|
+
): (a: A) => Promise<Awaited<R>>;
|
|
68
|
+
function pipeAsync<A, B, C, D, E, F, G, H, I, R>(
|
|
69
|
+
ab: AsyncOrSync<A, B>,
|
|
70
|
+
bc: AsyncOrSync<Awaited<B>, C>,
|
|
71
|
+
cd: AsyncOrSync<Awaited<C>, D>,
|
|
72
|
+
de: AsyncOrSync<Awaited<D>, E>,
|
|
73
|
+
ef: AsyncOrSync<Awaited<E>, F>,
|
|
74
|
+
fg: AsyncOrSync<Awaited<F>, G>,
|
|
75
|
+
gh: AsyncOrSync<Awaited<G>, H>,
|
|
76
|
+
hi: AsyncOrSync<Awaited<H>, I>,
|
|
77
|
+
ij: AsyncOrSync<Awaited<I>, R>
|
|
78
|
+
): (a: A) => Promise<Awaited<R>>;
|
|
79
|
+
function pipeAsync<A, B, C, D, E, F, G, H, I, J, R>(
|
|
80
|
+
ab: AsyncOrSync<A, B>,
|
|
81
|
+
bc: AsyncOrSync<Awaited<B>, C>,
|
|
82
|
+
cd: AsyncOrSync<Awaited<C>, D>,
|
|
83
|
+
de: AsyncOrSync<Awaited<D>, E>,
|
|
84
|
+
ef: AsyncOrSync<Awaited<E>, F>,
|
|
85
|
+
fg: AsyncOrSync<Awaited<F>, G>,
|
|
86
|
+
gh: AsyncOrSync<Awaited<G>, H>,
|
|
87
|
+
hi: AsyncOrSync<Awaited<H>, I>,
|
|
88
|
+
ij: AsyncOrSync<Awaited<I>, J>,
|
|
89
|
+
jk: AsyncOrSync<Awaited<J>, R>
|
|
90
|
+
): (a: A) => Promise<Awaited<R>>;
|
|
43
91
|
|
|
44
92
|
function pipeAsync<Fns extends [AsyncOrSync<any, any>, ...AsyncOrSync<any, any>[]]>(...funcs: Fns): PipeAsync<Fns>;
|
|
45
93
|
function pipeAsync(...funcs: Array<AsyncOrSync<any, any>>): (value: any) => Promise<any>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { FromFn } from '../composition/from';
|
|
1
2
|
import SideEffect, { isSideEffect } from '../composition/sideEffect';
|
|
2
3
|
|
|
3
4
|
/** pipeAsyncSideEffect - SideEffect를 허용하는 비동기 함수 합성 */
|
|
@@ -21,7 +22,13 @@ type Resolve<T> = T extends infer R ? R : never;
|
|
|
21
22
|
type PipeAsyncSideEffect<Fns extends AsyncOrSync<any, any>[]> = (
|
|
22
23
|
input: PipeInput<Fns> | SideEffect<any>
|
|
23
24
|
) => Promise<Resolve<PipeOutput<Fns>>>;
|
|
25
|
+
type PipeAsyncSideEffectFrom<Fns extends [FromFn<any>, ...AsyncOrSync<any, any>[]]> = (
|
|
26
|
+
input?: PipeInput<Fns> | SideEffect<any>
|
|
27
|
+
) => Promise<Resolve<PipeOutput<Fns>>>;
|
|
24
28
|
|
|
29
|
+
function pipeAsyncSideEffect<Fns extends [FromFn<any>, ...AsyncOrSync<any, any>[]]>(
|
|
30
|
+
...funcs: Fns
|
|
31
|
+
): PipeAsyncSideEffectFrom<Fns>;
|
|
25
32
|
function pipeAsyncSideEffect<A, R>(
|
|
26
33
|
ab: AsyncOrSync<A, R>
|
|
27
34
|
): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;
|
|
@@ -55,6 +62,48 @@ function pipeAsyncSideEffect<A, B, C, D, E, F, R>(
|
|
|
55
62
|
ef: AsyncOrSync<Awaited<E>, F>,
|
|
56
63
|
fg: AsyncOrSync<Awaited<F>, R>
|
|
57
64
|
): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;
|
|
65
|
+
function pipeAsyncSideEffect<A, B, C, D, E, F, G, R>(
|
|
66
|
+
ab: AsyncOrSync<A, B>,
|
|
67
|
+
bc: AsyncOrSync<Awaited<B>, C>,
|
|
68
|
+
cd: AsyncOrSync<Awaited<C>, D>,
|
|
69
|
+
de: AsyncOrSync<Awaited<D>, E>,
|
|
70
|
+
ef: AsyncOrSync<Awaited<E>, F>,
|
|
71
|
+
fg: AsyncOrSync<Awaited<F>, G>,
|
|
72
|
+
gh: AsyncOrSync<Awaited<G>, R>
|
|
73
|
+
): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;
|
|
74
|
+
function pipeAsyncSideEffect<A, B, C, D, E, F, G, H, R>(
|
|
75
|
+
ab: AsyncOrSync<A, B>,
|
|
76
|
+
bc: AsyncOrSync<Awaited<B>, C>,
|
|
77
|
+
cd: AsyncOrSync<Awaited<C>, D>,
|
|
78
|
+
de: AsyncOrSync<Awaited<D>, E>,
|
|
79
|
+
ef: AsyncOrSync<Awaited<E>, F>,
|
|
80
|
+
fg: AsyncOrSync<Awaited<F>, G>,
|
|
81
|
+
gh: AsyncOrSync<Awaited<G>, H>,
|
|
82
|
+
hi: AsyncOrSync<Awaited<H>, R>
|
|
83
|
+
): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;
|
|
84
|
+
function pipeAsyncSideEffect<A, B, C, D, E, F, G, H, I, R>(
|
|
85
|
+
ab: AsyncOrSync<A, B>,
|
|
86
|
+
bc: AsyncOrSync<Awaited<B>, C>,
|
|
87
|
+
cd: AsyncOrSync<Awaited<C>, D>,
|
|
88
|
+
de: AsyncOrSync<Awaited<D>, E>,
|
|
89
|
+
ef: AsyncOrSync<Awaited<E>, F>,
|
|
90
|
+
fg: AsyncOrSync<Awaited<F>, G>,
|
|
91
|
+
gh: AsyncOrSync<Awaited<G>, H>,
|
|
92
|
+
hi: AsyncOrSync<Awaited<H>, I>,
|
|
93
|
+
ij: AsyncOrSync<Awaited<I>, R>
|
|
94
|
+
): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;
|
|
95
|
+
function pipeAsyncSideEffect<A, B, C, D, E, F, G, H, I, J, R>(
|
|
96
|
+
ab: AsyncOrSync<A, B>,
|
|
97
|
+
bc: AsyncOrSync<Awaited<B>, C>,
|
|
98
|
+
cd: AsyncOrSync<Awaited<C>, D>,
|
|
99
|
+
de: AsyncOrSync<Awaited<D>, E>,
|
|
100
|
+
ef: AsyncOrSync<Awaited<E>, F>,
|
|
101
|
+
fg: AsyncOrSync<Awaited<F>, G>,
|
|
102
|
+
gh: AsyncOrSync<Awaited<G>, H>,
|
|
103
|
+
hi: AsyncOrSync<Awaited<H>, I>,
|
|
104
|
+
ij: AsyncOrSync<Awaited<I>, J>,
|
|
105
|
+
jk: AsyncOrSync<Awaited<J>, R>
|
|
106
|
+
): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;
|
|
58
107
|
|
|
59
108
|
function pipeAsyncSideEffect<Fns extends [AsyncOrSync<any, any>, ...AsyncOrSync<any, any>[]]>(
|
|
60
109
|
...funcs: Fns
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { FromFn } from '../composition/from';
|
|
1
2
|
import SideEffect, { isSideEffect } from '../composition/sideEffect';
|
|
2
3
|
|
|
3
4
|
type AnyFn = (...args: any[]) => any;
|
|
@@ -43,6 +44,12 @@ type PipeAsyncSideEffectStrictUnary<Fns extends [AnyFn, ...AnyFn[]]> = {
|
|
|
43
44
|
input: PipeInputStrict<Fns> | SideEffect<EIn>
|
|
44
45
|
): Promise<Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns> | EIn>>>;
|
|
45
46
|
};
|
|
47
|
+
type PipeAsyncSideEffectStrictUnaryOptional<Fns extends [AnyFn, ...AnyFn[]]> = {
|
|
48
|
+
(input?: PipeInputStrict<Fns>): Promise<Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns>>>>;
|
|
49
|
+
<EIn>(
|
|
50
|
+
input?: PipeInputStrict<Fns> | SideEffect<EIn>
|
|
51
|
+
): Promise<Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns> | EIn>>>;
|
|
52
|
+
};
|
|
46
53
|
|
|
47
54
|
type PipeAsyncSideEffectStrict<Fns extends [AnyFn, ...AnyFn[]]> = Fns extends [ZeroFn<any>, ...AnyFn[]]
|
|
48
55
|
? () => Promise<Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns>>>>
|
|
@@ -97,6 +104,89 @@ function pipeAsyncSideEffectStrict<B, C, D, E, F, R>(
|
|
|
97
104
|
AsyncOrSync<NonSideEffect<Awaited<E>>, F>,
|
|
98
105
|
AsyncOrSync<NonSideEffect<Awaited<F>>, R>
|
|
99
106
|
]>;
|
|
107
|
+
function pipeAsyncSideEffectStrict<B, C, D, E, F, G, R>(
|
|
108
|
+
ab: ZeroFn<B>,
|
|
109
|
+
bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,
|
|
110
|
+
cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,
|
|
111
|
+
de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,
|
|
112
|
+
ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,
|
|
113
|
+
fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,
|
|
114
|
+
gh: AsyncOrSync<NonSideEffect<Awaited<G>>, R>
|
|
115
|
+
): PipeAsyncSideEffectStrict<[
|
|
116
|
+
ZeroFn<B>,
|
|
117
|
+
AsyncOrSync<NonSideEffect<Awaited<B>>, C>,
|
|
118
|
+
AsyncOrSync<NonSideEffect<Awaited<C>>, D>,
|
|
119
|
+
AsyncOrSync<NonSideEffect<Awaited<D>>, E>,
|
|
120
|
+
AsyncOrSync<NonSideEffect<Awaited<E>>, F>,
|
|
121
|
+
AsyncOrSync<NonSideEffect<Awaited<F>>, G>,
|
|
122
|
+
AsyncOrSync<NonSideEffect<Awaited<G>>, R>
|
|
123
|
+
]>;
|
|
124
|
+
function pipeAsyncSideEffectStrict<B, C, D, E, F, G, H, R>(
|
|
125
|
+
ab: ZeroFn<B>,
|
|
126
|
+
bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,
|
|
127
|
+
cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,
|
|
128
|
+
de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,
|
|
129
|
+
ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,
|
|
130
|
+
fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,
|
|
131
|
+
gh: AsyncOrSync<NonSideEffect<Awaited<G>>, H>,
|
|
132
|
+
hi: AsyncOrSync<NonSideEffect<Awaited<H>>, R>
|
|
133
|
+
): PipeAsyncSideEffectStrict<[
|
|
134
|
+
ZeroFn<B>,
|
|
135
|
+
AsyncOrSync<NonSideEffect<Awaited<B>>, C>,
|
|
136
|
+
AsyncOrSync<NonSideEffect<Awaited<C>>, D>,
|
|
137
|
+
AsyncOrSync<NonSideEffect<Awaited<D>>, E>,
|
|
138
|
+
AsyncOrSync<NonSideEffect<Awaited<E>>, F>,
|
|
139
|
+
AsyncOrSync<NonSideEffect<Awaited<F>>, G>,
|
|
140
|
+
AsyncOrSync<NonSideEffect<Awaited<G>>, H>,
|
|
141
|
+
AsyncOrSync<NonSideEffect<Awaited<H>>, R>
|
|
142
|
+
]>;
|
|
143
|
+
function pipeAsyncSideEffectStrict<B, C, D, E, F, G, H, I, R>(
|
|
144
|
+
ab: ZeroFn<B>,
|
|
145
|
+
bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,
|
|
146
|
+
cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,
|
|
147
|
+
de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,
|
|
148
|
+
ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,
|
|
149
|
+
fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,
|
|
150
|
+
gh: AsyncOrSync<NonSideEffect<Awaited<G>>, H>,
|
|
151
|
+
hi: AsyncOrSync<NonSideEffect<Awaited<H>>, I>,
|
|
152
|
+
ij: AsyncOrSync<NonSideEffect<Awaited<I>>, R>
|
|
153
|
+
): PipeAsyncSideEffectStrict<[
|
|
154
|
+
ZeroFn<B>,
|
|
155
|
+
AsyncOrSync<NonSideEffect<Awaited<B>>, C>,
|
|
156
|
+
AsyncOrSync<NonSideEffect<Awaited<C>>, D>,
|
|
157
|
+
AsyncOrSync<NonSideEffect<Awaited<D>>, E>,
|
|
158
|
+
AsyncOrSync<NonSideEffect<Awaited<E>>, F>,
|
|
159
|
+
AsyncOrSync<NonSideEffect<Awaited<F>>, G>,
|
|
160
|
+
AsyncOrSync<NonSideEffect<Awaited<G>>, H>,
|
|
161
|
+
AsyncOrSync<NonSideEffect<Awaited<H>>, I>,
|
|
162
|
+
AsyncOrSync<NonSideEffect<Awaited<I>>, R>
|
|
163
|
+
]>;
|
|
164
|
+
function pipeAsyncSideEffectStrict<B, C, D, E, F, G, H, I, J, R>(
|
|
165
|
+
ab: ZeroFn<B>,
|
|
166
|
+
bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,
|
|
167
|
+
cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,
|
|
168
|
+
de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,
|
|
169
|
+
ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,
|
|
170
|
+
fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,
|
|
171
|
+
gh: AsyncOrSync<NonSideEffect<Awaited<G>>, H>,
|
|
172
|
+
hi: AsyncOrSync<NonSideEffect<Awaited<H>>, I>,
|
|
173
|
+
ij: AsyncOrSync<NonSideEffect<Awaited<I>>, J>,
|
|
174
|
+
jk: AsyncOrSync<NonSideEffect<Awaited<J>>, R>
|
|
175
|
+
): PipeAsyncSideEffectStrict<[
|
|
176
|
+
ZeroFn<B>,
|
|
177
|
+
AsyncOrSync<NonSideEffect<Awaited<B>>, C>,
|
|
178
|
+
AsyncOrSync<NonSideEffect<Awaited<C>>, D>,
|
|
179
|
+
AsyncOrSync<NonSideEffect<Awaited<D>>, E>,
|
|
180
|
+
AsyncOrSync<NonSideEffect<Awaited<E>>, F>,
|
|
181
|
+
AsyncOrSync<NonSideEffect<Awaited<F>>, G>,
|
|
182
|
+
AsyncOrSync<NonSideEffect<Awaited<G>>, H>,
|
|
183
|
+
AsyncOrSync<NonSideEffect<Awaited<H>>, I>,
|
|
184
|
+
AsyncOrSync<NonSideEffect<Awaited<I>>, J>,
|
|
185
|
+
AsyncOrSync<NonSideEffect<Awaited<J>>, R>
|
|
186
|
+
]>;
|
|
187
|
+
function pipeAsyncSideEffectStrict<Fns extends [FromFn<any>, ...AnyFn[]]>(
|
|
188
|
+
...funcs: Fns
|
|
189
|
+
): PipeAsyncSideEffectStrictUnaryOptional<Fns>;
|
|
100
190
|
function pipeAsyncSideEffectStrict<A, R>(
|
|
101
191
|
ab: AsyncOrSync<A, R>
|
|
102
192
|
): PipeAsyncSideEffectStrict<[AsyncOrSync<A, R>]>;
|
|
@@ -152,6 +242,86 @@ function pipeAsyncSideEffectStrict<A, B, C, D, E, F, R>(
|
|
|
152
242
|
AsyncOrSync<NonSideEffect<Awaited<E>>, F>,
|
|
153
243
|
AsyncOrSync<NonSideEffect<Awaited<F>>, R>
|
|
154
244
|
]>;
|
|
245
|
+
function pipeAsyncSideEffectStrict<A, B, C, D, E, F, G, R>(
|
|
246
|
+
ab: AsyncOrSync<A, B>,
|
|
247
|
+
bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,
|
|
248
|
+
cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,
|
|
249
|
+
de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,
|
|
250
|
+
ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,
|
|
251
|
+
fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,
|
|
252
|
+
gh: AsyncOrSync<NonSideEffect<Awaited<G>>, R>
|
|
253
|
+
): PipeAsyncSideEffectStrict<[
|
|
254
|
+
AsyncOrSync<A, B>,
|
|
255
|
+
AsyncOrSync<NonSideEffect<Awaited<B>>, C>,
|
|
256
|
+
AsyncOrSync<NonSideEffect<Awaited<C>>, D>,
|
|
257
|
+
AsyncOrSync<NonSideEffect<Awaited<D>>, E>,
|
|
258
|
+
AsyncOrSync<NonSideEffect<Awaited<E>>, F>,
|
|
259
|
+
AsyncOrSync<NonSideEffect<Awaited<F>>, G>,
|
|
260
|
+
AsyncOrSync<NonSideEffect<Awaited<G>>, R>
|
|
261
|
+
]>;
|
|
262
|
+
function pipeAsyncSideEffectStrict<A, B, C, D, E, F, G, H, R>(
|
|
263
|
+
ab: AsyncOrSync<A, B>,
|
|
264
|
+
bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,
|
|
265
|
+
cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,
|
|
266
|
+
de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,
|
|
267
|
+
ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,
|
|
268
|
+
fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,
|
|
269
|
+
gh: AsyncOrSync<NonSideEffect<Awaited<G>>, H>,
|
|
270
|
+
hi: AsyncOrSync<NonSideEffect<Awaited<H>>, R>
|
|
271
|
+
): PipeAsyncSideEffectStrict<[
|
|
272
|
+
AsyncOrSync<A, B>,
|
|
273
|
+
AsyncOrSync<NonSideEffect<Awaited<B>>, C>,
|
|
274
|
+
AsyncOrSync<NonSideEffect<Awaited<C>>, D>,
|
|
275
|
+
AsyncOrSync<NonSideEffect<Awaited<D>>, E>,
|
|
276
|
+
AsyncOrSync<NonSideEffect<Awaited<E>>, F>,
|
|
277
|
+
AsyncOrSync<NonSideEffect<Awaited<F>>, G>,
|
|
278
|
+
AsyncOrSync<NonSideEffect<Awaited<G>>, H>,
|
|
279
|
+
AsyncOrSync<NonSideEffect<Awaited<H>>, R>
|
|
280
|
+
]>;
|
|
281
|
+
function pipeAsyncSideEffectStrict<A, B, C, D, E, F, G, H, I, R>(
|
|
282
|
+
ab: AsyncOrSync<A, B>,
|
|
283
|
+
bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,
|
|
284
|
+
cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,
|
|
285
|
+
de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,
|
|
286
|
+
ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,
|
|
287
|
+
fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,
|
|
288
|
+
gh: AsyncOrSync<NonSideEffect<Awaited<G>>, H>,
|
|
289
|
+
hi: AsyncOrSync<NonSideEffect<Awaited<H>>, I>,
|
|
290
|
+
ij: AsyncOrSync<NonSideEffect<Awaited<I>>, R>
|
|
291
|
+
): PipeAsyncSideEffectStrict<[
|
|
292
|
+
AsyncOrSync<A, B>,
|
|
293
|
+
AsyncOrSync<NonSideEffect<Awaited<B>>, C>,
|
|
294
|
+
AsyncOrSync<NonSideEffect<Awaited<C>>, D>,
|
|
295
|
+
AsyncOrSync<NonSideEffect<Awaited<D>>, E>,
|
|
296
|
+
AsyncOrSync<NonSideEffect<Awaited<E>>, F>,
|
|
297
|
+
AsyncOrSync<NonSideEffect<Awaited<F>>, G>,
|
|
298
|
+
AsyncOrSync<NonSideEffect<Awaited<G>>, H>,
|
|
299
|
+
AsyncOrSync<NonSideEffect<Awaited<H>>, I>,
|
|
300
|
+
AsyncOrSync<NonSideEffect<Awaited<I>>, R>
|
|
301
|
+
]>;
|
|
302
|
+
function pipeAsyncSideEffectStrict<A, B, C, D, E, F, G, H, I, J, R>(
|
|
303
|
+
ab: AsyncOrSync<A, B>,
|
|
304
|
+
bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,
|
|
305
|
+
cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,
|
|
306
|
+
de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,
|
|
307
|
+
ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,
|
|
308
|
+
fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,
|
|
309
|
+
gh: AsyncOrSync<NonSideEffect<Awaited<G>>, H>,
|
|
310
|
+
hi: AsyncOrSync<NonSideEffect<Awaited<H>>, I>,
|
|
311
|
+
ij: AsyncOrSync<NonSideEffect<Awaited<I>>, J>,
|
|
312
|
+
jk: AsyncOrSync<NonSideEffect<Awaited<J>>, R>
|
|
313
|
+
): PipeAsyncSideEffectStrict<[
|
|
314
|
+
AsyncOrSync<A, B>,
|
|
315
|
+
AsyncOrSync<NonSideEffect<Awaited<B>>, C>,
|
|
316
|
+
AsyncOrSync<NonSideEffect<Awaited<C>>, D>,
|
|
317
|
+
AsyncOrSync<NonSideEffect<Awaited<D>>, E>,
|
|
318
|
+
AsyncOrSync<NonSideEffect<Awaited<E>>, F>,
|
|
319
|
+
AsyncOrSync<NonSideEffect<Awaited<F>>, G>,
|
|
320
|
+
AsyncOrSync<NonSideEffect<Awaited<G>>, H>,
|
|
321
|
+
AsyncOrSync<NonSideEffect<Awaited<H>>, I>,
|
|
322
|
+
AsyncOrSync<NonSideEffect<Awaited<I>>, J>,
|
|
323
|
+
AsyncOrSync<NonSideEffect<Awaited<J>>, R>
|
|
324
|
+
]>;
|
|
155
325
|
|
|
156
326
|
function pipeAsyncSideEffectStrict<Fns extends [AnyFn, ...AnyFn[]]>(...funcs: Fns): PipeAsyncSideEffectStrict<Fns>;
|
|
157
327
|
function pipeAsyncSideEffectStrict(...funcs: Array<AsyncOrSync<any, any>>) {
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* from - 입력을 무시하고 고정 값을 반환
|
|
3
3
|
*/
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
export type FromFn<T> = {
|
|
5
|
+
<I>(_input: I): T;
|
|
6
|
+
readonly __from: true;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
function from<T>(value: T): FromFn<T> {
|
|
10
|
+
const fn = (_input: unknown) => value;
|
|
11
|
+
Object.defineProperty(fn, '__from', { value: true });
|
|
12
|
+
return fn as FromFn<T>;
|
|
6
13
|
}
|
|
7
14
|
|
|
8
15
|
export default from;
|
|
@@ -31,6 +31,48 @@ function pipe<B, C, D, E, F, R>(
|
|
|
31
31
|
ef: UnaryFn<E, F>,
|
|
32
32
|
fg: UnaryFn<F, R>
|
|
33
33
|
): () => R;
|
|
34
|
+
function pipe<B, C, D, E, F, G, R>(
|
|
35
|
+
ab: ZeroFn<B>,
|
|
36
|
+
bc: UnaryFn<B, C>,
|
|
37
|
+
cd: UnaryFn<C, D>,
|
|
38
|
+
de: UnaryFn<D, E>,
|
|
39
|
+
ef: UnaryFn<E, F>,
|
|
40
|
+
fg: UnaryFn<F, G>,
|
|
41
|
+
gh: UnaryFn<G, R>
|
|
42
|
+
): () => R;
|
|
43
|
+
function pipe<B, C, D, E, F, G, H, R>(
|
|
44
|
+
ab: ZeroFn<B>,
|
|
45
|
+
bc: UnaryFn<B, C>,
|
|
46
|
+
cd: UnaryFn<C, D>,
|
|
47
|
+
de: UnaryFn<D, E>,
|
|
48
|
+
ef: UnaryFn<E, F>,
|
|
49
|
+
fg: UnaryFn<F, G>,
|
|
50
|
+
gh: UnaryFn<G, H>,
|
|
51
|
+
hi: UnaryFn<H, R>
|
|
52
|
+
): () => R;
|
|
53
|
+
function pipe<B, C, D, E, F, G, H, I, R>(
|
|
54
|
+
ab: ZeroFn<B>,
|
|
55
|
+
bc: UnaryFn<B, C>,
|
|
56
|
+
cd: UnaryFn<C, D>,
|
|
57
|
+
de: UnaryFn<D, E>,
|
|
58
|
+
ef: UnaryFn<E, F>,
|
|
59
|
+
fg: UnaryFn<F, G>,
|
|
60
|
+
gh: UnaryFn<G, H>,
|
|
61
|
+
hi: UnaryFn<H, I>,
|
|
62
|
+
ij: UnaryFn<I, R>
|
|
63
|
+
): () => R;
|
|
64
|
+
function pipe<B, C, D, E, F, G, H, I, J, R>(
|
|
65
|
+
ab: ZeroFn<B>,
|
|
66
|
+
bc: UnaryFn<B, C>,
|
|
67
|
+
cd: UnaryFn<C, D>,
|
|
68
|
+
de: UnaryFn<D, E>,
|
|
69
|
+
ef: UnaryFn<E, F>,
|
|
70
|
+
fg: UnaryFn<F, G>,
|
|
71
|
+
gh: UnaryFn<G, H>,
|
|
72
|
+
hi: UnaryFn<H, I>,
|
|
73
|
+
ij: UnaryFn<I, J>,
|
|
74
|
+
jk: UnaryFn<J, R>
|
|
75
|
+
): () => R;
|
|
34
76
|
function pipe<A, R>(ab: UnaryFn<A, R>): (a: A) => R;
|
|
35
77
|
function pipe<A, B, R>(ab: UnaryFn<A, B>, bc: UnaryFn<B, R>): (a: A) => R;
|
|
36
78
|
function pipe<A, B, C, R>(ab: UnaryFn<A, B>, bc: UnaryFn<B, C>, cd: UnaryFn<C, R>): (a: A) => R;
|
|
@@ -55,6 +97,48 @@ function pipe<A, B, C, D, E, F, R>(
|
|
|
55
97
|
ef: UnaryFn<E, F>,
|
|
56
98
|
fg: UnaryFn<F, R>
|
|
57
99
|
): (a: A) => R;
|
|
100
|
+
function pipe<A, B, C, D, E, F, G, R>(
|
|
101
|
+
ab: UnaryFn<A, B>,
|
|
102
|
+
bc: UnaryFn<B, C>,
|
|
103
|
+
cd: UnaryFn<C, D>,
|
|
104
|
+
de: UnaryFn<D, E>,
|
|
105
|
+
ef: UnaryFn<E, F>,
|
|
106
|
+
fg: UnaryFn<F, G>,
|
|
107
|
+
gh: UnaryFn<G, R>
|
|
108
|
+
): (a: A) => R;
|
|
109
|
+
function pipe<A, B, C, D, E, F, G, H, R>(
|
|
110
|
+
ab: UnaryFn<A, B>,
|
|
111
|
+
bc: UnaryFn<B, C>,
|
|
112
|
+
cd: UnaryFn<C, D>,
|
|
113
|
+
de: UnaryFn<D, E>,
|
|
114
|
+
ef: UnaryFn<E, F>,
|
|
115
|
+
fg: UnaryFn<F, G>,
|
|
116
|
+
gh: UnaryFn<G, H>,
|
|
117
|
+
hi: UnaryFn<H, R>
|
|
118
|
+
): (a: A) => R;
|
|
119
|
+
function pipe<A, B, C, D, E, F, G, H, I, 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, H>,
|
|
127
|
+
hi: UnaryFn<H, I>,
|
|
128
|
+
ij: UnaryFn<I, R>
|
|
129
|
+
): (a: A) => R;
|
|
130
|
+
function pipe<A, B, C, D, E, F, G, H, I, J, R>(
|
|
131
|
+
ab: UnaryFn<A, B>,
|
|
132
|
+
bc: UnaryFn<B, C>,
|
|
133
|
+
cd: UnaryFn<C, D>,
|
|
134
|
+
de: UnaryFn<D, E>,
|
|
135
|
+
ef: UnaryFn<E, F>,
|
|
136
|
+
fg: UnaryFn<F, G>,
|
|
137
|
+
gh: UnaryFn<G, H>,
|
|
138
|
+
hi: UnaryFn<H, I>,
|
|
139
|
+
ij: UnaryFn<I, J>,
|
|
140
|
+
jk: UnaryFn<J, R>
|
|
141
|
+
): (a: A) => R;
|
|
58
142
|
|
|
59
143
|
function pipe<Fns extends [UnaryFn<any, any>, ...UnaryFn<any, any>[]]>(...funcs: Fns): Pipe<Fns>;
|
|
60
144
|
function pipe(...funcs: Array<UnaryFn<any, any>>): (input: any) => any;
|