@atproto-labs/pipe 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/LICENSE.txt +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/pipe.d.ts +9 -12
- package/dist/pipe.d.ts.map +1 -1
- package/dist/pipe.js +19 -4
- package/dist/pipe.js.map +1 -1
- package/dist/type.d.ts +9 -0
- package/dist/type.d.ts.map +1 -0
- package/dist/{transformer.js → type.js} +1 -1
- package/dist/type.js.map +1 -0
- package/package.json +2 -3
- package/src/index.ts +1 -1
- package/src/pipe.ts +32 -34
- package/src/type.ts +11 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/dist/transformer.d.ts +0 -2
- package/dist/transformer.d.ts.map +0 -1
- package/dist/transformer.js.map +0 -1
- package/src/transformer.ts +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @atproto-labs/pipe
|
|
2
2
|
|
|
3
|
+
## 0.1.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#3821](https://github.com/bluesky-social/atproto/pull/3821) [`5050b6550`](https://github.com/bluesky-social/atproto/commit/5050b6550e07e71b0a524eda0b71b837583294d4) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Allow first pipeline function to have more than one argument
|
|
8
|
+
|
|
3
9
|
## 0.1.0
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
package/LICENSE.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Dual MIT/Apache-2.0 License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2022-
|
|
3
|
+
Copyright (c) 2022-2025 Bluesky Social PBC, and Contributors
|
|
4
4
|
|
|
5
5
|
Except as otherwise noted in individual files, this software is licensed under the MIT license (<http://opensource.org/licenses/MIT>), or the Apache License, Version 2.0 (<http://www.apache.org/licenses/LICENSE-2.0>).
|
|
6
6
|
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,mBAAmB,WAAW,CAAA"}
|
package/dist/pipe.d.ts
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import { Transformer } from './
|
|
2
|
-
type
|
|
3
|
-
|
|
1
|
+
import { Fn, Transformer } from './type.js';
|
|
2
|
+
type PipelineArgs<T> = T extends [
|
|
3
|
+
Fn<infer A extends readonly unknown[], any>,
|
|
4
4
|
...any[]
|
|
5
|
-
] ?
|
|
6
|
-
type PipelineOutput<T extends
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
] ? O : T extends Transformer<any, infer O>[] ? O : never;
|
|
10
|
-
type Pipeline<F extends readonly Transformer<any>[], Acc extends readonly Transformer<any>[] = []> = F extends [Transformer<infer I, infer O>] ? [...Acc, Transformer<I, O>] : F extends [Transformer<infer A, any>, ...infer Tail] ? Tail extends [Transformer<infer B, any>, ...any[]] ? Pipeline<Tail, [...Acc, Transformer<A, B>]> : Acc : Acc;
|
|
5
|
+
] ? A : never;
|
|
6
|
+
type PipelineOutput<T> = T extends [...any[], Fn<any, infer O>] ? O : never;
|
|
7
|
+
type PipelineRecursive<F extends readonly Transformer<any>[], Acc extends any[]> = F extends readonly [Transformer<infer I, infer O>] ? [...Acc, Transformer<I, O>] : F extends readonly [Transformer<infer A, any>, ...infer Tail] ? Tail extends readonly [Transformer<infer B, any>, ...any[]] ? PipelineRecursive<Tail, [...Acc, Transformer<A, B>]> : never : never;
|
|
8
|
+
type Pipeline<F extends readonly [Fn<any, any>, ...Transformer<any>[]]> = F extends readonly [Fn<infer A, infer O>] ? [Fn<A, O>] : F extends readonly [Fn<infer A, any>, ...infer Tail] ? Tail extends readonly [Transformer<infer B, any>, ...any[]] ? PipelineRecursive<Tail, [Fn<A, B>]> : never : never;
|
|
11
9
|
/**
|
|
12
10
|
* This utility function allows to properly type a pipeline of transformers.
|
|
13
11
|
*
|
|
@@ -24,8 +22,7 @@ type Pipeline<F extends readonly Transformer<any>[], Acc extends readonly Transf
|
|
|
24
22
|
* )
|
|
25
23
|
* ```
|
|
26
24
|
*/
|
|
27
|
-
export declare function pipe():
|
|
28
|
-
export declare function
|
|
29
|
-
export declare function pipeTwo<I, O, X = unknown>(first: Transformer<I, X>, second: Transformer<X, O>): (input: I) => Promise<O>;
|
|
25
|
+
export declare function pipe<T extends readonly [Fn<any, any>, ...Transformer<any>[]]>(...pipeline: Pipeline<T> extends T ? T : Pipeline<T>): (...args: PipelineArgs<T>) => Promise<PipelineOutput<T>>;
|
|
26
|
+
export declare function pipeTwo<A extends readonly unknown[], O, X = unknown>(first: Fn<A, X>, second: Transformer<X, O>): (...args: A) => Promise<O>;
|
|
30
27
|
export {};
|
|
31
28
|
//# sourceMappingURL=pipe.d.ts.map
|
package/dist/pipe.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipe.d.ts","sourceRoot":"","sources":["../src/pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"pipe.d.ts","sourceRoot":"","sources":["../src/pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE3C,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS;IAC/B,EAAE,CAAC,MAAM,CAAC,SAAS,SAAS,OAAO,EAAE,EAAE,GAAG,CAAC;IAC3C,GAAG,GAAG,EAAE;CACT,GACG,CAAC,GACD,KAAK,CAAA;AAET,KAAK,cAAc,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AAE3E,KAAK,iBAAiB,CACpB,CAAC,SAAS,SAAS,WAAW,CAAC,GAAG,CAAC,EAAE,EACrC,GAAG,SAAS,GAAG,EAAE,IACf,CAAC,SAAS,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAClD,CAAC,GAAG,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAC3B,CAAC,SAAS,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,IAAI,CAAC,GAC3D,IAAI,SAAS,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,GACzD,iBAAiB,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GACpD,KAAK,GACP,KAAK,CAAA;AAEX,KAAK,QAAQ,CAAC,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IACpE,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GACrC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GACV,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,IAAI,CAAC,GAClD,IAAI,SAAS,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,GACzD,iBAAiB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GACnC,KAAK,GACP,KAAK,CAAA;AAEb;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAC3E,GAAG,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAEjB,CACjC,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,KACrB,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAChC;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,EAClE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACf,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GACxB,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAE5B"}
|
package/dist/pipe.js
CHANGED
|
@@ -1,12 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.pipe = pipe;
|
|
4
|
+
exports.pipeTwo = pipeTwo;
|
|
5
|
+
/**
|
|
6
|
+
* This utility function allows to properly type a pipeline of transformers.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* // Will be typed as "(input: string) => Promise<number>"
|
|
11
|
+
* const parse = pipe(
|
|
12
|
+
* async (input: string) => JSON.parse(input),
|
|
13
|
+
* async (input: unknown) => {
|
|
14
|
+
* if (typeof input === 'number') return input
|
|
15
|
+
* throw new TypeError('Invalid input')
|
|
16
|
+
* },
|
|
17
|
+
* (input: number) => input * 2,
|
|
18
|
+
* )
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
4
21
|
function pipe(...pipeline) {
|
|
5
22
|
return pipeline.reduce(pipeTwo);
|
|
6
23
|
}
|
|
7
|
-
exports.pipe = pipe;
|
|
8
24
|
function pipeTwo(first, second) {
|
|
9
|
-
return async (
|
|
25
|
+
return async (...args) => second(await first(...args));
|
|
10
26
|
}
|
|
11
|
-
exports.pipeTwo = pipeTwo;
|
|
12
27
|
//# sourceMappingURL=pipe.js.map
|
package/dist/pipe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipe.js","sourceRoot":"","sources":["../src/pipe.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pipe.js","sourceRoot":"","sources":["../src/pipe.ts"],"names":[],"mappings":";;AA+CA,oBAMC;AAED,0BAKC;AA7BD;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,IAAI,CAClB,GAAG,QAAiD;IAEpD,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAEC,CAAA;AACjC,CAAC;AAED,SAAgB,OAAO,CACrB,KAAe,EACf,MAAyB;IAEzB,OAAO,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;AACxD,CAAC"}
|
package/dist/type.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic, potentially async, function. Parametrized for convenience reasons.
|
|
3
|
+
*/
|
|
4
|
+
export type Fn<A extends readonly unknown[], O> = (...args: A) => O | PromiseLike<O>;
|
|
5
|
+
/**
|
|
6
|
+
* Single input, single output, potentially async transformer function.
|
|
7
|
+
*/
|
|
8
|
+
export type Transformer<I, O = I> = (...args: [I]) => O | PromiseLike<O>;
|
|
9
|
+
//# sourceMappingURL=type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,EAAE,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,EAAE,CAAC,IAAI,CAChD,GAAG,IAAI,EAAE,CAAC,KACP,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;AAEvB;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA"}
|
package/dist/type.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atproto-labs/pipe",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Library for combining multiple functions into a single function.",
|
|
6
6
|
"keywords": [
|
|
@@ -22,9 +22,8 @@
|
|
|
22
22
|
"default": "./dist/index.js"
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
|
-
"dependencies": {},
|
|
26
25
|
"devDependencies": {
|
|
27
|
-
"typescript": "^5.
|
|
26
|
+
"typescript": "^5.6.3"
|
|
28
27
|
},
|
|
29
28
|
"scripts": {
|
|
30
29
|
"build": "tsc --build tsconfig.json"
|
package/src/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { pipe, pipeTwo } from './pipe.js'
|
|
2
|
-
export
|
|
2
|
+
export type * from './type.js'
|
package/src/pipe.ts
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
import { Transformer } from './
|
|
1
|
+
import { Fn, Transformer } from './type.js'
|
|
2
2
|
|
|
3
|
-
type
|
|
4
|
-
|
|
3
|
+
type PipelineArgs<T> = T extends [
|
|
4
|
+
Fn<infer A extends readonly unknown[], any>,
|
|
5
5
|
...any[],
|
|
6
6
|
]
|
|
7
|
-
?
|
|
8
|
-
:
|
|
9
|
-
? I
|
|
10
|
-
: never
|
|
7
|
+
? A
|
|
8
|
+
: never
|
|
11
9
|
|
|
12
|
-
type PipelineOutput<T extends
|
|
13
|
-
...any[],
|
|
14
|
-
Transformer<any, infer O>,
|
|
15
|
-
]
|
|
16
|
-
? O
|
|
17
|
-
: T extends Transformer<any, infer O>[]
|
|
18
|
-
? O
|
|
19
|
-
: never
|
|
10
|
+
type PipelineOutput<T> = T extends [...any[], Fn<any, infer O>] ? O : never
|
|
20
11
|
|
|
21
|
-
type
|
|
12
|
+
type PipelineRecursive<
|
|
22
13
|
F extends readonly Transformer<any>[],
|
|
23
|
-
Acc extends
|
|
24
|
-
> = F extends [Transformer<infer I, infer O>]
|
|
14
|
+
Acc extends any[],
|
|
15
|
+
> = F extends readonly [Transformer<infer I, infer O>]
|
|
25
16
|
? [...Acc, Transformer<I, O>]
|
|
26
|
-
: F extends [Transformer<infer A, any>, ...infer Tail]
|
|
27
|
-
? Tail extends [Transformer<infer B, any>, ...any[]]
|
|
28
|
-
?
|
|
29
|
-
:
|
|
30
|
-
:
|
|
17
|
+
: F extends readonly [Transformer<infer A, any>, ...infer Tail]
|
|
18
|
+
? Tail extends readonly [Transformer<infer B, any>, ...any[]]
|
|
19
|
+
? PipelineRecursive<Tail, [...Acc, Transformer<A, B>]>
|
|
20
|
+
: never
|
|
21
|
+
: never
|
|
22
|
+
|
|
23
|
+
type Pipeline<F extends readonly [Fn<any, any>, ...Transformer<any>[]]> =
|
|
24
|
+
F extends readonly [Fn<infer A, infer O>]
|
|
25
|
+
? [Fn<A, O>]
|
|
26
|
+
: F extends readonly [Fn<infer A, any>, ...infer Tail]
|
|
27
|
+
? Tail extends readonly [Transformer<infer B, any>, ...any[]]
|
|
28
|
+
? PipelineRecursive<Tail, [Fn<A, B>]>
|
|
29
|
+
: never
|
|
30
|
+
: never
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
33
|
* This utility function allows to properly type a pipeline of transformers.
|
|
@@ -45,19 +45,17 @@ type Pipeline<
|
|
|
45
45
|
* )
|
|
46
46
|
* ```
|
|
47
47
|
*/
|
|
48
|
-
export function pipe(
|
|
49
|
-
export function pipe<T extends readonly Transformer<any>[]>(
|
|
50
|
-
...pipeline: Pipeline<T> extends T ? T : Pipeline<T>
|
|
51
|
-
): (input: PipelineInput<T>) => Promise<PipelineOutput<T>>
|
|
52
|
-
export function pipe<T extends readonly Transformer<any>[]>(
|
|
48
|
+
export function pipe<T extends readonly [Fn<any, any>, ...Transformer<any>[]]>(
|
|
53
49
|
...pipeline: Pipeline<T> extends T ? T : Pipeline<T>
|
|
54
|
-
)
|
|
55
|
-
return pipeline.reduce(pipeTwo)
|
|
50
|
+
) {
|
|
51
|
+
return pipeline.reduce(pipeTwo) as (
|
|
52
|
+
...args: PipelineArgs<T>
|
|
53
|
+
) => Promise<PipelineOutput<T>>
|
|
56
54
|
}
|
|
57
55
|
|
|
58
|
-
export function pipeTwo<
|
|
59
|
-
first:
|
|
56
|
+
export function pipeTwo<A extends readonly unknown[], O, X = unknown>(
|
|
57
|
+
first: Fn<A, X>,
|
|
60
58
|
second: Transformer<X, O>,
|
|
61
|
-
): (
|
|
62
|
-
return async (
|
|
59
|
+
): (...args: A) => Promise<O> {
|
|
60
|
+
return async (...args) => second(await first(...args))
|
|
63
61
|
}
|
package/src/type.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic, potentially async, function. Parametrized for convenience reasons.
|
|
3
|
+
*/
|
|
4
|
+
export type Fn<A extends readonly unknown[], O> = (
|
|
5
|
+
...args: A
|
|
6
|
+
) => O | PromiseLike<O>
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Single input, single output, potentially async transformer function.
|
|
10
|
+
*/
|
|
11
|
+
export type Transformer<I, O = I> = (...args: [I]) => O | PromiseLike<O>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"root":["./src/index.ts","./src/pipe.ts","./src/type.ts"],"version":"5.8.2"}
|
package/dist/transformer.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../src/transformer.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA"}
|
package/dist/transformer.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transformer.js","sourceRoot":"","sources":["../src/transformer.ts"],"names":[],"mappings":""}
|
package/src/transformer.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export type Transformer<I, O = I> = (input: I) => O | PromiseLike<O>
|