Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Experimental] Nomodule polyfills chunk #10212

Merged
merged 43 commits into from Jan 30, 2020

Conversation

timneutkens
Copy link
Member

@timneutkens timneutkens commented Jan 22, 2020

Remove runtime-corejs2 from default Next.js applications in favor of a polyfills bundle that is only loaded in older browsers. The polyfills bundle has a list of all polyfills needed for IE11 support. This reduced bundle size on all modern browsers while retaining support for older browsers. Results below (see First Load and shared by all sizes. This also makes the polyfills file for some applications obsolete as more polyfills are included by default only in older browsers now (like String.prototype.includes and others). Also these polyfills are applied globally so if node_modules use them they're also polyfilled (which was previously not the case).


Before:

Page                                                           Size     First Load
─ ○ /                                                          221 B       71.6 kB
+ shared by all                                                71.4 kB
  ├ static/_buildManifest.js                                   61 B
  ├ static/pages/_app.js                                       764 B
  ├ chunks/commons.287300.js                                   8.51 kB
  ├ chunks/da5814d5f7e33c897b35087aa1058d6b9d041d39.24a1c3.js  16.2 kB
  ├ chunks/framework.9e7e8e.js                                 40.5 kB
  ├ runtime/main.0f5edb.js                                     4.71 kB
  └ runtime/webpack.91b117.js                                  746 B

After:

Page                                                           Size     First Load
─ ○ /                                                          259 B       59.4 kB
+ shared by all                                                59.1 kB
  ├ static/_buildManifest.js                                   61 B
  ├ static/pages/_app.js                                       766 B
  ├ chunks/df68fb9439b31f3dbd528b4eab4644bba9defe82.5da58c.js  12.4 kB
  ├ chunks/framework.33db2b.js                                 40.5 kB
  ├ runtime/main.b69ab4.js                                     4.7 kB
  └ runtime/webpack.b65cab.js  

Under an experimental flag currently:

module.exports = {
  experimental: {
    polyfillsOptimization: true,
  }
}

Thanks @Timer @developit for helping on this.

Copy link
Member

@Timer Timer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to alias @babel/runtime-corejs2/core-js/promise to a self.Promise stub.

Outdated for new approach.

@ijjk
Copy link
Member

ijjk commented Jan 22, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
buildDuration 11.7s 11.9s ⚠️ +129ms
nodeModulesSize 48.9 MB 48.9 MB ⚠️ +44.3 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.js gzip 5.1 kB 5.19 kB ⚠️ +83 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d57b.js gzip 16.1 kB 16.1 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 69.8 kB 69.9 kB ⚠️ +83 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.module.js gzip 4.1 kB 4.18 kB ⚠️ +83 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15 kB 15 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.5 kB 64.6 kB ⚠️ +83 B
Legacy Client Bundles (polyfills) Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
polyfills-HASH.js gzip 4.76 kB 7.14 kB ⚠️ +2.38 kB
Overall change 4.76 kB 7.14 kB ⚠️ +2.38 kB
Client Pages
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes Overall decrease ✓
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
index.html gzip 1.02 kB 1.02 kB -2 B
link.html gzip 1.03 kB 1.03 kB
withRouter.html gzip 1.02 kB 1.02 kB -1 B
Overall change 3.07 kB 3.06 kB -3 B

Diffs

Diff for main-HASH.js
@@ -311,8 +311,8 @@
       var _isDynamic = __webpack_require__('/jkW')
       /* global location */
 
-      if (!window.Promise) {
-        window.Promise = __webpack_require__('eVuF')
+      if (!window.Promise.prototype['finally']) {
+        window.Promise.prototype['finally'] = __webpack_require__('zrsZ')
       }
 
       var data = JSON.parse(
@@ -1517,6 +1517,27 @@
 
       /***/
     },
+
+    /***/ zrsZ: /***/ function(module, exports) {
+      Promise.prototype.finally = function(n) {
+        if ('function' != typeof n) return this.then(n, n)
+        var t = this.constructor || Promise
+        return this.then(
+          function(r) {
+            return t.resolve(n()).then(function() {
+              return r
+            })
+          },
+          function(r) {
+            return t.resolve(n()).then(function() {
+              throw r
+            })
+          }
+        )
+      }
+
+      /***/
+    },
   },
   [['BMP1', 0, 2, 1, 3, 4]],
 ])
Diff for main-HASH.module.js
@@ -212,8 +212,8 @@
       var _isDynamic = __webpack_require__('/jkW')
       /* global location */
 
-      if (!window.Promise) {
-        window.Promise = __webpack_require__('eVuF')
+      if (!window.Promise.prototype.finally) {
+        window.Promise.prototype.finally = __webpack_require__('zrsZ')
       }
 
       var data = JSON.parse(
@@ -1047,6 +1047,27 @@
 
       /***/
     },
+
+    /***/ zrsZ: /***/ function(module, exports) {
+      Promise.prototype.finally = function(n) {
+        if ('function' != typeof n) return this.then(n, n)
+        var t = this.constructor || Promise
+        return this.then(
+          function(r) {
+            return t.resolve(n()).then(function() {
+              return r
+            })
+          },
+          function(r) {
+            return t.resolve(n()).then(function() {
+              throw r
+            })
+          }
+        )
+      }
+
+      /***/
+    },
   },
   [['BMP1', 0, 1, 2, 3]],
 ])
Diff for polyfills-HASH.js
@@ -1,6 +1,516 @@
 ;(window['webpackJsonp'] = window['webpackJsonp'] || []).push([
   [13],
   {
+    /***/ '/pFH': /***/ function(
+      module,
+      __webpack_exports__,
+      __webpack_require__
+    ) {
+      'use strict'
+      /**
+       * @this {Promise}
+       */
+      function finallyConstructor(callback) {
+        var constructor = this.constructor
+        return this.then(
+          function(value) {
+            // @ts-ignore
+            return constructor.resolve(callback()).then(function() {
+              return value
+            })
+          },
+          function(reason) {
+            // @ts-ignore
+            return constructor.resolve(callback()).then(function() {
+              // @ts-ignore
+              return constructor.reject(reason)
+            })
+          }
+        )
+      }
+
+      /* harmony default export */ __webpack_exports__['a'] = finallyConstructor
+
+      /***/
+    },
+
+    /***/ '8oxB': /***/ function(module, exports) {
+      // shim for using process in browser
+      var process = (module.exports = {})
+
+      // cached from whatever global is present so that test runners that stub it
+      // don't break things.  But we need to wrap it in a try catch in case it is
+      // wrapped in strict mode code which doesn't define any globals.  It's inside a
+      // function because try/catches deoptimize in certain engines.
+
+      var cachedSetTimeout
+      var cachedClearTimeout
+
+      function defaultSetTimout() {
+        throw new Error('setTimeout has not been defined')
+      }
+      function defaultClearTimeout() {
+        throw new Error('clearTimeout has not been defined')
+      }
+      ;(function() {
+        try {
+          if (typeof setTimeout === 'function') {
+            cachedSetTimeout = setTimeout
+          } else {
+            cachedSetTimeout = defaultSetTimout
+          }
+        } catch (e) {
+          cachedSetTimeout = defaultSetTimout
+        }
+        try {
+          if (typeof clearTimeout === 'function') {
+            cachedClearTimeout = clearTimeout
+          } else {
+            cachedClearTimeout = defaultClearTimeout
+          }
+        } catch (e) {
+          cachedClearTimeout = defaultClearTimeout
+        }
+      })()
+      function runTimeout(fun) {
+        if (cachedSetTimeout === setTimeout) {
+          //normal enviroments in sane situations
+          return setTimeout(fun, 0)
+        }
+        // if setTimeout wasn't available but was latter defined
+        if (
+          (cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) &&
+          setTimeout
+        ) {
+          cachedSetTimeout = setTimeout
+          return setTimeout(fun, 0)
+        }
+        try {
+          // when when somebody has screwed with setTimeout but no I.E. maddness
+          return cachedSetTimeout(fun, 0)
+        } catch (e) {
+          try {
+            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
+            return cachedSetTimeout.call(null, fun, 0)
+          } catch (e) {
+            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
+            return cachedSetTimeout.call(this, fun, 0)
+          }
+        }
+      }
+      function runClearTimeout(marker) {
+        if (cachedClearTimeout === clearTimeout) {
+          //normal enviroments in sane situations
+          return clearTimeout(marker)
+        }
+        // if clearTimeout wasn't available but was latter defined
+        if (
+          (cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) &&
+          clearTimeout
+        ) {
+          cachedClearTimeout = clearTimeout
+          return clearTimeout(marker)
+        }
+        try {
+          // when when somebody has screwed with setTimeout but no I.E. maddness
+          return cachedClearTimeout(marker)
+        } catch (e) {
+          try {
+            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
+            return cachedClearTimeout.call(null, marker)
+          } catch (e) {
+            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
+            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
+            return cachedClearTimeout.call(this, marker)
+          }
+        }
+      }
+      var queue = []
+      var draining = false
+      var currentQueue
+      var queueIndex = -1
+
+      function cleanUpNextTick() {
+        if (!draining || !currentQueue) {
+          return
+        }
+        draining = false
+        if (currentQueue.length) {
+          queue = currentQueue.concat(queue)
+        } else {
+          queueIndex = -1
+        }
+        if (queue.length) {
+          drainQueue()
+        }
+      }
+
+      function drainQueue() {
+        if (draining) {
+          return
+        }
+        var timeout = runTimeout(cleanUpNextTick)
+        draining = true
+
+        var len = queue.length
+        while (len) {
+          currentQueue = queue
+          queue = []
+          while (++queueIndex < len) {
+            if (currentQueue) {
+              currentQueue[queueIndex].run()
+            }
+          }
+          queueIndex = -1
+          len = queue.length
+        }
+        currentQueue = null
+        draining = false
+        runClearTimeout(timeout)
+      }
+
+      process.nextTick = function(fun) {
+        var args = new Array(arguments.length - 1)
+        if (arguments.length > 1) {
+          for (var i = 1; i < arguments.length; i++) {
+            args[i - 1] = arguments[i]
+          }
+        }
+        queue.push(new Item(fun, args))
+        if (queue.length === 1 && !draining) {
+          runTimeout(drainQueue)
+        }
+      }
+
+      // v8 likes predictible objects
+      function Item(fun, array) {
+        this.fun = fun
+        this.array = array
+      }
+      Item.prototype.run = function() {
+        this.fun.apply(null, this.array)
+      }
+      process.title = 'browser'
+      process.browser = true
+      process.env = {}
+      process.argv = []
+      process.version = '' // empty string to avoid regexp issues
+      process.versions = {}
+
+      function noop() {}
+
+      process.on = noop
+      process.addListener = noop
+      process.once = noop
+      process.off = noop
+      process.removeListener = noop
+      process.removeAllListeners = noop
+      process.emit = noop
+      process.prependListener = noop
+      process.prependOnceListener = noop
+
+      process.listeners = function(name) {
+        return []
+      }
+
+      process.binding = function(name) {
+        throw new Error('process.binding is not supported')
+      }
+
+      process.cwd = function() {
+        return '/'
+      }
+      process.chdir = function(dir) {
+        throw new Error('process.chdir is not supported')
+      }
+      process.umask = function() {
+        return 0
+      }
+
+      /***/
+    },
+
+    /***/ 'B/eG': /***/ function(
+      module,
+      __webpack_exports__,
+      __webpack_require__
+    ) {
+      'use strict'
+      /* WEBPACK VAR INJECTION */ ;(function(setImmediate) {
+        /* harmony import */ var _finally__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
+          '/pFH'
+        )
+
+        // Store setTimeout reference so promise-polyfill will be unaffected by
+        // other code modifying setTimeout (like sinon.useFakeTimers())
+        var setTimeoutFunc = setTimeout
+
+        function isArray(x) {
+          return Boolean(x && typeof x.length !== 'undefined')
+        }
+
+        function noop() {}
+
+        // Polyfill for Function.prototype.bind
+        function bind(fn, thisArg) {
+          return function() {
+            fn.apply(thisArg, arguments)
+          }
+        }
+
+        /**
+         * @constructor
+         * @param {Function} fn
+         */
+        function Promise(fn) {
+          if (!(this instanceof Promise))
+            throw new TypeError('Promises must be constructed via new')
+          if (typeof fn !== 'function') throw new TypeError('not a function')
+          /** @type {!number} */
+          this._state = 0
+          /** @type {!boolean} */
+          this._handled = false
+          /** @type {Promise|undefined} */
+          this._value = undefined
+          /** @type {!Array<!Function>} */
+          this._deferreds = []
+
+          doResolve(fn, this)
+        }
+
+        function handle(self, deferred) {
+          while (self._state === 3) {
+            self = self._value
+          }
+          if (self._state === 0) {
+            self._deferreds.push(deferred)
+            return
+          }
+          self._handled = true
+          Promise._immediateFn(function() {
+            var cb =
+              self._state === 1 ? deferred.onFulfilled : deferred.onRejected
+            if (cb === null) {
+              ;(self._state === 1 ? resolve : reject)(
+                deferred.promise,
+                self._value
+              )
+              return
+            }
+            var ret
+            try {
+              ret = cb(self._value)
+            } catch (e) {
+              reject(deferred.promise, e)
+              return
+            }
+            resolve(deferred.promise, ret)
+          })
+        }
+
+        function resolve(self, newValue) {
+          try {
+            // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
+            if (newValue === self)
+              throw new TypeError('A promise cannot be resolved with itself.')
+            if (
+              newValue &&
+              (typeof newValue === 'object' || typeof newValue === 'function')
+            ) {
+              var then = newValue.then
+              if (newValue instanceof Promise) {
+                self._state = 3
+                self._value = newValue
+                finale(self)
+                return
+              } else if (typeof then === 'function') {
+                doResolve(bind(then, newValue), self)
+                return
+              }
+            }
+            self._state = 1
+            self._value = newValue
+            finale(self)
+          } catch (e) {
+            reject(self, e)
+          }
+        }
+
+        function reject(self, newValue) {
+          self._state = 2
+          self._value = newValue
+          finale(self)
+        }
+
+        function finale(self) {
+          if (self._state === 2 && self._deferreds.length === 0) {
+            Promise._immediateFn(function() {
+              if (!self._handled) {
+                Promise._unhandledRejectionFn(self._value)
+              }
+            })
+          }
+
+          for (var i = 0, len = self._deferreds.length; i < len; i++) {
+            handle(self, self._deferreds[i])
+          }
+          self._deferreds = null
+        }
+
+        /**
+         * @constructor
+         */
+        function Handler(onFulfilled, onRejected, promise) {
+          this.onFulfilled =
+            typeof onFulfilled === 'function' ? onFulfilled : null
+          this.onRejected = typeof onRejected === 'function' ? onRejected : null
+          this.promise = promise
+        }
+
+        /**
+         * Take a potentially misbehaving resolver function and make sure
+         * onFulfilled and onRejected are only called once.
+         *
+         * Makes no guarantees about asynchrony.
+         */
+        function doResolve(fn, self) {
+          var done = false
+          try {
+            fn(
+              function(value) {
+                if (done) return
+                done = true
+                resolve(self, value)
+              },
+              function(reason) {
+                if (done) return
+                done = true
+                reject(self, reason)
+              }
+            )
+          } catch (ex) {
+            if (done) return
+            done = true
+            reject(self, ex)
+          }
+        }
+
+        Promise.prototype['catch'] = function(onRejected) {
+          return this.then(null, onRejected)
+        }
+
+        Promise.prototype.then = function(onFulfilled, onRejected) {
+          // @ts-ignore
+          var prom = new this.constructor(noop)
+
+          handle(this, new Handler(onFulfilled, onRejected, prom))
+          return prom
+        }
+
+        Promise.prototype['finally'] =
+          _finally__WEBPACK_IMPORTED_MODULE_0__[/* default */ 'a']
+
+        Promise.all = function(arr) {
+          return new Promise(function(resolve, reject) {
+            if (!isArray(arr)) {
+              return reject(new TypeError('Promise.all accepts an array'))
+            }
+
+            var args = Array.prototype.slice.call(arr)
+            if (args.length === 0) return resolve([])
+            var remaining = args.length
+
+            function res(i, val) {
+              try {
+                if (
+                  val &&
+                  (typeof val === 'object' || typeof val === 'function')
+                ) {
+                  var then = val.then
+                  if (typeof then === 'function') {
+                    then.call(
+                      val,
+                      function(val) {
+                        res(i, val)
+                      },
+                      reject
+                    )
+                    return
+                  }
+                }
+                args[i] = val
+                if (--remaining === 0) {
+                  resolve(args)
+                }
+              } catch (ex) {
+                reject(ex)
+              }
+            }
+
+            for (var i = 0; i < args.length; i++) {
+              res(i, args[i])
+            }
+          })
+        }
+
+        Promise.resolve = function(value) {
+          if (
+            value &&
+            typeof value === 'object' &&
+            value.constructor === Promise
+          ) {
+            return value
+          }
+
+          return new Promise(function(resolve) {
+            resolve(value)
+          })
+        }
+
+        Promise.reject = function(value) {
+          return new Promise(function(resolve, reject) {
+            reject(value)
+          })
+        }
+
+        Promise.race = function(arr) {
+          return new Promise(function(resolve, reject) {
+            if (!isArray(arr)) {
+              return reject(new TypeError('Promise.race accepts an array'))
+            }
+
+            for (var i = 0, len = arr.length; i < len; i++) {
+              Promise.resolve(arr[i]).then(resolve, reject)
+            }
+          })
+        }
+
+        // Use polyfill for setImmediate for performance gains
+        Promise._immediateFn =
+          // @ts-ignore
+          (typeof setImmediate === 'function' &&
+            function(fn) {
+              // @ts-ignore
+              setImmediate(fn)
+            }) ||
+          function(fn) {
+            setTimeoutFunc(fn, 0)
+          }
+
+        Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {
+          if (typeof console !== 'undefined' && console) {
+            console.warn('Possible Unhandled Promise Rejection:', err) // eslint-disable-line no-console
+          }
+        }
+
+        /* harmony default export */ __webpack_exports__['a'] = Promise
+
+        /* WEBPACK VAR INJECTION */
+      }.call(this, __webpack_require__('URgk').setImmediate))
+
+      /***/
+    },
+
     /***/ GkXk: /***/ function(module, exports, __webpack_require__) {
       ;(function(global, factory) {
         true ? factory(exports) : undefined
@@ -1209,9 +1719,90 @@ object-assign
       /***/
     },
 
+    /***/ URgk: /***/ function(module, exports, __webpack_require__) {
+      /* WEBPACK VAR INJECTION */ ;(function(global) {
+        var scope =
+          (typeof global !== 'undefined' && global) ||
+          (typeof self !== 'undefined' && self) ||
+          window
+        var apply = Function.prototype.apply
+
+        // DOM APIs, for completeness
+
+        exports.setTimeout = function() {
+          return new Timeout(
+            apply.call(setTimeout, scope, arguments),
+            clearTimeout
+          )
+        }
+        exports.setInterval = function() {
+          return new Timeout(
+            apply.call(setInterval, scope, arguments),
+            clearInterval
+          )
+        }
+        exports.clearTimeout = exports.clearInterval = function(timeout) {
+          if (timeout) {
+            timeout.close()
+          }
+        }
+
+        function Timeout(id, clearFn) {
+          this._id = id
+          this._clearFn = clearFn
+        }
+        Timeout.prototype.unref = Timeout.prototype.ref = function() {}
+        Timeout.prototype.close = function() {
+          this._clearFn.call(scope, this._id)
+        }
+
+        // Does not start the time, just sets up the members needed.
+        exports.enroll = function(item, msecs) {
+          clearTimeout(item._idleTimeoutId)
+          item._idleTimeout = msecs
+        }
+
+        exports.unenroll = function(item) {
+          clearTimeout(item._idleTimeoutId)
+          item._idleTimeout = -1
+        }
+
+        exports._unrefActive = exports.active = function(item) {
+          clearTimeout(item._idleTimeoutId)
+
+          var msecs = item._idleTimeout
+          if (msecs >= 0) {
+            item._idleTimeoutId = setTimeout(function onTimeout() {
+              if (item._onTimeout) item._onTimeout()
+            }, msecs)
+          }
+        }
+
+        // setimmediate attaches itself to the global object
+        __webpack_require__('YBdB')
+        // On some exotic environments, it's not clear which object `setimmediate` was
+        // able to install onto.  Search each possibility in the same order as the
+        // `setimmediate` library.
+        exports.setImmediate =
+          (typeof self !== 'undefined' && self.setImmediate) ||
+          (typeof global !== 'undefined' && global.setImmediate) ||
+          (this && this.setImmediate)
+        exports.clearImmediate =
+          (typeof self !== 'undefined' && self.clearImmediate) ||
+          (typeof global !== 'undefined' && global.clearImmediate) ||
+          (this && this.clearImmediate)
+
+        /* WEBPACK VAR INJECTION */
+      }.call(this, __webpack_require__('yLpj')))
+
+      /***/
+    },
+
     /***/ XLER: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
+      __webpack_require__('aE5D')
+
       __webpack_require__('GkXk')
 
       __webpack_require__('T1qB')
@@ -1221,6 +1812,256 @@ object-assign
       /***/
     },
 
+    /***/ YBdB: /***/ function(module, exports, __webpack_require__) {
+      /* WEBPACK VAR INJECTION */ ;(function(global, process) {
+        ;(function(global, undefined) {
+          'use strict'
+
+          if (global.setImmediate) {
+            return
+          }
+
+          var nextHandle = 1 // Spec says greater than zero
+          var tasksByHandle = {}
+          var currentlyRunningATask = false
+          var doc = global.document
+          var registerImmediate
+
+          function setImmediate(callback) {
+            // Callback can either be a function or a string
+            if (typeof callback !== 'function') {
+              callback = new Function('' + callback)
+            }
+            // Copy function arguments
+            var args = new Array(arguments.length - 1)
+            for (var i = 0; i < args.length; i++) {
+              args[i] = arguments[i + 1]
+            }
+            // Store and register the task
+            var task = { callback: callback, args: args }
+            tasksByHandle[nextHandle] = task
+            registerImmediate(nextHandle)
+            return nextHandle++
+          }
+
+          function clearImmediate(handle) {
+            delete tasksByHandle[handle]
+          }
+
+          function run(task) {
+            var callback = task.callback
+            var args = task.args
+            switch (args.length) {
+              case 0:
+                callback()
+                break
+              case 1:
+                callback(args[0])
+                break
+              case 2:
+                callback(args[0], args[1])
+                break
+              case 3:
+                callback(args[0], args[1], args[2])
+                break
+              default:
+                callback.apply(undefined, args)
+                break
+            }
+          }
+
+          function runIfPresent(handle) {
+            // From the spec: "Wait until any invocations of this algorithm started before this one have completed."
+            // So if we're currently running a task, we'll need to delay this invocation.
+            if (currentlyRunningATask) {
+              // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a
+              // "too much recursion" error.
+              setTimeout(runIfPresent, 0, handle)
+            } else {
+              var task = tasksByHandle[handle]
+              if (task) {
+                currentlyRunningATask = true
+                try {
+                  run(task)
+                } finally {
+                  clearImmediate(handle)
+                  currentlyRunningATask = false
+                }
+              }
+            }
+          }
+
+          function installNextTickImplementation() {
+            registerImmediate = function(handle) {
+              process.nextTick(function() {
+                runIfPresent(handle)
+              })
+            }
+          }
+
+          function canUsePostMessage() {
+            // The test against `importScripts` prevents this implementation from being installed inside a web worker,
+            // where `global.postMessage` means something completely different and can't be used for this purpose.
+            if (global.postMessage && !global.importScripts) {
+              var postMessageIsAsynchronous = true
+              var oldOnMessage = global.onmessage
+              global.onmessage = function() {
+                postMessageIsAsynchronous = false
+              }
+              global.postMessage('', '*')
+              global.onmessage = oldOnMessage
+              return postMessageIsAsynchronous
+            }
+          }
+
+          function installPostMessageImplementation() {
+            // Installs an event handler on `global` for the `message` event: see
+            // * https://developer.mozilla.org/en/DOM/window.postMessage
+            // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages
+
+            var messagePrefix = 'setImmediate$' + Math.random() + '$'
+            var onGlobalMessage = function(event) {
+              if (
+                event.source === global &&
+                typeof event.data === 'string' &&
+                event.data.indexOf(messagePrefix) === 0
+              ) {
+                runIfPresent(+event.data.slice(messagePrefix.length))
+              }
+            }
+
+            if (global.addEventListener) {
+              global.addEventListener('message', onGlobalMessage, false)
+            } else {
+              global.attachEvent('onmessage', onGlobalMessage)
+            }
+
+            registerImmediate = function(handle) {
+              global.postMessage(messagePrefix + handle, '*')
+            }
+          }
+
+          function installMessageChannelImplementation() {
+            var channel = new MessageChannel()
+            channel.port1.onmessage = function(event) {
+              var handle = event.data
+              runIfPresent(handle)
+            }
+
+            registerImmediate = function(handle) {
+              channel.port2.postMessage(handle)
+            }
+          }
+
+          function installReadyStateChangeImplementation() {
+            var html = doc.documentElement
+            registerImmediate = function(handle) {
+              // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
+              // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
+              var script = doc.createElement('script')
+              script.onreadystatechange = function() {
+                runIfPresent(handle)
+                script.onreadystatechange = null
+                html.removeChild(script)
+                script = null
+              }
+              html.appendChild(script)
+            }
+          }
+
+          function installSetTimeoutImplementation() {
+            registerImmediate = function(handle) {
+              setTimeout(runIfPresent, 0, handle)
+            }
+          }
+
+          // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.
+          var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global)
+          attachTo = attachTo && attachTo.setTimeout ? attachTo : global
+
+          // Don't get fooled by e.g. browserify environments.
+          if ({}.toString.call(global.process) === '[object process]') {
+            // For Node.js before 0.9
+            installNextTickImplementation()
+          } else if (canUsePostMessage()) {
+            // For non-IE10 modern browsers
+            installPostMessageImplementation()
+          } else if (global.MessageChannel) {
+            // For web workers, where supported
+            installMessageChannelImplementation()
+          } else if (
+            doc &&
+            'onreadystatechange' in doc.createElement('script')
+          ) {
+            // For IE 6–8
+            installReadyStateChangeImplementation()
+          } else {
+            // For older browsers
+            installSetTimeoutImplementation()
+          }
+
+          attachTo.setImmediate = setImmediate
+          attachTo.clearImmediate = clearImmediate
+        })(
+          typeof self === 'undefined'
+            ? typeof global === 'undefined'
+              ? this
+              : global
+            : self
+        )
+
+        /* WEBPACK VAR INJECTION */
+      }.call(this, __webpack_require__('yLpj'), __webpack_require__('8oxB')))
+
+      /***/
+    },
+
+    /***/ aE5D: /***/ function(
+      module,
+      __webpack_exports__,
+      __webpack_require__
+    ) {
+      'use strict'
+      __webpack_require__.r(__webpack_exports__)
+      /* WEBPACK VAR INJECTION */ ;(function(global) {
+        /* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
+          'B/eG'
+        )
+        /* harmony import */ var _finally__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
+          '/pFH'
+        )
+
+        /** @suppress {undefinedVars} */
+        var globalNS = (function() {
+          // the only reliable means to get the global object is
+          // `Function('return this')()`
+          // However, this causes CSP violations in Chrome apps.
+          if (typeof self !== 'undefined') {
+            return self
+          }
+          if (typeof window !== 'undefined') {
+            return window
+          }
+          if (typeof global !== 'undefined') {
+            return global
+          }
+          throw new Error('unable to locate global object')
+        })()
+
+        if (!('Promise' in globalNS)) {
+          globalNS['Promise'] =
+            _index__WEBPACK_IMPORTED_MODULE_0__[/* default */ 'a']
+        } else if (!globalNS.Promise.prototype['finally']) {
+          globalNS.Promise.prototype['finally'] =
+            _finally__WEBPACK_IMPORTED_MODULE_1__[/* default */ 'a']
+        }
+
+        /* WEBPACK VAR INJECTION */
+      }.call(this, __webpack_require__('yLpj')))
+
+      /***/
+    },
+
     /***/ yLpj: /***/ function(module, exports) {
       var g
Diff for index.html
@@ -45,7 +45,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/runtime/main-4b4ea9d6783c4e4843be.module.js"
+      href="/_next/static/runtime/main-45c2fc5290f6ce6224dc.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -78,7 +78,7 @@
     ><script
       crossorigin="anonymous"
       nomodule=""
-      src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"
+      src="/_next/static/runtime/polyfills-0e66bd71d71c58a15235.js"
     ></script
     ><script
       async=""
@@ -163,13 +163,13 @@
       type="module"
     ></script
     ><script
-      src="/_next/static/runtime/main-0f0b179fd8c5a047537b.js"
+      src="/_next/static/runtime/main-9f56c6803986d6db41b3.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/runtime/main-4b4ea9d6783c4e4843be.module.js"
+      src="/_next/static/runtime/main-45c2fc5290f6ce6224dc.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for link.html
@@ -45,7 +45,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/runtime/main-4b4ea9d6783c4e4843be.module.js"
+      href="/_next/static/runtime/main-45c2fc5290f6ce6224dc.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -83,7 +83,7 @@
     ><script
       crossorigin="anonymous"
       nomodule=""
-      src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"
+      src="/_next/static/runtime/polyfills-0e66bd71d71c58a15235.js"
     ></script
     ><script
       async=""
@@ -168,13 +168,13 @@
       type="module"
     ></script
     ><script
-      src="/_next/static/runtime/main-0f0b179fd8c5a047537b.js"
+      src="/_next/static/runtime/main-9f56c6803986d6db41b3.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/runtime/main-4b4ea9d6783c4e4843be.module.js"
+      src="/_next/static/runtime/main-45c2fc5290f6ce6224dc.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for withRouter.html
@@ -45,7 +45,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/runtime/main-4b4ea9d6783c4e4843be.module.js"
+      href="/_next/static/runtime/main-45c2fc5290f6ce6224dc.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -78,7 +78,7 @@
     ><script
       crossorigin="anonymous"
       nomodule=""
-      src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"
+      src="/_next/static/runtime/polyfills-0e66bd71d71c58a15235.js"
     ></script
     ><script
       async=""
@@ -163,13 +163,13 @@
       type="module"
     ></script
     ><script
-      src="/_next/static/runtime/main-0f0b179fd8c5a047537b.js"
+      src="/_next/static/runtime/main-9f56c6803986d6db41b3.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/runtime/main-4b4ea9d6783c4e4843be.module.js"
+      src="/_next/static/runtime/main-45c2fc5290f6ce6224dc.module.js"
       async=""
       crossorigin="anonymous"
       type="module"

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
buildDuration 12.7s 12.8s ⚠️ +104ms
nodeModulesSize 48.9 MB 48.9 MB ⚠️ +44.3 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.js gzip 5.1 kB 5.19 kB ⚠️ +83 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d57b.js gzip 16.1 kB 16.1 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 69.8 kB 69.9 kB ⚠️ +83 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.module.js gzip 4.1 kB 4.18 kB ⚠️ +83 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15 kB 15 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.5 kB 64.6 kB ⚠️ +83 B
Legacy Client Bundles (polyfills) Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
polyfills-HASH.js gzip 4.76 kB 7.14 kB ⚠️ +2.38 kB
Overall change 4.76 kB 7.14 kB ⚠️ +2.38 kB
Client Pages
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_error.js gzip 46.2 kB 46.2 kB
hooks.html gzip 1.05 kB 1.05 kB -2 B
index.js gzip 46.4 kB 46.4 kB ⚠️ +3 B
link.js gzip 71.9 kB 71.9 kB ⚠️ +1 B
routerDirect.js gzip 69.9 kB 69.9 kB ⚠️ +1 B
withRouter.js gzip 69.9 kB 69.9 kB
Overall change 305 kB 305 kB ⚠️ +3 B

@ijjk
Copy link
Member

ijjk commented Jan 22, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
buildDuration 14.4s 14.8s ⚠️ +351ms
nodeModulesSize 48.9 MB 48.9 MB ⚠️ +44.6 kB
Client Bundles (main, webpack, commons) Overall decrease ✓
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.js gzip 5.1 kB 5.19 kB ⚠️ +85 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.53 kB -154 B
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d57b.js gzip 16.1 kB N/A N/A
framework.HASH.js gzip 39.1 kB 39.1 kB
de003c3a9d30..5ede.js gzip N/A 13.7 kB N/A
Overall change 69.8 kB 67.4 kB -69 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.module.js gzip 4.1 kB 4.18 kB ⚠️ +84 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.5 kB -57 B
de003c3a9d30..dule.js gzip 15 kB N/A N/A
framework.HA..dule.js gzip 39.1 kB 39.1 kB
de003c3a9d30..dule.js gzip N/A 12.3 kB N/A
Overall change 64.5 kB 61.9 kB ⚠️ +27 B
Legacy Client Bundles (polyfills) Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
polyfills-HASH.js gzip 4.76 kB 7.14 kB ⚠️ +2.38 kB
Overall change 4.76 kB 7.14 kB ⚠️ +2.38 kB
Client Pages Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.26 kB ⚠️ +188 B
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.97 kB ⚠️ +74 B
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.94 kB ⚠️ +262 B
Client Pages Modern Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.14 kB ⚠️ +83 B
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.55 kB ⚠️ +83 B
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.39 kB ⚠️ +166 B
Client Build Manifests
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes Overall decrease ✓
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
index.html gzip 1.02 kB 1.02 kB -3 B
link.html gzip 1.03 kB 1.03 kB -4 B
withRouter.html gzip 1.02 kB 1.01 kB -3 B
Overall change 3.07 kB 3.06 kB -10 B

Diffs

Diff for _error.js
@@ -698,6 +698,29 @@
       /***/
     },
 
+    /***/ TJWN: /***/ function(module, exports, __webpack_require__) {
+      'use strict'
+
+      var global = __webpack_require__('5T2Y')
+      var core = __webpack_require__('WEpk')
+      var dP = __webpack_require__('2faE')
+      var DESCRIPTORS = __webpack_require__('jmDH')
+      var SPECIES = __webpack_require__('UWiX')('species')
+
+      module.exports = function(KEY) {
+        var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY]
+        if (DESCRIPTORS && C && !C[SPECIES])
+          dP.f(C, SPECIES, {
+            configurable: true,
+            get: function() {
+              return this
+            },
+          })
+      }
+
+      /***/
+    },
+
     /***/ TbGu: /***/ function(module, exports, __webpack_require__) {
       var arrayWithoutHoles = __webpack_require__('fGSI')
 
@@ -716,6 +739,45 @@
       /***/
     },
 
+    /***/ TuGD: /***/ function(module, exports, __webpack_require__) {
+      var ITERATOR = __webpack_require__('UWiX')('iterator')
+      var SAFE_CLOSING = false
+
+      try {
+        var riter = [7][ITERATOR]()
+        riter['return'] = function() {
+          SAFE_CLOSING = true
+        }
+        // eslint-disable-next-line no-throw-literal
+        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]
+          var iter = arr[ITERATOR]()
+          iter.next = function() {
+            return { done: (safe = true) }
+          }
+          arr[ITERATOR] = function() {
+            return iter
+          }
+          exec(arr)
+        } catch (e) {
+          /* empty */
+        }
+        return safe
+      }
+
+      /***/
+    },
+
     /***/ 'V+O7': /***/ function(module, exports, __webpack_require__) {
       // https://tc39.github.io/proposal-setmap-offrom/#sec-set.from
       __webpack_require__('aPfg')('Set')
Diff for _error.module.js
@@ -502,6 +502,29 @@
       /***/
     },
 
+    /***/ TJWN: /***/ function(module, exports, __webpack_require__) {
+      'use strict'
+
+      var global = __webpack_require__('5T2Y')
+      var core = __webpack_require__('WEpk')
+      var dP = __webpack_require__('2faE')
+      var DESCRIPTORS = __webpack_require__('jmDH')
+      var SPECIES = __webpack_require__('UWiX')('species')
+
+      module.exports = function(KEY) {
+        var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY]
+        if (DESCRIPTORS && C && !C[SPECIES])
+          dP.f(C, SPECIES, {
+            configurable: true,
+            get: function() {
+              return this
+            },
+          })
+      }
+
+      /***/
+    },
+
     /***/ 'V+O7': /***/ function(module, exports, __webpack_require__) {
       // https://tc39.github.io/proposal-setmap-offrom/#sec-set.from
       __webpack_require__('aPfg')('Set')
Diff for link.js
@@ -179,6 +179,29 @@
       /***/
     },
 
+    /***/ TJWN: /***/ function(module, exports, __webpack_require__) {
+      'use strict'
+
+      var global = __webpack_require__('5T2Y')
+      var core = __webpack_require__('WEpk')
+      var dP = __webpack_require__('2faE')
+      var DESCRIPTORS = __webpack_require__('jmDH')
+      var SPECIES = __webpack_require__('UWiX')('species')
+
+      module.exports = function(KEY) {
+        var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY]
+        if (DESCRIPTORS && C && !C[SPECIES])
+          dP.f(C, SPECIES, {
+            configurable: true,
+            get: function() {
+              return this
+            },
+          })
+      }
+
+      /***/
+    },
+
     /***/ UDep: /***/ function(module, exports, __webpack_require__) {
       __webpack_require__('wgeU')
       __webpack_require__('FlQf')
Diff for link.module.js
@@ -85,6 +85,29 @@
       /***/
     },
 
+    /***/ TJWN: /***/ function(module, exports, __webpack_require__) {
+      'use strict'
+
+      var global = __webpack_require__('5T2Y')
+      var core = __webpack_require__('WEpk')
+      var dP = __webpack_require__('2faE')
+      var DESCRIPTORS = __webpack_require__('jmDH')
+      var SPECIES = __webpack_require__('UWiX')('species')
+
+      module.exports = function(KEY) {
+        var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY]
+        if (DESCRIPTORS && C && !C[SPECIES])
+          dP.f(C, SPECIES, {
+            configurable: true,
+            get: function() {
+              return this
+            },
+          })
+      }
+
+      /***/
+    },
+
     /***/ UDep: /***/ function(module, exports, __webpack_require__) {
       __webpack_require__('wgeU')
       __webpack_require__('FlQf')
Diff for 4952ddcd88e7..16.module.js
@@ -655,29 +655,6 @@
       /***/
     },
 
-    /***/ TJWN: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      var global = __webpack_require__('5T2Y')
-      var core = __webpack_require__('WEpk')
-      var dP = __webpack_require__('2faE')
-      var DESCRIPTORS = __webpack_require__('jmDH')
-      var SPECIES = __webpack_require__('UWiX')('species')
-
-      module.exports = function(KEY) {
-        var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY]
-        if (DESCRIPTORS && C && !C[SPECIES])
-          dP.f(C, SPECIES, {
-            configurable: true,
-            get: function() {
-              return this
-            },
-          })
-      }
-
-      /***/
-    },
-
     /***/ 'U+KD': /***/ function(module, exports, __webpack_require__) {
       // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
       var has = __webpack_require__('B+OT')
Diff for 4952ddcd88e7..92a927903.js
@@ -659,74 +659,12 @@
       /***/
     },
 
-    /***/ TJWN: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      var global = __webpack_require__('5T2Y')
-      var core = __webpack_require__('WEpk')
-      var dP = __webpack_require__('2faE')
-      var DESCRIPTORS = __webpack_require__('jmDH')
-      var SPECIES = __webpack_require__('UWiX')('species')
-
-      module.exports = function(KEY) {
-        var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY]
-        if (DESCRIPTORS && C && !C[SPECIES])
-          dP.f(C, SPECIES, {
-            configurable: true,
-            get: function() {
-              return this
-            },
-          })
-      }
-
-      /***/
-    },
-
     /***/ TRZx: /***/ function(module, exports, __webpack_require__) {
       module.exports = __webpack_require__('JbBM')
 
       /***/
     },
 
-    /***/ TuGD: /***/ function(module, exports, __webpack_require__) {
-      var ITERATOR = __webpack_require__('UWiX')('iterator')
-      var SAFE_CLOSING = false
-
-      try {
-        var riter = [7][ITERATOR]()
-        riter['return'] = function() {
-          SAFE_CLOSING = true
-        }
-        // eslint-disable-next-line no-throw-literal
-        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]
-          var iter = arr[ITERATOR]()
-          iter.next = function() {
-            return { done: (safe = true) }
-          }
-          arr[ITERATOR] = function() {
-            return iter
-          }
-          exec(arr)
-        } catch (e) {
-          /* empty */
-        }
-        return safe
-      }
-
-      /***/
-    },
-
     /***/ V7Et: /***/ function(module, exports, __webpack_require__) {
       // 0 -> Array#forEach
       // 1 -> Array#map
Diff for de003c3a9d30..e3035c8ae.js
@@ -79,6 +79,14 @@
       /***/
     },
 
+    /***/ '21Wz': /***/ function(module, exports, __webpack_require__) {
+      'use strict'
+      module.exports = Promise
+      module.exports.default = Promise
+
+      /***/
+    },
+
     /***/ '4JlD': /***/ function(module, exports, __webpack_require__) {
       'use strict'
       // Copyright Joyent, Inc. and other Node contributors.
@@ -278,22 +286,6 @@
       /***/
     },
 
-    /***/ '8gHz': /***/ function(module, exports, __webpack_require__) {
-      // 7.3.20 SpeciesConstructor(O, defaultConstructor)
-      var anObject = __webpack_require__('5K7Z')
-      var aFunction = __webpack_require__('eaoh')
-      var SPECIES = __webpack_require__('UWiX')('species')
-      module.exports = function(O, D) {
-        var C = anObject(O).constructor
-        var S
-        return C === undefined || (S = anObject(C)[SPECIES]) == undefined
-          ? D
-          : aFunction(S)
-      }
-
-      /***/
-    },
-
     /***/ BURE: /***/ function(module, exports, __webpack_require__) {
       // https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of
       __webpack_require__('cHUd')('WeakMap')
@@ -1603,331 +1595,6 @@
       /***/
     },
 
-    /***/ 'JMW+': /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      var LIBRARY = __webpack_require__('uOPS')
-      var global = __webpack_require__('5T2Y')
-      var ctx = __webpack_require__('2GTP')
-      var classof = __webpack_require__('QMMT')
-      var $export = __webpack_require__('Y7ZC')
-      var isObject = __webpack_require__('93I4')
-      var aFunction = __webpack_require__('eaoh')
-      var anInstance = __webpack_require__('EXMj')
-      var forOf = __webpack_require__('oioR')
-      var speciesConstructor = __webpack_require__('8gHz')
-      var task = __webpack_require__('QXhf').set
-      var microtask = __webpack_require__('q6LJ')()
-      var newPromiseCapabilityModule = __webpack_require__('ZW5q')
-      var perform = __webpack_require__('RDmV')
-      var userAgent = __webpack_require__('vBP9')
-      var promiseResolve = __webpack_require__('zXhZ')
-      var PROMISE = 'Promise'
-      var TypeError = global.TypeError
-      var process = global.process
-      var versions = process && process.versions
-      var v8 = (versions && versions.v8) || ''
-      var $Promise = global[PROMISE]
-      var isNode = classof(process) == 'process'
-      var empty = function() {
-        /* empty */
-      }
-      var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper
-      var newPromiseCapability = (newGenericPromiseCapability =
-        newPromiseCapabilityModule.f)
-
-      var USE_NATIVE = !!(function() {
-        try {
-          // correct subclassing with @@species support
-          var promise = $Promise.resolve(1)
-          var FakePromise = ((promise.constructor = {})[
-            __webpack_require__('UWiX')('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 &&
-            // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
-            // https://bugs.chromium.org/p/chromium/issues/detail?id=830565
-            // we can't detect it synchronously, so just check versions
-            v8.indexOf('6.6') !== 0 &&
-            userAgent.indexOf('Chrome/66') === -1
-          )
-        } catch (e) {
-          /* empty */
-        }
-      })()
-
-      // helpers
-      var isThenable = function(it) {
-        var then
-        return isObject(it) && typeof (then = it.then) == 'function'
-          ? then
-          : false
-      }
-      var notify = function(promise, isReject) {
-        if (promise._n) return
-        promise._n = true
-        var chain = promise._c
-        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, exited
-            try {
-              if (handler) {
-                if (!ok) {
-                  if (promise._h == 2) onHandleUnhandled(promise)
-                  promise._h = 1
-                }
-                if (handler === true) result = value
-                else {
-                  if (domain) domain.enter()
-                  result = handler(value) // may throw
-                  if (domain) {
-                    domain.exit()
-                    exited = true
-                  }
-                }
-                if (result === reaction.promise) {
-                  reject(TypeError('Promise-chain cycle'))
-                } else if ((then = isThenable(result))) {
-                  then.call(result, resolve, reject)
-                } else resolve(result)
-              } else reject(value)
-            } catch (e) {
-              if (domain && !exited) domain.exit()
-              reject(e)
-            }
-          }
-          while (chain.length > i) run(chain[i++]) // variable length - can't use forEach
-          promise._c = []
-          promise._n = false
-          if (isReject && !promise._h) onUnhandled(promise)
-        })
-      }
-      var onUnhandled = function(promise) {
-        task.call(global, function() {
-          var value = promise._v
-          var unhandled = isUnhandled(promise)
-          var result, handler, console
-          if (unhandled) {
-            result = perform(function() {
-              if (isNode) {
-                process.emit('unhandledRejection', value, promise)
-              } else if ((handler = global.onunhandledrejection)) {
-                handler({ promise: promise, reason: value })
-              } else if ((console = global.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 (unhandled && result.e) throw result.v
-        })
-      }
-      var isUnhandled = function(promise) {
-        return promise._h !== 1 && (promise._a || promise._c).length === 0
-      }
-      var onHandleUnhandled = function(promise) {
-        task.call(global, function() {
-          var handler
-          if (isNode) {
-            process.emit('rejectionHandled', promise)
-          } else if ((handler = global.onrejectionhandled)) {
-            handler({ promise: promise, reason: promise._v })
-          }
-        })
-      }
-      var $reject = function(value) {
-        var promise = this
-        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()
-        notify(promise, true)
-      }
-      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("Promise can't be resolved itself")
-          if ((then = isThenable(value))) {
-            microtask(function() {
-              var wrapper = { _w: promise, _d: false } // wrap
-              try {
-                then.call(
-                  value,
-                  ctx($resolve, wrapper, 1),
-                  ctx($reject, wrapper, 1)
-                )
-              } catch (e) {
-                $reject.call(wrapper, e)
-              }
-            })
-          } else {
-            promise._v = value
-            promise._s = 1
-            notify(promise, false)
-          }
-        } catch (e) {
-          $reject.call({ _w: promise, _d: false }, e) // wrap
-        }
-      }
-
-      // constructor polyfill
-      if (!USE_NATIVE) {
-        // 25.4.3.1 Promise(executor)
-        $Promise = function Promise(executor) {
-          anInstance(this, $Promise, PROMISE, '_h')
-          aFunction(executor)
-          Internal.call(this)
-          try {
-            executor(ctx($resolve, this, 1), ctx($reject, this, 1))
-          } catch (err) {
-            $reject.call(this, err)
-          }
-        }
-        // 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
-          this._d = false // <- done
-          this._v = undefined // <- value
-          this._h = 0 // <- rejection state, 0 - default, 1 - handled, 2 - unhandled
-          this._n = false // <- notify
-        }
-        Internal.prototype = __webpack_require__('XJU/')($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
-            reaction.domain = isNode ? process.domain : undefined
-            this._c.push(reaction)
-            if (this._a) this._a.push(reaction)
-            if (this._s) notify(this, false)
-            return reaction.promise
-          },
-          // 25.4.5.1 Promise.prototype.catch(onRejected)
-          catch: function(onRejected) {
-            return this.then(undefined, onRejected)
-          },
-        })
-        OwnPromiseCapability = function() {
-          var promise = new Internal()
-          this.promise = promise
-          this.resolve = ctx($resolve, promise, 1)
-          this.reject = ctx($reject, promise, 1)
-        }
-        newPromiseCapabilityModule.f = newPromiseCapability = function(C) {
-          return C === $Promise || C === Wrapper
-            ? new OwnPromiseCapability(C)
-            : newGenericPromiseCapability(C)
-        }
-      }
-
-      $export($export.G + $export.W + $export.F * !USE_NATIVE, {
-        Promise: $Promise,
-      })
-      __webpack_require__('RfKB')($Promise, PROMISE)
-      __webpack_require__('TJWN')(PROMISE)
-      Wrapper = __webpack_require__('WEpk')[PROMISE]
-
-      // statics
-      $export($export.S + $export.F * !USE_NATIVE, PROMISE, {
-        // 25.4.4.5 Promise.reject(r)
-        reject: function reject(r) {
-          var capability = newPromiseCapability(this)
-          var $$reject = capability.reject
-          $$reject(r)
-          return capability.promise
-        },
-      })
-      $export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {
-        // 25.4.4.6 Promise.resolve(x)
-        resolve: function resolve(x) {
-          return promiseResolve(
-            LIBRARY && this === Wrapper ? $Promise : this,
-            x
-          )
-        },
-      })
-      $export(
-        $export.S +
-          $export.F *
-            !(
-              USE_NATIVE &&
-              __webpack_require__('TuGD')(function(iter) {
-                $Promise.all(iter)['catch'](empty)
-              })
-            ),
-        PROMISE,
-        {
-          // 25.4.4.1 Promise.all(iterable)
-          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
-                  values[$index] = value
-                  --remaining || resolve(values)
-                }, reject)
-              })
-              --remaining || resolve(values)
-            })
-            if (result.e) reject(result.v)
-            return capability.promise
-          },
-          // 25.4.4.4 Promise.race(iterable)
-          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 (result.e) reject(result.v)
-            return capability.promise
-          },
-        }
-      )
-
-      /***/
-    },
-
     /***/ 'Jo+v': /***/ function(module, exports, __webpack_require__) {
       module.exports = __webpack_require__('/eQG')
 
@@ -2070,169 +1737,6 @@
       /***/
     },
 
-    /***/ PBE1: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-      // https://github.com/tc39/proposal-promise-finally
-
-      var $export = __webpack_require__('Y7ZC')
-      var core = __webpack_require__('WEpk')
-      var global = __webpack_require__('5T2Y')
-      var speciesConstructor = __webpack_require__('8gHz')
-      var promiseResolve = __webpack_require__('zXhZ')
-
-      $export($export.P + $export.R, 'Promise', {
-        finally: function(onFinally) {
-          var C = speciesConstructor(this, core.Promise || global.Promise)
-          var isFunction = typeof onFinally == 'function'
-          return this.then(
-            isFunction
-              ? function(x) {
-                  return promiseResolve(C, onFinally()).then(function() {
-                    return x
-                  })
-                }
-              : onFinally,
-            isFunction
-              ? function(e) {
-                  return promiseResolve(C, onFinally()).then(function() {
-                    throw e
-                  })
-                }
-              : onFinally
-          )
-        },
-      })
-
-      /***/
-    },
-
-    /***/ 'Q/yX': /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      // https://github.com/tc39/proposal-promise-try
-      var $export = __webpack_require__('Y7ZC')
-      var newPromiseCapability = __webpack_require__('ZW5q')
-      var perform = __webpack_require__('RDmV')
-
-      $export($export.S, 'Promise', {
-        try: function(callbackfn) {
-          var promiseCapability = newPromiseCapability.f(this)
-          var result = perform(callbackfn)
-          ;(result.e ? promiseCapability.reject : promiseCapability.resolve)(
-            result.v
-          )
-          return promiseCapability.promise
-        },
-      })
-
-      /***/
-    },
-
-    /***/ QXhf: /***/ function(module, exports, __webpack_require__) {
-      var ctx = __webpack_require__('2GTP')
-      var invoke = __webpack_require__('MCSJ')
-      var html = __webpack_require__('MvwC')
-      var cel = __webpack_require__('Hsns')
-      var global = __webpack_require__('5T2Y')
-      var process = global.process
-      var setTask = global.setImmediate
-      var clearTask = global.clearImmediate
-      var MessageChannel = global.MessageChannel
-      var Dispatch = global.Dispatch
-      var counter = 0
-      var queue = {}
-      var ONREADYSTATECHANGE = 'onreadystatechange'
-      var defer, channel, port
-      var run = function() {
-        var id = +this
-        // eslint-disable-next-line no-prototype-builtins
-        if (queue.hasOwnProperty(id)) {
-          var fn = queue[id]
-          delete queue[id]
-          fn()
-        }
-      }
-      var listener = function(event) {
-        run.call(event.data)
-      }
-      // Node.js 0.9+ & IE10+ has setImmediate, otherwise:
-      if (!setTask || !clearTask) {
-        setTask = function setImmediate(fn) {
-          var args = []
-          var i = 1
-          while (arguments.length > i) args.push(arguments[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) {
-          delete queue[id]
-        }
-        // Node.js 0.8-
-        if (__webpack_require__('a0xu')(process) == 'process') {
-          defer = function(id) {
-            process.nextTick(ctx(run, id, 1))
-          }
-          // Sphere (JS game engine) Dispatch API
-        } else if (Dispatch && Dispatch.now) {
-          defer = function(id) {
-            Dispatch.now(ctx(run, id, 1))
-          }
-          // Browsers with MessageChannel, includes WebWorkers
-        } else if (MessageChannel) {
-          channel = new MessageChannel()
-          port = channel.port2
-          channel.port1.onmessage = listener
-          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', listener, 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,
-      }
-
-      /***/
-    },
-
-    /***/ RDmV: /***/ function(module, exports) {
-      module.exports = function(exec) {
-        try {
-          return { e: false, v: exec() }
-        } catch (e) {
-          return { e: true, v: e }
-        }
-      }
-
-      /***/
-    },
-
     /***/ Rp86: /***/ function(module, exports, __webpack_require__) {
       __webpack_require__('bBy9')
       __webpack_require__('FlQf')
@@ -2317,43 +1821,6 @@
       /***/
     },
 
-    /***/ ZW5q: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      // 25.4.1.5 NewPromiseCapability(C)
-      var aFunction = __webpack_require__('eaoh')
-
-      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(resolve)
-        this.reject = aFunction(reject)
-      }
-
-      module.exports.f = function(C) {
-        return new PromiseCapability(C)
-      }
-
-      /***/
-    },
-
-    /***/ aW7e: /***/ function(module, exports, __webpack_require__) {
-      __webpack_require__('wgeU')
-      __webpack_require__('FlQf')
-      __webpack_require__('bBy9')
-      __webpack_require__('JMW+')
-      __webpack_require__('PBE1')
-      __webpack_require__('Q/yX')
-      module.exports = __webpack_require__('WEpk').Promise
-
-      /***/
-    },
-
     /***/ b3CU: /***/ function(module, exports, __webpack_require__) {
       var _Reflect$construct = __webpack_require__('pbKT')
 
@@ -2531,12 +1998,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ eVuF: /***/ function(module, exports, __webpack_require__) {
-      module.exports = __webpack_require__('aW7e')
-
-      /***/
-    },
-
     /***/ elyg: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
@@ -2548,7 +2009,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
       var _Object$assign = __webpack_require__('Qetd')
 
-      var _Promise = __webpack_require__('eVuF')
+      var _Promise = __webpack_require__('21Wz')
 
       var _classCallCheck = __webpack_require__('/HRN')
 
@@ -4945,85 +4406,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ q6LJ: /***/ function(module, exports, __webpack_require__) {
-      var global = __webpack_require__('5T2Y')
-      var macrotask = __webpack_require__('QXhf').set
-      var Observer = global.MutationObserver || global.WebKitMutationObserver
-      var process = global.process
-      var Promise = global.Promise
-      var isNode = __webpack_require__('a0xu')(process) == 'process'
-
-      module.exports = function() {
-        var head, last, notify
-
-        var flush = function() {
-          var parent, fn
-          if (isNode && (parent = process.domain)) parent.exit()
-          while (head) {
-            fn = head.fn
-            head = head.next
-            try {
-              fn()
-            } catch (e) {
-              if (head) notify()
-              else last = undefined
-              throw e
-            }
-          }
-          last = undefined
-          if (parent) parent.enter()
-        }
-
-        // Node.js
-        if (isNode) {
-          notify = function() {
-            process.nextTick(flush)
-          }
-          // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339
-        } else if (
-          Observer &&
-          !(global.navigator && global.navigator.standalone)
-        ) {
-          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 && Promise.resolve) {
-          // Promise.resolve without an argument throws an error in LG WebOS 2
-          var promise = Promise.resolve(undefined)
-          notify = function() {
-            promise.then(flush)
-          }
-          // for other environments - macrotask based on:
-          // - setImmediate
-          // - MessageChannel
-          // - window.postMessag
-          // - onreadystatechange
-          // - setTimeout
-        } else {
-          notify = function() {
-            // strange IE + webpack dev server bug - use .call(global)
-            macrotask.call(global, flush)
-          }
-        }
-
-        return function(fn) {
-          var task = { fn: fn, next: undefined }
-          if (last) last.next = task
-          if (!head) {
-            head = task
-            notify()
-          }
-          last = task
-        }
-      }
-
-      /***/
-    },
-
     /***/ qOIg: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
@@ -5083,15 +4465,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ vBP9: /***/ function(module, exports, __webpack_require__) {
-      var global = __webpack_require__('5T2Y')
-      var navigator = global.navigator
-
-      module.exports = (navigator && navigator.userAgent) || ''
-
-      /***/
-    },
-
     /***/ wYmx: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
@@ -5152,22 +4525,5 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
       /***/
     },
-
-    /***/ zXhZ: /***/ function(module, exports, __webpack_require__) {
-      var anObject = __webpack_require__('5K7Z')
-      var isObject = __webpack_require__('93I4')
-      var newPromiseCapability = __webpack_require__('ZW5q')
-
-      module.exports = function(C, x) {
-        anObject(C)
-        if (isObject(x) && x.constructor === C) return x
-        var promiseCapability = newPromiseCapability.f(C)
-        var resolve = promiseCapability.resolve
-        resolve(x)
-        return promiseCapability.promise
-      }
-
-      /***/
-    },
   },
 ])
Diff for de003c3a9d30..d3.module.js
@@ -89,6 +89,14 @@
       /***/
     },
 
+    /***/ '21Wz': /***/ function(module, exports, __webpack_require__) {
+      'use strict'
+      module.exports = Promise
+      module.exports.default = Promise
+
+      /***/
+    },
+
     /***/ '2Nb0': /***/ function(module, exports, __webpack_require__) {
       __webpack_require__('FlQf')
       __webpack_require__('bBy9')
@@ -274,22 +282,6 @@
       /***/
     },
 
-    /***/ '8gHz': /***/ function(module, exports, __webpack_require__) {
-      // 7.3.20 SpeciesConstructor(O, defaultConstructor)
-      var anObject = __webpack_require__('5K7Z')
-      var aFunction = __webpack_require__('eaoh')
-      var SPECIES = __webpack_require__('UWiX')('species')
-      module.exports = function(O, D) {
-        var C = anObject(O).constructor
-        var S
-        return C === undefined || (S = anObject(C)[SPECIES]) == undefined
-          ? D
-          : aFunction(S)
-      }
-
-      /***/
-    },
-
     /***/ A5Xg: /***/ function(module, exports, __webpack_require__) {
       // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
       var toIObject = __webpack_require__('NsO/')
@@ -1958,363 +1950,12 @@
       /***/
     },
 
-    /***/ 'JMW+': /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      var LIBRARY = __webpack_require__('uOPS')
-      var global = __webpack_require__('5T2Y')
-      var ctx = __webpack_require__('2GTP')
-      var classof = __webpack_require__('QMMT')
-      var $export = __webpack_require__('Y7ZC')
-      var isObject = __webpack_require__('93I4')
-      var aFunction = __webpack_require__('eaoh')
-      var anInstance = __webpack_require__('EXMj')
-      var forOf = __webpack_require__('oioR')
-      var speciesConstructor = __webpack_require__('8gHz')
-      var task = __webpack_require__('QXhf').set
-      var microtask = __webpack_require__('q6LJ')()
-      var newPromiseCapabilityModule = __webpack_require__('ZW5q')
-      var perform = __webpack_require__('RDmV')
-      var userAgent = __webpack_require__('vBP9')
-      var promiseResolve = __webpack_require__('zXhZ')
-      var PROMISE = 'Promise'
-      var TypeError = global.TypeError
-      var process = global.process
-      var versions = process && process.versions
-      var v8 = (versions && versions.v8) || ''
-      var $Promise = global[PROMISE]
-      var isNode = classof(process) == 'process'
-      var empty = function() {
-        /* empty */
-      }
-      var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper
-      var newPromiseCapability = (newGenericPromiseCapability =
-        newPromiseCapabilityModule.f)
-
-      var USE_NATIVE = !!(function() {
-        try {
-          // correct subclassing with @@species support
-          var promise = $Promise.resolve(1)
-          var FakePromise = ((promise.constructor = {})[
-            __webpack_require__('UWiX')('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 &&
-            // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
-            // https://bugs.chromium.org/p/chromium/issues/detail?id=830565
-            // we can't detect it synchronously, so just check versions
-            v8.indexOf('6.6') !== 0 &&
-            userAgent.indexOf('Chrome/66') === -1
-          )
-        } catch (e) {
-          /* empty */
-        }
-      })()
-
-      // helpers
-      var isThenable = function(it) {
-        var then
-        return isObject(it) && typeof (then = it.then) == 'function'
-          ? then
-          : false
-      }
-      var notify = function(promise, isReject) {
-        if (promise._n) return
-        promise._n = true
-        var chain = promise._c
-        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, exited
-            try {
-              if (handler) {
-                if (!ok) {
-                  if (promise._h == 2) onHandleUnhandled(promise)
-                  promise._h = 1
-                }
-                if (handler === true) result = value
-                else {
-                  if (domain) domain.enter()
-                  result = handler(value) // may throw
-                  if (domain) {
-                    domain.exit()
-                    exited = true
-                  }
-                }
-                if (result === reaction.promise) {
-                  reject(TypeError('Promise-chain cycle'))
-                } else if ((then = isThenable(result))) {
-                  then.call(result, resolve, reject)
-                } else resolve(result)
-              } else reject(value)
-            } catch (e) {
-              if (domain && !exited) domain.exit()
-              reject(e)
-            }
-          }
-          while (chain.length > i) run(chain[i++]) // variable length - can't use forEach
-          promise._c = []
-          promise._n = false
-          if (isReject && !promise._h) onUnhandled(promise)
-        })
-      }
-      var onUnhandled = function(promise) {
-        task.call(global, function() {
-          var value = promise._v
-          var unhandled = isUnhandled(promise)
-          var result, handler, console
-          if (unhandled) {
-            result = perform(function() {
-              if (isNode) {
-                process.emit('unhandledRejection', value, promise)
-              } else if ((handler = global.onunhandledrejection)) {
-                handler({ promise: promise, reason: value })
-              } else if ((console = global.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 (unhandled && result.e) throw result.v
-        })
-      }
-      var isUnhandled = function(promise) {
-        return promise._h !== 1 && (promise._a || promise._c).length === 0
-      }
-      var onHandleUnhandled = function(promise) {
-        task.call(global, function() {
-          var handler
-          if (isNode) {
-            process.emit('rejectionHandled', promise)
-          } else if ((handler = global.onrejectionhandled)) {
-            handler({ promise: promise, reason: promise._v })
-          }
-        })
-      }
-      var $reject = function(value) {
-        var promise = this
-        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()
-        notify(promise, true)
-      }
-      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("Promise can't be resolved itself")
-          if ((then = isThenable(value))) {
-            microtask(function() {
-              var wrapper = { _w: promise, _d: false } // wrap
-              try {
-                then.call(
-                  value,
-                  ctx($resolve, wrapper, 1),
-                  ctx($reject, wrapper, 1)
-                )
-              } catch (e) {
-                $reject.call(wrapper, e)
-              }
-            })
-          } else {
-            promise._v = value
-            promise._s = 1
-            notify(promise, false)
-          }
-        } catch (e) {
-          $reject.call({ _w: promise, _d: false }, e) // wrap
-        }
-      }
-
-      // constructor polyfill
-      if (!USE_NATIVE) {
-        // 25.4.3.1 Promise(executor)
-        $Promise = function Promise(executor) {
-          anInstance(this, $Promise, PROMISE, '_h')
-          aFunction(executor)
-          Internal.call(this)
-          try {
-            executor(ctx($resolve, this, 1), ctx($reject, this, 1))
-          } catch (err) {
-            $reject.call(this, err)
-          }
-        }
-        // 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
-          this._d = false // <- done
-          this._v = undefined // <- value
-          this._h = 0 // <- rejection state, 0 - default, 1 - handled, 2 - unhandled
-          this._n = false // <- notify
-        }
-        Internal.prototype = __webpack_require__('XJU/')($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
-            reaction.domain = isNode ? process.domain : undefined
-            this._c.push(reaction)
-            if (this._a) this._a.push(reaction)
-            if (this._s) notify(this, false)
-            return reaction.promise
-          },
-          // 25.4.5.1 Promise.prototype.catch(onRejected)
-          catch: function(onRejected) {
-            return this.then(undefined, onRejected)
-          },
-        })
-        OwnPromiseCapability = function() {
-          var promise = new Internal()
-          this.promise = promise
-          this.resolve = ctx($resolve, promise, 1)
-          this.reject = ctx($reject, promise, 1)
-        }
-        newPromiseCapabilityModule.f = newPromiseCapability = function(C) {
-          return C === $Promise || C === Wrapper
-            ? new OwnPromiseCapability(C)
-            : newGenericPromiseCapability(C)
-        }
-      }
-
-      $export($export.G + $export.W + $export.F * !USE_NATIVE, {
-        Promise: $Promise,
-      })
-      __webpack_require__('RfKB')($Promise, PROMISE)
-      __webpack_require__('TJWN')(PROMISE)
-      Wrapper = __webpack_require__('WEpk')[PROMISE]
-
-      // statics
-      $export($export.S + $export.F * !USE_NATIVE, PROMISE, {
-        // 25.4.4.5 Promise.reject(r)
-        reject: function reject(r) {
-          var capability = newPromiseCapability(this)
-          var $$reject = capability.reject
-          $$reject(r)
-          return capability.promise
-        },
-      })
-      $export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {
-        // 25.4.4.6 Promise.resolve(x)
-        resolve: function resolve(x) {
-          return promiseResolve(
-            LIBRARY && this === Wrapper ? $Promise : this,
-            x
-          )
-        },
-      })
-      $export(
-        $export.S +
-          $export.F *
-            !(
-              USE_NATIVE &&
-              __webpack_require__('TuGD')(function(iter) {
-                $Promise.all(iter)['catch'](empty)
-              })
-            ),
-        PROMISE,
-        {
-          // 25.4.4.1 Promise.all(iterable)
-          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
-                  values[$index] = value
-                  --remaining || resolve(values)
-                }, reject)
-              })
-              --remaining || resolve(values)
-            })
-            if (result.e) reject(result.v)
-            return capability.promise
-          },
-          // 25.4.4.4 Promise.race(iterable)
-          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 (result.e) reject(result.v)
-            return capability.promise
-          },
-        }
-      )
-
-      /***/
-    },
-
     /***/ 'Jo+v': /***/ function(module, exports, __webpack_require__) {
       module.exports = __webpack_require__('/eQG')
 
       /***/
     },
 
-    /***/ MCSJ: /***/ function(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)
-      }
-
-      /***/
-    },
-
     /***/ Mqbl: /***/ function(module, exports, __webpack_require__) {
       // 19.1.2.14 Object.keys(O)
       var toObject = __webpack_require__('JB68')
@@ -2431,157 +2072,6 @@
       /***/
     },
 
-    /***/ PBE1: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-      // https://github.com/tc39/proposal-promise-finally
-
-      var $export = __webpack_require__('Y7ZC')
-      var core = __webpack_require__('WEpk')
-      var global = __webpack_require__('5T2Y')
-      var speciesConstructor = __webpack_require__('8gHz')
-      var promiseResolve = __webpack_require__('zXhZ')
-
-      $export($export.P + $export.R, 'Promise', {
-        finally: function(onFinally) {
-          var C = speciesConstructor(this, core.Promise || global.Promise)
-          var isFunction = typeof onFinally == 'function'
-          return this.then(
-            isFunction
-              ? function(x) {
-                  return promiseResolve(C, onFinally()).then(function() {
-                    return x
-                  })
-                }
-              : onFinally,
-            isFunction
-              ? function(e) {
-                  return promiseResolve(C, onFinally()).then(function() {
-                    throw e
-                  })
-                }
-              : onFinally
-          )
-        },
-      })
-
-      /***/
-    },
-
-    /***/ 'Q/yX': /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      // https://github.com/tc39/proposal-promise-try
-      var $export = __webpack_require__('Y7ZC')
-      var newPromiseCapability = __webpack_require__('ZW5q')
-      var perform = __webpack_require__('RDmV')
-
-      $export($export.S, 'Promise', {
-        try: function(callbackfn) {
-          var promiseCapability = newPromiseCapability.f(this)
-          var result = perform(callbackfn)
-          ;(result.e ? promiseCapability.reject : promiseCapability.resolve)(
-            result.v
-          )
-          return promiseCapability.promise
-        },
-      })
-
-      /***/
-    },
-
-    /***/ QXhf: /***/ function(module, exports, __webpack_require__) {
-      var ctx = __webpack_require__('2GTP')
-      var invoke = __webpack_require__('MCSJ')
-      var html = __webpack_require__('MvwC')
-      var cel = __webpack_require__('Hsns')
-      var global = __webpack_require__('5T2Y')
-      var process = global.process
-      var setTask = global.setImmediate
-      var clearTask = global.clearImmediate
-      var MessageChannel = global.MessageChannel
-      var Dispatch = global.Dispatch
-      var counter = 0
-      var queue = {}
-      var ONREADYSTATECHANGE = 'onreadystatechange'
-      var defer, channel, port
-      var run = function() {
-        var id = +this
-        // eslint-disable-next-line no-prototype-builtins
-        if (queue.hasOwnProperty(id)) {
-          var fn = queue[id]
-          delete queue[id]
-          fn()
-        }
-      }
-      var listener = function(event) {
-        run.call(event.data)
-      }
-      // Node.js 0.9+ & IE10+ has setImmediate, otherwise:
-      if (!setTask || !clearTask) {
-        setTask = function setImmediate(fn) {
-          var args = []
-          var i = 1
-          while (arguments.length > i) args.push(arguments[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) {
-          delete queue[id]
-        }
-        // Node.js 0.8-
-        if (__webpack_require__('a0xu')(process) == 'process') {
-          defer = function(id) {
-            process.nextTick(ctx(run, id, 1))
-          }
-          // Sphere (JS game engine) Dispatch API
-        } else if (Dispatch && Dispatch.now) {
-          defer = function(id) {
-            Dispatch.now(ctx(run, id, 1))
-          }
-          // Browsers with MessageChannel, includes WebWorkers
-        } else if (MessageChannel) {
-          channel = new MessageChannel()
-          port = channel.port2
-          channel.port1.onmessage = listener
-          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', listener, 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,
-      }
-
-      /***/
-    },
-
     /***/ 'R+7+': /***/ function(module, exports, __webpack_require__) {
       // all enumerable object keys, includes symbols
       var getKeys = __webpack_require__('w6GO')
@@ -2604,63 +2094,12 @@
       /***/
     },
 
-    /***/ RDmV: /***/ function(module, exports) {
-      module.exports = function(exec) {
-        try {
-          return { e: false, v: exec() }
-        } catch (e) {
-          return { e: true, v: e }
-        }
-      }
-
-      /***/
-    },
-
     /***/ SqZg: /***/ function(module, exports, __webpack_require__) {
       module.exports = __webpack_require__('3GJH')
 
       /***/
     },
 
-    /***/ TuGD: /***/ function(module, exports, __webpack_require__) {
-      var ITERATOR = __webpack_require__('UWiX')('iterator')
-      var SAFE_CLOSING = false
-
-      try {
-        var riter = [7][ITERATOR]()
-        riter['return'] = function() {
-          SAFE_CLOSING = true
-        }
-        // eslint-disable-next-line no-throw-literal
-        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]
-          var iter = arr[ITERATOR]()
-          iter.next = function() {
-            return { done: (safe = true) }
-          }
-          arr[ITERATOR] = function() {
-            return iter
-          }
-          exec(arr)
-        } catch (e) {
-          /* empty */
-        }
-        return safe
-      }
-
-      /***/
-    },
-
     /***/ XVgq: /***/ function(module, exports, __webpack_require__) {
       module.exports = __webpack_require__('2Nb0')
 
@@ -2743,31 +2182,6 @@
       /***/
     },
 
-    /***/ ZW5q: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      // 25.4.1.5 NewPromiseCapability(C)
-      var aFunction = __webpack_require__('eaoh')
-
-      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(resolve)
-        this.reject = aFunction(reject)
-      }
-
-      module.exports.f = function(C) {
-        return new PromiseCapability(C)
-      }
-
-      /***/
-    },
-
     /***/ Zxgi: /***/ function(module, exports, __webpack_require__) {
       var global = __webpack_require__('5T2Y')
       var core = __webpack_require__('WEpk')
@@ -2784,18 +2198,6 @@
       /***/
     },
 
-    /***/ aW7e: /***/ function(module, exports, __webpack_require__) {
-      __webpack_require__('wgeU')
-      __webpack_require__('FlQf')
-      __webpack_require__('bBy9')
-      __webpack_require__('JMW+')
-      __webpack_require__('PBE1')
-      __webpack_require__('Q/yX')
-      module.exports = __webpack_require__('WEpk').Promise
-
-      /***/
-    },
-
     /***/ adOz: /***/ function(module, exports, __webpack_require__) {
       __webpack_require__('Zxgi')('asyncIterator')
 
@@ -2884,12 +2286,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ eVuF: /***/ function(module, exports, __webpack_require__) {
-      module.exports = __webpack_require__('aW7e')
-
-      /***/
-    },
-
     /***/ elyg: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
@@ -2897,7 +2293,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
       var _Object$assign = __webpack_require__('Qetd')
 
-      var _Promise = __webpack_require__('eVuF')
+      var _Promise = __webpack_require__('21Wz')
 
       var _Object$defineProperty = __webpack_require__('hfKm')
 
@@ -4303,85 +3699,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ q6LJ: /***/ function(module, exports, __webpack_require__) {
-      var global = __webpack_require__('5T2Y')
-      var macrotask = __webpack_require__('QXhf').set
-      var Observer = global.MutationObserver || global.WebKitMutationObserver
-      var process = global.process
-      var Promise = global.Promise
-      var isNode = __webpack_require__('a0xu')(process) == 'process'
-
-      module.exports = function() {
-        var head, last, notify
-
-        var flush = function() {
-          var parent, fn
-          if (isNode && (parent = process.domain)) parent.exit()
-          while (head) {
-            fn = head.fn
-            head = head.next
-            try {
-              fn()
-            } catch (e) {
-              if (head) notify()
-              else last = undefined
-              throw e
-            }
-          }
-          last = undefined
-          if (parent) parent.enter()
-        }
-
-        // Node.js
-        if (isNode) {
-          notify = function() {
-            process.nextTick(flush)
-          }
-          // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339
-        } else if (
-          Observer &&
-          !(global.navigator && global.navigator.standalone)
-        ) {
-          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 && Promise.resolve) {
-          // Promise.resolve without an argument throws an error in LG WebOS 2
-          var promise = Promise.resolve(undefined)
-          notify = function() {
-            promise.then(flush)
-          }
-          // for other environments - macrotask based on:
-          // - setImmediate
-          // - MessageChannel
-          // - window.postMessag
-          // - onreadystatechange
-          // - setTimeout
-        } else {
-          notify = function() {
-            // strange IE + webpack dev server bug - use .call(global)
-            macrotask.call(global, flush)
-          }
-        }
-
-        return function(fn) {
-          var task = { fn: fn, next: undefined }
-          if (last) last.next = task
-          if (!head) {
-            head = task
-            notify()
-          }
-          last = task
-        }
-      }
-
-      /***/
-    },
-
     /***/ qOIg: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
@@ -4434,15 +3751,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ vBP9: /***/ function(module, exports, __webpack_require__) {
-      var global = __webpack_require__('5T2Y')
-      var navigator = global.navigator
-
-      module.exports = (navigator && navigator.userAgent) || ''
-
-      /***/
-    },
-
     /***/ vwuL: /***/ function(module, exports, __webpack_require__) {
       var pIE = __webpack_require__('NV0k')
       var createDesc = __webpack_require__('rr1i')
@@ -4500,23 +3808,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ zXhZ: /***/ function(module, exports, __webpack_require__) {
-      var anObject = __webpack_require__('5K7Z')
-      var isObject = __webpack_require__('93I4')
-      var newPromiseCapability = __webpack_require__('ZW5q')
-
-      module.exports = function(C, x) {
-        anObject(C)
-        if (isObject(x) && x.constructor === C) return x
-        var promiseCapability = newPromiseCapability.f(C)
-        var resolve = promiseCapability.resolve
-        resolve(x)
-        return promiseCapability.promise
-      }
-
-      /***/
-    },
-
     /***/ zn7N: /***/ function(module, exports, __webpack_require__) {
       // most Object methods by ES6 should accept primitives
       var $export = __webpack_require__('Y7ZC')
Diff for main-HASH.js
@@ -65,7 +65,7 @@
     /***/ DqTX: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
-      var _Promise = __webpack_require__('eVuF')
+      var _Promise = __webpack_require__('21Wz')
 
       var _classCallCheck = __webpack_require__('/HRN')
 
@@ -255,7 +255,7 @@
 
       var _regeneratorRuntime = __webpack_require__('ln6h')
 
-      var _Promise = __webpack_require__('eVuF')
+      var _Promise = __webpack_require__('21Wz')
 
       var _classCallCheck = __webpack_require__('/HRN')
 
@@ -311,8 +311,8 @@
       var _isDynamic = __webpack_require__('/jkW')
       /* global location */
 
-      if (!window.Promise) {
-        window.Promise = __webpack_require__('eVuF')
+      if (!window.Promise.prototype['finally']) {
+        window.Promise.prototype['finally'] = __webpack_require__('zrsZ')
       }
 
       var data = JSON.parse(
@@ -1176,7 +1176,7 @@
 
       var _createClass = __webpack_require__('WaGi')
 
-      var _Promise = __webpack_require__('eVuF')
+      var _Promise = __webpack_require__('21Wz')
 
       var _interopRequireDefault = __webpack_require__('KI45')
 
@@ -1517,6 +1517,27 @@
 
       /***/
     },
+
+    /***/ zrsZ: /***/ function(module, exports) {
+      Promise.prototype.finally = function(n) {
+        if ('function' != typeof n) return this.then(n, n)
+        var t = this.constructor || Promise
+        return this.then(
+          function(r) {
+            return t.resolve(n()).then(function() {
+              return r
+            })
+          },
+          function(r) {
+            return t.resolve(n()).then(function() {
+              throw r
+            })
+          }
+        )
+      }
+
+      /***/
+    },
   },
   [['BMP1', 0, 2, 1, 3, 4]],
 ])
Diff for main-HASH.module.js
@@ -19,7 +19,7 @@
     /***/ DqTX: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
-      var _Promise = __webpack_require__('eVuF')
+      var _Promise = __webpack_require__('21Wz')
 
       exports.__esModule = true
       exports.default = void 0
@@ -170,7 +170,7 @@
     /***/ IKlv: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
-      var _Promise = __webpack_require__('eVuF')
+      var _Promise = __webpack_require__('21Wz')
 
       var _interopRequireWildcard3 = __webpack_require__('5Uuq')
 
@@ -212,8 +212,8 @@
       var _isDynamic = __webpack_require__('/jkW')
       /* global location */
 
-      if (!window.Promise) {
-        window.Promise = __webpack_require__('eVuF')
+      if (!window.Promise.prototype.finally) {
+        window.Promise.prototype.finally = __webpack_require__('zrsZ')
       }
 
       var data = JSON.parse(
@@ -758,7 +758,7 @@
     /***/ zmvN: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
-      var _Promise = __webpack_require__('eVuF')
+      var _Promise = __webpack_require__('21Wz')
 
       var _interopRequireDefault = __webpack_require__('KI45')
 
@@ -1047,6 +1047,27 @@
 
       /***/
     },
+
+    /***/ zrsZ: /***/ function(module, exports) {
+      Promise.prototype.finally = function(n) {
+        if ('function' != typeof n) return this.then(n, n)
+        var t = this.constructor || Promise
+        return this.then(
+          function(r) {
+            return t.resolve(n()).then(function() {
+              return r
+            })
+          },
+          function(r) {
+            return t.resolve(n()).then(function() {
+              throw r
+            })
+          }
+        )
+      }
+
+      /***/
+    },
   },
   [['BMP1', 0, 1, 2, 3]],
 ])
Diff for polyfills-HASH.js
@@ -1,6 +1,516 @@
 ;(window['webpackJsonp'] = window['webpackJsonp'] || []).push([
   [13],
   {
+    /***/ '/pFH': /***/ function(
+      module,
+      __webpack_exports__,
+      __webpack_require__
+    ) {
+      'use strict'
+      /**
+       * @this {Promise}
+       */
+      function finallyConstructor(callback) {
+        var constructor = this.constructor
+        return this.then(
+          function(value) {
+            // @ts-ignore
+            return constructor.resolve(callback()).then(function() {
+              return value
+            })
+          },
+          function(reason) {
+            // @ts-ignore
+            return constructor.resolve(callback()).then(function() {
+              // @ts-ignore
+              return constructor.reject(reason)
+            })
+          }
+        )
+      }
+
+      /* harmony default export */ __webpack_exports__['a'] = finallyConstructor
+
+      /***/
+    },
+
+    /***/ '8oxB': /***/ function(module, exports) {
+      // shim for using process in browser
+      var process = (module.exports = {})
+
+      // cached from whatever global is present so that test runners that stub it
+      // don't break things.  But we need to wrap it in a try catch in case it is
+      // wrapped in strict mode code which doesn't define any globals.  It's inside a
+      // function because try/catches deoptimize in certain engines.
+
+      var cachedSetTimeout
+      var cachedClearTimeout
+
+      function defaultSetTimout() {
+        throw new Error('setTimeout has not been defined')
+      }
+      function defaultClearTimeout() {
+        throw new Error('clearTimeout has not been defined')
+      }
+      ;(function() {
+        try {
+          if (typeof setTimeout === 'function') {
+            cachedSetTimeout = setTimeout
+          } else {
+            cachedSetTimeout = defaultSetTimout
+          }
+        } catch (e) {
+          cachedSetTimeout = defaultSetTimout
+        }
+        try {
+          if (typeof clearTimeout === 'function') {
+            cachedClearTimeout = clearTimeout
+          } else {
+            cachedClearTimeout = defaultClearTimeout
+          }
+        } catch (e) {
+          cachedClearTimeout = defaultClearTimeout
+        }
+      })()
+      function runTimeout(fun) {
+        if (cachedSetTimeout === setTimeout) {
+          //normal enviroments in sane situations
+          return setTimeout(fun, 0)
+        }
+        // if setTimeout wasn't available but was latter defined
+        if (
+          (cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) &&
+          setTimeout
+        ) {
+          cachedSetTimeout = setTimeout
+          return setTimeout(fun, 0)
+        }
+        try {
+          // when when somebody has screwed with setTimeout but no I.E. maddness
+          return cachedSetTimeout(fun, 0)
+        } catch (e) {
+          try {
+            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
+            return cachedSetTimeout.call(null, fun, 0)
+          } catch (e) {
+            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
+            return cachedSetTimeout.call(this, fun, 0)
+          }
+        }
+      }
+      function runClearTimeout(marker) {
+        if (cachedClearTimeout === clearTimeout) {
+          //normal enviroments in sane situations
+          return clearTimeout(marker)
+        }
+        // if clearTimeout wasn't available but was latter defined
+        if (
+          (cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) &&
+          clearTimeout
+        ) {
+          cachedClearTimeout = clearTimeout
+          return clearTimeout(marker)
+        }
+        try {
+          // when when somebody has screwed with setTimeout but no I.E. maddness
+          return cachedClearTimeout(marker)
+        } catch (e) {
+          try {
+            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
+            return cachedClearTimeout.call(null, marker)
+          } catch (e) {
+            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
+            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
+            return cachedClearTimeout.call(this, marker)
+          }
+        }
+      }
+      var queue = []
+      var draining = false
+      var currentQueue
+      var queueIndex = -1
+
+      function cleanUpNextTick() {
+        if (!draining || !currentQueue) {
+          return
+        }
+        draining = false
+        if (currentQueue.length) {
+          queue = currentQueue.concat(queue)
+        } else {
+          queueIndex = -1
+        }
+        if (queue.length) {
+          drainQueue()
+        }
+      }
+
+      function drainQueue() {
+        if (draining) {
+          return
+        }
+        var timeout = runTimeout(cleanUpNextTick)
+        draining = true
+
+        var len = queue.length
+        while (len) {
+          currentQueue = queue
+          queue = []
+          while (++queueIndex < len) {
+            if (currentQueue) {
+              currentQueue[queueIndex].run()
+            }
+          }
+          queueIndex = -1
+          len = queue.length
+        }
+        currentQueue = null
+        draining = false
+        runClearTimeout(timeout)
+      }
+
+      process.nextTick = function(fun) {
+        var args = new Array(arguments.length - 1)
+        if (arguments.length > 1) {
+          for (var i = 1; i < arguments.length; i++) {
+            args[i - 1] = arguments[i]
+          }
+        }
+        queue.push(new Item(fun, args))
+        if (queue.length === 1 && !draining) {
+          runTimeout(drainQueue)
+        }
+      }
+
+      // v8 likes predictible objects
+      function Item(fun, array) {
+        this.fun = fun
+        this.array = array
+      }
+      Item.prototype.run = function() {
+        this.fun.apply(null, this.array)
+      }
+      process.title = 'browser'
+      process.browser = true
+      process.env = {}
+      process.argv = []
+      process.version = '' // empty string to avoid regexp issues
+      process.versions = {}
+
+      function noop() {}
+
+      process.on = noop
+      process.addListener = noop
+      process.once = noop
+      process.off = noop
+      process.removeListener = noop
+      process.removeAllListeners = noop
+      process.emit = noop
+      process.prependListener = noop
+      process.prependOnceListener = noop
+
+      process.listeners = function(name) {
+        return []
+      }
+
+      process.binding = function(name) {
+        throw new Error('process.binding is not supported')
+      }
+
+      process.cwd = function() {
+        return '/'
+      }
+      process.chdir = function(dir) {
+        throw new Error('process.chdir is not supported')
+      }
+      process.umask = function() {
+        return 0
+      }
+
+      /***/
+    },
+
+    /***/ 'B/eG': /***/ function(
+      module,
+      __webpack_exports__,
+      __webpack_require__
+    ) {
+      'use strict'
+      /* WEBPACK VAR INJECTION */ ;(function(setImmediate) {
+        /* harmony import */ var _finally__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
+          '/pFH'
+        )
+
+        // Store setTimeout reference so promise-polyfill will be unaffected by
+        // other code modifying setTimeout (like sinon.useFakeTimers())
+        var setTimeoutFunc = setTimeout
+
+        function isArray(x) {
+          return Boolean(x && typeof x.length !== 'undefined')
+        }
+
+        function noop() {}
+
+        // Polyfill for Function.prototype.bind
+        function bind(fn, thisArg) {
+          return function() {
+            fn.apply(thisArg, arguments)
+          }
+        }
+
+        /**
+         * @constructor
+         * @param {Function} fn
+         */
+        function Promise(fn) {
+          if (!(this instanceof Promise))
+            throw new TypeError('Promises must be constructed via new')
+          if (typeof fn !== 'function') throw new TypeError('not a function')
+          /** @type {!number} */
+          this._state = 0
+          /** @type {!boolean} */
+          this._handled = false
+          /** @type {Promise|undefined} */
+          this._value = undefined
+          /** @type {!Array<!Function>} */
+          this._deferreds = []
+
+          doResolve(fn, this)
+        }
+
+        function handle(self, deferred) {
+          while (self._state === 3) {
+            self = self._value
+          }
+          if (self._state === 0) {
+            self._deferreds.push(deferred)
+            return
+          }
+          self._handled = true
+          Promise._immediateFn(function() {
+            var cb =
+              self._state === 1 ? deferred.onFulfilled : deferred.onRejected
+            if (cb === null) {
+              ;(self._state === 1 ? resolve : reject)(
+                deferred.promise,
+                self._value
+              )
+              return
+            }
+            var ret
+            try {
+              ret = cb(self._value)
+            } catch (e) {
+              reject(deferred.promise, e)
+              return
+            }
+            resolve(deferred.promise, ret)
+          })
+        }
+
+        function resolve(self, newValue) {
+          try {
+            // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
+            if (newValue === self)
+              throw new TypeError('A promise cannot be resolved with itself.')
+            if (
+              newValue &&
+              (typeof newValue === 'object' || typeof newValue === 'function')
+            ) {
+              var then = newValue.then
+              if (newValue instanceof Promise) {
+                self._state = 3
+                self._value = newValue
+                finale(self)
+                return
+              } else if (typeof then === 'function') {
+                doResolve(bind(then, newValue), self)
+                return
+              }
+            }
+            self._state = 1
+            self._value = newValue
+            finale(self)
+          } catch (e) {
+            reject(self, e)
+          }
+        }
+
+        function reject(self, newValue) {
+          self._state = 2
+          self._value = newValue
+          finale(self)
+        }
+
+        function finale(self) {
+          if (self._state === 2 && self._deferreds.length === 0) {
+            Promise._immediateFn(function() {
+              if (!self._handled) {
+                Promise._unhandledRejectionFn(self._value)
+              }
+            })
+          }
+
+          for (var i = 0, len = self._deferreds.length; i < len; i++) {
+            handle(self, self._deferreds[i])
+          }
+          self._deferreds = null
+        }
+
+        /**
+         * @constructor
+         */
+        function Handler(onFulfilled, onRejected, promise) {
+          this.onFulfilled =
+            typeof onFulfilled === 'function' ? onFulfilled : null
+          this.onRejected = typeof onRejected === 'function' ? onRejected : null
+          this.promise = promise
+        }
+
+        /**
+         * Take a potentially misbehaving resolver function and make sure
+         * onFulfilled and onRejected are only called once.
+         *
+         * Makes no guarantees about asynchrony.
+         */
+        function doResolve(fn, self) {
+          var done = false
+          try {
+            fn(
+              function(value) {
+                if (done) return
+                done = true
+                resolve(self, value)
+              },
+              function(reason) {
+                if (done) return
+                done = true
+                reject(self, reason)
+              }
+            )
+          } catch (ex) {
+            if (done) return
+            done = true
+            reject(self, ex)
+          }
+        }
+
+        Promise.prototype['catch'] = function(onRejected) {
+          return this.then(null, onRejected)
+        }
+
+        Promise.prototype.then = function(onFulfilled, onRejected) {
+          // @ts-ignore
+          var prom = new this.constructor(noop)
+
+          handle(this, new Handler(onFulfilled, onRejected, prom))
+          return prom
+        }
+
+        Promise.prototype['finally'] =
+          _finally__WEBPACK_IMPORTED_MODULE_0__[/* default */ 'a']
+
+        Promise.all = function(arr) {
+          return new Promise(function(resolve, reject) {
+            if (!isArray(arr)) {
+              return reject(new TypeError('Promise.all accepts an array'))
+            }
+
+            var args = Array.prototype.slice.call(arr)
+            if (args.length === 0) return resolve([])
+            var remaining = args.length
+
+            function res(i, val) {
+              try {
+                if (
+                  val &&
+                  (typeof val === 'object' || typeof val === 'function')
+                ) {
+                  var then = val.then
+                  if (typeof then === 'function') {
+                    then.call(
+                      val,
+                      function(val) {
+                        res(i, val)
+                      },
+                      reject
+                    )
+                    return
+                  }
+                }
+                args[i] = val
+                if (--remaining === 0) {
+                  resolve(args)
+                }
+              } catch (ex) {
+                reject(ex)
+              }
+            }
+
+            for (var i = 0; i < args.length; i++) {
+              res(i, args[i])
+            }
+          })
+        }
+
+        Promise.resolve = function(value) {
+          if (
+            value &&
+            typeof value === 'object' &&
+            value.constructor === Promise
+          ) {
+            return value
+          }
+
+          return new Promise(function(resolve) {
+            resolve(value)
+          })
+        }
+
+        Promise.reject = function(value) {
+          return new Promise(function(resolve, reject) {
+            reject(value)
+          })
+        }
+
+        Promise.race = function(arr) {
+          return new Promise(function(resolve, reject) {
+            if (!isArray(arr)) {
+              return reject(new TypeError('Promise.race accepts an array'))
+            }
+
+            for (var i = 0, len = arr.length; i < len; i++) {
+              Promise.resolve(arr[i]).then(resolve, reject)
+            }
+          })
+        }
+
+        // Use polyfill for setImmediate for performance gains
+        Promise._immediateFn =
+          // @ts-ignore
+          (typeof setImmediate === 'function' &&
+            function(fn) {
+              // @ts-ignore
+              setImmediate(fn)
+            }) ||
+          function(fn) {
+            setTimeoutFunc(fn, 0)
+          }
+
+        Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {
+          if (typeof console !== 'undefined' && console) {
+            console.warn('Possible Unhandled Promise Rejection:', err) // eslint-disable-line no-console
+          }
+        }
+
+        /* harmony default export */ __webpack_exports__['a'] = Promise
+
+        /* WEBPACK VAR INJECTION */
+      }.call(this, __webpack_require__('URgk').setImmediate))
+
+      /***/
+    },
+
     /***/ GkXk: /***/ function(module, exports, __webpack_require__) {
       ;(function(global, factory) {
         true ? factory(exports) : undefined
@@ -1209,9 +1719,90 @@ object-assign
       /***/
     },
 
+    /***/ URgk: /***/ function(module, exports, __webpack_require__) {
+      /* WEBPACK VAR INJECTION */ ;(function(global) {
+        var scope =
+          (typeof global !== 'undefined' && global) ||
+          (typeof self !== 'undefined' && self) ||
+          window
+        var apply = Function.prototype.apply
+
+        // DOM APIs, for completeness
+
+        exports.setTimeout = function() {
+          return new Timeout(
+            apply.call(setTimeout, scope, arguments),
+            clearTimeout
+          )
+        }
+        exports.setInterval = function() {
+          return new Timeout(
+            apply.call(setInterval, scope, arguments),
+            clearInterval
+          )
+        }
+        exports.clearTimeout = exports.clearInterval = function(timeout) {
+          if (timeout) {
+            timeout.close()
+          }
+        }
+
+        function Timeout(id, clearFn) {
+          this._id = id
+          this._clearFn = clearFn
+        }
+        Timeout.prototype.unref = Timeout.prototype.ref = function() {}
+        Timeout.prototype.close = function() {
+          this._clearFn.call(scope, this._id)
+        }
+
+        // Does not start the time, just sets up the members needed.
+        exports.enroll = function(item, msecs) {
+          clearTimeout(item._idleTimeoutId)
+          item._idleTimeout = msecs
+        }
+
+        exports.unenroll = function(item) {
+          clearTimeout(item._idleTimeoutId)
+          item._idleTimeout = -1
+        }
+
+        exports._unrefActive = exports.active = function(item) {
+          clearTimeout(item._idleTimeoutId)
+
+          var msecs = item._idleTimeout
+          if (msecs >= 0) {
+            item._idleTimeoutId = setTimeout(function onTimeout() {
+              if (item._onTimeout) item._onTimeout()
+            }, msecs)
+          }
+        }
+
+        // setimmediate attaches itself to the global object
+        __webpack_require__('YBdB')
+        // On some exotic environments, it's not clear which object `setimmediate` was
+        // able to install onto.  Search each possibility in the same order as the
+        // `setimmediate` library.
+        exports.setImmediate =
+          (typeof self !== 'undefined' && self.setImmediate) ||
+          (typeof global !== 'undefined' && global.setImmediate) ||
+          (this && this.setImmediate)
+        exports.clearImmediate =
+          (typeof self !== 'undefined' && self.clearImmediate) ||
+          (typeof global !== 'undefined' && global.clearImmediate) ||
+          (this && this.clearImmediate)
+
+        /* WEBPACK VAR INJECTION */
+      }.call(this, __webpack_require__('yLpj')))
+
+      /***/
+    },
+
     /***/ XLER: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
+      __webpack_require__('aE5D')
+
       __webpack_require__('GkXk')
 
       __webpack_require__('T1qB')
@@ -1221,6 +1812,256 @@ object-assign
       /***/
     },
 
+    /***/ YBdB: /***/ function(module, exports, __webpack_require__) {
+      /* WEBPACK VAR INJECTION */ ;(function(global, process) {
+        ;(function(global, undefined) {
+          'use strict'
+
+          if (global.setImmediate) {
+            return
+          }
+
+          var nextHandle = 1 // Spec says greater than zero
+          var tasksByHandle = {}
+          var currentlyRunningATask = false
+          var doc = global.document
+          var registerImmediate
+
+          function setImmediate(callback) {
+            // Callback can either be a function or a string
+            if (typeof callback !== 'function') {
+              callback = new Function('' + callback)
+            }
+            // Copy function arguments
+            var args = new Array(arguments.length - 1)
+            for (var i = 0; i < args.length; i++) {
+              args[i] = arguments[i + 1]
+            }
+            // Store and register the task
+            var task = { callback: callback, args: args }
+            tasksByHandle[nextHandle] = task
+            registerImmediate(nextHandle)
+            return nextHandle++
+          }
+
+          function clearImmediate(handle) {
+            delete tasksByHandle[handle]
+          }
+
+          function run(task) {
+            var callback = task.callback
+            var args = task.args
+            switch (args.length) {
+              case 0:
+                callback()
+                break
+              case 1:
+                callback(args[0])
+                break
+              case 2:
+                callback(args[0], args[1])
+                break
+              case 3:
+                callback(args[0], args[1], args[2])
+                break
+              default:
+                callback.apply(undefined, args)
+                break
+            }
+          }
+
+          function runIfPresent(handle) {
+            // From the spec: "Wait until any invocations of this algorithm started before this one have completed."
+            // So if we're currently running a task, we'll need to delay this invocation.
+            if (currentlyRunningATask) {
+              // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a
+              // "too much recursion" error.
+              setTimeout(runIfPresent, 0, handle)
+            } else {
+              var task = tasksByHandle[handle]
+              if (task) {
+                currentlyRunningATask = true
+                try {
+                  run(task)
+                } finally {
+                  clearImmediate(handle)
+                  currentlyRunningATask = false
+                }
+              }
+            }
+          }
+
+          function installNextTickImplementation() {
+            registerImmediate = function(handle) {
+              process.nextTick(function() {
+                runIfPresent(handle)
+              })
+            }
+          }
+
+          function canUsePostMessage() {
+            // The test against `importScripts` prevents this implementation from being installed inside a web worker,
+            // where `global.postMessage` means something completely different and can't be used for this purpose.
+            if (global.postMessage && !global.importScripts) {
+              var postMessageIsAsynchronous = true
+              var oldOnMessage = global.onmessage
+              global.onmessage = function() {
+                postMessageIsAsynchronous = false
+              }
+              global.postMessage('', '*')
+              global.onmessage = oldOnMessage
+              return postMessageIsAsynchronous
+            }
+          }
+
+          function installPostMessageImplementation() {
+            // Installs an event handler on `global` for the `message` event: see
+            // * https://developer.mozilla.org/en/DOM/window.postMessage
+            // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages
+
+            var messagePrefix = 'setImmediate$' + Math.random() + '$'
+            var onGlobalMessage = function(event) {
+              if (
+                event.source === global &&
+                typeof event.data === 'string' &&
+                event.data.indexOf(messagePrefix) === 0
+              ) {
+                runIfPresent(+event.data.slice(messagePrefix.length))
+              }
+            }
+
+            if (global.addEventListener) {
+              global.addEventListener('message', onGlobalMessage, false)
+            } else {
+              global.attachEvent('onmessage', onGlobalMessage)
+            }
+
+            registerImmediate = function(handle) {
+              global.postMessage(messagePrefix + handle, '*')
+            }
+          }
+
+          function installMessageChannelImplementation() {
+            var channel = new MessageChannel()
+            channel.port1.onmessage = function(event) {
+              var handle = event.data
+              runIfPresent(handle)
+            }
+
+            registerImmediate = function(handle) {
+              channel.port2.postMessage(handle)
+            }
+          }
+
+          function installReadyStateChangeImplementation() {
+            var html = doc.documentElement
+            registerImmediate = function(handle) {
+              // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
+              // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
+              var script = doc.createElement('script')
+              script.onreadystatechange = function() {
+                runIfPresent(handle)
+                script.onreadystatechange = null
+                html.removeChild(script)
+                script = null
+              }
+              html.appendChild(script)
+            }
+          }
+
+          function installSetTimeoutImplementation() {
+            registerImmediate = function(handle) {
+              setTimeout(runIfPresent, 0, handle)
+            }
+          }
+
+          // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.
+          var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global)
+          attachTo = attachTo && attachTo.setTimeout ? attachTo : global
+
+          // Don't get fooled by e.g. browserify environments.
+          if ({}.toString.call(global.process) === '[object process]') {
+            // For Node.js before 0.9
+            installNextTickImplementation()
+          } else if (canUsePostMessage()) {
+            // For non-IE10 modern browsers
+            installPostMessageImplementation()
+          } else if (global.MessageChannel) {
+            // For web workers, where supported
+            installMessageChannelImplementation()
+          } else if (
+            doc &&
+            'onreadystatechange' in doc.createElement('script')
+          ) {
+            // For IE 6–8
+            installReadyStateChangeImplementation()
+          } else {
+            // For older browsers
+            installSetTimeoutImplementation()
+          }
+
+          attachTo.setImmediate = setImmediate
+          attachTo.clearImmediate = clearImmediate
+        })(
+          typeof self === 'undefined'
+            ? typeof global === 'undefined'
+              ? this
+              : global
+            : self
+        )
+
+        /* WEBPACK VAR INJECTION */
+      }.call(this, __webpack_require__('yLpj'), __webpack_require__('8oxB')))
+
+      /***/
+    },
+
+    /***/ aE5D: /***/ function(
+      module,
+      __webpack_exports__,
+      __webpack_require__
+    ) {
+      'use strict'
+      __webpack_require__.r(__webpack_exports__)
+      /* WEBPACK VAR INJECTION */ ;(function(global) {
+        /* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
+          'B/eG'
+        )
+        /* harmony import */ var _finally__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
+          '/pFH'
+        )
+
+        /** @suppress {undefinedVars} */
+        var globalNS = (function() {
+          // the only reliable means to get the global object is
+          // `Function('return this')()`
+          // However, this causes CSP violations in Chrome apps.
+          if (typeof self !== 'undefined') {
+            return self
+          }
+          if (typeof window !== 'undefined') {
+            return window
+          }
+          if (typeof global !== 'undefined') {
+            return global
+          }
+          throw new Error('unable to locate global object')
+        })()
+
+        if (!('Promise' in globalNS)) {
+          globalNS['Promise'] =
+            _index__WEBPACK_IMPORTED_MODULE_0__[/* default */ 'a']
+        } else if (!globalNS.Promise.prototype['finally']) {
+          globalNS.Promise.prototype['finally'] =
+            _finally__WEBPACK_IMPORTED_MODULE_1__[/* default */ 'a']
+        }
+
+        /* WEBPACK VAR INJECTION */
+      }.call(this, __webpack_require__('yLpj')))
+
+      /***/
+    },
+
     /***/ yLpj: /***/ function(module, exports) {
       var g
Diff for index.html
@@ -33,19 +33,19 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js"
+      href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.1ae218daf8d62b646817.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.90fd5fa01287552151d3.module.js"
+      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.8773371058f1611d79dd.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/runtime/main-4b4ea9d6783c4e4843be.module.js"
+      href="/_next/static/runtime/main-4d2736a3c00da6825a48.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -78,7 +78,7 @@
     ><script
       crossorigin="anonymous"
       nomodule=""
-      src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"
+      src="/_next/static/runtime/polyfills-0e66bd71d71c58a15235.js"
     ></script
     ><script
       async=""
@@ -139,37 +139,37 @@
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js"
+      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.8aab10c0ce60fda1f68c.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js"
+      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.1ae218daf8d62b646817.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
     ></script
     ><script
-      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.7f8e4c92f1de3035c8ae.js"
+      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.8a1b012375f3fc3d2116.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.90fd5fa01287552151d3.module.js"
+      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.8773371058f1611d79dd.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
     ></script
     ><script
-      src="/_next/static/runtime/main-0f0b179fd8c5a047537b.js"
+      src="/_next/static/runtime/main-cb8f5757aa567bff9d2b.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/runtime/main-4b4ea9d6783c4e4843be.module.js"
+      src="/_next/static/runtime/main-4d2736a3c00da6825a48.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for link.html
@@ -33,19 +33,19 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js"
+      href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.1ae218daf8d62b646817.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.90fd5fa01287552151d3.module.js"
+      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.8773371058f1611d79dd.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/runtime/main-4b4ea9d6783c4e4843be.module.js"
+      href="/_next/static/runtime/main-4d2736a3c00da6825a48.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -83,7 +83,7 @@
     ><script
       crossorigin="anonymous"
       nomodule=""
-      src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"
+      src="/_next/static/runtime/polyfills-0e66bd71d71c58a15235.js"
     ></script
     ><script
       async=""
@@ -144,37 +144,37 @@
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js"
+      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.8aab10c0ce60fda1f68c.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js"
+      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.1ae218daf8d62b646817.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
     ></script
     ><script
-      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.7f8e4c92f1de3035c8ae.js"
+      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.8a1b012375f3fc3d2116.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.90fd5fa01287552151d3.module.js"
+      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.8773371058f1611d79dd.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
     ></script
     ><script
-      src="/_next/static/runtime/main-0f0b179fd8c5a047537b.js"
+      src="/_next/static/runtime/main-cb8f5757aa567bff9d2b.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/runtime/main-4b4ea9d6783c4e4843be.module.js"
+      src="/_next/static/runtime/main-4d2736a3c00da6825a48.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for withRouter.html
@@ -33,19 +33,19 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js"
+      href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.1ae218daf8d62b646817.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.90fd5fa01287552151d3.module.js"
+      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.8773371058f1611d79dd.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/runtime/main-4b4ea9d6783c4e4843be.module.js"
+      href="/_next/static/runtime/main-4d2736a3c00da6825a48.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -78,7 +78,7 @@
     ><script
       crossorigin="anonymous"
       nomodule=""
-      src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"
+      src="/_next/static/runtime/polyfills-0e66bd71d71c58a15235.js"
     ></script
     ><script
       async=""
@@ -139,37 +139,37 @@
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js"
+      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.8aab10c0ce60fda1f68c.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js"
+      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.1ae218daf8d62b646817.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
     ></script
     ><script
-      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.7f8e4c92f1de3035c8ae.js"
+      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.8a1b012375f3fc3d2116.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.90fd5fa01287552151d3.module.js"
+      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.8773371058f1611d79dd.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
     ></script
     ><script
-      src="/_next/static/runtime/main-0f0b179fd8c5a047537b.js"
+      src="/_next/static/runtime/main-cb8f5757aa567bff9d2b.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/runtime/main-4b4ea9d6783c4e4843be.module.js"
+      src="/_next/static/runtime/main-4d2736a3c00da6825a48.module.js"
       async=""
       crossorigin="anonymous"
       type="module"

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
buildDuration 15.2s 15.2s -60ms
nodeModulesSize 48.9 MB 48.9 MB ⚠️ +44.6 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.js gzip 5.1 kB 5.19 kB ⚠️ +85 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB N/A N/A
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d57b.js gzip 16.1 kB N/A N/A
framework.HASH.js gzip 39.1 kB 39.1 kB
4952ddcd88e7..269d.js gzip N/A 4.53 kB N/A
de003c3a9d30..5ede.js gzip N/A 13.7 kB N/A
Overall change 69.8 kB 67.4 kB ⚠️ +85 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.module.js gzip 4.1 kB 4.18 kB ⚠️ +84 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB N/A N/A
de003c3a9d30..dule.js gzip 15 kB N/A N/A
framework.HA..dule.js gzip 39.1 kB 39.1 kB
4952ddcd88e7..dule.js gzip N/A 5.5 kB N/A
de003c3a9d30..dule.js gzip N/A 12.3 kB N/A
Overall change 64.5 kB 61.9 kB ⚠️ +84 B
Legacy Client Bundles (polyfills) Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
polyfills-HASH.js gzip 4.76 kB 7.14 kB ⚠️ +2.38 kB
Overall change 4.76 kB 7.14 kB ⚠️ +2.38 kB
Client Pages Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.26 kB ⚠️ +188 B
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.97 kB ⚠️ +74 B
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.94 kB ⚠️ +262 B
Client Pages Modern Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.14 kB ⚠️ +83 B
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.55 kB ⚠️ +83 B
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.39 kB ⚠️ +166 B
Client Build Manifests
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles Overall decrease ✓
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_error.js gzip 46.2 kB 46.2 kB -9 B
hooks.html gzip 1.05 kB 1.05 kB -4 B
index.js gzip 46.4 kB 46.4 kB -7 B
link.js gzip 71.9 kB 71.9 kB -8 B
routerDirect.js gzip 69.9 kB 69.9 kB -9 B
withRouter.js gzip 69.9 kB 69.9 kB -10 B
Overall change 305 kB 305 kB -47 B

Commit: 9015d74

@ijjk
Copy link
Member

ijjk commented Jan 22, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
buildDuration 12.5s 12.1s -388ms
nodeModulesSize 48.9 MB 48.9 MB ⚠️ +44.6 kB
Client Bundles (main, webpack, commons) Overall decrease ✓
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.js gzip 5.1 kB 5.19 kB ⚠️ +85 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.53 kB -154 B
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d57b.js gzip 16.1 kB N/A N/A
framework.HASH.js gzip 39.1 kB 39.1 kB
de003c3a9d30..5ede.js gzip N/A 13.7 kB N/A
Overall change 69.8 kB 67.4 kB -69 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.module.js gzip 4.1 kB 4.18 kB ⚠️ +84 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.5 kB -57 B
de003c3a9d30..dule.js gzip 15 kB N/A N/A
framework.HA..dule.js gzip 39.1 kB 39.1 kB
de003c3a9d30..dule.js gzip N/A 12.3 kB N/A
Overall change 64.5 kB 61.9 kB ⚠️ +27 B
Legacy Client Bundles (polyfills) Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
polyfills-HASH.js gzip 4.76 kB 7.14 kB ⚠️ +2.38 kB
Overall change 4.76 kB 7.14 kB ⚠️ +2.38 kB
Client Pages Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.26 kB ⚠️ +188 B
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.97 kB ⚠️ +74 B
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.94 kB ⚠️ +262 B
Client Pages Modern Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.14 kB ⚠️ +83 B
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.55 kB ⚠️ +83 B
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.39 kB ⚠️ +166 B
Client Build Manifests
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes Overall decrease ✓
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
index.html gzip 1.02 kB 1.02 kB -3 B
link.html gzip 1.03 kB 1.03 kB -4 B
withRouter.html gzip 1.02 kB 1.01 kB -3 B
Overall change 3.07 kB 3.06 kB -10 B

Diffs

Diff for _error.js
@@ -698,6 +698,29 @@
       /***/
     },
 
+    /***/ TJWN: /***/ function(module, exports, __webpack_require__) {
+      'use strict'
+
+      var global = __webpack_require__('5T2Y')
+      var core = __webpack_require__('WEpk')
+      var dP = __webpack_require__('2faE')
+      var DESCRIPTORS = __webpack_require__('jmDH')
+      var SPECIES = __webpack_require__('UWiX')('species')
+
+      module.exports = function(KEY) {
+        var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY]
+        if (DESCRIPTORS && C && !C[SPECIES])
+          dP.f(C, SPECIES, {
+            configurable: true,
+            get: function() {
+              return this
+            },
+          })
+      }
+
+      /***/
+    },
+
     /***/ TbGu: /***/ function(module, exports, __webpack_require__) {
       var arrayWithoutHoles = __webpack_require__('fGSI')
 
@@ -716,6 +739,45 @@
       /***/
     },
 
+    /***/ TuGD: /***/ function(module, exports, __webpack_require__) {
+      var ITERATOR = __webpack_require__('UWiX')('iterator')
+      var SAFE_CLOSING = false
+
+      try {
+        var riter = [7][ITERATOR]()
+        riter['return'] = function() {
+          SAFE_CLOSING = true
+        }
+        // eslint-disable-next-line no-throw-literal
+        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]
+          var iter = arr[ITERATOR]()
+          iter.next = function() {
+            return { done: (safe = true) }
+          }
+          arr[ITERATOR] = function() {
+            return iter
+          }
+          exec(arr)
+        } catch (e) {
+          /* empty */
+        }
+        return safe
+      }
+
+      /***/
+    },
+
     /***/ 'V+O7': /***/ function(module, exports, __webpack_require__) {
       // https://tc39.github.io/proposal-setmap-offrom/#sec-set.from
       __webpack_require__('aPfg')('Set')
Diff for _error.module.js
@@ -502,6 +502,29 @@
       /***/
     },
 
+    /***/ TJWN: /***/ function(module, exports, __webpack_require__) {
+      'use strict'
+
+      var global = __webpack_require__('5T2Y')
+      var core = __webpack_require__('WEpk')
+      var dP = __webpack_require__('2faE')
+      var DESCRIPTORS = __webpack_require__('jmDH')
+      var SPECIES = __webpack_require__('UWiX')('species')
+
+      module.exports = function(KEY) {
+        var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY]
+        if (DESCRIPTORS && C && !C[SPECIES])
+          dP.f(C, SPECIES, {
+            configurable: true,
+            get: function() {
+              return this
+            },
+          })
+      }
+
+      /***/
+    },
+
     /***/ 'V+O7': /***/ function(module, exports, __webpack_require__) {
       // https://tc39.github.io/proposal-setmap-offrom/#sec-set.from
       __webpack_require__('aPfg')('Set')
Diff for link.js
@@ -179,6 +179,29 @@
       /***/
     },
 
+    /***/ TJWN: /***/ function(module, exports, __webpack_require__) {
+      'use strict'
+
+      var global = __webpack_require__('5T2Y')
+      var core = __webpack_require__('WEpk')
+      var dP = __webpack_require__('2faE')
+      var DESCRIPTORS = __webpack_require__('jmDH')
+      var SPECIES = __webpack_require__('UWiX')('species')
+
+      module.exports = function(KEY) {
+        var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY]
+        if (DESCRIPTORS && C && !C[SPECIES])
+          dP.f(C, SPECIES, {
+            configurable: true,
+            get: function() {
+              return this
+            },
+          })
+      }
+
+      /***/
+    },
+
     /***/ UDep: /***/ function(module, exports, __webpack_require__) {
       __webpack_require__('wgeU')
       __webpack_require__('FlQf')
Diff for link.module.js
@@ -85,6 +85,29 @@
       /***/
     },
 
+    /***/ TJWN: /***/ function(module, exports, __webpack_require__) {
+      'use strict'
+
+      var global = __webpack_require__('5T2Y')
+      var core = __webpack_require__('WEpk')
+      var dP = __webpack_require__('2faE')
+      var DESCRIPTORS = __webpack_require__('jmDH')
+      var SPECIES = __webpack_require__('UWiX')('species')
+
+      module.exports = function(KEY) {
+        var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY]
+        if (DESCRIPTORS && C && !C[SPECIES])
+          dP.f(C, SPECIES, {
+            configurable: true,
+            get: function() {
+              return this
+            },
+          })
+      }
+
+      /***/
+    },
+
     /***/ UDep: /***/ function(module, exports, __webpack_require__) {
       __webpack_require__('wgeU')
       __webpack_require__('FlQf')
Diff for 4952ddcd88e7..16.module.js
@@ -655,29 +655,6 @@
       /***/
     },
 
-    /***/ TJWN: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      var global = __webpack_require__('5T2Y')
-      var core = __webpack_require__('WEpk')
-      var dP = __webpack_require__('2faE')
-      var DESCRIPTORS = __webpack_require__('jmDH')
-      var SPECIES = __webpack_require__('UWiX')('species')
-
-      module.exports = function(KEY) {
-        var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY]
-        if (DESCRIPTORS && C && !C[SPECIES])
-          dP.f(C, SPECIES, {
-            configurable: true,
-            get: function() {
-              return this
-            },
-          })
-      }
-
-      /***/
-    },
-
     /***/ 'U+KD': /***/ function(module, exports, __webpack_require__) {
       // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
       var has = __webpack_require__('B+OT')
Diff for 4952ddcd88e7..92a927903.js
@@ -659,74 +659,12 @@
       /***/
     },
 
-    /***/ TJWN: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      var global = __webpack_require__('5T2Y')
-      var core = __webpack_require__('WEpk')
-      var dP = __webpack_require__('2faE')
-      var DESCRIPTORS = __webpack_require__('jmDH')
-      var SPECIES = __webpack_require__('UWiX')('species')
-
-      module.exports = function(KEY) {
-        var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY]
-        if (DESCRIPTORS && C && !C[SPECIES])
-          dP.f(C, SPECIES, {
-            configurable: true,
-            get: function() {
-              return this
-            },
-          })
-      }
-
-      /***/
-    },
-
     /***/ TRZx: /***/ function(module, exports, __webpack_require__) {
       module.exports = __webpack_require__('JbBM')
 
       /***/
     },
 
-    /***/ TuGD: /***/ function(module, exports, __webpack_require__) {
-      var ITERATOR = __webpack_require__('UWiX')('iterator')
-      var SAFE_CLOSING = false
-
-      try {
-        var riter = [7][ITERATOR]()
-        riter['return'] = function() {
-          SAFE_CLOSING = true
-        }
-        // eslint-disable-next-line no-throw-literal
-        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]
-          var iter = arr[ITERATOR]()
-          iter.next = function() {
-            return { done: (safe = true) }
-          }
-          arr[ITERATOR] = function() {
-            return iter
-          }
-          exec(arr)
-        } catch (e) {
-          /* empty */
-        }
-        return safe
-      }
-
-      /***/
-    },
-
     /***/ V7Et: /***/ function(module, exports, __webpack_require__) {
       // 0 -> Array#forEach
       // 1 -> Array#map
Diff for de003c3a9d30..e3035c8ae.js
@@ -79,6 +79,14 @@
       /***/
     },
 
+    /***/ '21Wz': /***/ function(module, exports, __webpack_require__) {
+      'use strict'
+      module.exports = Promise
+      module.exports.default = Promise
+
+      /***/
+    },
+
     /***/ '4JlD': /***/ function(module, exports, __webpack_require__) {
       'use strict'
       // Copyright Joyent, Inc. and other Node contributors.
@@ -278,22 +286,6 @@
       /***/
     },
 
-    /***/ '8gHz': /***/ function(module, exports, __webpack_require__) {
-      // 7.3.20 SpeciesConstructor(O, defaultConstructor)
-      var anObject = __webpack_require__('5K7Z')
-      var aFunction = __webpack_require__('eaoh')
-      var SPECIES = __webpack_require__('UWiX')('species')
-      module.exports = function(O, D) {
-        var C = anObject(O).constructor
-        var S
-        return C === undefined || (S = anObject(C)[SPECIES]) == undefined
-          ? D
-          : aFunction(S)
-      }
-
-      /***/
-    },
-
     /***/ BURE: /***/ function(module, exports, __webpack_require__) {
       // https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of
       __webpack_require__('cHUd')('WeakMap')
@@ -1603,331 +1595,6 @@
       /***/
     },
 
-    /***/ 'JMW+': /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      var LIBRARY = __webpack_require__('uOPS')
-      var global = __webpack_require__('5T2Y')
-      var ctx = __webpack_require__('2GTP')
-      var classof = __webpack_require__('QMMT')
-      var $export = __webpack_require__('Y7ZC')
-      var isObject = __webpack_require__('93I4')
-      var aFunction = __webpack_require__('eaoh')
-      var anInstance = __webpack_require__('EXMj')
-      var forOf = __webpack_require__('oioR')
-      var speciesConstructor = __webpack_require__('8gHz')
-      var task = __webpack_require__('QXhf').set
-      var microtask = __webpack_require__('q6LJ')()
-      var newPromiseCapabilityModule = __webpack_require__('ZW5q')
-      var perform = __webpack_require__('RDmV')
-      var userAgent = __webpack_require__('vBP9')
-      var promiseResolve = __webpack_require__('zXhZ')
-      var PROMISE = 'Promise'
-      var TypeError = global.TypeError
-      var process = global.process
-      var versions = process && process.versions
-      var v8 = (versions && versions.v8) || ''
-      var $Promise = global[PROMISE]
-      var isNode = classof(process) == 'process'
-      var empty = function() {
-        /* empty */
-      }
-      var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper
-      var newPromiseCapability = (newGenericPromiseCapability =
-        newPromiseCapabilityModule.f)
-
-      var USE_NATIVE = !!(function() {
-        try {
-          // correct subclassing with @@species support
-          var promise = $Promise.resolve(1)
-          var FakePromise = ((promise.constructor = {})[
-            __webpack_require__('UWiX')('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 &&
-            // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
-            // https://bugs.chromium.org/p/chromium/issues/detail?id=830565
-            // we can't detect it synchronously, so just check versions
-            v8.indexOf('6.6') !== 0 &&
-            userAgent.indexOf('Chrome/66') === -1
-          )
-        } catch (e) {
-          /* empty */
-        }
-      })()
-
-      // helpers
-      var isThenable = function(it) {
-        var then
-        return isObject(it) && typeof (then = it.then) == 'function'
-          ? then
-          : false
-      }
-      var notify = function(promise, isReject) {
-        if (promise._n) return
-        promise._n = true
-        var chain = promise._c
-        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, exited
-            try {
-              if (handler) {
-                if (!ok) {
-                  if (promise._h == 2) onHandleUnhandled(promise)
-                  promise._h = 1
-                }
-                if (handler === true) result = value
-                else {
-                  if (domain) domain.enter()
-                  result = handler(value) // may throw
-                  if (domain) {
-                    domain.exit()
-                    exited = true
-                  }
-                }
-                if (result === reaction.promise) {
-                  reject(TypeError('Promise-chain cycle'))
-                } else if ((then = isThenable(result))) {
-                  then.call(result, resolve, reject)
-                } else resolve(result)
-              } else reject(value)
-            } catch (e) {
-              if (domain && !exited) domain.exit()
-              reject(e)
-            }
-          }
-          while (chain.length > i) run(chain[i++]) // variable length - can't use forEach
-          promise._c = []
-          promise._n = false
-          if (isReject && !promise._h) onUnhandled(promise)
-        })
-      }
-      var onUnhandled = function(promise) {
-        task.call(global, function() {
-          var value = promise._v
-          var unhandled = isUnhandled(promise)
-          var result, handler, console
-          if (unhandled) {
-            result = perform(function() {
-              if (isNode) {
-                process.emit('unhandledRejection', value, promise)
-              } else if ((handler = global.onunhandledrejection)) {
-                handler({ promise: promise, reason: value })
-              } else if ((console = global.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 (unhandled && result.e) throw result.v
-        })
-      }
-      var isUnhandled = function(promise) {
-        return promise._h !== 1 && (promise._a || promise._c).length === 0
-      }
-      var onHandleUnhandled = function(promise) {
-        task.call(global, function() {
-          var handler
-          if (isNode) {
-            process.emit('rejectionHandled', promise)
-          } else if ((handler = global.onrejectionhandled)) {
-            handler({ promise: promise, reason: promise._v })
-          }
-        })
-      }
-      var $reject = function(value) {
-        var promise = this
-        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()
-        notify(promise, true)
-      }
-      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("Promise can't be resolved itself")
-          if ((then = isThenable(value))) {
-            microtask(function() {
-              var wrapper = { _w: promise, _d: false } // wrap
-              try {
-                then.call(
-                  value,
-                  ctx($resolve, wrapper, 1),
-                  ctx($reject, wrapper, 1)
-                )
-              } catch (e) {
-                $reject.call(wrapper, e)
-              }
-            })
-          } else {
-            promise._v = value
-            promise._s = 1
-            notify(promise, false)
-          }
-        } catch (e) {
-          $reject.call({ _w: promise, _d: false }, e) // wrap
-        }
-      }
-
-      // constructor polyfill
-      if (!USE_NATIVE) {
-        // 25.4.3.1 Promise(executor)
-        $Promise = function Promise(executor) {
-          anInstance(this, $Promise, PROMISE, '_h')
-          aFunction(executor)
-          Internal.call(this)
-          try {
-            executor(ctx($resolve, this, 1), ctx($reject, this, 1))
-          } catch (err) {
-            $reject.call(this, err)
-          }
-        }
-        // 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
-          this._d = false // <- done
-          this._v = undefined // <- value
-          this._h = 0 // <- rejection state, 0 - default, 1 - handled, 2 - unhandled
-          this._n = false // <- notify
-        }
-        Internal.prototype = __webpack_require__('XJU/')($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
-            reaction.domain = isNode ? process.domain : undefined
-            this._c.push(reaction)
-            if (this._a) this._a.push(reaction)
-            if (this._s) notify(this, false)
-            return reaction.promise
-          },
-          // 25.4.5.1 Promise.prototype.catch(onRejected)
-          catch: function(onRejected) {
-            return this.then(undefined, onRejected)
-          },
-        })
-        OwnPromiseCapability = function() {
-          var promise = new Internal()
-          this.promise = promise
-          this.resolve = ctx($resolve, promise, 1)
-          this.reject = ctx($reject, promise, 1)
-        }
-        newPromiseCapabilityModule.f = newPromiseCapability = function(C) {
-          return C === $Promise || C === Wrapper
-            ? new OwnPromiseCapability(C)
-            : newGenericPromiseCapability(C)
-        }
-      }
-
-      $export($export.G + $export.W + $export.F * !USE_NATIVE, {
-        Promise: $Promise,
-      })
-      __webpack_require__('RfKB')($Promise, PROMISE)
-      __webpack_require__('TJWN')(PROMISE)
-      Wrapper = __webpack_require__('WEpk')[PROMISE]
-
-      // statics
-      $export($export.S + $export.F * !USE_NATIVE, PROMISE, {
-        // 25.4.4.5 Promise.reject(r)
-        reject: function reject(r) {
-          var capability = newPromiseCapability(this)
-          var $$reject = capability.reject
-          $$reject(r)
-          return capability.promise
-        },
-      })
-      $export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {
-        // 25.4.4.6 Promise.resolve(x)
-        resolve: function resolve(x) {
-          return promiseResolve(
-            LIBRARY && this === Wrapper ? $Promise : this,
-            x
-          )
-        },
-      })
-      $export(
-        $export.S +
-          $export.F *
-            !(
-              USE_NATIVE &&
-              __webpack_require__('TuGD')(function(iter) {
-                $Promise.all(iter)['catch'](empty)
-              })
-            ),
-        PROMISE,
-        {
-          // 25.4.4.1 Promise.all(iterable)
-          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
-                  values[$index] = value
-                  --remaining || resolve(values)
-                }, reject)
-              })
-              --remaining || resolve(values)
-            })
-            if (result.e) reject(result.v)
-            return capability.promise
-          },
-          // 25.4.4.4 Promise.race(iterable)
-          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 (result.e) reject(result.v)
-            return capability.promise
-          },
-        }
-      )
-
-      /***/
-    },
-
     /***/ 'Jo+v': /***/ function(module, exports, __webpack_require__) {
       module.exports = __webpack_require__('/eQG')
 
@@ -2070,169 +1737,6 @@
       /***/
     },
 
-    /***/ PBE1: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-      // https://github.com/tc39/proposal-promise-finally
-
-      var $export = __webpack_require__('Y7ZC')
-      var core = __webpack_require__('WEpk')
-      var global = __webpack_require__('5T2Y')
-      var speciesConstructor = __webpack_require__('8gHz')
-      var promiseResolve = __webpack_require__('zXhZ')
-
-      $export($export.P + $export.R, 'Promise', {
-        finally: function(onFinally) {
-          var C = speciesConstructor(this, core.Promise || global.Promise)
-          var isFunction = typeof onFinally == 'function'
-          return this.then(
-            isFunction
-              ? function(x) {
-                  return promiseResolve(C, onFinally()).then(function() {
-                    return x
-                  })
-                }
-              : onFinally,
-            isFunction
-              ? function(e) {
-                  return promiseResolve(C, onFinally()).then(function() {
-                    throw e
-                  })
-                }
-              : onFinally
-          )
-        },
-      })
-
-      /***/
-    },
-
-    /***/ 'Q/yX': /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      // https://github.com/tc39/proposal-promise-try
-      var $export = __webpack_require__('Y7ZC')
-      var newPromiseCapability = __webpack_require__('ZW5q')
-      var perform = __webpack_require__('RDmV')
-
-      $export($export.S, 'Promise', {
-        try: function(callbackfn) {
-          var promiseCapability = newPromiseCapability.f(this)
-          var result = perform(callbackfn)
-          ;(result.e ? promiseCapability.reject : promiseCapability.resolve)(
-            result.v
-          )
-          return promiseCapability.promise
-        },
-      })
-
-      /***/
-    },
-
-    /***/ QXhf: /***/ function(module, exports, __webpack_require__) {
-      var ctx = __webpack_require__('2GTP')
-      var invoke = __webpack_require__('MCSJ')
-      var html = __webpack_require__('MvwC')
-      var cel = __webpack_require__('Hsns')
-      var global = __webpack_require__('5T2Y')
-      var process = global.process
-      var setTask = global.setImmediate
-      var clearTask = global.clearImmediate
-      var MessageChannel = global.MessageChannel
-      var Dispatch = global.Dispatch
-      var counter = 0
-      var queue = {}
-      var ONREADYSTATECHANGE = 'onreadystatechange'
-      var defer, channel, port
-      var run = function() {
-        var id = +this
-        // eslint-disable-next-line no-prototype-builtins
-        if (queue.hasOwnProperty(id)) {
-          var fn = queue[id]
-          delete queue[id]
-          fn()
-        }
-      }
-      var listener = function(event) {
-        run.call(event.data)
-      }
-      // Node.js 0.9+ & IE10+ has setImmediate, otherwise:
-      if (!setTask || !clearTask) {
-        setTask = function setImmediate(fn) {
-          var args = []
-          var i = 1
-          while (arguments.length > i) args.push(arguments[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) {
-          delete queue[id]
-        }
-        // Node.js 0.8-
-        if (__webpack_require__('a0xu')(process) == 'process') {
-          defer = function(id) {
-            process.nextTick(ctx(run, id, 1))
-          }
-          // Sphere (JS game engine) Dispatch API
-        } else if (Dispatch && Dispatch.now) {
-          defer = function(id) {
-            Dispatch.now(ctx(run, id, 1))
-          }
-          // Browsers with MessageChannel, includes WebWorkers
-        } else if (MessageChannel) {
-          channel = new MessageChannel()
-          port = channel.port2
-          channel.port1.onmessage = listener
-          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', listener, 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,
-      }
-
-      /***/
-    },
-
-    /***/ RDmV: /***/ function(module, exports) {
-      module.exports = function(exec) {
-        try {
-          return { e: false, v: exec() }
-        } catch (e) {
-          return { e: true, v: e }
-        }
-      }
-
-      /***/
-    },
-
     /***/ Rp86: /***/ function(module, exports, __webpack_require__) {
       __webpack_require__('bBy9')
       __webpack_require__('FlQf')
@@ -2317,43 +1821,6 @@
       /***/
     },
 
-    /***/ ZW5q: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      // 25.4.1.5 NewPromiseCapability(C)
-      var aFunction = __webpack_require__('eaoh')
-
-      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(resolve)
-        this.reject = aFunction(reject)
-      }
-
-      module.exports.f = function(C) {
-        return new PromiseCapability(C)
-      }
-
-      /***/
-    },
-
-    /***/ aW7e: /***/ function(module, exports, __webpack_require__) {
-      __webpack_require__('wgeU')
-      __webpack_require__('FlQf')
-      __webpack_require__('bBy9')
-      __webpack_require__('JMW+')
-      __webpack_require__('PBE1')
-      __webpack_require__('Q/yX')
-      module.exports = __webpack_require__('WEpk').Promise
-
-      /***/
-    },
-
     /***/ b3CU: /***/ function(module, exports, __webpack_require__) {
       var _Reflect$construct = __webpack_require__('pbKT')
 
@@ -2531,12 +1998,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ eVuF: /***/ function(module, exports, __webpack_require__) {
-      module.exports = __webpack_require__('aW7e')
-
-      /***/
-    },
-
     /***/ elyg: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
@@ -2548,7 +2009,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
       var _Object$assign = __webpack_require__('Qetd')
 
-      var _Promise = __webpack_require__('eVuF')
+      var _Promise = __webpack_require__('21Wz')
 
       var _classCallCheck = __webpack_require__('/HRN')
 
@@ -4945,85 +4406,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ q6LJ: /***/ function(module, exports, __webpack_require__) {
-      var global = __webpack_require__('5T2Y')
-      var macrotask = __webpack_require__('QXhf').set
-      var Observer = global.MutationObserver || global.WebKitMutationObserver
-      var process = global.process
-      var Promise = global.Promise
-      var isNode = __webpack_require__('a0xu')(process) == 'process'
-
-      module.exports = function() {
-        var head, last, notify
-
-        var flush = function() {
-          var parent, fn
-          if (isNode && (parent = process.domain)) parent.exit()
-          while (head) {
-            fn = head.fn
-            head = head.next
-            try {
-              fn()
-            } catch (e) {
-              if (head) notify()
-              else last = undefined
-              throw e
-            }
-          }
-          last = undefined
-          if (parent) parent.enter()
-        }
-
-        // Node.js
-        if (isNode) {
-          notify = function() {
-            process.nextTick(flush)
-          }
-          // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339
-        } else if (
-          Observer &&
-          !(global.navigator && global.navigator.standalone)
-        ) {
-          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 && Promise.resolve) {
-          // Promise.resolve without an argument throws an error in LG WebOS 2
-          var promise = Promise.resolve(undefined)
-          notify = function() {
-            promise.then(flush)
-          }
-          // for other environments - macrotask based on:
-          // - setImmediate
-          // - MessageChannel
-          // - window.postMessag
-          // - onreadystatechange
-          // - setTimeout
-        } else {
-          notify = function() {
-            // strange IE + webpack dev server bug - use .call(global)
-            macrotask.call(global, flush)
-          }
-        }
-
-        return function(fn) {
-          var task = { fn: fn, next: undefined }
-          if (last) last.next = task
-          if (!head) {
-            head = task
-            notify()
-          }
-          last = task
-        }
-      }
-
-      /***/
-    },
-
     /***/ qOIg: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
@@ -5083,15 +4465,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ vBP9: /***/ function(module, exports, __webpack_require__) {
-      var global = __webpack_require__('5T2Y')
-      var navigator = global.navigator
-
-      module.exports = (navigator && navigator.userAgent) || ''
-
-      /***/
-    },
-
     /***/ wYmx: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
@@ -5152,22 +4525,5 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
       /***/
     },
-
-    /***/ zXhZ: /***/ function(module, exports, __webpack_require__) {
-      var anObject = __webpack_require__('5K7Z')
-      var isObject = __webpack_require__('93I4')
-      var newPromiseCapability = __webpack_require__('ZW5q')
-
-      module.exports = function(C, x) {
-        anObject(C)
-        if (isObject(x) && x.constructor === C) return x
-        var promiseCapability = newPromiseCapability.f(C)
-        var resolve = promiseCapability.resolve
-        resolve(x)
-        return promiseCapability.promise
-      }
-
-      /***/
-    },
   },
 ])
Diff for de003c3a9d30..d3.module.js
@@ -89,6 +89,14 @@
       /***/
     },
 
+    /***/ '21Wz': /***/ function(module, exports, __webpack_require__) {
+      'use strict'
+      module.exports = Promise
+      module.exports.default = Promise
+
+      /***/
+    },
+
     /***/ '2Nb0': /***/ function(module, exports, __webpack_require__) {
       __webpack_require__('FlQf')
       __webpack_require__('bBy9')
@@ -274,22 +282,6 @@
       /***/
     },
 
-    /***/ '8gHz': /***/ function(module, exports, __webpack_require__) {
-      // 7.3.20 SpeciesConstructor(O, defaultConstructor)
-      var anObject = __webpack_require__('5K7Z')
-      var aFunction = __webpack_require__('eaoh')
-      var SPECIES = __webpack_require__('UWiX')('species')
-      module.exports = function(O, D) {
-        var C = anObject(O).constructor
-        var S
-        return C === undefined || (S = anObject(C)[SPECIES]) == undefined
-          ? D
-          : aFunction(S)
-      }
-
-      /***/
-    },
-
     /***/ A5Xg: /***/ function(module, exports, __webpack_require__) {
       // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
       var toIObject = __webpack_require__('NsO/')
@@ -1958,363 +1950,12 @@
       /***/
     },
 
-    /***/ 'JMW+': /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      var LIBRARY = __webpack_require__('uOPS')
-      var global = __webpack_require__('5T2Y')
-      var ctx = __webpack_require__('2GTP')
-      var classof = __webpack_require__('QMMT')
-      var $export = __webpack_require__('Y7ZC')
-      var isObject = __webpack_require__('93I4')
-      var aFunction = __webpack_require__('eaoh')
-      var anInstance = __webpack_require__('EXMj')
-      var forOf = __webpack_require__('oioR')
-      var speciesConstructor = __webpack_require__('8gHz')
-      var task = __webpack_require__('QXhf').set
-      var microtask = __webpack_require__('q6LJ')()
-      var newPromiseCapabilityModule = __webpack_require__('ZW5q')
-      var perform = __webpack_require__('RDmV')
-      var userAgent = __webpack_require__('vBP9')
-      var promiseResolve = __webpack_require__('zXhZ')
-      var PROMISE = 'Promise'
-      var TypeError = global.TypeError
-      var process = global.process
-      var versions = process && process.versions
-      var v8 = (versions && versions.v8) || ''
-      var $Promise = global[PROMISE]
-      var isNode = classof(process) == 'process'
-      var empty = function() {
-        /* empty */
-      }
-      var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper
-      var newPromiseCapability = (newGenericPromiseCapability =
-        newPromiseCapabilityModule.f)
-
-      var USE_NATIVE = !!(function() {
-        try {
-          // correct subclassing with @@species support
-          var promise = $Promise.resolve(1)
-          var FakePromise = ((promise.constructor = {})[
-            __webpack_require__('UWiX')('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 &&
-            // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
-            // https://bugs.chromium.org/p/chromium/issues/detail?id=830565
-            // we can't detect it synchronously, so just check versions
-            v8.indexOf('6.6') !== 0 &&
-            userAgent.indexOf('Chrome/66') === -1
-          )
-        } catch (e) {
-          /* empty */
-        }
-      })()
-
-      // helpers
-      var isThenable = function(it) {
-        var then
-        return isObject(it) && typeof (then = it.then) == 'function'
-          ? then
-          : false
-      }
-      var notify = function(promise, isReject) {
-        if (promise._n) return
-        promise._n = true
-        var chain = promise._c
-        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, exited
-            try {
-              if (handler) {
-                if (!ok) {
-                  if (promise._h == 2) onHandleUnhandled(promise)
-                  promise._h = 1
-                }
-                if (handler === true) result = value
-                else {
-                  if (domain) domain.enter()
-                  result = handler(value) // may throw
-                  if (domain) {
-                    domain.exit()
-                    exited = true
-                  }
-                }
-                if (result === reaction.promise) {
-                  reject(TypeError('Promise-chain cycle'))
-                } else if ((then = isThenable(result))) {
-                  then.call(result, resolve, reject)
-                } else resolve(result)
-              } else reject(value)
-            } catch (e) {
-              if (domain && !exited) domain.exit()
-              reject(e)
-            }
-          }
-          while (chain.length > i) run(chain[i++]) // variable length - can't use forEach
-          promise._c = []
-          promise._n = false
-          if (isReject && !promise._h) onUnhandled(promise)
-        })
-      }
-      var onUnhandled = function(promise) {
-        task.call(global, function() {
-          var value = promise._v
-          var unhandled = isUnhandled(promise)
-          var result, handler, console
-          if (unhandled) {
-            result = perform(function() {
-              if (isNode) {
-                process.emit('unhandledRejection', value, promise)
-              } else if ((handler = global.onunhandledrejection)) {
-                handler({ promise: promise, reason: value })
-              } else if ((console = global.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 (unhandled && result.e) throw result.v
-        })
-      }
-      var isUnhandled = function(promise) {
-        return promise._h !== 1 && (promise._a || promise._c).length === 0
-      }
-      var onHandleUnhandled = function(promise) {
-        task.call(global, function() {
-          var handler
-          if (isNode) {
-            process.emit('rejectionHandled', promise)
-          } else if ((handler = global.onrejectionhandled)) {
-            handler({ promise: promise, reason: promise._v })
-          }
-        })
-      }
-      var $reject = function(value) {
-        var promise = this
-        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()
-        notify(promise, true)
-      }
-      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("Promise can't be resolved itself")
-          if ((then = isThenable(value))) {
-            microtask(function() {
-              var wrapper = { _w: promise, _d: false } // wrap
-              try {
-                then.call(
-                  value,
-                  ctx($resolve, wrapper, 1),
-                  ctx($reject, wrapper, 1)
-                )
-              } catch (e) {
-                $reject.call(wrapper, e)
-              }
-            })
-          } else {
-            promise._v = value
-            promise._s = 1
-            notify(promise, false)
-          }
-        } catch (e) {
-          $reject.call({ _w: promise, _d: false }, e) // wrap
-        }
-      }
-
-      // constructor polyfill
-      if (!USE_NATIVE) {
-        // 25.4.3.1 Promise(executor)
-        $Promise = function Promise(executor) {
-          anInstance(this, $Promise, PROMISE, '_h')
-          aFunction(executor)
-          Internal.call(this)
-          try {
-            executor(ctx($resolve, this, 1), ctx($reject, this, 1))
-          } catch (err) {
-            $reject.call(this, err)
-          }
-        }
-        // 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
-          this._d = false // <- done
-          this._v = undefined // <- value
-          this._h = 0 // <- rejection state, 0 - default, 1 - handled, 2 - unhandled
-          this._n = false // <- notify
-        }
-        Internal.prototype = __webpack_require__('XJU/')($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
-            reaction.domain = isNode ? process.domain : undefined
-            this._c.push(reaction)
-            if (this._a) this._a.push(reaction)
-            if (this._s) notify(this, false)
-            return reaction.promise
-          },
-          // 25.4.5.1 Promise.prototype.catch(onRejected)
-          catch: function(onRejected) {
-            return this.then(undefined, onRejected)
-          },
-        })
-        OwnPromiseCapability = function() {
-          var promise = new Internal()
-          this.promise = promise
-          this.resolve = ctx($resolve, promise, 1)
-          this.reject = ctx($reject, promise, 1)
-        }
-        newPromiseCapabilityModule.f = newPromiseCapability = function(C) {
-          return C === $Promise || C === Wrapper
-            ? new OwnPromiseCapability(C)
-            : newGenericPromiseCapability(C)
-        }
-      }
-
-      $export($export.G + $export.W + $export.F * !USE_NATIVE, {
-        Promise: $Promise,
-      })
-      __webpack_require__('RfKB')($Promise, PROMISE)
-      __webpack_require__('TJWN')(PROMISE)
-      Wrapper = __webpack_require__('WEpk')[PROMISE]
-
-      // statics
-      $export($export.S + $export.F * !USE_NATIVE, PROMISE, {
-        // 25.4.4.5 Promise.reject(r)
-        reject: function reject(r) {
-          var capability = newPromiseCapability(this)
-          var $$reject = capability.reject
-          $$reject(r)
-          return capability.promise
-        },
-      })
-      $export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {
-        // 25.4.4.6 Promise.resolve(x)
-        resolve: function resolve(x) {
-          return promiseResolve(
-            LIBRARY && this === Wrapper ? $Promise : this,
-            x
-          )
-        },
-      })
-      $export(
-        $export.S +
-          $export.F *
-            !(
-              USE_NATIVE &&
-              __webpack_require__('TuGD')(function(iter) {
-                $Promise.all(iter)['catch'](empty)
-              })
-            ),
-        PROMISE,
-        {
-          // 25.4.4.1 Promise.all(iterable)
-          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
-                  values[$index] = value
-                  --remaining || resolve(values)
-                }, reject)
-              })
-              --remaining || resolve(values)
-            })
-            if (result.e) reject(result.v)
-            return capability.promise
-          },
-          // 25.4.4.4 Promise.race(iterable)
-          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 (result.e) reject(result.v)
-            return capability.promise
-          },
-        }
-      )
-
-      /***/
-    },
-
     /***/ 'Jo+v': /***/ function(module, exports, __webpack_require__) {
       module.exports = __webpack_require__('/eQG')
 
       /***/
     },
 
-    /***/ MCSJ: /***/ function(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)
-      }
-
-      /***/
-    },
-
     /***/ Mqbl: /***/ function(module, exports, __webpack_require__) {
       // 19.1.2.14 Object.keys(O)
       var toObject = __webpack_require__('JB68')
@@ -2431,157 +2072,6 @@
       /***/
     },
 
-    /***/ PBE1: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-      // https://github.com/tc39/proposal-promise-finally
-
-      var $export = __webpack_require__('Y7ZC')
-      var core = __webpack_require__('WEpk')
-      var global = __webpack_require__('5T2Y')
-      var speciesConstructor = __webpack_require__('8gHz')
-      var promiseResolve = __webpack_require__('zXhZ')
-
-      $export($export.P + $export.R, 'Promise', {
-        finally: function(onFinally) {
-          var C = speciesConstructor(this, core.Promise || global.Promise)
-          var isFunction = typeof onFinally == 'function'
-          return this.then(
-            isFunction
-              ? function(x) {
-                  return promiseResolve(C, onFinally()).then(function() {
-                    return x
-                  })
-                }
-              : onFinally,
-            isFunction
-              ? function(e) {
-                  return promiseResolve(C, onFinally()).then(function() {
-                    throw e
-                  })
-                }
-              : onFinally
-          )
-        },
-      })
-
-      /***/
-    },
-
-    /***/ 'Q/yX': /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      // https://github.com/tc39/proposal-promise-try
-      var $export = __webpack_require__('Y7ZC')
-      var newPromiseCapability = __webpack_require__('ZW5q')
-      var perform = __webpack_require__('RDmV')
-
-      $export($export.S, 'Promise', {
-        try: function(callbackfn) {
-          var promiseCapability = newPromiseCapability.f(this)
-          var result = perform(callbackfn)
-          ;(result.e ? promiseCapability.reject : promiseCapability.resolve)(
-            result.v
-          )
-          return promiseCapability.promise
-        },
-      })
-
-      /***/
-    },
-
-    /***/ QXhf: /***/ function(module, exports, __webpack_require__) {
-      var ctx = __webpack_require__('2GTP')
-      var invoke = __webpack_require__('MCSJ')
-      var html = __webpack_require__('MvwC')
-      var cel = __webpack_require__('Hsns')
-      var global = __webpack_require__('5T2Y')
-      var process = global.process
-      var setTask = global.setImmediate
-      var clearTask = global.clearImmediate
-      var MessageChannel = global.MessageChannel
-      var Dispatch = global.Dispatch
-      var counter = 0
-      var queue = {}
-      var ONREADYSTATECHANGE = 'onreadystatechange'
-      var defer, channel, port
-      var run = function() {
-        var id = +this
-        // eslint-disable-next-line no-prototype-builtins
-        if (queue.hasOwnProperty(id)) {
-          var fn = queue[id]
-          delete queue[id]
-          fn()
-        }
-      }
-      var listener = function(event) {
-        run.call(event.data)
-      }
-      // Node.js 0.9+ & IE10+ has setImmediate, otherwise:
-      if (!setTask || !clearTask) {
-        setTask = function setImmediate(fn) {
-          var args = []
-          var i = 1
-          while (arguments.length > i) args.push(arguments[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) {
-          delete queue[id]
-        }
-        // Node.js 0.8-
-        if (__webpack_require__('a0xu')(process) == 'process') {
-          defer = function(id) {
-            process.nextTick(ctx(run, id, 1))
-          }
-          // Sphere (JS game engine) Dispatch API
-        } else if (Dispatch && Dispatch.now) {
-          defer = function(id) {
-            Dispatch.now(ctx(run, id, 1))
-          }
-          // Browsers with MessageChannel, includes WebWorkers
-        } else if (MessageChannel) {
-          channel = new MessageChannel()
-          port = channel.port2
-          channel.port1.onmessage = listener
-          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', listener, 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,
-      }
-
-      /***/
-    },
-
     /***/ 'R+7+': /***/ function(module, exports, __webpack_require__) {
       // all enumerable object keys, includes symbols
       var getKeys = __webpack_require__('w6GO')
@@ -2604,63 +2094,12 @@
       /***/
     },
 
-    /***/ RDmV: /***/ function(module, exports) {
-      module.exports = function(exec) {
-        try {
-          return { e: false, v: exec() }
-        } catch (e) {
-          return { e: true, v: e }
-        }
-      }
-
-      /***/
-    },
-
     /***/ SqZg: /***/ function(module, exports, __webpack_require__) {
       module.exports = __webpack_require__('3GJH')
 
       /***/
     },
 
-    /***/ TuGD: /***/ function(module, exports, __webpack_require__) {
-      var ITERATOR = __webpack_require__('UWiX')('iterator')
-      var SAFE_CLOSING = false
-
-      try {
-        var riter = [7][ITERATOR]()
-        riter['return'] = function() {
-          SAFE_CLOSING = true
-        }
-        // eslint-disable-next-line no-throw-literal
-        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]
-          var iter = arr[ITERATOR]()
-          iter.next = function() {
-            return { done: (safe = true) }
-          }
-          arr[ITERATOR] = function() {
-            return iter
-          }
-          exec(arr)
-        } catch (e) {
-          /* empty */
-        }
-        return safe
-      }
-
-      /***/
-    },
-
     /***/ XVgq: /***/ function(module, exports, __webpack_require__) {
       module.exports = __webpack_require__('2Nb0')
 
@@ -2743,31 +2182,6 @@
       /***/
     },
 
-    /***/ ZW5q: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      // 25.4.1.5 NewPromiseCapability(C)
-      var aFunction = __webpack_require__('eaoh')
-
-      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(resolve)
-        this.reject = aFunction(reject)
-      }
-
-      module.exports.f = function(C) {
-        return new PromiseCapability(C)
-      }
-
-      /***/
-    },
-
     /***/ Zxgi: /***/ function(module, exports, __webpack_require__) {
       var global = __webpack_require__('5T2Y')
       var core = __webpack_require__('WEpk')
@@ -2784,18 +2198,6 @@
       /***/
     },
 
-    /***/ aW7e: /***/ function(module, exports, __webpack_require__) {
-      __webpack_require__('wgeU')
-      __webpack_require__('FlQf')
-      __webpack_require__('bBy9')
-      __webpack_require__('JMW+')
-      __webpack_require__('PBE1')
-      __webpack_require__('Q/yX')
-      module.exports = __webpack_require__('WEpk').Promise
-
-      /***/
-    },
-
     /***/ adOz: /***/ function(module, exports, __webpack_require__) {
       __webpack_require__('Zxgi')('asyncIterator')
 
@@ -2884,12 +2286,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ eVuF: /***/ function(module, exports, __webpack_require__) {
-      module.exports = __webpack_require__('aW7e')
-
-      /***/
-    },
-
     /***/ elyg: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
@@ -2897,7 +2293,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
       var _Object$assign = __webpack_require__('Qetd')
 
-      var _Promise = __webpack_require__('eVuF')
+      var _Promise = __webpack_require__('21Wz')
 
       var _Object$defineProperty = __webpack_require__('hfKm')
 
@@ -4303,85 +3699,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ q6LJ: /***/ function(module, exports, __webpack_require__) {
-      var global = __webpack_require__('5T2Y')
-      var macrotask = __webpack_require__('QXhf').set
-      var Observer = global.MutationObserver || global.WebKitMutationObserver
-      var process = global.process
-      var Promise = global.Promise
-      var isNode = __webpack_require__('a0xu')(process) == 'process'
-
-      module.exports = function() {
-        var head, last, notify
-
-        var flush = function() {
-          var parent, fn
-          if (isNode && (parent = process.domain)) parent.exit()
-          while (head) {
-            fn = head.fn
-            head = head.next
-            try {
-              fn()
-            } catch (e) {
-              if (head) notify()
-              else last = undefined
-              throw e
-            }
-          }
-          last = undefined
-          if (parent) parent.enter()
-        }
-
-        // Node.js
-        if (isNode) {
-          notify = function() {
-            process.nextTick(flush)
-          }
-          // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339
-        } else if (
-          Observer &&
-          !(global.navigator && global.navigator.standalone)
-        ) {
-          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 && Promise.resolve) {
-          // Promise.resolve without an argument throws an error in LG WebOS 2
-          var promise = Promise.resolve(undefined)
-          notify = function() {
-            promise.then(flush)
-          }
-          // for other environments - macrotask based on:
-          // - setImmediate
-          // - MessageChannel
-          // - window.postMessag
-          // - onreadystatechange
-          // - setTimeout
-        } else {
-          notify = function() {
-            // strange IE + webpack dev server bug - use .call(global)
-            macrotask.call(global, flush)
-          }
-        }
-
-        return function(fn) {
-          var task = { fn: fn, next: undefined }
-          if (last) last.next = task
-          if (!head) {
-            head = task
-            notify()
-          }
-          last = task
-        }
-      }
-
-      /***/
-    },
-
     /***/ qOIg: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
@@ -4434,15 +3751,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ vBP9: /***/ function(module, exports, __webpack_require__) {
-      var global = __webpack_require__('5T2Y')
-      var navigator = global.navigator
-
-      module.exports = (navigator && navigator.userAgent) || ''
-
-      /***/
-    },
-
     /***/ vwuL: /***/ function(module, exports, __webpack_require__) {
       var pIE = __webpack_require__('NV0k')
       var createDesc = __webpack_require__('rr1i')
@@ -4500,23 +3808,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ zXhZ: /***/ function(module, exports, __webpack_require__) {
-      var anObject = __webpack_require__('5K7Z')
-      var isObject = __webpack_require__('93I4')
-      var newPromiseCapability = __webpack_require__('ZW5q')
-
-      module.exports = function(C, x) {
-        anObject(C)
-        if (isObject(x) && x.constructor === C) return x
-        var promiseCapability = newPromiseCapability.f(C)
-        var resolve = promiseCapability.resolve
-        resolve(x)
-        return promiseCapability.promise
-      }
-
-      /***/
-    },
-
     /***/ zn7N: /***/ function(module, exports, __webpack_require__) {
       // most Object methods by ES6 should accept primitives
       var $export = __webpack_require__('Y7ZC')
Diff for main-HASH.js
@@ -65,7 +65,7 @@
     /***/ DqTX: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
-      var _Promise = __webpack_require__('eVuF')
+      var _Promise = __webpack_require__('21Wz')
 
       var _classCallCheck = __webpack_require__('/HRN')
 
@@ -255,7 +255,7 @@
 
       var _regeneratorRuntime = __webpack_require__('ln6h')
 
-      var _Promise = __webpack_require__('eVuF')
+      var _Promise = __webpack_require__('21Wz')
 
       var _classCallCheck = __webpack_require__('/HRN')
 
@@ -311,8 +311,8 @@
       var _isDynamic = __webpack_require__('/jkW')
       /* global location */
 
-      if (!window.Promise) {
-        window.Promise = __webpack_require__('eVuF')
+      if (!window.Promise.prototype['finally']) {
+        window.Promise.prototype['finally'] = __webpack_require__('zrsZ')
       }
 
       var data = JSON.parse(
@@ -1176,7 +1176,7 @@
 
       var _createClass = __webpack_require__('WaGi')
 
-      var _Promise = __webpack_require__('eVuF')
+      var _Promise = __webpack_require__('21Wz')
 
       var _interopRequireDefault = __webpack_require__('KI45')
 
@@ -1517,6 +1517,27 @@
 
       /***/
     },
+
+    /***/ zrsZ: /***/ function(module, exports) {
+      Promise.prototype.finally = function(n) {
+        if ('function' != typeof n) return this.then(n, n)
+        var t = this.constructor || Promise
+        return this.then(
+          function(r) {
+            return t.resolve(n()).then(function() {
+              return r
+            })
+          },
+          function(r) {
+            return t.resolve(n()).then(function() {
+              throw r
+            })
+          }
+        )
+      }
+
+      /***/
+    },
   },
   [['BMP1', 0, 2, 1, 3, 4]],
 ])
Diff for main-HASH.module.js
@@ -19,7 +19,7 @@
     /***/ DqTX: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
-      var _Promise = __webpack_require__('eVuF')
+      var _Promise = __webpack_require__('21Wz')
 
       exports.__esModule = true
       exports.default = void 0
@@ -170,7 +170,7 @@
     /***/ IKlv: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
-      var _Promise = __webpack_require__('eVuF')
+      var _Promise = __webpack_require__('21Wz')
 
       var _interopRequireWildcard3 = __webpack_require__('5Uuq')
 
@@ -212,8 +212,8 @@
       var _isDynamic = __webpack_require__('/jkW')
       /* global location */
 
-      if (!window.Promise) {
-        window.Promise = __webpack_require__('eVuF')
+      if (!window.Promise.prototype.finally) {
+        window.Promise.prototype.finally = __webpack_require__('zrsZ')
       }
 
       var data = JSON.parse(
@@ -758,7 +758,7 @@
     /***/ zmvN: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
-      var _Promise = __webpack_require__('eVuF')
+      var _Promise = __webpack_require__('21Wz')
 
       var _interopRequireDefault = __webpack_require__('KI45')
 
@@ -1047,6 +1047,27 @@
 
       /***/
     },
+
+    /***/ zrsZ: /***/ function(module, exports) {
+      Promise.prototype.finally = function(n) {
+        if ('function' != typeof n) return this.then(n, n)
+        var t = this.constructor || Promise
+        return this.then(
+          function(r) {
+            return t.resolve(n()).then(function() {
+              return r
+            })
+          },
+          function(r) {
+            return t.resolve(n()).then(function() {
+              throw r
+            })
+          }
+        )
+      }
+
+      /***/
+    },
   },
   [['BMP1', 0, 1, 2, 3]],
 ])
Diff for polyfills-HASH.js
@@ -1,6 +1,516 @@
 ;(window['webpackJsonp'] = window['webpackJsonp'] || []).push([
   [13],
   {
+    /***/ '/pFH': /***/ function(
+      module,
+      __webpack_exports__,
+      __webpack_require__
+    ) {
+      'use strict'
+      /**
+       * @this {Promise}
+       */
+      function finallyConstructor(callback) {
+        var constructor = this.constructor
+        return this.then(
+          function(value) {
+            // @ts-ignore
+            return constructor.resolve(callback()).then(function() {
+              return value
+            })
+          },
+          function(reason) {
+            // @ts-ignore
+            return constructor.resolve(callback()).then(function() {
+              // @ts-ignore
+              return constructor.reject(reason)
+            })
+          }
+        )
+      }
+
+      /* harmony default export */ __webpack_exports__['a'] = finallyConstructor
+
+      /***/
+    },
+
+    /***/ '8oxB': /***/ function(module, exports) {
+      // shim for using process in browser
+      var process = (module.exports = {})
+
+      // cached from whatever global is present so that test runners that stub it
+      // don't break things.  But we need to wrap it in a try catch in case it is
+      // wrapped in strict mode code which doesn't define any globals.  It's inside a
+      // function because try/catches deoptimize in certain engines.
+
+      var cachedSetTimeout
+      var cachedClearTimeout
+
+      function defaultSetTimout() {
+        throw new Error('setTimeout has not been defined')
+      }
+      function defaultClearTimeout() {
+        throw new Error('clearTimeout has not been defined')
+      }
+      ;(function() {
+        try {
+          if (typeof setTimeout === 'function') {
+            cachedSetTimeout = setTimeout
+          } else {
+            cachedSetTimeout = defaultSetTimout
+          }
+        } catch (e) {
+          cachedSetTimeout = defaultSetTimout
+        }
+        try {
+          if (typeof clearTimeout === 'function') {
+            cachedClearTimeout = clearTimeout
+          } else {
+            cachedClearTimeout = defaultClearTimeout
+          }
+        } catch (e) {
+          cachedClearTimeout = defaultClearTimeout
+        }
+      })()
+      function runTimeout(fun) {
+        if (cachedSetTimeout === setTimeout) {
+          //normal enviroments in sane situations
+          return setTimeout(fun, 0)
+        }
+        // if setTimeout wasn't available but was latter defined
+        if (
+          (cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) &&
+          setTimeout
+        ) {
+          cachedSetTimeout = setTimeout
+          return setTimeout(fun, 0)
+        }
+        try {
+          // when when somebody has screwed with setTimeout but no I.E. maddness
+          return cachedSetTimeout(fun, 0)
+        } catch (e) {
+          try {
+            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
+            return cachedSetTimeout.call(null, fun, 0)
+          } catch (e) {
+            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
+            return cachedSetTimeout.call(this, fun, 0)
+          }
+        }
+      }
+      function runClearTimeout(marker) {
+        if (cachedClearTimeout === clearTimeout) {
+          //normal enviroments in sane situations
+          return clearTimeout(marker)
+        }
+        // if clearTimeout wasn't available but was latter defined
+        if (
+          (cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) &&
+          clearTimeout
+        ) {
+          cachedClearTimeout = clearTimeout
+          return clearTimeout(marker)
+        }
+        try {
+          // when when somebody has screwed with setTimeout but no I.E. maddness
+          return cachedClearTimeout(marker)
+        } catch (e) {
+          try {
+            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
+            return cachedClearTimeout.call(null, marker)
+          } catch (e) {
+            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
+            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
+            return cachedClearTimeout.call(this, marker)
+          }
+        }
+      }
+      var queue = []
+      var draining = false
+      var currentQueue
+      var queueIndex = -1
+
+      function cleanUpNextTick() {
+        if (!draining || !currentQueue) {
+          return
+        }
+        draining = false
+        if (currentQueue.length) {
+          queue = currentQueue.concat(queue)
+        } else {
+          queueIndex = -1
+        }
+        if (queue.length) {
+          drainQueue()
+        }
+      }
+
+      function drainQueue() {
+        if (draining) {
+          return
+        }
+        var timeout = runTimeout(cleanUpNextTick)
+        draining = true
+
+        var len = queue.length
+        while (len) {
+          currentQueue = queue
+          queue = []
+          while (++queueIndex < len) {
+            if (currentQueue) {
+              currentQueue[queueIndex].run()
+            }
+          }
+          queueIndex = -1
+          len = queue.length
+        }
+        currentQueue = null
+        draining = false
+        runClearTimeout(timeout)
+      }
+
+      process.nextTick = function(fun) {
+        var args = new Array(arguments.length - 1)
+        if (arguments.length > 1) {
+          for (var i = 1; i < arguments.length; i++) {
+            args[i - 1] = arguments[i]
+          }
+        }
+        queue.push(new Item(fun, args))
+        if (queue.length === 1 && !draining) {
+          runTimeout(drainQueue)
+        }
+      }
+
+      // v8 likes predictible objects
+      function Item(fun, array) {
+        this.fun = fun
+        this.array = array
+      }
+      Item.prototype.run = function() {
+        this.fun.apply(null, this.array)
+      }
+      process.title = 'browser'
+      process.browser = true
+      process.env = {}
+      process.argv = []
+      process.version = '' // empty string to avoid regexp issues
+      process.versions = {}
+
+      function noop() {}
+
+      process.on = noop
+      process.addListener = noop
+      process.once = noop
+      process.off = noop
+      process.removeListener = noop
+      process.removeAllListeners = noop
+      process.emit = noop
+      process.prependListener = noop
+      process.prependOnceListener = noop
+
+      process.listeners = function(name) {
+        return []
+      }
+
+      process.binding = function(name) {
+        throw new Error('process.binding is not supported')
+      }
+
+      process.cwd = function() {
+        return '/'
+      }
+      process.chdir = function(dir) {
+        throw new Error('process.chdir is not supported')
+      }
+      process.umask = function() {
+        return 0
+      }
+
+      /***/
+    },
+
+    /***/ 'B/eG': /***/ function(
+      module,
+      __webpack_exports__,
+      __webpack_require__
+    ) {
+      'use strict'
+      /* WEBPACK VAR INJECTION */ ;(function(setImmediate) {
+        /* harmony import */ var _finally__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
+          '/pFH'
+        )
+
+        // Store setTimeout reference so promise-polyfill will be unaffected by
+        // other code modifying setTimeout (like sinon.useFakeTimers())
+        var setTimeoutFunc = setTimeout
+
+        function isArray(x) {
+          return Boolean(x && typeof x.length !== 'undefined')
+        }
+
+        function noop() {}
+
+        // Polyfill for Function.prototype.bind
+        function bind(fn, thisArg) {
+          return function() {
+            fn.apply(thisArg, arguments)
+          }
+        }
+
+        /**
+         * @constructor
+         * @param {Function} fn
+         */
+        function Promise(fn) {
+          if (!(this instanceof Promise))
+            throw new TypeError('Promises must be constructed via new')
+          if (typeof fn !== 'function') throw new TypeError('not a function')
+          /** @type {!number} */
+          this._state = 0
+          /** @type {!boolean} */
+          this._handled = false
+          /** @type {Promise|undefined} */
+          this._value = undefined
+          /** @type {!Array<!Function>} */
+          this._deferreds = []
+
+          doResolve(fn, this)
+        }
+
+        function handle(self, deferred) {
+          while (self._state === 3) {
+            self = self._value
+          }
+          if (self._state === 0) {
+            self._deferreds.push(deferred)
+            return
+          }
+          self._handled = true
+          Promise._immediateFn(function() {
+            var cb =
+              self._state === 1 ? deferred.onFulfilled : deferred.onRejected
+            if (cb === null) {
+              ;(self._state === 1 ? resolve : reject)(
+                deferred.promise,
+                self._value
+              )
+              return
+            }
+            var ret
+            try {
+              ret = cb(self._value)
+            } catch (e) {
+              reject(deferred.promise, e)
+              return
+            }
+            resolve(deferred.promise, ret)
+          })
+        }
+
+        function resolve(self, newValue) {
+          try {
+            // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
+            if (newValue === self)
+              throw new TypeError('A promise cannot be resolved with itself.')
+            if (
+              newValue &&
+              (typeof newValue === 'object' || typeof newValue === 'function')
+            ) {
+              var then = newValue.then
+              if (newValue instanceof Promise) {
+                self._state = 3
+                self._value = newValue
+                finale(self)
+                return
+              } else if (typeof then === 'function') {
+                doResolve(bind(then, newValue), self)
+                return
+              }
+            }
+            self._state = 1
+            self._value = newValue
+            finale(self)
+          } catch (e) {
+            reject(self, e)
+          }
+        }
+
+        function reject(self, newValue) {
+          self._state = 2
+          self._value = newValue
+          finale(self)
+        }
+
+        function finale(self) {
+          if (self._state === 2 && self._deferreds.length === 0) {
+            Promise._immediateFn(function() {
+              if (!self._handled) {
+                Promise._unhandledRejectionFn(self._value)
+              }
+            })
+          }
+
+          for (var i = 0, len = self._deferreds.length; i < len; i++) {
+            handle(self, self._deferreds[i])
+          }
+          self._deferreds = null
+        }
+
+        /**
+         * @constructor
+         */
+        function Handler(onFulfilled, onRejected, promise) {
+          this.onFulfilled =
+            typeof onFulfilled === 'function' ? onFulfilled : null
+          this.onRejected = typeof onRejected === 'function' ? onRejected : null
+          this.promise = promise
+        }
+
+        /**
+         * Take a potentially misbehaving resolver function and make sure
+         * onFulfilled and onRejected are only called once.
+         *
+         * Makes no guarantees about asynchrony.
+         */
+        function doResolve(fn, self) {
+          var done = false
+          try {
+            fn(
+              function(value) {
+                if (done) return
+                done = true
+                resolve(self, value)
+              },
+              function(reason) {
+                if (done) return
+                done = true
+                reject(self, reason)
+              }
+            )
+          } catch (ex) {
+            if (done) return
+            done = true
+            reject(self, ex)
+          }
+        }
+
+        Promise.prototype['catch'] = function(onRejected) {
+          return this.then(null, onRejected)
+        }
+
+        Promise.prototype.then = function(onFulfilled, onRejected) {
+          // @ts-ignore
+          var prom = new this.constructor(noop)
+
+          handle(this, new Handler(onFulfilled, onRejected, prom))
+          return prom
+        }
+
+        Promise.prototype['finally'] =
+          _finally__WEBPACK_IMPORTED_MODULE_0__[/* default */ 'a']
+
+        Promise.all = function(arr) {
+          return new Promise(function(resolve, reject) {
+            if (!isArray(arr)) {
+              return reject(new TypeError('Promise.all accepts an array'))
+            }
+
+            var args = Array.prototype.slice.call(arr)
+            if (args.length === 0) return resolve([])
+            var remaining = args.length
+
+            function res(i, val) {
+              try {
+                if (
+                  val &&
+                  (typeof val === 'object' || typeof val === 'function')
+                ) {
+                  var then = val.then
+                  if (typeof then === 'function') {
+                    then.call(
+                      val,
+                      function(val) {
+                        res(i, val)
+                      },
+                      reject
+                    )
+                    return
+                  }
+                }
+                args[i] = val
+                if (--remaining === 0) {
+                  resolve(args)
+                }
+              } catch (ex) {
+                reject(ex)
+              }
+            }
+
+            for (var i = 0; i < args.length; i++) {
+              res(i, args[i])
+            }
+          })
+        }
+
+        Promise.resolve = function(value) {
+          if (
+            value &&
+            typeof value === 'object' &&
+            value.constructor === Promise
+          ) {
+            return value
+          }
+
+          return new Promise(function(resolve) {
+            resolve(value)
+          })
+        }
+
+        Promise.reject = function(value) {
+          return new Promise(function(resolve, reject) {
+            reject(value)
+          })
+        }
+
+        Promise.race = function(arr) {
+          return new Promise(function(resolve, reject) {
+            if (!isArray(arr)) {
+              return reject(new TypeError('Promise.race accepts an array'))
+            }
+
+            for (var i = 0, len = arr.length; i < len; i++) {
+              Promise.resolve(arr[i]).then(resolve, reject)
+            }
+          })
+        }
+
+        // Use polyfill for setImmediate for performance gains
+        Promise._immediateFn =
+          // @ts-ignore
+          (typeof setImmediate === 'function' &&
+            function(fn) {
+              // @ts-ignore
+              setImmediate(fn)
+            }) ||
+          function(fn) {
+            setTimeoutFunc(fn, 0)
+          }
+
+        Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {
+          if (typeof console !== 'undefined' && console) {
+            console.warn('Possible Unhandled Promise Rejection:', err) // eslint-disable-line no-console
+          }
+        }
+
+        /* harmony default export */ __webpack_exports__['a'] = Promise
+
+        /* WEBPACK VAR INJECTION */
+      }.call(this, __webpack_require__('URgk').setImmediate))
+
+      /***/
+    },
+
     /***/ GkXk: /***/ function(module, exports, __webpack_require__) {
       ;(function(global, factory) {
         true ? factory(exports) : undefined
@@ -1209,9 +1719,90 @@ object-assign
       /***/
     },
 
+    /***/ URgk: /***/ function(module, exports, __webpack_require__) {
+      /* WEBPACK VAR INJECTION */ ;(function(global) {
+        var scope =
+          (typeof global !== 'undefined' && global) ||
+          (typeof self !== 'undefined' && self) ||
+          window
+        var apply = Function.prototype.apply
+
+        // DOM APIs, for completeness
+
+        exports.setTimeout = function() {
+          return new Timeout(
+            apply.call(setTimeout, scope, arguments),
+            clearTimeout
+          )
+        }
+        exports.setInterval = function() {
+          return new Timeout(
+            apply.call(setInterval, scope, arguments),
+            clearInterval
+          )
+        }
+        exports.clearTimeout = exports.clearInterval = function(timeout) {
+          if (timeout) {
+            timeout.close()
+          }
+        }
+
+        function Timeout(id, clearFn) {
+          this._id = id
+          this._clearFn = clearFn
+        }
+        Timeout.prototype.unref = Timeout.prototype.ref = function() {}
+        Timeout.prototype.close = function() {
+          this._clearFn.call(scope, this._id)
+        }
+
+        // Does not start the time, just sets up the members needed.
+        exports.enroll = function(item, msecs) {
+          clearTimeout(item._idleTimeoutId)
+          item._idleTimeout = msecs
+        }
+
+        exports.unenroll = function(item) {
+          clearTimeout(item._idleTimeoutId)
+          item._idleTimeout = -1
+        }
+
+        exports._unrefActive = exports.active = function(item) {
+          clearTimeout(item._idleTimeoutId)
+
+          var msecs = item._idleTimeout
+          if (msecs >= 0) {
+            item._idleTimeoutId = setTimeout(function onTimeout() {
+              if (item._onTimeout) item._onTimeout()
+            }, msecs)
+          }
+        }
+
+        // setimmediate attaches itself to the global object
+        __webpack_require__('YBdB')
+        // On some exotic environments, it's not clear which object `setimmediate` was
+        // able to install onto.  Search each possibility in the same order as the
+        // `setimmediate` library.
+        exports.setImmediate =
+          (typeof self !== 'undefined' && self.setImmediate) ||
+          (typeof global !== 'undefined' && global.setImmediate) ||
+          (this && this.setImmediate)
+        exports.clearImmediate =
+          (typeof self !== 'undefined' && self.clearImmediate) ||
+          (typeof global !== 'undefined' && global.clearImmediate) ||
+          (this && this.clearImmediate)
+
+        /* WEBPACK VAR INJECTION */
+      }.call(this, __webpack_require__('yLpj')))
+
+      /***/
+    },
+
     /***/ XLER: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
+      __webpack_require__('aE5D')
+
       __webpack_require__('GkXk')
 
       __webpack_require__('T1qB')
@@ -1221,6 +1812,256 @@ object-assign
       /***/
     },
 
+    /***/ YBdB: /***/ function(module, exports, __webpack_require__) {
+      /* WEBPACK VAR INJECTION */ ;(function(global, process) {
+        ;(function(global, undefined) {
+          'use strict'
+
+          if (global.setImmediate) {
+            return
+          }
+
+          var nextHandle = 1 // Spec says greater than zero
+          var tasksByHandle = {}
+          var currentlyRunningATask = false
+          var doc = global.document
+          var registerImmediate
+
+          function setImmediate(callback) {
+            // Callback can either be a function or a string
+            if (typeof callback !== 'function') {
+              callback = new Function('' + callback)
+            }
+            // Copy function arguments
+            var args = new Array(arguments.length - 1)
+            for (var i = 0; i < args.length; i++) {
+              args[i] = arguments[i + 1]
+            }
+            // Store and register the task
+            var task = { callback: callback, args: args }
+            tasksByHandle[nextHandle] = task
+            registerImmediate(nextHandle)
+            return nextHandle++
+          }
+
+          function clearImmediate(handle) {
+            delete tasksByHandle[handle]
+          }
+
+          function run(task) {
+            var callback = task.callback
+            var args = task.args
+            switch (args.length) {
+              case 0:
+                callback()
+                break
+              case 1:
+                callback(args[0])
+                break
+              case 2:
+                callback(args[0], args[1])
+                break
+              case 3:
+                callback(args[0], args[1], args[2])
+                break
+              default:
+                callback.apply(undefined, args)
+                break
+            }
+          }
+
+          function runIfPresent(handle) {
+            // From the spec: "Wait until any invocations of this algorithm started before this one have completed."
+            // So if we're currently running a task, we'll need to delay this invocation.
+            if (currentlyRunningATask) {
+              // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a
+              // "too much recursion" error.
+              setTimeout(runIfPresent, 0, handle)
+            } else {
+              var task = tasksByHandle[handle]
+              if (task) {
+                currentlyRunningATask = true
+                try {
+                  run(task)
+                } finally {
+                  clearImmediate(handle)
+                  currentlyRunningATask = false
+                }
+              }
+            }
+          }
+
+          function installNextTickImplementation() {
+            registerImmediate = function(handle) {
+              process.nextTick(function() {
+                runIfPresent(handle)
+              })
+            }
+          }
+
+          function canUsePostMessage() {
+            // The test against `importScripts` prevents this implementation from being installed inside a web worker,
+            // where `global.postMessage` means something completely different and can't be used for this purpose.
+            if (global.postMessage && !global.importScripts) {
+              var postMessageIsAsynchronous = true
+              var oldOnMessage = global.onmessage
+              global.onmessage = function() {
+                postMessageIsAsynchronous = false
+              }
+              global.postMessage('', '*')
+              global.onmessage = oldOnMessage
+              return postMessageIsAsynchronous
+            }
+          }
+
+          function installPostMessageImplementation() {
+            // Installs an event handler on `global` for the `message` event: see
+            // * https://developer.mozilla.org/en/DOM/window.postMessage
+            // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages
+
+            var messagePrefix = 'setImmediate$' + Math.random() + '$'
+            var onGlobalMessage = function(event) {
+              if (
+                event.source === global &&
+                typeof event.data === 'string' &&
+                event.data.indexOf(messagePrefix) === 0
+              ) {
+                runIfPresent(+event.data.slice(messagePrefix.length))
+              }
+            }
+
+            if (global.addEventListener) {
+              global.addEventListener('message', onGlobalMessage, false)
+            } else {
+              global.attachEvent('onmessage', onGlobalMessage)
+            }
+
+            registerImmediate = function(handle) {
+              global.postMessage(messagePrefix + handle, '*')
+            }
+          }
+
+          function installMessageChannelImplementation() {
+            var channel = new MessageChannel()
+            channel.port1.onmessage = function(event) {
+              var handle = event.data
+              runIfPresent(handle)
+            }
+
+            registerImmediate = function(handle) {
+              channel.port2.postMessage(handle)
+            }
+          }
+
+          function installReadyStateChangeImplementation() {
+            var html = doc.documentElement
+            registerImmediate = function(handle) {
+              // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
+              // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
+              var script = doc.createElement('script')
+              script.onreadystatechange = function() {
+                runIfPresent(handle)
+                script.onreadystatechange = null
+                html.removeChild(script)
+                script = null
+              }
+              html.appendChild(script)
+            }
+          }
+
+          function installSetTimeoutImplementation() {
+            registerImmediate = function(handle) {
+              setTimeout(runIfPresent, 0, handle)
+            }
+          }
+
+          // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.
+          var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global)
+          attachTo = attachTo && attachTo.setTimeout ? attachTo : global
+
+          // Don't get fooled by e.g. browserify environments.
+          if ({}.toString.call(global.process) === '[object process]') {
+            // For Node.js before 0.9
+            installNextTickImplementation()
+          } else if (canUsePostMessage()) {
+            // For non-IE10 modern browsers
+            installPostMessageImplementation()
+          } else if (global.MessageChannel) {
+            // For web workers, where supported
+            installMessageChannelImplementation()
+          } else if (
+            doc &&
+            'onreadystatechange' in doc.createElement('script')
+          ) {
+            // For IE 6–8
+            installReadyStateChangeImplementation()
+          } else {
+            // For older browsers
+            installSetTimeoutImplementation()
+          }
+
+          attachTo.setImmediate = setImmediate
+          attachTo.clearImmediate = clearImmediate
+        })(
+          typeof self === 'undefined'
+            ? typeof global === 'undefined'
+              ? this
+              : global
+            : self
+        )
+
+        /* WEBPACK VAR INJECTION */
+      }.call(this, __webpack_require__('yLpj'), __webpack_require__('8oxB')))
+
+      /***/
+    },
+
+    /***/ aE5D: /***/ function(
+      module,
+      __webpack_exports__,
+      __webpack_require__
+    ) {
+      'use strict'
+      __webpack_require__.r(__webpack_exports__)
+      /* WEBPACK VAR INJECTION */ ;(function(global) {
+        /* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
+          'B/eG'
+        )
+        /* harmony import */ var _finally__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
+          '/pFH'
+        )
+
+        /** @suppress {undefinedVars} */
+        var globalNS = (function() {
+          // the only reliable means to get the global object is
+          // `Function('return this')()`
+          // However, this causes CSP violations in Chrome apps.
+          if (typeof self !== 'undefined') {
+            return self
+          }
+          if (typeof window !== 'undefined') {
+            return window
+          }
+          if (typeof global !== 'undefined') {
+            return global
+          }
+          throw new Error('unable to locate global object')
+        })()
+
+        if (!('Promise' in globalNS)) {
+          globalNS['Promise'] =
+            _index__WEBPACK_IMPORTED_MODULE_0__[/* default */ 'a']
+        } else if (!globalNS.Promise.prototype['finally']) {
+          globalNS.Promise.prototype['finally'] =
+            _finally__WEBPACK_IMPORTED_MODULE_1__[/* default */ 'a']
+        }
+
+        /* WEBPACK VAR INJECTION */
+      }.call(this, __webpack_require__('yLpj')))
+
+      /***/
+    },
+
     /***/ yLpj: /***/ function(module, exports) {
       var g
Diff for index.html
@@ -33,19 +33,19 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js"
+      href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.1ae218daf8d62b646817.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.90fd5fa01287552151d3.module.js"
+      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.8773371058f1611d79dd.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/runtime/main-4b4ea9d6783c4e4843be.module.js"
+      href="/_next/static/runtime/main-4d2736a3c00da6825a48.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -78,7 +78,7 @@
     ><script
       crossorigin="anonymous"
       nomodule=""
-      src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"
+      src="/_next/static/runtime/polyfills-0e66bd71d71c58a15235.js"
     ></script
     ><script
       async=""
@@ -139,37 +139,37 @@
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js"
+      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.8aab10c0ce60fda1f68c.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js"
+      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.1ae218daf8d62b646817.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
     ></script
     ><script
-      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.7f8e4c92f1de3035c8ae.js"
+      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.8a1b012375f3fc3d2116.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.90fd5fa01287552151d3.module.js"
+      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.8773371058f1611d79dd.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
     ></script
     ><script
-      src="/_next/static/runtime/main-0f0b179fd8c5a047537b.js"
+      src="/_next/static/runtime/main-cb8f5757aa567bff9d2b.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/runtime/main-4b4ea9d6783c4e4843be.module.js"
+      src="/_next/static/runtime/main-4d2736a3c00da6825a48.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for link.html
@@ -33,19 +33,19 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js"
+      href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.1ae218daf8d62b646817.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.90fd5fa01287552151d3.module.js"
+      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.8773371058f1611d79dd.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/runtime/main-4b4ea9d6783c4e4843be.module.js"
+      href="/_next/static/runtime/main-4d2736a3c00da6825a48.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -83,7 +83,7 @@
     ><script
       crossorigin="anonymous"
       nomodule=""
-      src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"
+      src="/_next/static/runtime/polyfills-0e66bd71d71c58a15235.js"
     ></script
     ><script
       async=""
@@ -144,37 +144,37 @@
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js"
+      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.8aab10c0ce60fda1f68c.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js"
+      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.1ae218daf8d62b646817.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
     ></script
     ><script
-      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.7f8e4c92f1de3035c8ae.js"
+      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.8a1b012375f3fc3d2116.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.90fd5fa01287552151d3.module.js"
+      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.8773371058f1611d79dd.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
     ></script
     ><script
-      src="/_next/static/runtime/main-0f0b179fd8c5a047537b.js"
+      src="/_next/static/runtime/main-cb8f5757aa567bff9d2b.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/runtime/main-4b4ea9d6783c4e4843be.module.js"
+      src="/_next/static/runtime/main-4d2736a3c00da6825a48.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for withRouter.html
@@ -33,19 +33,19 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js"
+      href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.1ae218daf8d62b646817.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.90fd5fa01287552151d3.module.js"
+      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.8773371058f1611d79dd.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/runtime/main-4b4ea9d6783c4e4843be.module.js"
+      href="/_next/static/runtime/main-4d2736a3c00da6825a48.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -78,7 +78,7 @@
     ><script
       crossorigin="anonymous"
       nomodule=""
-      src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"
+      src="/_next/static/runtime/polyfills-0e66bd71d71c58a15235.js"
     ></script
     ><script
       async=""
@@ -139,37 +139,37 @@
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js"
+      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.8aab10c0ce60fda1f68c.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js"
+      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.1ae218daf8d62b646817.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
     ></script
     ><script
-      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.7f8e4c92f1de3035c8ae.js"
+      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.8a1b012375f3fc3d2116.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.90fd5fa01287552151d3.module.js"
+      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.8773371058f1611d79dd.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
     ></script
     ><script
-      src="/_next/static/runtime/main-0f0b179fd8c5a047537b.js"
+      src="/_next/static/runtime/main-cb8f5757aa567bff9d2b.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/runtime/main-4b4ea9d6783c4e4843be.module.js"
+      src="/_next/static/runtime/main-4d2736a3c00da6825a48.module.js"
       async=""
       crossorigin="anonymous"
       type="module"

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
buildDuration 13s 13.3s ⚠️ +338ms
nodeModulesSize 48.9 MB 48.9 MB ⚠️ +44.6 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.js gzip 5.1 kB 5.19 kB ⚠️ +85 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB N/A N/A
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d57b.js gzip 16.1 kB N/A N/A
framework.HASH.js gzip 39.1 kB 39.1 kB
4952ddcd88e7..269d.js gzip N/A 4.53 kB N/A
de003c3a9d30..5ede.js gzip N/A 13.7 kB N/A
Overall change 69.8 kB 67.4 kB ⚠️ +85 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.module.js gzip 4.1 kB 4.18 kB ⚠️ +84 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB N/A N/A
de003c3a9d30..dule.js gzip 15 kB N/A N/A
framework.HA..dule.js gzip 39.1 kB 39.1 kB
4952ddcd88e7..dule.js gzip N/A 5.5 kB N/A
de003c3a9d30..dule.js gzip N/A 12.3 kB N/A
Overall change 64.5 kB 61.9 kB ⚠️ +84 B
Legacy Client Bundles (polyfills) Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
polyfills-HASH.js gzip 4.76 kB 7.14 kB ⚠️ +2.38 kB
Overall change 4.76 kB 7.14 kB ⚠️ +2.38 kB
Client Pages Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.26 kB ⚠️ +188 B
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.97 kB ⚠️ +74 B
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.94 kB ⚠️ +262 B
Client Pages Modern Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.14 kB ⚠️ +83 B
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.55 kB ⚠️ +83 B
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.39 kB ⚠️ +166 B
Client Build Manifests
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles Overall decrease ✓
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_error.js gzip 46.2 kB 46.2 kB -9 B
hooks.html gzip 1.05 kB 1.05 kB -4 B
index.js gzip 46.4 kB 46.4 kB -7 B
link.js gzip 71.9 kB 71.9 kB -8 B
routerDirect.js gzip 69.9 kB 69.9 kB -9 B
withRouter.js gzip 69.9 kB 69.9 kB -10 B
Overall change 305 kB 305 kB -47 B

Commit: b08c2a2

packages/next/build/babel/preset.ts Outdated Show resolved Hide resolved
packages/next/build/polyfills/promise.js Outdated Show resolved Hide resolved
packages/next/build/webpack-config.ts Outdated Show resolved Hide resolved
packages/next/client/index.js Outdated Show resolved Hide resolved
packages/next/client/polyfills.js Outdated Show resolved Hide resolved
packages/next/package.json Outdated Show resolved Hide resolved
@Timer Timer mentioned this pull request Jan 27, 2020
@Timer Timer changed the title Nomodule polyfills chunk [Experimental] Nomodule polyfills chunk Jan 30, 2020
@Timer Timer added this to the 9.2.2 milestone Jan 30, 2020
@ijjk
Copy link
Member

ijjk commented Jan 30, 2020

Stats from current PR

Default Server Mode (Decrease detected ✓)
General Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
buildDuration 10.6s 10.6s -39ms
nodeModulesSize 52.1 MB 52.1 MB ⚠️ +62.5 kB
Client Bundles (main, webpack, commons) Overall decrease ✓
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.js gzip 5.1 kB 5.1 kB -3 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d6ae.js gzip 16.2 kB 16.2 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 69.9 kB 69.9 kB -3 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.module.js gzip 4.1 kB 4.11 kB ⚠️ +3 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15.1 kB 15.1 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.6 kB 64.6 kB ⚠️ +3 B
Legacy Client Bundles (polyfills)
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
index.html gzip 1.02 kB 1.02 kB ⚠️ +1 B
link.html gzip 1.03 kB 1.03 kB ⚠️ +1 B
withRouter.html gzip 1.02 kB 1.02 kB
Overall change 3.07 kB 3.07 kB ⚠️ +2 B

Diffs

Diff for link.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-1375e52dc0a56e76fed5.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.316cffaf82e7d78bbb63.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-8acecacd105b41f02aee.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-1375e52dc0a56e76fed5.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-a2a8c4f1c394fecf687e.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.316cffaf82e7d78bbb63.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-36a2b79887f1b5f6d170.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-a2a8c4f1c394fecf687e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for index.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-1375e52dc0a56e76fed5.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.316cffaf82e7d78bbb63.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-8acecacd105b41f02aee.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-1375e52dc0a56e76fed5.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-a2a8c4f1c394fecf687e.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.316cffaf82e7d78bbb63.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-36a2b79887f1b5f6d170.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-a2a8c4f1c394fecf687e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for main-HASH.module.js
@@ -215,8 +215,15 @@ var _isDynamic = __webpack_require__("/jkW");
 /* global location */
 
 
-if (!window.Promise) {
-  window.Promise = __webpack_require__("eVuF");
+if (false) {} else {
+  // Polyfill Promise globally
+  // This is needed because Webpack's dynamic loading(common chunks) code
+  // depends on Promise.
+  // So, we need to polyfill it.
+  // See: https://webpack.js.org/guides/code-splitting/#dynamic-imports
+  if (!self.Promise) {
+    self.Promise = __webpack_require__("eVuF");
+  }
 }
 
 var data = JSON.parse(document.getElementById('__NEXT_DATA__').textContent);
Diff for main-HASH.js
@@ -243,8 +243,6 @@ exports.HeadManagerContext = React.createContext(null);
 
 var _regeneratorRuntime = __webpack_require__("ln6h");
 
-var _Promise = __webpack_require__("eVuF");
-
 var _classCallCheck = __webpack_require__("/HRN");
 
 var _createClass = __webpack_require__("WaGi");
@@ -257,6 +255,8 @@ var _inherits = __webpack_require__("N9n2");
 
 var _slicedToArray = __webpack_require__("8+Nu");
 
+var _Promise = __webpack_require__("eVuF");
+
 var _interopRequireWildcard3 = __webpack_require__("5Uuq");
 
 var _interopRequireDefault = __webpack_require__("KI45");
@@ -296,8 +296,15 @@ var _isDynamic = __webpack_require__("/jkW");
 /* global location */
 
 
-if (!window.Promise) {
-  window.Promise = __webpack_require__("eVuF");
+if (false) {} else {
+  // Polyfill Promise globally
+  // This is needed because Webpack's dynamic loading(common chunks) code
+  // depends on Promise.
+  // So, we need to polyfill it.
+  // See: https://webpack.js.org/guides/code-splitting/#dynamic-imports
+  if (!self.Promise) {
+    self.Promise = __webpack_require__("eVuF");
+  }
 }
 
 var data = JSON.parse(document.getElementById('__NEXT_DATA__').textContent);
Diff for withRouter.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-1375e52dc0a56e76fed5.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.316cffaf82e7d78bbb63.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-8acecacd105b41f02aee.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-1375e52dc0a56e76fed5.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-a2a8c4f1c394fecf687e.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.316cffaf82e7d78bbb63.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-36a2b79887f1b5f6d170.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-a2a8c4f1c394fecf687e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
buildDuration 11.7s 11s -727ms
nodeModulesSize 52.1 MB 52.1 MB ⚠️ +62.5 kB
Client Bundles (main, webpack, commons) Overall decrease ✓
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.js gzip 5.1 kB 5.1 kB -3 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d6ae.js gzip 16.2 kB 16.2 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 69.9 kB 69.9 kB -3 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.module.js gzip 4.1 kB 4.11 kB ⚠️ +3 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15.1 kB 15.1 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.6 kB 64.6 kB ⚠️ +3 B
Legacy Client Bundles (polyfills)
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_error.js gzip 46.6 kB 46.6 kB ⚠️ +2 B
404.html gzip 1.42 kB 1.42 kB
hooks.html gzip 1.05 kB 1.06 kB ⚠️ +2 B
index.js gzip 46.8 kB 46.8 kB ⚠️ +1 B
link.js gzip 72.4 kB 72.4 kB ⚠️ +3 B
routerDirect.js gzip 70.4 kB 70.4 kB ⚠️ +2 B
withRouter.js gzip 70.4 kB 70.5 kB ⚠️ +2 B
Overall change 309 kB 309 kB ⚠️ +12 B

Commit: 1d0f354

@ijjk
Copy link
Member

ijjk commented Jan 30, 2020

Stats from current PR

Default Server Mode (Decrease detected ✓)
General Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
buildDuration 12.8s 12.8s -43ms
nodeModulesSize 52.1 MB 52.1 MB ⚠️ +62.5 kB
Client Bundles (main, webpack, commons) Overall decrease ✓
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.js gzip 5.1 kB 5.1 kB -3 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d6ae.js gzip 16.2 kB 16.2 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 69.9 kB 69.9 kB -3 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.module.js gzip 4.1 kB 4.11 kB ⚠️ +3 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15.1 kB 15.1 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.6 kB 64.6 kB ⚠️ +3 B
Legacy Client Bundles (polyfills)
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
index.html gzip 1.02 kB 1.02 kB ⚠️ +1 B
link.html gzip 1.03 kB 1.03 kB ⚠️ +1 B
withRouter.html gzip 1.02 kB 1.02 kB
Overall change 3.07 kB 3.07 kB ⚠️ +2 B

Diffs

Diff for link.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-1375e52dc0a56e76fed5.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.316cffaf82e7d78bbb63.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-8acecacd105b41f02aee.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-1375e52dc0a56e76fed5.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-a2a8c4f1c394fecf687e.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.316cffaf82e7d78bbb63.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-36a2b79887f1b5f6d170.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-a2a8c4f1c394fecf687e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for index.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-1375e52dc0a56e76fed5.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.316cffaf82e7d78bbb63.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-8acecacd105b41f02aee.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-1375e52dc0a56e76fed5.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-a2a8c4f1c394fecf687e.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.316cffaf82e7d78bbb63.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-36a2b79887f1b5f6d170.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-a2a8c4f1c394fecf687e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for main-HASH.module.js
@@ -215,8 +215,15 @@ var _isDynamic = __webpack_require__("/jkW");
 /* global location */
 
 
-if (!window.Promise) {
-  window.Promise = __webpack_require__("eVuF");
+if (false) {} else {
+  // Polyfill Promise globally
+  // This is needed because Webpack's dynamic loading(common chunks) code
+  // depends on Promise.
+  // So, we need to polyfill it.
+  // See: https://webpack.js.org/guides/code-splitting/#dynamic-imports
+  if (!self.Promise) {
+    self.Promise = __webpack_require__("eVuF");
+  }
 }
 
 var data = JSON.parse(document.getElementById('__NEXT_DATA__').textContent);
Diff for main-HASH.js
@@ -243,8 +243,6 @@ exports.HeadManagerContext = React.createContext(null);
 
 var _regeneratorRuntime = __webpack_require__("ln6h");
 
-var _Promise = __webpack_require__("eVuF");
-
 var _classCallCheck = __webpack_require__("/HRN");
 
 var _createClass = __webpack_require__("WaGi");
@@ -257,6 +255,8 @@ var _inherits = __webpack_require__("N9n2");
 
 var _slicedToArray = __webpack_require__("8+Nu");
 
+var _Promise = __webpack_require__("eVuF");
+
 var _interopRequireWildcard3 = __webpack_require__("5Uuq");
 
 var _interopRequireDefault = __webpack_require__("KI45");
@@ -296,8 +296,15 @@ var _isDynamic = __webpack_require__("/jkW");
 /* global location */
 
 
-if (!window.Promise) {
-  window.Promise = __webpack_require__("eVuF");
+if (false) {} else {
+  // Polyfill Promise globally
+  // This is needed because Webpack's dynamic loading(common chunks) code
+  // depends on Promise.
+  // So, we need to polyfill it.
+  // See: https://webpack.js.org/guides/code-splitting/#dynamic-imports
+  if (!self.Promise) {
+    self.Promise = __webpack_require__("eVuF");
+  }
 }
 
 var data = JSON.parse(document.getElementById('__NEXT_DATA__').textContent);
Diff for withRouter.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-1375e52dc0a56e76fed5.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.316cffaf82e7d78bbb63.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-8acecacd105b41f02aee.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-1375e52dc0a56e76fed5.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-a2a8c4f1c394fecf687e.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.316cffaf82e7d78bbb63.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-36a2b79887f1b5f6d170.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-a2a8c4f1c394fecf687e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
buildDuration 13.5s 12.9s -609ms
nodeModulesSize 52.1 MB 52.1 MB ⚠️ +62.5 kB
Client Bundles (main, webpack, commons) Overall decrease ✓
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.js gzip 5.1 kB 5.1 kB -3 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d6ae.js gzip 16.2 kB 16.2 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 69.9 kB 69.9 kB -3 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.module.js gzip 4.1 kB 4.11 kB ⚠️ +3 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15.1 kB 15.1 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.6 kB 64.6 kB ⚠️ +3 B
Legacy Client Bundles (polyfills)
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_error.js gzip 46.6 kB 46.6 kB ⚠️ +2 B
404.html gzip 1.42 kB 1.42 kB
hooks.html gzip 1.05 kB 1.06 kB ⚠️ +2 B
index.js gzip 46.8 kB 46.8 kB ⚠️ +1 B
link.js gzip 72.4 kB 72.4 kB ⚠️ +3 B
routerDirect.js gzip 70.4 kB 70.4 kB ⚠️ +2 B
withRouter.js gzip 70.4 kB 70.5 kB ⚠️ +2 B
Overall change 309 kB 309 kB ⚠️ +12 B

Commit: 5caee6f

@ijjk
Copy link
Member

ijjk commented Jan 30, 2020

Stats from current PR

Default Server Mode (Decrease detected ✓)
General Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
buildDuration 11.9s 11.7s -174ms
nodeModulesSize 52.1 MB 52.1 MB ⚠️ +62.5 kB
Client Bundles (main, webpack, commons) Overall decrease ✓
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.js gzip 5.1 kB 5.1 kB -3 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d6ae.js gzip 16.2 kB 16.2 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 69.9 kB 69.9 kB -3 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.module.js gzip 4.1 kB 4.11 kB ⚠️ +3 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15.1 kB 15.1 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.6 kB 64.6 kB ⚠️ +3 B
Legacy Client Bundles (polyfills)
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
index.html gzip 1.02 kB 1.02 kB ⚠️ +1 B
link.html gzip 1.03 kB 1.03 kB ⚠️ +1 B
withRouter.html gzip 1.02 kB 1.02 kB
Overall change 3.07 kB 3.07 kB ⚠️ +2 B

Diffs

Diff for index.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-1375e52dc0a56e76fed5.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.316cffaf82e7d78bbb63.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-8acecacd105b41f02aee.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-1375e52dc0a56e76fed5.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-a2a8c4f1c394fecf687e.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.316cffaf82e7d78bbb63.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-36a2b79887f1b5f6d170.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-a2a8c4f1c394fecf687e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for main-HASH.module.js
@@ -215,8 +215,15 @@ var _isDynamic = __webpack_require__("/jkW");
 /* global location */
 
 
-if (!window.Promise) {
-  window.Promise = __webpack_require__("eVuF");
+if (false) {} else {
+  // Polyfill Promise globally
+  // This is needed because Webpack's dynamic loading(common chunks) code
+  // depends on Promise.
+  // So, we need to polyfill it.
+  // See: https://webpack.js.org/guides/code-splitting/#dynamic-imports
+  if (!self.Promise) {
+    self.Promise = __webpack_require__("eVuF");
+  }
 }
 
 var data = JSON.parse(document.getElementById('__NEXT_DATA__').textContent);
Diff for main-HASH.js
@@ -243,8 +243,6 @@ exports.HeadManagerContext = React.createContext(null);
 
 var _regeneratorRuntime = __webpack_require__("ln6h");
 
-var _Promise = __webpack_require__("eVuF");
-
 var _classCallCheck = __webpack_require__("/HRN");
 
 var _createClass = __webpack_require__("WaGi");
@@ -257,6 +255,8 @@ var _inherits = __webpack_require__("N9n2");
 
 var _slicedToArray = __webpack_require__("8+Nu");
 
+var _Promise = __webpack_require__("eVuF");
+
 var _interopRequireWildcard3 = __webpack_require__("5Uuq");
 
 var _interopRequireDefault = __webpack_require__("KI45");
@@ -296,8 +296,15 @@ var _isDynamic = __webpack_require__("/jkW");
 /* global location */
 
 
-if (!window.Promise) {
-  window.Promise = __webpack_require__("eVuF");
+if (false) {} else {
+  // Polyfill Promise globally
+  // This is needed because Webpack's dynamic loading(common chunks) code
+  // depends on Promise.
+  // So, we need to polyfill it.
+  // See: https://webpack.js.org/guides/code-splitting/#dynamic-imports
+  if (!self.Promise) {
+    self.Promise = __webpack_require__("eVuF");
+  }
 }
 
 var data = JSON.parse(document.getElementById('__NEXT_DATA__').textContent);
Diff for link.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-1375e52dc0a56e76fed5.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.316cffaf82e7d78bbb63.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-8acecacd105b41f02aee.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-1375e52dc0a56e76fed5.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-a2a8c4f1c394fecf687e.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.316cffaf82e7d78bbb63.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-36a2b79887f1b5f6d170.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-a2a8c4f1c394fecf687e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for withRouter.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-1375e52dc0a56e76fed5.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.316cffaf82e7d78bbb63.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-8acecacd105b41f02aee.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-1375e52dc0a56e76fed5.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-a2a8c4f1c394fecf687e.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.316cffaf82e7d78bbb63.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e64dc8e6d2834d1522a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-36a2b79887f1b5f6d170.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-a2a8c4f1c394fecf687e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
buildDuration 14s 14.7s ⚠️ +719ms
nodeModulesSize 52.1 MB 52.1 MB ⚠️ +62.5 kB
Client Bundles (main, webpack, commons) Overall decrease ✓
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.js gzip 5.1 kB 5.1 kB -3 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d6ae.js gzip 16.2 kB 16.2 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 69.9 kB 69.9 kB -3 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
main-HASH.module.js gzip 4.1 kB 4.11 kB ⚠️ +3 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15.1 kB 15.1 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.6 kB 64.6 kB ⚠️ +3 B
Legacy Client Bundles (polyfills)
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles Overall increase ⚠️
zeit/next.js canary timneutkens/next.js fix/promise-polyfill-finally Change
_error.js gzip 46.6 kB 46.6 kB ⚠️ +2 B
404.html gzip 1.42 kB 1.42 kB
hooks.html gzip 1.05 kB 1.06 kB ⚠️ +2 B
index.js gzip 46.8 kB 46.8 kB ⚠️ +1 B
link.js gzip 72.4 kB 72.4 kB ⚠️ +3 B
routerDirect.js gzip 70.4 kB 70.4 kB ⚠️ +2 B
withRouter.js gzip 70.4 kB 70.5 kB ⚠️ +2 B
Overall change 309 kB 309 kB ⚠️ +12 B

Commit: 111ec35

@Timer Timer merged commit e35005c into vercel:canary Jan 30, 2020
@timneutkens timneutkens deleted the fix/promise-polyfill-finally branch January 30, 2020 11:53
@aralroca
Copy link
Contributor

aralroca commented Feb 3, 2020

@timneutkens perhaps is a good idea to also update the with-polyfills example (https://github.com/zeit/next.js/tree/6804039e9450c94ed701202a16714f2549dc3144/examples/with-polyfills) to explain how to add custom polyfills only in the nomodule part?

@timneutkens
Copy link
Member Author

@aralroca this is currently experimental so no documentation/examples changes were made until it's stable.

chibicode pushed a commit to chibicode/next.js that referenced this pull request Feb 11, 2020
* Polyfill Promise in polyfills chunk

* Override promise polyfill to use built-in

* Update sizes

* Update polyfills

* Test

* Add dep

* Use iife

* Unscope

* Revert "Unscope"

This reverts commit ab26bce.

* trigger

* Remove unused code

* Set helpers to true

* Update yarn.lock

* Fix test

* Update polyfills size

* Add comment

* Add back comment

* Put polyfills optimization under experimental flag

* Fix filename

* bring back promise for backwards compat until experimental feature is landed

* fix resolve alias check

* correct loader

* fix logic branches

* adjust !!

* adjust cache key

* Conditionally branch polyfill

* fix promise polyfill branching

* Re-add runtime

* fix base object

* fix yarn lock

* Add cache key

* correctly set caller

* add basic test

* Increment h=>i

* increment to j just in case

Co-authored-by: Joe Haddad <timer150@gmail.com>
Co-authored-by: JJ Kasper <jj@jjsweb.site>
@vercel vercel locked as resolved and limited conversation to collaborators Jan 31, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants