forked from webpack/webpack-cli
/
index.ts
67 lines (60 loc) · 1.95 KB
/
index.ts
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
58
59
60
61
62
63
64
65
66
67
import envinfo from 'envinfo';
import { logger } from 'webpack-cli';
import { commands } from 'webpack-cli';
import WebpackCLI from 'webpack-cli';
interface Information {
Binaries?: string[];
Browsers?: string[];
System?: string[];
npmGlobalPackages?: string[];
npmPackages?: string | string[];
}
const DEFAULT_DETAILS: Information = {
Binaries: ['Node', 'Yarn', 'npm'],
Browsers: [
'Brave Browser',
'Chrome',
'Chrome Canary',
'Edge',
'Firefox',
'Firefox Developer Edition',
'Firefox Nightly',
'Internet Explorer',
'Safari',
'Safari Technology Preview',
],
System: ['OS', 'CPU', 'Memory'],
npmGlobalPackages: ['webpack', 'webpack-cli'],
npmPackages: '*webpack*',
};
export default async function info(...args): Promise<string[]> {
const cli = new WebpackCLI();
const { flags: infoFlags } = commands.find((cmd) => cmd.name === 'info');
const parsedArgs = cli.argParser(infoFlags, args, true);
const infoArgs = parsedArgs.opts;
const envinfoConfig = {};
if (parsedArgs.unknownArgs.length > 0) {
logger.error(`Unknown argument: ${parsedArgs.unknownArgs}`);
process.exit(2);
}
if (infoArgs.output) {
// Remove quotes if exist
const output = infoArgs.output.replace(/['"]+/g, '');
switch (output) {
case 'markdown':
envinfoConfig['markdown'] = true;
break;
case 'json':
envinfoConfig['json'] = true;
break;
default:
logger.error(`${infoArgs.output} is not a valid value for output\n`);
}
}
let output = await envinfo.run(DEFAULT_DETAILS, envinfoConfig);
output = output.replace(/npmPackages/g, 'Packages');
output = output.replace(/npmGlobalPackages/g, 'Global Packages');
const finalOutput = output;
logger.raw(finalOutput);
return finalOutput;
}