UNPKG

applugins

Version:

Simple modular application architecture

1,385 lines (1,276 loc) 95.9 kB
(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.API = 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<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ // private plugins registry. 'use strict'; var _createClass = require('babel-runtime/helpers/create-class')['default']; var _classCallCheck = require('babel-runtime/helpers/class-call-check')['default']; var _extends = require('babel-runtime/helpers/extends')['default']; var _Map = require('babel-runtime/core-js/map')['default']; var _regeneratorRuntime = require('babel-runtime/regenerator')['default']; var _getIterator = require('babel-runtime/core-js/get-iterator')['default']; Object.defineProperty(exports, '__esModule', { value: true }); var PLUGINS = new _Map(); // instantiate plugins from configuration: function createAllPlugins(app) { var meta = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1]; if (!meta || !Array.isArray(meta)) { throw new Error('No metadata array for plugins'); } return meta.filter(function (m) { return !m.disabled; }).map(function (m) { var id = m.id; if (!id) { throw new Error('No ID for plugin'); } var ctor = m.type; if (!ctor) { throw new Error('No type for plugin ' + id); } // create var plugin = new ctor(id, app, m); // register PLUGINS.set(id, plugin); return plugin; }); } /** * An Application class singleton that represents the system as a whole. * Basically, It is just a container for plugins: creates/configures set of them and manages its life-cycle `init/done()` * Various plugins may feature the application instance with some additional functionality (like eventing, logging etc.) * * @see ./Plugin.js */ var Application = (function () { function Application(config) { _classCallCheck(this, Application); this._config = _extends({}, config); createAllPlugins(this, this.config('plugins')); } /** * Initializes the application. * * TO be invoked immediately after app instance is created. */ _createClass(Application, [{ key: 'init', value: function init() { return _regeneratorRuntime.async(function init$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.next = 2; return _regeneratorRuntime.awrap(this.forEachPlugin(function (p) { return p.resolveDependencies && p.resolveDependencies(PLUGINS); })); case 2: context$2$0.next = 4; return _regeneratorRuntime.awrap(this.forEachPlugin(function (p) { return p.init && p.init(); })); case 4: return context$2$0.abrupt('return', context$2$0.sent); case 5: case 'end': return context$2$0.stop(); } }, null, this); } /** * Finalizes the application. * * TO be invoked when process is stopped. */ }, { key: 'done', value: function done() { return _regeneratorRuntime.async(function done$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.next = 2; return _regeneratorRuntime.awrap(this.forEachPlugin(function (p) { return p.done && p.done(); })); case 2: return context$2$0.abrupt('return', context$2$0.sent); case 3: case 'end': return context$2$0.stop(); } }, null, this); } ////////////////////// // Routines ///////////////////// }, { key: 'forEachPlugin', value: function forEachPlugin(op) { var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, plugin; return _regeneratorRuntime.async(function forEachPlugin$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: _iteratorNormalCompletion = true; _didIteratorError = false; _iteratorError = undefined; context$2$0.prev = 3; _iterator = _getIterator(PLUGINS.values()); case 5: if (_iteratorNormalCompletion = (_step = _iterator.next()).done) { context$2$0.next = 12; break; } plugin = _step.value; context$2$0.next = 9; return _regeneratorRuntime.awrap(op.call(plugin, plugin)); case 9: _iteratorNormalCompletion = true; context$2$0.next = 5; break; case 12: context$2$0.next = 18; break; case 14: context$2$0.prev = 14; context$2$0.t0 = context$2$0['catch'](3); _didIteratorError = true; _iteratorError = context$2$0.t0; case 18: context$2$0.prev = 18; context$2$0.prev = 19; if (!_iteratorNormalCompletion && _iterator['return']) { _iterator['return'](); } case 21: context$2$0.prev = 21; if (!_didIteratorError) { context$2$0.next = 24; break; } throw _iteratorError; case 24: return context$2$0.finish(21); case 25: return context$2$0.finish(18); case 26: return context$2$0.abrupt('return', this); case 27: case 'end': return context$2$0.stop(); } }, null, this, [[3, 14, 18, 26], [19,, 21, 25]]); } }, { key: 'config', value: function config(key) { return key && this._config[key] || null; } }]); return Application; })(); exports['default'] = Application; module.exports = exports['default']; // init plugins // done plugins },{"babel-runtime/core-js/get-iterator":3,"babel-runtime/core-js/map":4,"babel-runtime/helpers/class-call-check":11,"babel-runtime/helpers/create-class":12,"babel-runtime/helpers/extends":13,"babel-runtime/regenerator":90}],2:[function(require,module,exports){ /** * An Application plugin. * * Represents an independent module of the system. * * It usually publishes some API methods to application when constructing. * * To be descended with business logic. * * @see ./Application.js * */ "use strict"; var _createClass = require("babel-runtime/helpers/create-class")["default"]; var _classCallCheck = require("babel-runtime/helpers/class-call-check")["default"]; var _extends = require("babel-runtime/helpers/extends")["default"]; Object.defineProperty(exports, "__esModule", { value: true }); var Plugin = (function () { function Plugin(id, app, config) { _classCallCheck(this, Plugin); this._config = _extends({}, config); this.id = id; this.app = app; } /** * Initializes the plugin. * * Invoked from Application.init() * * May return promise. */ _createClass(Plugin, [{ key: "init", value: function init() {} /** * Finalizes the plugin. * * Invoked from Application.done() */ }, { key: "done", value: function done() {} ////////////////////// // Routines ///////////////////// /** * resolves plugin dependencies. */ }, { key: "resolveDependencies", value: function resolveDependencies(plugins) { var deps = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1]; // check if depending plugin id exists deps.forEach(function (dep) { if (!plugins.has(dep)) { throw new Error("Can't init plugin " + plugin.id + ": lack of depending plugin " + dep); } }); } /** * Gets configuration value by key. * * @param key * @return config value by given `key` or null. */ }, { key: "config", value: function config(key) { return key && this._config[key] || null; } /** * Gets string representation of plugin. */ }, { key: "toString", value: function toString() { return this.id; } }]); return Plugin; })(); exports["default"] = Plugin; module.exports = exports["default"]; },{"babel-runtime/helpers/class-call-check":11,"babel-runtime/helpers/create-class":12,"babel-runtime/helpers/extends":13}],3:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/get-iterator"), __esModule: true }; },{"core-js/library/fn/get-iterator":15}],4:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/map"), __esModule: true }; },{"core-js/library/fn/map":16}],5:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/assign"), __esModule: true }; },{"core-js/library/fn/object/assign":17}],6:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/create"), __esModule: true }; },{"core-js/library/fn/object/create":18}],7:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/define-property"), __esModule: true }; },{"core-js/library/fn/object/define-property":19}],8:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/promise"), __esModule: true }; },{"core-js/library/fn/promise":20}],9:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/symbol"), __esModule: true }; },{"core-js/library/fn/symbol":21}],10:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/symbol/iterator"), __esModule: true }; },{"core-js/library/fn/symbol/iterator":22}],11:[function(require,module,exports){ "use strict"; exports["default"] = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }; exports.__esModule = true; },{}],12:[function(require,module,exports){ "use strict"; var _Object$defineProperty = require("babel-runtime/core-js/object/define-property")["default"]; exports["default"] = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; _Object$defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); exports.__esModule = true; },{"babel-runtime/core-js/object/define-property":7}],13:[function(require,module,exports){ "use strict"; var _Object$assign = require("babel-runtime/core-js/object/assign")["default"]; exports["default"] = _Object$assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; exports.__esModule = true; },{"babel-runtime/core-js/object/assign":5}],14:[function(require,module,exports){ "use strict"; exports["default"] = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; }; exports.__esModule = true; },{}],15:[function(require,module,exports){ require('../modules/web.dom.iterable'); require('../modules/es6.string.iterator'); module.exports = require('../modules/core.get-iterator'); },{"../modules/core.get-iterator":80,"../modules/es6.string.iterator":86,"../modules/web.dom.iterable":89}],16:[function(require,module,exports){ require('../modules/es6.object.to-string'); require('../modules/es6.string.iterator'); require('../modules/web.dom.iterable'); require('../modules/es6.map'); require('../modules/es7.map.to-json'); module.exports = require('../modules/$.core').Map; },{"../modules/$.core":31,"../modules/es6.map":82,"../modules/es6.object.to-string":84,"../modules/es6.string.iterator":86,"../modules/es7.map.to-json":88,"../modules/web.dom.iterable":89}],17:[function(require,module,exports){ require('../../modules/es6.object.assign'); module.exports = require('../../modules/$.core').Object.assign; },{"../../modules/$.core":31,"../../modules/es6.object.assign":83}],18:[function(require,module,exports){ var $ = require('../../modules/$'); module.exports = function create(P, D){ return $.create(P, D); }; },{"../../modules/$":55}],19:[function(require,module,exports){ var $ = require('../../modules/$'); module.exports = function defineProperty(it, key, desc){ return $.setDesc(it, key, desc); }; },{"../../modules/$":55}],20:[function(require,module,exports){ require('../modules/es6.object.to-string'); require('../modules/es6.string.iterator'); require('../modules/web.dom.iterable'); require('../modules/es6.promise'); module.exports = require('../modules/$.core').Promise; },{"../modules/$.core":31,"../modules/es6.object.to-string":84,"../modules/es6.promise":85,"../modules/es6.string.iterator":86,"../modules/web.dom.iterable":89}],21:[function(require,module,exports){ require('../../modules/es6.symbol'); module.exports = require('../../modules/$.core').Symbol; },{"../../modules/$.core":31,"../../modules/es6.symbol":87}],22:[function(require,module,exports){ require('../../modules/es6.string.iterator'); require('../../modules/web.dom.iterable'); module.exports = require('../../modules/$.wks')('iterator'); },{"../../modules/$.wks":78,"../../modules/es6.string.iterator":86,"../../modules/web.dom.iterable":89}],23:[function(require,module,exports){ module.exports = function(it){ if(typeof it != 'function')throw TypeError(it + ' is not a function!'); return it; }; },{}],24:[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":48}],25:[function(require,module,exports){ // 19.1.2.1 Object.assign(target, source, ...) var $ = require('./$') , toObject = require('./$.to-object') , IObject = require('./$.iobject'); // should work with symbols and should have deterministic property order (V8 bug) module.exports = require('./$.fails')(function(){ var a = Object.assign , A = {} , B = {} , S = Symbol() , K = 'abcdefghijklmnopqrst'; A[S] = 7; K.split('').forEach(function(k){ B[k] = k; }); return a({}, A)[S] != 7 || Object.keys(a({}, B)).join('') != K; }) ? function assign(target, source){ // eslint-disable-line no-unused-vars var T = toObject(target) , $$ = arguments , $$len = $$.length , index = 1 , getKeys = $.getKeys , getSymbols = $.getSymbols , isEnum = $.isEnum; while($$len > index){ var S = IObject($$[index++]) , keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S) , length = keys.length , j = 0 , key; while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key]; } return T; } : Object.assign; },{"./$":55,"./$.fails":37,"./$.iobject":45,"./$.to-object":75}],26:[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":27,"./$.wks":78}],27:[function(require,module,exports){ var toString = {}.toString; module.exports = function(it){ return toString.call(it).slice(8, -1); }; },{}],28:[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.length > 1 ? arguments[1] : undefined, 3) , entry; while(entry = entry ? entry.n : this._f){ f(entry.v, entry.k, this); // revert to the last existing entry while(entry && entry.r)entry = entry.p; } }, // 23.1.3.7 Map.prototype.has(key) // 23.2.3.7 Set.prototype.has(value) has: function has(key){ return !!getEntry(this, key); } }); if(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 } }; },{"./$":55,"./$.core":31,"./$.ctx":32,"./$.defined":34,"./$.for-of":38,"./$.has":41,"./$.hide":42,"./$.is-object":48,"./$.iter-define":51,"./$.iter-step":53,"./$.mix":59,"./$.species":66,"./$.strict-new":67,"./$.support-desc":69,"./$.uid":76}],29:[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":26,"./$.for-of":38}],30:[function(require,module,exports){ 'use strict'; var $ = require('./$') , $def = require('./$.def') , hide = require('./$.hide') , forOf = require('./$.for-of') , strictNew = require('./$.strict-new'); module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){ var Base = require('./$.global')[NAME] , C = Base , ADDER = IS_MAP ? 'set' : 'add' , proto = C && C.prototype , O = {}; if(!require('./$.support-desc') || typeof C != 'function' || !(IS_WEAK || proto.forEach && !require('./$.fails')(function(){ new C().entries().next(); })) ){ // create collection constructor C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); require('./$.mix')(C.prototype, methods); } else { C = wrapper(function(target, iterable){ strictNew(target, C, NAME); target._c = new Base; if(iterable != undefined)forOf(iterable, IS_MAP, target[ADDER], target); }); $.each.call('add,clear,delete,forEach,get,has,set,keys,values,entries'.split(','),function(KEY){ var chain = KEY == 'add' || KEY == 'set'; if(KEY in proto && !(IS_WEAK && KEY == 'clear'))hide(C.prototype, KEY, function(a, b){ var result = this._c[KEY](a === 0 ? 0 : a, b); return chain ? this : result; }); }); if('size' in proto)$.setDesc(C.prototype, 'size', { get: function(){ return this._c.size; } }); } require('./$.tag')(C, NAME); O[NAME] = C; $def($def.G + $def.W + $def.F, O); if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP); return C; }; },{"./$":55,"./$.def":33,"./$.fails":37,"./$.for-of":38,"./$.global":40,"./$.hide":42,"./$.mix":59,"./$.strict-new":67,"./$.support-desc":69,"./$.tag":70}],31:[function(require,module,exports){ var core = module.exports = {version: '1.2.3'}; if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef },{}],32:[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":23}],33:[function(require,module,exports){ var global = require('./$.global') , core = require('./$.core') , 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] || {})[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; if(own && key in exports)continue; // export native or passed out = own ? target[key] : source[key]; // prevent global pollution for namespaces if(isGlobal && typeof target[key] != 'function')exp = source[key]; // bind timers to global for call from export context else if(type & $def.B && own)exp = ctx(out, global); // wrap global constructors for prevent change them in library else if(type & $def.W && target[key] == out)!function(C){ exp = function(param){ return this instanceof C ? new C(param) : C(param); }; exp[PROTOTYPE] = C[PROTOTYPE]; }(out); else exp = isProto && typeof out == 'function' ? ctx(Function.call, out) : out; // export exports[key] = exp; if(isProto)(exports[PROTOTYPE] || (exports[PROTOTYPE] = {}))[key] = out; } }; // 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":31,"./$.global":40}],34:[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; }; },{}],35:[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":40,"./$.is-object":48}],36:[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; }; },{"./$":55}],37:[function(require,module,exports){ module.exports = function(exec){ try { return !!exec(); } catch(e){ return true; } }; },{}],38:[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":24,"./$.ctx":32,"./$.is-array-iter":46,"./$.iter-call":49,"./$.to-length":74,"./core.get-iterator-method":79}],39:[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)); }; },{"./$":55,"./$.to-iobject":73}],40:[function(require,module,exports){ // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 var global = module.exports = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef },{}],41:[function(require,module,exports){ var hasOwnProperty = {}.hasOwnProperty; module.exports = function(it, key){ return hasOwnProperty.call(it, key); }; },{}],42:[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; }; },{"./$":55,"./$.property-desc":60,"./$.support-desc":69}],43:[function(require,module,exports){ module.exports = require('./$.global').document && document.documentElement; },{"./$.global":40}],44:[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); }; },{}],45:[function(require,module,exports){ // fallback for non-array-like ES3 and non-enumerable old V8 strings var cof = require('./$.cof'); module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){ return cof(it) == 'String' ? it.split('') : Object(it); }; },{"./$.cof":27}],46:[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":54,"./$.wks":78}],47:[function(require,module,exports){ // 7.2.2 IsArray(argument) var cof = require('./$.cof'); module.exports = Array.isArray || function(arg){ return cof(arg) == 'Array'; }; },{"./$.cof":27}],48:[function(require,module,exports){ module.exports = function(it){ return typeof it === 'object' ? it !== null : typeof it === 'function'; }; },{}],49:[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":24}],50:[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'); }; },{"./$":55,"./$.hide":42,"./$.property-desc":60,"./$.tag":70,"./$.wks":78}],51:[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') , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next` , FF_ITERATOR = '@@iterator' , KEYS = 'keys' , VALUES = 'values'; var returnThis = function(){ return this; }; module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, 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 = { values: DEFAULT == VALUES ? _default : createMethod(VALUES), keys: IS_SET ? _default : createMethod(KEYS), 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 * BUGGY, NAME, methods); } }; },{"./$":55,"./$.def":33,"./$.has":41,"./$.hide":42,"./$.iter-create":50,"./$.iterators":54,"./$.library":57,"./$.redef":61,"./$.tag":70,"./$.wks":78}],52:[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, skipClosing){ if(!skipClosing && !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":78}],53:[function(require,module,exports){ module.exports = function(done, value){ return {value: value, done: !!done}; }; },{}],54:[function(require,module,exports){ module.exports = {}; },{}],55:[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 }; },{}],56:[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; }; },{"./$":55,"./$.to-iobject":73}],57:[function(require,module,exports){ module.exports = true; },{}],58:[function(require,module,exports){ var global = require('./$.global') , macrotask = require('./$.task').set , Observer = global.MutationObserver || global.WebKitMutationObserver , process = global.process , isNode = require('./$.cof')(process) == 'process' , head, last, notify; var flush = function(){ var parent, domain; if(isNode && (parent = process.domain)){ process.domain = null; parent.exit(); } while(head){ domain = head.domain; if(domain)domain.enter(); head.fn.call(); // <- currently we use it only for Promise - try / catch not required if(domain)domain.exit(); head = head.next; } last = undefined; if(parent)parent.enter(); }; // Node.js if(isNode){ notify = function(){ process.nextTick(flush); }; // browsers with MutationObserver } else if(Observer){ var toggle = 1 , node = document.createTextNode(''); new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new notify = function(){ node.data = toggle = -toggle; }; // for other environments - macrotask based on: // - setImmediate // - MessageChannel // - window.postMessag // - onreadystatechange // - setTimeout } else { notify = function(){ // strange IE + webpack dev server bug - use .call(global) macrotask.call(global, flush); }; } module.exports = function asap(fn){ var task = {fn: fn, next: undefined, domain: isNode && process.domain}; if(last)last.next = task; if(!head){ head = task; notify(); } last = task; }; },{"./$.cof":27,"./$.global":40,"./$.task":71}],59:[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":61}],60:[function(require,module,exports){ module.exports = function(bitmap, value){ return { enumerable : !(bitmap & 1), configurable: !(bitmap & 2), writable : !(bitmap & 4), value : value }; }; },{}],61:[function(require,module,exports){ module.exports = require('./$.hide'); },{"./$.hide":42}],62:[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; }; },{}],63:[function(require,module,exports){ // Works with __proto__ only. Old v8 can't work with null proto objects. /* eslint-disable no-proto */ var getDesc = require('./$').getDesc , isObject = require('./$.is-object') , anObject = require('./$.an-object'); var check = function(O, proto){ anObject(O); if(!isObject(proto) && proto !== null)throw TypeError(proto + ": can't set as prototype!"); }; module.exports = { set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line function(test, buggy, set){ try { set = require('./$.ctx')(Function.call, getDesc(Object.prototype, '__proto__').set, 2); set(test, []); buggy = !(test instanceof Array); } catch(e){ buggy = true; } return function setPrototypeOf(O, proto){ check(O, proto); if(buggy)O.__proto__ = proto; else set(O, proto); return O; }; }({}, false) : undefined), check: check }; },{"./$":55,"./$.an-object":24,"./$.ctx":32,"./$.is-object":48}],64:[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":40}],65:[function(require,module,exports){ // 7.3.20 SpeciesConstructor(O, defaultConstructor) var anObject = require('./$.an-object') , aFunction = require('./$.a-function') , SPECIES = require('./$.wks')('species'); module.exports = function(O, D){ var C = anObject(O).constructor, S; return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S); }; },{"./$.a-function":23,"./$.an-object":24,"./$.wks":78}],66:[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; } }); }; },{"./$":55,"./$.support-desc":69,"./$.wks":78}],67:[function(require,module,exports){ module.exports = function(it, Constructor, name){ if(!(it instanceof Constructor))throw TypeError(name + ": use the 'new' operator!"); return it; }; },{}],68:[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":34,"./$.to-integer":72}],69:[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":37}],70:[function(require,module,exports){ var def = require('./$').setDesc , has = require('./$.has') , TAG = require('./$.wks')('toStringTag'); module.exports = function(it, tag, stat){ if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag}); }; },{"./$":55,"./$.has":41,"./$.wks":78}],71:[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.importScripts){ defer = function(id){ global.postMessage(id + '', '*'); }; global.addEventListener('message', listner, false); // IE8- } else if(ONREADYSTATECHANGE in cel('script')){ defer = function(id){ html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){ html.removeChild(this); run.call(id); }; }; // Rest old browsers } else { defer = function(id){ setTimeout(ctx(run, id, 1), 0); }; } } module.exports = { set: setTask, clear: clearTask }; },{"./$.cof":27,"./$.ctx":32,"./$.dom-create":35,"./$.global":40,"./$.html":43,"./$.invoke":44}],72:[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); }; },{}],73:[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":34,"./$.iobject":45}],74:[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":72}],75:[function(require,module,exports){ // 7.1.13 ToObject(argument) var defined = require('./$.defined'); module.exports = function(it){ return Object(defined(it)); }; },{"./$.defined":34}],76:[function(require,module,exports){ var id = 0 , px = Math.random(); module.exports = function(key){ return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); }; },{}],77:[function(require,module,exports){ module.exports = function(){ /* empty */ }; },{}],78:[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":40,"./$.shared":64,"./$.uid":76}],79:[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":26,"./$.core":31,"./$.iterators":54,"./$.wks":78}],80:[function(require,module,exports){ var anObject = require('./$.an-object') , get = require('./core.get-iterator-method'); module.exports = require('./$.core').getIterator = function(it){ var iterFn = get(it); if(typeof iterFn != 'function')throw TypeError(it + ' is not iterable!'); return anObject(iterFn.call(it)); }; },{"./$.an-object":24,"./$.core":31,"./core.get-iterator-method":79}],81:[function(require,module,expo