forked from OKEAMAH/bolt
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathunlink.js
More file actions
57 lines (50 loc) · 1.47 KB
/
unlink.js
File metadata and controls
57 lines (50 loc) · 1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// @flow
import Project from '../Project';
import * as yarn from '../utils/yarn';
import * as logger from '../utils/logger';
import * as options from '../utils/options';
import { BoltError } from '../utils/errors';
import * as messages from '../utils/messages';
function getPackageMap(packages) {
let packageMap = new Map();
for (let pkg of packages) {
packageMap.set(pkg.getName(), pkg);
}
return packageMap;
}
export type UnlinkOptions = {
cwd?: string,
packagesToUnlink: ?Array<string>
};
export function toUnlinkOptions(
args: options.Args,
flags: options.Flags
): UnlinkOptions {
return {
cwd: options.string(flags.cwd, 'cwd'),
packagesToUnlink: args
};
}
export async function unlink(opts: UnlinkOptions) {
let cwd = opts.cwd || process.cwd();
let packagesToUnlink = opts.packagesToUnlink;
let project = await Project.init(cwd);
let packages = await project.getPackages();
let packageMap = getPackageMap(packages);
// guard to check if there are packages to unlink
if (packagesToUnlink && packagesToUnlink.length) {
await Promise.all(
packagesToUnlink.map(async packageToUnlink => {
if (packageMap.has(packageToUnlink)) {
logger.warn(messages.unlinkInternalPackage(packageToUnlink));
} else {
await yarn.cliCommand(cwd, 'unlink', [packageToUnlink]);
}
})
);
} else {
throw new BoltError(
'Please specify package to unlink. Try: bolt w [packageToUnlink] unlink'
);
}
}