simple-squiggle

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

numeric.js (2453B)


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