ae-biu
Version:
Born For AE, Born To Do
305 lines (235 loc) • 10.2 kB
JavaScript
;
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var extractI18NFiles = function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(dir, language, destDir) {
var files;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
files = readI18NFilesSync(dir, language);
return _context.abrupt('return', _promise2.default.all(files.map(function (file) {
var relativePath = file.replace(dir, '');
var targetFile = ('' + destDir + relativePath).replace(language + '.json', 'module.json');
return (0, _executor.executeUnsafe)(copyFile, 'Got an error when copy file from ' + file + ' to ' + targetFile)(file, targetFile);
})));
case 2:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
return function extractI18NFiles(_x, _x2, _x3) {
return _ref.apply(this, arguments);
};
}();
var readI18NFileContent = function () {
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(dir, language) {
var _this = this;
var all;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
all = {};
_context3.next = 3;
return _promise2.default.all(readI18NFilesSync(dir, language).map(function () {
var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(file) {
var content, dirname;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return (0, _util.promisify)(_fs2.default.readFile)(file, 'utf8');
case 2:
content = _context2.sent;
dirname = _path2.default.dirname(file).replace(dir, '').replace(_path2.default.sep, '');
if (process.platform === 'win32') {
dirname = dirname.replace(/\\/g, '/');
}
all[dirname] = JSON.parse(content);
case 6:
case 'end':
return _context2.stop();
}
}
}, _callee2, _this);
}));
return function (_x6) {
return _ref3.apply(this, arguments);
};
}()));
case 3:
return _context3.abrupt('return', all);
case 4:
case 'end':
return _context3.stop();
}
}
}, _callee3, this);
}));
return function readI18NFileContent(_x4, _x5) {
return _ref2.apply(this, arguments);
};
}();
var copyFile = function () {
var _ref4 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4(src, dest) {
var content;
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
_context4.next = 2;
return (0, _util.promisify)(_fs2.default.readFile)(src, 'utf8');
case 2:
content = _context4.sent;
return _context4.abrupt('return', (0, _util.promisify)(writeFile)(dest, content));
case 4:
case 'end':
return _context4.stop();
}
}
}, _callee4, this);
}));
return function copyFile(_x7, _x8) {
return _ref4.apply(this, arguments);
};
}();
var run = function () {
var _ref5 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6() {
var _this2 = this;
var start, srcDir, staticDir, language, shouldCompress, destDir, time;
return _regenerator2.default.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
console.log();
_logger2.default.info('Let\'s start, sing L\'Internationale ~');
start = Date.now();
srcDir = _path2.default.resolve(process.cwd(), 'src/modules');
staticDir = _path2.default.resolve(process.cwd(), 'src/static/locale');
language = _commander2.default.lang || getDefaultLanguage();
shouldCompress = _commander2.default.compress;
console.log();
_logger2.default.info('Start extracting ' + _chalk2.default.red(language) + '.json files...');
destDir = _path2.default.resolve(process.cwd(), 'i18n-data');
(0, _executor.executeUnsafe)(_rimraf2.default.sync, 'Got an error when rmdir ' + destDir)(destDir);
if (!shouldCompress) {
_context6.next = 16;
break;
}
_context6.next = 14;
return (0, _executor.executeUnsafe)((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5() {
var content;
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
_context5.next = 2;
return readI18NFileContent(srcDir, language);
case 2:
_context5.t0 = _context5.sent;
_context5.next = 5;
return readI18NFileContent(staticDir, language);
case 5:
_context5.t1 = _context5.sent;
content = {
modules: _context5.t0,
static: _context5.t1
};
(0, _util.promisify)(writeFile)('' + destDir + _path2.default.sep + 'module.json', (0, _stringify2.default)(content, null, 2));
case 8:
case 'end':
return _context5.stop();
}
}
}, _callee5, _this2);
})), 'Got an error in reading I18N file content')();
case 14:
_context6.next = 18;
break;
case 16:
_context6.next = 18;
return _promise2.default.all([extractI18NFiles(srcDir, language, destDir, shouldCompress), extractI18NFiles(staticDir, language, destDir, shouldCompress)]);
case 18:
time = Date.now() - start;
console.log();
_logger2.default.success('Done in ' + _chalk2.default.blue(time + 'ms') + ' !!!');
case 21:
case 'end':
return _context6.stop();
}
}
}, _callee6, this);
}));
return function run() {
return _ref5.apply(this, arguments);
};
}();
var _commander = require('commander');
var _commander2 = _interopRequireDefault(_commander);
var _chalk = require('chalk');
var _chalk2 = _interopRequireDefault(_chalk);
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _util = require('util');
var _rimraf = require('rimraf');
var _rimraf2 = _interopRequireDefault(_rimraf);
var _readDirRecursive = require('./utils/read-dir-recursive');
var _logger = require('./utils/logger');
var _logger2 = _interopRequireDefault(_logger);
var _mkdirP = require('./utils/mkdirP');
var _mkdirP2 = _interopRequireDefault(_mkdirP);
var _executor = require('./utils/executor');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
_commander2.default.on('--help', function () {
console.log();
console.log(' Examples:');
console.log();
console.log(_chalk2.default.yellow(' # Extract all the data file (*.json) of default langauge.'));
console.log();
console.log(_chalk2.default.blue(' $ ae extract-i18n'));
console.log();
console.log(_chalk2.default.yellow(' # Extract I18N data file for specific language.'));
console.log();
console.log(_chalk2.default.blue(' $ ae i18n --lang en-US'));
console.log();
console.log(_chalk2.default.blue(' Tips: the first language you specific will be treated as default language'));
});
_commander2.default.usage('[--lang]').option('-l, --lang [language]', 'Extract I18N data file for specific language.').option('-c, --compress', 'Compress all the I18N data in one file.').parse(process.argv);
function getDefaultLanguage() {
var pkgPath = _path2.default.resolve(process.cwd(), 'package.json');
try {
var pkgContent = _fs2.default.readFileSync(pkgPath);
var pkg = JSON.parse(pkgContent);
return pkg.ae.languages[0].trim();
} catch (error) {
_logger2.default.warn('Cannot find languages in packages.json, use "zh-CN" as default.');
return 'zh-CN';
}
}
function readI18NFilesSync(dir, language) {
(0, _executor.executeUnsafe)((0, _util.promisify)(_fs2.default.accessSync), 'Cannot find source directory, make sure you are in an AE project.')(dir);
return (0, _executor.executeUnsafe)(_readDirRecursive.readDirRecursiveSync, 'Got an error when reading ' + dir)(dir, language + '.json');
}
function writeFile(file, contents, cb) {
(0, _mkdirP2.default)(_path2.default.dirname(file), function (err) {
if (err) {
return cb(err);
}
_fs2.default.writeFile(file, contents, cb);
});
}
run();