import type { Join, Primitive, Showable, UnionToTuple } from '@traversable/registry'; import { URI } from '@traversable/registry'; export type EnumType = T extends readonly unknown[] ? T[number] : T[keyof T]; export type EnumToString = number extends T['length' & keyof T] ? NonFiniteArrayToString : FiniteArrayToString; export type FiniteArrayToString = never | Join<{ [I in keyof T]: MemberToString; }, ' | '>; export type NonFiniteArrayToString> = never | Join<{ [I in keyof T]: MemberToString; }, ' | '>; export type MemberToString = never | T extends symbol ? 'symbol' : T extends bigint ? `${T}n` : T extends string ? `'${T}'` : `${T & Showable}`; export { enum_ as enum }; interface enum_ { _type: EnumType; tag: URI.enum; (u: unknown): u is this['_type']; def: V; toType(): EnumToString; toJsonSchema(): { enum: { -readonly [K in keyof V]: V[K] extends undefined | symbol | bigint ? void : V[K]; }; }; } declare namespace enum_ { type type> = T; } /** * ## {@link enum_ `t.enum`} */ declare function enum_(...primitives: readonly [...T]): enum_<[...T]>; declare function enum_>(...record: [T]): enum_; declare namespace enum_ { let prototype: { tag: "@traversable/schema/URI::enum"; }; function def(args: readonly [...T]): enum_; } //# sourceMappingURL=enum.d.ts.map