UNPKG

4.62 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = void 0;
7
8function _lodash() {
9 const data = require("lodash");
10
11 _lodash = function () {
12 return data;
13 };
14
15 return data;
16}
17
18function _cliTools() {
19 const data = require("@react-native-community/cli-tools");
20
21 _cliTools = function () {
22 return data;
23 };
24
25 return data;
26}
27
28var _getPlatformName = _interopRequireDefault(require("./getPlatformName"));
29
30var _makeHook = _interopRequireDefault(require("./makeHook"));
31
32var _printDeprecationWarning = _interopRequireDefault(require("./printDeprecationWarning"));
33
34function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
35
36/**
37 * Copyright (c) Facebook, Inc. and its affiliates.
38 *
39 * This source code is licensed under the MIT license found in the
40 * LICENSE file in the root directory of this source tree.
41 */
42const unlinkDependency = (platforms, project, dependency, packageName, otherDependencies) => {
43 (0, _printDeprecationWarning.default)('react-native unlink [packageName]');
44 Object.keys(platforms || {}).forEach(platform => {
45 const projectConfig = project[platform];
46 const dependencyConfig = dependency.platforms[platform];
47
48 if (!projectConfig || !dependencyConfig) {
49 return;
50 }
51
52 const linkConfig = platforms[platform] && platforms[platform].linkConfig && platforms[platform].linkConfig();
53
54 if (!linkConfig || !linkConfig.isInstalled || !linkConfig.unregister) {
55 return;
56 }
57
58 const isInstalled = linkConfig.isInstalled(projectConfig, packageName, dependencyConfig);
59
60 if (!isInstalled) {
61 _cliTools().logger.info(`${(0, _getPlatformName.default)(platform)} module "${packageName}" is not installed`);
62
63 return;
64 }
65
66 _cliTools().logger.info(`Unlinking "${packageName}" ${(0, _getPlatformName.default)(platform)} dependency`);
67
68 linkConfig.unregister(packageName, dependencyConfig, projectConfig, otherDependencies);
69
70 _cliTools().logger.info(`${(0, _getPlatformName.default)(platform)} module "${dependency.name}" has been successfully unlinked`);
71 });
72};
73/**
74 * Updates project and unlink specific dependency
75 *
76 * If optional argument [packageName] is provided, it's the only one
77 * that's checked
78 */
79
80
81async function unlink(args, ctx, opts) {
82 const packageName = args[0];
83 let platforms = ctx.platforms;
84
85 if (opts.platforms) {
86 // @ts-ignore
87 platforms = (0, _lodash().pick)(platforms, opts.platforms);
88
89 _cliTools().logger.debug('Skipping selected platforms');
90 }
91
92 _cliTools().logger.debug(`Available platforms: ${Object.keys(platforms).map(_getPlatformName.default).join(', ')}`);
93
94 const {
95 [packageName]: dependency,
96 ...otherDependencies
97 } = ctx.dependencies;
98
99 if (!dependency) {
100 throw new (_cliTools().CLIError)(`
101 Failed to unlink "${packageName}". It appears that the project is not linked yet.
102 `);
103 }
104
105 const dependencies = (0, _lodash().values)(otherDependencies);
106
107 try {
108 if (dependency.hooks.preunlink) {
109 await (0, _makeHook.default)(dependency.hooks.preunlink)();
110 }
111
112 unlinkDependency(platforms, ctx.project, dependency, packageName, dependencies);
113
114 if (dependency.hooks.postunlink) {
115 await (0, _makeHook.default)(dependency.hooks.postunlink)();
116 }
117 } catch (error) {
118 throw new (_cliTools().CLIError)(`Something went wrong while unlinking. Reason ${error.message}`, error);
119 } // @todo move all these to above try/catch
120 // @todo it is possible we could be unlinking some project assets in case of duplicate
121
122
123 const assets = (0, _lodash().difference)(dependency.assets, (0, _lodash().flatMap)(dependencies, d => d.assets));
124
125 if (assets.length === 0) {
126 return;
127 }
128
129 Object.keys(platforms || {}).forEach(platform => {
130 const projectConfig = ctx.project[platform];
131 const linkConfig = platforms[platform] && platforms[platform].linkConfig && platforms[platform].linkConfig();
132
133 if (!linkConfig || !linkConfig.unlinkAssets || !projectConfig) {
134 return;
135 }
136
137 _cliTools().logger.info(`Unlinking assets from ${platform} project`);
138
139 linkConfig.unlinkAssets(assets, projectConfig);
140 });
141
142 _cliTools().logger.info(`${packageName} assets has been successfully unlinked from your project`);
143}
144
145var _default = {
146 func: unlink,
147 description: 'unlink native dependency',
148 name: 'unlink <packageName>',
149 options: [{
150 name: '--platforms [list]',
151 description: 'Scope unlinking to specified platforms',
152 parse: val => val.toLowerCase().split(',')
153 }]
154};
155exports.default = _default;
156
157//# sourceMappingURL=unlink.js.map
\No newline at end of file