gettext-extractor
Version:
Gettext extractor for JavaScript, TypeScript, JSX and HTML
74 lines (73 loc) • 2.82 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.StatsOutput = exports.OutputUtils = void 0;
let chalk;
try {
chalk = require('chalk');
}
catch (e) { /* falls back to default colored output */ }
class OutputUtils {
static green(value) {
return chalk ? chalk.green(value) : value;
}
static grey(value) {
return chalk ? chalk.grey(value) : value;
}
}
exports.OutputUtils = OutputUtils;
class StatsOutput {
get details() {
return [
{
primaryNumber: this.stats.numberOfMessageUsages,
primaryText: this.stats.numberOfMessageUsages === 1 ? 'total usage' : 'total usages'
},
{
primaryNumber: this.stats.numberOfParsedFiles,
primaryText: this.stats.numberOfParsedFiles === 1 ? 'file' : 'files',
secondaryText: `(${this.stats.numberOfParsedFilesWithMessages} with messages)`
},
{
primaryNumber: this.stats.numberOfContexts,
primaryText: this.stats.numberOfContexts === 1 ? 'message context' : 'message contexts',
secondaryText: this.stats.numberOfContexts === 1 && '(default)'
}
];
}
get title() {
return this.stats.numberOfMessages === 1
? `${this.padNumber(1)} message extracted`
: `${this.padNumber(this.stats.numberOfMessages)} messages extracted`;
}
constructor(stats) {
this.stats = stats;
let numbers = this.details
.map(d => d.primaryNumber)
.concat(this.stats.numberOfMessages);
this.maxNumberLength = Math.max.apply(undefined, numbers.map(n => n.toString().length));
this.maxTextLength = Math.max.apply(undefined, this.details.map(l => {
return this.padNumber(1).length + 1 + l.primaryText.length + (l.secondaryText ? l.secondaryText.length + 1 : 0);
}).concat(this.title.length));
}
print() {
console.log();
console.log(this.indent(OutputUtils.green(this.title)));
console.log(this.indent(OutputUtils.grey(new Array(this.maxTextLength + 2).join('-'))));
for (let line of this.details) {
let text = this.padNumber(line.primaryNumber) + ' ' + line.primaryText;
if (line.secondaryText) {
text += ' ' + OutputUtils.grey(line.secondaryText);
}
console.log(this.indent(text));
}
console.log();
}
padNumber(value) {
return (new Array(this.maxNumberLength).join(' ') + value).slice(-this.maxNumberLength);
}
indent(value) {
return new Array(StatsOutput.INDENTATION + 1).join(' ') + value;
}
}
exports.StatsOutput = StatsOutput;
StatsOutput.INDENTATION = 2;