UNPKG

@typed/io

Version:

Runtime IO type system

28 lines 1.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.array = exports.Array = void 0; const effects_1 = require("@typed/effects"); const either_1 = require("@typed/either"); const maybe_1 = require("@typed/maybe"); const strings_1 = require("@typed/strings"); const G = require("../guard"); const Decoder_1 = require("./Decoder"); const refinement_1 = require("./refinement"); exports.Array = Decoder_1.Decoder.fromGuard(G.Array, 'ReadonlyArray<unknown>'); exports.array = (decoder) => refinement_1.refinement(exports.Array, function* (input) { if (input.length === 0) { return input; } const decoded = yield* effects_1.combine(...input.map((i, index) => Decoder_1.catchDecodeFailure(decoder.decode(i), () => index))); if (decoded.every(either_1.isRight)) { return decoded.map((d) => either_1.fromRight(d)); } const errors = decoded.filter(either_1.isLeft).map(either_1.fromLeft); return yield* Decoder_1.decodeFailure(formatArrayErrors(errors, strings_1.toString(input), decoder.expected)); }, `ReadonlyArray<${decoder.expected}>`); function formatArrayErrors(errors, value, expected) { return Decoder_1.DecodeError.create(`ReadonlyArray<${expected}>`, value, { errors: errors.map(([e, key]) => ({ ...e, key: maybe_1.Just.of(key.toString()) })), }); } //# sourceMappingURL=Array.js.map