1
+ module . 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
+ } ;
13
+ }
14
+
1
15
var fs = require ( 'fs' ) ;
2
16
var os = require ( 'os' ) ;
3
17
var path = require ( 'path' ) ;
@@ -8,18 +22,38 @@ function generateHookName(pkg, hook) {
8
22
return pkg . name + '.js' ;
9
23
}
10
24
25
+ function findProjectDir ( pkgdir ) {
26
+ var candidateDir = pkgdir ;
27
+
28
+ while ( true ) {
29
+ var oldCandidateDir = candidateDir ;
30
+ candidateDir = path . dirname ( candidateDir ) ;
31
+ if ( path . basename ( candidateDir ) === 'node_modules' ) {
32
+ continue ;
33
+ }
34
+ var packageJsonFile = path . join ( candidateDir , 'package.json' ) ;
35
+ if ( fs . existsSync ( packageJsonFile ) ) {
36
+ return candidateDir ;
37
+ }
38
+
39
+ if ( oldCandidateDir === candidateDir ) {
40
+ return ;
41
+ }
42
+ }
43
+ }
44
+
11
45
function forEachHook ( pkgdir , callback ) {
12
46
var pkg = require ( path . join ( pkgdir , 'package.json' ) ) ;
13
47
var ns = pkg . nativescript ;
14
48
if ( ! ns ) {
15
49
throw Error ( 'Not a NativeScript development module.' ) ;
16
50
}
17
51
18
- var hooksDir = process . env [ 'TNS_HOOKS_DIR' ] ;
19
- if ( ! hooksDir ) {
20
- console . warn ( 'This module should be installed through the `tns install` command, not npm.' ) ;
21
- process . exit ( 1 ) ;
52
+ var projectDir = findProjectDir ( pkgdir ) ;
53
+ if ( ! projectDir ) {
54
+ return ;
22
55
}
56
+ var hooksDir = path . join ( projectDir , 'hooks' ) ;
23
57
24
58
if ( ns . hooks ) {
25
59
ns . hooks . forEach ( function ( hook ) {
@@ -28,8 +62,7 @@ function forEachHook(pkgdir, callback) {
28
62
}
29
63
}
30
64
31
- exports . postinstall = function postinstall ( pkgdir ) {
32
- var hookFiles = [ ] ;
65
+ function postinstall ( pkgdir ) {
33
66
forEachHook ( pkgdir , function ( hooksDir , pkg , hook ) {
34
67
var hookDir = path . join ( hooksDir , hook . type ) ;
35
68
if ( ! fs . existsSync ( hookDir ) ) {
@@ -41,22 +74,21 @@ exports.postinstall = function postinstall(pkgdir) {
41
74
var trampoline = util . format ( '%srequire("%s/%s");' , hook . inject ? 'module.exports = ' : '' , pkg . name , hook . script ) ;
42
75
43
76
fs . writeFileSync ( hookPath , trampoline + os . EOL ) ;
44
- hookFiles . push ( path . relative ( pkgdir , hookPath ) ) ;
45
77
} ) ;
46
-
47
- fs . writeFileSync ( path . join ( pkgdir , '_hooks.json' ) , JSON . stringify ( hookFiles ) ) ;
48
78
}
49
79
50
- exports . preuninstall = function preuninstall ( pkgdir ) {
51
- try {
52
- var hookFiles = JSON . parse ( fs . readFileSync ( path . join ( pkgdir , '_hooks.json' ) ) ) ;
53
- hookFiles . forEach ( function ( hookRelativePath ) {
54
- var hookFileName = path . join ( pkgdir , hookRelativePath ) ;
55
- if ( fs . existsSync ( hookFileName ) ) {
56
- fs . unlinkSync ( hookFileName ) ;
80
+ function preuninstall ( pkgdir ) {
81
+ forEachHook ( pkgdir , function ( hooksDir , pkg , hook ) {
82
+ var hookDir = path . join ( hooksDir , hook . type ) ;
83
+ var hookFileName = generateHookName ( pkg , hook ) ;
84
+ var hookPath = path . join ( hookDir , hookFileName ) ;
85
+
86
+ try {
87
+ if ( fs . existsSync ( hookPath ) ) {
88
+ fs . unlinkSync ( hookPath ) ;
57
89
}
58
- } ) ;
59
- } catch ( err ) {
60
- console . warn ( 'pkgdir: ' + err . toString ( ) ) ;
61
- }
90
+ } catch ( err ) {
91
+ console . warn ( 'nativescript-hook: ' + err . toString ( ) ) ;
92
+ }
93
+ } ) ;
62
94
}
0 commit comments