UNPKG

hardhat

Version:

Hardhat is an extensible developer tool that helps smart contract developers increase productivity by reliably bringing together the tools they want.

48 lines (44 loc) 1.5 kB
import * as t from "io-ts"; export function optionalOrNullable<TypeT, OutputT, InputT>( codec: t.Type<TypeT, OutputT, InputT>, name: string = `${codec.name} | undefined` ): t.Type<TypeT | undefined, OutputT | undefined, InputT | undefined | null> { return new t.Type( name, (u: unknown): u is TypeT | undefined => u === undefined || codec.is(u), (i, c) => { if (i === undefined || i === null) { return t.success(undefined); } return codec.validate(i, c); }, (a) => { if (a === undefined) { return undefined; } return codec.encode(a); } ); } export function optional<TypeT, OutputT, InputT>( codec: t.Type<TypeT, OutputT, InputT>, name: string = `${codec.name} | undefined` ): t.Type<TypeT | undefined, OutputT | undefined, InputT | undefined> { return new t.Type( name, (u: unknown): u is TypeT | undefined => u === undefined || codec.is(u), (u, c) => (u === undefined ? t.success(undefined) : codec.validate(u, c)), (a) => (a === undefined ? undefined : codec.encode(a)) ); } export function nullable<TypeT, OutputT, InputT>( codec: t.Type<TypeT, OutputT, InputT>, name: string = `${codec.name} | null` ): t.Type<TypeT | null, OutputT | null, InputT | null> { return new t.Type( name, (u: unknown): u is TypeT | null => u === null || codec.is(u), (u, c) => (u === null ? t.success(null) : codec.validate(u, c)), (a) => (a === null ? null : codec.encode(a)) ); }