diff --git a/equation.js b/equation.js index f8ac1c2..cb73115 100644 --- a/equation.js +++ b/equation.js @@ -1,1726 +1,1726 @@ -(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 solve('2+5+6') - * - * @param {String} expression - * The expression to create an equation for (containing variables) - * @return {Function} - * The function which replaces variables with values in order - * and solves the expression - */ - equation: function equation(expression) { - var stack = parseExpression(expression); - var variables = []; - - stack.forEach(function varCheck(a) { - if (Array.isArray(a)) { - return a.forEach(varCheck); - } - if (isVariable(a)) { - // grouped variables like (y) need to have their parantheses removed - variables.push(_.removeSymbols(a)); - } - }); - - return function () { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - stack.forEach(function varCheck(a, i, arr) { - if (Array.isArray(a)) { - return a.forEach(varCheck); - } - - var index = variables.indexOf(a); - if (index > -1) { - // grouped variables like (y) need to have their parantheses removed - arr[i] = args[index]; - } - }); - - stack = sortStack(stack); - stack = _.parseNumbers(stack); - stack = solveStack(stack); - - return stack; - }; - }, - - registerOperator: function registerOperator(key, options) { - _operators2['default'][key] = options; - }, - - registerConstant: function registerConstant(key, options) { - _constants2['default'][key] = options; - } -}; - -var solveStack = (function (_solveStack) { - function solveStack(_x) { - return _solveStack.apply(this, arguments); - } - - solveStack.toString = function () { - return _solveStack.toString(); - }; - - 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); - }); - - return solveStack(stack); - } else { - return evaluate(stack); - } -}); - -var PRECEDENCES = Object.keys(_operators2['default']).map(function (key) { - return _operators2['default'][key].precedence; -}); - -var MAX_PRECEDENCE = Math.max.apply(Math, _toConsumableArray(PRECEDENCES)); -var MIN_PRECEDENCE = Math.min.apply(Math, _toConsumableArray(PRECEDENCES)); - -/** - * Parses the given expression into an array of separated - * numbers and operators/functions. - * The result is passed to parseGroups - * - * @param {String} expression - * The expression to parse - * @return {Array} - * The parsed array - */ -var parseExpression = function parseExpression(expression) { - // function arguments can be separated using comma, - // but we parse as groups, so this is the solution to getting comma to work - // sigma(0, 4, 2@) becomes sigma(0)(4)(2@) so every argument is parsed - // separately - expression = expression.replace(/,/g, ')('); - - var stream = new _ReadStream2['default'](expression), - stack = [], - record = '', - cur = undefined, - past = undefined; - - // Create an array of separated numbers & operators - while (stream.next()) { - cur = stream.current(); - past = stack.length - 1; - - if (cur === ' ') { - continue; - } - - // it's probably a function with a length more than one - if (!_.isNumber(cur) && !_operators2['default'][cur] && cur !== '.' && cur !== '(' && cur !== ')') { - - record += cur; - } else if (record.length) { - var beforeRecord = past - (record.length - 1); - if (isVariable(record) && _.isNumber(stack[beforeRecord])) { - stack.push('*'); - } - stack.push(record, cur); - record = ''; - - // 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; - - // (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); - } - } - if (record.length) { - var beforeRecord = past - (record.length - 1); - if (isVariable(record) && _.isNumber(stack[beforeRecord])) { - stack.push('*'); - } - stack.push(record); - } - - return parseGroups(stack); -}; - -/** - * Takes the parsed array from parseExpression and - * groups up expressions in parantheses in deep arrays - * - * Example: 2+(5+4) becomes [2, [5, '+', 4]] - * - * @param {Array} stack - * The parsed expression - * @return {Array} - * Grouped up expression - */ -var parseGroups = function parseGroups(stack) { - // Parantheses become inner arrays which will then be processed first - var depth = 0; - return stack.reduce(function (a, b) { - if (b.indexOf('(') > -1) { - if (b.length > 1) { - _.dive(a, depth).push(b.replace('(', ''), []); - } else { - _.dive(a, depth).push([]); - } - depth++; - } else if (b === ')') { - depth--; - } else { - _.dive(a, depth).push(b); - } - return a; - }, []); -}; - -/** - * Gives information about an operator's format - * including number of left and right arguments - * - * @param {String/Object} operator - * The operator object or operator name (e.g. +, -) - * @return {Object} - * An object including the count of left and right arguments - */ -var formatInfo = function formatInfo(operator) { - var op = typeof operator === 'string' ? _operators2['default'][operator] : operator; - - if (!op) { - return null; - } - - var format = op.format.split('1'), - left = format[0].length, - right = format[1].length; - - return { left: left, right: right }; -}; - -/** - * Groups up operators and their arguments based on their precedence - * in deep arrays, the higher the priority, the deeper the group. - * This simplifies the evaluating process, the only thing to do is to - * evaluate from bottom up, evaluating deep groups first - * - * @param {Array} stack - * The parsed and grouped expression - * @return {Array} - * Grouped expression based on precedences - */ -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; - - try { - for (var _iterator = stack.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var _step$value = _slicedToArray(_step.value, 2); - - var index = _step$value[0]; - var item = _step$value[1]; - - if (Array.isArray(item)) { - stack.splice(index, 1, sortStack(item)); - } - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator['return']) { - _iterator['return'](); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - for (var i = MIN_PRECEDENCE; i <= MAX_PRECEDENCE; i++) { - for (var index = 0; index < stack.length; ++index) { - var item = stack[index]; - var op = _operators2['default'][item]; - - if (!op || op.precedence !== i) { - continue; - } - - var _formatInfo = formatInfo(op); - - var left = _formatInfo.left; - var right = _formatInfo.right; - - var group = stack.splice(index - left, left + right + 1, []); - stack[index - left] = group; - - for (var y = 0; y < i; y++) { - group = [group]; - } - - index -= right; - } - } - - return stack; -}); - -/** - * Evaluates the given math expression. - * The expression is an array with an operator and arguments - * - * Example: evaluate([2, '+', 4]) == 6 - * - * @param {Array} stack - * A single math expression - * @return {Number} - * Result of the expression - */ -var evaluate = function evaluate(stack) { - var _operators$op; - - var op = findOperator(stack); - if (!op) { - return stack[0]; - } - - var _formatInfo2 = formatInfo(op); - - var left = _formatInfo2.left; - - var leftArguments = stack.slice(0, left), - rightArguments = stack.slice(left + 1); - - return fixFloat((_operators$op = _operators2['default'][op]).fn.apply(_operators$op, _toConsumableArray(leftArguments).concat(_toConsumableArray(rightArguments)))); -}; - -/** - * Finds the first operator in an array and returns it - * - * @param {Array} arr - * The array to look for an operator in - * @return {Object} - * The operator object or null if no operator is found - */ -var findOperator = function findOperator(arr) { - var _iteratorNormalCompletion2 = true; - var _didIteratorError2 = false; - var _iteratorError2 = undefined; - - try { - for (var _iterator2 = arr[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var o = _step2.value; - - if (typeof o === 'string') { - return o; - } - } - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2['return']) { - _iterator2['return'](); - } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; - } - } - } - - return null; -}; - -/** - * Replaces constants in a string with their values - * - * @param {String} expression - * The expression to replace constants in - * @return {String} - * The expression with constants replaced - */ -var replaceConstants = function replaceConstants(expression) { - return expression.replace(/[A-Z]*/g, function (a) { - var c = _constants2['default'][a]; - if (!c) { - return a; - } - return typeof c === 'function' ? c() : c; - }); -}; - -/** - * Fixes JavaScript's floating point precisions - Issue #5 - * - * @param {Number} number - * The number to fix - * @return {Number} - * Fixed number - */ -var fixFloat = function fixFloat(number) { - return +number.toFixed(15); -}; - -/** - * Recognizes variables such as x, y, z - * @param {String} a - * The string to check for - * @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; -}; - -exports.isVariable = isVariable; -exports['default'] = Equation; -},{"./constants":1,"./helpers":2,"./operators":4,"./readstream":5,"babel/polyfill":189}],4:[function(require,module,exports){ -'use strict'; - -var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var _Equation = require('./index'); - -var _Equation2 = _interopRequireWildcard(_Equation); - -/* - * Operators and Functions - * fn: function used to evaluate value - * format: the format using which arguments are parsed: - * 0 indicates an argument and 1 indicates the operator - * e.g: factorial is 01, add is 010, like 2!, 2+2 - * precedence: determines which operators should be evaluated first - * the lower the value, the higher the precedence - * hasExpression: determines if any of the operator arguments are an expression - * This way, arguments will not be solved by equation and instead - * you have to call solve on each argument yourself. - * You get the arguments as parsed arrays sigma(0, 5, 2@) becomes - * sigma(0, 5, [2, '*', '@']). See sigma operator for reference - */ -exports['default'] = { - '^': { - fn: function fn(a, b) { - return Math.pow(a, b); - }, - format: '010', - precedence: 0 - }, - '*': { - fn: function fn(a, b) { - return a * b; - }, - format: '010', - precedence: 1 - }, - '/': { - fn: function fn(a, b) { - return a / b; - }, - format: '010', - precedence: 1 - }, - '%': { - fn: function fn(a, b) { - return a % b; - }, - format: '010', - precedence: 1 - }, - '\\': { - fn: function fn(a, b) { - return Math.floor(a / b); - }, - format: '010', - precedence: 1 - }, - '+': { - fn: function fn(a, b) { - return a + b; - }, - format: '010', - precedence: 2 - }, - '-': { - fn: function fn(a, b) { - return a - b; - }, - format: '010', - precedence: 2 - }, - '!': { - fn: function fn(a) { - var sum = 1; - for (var i = 0; i < a; ++i) { - sum *= i; - } - return sum; - }, - format: '01', - precedence: 2 - }, - log: { - fn: Math.log, - format: '10', - precedence: -1 - }, - ln: { - fn: Math.log, - format: '10', - precedence: -1 - }, - lg: { - fn: function fn(a) { - return Math.log(a) / Math.log(2); - }, - format: '10', - precedence: -1 - }, - sin: { - fn: Math.sin, - format: '10', - precedence: -1 - }, - cos: { - fn: Math.cos, - format: '10', - precedence: -1 - }, - tan: { - fn: Math.tan, - format: '10', - precedence: -1 - }, - cot: { - fn: Math.cot, - format: '10', - precedence: -1 - }, - round: { - fn: Math.round, - format: '10', - precedence: -1 - }, - floor: { - fn: Math.floor, - format: '10', - precedence: -1 - }, - 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 += _Equation2['default'].solve(expr.replace(regex, i)); - } - return sum; - }, - format: '1000', - hasExpression: true, - precedence: -1 - } -}; - -var ITERATOR_SIGN = '@'; -module.exports = exports['default']; -},{"./index":3}],5:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -exports['default'] = function (string) { - var i = 0, - buffer = []; - return { - next: function next() { - buffer.push(string[i]); - - if (i >= string.length) { - return null; - } - return string[i++]; - }, - current: function current() { - return string[i - 1]; - }, - index: function index() { - return i - 1; - }, - to: function to(n) { - var temp = ''; - var dest = i + n; - for (i = i; i < dest; ++i) { - temp += [string[i]]; - } - return temp; - }, - drain: function drain() { - return buffer.splice(0, buffer.length); - }, - 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); - string = temp.join(''); - - i = i - (end - start); - }), - go: function go(n) { - i += n; - }, - all: function all() { - return 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":186,"regenerator/runtime":187}],7:[function(require,module,exports){ -module.exports = function(it){ - if(typeof it != 'function')throw TypeError(it + ' is not a function!'); - return it; -}; -},{}],8:[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":38}],9:[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":74,"./$.to-iobject":76,"./$.to-length":77}],10:[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'); -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 ? Array(length) : IS_FILTER ? [] : 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; - }; -}; -},{"./$.ctx":19,"./$.iobject":35,"./$.to-length":77,"./$.to-object":78}],11:[function(require,module,exports){ -// 19.1.2.1 Object.assign(target, source, ...) -var toObject = require('./$.to-object') - , IObject = require('./$.iobject') - , enumKeys = require('./$.enum-keys'); -/* eslint-disable no-unused-vars */ -module.exports = Object.assign || function assign(target, source){ -/* eslint-enable no-unused-vars */ - var T = toObject(target) - , l = arguments.length - , i = 1; - while(l > i){ - var S = IObject(arguments[i++]) - , keys = enumKeys(S) - , length = keys.length - , j = 0 - , key; - while(length > j)T[key = keys[j++]] = S[key]; - } - return T; -}; -},{"./$.enum-keys":23,"./$.iobject":35,"./$.to-object":78}],12:[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":13,"./$.wks":81}],13:[function(require,module,exports){ -var toString = {}.toString; - -module.exports = function(it){ - return toString.call(it).slice(8, -1); -}; -},{}],14:[function(require,module,exports){ -'use strict'; -var $ = require('./$') - , hide = require('./$.hide') - , ctx = require('./$.ctx') - , species = require('./$.species') - , strictNew = require('./$.strict-new') - , defined = require('./$.defined') - , forOf = require('./$.for-of') - , step = require('./$.iter-step') - , ID = require('./$.uid')('id') - , $has = require('./$.has') - , isObject = require('./$.is-object') - , isExtensible = Object.isExtensible || isObject - , SUPPORT_DESC = require('./$.support-desc') - , SIZE = SUPPORT_DESC ? '_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); - }); - require('./$.mix')(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[1], 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(SUPPORT_DESC)$.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 - require('./$.iter-define')(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 - species(C); - species(require('./$.core')[NAME]); // for wrapper - } -}; -},{"./$":46,"./$.core":18,"./$.ctx":19,"./$.defined":21,"./$.for-of":28,"./$.has":31,"./$.hide":32,"./$.is-object":38,"./$.iter-define":42,"./$.iter-step":44,"./$.mix":51,"./$.species":64,"./$.strict-new":65,"./$.support-desc":71,"./$.uid":79}],15:[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":12,"./$.for-of":28}],16:[function(require,module,exports){ -'use strict'; -var hide = require('./$.hide') - , anObject = require('./$.an-object') - , strictNew = require('./$.strict-new') - , forOf = require('./$.for-of') - , method = require('./$.array-methods') - , WEAK = require('./$.uid')('weak') - , isObject = require('./$.is-object') - , $has = require('./$.has') - , isExtensible = Object.isExtensible || isObject - , find = method(5) - , findIndex = method(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 find(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 = findIndex(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); - }); - require('./$.mix')(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":8,"./$.array-methods":10,"./$.for-of":28,"./$.has":31,"./$.hide":32,"./$.is-object":38,"./$.mix":51,"./$.strict-new":65,"./$.uid":79}],17:[function(require,module,exports){ -'use strict'; -var global = require('./$.global') - , $def = require('./$.def') - , BUGGY = require('./$.iter-buggy') - , forOf = require('./$.for-of') - , strictNew = require('./$.strict-new'); - -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]; - require('./$.redef')(proto, KEY, - KEY == 'delete' ? function(a){ return fn.call(this, a === 0 ? 0 : a); } - : KEY == 'has' ? function has(a){ return fn.call(this, a === 0 ? 0 : a); } - : KEY == 'get' ? function get(a){ return 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 || !BUGGY && proto.forEach && proto.entries)){ - // create collection constructor - C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); - require('./$.mix')(C.prototype, methods); - } else { - var inst = new C - , chain = inst[ADDER](IS_WEAK ? {} : -0, 1) - , buggyZero; - // wrap for init collections from iterable - if(!require('./$.iter-detect')(function(iter){ new C(iter); })){ // eslint-disable-line no-new - 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 || inst.forEach(function(val, key){ - buggyZero = 1 / key === -Infinity; - }); - // fix converting -0 key to +0 - if(buggyZero){ - fixMethod('delete'); - fixMethod('has'); - IS_MAP && fixMethod('get'); - } - // + fix .add & .set for chaining - if(buggyZero || chain !== inst)fixMethod(ADDER); - // weak collections should not contains .clear method - if(IS_WEAK && proto.clear)delete proto.clear; - } - - require('./$.tag')(C, NAME); - - O[NAME] = C; - $def($def.G + $def.W + $def.F * (C != Base), O); - - if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP); - - return C; -}; -},{"./$.def":20,"./$.for-of":28,"./$.global":30,"./$.iter-buggy":39,"./$.iter-detect":43,"./$.mix":51,"./$.redef":58,"./$.strict-new":65,"./$.tag":72}],18:[function(require,module,exports){ -var core = module.exports = {}; -if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef -},{}],19:[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":7}],20:[function(require,module,exports){ -var global = require('./$.global') - , core = require('./$.core') - , hide = require('./$.hide') - , $redef = require('./$.redef') - , PROTOTYPE = 'prototype'; -var ctx = function(fn, that){ - return function(){ - return fn.apply(that, arguments); - }; -}; -var $def = function(type, name, source){ - var key, own, out, exp - , isGlobal = type & $def.G - , isProto = type & $def.P - , target = isGlobal ? global : type & $def.S - ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE] - , exports = isGlobal ? core : core[name] || (core[name] = {}); - if(isGlobal)source = name; - for(key in source){ - // contains in native - own = !(type & $def.F) && target && key in target; - // export native or passed - out = (own ? target : source)[key]; - // bind timers to global for call from export context - if(type & $def.B && own)exp = ctx(out, global); - else exp = isProto && typeof out == 'function' ? ctx(Function.call, out) : out; - // extend global - if(target && !own)$redef(target, key, out); - // export - if(exports[key] != out)hide(exports, key, exp); - if(isProto)(exports[PROTOTYPE] || (exports[PROTOTYPE] = {}))[key] = out; - } -}; -global.core = core; -// type bitmap -$def.F = 1; // forced -$def.G = 2; // global -$def.S = 4; // static -$def.P = 8; // proto -$def.B = 16; // bind -$def.W = 32; // wrap -module.exports = $def; -},{"./$.core":18,"./$.global":30,"./$.hide":32,"./$.redef":58}],21:[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; -}; -},{}],22:[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":30,"./$.is-object":38}],23:[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; -}; -},{"./$":46}],24:[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; -}; -},{}],25:[function(require,module,exports){ -module.exports = function(exec){ - try { - return !!exec(); - } catch(e){ - return true; - } -}; -},{}],26:[function(require,module,exports){ -'use strict'; -module.exports = function(KEY, length, exec){ - var defined = require('./$.defined') - , SYMBOL = require('./$.wks')(KEY) - , original = ''[KEY]; - if(require('./$.fails')(function(){ - var O = {}; - O[SYMBOL] = function(){ return 7; }; - return ''[KEY](O) != 7; - })){ - require('./$.redef')(String.prototype, KEY, exec(defined, SYMBOL, original)); - require('./$.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":21,"./$.fails":25,"./$.hide":32,"./$.redef":58,"./$.wks":81}],27:[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":8}],28:[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":8,"./$.ctx":19,"./$.is-array-iter":36,"./$.iter-call":40,"./$.to-length":77,"./core.get-iterator-method":82}],29:[function(require,module,exports){ -// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window -var toString = {}.toString - , toIObject = require('./$.to-iobject') - , getNames = require('./$').getNames; - -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)); -}; -},{"./$":46,"./$.to-iobject":76}],30:[function(require,module,exports){ -var global = typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); -module.exports = global; -if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef -},{}],31:[function(require,module,exports){ -var hasOwnProperty = {}.hasOwnProperty; -module.exports = function(it, key){ - return hasOwnProperty.call(it, key); -}; -},{}],32:[function(require,module,exports){ -var $ = require('./$') - , createDesc = require('./$.property-desc'); -module.exports = require('./$.support-desc') ? function(object, key, value){ - return $.setDesc(object, key, createDesc(1, value)); -} : function(object, key, value){ - object[key] = value; - return object; -}; -},{"./$":46,"./$.property-desc":57,"./$.support-desc":71}],33:[function(require,module,exports){ -module.exports = require('./$.global').document && document.documentElement; -},{"./$.global":30}],34:[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); -}; -},{}],35:[function(require,module,exports){ -// indexed object, fallback for non-array-like ES3 strings -var cof = require('./$.cof'); -module.exports = 0 in Object('z') ? Object : function(it){ - return cof(it) == 'String' ? it.split('') : Object(it); -}; -},{"./$.cof":13}],36:[function(require,module,exports){ -// check on default Array iterator -var Iterators = require('./$.iterators') - , ITERATOR = require('./$.wks')('iterator'); -module.exports = function(it){ - return (Iterators.Array || Array.prototype[ITERATOR]) === it; -}; -},{"./$.iterators":45,"./$.wks":81}],37:[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":38}],38:[function(require,module,exports){ -// http://jsperf.com/core-js-isobject -module.exports = function(it){ - return it !== null && (typeof it == 'object' || typeof it == 'function'); -}; -},{}],39:[function(require,module,exports){ -// Safari has buggy iterators w/o `next` -module.exports = 'keys' in [] && !('next' in [].keys()); -},{}],40:[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":8}],41:[function(require,module,exports){ -'use strict'; -var $ = require('./$') - , 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: require('./$.property-desc')(1,next)}); - require('./$.tag')(Constructor, NAME + ' Iterator'); -}; -},{"./$":46,"./$.hide":32,"./$.property-desc":57,"./$.tag":72,"./$.wks":81}],42:[function(require,module,exports){ -'use strict'; -var LIBRARY = require('./$.library') - , $def = require('./$.def') - , $redef = require('./$.redef') - , hide = require('./$.hide') - , has = require('./$.has') - , SYMBOL_ITERATOR = require('./$.wks')('iterator') - , Iterators = require('./$.iterators') - , FF_ITERATOR = '@@iterator' - , KEYS = 'keys' - , VALUES = 'values'; -var returnThis = function(){ return this; }; -module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCE){ - require('./$.iter-create')(Constructor, NAME, next); - var createMethod = function(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' - , proto = Base.prototype - , _native = proto[SYMBOL_ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT] - , _default = _native || createMethod(DEFAULT) - , methods, key; - // Fix native - if(_native){ - var IteratorPrototype = require('./$').getProto(_default.call(new Base)); - // Set @@toStringTag to native iterators - require('./$.tag')(IteratorPrototype, TAG, true); - // FF fix - if(!LIBRARY && has(proto, FF_ITERATOR))hide(IteratorPrototype, SYMBOL_ITERATOR, returnThis); - } - // Define iterator - if(!LIBRARY || FORCE)hide(proto, SYMBOL_ITERATOR, _default); - // Plug for library - Iterators[NAME] = _default; - Iterators[TAG] = returnThis; - if(DEFAULT){ - methods = { - keys: IS_SET ? _default : createMethod(KEYS), - values: DEFAULT == VALUES ? _default : createMethod(VALUES), - entries: DEFAULT != VALUES ? _default : createMethod('entries') - }; - if(FORCE)for(key in methods){ - if(!(key in proto))$redef(proto, key, methods[key]); - } else $def($def.P + $def.F * require('./$.iter-buggy'), NAME, methods); - } -}; -},{"./$":46,"./$.def":20,"./$.has":31,"./$.hide":32,"./$.iter-buggy":39,"./$.iter-create":41,"./$.iterators":45,"./$.library":48,"./$.redef":58,"./$.tag":72,"./$.wks":81}],43:[function(require,module,exports){ -var SYMBOL_ITERATOR = require('./$.wks')('iterator') - , SAFE_CLOSING = false; -try { - var riter = [7][SYMBOL_ITERATOR](); - riter['return'] = function(){ SAFE_CLOSING = true; }; - Array.from(riter, function(){ throw 2; }); -} catch(e){ /* empty */ } -module.exports = function(exec){ - if(!SAFE_CLOSING)return false; - var safe = false; - try { - var arr = [7] - , iter = arr[SYMBOL_ITERATOR](); - iter.next = function(){ safe = true; }; - arr[SYMBOL_ITERATOR] = function(){ return iter; }; - exec(arr); - } catch(e){ /* empty */ } - return safe; -}; -},{"./$.wks":81}],44:[function(require,module,exports){ -module.exports = function(done, value){ - return {value: value, done: !!done}; -}; -},{}],45:[function(require,module,exports){ -module.exports = {}; -},{}],46:[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 -}; -},{}],47:[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; -}; -},{"./$":46,"./$.to-iobject":76}],48:[function(require,module,exports){ -module.exports = false; -},{}],49:[function(require,module,exports){ +(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 solve('2+5+6') + * + * @param {String} expression + * The expression to create an equation for (containing variables) + * @return {Function} + * The function which replaces variables with values in order + * and solves the expression + */ + equation: function equation(expression) { + var stack = parseExpression(expression); + var variables = []; + + stack.forEach(function varCheck(a) { + if (Array.isArray(a)) { + return a.forEach(varCheck); + } + if (isVariable(a)) { + // grouped variables like (y) need to have their parantheses removed + variables.push(_.removeSymbols(a)); + } + }); + + return function () { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + stack.forEach(function varCheck(a, i, arr) { + if (Array.isArray(a)) { + return a.forEach(varCheck); + } + + var index = variables.indexOf(a); + if (index > -1) { + // grouped variables like (y) need to have their parantheses removed + arr[i] = args[index]; + } + }); + + stack = sortStack(stack); + stack = _.parseNumbers(stack); + stack = solveStack(stack); + + return stack; + }; + }, + + registerOperator: function registerOperator(key, options) { + _operators2['default'][key] = options; + }, + + registerConstant: function registerConstant(key, options) { + _constants2['default'][key] = options; + } +}; + +var solveStack = (function (_solveStack) { + function solveStack(_x) { + return _solveStack.apply(this, arguments); + } + + solveStack.toString = function () { + return _solveStack.toString(); + }; + + 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); + }); + + return solveStack(stack); + } else { + return evaluate(stack); + } +}); + +var PRECEDENCES = Object.keys(_operators2['default']).map(function (key) { + return _operators2['default'][key].precedence; +}); + +var MAX_PRECEDENCE = Math.max.apply(Math, _toConsumableArray(PRECEDENCES)); +var MIN_PRECEDENCE = Math.min.apply(Math, _toConsumableArray(PRECEDENCES)); + +/** + * Parses the given expression into an array of separated + * numbers and operators/functions. + * The result is passed to parseGroups + * + * @param {String} expression + * The expression to parse + * @return {Array} + * The parsed array + */ +var parseExpression = function parseExpression(expression) { + // function arguments can be separated using comma, + // but we parse as groups, so this is the solution to getting comma to work + // sigma(0, 4, 2@) becomes sigma(0)(4)(2@) so every argument is parsed + // separately + expression = expression.replace(/,/g, ')('); + + var stream = new _ReadStream2['default'](expression), + stack = [], + record = '', + cur = undefined, + past = undefined; + + // Create an array of separated numbers & operators + while (stream.next()) { + cur = stream.current(); + past = stack.length - 1; + + if (cur === ' ') { + continue; + } + + // it's probably a function with a length more than one + if (!_.isNumber(cur) && !_operators2['default'][cur] && cur !== '.' && cur !== '(' && cur !== ')') { + + record += cur; + } else if (record.length) { + var beforeRecord = past - (record.length - 1); + if (isVariable(record) && _.isNumber(stack[beforeRecord])) { + stack.push('*'); + } + stack.push(record, cur); + record = ''; + + // 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; + + // (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); + } + } + if (record.length) { + var beforeRecord = past - (record.length - 1); + if (isVariable(record) && _.isNumber(stack[beforeRecord])) { + stack.push('*'); + } + stack.push(record); + } + + return parseGroups(stack); +}; + +/** + * Takes the parsed array from parseExpression and + * groups up expressions in parantheses in deep arrays + * + * Example: 2+(5+4) becomes [2, [5, '+', 4]] + * + * @param {Array} stack + * The parsed expression + * @return {Array} + * Grouped up expression + */ +var parseGroups = function parseGroups(stack) { + // Parantheses become inner arrays which will then be processed first + var depth = 0; + return stack.reduce(function (a, b) { + if (b.indexOf('(') > -1) { + if (b.length > 1) { + _.dive(a, depth).push(b.replace('(', ''), []); + } else { + _.dive(a, depth).push([]); + } + depth++; + } else if (b === ')') { + depth--; + } else { + _.dive(a, depth).push(b); + } + return a; + }, []); +}; + +/** + * Gives information about an operator's format + * including number of left and right arguments + * + * @param {String/Object} operator + * The operator object or operator name (e.g. +, -) + * @return {Object} + * An object including the count of left and right arguments + */ +var formatInfo = function formatInfo(operator) { + var op = typeof operator === 'string' ? _operators2['default'][operator] : operator; + + if (!op) { + return null; + } + + var format = op.format.split('1'), + left = format[0].length, + right = format[1].length; + + return { left: left, right: right }; +}; + +/** + * Groups up operators and their arguments based on their precedence + * in deep arrays, the higher the priority, the deeper the group. + * This simplifies the evaluating process, the only thing to do is to + * evaluate from bottom up, evaluating deep groups first + * + * @param {Array} stack + * The parsed and grouped expression + * @return {Array} + * Grouped expression based on precedences + */ +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; + + try { + for (var _iterator = stack.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var _step$value = _slicedToArray(_step.value, 2); + + var index = _step$value[0]; + var item = _step$value[1]; + + if (Array.isArray(item)) { + stack.splice(index, 1, sortStack(item)); + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator['return']) { + _iterator['return'](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + for (var i = MIN_PRECEDENCE; i <= MAX_PRECEDENCE; i++) { + for (var index = 0; index < stack.length; ++index) { + var item = stack[index]; + var op = _operators2['default'][item]; + + if (!op || op.precedence !== i) { + continue; + } + + var _formatInfo = formatInfo(op); + + var left = _formatInfo.left; + var right = _formatInfo.right; + + var group = stack.splice(index - left, left + right + 1, []); + stack[index - left] = group; + + for (var y = 0; y < i; y++) { + group = [group]; + } + + index -= right; + } + } + + return stack; +}); + +/** + * Evaluates the given math expression. + * The expression is an array with an operator and arguments + * + * Example: evaluate([2, '+', 4]) == 6 + * + * @param {Array} stack + * A single math expression + * @return {Number} + * Result of the expression + */ +var evaluate = function evaluate(stack) { + var _operators$op; + + var op = findOperator(stack); + if (!op) { + return stack[0]; + } + + var _formatInfo2 = formatInfo(op); + + var left = _formatInfo2.left; + + var leftArguments = stack.slice(0, left), + rightArguments = stack.slice(left + 1); + + return fixFloat((_operators$op = _operators2['default'][op]).fn.apply(_operators$op, _toConsumableArray(leftArguments).concat(_toConsumableArray(rightArguments)))); +}; + +/** + * Finds the first operator in an array and returns it + * + * @param {Array} arr + * The array to look for an operator in + * @return {Object} + * The operator object or null if no operator is found + */ +var findOperator = function findOperator(arr) { + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = arr[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var o = _step2.value; + + if (typeof o === 'string') { + return o; + } + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2['return']) { + _iterator2['return'](); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + + return null; +}; + +/** + * Replaces constants in a string with their values + * + * @param {String} expression + * The expression to replace constants in + * @return {String} + * The expression with constants replaced + */ +var replaceConstants = function replaceConstants(expression) { + return expression.replace(/[A-Z]*/g, function (a) { + var c = _constants2['default'][a]; + if (!c) { + return a; + } + return typeof c === 'function' ? c() : c; + }); +}; + +/** + * Fixes JavaScript's floating point precisions - Issue #5 + * + * @param {Number} number + * The number to fix + * @return {Number} + * Fixed number + */ +var fixFloat = function fixFloat(number) { + return +number.toFixed(15); +}; + +/** + * Recognizes variables such as x, y, z + * @param {String} a + * The string to check for + * @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; +}; + +exports.isVariable = isVariable; +exports['default'] = Equation; +},{"./constants":1,"./helpers":2,"./operators":4,"./readstream":5,"babel/polyfill":189}],4:[function(require,module,exports){ +'use strict'; + +var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; + +Object.defineProperty(exports, '__esModule', { + value: true +}); + +var _Equation = require('./index'); + +var _Equation2 = _interopRequireWildcard(_Equation); + +/* + * Operators and Functions + * fn: function used to evaluate value + * format: the format using which arguments are parsed: + * 0 indicates an argument and 1 indicates the operator + * e.g: factorial is 01, add is 010, like 2!, 2+2 + * precedence: determines which operators should be evaluated first + * the lower the value, the higher the precedence + * hasExpression: determines if any of the operator arguments are an expression + * This way, arguments will not be solved by equation and instead + * you have to call solve on each argument yourself. + * You get the arguments as parsed arrays sigma(0, 5, 2@) becomes + * sigma(0, 5, [2, '*', '@']). See sigma operator for reference + */ +exports['default'] = { + '^': { + fn: function fn(a, b) { + return Math.pow(a, b); + }, + format: '010', + precedence: 0 + }, + '*': { + fn: function fn(a, b) { + return a * b; + }, + format: '010', + precedence: 1 + }, + '/': { + fn: function fn(a, b) { + return a / b; + }, + format: '010', + precedence: 1 + }, + '%': { + fn: function fn(a, b) { + return a % b; + }, + format: '010', + precedence: 1 + }, + '\\': { + fn: function fn(a, b) { + return Math.floor(a / b); + }, + format: '010', + precedence: 1 + }, + '+': { + fn: function fn(a, b) { + return a + b; + }, + format: '010', + precedence: 2 + }, + '-': { + fn: function fn(a, b) { + return a - b; + }, + format: '010', + precedence: 2 + }, + '!': { + fn: function fn(a) { + var sum = 1; + for (var i = 0; i < a; ++i) { + sum *= i; + } + return sum; + }, + format: '01', + precedence: 2 + }, + log: { + fn: Math.log, + format: '10', + precedence: -1 + }, + ln: { + fn: Math.log, + format: '10', + precedence: -1 + }, + lg: { + fn: function fn(a) { + return Math.log(a) / Math.log(2); + }, + format: '10', + precedence: -1 + }, + sin: { + fn: Math.sin, + format: '10', + precedence: -1 + }, + cos: { + fn: Math.cos, + format: '10', + precedence: -1 + }, + tan: { + fn: Math.tan, + format: '10', + precedence: -1 + }, + cot: { + fn: Math.cot, + format: '10', + precedence: -1 + }, + round: { + fn: Math.round, + format: '10', + precedence: -1 + }, + floor: { + fn: Math.floor, + format: '10', + precedence: -1 + }, + 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 += _Equation2['default'].solve(expr.replace(regex, i)); + } + return sum; + }, + format: '1000', + hasExpression: true, + precedence: -1 + } +}; + +var ITERATOR_SIGN = '@'; +module.exports = exports['default']; +},{"./index":3}],5:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); + +exports['default'] = function (string) { + var i = 0, + buffer = []; + return { + next: function next() { + buffer.push(string[i]); + + if (i >= string.length) { + return null; + } + return string[i++]; + }, + current: function current() { + return string[i - 1]; + }, + index: function index() { + return i - 1; + }, + to: function to(n) { + var temp = ''; + var dest = i + n; + for (i = i; i < dest; ++i) { + temp += [string[i]]; + } + return temp; + }, + drain: function drain() { + return buffer.splice(0, buffer.length); + }, + 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); + string = temp.join(''); + + i = i - (end - start); + }), + go: function go(n) { + i += n; + }, + all: function all() { + return 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":186,"regenerator/runtime":187}],7:[function(require,module,exports){ +module.exports = function(it){ + if(typeof it != 'function')throw TypeError(it + ' is not a function!'); + return it; +}; +},{}],8:[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":38}],9:[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":74,"./$.to-iobject":76,"./$.to-length":77}],10:[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'); +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 ? Array(length) : IS_FILTER ? [] : 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; + }; +}; +},{"./$.ctx":19,"./$.iobject":35,"./$.to-length":77,"./$.to-object":78}],11:[function(require,module,exports){ +// 19.1.2.1 Object.assign(target, source, ...) +var toObject = require('./$.to-object') + , IObject = require('./$.iobject') + , enumKeys = require('./$.enum-keys'); +/* eslint-disable no-unused-vars */ +module.exports = Object.assign || function assign(target, source){ +/* eslint-enable no-unused-vars */ + var T = toObject(target) + , l = arguments.length + , i = 1; + while(l > i){ + var S = IObject(arguments[i++]) + , keys = enumKeys(S) + , length = keys.length + , j = 0 + , key; + while(length > j)T[key = keys[j++]] = S[key]; + } + return T; +}; +},{"./$.enum-keys":23,"./$.iobject":35,"./$.to-object":78}],12:[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":13,"./$.wks":81}],13:[function(require,module,exports){ +var toString = {}.toString; + +module.exports = function(it){ + return toString.call(it).slice(8, -1); +}; +},{}],14:[function(require,module,exports){ +'use strict'; +var $ = require('./$') + , hide = require('./$.hide') + , ctx = require('./$.ctx') + , species = require('./$.species') + , strictNew = require('./$.strict-new') + , defined = require('./$.defined') + , forOf = require('./$.for-of') + , step = require('./$.iter-step') + , ID = require('./$.uid')('id') + , $has = require('./$.has') + , isObject = require('./$.is-object') + , isExtensible = Object.isExtensible || isObject + , SUPPORT_DESC = require('./$.support-desc') + , SIZE = SUPPORT_DESC ? '_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); + }); + require('./$.mix')(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[1], 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(SUPPORT_DESC)$.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 + require('./$.iter-define')(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 + species(C); + species(require('./$.core')[NAME]); // for wrapper + } +}; +},{"./$":46,"./$.core":18,"./$.ctx":19,"./$.defined":21,"./$.for-of":28,"./$.has":31,"./$.hide":32,"./$.is-object":38,"./$.iter-define":42,"./$.iter-step":44,"./$.mix":51,"./$.species":64,"./$.strict-new":65,"./$.support-desc":71,"./$.uid":79}],15:[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":12,"./$.for-of":28}],16:[function(require,module,exports){ +'use strict'; +var hide = require('./$.hide') + , anObject = require('./$.an-object') + , strictNew = require('./$.strict-new') + , forOf = require('./$.for-of') + , method = require('./$.array-methods') + , WEAK = require('./$.uid')('weak') + , isObject = require('./$.is-object') + , $has = require('./$.has') + , isExtensible = Object.isExtensible || isObject + , find = method(5) + , findIndex = method(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 find(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 = findIndex(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); + }); + require('./$.mix')(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":8,"./$.array-methods":10,"./$.for-of":28,"./$.has":31,"./$.hide":32,"./$.is-object":38,"./$.mix":51,"./$.strict-new":65,"./$.uid":79}],17:[function(require,module,exports){ +'use strict'; +var global = require('./$.global') + , $def = require('./$.def') + , BUGGY = require('./$.iter-buggy') + , forOf = require('./$.for-of') + , strictNew = require('./$.strict-new'); + +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]; + require('./$.redef')(proto, KEY, + KEY == 'delete' ? function(a){ return fn.call(this, a === 0 ? 0 : a); } + : KEY == 'has' ? function has(a){ return fn.call(this, a === 0 ? 0 : a); } + : KEY == 'get' ? function get(a){ return 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 || !BUGGY && proto.forEach && proto.entries)){ + // create collection constructor + C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); + require('./$.mix')(C.prototype, methods); + } else { + var inst = new C + , chain = inst[ADDER](IS_WEAK ? {} : -0, 1) + , buggyZero; + // wrap for init collections from iterable + if(!require('./$.iter-detect')(function(iter){ new C(iter); })){ // eslint-disable-line no-new + 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 || inst.forEach(function(val, key){ + buggyZero = 1 / key === -Infinity; + }); + // fix converting -0 key to +0 + if(buggyZero){ + fixMethod('delete'); + fixMethod('has'); + IS_MAP && fixMethod('get'); + } + // + fix .add & .set for chaining + if(buggyZero || chain !== inst)fixMethod(ADDER); + // weak collections should not contains .clear method + if(IS_WEAK && proto.clear)delete proto.clear; + } + + require('./$.tag')(C, NAME); + + O[NAME] = C; + $def($def.G + $def.W + $def.F * (C != Base), O); + + if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP); + + return C; +}; +},{"./$.def":20,"./$.for-of":28,"./$.global":30,"./$.iter-buggy":39,"./$.iter-detect":43,"./$.mix":51,"./$.redef":58,"./$.strict-new":65,"./$.tag":72}],18:[function(require,module,exports){ +var core = module.exports = {}; +if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef +},{}],19:[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":7}],20:[function(require,module,exports){ +var global = require('./$.global') + , core = require('./$.core') + , hide = require('./$.hide') + , $redef = require('./$.redef') + , PROTOTYPE = 'prototype'; +var ctx = function(fn, that){ + return function(){ + return fn.apply(that, arguments); + }; +}; +var $def = function(type, name, source){ + var key, own, out, exp + , isGlobal = type & $def.G + , isProto = type & $def.P + , target = isGlobal ? global : type & $def.S + ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE] + , exports = isGlobal ? core : core[name] || (core[name] = {}); + if(isGlobal)source = name; + for(key in source){ + // contains in native + own = !(type & $def.F) && target && key in target; + // export native or passed + out = (own ? target : source)[key]; + // bind timers to global for call from export context + if(type & $def.B && own)exp = ctx(out, global); + else exp = isProto && typeof out == 'function' ? ctx(Function.call, out) : out; + // extend global + if(target && !own)$redef(target, key, out); + // export + if(exports[key] != out)hide(exports, key, exp); + if(isProto)(exports[PROTOTYPE] || (exports[PROTOTYPE] = {}))[key] = out; + } +}; +global.core = core; +// type bitmap +$def.F = 1; // forced +$def.G = 2; // global +$def.S = 4; // static +$def.P = 8; // proto +$def.B = 16; // bind +$def.W = 32; // wrap +module.exports = $def; +},{"./$.core":18,"./$.global":30,"./$.hide":32,"./$.redef":58}],21:[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; +}; +},{}],22:[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":30,"./$.is-object":38}],23:[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; +}; +},{"./$":46}],24:[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; +}; +},{}],25:[function(require,module,exports){ +module.exports = function(exec){ + try { + return !!exec(); + } catch(e){ + return true; + } +}; +},{}],26:[function(require,module,exports){ +'use strict'; +module.exports = function(KEY, length, exec){ + var defined = require('./$.defined') + , SYMBOL = require('./$.wks')(KEY) + , original = ''[KEY]; + if(require('./$.fails')(function(){ + var O = {}; + O[SYMBOL] = function(){ return 7; }; + return ''[KEY](O) != 7; + })){ + require('./$.redef')(String.prototype, KEY, exec(defined, SYMBOL, original)); + require('./$.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":21,"./$.fails":25,"./$.hide":32,"./$.redef":58,"./$.wks":81}],27:[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":8}],28:[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":8,"./$.ctx":19,"./$.is-array-iter":36,"./$.iter-call":40,"./$.to-length":77,"./core.get-iterator-method":82}],29:[function(require,module,exports){ +// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window +var toString = {}.toString + , toIObject = require('./$.to-iobject') + , getNames = require('./$').getNames; + +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)); +}; +},{"./$":46,"./$.to-iobject":76}],30:[function(require,module,exports){ +var global = typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); +module.exports = global; +if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef +},{}],31:[function(require,module,exports){ +var hasOwnProperty = {}.hasOwnProperty; +module.exports = function(it, key){ + return hasOwnProperty.call(it, key); +}; +},{}],32:[function(require,module,exports){ +var $ = require('./$') + , createDesc = require('./$.property-desc'); +module.exports = require('./$.support-desc') ? function(object, key, value){ + return $.setDesc(object, key, createDesc(1, value)); +} : function(object, key, value){ + object[key] = value; + return object; +}; +},{"./$":46,"./$.property-desc":57,"./$.support-desc":71}],33:[function(require,module,exports){ +module.exports = require('./$.global').document && document.documentElement; +},{"./$.global":30}],34:[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); +}; +},{}],35:[function(require,module,exports){ +// indexed object, fallback for non-array-like ES3 strings +var cof = require('./$.cof'); +module.exports = 0 in Object('z') ? Object : function(it){ + return cof(it) == 'String' ? it.split('') : Object(it); +}; +},{"./$.cof":13}],36:[function(require,module,exports){ +// check on default Array iterator +var Iterators = require('./$.iterators') + , ITERATOR = require('./$.wks')('iterator'); +module.exports = function(it){ + return (Iterators.Array || Array.prototype[ITERATOR]) === it; +}; +},{"./$.iterators":45,"./$.wks":81}],37:[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":38}],38:[function(require,module,exports){ +// http://jsperf.com/core-js-isobject +module.exports = function(it){ + return it !== null && (typeof it == 'object' || typeof it == 'function'); +}; +},{}],39:[function(require,module,exports){ +// Safari has buggy iterators w/o `next` +module.exports = 'keys' in [] && !('next' in [].keys()); +},{}],40:[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":8}],41:[function(require,module,exports){ +'use strict'; +var $ = require('./$') + , 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: require('./$.property-desc')(1,next)}); + require('./$.tag')(Constructor, NAME + ' Iterator'); +}; +},{"./$":46,"./$.hide":32,"./$.property-desc":57,"./$.tag":72,"./$.wks":81}],42:[function(require,module,exports){ +'use strict'; +var LIBRARY = require('./$.library') + , $def = require('./$.def') + , $redef = require('./$.redef') + , hide = require('./$.hide') + , has = require('./$.has') + , SYMBOL_ITERATOR = require('./$.wks')('iterator') + , Iterators = require('./$.iterators') + , FF_ITERATOR = '@@iterator' + , KEYS = 'keys' + , VALUES = 'values'; +var returnThis = function(){ return this; }; +module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCE){ + require('./$.iter-create')(Constructor, NAME, next); + var createMethod = function(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' + , proto = Base.prototype + , _native = proto[SYMBOL_ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT] + , _default = _native || createMethod(DEFAULT) + , methods, key; + // Fix native + if(_native){ + var IteratorPrototype = require('./$').getProto(_default.call(new Base)); + // Set @@toStringTag to native iterators + require('./$.tag')(IteratorPrototype, TAG, true); + // FF fix + if(!LIBRARY && has(proto, FF_ITERATOR))hide(IteratorPrototype, SYMBOL_ITERATOR, returnThis); + } + // Define iterator + if(!LIBRARY || FORCE)hide(proto, SYMBOL_ITERATOR, _default); + // Plug for library + Iterators[NAME] = _default; + Iterators[TAG] = returnThis; + if(DEFAULT){ + methods = { + keys: IS_SET ? _default : createMethod(KEYS), + values: DEFAULT == VALUES ? _default : createMethod(VALUES), + entries: DEFAULT != VALUES ? _default : createMethod('entries') + }; + if(FORCE)for(key in methods){ + if(!(key in proto))$redef(proto, key, methods[key]); + } else $def($def.P + $def.F * require('./$.iter-buggy'), NAME, methods); + } +}; +},{"./$":46,"./$.def":20,"./$.has":31,"./$.hide":32,"./$.iter-buggy":39,"./$.iter-create":41,"./$.iterators":45,"./$.library":48,"./$.redef":58,"./$.tag":72,"./$.wks":81}],43:[function(require,module,exports){ +var SYMBOL_ITERATOR = require('./$.wks')('iterator') + , SAFE_CLOSING = false; +try { + var riter = [7][SYMBOL_ITERATOR](); + riter['return'] = function(){ SAFE_CLOSING = true; }; + Array.from(riter, function(){ throw 2; }); +} catch(e){ /* empty */ } +module.exports = function(exec){ + if(!SAFE_CLOSING)return false; + var safe = false; + try { + var arr = [7] + , iter = arr[SYMBOL_ITERATOR](); + iter.next = function(){ safe = true; }; + arr[SYMBOL_ITERATOR] = function(){ return iter; }; + exec(arr); + } catch(e){ /* empty */ } + return safe; +}; +},{"./$.wks":81}],44:[function(require,module,exports){ +module.exports = function(done, value){ + return {value: value, done: !!done}; +}; +},{}],45:[function(require,module,exports){ +module.exports = {}; +},{}],46:[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 +}; +},{}],47:[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; +}; +},{"./$":46,"./$.to-iobject":76}],48:[function(require,module,exports){ +module.exports = false; +},{}],49:[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); -}; -},{}],50:[function(require,module,exports){ +}; +},{}],50:[function(require,module,exports){ var global = require('./$.global') , macrotask = require('./$.task').set , Observer = global.MutationObserver || global.WebKitMutationObserver @@ -1767,3319 +1767,3319 @@ module.exports = function asap(fn){ head = task; notify(); } last = task; -}; -},{"./$.cof":13,"./$.global":30,"./$.task":73}],51:[function(require,module,exports){ -var $redef = require('./$.redef'); -module.exports = function(target, src){ - for(var key in src)$redef(target, key, src[key]); - return target; -}; -},{"./$.redef":58}],52:[function(require,module,exports){ -// most Object methods by ES6 should accept primitives -module.exports = function(KEY, exec){ - var $def = require('./$.def') - , fn = (require('./$.core').Object || {})[KEY] || Object[KEY] - , exp = {}; - exp[KEY] = exec(fn); - $def($def.S + $def.F * require('./$.fails')(function(){ fn(1); }), 'Object', exp); -}; -},{"./$.core":18,"./$.def":20,"./$.fails":25}],53:[function(require,module,exports){ -var $ = require('./$') - , toIObject = require('./$.to-iobject'); -module.exports = function(isEntries){ - return function(it){ - var O = toIObject(it) - , keys = $.getKeys(O) - , length = keys.length - , i = 0 - , result = Array(length) - , key; - if(isEntries)while(length > i)result[i] = [key = keys[i++], O[key]]; - else while(length > i)result[i] = O[keys[i++]]; - return result; - }; -}; -},{"./$":46,"./$.to-iobject":76}],54:[function(require,module,exports){ -// all object keys, includes non-enumerable and symbols -var $ = require('./$') - , anObject = require('./$.an-object'); -module.exports = function ownKeys(it){ - var keys = $.getNames(anObject(it)) - , getSymbols = $.getSymbols; - return getSymbols ? keys.concat(getSymbols(it)) : keys; -}; -},{"./$":46,"./$.an-object":8}],55:[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 - , _length = arguments.length - , j = 0, k = 0, args; - if(!holder && !_length)return invoke(fn, pargs, that); - args = pargs.slice(); - if(holder)for(;length > j; j++)if(args[j] === _)args[j] = arguments[k++]; - while(_length > k)args.push(arguments[k++]); - return invoke(fn, args, that); - }; -}; -},{"./$.a-function":7,"./$.invoke":34,"./$.path":56}],56:[function(require,module,exports){ -module.exports = require('./$.global'); -},{"./$.global":30}],57:[function(require,module,exports){ -module.exports = function(bitmap, value){ - return { - enumerable : !(bitmap & 1), - configurable: !(bitmap & 2), - writable : !(bitmap & 4), - value : value - }; -}; -},{}],58:[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'){ - hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); - if(!('name' in val))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":18,"./$.global":30,"./$.hide":32,"./$.uid":79}],59:[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); - }; -}; -},{}],60:[function(require,module,exports){ -module.exports = Object.is || function is(x, y){ - return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y; -}; -},{}],61:[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(buggy, set){ - try { - set = require('./$.ctx')(Function.call, getDesc(Object.prototype, '__proto__').set, 2); - set({}, []); - } catch(e){ buggy = true; } - return function setPrototypeOf(O, proto){ - check(O, proto); - if(buggy)O.__proto__ = proto; - else set(O, proto); - return O; - }; - }() - : undefined), - check: check -}; -},{"./$":46,"./$.an-object":8,"./$.ctx":19,"./$.is-object":38}],62:[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":30}],63:[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; -}; -},{}],64:[function(require,module,exports){ -'use strict'; -var $ = require('./$') - , SPECIES = require('./$.wks')('species'); -module.exports = function(C){ - if(require('./$.support-desc') && !(SPECIES in C))$.setDesc(C, SPECIES, { - configurable: true, - get: function(){ return this; } - }); -}; -},{"./$":46,"./$.support-desc":71,"./$.wks":81}],65:[function(require,module,exports){ -module.exports = function(it, Constructor, name){ - if(!(it instanceof Constructor))throw TypeError(name + ": use the 'new' operator!"); - return it; -}; -},{}],66:[function(require,module,exports){ -// true -> String#at -// false -> String#codePointAt -var toInteger = require('./$.to-integer') - , defined = require('./$.defined'); -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":21,"./$.to-integer":75}],67:[function(require,module,exports){ -// helper for String#{startsWith, endsWith, includes} -var defined = require('./$.defined') - , cof = require('./$.cof'); - -module.exports = function(that, searchString, NAME){ - if(cof(searchString) == 'RegExp')throw TypeError('String#' + NAME + " doesn't accept regex!"); - return String(defined(that)); -}; -},{"./$.cof":13,"./$.defined":21}],68:[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 = left - ? stringFiller.slice(stringFiller.length - fillLen) - : stringFiller.slice(0, fillLen); - return left ? stringFiller + S : S + stringFiller; -}; -},{"./$.defined":21,"./$.string-repeat":69,"./$.to-length":77}],69:[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":21,"./$.to-integer":75}],70:[function(require,module,exports){ -// 1 -> String#trimLeft -// 2 -> String#trimRight -// 3 -> String#trim -var trim = function(string, TYPE){ - string = String(defined(string)); - if(TYPE & 1)string = string.replace(ltrim, ''); - if(TYPE & 2)string = string.replace(rtrim, ''); - return string; -}; - -var $def = require('./$.def') - , defined = require('./$.defined') - , 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 + '*$'); - -module.exports = function(KEY, exec){ - var exp = {}; - exp[KEY] = exec(trim); - $def($def.P + $def.F * require('./$.fails')(function(){ - return !!spaces[KEY]() || non[KEY]() != non; - }), 'String', exp); -}; -},{"./$.def":20,"./$.defined":21,"./$.fails":25}],71:[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":25}],72:[function(require,module,exports){ -var has = require('./$.has') - , hide = require('./$.hide') - , TAG = require('./$.wks')('toStringTag'); - -module.exports = function(it, tag, stat){ - if(it && !has(it = stat ? it : it.prototype, TAG))hide(it, TAG, tag); -}; -},{"./$.has":31,"./$.hide":32,"./$.wks":81}],73:[function(require,module,exports){ -'use strict'; -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.importScript){ - 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":13,"./$.ctx":19,"./$.dom-create":22,"./$.global":30,"./$.html":33,"./$.invoke":34}],74:[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":75}],75:[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); -}; -},{}],76:[function(require,module,exports){ +}; +},{"./$.cof":13,"./$.global":30,"./$.task":73}],51:[function(require,module,exports){ +var $redef = require('./$.redef'); +module.exports = function(target, src){ + for(var key in src)$redef(target, key, src[key]); + return target; +}; +},{"./$.redef":58}],52:[function(require,module,exports){ +// most Object methods by ES6 should accept primitives +module.exports = function(KEY, exec){ + var $def = require('./$.def') + , fn = (require('./$.core').Object || {})[KEY] || Object[KEY] + , exp = {}; + exp[KEY] = exec(fn); + $def($def.S + $def.F * require('./$.fails')(function(){ fn(1); }), 'Object', exp); +}; +},{"./$.core":18,"./$.def":20,"./$.fails":25}],53:[function(require,module,exports){ +var $ = require('./$') + , toIObject = require('./$.to-iobject'); +module.exports = function(isEntries){ + return function(it){ + var O = toIObject(it) + , keys = $.getKeys(O) + , length = keys.length + , i = 0 + , result = Array(length) + , key; + if(isEntries)while(length > i)result[i] = [key = keys[i++], O[key]]; + else while(length > i)result[i] = O[keys[i++]]; + return result; + }; +}; +},{"./$":46,"./$.to-iobject":76}],54:[function(require,module,exports){ +// all object keys, includes non-enumerable and symbols +var $ = require('./$') + , anObject = require('./$.an-object'); +module.exports = function ownKeys(it){ + var keys = $.getNames(anObject(it)) + , getSymbols = $.getSymbols; + return getSymbols ? keys.concat(getSymbols(it)) : keys; +}; +},{"./$":46,"./$.an-object":8}],55:[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 + , _length = arguments.length + , j = 0, k = 0, args; + if(!holder && !_length)return invoke(fn, pargs, that); + args = pargs.slice(); + if(holder)for(;length > j; j++)if(args[j] === _)args[j] = arguments[k++]; + while(_length > k)args.push(arguments[k++]); + return invoke(fn, args, that); + }; +}; +},{"./$.a-function":7,"./$.invoke":34,"./$.path":56}],56:[function(require,module,exports){ +module.exports = require('./$.global'); +},{"./$.global":30}],57:[function(require,module,exports){ +module.exports = function(bitmap, value){ + return { + enumerable : !(bitmap & 1), + configurable: !(bitmap & 2), + writable : !(bitmap & 4), + value : value + }; +}; +},{}],58:[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'){ + hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); + if(!('name' in val))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":18,"./$.global":30,"./$.hide":32,"./$.uid":79}],59:[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); + }; +}; +},{}],60:[function(require,module,exports){ +module.exports = Object.is || function is(x, y){ + return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y; +}; +},{}],61:[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(buggy, set){ + try { + set = require('./$.ctx')(Function.call, getDesc(Object.prototype, '__proto__').set, 2); + set({}, []); + } catch(e){ buggy = true; } + return function setPrototypeOf(O, proto){ + check(O, proto); + if(buggy)O.__proto__ = proto; + else set(O, proto); + return O; + }; + }() + : undefined), + check: check +}; +},{"./$":46,"./$.an-object":8,"./$.ctx":19,"./$.is-object":38}],62:[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":30}],63:[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; +}; +},{}],64:[function(require,module,exports){ +'use strict'; +var $ = require('./$') + , SPECIES = require('./$.wks')('species'); +module.exports = function(C){ + if(require('./$.support-desc') && !(SPECIES in C))$.setDesc(C, SPECIES, { + configurable: true, + get: function(){ return this; } + }); +}; +},{"./$":46,"./$.support-desc":71,"./$.wks":81}],65:[function(require,module,exports){ +module.exports = function(it, Constructor, name){ + if(!(it instanceof Constructor))throw TypeError(name + ": use the 'new' operator!"); + return it; +}; +},{}],66:[function(require,module,exports){ +// true -> String#at +// false -> String#codePointAt +var toInteger = require('./$.to-integer') + , defined = require('./$.defined'); +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":21,"./$.to-integer":75}],67:[function(require,module,exports){ +// helper for String#{startsWith, endsWith, includes} +var defined = require('./$.defined') + , cof = require('./$.cof'); + +module.exports = function(that, searchString, NAME){ + if(cof(searchString) == 'RegExp')throw TypeError('String#' + NAME + " doesn't accept regex!"); + return String(defined(that)); +}; +},{"./$.cof":13,"./$.defined":21}],68:[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 = left + ? stringFiller.slice(stringFiller.length - fillLen) + : stringFiller.slice(0, fillLen); + return left ? stringFiller + S : S + stringFiller; +}; +},{"./$.defined":21,"./$.string-repeat":69,"./$.to-length":77}],69:[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":21,"./$.to-integer":75}],70:[function(require,module,exports){ +// 1 -> String#trimLeft +// 2 -> String#trimRight +// 3 -> String#trim +var trim = function(string, TYPE){ + string = String(defined(string)); + if(TYPE & 1)string = string.replace(ltrim, ''); + if(TYPE & 2)string = string.replace(rtrim, ''); + return string; +}; + +var $def = require('./$.def') + , defined = require('./$.defined') + , 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 + '*$'); + +module.exports = function(KEY, exec){ + var exp = {}; + exp[KEY] = exec(trim); + $def($def.P + $def.F * require('./$.fails')(function(){ + return !!spaces[KEY]() || non[KEY]() != non; + }), 'String', exp); +}; +},{"./$.def":20,"./$.defined":21,"./$.fails":25}],71:[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":25}],72:[function(require,module,exports){ +var has = require('./$.has') + , hide = require('./$.hide') + , TAG = require('./$.wks')('toStringTag'); + +module.exports = function(it, tag, stat){ + if(it && !has(it = stat ? it : it.prototype, TAG))hide(it, TAG, tag); +}; +},{"./$.has":31,"./$.hide":32,"./$.wks":81}],73:[function(require,module,exports){ +'use strict'; +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.importScript){ + 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":13,"./$.ctx":19,"./$.dom-create":22,"./$.global":30,"./$.html":33,"./$.invoke":34}],74:[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":75}],75:[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); +}; +},{}],76:[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":21,"./$.iobject":35}],77:[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":75}],78:[function(require,module,exports){ -// 7.1.13 ToObject(argument) -var defined = require('./$.defined'); -module.exports = function(it){ - return Object(defined(it)); -}; -},{"./$.defined":21}],79:[function(require,module,exports){ -var id = 0 - , px = Math.random(); -module.exports = function(key){ - return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); -}; -},{}],80:[function(require,module,exports){ -// 22.1.3.31 Array.prototype[@@unscopables] -var UNSCOPABLES = require('./$.wks')('unscopables'); -if(!(UNSCOPABLES in []))require('./$.hide')(Array.prototype, UNSCOPABLES, {}); -module.exports = function(key){ - [][UNSCOPABLES][key] = true; -}; -},{"./$.hide":32,"./$.wks":81}],81:[function(require,module,exports){ -var store = require('./$.shared')('wks') - , Symbol = require('./$.global').Symbol; -module.exports = function(name){ - return store[name] || (store[name] = - Symbol && Symbol[name] || (Symbol || require('./$.uid'))('Symbol.' + name)); -}; -},{"./$.global":30,"./$.shared":62,"./$.uid":79}],82:[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":12,"./$.core":18,"./$.iterators":45,"./$.wks":81}],83:[function(require,module,exports){ -'use strict'; -var $ = require('./$') - , SUPPORT_DESC = require('./$.support-desc') - , createDesc = require('./$.property-desc') - , html = require('./$.html') - , cel = require('./$.dom-create') - , has = require('./$.has') - , cof = require('./$.cof') - , $def = require('./$.def') - , invoke = require('./$.invoke') - , arrayMethod = require('./$.array-methods') - , IE_PROTO = require('./$.uid')('__proto__') - , isObject = require('./$.is-object') - , anObject = require('./$.an-object') - , aFunction = require('./$.a-function') - , toObject = require('./$.to-object') - , toIObject = require('./$.to-iobject') - , toInteger = require('./$.to-integer') - , toIndex = require('./$.to-index') - , toLength = require('./$.to-length') - , IObject = require('./$.iobject') - , fails = require('./$.fails') - , ObjectProto = Object.prototype - , A = [] - , _slice = A.slice - , _join = A.join - , defineProperty = $.setDesc - , getOwnDescriptor = $.getDesc - , defineProperties = $.setDescs - , $indexOf = require('./$.array-includes')(false) - , factories = {} - , IE8_DOM_DEFINE; - -if(!SUPPORT_DESC){ - 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; - }; -} -$def($def.S + $def.F * !SUPPORT_DESC, '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('