UNPKG

typedash

Version:

modern, type-safe collection of utility functions

1 lines 11.9 kB
{"version":3,"sources":["../../src/functions/pipe/pipe.ts"],"names":[],"mappings":";AAugBO,SAAS,KACd,OACG,YACc;AAEjB,SAAO,IAAI,UAAe,WAAW,OAAO,CAAC,KAAK,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC;AAC9E","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable unicorn/prevent-abbreviations */\nimport { Func } from './types/Func';\nimport { UnaryFunction } from './types/UnaryFunction';\n\n/**\n * Type-enforcing left-to-right function composition function.\n * The first parameter can be a function of any arity, but the remaining parameters must be unary functions.\n * The return type of one function must be compatible with the argument of next function in the argument list\n * @param f0 The first function in the composition\n * @note The types here are only inferred for the first 20 functions.\n * If you need more, you have to type the functions explicitly.\n * please open an issue, but this should be enough to cover most use cases.\n * @returns A function with the arguments of the *first* function in the argument list and a return type of the *last* function in the argument list\n */\nexport function pipe<TIn extends unknown[], TOut>(\n f0: Func<TIn, TOut>\n): Func<TIn, TOut>;\nexport function pipe<TIn extends unknown[], T1, TOut>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, TOut>\n): Func<TIn, TOut>;\nexport function pipe<TIn extends unknown[], T1, T2, TOut>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, T2>,\n f2: UnaryFunction<T2, TOut>\n): Func<TIn, TOut>;\nexport function pipe<TIn extends unknown[], T1, T2, T3, TOut>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, T2>,\n f2: UnaryFunction<T2, T3>,\n f3: UnaryFunction<T3, TOut>\n): Func<TIn, TOut>;\nexport function pipe<TIn extends unknown[], T1, T2, T3, T4, TOut>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, T2>,\n f2: UnaryFunction<T2, T3>,\n f3: UnaryFunction<T3, T4>,\n f4: UnaryFunction<T4, TOut>\n): Func<TIn, TOut>;\nexport function pipe<TIn extends unknown[], T1, T2, T3, T4, T5, TOut>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, T2>,\n f2: UnaryFunction<T2, T3>,\n f3: UnaryFunction<T3, T4>,\n f4: UnaryFunction<T4, T5>,\n f5: UnaryFunction<T5, TOut>\n): Func<TIn, TOut>;\nexport function pipe<TIn extends unknown[], T1, T2, T3, T4, T5, T6, TOut>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, T2>,\n f2: UnaryFunction<T2, T3>,\n f3: UnaryFunction<T3, T4>,\n f4: UnaryFunction<T4, T5>,\n f5: UnaryFunction<T5, T6>,\n f6: UnaryFunction<T6, TOut>\n): Func<TIn, TOut>;\nexport function pipe<TIn extends unknown[], T1, T2, T3, T4, T5, T6, T7, TOut>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, T2>,\n f2: UnaryFunction<T2, T3>,\n f3: UnaryFunction<T3, T4>,\n f4: UnaryFunction<T4, T5>,\n f5: UnaryFunction<T5, T6>,\n f6: UnaryFunction<T6, T7>,\n f7: UnaryFunction<T7, TOut>\n): Func<TIn, TOut>;\nexport function pipe<\n TIn extends unknown[],\n T1,\n T2,\n T3,\n T4,\n T5,\n T6,\n T7,\n T8,\n TOut,\n>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, T2>,\n f2: UnaryFunction<T2, T3>,\n f3: UnaryFunction<T3, T4>,\n f4: UnaryFunction<T4, T5>,\n f5: UnaryFunction<T5, T6>,\n f6: UnaryFunction<T6, T7>,\n f7: UnaryFunction<T7, T8>,\n f8: UnaryFunction<T8, TOut>\n): Func<TIn, TOut>;\nexport function pipe<\n TIn extends unknown[],\n T1,\n T2,\n T3,\n T4,\n T5,\n T6,\n T7,\n T8,\n T9,\n TOut,\n>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, T2>,\n f2: UnaryFunction<T2, T3>,\n f3: UnaryFunction<T3, T4>,\n f4: UnaryFunction<T4, T5>,\n f5: UnaryFunction<T5, T6>,\n f6: UnaryFunction<T6, T7>,\n f7: UnaryFunction<T7, T8>,\n f8: UnaryFunction<T8, T9>,\n f9: UnaryFunction<T9, TOut>\n): Func<TIn, TOut>;\nexport function pipe<\n TIn extends unknown[],\n T1,\n T2,\n T3,\n T4,\n T5,\n T6,\n T7,\n T8,\n T9,\n T10,\n TOut,\n>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, T2>,\n f2: UnaryFunction<T2, T3>,\n f3: UnaryFunction<T3, T4>,\n f4: UnaryFunction<T4, T5>,\n f5: UnaryFunction<T5, T6>,\n f6: UnaryFunction<T6, T7>,\n f7: UnaryFunction<T7, T8>,\n f8: UnaryFunction<T8, T9>,\n f9: UnaryFunction<T9, T10>,\n f10: UnaryFunction<T10, TOut>\n): Func<TIn, TOut>;\nexport function pipe<\n TIn extends unknown[],\n T1,\n T2,\n T3,\n T4,\n T5,\n T6,\n T7,\n T8,\n T9,\n T10,\n T11,\n TOut,\n>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, T2>,\n f2: UnaryFunction<T2, T3>,\n f3: UnaryFunction<T3, T4>,\n f4: UnaryFunction<T4, T5>,\n f5: UnaryFunction<T5, T6>,\n f6: UnaryFunction<T6, T7>,\n f7: UnaryFunction<T7, T8>,\n f8: UnaryFunction<T8, T9>,\n f9: UnaryFunction<T9, T10>,\n f10: UnaryFunction<T10, T11>,\n f11: UnaryFunction<T11, TOut>\n): Func<TIn, TOut>;\nexport function pipe<\n TIn extends unknown[],\n T1,\n T2,\n T3,\n T4,\n T5,\n T6,\n T7,\n T8,\n T9,\n T10,\n T11,\n T12,\n TOut,\n>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, T2>,\n f2: UnaryFunction<T2, T3>,\n f3: UnaryFunction<T3, T4>,\n f4: UnaryFunction<T4, T5>,\n f5: UnaryFunction<T5, T6>,\n f6: UnaryFunction<T6, T7>,\n f7: UnaryFunction<T7, T8>,\n f8: UnaryFunction<T8, T9>,\n f9: UnaryFunction<T9, T10>,\n f10: UnaryFunction<T10, T11>,\n f11: UnaryFunction<T11, T12>,\n f12: UnaryFunction<T12, TOut>\n): Func<TIn, TOut>;\nexport function pipe<\n TIn extends unknown[],\n T1,\n T2,\n T3,\n T4,\n T5,\n T6,\n T7,\n T8,\n T9,\n T10,\n T11,\n T12,\n T13,\n TOut,\n>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, T2>,\n f2: UnaryFunction<T2, T3>,\n f3: UnaryFunction<T3, T4>,\n f4: UnaryFunction<T4, T5>,\n f5: UnaryFunction<T5, T6>,\n f6: UnaryFunction<T6, T7>,\n f7: UnaryFunction<T7, T8>,\n f8: UnaryFunction<T8, T9>,\n f9: UnaryFunction<T9, T10>,\n f10: UnaryFunction<T10, T11>,\n f11: UnaryFunction<T11, T12>,\n f12: UnaryFunction<T12, T13>,\n f13: UnaryFunction<T13, TOut>\n): Func<TIn, TOut>;\nexport function pipe<\n TIn extends unknown[],\n T1,\n T2,\n T3,\n T4,\n T5,\n T6,\n T7,\n T8,\n T9,\n T10,\n T11,\n T12,\n T13,\n T14,\n TOut,\n>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, T2>,\n f2: UnaryFunction<T2, T3>,\n f3: UnaryFunction<T3, T4>,\n f4: UnaryFunction<T4, T5>,\n f5: UnaryFunction<T5, T6>,\n f6: UnaryFunction<T6, T7>,\n f7: UnaryFunction<T7, T8>,\n f8: UnaryFunction<T8, T9>,\n f9: UnaryFunction<T9, T10>,\n f10: UnaryFunction<T10, T11>,\n f11: UnaryFunction<T11, T12>,\n f12: UnaryFunction<T12, T13>,\n f13: UnaryFunction<T13, T14>,\n f14: UnaryFunction<T14, TOut>\n): Func<TIn, TOut>;\nexport function pipe<\n TIn extends unknown[],\n T1,\n T2,\n T3,\n T4,\n T5,\n T6,\n T7,\n T8,\n T9,\n T10,\n T11,\n T12,\n T13,\n T14,\n T15,\n TOut,\n>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, T2>,\n f2: UnaryFunction<T2, T3>,\n f3: UnaryFunction<T3, T4>,\n f4: UnaryFunction<T4, T5>,\n f5: UnaryFunction<T5, T6>,\n f6: UnaryFunction<T6, T7>,\n f7: UnaryFunction<T7, T8>,\n f8: UnaryFunction<T8, T9>,\n f9: UnaryFunction<T9, T10>,\n f10: UnaryFunction<T10, T11>,\n f11: UnaryFunction<T11, T12>,\n f12: UnaryFunction<T12, T13>,\n f13: UnaryFunction<T13, T14>,\n f14: UnaryFunction<T14, T15>,\n f15: UnaryFunction<T15, TOut>\n): Func<TIn, TOut>;\nexport function pipe<\n TIn extends unknown[],\n T1,\n T2,\n T3,\n T4,\n T5,\n T6,\n T7,\n T8,\n T9,\n T10,\n T11,\n T12,\n T13,\n T14,\n T15,\n T16,\n TOut,\n>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, T2>,\n f2: UnaryFunction<T2, T3>,\n f3: UnaryFunction<T3, T4>,\n f4: UnaryFunction<T4, T5>,\n f5: UnaryFunction<T5, T6>,\n f6: UnaryFunction<T6, T7>,\n f7: UnaryFunction<T7, T8>,\n f8: UnaryFunction<T8, T9>,\n f9: UnaryFunction<T9, T10>,\n f10: UnaryFunction<T10, T11>,\n f11: UnaryFunction<T11, T12>,\n f12: UnaryFunction<T12, T13>,\n f13: UnaryFunction<T13, T14>,\n f14: UnaryFunction<T14, T15>,\n f15: UnaryFunction<T15, T16>,\n f16: UnaryFunction<T16, TOut>\n): Func<TIn, TOut>;\nexport function pipe<\n TIn extends unknown[],\n T1,\n T2,\n T3,\n T4,\n T5,\n T6,\n T7,\n T8,\n T9,\n T10,\n T11,\n T12,\n T13,\n T14,\n T15,\n T16,\n T17,\n TOut,\n>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, T2>,\n f2: UnaryFunction<T2, T3>,\n f3: UnaryFunction<T3, T4>,\n f4: UnaryFunction<T4, T5>,\n f5: UnaryFunction<T5, T6>,\n f6: UnaryFunction<T6, T7>,\n f7: UnaryFunction<T7, T8>,\n f8: UnaryFunction<T8, T9>,\n f9: UnaryFunction<T9, T10>,\n f10: UnaryFunction<T10, T11>,\n f11: UnaryFunction<T11, T12>,\n f12: UnaryFunction<T12, T13>,\n f13: UnaryFunction<T13, T14>,\n f14: UnaryFunction<T14, T15>,\n f15: UnaryFunction<T15, T16>,\n f16: UnaryFunction<T16, T17>,\n f17: UnaryFunction<T17, TOut>\n): Func<TIn, TOut>;\nexport function pipe<\n TIn extends unknown[],\n T1,\n T2,\n T3,\n T4,\n T5,\n T6,\n T7,\n T8,\n T9,\n T10,\n T11,\n T12,\n T13,\n T14,\n T15,\n T16,\n T17,\n T18,\n TOut,\n>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, T2>,\n f2: UnaryFunction<T2, T3>,\n f3: UnaryFunction<T3, T4>,\n f4: UnaryFunction<T4, T5>,\n f5: UnaryFunction<T5, T6>,\n f6: UnaryFunction<T6, T7>,\n f7: UnaryFunction<T7, T8>,\n f8: UnaryFunction<T8, T9>,\n f9: UnaryFunction<T9, T10>,\n f10: UnaryFunction<T10, T11>,\n f11: UnaryFunction<T11, T12>,\n f12: UnaryFunction<T12, T13>,\n f13: UnaryFunction<T13, T14>,\n f14: UnaryFunction<T14, T15>,\n f15: UnaryFunction<T15, T16>,\n f16: UnaryFunction<T16, T17>,\n f17: UnaryFunction<T17, T18>,\n f18: UnaryFunction<T18, TOut>\n): Func<TIn, TOut>;\nexport function pipe<\n TIn extends unknown[],\n T1,\n T2,\n T3,\n T4,\n T5,\n T6,\n T7,\n T8,\n T9,\n T10,\n T11,\n T12,\n T13,\n T14,\n T15,\n T16,\n T17,\n T18,\n T19,\n TOut,\n>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, T2>,\n f2: UnaryFunction<T2, T3>,\n f3: UnaryFunction<T3, T4>,\n f4: UnaryFunction<T4, T5>,\n f5: UnaryFunction<T5, T6>,\n f6: UnaryFunction<T6, T7>,\n f7: UnaryFunction<T7, T8>,\n f8: UnaryFunction<T8, T9>,\n f9: UnaryFunction<T9, T10>,\n f10: UnaryFunction<T10, T11>,\n f11: UnaryFunction<T11, T12>,\n f12: UnaryFunction<T12, T13>,\n f13: UnaryFunction<T13, T14>,\n f14: UnaryFunction<T14, T15>,\n f15: UnaryFunction<T15, T16>,\n f16: UnaryFunction<T16, T17>,\n f17: UnaryFunction<T17, T18>,\n f18: UnaryFunction<T18, T19>,\n f19: UnaryFunction<T19, TOut>\n): Func<TIn, TOut>;\nexport function pipe<\n TIn extends unknown[],\n T1,\n T2,\n T3,\n T4,\n T5,\n T6,\n T7,\n T8,\n T9,\n T10,\n T11,\n T12,\n T13,\n T14,\n T15,\n T16,\n T17,\n T18,\n T19,\n T20,\n TOut,\n>(\n f0: Func<TIn, T1>,\n f1: UnaryFunction<T1, T2>,\n f2: UnaryFunction<T2, T3>,\n f3: UnaryFunction<T3, T4>,\n f4: UnaryFunction<T4, T5>,\n f5: UnaryFunction<T5, T6>,\n f6: UnaryFunction<T6, T7>,\n f7: UnaryFunction<T7, T8>,\n f8: UnaryFunction<T8, T9>,\n f9: UnaryFunction<T9, T10>,\n f10: UnaryFunction<T10, T11>,\n f11: UnaryFunction<T11, T12>,\n f12: UnaryFunction<T12, T13>,\n f13: UnaryFunction<T13, T14>,\n f14: UnaryFunction<T14, T15>,\n f15: UnaryFunction<T15, T16>,\n f16: UnaryFunction<T16, T17>,\n f17: UnaryFunction<T17, T18>,\n f18: UnaryFunction<T18, T19>,\n f19: UnaryFunction<T19, T20>,\n f20: UnaryFunction<T20, TOut>\n): Func<TIn, TOut>;\nexport function pipe<TIn extends unknown[], TOut>(\n o1: Func<TIn, any>,\n ...operations: Array<UnaryFunction<any, any>>\n): Func<TIn, TOut>;\n/**\n * Implementation of pipe function.\n * @param o1 first operation\n * @param operations rest of operations\n * @returns function that will execute all operations in order\n */\nexport function pipe<TIn extends unknown[], TOut>(\n o1: Func<TIn, any>,\n ...operations: Array<UnaryFunction<any, any>>\n): Func<TIn, TOut> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- this is untyped here, but we type it correctly in the overloads for consumers\n return (...argsP: TIn) => operations.reduce((acc, f) => f(acc), o1(...argsP));\n}\n"]}