11module . exports = function ( __dirname ) {
2- return {
3- findProjectDir : function ( ) {
4- return findProjectDir ( __dirname ) ;
5- } ,
6- postinstall : function ( ) {
7- return postinstall ( __dirname ) ;
8- } ,
9- preuninstall : function ( ) {
10- return preuninstall ( __dirname ) ;
11- }
12- } ;
2+ return {
3+ findProjectDir : function ( ) {
4+ return findProjectDir ( __dirname ) ;
5+ } ,
6+ postinstall : function ( ) {
7+ return postinstall ( __dirname ) ;
8+ } ,
9+ preuninstall : function ( ) {
10+ return preuninstall ( __dirname ) ;
11+ }
12+ } ;
1313} ;
1414
1515var fs = require ( 'fs' ) ;
@@ -20,104 +20,105 @@ var mkdirp = require('mkdirp');
2020var glob = require ( 'glob' ) ;
2121
2222function generateHookName ( pkg , hook ) {
23- return ( hook . name || pkg . name ) + '.js' ;
23+ // flatten scoped packages to names
24+ return ( ( hook . name || pkg . name ) . replace ( / @ / ig, '' ) . replace ( / \/ / ig, '-' ) ) + '.js' ;
2425}
2526
2627function findProjectDir ( pkgdir ) {
27- if ( process . env . INIT_CWD && _isNativeScriptAppRoot ( process . env . INIT_CWD ) ) {
28- return process . env . INIT_CWD ;
29- }
28+ if ( process . env . INIT_CWD && _isNativeScriptAppRoot ( process . env . INIT_CWD ) ) {
29+ return process . env . INIT_CWD ;
30+ }
3031
31- var candidateDir = pkgdir ;
32- var oldCandidateDir = null ;
32+ var candidateDir = pkgdir ;
33+ var oldCandidateDir = null ;
3334
34- while ( true ) {
35- candidateDir = path . dirname ( candidateDir ) ;
36- if ( oldCandidateDir === candidateDir ) {
37- return ;
38- }
35+ while ( true ) {
36+ candidateDir = path . dirname ( candidateDir ) ;
37+ if ( oldCandidateDir === candidateDir ) {
38+ return ;
39+ }
3940
40- if ( path . basename ( candidateDir ) === 'node_modules' ) {
41- continue ;
42- }
41+ if ( path . basename ( candidateDir ) === 'node_modules' ) {
42+ continue ;
43+ }
4344
44- if ( _isNativeScriptAppRoot ( candidateDir ) ) {
45- return candidateDir ;
46- }
45+ if ( _isNativeScriptAppRoot ( candidateDir ) ) {
46+ return candidateDir ;
47+ }
4748
48- oldCandidateDir = candidateDir ;
49- }
49+ oldCandidateDir = candidateDir ;
50+ }
5051}
5152
5253function _isNativeScriptAppRoot ( dir ) {
53- var isNativeScriptAppRoot = false ;
54- var packageJsonFile = path . join ( dir , 'package.json' ) ;
55- if ( fs . existsSync ( packageJsonFile ) ) {
56- var packageJsonContent = require ( packageJsonFile ) ;
57- isNativeScriptAppRoot = ! ! packageJsonContent . nativescript && ! ! packageJsonContent . nativescript . id ;
58- }
59-
60- return isNativeScriptAppRoot ;
54+ var isNativeScriptAppRoot = false ;
55+ var packageJsonFile = path . join ( dir , 'package.json' ) ;
56+ if ( fs . existsSync ( packageJsonFile ) ) {
57+ var packageJsonContent = require ( packageJsonFile ) ;
58+ isNativeScriptAppRoot = ! ! packageJsonContent . nativescript && ! ! packageJsonContent . nativescript . id ;
59+ }
60+
61+ return isNativeScriptAppRoot ;
6162}
6263
6364function forEachHook ( pkgdir , callback ) {
64- var pkg = require ( path . join ( pkgdir , 'package.json' ) ) ;
65- var ns = pkg . nativescript ;
66- if ( ! ns ) {
67- throw Error ( 'Not a NativeScript development module.' ) ;
68- }
69-
70- var projectDir = findProjectDir ( pkgdir ) ;
71- if ( ! projectDir ) {
72- return ;
73- }
74- var hooksDir = path . join ( projectDir , 'hooks' ) ;
75-
76- if ( ns . hooks ) {
77- ns . hooks . forEach ( function ( hook ) {
78- callback ( hooksDir , pkg , hook ) ;
79- } ) ;
80- }
65+ var pkg = require ( path . join ( pkgdir , 'package.json' ) ) ;
66+ var ns = pkg . nativescript ;
67+ if ( ! ns ) {
68+ throw Error ( 'Not a NativeScript development module.' ) ;
69+ }
70+
71+ var projectDir = findProjectDir ( pkgdir ) ;
72+ if ( ! projectDir ) {
73+ return ;
74+ }
75+ var hooksDir = path . join ( projectDir , 'hooks' ) ;
76+
77+ if ( ns . hooks ) {
78+ ns . hooks . forEach ( function ( hook ) {
79+ callback ( hooksDir , pkg , hook ) ;
80+ } ) ;
81+ }
8182}
8283
8384function hookInstalled ( hookDir , pkg , hook ) {
84- var hookBaseName = pkg . name ;
85- var hookGlob = path . join ( hookDir , "*" + hookBaseName + "*" ) ;
86- var files = glob . sync ( hookGlob ) ;
87- return files . length > 0 ;
85+ var hookBaseName = pkg . name ;
86+ var hookGlob = path . join ( hookDir , "*" + hookBaseName + "*" ) ;
87+ var files = glob . sync ( hookGlob ) ;
88+ return files . length > 0 ;
8889}
8990
9091function postinstall ( pkgdir ) {
91- forEachHook ( pkgdir , function ( hooksDir , pkg , hook ) {
92- var hookDir = path . join ( hooksDir , hook . type ) ;
93- if ( ! fs . existsSync ( hookDir ) ) {
94- mkdirp . sync ( hookDir ) ;
95- }
96- if ( hookInstalled ( hookDir , pkg , hook ) ) {
97- console . log ( `Hook already installed: ${ pkg . name } at location: ${ hookDir } ` ) ;
98- return ;
99- }
100- var hookFileName = generateHookName ( pkg , hook ) ;
101- var hookPath = path . join ( hookDir , hookFileName ) ;
102-
103- var trampoline = util . format ( '%srequire("%s/%s");' , hook . inject ? 'module.exports = ' : '' , pkg . name , hook . script ) ;
104-
105- fs . writeFileSync ( hookPath , trampoline + os . EOL ) ;
106- } ) ;
92+ forEachHook ( pkgdir , function ( hooksDir , pkg , hook ) {
93+ var hookDir = path . join ( hooksDir , hook . type ) ;
94+ if ( ! fs . existsSync ( hookDir ) ) {
95+ mkdirp . sync ( hookDir ) ;
96+ }
97+ if ( hookInstalled ( hookDir , pkg , hook ) ) {
98+ console . log ( `Hook already installed: ${ pkg . name } at location: ${ hookDir } ` ) ;
99+ return ;
100+ }
101+ var hookFileName = generateHookName ( pkg , hook ) ;
102+ var hookPath = path . join ( hookDir , hookFileName ) ;
103+
104+ var trampoline = util . format ( '%srequire("%s/%s");' , hook . inject ? 'module.exports = ' : '' , pkg . name , hook . script ) ;
105+
106+ fs . writeFileSync ( hookPath , trampoline + os . EOL ) ;
107+ } ) ;
107108}
108109
109110function preuninstall ( pkgdir ) {
110- forEachHook ( pkgdir , function ( hooksDir , pkg , hook ) {
111- var hookDir = path . join ( hooksDir , hook . type ) ;
112- var hookFileName = generateHookName ( pkg , hook ) ;
113- var hookPath = path . join ( hookDir , hookFileName ) ;
114-
115- try {
116- if ( fs . existsSync ( hookPath ) ) {
117- fs . unlinkSync ( hookPath ) ;
118- }
119- } catch ( err ) {
120- console . warn ( 'nativescript- hook: ' + err . toString ( ) ) ;
121- }
122- } ) ;
111+ forEachHook ( pkgdir , function ( hooksDir , pkg , hook ) {
112+ var hookDir = path . join ( hooksDir , hook . type ) ;
113+ var hookFileName = generateHookName ( pkg , hook ) ;
114+ var hookPath = path . join ( hookDir , hookFileName ) ;
115+
116+ try {
117+ if ( fs . existsSync ( hookPath ) ) {
118+ fs . unlinkSync ( hookPath ) ;
119+ }
120+ } catch ( err ) {
121+ console . warn ( '@ nativescript/ hook: ' + err . toString ( ) ) ;
122+ }
123+ } ) ;
123124}
0 commit comments