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(),
 | |
| );
 |