mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-01-19 04:19:30 +08:00
77 lines
2.3 KiB
TypeScript
77 lines
2.3 KiB
TypeScript
import fs from 'fs-extra';
|
|
import { extname, resolve } from 'path';
|
|
import { formatSize } from './utils.js';
|
|
|
|
(async function () {
|
|
let dir = process.argv.slice(2);
|
|
if (dir.length === 0) dir = ['./src'];
|
|
let totalLines = 0;
|
|
let totalFiles = 0;
|
|
let totalSize = 0;
|
|
const list: Record<string, [number, number, number]> = {};
|
|
const ignoreDir = [
|
|
'node_modules',
|
|
'floors',
|
|
'thirdparty',
|
|
'dist',
|
|
'_bundle'
|
|
];
|
|
const ignoreFile = ['.d.ts', '.min.'];
|
|
const exts = [
|
|
'.ts',
|
|
'.tsx',
|
|
'.js',
|
|
'.jsx',
|
|
'.vue',
|
|
'.less',
|
|
'.css',
|
|
'.html'
|
|
];
|
|
|
|
const check = async (dir: string) => {
|
|
if (ignoreDir.some(v => dir.includes(v))) return;
|
|
const d = await fs.readdir(dir);
|
|
for await (const one of d) {
|
|
if (ignoreFile.some(v => one.includes(v))) continue;
|
|
const stat = await fs.stat(resolve(dir, one));
|
|
if (stat.isFile()) {
|
|
if (exts.some(v => one.endsWith(v))) {
|
|
const file = await fs.readFile(resolve(dir, one), 'utf-8');
|
|
const lines = file.split('\n').length;
|
|
const ext = extname(one);
|
|
list[ext] ??= [0, 0, 0];
|
|
list[ext][0]++;
|
|
list[ext][1] += lines;
|
|
list[ext][2] += stat.size;
|
|
totalLines += lines;
|
|
totalFiles++;
|
|
totalSize += stat.size;
|
|
}
|
|
} else {
|
|
await check(resolve(dir, one));
|
|
}
|
|
}
|
|
};
|
|
await Promise.all(dir.map(v => check(v)));
|
|
|
|
const sorted = Object.entries(list).sort((a, b) => {
|
|
return a[1][1] - b[1][1];
|
|
});
|
|
for (const [ext, [file, lines, size]] of sorted) {
|
|
console.log(
|
|
`${ext.slice(1).padEnd(7, ' ')}files: ${file
|
|
.toString()
|
|
.padEnd(6, ' ')}lines: ${lines
|
|
.toString()
|
|
.padEnd(9, ' ')}size: ${formatSize(size)}`
|
|
);
|
|
}
|
|
console.log(
|
|
`\x1b[33mtotal files: ${totalFiles
|
|
.toString()
|
|
.padEnd(6, ' ')}lines: ${totalLines
|
|
.toString()
|
|
.padEnd(9, ' ')}size: ${formatSize(totalSize)}\x1b[0m`
|
|
);
|
|
})();
|