logo
byethrow
  • Guide
  • Examples
  • API Reference
    @praha/byethrow
    Modules
    Result
    Types
    Type Alias: Failure<E>
    Type Alias: InferFailure<T>
    Type Alias: InferSuccess<T>
    Type Alias: Result<T, E>
    Type Alias: ResultAsync<T, E>
    Type Alias: ResultFor<R, T, E>
    Type Alias: ResultMaybeAsync<T, E>
    Type Alias: Success<T>
    Functions
    Function: andThen()
    Function: andThrough()
    Function: assertFailure()
    Function: assertSuccess()
    Function: bind()
    Function: collect()
    Function: do()
    Function: fail()
    Function: inspect()
    Function: inspectError()
    Function: isFailure()
    Function: isResult()
    Function: isSuccess()
    Function: map()
    Function: mapError()
    Function: orElse()
    Function: parse()
    Function: pipe()
    Function: sequence()
    Function: succeed()
    Function: try()
    Function: unwrap()
    Function: unwrapError()
    📝 Edit this page

    Last Updated:

    Previous pageFunction: bind()Next pageFunction: do()

    #Function: collect()

    Processes multiple Result or ResultAsync values into a single result. If all results are Success, returns a Success containing all values. If any result is a Failure, returns a Failure containing an array of all errors.

    Unlike sequence, which stops at the first error and returns only that error, collect processes all results and collects all errors.

    #Type Param

    The input type (object or array of Results).

    #Examples

    import { 
    import Result
    Result
    } from '@praha/byethrow';
    const
    const result: Result.Result<{
        name: "Alice";
        age: 20;
    }, never[]>
    result
    =
    import Result
    Result
    .
    const collect: <{
        name: Result.Result<"Alice", never>;
        age: Result.Result<20, never>;
    }>(x: {
        name: Result.Result<"Alice", never>;
        age: Result.Result<20, never>;
    }) => Result.Result<{
        name: "Alice";
        age: 20;
    }, never[]> (+4 overloads)
    collect
    ({
    name: Result.Result<"Alice", never>
    name
    :
    import Result
    Result
    .
    const succeed: <"Alice">(value: "Alice") => Result.Result<"Alice", never> (+1 overload)
    succeed
    ('Alice'),
    age: Result.Result<20, never>
    age
    :
    import Result
    Result
    .
    const succeed: <20>(value: 20) => Result.Result<20, never> (+1 overload)
    succeed
    (20),
    }); // { type: 'Success', value: { name: 'Alice', age: 20 } }
    import { 
    import Result
    Result
    } from '@praha/byethrow';
    const
    const result: Result.Result<{
        name: "Alice";
        age: never;
    }, "Invalid age"[]>
    result
    =
    import Result
    Result
    .
    const collect: <{
        name: Result.Result<"Alice", never>;
        age: Result.Result<never, "Invalid age">;
    }>(x: {
        name: Result.Result<"Alice", never>;
        age: Result.Result<never, "Invalid age">;
    }) => Result.Result<{
        name: "Alice";
        age: never;
    }, "Invalid age"[]> (+4 overloads)
    collect
    ({
    name: Result.Result<"Alice", never>
    name
    :
    import Result
    Result
    .
    const succeed: <"Alice">(value: "Alice") => Result.Result<"Alice", never> (+1 overload)
    succeed
    ('Alice'),
    age: Result.Result<never, "Invalid age">
    age
    :
    import Result
    Result
    .
    const fail: <"Invalid age">(error: "Invalid age") => Result.Result<never, "Invalid age"> (+1 overload)
    fail
    ('Invalid age'),
    }); // { type: 'Failure', error: ['Invalid age'] }
    import { 
    import Result
    Result
    } from '@praha/byethrow';
    const
    const result: Result.Result<[1, 2, 3], never[]>
    result
    =
    import Result
    Result
    .
    const collect: <[Result.Result<1, never>, Result.Result<2, never>, Result.Result<3, never>]>(x: [Result.Result<1, never>, Result.Result<2, never>, Result.Result<3, never>]) => Result.Result<[1, 2, 3], never[]> (+4 overloads)
    collect
    ([
    import Result
    Result
    .
    const succeed: <1>(value: 1) => Result.Result<1, never> (+1 overload)
    succeed
    (1),
    import Result
    Result
    .
    const succeed: <2>(value: 2) => Result.Result<2, never> (+1 overload)
    succeed
    (2),
    import Result
    Result
    .
    const succeed: <3>(value: 3) => Result.Result<3, never> (+1 overload)
    succeed
    (3),
    ]); // { type: 'Success', value: [1, 2, 3] }
    import { 
    import Result
    Result
    } from '@praha/byethrow';
    const
    const result: Result.Result<[1, never, never], ("error1" | "error2")[]>
    result
    =
    import Result
    Result
    .
    const collect: <[Result.Result<1, never>, Result.Result<never, "error1">, Result.Result<never, "error2">]>(x: [Result.Result<1, never>, Result.Result<never, "error1">, Result.Result<never, "error2">]) => Result.Result<[1, never, never], ("error1" | "error2")[]> (+4 overloads)
    collect
    ([
    import Result
    Result
    .
    const succeed: <1>(value: 1) => Result.Result<1, never> (+1 overload)
    succeed
    (1),
    import Result
    Result
    .
    const fail: <"error1">(error: "error1") => Result.Result<never, "error1"> (+1 overload)
    fail
    ('error1'),
    import Result
    Result
    .
    const fail: <"error2">(error: "error2") => Result.Result<never, "error2"> (+1 overload)
    fail
    ('error2'),
    ]); // { type: 'Failure', error: ['error1', 'error2'] }
    import { 
    import Result
    Result
    } from '@praha/byethrow';
    const
    const result: Result.Result<[number, number, number], ("Invalid number: 1" | "Invalid number: 2" | "Invalid number: 3")[]>
    result
    =
    import Result
    Result
    .
    const collect: <["1", "2", "3"], (value: "1" | "2" | "3") => Result.Failure<"Invalid number: 1" | "Invalid number: 2" | "Invalid number: 3"> | Result.Success<number>>(x: ["1", "2", "3"], fn: (value: "1" | "2" | "3") => Result.Failure<"Invalid number: 1" | "Invalid number: 2" | "Invalid number: 3"> | Result.Success<number>) => Result.Result<[number, number, number], ("Invalid number: 1" | "Invalid number: 2" | "Invalid number: 3")[]> (+4 overloads)
    collect
    (['1', '2', '3'], (
    value: "1" | "2" | "3"
    value
    ) => {
    const
    const number: number
    number
    =
    var Number: NumberConstructor
    (value?: any) => number

    An object that represents a number of any kind. All JavaScript numbers are 64-bit floating-point numbers.

    Number
    (
    value: "1" | "2" | "3"
    value
    );
    return
    var Number: NumberConstructor

    An object that represents a number of any kind. All JavaScript numbers are 64-bit floating-point numbers.

    Number
    .
    NumberConstructor.isNaN(number: unknown): boolean

    Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number). Unlike the global isNaN(), Number.isNaN() doesn't forcefully convert the parameter to a number. Only values of the type number, that are also NaN, result in true.

    @paramnumber A numeric value.
    isNaN
    (
    const number: number
    number
    )
    ?
    import Result
    Result
    .
    const fail: <"Invalid number: 1" | "Invalid number: 2" | "Invalid number: 3">(error: "Invalid number: 1" | "Invalid number: 2" | "Invalid number: 3") => Result.Result<never, "Invalid number: 1" | "Invalid number: 2" | "Invalid number: 3"> (+1 overload)
    fail
    (`Invalid number: ${
    value: "1" | "2" | "3"
    value
    }`)
    :
    import Result
    Result
    .
    const succeed: <number>(value: number) => Result.Result<number, never> (+1 overload)
    succeed
    (
    const number: number
    number
    );
    }); // { type: 'Success', value: [1, 2, 3] }
    import { 
    import Result
    Result
    } from '@praha/byethrow';
    const
    const result: Result.Result<[number, number, number], ("Invalid number: 1" | "Invalid number: invalid" | "Invalid number: 3")[]>
    result
    =
    import Result
    Result
    .
    const collect: <["1", "invalid", "3"], (value: "1" | "invalid" | "3") => Result.Failure<"Invalid number: 1" | "Invalid number: invalid" | "Invalid number: 3"> | Result.Success<number>>(x: ["1", "invalid", "3"], fn: (value: "1" | "invalid" | "3") => Result.Failure<"Invalid number: 1" | "Invalid number: invalid" | "Invalid number: 3"> | Result.Success<number>) => Result.Result<[number, number, number], ("Invalid number: 1" | "Invalid number: invalid" | "Invalid number: 3")[]> (+4 overloads)
    collect
    (['1', 'invalid', '3'], (
    value: "1" | "invalid" | "3"
    value
    ) => {
    const
    const number: number
    number
    =
    var Number: NumberConstructor
    (value?: any) => number

    An object that represents a number of any kind. All JavaScript numbers are 64-bit floating-point numbers.

    Number
    (
    value: "1" | "invalid" | "3"
    value
    );
    return
    var Number: NumberConstructor

    An object that represents a number of any kind. All JavaScript numbers are 64-bit floating-point numbers.

    Number
    .
    NumberConstructor.isNaN(number: unknown): boolean

    Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number). Unlike the global isNaN(), Number.isNaN() doesn't forcefully convert the parameter to a number. Only values of the type number, that are also NaN, result in true.

    @paramnumber A numeric value.
    isNaN
    (
    const number: number
    number
    )
    ?
    import Result
    Result
    .
    const fail: <"Invalid number: 1" | "Invalid number: invalid" | "Invalid number: 3">(error: "Invalid number: 1" | "Invalid number: invalid" | "Invalid number: 3") => Result.Result<never, "Invalid number: 1" | "Invalid number: invalid" | "Invalid number: 3"> (+1 overload)
    fail
    (`Invalid number: ${
    value: "1" | "invalid" | "3"
    value
    }`)
    :
    import Result
    Result
    .
    const succeed: <number>(value: number) => Result.Result<number, never> (+1 overload)
    succeed
    (
    const number: number
    number
    );
    }); // { type: 'Failure', error: ['Invalid number: invalid'] }

    #Call Signature

    collect<X>(x): ResultFor<X[keyof X], { [K in string | number | symbol]: InferSuccess<X[K]> }, InferFailure<X[keyof X]>[]>

    Defined in: functions/collect.ts:102

    #Type Parameters

    #X

    X extends Record<string, ResultMaybeAsync<any, any>>

    #Parameters

    #x

    X

    #Returns

    ResultFor<X[keyof X], { [K in string | number | symbol]: InferSuccess<X[K]> }, InferFailure<X[keyof X]>[]>

    #Call Signature

    collect<X>(x): ResultFor<X[number], { [K in string | number | symbol]: InferSuccess<X[K<K>]> }, InferFailure<X[number]>[]>

    Defined in: functions/collect.ts:103

    #Type Parameters

    #X

    X extends ResultMaybeAsync<any, any>[]

    #Parameters

    #x

    X

    #Returns

    ResultFor<X[number], { [K in string | number | symbol]: InferSuccess<X[K<K>]> }, InferFailure<X[number]>[]>

    #Call Signature

    collect<X>(x): ResultFor<X[number], { [K in string | number | symbol]: InferSuccess<X[K<K>]> }, InferFailure<X[number]>[]>

    Defined in: functions/collect.ts:104

    #Type Parameters

    #X

    X extends readonly ResultMaybeAsync<any, any>[]

    #Parameters

    #x

    X

    #Returns

    ResultFor<X[number], { [K in string | number | symbol]: InferSuccess<X[K<K>]> }, InferFailure<X[number]>[]>

    #Call Signature

    collect<X, Fn>(x, fn): ResultFor<ReturnType<Fn>, { [K in string | number | symbol]: InferSuccess<Fn> }, InferFailure<Fn>[]>

    Defined in: functions/collect.ts:105

    #Type Parameters

    #X

    X extends unknown[]

    #Fn

    Fn extends (value) => ResultMaybeAsync<any, any>

    #Parameters

    #x

    X

    #fn

    Fn

    #Returns

    ResultFor<ReturnType<Fn>, { [K in string | number | symbol]: InferSuccess<Fn> }, InferFailure<Fn>[]>

    #Call Signature

    collect<X, Fn>(x, fn): ResultFor<ReturnType<Fn>, { [K in string | number | symbol]: InferSuccess<Fn> }, InferFailure<Fn>[]>

    Defined in: functions/collect.ts:106

    #Type Parameters

    #X

    X extends readonly unknown[]

    #Fn

    Fn extends (value) => ResultMaybeAsync<any, any>

    #Parameters

    #x

    X

    #fn

    Fn

    #Returns

    ResultFor<ReturnType<Fn>, { [K in string | number | symbol]: InferSuccess<Fn> }, InferFailure<Fn>[]>