UNPKG

ae-biu

Version:

Born For AE, Born To Do

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