import { RuntypeBase, Static, create, Codec, assertRuntype } from '../runtype'; import show from '../show'; export interface Sealed> extends Codec> { readonly tag: 'sealed'; readonly underlying: TUnderlying; readonly deep: boolean; } export interface SealedConfig { readonly deep?: boolean; } export function Sealed>( underlying: TUnderlying, { deep = false }: SealedConfig = {}, ): Sealed { assertRuntype(underlying); return create>( 'sealed', { p: (value, _innerValidate, innerParseToPlaceholder) => { return innerParseToPlaceholder>( underlying as RuntypeBase>, value, { deep }, ); }, u: () => underlying, }, { underlying, deep, show: () => `Sealed<${show(underlying, false)}>`, }, ); }