http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/272454c4/packages/weex-js-framework/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-js-framework/index.js 
b/packages/weex-js-framework/index.js
index 21afb62..e868002 100644
--- a/packages/weex-js-framework/index.js
+++ b/packages/weex-js-framework/index.js
@@ -1,5 +1,5 @@
-(this.nativeLog || function(s) {console.log(s)})('START JS FRAMEWORK 0.20.6, 
Build 2017-08-01 19:09.');
-;(this.getJSFMVersion = function(){return "0.20.6"});
+(this.nativeLog || function(s) {console.log(s)})('START JS FRAMEWORK 0.21.8, 
Build 2017-08-10 14:43.');
+;(this.getJSFMVersion = function(){return "0.21.8"});
 var global = this, process = { env: {} };var setTimeout = global.setTimeout;
 
 (function (global, factory) {
@@ -8,7 +8,7 @@ var global = this, process = { env: {} };var setTimeout = 
global.setTimeout;
        (factory());
 }(this, (function () { 'use strict';
 
-var subversion = 
{"browser":"0.5.0","framework":"0.20.6","vue-render":"0.12.1","transformer":">=0.1.5
 <0.5"};
+var subversion = 
{"browser":"0.5.0","framework":"0.21.8","vue-render":"0.12.3","transformer":">=0.1.5
 <0.5"};
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -131,76 +131,79 @@ function createCommonjsModule(fn, module) {
 var _global = createCommonjsModule(function (module) {
 // 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
+  ? window : typeof self != 'undefined' && self.Math == Math ? self
+  // eslint-disable-next-line no-new-func
+  : Function('return this')();
+if (typeof __g == 'number') { __g = global; } // eslint-disable-line no-undef
 });
 
 var _core = createCommonjsModule(function (module) {
-var core = module.exports = {version: '2.4.0'};
-if(typeof __e == 'number'){ __e = core; } // eslint-disable-line no-undef
+var core = module.exports = { version: '2.5.0' };
+if (typeof __e == 'number') { __e = core; } // eslint-disable-line no-undef
 });
 
-var _isObject = function(it){
+var _isObject = function (it) {
   return typeof it === 'object' ? it !== null : typeof it === 'function';
 };
 
 var isObject = _isObject;
-var _anObject = function(it){
-  if(!isObject(it)){ throw TypeError(it + ' is not an object!'); }
+var _anObject = function (it) {
+  if (!isObject(it)) { throw TypeError(it + ' is not an object!'); }
   return it;
 };
 
-var _fails = function(exec){
+var _fails = function (exec) {
   try {
     return !!exec();
-  } catch(e){
+  } catch (e) {
     return true;
   }
 };
 
 // Thank's IE8 for his funny defineProperty
-var _descriptors = !_fails(function(){
-  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
+var _descriptors = !_fails(function () {
+  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a 
!= 7;
 });
 
 var isObject$1 = _isObject;
 var document$1 = _global.document;
+// typeof document.createElement is 'object' in old IE
 var is = isObject$1(document$1) && isObject$1(document$1.createElement);
-var _domCreate = function(it){
+var _domCreate = function (it) {
   return is ? document$1.createElement(it) : {};
 };
 
-var _ie8DomDefine = !_descriptors && !_fails(function(){
-  return Object.defineProperty(_domCreate('div'), 'a', {get: function(){ 
return 7; }}).a != 7;
+var _ie8DomDefine = !_descriptors && !_fails(function () {
+  return Object.defineProperty(_domCreate('div'), 'a', { get: function () { 
return 7; } }).a != 7;
 });
 
 // 7.1.1 ToPrimitive(input [, PreferredType])
 var isObject$2 = _isObject;
 // instead of the ES6 spec version, we didn't implement @@toPrimitive case
 // and the second argument - flag - preferred type is a string
-var _toPrimitive = function(it, S){
-  if(!isObject$2(it)){ return it; }
+var _toPrimitive = function (it, S) {
+  if (!isObject$2(it)) { return it; }
   var fn, val;
-  if(S && typeof (fn = it.toString) == 'function' && !isObject$2(val = 
fn.call(it))){ return val; }
-  if(typeof (fn = it.valueOf) == 'function' && !isObject$2(val = 
fn.call(it))){ return val; }
-  if(!S && typeof (fn = it.toString) == 'function' && !isObject$2(val = 
fn.call(it))){ return val; }
+  if (S && typeof (fn = it.toString) == 'function' && !isObject$2(val = 
fn.call(it))) { return val; }
+  if (typeof (fn = it.valueOf) == 'function' && !isObject$2(val = 
fn.call(it))) { return val; }
+  if (!S && typeof (fn = it.toString) == 'function' && !isObject$2(val = 
fn.call(it))) { return val; }
   throw TypeError("Can't convert object to primitive value");
 };
 
-var anObject       = _anObject;
+var anObject = _anObject;
 var IE8_DOM_DEFINE = _ie8DomDefine;
-var toPrimitive    = _toPrimitive;
-var dP$1             = Object.defineProperty;
+var toPrimitive = _toPrimitive;
+var dP$1 = Object.defineProperty;
 
-var f = _descriptors ? Object.defineProperty : function defineProperty(O, P, 
Attributes){
+var f = _descriptors ? Object.defineProperty : function defineProperty(O, P, 
Attributes) {
   anObject(O);
   P = toPrimitive(P, true);
   anObject(Attributes);
-  if(IE8_DOM_DEFINE){ try {
+  if (IE8_DOM_DEFINE) { try {
     return dP$1(O, P, Attributes);
-  } catch(e){ /* empty */ } }
-  if('get' in Attributes || 'set' in Attributes){ throw TypeError('Accessors 
not supported!'); }
-  if('value' in Attributes){ O[P] = Attributes.value; }
+  } catch (e) { /* empty */ } }
+  if ('get' in Attributes || 'set' in Attributes) { throw TypeError('Accessors 
not supported!'); }
+  if ('value' in Attributes) { O[P] = Attributes.value; }
   return O;
 };
 
@@ -208,115 +211,114 @@ var _objectDp = {
        f: f
 };
 
-var _propertyDesc = function(bitmap, value){
+var _propertyDesc = function (bitmap, value) {
   return {
-    enumerable  : !(bitmap & 1),
+    enumerable: !(bitmap & 1),
     configurable: !(bitmap & 2),
-    writable    : !(bitmap & 4),
-    value       : value
+    writable: !(bitmap & 4),
+    value: value
   };
 };
 
-var dP         = _objectDp;
+var dP = _objectDp;
 var createDesc = _propertyDesc;
-var _hide = _descriptors ? function(object, key, value){
+var _hide = _descriptors ? function (object, key, value) {
   return dP.f(object, key, createDesc(1, value));
-} : function(object, key, value){
+} : function (object, key, value) {
   object[key] = value;
   return object;
 };
 
 var hasOwnProperty = {}.hasOwnProperty;
-var _has = function(it, key){
+var _has = function (it, key) {
   return hasOwnProperty.call(it, key);
 };
 
 var id = 0;
 var px = Math.random();
-var _uid = function(key){
+var _uid = function (key) {
   return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + 
px).toString(36));
 };
 
 var _redefine = createCommonjsModule(function (module) {
-var global    = _global
-  , hide      = _hide
-  , has       = _has
-  , SRC       = _uid('src')
-  , TO_STRING = 'toString'
-  , $toString = Function[TO_STRING]
-  , TPL       = ('' + $toString).split(TO_STRING);
-
-_core.inspectSource = function(it){
+var global = _global;
+var hide = _hide;
+var has = _has;
+var SRC = _uid('src');
+var TO_STRING = 'toString';
+var $toString = Function[TO_STRING];
+var TPL = ('' + $toString).split(TO_STRING);
+
+_core.inspectSource = function (it) {
   return $toString.call(it);
 };
 
-(module.exports = function(O, key, val, safe){
+(module.exports = function (O, key, val, safe) {
   var isFunction = typeof val == 'function';
-  if(isFunction){ has(val, 'name') || hide(val, 'name', key); }
-  if(O[key] === val){ return; }
-  if(isFunction){ has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : 
TPL.join(String(key))); }
-  if(O === global){
+  if (isFunction) { has(val, 'name') || hide(val, 'name', key); }
+  if (O[key] === val) { return; }
+  if (isFunction) { has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : 
TPL.join(String(key))); }
+  if (O === global) {
+    O[key] = val;
+  } else if (!safe) {
+    delete O[key];
+    hide(O, key, val);
+  } else if (O[key]) {
     O[key] = val;
   } else {
-    if(!safe){
-      delete O[key];
-      hide(O, key, val);
-    } else {
-      if(O[key]){ O[key] = val; }
-      else { hide(O, key, val); }
-    }
+    hide(O, key, val);
   }
 // add fake Function#toString for correct work wrapped methods / constructors 
with methods like LoDash isNative
-})(Function.prototype, TO_STRING, function toString(){
+})(Function.prototype, TO_STRING, function toString() {
   return typeof this == 'function' && this[SRC] || $toString.call(this);
 });
 });
 
-var _aFunction = function(it){
-  if(typeof it != 'function'){ throw TypeError(it + ' is not a function!'); }
+var _aFunction = function (it) {
+  if (typeof it != 'function') { throw TypeError(it + ' is not a function!'); }
   return it;
 };
 
 // optional / simple context binding
 var aFunction = _aFunction;
-var _ctx = function(fn, that, length){
+var _ctx = function (fn, that, length) {
   aFunction(fn);
-  if(that === undefined){ return fn; }
-  switch(length){
-    case 1: return function(a){
+  if (that === undefined) { return fn; }
+  switch (length) {
+    case 1: return function (a) {
       return fn.call(that, a);
     };
-    case 2: return function(a, b){
+    case 2: return function (a, b) {
       return fn.call(that, a, b);
     };
-    case 3: return function(a, b, c){
+    case 3: return function (a, b, c) {
       return fn.call(that, a, b, c);
     };
   }
-  return function(/* ...args */){
+  return function (/* ...args */) {
     return fn.apply(that, arguments);
   };
 };
 
-var global$1    = _global;
-var core      = _core;
-var hide      = _hide;
-var redefine  = _redefine;
-var ctx       = _ctx;
+var global$1 = _global;
+var core = _core;
+var hide = _hide;
+var redefine = _redefine;
+var ctx = _ctx;
 var PROTOTYPE = 'prototype';
 
-var $export$1 = function(type, name, source){
-  var IS_FORCED = type & $export$1.F
-    , IS_GLOBAL = type & $export$1.G
-    , IS_STATIC = type & $export$1.S
-    , IS_PROTO  = type & $export$1.P
-    , IS_BIND   = type & $export$1.B
-    , target    = IS_GLOBAL ? global$1 : IS_STATIC ? global$1[name] || 
(global$1[name] = {}) : (global$1[name] || {})[PROTOTYPE]
-    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})
-    , expProto  = exports[PROTOTYPE] || (exports[PROTOTYPE] = {})
-    , key, own, out, exp;
-  if(IS_GLOBAL){ source = name; }
-  for(key in source){
+var $export$1 = function (type, name, source) {
+  var IS_FORCED = type & $export$1.F;
+  var IS_GLOBAL = type & $export$1.G;
+  var IS_STATIC = type & $export$1.S;
+  var IS_PROTO = type & $export$1.P;
+  var IS_BIND = type & $export$1.B;
+  var target = IS_GLOBAL ? global$1 : IS_STATIC ? global$1[name] || 
(global$1[name] = {}) : (global$1[name] || {})[PROTOTYPE];
+  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
+  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});
+  var key, own, out, exp;
+  if (IS_GLOBAL) { source = name; }
+  for (key in source) {
     // contains in native
     own = !IS_FORCED && target && target[key] !== undefined;
     // export native or passed
@@ -324,10 +326,10 @@ var $export$1 = function(type, name, source){
     // bind timers to global for call from export context
     exp = IS_BIND && own ? ctx(out, global$1) : IS_PROTO && typeof out == 
'function' ? ctx(Function.call, out) : out;
     // extend global
-    if(target){ redefine(target, key, out, type & $export$1.U); }
+    if (target) { redefine(target, key, out, type & $export$1.U); }
     // export
-    if(exports[key] != out){ hide(exports, key, exp); }
-    if(IS_PROTO && expProto[key] != out){ expProto[key] = out; }
+    if (exports[key] != out) { hide(exports, key, exp); }
+    if (IS_PROTO && expProto[key] != out) { expProto[key] = out; }
   }
 };
 global$1.core = core;
@@ -339,52 +341,53 @@ $export$1.P = 8;   // proto
 $export$1.B = 16;  // bind
 $export$1.W = 32;  // wrap
 $export$1.U = 64;  // safe
-$export$1.R = 128; // real proto method for `library` 
+$export$1.R = 128; // real proto method for `library`
 var _export = $export$1;
 
 var toString$1 = {}.toString;
 
-var _cof = function(it){
+var _cof = function (it) {
   return toString$1.call(it).slice(8, -1);
 };
 
 // fallback for non-array-like ES3 and non-enumerable old V8 strings
 var cof = _cof;
-var _iobject = Object('z').propertyIsEnumerable(0) ? Object : function(it){
+// eslint-disable-next-line no-prototype-builtins
+var _iobject = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
   return cof(it) == 'String' ? it.split('') : Object(it);
 };
 
 // 7.2.1 RequireObjectCoercible(argument)
-var _defined = function(it){
-  if(it == undefined){ throw TypeError("Can't call method on  " + it); }
+var _defined = function (it) {
+  if (it == undefined) { throw TypeError("Can't call method on  " + it); }
   return it;
 };
 
 // to indexed object, toObject with fallback for non-array-like ES3 strings
 var IObject$1 = _iobject;
 var defined = _defined;
-var _toIobject = function(it){
+var _toIobject = function (it) {
   return IObject$1(defined(it));
 };
 
 // 7.1.4 ToInteger
-var ceil  = Math.ceil;
+var ceil = Math.ceil;
 var floor = Math.floor;
-var _toInteger = function(it){
+var _toInteger = function (it) {
   return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
 };
 
 // 7.1.15 ToLength
 var toInteger = _toInteger;
-var min       = Math.min;
-var _toLength = function(it){
+var min = Math.min;
+var _toLength = function (it) {
   return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 
== 9007199254740991
 };
 
 var toInteger$1 = _toInteger;
-var max       = Math.max;
-var min$1       = Math.min;
-var _toIndex = function(index, length){
+var max = Math.max;
+var min$1 = Math.min;
+var _toAbsoluteIndex = function (index, length) {
   index = toInteger$1(index);
   return index < 0 ? max(index + length, 0) : min$1(index, length);
 };
@@ -392,51 +395,53 @@ var _toIndex = function(index, length){
 // false -> Array#indexOf
 // true  -> Array#includes
 var toIObject$1 = _toIobject;
-var toLength  = _toLength;
-var toIndex   = _toIndex;
-var _arrayIncludes = function(IS_INCLUDES){
-  return function($this, el, fromIndex){
-    var O      = toIObject$1($this)
-      , length = toLength(O.length)
-      , index  = toIndex(fromIndex, length)
-      , value;
+var toLength = _toLength;
+var toAbsoluteIndex = _toAbsoluteIndex;
+var _arrayIncludes = function (IS_INCLUDES) {
+  return function ($this, el, fromIndex) {
+    var O = toIObject$1($this);
+    var length = toLength(O.length);
+    var index = toAbsoluteIndex(fromIndex, length);
+    var value;
     // Array#includes uses SameValueZero equality algorithm
-    if(IS_INCLUDES && el != el){ while(length > index){
+    // eslint-disable-next-line no-self-compare
+    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 || 0; }
+      // eslint-disable-next-line no-self-compare
+      if (value != value) { return true; }
+    // Array#indexOf ignores holes, Array#includes - not
+    } } else { for (;length > index; index++) { if (IS_INCLUDES || index in O) 
{
+      if (O[index] === el) { return IS_INCLUDES || index || 0; }
     } } } return !IS_INCLUDES && -1;
   };
 };
 
 var global$2 = _global;
 var SHARED = '__core-js_shared__';
-var store  = global$2[SHARED] || (global$2[SHARED] = {});
-var _shared = function(key){
+var store = global$2[SHARED] || (global$2[SHARED] = {});
+var _shared = function (key) {
   return store[key] || (store[key] = {});
 };
 
 var shared = _shared('keys');
-var uid    = _uid;
-var _sharedKey = function(key){
+var uid = _uid;
+var _sharedKey = function (key) {
   return shared[key] || (shared[key] = uid(key));
 };
 
-var has$1          = _has;
-var toIObject    = _toIobject;
+var has$1 = _has;
+var toIObject = _toIobject;
 var arrayIndexOf = _arrayIncludes(false);
-var IE_PROTO     = _sharedKey('IE_PROTO');
-
-var _objectKeysInternal = function(object, names){
-  var O      = toIObject(object)
-    , i      = 0
-    , result = []
-    , key;
-  for(key in O){ if(key != IE_PROTO){ has$1(O, key) && result.push(key); } }
+var IE_PROTO = _sharedKey('IE_PROTO');
+
+var _objectKeysInternal = function (object, names) {
+  var O = toIObject(object);
+  var i = 0;
+  var result = [];
+  var key;
+  for (key in O) { if (key != IE_PROTO) { has$1(O, key) && result.push(key); } 
}
   // Don't enum bug & hidden keys
-  while(names.length > i){ if(has$1(O, key = names[i++])){
+  while (names.length > i) { if (has$1(O, key = names[i++])) {
     ~arrayIndexOf(result, key) || result.push(key);
   } }
   return result;
@@ -448,10 +453,10 @@ var _enumBugKeys = (
 ).split(',');
 
 // 19.1.2.14 / 15.2.3.14 Object.keys(O)
-var $keys       = _objectKeysInternal;
+var $keys = _objectKeysInternal;
 var enumBugKeys = _enumBugKeys;
 
-var _objectKeys = Object.keys || function keys(O){
+var _objectKeys = Object.keys || function keys(O) {
   return $keys(O, enumBugKeys);
 };
 
@@ -469,49 +474,50 @@ var _objectPie = {
 
 // 7.1.13 ToObject(argument)
 var defined$1 = _defined;
-var _toObject = function(it){
+var _toObject = function (it) {
   return Object(defined$1(it));
 };
 
 // 19.1.2.1 Object.assign(target, source, ...)
-var getKeys  = _objectKeys;
-var gOPS     = _objectGops;
-var pIE      = _objectPie;
+var getKeys = _objectKeys;
+var gOPS = _objectGops;
+var pIE = _objectPie;
 var toObject = _toObject;
-var IObject  = _iobject;
-var $assign  = Object.assign;
+var IObject = _iobject;
+var $assign = Object.assign;
 
 // should work with symbols and should have deterministic property order (V8 
bug)
-var _objectAssign = !$assign || _fails(function(){
-  var A = {}
-    , B = {}
-    , S = Symbol()
-    , K = 'abcdefghijklmnopqrst';
+var _objectAssign = !$assign || _fails(function () {
+  var A = {};
+  var B = {};
+  // eslint-disable-next-line no-undef
+  var S = Symbol();
+  var K = 'abcdefghijklmnopqrst';
   A[S] = 7;
-  K.split('').forEach(function(k){ B[k] = k; });
+  K.split('').forEach(function (k) { B[k] = k; });
   return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
-}) ? function assign(target, source){
+}) ? function assign(target, source) {
   var arguments$1 = arguments;
  // eslint-disable-line no-unused-vars
-  var T     = toObject(target)
-    , aLen  = arguments.length
-    , index = 1
-    , getSymbols = gOPS.f
-    , isEnum     = pIE.f;
-  while(aLen > index){
-    var S      = IObject(arguments$1[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]; } 
}
+  var T = toObject(target);
+  var aLen = arguments.length;
+  var index = 1;
+  var getSymbols = gOPS.f;
+  var isEnum = pIE.f;
+  while (aLen > index) {
+    var S = IObject(arguments$1[index++]);
+    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);
+    var length = keys.length;
+    var j = 0;
+    var key;
+    while (length > j) { if (isEnum.call(S, key = keys[j++])) { T[key] = 
S[key]; } }
   } return T;
 } : $assign;
 
 // 19.1.3.1 Object.assign(target, source)
 var $export = _export;
 
-$export($export.S + $export.F, 'Object', {assign: _objectAssign});
+$export($export.S + $export.F, 'Object', { assign: _objectAssign });
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -638,12 +644,12 @@ if (WXEnvironment$1 && WXEnvironment$1.platform === 
'iOS') {
 }
 
 var _wks = createCommonjsModule(function (module) {
-var store      = _shared('wks')
-  , uid        = _uid
-  , Symbol     = _global.Symbol
-  , USE_SYMBOL = typeof Symbol == 'function';
+var store = _shared('wks');
+var uid = _uid;
+var Symbol = _global.Symbol;
+var USE_SYMBOL = typeof Symbol == 'function';
 
-var $exports = module.exports = function(name){
+var $exports = module.exports = function (name) {
   return store[name] || (store[name] =
     USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + 
name));
 };
@@ -654,16 +660,17 @@ $exports.store = store;
 // getting tag from 19.1.3.6 Object.prototype.toString()
 var cof$1 = _cof;
 var TAG = _wks('toStringTag');
-var ARG = cof$1(function(){ return arguments; }()) == 'Arguments';
+// ES3 wrong here
+var ARG = cof$1(function () { return arguments; }()) == 'Arguments';
 
 // fallback for IE11 Script Access Denied error
-var tryGet = function(it, key){
+var tryGet = function (it, key) {
   try {
     return it[key];
-  } catch(e){ /* empty */ }
+  } catch (e) { /* empty */ }
 };
 
-var _classof = function(it){
+var _classof = function (it) {
   var O, T, B;
   return it === undefined ? 'Undefined' : it === null ? 'Null'
     // @@toStringTag case
@@ -676,25 +683,25 @@ var _classof = function(it){
 
 // 19.1.3.6 Object.prototype.toString()
 var classof = _classof;
-var test    = {};
+var test = {};
 test[_wks('toStringTag')] = 'z';
-if(test + '' != '[object z]'){
-  _redefine(Object.prototype, 'toString', function toString(){
+if (test + '' != '[object z]') {
+  _redefine(Object.prototype, 'toString', function toString() {
     return '[object ' + classof(this) + ']';
   }, true);
 }
 
 var toInteger$2 = _toInteger;
-var defined$2   = _defined;
+var defined$2 = _defined;
 // true  -> String#at
 // false -> String#codePointAt
-var _stringAt = function(TO_STRING){
-  return function(that, pos){
-    var s = String(defined$2(that))
-      , i = toInteger$2(pos)
-      , l = s.length
-      , a, b;
-    if(i < 0 || i >= l){ return TO_STRING ? '' : undefined; }
+var _stringAt = function (TO_STRING) {
+  return function (that, pos) {
+    var s = String(defined$2(that));
+    var i = toInteger$2(pos);
+    var l = s.length;
+    var 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
@@ -706,38 +713,39 @@ var _library = false;
 
 var _iterators = {};
 
-var dP$2       = _objectDp;
+var dP$2 = _objectDp;
 var anObject$2 = _anObject;
-var getKeys$1  = _objectKeys;
+var getKeys$1 = _objectKeys;
 
-var _objectDps = _descriptors ? Object.defineProperties : function 
defineProperties(O, Properties){
+var _objectDps = _descriptors ? Object.defineProperties : function 
defineProperties(O, Properties) {
   anObject$2(O);
-  var keys   = getKeys$1(Properties)
-    , length = keys.length
-    , i = 0
-    , P;
-  while(length > i){ dP$2.f(O, P = keys[i++], Properties[P]); }
+  var keys = getKeys$1(Properties);
+  var length = keys.length;
+  var i = 0;
+  var P;
+  while (length > i) { dP$2.f(O, P = keys[i++], Properties[P]); }
   return O;
 };
 
-var _html = _global.document && document.documentElement;
+var document$2 = _global.document;
+var _html = document$2 && document$2.documentElement;
 
 // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
-var anObject$1    = _anObject;
-var dPs         = _objectDps;
+var anObject$1 = _anObject;
+var dPs = _objectDps;
 var enumBugKeys$1 = _enumBugKeys;
-var IE_PROTO$1    = _sharedKey('IE_PROTO');
-var Empty       = function(){ /* empty */ };
-var PROTOTYPE$1   = 'prototype';
+var IE_PROTO$1 = _sharedKey('IE_PROTO');
+var Empty = function () { /* empty */ };
+var PROTOTYPE$1 = 'prototype';
 
 // Create object with fake `null` prototype: use iframe Object with cleared 
prototype
-var createDict = function(){
+var createDict = function () {
   // Thrash, waste and sodomy: IE GC bug
-  var iframe = _domCreate('iframe')
-    , i      = enumBugKeys$1.length
-    , lt     = '<'
-    , gt     = '>'
-    , iframeDocument;
+  var iframe = _domCreate('iframe');
+  var i = enumBugKeys$1.length;
+  var lt = '<';
+  var gt = '>';
+  var iframeDocument;
   iframe.style.display = 'none';
   _html.appendChild(iframe);
   iframe.src = 'javascript:'; // eslint-disable-line no-script-url
@@ -748,15 +756,15 @@ var createDict = function(){
   iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + 
'/script' + gt);
   iframeDocument.close();
   createDict = iframeDocument.F;
-  while(i--){ delete createDict[PROTOTYPE$1][enumBugKeys$1[i]]; }
+  while (i--) { delete createDict[PROTOTYPE$1][enumBugKeys$1[i]]; }
   return createDict();
 };
 
-var _objectCreate = Object.create || function create(O, Properties){
+var _objectCreate = Object.create || function create(O, Properties) {
   var result;
-  if(O !== null){
+  if (O !== null) {
     Empty[PROTOTYPE$1] = anObject$1(O);
-    result = new Empty;
+    result = new Empty();
     Empty[PROTOTYPE$1] = null;
     // add "__proto__" for Object.getPrototypeOf polyfill
     result[IE_PROTO$1] = O;
@@ -768,160 +776,160 @@ var def = _objectDp.f;
 var has$3 = _has;
 var TAG$1 = _wks('toStringTag');
 
-var _setToStringTag = function(it, tag, stat){
-  if(it && !has$3(it = stat ? it : it.prototype, TAG$1)){ def(it, TAG$1, 
{configurable: true, value: tag}); }
+var _setToStringTag = function (it, tag, stat) {
+  if (it && !has$3(it = stat ? it : it.prototype, TAG$1)) { def(it, TAG$1, { 
configurable: true, value: tag }); }
 };
 
-var create$1         = _objectCreate;
-var descriptor     = _propertyDesc;
+var create$1 = _objectCreate;
+var descriptor = _propertyDesc;
 var setToStringTag$1 = _setToStringTag;
 var IteratorPrototype = {};
 
 // 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
-_hide(IteratorPrototype, _wks('iterator'), function(){ return this; });
+_hide(IteratorPrototype, _wks('iterator'), function () { return this; });
 
-var _iterCreate = function(Constructor, NAME, next){
-  Constructor.prototype = create$1(IteratorPrototype, {next: descriptor(1, 
next)});
+var _iterCreate = function (Constructor, NAME, next) {
+  Constructor.prototype = create$1(IteratorPrototype, { next: descriptor(1, 
next) });
   setToStringTag$1(Constructor, NAME + ' Iterator');
 };
 
 // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
-var has$4         = _has;
-var toObject$1    = _toObject;
-var IE_PROTO$2    = _sharedKey('IE_PROTO');
+var has$4 = _has;
+var toObject$1 = _toObject;
+var IE_PROTO$2 = _sharedKey('IE_PROTO');
 var ObjectProto = Object.prototype;
 
-var _objectGpo = Object.getPrototypeOf || function(O){
+var _objectGpo = Object.getPrototypeOf || function (O) {
   O = toObject$1(O);
-  if(has$4(O, IE_PROTO$2)){ return O[IE_PROTO$2]; }
-  if(typeof O.constructor == 'function' && O instanceof O.constructor){
+  if (has$4(O, IE_PROTO$2)) { return O[IE_PROTO$2]; }
+  if (typeof O.constructor == 'function' && O instanceof O.constructor) {
     return O.constructor.prototype;
   } return O instanceof Object ? ObjectProto : null;
 };
 
-var LIBRARY        = _library;
-var $export$2        = _export;
-var redefine$1       = _redefine;
-var hide$1           = _hide;
-var has$2            = _has;
-var Iterators      = _iterators;
-var $iterCreate    = _iterCreate;
+var LIBRARY = _library;
+var $export$2 = _export;
+var redefine$1 = _redefine;
+var hide$1 = _hide;
+var has$2 = _has;
+var Iterators = _iterators;
+var $iterCreate = _iterCreate;
 var setToStringTag = _setToStringTag;
 var getPrototypeOf = _objectGpo;
-var ITERATOR       = _wks('iterator');
-var BUGGY          = !([].keys && 'next' in [].keys());
-var FF_ITERATOR    = '@@iterator';
-var KEYS           = 'keys';
-var VALUES         = 'values';
+var ITERATOR = _wks('iterator');
+var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators 
w/o `next`
+var FF_ITERATOR = '@@iterator';
+var KEYS = 'keys';
+var VALUES = 'values';
 
-var returnThis = function(){ return this; };
+var returnThis = function () { return this; };
 
-var _iterDefine = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, 
FORCED){
+var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, 
FORCED) {
   $iterCreate(Constructor, NAME, next);
-  var getMethod = function(kind){
-    if(!BUGGY && kind in proto){ return proto[kind]; }
-    switch(kind){
-      case KEYS: return function keys(){ return new Constructor(this, kind); };
-      case VALUES: return function values(){ return new Constructor(this, 
kind); };
-    } return function entries(){ return new Constructor(this, kind); };
+  var getMethod = function (kind) {
+    if (!BUGGY && kind in proto) { return proto[kind]; }
+    switch (kind) {
+      case KEYS: return function keys() { return new Constructor(this, kind); 
};
+      case VALUES: return function values() { return new Constructor(this, 
kind); };
+    } return function entries() { return new Constructor(this, kind); };
   };
-  var TAG        = NAME + ' Iterator'
-    , DEF_VALUES = DEFAULT == VALUES
-    , VALUES_BUG = false
-    , proto      = Base.prototype
-    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && 
proto[DEFAULT]
-    , $default   = $native || getMethod(DEFAULT)
-    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : 
undefined
-    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native
-    , methods, key, IteratorPrototype;
+  var TAG = NAME + ' Iterator';
+  var DEF_VALUES = DEFAULT == VALUES;
+  var VALUES_BUG = false;
+  var proto = Base.prototype;
+  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && 
proto[DEFAULT];
+  var $default = $native || getMethod(DEFAULT);
+  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : 
undefined;
+  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
+  var methods, key, IteratorPrototype;
   // Fix native
-  if($anyNative){
-    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));
-    if(IteratorPrototype !== Object.prototype){
+  if ($anyNative) {
+    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
+    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
       // Set @@toStringTag to native iterators
       setToStringTag(IteratorPrototype, TAG, true);
       // fix for some old engines
-      if(!LIBRARY && !has$2(IteratorPrototype, ITERATOR)){ 
hide$1(IteratorPrototype, ITERATOR, returnThis); }
+      if (!LIBRARY && !has$2(IteratorPrototype, ITERATOR)) { 
hide$1(IteratorPrototype, ITERATOR, returnThis); }
     }
   }
   // fix Array#{values, @@iterator}.name in V8 / FF
-  if(DEF_VALUES && $native && $native.name !== VALUES){
+  if (DEF_VALUES && $native && $native.name !== VALUES) {
     VALUES_BUG = true;
-    $default = function values(){ return $native.call(this); };
+    $default = function values() { return $native.call(this); };
   }
   // Define iterator
-  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){
+  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
     hide$1(proto, ITERATOR, $default);
   }
   // Plug for library
   Iterators[NAME] = $default;
-  Iterators[TAG]  = returnThis;
-  if(DEFAULT){
+  Iterators[TAG] = returnThis;
+  if (DEFAULT) {
     methods = {
-      values:  DEF_VALUES ? $default : getMethod(VALUES),
-      keys:    IS_SET     ? $default : getMethod(KEYS),
+      values: DEF_VALUES ? $default : getMethod(VALUES),
+      keys: IS_SET ? $default : getMethod(KEYS),
       entries: $entries
     };
-    if(FORCED){ for(key in methods){
-      if(!(key in proto)){ redefine$1(proto, key, methods[key]); }
+    if (FORCED) { for (key in methods) {
+      if (!(key in proto)) { redefine$1(proto, key, methods[key]); }
     } } else { $export$2($export$2.P + $export$2.F * (BUGGY || VALUES_BUG), 
NAME, methods); }
   }
   return methods;
 };
 
-var $at  = _stringAt(true);
+var $at = _stringAt(true);
 
 // 21.1.3.27 String.prototype[@@iterator]()
-_iterDefine(String, 'String', function(iterated){
+_iterDefine(String, 'String', function (iterated) {
   this._t = String(iterated); // target
   this._i = 0;                // next index
 // 21.1.5.2.1 %StringIteratorPrototype%.next()
-}, function(){
-  var O     = this._t
-    , index = this._i
-    , point;
-  if(index >= O.length){ return {value: undefined, done: true}; }
+}, function () {
+  var O = this._t;
+  var index = this._i;
+  var point;
+  if (index >= O.length) { return { value: undefined, done: true }; }
   point = $at(O, index);
   this._i += point.length;
-  return {value: point, done: false};
+  return { value: point, done: false };
 });
 
 // 22.1.3.31 Array.prototype[@@unscopables]
 var UNSCOPABLES = _wks('unscopables');
-var ArrayProto  = Array.prototype;
-if(ArrayProto[UNSCOPABLES] == undefined){ _hide(ArrayProto, UNSCOPABLES, {}); }
-var _addToUnscopables = function(key){
+var ArrayProto = Array.prototype;
+if (ArrayProto[UNSCOPABLES] == undefined) { _hide(ArrayProto, UNSCOPABLES, 
{}); }
+var _addToUnscopables = function (key) {
   ArrayProto[UNSCOPABLES][key] = true;
 };
 
-var _iterStep = function(done, value){
-  return {value: value, done: !!done};
+var _iterStep = function (done, value) {
+  return { value: value, done: !!done };
 };
 
 var addToUnscopables = _addToUnscopables;
-var step             = _iterStep;
-var Iterators$2        = _iterators;
-var toIObject$2        = _toIobject;
+var step = _iterStep;
+var Iterators$2 = _iterators;
+var toIObject$2 = _toIobject;
 
 // 22.1.3.4 Array.prototype.entries()
 // 22.1.3.13 Array.prototype.keys()
 // 22.1.3.29 Array.prototype.values()
 // 22.1.3.30 Array.prototype[@@iterator]()
-var es6_array_iterator = _iterDefine(Array, 'Array', function(iterated, kind){
+var es6_array_iterator = _iterDefine(Array, 'Array', function (iterated, kind) 
{
   this._t = toIObject$2(iterated); // target
   this._i = 0;                   // next index
   this._k = kind;                // kind
 // 22.1.5.2.1 %ArrayIteratorPrototype%.next()
-}, function(){
-  var O     = this._t
-    , kind  = this._k
-    , index = this._i++;
-  if(!O || index >= O.length){
+}, function () {
+  var O = this._t;
+  var kind = this._k;
+  var index = this._i++;
+  if (!O || index >= O.length) {
     this._t = undefined;
     return step(1);
   }
-  if(kind == 'keys'  ){ return step(0, index); }
-  if(kind == 'values'){ return step(0, O[index]); }
+  if (kind == 'keys') { return step(0, index); }
+  if (kind == 'values') { return step(0, O[index]); }
   return step(0, [index, O[index]]);
 }, 'values');
 
@@ -932,107 +940,144 @@ addToUnscopables('keys');
 addToUnscopables('values');
 addToUnscopables('entries');
 
-var $iterators    = es6_array_iterator;
-var redefine$2      = _redefine;
-var global$3        = _global;
-var hide$2          = _hide;
-var Iterators$1     = _iterators;
-var wks           = _wks;
-var ITERATOR$1      = wks('iterator');
+var $iterators = es6_array_iterator;
+var getKeys$2 = _objectKeys;
+var redefine$2 = _redefine;
+var global$3 = _global;
+var hide$2 = _hide;
+var Iterators$1 = _iterators;
+var wks = _wks;
+var ITERATOR$1 = wks('iterator');
 var TO_STRING_TAG = wks('toStringTag');
-var ArrayValues   = Iterators$1.Array;
-
-for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 
'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){
-  var NAME       = collections[i]
-    , Collection = global$3[NAME]
-    , proto      = Collection && Collection.prototype
-    , key;
-  if(proto){
-    if(!proto[ITERATOR$1]){ hide$2(proto, ITERATOR$1, ArrayValues); }
-    if(!proto[TO_STRING_TAG]){ hide$2(proto, TO_STRING_TAG, NAME); }
+var ArrayValues = Iterators$1.Array;
+
+var DOMIterables = {
+  CSSRuleList: true, // TODO: Not spec compliant, should be false.
+  CSSStyleDeclaration: false,
+  CSSValueList: false,
+  ClientRectList: false,
+  DOMRectList: false,
+  DOMStringList: false,
+  DOMTokenList: true,
+  DataTransferItemList: false,
+  FileList: false,
+  HTMLAllCollection: false,
+  HTMLCollection: false,
+  HTMLFormElement: false,
+  HTMLSelectElement: false,
+  MediaList: true, // TODO: Not spec compliant, should be false.
+  MimeTypeArray: false,
+  NamedNodeMap: false,
+  NodeList: true,
+  PaintRequestList: false,
+  Plugin: false,
+  PluginArray: false,
+  SVGLengthList: false,
+  SVGNumberList: false,
+  SVGPathSegList: false,
+  SVGPointList: false,
+  SVGStringList: false,
+  SVGTransformList: false,
+  SourceBufferList: false,
+  StyleSheetList: true, // TODO: Not spec compliant, should be false.
+  TextTrackCueList: false,
+  TextTrackList: false,
+  TouchList: false
+};
+
+for (var collections = getKeys$2(DOMIterables), i = 0; i < collections.length; 
i++) {
+  var NAME = collections[i];
+  var explicit = DOMIterables[NAME];
+  var Collection = global$3[NAME];
+  var proto = Collection && Collection.prototype;
+  var key;
+  if (proto) {
+    if (!proto[ITERATOR$1]) { hide$2(proto, ITERATOR$1, ArrayValues); }
+    if (!proto[TO_STRING_TAG]) { hide$2(proto, TO_STRING_TAG, NAME); }
     Iterators$1[NAME] = ArrayValues;
-    for(key in $iterators){ if(!proto[key]){ redefine$2(proto, key, 
$iterators[key], true); } }
+    if (explicit) { for (key in $iterators) { if (!proto[key]) { 
redefine$2(proto, key, $iterators[key], true); } } }
   }
 }
 
-var _anInstance = function(it, Constructor, name, forbiddenField){
-  if(!(it instanceof Constructor) || (forbiddenField !== undefined && 
forbiddenField in it)){
+var _anInstance = function (it, Constructor, name, forbiddenField) {
+  if (!(it instanceof Constructor) || (forbiddenField !== undefined && 
forbiddenField in it)) {
     throw TypeError(name + ': incorrect invocation!');
   } return it;
 };
 
 // call something on iterator step with safe closing on error
 var anObject$3 = _anObject;
-var _iterCall = function(iterator, fn, value, entries){
+var _iterCall = function (iterator, fn, value, entries) {
   try {
     return entries ? fn(anObject$3(value)[0], value[1]) : fn(value);
   // 7.4.6 IteratorClose(iterator, completion)
-  } catch(e){
+  } catch (e) {
     var ret = iterator['return'];
-    if(ret !== undefined){ anObject$3(ret.call(iterator)); }
+    if (ret !== undefined) { anObject$3(ret.call(iterator)); }
     throw e;
   }
 };
 
 // check on default Array iterator
-var Iterators$3  = _iterators;
-var ITERATOR$2   = _wks('iterator');
+var Iterators$3 = _iterators;
+var ITERATOR$2 = _wks('iterator');
 var ArrayProto$1 = Array.prototype;
 
-var _isArrayIter = function(it){
+var _isArrayIter = function (it) {
   return it !== undefined && (Iterators$3.Array === it || 
ArrayProto$1[ITERATOR$2] === it);
 };
 
-var classof$2   = _classof;
-var ITERATOR$3  = _wks('iterator');
+var classof$2 = _classof;
+var ITERATOR$3 = _wks('iterator');
 var Iterators$4 = _iterators;
-var core_getIteratorMethod = _core.getIteratorMethod = function(it){
-  if(it != undefined){ return it[ITERATOR$3]
+var core_getIteratorMethod = _core.getIteratorMethod = function (it) {
+  if (it != undefined) { return it[ITERATOR$3]
     || it['@@iterator']
     || Iterators$4[classof$2(it)]; }
 };
 
 var _forOf = createCommonjsModule(function (module) {
-var ctx         = _ctx
-  , call        = _iterCall
-  , isArrayIter = _isArrayIter
-  , anObject    = _anObject
-  , toLength    = _toLength
-  , getIterFn   = core_getIteratorMethod
-  , BREAK       = {}
-  , RETURN      = {};
-var exports = module.exports = function(iterable, entries, fn, that, ITERATOR){
-  var iterFn = ITERATOR ? function(){ return iterable; } : getIterFn(iterable)
-    , f      = ctx(fn, that, entries ? 2 : 1)
-    , index  = 0
-    , length, step, iterator, result;
-  if(typeof iterFn != 'function'){ throw TypeError(iterable + ' is not 
iterable!'); }
+var ctx = _ctx;
+var call = _iterCall;
+var isArrayIter = _isArrayIter;
+var anObject = _anObject;
+var toLength = _toLength;
+var getIterFn = core_getIteratorMethod;
+var BREAK = {};
+var RETURN = {};
+var exports = module.exports = function (iterable, entries, fn, that, 
ITERATOR) {
+  var iterFn = ITERATOR ? function () { return iterable; } : 
getIterFn(iterable);
+  var f = ctx(fn, that, entries ? 2 : 1);
+  var index = 0;
+  var length, step, iterator, result;
+  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++){
+  if (isArrayIter(iterFn)) { for (length = toLength(iterable.length); length > 
index; index++) {
     result = entries ? f(anObject(step = iterable[index])[0], step[1]) : 
f(iterable[index]);
-    if(result === BREAK || result === RETURN){ return result; }
-  } } else { for(iterator = iterFn.call(iterable); !(step = 
iterator.next()).done; ){
+    if (result === BREAK || result === RETURN) { return result; }
+  } } else { for (iterator = iterFn.call(iterable); !(step = 
iterator.next()).done;) {
     result = call(iterator, f, step.value, entries);
-    if(result === BREAK || result === RETURN){ return result; }
+    if (result === BREAK || result === RETURN) { return result; }
   } }
 };
-exports.BREAK  = BREAK;
+exports.BREAK = BREAK;
 exports.RETURN = RETURN;
 });
 
 // 7.3.20 SpeciesConstructor(O, defaultConstructor)
-var anObject$4  = _anObject;
+var anObject$4 = _anObject;
 var aFunction$2 = _aFunction;
-var SPECIES   = _wks('species');
-var _speciesConstructor = function(O, D){
-  var C = anObject$4(O).constructor, S;
+var SPECIES = _wks('species');
+var _speciesConstructor = function (O, D) {
+  var C = anObject$4(O).constructor;
+  var S;
   return C === undefined || (S = anObject$4(C)[SPECIES]) == undefined ? D : 
aFunction$2(S);
 };
 
 // fast apply, http://jsperf.lnkit.com/fast-apply/5
-var _invoke = function(fn, args, that){
+var _invoke = function (fn, args, that) {
   var un = that === undefined;
-  switch(args.length){
+  switch (args.length) {
     case 0: return un ? fn()
                       : fn.call(that);
     case 1: return un ? fn(args[0])
@@ -1043,133 +1088,142 @@ var _invoke = function(fn, args, that){
                       : 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);
-};
-
-var ctx$2                = _ctx;
-var invoke             = _invoke;
-var html               = _html;
-var cel                = _domCreate;
-var global$5             = _global;
-var process$2            = global$5.process;
-var setTask            = global$5.setImmediate;
-var clearTask          = global$5.clearImmediate;
-var MessageChannel     = global$5.MessageChannel;
-var counter            = 0;
-var queue              = {};
+  } return fn.apply(that, args);
+};
+
+var ctx$2 = _ctx;
+var invoke = _invoke;
+var html = _html;
+var cel = _domCreate;
+var global$5 = _global;
+var process$2 = global$5.process;
+var setTask = global$5.setImmediate;
+var clearTask = global$5.clearImmediate;
+var MessageChannel = global$5.MessageChannel;
+var Dispatch = global$5.Dispatch;
+var counter = 0;
+var queue = {};
 var ONREADYSTATECHANGE = 'onreadystatechange';
 var defer;
 var channel;
 var port;
-var run$1 = function(){
+var run$1 = function () {
   var id = +this;
-  if(queue.hasOwnProperty(id)){
+  // eslint-disable-next-line no-prototype-builtins
+  if (queue.hasOwnProperty(id)) {
     var fn = queue[id];
     delete queue[id];
     fn();
   }
 };
-var listener = function(event){
+var listener = function (event) {
   run$1.call(event.data);
 };
 // Node.js 0.9+ & IE10+ has setImmediate, otherwise:
-if(!setTask || !clearTask){
-  setTask = function setImmediate(fn){
+if (!setTask || !clearTask) {
+  setTask = function setImmediate(fn) {
     var arguments$1 = arguments;
 
-    var args = [], i = 1;
-    while(arguments.length > i){ args.push(arguments$1[i++]); }
-    queue[++counter] = function(){
+    var args = [];
+    var i = 1;
+    while (arguments.length > i) { args.push(arguments$1[i++]); }
+    queue[++counter] = function () {
+      // eslint-disable-next-line no-new-func
       invoke(typeof fn == 'function' ? fn : Function(fn), args);
     };
     defer(counter);
     return counter;
   };
-  clearTask = function clearImmediate(id){
+  clearTask = function clearImmediate(id) {
     delete queue[id];
   };
   // Node.js 0.8-
-  if(_cof(process$2) == 'process'){
-    defer = function(id){
+  if (_cof(process$2) == 'process') {
+    defer = function (id) {
       process$2.nextTick(ctx$2(run$1, id, 1));
     };
+  // Sphere (JS game engine) Dispatch API
+  } else if (Dispatch && Dispatch.now) {
+    defer = function (id) {
+      Dispatch.now(ctx$2(run$1, id, 1));
+    };
   // Browsers with MessageChannel, includes WebWorkers
-  } else if(MessageChannel){
-    channel = new MessageChannel;
-    port    = channel.port2;
+  } else if (MessageChannel) {
+    channel = new MessageChannel();
+    port = channel.port2;
     channel.port1.onmessage = listener;
     defer = ctx$2(port.postMessage, port, 1);
   // Browsers with postMessage, skip WebWorkers
   // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
-  } else if(global$5.addEventListener && typeof postMessage == 'function' && 
!global$5.importScripts){
-    defer = function(id){
+  } else if (global$5.addEventListener && typeof postMessage == 'function' && 
!global$5.importScripts) {
+    defer = function (id) {
       global$5.postMessage(id + '', '*');
     };
     global$5.addEventListener('message', listener, false);
   // IE8-
-  } else if(ONREADYSTATECHANGE in cel('script')){
-    defer = function(id){
-      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){
+  } else if (ONREADYSTATECHANGE in cel('script')) {
+    defer = function (id) {
+      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {
         html.removeChild(this);
         run$1.call(id);
       };
     };
   // Rest old browsers
   } else {
-    defer = function(id){
+    defer = function (id) {
       setTimeout(ctx$2(run$1, id, 1), 0);
     };
   }
 }
 var _task = {
-  set:   setTask,
+  set: setTask,
   clear: clearTask
 };
 
-var global$6    = _global;
+var global$6 = _global;
 var macrotask = _task.set;
-var Observer  = global$6.MutationObserver || global$6.WebKitMutationObserver;
-var process$3   = global$6.process;
-var Promise$1   = global$6.Promise;
-var isNode$1    = _cof(process$3) == 'process';
+var Observer = global$6.MutationObserver || global$6.WebKitMutationObserver;
+var process$3 = global$6.process;
+var Promise$1 = global$6.Promise;
+var isNode$1 = _cof(process$3) == 'process';
 
-var _microtask = function(){
+var _microtask = function () {
   var head, last, notify;
 
-  var flush = function(){
+  var flush = function () {
     var parent, fn;
-    if(isNode$1 && (parent = process$3.domain)){ parent.exit(); }
-    while(head){
-      fn   = head.fn;
+    if (isNode$1 && (parent = process$3.domain)) { parent.exit(); }
+    while (head) {
+      fn = head.fn;
       head = head.next;
       try {
         fn();
-      } catch(e){
-        if(head){ notify(); }
+      } catch (e) {
+        if (head) { notify(); }
         else { last = undefined; }
         throw e;
       }
     } last = undefined;
-    if(parent){ parent.enter(); }
+    if (parent) { parent.enter(); }
   };
 
   // Node.js
-  if(isNode$1){
-    notify = function(){
+  if (isNode$1) {
+    notify = function () {
       process$3.nextTick(flush);
     };
   // browsers with MutationObserver
-  } else if(Observer){
-    var toggle = true
-      , node   = document.createTextNode('');
-    new Observer(flush).observe(node, {characterData: true}); // 
eslint-disable-line no-new
-    notify = function(){
+  } else if (Observer) {
+    var toggle = true;
+    var node = document.createTextNode('');
+    new Observer(flush).observe(node, { characterData: true }); // 
eslint-disable-line no-new
+    notify = function () {
       node.data = toggle = !toggle;
     };
   // environments with maybe non-completely correct, but existent Promise
-  } else if(Promise$1 && Promise$1.resolve){
+  } else if (Promise$1 && Promise$1.resolve) {
     var promise = Promise$1.resolve();
-    notify = function(){
+    notify = function () {
       promise.then(flush);
     };
   // for other environments - macrotask based on:
@@ -1179,233 +1233,260 @@ var _microtask = function(){
   // - onreadystatechange
   // - setTimeout
   } else {
-    notify = function(){
+    notify = function () {
       // strange IE + webpack dev server bug - use .call(global)
       macrotask.call(global$6, flush);
     };
   }
 
-  return function(fn){
-    var task = {fn: fn, next: undefined};
-    if(last){ last.next = task; }
-    if(!head){
+  return function (fn) {
+    var task = { fn: fn, next: undefined };
+    if (last) { last.next = task; }
+    if (!head) {
       head = task;
       notify();
     } last = task;
   };
 };
 
+// 25.4.1.5 NewPromiseCapability(C)
+var aFunction$3 = _aFunction;
+
+function PromiseCapability(C) {
+  var resolve, reject;
+  this.promise = new C(function ($$resolve, $$reject) {
+    if (resolve !== undefined || reject !== undefined) { throw TypeError('Bad 
Promise constructor'); }
+    resolve = $$resolve;
+    reject = $$reject;
+  });
+  this.resolve = aFunction$3(resolve);
+  this.reject = aFunction$3(reject);
+}
+
+var f$3 = function (C) {
+  return new PromiseCapability(C);
+};
+
+var _newPromiseCapability = {
+       f: f$3
+};
+
+var _perform = function (exec) {
+  try {
+    return { e: false, v: exec() };
+  } catch (e) {
+    return { e: true, v: e };
+  }
+};
+
+var newPromiseCapability$1 = _newPromiseCapability;
+
+var _promiseResolve = function (C, x) {
+  var promiseCapability = newPromiseCapability$1.f(C);
+  var resolve = promiseCapability.resolve;
+  resolve(x);
+  return promiseCapability.promise;
+};
+
 var redefine$3 = _redefine;
-var _redefineAll = function(target, src, safe){
-  for(var key in src){ redefine$3(target, key, src[key], safe); }
+var _redefineAll = function (target, src, safe) {
+  for (var key in src) { redefine$3(target, key, src[key], safe); }
   return target;
 };
 
-var global$7      = _global;
-var dP$3          = _objectDp;
+var global$7 = _global;
+var dP$3 = _objectDp;
 var DESCRIPTORS = _descriptors;
-var SPECIES$1     = _wks('species');
+var SPECIES$1 = _wks('species');
 
-var _setSpecies = function(KEY){
+var _setSpecies = function (KEY) {
   var C = global$7[KEY];
-  if(DESCRIPTORS && C && !C[SPECIES$1]){ dP$3.f(C, SPECIES$1, {
+  if (DESCRIPTORS && C && !C[SPECIES$1]) { dP$3.f(C, SPECIES$1, {
     configurable: true,
-    get: function(){ return this; }
+    get: function () { return this; }
   }); }
 };
 
-var ITERATOR$4     = _wks('iterator');
+var ITERATOR$4 = _wks('iterator');
 var SAFE_CLOSING = false;
 
 try {
   var riter = [7][ITERATOR$4]();
-  riter['return'] = function(){ SAFE_CLOSING = true; };
-  Array.from(riter, function(){ throw 2; });
-} catch(e){ /* empty */ }
+  riter['return'] = function () { SAFE_CLOSING = true; };
+  // eslint-disable-next-line no-throw-literal
+  Array.from(riter, function () { throw 2; });
+} catch (e) { /* empty */ }
 
-var _iterDetect = function(exec, skipClosing){
-  if(!skipClosing && !SAFE_CLOSING){ return false; }
+var _iterDetect = function (exec, skipClosing) {
+  if (!skipClosing && !SAFE_CLOSING) { return false; }
   var safe = false;
   try {
-    var arr  = [7]
-      , iter = arr[ITERATOR$4]();
-    iter.next = function(){ return {done: safe = true}; };
-    arr[ITERATOR$4] = function(){ return iter; };
+    var arr = [7];
+    var iter = arr[ITERATOR$4]();
+    iter.next = function () { return { done: safe = true }; };
+    arr[ITERATOR$4] = function () { return iter; };
     exec(arr);
-  } catch(e){ /* empty */ }
+  } catch (e) { /* empty */ }
   return safe;
 };
 
-var LIBRARY$1            = _library;
-var global$4             = _global;
-var ctx$1                = _ctx;
-var classof$1            = _classof;
-var $export$3            = _export;
-var isObject$3           = _isObject;
-var aFunction$1          = _aFunction;
-var anInstance         = _anInstance;
-var forOf              = _forOf;
+var LIBRARY$1 = _library;
+var global$4 = _global;
+var ctx$1 = _ctx;
+var classof$1 = _classof;
+var $export$3 = _export;
+var isObject$3 = _isObject;
+var aFunction$1 = _aFunction;
+var anInstance = _anInstance;
+var forOf = _forOf;
 var speciesConstructor = _speciesConstructor;
-var task               = _task.set;
-var microtask          = _microtask();
-var PROMISE            = 'Promise';
-var TypeError$1          = global$4.TypeError;
-var process$1            = global$4.process;
-var $Promise           = global$4[PROMISE];
-var process$1            = global$4.process;
-var isNode             = classof$1(process$1) == 'process';
-var empty              = function(){ /* empty */ };
+var task = _task.set;
+var microtask = _microtask();
+var newPromiseCapabilityModule = _newPromiseCapability;
+var perform = _perform;
+var promiseResolve = _promiseResolve;
+var PROMISE = 'Promise';
+var TypeError$1 = global$4.TypeError;
+var process$1 = global$4.process;
+var $Promise = global$4[PROMISE];
+var isNode = classof$1(process$1) == 'process';
+var empty = function () { /* empty */ };
 var Internal;
-var GenericPromiseCapability;
+var newGenericPromiseCapability;
+var OwnPromiseCapability;
 var Wrapper;
+var newPromiseCapability = newGenericPromiseCapability = 
newPromiseCapabilityModule.f;
 
-var USE_NATIVE = !!function(){
+var USE_NATIVE = !!function () {
   try {
     // correct subclassing with @@species support
-    var promise     = $Promise.resolve(1)
-      , FakePromise = (promise.constructor = {})[_wks('species')] = 
function(exec){ exec(empty, empty); };
+    var promise = $Promise.resolve(1);
+    var FakePromise = (promise.constructor = {})[_wks('species')] = function 
(exec) {
+      exec(empty, empty);
+    };
     // unhandled rejections tracking support, NodeJS Promise without it fails 
@@species test
     return (isNode || typeof PromiseRejectionEvent == 'function') && 
promise.then(empty) instanceof FakePromise;
-  } catch(e){ /* empty */ }
+  } catch (e) { /* empty */ }
 }();
 
 // helpers
-var sameConstructor = function(a, b){
+var sameConstructor = LIBRARY$1 ? function (a, b) {
   // with library wrapper special case
   return a === b || a === $Promise && b === Wrapper;
+} : function (a, b) {
+  return a === b;
 };
-var isThenable = function(it){
+var isThenable = function (it) {
   var then;
   return isObject$3(it) && typeof (then = it.then) == 'function' ? then : 
false;
 };
-var newPromiseCapability = function(C){
-  return sameConstructor($Promise, C)
-    ? new PromiseCapability(C)
-    : new GenericPromiseCapability(C);
-};
-var PromiseCapability = GenericPromiseCapability = function(C){
-  var resolve, reject;
-  this.promise = new C(function($$resolve, $$reject){
-    if(resolve !== undefined || reject !== undefined){ throw TypeError$1('Bad 
Promise constructor'); }
-    resolve = $$resolve;
-    reject  = $$reject;
-  });
-  this.resolve = aFunction$1(resolve);
-  this.reject  = aFunction$1(reject);
-};
-var perform = function(exec){
-  try {
-    exec();
-  } catch(e){
-    return {error: e};
-  }
-};
-var notify$1 = function(promise, isReject){
-  if(promise._n){ return; }
+var notify$1 = function (promise, isReject) {
+  if (promise._n) { return; }
   promise._n = true;
   var chain = promise._c;
-  microtask(function(){
-    var value = promise._v
-      , ok    = promise._s == 1
-      , i     = 0;
-    var run = function(reaction){
-      var handler = ok ? reaction.ok : reaction.fail
-        , resolve = reaction.resolve
-        , reject  = reaction.reject
-        , domain  = reaction.domain
-        , result, then;
+  microtask(function () {
+    var value = promise._v;
+    var ok = promise._s == 1;
+    var i = 0;
+    var run = function (reaction) {
+      var handler = ok ? reaction.ok : reaction.fail;
+      var resolve = reaction.resolve;
+      var reject = reaction.reject;
+      var domain = reaction.domain;
+      var result, then;
       try {
-        if(handler){
-          if(!ok){
-            if(promise._h == 2){ onHandleUnhandled(promise); }
+        if (handler) {
+          if (!ok) {
+            if (promise._h == 2) { onHandleUnhandled(promise); }
             promise._h = 1;
           }
-          if(handler === true){ result = value; }
+          if (handler === true) { result = value; }
           else {
-            if(domain){ domain.enter(); }
+            if (domain) { domain.enter(); }
             result = handler(value);
-            if(domain){ domain.exit(); }
+            if (domain) { domain.exit(); }
           }
-          if(result === reaction.promise){
+          if (result === reaction.promise) {
             reject(TypeError$1('Promise-chain cycle'));
-          } else if(then = isThenable(result)){
+          } else if (then = isThenable(result)) {
             then.call(result, resolve, reject);
           } else { resolve(result); }
         } else { reject(value); }
-      } catch(e){
+      } catch (e) {
         reject(e);
       }
     };
-    while(chain.length > i){ run(chain[i++]); } // variable length - can't use 
forEach
+    while (chain.length > i) { run(chain[i++]); } // variable length - can't 
use forEach
     promise._c = [];
     promise._n = false;
-    if(isReject && !promise._h){ onUnhandled(promise); }
+    if (isReject && !promise._h) { onUnhandled(promise); }
   });
 };
-var onUnhandled = function(promise){
-  task.call(global$4, function(){
-    var value = promise._v
-      , abrupt, handler, console;
-    if(isUnhandled(promise)){
-      abrupt = perform(function(){
-        if(isNode){
+var onUnhandled = function (promise) {
+  task.call(global$4, function () {
+    var value = promise._v;
+    var unhandled = isUnhandled(promise);
+    var result, handler, console;
+    if (unhandled) {
+      result = perform(function () {
+        if (isNode) {
           process$1.emit('unhandledRejection', value, promise);
-        } else if(handler = global$4.onunhandledrejection){
-          handler({promise: promise, reason: value});
-        } else if((console = global$4.console) && console.error){
+        } else if (handler = global$4.onunhandledrejection) {
+          handler({ promise: promise, reason: value });
+        } else if ((console = global$4.console) && console.error) {
           console.error('Unhandled promise rejection', value);
         }
       });
       // Browsers should not trigger `rejectionHandled` event if it was 
handled here, NodeJS - should
       promise._h = isNode || isUnhandled(promise) ? 2 : 1;
     } promise._a = undefined;
-    if(abrupt){ throw abrupt.error; }
+    if (unhandled && result.e) { throw result.v; }
   });
 };
-var isUnhandled = function(promise){
-  if(promise._h == 1){ return false; }
-  var chain = promise._a || promise._c
-    , i     = 0
-    , reaction;
-  while(chain.length > i){
+var isUnhandled = function (promise) {
+  if (promise._h == 1) { return false; }
+  var chain = promise._a || promise._c;
+  var i = 0;
+  var reaction;
+  while (chain.length > i) {
     reaction = chain[i++];
-    if(reaction.fail || !isUnhandled(reaction.promise)){ return false; }
+    if (reaction.fail || !isUnhandled(reaction.promise)) { return false; }
   } return true;
 };
-var onHandleUnhandled = function(promise){
-  task.call(global$4, function(){
+var onHandleUnhandled = function (promise) {
+  task.call(global$4, function () {
     var handler;
-    if(isNode){
+    if (isNode) {
       process$1.emit('rejectionHandled', promise);
-    } else if(handler = global$4.onrejectionhandled){
-      handler({promise: promise, reason: promise._v});
+    } else if (handler = global$4.onrejectionhandled) {
+      handler({ promise: promise, reason: promise._v });
     }
   });
 };
-var $reject = function(value){
+var $reject = function (value) {
   var promise = this;
-  if(promise._d){ return; }
+  if (promise._d) { return; }
   promise._d = true;
   promise = promise._w || promise; // unwrap
   promise._v = value;
   promise._s = 2;
-  if(!promise._a){ promise._a = promise._c.slice(); }
+  if (!promise._a) { promise._a = promise._c.slice(); }
   notify$1(promise, true);
 };
-var $resolve = function(value){
-  var promise = this
-    , then;
-  if(promise._d){ return; }
+var $resolve = function (value) {
+  var promise = this;
+  var then;
+  if (promise._d) { return; }
   promise._d = true;
   promise = promise._w || promise; // unwrap
   try {
-    if(promise === value){ throw TypeError$1("Promise can't be resolved 
itself"); }
-    if(then = isThenable(value)){
-      microtask(function(){
-        var wrapper = {_w: promise, _d: false}; // wrap
+    if (promise === value) { throw TypeError$1("Promise can't be resolved 
itself"); }
+    if (then = isThenable(value)) {
+      microtask(function () {
+        var wrapper = { _w: promise, _d: false }; // wrap
         try {
           then.call(value, ctx$1($resolve, wrapper, 1), ctx$1($reject, 
wrapper, 1));
-        } catch(e){
+        } catch (e) {
           $reject.call(wrapper, e);
         }
       });
@@ -1414,25 +1495,26 @@ var $resolve = function(value){
       promise._s = 1;
       notify$1(promise, false);
     }
-  } catch(e){
-    $reject.call({_w: promise, _d: false}, e); // wrap
+  } catch (e) {
+    $reject.call({ _w: promise, _d: false }, e); // wrap
   }
 };
 
 // constructor polyfill
-if(!USE_NATIVE){
+if (!USE_NATIVE) {
   // 25.4.3.1 Promise(executor)
-  $Promise = function Promise(executor){
+  $Promise = function Promise(executor) {
     anInstance(this, $Promise, PROMISE, '_h');
     aFunction$1(executor);
     Internal.call(this);
     try {
       executor(ctx$1($resolve, this, 1), ctx$1($reject, this, 1));
-    } catch(err){
+    } catch (err) {
       $reject.call(this, err);
     }
   };
-  Internal = function Promise(executor){
+  // eslint-disable-next-line no-unused-vars
+  Internal = function Promise(executor) {
     this._c = [];             // <- awaiting reactions
     this._a = undefined;      // <- checked in isUnhandled reactions
     this._s = 0;              // <- state
@@ -1443,30 +1525,35 @@ if(!USE_NATIVE){
   };
   Internal.prototype = _redefineAll($Promise.prototype, {
     // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)
-    then: function then(onFulfilled, onRejected){
-      var reaction    = newPromiseCapability(speciesConstructor(this, 
$Promise));
-      reaction.ok     = typeof onFulfilled == 'function' ? onFulfilled : true;
-      reaction.fail   = typeof onRejected == 'function' && onRejected;
+    then: function then(onFulfilled, onRejected) {
+      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));
+      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
+      reaction.fail = typeof onRejected == 'function' && onRejected;
       reaction.domain = isNode ? process$1.domain : undefined;
       this._c.push(reaction);
-      if(this._a){ this._a.push(reaction); }
-      if(this._s){ notify$1(this, false); }
+      if (this._a) { this._a.push(reaction); }
+      if (this._s) { notify$1(this, false); }
       return reaction.promise;
     },
     // 25.4.5.1 Promise.prototype.catch(onRejected)
-    'catch': function(onRejected){
+    'catch': function (onRejected) {
       return this.then(undefined, onRejected);
     }
   });
-  PromiseCapability = function(){
-    var promise  = new Internal;
+  OwnPromiseCapability = function () {
+    var promise = new Internal();
     this.promise = promise;
     this.resolve = ctx$1($resolve, promise, 1);
-    this.reject  = ctx$1($reject, promise, 1);
+    this.reject = ctx$1($reject, promise, 1);
+  };
+  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {
+    return sameConstructor($Promise, C)
+      ? new OwnPromiseCapability(C)
+      : newGenericPromiseCapability(C);
   };
 }
 
-$export$3($export$3.G + $export$3.W + $export$3.F * !USE_NATIVE, {Promise: 
$Promise});
+$export$3($export$3.G + $export$3.W + $export$3.F * !USE_NATIVE, { Promise: 
$Promise });
 _setToStringTag($Promise, PROMISE);
 _setSpecies(PROMISE);
 Wrapper = _core[PROMISE];
@@ -1474,65 +1561,62 @@ Wrapper = _core[PROMISE];
 // statics
 $export$3($export$3.S + $export$3.F * !USE_NATIVE, PROMISE, {
   // 25.4.4.5 Promise.reject(r)
-  reject: function reject(r){
-    var capability = newPromiseCapability(this)
-      , $$reject   = capability.reject;
+  reject: function reject(r) {
+    var capability = newPromiseCapability(this);
+    var $$reject = capability.reject;
     $$reject(r);
     return capability.promise;
   }
 });
 $export$3($export$3.S + $export$3.F * (LIBRARY$1 || !USE_NATIVE), PROMISE, {
   // 25.4.4.6 Promise.resolve(x)
-  resolve: function resolve(x){
+  resolve: function resolve(x) {
     // instanceof instead of internal slot check because we should fix it 
without replacement native Promise core
-    if(x instanceof $Promise && sameConstructor(x.constructor, this)){ return 
x; }
-    var capability = newPromiseCapability(this)
-      , $$resolve  = capability.resolve;
-    $$resolve(x);
-    return capability.promise;
+    if (x instanceof $Promise && sameConstructor(x.constructor, this)) { 
return x; }
+    return promiseResolve(this, x);
   }
 });
-$export$3($export$3.S + $export$3.F * !(USE_NATIVE && 
_iterDetect(function(iter){
+$export$3($export$3.S + $export$3.F * !(USE_NATIVE && _iterDetect(function 
(iter) {
   $Promise.all(iter)['catch'](empty);
 })), PROMISE, {
   // 25.4.4.1 Promise.all(iterable)
-  all: function all(iterable){
-    var C          = this
-      , capability = newPromiseCapability(C)
-      , resolve    = capability.resolve
-      , reject     = capability.reject;
-    var abrupt = perform(function(){
-      var values    = []
-        , index     = 0
-        , remaining = 1;
-      forOf(iterable, false, function(promise){
-        var $index        = index++
-          , alreadyCalled = false;
+  all: function all(iterable) {
+    var C = this;
+    var capability = newPromiseCapability(C);
+    var resolve = capability.resolve;
+    var reject = capability.reject;
+    var result = perform(function () {
+      var values = [];
+      var index = 0;
+      var remaining = 1;
+      forOf(iterable, false, function (promise) {
+        var $index = index++;
+        var alreadyCalled = false;
         values.push(undefined);
         remaining++;
-        C.resolve(promise).then(function(value){
-          if(alreadyCalled){ return; }
-          alreadyCalled  = true;
+        C.resolve(promise).then(function (value) {
+          if (alreadyCalled) { return; }
+          alreadyCalled = true;
           values[$index] = value;
           --remaining || resolve(values);
         }, reject);
       });
       --remaining || resolve(values);
     });
-    if(abrupt){ reject(abrupt.error); }
+    if (result.e) { reject(result.v); }
     return capability.promise;
   },
   // 25.4.4.4 Promise.race(iterable)
-  race: function race(iterable){
-    var C          = this
-      , capability = newPromiseCapability(C)
-      , reject     = capability.reject;
-    var abrupt = perform(function(){
-      forOf(iterable, false, function(promise){
+  race: function race(iterable) {
+    var C = this;
+    var capability = newPromiseCapability(C);
+    var reject = capability.reject;
+    var result = perform(function () {
+      forOf(iterable, false, function (promise) {
         C.resolve(promise).then(capability.resolve, reject);
       });
     });
-    if(abrupt){ reject(abrupt.error); }
+    if (result.e) { reject(result.v); }
     return capability.promise;
   }
 });
@@ -1884,6 +1968,114 @@ function freezeProtoProperty (proto, propertyName, 
protoName) {
  */
 // import promise hack and polyfills
 
+function typof (v) {
+  var s = Object.prototype.toString.call(v);
+  return s.substring(8, s.length - 1)
+}
+
+function bufferToBase64 (buffer) {
+  if (typeof btoa !== 'function') {
+    return ''
+  }
+  var string = Array.prototype.map.call(
+    new Uint8Array(buffer),
+    function (code) { return String.fromCharCode(code); }
+  ).join('');
+  return btoa(string) // eslint-disable-line no-undef
+}
+
+function base64ToBuffer (base64) {
+  if (typeof atob !== 'function') {
+    return new ArrayBuffer(0)
+  }
+  var string = atob(base64); // eslint-disable-line no-undef
+  var array = new Uint8Array(string.length);
+  Array.prototype.forEach.call(string, function (ch, i) {
+    array[i] = ch.charCodeAt(0);
+  });
+  return array.buffer
+}
+
+/**
+ * Normalize a primitive value.
+ * @param  {any}        v
+ * @return {primitive}
+ */
+function normalizePrimitive (v) {
+  var type = typof(v);
+
+  switch (type) {
+    case 'Undefined':
+    case 'Null':
+      return ''
+
+    case 'RegExp':
+      return v.toString()
+    case 'Date':
+      return v.toISOString()
+
+    case 'Number':
+    case 'String':
+    case 'Boolean':
+      return v
+
+    case 'Array':
+      return v.map(normalizePrimitive)
+
+    case 'Object': {
+      var obj = {};
+      for (var k in v) {
+        obj[k] = normalizePrimitive(v[k]);
+      }
+      return obj
+    }
+
+    case 'ArrayBuffer':
+      return {
+        '@type': 'binary',
+        dataType: type,
+        base64: bufferToBase64(v)
+      }
+
+    case 'Int8Array':
+    case 'Uint8Array':
+    case 'Uint8ClampedArray':
+    case 'Int16Array':
+    case 'Uint16Array':
+    case 'Int32Array':
+    case 'Uint32Array':
+    case 'Float32Array':
+    case 'Float64Array':
+      return {
+        '@type': 'binary',
+        dataType: type,
+        base64: bufferToBase64(v.buffer)
+      }
+
+    default:
+      return JSON.stringify(v)
+  }
+}
+
+function decodePrimitive (data) {
+  if (typof(data) === 'Object') {
+    // decode base64 into binary
+    if (data['@type'] && data['@type'] === 'binary') {
+      return base64ToBuffer(data.base64 || '')
+    }
+
+    var realData = {};
+    for (var key in data) {
+      realData[key] = decodePrimitive(data[key]);
+    }
+    return realData
+  }
+  if (typof(data) === 'Array') {
+    return data.map(decodePrimitive)
+  }
+  return data
+}
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -1913,7 +2105,7 @@ function freezeProtoProperty (proto, propertyName, 
protoName) {
 var CallbackManager = function CallbackManager (instanceId) {
   this.instanceId = instanceId;
   this.lastCallbackId = 0;
-  this.callbacks = [];
+  this.callbacks = {};
 };
 CallbackManager.prototype.add = function add (callback) {
   this.lastCallbackId++;
@@ -1922,21 +2114,21 @@ CallbackManager.prototype.add = function add (callback) 
{
 };
 CallbackManager.prototype.remove = function remove (callbackId) {
   var callback = this.callbacks[callbackId];
-  this.callbacks[callbackId] = undefined;
+  delete this.callbacks[callbackId];
   return callback
 };
 CallbackManager.prototype.consume = function consume (callbackId, data, 
ifKeepAlive) {
   var callback = this.callbacks[callbackId];
   if (typeof ifKeepAlive === 'undefined' || ifKeepAlive === false) {
-    this.callbacks[callbackId] = undefined;
+    delete this.callbacks[callbackId];
   }
   if (typeof callback === 'function') {
-    return callback(data)
+    return callback(decodePrimitive(data))
   }
   return new Error(("invalid callback id \"" + callbackId + "\""))
 };
 CallbackManager.prototype.close = function close () {
-  this.callbacks = this.callbacks.map(function (cb) { return undefined; });
+  this.callbacks = {};
 };
 
 /*
@@ -2730,23 +2922,26 @@ Object.assign(Element.prototype, {
    * @return {} anything returned by handler function
    */
   fireEvent: function fireEvent (type, e, isBubble) {
+    var result = null;
     var isStopPropagation = false;
     var handler = this.event[type];
     if (handler && e) {
       e.stopPropagation = function () {
         isStopPropagation = true;
       };
-      handler.call(this, e);
-    }
-
-    if (isStopPropagation) {
-      return
+      result = handler.call(this, e);
     }
 
-    if (isBubble && BUBBLE_EVENTS.includes(type) && this.parentNode && 
this.parentNode.fireEvent) {
+    if (!isStopPropagation
+      && isBubble
+      && BUBBLE_EVENTS.includes(type)
+      && this.parentNode
+      && this.parentNode.fireEvent) {
       e.currentTarget = this.parentNode;
       this.parentNode.fireEvent(type, e, isBubble);
     }
+
+    return result
   },
 
   /**
@@ -2819,7 +3014,7 @@ var TaskCenter = function TaskCenter (id, sendTasks) {
   });
   Object.defineProperty(this, 'callbackManager', {
     enumerable: true,
-    value: new CallbackManager()
+    value: new CallbackManager(id)
   });
   fallback = sendTasks || function () {};
 };
@@ -2832,54 +3027,36 @@ TaskCenter.prototype.destroyCallback = function 
destroyCallback () {
   return this.callbackManager.close()
 };
 
-TaskCenter.prototype.typof = function typof (v) {
-  var s = Object.prototype.toString.call(v);
-  return s.substring(8, s.length - 1).toLowerCase()
-};
-
 /**
  * Normalize a value. Specially, if the value is a function, then generate a 
function id
  * and save it to `CallbackManager`, at last return the function id.
  * @param{any}      v
- * @param{object}   app
  * @return {primitive}
  */
 TaskCenter.prototype.normalize = function normalize (v) {
-  var type = this.typof(v);
+  var type = typof(v);
 
-  switch (type) {
-    case 'undefined':
-    case 'null':
-      return ''
-    case 'regexp':
-      return v.toString()
-    case 'date':
-      return v.toISOString()
-    case 'number':
-    case 'string':
-    case 'boolean':
-    case 'array':
-    case 'object':
-      if (v instanceof Element) {
-        return v.ref
-      }
-      return v
-    case 'function':
-      return this.callbackManager.add(v).toString()
-    /* istanbul ignore next */
-    default:
-      return JSON.stringify(v)
+  if (v && v instanceof Element) {
+    return v.ref
+  }
+  if (v && v._isVue && v.$el instanceof Element) {
+    return v.$el.ref
   }
+  if (type === 'Function') {
+    return this.callbackManager.add(v).toString()
+  }
+
+  return normalizePrimitive(v)
 };
 
-TaskCenter.prototype.send = function send (type, options, args) {
+TaskCenter.prototype.send = function send (type, params, args, options) {
     var this$1 = this;
 
-  var action = options.action;
-    var component = options.component;
-    var ref = options.ref;
-    var module = options.module;
-    var method = options.method;
+  var action = params.action;
+    var component = params.component;
+    var ref = params.ref;
+    var module = params.module;
+    var method = params.method;
 
   args = args.map(function (arg) { return this$1.normalize(arg); });
 
@@ -2887,9 +3064,9 @@ TaskCenter.prototype.send = function send (type, options, 
args) {
     case 'dom':
       return this[action](this.instanceId, args)
     case 'component':
-      return this.componentHandler(this.instanceId, ref, method, args, { 
component: component })
+      return this.componentHandler(this.instanceId, ref, method, args, 
Object.assign({ component: component }, options))
     default:
-      return this.moduleHandler(this.instanceId, module, method, args, {})
+      return this.moduleHandler(this.instanceId, module, method, args, options)
   }
 };
 
@@ -2897,12 +3074,12 @@ TaskCenter.prototype.callDOM = function callDOM 
(action, args) {
   return this[action](this.instanceId, args)
 };
 
-TaskCenter.prototype.callComponent = function callComponent (ref, method, 
args) {
-  return this.componentHandler(this.instanceId, ref, method, args, {})
+TaskCenter.prototype.callComponent = function callComponent (ref, method, 
args, options) {
+  return this.componentHandler(this.instanceId, ref, method, args, options)
 };
 
-TaskCenter.prototype.callModule = function callModule (module, method, args) {
-  return this.moduleHandler(this.instanceId, module, method, args, {})
+TaskCenter.prototype.callModule = function callModule (module, method, args, 
options) {
+  return this.moduleHandler(this.instanceId, module, method, args, options)
 };
 
 function init$2 () {
@@ -3797,8 +3974,10 @@ Object.assign(Document.prototype, {
    * Destroy current document, and remove itself form docMap.
    */
   destroy: function destroy () {
+    this.taskCenter.destroyCallback();
     delete this.listener;
     delete this.nodeMap;
+    delete this.taskCenter;
     removeDoc(this.id);
   }
 });
@@ -3847,7 +4026,10 @@ var config = {
     var args = [], len = arguments.length;
     while ( len-- ) args[ len ] = arguments[ len ];
 
-    return global.callNative.apply(global, args)
+    if (typeof callNative === 'function') {
+      return callNative.apply(void 0, args)
+    }
+    return (global.callNative || (function () {})).apply(void 0, args)
   }
 };
 
@@ -4230,7 +4412,9 @@ function createInstance$1 (id, code, options, data, 
serviceObjects) {
   globalKeys.push(code);
 
   var result = new (Function.prototype.bind.apply( Function, [ null ].concat( 
globalKeys) ));
-  return result.apply(void 0, globalValues)
+  result.apply(void 0, globalValues);
+
+  return { document: document }
 }
 
 function refreshInstance (id, data) {}
@@ -4272,55 +4456,91 @@ function receiveTasks (id, tasks) {
   }
 }
 
-var init_1 = init$3;
-var registerComponents_1 = registerComponents;
-var registerModules_1 = registerModules;
-var registerMethods_1 = registerMethods;
-var prepareInstance_1 = prepareInstance;
-var createInstance_1 = createInstance$1;
-var refreshInstance_1 = refreshInstance;
-var destroyInstance_1 = destroyInstance;
-var getRoot_1 = getRoot;
-var receiveTasks_1 = receiveTasks;
-
-var index = {
-       init: init_1,
-       registerComponents: registerComponents_1,
-       registerModules: registerModules_1,
-       registerMethods: registerMethods_1,
-       prepareInstance: prepareInstance_1,
-       createInstance: createInstance_1,
-       refreshInstance: refreshInstance_1,
-       destroyInstance: destroyInstance_1,
-       getRoot: getRoot_1,
-       receiveTasks: receiveTasks_1
-};
-
-
 
 var Vanilla = Object.freeze({
-       default: index,
-       __moduleExports: index,
-       init: init_1,
-       registerComponents: registerComponents_1,
-       registerModules: registerModules_1,
-       registerMethods: registerMethods_1,
-       prepareInstance: prepareInstance_1,
-       createInstance: createInstance_1,
-       refreshInstance: refreshInstance_1,
-       destroyInstance: destroyInstance_1,
-       getRoot: getRoot_1,
-       receiveTasks: receiveTasks_1
+       init: init$3,
+       registerComponents: registerComponents,
+       registerModules: registerModules,
+       registerMethods: registerMethods,
+       prepareInstance: prepareInstance,
+       createInstance: createInstance$1,
+       refreshInstance: refreshInstance,
+       destroyInstance: destroyInstance,
+       getRoot: getRoot,
+       receiveTasks: receiveTasks
 });
 
-var factory = function weexFactory (exports, renderer) {
+var factory = createCommonjsModule(function (module) {
+'use strict';
+
+module.exports = function weexFactory (exports, renderer) {
 
 /*  */
 
+// these helpers produces better vm code in JS engines due to their
+// explicitness and function inlining
+function isUndef (v) {
+  return v === undefined || v === null
+}
+
+function isDef (v) {
+  return v !== undefined && v !== null
+}
+
+function isTrue (v) {
+  return v === true
+}
+
+function isFalse (v) {
+  return v === false
+}
+
+/**
+ * Check if value is primitive
+ */
+function isPrimitive (value) {
+  return (
+    typeof value === 'string' ||
+    typeof value === 'number' ||
+    typeof value === 'boolean'
+  )
+}
+
+/**
+ * Quick object check - this is primarily used to tell
+ * Objects from primitive values when we know the value
+ * is a JSON-compliant type.
+ */
+function isObject (obj) {
+  return obj !== null && typeof obj === 'object'
+}
+
+var _toString = Object.prototype.toString;
+
+/**
+ * Strict object type check. Only returns true
+ * for plain JavaScript objects.
+ */
+function isPlainObject (obj) {
+  return _toString.call(obj) === '[object Object]'
+}
+
+function isRegExp (v) {
+  return _toString.call(v) === '[object RegExp]'
+}
+
+/**
+ * Check if val is a valid array index.
+ */
+function isValidArrayIndex (val) {
+  var n = parseFloat(val);
+  return n >= 0 && Math.floor(n) === n && isFinite(val)
+}
+
 /**
  * Convert a value to a string that is actually rendered.
  */
-function _toString (val) {
+function toString (val) {
   return val == null
     ? ''
     : typeof val === 'object'
@@ -4361,6 +4581,11 @@ function makeMap (
 var isBuiltInTag = makeMap('slot,component', true);
 
 /**
+ * Check if a attribute is a reserved attribute.
+ */
+var isReservedAttribute = makeMap('key,ref,slot,is');
+
+/**
  * Remove an item from an array
  */
 function remove (arr, item) {
@@ -4381,13 +4606,6 @@ function hasOwn (obj, key) {
 }
 
 /**
- * Check if value is primitive
- */
-function isPrimitive (value) {
-  return typeof value === 'string' || typeof value === 'number'
-}
-
-/**
  * Create a cached version of a pure function.
  */
 function cached (fn) {
@@ -4465,25 +4683,6 @@ function extend (to, _from) {
 }
 
 /**
- * Quick object check - this is primarily used to tell
- * Objects from primitive values when we know the value
- * is a JSON-compliant type.
- */
-function isObject (obj) {
-  return obj !== null && typeof obj === 'object'
-}
-
-/**
- * Strict object type check. Only returns true
- * for plain JavaScript objects.
- */
-var toString = Object.prototype.toString;
-var OBJECT_STRING = '[object Object]';
-function isPlainObject (obj) {
-  return toString.call(obj) === OBJECT_STRING
-}
-
-/**
  * Merge an Array of Objects into a single Object.
  */
 function toObject (arr) {
@@ -4498,13 +4697,15 @@ function toObject (arr) {
 
 /**
  * Perform no operation.
+ * Stubbing args to make Flow happy without leaving useless transpiled code
+ * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/)
  */
-function noop () {}
+function noop (a, b, c) {}
 
 /**
  * Always return false.
  */
-var no = function () { return false; };
+var no = function (a, b, c) { return false; };
 
 /**
  * Return same value
@@ -4521,14 +4722,30 @@ var identity = function (_) { return _; };
  * if they are plain objects, do they have the same shape?
  */
 function looseEqual (a, b) {
+  if (a === b) { return true }
   var isObjectA = isObject(a);
   var isObjectB = isObject(b);
   if (isObjectA && isObjectB) {
     try {
-      return JSON.stringify(a) === JSON.stringify(b)
+      var isArrayA = Array.isArray(a);
+      var isArrayB = Array.isArray(b);
+      if (isArrayA && isArrayB) {
+        return a.length === b.length && a.every(function (e, i) {
+          return looseEqual(e, b[i])
+        })
+      } else if (!isArrayA && !isArrayB) {
+        var keysA = Object.keys(a);
+        var keysB = Object.keys(b);
+        return keysA.length === keysB.length && keysA.every(function (key) {
+          return looseEqual(a[key], b[key])
+        })
+      } else {
+        /* istanbul ignore next */
+        return false
+      }
     } catch (e) {
-      // possible circular reference
-      return a === b
+      /* istanbul ignore next */
+      return false
     }
   } else if (!isObjectA && !isObjectB) {
     return String(a) === String(b)
@@ -4552,14 +4769,35 @@ function once (fn) {
   return function () {
     if (!called) {
       called = true;
-      fn();
+      fn.apply(this, arguments);
     }
   }
 }
 
+var SSR_ATTR = 'data-server-rendered';
+
+var ASSET_TYPES = [
+  'component',
+  'directive',
+  'filter'
+];
+
+var LIFECYCLE_HOOKS = [
+  'beforeCreate',
+  'created',
+  'beforeMount',
+  'mounted',
+  'beforeUpdate',
+  'updated',
+  'beforeDestroy',
+  'destroyed',
+  'activated',
+  'deactivated'
+];
+
 /*  */
 
-var config = {
+var config = ({
   /**
    * Option merge strategies (used in core/util/options)
    */
@@ -4591,6 +4829,11 @@ var config = {
   errorHandler: null,
 
   /**
+   * Warn handler for watcher warns
+   */
+  warnHandler: null,
+
+  /**
    * Ignore certain custom elements
    */
   ignoredElements: [],
@@ -4607,6 +4850,12 @@ var config = {
   isReservedTag: no,
 
   /**
+   * Check if an attribute is reserved so that it cannot be used as a component
+   * prop. This is platform-dependent and may be overwritten.
+   */
+  isReservedAttr: no,
+
+  /**
    * Check if a tag is an unknown element.
    * Platform-dependent.
    */
@@ -4629,35 +4878,10 @@ var config = {
   mustUseProp: no,
 
   /**
-   * List of asset types that a component can own.
-   */
-  _assetTypes: [
-    'component',
-    'directive',
-    'filter'
-  ],
-
-  /**
-   * List of lifecycle hooks.
+   * Exposed for legacy reasons
    */
-  _lifecycleHooks: [
-    'beforeCreate',
-    'created',
-    'beforeMount',
-    'mounted',
-    'beforeUpdate',
-    'updated',
-    'beforeDestroy',
-    'destroyed',
-    'activated',
-    'deactivated'
-  ],
-
-  /**
-   * Max circular updates allowed in a scheduler flush cycle.
-   */
-  _maxUpdateCount: 100
-};
+  _lifecycleHooks: LIFECYCLE_HOOKS
+});
 
 /*  */
 
@@ -4702,35 +4926,165 @@ function parsePath (path) {
 }
 
 /*  */
-/* globals MutationObserver */
 
-// can we use __proto__?
-var hasProto = '__proto__' in {};
+var warn = noop;
+var tip = noop;
+var formatComponentName = (null); // work around flow check
 
-// Browser environment sniffing
-var inBrowser = typeof window !== 'undefined';
-var UA = inBrowser && window.navigator.userAgent.toLowerCase();
-var isIE = UA && /msie|trident/.test(UA);
-var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
-var isEdge = UA && UA.indexOf('edge/') > 0;
-var isAndroid = UA && UA.indexOf('android') > 0;
-var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);
-var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge;
+{
+  var hasConsole = typeof console !== 'undefined';
+  var classifyRE = /(?:^|[-_])(\w)/g;
+  var classify = function (str) { return str
+    .replace(classifyRE, function (c) { return c.toUpperCase(); })
+    .replace(/[-_]/g, ''); };
 
-// this needs to be lazy-evaled because vue may be required before
-// vue-server-renderer can set VUE_ENV
-var _isServer;
-var isServerRendering = function () {
-  if (_isServer === undefined) {
-    /* istanbul ignore if */
-    if (!inBrowser && typeof commonjsGlobal !== 'undefined') {
-      // detect presence of vue-server-renderer and avoid
-      // Webpack shimming the process
-      _isServer = commonjsGlobal['process'].env.VUE_ENV === 'server';
-    } else {
-      _isServer = false;
+  warn = function (msg, vm) {
+    var trace = vm ? generateComponentTrace(vm) : '';
+
+    if (config.warnHandler) {
+      config.warnHandler.call(null, msg, vm, trace);
+    } else if (hasConsole && (!config.silent)) {
+      console.error(("[Vue warn]: " + msg + trace));
     }
-  }
+  };
+
+  tip = function (msg, vm) {
+    if (hasConsole && (!config.silent)) {
+      console.warn("[Vue tip]: " + msg + (
+        vm ? generateComponentTrace(vm) : ''
+      ));
+    }
+  };
+
+  formatComponentName = function (vm, includeFile) {
+    if (vm.$root === vm) {
+      return '<Root>'
+    }
+    var name = typeof vm === 'string'
+      ? vm
+      : typeof vm === 'function' && vm.options
+        ? vm.options.name
+        : vm._isVue
+          ? vm.$options.name || vm.$options._componentTag
+          : vm.name;
+
+    var file = vm._isVue && vm.$options.__file;
+    if (!name && file) {
+      var match = file.match(/([^/\\]+)\.vue$/);
+      name = match && match[1];
+    }
+
+    return (
+      (name ? ("<" + (classify(name)) + ">") : "<Anonymous>") +
+      (file && includeFile !== false ? (" at " + file) : '')
+    )
+  };
+
+  var repeat = function (str, n) {
+    var res = '';
+    while (n) {
+      if (n % 2 === 1) { res += str; }
+      if (n > 1) { str += str; }
+      n >>= 1;
+    }
+    return res
+  };
+
+  var generateComponentTrace = function (vm) {
+    if (vm._isVue && vm.$parent) {
+      var tree = [];
+      var currentRecursiveSequence = 0;
+      while (vm) {
+        if (tree.length > 0) {
+          var last = tree[tree.length - 1];
+          if (last.constructor === vm.constructor) {
+            currentRecursiveSequence++;
+            vm = vm.$parent;
+            continue
+          } else if (currentRecursiveSequence > 0) {
+            tree[tree.length - 1] = [last, currentRecursiveSequence];
+            currentRecursiveSequence = 0;
+          }
+        }
+        tree.push(vm);
+        vm = vm.$parent;
+      }
+      return '\n\nfound in\n\n' + tree
+        .map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 
5 + i * 2)) + (Array.isArray(vm)
+            ? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive 
calls)")
+            : formatComponentName(vm))); })
+        .join('\n')
+    } else {
+      return ("\n\n(found in " + (formatComponentName(vm)) + ")")
+    }
+  };
+}
+
+/*  */
+
+function handleError (err, vm, info) {
+  if (config.errorHandler) {
+    config.errorHandler.call(null, err, vm, info);
+  } else {
+    {
+      warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm);
+    }
+    /* istanbul ignore else */
+    if (inBrowser && ty

<TRUNCATED>

Reply via email to