@@ -4,6 +4,8 @@ const log = require('npmlog');
4
4
const getProjectDependencies = require ( './getProjectDependencies' ) ;
5
5
const unregisterDependencyAndroid = require ( './android/unregisterNativeModule' ) ;
6
6
const unregisterDependencyIOS = require ( './ios/unregisterNativeModule' ) ;
7
+ const isInstalledAndroid = require ( './android/isInstalled' ) ;
8
+ const isInstalledIOS = require ( './ios/isInstalled' ) ;
7
9
const unlinkAssetsAndroid = require ( './android/unlinkAssets' ) ;
8
10
const unlinkAssetsIOS = require ( './ios/unlinkAssets' ) ;
9
11
const getDependencyConfig = require ( './getDependencyConfig' ) ;
@@ -13,14 +15,58 @@ const flatten = require('lodash').flatten;
13
15
14
16
log . heading = 'rnpm-link' ;
15
17
18
+ const unlinkDependencyAndroid = ( androidProject , dependency , packageName ) => {
19
+ if ( ! androidProject || ! dependency . android ) {
20
+ return ;
21
+ }
22
+
23
+ const isInstalled = isInstalledAndroid ( androidProject , packageName ) ;
24
+
25
+ if ( ! isInstalled ) {
26
+ log . info ( `Android module ${ packageName } is not installed` ) ;
27
+ return ;
28
+ }
29
+
30
+ log . info ( `Unlinking ${ packageName } android dependency` ) ;
31
+
32
+ unregisterDependencyAndroid ( packageName , dependency . android , androidProject ) ;
33
+
34
+ log . info ( `Android module ${ packageName } has been successfully unlinked` ) ;
35
+ } ;
36
+
37
+ const unlinkDependencyIOS = ( iOSProject , dependency , packageName ) => {
38
+ if ( ! iOSProject || ! dependency . ios ) {
39
+ return ;
40
+ }
41
+
42
+ const isInstalled = isInstalledIOS ( iOSProject , dependency . ios ) ;
43
+
44
+ if ( ! isInstalled ) {
45
+ log . info ( `iOS module ${ packageName } is not installed` ) ;
46
+ return ;
47
+ }
48
+
49
+ log . info ( `Unlinking ${ packageName } ios dependency` ) ;
50
+
51
+ unregisterDependencyIOS ( dependency . ios , iOSProject ) ;
52
+
53
+ log . info ( `iOS module ${ packageName } has been successfully unlinked` ) ;
54
+ } ;
55
+
16
56
/**
17
57
* Updates project and unlink specific dependency
18
58
*
19
- * If optional argument [packageName] is provided, it's the only one that's checked
59
+ * If optional argument [packageName] is provided, it's the only one
60
+ * that's checked
20
61
*/
21
62
module . exports = function unlink ( config , args ) {
63
+ const packageName = args [ 0 ] ;
64
+
65
+ var project ;
66
+ var dependency ;
67
+
22
68
try {
23
- const project = config . getProjectConfig ( ) ;
69
+ project = config . getProjectConfig ( ) ;
24
70
} catch ( err ) {
25
71
log . error (
26
72
'ERRPACKAGEJSON' ,
@@ -29,10 +75,8 @@ module.exports = function unlink(config, args) {
29
75
return Promise . reject ( err ) ;
30
76
}
31
77
32
- const packageName = args [ 0 ] ;
33
-
34
78
try {
35
- const dependency = config . getDependencyConfig ( packageName ) ;
79
+ dependency = config . getDependencyConfig ( packageName ) ;
36
80
} catch ( err ) {
37
81
log . warn (
38
82
'ERRINVALIDPROJ' ,
@@ -41,35 +85,10 @@ module.exports = function unlink(config, args) {
41
85
return Promise . reject ( err ) ;
42
86
}
43
87
44
- const allDependencies = getDependencyConfig ( config , getProjectDependencies ( ) ) ;
45
-
46
- if ( project . android && dependency . android ) {
47
- log . info ( `Unlinking ${ packageName } android dependency` ) ;
88
+ unlinkDependencyAndroid ( project . android , dependency , packageName ) ;
89
+ unlinkDependencyIOS ( project . ios , dependency , packageName ) ;
48
90
49
- const didUnlinkAndroid = unregisterDependencyAndroid (
50
- packageName ,
51
- dependency . android ,
52
- project . android
53
- ) ;
54
-
55
- if ( didUnlinkAndroid ) {
56
- log . info ( `Android module ${ packageName } has been successfully unlinked` ) ;
57
- } else {
58
- log . info ( `Android module ${ packageName } is not linked yet` ) ;
59
- }
60
- }
61
-
62
- if ( project . ios && dependency . ios ) {
63
- log . info ( `Unlinking ${ packageName } ios dependency` ) ;
64
-
65
- const didUnlinkIOS = unregisterDependencyIOS ( dependency . ios , project . ios ) ;
66
-
67
- if ( didUnlinkIOS ) {
68
- log . info ( `iOS module ${ packageName } has been successfully unlinked` ) ;
69
- } else {
70
- log . info ( `iOS module ${ packageName } is not linked yet` ) ;
71
- }
72
- }
91
+ const allDependencies = getDependencyConfig ( config , getProjectDependencies ( ) ) ;
73
92
74
93
const assets = difference (
75
94
dependency . assets ,
@@ -90,7 +109,9 @@ module.exports = function unlink(config, args) {
90
109
unlinkAssetsAndroid ( assets , project . android . assetsPath ) ;
91
110
}
92
111
93
- log . info ( `${ packageName } assets has been successfully unlinked from your project` ) ;
112
+ log . info (
113
+ `${ packageName } assets has been successfully unlinked from your project`
114
+ ) ;
94
115
95
116
return Promise . resolve ( ) ;
96
117
} ;
0 commit comments