UNPKG

zlocalz

Version:

ZLocalz - TUI Locale Guardian for Flutter ARB l10n/i18n validation and translation with AI-powered fixes

83 lines 3.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DiffGenerator = void 0; const diff_1 = require("diff"); class DiffGenerator { static async generatePatch(originalFile, modifiedFile, format = 'unified') { const originalContent = await this.serializeARB(originalFile); const modifiedContent = await this.serializeARB(modifiedFile); const patch = (0, diff_1.createTwoFilesPatch)(originalFile.path, modifiedFile.path, originalContent, modifiedContent, 'original', 'modified', { context: 3 }); return { path: modifiedFile.path, diff: patch, format }; } static async generatePatches(originalFiles, modifiedFiles) { const patches = []; for (const [locale, modifiedFile] of modifiedFiles) { const originalFile = originalFiles.get(locale); if (!originalFile) continue; const hasChanges = await this.hasChanges(originalFile, modifiedFile); if (hasChanges) { const patch = await this.generatePatch(originalFile, modifiedFile); patches.push(patch); } } return patches; } static async serializeARB(file) { const output = {}; if (file.raw['@@locale']) { output['@@locale'] = file.raw['@@locale']; } const keys = Object.keys(file.entries).sort(); for (const key of keys) { const entry = file.entries[key]; output[key] = entry.value; if (entry.metadata || entry.description || entry.placeholders) { const metadata = {}; if (entry.description) metadata.description = entry.description; if (entry.placeholders) metadata.placeholders = entry.placeholders; if (entry.metadata) Object.assign(metadata, entry.metadata); if (Object.keys(metadata).length > 0) { output[`@${key}`] = metadata; } } } return JSON.stringify(output, null, 2) + '\n'; } static async hasChanges(originalFile, modifiedFile) { const original = await this.serializeARB(originalFile); const modified = await this.serializeARB(modifiedFile); return original !== modified; } static formatPatchForDisplay(patch) { const lines = patch.diff.split('\n'); const formatted = []; for (const line of lines) { if (line.startsWith('+++') || line.startsWith('---')) { formatted.push(`\x1b[36m${line}\x1b[0m`); } else if (line.startsWith('@@')) { formatted.push(`\x1b[35m${line}\x1b[0m`); } else if (line.startsWith('+')) { formatted.push(`\x1b[32m${line}\x1b[0m`); } else if (line.startsWith('-')) { formatted.push(`\x1b[31m${line}\x1b[0m`); } else { formatted.push(line); } } return formatted.join('\n'); } } exports.DiffGenerator = DiffGenerator; //# sourceMappingURL=diff-generator.js.map