UNPKG

i18ntk

Version:

i18n Tool Kit - Zero-dependency internationalization toolkit for setup, scanning, analysis, validation, auto translation, fixing, reporting, and runtime translation loading.

102 lines (89 loc) 2.15 kB
const packageJson = require('../package.json'); const { envManager } = require('./env-manager'); /** * JSON Output Utility for i18ntk commands * Provides consistent machine-readable output format for CI/CD integration */ class JsonOutput { constructor(command) { this.command = command; this.version = this.getPackageVersion(); this.startTime = Date.now(); this.data = { command: this.command, version: this.version, status: 'ok', stats: {}, issues: [], metadata: { timestamp: new Date().toISOString(), duration: 0 } }; } getPackageVersion() { try { return packageJson.version; } catch (error) { return '1.8.3'; } } /** * Set the overall status * @param {'ok'|'warn'|'error'} status */ setStatus(status) { this.data.status = status; } /** * Add statistics to the output * @param {Object} stats */ setStats(stats) { this.data.stats = { ...this.data.stats, ...stats }; } /** * Add an issue to the output * @param {Object} issue */ addIssue(issue) { this.data.issues.push({ file: issue.file || '', key: issue.key || '', type: issue.type || 'unknown', message: issue.message || '', severity: issue.severity || 'info' }); } /** * Add metadata information * @param {Object} metadata */ addMetadata(metadata) { this.data.metadata = { ...this.data.metadata, ...metadata }; } /** * Finalize and output the JSON */ output() { this.data.metadata.duration = Date.now() - this.startTime; if (envManager.get('NODE_ENV') !== 'test') { console.log(JSON.stringify(this.data, null, 2)); } return this.data; } /** * Output error in JSON format * @param {Error} error */ outputError(error) { this.setStatus('error'); this.addIssue({ type: 'error', message: error.message, severity: 'error' }); this.output(); } } module.exports = JsonOutput;