11const types = require ( 'babel-types' ) ;
22const template = require ( 'babel-template' ) ;
3+ const urlJoin = require ( '../utils/urlJoin' ) ;
4+ const isURL = require ( '../utils/is-url' ) ;
5+ const matchesPattern = require ( './matches-pattern' ) ;
36
47const requireTemplate = template ( 'require("_bundle_loader")' ) ;
58const argTemplate = template ( 'require.resolve(MODULE)' ) ;
9+ const serviceWorkerPattern = [ 'navigator' , 'serviceWorker' , 'register' ] ;
610
711module . exports = {
812 ImportDeclaration ( node , asset ) {
@@ -37,6 +41,7 @@ module.exports = {
3741
3842 if ( isRequire ) {
3943 addDependency ( asset , args [ 0 ] ) ;
44+ return ;
4045 }
4146
4247 let isDynamicImport =
@@ -51,6 +56,21 @@ module.exports = {
5156 node . callee = requireTemplate ( ) . expression ;
5257 node . arguments [ 0 ] = argTemplate ( { MODULE : args [ 0 ] } ) . expression ;
5358 asset . isAstDirty = true ;
59+ return ;
60+ }
61+
62+ const isRegisterServiceWorker =
63+ types . isStringLiteral ( args [ 0 ] ) &&
64+ matchesPattern ( callee , serviceWorkerPattern ) ;
65+
66+ if ( isRegisterServiceWorker ) {
67+ let assetPath = asset . addURLDependency ( args [ 0 ] . value ) ;
68+ if ( ! isURL ( assetPath ) ) {
69+ assetPath = urlJoin ( asset . options . publicURL , assetPath ) ;
70+ }
71+ args [ 0 ] . value = assetPath ;
72+ asset . isAstDirty = true ;
73+ return ;
5474 }
5575 }
5676} ;
0 commit comments