aboutsummaryrefslogtreecommitdiff
path: root/scripts/build-locales-files.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/build-locales-files.mjs')
-rw-r--r--scripts/build-locales-files.mjs61
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(),
+);