@typed/io
Version:
Runtime IO type system
18 lines • 806 B
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.tuple = void 0;
const effects_1 = require("@typed/effects");
const strings_1 = require("@typed/strings");
const Array_1 = require("./Array");
const Decoder_1 = require("./Decoder");
const refinement_1 = require("./refinement");
exports.tuple = (decoders) => {
const expected = `[${decoders.map((d) => d.expected).join(`, `)}]`;
return refinement_1.refinement(Array_1.Array, function* (list) {
if (list.length !== decoders.length) {
return yield* Decoder_1.decodeFailure(Decoder_1.DecodeError.create(expected, `${strings_1.toString(list)}`));
}
return yield* effects_1.combine(...decoders.map((d, i) => d.decode(list[i])));
}, expected);
};
//# sourceMappingURL=Tuple.js.map