Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions local-cli/link/commandStub.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module.exports = (cb) => cb();
6 changes: 2 additions & 4 deletions local-cli/link/link.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,13 @@ const copyAssetsIOS = require('./ios/copyAssets');
const getProjectDependencies = require('./getProjectDependencies');
const getDependencyConfig = require('./getDependencyConfig');
const pollParams = require('./pollParams');
const commandStub = require('./commandStub');
const promisify = require('./promisify');

log.heading = 'rnpm-link';

const commandStub = (cb) => cb();
const dedupeAssets = (assets) => uniq(assets, asset => path.basename(asset));

const promisify = (func) => new Promise((resolve, reject) =>
func((err, res) => err ? reject(err) : resolve(res))
);

const linkDependencyAndroid = (androidProject, dependency) => {
if (!androidProject || !dependency.config.android) {
Expand Down
3 changes: 3 additions & 0 deletions local-cli/link/promisify.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = (func) => new Promise((resolve, reject) =>
func((err, res) => err ? reject(err) : resolve(res))
);
72 changes: 44 additions & 28 deletions local-cli/link/unlink.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,12 @@ 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 find = require('lodash').find;
const flatten = require('lodash').flatten;
const isEmpty = require('lodash').isEmpty;
const promiseWaterfall = require('./promiseWaterfall');
const commandStub = require('./commandStub');
const promisify = require('./promisify');

log.heading = 'rnpm-link';

Expand Down Expand Up @@ -88,35 +92,47 @@ function unlink(args, config) {

const allDependencies = getDependencyConfig(config, getProjectDependencies());
const otherDependencies = filter(allDependencies, d => d.name !== packageName);
const thisDependency = find(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();
const tasks = [
() => promisify(thisDependency.config.commands.preunlink || commandStub),
() => unlinkDependencyAndroid(project.android, dependency, packageName),
() => unlinkDependencyIOS(project.ios, dependency, packageName, iOSDependencies),
() => promisify(thisDependency.config.commands.postunlink || commandStub)
];

return promiseWaterfall(tasks)
.then(() => {
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`
);
})
.catch(err => {
log.error(
`It seems something went wrong while unlinking. Error: ${err.message}`
);
throw err;
});
};

module.exports = {
Expand Down