mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-18 13:35:42 +09:00
23 lines
746 B
TypeScript
23 lines
746 B
TypeScript
// SPDX-FileCopyrightText: 2024 LiveKit, Inc.
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
type Primitives = null | undefined | string | number | bigint | boolean | symbol;
|
|
|
|
export type Throws<T, E extends Error> =
|
|
| (T & {__throws?(error: E): void})
|
|
| Extract<T, Primitives>
|
|
| (T extends void ? T : never);
|
|
|
|
export type ExtractErrors<T> = T extends Throws<any, infer E> ? E : never;
|
|
|
|
export type ExtractSuccess<T> = T extends Throws<infer S, any> ? S : T;
|
|
|
|
export type CombineErrors<T extends Array<any>> = T extends [infer First, ...infer Rest]
|
|
? ExtractErrors<First> | CombineErrors<Rest>
|
|
: never;
|
|
|
|
export type PropagatesErrors<T, AdditionalErrors extends Error = never> = Throws<
|
|
ExtractSuccess<T>,
|
|
ExtractErrors<T> | AdditionalErrors
|
|
>;
|