@@ -19,9 +19,13 @@ var util = require('util');
1919var mkdirp = require ( 'mkdirp' ) ;
2020var glob = require ( 'glob' ) ;
2121
22- function generateHookName ( pkg , hook ) {
22+ function getExtension ( hook ) {
23+ return path . extname ( hook . script ) || '.mjs' ;
24+ }
25+
26+ function generateHookName ( pkg , hook , hookExtension ) {
2327 // flatten scoped packages to names
24- return ( ( hook . name || pkg . name ) . replace ( / @ / ig, '' ) . replace ( / \/ / ig, '-' ) ) + '.mjs' ;
28+ return ( ( hook . name || pkg . name ) . replace ( / @ / ig, '' ) . replace ( / \/ / ig, '-' ) ) + hookExtension ;
2529}
2630
2731function findProjectDir ( pkgdir ) {
@@ -97,12 +101,17 @@ function postinstall(pkgdir) {
97101 console . log ( `Hook already installed: ${ pkg . name } at location: ${ hookDir } ` ) ;
98102 return ;
99103 }
100- var hookFileName = generateHookName ( pkg , hook ) ;
104+ var hookExtension = getExtension ( hook ) ;
105+ var hookFileName = generateHookName ( pkg , hook , hookExtension ) ;
101106 var hookPath = path . join ( hookDir , hookFileName ) ;
102107
108+ var trampoline = '' ;
109+ if ( hookExtension === '.mjs' ) {
103110 var trampoline = `import hooks from "${ pkg . name } /${ hook . script } ";
104-
105111export default hooks;`
112+ } else if ( [ '.js' , '.cjs' ] . includes ( hookExtension ) ) {
113+ trampoline = util . format ( '%srequire("%s/%s");' , hook . inject ? 'module.exports = ' : '' , pkg . name , hook . script ) ;
114+ }
106115
107116 fs . writeFileSync ( hookPath , trampoline + os . EOL ) ;
108117 } ) ;
@@ -111,7 +120,8 @@ export default hooks;`
111120function preuninstall ( pkgdir ) {
112121 forEachHook ( pkgdir , function ( hooksDir , pkg , hook ) {
113122 var hookDir = path . join ( hooksDir , hook . type ) ;
114- var hookFileName = generateHookName ( pkg , hook ) ;
123+ var hookExtension = getExtension ( hook ) ;
124+ var hookFileName = generateHookName ( pkg , hook , hookExtension ) ;
115125 var hookPath = path . join ( hookDir , hookFileName ) ;
116126
117127 try {
0 commit comments