ngx-unused
Version:
Detect unused classes (components, pipes, services and directives) defined in Angular workspace.
76 lines (69 loc) • 2.58 kB
JavaScript
import { relative } from 'path';
import { cwd, stdout } from 'process';
export const CLI_DECORATOR = '[ngx-unused]';
export function usage() {
stdout.write('ngx-unused <directory> -p <tsconfig-file>\n');
stdout.write('Invoke ngx-unused --help for more details\n');
}
export function help() {
stdout.write(`ngx-unused - find unused classes in Angular codebase
\rUsage: ngx-unused <directory> [-p | --project] <tsconfig-file>
\r<directory> - directory to be scanned
\r to scan multiple directories pass names separated by space
\r (usages of classes from source roots will be also searched in source roots)
\r<tsconfig-file> - main tsconfig file
\r should be one containing @paths definitions
\r for NX projects its usually tsconfig.base.json\n
Options:
\r-p | --project <tsconfigfile> - tsconfig file path (required)
\r-h | --help - print this help
Source root directories and tsconfig file must be under the same root directory.
Examples:
ngx-unused . -p tsconfig.base.json
ngx-unused libs apps/my-app -p tsconfig.base.json
`);
}
export function invalidTsConfig() {
stdout.write("Provided tsconfig file doesn't exists\n");
}
export function printNoFiles() {
stdout.write('No relevant .ts files found in provided source root(s)\n');
}
export function print(content, progress = false) {
if (stdout.isTTY) {
if (progress) {
stdout.write('\r');
}
stdout.write(`${CLI_DECORATOR} `);
}
stdout.write(content);
}
export function printResults(results) {
if (results.length === 0) {
print('No unused Angular classes found\n');
return;
}
let output = '';
const groupedResults = results.reduce((grouped, result) => {
var _a;
const groupName = `${relative(cwd(), result.directory)}/${result.fileName}`;
if (grouped[groupName] !== undefined) {
(_a = grouped[groupName]) === null || _a === void 0 ? void 0 : _a.push(result);
}
else {
grouped[groupName] = [result];
}
return grouped;
}, {});
Object.entries(groupedResults).map(group => {
var _a;
output += group[0];
output += '\n';
output +=
((_a = group[1]) === null || _a === void 0 ? void 0 : _a.map(result => `- ${result.className}\n`).join('')) + '\n';
});
output += '\n\n';
stdout.write('\n');
print(`${results.length} (probably) unused classes\n`);
stdout.write(output);
}