UNPKG

ae-biu

Version:

Born For AE, Born To Do

487 lines (376 loc) 18 kB
#!/usr/bin/env node 'use strict'; var _stringify = require('babel-runtime/core-js/json/stringify'); var _stringify2 = _interopRequireDefault(_stringify); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _keys = require('babel-runtime/core-js/object/keys'); var _keys2 = _interopRequireDefault(_keys); var _set = require('babel-runtime/core-js/set'); var _set2 = _interopRequireDefault(_set); var _promise = require('babel-runtime/core-js/promise'); var _promise2 = _interopRequireDefault(_promise); var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); 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 _deepSortObject = require('deep-sort-object'); var _deepSortObject2 = _interopRequireDefault(_deepSortObject); var _flat = require('flat'); var _flat2 = _interopRequireDefault(_flat); var _readDirRecursive = require('./utils/read-dir-recursive'); var _readDirRecursive2 = _interopRequireDefault(_readDirRecursive); 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(' # Get I18N data for all languages you defined in package.json')); console.log(); console.log(_chalk2.default.blue(' $ ae i18n')); console.log(); console.log(_chalk2.default.yellow(' # Get I18N data for specific language(s)')); console.log(); console.log(_chalk2.default.blue(' $ ae i18n --lang zh-HK[,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]', 'Get I18N data for specific language').option('-u, --no-flat', 'Unflatten I18N data').parse(process.argv); var flat = _commander2.default.flat; var handleError = function handleError(error) { console.log(); console.error(error); process.exit(1); }; var handleFile = function () { var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(file) { var temp, contents, matched; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: temp = {}; _context.next = 3; return (0, _util.promisify)(_fs2.default.readFile)(file, 'utf8'); case 3: contents = _context.sent; matched = contents.match(/__\((('|")(.(?!__\(('|")))+)\){1}/gm); if (matched) { matched.map(function (item) { var key = item.match(/('.+?')|(".+?")/)[0].replace(/'|"/gm, ''); var msgMatched = item.match(/,\s?('|")(.+)('|")\)/); var defaultMsg = void 0; if (msgMatched) { defaultMsg = msgMatched[2]; } else { defaultMsg = key; } temp[key] = defaultMsg; }); } return _context.abrupt('return', temp); case 7: case 'end': return _context.stop(); } } }, _callee, undefined); })); return function handleFile(_x) { return _ref.apply(this, arguments); }; }(); var run = function () { var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee7() { var start, pkgPath, srcDir, staticDir, lang, languages, pkgContent, pkg, _pkg$ae, ae, files, modules, i18nData, handledFiles, moduleData, defaultModules, time; return _regenerator2.default.wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: console.log(); console.log(_chalk2.default.yellow('Let\'s start, sing L\'Internationale ~')); start = Date.now(); pkgPath = _path2.default.resolve(process.cwd(), 'package.json'); srcDir = _path2.default.resolve(process.cwd(), 'src/modules'); staticDir = _path2.default.resolve(process.cwd(), 'src/static'); _context7.prev = 6; _context7.next = 9; return (0, _util.promisify)(_fs2.default.access)(pkgPath); case 9: _context7.next = 15; break; case 11: _context7.prev = 11; _context7.t0 = _context7['catch'](6); console.error(_chalk2.default.red('Cannot find package.json, please check')); process.exit(0); case 15: lang = _commander2.default.lang; languages = lang && lang.split(',') || []; languages = languages.map(function (lang) { return lang.trim(); }); if (languages.length) { _context7.next = 31; break; } _context7.prev = 19; _context7.next = 22; return (0, _util.promisify)(_fs2.default.readFile)(pkgPath); case 22: pkgContent = _context7.sent; pkg = JSON.parse(pkgContent); _pkg$ae = pkg.ae, ae = _pkg$ae === undefined ? {} : _pkg$ae; languages = ae.languages; _context7.next = 31; break; case 28: _context7.prev = 28; _context7.t1 = _context7['catch'](19); handleError(_context7.t1); case 31: console.log(); console.log(_chalk2.default.yellow('Your applied languages: ' + _chalk2.default.red(languages.join(' ')))); _context7.prev = 33; _context7.next = 36; return (0, _util.promisify)(_fs2.default.access)(srcDir); case 36: _context7.next = 43; break; case 38: _context7.prev = 38; _context7.t2 = _context7['catch'](33); console.log(); console.log(_chalk2.default.red('Cannot find source directory, do you under an AE project?')); handleError(_context7.t2); case 43: _context7.next = 45; return (0, _readDirRecursive2.default)(srcDir, '*.(jsx|js)'); case 45: files = _context7.sent; modules = []; files.map(function (file) { if (/index\.jsx?$/.test(file)) { var moduleName = file.split('index')[0]; modules.push(moduleName); } }); modules.sort(function (a, b) { return b.length - a.length; }); i18nData = {}; _context7.next = 52; return _promise2.default.all(files.map(function () { var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(file) { var data; return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return handleFile(file); case 2: data = _context2.sent; i18nData[file] = data; case 4: case 'end': return _context2.stop(); } } }, _callee2, undefined); })); return function (_x2) { return _ref3.apply(this, arguments); }; }())); case 52: handledFiles = new _set2.default(); moduleData = {}; _context7.next = 56; return _promise2.default.all(modules.map(function () { var _ref4 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4(module) { var baseLang, baseData, i18nFile, fileContent; return _regenerator2.default.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: moduleData[module] = {}; (0, _keys2.default)(i18nData).map(function (file) { if (file.includes(module) && !handledFiles.has(file)) { moduleData[module] = (0, _extends3.default)({}, moduleData[module], i18nData[file]); handledFiles.add(file); } }); baseLang = languages[0]; baseData = {}; i18nFile = _path2.default.resolve(module, baseLang + '.json'); _context4.prev = 5; _context4.next = 8; return (0, _util.promisify)(_fs2.default.readFile)(i18nFile, 'utf8'); case 8: fileContent = _context4.sent; baseData = JSON.parse(fileContent); _context4.next = 14; break; case 12: _context4.prev = 12; _context4.t0 = _context4['catch'](5); case 14: baseData = (0, _extends3.default)({}, moduleData[module], baseData); _context4.next = 17; return _promise2.default.all(languages.map(function () { var _ref5 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(lang) { var data, i18nFile, _fileContent, dataHandler, content; return _regenerator2.default.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: data = {}; i18nFile = _path2.default.resolve(module, lang + '.json'); _context3.prev = 2; _context3.next = 5; return (0, _util.promisify)(_fs2.default.readFile)(i18nFile, 'utf8'); case 5: _fileContent = _context3.sent; data = JSON.parse(_fileContent); _context3.next = 11; break; case 9: _context3.prev = 9; _context3.t0 = _context3['catch'](2); case 11: data = (0, _extends3.default)({}, baseData, data); if (!(0, _keys2.default)(data).length) { _context3.next = 18; break; } dataHandler = flat ? _flat2.default : _flat.unflatten; content = (0, _stringify2.default)(dataHandler((0, _deepSortObject2.default)(data)), null, 2); content += '\n';_context3.next = 18; return (0, _util.promisify)(_fs2.default.writeFile)(i18nFile, content); case 18: case 'end': return _context3.stop(); } } }, _callee3, undefined, [[2, 9]]); })); return function (_x4) { return _ref5.apply(this, arguments); }; }())); case 17: case 'end': return _context4.stop(); } } }, _callee4, undefined, [[5, 12]]); })); return function (_x3) { return _ref4.apply(this, arguments); }; }())); case 56: defaultModules = ['comp', 'fish', 'theme']; _context7.next = 59; return _promise2.default.all(defaultModules.map(function () { var _ref6 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6(module) { var baseLang, baseData, fileContent; return _regenerator2.default.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: baseLang = languages[0]; baseData = {}; _context6.prev = 2; _context6.next = 5; return (0, _util.promisify)(_fs2.default.readFile)(_path2.default.resolve(staticDir, 'locale', module, baseLang + '.json'), 'utf8'); case 5: fileContent = _context6.sent; baseData = JSON.parse(fileContent); _context6.next = 13; break; case 9: _context6.prev = 9; _context6.t0 = _context6['catch'](2); console.log(); console.log(_chalk2.default.cyan('There is no default file in src/static, please check')); case 13: _context6.next = 15; return _promise2.default.all(languages.map(function () { var _ref7 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5(lang) { var file, data, _fileContent2, dataHandler, content; return _regenerator2.default.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: file = _path2.default.resolve(staticDir, 'locale', module, lang + '.json'); data = {}; _context5.prev = 2; _context5.next = 5; return (0, _util.promisify)(_fs2.default.readFile)(file, 'utf8'); case 5: _fileContent2 = _context5.sent; data = JSON.parse(_fileContent2); _context5.next = 11; break; case 9: _context5.prev = 9; _context5.t0 = _context5['catch'](2); case 11: data = (0, _extends3.default)({}, baseData, data); if (!(0, _keys2.default)(data).length) { _context5.next = 18; break; } dataHandler = flat ? _flat2.default : _flat.unflatten; content = (0, _stringify2.default)(dataHandler((0, _deepSortObject2.default)(data)), null, 2); content += '\n';_context5.next = 18; return (0, _util.promisify)(_fs2.default.writeFile)(file, content); case 18: case 'end': return _context5.stop(); } } }, _callee5, undefined, [[2, 9]]); })); return function (_x6) { return _ref7.apply(this, arguments); }; }())); case 15: case 'end': return _context6.stop(); } } }, _callee6, undefined, [[2, 9]]); })); return function (_x5) { return _ref6.apply(this, arguments); }; }())); case 59: time = Date.now() - start; console.log(); console.log(_chalk2.default.yellow('Done in ' + _chalk2.default.blue(time + 'ms') + ' !!!')); case 62: case 'end': return _context7.stop(); } } }, _callee7, undefined, [[6, 11], [19, 28], [33, 38]]); })); return function run() { return _ref2.apply(this, arguments); }; }(); run();