@akala/core
Version:
38 lines (37 loc) • 1.51 kB
TypeScript
/**
* Interface for a formatter.
*/
export interface Formatter<TResult> {
/**
* Formats a value.
* @param {unknown} value - The value to format.
* @returns {TResult} The formatted value.
*/
format(value: unknown): TResult;
}
/**
* Interface for a reversible formatter.
*/
export interface ReversibleFormatter<TResult, TOrigin> extends Formatter<TResult> {
/**
* Unformats a value.
* @param {TResult} value - The value to unformat.
* @returns {TOrigin} The unformatted value.
*/
unformat(value: TResult): TOrigin;
}
/**
* Type for a formatter factory.
*/
export type FormatterFactory<TResult, TSettings extends unknown[] = unknown[]> = new (...args: TSettings) => Formatter<TResult>;
/**
* Type for a reversible formatter factory.
*/
export type ReversibleFormatterFactory<TResult, TOrigin, TSettings extends unknown[] = unknown[]> = new (...args: TSettings) => ReversibleFormatter<TResult, TOrigin>;
/**
* Checks if a formatter is reversible.
* @param {Formatter<T> | (new (...args: TArgs) => Formatter<T>)} formatter - The formatter to check.
* @returns {boolean} True if the formatter is reversible, false otherwise.
*/
export declare function isReversible<T, TArgs extends unknown[]>(formatter: (new (...args: TArgs) => Formatter<T>)): formatter is (new (...args: TArgs) => Formatter<T> & ReversibleFormatter<T, unknown>);
export declare function isReversible<T>(formatter: Formatter<T>): formatter is ReversibleFormatter<T, unknown>;