@hi18n/core
Version:
Message internationalization meets immutability and type-safety - core runtime
63 lines (56 loc) • 1.36 kB
text/typescript
import type { Message } from "../opaque.ts";
/**
* An intermediary builder for constructing a branch message, such as `plural`.
*
* @since 0.2.1 (`@hi18n/core`)
*/
export type BranchBuilder<Options extends string | number> = {
branch: <const Branches extends BranchesBase<Options, Message<never>>>(
...branches: Branches
) => Message<
Branches extends BranchesBase<Options, Message<infer T>>
? { [K in keyof T]: T[K] }
: never
>;
};
/**
* @since 0.2.1 (`@hi18n/core`)
*/
export type BranchesBase<Options extends string | number, M> = [
...When<Options, M>[],
Otherwise<M>,
];
/**
* @since 0.2.1 (`@hi18n/core`)
*/
export type When<Condition extends string | number, M> = {
type: "When";
when: Condition;
message: M;
};
/**
* A DSL function used as part of a branch message, such as `plural`.
*
* @since 0.2.1 (`@hi18n/core`)
*/
export function when<Condition extends string | number, M>(
when: Condition,
message: M,
): When<Condition, M> {
return { type: "When", when, message };
}
/**
* @since 0.2.1 (`@hi18n/core`)
*/
export type Otherwise<M> = {
type: "Otherwise";
message: M;
};
/**
* A DSL function used as part of a branch message, such as `plural`.
*
* @since 0.2.1 (`@hi18n/core`)
*/
export function otherwise<M>(message: M): Otherwise<M> {
return { type: "Otherwise", message };
}