diff options
Diffstat (limited to 'scripts/build-locales-files.mjs')
-rw-r--r-- | scripts/build-locales-files.mjs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/scripts/build-locales-files.mjs b/scripts/build-locales-files.mjs new file mode 100644 index 0000000..db1483d --- /dev/null +++ b/scripts/build-locales-files.mjs @@ -0,0 +1,61 @@ +import { existsSync, writeFileSync } from 'node:fs'; +import { Glob } from 'bun'; +import _ from 'lodash'; + +async function getPathsFromGlobs({ patterns, onlyFiles = true }) { + const filePaths = []; + + for (const pattern of patterns) { + const glob = new Glob(pattern); + + for await (const filePath of glob.scan({ onlyFiles, cwd: '.' })) { + filePaths.push(filePath); + } + } + + return { filePaths }; +} + +function getLocaleKey({ filePath }) { + const fileName = filePath.split('/').pop(); + return fileName.replace(/\.yml$/, ''); +} + +async function createMissingLocaleFile({ localeKey }) { + const fileName = `${localeKey}.yml`; + + const { filePaths: localesDirs } = await getPathsFromGlobs({ + patterns: [ + 'locales', + 'src/tools/*/locales', + ], + onlyFiles: false, + }); + + for (const localesDir of localesDirs) { + const filePath = `${localesDir}/${fileName}`; + + if (existsSync(filePath)) { + console.log(`Locale file already exists: ${filePath}`); + continue; + } + + console.log(`Creating missing locale file: ${filePath}`); + writeFileSync(filePath, '', 'utf8'); + } +} + +const { filePaths } = await getPathsFromGlobs({ + patterns: [ + 'locales/*.yml', + 'src/tools/*/locales/*.yml', + ], +}); + +await Promise.all( + _.chain(filePaths) + .map(filePath => getLocaleKey({ filePath })) + .uniq() + .map(localeKey => createMissingLocaleFile({ localeKey })) + .value(), +); |