diff --git a/README.md b/README.md index 0a7b089..1cf2787 100644 --- a/README.md +++ b/README.md @@ -4,21 +4,15 @@ Solve math expressions or create equations for repeated and complex Math tasks. To use in browser, download [`equation.min.js`](https://raw.githubusercontent.com/mdibaiee/Equation/master/equation.min.js). -_A similar library I wrote in Haskell is also available [mathexpr](https://github.com/mdibaiee/mathexpr)_ - Install using npm: ``` npm install equations ``` -#### Examples: +####Examples: ```javascript -//import - -const Equation = require('equations').default - // solve console.log(Equation.solve('4 * lg(4) ^ 3')); // 32 @@ -57,31 +51,31 @@ For a list of operators and constants see [`operators.js`](https://github.com/md API === -#### solve(expression: String) +####solve(expression: String) Takes a math expression and evaluates it, returning the result. -#### equation(expression: String) +####equation(expression: String) Takes a math expression containing variables, returning a function which replaces the variables with given arguments, and solves the expression. -#### registerOperator(key: String, options: Object) +####registerOperator(key: String, options: Object) Registers a new operator. Options: -##### fn +#####fn The function which is run on arguments and returns the result -##### format +#####format The format which specifies how arguments are placed relative to operator, this is a string in which 1 represents the operator and zeroes represent arguments. For example `+` has the format `010` and factorial has `01`. -##### precedence +#####precedence Specifies the precedence of operator. The less the value, the higher the precedence, resulting in sooner execution. -#### registerConstant(key: String, value: Function/Number) +####registerConstant(key: String, value: Function/Number) Registers a new constant. value can be a function (takes no arguments), or a constant number. -That's right, we have named these *constants*, but they actually can change, that's why we can use functions to define them. An example is the `RAND` constant which calls `Math.random`. +That's right, we have named these *constants* but they actually can change, that's why we can use functions to define them. An example is the `RAND` constant which calls `Math.random`. Contributing ============ diff --git a/dist/constants.js b/dist/constants.js index 3bc379a..49630bb 100644 --- a/dist/constants.js +++ b/dist/constants.js @@ -1,17 +1,17 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); /* * Constats * Keys must be UPPERCASE * Values Can be a constant value or a function returning a value * this function doesn't take any arguments (use case: random constats) */ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); exports['default'] = { - 'PI': Math.PI, - 'E': Math.E, - 'RAND': Math.random + PI: Math.PI, + E: Math.E, + RAND: Math.random }; -module.exports = exports['default']; +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/helpers.js b/dist/helpers.js index 1c72262..11ad662 100644 --- a/dist/helpers.js +++ b/dist/helpers.js @@ -17,7 +17,17 @@ var isNumber = function isNumber(a) { }; exports.isNumber = isNumber; -var parseNumbers = function parseNumbers(a) { +var parseNumbers = (function (_parseNumbers) { + function parseNumbers(_x) { + return _parseNumbers.apply(this, arguments); + } + + parseNumbers.toString = function () { + return _parseNumbers.toString(); + }; + + return parseNumbers; +})(function (a) { return a.map(function (b) { if (isNumber(b)) { return parseFloat(b); @@ -27,7 +37,7 @@ var parseNumbers = function parseNumbers(a) { } return b; }); -}; +}); exports.parseNumbers = parseNumbers; var dive = function dive(arr, n) { @@ -39,8 +49,18 @@ var dive = function dive(arr, n) { }; exports.dive = dive; -var deep = function deep(arr, n) { - var index = arguments.length <= 2 || arguments[2] === undefined ? 0 : arguments[2]; +var deep = (function (_deep) { + function deep(_x2, _x3) { + return _deep.apply(this, arguments); + } + + deep.toString = function () { + return _deep.toString(); + }; + + return deep; +})(function (arr, n) { + var index = arguments[2] === undefined ? 0 : arguments[2]; if (n < 2) { return { arr: arr, index: index }; @@ -48,10 +68,10 @@ var deep = function deep(arr, n) { var d = arr.reduce(function (a, b, i) { if (Array.isArray(b)) { - var _deep = deep(b, n - 1, i); + var _deep2 = deep(b, n - 1, i); - var _arr = _deep.arr; - var x = _deep.index; + var _arr = _deep2.arr; + var x = _deep2.index; var merged = a.concat(_arr); index = x; @@ -61,10 +81,20 @@ var deep = function deep(arr, n) { }, []); return { arr: d, index: index }; -}; +}); exports.deep = deep; -var diveTo = function diveTo(arr, indexes, replace) { +var diveTo = (function (_diveTo) { + function diveTo(_x4, _x5, _x6) { + return _diveTo.apply(this, arguments); + } + + diveTo.toString = function () { + return _diveTo.toString(); + }; + + return diveTo; +})(function (arr, indexes, replace) { var answer = []; if (indexes.some(Array.isArray)) { var _iteratorNormalCompletion = true; @@ -97,10 +127,20 @@ var diveTo = function diveTo(arr, indexes, replace) { } return answer; -}; +}); exports.diveTo = diveTo; -var flatten = function flatten(arr) { +var flatten = (function (_flatten) { + function flatten(_x7) { + return _flatten.apply(this, arguments); + } + + flatten.toString = function () { + return _flatten.toString(); + }; + + return flatten; +})(function (arr) { if (!Array.isArray(arr) || !arr.some(Array.isArray)) { return arr; } @@ -108,10 +148,10 @@ var flatten = function flatten(arr) { return arr.reduce(function (a, b) { return a.concat(flatten(b)); }, []); -}; +}); exports.flatten = flatten; var removeSymbols = function removeSymbols(string) { return string.toString().replace(/\W/g, ''); }; -exports.removeSymbols = removeSymbols; +exports.removeSymbols = removeSymbols; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index b0573d3..0883da4 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,34 +1,30 @@ 'use strict'; +var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; + +var _slicedToArray = function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; + +var _toConsumableArray = function (arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }; + Object.defineProperty(exports, '__esModule', { value: true }); -var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })(); +var _ReadStream = require('./readstream'); -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } } - -require('babel/polyfill'); - -var _readstream = require('./readstream'); - -var _readstream2 = _interopRequireDefault(_readstream); +var _ReadStream2 = _interopRequireWildcard(_ReadStream); var _operators = require('./operators'); -var _operators2 = _interopRequireDefault(_operators); +var _operators2 = _interopRequireWildcard(_operators); var _constants = require('./constants'); -var _constants2 = _interopRequireDefault(_constants); +var _constants2 = _interopRequireWildcard(_constants); -var _helpers = require('./helpers'); +var _import = require('./helpers'); -var _ = _interopRequireWildcard(_helpers); +var _ = _interopRequireWildcard(_import); var Equation = { /** @@ -120,36 +116,36 @@ var Equation = { } }; -var solveStack = function solveStack(_x) { - var _again = true; +var solveStack = (function (_solveStack) { + function solveStack(_x) { + return _solveStack.apply(this, arguments); + } - _function: while (_again) { - var stack = _x; - _again = false; + solveStack.toString = function () { + return _solveStack.toString(); + }; - // if an operator takes an expression argument, we should not dive into it - // and solve the expression inside - var hasExpressionArgument = stack.some(function (a) { - return _operators2['default'][a] && _operators2['default'][a].hasExpression; + return solveStack; +})(function (stack) { + // if an operator takes an expression argument, we should not dive into it + // and solve the expression inside + var hasExpressionArgument = stack.some(function (a) { + return _operators2['default'][a] && _operators2['default'][a].hasExpression; + }); + + if (!hasExpressionArgument && stack.some(Array.isArray)) { + stack = stack.map(function (group) { + if (!Array.isArray(group)) { + return group; + } + return solveStack(group); }); - if (!hasExpressionArgument && stack.some(Array.isArray)) { - stack = stack.map(function (group) { - if (!Array.isArray(group)) { - return group; - } - return solveStack(group); - }); - - _x = stack; - _again = true; - hasExpressionArgument = undefined; - continue _function; - } else { - return evaluate(stack); - } + return solveStack(stack); + } else { + return evaluate(stack); } -}; +}); var PRECEDENCES = Object.keys(_operators2['default']).map(function (key) { return _operators2['default'][key].precedence; @@ -175,7 +171,7 @@ var parseExpression = function parseExpression(expression) { // separately expression = expression.replace(/,/g, ')('); - var stream = new _readstream2['default'](expression), + var stream = new _ReadStream2['default'](expression), stack = [], record = '', cur = undefined, @@ -205,30 +201,30 @@ var parseExpression = function parseExpression(expression) { // numbers and decimals } else if (_.isNumber(stack[past]) && (_.isNumber(cur) || cur === '.')) { + stack[past] += cur; + + // negation sign + } else if (stack[past] === '-') { + var beforeSign = stack[past - 1]; + + // 2 / -5 is OK, pass + if (_operators2['default'][beforeSign]) { stack[past] += cur; - // negation sign - } else if (stack[past] === '-') { - var beforeSign = stack[past - 1]; + // (2+1) - 5 becomes (2+1) + -5 + } else if (beforeSign === ')') { + stack[past] = '+'; + stack.push('-' + cur); - // 2 / -5 is OK, pass - if (_operators2['default'][beforeSign]) { - stack[past] += cur; - - // (2+1) - 5 becomes (2+1) + -5 - } else if (beforeSign === ')') { - stack[past] = '+'; - stack.push('-' + cur); - - // 2 - 5 is also OK, pass - } else if (_.isNumber(beforeSign) || isVariable(beforeSign)) { - stack.push(cur); - } else { - stack[past] += cur; - } - } else { - stack.push(cur); - } + // 2 - 5 is also OK, pass + } else if (_.isNumber(beforeSign)) { + stack.push(cur); + } else { + stack[past] += cur; + } + } else { + stack.push(cur); + } } if (record.length) { var beforeRecord = past - (record.length - 1); @@ -306,7 +302,17 @@ var formatInfo = function formatInfo(operator) { * @return {Array} * Grouped expression based on precedences */ -var sortStack = function sortStack(stack) { +var sortStack = (function (_sortStack) { + function sortStack(_x2) { + return _sortStack.apply(this, arguments); + } + + sortStack.toString = function () { + return _sortStack.toString(); + }; + + return sortStack; +})(function (stack) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; @@ -363,7 +369,7 @@ var sortStack = function sortStack(stack) { } return stack; -}; +}); /** * Evaluates the given math expression. @@ -470,11 +476,9 @@ var fixFloat = function fixFloat(number) { * @return {Boolean} * true if variable, else false */ - -var SPECIALS = '()[]{}'.split(''); var isVariable = function isVariable(a) { - return typeof a === 'string' && !_.isNumber(a) && !_operators2['default'][a] && a === a.toLowerCase() && SPECIALS.indexOf(a) === -1; + return typeof a === 'string' && !_.isNumber(a) && !_operators2['default'][a] && a === a.toLowerCase(); }; exports.isVariable = isVariable; -exports['default'] = Equation; +exports['default'] = Equation; \ No newline at end of file diff --git a/dist/operators.js b/dist/operators.js index 511f985..20d2257 100644 --- a/dist/operators.js +++ b/dist/operators.js @@ -1,14 +1,14 @@ 'use strict'; +var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; + Object.defineProperty(exports, '__esModule', { value: true }); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } +var _Equation = require('./index'); -var _index = require('./index'); - -var _index2 = _interopRequireDefault(_index); +var _Equation2 = _interopRequireWildcard(_Equation); /* * Operators and Functions @@ -77,7 +77,7 @@ exports['default'] = { '!': { fn: function fn(a) { var sum = 1; - for (var i = 1; i <= a; ++i) { + for (var i = 0; i < a; ++i) { sum *= i; } return sum; @@ -85,61 +85,61 @@ exports['default'] = { format: '01', precedence: 2 }, - 'log': { + log: { fn: Math.log, format: '10', precedence: -1 }, - 'ln': { + ln: { fn: Math.log, format: '10', precedence: -1 }, - 'lg': { + lg: { fn: function fn(a) { return Math.log(a) / Math.log(2); }, format: '10', precedence: -1 }, - 'sin': { + sin: { fn: Math.sin, format: '10', precedence: -1 }, - 'cos': { + cos: { fn: Math.cos, format: '10', precedence: -1 }, - 'tan': { + tan: { fn: Math.tan, format: '10', precedence: -1 }, - 'cot': { + cot: { fn: Math.cot, format: '10', precedence: -1 }, - 'round': { + round: { fn: Math.round, format: '10', precedence: -1 }, - 'floor': { + floor: { fn: Math.floor, format: '10', precedence: -1 }, - 'sigma': { + sigma: { fn: function fn(from, to, expression) { var expr = expression.join('').replace(/,/g, ''); var regex = new RegExp(ITERATOR_SIGN, 'g'); var sum = 0; for (var i = from; i <= to; i++) { - sum += _index2['default'].solve(expr.replace(regex, i)); + sum += _Equation2['default'].solve(expr.replace(regex, i)); } return sum; }, @@ -150,4 +150,4 @@ exports['default'] = { }; var ITERATOR_SIGN = '@'; -module.exports = exports['default']; +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/readstream.js b/dist/readstream.js index 2b13499..7aef97a 100644 --- a/dist/readstream.js +++ b/dist/readstream.js @@ -33,13 +33,23 @@ exports['default'] = function (string) { drain: function drain() { return buffer.splice(0, buffer.length); }, - replace: function replace(start, end, _replace) { + replace: (function (_replace) { + function replace(_x, _x2, _x3) { + return _replace.apply(this, arguments); + } + + replace.toString = function () { + return _replace.toString(); + }; + + return replace; + })(function (start, end, replace) { var temp = string.split(''); - temp.splice(start, end, _replace); + temp.splice(start, end, replace); string = temp.join(''); i = i - (end - start); - }, + }), go: function go(n) { i += n; }, @@ -49,4 +59,4 @@ exports['default'] = function (string) { }; }; -module.exports = exports['default']; +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/tests/equation.js b/dist/tests/equation.js index 8761038..c018fbb 100644 --- a/dist/tests/equation.js +++ b/dist/tests/equation.js @@ -1,46 +1,42 @@ 'use strict'; -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } +var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; -var _chai = require('chai'); +var _expect = require('chai'); -var _indexJs = require('../index.js'); +var _M = require('../index.js'); -var _indexJs2 = _interopRequireDefault(_indexJs); +var _M2 = _interopRequireWildcard(_M); describe('Equations', function () { it('should work with one variable', function () { - var equation = _indexJs2['default'].equation('x+2'); + var equation = _M2['default'].equation('x+2'); - (0, _chai.expect)(equation(2)).to.equal(4); - - // Issue #10 - var subtraction = _indexJs2['default'].equation('x - 3'); - (0, _chai.expect)(subtraction(10)).to.equal(7); + _expect.expect(equation(2)).to.equal(4); }); it('should work with multiple variables', function () { - var equation = _indexJs2['default'].equation('x+y'); - (0, _chai.expect)(equation(2, 4)).to.equal(6); + var equation = _M2['default'].equation('x+y'); + _expect.expect(equation(2, 4)).to.equal(6); }); it('should work with multiple instances of the same variable', function () { - var equation = _indexJs2['default'].equation('x*x'); - (0, _chai.expect)(equation(4)).to.equal(16); + var equation = _M2['default'].equation('x*x'); + _expect.expect(equation(4)).to.equal(16); }); it('should only accept lowercase letters', function () { - var equation = _indexJs2['default'].equation('X+2'); - (0, _chai.expect)(equation).to['throw'](); + var equation = _M2['default'].equation('X+2'); + _expect.expect(equation).to['throw'](); }); it('should work with NumVariable expressions like 2x', function () { - var equation = _indexJs2['default'].equation('2x + 6y'); - (0, _chai.expect)(equation(4, 3)).to.equal(8 + 18); + var equation = _M2['default'].equation('2x + 6y'); + _expect.expect(equation(4, 3)).to.equal(8 + 18); }); it('Test case', function () { - var equation = _indexJs2['default'].equation('2+x*(y+4)+z^2'); - (0, _chai.expect)(equation(2, 4, 3)).to.equal(27); + var equation = _M2['default'].equation('2+x*(y+4)+z^2'); + _expect.expect(equation(2, 4, 3)).to.equal(27); }); -}); +}); \ No newline at end of file diff --git a/dist/tests/solve.js b/dist/tests/solve.js index 5402bc4..d10e6cd 100644 --- a/dist/tests/solve.js +++ b/dist/tests/solve.js @@ -1,116 +1,116 @@ 'use strict'; -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } +var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; -var _chai = require('chai'); +var _expect = require('chai'); -var _indexJs = require('../index.js'); +var _M = require('../index.js'); -var _indexJs2 = _interopRequireDefault(_indexJs); +var _M2 = _interopRequireWildcard(_M); describe('Basic math operators', function () { it('should work for add +', function () { - (0, _chai.expect)(_indexJs2['default'].solve('2+2')).to.equal(4); + _expect.expect(_M2['default'].solve('2+2')).to.equal(4); }); it('should work for minus -', function () { - (0, _chai.expect)(_indexJs2['default'].solve('15-3')).to.equal(12); + _expect.expect(_M2['default'].solve('15-3')).to.equal(12); }); it('should work for divison /', function () { - (0, _chai.expect)(_indexJs2['default'].solve('20/2')).to.equal(10); + _expect.expect(_M2['default'].solve('20/2')).to.equal(10); }); it('should work for multiplication *', function () { - (0, _chai.expect)(_indexJs2['default'].solve('6*3')).to.equal(18); + _expect.expect(_M2['default'].solve('6*3')).to.equal(18); }); it('should work for power ^', function () { - (0, _chai.expect)(_indexJs2['default'].solve('5^2')).to.equal(25); + _expect.expect(_M2['default'].solve('5^2')).to.equal(25); }); it('should work for multi-digit numbers', function () { - (0, _chai.expect)(_indexJs2['default'].solve('12+15')).to.equal(27); + _expect.expect(_M2['default'].solve('12+15')).to.equal(27); }); it('should deal with floating precision of javascript - #5', function () { - (0, _chai.expect)(_indexJs2['default'].solve('0.2 + 0.1')).to.equal(0.3); - (0, _chai.expect)(_indexJs2['default'].solve('0.2 + 0.4')).to.equal(0.6); - (0, _chai.expect)(_indexJs2['default'].solve('round(floor(1.23456789/0.2)) * 0.2')).to.equal(1.2); - (0, _chai.expect)(_indexJs2['default'].solve('1.23456789 - (1.23456789 % 0.2)')).to.equal(1.2); + _expect.expect(_M2['default'].solve('0.2 + 0.1')).to.equal(0.3); + _expect.expect(_M2['default'].solve('0.2 + 0.4')).to.equal(0.6); + _expect.expect(_M2['default'].solve('round(floor(1.23456789/0.2)) * 0.2')).to.equal(1.2); + _expect.expect(_M2['default'].solve('1.23456789 - (1.23456789 % 0.2)')).to.equal(1.2); }); }); describe('Negative Numbers', function () { it('should work for negative numbers after operators', function () { - (0, _chai.expect)(_indexJs2['default'].solve('2 + -5')).to.equal(-3); + _expect.expect(_M2['default'].solve('2 + -5')).to.equal(-3); }); it('should work for negative numbers after groups', function () { - (0, _chai.expect)(_indexJs2['default'].solve('1 + (2 - 5) - 2')).to.equal(-4); + _expect.expect(_M2['default'].solve('1 + (2 - 5) - 2')).to.equal(-4); }); it('should work for expressions starting with negative numbers', function () { - (0, _chai.expect)(_indexJs2['default'].solve('-2 + 1')).to.equal(-1); + _expect.expect(_M2['default'].solve('-2 + 1')).to.equal(-1); }); }); describe('Precedence', function () { it('Test case 1', function () { - (0, _chai.expect)(_indexJs2['default'].solve('2+(2+1)*(1+1)^2')).to.equal(14); + _expect.expect(_M2['default'].solve('2+(2+1)*(1+1)^2')).to.equal(14); }); it('Test case 2', function () { - (0, _chai.expect)(_indexJs2['default'].solve('2+5*4/2-2')).to.equal(10); + _expect.expect(_M2['default'].solve('2+5*4/2-2')).to.equal(10); }); it('Test case 3', function () { - (0, _chai.expect)(_indexJs2['default'].solve('2+(5*4/2)-2')).to.equal(10); + _expect.expect(_M2['default'].solve('2+(5*4/2)-2')).to.equal(10); }); it('Test case 4', function () { - (0, _chai.expect)(_indexJs2['default'].solve('(2+2)^2+(5+1)*4+(2+(4/2)/2)')).to.equal(16 + 24 + 3); + _expect.expect(_M2['default'].solve('(2+2)^2+(5+1)*4+(2+(4/2)/2)')).to.equal(16 + 24 + 3); }); }); describe('Functions', function () { it('should work with parantheses', function () { - (0, _chai.expect)(_indexJs2['default'].solve('lg(4) * 5')).to.equal(10); + _expect.expect(_M2['default'].solve('lg(4) * 5')).to.equal(10); }); it('should work without parantheses', function () { - (0, _chai.expect)(_indexJs2['default'].solve('lg4 * 5')).to.equal(10); + _expect.expect(_M2['default'].solve('lg4 * 5')).to.equal(10); }); it('should work for wrapped functions', function () { - (0, _chai.expect)(_indexJs2['default'].solve('(lg4)*2')).to.equal(4); + _expect.expect(_M2['default'].solve('(lg4)*2')).to.equal(4); }); }); describe('Constats', function () { it('should work for constant values', function () { - (0, _chai.expect)(_indexJs2['default'].solve('sin(PI/2)')).to.equal(1); + _expect.expect(_M2['default'].solve('sin(PI/2)')).to.equal(1); }); it('should work for functions as constants - retry on fail', function () { - (0, _chai.expect)(_indexJs2['default'].solve('RAND')).to.not.equal(_indexJs2['default'].solve('RAND')); + _expect.expect(_M2['default'].solve('RAND')).to.not.equal(_M2['default'].solve('RAND')); }); }); describe('Sigma', function () { it('should work with simple expressions', function () { - (0, _chai.expect)(_indexJs2['default'].solve('sigma(0, 5, @)')).to.equal(15); + _expect.expect(_M2['default'].solve('sigma(0, 5, @)')).to.equal(15); }); it('should work with more complex expressions', function () { - (0, _chai.expect)(_indexJs2['default'].solve('sigma(0, 2, 2@+5)')).to.equal(21); + _expect.expect(_M2['default'].solve('sigma(0, 2, 2@+5)')).to.equal(21); }); it('should work without an iterator sign', function () { - (0, _chai.expect)(_indexJs2['default'].solve('sigma(0, 2, 5*2)')).to.equal(30); + _expect.expect(_M2['default'].solve('sigma(0, 2, 5*2)')).to.equal(30); }); it('should work with negative start / end points', function () { - (0, _chai.expect)(_indexJs2['default'].solve('sigma(-5, -2, @)')).to.equal(-14); + _expect.expect(_M2['default'].solve('sigma(-5, -2, @)')).to.equal(-14); }); -}); +}); \ No newline at end of file diff --git a/equation.js b/equation.js index 2ee5883..15c95de 100644 --- a/equation.js +++ b/equation.js @@ -1,22 +1,21 @@ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Equation = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 7x^2 + simplify: function simplify(expression) { + var stack = parseExpression(expression); + + console.log(stack); + }, + registerOperator: function registerOperator(key, options) { _operators2['default'][key] = options; }, @@ -259,36 +300,36 @@ var Equation = { } }; -var solveStack = function solveStack(_x) { - var _again = true; +var solveStack = (function (_solveStack) { + function solveStack(_x) { + return _solveStack.apply(this, arguments); + } - _function: while (_again) { - var stack = _x; - _again = false; + solveStack.toString = function () { + return _solveStack.toString(); + }; - // if an operator takes an expression argument, we should not dive into it - // and solve the expression inside - var hasExpressionArgument = stack.some(function (a) { - return _operators2['default'][a] && _operators2['default'][a].hasExpression; + return solveStack; +})(function (stack) { + // if an operator takes an expression argument, we should not dive into it + // and solve the expression inside + var hasExpressionArgument = stack.some(function (a) { + return _operators2['default'][a] && _operators2['default'][a].hasExpression; + }); + + if (!hasExpressionArgument && stack.some(Array.isArray)) { + stack = stack.map(function (group) { + if (!Array.isArray(group)) { + return group; + } + return solveStack(group); }); - if (!hasExpressionArgument && stack.some(Array.isArray)) { - stack = stack.map(function (group) { - if (!Array.isArray(group)) { - return group; - } - return solveStack(group); - }); - - _x = stack; - _again = true; - hasExpressionArgument = undefined; - continue _function; - } else { - return evaluate(stack); - } + return solveStack(stack); + } else { + return evaluate(stack); } -}; +}); var PRECEDENCES = Object.keys(_operators2['default']).map(function (key) { return _operators2['default'][key].precedence; @@ -314,7 +355,7 @@ var parseExpression = function parseExpression(expression) { // separately expression = expression.replace(/,/g, ')('); - var stream = new _readstream2['default'](expression), + var stream = new _ReadStream2['default'](expression), stack = [], record = '', cur = undefined, @@ -344,30 +385,30 @@ var parseExpression = function parseExpression(expression) { // numbers and decimals } else if (_.isNumber(stack[past]) && (_.isNumber(cur) || cur === '.')) { + stack[past] += cur; + + // negation sign + } else if (stack[past] === '-') { + var beforeSign = stack[past - 1]; + + // 2 / -5 is OK, pass + if (_operators2['default'][beforeSign]) { stack[past] += cur; - // negation sign - } else if (stack[past] === '-') { - var beforeSign = stack[past - 1]; + // (2+1) - 5 becomes (2+1) + -5 + } else if (beforeSign === ')') { + stack[past] = '+'; + stack.push('-' + cur); - // 2 / -5 is OK, pass - if (_operators2['default'][beforeSign]) { - stack[past] += cur; - - // (2+1) - 5 becomes (2+1) + -5 - } else if (beforeSign === ')') { - stack[past] = '+'; - stack.push('-' + cur); - - // 2 - 5 is also OK, pass - } else if (_.isNumber(beforeSign) || isVariable(beforeSign)) { - stack.push(cur); - } else { - stack[past] += cur; - } - } else { - stack.push(cur); - } + // 2 - 5 is also OK, pass + } else if (_.isNumber(beforeSign)) { + stack.push(cur); + } else { + stack[past] += cur; + } + } else { + stack.push(cur); + } } if (record.length) { var beforeRecord = past - (record.length - 1); @@ -445,7 +486,17 @@ var formatInfo = function formatInfo(operator) { * @return {Array} * Grouped expression based on precedences */ -var sortStack = function sortStack(stack) { +var sortStack = (function (_sortStack) { + function sortStack(_x2) { + return _sortStack.apply(this, arguments); + } + + sortStack.toString = function () { + return _sortStack.toString(); + }; + + return sortStack; +})(function (stack) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; @@ -502,7 +553,7 @@ var sortStack = function sortStack(stack) { } return stack; -}; +}); /** * Evaluates the given math expression. @@ -609,27 +660,24 @@ var fixFloat = function fixFloat(number) { * @return {Boolean} * true if variable, else false */ - -var SPECIALS = '()[]{}'.split(''); var isVariable = function isVariable(a) { - return typeof a === 'string' && !_.isNumber(a) && !_operators2['default'][a] && a === a.toLowerCase() && SPECIALS.indexOf(a) === -1; + return typeof a === 'string' && !_.isNumber(a) && !_operators2['default'][a] && a === a.toLowerCase(); }; exports.isVariable = isVariable; exports['default'] = Equation; - -},{"./constants":1,"./helpers":2,"./operators":4,"./readstream":5,"babel/polyfill":8}],4:[function(require,module,exports){ +},{"./constants":1,"./helpers":2,"./operators":4,"./readstream":5}],4:[function(require,module,exports){ 'use strict'; +var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; + Object.defineProperty(exports, '__esModule', { value: true }); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } +var _Equation = require('equation'); -var _index = require('./index'); - -var _index2 = _interopRequireDefault(_index); +var _Equation2 = _interopRequireWildcard(_Equation); /* * Operators and Functions @@ -698,7 +746,7 @@ exports['default'] = { '!': { fn: function fn(a) { var sum = 1; - for (var i = 1; i <= a; ++i) { + for (var i = 0; i < a; ++i) { sum *= i; } return sum; @@ -706,61 +754,61 @@ exports['default'] = { format: '01', precedence: 2 }, - 'log': { + log: { fn: Math.log, format: '10', precedence: -1 }, - 'ln': { + ln: { fn: Math.log, format: '10', precedence: -1 }, - 'lg': { + lg: { fn: function fn(a) { return Math.log(a) / Math.log(2); }, format: '10', precedence: -1 }, - 'sin': { + sin: { fn: Math.sin, format: '10', precedence: -1 }, - 'cos': { + cos: { fn: Math.cos, format: '10', precedence: -1 }, - 'tan': { + tan: { fn: Math.tan, format: '10', precedence: -1 }, - 'cot': { + cot: { fn: Math.cot, format: '10', precedence: -1 }, - 'round': { + round: { fn: Math.round, format: '10', precedence: -1 }, - 'floor': { + floor: { fn: Math.floor, format: '10', precedence: -1 }, - 'sigma': { + sigma: { fn: function fn(from, to, expression) { var expr = expression.join('').replace(/,/g, ''); var regex = new RegExp(ITERATOR_SIGN, 'g'); var sum = 0; for (var i = from; i <= to; i++) { - sum += _index2['default'].solve(expr.replace(regex, i)); + sum += _Equation2['default'].solve(expr.replace(regex, i)); } return sum; }, @@ -772,8 +820,7 @@ exports['default'] = { var ITERATOR_SIGN = '@'; module.exports = exports['default']; - -},{"./index":3}],5:[function(require,module,exports){ +},{"equation":8}],5:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, '__esModule', { @@ -809,13 +856,23 @@ exports['default'] = function (string) { drain: function drain() { return buffer.splice(0, buffer.length); }, - replace: function replace(start, end, _replace) { + replace: (function (_replace) { + function replace(_x, _x2, _x3) { + return _replace.apply(this, arguments); + } + + replace.toString = function () { + return _replace.toString(); + }; + + return replace; + })(function (start, end, replace) { var temp = string.split(''); - temp.splice(start, end, _replace); + temp.splice(start, end, replace); string = temp.join(''); i = i - (end - start); - }, + }), go: function go(n) { i += n; }, @@ -826,4615 +883,15 @@ exports['default'] = function (string) { }; module.exports = exports['default']; - },{}],6:[function(require,module,exports){ -(function (global){ -"use strict"; - -require("core-js/shim"); - -require("regenerator/runtime"); - -if (global._babelPolyfill) { - throw new Error("only one instance of babel/polyfill is allowed"); -} -global._babelPolyfill = true; -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"core-js/shim":195,"regenerator/runtime":197}],7:[function(require,module,exports){ -module.exports = require("./lib/polyfill"); - -},{"./lib/polyfill":6}],8:[function(require,module,exports){ -module.exports = require("babel-core/polyfill"); - -},{"babel-core/polyfill":7}],9:[function(require,module,exports){ -module.exports = function(it){ - if(typeof it != 'function')throw TypeError(it + ' is not a function!'); - return it; -}; -},{}],10:[function(require,module,exports){ -// 22.1.3.31 Array.prototype[@@unscopables] -var UNSCOPABLES = require('./$.wks')('unscopables') - , ArrayProto = Array.prototype; -if(ArrayProto[UNSCOPABLES] == undefined)require('./$.hide')(ArrayProto, UNSCOPABLES, {}); -module.exports = function(key){ - ArrayProto[UNSCOPABLES][key] = true; -}; -},{"./$.hide":38,"./$.wks":90}],11:[function(require,module,exports){ -var isObject = require('./$.is-object'); -module.exports = function(it){ - if(!isObject(it))throw TypeError(it + ' is not an object!'); - return it; -}; -},{"./$.is-object":45}],12:[function(require,module,exports){ -// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length) -'use strict'; -var toObject = require('./$.to-object') - , toIndex = require('./$.to-index') - , toLength = require('./$.to-length'); - -module.exports = [].copyWithin || function copyWithin(target/*= 0*/, start/*= 0, end = @length*/){ - var O = toObject(this) - , len = toLength(O.length) - , to = toIndex(target, len) - , from = toIndex(start, len) - , $$ = arguments - , end = $$.length > 2 ? $$[2] : undefined - , count = Math.min((end === undefined ? len : toIndex(end, len)) - from, len - to) - , inc = 1; - if(from < to && to < from + count){ - inc = -1; - from += count - 1; - to += count - 1; - } - while(count-- > 0){ - if(from in O)O[to] = O[from]; - else delete O[to]; - to += inc; - from += inc; - } return O; -}; -},{"./$.to-index":83,"./$.to-length":86,"./$.to-object":87}],13:[function(require,module,exports){ -// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length) -'use strict'; -var toObject = require('./$.to-object') - , toIndex = require('./$.to-index') - , toLength = require('./$.to-length'); -module.exports = [].fill || function fill(value /*, start = 0, end = @length */){ - var O = toObject(this) - , length = toLength(O.length) - , $$ = arguments - , $$len = $$.length - , index = toIndex($$len > 1 ? $$[1] : undefined, length) - , end = $$len > 2 ? $$[2] : undefined - , endPos = end === undefined ? length : toIndex(end, length); - while(endPos > index)O[index++] = value; - return O; -}; -},{"./$.to-index":83,"./$.to-length":86,"./$.to-object":87}],14:[function(require,module,exports){ -// false -> Array#indexOf -// true -> Array#includes -var toIObject = require('./$.to-iobject') - , toLength = require('./$.to-length') - , toIndex = require('./$.to-index'); -module.exports = function(IS_INCLUDES){ - return function($this, el, fromIndex){ - var O = toIObject($this) - , length = toLength(O.length) - , index = toIndex(fromIndex, length) - , value; - // Array#includes uses SameValueZero equality algorithm - if(IS_INCLUDES && el != el)while(length > index){ - value = O[index++]; - if(value != value)return true; - // Array#toIndex ignores holes, Array#includes - not - } else for(;length > index; index++)if(IS_INCLUDES || index in O){ - if(O[index] === el)return IS_INCLUDES || index; - } return !IS_INCLUDES && -1; - }; -}; -},{"./$.to-index":83,"./$.to-iobject":85,"./$.to-length":86}],15:[function(require,module,exports){ -// 0 -> Array#forEach -// 1 -> Array#map -// 2 -> Array#filter -// 3 -> Array#some -// 4 -> Array#every -// 5 -> Array#find -// 6 -> Array#findIndex -var ctx = require('./$.ctx') - , IObject = require('./$.iobject') - , toObject = require('./$.to-object') - , toLength = require('./$.to-length') - , asc = require('./$.array-species-create'); -module.exports = function(TYPE){ - var IS_MAP = TYPE == 1 - , IS_FILTER = TYPE == 2 - , IS_SOME = TYPE == 3 - , IS_EVERY = TYPE == 4 - , IS_FIND_INDEX = TYPE == 6 - , NO_HOLES = TYPE == 5 || IS_FIND_INDEX; - return function($this, callbackfn, that){ - var O = toObject($this) - , self = IObject(O) - , f = ctx(callbackfn, that, 3) - , length = toLength(self.length) - , index = 0 - , result = IS_MAP ? asc($this, length) : IS_FILTER ? asc($this, 0) : undefined - , val, res; - for(;length > index; index++)if(NO_HOLES || index in self){ - val = self[index]; - res = f(val, index, O); - if(TYPE){ - if(IS_MAP)result[index] = res; // map - else if(res)switch(TYPE){ - case 3: return true; // some - case 5: return val; // find - case 6: return index; // findIndex - case 2: result.push(val); // filter - } else if(IS_EVERY)return false; // every - } - } - return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; - }; -}; -},{"./$.array-species-create":16,"./$.ctx":24,"./$.iobject":41,"./$.to-length":86,"./$.to-object":87}],16:[function(require,module,exports){ -// 9.4.2.3 ArraySpeciesCreate(originalArray, length) -var isObject = require('./$.is-object') - , isArray = require('./$.is-array') - , SPECIES = require('./$.wks')('species'); -module.exports = function(original, length){ - var C; - if(isArray(original)){ - C = original.constructor; - // cross-realm fallback - if(typeof C == 'function' && (C === Array || isArray(C.prototype)))C = undefined; - if(isObject(C)){ - C = C[SPECIES]; - if(C === null)C = undefined; - } - } return new (C === undefined ? Array : C)(length); -}; -},{"./$.is-array":43,"./$.is-object":45,"./$.wks":90}],17:[function(require,module,exports){ -// getting tag from 19.1.3.6 Object.prototype.toString() -var cof = require('./$.cof') - , TAG = require('./$.wks')('toStringTag') - // ES3 wrong here - , ARG = cof(function(){ return arguments; }()) == 'Arguments'; - -module.exports = function(it){ - var O, T, B; - return it === undefined ? 'Undefined' : it === null ? 'Null' - // @@toStringTag case - : typeof (T = (O = Object(it))[TAG]) == 'string' ? T - // builtinTag case - : ARG ? cof(O) - // ES3 arguments fallback - : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; -}; -},{"./$.cof":18,"./$.wks":90}],18:[function(require,module,exports){ -var toString = {}.toString; - -module.exports = function(it){ - return toString.call(it).slice(8, -1); -}; -},{}],19:[function(require,module,exports){ -'use strict'; -var $ = require('./$') - , hide = require('./$.hide') - , redefineAll = require('./$.redefine-all') - , ctx = require('./$.ctx') - , strictNew = require('./$.strict-new') - , defined = require('./$.defined') - , forOf = require('./$.for-of') - , $iterDefine = require('./$.iter-define') - , step = require('./$.iter-step') - , ID = require('./$.uid')('id') - , $has = require('./$.has') - , isObject = require('./$.is-object') - , setSpecies = require('./$.set-species') - , DESCRIPTORS = require('./$.descriptors') - , isExtensible = Object.isExtensible || isObject - , SIZE = DESCRIPTORS ? '_s' : 'size' - , id = 0; - -var fastKey = function(it, create){ - // return primitive with prefix - if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; - if(!$has(it, ID)){ - // can't set id to frozen object - if(!isExtensible(it))return 'F'; - // not necessary to add id - if(!create)return 'E'; - // add missing object id - hide(it, ID, ++id); - // return object id with prefix - } return 'O' + it[ID]; -}; - -var getEntry = function(that, key){ - // fast case - var index = fastKey(key), entry; - if(index !== 'F')return that._i[index]; - // frozen object case - for(entry = that._f; entry; entry = entry.n){ - if(entry.k == key)return entry; - } -}; - -module.exports = { - getConstructor: function(wrapper, NAME, IS_MAP, ADDER){ - var C = wrapper(function(that, iterable){ - strictNew(that, C, NAME); - that._i = $.create(null); // index - that._f = undefined; // first entry - that._l = undefined; // last entry - that[SIZE] = 0; // size - if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that); - }); - redefineAll(C.prototype, { - // 23.1.3.1 Map.prototype.clear() - // 23.2.3.2 Set.prototype.clear() - clear: function clear(){ - for(var that = this, data = that._i, entry = that._f; entry; entry = entry.n){ - entry.r = true; - if(entry.p)entry.p = entry.p.n = undefined; - delete data[entry.i]; - } - that._f = that._l = undefined; - that[SIZE] = 0; - }, - // 23.1.3.3 Map.prototype.delete(key) - // 23.2.3.4 Set.prototype.delete(value) - 'delete': function(key){ - var that = this - , entry = getEntry(that, key); - if(entry){ - var next = entry.n - , prev = entry.p; - delete that._i[entry.i]; - entry.r = true; - if(prev)prev.n = next; - if(next)next.p = prev; - if(that._f == entry)that._f = next; - if(that._l == entry)that._l = prev; - that[SIZE]--; - } return !!entry; - }, - // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined) - // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined) - forEach: function forEach(callbackfn /*, that = undefined */){ - var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3) - , entry; - while(entry = entry ? entry.n : this._f){ - f(entry.v, entry.k, this); - // revert to the last existing entry - while(entry && entry.r)entry = entry.p; - } - }, - // 23.1.3.7 Map.prototype.has(key) - // 23.2.3.7 Set.prototype.has(value) - has: function has(key){ - return !!getEntry(this, key); - } - }); - if(DESCRIPTORS)$.setDesc(C.prototype, 'size', { - get: function(){ - return defined(this[SIZE]); - } - }); - return C; - }, - def: function(that, key, value){ - var entry = getEntry(that, key) - , prev, index; - // change existing entry - if(entry){ - entry.v = value; - // create new entry - } else { - that._l = entry = { - i: index = fastKey(key, true), // <- index - k: key, // <- key - v: value, // <- value - p: prev = that._l, // <- previous entry - n: undefined, // <- next entry - r: false // <- removed - }; - if(!that._f)that._f = entry; - if(prev)prev.n = entry; - that[SIZE]++; - // add to index - if(index !== 'F')that._i[index] = entry; - } return that; - }, - getEntry: getEntry, - setStrong: function(C, NAME, IS_MAP){ - // add .keys, .values, .entries, [@@iterator] - // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11 - $iterDefine(C, NAME, function(iterated, kind){ - this._t = iterated; // target - this._k = kind; // kind - this._l = undefined; // previous - }, function(){ - var that = this - , kind = that._k - , entry = that._l; - // revert to the last existing entry - while(entry && entry.r)entry = entry.p; - // get next entry - if(!that._t || !(that._l = entry = entry ? entry.n : that._t._f)){ - // or finish the iteration - that._t = undefined; - return step(1); - } - // return step by kind - if(kind == 'keys' )return step(0, entry.k); - if(kind == 'values')return step(0, entry.v); - return step(0, [entry.k, entry.v]); - }, IS_MAP ? 'entries' : 'values' , !IS_MAP, true); - - // add [@@species], 23.1.2.2, 23.2.2.2 - setSpecies(NAME); - } -}; -},{"./$":53,"./$.ctx":24,"./$.defined":25,"./$.descriptors":26,"./$.for-of":34,"./$.has":37,"./$.hide":38,"./$.is-object":45,"./$.iter-define":49,"./$.iter-step":51,"./$.redefine-all":67,"./$.set-species":72,"./$.strict-new":76,"./$.uid":89}],20:[function(require,module,exports){ -// https://github.com/DavidBruant/Map-Set.prototype.toJSON -var forOf = require('./$.for-of') - , classof = require('./$.classof'); -module.exports = function(NAME){ - return function toJSON(){ - if(classof(this) != NAME)throw TypeError(NAME + "#toJSON isn't generic"); - var arr = []; - forOf(this, false, arr.push, arr); - return arr; - }; -}; -},{"./$.classof":17,"./$.for-of":34}],21:[function(require,module,exports){ -'use strict'; -var hide = require('./$.hide') - , redefineAll = require('./$.redefine-all') - , anObject = require('./$.an-object') - , isObject = require('./$.is-object') - , strictNew = require('./$.strict-new') - , forOf = require('./$.for-of') - , createArrayMethod = require('./$.array-methods') - , $has = require('./$.has') - , WEAK = require('./$.uid')('weak') - , isExtensible = Object.isExtensible || isObject - , arrayFind = createArrayMethod(5) - , arrayFindIndex = createArrayMethod(6) - , id = 0; - -// fallback for frozen keys -var frozenStore = function(that){ - return that._l || (that._l = new FrozenStore); -}; -var FrozenStore = function(){ - this.a = []; -}; -var findFrozen = function(store, key){ - return arrayFind(store.a, function(it){ - return it[0] === key; - }); -}; -FrozenStore.prototype = { - get: function(key){ - var entry = findFrozen(this, key); - if(entry)return entry[1]; - }, - has: function(key){ - return !!findFrozen(this, key); - }, - set: function(key, value){ - var entry = findFrozen(this, key); - if(entry)entry[1] = value; - else this.a.push([key, value]); - }, - 'delete': function(key){ - var index = arrayFindIndex(this.a, function(it){ - return it[0] === key; - }); - if(~index)this.a.splice(index, 1); - return !!~index; - } -}; - -module.exports = { - getConstructor: function(wrapper, NAME, IS_MAP, ADDER){ - var C = wrapper(function(that, iterable){ - strictNew(that, C, NAME); - that._i = id++; // collection id - that._l = undefined; // leak store for frozen objects - if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that); - }); - redefineAll(C.prototype, { - // 23.3.3.2 WeakMap.prototype.delete(key) - // 23.4.3.3 WeakSet.prototype.delete(value) - 'delete': function(key){ - if(!isObject(key))return false; - if(!isExtensible(key))return frozenStore(this)['delete'](key); - return $has(key, WEAK) && $has(key[WEAK], this._i) && delete key[WEAK][this._i]; - }, - // 23.3.3.4 WeakMap.prototype.has(key) - // 23.4.3.4 WeakSet.prototype.has(value) - has: function has(key){ - if(!isObject(key))return false; - if(!isExtensible(key))return frozenStore(this).has(key); - return $has(key, WEAK) && $has(key[WEAK], this._i); - } - }); - return C; - }, - def: function(that, key, value){ - if(!isExtensible(anObject(key))){ - frozenStore(that).set(key, value); - } else { - $has(key, WEAK) || hide(key, WEAK, {}); - key[WEAK][that._i] = value; - } return that; - }, - frozenStore: frozenStore, - WEAK: WEAK -}; -},{"./$.an-object":11,"./$.array-methods":15,"./$.for-of":34,"./$.has":37,"./$.hide":38,"./$.is-object":45,"./$.redefine-all":67,"./$.strict-new":76,"./$.uid":89}],22:[function(require,module,exports){ -'use strict'; -var global = require('./$.global') - , $export = require('./$.export') - , redefine = require('./$.redefine') - , redefineAll = require('./$.redefine-all') - , forOf = require('./$.for-of') - , strictNew = require('./$.strict-new') - , isObject = require('./$.is-object') - , fails = require('./$.fails') - , $iterDetect = require('./$.iter-detect') - , setToStringTag = require('./$.set-to-string-tag'); - -module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){ - var Base = global[NAME] - , C = Base - , ADDER = IS_MAP ? 'set' : 'add' - , proto = C && C.prototype - , O = {}; - var fixMethod = function(KEY){ - var fn = proto[KEY]; - redefine(proto, KEY, - KEY == 'delete' ? function(a){ - return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); - } : KEY == 'has' ? function has(a){ - return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); - } : KEY == 'get' ? function get(a){ - return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a); - } : KEY == 'add' ? function add(a){ fn.call(this, a === 0 ? 0 : a); return this; } - : function set(a, b){ fn.call(this, a === 0 ? 0 : a, b); return this; } - ); - }; - if(typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function(){ - new C().entries().next(); - }))){ - // create collection constructor - C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); - redefineAll(C.prototype, methods); - } else { - var instance = new C - // early implementations not supports chaining - , HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance - // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false - , THROWS_ON_PRIMITIVES = fails(function(){ instance.has(1); }) - // most early implementations doesn't supports iterables, most modern - not close it correctly - , ACCEPT_ITERABLES = $iterDetect(function(iter){ new C(iter); }) // eslint-disable-line no-new - // for early implementations -0 and +0 not the same - , BUGGY_ZERO; - if(!ACCEPT_ITERABLES){ - C = wrapper(function(target, iterable){ - strictNew(target, C, NAME); - var that = new Base; - if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that); - return that; - }); - C.prototype = proto; - proto.constructor = C; - } - IS_WEAK || instance.forEach(function(val, key){ - BUGGY_ZERO = 1 / key === -Infinity; - }); - if(THROWS_ON_PRIMITIVES || BUGGY_ZERO){ - fixMethod('delete'); - fixMethod('has'); - IS_MAP && fixMethod('get'); - } - if(BUGGY_ZERO || HASNT_CHAINING)fixMethod(ADDER); - // weak collections should not contains .clear method - if(IS_WEAK && proto.clear)delete proto.clear; - } - - setToStringTag(C, NAME); - - O[NAME] = C; - $export($export.G + $export.W + $export.F * (C != Base), O); - - if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP); - - return C; -}; -},{"./$.export":29,"./$.fails":31,"./$.for-of":34,"./$.global":36,"./$.is-object":45,"./$.iter-detect":50,"./$.redefine":68,"./$.redefine-all":67,"./$.set-to-string-tag":73,"./$.strict-new":76}],23:[function(require,module,exports){ -var core = module.exports = {version: '1.2.6'}; -if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef -},{}],24:[function(require,module,exports){ -// optional / simple context binding -var aFunction = require('./$.a-function'); -module.exports = function(fn, that, length){ - aFunction(fn); - if(that === undefined)return fn; - switch(length){ - case 1: return function(a){ - return fn.call(that, a); - }; - case 2: return function(a, b){ - return fn.call(that, a, b); - }; - case 3: return function(a, b, c){ - return fn.call(that, a, b, c); - }; - } - return function(/* ...args */){ - return fn.apply(that, arguments); - }; -}; -},{"./$.a-function":9}],25:[function(require,module,exports){ -// 7.2.1 RequireObjectCoercible(argument) -module.exports = function(it){ - if(it == undefined)throw TypeError("Can't call method on " + it); - return it; -}; -},{}],26:[function(require,module,exports){ -// Thank's IE8 for his funny defineProperty -module.exports = !require('./$.fails')(function(){ - return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; -}); -},{"./$.fails":31}],27:[function(require,module,exports){ -var isObject = require('./$.is-object') - , document = require('./$.global').document - // in old IE typeof document.createElement is 'object' - , is = isObject(document) && isObject(document.createElement); -module.exports = function(it){ - return is ? document.createElement(it) : {}; -}; -},{"./$.global":36,"./$.is-object":45}],28:[function(require,module,exports){ -// all enumerable object keys, includes symbols -var $ = require('./$'); -module.exports = function(it){ - var keys = $.getKeys(it) - , getSymbols = $.getSymbols; - if(getSymbols){ - var symbols = getSymbols(it) - , isEnum = $.isEnum - , i = 0 - , key; - while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))keys.push(key); - } - return keys; -}; -},{"./$":53}],29:[function(require,module,exports){ -var global = require('./$.global') - , core = require('./$.core') - , hide = require('./$.hide') - , redefine = require('./$.redefine') - , ctx = require('./$.ctx') - , PROTOTYPE = 'prototype'; - -var $export = function(type, name, source){ - var IS_FORCED = type & $export.F - , IS_GLOBAL = type & $export.G - , IS_STATIC = type & $export.S - , IS_PROTO = type & $export.P - , IS_BIND = type & $export.B - , target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE] - , exports = IS_GLOBAL ? core : core[name] || (core[name] = {}) - , expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}) - , key, own, out, exp; - if(IS_GLOBAL)source = name; - for(key in source){ - // contains in native - own = !IS_FORCED && target && key in target; - // export native or passed - out = (own ? target : source)[key]; - // bind timers to global for call from export context - exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; - // extend global - if(target && !own)redefine(target, key, out); - // export - if(exports[key] != out)hide(exports, key, exp); - if(IS_PROTO && expProto[key] != out)expProto[key] = out; - } -}; -global.core = core; -// type bitmap -$export.F = 1; // forced -$export.G = 2; // global -$export.S = 4; // static -$export.P = 8; // proto -$export.B = 16; // bind -$export.W = 32; // wrap -module.exports = $export; -},{"./$.core":23,"./$.ctx":24,"./$.global":36,"./$.hide":38,"./$.redefine":68}],30:[function(require,module,exports){ -var MATCH = require('./$.wks')('match'); -module.exports = function(KEY){ - var re = /./; - try { - '/./'[KEY](re); - } catch(e){ - try { - re[MATCH] = false; - return !'/./'[KEY](re); - } catch(f){ /* empty */ } - } return true; -}; -},{"./$.wks":90}],31:[function(require,module,exports){ -module.exports = function(exec){ - try { - return !!exec(); - } catch(e){ - return true; - } -}; -},{}],32:[function(require,module,exports){ -'use strict'; -var hide = require('./$.hide') - , redefine = require('./$.redefine') - , fails = require('./$.fails') - , defined = require('./$.defined') - , wks = require('./$.wks'); - -module.exports = function(KEY, length, exec){ - var SYMBOL = wks(KEY) - , original = ''[KEY]; - if(fails(function(){ - var O = {}; - O[SYMBOL] = function(){ return 7; }; - return ''[KEY](O) != 7; - })){ - redefine(String.prototype, KEY, exec(defined, SYMBOL, original)); - hide(RegExp.prototype, SYMBOL, length == 2 - // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue) - // 21.2.5.11 RegExp.prototype[@@split](string, limit) - ? function(string, arg){ return original.call(string, this, arg); } - // 21.2.5.6 RegExp.prototype[@@match](string) - // 21.2.5.9 RegExp.prototype[@@search](string) - : function(string){ return original.call(string, this); } - ); - } -}; -},{"./$.defined":25,"./$.fails":31,"./$.hide":38,"./$.redefine":68,"./$.wks":90}],33:[function(require,module,exports){ -'use strict'; -// 21.2.5.3 get RegExp.prototype.flags -var anObject = require('./$.an-object'); -module.exports = function(){ - var that = anObject(this) - , result = ''; - if(that.global) result += 'g'; - if(that.ignoreCase) result += 'i'; - if(that.multiline) result += 'm'; - if(that.unicode) result += 'u'; - if(that.sticky) result += 'y'; - return result; -}; -},{"./$.an-object":11}],34:[function(require,module,exports){ -var ctx = require('./$.ctx') - , call = require('./$.iter-call') - , isArrayIter = require('./$.is-array-iter') - , anObject = require('./$.an-object') - , toLength = require('./$.to-length') - , getIterFn = require('./core.get-iterator-method'); -module.exports = function(iterable, entries, fn, that){ - var iterFn = getIterFn(iterable) - , f = ctx(fn, that, entries ? 2 : 1) - , index = 0 - , length, step, iterator; - if(typeof iterFn != 'function')throw TypeError(iterable + ' is not iterable!'); - // fast case for arrays with default iterator - if(isArrayIter(iterFn))for(length = toLength(iterable.length); length > index; index++){ - entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]); - } else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){ - call(iterator, f, step.value, entries); - } -}; -},{"./$.an-object":11,"./$.ctx":24,"./$.is-array-iter":42,"./$.iter-call":47,"./$.to-length":86,"./core.get-iterator-method":91}],35:[function(require,module,exports){ -// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window -var toIObject = require('./$.to-iobject') - , getNames = require('./$').getNames - , toString = {}.toString; - -var windowNames = typeof window == 'object' && Object.getOwnPropertyNames - ? Object.getOwnPropertyNames(window) : []; - -var getWindowNames = function(it){ - try { - return getNames(it); - } catch(e){ - return windowNames.slice(); - } -}; - -module.exports.get = function getOwnPropertyNames(it){ - if(windowNames && toString.call(it) == '[object Window]')return getWindowNames(it); - return getNames(toIObject(it)); -}; -},{"./$":53,"./$.to-iobject":85}],36:[function(require,module,exports){ -// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 -var global = module.exports = typeof window != 'undefined' && window.Math == Math - ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); -if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef -},{}],37:[function(require,module,exports){ -var hasOwnProperty = {}.hasOwnProperty; -module.exports = function(it, key){ - return hasOwnProperty.call(it, key); -}; -},{}],38:[function(require,module,exports){ -var $ = require('./$') - , createDesc = require('./$.property-desc'); -module.exports = require('./$.descriptors') ? function(object, key, value){ - return $.setDesc(object, key, createDesc(1, value)); -} : function(object, key, value){ - object[key] = value; - return object; -}; -},{"./$":53,"./$.descriptors":26,"./$.property-desc":66}],39:[function(require,module,exports){ -module.exports = require('./$.global').document && document.documentElement; -},{"./$.global":36}],40:[function(require,module,exports){ -// fast apply, http://jsperf.lnkit.com/fast-apply/5 -module.exports = function(fn, args, that){ - var un = that === undefined; - switch(args.length){ - case 0: return un ? fn() - : fn.call(that); - case 1: return un ? fn(args[0]) - : fn.call(that, args[0]); - case 2: return un ? fn(args[0], args[1]) - : fn.call(that, args[0], args[1]); - case 3: return un ? fn(args[0], args[1], args[2]) - : fn.call(that, args[0], args[1], args[2]); - case 4: return un ? fn(args[0], args[1], args[2], args[3]) - : fn.call(that, args[0], args[1], args[2], args[3]); - } return fn.apply(that, args); -}; -},{}],41:[function(require,module,exports){ -// fallback for non-array-like ES3 and non-enumerable old V8 strings -var cof = require('./$.cof'); -module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){ - return cof(it) == 'String' ? it.split('') : Object(it); -}; -},{"./$.cof":18}],42:[function(require,module,exports){ -// check on default Array iterator -var Iterators = require('./$.iterators') - , ITERATOR = require('./$.wks')('iterator') - , ArrayProto = Array.prototype; - -module.exports = function(it){ - return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); -}; -},{"./$.iterators":52,"./$.wks":90}],43:[function(require,module,exports){ -// 7.2.2 IsArray(argument) -var cof = require('./$.cof'); -module.exports = Array.isArray || function(arg){ - return cof(arg) == 'Array'; -}; -},{"./$.cof":18}],44:[function(require,module,exports){ -// 20.1.2.3 Number.isInteger(number) -var isObject = require('./$.is-object') - , floor = Math.floor; -module.exports = function isInteger(it){ - return !isObject(it) && isFinite(it) && floor(it) === it; -}; -},{"./$.is-object":45}],45:[function(require,module,exports){ -module.exports = function(it){ - return typeof it === 'object' ? it !== null : typeof it === 'function'; -}; -},{}],46:[function(require,module,exports){ -// 7.2.8 IsRegExp(argument) -var isObject = require('./$.is-object') - , cof = require('./$.cof') - , MATCH = require('./$.wks')('match'); -module.exports = function(it){ - var isRegExp; - return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp'); -}; -},{"./$.cof":18,"./$.is-object":45,"./$.wks":90}],47:[function(require,module,exports){ -// call something on iterator step with safe closing on error -var anObject = require('./$.an-object'); -module.exports = function(iterator, fn, value, entries){ - try { - return entries ? fn(anObject(value)[0], value[1]) : fn(value); - // 7.4.6 IteratorClose(iterator, completion) - } catch(e){ - var ret = iterator['return']; - if(ret !== undefined)anObject(ret.call(iterator)); - throw e; - } -}; -},{"./$.an-object":11}],48:[function(require,module,exports){ -'use strict'; -var $ = require('./$') - , descriptor = require('./$.property-desc') - , setToStringTag = require('./$.set-to-string-tag') - , IteratorPrototype = {}; - -// 25.1.2.1.1 %IteratorPrototype%[@@iterator]() -require('./$.hide')(IteratorPrototype, require('./$.wks')('iterator'), function(){ return this; }); - -module.exports = function(Constructor, NAME, next){ - Constructor.prototype = $.create(IteratorPrototype, {next: descriptor(1, next)}); - setToStringTag(Constructor, NAME + ' Iterator'); -}; -},{"./$":53,"./$.hide":38,"./$.property-desc":66,"./$.set-to-string-tag":73,"./$.wks":90}],49:[function(require,module,exports){ -'use strict'; -var LIBRARY = require('./$.library') - , $export = require('./$.export') - , redefine = require('./$.redefine') - , hide = require('./$.hide') - , has = require('./$.has') - , Iterators = require('./$.iterators') - , $iterCreate = require('./$.iter-create') - , setToStringTag = require('./$.set-to-string-tag') - , getProto = require('./$').getProto - , ITERATOR = require('./$.wks')('iterator') - , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next` - , FF_ITERATOR = '@@iterator' - , KEYS = 'keys' - , VALUES = 'values'; - -var returnThis = function(){ return this; }; - -module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){ - $iterCreate(Constructor, NAME, next); - var getMethod = function(kind){ - if(!BUGGY && kind in proto)return proto[kind]; - switch(kind){ - case KEYS: return function keys(){ return new Constructor(this, kind); }; - case VALUES: return function values(){ return new Constructor(this, kind); }; - } return function entries(){ return new Constructor(this, kind); }; - }; - var TAG = NAME + ' Iterator' - , DEF_VALUES = DEFAULT == VALUES - , VALUES_BUG = false - , proto = Base.prototype - , $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT] - , $default = $native || getMethod(DEFAULT) - , methods, key; - // Fix native - if($native){ - var IteratorPrototype = getProto($default.call(new Base)); - // Set @@toStringTag to native iterators - setToStringTag(IteratorPrototype, TAG, true); - // FF fix - if(!LIBRARY && has(proto, FF_ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis); - // fix Array#{values, @@iterator}.name in V8 / FF - if(DEF_VALUES && $native.name !== VALUES){ - VALUES_BUG = true; - $default = function values(){ return $native.call(this); }; - } - } - // Define iterator - if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){ - hide(proto, ITERATOR, $default); - } - // Plug for library - Iterators[NAME] = $default; - Iterators[TAG] = returnThis; - if(DEFAULT){ - methods = { - values: DEF_VALUES ? $default : getMethod(VALUES), - keys: IS_SET ? $default : getMethod(KEYS), - entries: !DEF_VALUES ? $default : getMethod('entries') - }; - if(FORCED)for(key in methods){ - if(!(key in proto))redefine(proto, key, methods[key]); - } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); - } - return methods; -}; -},{"./$":53,"./$.export":29,"./$.has":37,"./$.hide":38,"./$.iter-create":48,"./$.iterators":52,"./$.library":55,"./$.redefine":68,"./$.set-to-string-tag":73,"./$.wks":90}],50:[function(require,module,exports){ -var ITERATOR = require('./$.wks')('iterator') - , SAFE_CLOSING = false; - -try { - var riter = [7][ITERATOR](); - riter['return'] = function(){ SAFE_CLOSING = true; }; - Array.from(riter, function(){ throw 2; }); -} catch(e){ /* empty */ } - -module.exports = function(exec, skipClosing){ - if(!skipClosing && !SAFE_CLOSING)return false; - var safe = false; - try { - var arr = [7] - , iter = arr[ITERATOR](); - iter.next = function(){ return {done: safe = true}; }; - arr[ITERATOR] = function(){ return iter; }; - exec(arr); - } catch(e){ /* empty */ } - return safe; -}; -},{"./$.wks":90}],51:[function(require,module,exports){ -module.exports = function(done, value){ - return {value: value, done: !!done}; -}; -},{}],52:[function(require,module,exports){ -module.exports = {}; -},{}],53:[function(require,module,exports){ -var $Object = Object; -module.exports = { - create: $Object.create, - getProto: $Object.getPrototypeOf, - isEnum: {}.propertyIsEnumerable, - getDesc: $Object.getOwnPropertyDescriptor, - setDesc: $Object.defineProperty, - setDescs: $Object.defineProperties, - getKeys: $Object.keys, - getNames: $Object.getOwnPropertyNames, - getSymbols: $Object.getOwnPropertySymbols, - each: [].forEach -}; -},{}],54:[function(require,module,exports){ -var $ = require('./$') - , toIObject = require('./$.to-iobject'); -module.exports = function(object, el){ - var O = toIObject(object) - , keys = $.getKeys(O) - , length = keys.length - , index = 0 - , key; - while(length > index)if(O[key = keys[index++]] === el)return key; -}; -},{"./$":53,"./$.to-iobject":85}],55:[function(require,module,exports){ -module.exports = false; -},{}],56:[function(require,module,exports){ -// 20.2.2.14 Math.expm1(x) -module.exports = Math.expm1 || function expm1(x){ - return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1; -}; -},{}],57:[function(require,module,exports){ -// 20.2.2.20 Math.log1p(x) -module.exports = Math.log1p || function log1p(x){ - return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x); -}; -},{}],58:[function(require,module,exports){ -// 20.2.2.28 Math.sign(x) -module.exports = Math.sign || function sign(x){ - return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1; -}; -},{}],59:[function(require,module,exports){ -var global = require('./$.global') - , macrotask = require('./$.task').set - , Observer = global.MutationObserver || global.WebKitMutationObserver - , process = global.process - , Promise = global.Promise - , isNode = require('./$.cof')(process) == 'process' - , head, last, notify; - -var flush = function(){ - var parent, domain, fn; - if(isNode && (parent = process.domain)){ - process.domain = null; - parent.exit(); - } - while(head){ - domain = head.domain; - fn = head.fn; - if(domain)domain.enter(); - fn(); // <- currently we use it only for Promise - try / catch not required - if(domain)domain.exit(); - head = head.next; - } last = undefined; - if(parent)parent.enter(); -}; - -// Node.js -if(isNode){ - notify = function(){ - process.nextTick(flush); - }; -// browsers with MutationObserver -} else if(Observer){ - var toggle = 1 - , node = document.createTextNode(''); - new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new - notify = function(){ - node.data = toggle = -toggle; - }; -// environments with maybe non-completely correct, but existent Promise -} else if(Promise && Promise.resolve){ - notify = function(){ - Promise.resolve().then(flush); - }; -// for other environments - macrotask based on: -// - setImmediate -// - MessageChannel -// - window.postMessag -// - onreadystatechange -// - setTimeout -} else { - notify = function(){ - // strange IE + webpack dev server bug - use .call(global) - macrotask.call(global, flush); - }; -} - -module.exports = function asap(fn){ - var task = {fn: fn, next: undefined, domain: isNode && process.domain}; - if(last)last.next = task; - if(!head){ - head = task; - notify(); - } last = task; -}; -},{"./$.cof":18,"./$.global":36,"./$.task":82}],60:[function(require,module,exports){ -// 19.1.2.1 Object.assign(target, source, ...) -var $ = require('./$') - , toObject = require('./$.to-object') - , IObject = require('./$.iobject'); - -// should work with symbols and should have deterministic property order (V8 bug) -module.exports = require('./$.fails')(function(){ - var a = Object.assign - , A = {} - , B = {} - , S = Symbol() - , K = 'abcdefghijklmnopqrst'; - A[S] = 7; - K.split('').forEach(function(k){ B[k] = k; }); - return a({}, A)[S] != 7 || Object.keys(a({}, B)).join('') != K; -}) ? function assign(target, source){ // eslint-disable-line no-unused-vars - var T = toObject(target) - , $$ = arguments - , $$len = $$.length - , index = 1 - , getKeys = $.getKeys - , getSymbols = $.getSymbols - , isEnum = $.isEnum; - while($$len > index){ - var S = IObject($$[index++]) - , keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S) - , length = keys.length - , j = 0 - , key; - while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key]; - } - return T; -} : Object.assign; -},{"./$":53,"./$.fails":31,"./$.iobject":41,"./$.to-object":87}],61:[function(require,module,exports){ -// most Object methods by ES6 should accept primitives -var $export = require('./$.export') - , core = require('./$.core') - , fails = require('./$.fails'); -module.exports = function(KEY, exec){ - var fn = (core.Object || {})[KEY] || Object[KEY] - , exp = {}; - exp[KEY] = exec(fn); - $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp); -}; -},{"./$.core":23,"./$.export":29,"./$.fails":31}],62:[function(require,module,exports){ -var $ = require('./$') - , toIObject = require('./$.to-iobject') - , isEnum = $.isEnum; -module.exports = function(isEntries){ - return function(it){ - var O = toIObject(it) - , keys = $.getKeys(O) - , length = keys.length - , i = 0 - , result = [] - , key; - while(length > i)if(isEnum.call(O, key = keys[i++])){ - result.push(isEntries ? [key, O[key]] : O[key]); - } return result; - }; -}; -},{"./$":53,"./$.to-iobject":85}],63:[function(require,module,exports){ -// all object keys, includes non-enumerable and symbols -var $ = require('./$') - , anObject = require('./$.an-object') - , Reflect = require('./$.global').Reflect; -module.exports = Reflect && Reflect.ownKeys || function ownKeys(it){ - var keys = $.getNames(anObject(it)) - , getSymbols = $.getSymbols; - return getSymbols ? keys.concat(getSymbols(it)) : keys; -}; -},{"./$":53,"./$.an-object":11,"./$.global":36}],64:[function(require,module,exports){ -'use strict'; -var path = require('./$.path') - , invoke = require('./$.invoke') - , aFunction = require('./$.a-function'); -module.exports = function(/* ...pargs */){ - var fn = aFunction(this) - , length = arguments.length - , pargs = Array(length) - , i = 0 - , _ = path._ - , holder = false; - while(length > i)if((pargs[i] = arguments[i++]) === _)holder = true; - return function(/* ...args */){ - var that = this - , $$ = arguments - , $$len = $$.length - , j = 0, k = 0, args; - if(!holder && !$$len)return invoke(fn, pargs, that); - args = pargs.slice(); - if(holder)for(;length > j; j++)if(args[j] === _)args[j] = $$[k++]; - while($$len > k)args.push($$[k++]); - return invoke(fn, args, that); - }; -}; -},{"./$.a-function":9,"./$.invoke":40,"./$.path":65}],65:[function(require,module,exports){ -module.exports = require('./$.global'); -},{"./$.global":36}],66:[function(require,module,exports){ -module.exports = function(bitmap, value){ - return { - enumerable : !(bitmap & 1), - configurable: !(bitmap & 2), - writable : !(bitmap & 4), - value : value - }; -}; -},{}],67:[function(require,module,exports){ -var redefine = require('./$.redefine'); -module.exports = function(target, src){ - for(var key in src)redefine(target, key, src[key]); - return target; -}; -},{"./$.redefine":68}],68:[function(require,module,exports){ -// add fake Function#toString -// for correct work wrapped methods / constructors with methods like LoDash isNative -var global = require('./$.global') - , hide = require('./$.hide') - , SRC = require('./$.uid')('src') - , TO_STRING = 'toString' - , $toString = Function[TO_STRING] - , TPL = ('' + $toString).split(TO_STRING); - -require('./$.core').inspectSource = function(it){ - return $toString.call(it); -}; - -(module.exports = function(O, key, val, safe){ - if(typeof val == 'function'){ - val.hasOwnProperty(SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); - val.hasOwnProperty('name') || hide(val, 'name', key); - } - if(O === global){ - O[key] = val; - } else { - if(!safe)delete O[key]; - hide(O, key, val); - } -})(Function.prototype, TO_STRING, function toString(){ - return typeof this == 'function' && this[SRC] || $toString.call(this); -}); -},{"./$.core":23,"./$.global":36,"./$.hide":38,"./$.uid":89}],69:[function(require,module,exports){ -module.exports = function(regExp, replace){ - var replacer = replace === Object(replace) ? function(part){ - return replace[part]; - } : replace; - return function(it){ - return String(it).replace(regExp, replacer); - }; -}; -},{}],70:[function(require,module,exports){ -// 7.2.9 SameValue(x, y) -module.exports = Object.is || function is(x, y){ - return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y; -}; -},{}],71:[function(require,module,exports){ -// Works with __proto__ only. Old v8 can't work with null proto objects. -/* eslint-disable no-proto */ -var getDesc = require('./$').getDesc - , isObject = require('./$.is-object') - , anObject = require('./$.an-object'); -var check = function(O, proto){ - anObject(O); - if(!isObject(proto) && proto !== null)throw TypeError(proto + ": can't set as prototype!"); -}; -module.exports = { - set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line - function(test, buggy, set){ - try { - set = require('./$.ctx')(Function.call, getDesc(Object.prototype, '__proto__').set, 2); - set(test, []); - buggy = !(test instanceof Array); - } catch(e){ buggy = true; } - return function setPrototypeOf(O, proto){ - check(O, proto); - if(buggy)O.__proto__ = proto; - else set(O, proto); - return O; - }; - }({}, false) : undefined), - check: check -}; -},{"./$":53,"./$.an-object":11,"./$.ctx":24,"./$.is-object":45}],72:[function(require,module,exports){ -'use strict'; -var global = require('./$.global') - , $ = require('./$') - , DESCRIPTORS = require('./$.descriptors') - , SPECIES = require('./$.wks')('species'); - -module.exports = function(KEY){ - var C = global[KEY]; - if(DESCRIPTORS && C && !C[SPECIES])$.setDesc(C, SPECIES, { - configurable: true, - get: function(){ return this; } - }); -}; -},{"./$":53,"./$.descriptors":26,"./$.global":36,"./$.wks":90}],73:[function(require,module,exports){ -var def = require('./$').setDesc - , has = require('./$.has') - , TAG = require('./$.wks')('toStringTag'); - -module.exports = function(it, tag, stat){ - if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag}); -}; -},{"./$":53,"./$.has":37,"./$.wks":90}],74:[function(require,module,exports){ -var global = require('./$.global') - , SHARED = '__core-js_shared__' - , store = global[SHARED] || (global[SHARED] = {}); -module.exports = function(key){ - return store[key] || (store[key] = {}); -}; -},{"./$.global":36}],75:[function(require,module,exports){ -// 7.3.20 SpeciesConstructor(O, defaultConstructor) -var anObject = require('./$.an-object') - , aFunction = require('./$.a-function') - , SPECIES = require('./$.wks')('species'); -module.exports = function(O, D){ - var C = anObject(O).constructor, S; - return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S); -}; -},{"./$.a-function":9,"./$.an-object":11,"./$.wks":90}],76:[function(require,module,exports){ -module.exports = function(it, Constructor, name){ - if(!(it instanceof Constructor))throw TypeError(name + ": use the 'new' operator!"); - return it; -}; -},{}],77:[function(require,module,exports){ -var toInteger = require('./$.to-integer') - , defined = require('./$.defined'); -// true -> String#at -// false -> String#codePointAt -module.exports = function(TO_STRING){ - return function(that, pos){ - var s = String(defined(that)) - , i = toInteger(pos) - , l = s.length - , a, b; - if(i < 0 || i >= l)return TO_STRING ? '' : undefined; - a = s.charCodeAt(i); - return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff - ? TO_STRING ? s.charAt(i) : a - : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; - }; -}; -},{"./$.defined":25,"./$.to-integer":84}],78:[function(require,module,exports){ -// helper for String#{startsWith, endsWith, includes} -var isRegExp = require('./$.is-regexp') - , defined = require('./$.defined'); - -module.exports = function(that, searchString, NAME){ - if(isRegExp(searchString))throw TypeError('String#' + NAME + " doesn't accept regex!"); - return String(defined(that)); -}; -},{"./$.defined":25,"./$.is-regexp":46}],79:[function(require,module,exports){ -// https://github.com/ljharb/proposal-string-pad-left-right -var toLength = require('./$.to-length') - , repeat = require('./$.string-repeat') - , defined = require('./$.defined'); - -module.exports = function(that, maxLength, fillString, left){ - var S = String(defined(that)) - , stringLength = S.length - , fillStr = fillString === undefined ? ' ' : String(fillString) - , intMaxLength = toLength(maxLength); - if(intMaxLength <= stringLength)return S; - if(fillStr == '')fillStr = ' '; - var fillLen = intMaxLength - stringLength - , stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length)); - if(stringFiller.length > fillLen)stringFiller = stringFiller.slice(0, fillLen); - return left ? stringFiller + S : S + stringFiller; -}; -},{"./$.defined":25,"./$.string-repeat":80,"./$.to-length":86}],80:[function(require,module,exports){ -'use strict'; -var toInteger = require('./$.to-integer') - , defined = require('./$.defined'); - -module.exports = function repeat(count){ - var str = String(defined(this)) - , res = '' - , n = toInteger(count); - if(n < 0 || n == Infinity)throw RangeError("Count can't be negative"); - for(;n > 0; (n >>>= 1) && (str += str))if(n & 1)res += str; - return res; -}; -},{"./$.defined":25,"./$.to-integer":84}],81:[function(require,module,exports){ -var $export = require('./$.export') - , defined = require('./$.defined') - , fails = require('./$.fails') - , spaces = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' + - '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF' - , space = '[' + spaces + ']' - , non = '\u200b\u0085' - , ltrim = RegExp('^' + space + space + '*') - , rtrim = RegExp(space + space + '*$'); - -var exporter = function(KEY, exec){ - var exp = {}; - exp[KEY] = exec(trim); - $export($export.P + $export.F * fails(function(){ - return !!spaces[KEY]() || non[KEY]() != non; - }), 'String', exp); -}; - -// 1 -> String#trimLeft -// 2 -> String#trimRight -// 3 -> String#trim -var trim = exporter.trim = function(string, TYPE){ - string = String(defined(string)); - if(TYPE & 1)string = string.replace(ltrim, ''); - if(TYPE & 2)string = string.replace(rtrim, ''); - return string; -}; - -module.exports = exporter; -},{"./$.defined":25,"./$.export":29,"./$.fails":31}],82:[function(require,module,exports){ -var ctx = require('./$.ctx') - , invoke = require('./$.invoke') - , html = require('./$.html') - , cel = require('./$.dom-create') - , global = require('./$.global') - , process = global.process - , setTask = global.setImmediate - , clearTask = global.clearImmediate - , MessageChannel = global.MessageChannel - , counter = 0 - , queue = {} - , ONREADYSTATECHANGE = 'onreadystatechange' - , defer, channel, port; -var run = function(){ - var id = +this; - if(queue.hasOwnProperty(id)){ - var fn = queue[id]; - delete queue[id]; - fn(); - } -}; -var listner = function(event){ - run.call(event.data); -}; -// Node.js 0.9+ & IE10+ has setImmediate, otherwise: -if(!setTask || !clearTask){ - setTask = function setImmediate(fn){ - var args = [], i = 1; - while(arguments.length > i)args.push(arguments[i++]); - queue[++counter] = function(){ - invoke(typeof fn == 'function' ? fn : Function(fn), args); - }; - defer(counter); - return counter; - }; - clearTask = function clearImmediate(id){ - delete queue[id]; - }; - // Node.js 0.8- - if(require('./$.cof')(process) == 'process'){ - defer = function(id){ - process.nextTick(ctx(run, id, 1)); - }; - // Browsers with MessageChannel, includes WebWorkers - } else if(MessageChannel){ - channel = new MessageChannel; - port = channel.port2; - channel.port1.onmessage = listner; - defer = ctx(port.postMessage, port, 1); - // Browsers with postMessage, skip WebWorkers - // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' - } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){ - defer = function(id){ - global.postMessage(id + '', '*'); - }; - global.addEventListener('message', listner, false); - // IE8- - } else if(ONREADYSTATECHANGE in cel('script')){ - defer = function(id){ - html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){ - html.removeChild(this); - run.call(id); - }; - }; - // Rest old browsers - } else { - defer = function(id){ - setTimeout(ctx(run, id, 1), 0); - }; - } -} -module.exports = { - set: setTask, - clear: clearTask -}; -},{"./$.cof":18,"./$.ctx":24,"./$.dom-create":27,"./$.global":36,"./$.html":39,"./$.invoke":40}],83:[function(require,module,exports){ -var toInteger = require('./$.to-integer') - , max = Math.max - , min = Math.min; -module.exports = function(index, length){ - index = toInteger(index); - return index < 0 ? max(index + length, 0) : min(index, length); -}; -},{"./$.to-integer":84}],84:[function(require,module,exports){ -// 7.1.4 ToInteger -var ceil = Math.ceil - , floor = Math.floor; -module.exports = function(it){ - return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); -}; -},{}],85:[function(require,module,exports){ -// to indexed object, toObject with fallback for non-array-like ES3 strings -var IObject = require('./$.iobject') - , defined = require('./$.defined'); -module.exports = function(it){ - return IObject(defined(it)); -}; -},{"./$.defined":25,"./$.iobject":41}],86:[function(require,module,exports){ -// 7.1.15 ToLength -var toInteger = require('./$.to-integer') - , min = Math.min; -module.exports = function(it){ - return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 -}; -},{"./$.to-integer":84}],87:[function(require,module,exports){ -// 7.1.13 ToObject(argument) -var defined = require('./$.defined'); -module.exports = function(it){ - return Object(defined(it)); -}; -},{"./$.defined":25}],88:[function(require,module,exports){ -// 7.1.1 ToPrimitive(input [, PreferredType]) -var isObject = require('./$.is-object'); -// instead of the ES6 spec version, we didn't implement @@toPrimitive case -// and the second argument - flag - preferred type is a string -module.exports = function(it, S){ - if(!isObject(it))return it; - var fn, val; - if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; - if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val; - if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; - throw TypeError("Can't convert object to primitive value"); -}; -},{"./$.is-object":45}],89:[function(require,module,exports){ -var id = 0 - , px = Math.random(); -module.exports = function(key){ - return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); -}; -},{}],90:[function(require,module,exports){ -var store = require('./$.shared')('wks') - , uid = require('./$.uid') - , Symbol = require('./$.global').Symbol; -module.exports = function(name){ - return store[name] || (store[name] = - Symbol && Symbol[name] || (Symbol || uid)('Symbol.' + name)); -}; -},{"./$.global":36,"./$.shared":74,"./$.uid":89}],91:[function(require,module,exports){ -var classof = require('./$.classof') - , ITERATOR = require('./$.wks')('iterator') - , Iterators = require('./$.iterators'); -module.exports = require('./$.core').getIteratorMethod = function(it){ - if(it != undefined)return it[ITERATOR] - || it['@@iterator'] - || Iterators[classof(it)]; -}; -},{"./$.classof":17,"./$.core":23,"./$.iterators":52,"./$.wks":90}],92:[function(require,module,exports){ -'use strict'; -var $ = require('./$') - , $export = require('./$.export') - , DESCRIPTORS = require('./$.descriptors') - , createDesc = require('./$.property-desc') - , html = require('./$.html') - , cel = require('./$.dom-create') - , has = require('./$.has') - , cof = require('./$.cof') - , invoke = require('./$.invoke') - , fails = require('./$.fails') - , anObject = require('./$.an-object') - , aFunction = require('./$.a-function') - , isObject = require('./$.is-object') - , toObject = require('./$.to-object') - , toIObject = require('./$.to-iobject') - , toInteger = require('./$.to-integer') - , toIndex = require('./$.to-index') - , toLength = require('./$.to-length') - , IObject = require('./$.iobject') - , IE_PROTO = require('./$.uid')('__proto__') - , createArrayMethod = require('./$.array-methods') - , arrayIndexOf = require('./$.array-includes')(false) - , ObjectProto = Object.prototype - , ArrayProto = Array.prototype - , arraySlice = ArrayProto.slice - , arrayJoin = ArrayProto.join - , defineProperty = $.setDesc - , getOwnDescriptor = $.getDesc - , defineProperties = $.setDescs - , factories = {} - , IE8_DOM_DEFINE; - -if(!DESCRIPTORS){ - IE8_DOM_DEFINE = !fails(function(){ - return defineProperty(cel('div'), 'a', {get: function(){ return 7; }}).a != 7; - }); - $.setDesc = function(O, P, Attributes){ - if(IE8_DOM_DEFINE)try { - return defineProperty(O, P, Attributes); - } catch(e){ /* empty */ } - if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!'); - if('value' in Attributes)anObject(O)[P] = Attributes.value; - return O; - }; - $.getDesc = function(O, P){ - if(IE8_DOM_DEFINE)try { - return getOwnDescriptor(O, P); - } catch(e){ /* empty */ } - if(has(O, P))return createDesc(!ObjectProto.propertyIsEnumerable.call(O, P), O[P]); - }; - $.setDescs = defineProperties = function(O, Properties){ - anObject(O); - var keys = $.getKeys(Properties) - , length = keys.length - , i = 0 - , P; - while(length > i)$.setDesc(O, P = keys[i++], Properties[P]); - return O; - }; -} -$export($export.S + $export.F * !DESCRIPTORS, 'Object', { - // 19.1.2.6 / 15.2.3.3 Object.getOwnPropertyDescriptor(O, P) - getOwnPropertyDescriptor: $.getDesc, - // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes) - defineProperty: $.setDesc, - // 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties) - defineProperties: defineProperties -}); - - // IE 8- don't enum bug keys -var keys1 = ('constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,' + - 'toLocaleString,toString,valueOf').split(',') - // Additional keys for getOwnPropertyNames - , keys2 = keys1.concat('length', 'prototype') - , keysLen1 = keys1.length; - -// Create object with `null` prototype: use iframe Object with cleared prototype -var createDict = function(){ - // Thrash, waste and sodomy: IE GC bug - var iframe = cel('iframe') - , i = keysLen1 - , gt = '>' - , iframeDocument; - iframe.style.display = 'none'; - html.appendChild(iframe); - iframe.src = 'javascript:'; // eslint-disable-line no-script-url - // createDict = iframe.contentWindow.Object; - // html.removeChild(iframe); - iframeDocument = iframe.contentWindow.document; - iframeDocument.open(); - iframeDocument.write('