From 115882202fb5887fd2d1557bb9c6744b63eb34e2 Mon Sep 17 00:00:00 2001 From: Paul Makles <paulmakles@gmail.com> Date: Sat, 4 Jul 2020 22:46:33 +0100 Subject: [PATCH] Add process script + coverage. --- README.md | 12 ++++++++++++ cz.json.d.ts | 1 + process.js | 44 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 cz.json.d.ts create mode 100644 process.js diff --git a/README.md b/README.md index 35a3df8..53e804d 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 0000000..62f39ce --- /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 0000000..323d177 --- /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')); -- GitLab