UNPKG

2.74 kBJavaScriptView Raw
1#! /usr/bin/env node
2"use strict";
3
4require('babel-polyfill');
5var generate = require('babel-generator').default;
6
7function showHelpAndExit() {
8 console.log("Usage: bundle-messages -t TRANSLATIONS [-o OUTPUT] [-f FORMAT (po|json)] ..FILES/DIRECTORIES");
9 console.log("Prints a JS module with messages in FILES/DIRECTORIES mapped");
10 console.log("to render functions.");
11 console.log("The input format automatically defaults to the file extension (po or json).")
12 console.log("Pass -f to override this behavior.");
13 console.log("If -o is passed, writes to OUTPUT instead of stdout.");
14 process.exit();
15}
16
17var argv = require('minimist')(process.argv.slice(2), {
18 string: 'tohf',
19 alias: {t: 'translations', o: 'output', h: 'help', f: 'format'}
20});
21
22if (!(argv._.length && argv.t) || argv.h) {
23 showHelpAndExit();
24}
25
26var chalk = require('chalk');
27var fs = require('fs');
28var rw = require('rw');
29
30var io = require('../build/io').default;
31var filesFromMixedPaths = require('./filesFromMixedPaths');
32var translateMessagesToBundle = require('../build/translate').default;
33
34if (argv.f) {
35 var format = argv.f;
36} else {
37 var fileChunks = argv.t.split('.');
38 var format = fileChunks[fileChunks.length - 1];
39}
40
41var translations = rw.readFileSync(argv.t, "utf8");
42var files = filesFromMixedPaths(argv._);
43var bundle = {};
44var missing = {};
45
46
47files.forEach(function (filename) {
48 var buffer = fs.readFileSync(filename, "utf8");
49 try {
50 var translationsForFile = translateMessagesToBundle(buffer, translations, { inputFormat: format });
51 } catch (e) {
52 console.error(chalk.bold.red("\nError in file " + filename + ":"));
53 console.error(e);
54 console.error(e.stack);
55 e.node && console.error(generate(e.node));
56 process.exit(1);
57 }
58 Object.keys(translationsForFile.bundle).forEach(function (message) {
59 bundle[message] = translationsForFile.bundle[message];
60 });
61 Object.keys(translationsForFile.missing).forEach(function (message) {
62 missing[message] = message;
63 });
64});
65
66
67var bundleEntries = Object.keys(bundle).map(function (message) {
68 return "\n\t" + JSON.stringify(message) + ': ' + bundle[message];
69});
70
71var bundle = (
72 'var React = require("react");\nmodule.exports = {'
73 + bundleEntries
74 + '\n};\n'
75);
76
77if (argv.o) {
78 fs.writeFileSync(argv.o, bundle);
79 console.error(chalk.bold.green("Success! Wrote transitions to " + argv.o));
80} else {
81 console.log(bundle);
82}
83
84var missingMessages = Object.keys(missing);
85if (missingMessages.length) {
86 console.error(chalk.bold.yellow("\nTranslations missing (" + missingMessages.length + "):"));
87 console.error(' ' + chalk.yellow(missingMessages.join('\n\n ')));
88}