@freeword/meta
Version:
Meta package for Freeword: exports all core types, constants, and utilities from the src/ directory.
81 lines • 3.76 kB
TypeScript
/** Lookup table / dictionary of generic properties */
export type Bag<VT> = Record<string, VT>;
/** Lookup table / dictionary of generic properties */
export type PartBag<KT extends string, VT> = Partial<Record<KT, VT>>;
/** Generic bag of properties */
export type AnyBag = Bag<any>;
/** Bag of strings */
export type StrBag = Bag<string>;
/** String or we'll figure it out for you */
export type StringMaybe = string | null | undefined;
/** A string that starts with [a-zA-Z] and has only [a-zA-Z0-9_] */
export type Fieldname = string;
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;
}
/**
* Omit the statics of a class, and replace them with the given replacement.
* because TS is effed in the head and has a stupid type system for static methods
* @param T - The class to omit the statics of.
* @param Replacement - The replacement to use for the statics.
* @returns The class with the statics omitted and replaced.
*/
export type OmitStatics<T, Replacement> = T extends {
new (...args: infer CtorArgs): infer BaseInstanceT;
} ? Omit<T, keyof Replacement> & Replacement & {
new (...args: CtorArgs): BaseInstanceT;
} : Omit<T, keyof Replacement>;
/** 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