import { type Type } from '../type.mjs'; import { createAssertFn } from './create-assert-fn.mjs'; import { createCastFn } from './create-cast-fn.mjs'; import { createIsFn } from './create-is-fn.mjs'; export const createType = ({ defaultValue, fill, prune, typeName, validate, }: Readonly<{ typeName: string; defaultValue: A; validate: Type['validate']; fill?: Type['fill']; prune?: Type['prune']; }>): Type => { const is = createIsFn(validate); return { typeName, defaultValue, validate, is, assertIs: createAssertFn(validate), fill: fill ?? ((a) => (is(a) ? a : defaultValue)), prune: prune ?? ((a) => a), cast: createCastFn(validate), }; };