Skip to content

Commit 57099a5

Browse files
authored
Use mitt instead of EventEmitter. (#1398)
EventEmitter is quite bit and mitt is a pretty good/small replacement.
1 parent bb7c8f8 commit 57099a5

File tree

5 files changed

+36
-70
lines changed

5 files changed

+36
-70
lines changed

client/on-demand-entries-client.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Router from '../lib/router'
44
import fetch from 'unfetch'
55

66
Router.ready(() => {
7-
Router.router.on('routeChangeComplete', ping)
7+
Router.router.events.on('routeChangeComplete', ping)
88
})
99

1010
async function ping () {

lib/router/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ coreMethodFields.forEach((field) => {
3939

4040
routerEvents.forEach((event) => {
4141
SingletonRouter.ready(() => {
42-
SingletonRouter.router.on(event, (...args) => {
42+
SingletonRouter.router.events.on(event, (...args) => {
4343
const eventField = `on${event.charAt(0).toUpperCase()}${event.substring(1)}`
4444
if (SingletonRouter[eventField]) {
4545
SingletonRouter[eventField](...args)

lib/router/router.js

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { parse, format } from 'url'
2-
import { EventEmitter } from 'events'
2+
import mitt from 'mitt'
33
import fetch from 'unfetch'
44
import evalScript from '../eval-script'
55
import shallowEquals from '../shallow-equals'
@@ -25,9 +25,8 @@ if (typeof window !== 'undefined' && typeof navigator.serviceWorker !== 'undefin
2525
})
2626
}
2727

28-
export default class Router extends EventEmitter {
28+
export default class Router {
2929
constructor (pathname, query, as, { Component, ErrorComponent, err } = {}) {
30-
super()
3130
// represents the current component key
3231
this.route = toRoute(pathname)
3332

@@ -37,6 +36,9 @@ export default class Router extends EventEmitter {
3736
// contain a map of promise of fetch routes
3837
this.fetchingRoutes = {}
3938

39+
// Handling Router Events
40+
this.events = mitt()
41+
4042
this.prefetchQueue = new PQueue({ concurrency: 2 })
4143
this.ErrorComponent = ErrorComponent
4244
this.pathname = pathname
@@ -98,7 +100,7 @@ export default class Router extends EventEmitter {
98100
const url = window.location.href
99101
const { pathname, query } = parse(url, true)
100102

101-
this.emit('routeChangeStart', url)
103+
this.events.emit('routeChangeStart', url)
102104
const routeInfo = await this.getRouteInfo(route, pathname, query, url)
103105
const { error } = routeInfo
104106

@@ -109,11 +111,11 @@ export default class Router extends EventEmitter {
109111
this.notify(routeInfo)
110112

111113
if (error) {
112-
this.emit('routeChangeError', error, url)
114+
this.events.emit('routeChangeError', error, url)
113115
throw error
114116
}
115117

116-
this.emit('routeChangeComplete', url)
118+
this.events.emit('routeChangeComplete', url)
117119
}
118120

119121
back () {
@@ -156,7 +158,7 @@ export default class Router extends EventEmitter {
156158
const { shallow = false } = options
157159
let routeInfo = null
158160

159-
this.emit('routeChangeStart', as)
161+
this.events.emit('routeChangeStart', as)
160162

161163
// If shallow === false and other conditions met, we reuse the
162164
// existing routeInfo for this route.
@@ -173,18 +175,18 @@ export default class Router extends EventEmitter {
173175
return false
174176
}
175177

176-
this.emit('beforeHistoryChange', as)
178+
this.events.emit('beforeHistoryChange', as)
177179
this.changeState(method, url, as, options)
178180
const hash = window.location.hash.substring(1)
179181

180182
this.set(route, pathname, query, as, { ...routeInfo, hash })
181183

182184
if (error) {
183-
this.emit('routeChangeError', error, as)
185+
this.events.emit('routeChangeError', error, as)
184186
throw error
185187
}
186188

187-
this.emit('routeChangeComplete', as)
189+
this.events.emit('routeChangeComplete', as)
188190
return true
189191
}
190192

@@ -356,7 +358,7 @@ export default class Router extends EventEmitter {
356358

357359
abortComponentLoad (as) {
358360
if (this.componentLoadCancel) {
359-
this.emit('routeChangeError', new Error('Route Cancelled'), as)
361+
this.events.emit('routeChangeError', new Error('Route Cancelled'), as)
360362
this.componentLoadCancel()
361363
this.componentLoadCancel = null
362364
}

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
"json-loader": "0.5.4",
6969
"loader-utils": "1.0.3",
7070
"minimist": "1.2.0",
71+
"mitt": "1.1.0",
7172
"mkdirp-then": "1.2.0",
7273
"mv": "2.1.1",
7374
"mz": "2.6.0",

yarn.lock

Lines changed: 20 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1213,15 +1213,14 @@ chokidar@^1.4.3, chokidar@^1.6.1:
12131213
optionalDependencies:
12141214
fsevents "^1.0.0"
12151215

1216-
chromedriver@2.26.1:
1217-
version "2.26.1"
1218-
resolved "https://registry.npmjs.org/chromedriver/-/chromedriver-2.26.1.tgz#60036732224580d2699afd2626f5f26ea1f6c9fe"
1216+
chromedriver@2.28.0:
1217+
version "2.28.0"
1218+
resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-2.28.0.tgz#ea0c383621dd27db340c612b85fe39414c16ec79"
12191219
dependencies:
12201220
adm-zip "^0.4.7"
1221-
kew "^0.5.0"
1222-
mkdirp "^0.5.0"
1223-
npmconf "^2.1.1"
1224-
rimraf "^2.0.3"
1221+
kew "^0.7.0"
1222+
mkdirp "^0.5.1"
1223+
rimraf "^2.5.4"
12251224

12261225
ci-info@^1.0.0:
12271226
version "1.0.0"
@@ -1322,13 +1321,6 @@ concat-stream@^1.4.6:
13221321
readable-stream "^2.2.2"
13231322
typedarray "^0.0.6"
13241323

1325-
config-chain@~1.1.8:
1326-
version "1.1.11"
1327-
resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2"
1328-
dependencies:
1329-
ini "^1.3.4"
1330-
proto-list "~1.2.1"
1331-
13321324
console-browserify@^1.1.0:
13331325
version "1.1.0"
13341326
resolved "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
@@ -2504,7 +2496,7 @@ [email protected]:
25042496
version "2.0.1"
25052497
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
25062498

2507-
ini@^1.2.0, ini@^1.3.4, ini@~1.3.0:
2499+
ini@~1.3.0:
25082500
version "1.3.4"
25092501
resolved "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
25102502

@@ -3082,9 +3074,9 @@ jsx-ast-utils@^1.3.4:
30823074
dependencies:
30833075
object-assign "^4.1.0"
30843076

3085-
kew@^0.5.0:
3086-
version "0.5.0"
3087-
resolved "https://registry.npmjs.org/kew/-/kew-0.5.0.tgz#ece11cb5d8d01a81f8ce804c8d0bba06e6b25ca2"
3077+
kew@^0.7.0:
3078+
version "0.7.0"
3079+
resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b"
30883080

30893081
kind-of@^3.0.2:
30903082
version "3.1.0"
@@ -3351,6 +3343,10 @@ [email protected], minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0:
33513343
version "1.2.0"
33523344
resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
33533345

3346+
3347+
version "1.1.0"
3348+
resolved "https://registry.yarnpkg.com/mitt/-/mitt-1.1.0.tgz#22f0d57e2fedd39620a62bb41b7cdd93667d3c41"
3349+
33543350
33553351
version "1.2.0"
33563352
resolved "https://registry.npmjs.org/mkdirp-then/-/mkdirp-then-1.2.0.tgz#a492c879ca4d873f5ee45008f8f55fd0150de3c5"
@@ -3476,7 +3472,7 @@ nopt@~1.0.10:
34763472
dependencies:
34773473
abbrev "1"
34783474

3479-
nopt@~3.0.1, nopt@~3.0.6:
3475+
nopt@~3.0.6:
34803476
version "3.0.6"
34813477
resolved "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
34823478
dependencies:
@@ -3499,20 +3495,6 @@ normalize-path@^2.0.0, normalize-path@^2.0.1:
34993495
version "2.0.1"
35003496
resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
35013497

3502-
npmconf@^2.1.1:
3503-
version "2.1.2"
3504-
resolved "https://registry.npmjs.org/npmconf/-/npmconf-2.1.2.tgz#66606a4a736f1e77a059aa071a79c94ab781853a"
3505-
dependencies:
3506-
config-chain "~1.1.8"
3507-
inherits "~2.0.0"
3508-
ini "^1.2.0"
3509-
mkdirp "^0.5.0"
3510-
nopt "~3.0.1"
3511-
once "~1.3.0"
3512-
osenv "^0.1.0"
3513-
semver "2 || 3 || 4"
3514-
uid-number "0.0.5"
3515-
35163498
npmlog@^4.0.1:
35173499
version "4.0.2"
35183500
resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f"
@@ -3650,17 +3632,10 @@ os-locale@^1.4.0:
36503632
dependencies:
36513633
lcid "^1.0.0"
36523634

3653-
os-tmpdir@^1.0.0, os-tmpdir@^1.0.1:
3635+
os-tmpdir@^1.0.1:
36543636
version "1.0.2"
36553637
resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
36563638

3657-
osenv@^0.1.0:
3658-
version "0.1.4"
3659-
resolved "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
3660-
dependencies:
3661-
os-homedir "^1.0.0"
3662-
os-tmpdir "^1.0.0"
3663-
36643639
p-limit@^1.1.0:
36653640
version "1.1.0"
36663641
resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc"
@@ -3846,10 +3821,6 @@ promise@^7.1.1:
38463821
dependencies:
38473822
asap "~2.0.3"
38483823

3849-
proto-list@~1.2.1:
3850-
version "1.2.4"
3851-
resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
3852-
38533824
prr@~0.0.0:
38543825
version "0.0.0"
38553826
resolved "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
@@ -4152,7 +4123,7 @@ right-align@^0.1.1:
41524123
dependencies:
41534124
align-text "^0.1.1"
41544125

4155-
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:
4126+
rimraf@2, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.4:
41564127
version "2.6.1"
41574128
resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
41584129
dependencies:
@@ -4204,10 +4175,6 @@ sax@^1.2.1:
42044175
version "1.2.2"
42054176
resolved "https://registry.npmjs.org/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828"
42064177

4207-
"semver@2 || 3 || 4":
4208-
version "4.3.6"
4209-
resolved "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
4210-
42114178
"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@~5.3.0:
42124179
version "5.3.0"
42134180
resolved "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
@@ -4670,10 +4637,6 @@ uglify-to-browserify@~1.0.0:
46704637
version "1.0.2"
46714638
resolved "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
46724639

4673-
4674-
version "0.0.5"
4675-
resolved "https://registry.npmjs.org/uid-number/-/uid-number-0.0.5.tgz#5a3db23ef5dbd55b81fce0ec9a2ac6fccdebb81e"
4676-
46774640
uid-number@~0.0.6:
46784641
version "0.0.6"
46794642
resolved "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
@@ -4907,9 +4870,9 @@ write-file-atomic@^1.1.4:
49074870
imurmurhash "^0.1.4"
49084871
slide "^1.1.5"
49094872

4910-
write-file-webpack-plugin@3.4.2:
4911-
version "3.4.2"
4912-
resolved "https://registry.npmjs.org/write-file-webpack-plugin/-/write-file-webpack-plugin-3.4.2.tgz#16f7a1bbadb781fa661a2960e31c499f0a61b9bb"
4873+
write-file-webpack-plugin@4.0.0:
4874+
version "4.0.0"
4875+
resolved "https://registry.yarnpkg.com/write-file-webpack-plugin/-/write-file-webpack-plugin-4.0.0.tgz#2a7e4520fdcc02e687e8430d371bb41400b3cc0c"
49134876
dependencies:
49144877
chalk "^1.1.1"
49154878
filesize "^3.2.1"

0 commit comments

Comments
 (0)