1
- /* global document, window */
1
+ /* eslint-env browser */
2
2
/*
3
3
eslint-disable
4
- func-names,
5
- no-var,
6
- vars-on-top,
7
- prefer-arrow-func,
8
- prefer-rest-params,
9
- prefer-arrow-callback,
10
- prefer-template,
11
- prefer-destructuring,
12
- no-param-reassign,
13
- no-console
4
+ no-console,
5
+ func-names
14
6
*/
15
7
16
- var normalizeUrl = require ( 'normalize-url' ) ;
8
+ const normalizeUrl = require ( 'normalize-url' ) ;
17
9
18
- var srcByModuleId = Object . create ( null ) ;
10
+ const srcByModuleId = Object . create ( null ) ;
19
11
20
- var noDocument = typeof document === 'undefined' ;
12
+ const noDocument = typeof document === 'undefined' ;
21
13
22
- var forEach = Array . prototype . forEach ;
14
+ const { forEach } = Array . prototype ;
23
15
24
16
function debounce ( fn , time ) {
25
- var timeout = 0 ;
17
+ let timeout = 0 ;
26
18
27
- // eslint-disable-next-line func-names
28
19
return function ( ) {
29
- var self = this ;
30
- var args = arguments ;
31
-
20
+ const self = this ;
32
21
// eslint-disable-next-line prefer-rest-params
33
- var functionCall = function functionCall ( ) {
22
+ const args = arguments ;
23
+
24
+ const functionCall = function functionCall ( ) {
34
25
return fn . apply ( self , args ) ;
35
26
} ;
36
27
@@ -42,19 +33,20 @@ function debounce(fn, time) {
42
33
function noop ( ) { }
43
34
44
35
function getCurrentScriptUrl ( moduleId ) {
45
- var src = srcByModuleId [ moduleId ] ;
36
+ let src = srcByModuleId [ moduleId ] ;
46
37
47
38
if ( ! src ) {
48
39
if ( document . currentScript ) {
49
- src = document . currentScript . src ;
40
+ ( { src } = document . currentScript ) ;
50
41
} else {
51
- var scripts = document . getElementsByTagName ( 'script' ) ;
52
- var lastScriptTag = scripts [ scripts . length - 1 ] ;
42
+ const scripts = document . getElementsByTagName ( 'script' ) ;
43
+ const lastScriptTag = scripts [ scripts . length - 1 ] ;
53
44
54
45
if ( lastScriptTag ) {
55
- src = lastScriptTag . src ;
46
+ ( { src } = lastScriptTag ) ;
56
47
}
57
48
}
49
+
58
50
srcByModuleId [ moduleId ] = src ;
59
51
}
60
52
@@ -63,8 +55,8 @@ function getCurrentScriptUrl(moduleId) {
63
55
return null ;
64
56
}
65
57
66
- var splitResult = src . split ( / ( [ ^ \\ / ] + ) \. j s $ / ) ;
67
- var filename = splitResult && splitResult [ 1 ] ;
58
+ const splitResult = src . split ( / ( [ ^ \\ / ] + ) \. j s $ / ) ;
59
+ const filename = splitResult && splitResult [ 1 ] ;
68
60
69
61
if ( ! filename ) {
70
62
return [ src . replace ( '.js' , '.css' ) ] ;
@@ -74,11 +66,11 @@ function getCurrentScriptUrl(moduleId) {
74
66
return [ src . replace ( '.js' , '.css' ) ] ;
75
67
}
76
68
77
- return fileMap . split ( ',' ) . map ( function ( mapRule ) {
78
- var reg = new RegExp ( filename + ' \\.js$' , 'g' ) ;
69
+ return fileMap . split ( ',' ) . map ( ( mapRule ) => {
70
+ const reg = new RegExp ( ` ${ filename } \\.js$` , 'g' ) ;
79
71
80
72
return normalizeUrl (
81
- src . replace ( reg , mapRule . replace ( / { f i l e N a m e } / g, filename ) + ' .css' ) ,
73
+ src . replace ( reg , ` ${ mapRule . replace ( / { f i l e N a m e } / g, filename ) } .css` ) ,
82
74
{ stripWWW : false }
83
75
) ;
84
76
} ) ;
@@ -87,6 +79,7 @@ function getCurrentScriptUrl(moduleId) {
87
79
88
80
function updateCss ( el , url ) {
89
81
if ( ! url ) {
82
+ // eslint-disable-next-line
90
83
url = el . href . split ( '?' ) [ 0 ] ;
91
84
}
92
85
@@ -104,34 +97,36 @@ function updateCss(el, url) {
104
97
return ;
105
98
}
106
99
100
+ // eslint-disable-next-line no-param-reassign
107
101
el . visited = true ;
108
102
109
- var newEl = el . cloneNode ( ) ; // eslint-disable-line vars-on-top
103
+ const newEl = el . cloneNode ( ) ;
110
104
111
105
newEl . isLoaded = false ;
112
106
113
- newEl . addEventListener ( 'load' , function ( ) {
107
+ newEl . addEventListener ( 'load' , ( ) => {
114
108
newEl . isLoaded = true ;
115
109
el . parentNode . removeChild ( el ) ;
116
110
} ) ;
117
111
118
- newEl . addEventListener ( 'error' , function ( ) {
112
+ newEl . addEventListener ( 'error' , ( ) => {
119
113
newEl . isLoaded = true ;
120
114
el . parentNode . removeChild ( el ) ;
121
115
} ) ;
122
116
123
- newEl . href = url + '?' + Date . now ( ) ;
117
+ newEl . href = ` ${ url } ? ${ Date . now ( ) } ` ;
124
118
125
119
el . parentNode . appendChild ( newEl ) ;
126
120
}
127
121
128
122
function getReloadUrl ( href , src ) {
129
- var ret ;
123
+ let ret ;
130
124
125
+ // eslint-disable-next-line no-param-reassign
131
126
href = normalizeUrl ( href , { stripWWW : false } ) ;
132
127
133
128
// eslint-disable-next-line array-callback-return
134
- src . some ( function ( url ) {
129
+ src . some ( ( url ) => {
135
130
if ( href . indexOf ( src ) > - 1 ) {
136
131
ret = url ;
137
132
}
@@ -141,11 +136,11 @@ function getReloadUrl(href, src) {
141
136
}
142
137
143
138
function reloadStyle ( src ) {
144
- var elements = document . querySelectorAll ( 'link' ) ;
145
- var loaded = false ;
139
+ const elements = document . querySelectorAll ( 'link' ) ;
140
+ let loaded = false ;
146
141
147
- forEach . call ( elements , function ( el ) {
148
- var url = getReloadUrl ( el . href , src ) ;
142
+ forEach . call ( elements , ( el ) => {
143
+ const url = getReloadUrl ( el . href , src ) ;
149
144
150
145
if ( ! isUrlRequest ( url ) ) {
151
146
return ;
@@ -165,9 +160,9 @@ function reloadStyle(src) {
165
160
}
166
161
167
162
function reloadAll ( ) {
168
- var elements = document . querySelectorAll ( 'link' ) ;
163
+ const elements = document . querySelectorAll ( 'link' ) ;
169
164
170
- forEach . call ( elements , function ( el ) {
165
+ forEach . call ( elements , ( el ) => {
171
166
if ( el . visited === true ) {
172
167
return ;
173
168
}
@@ -200,27 +195,29 @@ function isUrlRequest(url) {
200
195
module . exports = function ( moduleId , options ) {
201
196
if ( noDocument ) {
202
197
console . log ( 'no window.document found, will not HMR CSS' ) ;
198
+
203
199
return noop ;
204
200
}
205
201
206
- // eslint-disable-next-line vars-on-top
207
- var getScriptSrc = getCurrentScriptUrl ( moduleId ) ;
202
+ const getScriptSrc = getCurrentScriptUrl ( moduleId ) ;
208
203
209
204
function update ( ) {
210
- var src = getScriptSrc ( options . filename ) ;
211
-
212
- var reloaded = reloadStyle ( src ) ;
205
+ const src = getScriptSrc ( options . filename ) ;
206
+ const reloaded = reloadStyle ( src ) ;
213
207
214
208
if ( options . locals ) {
215
209
console . log ( '[HMR] Detected local css modules. Reload all css' ) ;
210
+
216
211
reloadAll ( ) ;
212
+
217
213
return ;
218
214
}
219
215
220
216
if ( reloaded && ! options . reloadAll ) {
221
217
console . log ( '[HMR] css reload %s' , src . join ( ' ' ) ) ;
222
218
} else {
223
219
console . log ( '[HMR] Reload all css' ) ;
220
+
224
221
reloadAll ( ) ;
225
222
}
226
223
}
0 commit comments