@atproto-labs/pipe 0.1.0 → 0.2.0-next.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/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @atproto-labs/pipe
2
2
 
3
+ ## 0.2.0-next.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#4929](https://github.com/bluesky-social/atproto/pull/4929) [`bb7491c`](https://github.com/bluesky-social/atproto/commit/bb7491c29e06181e1d2f8cf6eb454f9bb8ab961b) Thanks [@devinivy](https://github.com/devinivy)! - **BREAKING:** Drop support for Node.js 18 and 20. Node.js 22 is now the minimum supported version. Docker images now use Node.js 24.
8
+
9
+ - [#4943](https://github.com/bluesky-social/atproto/pull/4943) [`07ae5d4`](https://github.com/bluesky-social/atproto/commit/07ae5d4452df51e045e0239da7a04cf0bc154028) Thanks [@devinivy](https://github.com/devinivy)! - **BREAKING:** Convert to pure ESM. All packages now ship `"type": "module"` with ES module output and Node16 module resolution.
10
+
11
+ Node.js 22's `require()` compatibility layer can still load these packages in CommonJS code.
12
+
13
+ - [#4930](https://github.com/bluesky-social/atproto/pull/4930) [`042df15`](https://github.com/bluesky-social/atproto/commit/042df15087c0e62cd1e715fcbf58852fab875af9) Thanks [@devinivy](https://github.com/devinivy)! - Build with TypeScript 6.0. Emitted `.d.ts` files now use TypeScript 6's stricter `Uint8Array<ArrayBuffer>` typing in places where Web/Node APIs require buffer-backed (not shared-memory) byte arrays. Consumers compiling against these types on older TypeScript should see no runtime impact, but may need to widen or cast in spots that previously relied on `Uint8Array` defaulting to `<ArrayBufferLike>`.
14
+
15
+ Internal: tsconfig `moduleResolution: "node"` is silenced via `ignoreDeprecations: "6.0"` for now; the proper migration to `node16`/`bundler` resolution is deferred.
16
+
17
+ ## 0.1.1
18
+
19
+ ### Patch Changes
20
+
21
+ - [#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
22
+
3
23
  ## 0.1.0
4
24
 
5
25
  ### Minor Changes
package/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  Dual MIT/Apache-2.0 License
2
2
 
3
- Copyright (c) 2022-2024 Bluesky PBC, and Contributors
3
+ Copyright (c) 2022-2026 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
@@ -1,3 +1,3 @@
1
1
  export { pipe, pipeTwo } from './pipe.js';
2
- export { type Transformer } from './transformer.js';
2
+ export type * from './type.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -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,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAA"}
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/index.js CHANGED
@@ -1,7 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.pipeTwo = exports.pipe = void 0;
4
- var pipe_js_1 = require("./pipe.js");
5
- Object.defineProperty(exports, "pipe", { enumerable: true, get: function () { return pipe_js_1.pipe; } });
6
- Object.defineProperty(exports, "pipeTwo", { enumerable: true, get: function () { return pipe_js_1.pipeTwo; } });
1
+ export { pipe, pipeTwo } from './pipe.js';
7
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAAyC;AAAhC,+FAAA,IAAI,OAAA;AAAE,kGAAA,OAAO,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA","sourcesContent":["export { pipe, pipeTwo } from './pipe.js'\nexport type * from './type.js'\n"]}
package/dist/pipe.d.ts CHANGED
@@ -1,13 +1,11 @@
1
- import { Transformer } from './transformer.js';
2
- type PipelineInput<T extends readonly Transformer<any>[]> = T extends [
3
- Transformer<infer I, any>,
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
- ] ? I : T extends Transformer<infer I, any>[] ? I : never;
6
- type PipelineOutput<T extends readonly Transformer<any>[]> = T extends [
7
- ...any[],
8
- Transformer<any, infer O>
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(): never;
28
- export declare function pipe<T extends readonly Transformer<any>[]>(...pipeline: Pipeline<T> extends T ? T : Pipeline<T>): (input: PipelineInput<T>) => Promise<PipelineOutput<T>>;
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
@@ -1 +1 @@
1
- {"version":3,"file":"pipe.d.ts","sourceRoot":"","sources":["../src/pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,KAAK,aAAa,CAAC,CAAC,SAAS,SAAS,WAAW,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS;IACpE,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC;IACzB,GAAG,GAAG,EAAE;CACT,GACG,CAAC,GACD,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,GACnC,CAAC,GACD,KAAK,CAAA;AAEX,KAAK,cAAc,CAAC,CAAC,SAAS,SAAS,WAAW,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS;IACrE,GAAG,GAAG,EAAE;IACR,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;CAC1B,GACG,CAAC,GACD,CAAC,SAAS,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,GACnC,CAAC,GACD,KAAK,CAAA;AAEX,KAAK,QAAQ,CACX,CAAC,SAAS,SAAS,WAAW,CAAC,GAAG,CAAC,EAAE,EACrC,GAAG,SAAS,SAAS,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAC1C,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GACzC,CAAC,GAAG,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAC3B,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,IAAI,CAAC,GAClD,IAAI,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,GAChD,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAC3C,GAAG,GACL,GAAG,CAAA;AAET;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,IAAI,IAAI,KAAK,CAAA;AAC7B,wBAAgB,IAAI,CAAC,CAAC,SAAS,SAAS,WAAW,CAAC,GAAG,CAAC,EAAE,EACxD,GAAG,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GACnD,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;AAO1D,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,EACvC,KAAK,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EACxB,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GACxB,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAE1B"}
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,23 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.pipeTwo = exports.pipe = void 0;
4
- function pipe(...pipeline) {
1
+ /**
2
+ * This utility function allows to properly type a pipeline of transformers.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * // Will be typed as "(input: string) => Promise<number>"
7
+ * const parse = pipe(
8
+ * async (input: string) => JSON.parse(input),
9
+ * async (input: unknown) => {
10
+ * if (typeof input === 'number') return input
11
+ * throw new TypeError('Invalid input')
12
+ * },
13
+ * (input: number) => input * 2,
14
+ * )
15
+ * ```
16
+ */
17
+ export function pipe(...pipeline) {
5
18
  return pipeline.reduce(pipeTwo);
6
19
  }
7
- exports.pipe = pipe;
8
- function pipeTwo(first, second) {
9
- return async (input) => second(await first(input));
20
+ export function pipeTwo(first, second) {
21
+ return async (...args) => second(await first(...args));
10
22
  }
11
- exports.pipeTwo = pipeTwo;
12
23
  //# 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":";;;AAmDA,SAAgB,IAAI,CAClB,GAAG,QAAiD;IAEpD,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AACjC,CAAC;AAJD,oBAIC;AAED,SAAgB,OAAO,CACrB,KAAwB,EACxB,MAAyB;IAEzB,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;AACpD,CAAC;AALD,0BAKC"}
1
+ {"version":3,"file":"pipe.js","sourceRoot":"","sources":["../src/pipe.ts"],"names":[],"mappings":"AA+BA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,IAAI,CAClB,GAAG,QAAiD;IAEpD,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAEC,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,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","sourcesContent":["import { Fn, Transformer } from './type.js'\n\ntype PipelineArgs<T> = T extends [\n Fn<infer A extends readonly unknown[], any>,\n ...any[],\n]\n ? A\n : never\n\ntype PipelineOutput<T> = T extends [...any[], Fn<any, infer O>] ? O : never\n\ntype PipelineRecursive<\n F extends readonly Transformer<any>[],\n Acc extends any[],\n> = F extends readonly [Transformer<infer I, infer O>]\n ? [...Acc, Transformer<I, O>]\n : F extends readonly [Transformer<infer A, any>, ...infer Tail]\n ? Tail extends readonly [Transformer<infer B, any>, ...any[]]\n ? PipelineRecursive<Tail, [...Acc, Transformer<A, B>]>\n : never\n : never\n\ntype Pipeline<F extends readonly [Fn<any, any>, ...Transformer<any>[]]> =\n F extends readonly [Fn<infer A, infer O>]\n ? [Fn<A, O>]\n : F extends readonly [Fn<infer A, any>, ...infer Tail]\n ? Tail extends readonly [Transformer<infer B, any>, ...any[]]\n ? PipelineRecursive<Tail, [Fn<A, B>]>\n : never\n : never\n\n/**\n * This utility function allows to properly type a pipeline of transformers.\n *\n * @example\n * ```ts\n * // Will be typed as \"(input: string) => Promise<number>\"\n * const parse = pipe(\n * async (input: string) => JSON.parse(input),\n * async (input: unknown) => {\n * if (typeof input === 'number') return input\n * throw new TypeError('Invalid input')\n * },\n * (input: number) => input * 2,\n * )\n * ```\n */\nexport function pipe<T extends readonly [Fn<any, any>, ...Transformer<any>[]]>(\n ...pipeline: Pipeline<T> extends T ? T : Pipeline<T>\n) {\n return pipeline.reduce(pipeTwo) as (\n ...args: PipelineArgs<T>\n ) => Promise<PipelineOutput<T>>\n}\n\nexport function pipeTwo<A extends readonly unknown[], O, X = unknown>(\n first: Fn<A, X>,\n second: Transformer<X, O>,\n): (...args: A) => Promise<O> {\n return async (...args) => second(await first(...args))\n}\n"]}
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 ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.js","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Generic, potentially async, function. Parametrized for convenience reasons.\n */\nexport type Fn<A extends readonly unknown[], O> = (\n ...args: A\n) => O | PromiseLike<O>\n\n/**\n * Single input, single output, potentially async transformer function.\n */\nexport type Transformer<I, O = I> = (...args: [I]) => O | PromiseLike<O>\n"]}
package/package.json CHANGED
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "name": "@atproto-labs/pipe",
3
- "version": "0.1.0",
3
+ "version": "0.2.0-next.0",
4
+ "engines": {
5
+ "node": ">=22"
6
+ },
4
7
  "license": "MIT",
5
8
  "description": "Library for combining multiple functions into a single function.",
6
9
  "keywords": [
@@ -13,18 +16,15 @@
13
16
  "url": "https://github.com/bluesky-social/atproto",
14
17
  "directory": "packages/internal/pipe"
15
18
  },
16
- "type": "commonjs",
17
- "main": "dist/index.js",
18
- "types": "dist/index.d.ts",
19
+ "type": "module",
19
20
  "exports": {
20
21
  ".": {
21
22
  "types": "./dist/index.d.ts",
22
23
  "default": "./dist/index.js"
23
24
  }
24
25
  },
25
- "dependencies": {},
26
26
  "devDependencies": {
27
- "typescript": "^5.3.3"
27
+ "typescript": "^6.0.3"
28
28
  },
29
29
  "scripts": {
30
30
  "build": "tsc --build tsconfig.json"
package/src/index.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export { pipe, pipeTwo } from './pipe.js'
2
- export { type Transformer } from './transformer.js'
2
+ export type * from './type.js'
package/src/pipe.ts CHANGED
@@ -1,33 +1,33 @@
1
- import { Transformer } from './transformer.js'
1
+ import { Fn, Transformer } from './type.js'
2
2
 
3
- type PipelineInput<T extends readonly Transformer<any>[]> = T extends [
4
- Transformer<infer I, any>,
3
+ type PipelineArgs<T> = T extends [
4
+ Fn<infer A extends readonly unknown[], any>,
5
5
  ...any[],
6
6
  ]
7
- ? I
8
- : T extends Transformer<infer I, any>[]
9
- ? I
10
- : never
7
+ ? A
8
+ : never
11
9
 
12
- type PipelineOutput<T extends readonly Transformer<any>[]> = 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 Pipeline<
12
+ type PipelineRecursive<
22
13
  F extends readonly Transformer<any>[],
23
- Acc extends readonly Transformer<any>[] = [],
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
- ? Pipeline<Tail, [...Acc, Transformer<A, B>]>
29
- : Acc
30
- : Acc
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(): never
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
- ): (input: PipelineInput<T>) => Promise<PipelineOutput<T>> {
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<I, O, X = unknown>(
59
- first: Transformer<I, X>,
56
+ export function pipeTwo<A extends readonly unknown[], O, X = unknown>(
57
+ first: Fn<A, X>,
60
58
  second: Transformer<X, O>,
61
- ): (input: I) => Promise<O> {
62
- return async (input) => second(await first(input))
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":"6.0.3"}
@@ -1,2 +0,0 @@
1
- export type Transformer<I, O = I> = (input: I) => O | PromiseLike<O>;
2
- //# sourceMappingURL=transformer.d.ts.map
@@ -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"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=transformer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transformer.js","sourceRoot":"","sources":["../src/transformer.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- export type Transformer<I, O = I> = (input: I) => O | PromiseLike<O>