import type { Primitive } from "./domain.ts"; import { type ErrorMessage } from "./errors.ts"; import type { unionToTuple } from "./unionToTuple.ts"; export type Stringifiable = string | boolean | number | bigint | null | undefined; /** Force an operation like `{ a: 0 } & { b: 1 }` to be computed so that it displays `{ a: 0; b: 1 }`. */ export type show = { [k in keyof t]: t[k]; } & unknown; /** @deprecated use "show" instead */ export type evaluate = { [k in keyof t]: t[k]; } & unknown; export type get = t[k & keyof t]; export type exact = { [k in keyof t]: k extends keyof u ? conform : never; }; export type exactMessageOnError = { [k in keyof t]: k extends keyof u ? conform : ErrorMessage<`'${k & string}' is not a valid key`>; } & u; export type promisable = t | Promise; export type leftIfEqual = [l, r] extends [r, l] ? l : r; export type UnknownUnion = string | number | symbol | bigint | boolean | object | null | undefined; /** * Interesection (`&`) that avoids evaluating `unknown` to `{}` */ export type andPreserveUnknown = unknown extends l & r ? unknown : show; /** Can be used to test for the universal subtypes, `any` and `never`, e.g.: * * ```ts * type isAnyOrNever = [t] extends [anyOrNever] ? true : false * ``` * * The actual value is a string literal, but the only realistic subtypes * of that literal are `any` and `never`. */ export type anyOrNever = " anyOrNever"; export type conform = t extends base ? t : base; export type equals = [l, r] extends [r, l] ? true : false; export type exactEquals = (<_>() => _ extends l ? 1 : 2) extends <_>() => _ extends r ? 1 : 2 ? true : false; export declare const brand: " brand"; export type Brand = t & { readonly [brand]: [t, id]; }; export type unbrand = t extends Brand ? base : never; export type satisfy = t; export type defined = t & ({} | null); export type autocomplete = suggestions | (string & {}); export type widen = collectWidenedType>; type collectWidenedType = remaining extends [infer head, ...infer tail] ? collectWidenedType : result; type narrowTuple = t extends readonly [infer head, ...infer tail] ? readonly [head, ...narrowTuple] : []; export type narrow = t extends Primitive ? t : t extends readonly unknown[] ? narrowTuple : { [k in keyof t]: narrow; }; export declare const narrow: (t: narrow) => t; /** primitive key used to represent an inferred type at compile-time */ export declare const inferred: " arkInferred"; /** primitive key used to represent an inferred type at compile-time */ export type inferred = typeof inferred; export {};