@epicallan/money-ts
Version:
TypeScript library for type-safe and lossless encoding and manipulation of world currencies and precious metals
62 lines • 3.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Rational = exports.PositiveRational = exports.NonZeroRational = exports.NonZeroInteger = exports.Natural = exports.Integer = exports.ExchangeRate = exports.getDiscrete = exports.getDense = exports.BigInteger = void 0;
var t = require("io-ts");
var D = require("./Discrete");
var BI = require("./BigInteger");
var NZR = require("./NonZeroRational");
var PR = require("./PositiveRational");
var RTN = require("./Rational");
var bigInteger = require("big-integer");
var function_1 = require("fp-ts/function");
var E = require("fp-ts/Either");
var O = require("fp-ts/Option");
var Dense_1 = require("./Dense");
var StringOrNumber = t.union([t.string, t.number]);
exports.BigInteger = new t.Type('BigInteger', function (m) { return m instanceof bigInteger; }, function (m, c) {
return function_1.pipe(StringOrNumber.validate(m, c), E.chain(function (s) {
return function_1.pipe(BI.wrap(s), O.fold(function () { return t.failure(s, c); }, t.success));
}));
}, function (a) { return a.toString(); });
var getDense = function (dimension) {
return new t.Type('Dense', function (m) { return m instanceof Dense_1.Dense && m.dimension === dimension; }, function (m, c) {
return function_1.pipe(exports.Rational.validate(m, c), E.map(function (r) { return new Dense_1.Dense(dimension, r); }));
}, function (a) { return exports.Rational.encode(a.value); });
};
exports.getDense = getDense;
var getDiscrete = function (dimension, unit) {
var format = { dimension: dimension, unit: unit };
return new t.Type('Discrete', function (m) { return m instanceof D.Discrete && m.format.dimension === dimension && m.format.unit === unit; }, function (m, c) {
return function_1.pipe(exports.Integer.validate(m, c), E.map(function (r) { return new D.Discrete(format, r); }));
}, function (a) { return exports.Integer.encode(a.value); });
};
exports.getDiscrete = getDiscrete;
var ExchangeRate = function () {
return function_1.unsafeCoerce(exports.PositiveRational);
};
exports.ExchangeRate = ExchangeRate;
exports.Integer = function_1.unsafeCoerce(exports.BigInteger);
exports.Natural = function_1.unsafeCoerce(t.refinement(exports.BigInteger, function (bi) { return bi.isPositive(); }, 'Natural'));
exports.NonZeroInteger = function_1.unsafeCoerce(t.refinement(exports.BigInteger, function (bi) { return !bi.isZero(); }, 'NonZeroInteger'));
var NonZeroRationalC = t.tuple([exports.NonZeroInteger, exports.Natural]);
exports.NonZeroRational = new t.Type('NonZeroRational', NonZeroRationalC.is, function (m, c) {
return function_1.pipe(NonZeroRationalC.validate(m, c), E.map(function (_a) {
var n = _a[0], d = _a[1];
return NZR.reduce(n, d);
}));
}, NonZeroRationalC.encode);
var PositiveRationalC = t.tuple([exports.Natural, exports.Natural]);
exports.PositiveRational = new t.Type('PositiveRational', PositiveRationalC.is, function (m, c) {
return function_1.pipe(PositiveRationalC.validate(m, c), E.map(function (_a) {
var n = _a[0], d = _a[1];
return PR.reduce(n, d);
}));
}, PositiveRationalC.encode);
var RationalC = t.tuple([exports.Integer, exports.Natural]);
exports.Rational = new t.Type('Rational', RationalC.is, function (m, c) {
return function_1.pipe(RationalC.validate(m, c), E.map(function (_a) {
var n = _a[0], d = _a[1];
return RTN.reduce(n, d);
}));
}, RationalC.encode);
//# sourceMappingURL=io-ts.js.map