You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.5 KiB
JavaScript
43 lines
1.5 KiB
JavaScript
import { readFileSync, writeFileSync } from 'fs';
|
|
import { fileURLToPath } from 'url';
|
|
import { dirname, join } from 'path';
|
|
|
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
const root = join(__dirname, '..');
|
|
const s = readFileSync(join(root, 'frontend/src/i18n/npcGeneratedNames.ts'), 'utf8');
|
|
|
|
function extractArray(constName) {
|
|
const start = s.indexOf(`export const ${constName}`);
|
|
if (start < 0) throw new Error('missing ' + constName);
|
|
const slice = s.slice(start, start + 80000);
|
|
const out = [];
|
|
const re = /en: '((?:\\'|[^'])*)'/g;
|
|
let m;
|
|
let depth = 0;
|
|
const subStart = slice.indexOf('[');
|
|
const subEnd = slice.indexOf('];', subStart);
|
|
const block = slice.slice(subStart, subEnd);
|
|
while ((m = re.exec(block))) {
|
|
out.push(m[1].replace(/\\'/g, "'"));
|
|
}
|
|
return out;
|
|
}
|
|
|
|
const elder = extractArray('ELDER_GEN_NAMES');
|
|
const medic = extractArray('MEDIC_GEN_NAMES');
|
|
const stall = extractArray('STALL_GEN_NAMES');
|
|
|
|
function sqlArr(a) {
|
|
return `ARRAY[${a.map((x) => `'${x.replace(/'/g, "''")}'`).join(',')}]::text[]`;
|
|
}
|
|
|
|
const sql =
|
|
`-- Generated by scripts/gen-npc-sql-arrays.mjs from npcGeneratedNames.ts\n` +
|
|
`-- lengths: elder=${elder.length} medic=${medic.length} stall=${stall.length}\n` +
|
|
`elder_names text[] := ${sqlArr(elder)};\n` +
|
|
`medic_names text[] := ${sqlArr(medic)};\n` +
|
|
`stall_names text[] := ${sqlArr(stall)};\n`;
|
|
|
|
writeFileSync(join(root, 'scripts/_npc_name_arrays_snippet.sql'), sql);
|
|
console.log('Wrote scripts/_npc_name_arrays_snippet.sql', elder.length, medic.length, stall.length);
|