341 lines
11 KiB
JavaScript
341 lines
11 KiB
JavaScript
|
"use strict";
|
||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
|
if (k2 === undefined) k2 = k;
|
||
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
|
}
|
||
|
Object.defineProperty(o, k2, desc);
|
||
|
}) : (function(o, m, k, k2) {
|
||
|
if (k2 === undefined) k2 = k;
|
||
|
o[k2] = m[k];
|
||
|
}));
|
||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||
|
}) : function(o, v) {
|
||
|
o["default"] = v;
|
||
|
});
|
||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||
|
if (mod && mod.__esModule) return mod;
|
||
|
var result = {};
|
||
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||
|
__setModuleDefault(result, mod);
|
||
|
return result;
|
||
|
};
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.alt = exports.map = exports.id = exports.compose = exports.lazy = exports.fromSum = exports.intersect = exports.union = exports.fromTuple = exports.fromRecord = exports.fromArray = exports.fromPartial = exports.fromType = exports.fromStruct = exports.nullable = exports.parse = exports.refine = exports.mapLeftWithInput = exports.literal = exports.fromRefinement = void 0;
|
||
|
var E = __importStar(require("fp-ts/lib/Either"));
|
||
|
var G = __importStar(require("./Guard"));
|
||
|
var S = __importStar(require("./Schemable"));
|
||
|
// -------------------------------------------------------------------------------------
|
||
|
// constructors
|
||
|
// -------------------------------------------------------------------------------------
|
||
|
/**
|
||
|
* @category constructors
|
||
|
* @since 2.2.7
|
||
|
*/
|
||
|
function fromRefinement(M) {
|
||
|
return function (refinement, onError) { return ({
|
||
|
decode: function (i) { return (refinement(i) ? M.of(i) : M.throwError(onError(i))); }
|
||
|
}); };
|
||
|
}
|
||
|
exports.fromRefinement = fromRefinement;
|
||
|
/**
|
||
|
* @category constructors
|
||
|
* @since 2.2.7
|
||
|
*/
|
||
|
function literal(M) {
|
||
|
return function (onError) { return function () {
|
||
|
var values = [];
|
||
|
for (var _i = 0; _i < arguments.length; _i++) {
|
||
|
values[_i] = arguments[_i];
|
||
|
}
|
||
|
return ({
|
||
|
decode: function (i) { return (G.literal.apply(G, values).is(i) ? M.of(i) : M.throwError(onError(i, values))); }
|
||
|
});
|
||
|
}; };
|
||
|
}
|
||
|
exports.literal = literal;
|
||
|
// -------------------------------------------------------------------------------------
|
||
|
// combinators
|
||
|
// -------------------------------------------------------------------------------------
|
||
|
/**
|
||
|
* @category combinators
|
||
|
* @since 2.2.7
|
||
|
*/
|
||
|
function mapLeftWithInput(M) {
|
||
|
return function (f) { return function (decoder) { return ({
|
||
|
decode: function (i) { return M.mapLeft(decoder.decode(i), function (e) { return f(i, e); }); }
|
||
|
}); }; };
|
||
|
}
|
||
|
exports.mapLeftWithInput = mapLeftWithInput;
|
||
|
/**
|
||
|
* @category combinators
|
||
|
* @since 2.2.7
|
||
|
*/
|
||
|
function refine(M) {
|
||
|
return function (refinement, onError) { return function (from) { return compose(M)(fromRefinement(M)(refinement, onError))(from); }; };
|
||
|
}
|
||
|
exports.refine = refine;
|
||
|
/**
|
||
|
* @category combinators
|
||
|
* @since 2.2.7
|
||
|
*/
|
||
|
function parse(M) {
|
||
|
return function (decode) { return function (from) { return compose(M)({ decode: decode })(from); }; };
|
||
|
}
|
||
|
exports.parse = parse;
|
||
|
/**
|
||
|
* @category combinators
|
||
|
* @since 2.2.7
|
||
|
*/
|
||
|
function nullable(M) {
|
||
|
return function (onError) { return function (or) { return ({
|
||
|
decode: function (i) {
|
||
|
return i === null
|
||
|
? M.of(null)
|
||
|
: M.bimap(or.decode(i), function (e) { return onError(i, e); }, function (a) { return a; });
|
||
|
}
|
||
|
}); }; };
|
||
|
}
|
||
|
exports.nullable = nullable;
|
||
|
/**
|
||
|
* @category combinators
|
||
|
* @since 2.2.15
|
||
|
*/
|
||
|
function fromStruct(M) {
|
||
|
var traverse = traverseRecordWithIndex(M);
|
||
|
return function (onPropertyError) { return function (properties) { return ({
|
||
|
decode: function (i) {
|
||
|
return traverse(properties, function (key, decoder) {
|
||
|
return M.mapLeft(decoder.decode(i[key]), function (e) { return onPropertyError(key, e); });
|
||
|
});
|
||
|
}
|
||
|
}); }; };
|
||
|
}
|
||
|
exports.fromStruct = fromStruct;
|
||
|
/**
|
||
|
* Use `fromStruct` instead.
|
||
|
*
|
||
|
* @category combinators
|
||
|
* @since 2.2.7
|
||
|
* @deprecated
|
||
|
*/
|
||
|
exports.fromType = fromStruct;
|
||
|
/**
|
||
|
* @category combinators
|
||
|
* @since 2.2.7
|
||
|
*/
|
||
|
function fromPartial(M) {
|
||
|
var traverse = traverseRecordWithIndex(M);
|
||
|
var undefinedProperty = M.of(E.right(undefined));
|
||
|
var skipProperty = M.of(E.left(undefined));
|
||
|
return function (onPropertyError) { return function (properties) { return ({
|
||
|
decode: function (i) {
|
||
|
return M.map(traverse(properties, function (key, decoder) {
|
||
|
var ikey = i[key];
|
||
|
if (ikey === undefined) {
|
||
|
return key in i
|
||
|
? // don't strip undefined properties
|
||
|
undefinedProperty
|
||
|
: // don't add missing properties
|
||
|
skipProperty;
|
||
|
}
|
||
|
return M.bimap(decoder.decode(ikey), function (e) { return onPropertyError(key, e); }, function (a) { return E.right(a); });
|
||
|
}), compactRecord);
|
||
|
}
|
||
|
}); }; };
|
||
|
}
|
||
|
exports.fromPartial = fromPartial;
|
||
|
/**
|
||
|
* @category combinators
|
||
|
* @since 2.2.7
|
||
|
*/
|
||
|
function fromArray(M) {
|
||
|
var traverse = traverseArrayWithIndex(M);
|
||
|
return function (onItemError) { return function (item) { return ({
|
||
|
decode: function (is) { return traverse(is, function (index, i) { return M.mapLeft(item.decode(i), function (e) { return onItemError(index, e); }); }); }
|
||
|
}); }; };
|
||
|
}
|
||
|
exports.fromArray = fromArray;
|
||
|
/**
|
||
|
* @category combinators
|
||
|
* @since 2.2.7
|
||
|
*/
|
||
|
function fromRecord(M) {
|
||
|
var traverse = traverseRecordWithIndex(M);
|
||
|
return function (onKeyError) { return function (codomain) { return ({
|
||
|
decode: function (ir) { return traverse(ir, function (key, i) { return M.mapLeft(codomain.decode(i), function (e) { return onKeyError(key, e); }); }); }
|
||
|
}); }; };
|
||
|
}
|
||
|
exports.fromRecord = fromRecord;
|
||
|
/**
|
||
|
* @category combinators
|
||
|
* @since 2.2.7
|
||
|
*/
|
||
|
function fromTuple(M) {
|
||
|
var traverse = traverseArrayWithIndex(M);
|
||
|
return function (onIndexError) { return function () {
|
||
|
var components = [];
|
||
|
for (var _i = 0; _i < arguments.length; _i++) {
|
||
|
components[_i] = arguments[_i];
|
||
|
}
|
||
|
return ({
|
||
|
decode: function (is) {
|
||
|
return traverse(components, function (index, decoder) {
|
||
|
return M.mapLeft(decoder.decode(is[index]), function (e) { return onIndexError(index, e); });
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
}; };
|
||
|
}
|
||
|
exports.fromTuple = fromTuple;
|
||
|
/**
|
||
|
* @category combinators
|
||
|
* @since 2.2.7
|
||
|
*/
|
||
|
function union(M) {
|
||
|
return function (onMemberError) { return function () {
|
||
|
var members = [];
|
||
|
for (var _i = 0; _i < arguments.length; _i++) {
|
||
|
members[_i] = arguments[_i];
|
||
|
}
|
||
|
return ({
|
||
|
decode: function (i) {
|
||
|
var out = M.mapLeft(members[0].decode(i), function (e) { return onMemberError(0, e); });
|
||
|
var _loop_1 = function (index) {
|
||
|
out = M.alt(out, function () { return M.mapLeft(members[index].decode(i), function (e) { return onMemberError(index, e); }); });
|
||
|
};
|
||
|
for (var index = 1; index < members.length; index++) {
|
||
|
_loop_1(index);
|
||
|
}
|
||
|
return out;
|
||
|
}
|
||
|
});
|
||
|
}; };
|
||
|
}
|
||
|
exports.union = union;
|
||
|
/**
|
||
|
* @category combinators
|
||
|
* @since 2.2.7
|
||
|
*/
|
||
|
function intersect(M) {
|
||
|
return function (right) { return function (left) { return ({
|
||
|
decode: function (i) {
|
||
|
return M.ap(M.map(left.decode(i), function (a) { return function (b) { return S.intersect_(a, b); }; }), right.decode(i));
|
||
|
}
|
||
|
}); }; };
|
||
|
}
|
||
|
exports.intersect = intersect;
|
||
|
/**
|
||
|
* @category combinators
|
||
|
* @since 2.2.7
|
||
|
*/
|
||
|
function fromSum(M) {
|
||
|
return function (onTagError) { return function (tag) { return function (members) {
|
||
|
var keys = Object.keys(members);
|
||
|
return {
|
||
|
decode: function (ir) {
|
||
|
var v = ir[tag];
|
||
|
if (Object.prototype.hasOwnProperty.call(members, v)) {
|
||
|
return members[v].decode(ir);
|
||
|
}
|
||
|
return M.throwError(onTagError(tag, v, keys));
|
||
|
}
|
||
|
};
|
||
|
}; }; };
|
||
|
}
|
||
|
exports.fromSum = fromSum;
|
||
|
/**
|
||
|
* @category combinators
|
||
|
* @since 2.2.7
|
||
|
*/
|
||
|
function lazy(M) {
|
||
|
return function (onError) { return function (id, f) {
|
||
|
var get = S.memoize(f);
|
||
|
return {
|
||
|
decode: function (u) { return M.mapLeft(get().decode(u), function (e) { return onError(id, e); }); }
|
||
|
};
|
||
|
}; };
|
||
|
}
|
||
|
exports.lazy = lazy;
|
||
|
/**
|
||
|
* @category combinators
|
||
|
* @since 2.2.7
|
||
|
*/
|
||
|
function compose(M) {
|
||
|
return function (ab) { return function (ia) { return ({
|
||
|
decode: function (i) { return M.chain(ia.decode(i), ab.decode); }
|
||
|
}); }; };
|
||
|
}
|
||
|
exports.compose = compose;
|
||
|
/**
|
||
|
* @category combinators
|
||
|
* @since 2.2.8
|
||
|
*/
|
||
|
function id(M) {
|
||
|
return function () { return ({
|
||
|
decode: M.of
|
||
|
}); };
|
||
|
}
|
||
|
exports.id = id;
|
||
|
/**
|
||
|
* @category combinators
|
||
|
* @since 2.2.7
|
||
|
*/
|
||
|
function map(F) {
|
||
|
return function (f) { return function (ia) { return ({
|
||
|
decode: function (i) { return F.map(ia.decode(i), f); }
|
||
|
}); }; };
|
||
|
}
|
||
|
exports.map = map;
|
||
|
/**
|
||
|
* @category combinators
|
||
|
* @since 2.2.7
|
||
|
*/
|
||
|
function alt(A) {
|
||
|
return function (that) { return function (me) { return ({
|
||
|
decode: function (i) { return A.alt(me.decode(i), function () { return that().decode(i); }); }
|
||
|
}); }; };
|
||
|
}
|
||
|
exports.alt = alt;
|
||
|
// -------------------------------------------------------------------------------------
|
||
|
// utils
|
||
|
// -------------------------------------------------------------------------------------
|
||
|
var traverseArrayWithIndex = function (M) { return function (as, f) {
|
||
|
return as.reduce(function (mbs, a, i) {
|
||
|
return M.ap(M.map(mbs, function (bs) { return function (b) {
|
||
|
bs.push(b);
|
||
|
return bs;
|
||
|
}; }), f(i, a));
|
||
|
}, M.of([]));
|
||
|
}; };
|
||
|
var traverseRecordWithIndex = function (M) { return function (r, f) {
|
||
|
var ks = Object.keys(r);
|
||
|
if (ks.length === 0) {
|
||
|
return M.of({});
|
||
|
}
|
||
|
var fr = M.of({});
|
||
|
var _loop_2 = function (key) {
|
||
|
fr = M.ap(M.map(fr, function (r) { return function (b) {
|
||
|
r[key] = b;
|
||
|
return r;
|
||
|
}; }), f(key, r[key]));
|
||
|
};
|
||
|
for (var _i = 0, ks_1 = ks; _i < ks_1.length; _i++) {
|
||
|
var key = ks_1[_i];
|
||
|
_loop_2(key);
|
||
|
}
|
||
|
return fr;
|
||
|
}; };
|
||
|
var compactRecord = function (r) {
|
||
|
var out = {};
|
||
|
for (var k in r) {
|
||
|
var rk = r[k];
|
||
|
if (E.isRight(rk)) {
|
||
|
out[k] = rk.right;
|
||
|
}
|
||
|
}
|
||
|
return out;
|
||
|
};
|