applugins
Version:
Simple modular application architecture
1,385 lines (1,276 loc) • 95.9 kB
JavaScript
(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