From f5d64fb83383301843f8cb73ff1e080185c0c579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Tue, 9 Jul 2019 13:46:54 +0200 Subject: [PATCH] feat: support `unlink --platforms` (#511) --- .../cli/src/commands/install/uninstall.js | 4 +- packages/cli/src/commands/link/unlink.js | 37 +++++++++++++++---- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/packages/cli/src/commands/install/uninstall.js b/packages/cli/src/commands/install/uninstall.js index 7c51a0a41..be22269c9 100644 --- a/packages/cli/src/commands/install/uninstall.js +++ b/packages/cli/src/commands/install/uninstall.js @@ -10,13 +10,13 @@ import type {ConfigT} from 'types'; import {logger} from '@react-native-community/cli-tools'; import * as PackageManager from '../../tools/packageManager'; -import link from '../link/unlink'; +import unlink from '../link/unlink'; async function uninstall(args: Array, ctx: ConfigT) { const name = args[0]; logger.info(`Unlinking "${name}"...`); - await link.func([name], ctx); + await unlink.func([name], ctx, {}); logger.info(`Uninstalling "${name}"...`); await PackageManager.uninstall([name]); diff --git a/packages/cli/src/commands/link/unlink.js b/packages/cli/src/commands/link/unlink.js index 5b91768b1..d19d5321a 100644 --- a/packages/cli/src/commands/link/unlink.js +++ b/packages/cli/src/commands/link/unlink.js @@ -7,12 +7,16 @@ * @flow */ -import {flatMap, values, difference} from 'lodash'; +import {flatMap, values, difference, pick} from 'lodash'; import {logger, CLIError} from '@react-native-community/cli-tools'; import type {ConfigT} from 'types'; import getPlatformName from './getPlatformName'; import makeHook from './makeHook'; +type Flags = { + platforms?: Array, +}; + const unlinkDependency = ( platforms, project, @@ -78,8 +82,20 @@ const unlinkDependency = ( * If optional argument [packageName] is provided, it's the only one * that's checked */ -async function unlink(args: Array, ctx: ConfigT) { +async function unlink(args: Array, ctx: ConfigT, opts: Flags) { const packageName = args[0]; + let platforms = ctx.platforms; + + if (opts.platforms) { + platforms = pick(platforms, opts.platforms); + logger.debug('Skipping selected platforms'); + } + + logger.debug( + `Available platforms: ${Object.keys(platforms) + .map(getPlatformName) + .join(', ')}`, + ); const {[packageName]: dependency, ...otherDependencies} = ctx.dependencies; @@ -95,7 +111,7 @@ async function unlink(args: Array, ctx: ConfigT) { await makeHook(dependency.hooks.preulink)(); } unlinkDependency( - ctx.platforms, + platforms, ctx.project, dependency, packageName, @@ -122,12 +138,12 @@ async function unlink(args: Array, ctx: ConfigT) { return; } - Object.keys(ctx.platforms || {}).forEach(platform => { + Object.keys(platforms || {}).forEach(platform => { const projectConfig = ctx.project[platform]; const linkConfig = - ctx.platforms[platform] && - ctx.platforms[platform].linkConfig && - ctx.platforms[platform].linkConfig(); + platforms[platform] && + platforms[platform].linkConfig && + platforms[platform].linkConfig(); if (!linkConfig || !linkConfig.unlinkAssets || !projectConfig) { return; } @@ -146,4 +162,11 @@ export default { func: unlink, description: 'unlink native dependency', name: 'unlink ', + options: [ + { + name: '--platforms [list]', + description: 'Scope unlinking to specified platforms', + parse: (val: string) => val.toLowerCase().split(','), + }, + ], };