Files
aurak/extract_cjk.js
Developer 0a9588abb7 feat: implement QuestionBank CRUD with pagination and template query
- Add pagination support to findAll (page, limit query params)
- Add findByTemplateId method to service
- Add GET /by-template/:templateId endpoint to controller
- Service already includes CRUD for QuestionBank and QuestionBankItem
2026-04-23 17:19:11 +08:00

46 lines
1.6 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const directories = ['d:/workspace/AuraK/web', 'd:/workspace/AuraK/server/src'];
const excludeDirs = ['node_modules', '.git', 'dist', '.next', 'dist-check'];
const extensions = ['.ts', '.tsx', '.js', '.jsx'];
const cjkPattern = /[\u4e00-\u9fff\u3040-\u309f\u30a0-\u30ff]+/;
const cjkLines = {};
function walkSync(currentDirPath, callback) {
fs.readdirSync(currentDirPath).forEach((name) => {
const filePath = path.join(currentDirPath, name);
const stat = fs.statSync(filePath);
if (stat.isFile()) {
callback(filePath, stat);
} else if (stat.isDirectory() && !excludeDirs.includes(name)) {
walkSync(filePath, callback);
}
});
}
directories.forEach(d => {
walkSync(d, (filePath) => {
if (extensions.some(ext => filePath.endsWith(ext))) {
try {
const content = fs.readFileSync(filePath, 'utf-8');
const lines = content.split('\n');
lines.forEach((line, i) => {
if (cjkPattern.test(line)) {
if (!cjkLines[filePath]) {
cjkLines[filePath] = [];
}
cjkLines[filePath].push({ line: i + 1, text: line.trim() });
}
});
} catch (e) {
console.error(`Error reading ${filePath}: `, e);
}
}
});
});
fs.writeFileSync('cjk_extract.json', JSON.stringify(cjkLines, null, 2), 'utf-8');
console.log('Extracted to cjk_extract.json');