Support versioned nodes

This commit is contained in:
Iván Ovejero
2021-11-19 12:22:01 +01:00
parent 99963b04a5
commit 9819c25ec5
4 changed files with 89 additions and 16 deletions

View File

@@ -1,8 +1,39 @@
import { join, dirname } from 'path';
import { readdir } from 'fs/promises';
import { Dirent } from 'fs';
/**
* Retrieve the path to the translation file for a node.
*/
export function getTranslationPath(nodeSourcePath: string, language: string): string {
return join(dirname(nodeSourcePath), 'translations', `${language}.js`);
const ALLOWED_VERSIONED_DIRNAME_LENGTH = [2, 3]; // v1, v10
function isVersionedDirname(dirent: Dirent) {
if (!dirent.isDirectory()) return false;
return (
ALLOWED_VERSIONED_DIRNAME_LENGTH.includes(dirent.name.length) &&
dirent.name.toLowerCase().startsWith('v')
);
}
async function getMaxVersion(from: string) {
const entries = await readdir(from, { withFileTypes: true });
const dirnames = entries.reduce<string[]>((acc, cur) => {
if (isVersionedDirname(cur)) acc.push(cur.name);
return acc;
}, []);
if (!dirnames.length) return null;
return Math.max(...dirnames.map((d) => parseInt(d.charAt(1), 10)));
}
export async function getExpectedNodeTranslationPath(
nodeSourcePath: string,
language: string,
): Promise<string> {
const nodeDir = dirname(nodeSourcePath);
const maxVersion = await getMaxVersion(nodeDir);
return maxVersion
? join(nodeDir, `v${maxVersion}`, 'translations', `${language}.js`)
: join(nodeDir, 'translations', `${language}.js`);
}