ae-biu
Version:
Born For AE, Born To Do
487 lines (376 loc) • 18 kB
JavaScript
;
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();