simple-squiggle

A restricted subset of Squiggle
Log | Files | Refs | README

numeric.js (2743B)


      1 "use strict";
      2 
      3 Object.defineProperty(exports, "__esModule", {
      4   value: true
      5 });
      6 exports.createNumeric = void 0;
      7 
      8 var _is = require("../../utils/is.js");
      9 
     10 var _factory = require("../../utils/factory.js");
     11 
     12 var _noop = require("../../utils/noop.js");
     13 
     14 var name = 'numeric';
     15 var dependencies = ['number', '?bignumber', '?fraction'];
     16 var createNumeric = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
     17   var _number = _ref.number,
     18       bignumber = _ref.bignumber,
     19       fraction = _ref.fraction;
     20   var validInputTypes = {
     21     string: true,
     22     number: true,
     23     BigNumber: true,
     24     Fraction: true
     25   }; // Load the conversion functions for each output type
     26 
     27   var validOutputTypes = {
     28     number: function number(x) {
     29       return _number(x);
     30     },
     31     BigNumber: bignumber ? function (x) {
     32       return bignumber(x);
     33     } : _noop.noBignumber,
     34     Fraction: fraction ? function (x) {
     35       return fraction(x);
     36     } : _noop.noFraction
     37   };
     38   /**
     39    * Convert a numeric input to a specific numeric type: number, BigNumber, or Fraction.
     40    *
     41    * Syntax:
     42    *
     43    *    math.numeric(x)
     44    *
     45    * Examples:
     46    *
     47    *    math.numeric('4')                           // returns number 4
     48    *    math.numeric('4', 'number')                 // returns number 4
     49    *    math.numeric('4', 'BigNumber')              // returns BigNumber 4
     50    *    math.numeric('4', 'Fraction')               // returns Fraction 4
     51    *    math.numeric(4, 'Fraction')                 // returns Fraction 4
     52    *    math.numeric(math.fraction(2, 5), 'number') // returns number 0.4
     53    *
     54    * See also:
     55    *
     56    *    number, fraction, bignumber, string, format
     57    *
     58    * @param {string | number | BigNumber | Fraction } value
     59    *              A numeric value or a string containing a numeric value
     60    * @param {string} outputType
     61    *              Desired numeric output type.
     62    *              Available values: 'number', 'BigNumber', or 'Fraction'
     63    * @return {number | BigNumber | Fraction}
     64    *              Returns an instance of the numeric in the requested type
     65    */
     66 
     67   return function numeric(value, outputType) {
     68     var inputType = (0, _is.typeOf)(value);
     69 
     70     if (!(inputType in validInputTypes)) {
     71       throw new TypeError('Cannot convert ' + value + ' of type "' + inputType + '"; valid input types are ' + Object.keys(validInputTypes).join(', '));
     72     }
     73 
     74     if (!(outputType in validOutputTypes)) {
     75       throw new TypeError('Cannot convert ' + value + ' to type "' + outputType + '"; valid output types are ' + Object.keys(validOutputTypes).join(', '));
     76     }
     77 
     78     if (outputType === inputType) {
     79       return value;
     80     } else {
     81       return validOutputTypes[outputType](value);
     82     }
     83   };
     84 });
     85 exports.createNumeric = createNumeric;