1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const tslib_1 = require("tslib");
|
4 | const cli_utils_1 = require("@design-systems/cli-utils");
|
5 | const child_process_1 = require("child_process");
|
6 | const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
|
7 | const fast_glob_1 = tslib_1.__importDefault(require("fast-glob"));
|
8 |
|
9 | function 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 |
|
20 | class 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 | }
|
78 | exports.default = CleanPlugin;
|
79 |
|
\ | No newline at end of file |