UNPKG

idioma-cli

Version:

CLI for Idioma - Internationalization engine with smart defaults

98 lines (95 loc) 11.4 kB
#!/usr/bin/env node import { updateStatus } from "../shared/chunk-3acbb6gb.js"; // src/cli/worker.ts import { glob } from "glob"; import { loadConfig, loadLock, saveLock, translateFile } from "idioma-sdk"; async function runTranslation() { try { await updateStatus({ status: "running", startTime: new Date().toISOString() }); const args = process.argv.slice(2); const showCosts = args.includes("--costs"); const config = await loadConfig(); const lock = await loadLock(); const sourceLocale = config.locale.source; const targetLocales = config.locale.targets; const includePatterns = Array.isArray(config.files) ? config.files : config.files?.include || []; let allSourceFiles = []; for (const pattern of includePatterns) { const sourcePattern = pattern.replace(/\[locale\]/g, sourceLocale); const files = await glob(sourcePattern); allSourceFiles = [...allSourceFiles, ...files]; } const totalFiles = allSourceFiles.length * targetLocales.length; let processedFiles = 0; await updateStatus({ totalFiles, processedFiles: 0 }); for (const sourceFile of allSourceFiles) { for (const targetLocale of targetLocales) { try { const fileName = sourceFile.replace(/.*\//, ""); await updateStatus({ currentFile: `${fileName} -> ${targetLocale}`, processedFiles }); if (processedFiles > 0) { await new Promise((resolve) => setTimeout(resolve, 250)); } const _result = await translateFile(sourceFile, sourceLocale, targetLocale, lock, config, { showCosts }); processedFiles++; await updateStatus({ processedFiles }); if (processedFiles % 1 === 0) { await saveLock(lock); } } catch (error) { console.error(`Error translating ${sourceFile} to ${targetLocale}:`, error); processedFiles++; await updateStatus({ processedFiles, errors: [`${sourceFile} -> ${targetLocale}: ${error}`] }); } } } await saveLock(lock); await updateStatus({ status: "completed", endTime: new Date().toISOString(), currentFile: undefined, processedFiles: totalFiles }); console.log("✅ Translation completed successfully!"); process.exit(0); } catch (error) { console.error("Translation failed:", error); await updateStatus({ status: "failed", endTime: new Date().toISOString(), currentFile: undefined, errors: [`Fatal error: ${error}`] }); process.exit(1); } } process.on("SIGTERM", async () => { console.log("Received SIGTERM, shutting down gracefully..."); await updateStatus({ status: "failed", endTime: new Date().toISOString(), errors: ["Process terminated by user"] }); process.exit(0); }); runTranslation(); //# debugId=B2B290B4EDD3C60064756E2164756E21 //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NsaS93b3JrZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0IHsgZ2xvYiB9IGZyb20gJ2dsb2InO1xuaW1wb3J0IHsgbG9hZENvbmZpZywgbG9hZExvY2ssIHNhdmVMb2NrLCB0cmFuc2xhdGVGaWxlIH0gZnJvbSAnaWRpb21hLXNkayc7XG5pbXBvcnQgeyB1cGRhdGVTdGF0dXMgfSBmcm9tICcuL2JhY2tncm91bmQnO1xuXG4vLyBXb3JrZXIgcHJvY2VzcyB0aGF0IHJ1bnMgdGhlIGFjdHVhbCB0cmFuc2xhdGlvblxuYXN5bmMgZnVuY3Rpb24gcnVuVHJhbnNsYXRpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXBkYXRlIHN0YXR1cyB0byBydW5uaW5nXG4gICAgYXdhaXQgdXBkYXRlU3RhdHVzKHtcbiAgICAgIHN0YXR1czogJ3J1bm5pbmcnLFxuICAgICAgc3RhcnRUaW1lOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgfSk7XG5cbiAgICAvLyBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzXG4gICAgY29uc3QgYXJncyA9IHByb2Nlc3MuYXJndi5zbGljZSgyKTtcbiAgICBjb25zdCBzaG93Q29zdHMgPSBhcmdzLmluY2x1ZGVzKCctLWNvc3RzJyk7XG5cbiAgICAvLyBMb2FkIGNvbmZpZyBhbmQgbG9ja1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGxvYWRDb25maWcoKTtcbiAgICBjb25zdCBsb2NrID0gYXdhaXQgbG9hZExvY2soKTtcblxuICAgIC8vIENhbGN1bGF0ZSBhY3R1YWwgZmlsZXMgdG8gYmUgcHJvY2Vzc2VkXG4gICAgY29uc3Qgc291cmNlTG9jYWxlID0gY29uZmlnLmxvY2FsZS5zb3VyY2U7XG4gICAgY29uc3QgdGFyZ2V0TG9jYWxlcyA9IGNvbmZpZy5sb2NhbGUudGFyZ2V0cztcbiAgICBjb25zdCBpbmNsdWRlUGF0dGVybnMgPSBBcnJheS5pc0FycmF5KGNvbmZpZy5maWxlcylcbiAgICAgID8gY29uZmlnLmZpbGVzXG4gICAgICA6IGNvbmZpZy5maWxlcz8uaW5jbHVkZSB8fCBbXTtcblxuICAgIC8vIEdldCBhbGwgc291cmNlIGZpbGVzXG4gICAgbGV0IGFsbFNvdXJjZUZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBpbmNsdWRlUGF0dGVybnMpIHtcbiAgICAgIGNvbnN0IHNvdXJjZVBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoL1xcW2xvY2FsZVxcXS9nLCBzb3VyY2VMb2NhbGUpO1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBnbG9iKHNvdXJjZVBhdHRlcm4pO1xuICAgICAgYWxsU291cmNlRmlsZXMgPSBbLi4uYWxsU291cmNlRmlsZXMsIC4uLmZpbGVzXTtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgdG90YWwgdHJhbnNsYXRpb24gdGFza3MgKGZpbGVzIMOXIHRhcmdldCBsb2NhbGVzKVxuICAgIGNvbnN0IHRvdGFsRmlsZXMgPSBhbGxTb3VyY2VGaWxlcy5sZW5ndGggKiB0YXJnZXRMb2NhbGVzLmxlbmd0aDtcbiAgICBsZXQgcHJvY2Vzc2VkRmlsZXMgPSAwO1xuXG4gICAgYXdhaXQgdXBkYXRlU3RhdHVzKHtcbiAgICAgIHRvdGFsRmlsZXMsXG4gICAgICBwcm9jZXNzZWRGaWxlczogMCxcbiAgICB9KTtcblxuICAgIC8vIFByb2Nlc3MgZmlsZXMgd2l0aCBwcm9ncmVzcyB0cmFja2luZ1xuICAgIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBhbGxTb3VyY2VGaWxlcykge1xuICAgICAgZm9yIChjb25zdCB0YXJnZXRMb2NhbGUgb2YgdGFyZ2V0TG9jYWxlcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFVwZGF0ZSBjdXJyZW50IGZpbGUgYmVpbmcgcHJvY2Vzc2VkXG4gICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBzb3VyY2VGaWxlLnJlcGxhY2UoLy4qXFwvLywgJycpOyAvLyBHZXQganVzdCBmaWxlbmFtZVxuICAgICAgICAgIGF3YWl0IHVwZGF0ZVN0YXR1cyh7XG4gICAgICAgICAgICBjdXJyZW50RmlsZTogYCR7ZmlsZU5hbWV9IC0+ICR7dGFyZ2V0TG9jYWxlfWAsXG4gICAgICAgICAgICBwcm9jZXNzZWRGaWxlcyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCBkZWxheSB0byBhdm9pZCByYXRlIGxpbWl0c1xuICAgICAgICAgIGlmIChwcm9jZXNzZWRGaWxlcyA+IDApIHtcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDI1MCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFRyYW5zbGF0ZSB0aGUgZmlsZVxuICAgICAgICAgIGNvbnN0IF9yZXN1bHQgPSBhd2FpdCB0cmFuc2xhdGVGaWxlKFxuICAgICAgICAgICAgc291cmNlRmlsZSxcbiAgICAgICAgICAgIHNvdXJjZUxvY2FsZSxcbiAgICAgICAgICAgIHRhcmdldExvY2FsZSxcbiAgICAgICAgICAgIGxvY2ssXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNob3dDb3N0cyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcHJvY2Vzc2VkRmlsZXMrKztcblxuICAgICAgICAgIC8vIFVwZGF0ZSBwcm9ncmVzc1xuICAgICAgICAgIGF3YWl0IHVwZGF0ZVN0YXR1cyh7XG4gICAgICAgICAgICBwcm9jZXNzZWRGaWxlcyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIFNhdmUgbG9jayBmaWxlIHBlcmlvZGljYWxseVxuICAgICAgICAgIGlmIChwcm9jZXNzZWRGaWxlcyAlIDEgPT09IDApIHtcbiAgICAgICAgICAgIC8vIFNhdmUgYWZ0ZXIgZWFjaCBmaWxlIGZvciBzYWZldHlcbiAgICAgICAgICAgIGF3YWl0IHNhdmVMb2NrKGxvY2spO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciB0cmFuc2xhdGluZyAke3NvdXJjZUZpbGV9IHRvICR7dGFyZ2V0TG9jYWxlfTpgLCBlcnJvcik7XG4gICAgICAgICAgcHJvY2Vzc2VkRmlsZXMrKztcblxuICAgICAgICAgIC8vIFVwZGF0ZSBwcm9ncmVzcyBldmVuIG9uIGVycm9yXG4gICAgICAgICAgYXdhaXQgdXBkYXRlU3RhdHVzKHtcbiAgICAgICAgICAgIHByb2Nlc3NlZEZpbGVzLFxuICAgICAgICAgICAgZXJyb3JzOiBbYCR7c291cmNlRmlsZX0gLT4gJHt0YXJnZXRMb2NhbGV9OiAke2Vycm9yfWBdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBmaW5hbCBsb2NrIGZpbGVcbiAgICBhd2FpdCBzYXZlTG9jayhsb2NrKTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0dXMgdG8gY29tcGxldGVkXG4gICAgYXdhaXQgdXBkYXRlU3RhdHVzKHtcbiAgICAgIHN0YXR1czogJ2NvbXBsZXRlZCcsXG4gICAgICBlbmRUaW1lOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBjdXJyZW50RmlsZTogdW5kZWZpbmVkLFxuICAgICAgcHJvY2Vzc2VkRmlsZXM6IHRvdGFsRmlsZXMsXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygn4pyFIFRyYW5zbGF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1RyYW5zbGF0aW9uIGZhaWxlZDonLCBlcnJvcik7XG5cbiAgICBhd2FpdCB1cGRhdGVTdGF0dXMoe1xuICAgICAgc3RhdHVzOiAnZmFpbGVkJyxcbiAgICAgIGVuZFRpbWU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGN1cnJlbnRGaWxlOiB1bmRlZmluZWQsXG4gICAgICBlcnJvcnM6IFtgRmF0YWwgZXJyb3I6ICR7ZXJyb3J9YF0sXG4gICAgfSk7XG5cbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbn1cblxuLy8gSGFuZGxlIGdyYWNlZnVsIHNodXRkb3duXG5wcm9jZXNzLm9uKCdTSUdURVJNJywgYXN5bmMgKCkgPT4ge1xuICBjb25zb2xlLmxvZygnUmVjZWl2ZWQgU0lHVEVSTSwgc2h1dHRpbmcgZG93biBncmFjZWZ1bGx5Li4uJyk7XG5cbiAgYXdhaXQgdXBkYXRlU3RhdHVzKHtcbiAgICBzdGF0dXM6ICdmYWlsZWQnLFxuICAgIGVuZFRpbWU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBlcnJvcnM6IFsnUHJvY2VzcyB0ZXJtaW5hdGVkIGJ5IHVzZXInXSxcbiAgfSk7XG5cbiAgcHJvY2Vzcy5leGl0KDApO1xufSk7XG5cbi8vIFJ1biB0aGUgdHJhbnNsYXRpb25cbnJ1blRyYW5zbGF0aW9uKCk7XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7QUFDQTtBQUNBO0FBSUEsZUFBZSxjQUFjLEdBQUc7QUFBQSxFQUM5QixJQUFJO0FBQUEsSUFFRixNQUFNLGFBQWE7QUFBQSxNQUNqQixRQUFRO0FBQUEsTUFDUixXQUFXLElBQUksS0FBSyxFQUFFLFlBQVk7QUFBQSxJQUNwQyxDQUFDO0FBQUEsSUFHRCxNQUFNLE9BQU8sUUFBUSxLQUFLLE1BQU0sQ0FBQztBQUFBLElBQ2pDLE1BQU0sWUFBWSxLQUFLLFNBQVMsU0FBUztBQUFBLElBR3pDLE1BQU0sU0FBUyxNQUFNLFdBQVc7QUFBQSxJQUNoQyxNQUFNLE9BQU8sTUFBTSxTQUFTO0FBQUEsSUFHNUIsTUFBTSxlQUFlLE9BQU8sT0FBTztBQUFBLElBQ25DLE1BQU0sZ0JBQWdCLE9BQU8sT0FBTztBQUFBLElBQ3BDLE1BQU0sa0JBQWtCLE1BQU0sUUFBUSxPQUFPLEtBQUssSUFDOUMsT0FBTyxRQUNQ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