UNPKG

@freeword/meta

Version:

Meta package for Freeword: exports all core types, constants, and utilities from the src/ directory.

66 lines 3.01 kB
import type { AnyBag } from './PrimTypeAliases.ts'; export interface Outcome<VT = any, GT extends string = string> { /** Can the result be trusted (that is, were there no unexpected issues?) */ ok: boolean; /** A message about the outcome, if any */ msg?: string | undefined; /** What was achieved / what went wrong / what was the final state, if known? */ gist?: GT | undefined; /** Return value of a GoodOutcome; absent in a BadOutcome */ val?: VT | undefined; /** Summary of the input to the process */ given?: any | undefined; /** the error that occurred, if it is a BadOutcome */ err?: ExtError | undefined; /** Additional information about the process outcome */ tmi?: Record<string, any> | undefined; } export interface BadOutcome<GT extends string = string> extends Outcome<never, GT> { /** False: the result cannot be trusted, as there were unexpected issues */ ok: false; /** What went wrong / what was the final state, if known? */ gist: GT; /** the throwable error that occurred, if it is a BadOutcome. * err.tmi holds the tmi, gist, and the original error's message (as origmsg) */ err: ExtError; /** Return value of a GoodOutcome; absent in a BadOutcome */ val?: never; } /** result can be trusted: but val is strongly typed and nothing broke. * You might not like the result -- eg 'we successfully retrieved a 404 missing result' -- * but the code worked as expected. */ export interface GoodOutcome<VT = any, GT extends string = string> extends Outcome<VT, GT> { /** True, since the result can be trusted (that is, were there no unexpected issues) */ ok: true; val: VT; err?: never; } export interface ExtError extends Error { /** Additional information about the process. Compatible with typing of BadOutcome but otherwise unrestricted */ extensions: AnyBag & { ok?: boolean; gist?: string | undefined; origmsg?: string | undefined; given?: any | undefined; message?: string; name?: string; stack?: string; }; code?: string; } /** Logger interface compatible with Winston logger and console */ export type LoggerT = { trace(msg: string, obj?: AnyBag): void; debug(msg: string, obj?: AnyBag): void; info(msg: string, obj?: AnyBag): void; warn(msg: string, obj?: AnyBag): void; error(msg: string, obj?: AnyBag): void; }; /** A type that can be an Iterable, Iterator, or Generator */ export type AnySyncIterable<VT, RT = any> = Iterable<VT> | Iterator<VT> | Generator<VT, RT, VT | undefined>; /** A type that can be an AsyncIterable, AsyncIterator, or AsyncGenerator */ export type AnyAsyncIterable<VT, RT = any> = AsyncIterable<VT> | AsyncIterator<VT> | AsyncGenerator<VT, RT, VT | undefined>; /** A type that can be an AsyncIterable or an Iterable */ export type AnyIterable<VT, RT = any> = AnySyncIterable<VT, RT> | AnyAsyncIterable<VT, RT>; //# sourceMappingURL=UtilityTypes.d.ts.map