mirror of
https://github.com/status-im/react-native.git
synced 2025-01-10 01:25:39 +00:00
0af640bfae
Summary: This commit removes `rnpm` folder that we left during initial merge to keep the diff cleaner. The `core`, `link` and `install` have now the same directory structure as any other command to make development more natural for all of us. From most notable differences: 1) the `src` folder is now gone. The new structure should make it easier for people to work with the stuff and also move us closer to 100% rnpm integration, 2) There's also no `package.json` present in any of the `rnpm` packages, since they are no longer standalone modules, 3) There's no `bugs.url` in link.js since main package.json of React doesn't specify it. Decided to hardcode it to facebook/react-native since it's really unlikely to change. If one would prefer to use pkg.bugs.url as before, a separate PR modifying package.json should be sent. Closes https://github.com/facebook/react-native/pull/9509 Differential Revision: D3751115 fbshipit-source-id: 74ae8330f7634df0887ad676808f47eee4b8de85
127 lines
3.5 KiB
JavaScript
127 lines
3.5 KiB
JavaScript
const log = require('npmlog');
|
|
|
|
const getProjectDependencies = require('./getProjectDependencies');
|
|
const unregisterDependencyAndroid = require('./android/unregisterNativeModule');
|
|
const unregisterDependencyIOS = require('./ios/unregisterNativeModule');
|
|
const isInstalledAndroid = require('./android/isInstalled');
|
|
const isInstalledIOS = require('./ios/isInstalled');
|
|
const unlinkAssetsAndroid = require('./android/unlinkAssets');
|
|
const unlinkAssetsIOS = require('./ios/unlinkAssets');
|
|
const getDependencyConfig = require('./getDependencyConfig');
|
|
const compact = require('lodash').compact;
|
|
const difference = require('lodash').difference;
|
|
const filter = require('lodash').filter;
|
|
const isEmpty = require('lodash').isEmpty;
|
|
const flatten = require('lodash').flatten;
|
|
|
|
log.heading = 'rnpm-link';
|
|
|
|
const unlinkDependencyAndroid = (androidProject, dependency, packageName) => {
|
|
if (!androidProject || !dependency.android) {
|
|
return;
|
|
}
|
|
|
|
const isInstalled = isInstalledAndroid(androidProject, packageName);
|
|
|
|
if (!isInstalled) {
|
|
log.info(`Android module ${packageName} is not installed`);
|
|
return;
|
|
}
|
|
|
|
log.info(`Unlinking ${packageName} android dependency`);
|
|
|
|
unregisterDependencyAndroid(packageName, dependency.android, androidProject);
|
|
|
|
log.info(`Android module ${packageName} has been successfully unlinked`);
|
|
};
|
|
|
|
const unlinkDependencyIOS = (iOSProject, dependency, packageName, iOSDependencies) => {
|
|
if (!iOSProject || !dependency.ios) {
|
|
return;
|
|
}
|
|
|
|
const isInstalled = isInstalledIOS(iOSProject, dependency.ios);
|
|
|
|
if (!isInstalled) {
|
|
log.info(`iOS module ${packageName} is not installed`);
|
|
return;
|
|
}
|
|
|
|
log.info(`Unlinking ${packageName} ios dependency`);
|
|
|
|
unregisterDependencyIOS(dependency.ios, iOSProject, iOSDependencies);
|
|
|
|
log.info(`iOS module ${packageName} has been successfully unlinked`);
|
|
};
|
|
|
|
/**
|
|
* Updates project and unlink specific dependency
|
|
*
|
|
* If optional argument [packageName] is provided, it's the only one
|
|
* that's checked
|
|
*/
|
|
function unlink(args, config) {
|
|
const packageName = args[0];
|
|
|
|
var project;
|
|
var dependency;
|
|
|
|
try {
|
|
project = config.getProjectConfig();
|
|
} catch (err) {
|
|
log.error(
|
|
'ERRPACKAGEJSON',
|
|
'No package found. Are you sure it\'s a React Native project?'
|
|
);
|
|
return Promise.reject(err);
|
|
}
|
|
|
|
try {
|
|
dependency = config.getDependencyConfig(packageName);
|
|
} catch (err) {
|
|
log.warn(
|
|
'ERRINVALIDPROJ',
|
|
`Project ${packageName} is not a react-native library`
|
|
);
|
|
return Promise.reject(err);
|
|
}
|
|
|
|
const allDependencies = getDependencyConfig(config, getProjectDependencies());
|
|
const otherDependencies = filter(allDependencies, d => d.name !== packageName);
|
|
const iOSDependencies = compact(otherDependencies.map(d => d.config.ios));
|
|
|
|
unlinkDependencyAndroid(project.android, dependency, packageName);
|
|
unlinkDependencyIOS(project.ios, dependency, packageName, iOSDependencies);
|
|
|
|
const assets = difference(
|
|
dependency.assets,
|
|
flatten(allDependencies, d => d.assets)
|
|
);
|
|
|
|
if (isEmpty(assets)) {
|
|
return Promise.resolve();
|
|
}
|
|
|
|
if (project.ios) {
|
|
log.info('Unlinking assets from ios project');
|
|
unlinkAssetsIOS(assets, project.ios);
|
|
}
|
|
|
|
if (project.android) {
|
|
log.info('Unlinking assets from android project');
|
|
unlinkAssetsAndroid(assets, project.android.assetsPath);
|
|
}
|
|
|
|
log.info(
|
|
`${packageName} assets has been successfully unlinked from your project`
|
|
);
|
|
|
|
return Promise.resolve();
|
|
};
|
|
|
|
module.exports = {
|
|
func: unlink,
|
|
description: 'unlink native dependency',
|
|
name: 'unlink <packageName>',
|
|
};
|