Files
2026-06-21 17:50:24 +08:00

52 lines
1.6 KiB
JavaScript

import fs from 'node:fs';
import path from 'node:path';
function walk(dir, acc = []) {
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
const full = path.join(dir, entry.name);
if (entry.isDirectory() && entry.name !== 'node_modules') {
walk(full, acc);
} else if (/\.(ts|vue)$/.test(entry.name)) {
acc.push(full);
}
}
return acc;
}
const srcFiles = walk('src');
const badPlaceholder = [];
const zhLocales = srcFiles.filter((f) => f.includes(`${path.sep}locale${path.sep}zh-CN.ts`));
for (const file of srcFiles) {
const text = fs.readFileSync(file, 'utf8');
if (text.includes("'???'") || /'(\?\?[^']*)'/.test(text)) {
badPlaceholder.push(file);
}
}
let zhOk = 0;
for (const file of zhLocales) {
if (/[\u4e00-\u9fff]/.test(fs.readFileSync(file, 'utf8'))) zhOk += 1;
}
let mockInDist = false;
if (fs.existsSync('dist/assets')) {
for (const name of fs.readdirSync('dist/assets')) {
if (!name.endsWith('.js')) continue;
const chunk = fs.readFileSync(path.join('dist/assets', name), 'utf8');
if (chunk.includes('mockjs') || chunk.includes('Mock.mock')) {
mockInDist = true;
break;
}
}
}
console.log(JSON.stringify({
badPlaceholder: badPlaceholder.length,
zhLocales: `${zhOk}/${zhLocales.length}`,
mockInDist,
hasGit: fs.existsSync('.env.development') && fs.readFileSync('.env.development', 'utf8').includes('VITE_API_BASE_URL=http'),
settingsHttp: fs.readFileSync('src/locale/zh-CN/settings.ts', 'utf8').includes('http.logout.title'),
rootMenu: fs.readFileSync('src/locale/zh-CN.ts', 'utf8').includes('仪表盘'),
}, null, 2));