48 lines
1.2 KiB
JavaScript
48 lines
1.2 KiB
JavaScript
|
|
const fs = require('fs');
|
||
|
|
const path = require('path');
|
||
|
|
const root = path.resolve(__dirname, '..');
|
||
|
|
|
||
|
|
function walk(dir) {
|
||
|
|
const res = [];
|
||
|
|
const items = fs.readdirSync(dir, { withFileTypes: true });
|
||
|
|
for (const it of items) {
|
||
|
|
const full = path.join(dir, it.name);
|
||
|
|
if (it.isDirectory()) {
|
||
|
|
// skip virtual env and node_modules
|
||
|
|
if (['.venv', 'node_modules', '.git'].includes(it.name)) continue;
|
||
|
|
res.push(...walk(full));
|
||
|
|
} else {
|
||
|
|
res.push(full);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return res;
|
||
|
|
}
|
||
|
|
|
||
|
|
function isImage(f) {
|
||
|
|
return /\.(png|jpe?g|gif|svg|webp|ico)$/i.test(f);
|
||
|
|
}
|
||
|
|
function isTextFile(f) {
|
||
|
|
return /\.(js|jsx|ts|tsx|json|html|htm|wxml|wxss|css|md|vue|py|java|xml|txt|scss|less|styl|mdx|yaml|yml)$/i.test(f);
|
||
|
|
}
|
||
|
|
|
||
|
|
const all = walk(root);
|
||
|
|
const images = all.filter(isImage);
|
||
|
|
const textFiles = all.filter(isTextFile);
|
||
|
|
|
||
|
|
const unused = [];
|
||
|
|
for (const img of images) {
|
||
|
|
const name = path.basename(img);
|
||
|
|
let found = false;
|
||
|
|
for (const tf of textFiles) {
|
||
|
|
try {
|
||
|
|
const content = fs.readFileSync(tf, 'utf8');
|
||
|
|
if (content.indexOf(name) !== -1) { found = true; break; }
|
||
|
|
} catch (e) {
|
||
|
|
// ignore
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (!found) unused.push(img);
|
||
|
|
}
|
||
|
|
|
||
|
|
console.log(JSON.stringify({ images: images, unused: unused }, null, 2));
|