ae-biu
Version:
Born For AE, Born To Do
474 lines (373 loc) • 15 kB
JavaScript
;
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
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 _promptConfirm = require('prompt-confirm');
var _promptConfirm2 = _interopRequireDefault(_promptConfirm);
var _promptInput = require('prompt-input');
var _promptInput2 = _interopRequireDefault(_promptInput);
var _http = require('http');
var _http2 = _interopRequireDefault(_http);
var _progress = require('progress');
var _progress2 = _interopRequireDefault(_progress);
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _util = require('util');
var _decompress = require('decompress');
var _decompress2 = _interopRequireDefault(_decompress);
var _isEmptyDir = require('./utils/is-empty-dir');
var _isEmptyDir2 = _interopRequireDefault(_isEmptyDir);
var _isNd = require('./utils/is-nd');
var _isNd2 = _interopRequireDefault(_isNd);
var _child_process = require('child_process');
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(' # Create a new project'));
console.log();
console.log(_chalk2.default.blue(' $ ae init'));
console.log();
console.log(_chalk2.default.yellow(' # Create a new project with name'));
console.log();
console.log(_chalk2.default.blue(' $ ae init your-project-name'));
console.log();
console.log(_chalk2.default.yellow(' # Create a new project with specific branch'));
console.log();
console.log(_chalk2.default.blue(' $ ae init -b dev'));
});
_commander2.default.usage('[project-name] [--branch]').option('-b, --branch [branch]', 'Use specific branch as template').parse(process.argv);
var dest = process.cwd();
var projectName = _commander2.default.args[0] || 'ae-example';
var branch = _commander2.default.branch;
if (typeof branch !== 'string') {
branch = 'master';
}
var AE_TEMPLATE = 'http://git.sdp.nd/fed/ae-boilerplate/repository/archive.zip?ref=' + branch;
var handleError = function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(error) {
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
console.log();
error && console.error(error);
_context.next = 4;
return (0, _util.promisify)(_fs2.default.rmdir)(dest);
case 4:
process.exit(1);
case 5:
case 'end':
return _context.stop();
}
}
}, _callee, undefined);
}));
return function handleError(_x) {
return _ref.apply(this, arguments);
};
}();
var unzipFile = function () {
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(zipFile, dest) {
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.prev = 0;
_context2.next = 3;
return (0, _decompress2.default)(zipFile, dest, {
strip: 1 });
case 3:
_context2.next = 9;
break;
case 5:
_context2.prev = 5;
_context2.t0 = _context2['catch'](0);
_context2.next = 9;
return handleError(_context2.t0);
case 9:
case 'end':
return _context2.stop();
}
}
}, _callee2, undefined, [[0, 5]]);
}));
return function unzipFile(_x2, _x3) {
return _ref2.apply(this, arguments);
};
}();
var installPackage = function installPackage() {
console.log(_chalk2.default.yellow('Install 📦 '));
console.log();
var isWin32 = process.platform === 'win32';
var subProcess = (0, _child_process.spawnSync)(isWin32 ? 'npm.cmd' : 'npm', ['install'], {
stdio: 'inherit'
});
console.log();
if (subProcess.status === 1) {
console.log(_chalk2.default.red('😕 There is something wrong 👆 when installing packages, you may need to install packages by yourself'));
} else {
console.log(_chalk2.default.yellow('🎉 All Done, coding now !!!'));
}
};
var updatePkg = function () {
var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(dest) {
var pkgPath, pkgContent, pkg, pkgNameInput, data, defaultVersion, pkgVersionInput;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
pkgPath = dest + '/package.json';
_context3.prev = 1;
_context3.next = 4;
return (0, _util.promisify)(_fs2.default.readFile)(pkgPath, 'utf8');
case 4:
pkgContent = _context3.sent;
pkg = JSON.parse(pkgContent);
console.log();
pkgNameInput = new _promptInput2.default({
name: 'name',
message: 'Name(' + projectName + '):'
});
_context3.next = 10;
return pkgNameInput.run();
case 10:
data = _context3.sent;
pkg.name = data && data.name && data.name.trim() || projectName;
pkg.description = pkg.name + ' - Powered By AE(Admin Engine)';
defaultVersion = '0.0.1-alpha.1';
pkgVersionInput = new _promptInput2.default({
name: 'version',
message: 'Version(' + defaultVersion + '):'
});
_context3.next = 17;
return pkgVersionInput.run();
case 17:
data = _context3.sent;
pkg.version = data && data.version && data.version.trim() || defaultVersion;
if (!pkg.ae) {
pkg.ae = {};
}
pkg.ae.languages = ['zh-CN', 'en'];
(0, _keys2.default)(pkg.scripts).map(function (script) {
pkg.scripts[script] = pkg.scripts[script].replace(/\sSDP_ENV=\S+\s/g, ' ');
});
data = (0, _stringify2.default)(pkg, null, 2);
_context3.next = 25;
return (0, _util.promisify)(_fs2.default.writeFile)(pkgPath, data);
case 25:
process.chdir(dest);
console.log();
_context3.next = 29;
return installPackage();
case 29:
process.exit(0);
_context3.next = 36;
break;
case 32:
_context3.prev = 32;
_context3.t0 = _context3['catch'](1);
_context3.next = 36;
return handleError(_context3.t0);
case 36:
case 'end':
return _context3.stop();
}
}
}, _callee3, undefined, [[1, 32]]);
}));
return function updatePkg(_x4) {
return _ref3.apply(this, arguments);
};
}();
var downloadFiles = function () {
var _ref4 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee7(dest) {
var zipFileName, req;
return _regenerator2.default.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
zipFileName = dest + '/temp.zip';
req = _http2.default.get(AE_TEMPLATE);
req.on('response', function () {
var _ref5 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5(res) {
var length, bar;
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
if (!(res.statusCode >= 400)) {
_context5.next = 5;
break;
}
console.log();
console.log(_chalk2.default.red('There is something wrong with your network, maybe wrong branch name'));
_context5.next = 5;
return handleError();
case 5:
length = parseInt(res.headers['content-length'], 10);
!isNaN(length) && console.log();
bar = !isNaN(length) ? new _progress2.default(_chalk2.default.cyan('downloading [:bar] :rate/bps :percent :etas'), {
complete: '=',
incomplete: '-',
width: 20,
total: length,
clear: true
}) : null;
res.on('data', function (chunk) {
_fs2.default.appendFileSync(zipFileName, chunk);
bar && bar.tick(chunk.length);
});
res.on('end', (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4() {
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
_context4.next = 2;
return unzipFile(zipFileName, dest);
case 2:
_context4.prev = 2;
_context4.next = 5;
return (0, _util.promisify)(_fs2.default.unlink)(zipFileName);
case 5:
_context4.next = 11;
break;
case 7:
_context4.prev = 7;
_context4.t0 = _context4['catch'](2);
_context4.next = 11;
return handleError(_context4.t0);
case 11:
console.log();
console.log(_chalk2.default.yellow('Download success'));
_context4.next = 15;
return updatePkg(dest);
case 15:
case 'end':
return _context4.stop();
}
}
}, _callee4, undefined, [[2, 7]]);
})));
case 10:
case 'end':
return _context5.stop();
}
}
}, _callee5, undefined);
}));
return function (_x6) {
return _ref5.apply(this, arguments);
};
}());
req.on('error', function () {
var _ref7 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6(error) {
return _regenerator2.default.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
_context6.next = 2;
return handleError(error);
case 2:
case 'end':
return _context6.stop();
}
}
}, _callee6, undefined);
}));
return function (_x7) {
return _ref7.apply(this, arguments);
};
}());
case 4:
case 'end':
return _context7.stop();
}
}
}, _callee7, undefined);
}));
return function downloadFiles(_x5) {
return _ref4.apply(this, arguments);
};
}();
var run = function () {
var _ref8 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee8() {
var confirm, answer;
return _regenerator2.default.wrap(function _callee8$(_context8) {
while (1) {
switch (_context8.prev = _context8.next) {
case 0:
_context8.next = 2;
return (0, _isNd2.default)();
case 2:
if (!_context8.sent) {
_context8.next = 32;
break;
}
if (!(0, _isEmptyDir2.default)(dest)) {
_context8.next = 7;
break;
}
downloadFiles(dest);
_context8.next = 30;
break;
case 7:
console.log();
confirm = new _promptConfirm2.default(_chalk2.default.yellow('Current directory is not empty, Do you want to create a new directory named as ' + _chalk2.default.blue(projectName)));
_context8.next = 11;
return confirm.run();
case 11:
answer = _context8.sent;
if (!answer) {
_context8.next = 27;
break;
}
dest += '/' + projectName;
_context8.prev = 14;
_context8.next = 17;
return (0, _util.promisify)(_fs2.default.mkdir)(dest);
case 17:
_context8.next = 24;
break;
case 19:
_context8.prev = 19;
_context8.t0 = _context8['catch'](14);
console.log();
console.log(_chalk2.default.red('Directory already exist, please check'));
process.exit(1);
case 24:
downloadFiles(dest);
_context8.next = 30;
break;
case 27:
console.log();
console.log(_chalk2.default.red('Process exit!!!'));
process.exit(0);
case 30:
_context8.next = 33;
break;
case 32:
console.log(_chalk2.default.red('Maybe you are not a NDer'));
case 33:
case 'end':
return _context8.stop();
}
}
}, _callee8, undefined, [[14, 19]]);
}));
return function run() {
return _ref8.apply(this, arguments);
};
}();
run();