UNPKG

ae-biu

Version:

Born For AE, Born To Do

305 lines (235 loc) 10.2 kB
#!/usr/bin/env node 'use strict'; 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();