Files
web-Iot/tmp_inject.cjs
2026-08-14 09:02:52 +08:00

65 lines
2.4 KiB
JavaScript

// Inject missing keys into zh/index.ts and en/index.ts, preserving structure.
const fs = require('fs');
function load(p) {
let s = fs.readFileSync(p, 'utf8');
s = s.replace(/const\s+\w+\s*=\s*\{/, 'var obj = {');
s = s.replace(/export\s+default\s+\w+;?/, '');
s = s.replace(/\bconst\b/g, 'var');
return new Function(s + '\nreturn obj;')();
}
function flat(o, p, r) {
p = p || ''; r = r || {};
for (const k of Object.keys(o)) {
const key = p ? p + '.' + k : k;
if (o[k] && typeof o[k] === 'object' && !Array.isArray(o[k])) flat(o[k], key, r);
else r[key] = o[k];
}
return r;
}
function esc(v) {
return String(v).replace(/\\/g, '\\\\').replace(/'/g, "\\'");
}
const adds = require('./tmp_missing.json');
const zhAdd = adds.zhAdd, enAdd = adds.enAdd;
function inject(file, addsMap, label) {
const text = fs.readFileSync(file, 'utf8');
const lines = text.split('\n');
// find namespaces present
const present = new Set();
for (const ns of Object.keys(addsMap)) {
let nsStart = -1;
for (let i = 0; i < lines.length; i++) {
if (/^\t[A-Za-z_][A-Za-z0-9_]*:\s*\{/.test(lines[i]) && lines[i].trim().startsWith(ns + ':')) { nsStart = i; break; }
}
if (nsStart < 0) { console.log(' [WARN] namespace not found, skip: ' + ns); continue; }
// compute closing brace line by brace depth
let depth = 0; let closeLine = -1;
for (let i = nsStart; i < lines.length; i++) {
const op = (lines[i].match(/\{/g) || []).length;
const cl = (lines[i].match(/\}/g) || []).length;
depth += op - cl;
if (depth === 0) { closeLine = i; break; }
}
if (closeLine < 0) { console.log(' [WARN] no close for ' + ns); continue; }
// build insertion block (sorted)
const keys = Object.keys(addsMap[ns]).sort();
const block = keys.map(k => '\t\t' + k + ": '" + esc(addsMap[ns][k]) + "',").join('\n');
lines.splice(closeLine, 0, block);
console.log(' ' + ns + ': +' + keys.length + ' keys');
}
fs.writeFileSync(file, lines.join('\n'), 'utf8');
// verify parse
const obj = load(file);
const map = flat(obj);
console.log(' ' + label + ' parsed OK, total flat keys: ' + Object.keys(map).length);
}
console.log('Injecting into zh/index.ts ...');
inject('src/locales/zh/index.ts', zhAdd, 'zh');
console.log('Injecting into en/index.ts ...');
inject('src/locales/en/index.ts', enAdd, 'en');
console.log('Done.');