UNPKG

3.41 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const tslib_1 = require("tslib");
4const cli_utils_1 = require("@design-systems/cli-utils");
5const child_process_1 = require("child_process");
6const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
7const fast_glob_1 = tslib_1.__importDefault(require("fast-glob"));
8/** Run child_process.exec as a promise. */
9function exec(cmd) {
10 return new Promise((resolve, reject) => {
11 child_process_1.exec(cmd, { cwd: process.cwd() }, (error, stdout, stderr) => {
12 if (error) {
13 reject(error);
14 }
15 resolve(stdout || stderr);
16 });
17 });
18}
19/** A plugin to reset a project back to a clean starting state. */
20class CleanPlugin {
21 async run(args = {}) {
22 const cleanModules = !args.noModules;
23 const cleanDist = !args.noDist;
24 const isRoot = cli_utils_1.getMonorepoRoot() === process.cwd();
25 const progressLogger = cli_utils_1.createLogger({ scope: 'clean', interactive: true });
26 if (isRoot) {
27 progressLogger.debug('Detected root...');
28 if (cleanModules) {
29 progressLogger.pending('Cleaning node_modules...');
30 await new Promise(r => setTimeout(r, 1000));
31 try {
32 const result = await exec('yarn lerna clean --yes');
33 progressLogger.debug(result);
34 }
35 catch (error) {
36 progressLogger.debug(error);
37 }
38 await fs_extra_1.default.remove('node_modules');
39 progressLogger.success('Cleaned all node_modules');
40 }
41 progressLogger.pending(`Cleaning ${cleanDist ? 'all' : 'some'} dist files...`);
42 await new Promise(r => setTimeout(r, 2000));
43 const dist = await fast_glob_1.default('{packages,components}/**/dist', {
44 onlyDirectories: true
45 });
46 const tsBuildInfo = await fast_glob_1.default('{packages,components}/**/tsconfig.tsbuildinfo');
47 await Promise.all([
48 ...(cleanDist ? dist.map(d => fs_extra_1.default.remove(d)) : []),
49 ...(cleanDist ? tsBuildInfo.map(d => fs_extra_1.default.remove(d)) : []),
50 fs_extra_1.default.remove('coverage'),
51 fs_extra_1.default.remove('out')
52 ]);
53 progressLogger.success('Cleaned build files');
54 }
55 else {
56 progressLogger.debug('Detected run from component...');
57 if (cleanModules) {
58 progressLogger.pending('Cleaning node_modules...');
59 await fs_extra_1.default.remove('node_modules');
60 progressLogger.complete('Cleaned node_modules for component');
61 }
62 if (cleanDist) {
63 progressLogger.pending('Cleaning dist files...');
64 await fs_extra_1.default.remove('dist');
65 await fs_extra_1.default.remove('tsconfig.tsbuildinfo');
66 progressLogger.success('Cleaned build files for component');
67 }
68 await fs_extra_1.default.remove('target');
69 progressLogger.success('Cleaned code coverage for component');
70 }
71 progressLogger.complete('Cleaned project!');
72 }
73}
74exports.default = CleanPlugin;
75//# sourceMappingURL=index.js.map
\No newline at end of file