From 57099a544cbc5de99d02675335de988e3cb4f28e Mon Sep 17 00:00:00 2001 From: Arunoda Susiripala Date: Mon, 13 Mar 2017 10:04:30 +0530 Subject: [PATCH] Use mitt instead of EventEmitter. (#1398) EventEmitter is quite bit and mitt is a pretty good/small replacement. --- client/on-demand-entries-client.js | 2 +- lib/router/index.js | 2 +- lib/router/router.js | 24 +++++----- package.json | 1 + yarn.lock | 77 ++++++++---------------------- 5 files changed, 36 insertions(+), 70 deletions(-) diff --git a/client/on-demand-entries-client.js b/client/on-demand-entries-client.js index 3c4d9d3848..7fcd8c186a 100644 --- a/client/on-demand-entries-client.js +++ b/client/on-demand-entries-client.js @@ -4,7 +4,7 @@ import Router from '../lib/router' import fetch from 'unfetch' Router.ready(() => { - Router.router.on('routeChangeComplete', ping) + Router.router.events.on('routeChangeComplete', ping) }) async function ping () { diff --git a/lib/router/index.js b/lib/router/index.js index 782835d9ec..faec82cc49 100644 --- a/lib/router/index.js +++ b/lib/router/index.js @@ -39,7 +39,7 @@ coreMethodFields.forEach((field) => { routerEvents.forEach((event) => { SingletonRouter.ready(() => { - SingletonRouter.router.on(event, (...args) => { + SingletonRouter.router.events.on(event, (...args) => { const eventField = `on${event.charAt(0).toUpperCase()}${event.substring(1)}` if (SingletonRouter[eventField]) { SingletonRouter[eventField](...args) diff --git a/lib/router/router.js b/lib/router/router.js index d939a78348..01b3e2856b 100644 --- a/lib/router/router.js +++ b/lib/router/router.js @@ -1,5 +1,5 @@ import { parse, format } from 'url' -import { EventEmitter } from 'events' +import mitt from 'mitt' import fetch from 'unfetch' import evalScript from '../eval-script' import shallowEquals from '../shallow-equals' @@ -25,9 +25,8 @@ if (typeof window !== 'undefined' && typeof navigator.serviceWorker !== 'undefin }) } -export default class Router extends EventEmitter { +export default class Router { constructor (pathname, query, as, { Component, ErrorComponent, err } = {}) { - super() // represents the current component key this.route = toRoute(pathname) @@ -37,6 +36,9 @@ export default class Router extends EventEmitter { // contain a map of promise of fetch routes this.fetchingRoutes = {} + // Handling Router Events + this.events = mitt() + this.prefetchQueue = new PQueue({ concurrency: 2 }) this.ErrorComponent = ErrorComponent this.pathname = pathname @@ -98,7 +100,7 @@ export default class Router extends EventEmitter { const url = window.location.href const { pathname, query } = parse(url, true) - this.emit('routeChangeStart', url) + this.events.emit('routeChangeStart', url) const routeInfo = await this.getRouteInfo(route, pathname, query, url) const { error } = routeInfo @@ -109,11 +111,11 @@ export default class Router extends EventEmitter { this.notify(routeInfo) if (error) { - this.emit('routeChangeError', error, url) + this.events.emit('routeChangeError', error, url) throw error } - this.emit('routeChangeComplete', url) + this.events.emit('routeChangeComplete', url) } back () { @@ -156,7 +158,7 @@ export default class Router extends EventEmitter { const { shallow = false } = options let routeInfo = null - this.emit('routeChangeStart', as) + this.events.emit('routeChangeStart', as) // If shallow === false and other conditions met, we reuse the // existing routeInfo for this route. @@ -173,18 +175,18 @@ export default class Router extends EventEmitter { return false } - this.emit('beforeHistoryChange', as) + this.events.emit('beforeHistoryChange', as) this.changeState(method, url, as, options) const hash = window.location.hash.substring(1) this.set(route, pathname, query, as, { ...routeInfo, hash }) if (error) { - this.emit('routeChangeError', error, as) + this.events.emit('routeChangeError', error, as) throw error } - this.emit('routeChangeComplete', as) + this.events.emit('routeChangeComplete', as) return true } @@ -356,7 +358,7 @@ export default class Router extends EventEmitter { abortComponentLoad (as) { if (this.componentLoadCancel) { - this.emit('routeChangeError', new Error('Route Cancelled'), as) + this.events.emit('routeChangeError', new Error('Route Cancelled'), as) this.componentLoadCancel() this.componentLoadCancel = null } diff --git a/package.json b/package.json index 243ce8b13d..b8c008e798 100644 --- a/package.json +++ b/package.json @@ -68,6 +68,7 @@ "json-loader": "0.5.4", "loader-utils": "1.0.3", "minimist": "1.2.0", + "mitt": "1.1.0", "mkdirp-then": "1.2.0", "mv": "2.1.1", "mz": "2.6.0", diff --git a/yarn.lock b/yarn.lock index be7bca83c0..bed93625d3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1213,15 +1213,14 @@ chokidar@^1.4.3, chokidar@^1.6.1: optionalDependencies: fsevents "^1.0.0" -chromedriver@2.26.1: - version "2.26.1" - resolved "https://registry.npmjs.org/chromedriver/-/chromedriver-2.26.1.tgz#60036732224580d2699afd2626f5f26ea1f6c9fe" +chromedriver@2.28.0: + version "2.28.0" + resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-2.28.0.tgz#ea0c383621dd27db340c612b85fe39414c16ec79" dependencies: adm-zip "^0.4.7" - kew "^0.5.0" - mkdirp "^0.5.0" - npmconf "^2.1.1" - rimraf "^2.0.3" + kew "^0.7.0" + mkdirp "^0.5.1" + rimraf "^2.5.4" ci-info@^1.0.0: version "1.0.0" @@ -1322,13 +1321,6 @@ concat-stream@^1.4.6: readable-stream "^2.2.2" typedarray "^0.0.6" -config-chain@~1.1.8: - version "1.1.11" - resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" @@ -2504,7 +2496,7 @@ inherits@2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" -ini@^1.2.0, ini@^1.3.4, ini@~1.3.0: +ini@~1.3.0: version "1.3.4" resolved "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" @@ -3082,9 +3074,9 @@ jsx-ast-utils@^1.3.4: dependencies: object-assign "^4.1.0" -kew@^0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/kew/-/kew-0.5.0.tgz#ece11cb5d8d01a81f8ce804c8d0bba06e6b25ca2" +kew@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" kind-of@^3.0.2: version "3.1.0" @@ -3351,6 +3343,10 @@ minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" +mitt@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mitt/-/mitt-1.1.0.tgz#22f0d57e2fedd39620a62bb41b7cdd93667d3c41" + mkdirp-then@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/mkdirp-then/-/mkdirp-then-1.2.0.tgz#a492c879ca4d873f5ee45008f8f55fd0150de3c5" @@ -3476,7 +3472,7 @@ nopt@~1.0.10: dependencies: abbrev "1" -nopt@~3.0.1, nopt@~3.0.6: +nopt@~3.0.6: version "3.0.6" resolved "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" dependencies: @@ -3499,20 +3495,6 @@ normalize-path@^2.0.0, normalize-path@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" -npmconf@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/npmconf/-/npmconf-2.1.2.tgz#66606a4a736f1e77a059aa071a79c94ab781853a" - dependencies: - config-chain "~1.1.8" - inherits "~2.0.0" - ini "^1.2.0" - mkdirp "^0.5.0" - nopt "~3.0.1" - once "~1.3.0" - osenv "^0.1.0" - semver "2 || 3 || 4" - uid-number "0.0.5" - npmlog@^4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" @@ -3650,17 +3632,10 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: +os-tmpdir@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -osenv@^0.1.0: - version "0.1.4" - resolved "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - p-limit@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" @@ -3846,10 +3821,6 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - prr@~0.0.0: version "0.0.0" resolved "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" @@ -4152,7 +4123,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.0.3, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.4: +rimraf@2, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.4: version "2.6.1" resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" dependencies: @@ -4204,10 +4175,6 @@ sax@^1.2.1: version "1.2.2" resolved "https://registry.npmjs.org/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" -"semver@2 || 3 || 4": - version "4.3.6" - resolved "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" - "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@~5.3.0: version "5.3.0" resolved "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -4670,10 +4637,6 @@ uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" -uid-number@0.0.5: - version "0.0.5" - resolved "https://registry.npmjs.org/uid-number/-/uid-number-0.0.5.tgz#5a3db23ef5dbd55b81fce0ec9a2ac6fccdebb81e" - uid-number@~0.0.6: version "0.0.6" resolved "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" @@ -4907,9 +4870,9 @@ write-file-atomic@^1.1.4: imurmurhash "^0.1.4" slide "^1.1.5" -write-file-webpack-plugin@3.4.2: - version "3.4.2" - resolved "https://registry.npmjs.org/write-file-webpack-plugin/-/write-file-webpack-plugin-3.4.2.tgz#16f7a1bbadb781fa661a2960e31c499f0a61b9bb" +write-file-webpack-plugin@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/write-file-webpack-plugin/-/write-file-webpack-plugin-4.0.0.tgz#2a7e4520fdcc02e687e8430d371bb41400b3cc0c" dependencies: chalk "^1.1.1" filesize "^3.2.1" -- GitLab