@@ -6,121 +6,128 @@ const debounce = require('lodash/debounce');
6
6
const noDocument = typeof document === 'undefined' ;
7
7
const forEach = Array . prototype . forEach ;
8
8
9
- const noop = function ( ) { } ;
10
-
11
- const getCurrentScriptUrl = function ( moduleId ) {
12
- let src = srcByModuleId [ moduleId ] ;
13
-
14
- if ( ! src ) {
15
- if ( document . currentScript ) {
16
- src = document . currentScript . src ;
17
- } else {
18
- const scripts = document . getElementsByTagName ( 'script' ) ;
19
- const lastScriptTag = scripts [ scripts . length - 1 ] ;
20
-
21
- if ( lastScriptTag ) {
22
- src = lastScriptTag . src ;
23
- }
9
+ const noop = function ( ) { } ;
10
+
11
+ const getCurrentScriptUrl = function ( moduleId ) {
12
+ let src = srcByModuleId [ moduleId ] ;
13
+
14
+ if ( ! src ) {
15
+ if ( document . currentScript ) {
16
+ src = document . currentScript . src ;
17
+ } else {
18
+ const scripts = document . getElementsByTagName ( 'script' ) ;
19
+ const lastScriptTag = scripts [ scripts . length - 1 ] ;
20
+
21
+ if ( lastScriptTag ) {
22
+ src = lastScriptTag . src ;
23
+ }
24
+ }
25
+ srcByModuleId [ moduleId ] = src ;
24
26
}
25
- srcByModuleId [ moduleId ] = src ;
26
- }
27
-
28
- return function ( fileMap ) {
29
- const splitResult = / ( [ ^ \\ / ] + ) \. j s $ / . exec ( src ) ;
30
- const filename = splitResult && splitResult [ 1 ] ;
31
- if ( ! filename ) {
32
- return [ src . replace ( '.js' , '.css' ) ] ;
33
- }
34
- return fileMap . split ( ',' ) . map ( function ( mapRule ) {
35
- const reg = new RegExp ( filename + '\\.js$' , 'g' ) ;
36
- return normalizeUrl ( src . replace ( reg , mapRule . replace ( / { f i l e N a m e } / g, filename ) + '.css' ) , { stripWWW : false } ) ;
37
- } ) ;
38
- } ;
27
+
28
+ return function ( fileMap ) {
29
+ const splitResult = / ( [ ^ \\ / ] + ) \. j s $ / . exec ( src ) ;
30
+ const filename = splitResult && splitResult [ 1 ] ;
31
+ if ( ! filename ) {
32
+ return [ src . replace ( '.js' , '.css' ) ] ;
33
+ }
34
+ return fileMap . split ( ',' ) . map ( ( mapRule ) => {
35
+ const reg = new RegExp ( `${ filename } \\.js$` , 'g' ) ;
36
+ return normalizeUrl (
37
+ src . replace (
38
+ reg ,
39
+ `${ mapRule . replace ( / { f i l e N a m e } / g, filename ) } .css`
40
+ ) ,
41
+ { stripWWW : false }
42
+ ) ;
43
+ } ) ;
44
+ } ;
39
45
} ;
40
46
41
47
function updateCss ( el , url ) {
42
- if ( ! url ) {
43
- url = el . href . split ( '?' ) [ 0 ] ;
44
- }
45
- if ( el . isLoaded === false ) {
48
+ if ( ! url ) {
49
+ url = el . href . split ( '?' ) [ 0 ] ;
50
+ }
51
+ if ( el . isLoaded === false ) {
46
52
// We seem to be about to replace a css link that hasn't loaded yet.
47
53
// We're probably changing the same file more than once.
48
- return ;
49
- }
50
- if ( ! url || ! ( url . indexOf ( '.css' ) > - 1 ) ) return ;
54
+ return ;
55
+ }
56
+ if ( ! url || ! ( url . indexOf ( '.css' ) > - 1 ) ) return ;
51
57
52
- el . visited = true ;
53
- const newEl = el . cloneNode ( ) ;
58
+ el . visited = true ;
59
+ const newEl = el . cloneNode ( ) ;
54
60
55
- newEl . isLoaded = false ;
61
+ newEl . isLoaded = false ;
56
62
57
- newEl . addEventListener ( 'load' , function ( ) {
58
- newEl . isLoaded = true ;
59
- el . parentNode . removeChild ( el ) ;
60
- } ) ;
63
+ newEl . addEventListener ( 'load' , ( ) => {
64
+ newEl . isLoaded = true ;
65
+ el . parentNode . removeChild ( el ) ;
66
+ } ) ;
61
67
62
- newEl . addEventListener ( 'error' , function ( ) {
63
- newEl . isLoaded = true ;
64
- el . parentNode . removeChild ( el ) ;
65
- } ) ;
68
+ newEl . addEventListener ( 'error' , ( ) => {
69
+ newEl . isLoaded = true ;
70
+ el . parentNode . removeChild ( el ) ;
71
+ } ) ;
66
72
67
- newEl . href = url + '?' + Date . now ( ) ;
68
- el . parentNode . appendChild ( newEl ) ;
73
+ newEl . href = ` ${ url } ? ${ Date . now ( ) } ` ;
74
+ el . parentNode . appendChild ( newEl ) ;
69
75
}
70
76
71
77
function getReloadUrl ( href , src ) {
72
- href = normalizeUrl ( href , { stripWWW : false } ) ;
73
- let ret ;
74
- src . some ( function ( url ) {
75
- if ( href . indexOf ( src ) > - 1 ) {
76
- ret = url ;
77
- }
78
- } ) ;
79
- return ret ;
78
+ href = normalizeUrl ( href , { stripWWW : false } ) ;
79
+ let ret ;
80
+ // eslint-disable-next-line array-callback-return
81
+ src . some ( ( url ) => {
82
+ if ( href . indexOf ( src ) > - 1 ) {
83
+ ret = url ;
84
+ }
85
+ } ) ;
86
+ return ret ;
80
87
}
81
88
82
89
function reloadStyle ( src ) {
83
- const elements = document . querySelectorAll ( 'link' ) ;
84
- let loaded = false ;
90
+ const elements = document . querySelectorAll ( 'link' ) ;
91
+ let loaded = false ;
85
92
86
- forEach . call ( elements , function ( el ) {
87
- if ( el . visited === true ) return ;
93
+ forEach . call ( elements , ( el ) => {
94
+ if ( el . visited === true ) return ;
88
95
89
- const url = getReloadUrl ( el . href , src ) ;
90
- if ( url ) {
91
- updateCss ( el , url ) ;
92
- loaded = true ;
93
- }
94
- } ) ;
96
+ const url = getReloadUrl ( el . href , src ) ;
97
+ if ( url ) {
98
+ updateCss ( el , url ) ;
99
+ loaded = true ;
100
+ }
101
+ } ) ;
95
102
96
- return loaded ;
103
+ return loaded ;
97
104
}
98
105
99
106
function reloadAll ( ) {
100
- const elements = document . querySelectorAll ( 'link' ) ;
101
- forEach . call ( elements , function ( el ) {
102
- if ( el . visited === true ) return ;
103
- updateCss ( el ) ;
104
- } ) ;
107
+ const elements = document . querySelectorAll ( 'link' ) ;
108
+ forEach . call ( elements , ( el ) => {
109
+ if ( el . visited === true ) return ;
110
+ updateCss ( el ) ;
111
+ } ) ;
105
112
}
106
113
107
- module . exports = function ( moduleId , options ) {
108
- if ( noDocument ) {
109
- return noop ;
110
- }
111
-
112
- const getScriptSrc = getCurrentScriptUrl ( moduleId ) ;
113
-
114
- function update ( ) {
115
- const src = getScriptSrc ( options . fileMap ) ;
116
- const reloaded = reloadStyle ( src ) ;
117
- if ( reloaded && ! options . reloadAll ) {
118
- console . log ( '[HMR] css reload %s' , src . join ( ' ' ) ) ;
119
- } else {
120
- console . log ( '[HMR] Reload all css' ) ;
121
- reloadAll ( ) ;
114
+ module . exports = function ( moduleId , options ) {
115
+ if ( noDocument ) {
116
+ return noop ;
117
+ }
118
+
119
+ const getScriptSrc = getCurrentScriptUrl ( moduleId ) ;
120
+
121
+ function update ( ) {
122
+ const src = getScriptSrc ( options . fileMap ) ;
123
+ const reloaded = reloadStyle ( src ) ;
124
+ if ( reloaded && ! options . reloadAll ) {
125
+ console . log ( '[HMR] css reload %s' , src . join ( ' ' ) ) ;
126
+ } else {
127
+ console . log ( '[HMR] Reload all css' ) ;
128
+ reloadAll ( ) ;
129
+ }
122
130
}
123
- }
124
131
125
- return debounce ( update , 10 ) ;
132
+ return debounce ( update , 10 ) ;
126
133
} ;
0 commit comments