62 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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(),
 | 
						|
);
 |