mirror of
https://github.com/josdejong/mathjs.git
synced 2026-01-18 14:59:29 +00:00
* Add `.js` extension to source file imports * Specify package `exports` in `package.json` Specify package type as `commonjs` (It's good to be specific) * Move all compiled scripts into `lib` directory Remove ./number.js (You can use the compiled ones in `./lib/*`) Tell node that the `esm` directory is type `module` and enable tree shaking. Remove unused files from packages `files` property * Allow importing of package.json * Make library ESM first * - Fix merge conflicts - Refactor `bundleAny` into `defaultInstance.js` and `browserBundle.cjs` - Refactor unit tests to be able to run with plain nodejs (no transpiling) - Fix browser examples * Fix browser and browserstack tests * Fix running unit tests on Node 10 (which has no support for modules) * Fix node.js examples (those are still commonjs) * Remove the need for `browserBundle.cjs` * Generate minified bundle only * [Security] Bump node-fetch from 2.6.0 to 2.6.1 (#1963) Bumps [node-fetch](https://github.com/bitinn/node-fetch) from 2.6.0 to 2.6.1. **This update includes a security fix.** - [Release notes](https://github.com/bitinn/node-fetch/releases) - [Changelog](https://github.com/node-fetch/node-fetch/blob/master/docs/CHANGELOG.md) - [Commits](https://github.com/bitinn/node-fetch/compare/v2.6.0...v2.6.1) Signed-off-by: dependabot-preview[bot] <support@dependabot.com> Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> * Cleanup console.log * Add integration tests to test the entry points (commonjs/esm, full/number only) * Create backward compatibility error messages in the files moved/removed since v8 * Describe breaking changes in HISTORY.md * Bump karma from 5.2.1 to 5.2.2 (#1965) Bumps [karma](https://github.com/karma-runner/karma) from 5.2.1 to 5.2.2. - [Release notes](https://github.com/karma-runner/karma/releases) - [Changelog](https://github.com/karma-runner/karma/blob/master/CHANGELOG.md) - [Commits](https://github.com/karma-runner/karma/compare/v5.2.1...v5.2.2) Signed-off-by: dependabot-preview[bot] <support@dependabot.com> Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> Co-authored-by: Lee Langley-Rees <lee@greenimp.co.uk> Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
113 lines
3.9 KiB
JavaScript
113 lines
3.9 KiB
JavaScript
import { clone, mapObject, deepExtend } from '../../utils/object.js'
|
|
import { DEFAULT_CONFIG } from '../config.js'
|
|
|
|
export const MATRIX_OPTIONS = ['Matrix', 'Array'] // valid values for option matrix
|
|
export const NUMBER_OPTIONS = ['number', 'BigNumber', 'Fraction'] // valid values for option number
|
|
|
|
export function configFactory (config, emit) {
|
|
/**
|
|
* Set configuration options for math.js, and get current options.
|
|
* Will emit a 'config' event, with arguments (curr, prev, changes).
|
|
*
|
|
* This function is only available on a mathjs instance created using `create`.
|
|
*
|
|
* Syntax:
|
|
*
|
|
* math.config(config: Object): Object
|
|
*
|
|
* Examples:
|
|
*
|
|
*
|
|
* import { create, all } from 'mathjs'
|
|
*
|
|
* // create a mathjs instance
|
|
* const math = create(all)
|
|
*
|
|
* math.config().number // outputs 'number'
|
|
* math.evaluate('0.4') // outputs number 0.4
|
|
* math.config({number: 'Fraction'})
|
|
* math.evaluate('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) {
|
|
const prev = mapObject(config, clone)
|
|
|
|
// validate some of the options
|
|
validateOption(options, 'matrix', MATRIX_OPTIONS)
|
|
validateOption(options, 'number', NUMBER_OPTIONS)
|
|
|
|
// merge options
|
|
deepExtend(config, options)
|
|
|
|
const curr = mapObject(config, clone)
|
|
|
|
const changes = mapObject(options, clone)
|
|
|
|
// emit 'config' event
|
|
emit('config', curr, prev, changes)
|
|
|
|
return curr
|
|
} else {
|
|
return mapObject(config, clone)
|
|
}
|
|
}
|
|
|
|
// attach the valid options to the function so they can be extended
|
|
_config.MATRIX_OPTIONS = MATRIX_OPTIONS
|
|
_config.NUMBER_OPTIONS = NUMBER_OPTIONS
|
|
|
|
// attach the config properties as readonly properties to the config function
|
|
Object.keys(DEFAULT_CONFIG).forEach(key => {
|
|
Object.defineProperty(_config, key, {
|
|
get: () => config[key],
|
|
enumerable: true,
|
|
configurable: true
|
|
})
|
|
})
|
|
|
|
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
|
|
}
|
|
|
|
/**
|
|
* 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])) {
|
|
// unknown value
|
|
console.warn('Warning: Unknown value "' + options[name] + '" for configuration option "' + name + '". ' +
|
|
'Available options: ' + values.map(value => JSON.stringify(value)).join(', ') + '.')
|
|
}
|
|
}
|