UNPKG

@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
"use strict"; 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