unlink.js 4.5 KB

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