i18n-llm-translate
Version:
Automatically translates namespace-based JSON translation files across multiple languages from any source language
92 lines (91 loc) • 4.68 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.cleanLanguagesDirectory = cleanLanguagesDirectory;
exports.cleanNamespaces = cleanNamespaces;
const util_1 = require("./util");
const logger_1 = require("./logger");
const path_1 = __importDefault(require("path"));
const fs_1 = require("fs");
function cleanLanguagesDirectory(options) {
return __awaiter(this, void 0, void 0, function* () {
const logger = options.logger || logger_1.defaultLogger;
const languagesDirectory = path_1.default.resolve(process.env.PWD, options.languagesDirectoryPath);
const validEntries = new Set([
...options.targetLanguageCodes.map(language => (0, util_1.formatLanguageContainerDirectoryName)(language, options)),
(0, util_1.formatLanguageContainerDirectoryName)(options.baseLanguageCode, options),
options.namesMapping.jsonCache
]);
let dirty = false;
try {
const entries = yield fs_1.promises.readdir(languagesDirectory, { withFileTypes: true });
for (const entry of entries) {
const entryPath = path_1.default.join(languagesDirectory, entry.name);
if (!validEntries.has(entry.name)) {
try {
if (entry.isDirectory()) {
yield fs_1.promises.rmdir(entryPath, { recursive: true });
}
else {
yield fs_1.promises.unlink(entryPath);
}
dirty = true;
logger.verbose(`Removed invalid entry: ${entryPath}`);
}
catch (error) {
logger.error(`Error removing ${entryPath}:`, error);
}
}
}
}
catch (error) {
logger.error(`Error cleaning languages directory:`, error);
}
return dirty;
});
}
function cleanNamespaces(options, namespaces) {
return __awaiter(this, void 0, void 0, function* () {
const logger = options.logger || logger_1.defaultLogger;
const languagesDirectory = path_1.default.resolve(process.env.PWD, options.languagesDirectoryPath);
const validFiles = new Set(namespaces.map(namespace => namespace.jsonFileName));
for (const targetLanguageCode of options.targetLanguageCodes) {
const targetLanguageDirectory = path_1.default.join(languagesDirectory, (0, util_1.formatLanguageContainerDirectoryName)(targetLanguageCode, options));
try {
const entries = yield fs_1.promises.readdir(targetLanguageDirectory, { withFileTypes: true });
for (const entry of entries) {
const entryPath = path_1.default.join(targetLanguageDirectory, entry.name);
if (!validFiles.has(entry.name)) {
try {
if (entry.isDirectory()) {
yield fs_1.promises.rmdir(entryPath, { recursive: true });
logger.verbose(`Removed invalid directory: ${entryPath}`);
}
else {
yield fs_1.promises.unlink(entryPath);
logger.verbose(`Removed invalid file: ${entryPath}`);
}
}
catch (error) {
logger.error(`Error removing ${entryPath}:`, error);
}
}
}
}
catch (error) {
logger.error(`Error reading directory for language '${targetLanguageCode}':`, error);
}
}
});
}