UNPKG

github-release-info-downloader

Version:

Gets latest release download URL using the GitHub Releases API. It also shows when it was released and the download count.

125 lines (108 loc) 4.49 kB
'use strict'; var object = require('../../utils/object'); function factory (type, config, load, typed, math) { var MATRIX = ['Matrix', 'Array']; // valid values for option matrix var NUMBER = ['number', 'BigNumber', 'Fraction']; // valid values for option number /** * Set configuration options for math.js, and get current options. * Will emit a 'config' event, with arguments (curr, prev, changes). * * Syntax: * * math.config(config: Object): Object * * Examples: * * math.config().number; // outputs 'number' * math.eval('0.4'); // outputs number 0.4 * math.config({number: 'Fraction'}); * math.eval('0.4'); // outputs Fraction 2/5 * * @param {Object} [options] Available options: * {number} epsilon * Minimum relative difference between two * compared values, used by all comparison functions. * {string} matrix * A string 'Matrix' (default) or 'Array'. * {string} number * A string 'number' (default), 'BigNumber', or 'Fraction' * {number} precision * The number of significant digits for BigNumbers. * Not applicable for Numbers. * {string} parenthesis * How to display parentheses in LaTeX and string * output. * {string} randomSeed * Random seed for seeded pseudo random number generator. * Set to null to randomly seed. * @return {Object} Returns the current configuration */ function _config(options) { if (options) { var prev = object.map(config, object.clone); // validate some of the options validateOption(options, 'matrix', MATRIX); validateOption(options, 'number', NUMBER); // merge options object.deepExtend(config, options); var curr = object.map(config, object.clone); var changes = object.map(options, object.clone); // emit 'config' event math.emit('config', curr, prev, changes); return curr; } else { return object.map(config, object.clone); } } // attach the valid options to the function so they can be extended _config.MATRIX = MATRIX; _config.NUMBER = NUMBER; return _config; } /** * Test whether an Array contains a specific item. * @param {Array.<string>} array * @param {string} item * @return {boolean} */ function contains (array, item) { return array.indexOf(item) !== -1; } /** * Find a string in an array. Case insensitive search * @param {Array.<string>} array * @param {string} item * @return {number} Returns the index when found. Returns -1 when not found */ function findIndex (array, item) { return array .map(function (i) { return i.toLowerCase(); }) .indexOf(item.toLowerCase()); } /** * Validate an option * @param {Object} options Object with options * @param {string} name Name of the option to validate * @param {Array.<string>} values Array with valid values for this option */ function validateOption(options, name, values) { if (options[name] !== undefined && !contains(values, options[name])) { var index = findIndex(values, options[name]); if (index !== -1) { // right value, wrong casing // TODO: lower case values are deprecated since v3, remove this warning some day. console.warn('Warning: Wrong casing for configuration option "' + name + '", should be "' + values[index] + '" instead of "' + options[name] + '".'); options[name] = values[index]; // change the option to the right casing } else { // unknown value console.warn('Warning: Unknown value "' + options[name] + '" for configuration option "' + name + '". Available options: ' + values.map(JSON.stringify).join(', ') + '.'); } } } exports.name = 'config'; exports.math = true; // request the math namespace as fifth argument exports.factory = factory;