@nlozgachev/pipekit 0.5.2 → 0.5.3

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.
@@ -0,0 +1,3 @@
1
+ export function converge(f, transformers) {
2
+ return (a) => f(...transformers.map((t) => t(a)));
3
+ }
@@ -1,10 +1,13 @@
1
1
  export * from "./compose.js";
2
+ export * from "./converge.js";
2
3
  export * from "./curry.js";
3
4
  export * from "./flip.js";
4
5
  export * from "./fn.js";
5
6
  export * from "./flow.js";
7
+ export * from "./juxt.js";
6
8
  export * from "./memoize.js";
7
9
  export * from "./not.js";
10
+ export * from "./on.js";
8
11
  export * from "./pipe.js";
9
12
  export * from "./tap.js";
10
13
  export * from "./uncurry.js";
@@ -0,0 +1,3 @@
1
+ export function juxt(fns) {
2
+ return (a) => fns.map((f) => f(a));
3
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Applies a projection to both arguments of a binary function before calling it.
3
+ * Most useful for building comparators and equality checks over projected values.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * const byLength = on((a: number, b: number) => a - b, (s: string) => s.length);
8
+ *
9
+ * ["banana", "fig", "apple"].sort(byLength); // ["fig", "apple", "banana"]
10
+ * ```
11
+ */
12
+ export const on = (f, g) => (a, b) => f(g(a), g(b));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nlozgachev/pipekit",
3
- "version": "0.5.2",
3
+ "version": "0.5.3",
4
4
  "description": "Simple functional programming toolkit for TypeScript",
5
5
  "keywords": [
6
6
  "functional",
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.converge = converge;
4
+ function converge(f, transformers) {
5
+ return (a) => f(...transformers.map((t) => t(a)));
6
+ }
@@ -15,12 +15,15 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./compose.js"), exports);
18
+ __exportStar(require("./converge.js"), exports);
18
19
  __exportStar(require("./curry.js"), exports);
19
20
  __exportStar(require("./flip.js"), exports);
20
21
  __exportStar(require("./fn.js"), exports);
21
22
  __exportStar(require("./flow.js"), exports);
23
+ __exportStar(require("./juxt.js"), exports);
22
24
  __exportStar(require("./memoize.js"), exports);
23
25
  __exportStar(require("./not.js"), exports);
26
+ __exportStar(require("./on.js"), exports);
24
27
  __exportStar(require("./pipe.js"), exports);
25
28
  __exportStar(require("./tap.js"), exports);
26
29
  __exportStar(require("./uncurry.js"), exports);
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.juxt = juxt;
4
+ function juxt(fns) {
5
+ return (a) => fns.map((f) => f(a));
6
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.on = void 0;
4
+ /**
5
+ * Applies a projection to both arguments of a binary function before calling it.
6
+ * Most useful for building comparators and equality checks over projected values.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * const byLength = on((a: number, b: number) => a - b, (s: string) => s.length);
11
+ *
12
+ * ["banana", "fig", "apple"].sort(byLength); // ["fig", "apple", "banana"]
13
+ * ```
14
+ */
15
+ const on = (f, g) => (a, b) => f(g(a), g(b));
16
+ exports.on = on;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Applies an input to several transformer functions independently, then passes all results to a
3
+ * combining function.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * const toNameRecord = converge(
8
+ * (trimmed: string, initials: string) => ({ trimmed, initials }),
9
+ * [
10
+ * (name: string) => name.trim(),
11
+ * (name: string) => name.split(" ").map((w) => w[0]).join(""),
12
+ * ],
13
+ * );
14
+ *
15
+ * toNameRecord(" Alice Bob "); // { trimmed: "Alice Bob", initials: "AB" }
16
+ * ```
17
+ */
18
+ export declare function converge<A, B, C, R>(f: (b: B, c: C) => R, transformers: [(a: A) => B, (a: A) => C]): (a: A) => R;
19
+ export declare function converge<A, B, C, D, R>(f: (b: B, c: C, d: D) => R, transformers: [(a: A) => B, (a: A) => C, (a: A) => D]): (a: A) => R;
20
+ export declare function converge<A, B, C, D, E, R>(f: (b: B, c: C, d: D, e: E) => R, transformers: [(a: A) => B, (a: A) => C, (a: A) => D, (a: A) => E]): (a: A) => R;
21
+ //# sourceMappingURL=converge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converge.d.ts","sourceRoot":"","sources":["../../../src/src/Composition/converge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACjC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EACpB,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GACvC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACf,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACpC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAC1B,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GACpD,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACf,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACvC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAChC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GACjE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC"}
@@ -1,10 +1,13 @@
1
1
  export * from "./compose.js";
2
+ export * from "./converge.js";
2
3
  export * from "./curry.js";
3
4
  export * from "./flip.js";
4
5
  export * from "./fn.js";
5
6
  export * from "./flow.js";
7
+ export * from "./juxt.js";
6
8
  export * from "./memoize.js";
7
9
  export * from "./not.js";
10
+ export * from "./on.js";
8
11
  export * from "./pipe.js";
9
12
  export * from "./tap.js";
10
13
  export * from "./uncurry.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/Composition/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/Composition/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Applies an input to an array of functions and collects the results into a tuple.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * const nameParts = juxt([
7
+ * (name: string) => name.split(" ")[0],
8
+ * (name: string) => name.split(" ").slice(1).join(" "),
9
+ * ]);
10
+ *
11
+ * nameParts("Alice Smith"); // ["Alice", "Smith"]
12
+ * ```
13
+ */
14
+ export declare function juxt<A, B, C>(fns: [(a: A) => B, (a: A) => C]): (a: A) => [B, C];
15
+ export declare function juxt<A, B, C, D>(fns: [(a: A) => B, (a: A) => C, (a: A) => D]): (a: A) => [B, C, D];
16
+ export declare function juxt<A, B, C, D, E>(fns: [(a: A) => B, (a: A) => C, (a: A) => D, (a: A) => E]): (a: A) => [B, C, D, E];
17
+ export declare function juxt<A, B>(fns: ReadonlyArray<(a: A) => B>): (a: A) => B[];
18
+ //# sourceMappingURL=juxt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"juxt.d.ts","sourceRoot":"","sources":["../../../src/src/Composition/juxt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjF,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7B,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAC3C,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACvB,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAChC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GACxD,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Applies a projection to both arguments of a binary function before calling it.
3
+ * Most useful for building comparators and equality checks over projected values.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * const byLength = on((a: number, b: number) => a - b, (s: string) => s.length);
8
+ *
9
+ * ["banana", "fig", "apple"].sort(byLength); // ["fig", "apple", "banana"]
10
+ * ```
11
+ */
12
+ export declare const on: <A, B, C>(f: (b1: B, b2: B) => C, g: (a: A) => B) => (a: A, b: A) => C;
13
+ //# sourceMappingURL=on.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on.d.ts","sourceRoot":"","sources":["../../../src/src/Composition/on.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,EAAE,GACZ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAC/C,GAAG,CAAC,EAAE,GAAG,CAAC,KAAG,CACC,CAAC"}