UNPKG

@typed/io

Version:

Runtime IO type system

24 lines 1.19 kB
import { sequence } from '@typed/effects'; import { fromRight, isLeft } from '@typed/either'; import { toString } from '@typed/strings'; import * as G from '../guard'; import { catchDecodeFailure, DecodeError, decodeFailure, Decoder, } from './Decoder'; import { refinement } from './refinement'; const UnknownMap = Decoder.fromGuard(G.Map, `ReadonlyMap<unknown, unknown>`); export { UnknownMap as Map }; export const map = (key, value) => { return refinement(UnknownMap, function* (map) { const entries = yield* sequence(function* (keyValuePair) { const k = yield* catchDecodeFailure(key.decode(keyValuePair[0])); const v = yield* catchDecodeFailure(value.decode(keyValuePair[1])); if (isLeft(k) || isLeft(v)) { const expected = `ReadonlyMap<${key.expected}, ${value.expected}>`; const actual = toString(map); return yield* decodeFailure(DecodeError.create(expected, actual)); } return [fromRight(k), fromRight(v)]; }, Array.from(map)); return new Map(entries); }, `ReadonlyMap<${key.expected}, ${value.expected}>`); }; //# sourceMappingURL=Map.js.map