UNPKG

3.49 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) => {
31 setTimeout(r, 1000);
32 });
33 try {
34 const result = await exec('yarn lerna clean --yes');
35 progressLogger.debug(result);
36 }
37 catch (error) {
38 progressLogger.debug(error);
39 }
40 await fs_extra_1.default.remove('node_modules');
41 progressLogger.success('Cleaned all node_modules');
42 }
43 progressLogger.pending(`Cleaning ${cleanDist ? 'all' : 'some'} dist files...`);
44 await new Promise((r) => {
45 setTimeout(r, 2000);
46 });
47 const dist = await fast_glob_1.default('{packages,components}/**/dist', {
48 onlyDirectories: true,
49 });
50 const tsBuildInfo = await fast_glob_1.default('{packages,components}/**/tsconfig.tsbuildinfo');
51 await Promise.all([
52 ...(cleanDist ? dist.map((d) => fs_extra_1.default.remove(d)) : []),
53 ...(cleanDist ? tsBuildInfo.map((d) => fs_extra_1.default.remove(d)) : []),
54 fs_extra_1.default.remove('coverage'),
55 fs_extra_1.default.remove('out'),
56 ]);
57 progressLogger.success('Cleaned build files');
58 }
59 else {
60 progressLogger.debug('Detected run from component...');
61 if (cleanModules) {
62 progressLogger.pending('Cleaning node_modules...');
63 await fs_extra_1.default.remove('node_modules');
64 progressLogger.complete('Cleaned node_modules for component');
65 }
66 if (cleanDist) {
67 progressLogger.pending('Cleaning dist files...');
68 await fs_extra_1.default.remove('dist');
69 await fs_extra_1.default.remove('tsconfig.tsbuildinfo');
70 progressLogger.success('Cleaned build files for component');
71 }
72 await fs_extra_1.default.remove('target');
73 progressLogger.success('Cleaned code coverage for component');
74 }
75 progressLogger.complete('Cleaned project!');
76 }
77}
78exports.default = CleanPlugin;
79//# sourceMappingURL=index.js.map
\No newline at end of file