diff --git a/README.md b/README.md index 35a3df8e60b6618c9b686cba7f9b949e388a24a2..53e804d715309f39b86fc66e5d8311ff51d2419c 100644 --- a/README.md +++ b/README.md @@ -12,3 +12,15 @@ Lithuanian | Up-to-date | Wait What Czech | Up-to-date | Fatalerrorcoded Russian | Work in progress. | Wait What Hungarian | Pending. | Organic Coke + +## Coverage + +By running `process.js` all language files will be compared to `en.json` and a coverage table will be generated below. + + File | Coverage | Missing keys | Extraneous keys +------|-----|--------------|----------------- +cz.json | `92.31%` | `general.image_by` | +en.json | `100.00%` | | +hu.json | `0.00%` | `general.about`<br>`general.tos`<br>`general.privacy`<br>`general.image_by`<br>`login.title`<br>`login.email`<br>`login.password`<br>`login.enter.email`<br>`login.enter.password`<br>`login.forgot`<br>`login.new`<br>`login.create`<br>`app.main.channel.message` | +lt.json | `100.00%` | | +pl.json | `100.00%` | | \ No newline at end of file diff --git a/cz.json.d.ts b/cz.json.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..62f39ceb7fbf72266bc372f548d459edfeae0316 --- /dev/null +++ b/cz.json.d.ts @@ -0,0 +1 @@ +export default any; diff --git a/process.js b/process.js new file mode 100644 index 0000000000000000000000000000000000000000..323d177c3419fb012d9a1ae6be114a7d9d4eb895 --- /dev/null +++ b/process.js @@ -0,0 +1,44 @@ +const { readdirSync, readFileSync, existsSync, writeFileSync } = require('fs'); + +function recurseKeys(object, path = []) { + let collected = []; + let keys = Object.keys(object); + + for (let key of keys) { + let item = object[key]; + let current = [ ...path, key ]; + + if (typeof item === 'object') { + collected = [ ...collected, ...recurseKeys(item, current) ]; + } else { + collected.push(current.join('.')); + } + } + + return collected; +} + +let en = JSON.parse(readFileSync('en.json')); +let keys = recurseKeys(en); + +let output = []; +let language_files = readdirSync('.'); +for (let file of language_files) { + if (file.endsWith('.json')) { + if (!existsSync(file + '.d.ts')) { + writeFileSync(file + '.d.ts', 'export default any;\n'); + } + + let lang = JSON.parse(readFileSync(file)); + let lkey = recurseKeys(lang); + + let missing = keys.filter(x => !lkey.includes(x)); + let extraneous = lkey.filter(x => !keys.includes(x)); + + output.push(`${file} | \`${((1 - missing.length / keys.length) * 100).toFixed(2)}%\` | ${missing.map(x => '`' + x + '`').join('<br>')} | ${extraneous.map(x => '`' + x + '`').join('<br>')}`); + } +} + +let s = `------|-----|--------------|-----------------`; +let inp = readFileSync('README.md').toString().split(s)[0]; +writeFileSync('README.md', inp + s + '\n' + output.join('\n'));