tronbox
Version:
TronBox - Simple development framework for Tron
1 lines • 6.27 kB
JavaScript
;var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator"));var _toConsumableArray2=_interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}var fsExtra=require("fs-extra");var path=require("path");var chalk=require("chalk");var findUp=require("find-up");var _require=require("enquirer"),prompt=_require.prompt;var packageJson=require("../../../package.json");var ACTION={CREATE_JAVASCRIPT_PROJECT_ACTION:{env:"TRONBOX_CREATE_JAVASCRIPT_PROJECT_WITH_DEFAULTS",message:"Create a sample project",project:"javascript"},QUIT_ACTION:{message:"Quit"}};function printAsciiLogo(){console.info(chalk.blue("88888888888 888888b. "));console.info(chalk.blue(" 888 888 \"88b "));console.info(chalk.blue(" 888 888 .88P "));console.info(chalk.blue(" 888 888d888 .d88b. 88888b. 8888888K. .d88b. 888 888"));console.info(chalk.blue(" 888 888P\" d88\"\"88b 888 \"88b 888 \"Y88b d88\"\"88b `Y8bd8P'"));console.info(chalk.blue(" 888 888 888 888 888 888 888 888 888 888 X88K "));console.info(chalk.blue(" 888 888 Y88..88P 888 888 888 d88P Y88..88P .d8\"\"8b."));console.info(chalk.blue(" 888 888 \"Y88P\" 888 888 8888888P\" \"Y88P\" 888 888"));console.info("")}function printWelcomeMessage(){console.info(chalk.cyan("Welcome to TronBox v".concat(packageJson.version,"! Learn more at ").concat(packageJson.homepage)));console.info()}function showCreatedMessage(){console.info();console.info(chalk.green("Created successfully. Sweet!"));console.info();console.info("See the README.md file for some example commands you can run.");console.info();console.info("Happy building your amazing DApp!")}function showStarOnGitHubMessage(){console.info();console.info(chalk.cyan("If you're enjoying TronBox, please give us a star on GitHub!"));console.info();console.info(chalk.cyan(" ".concat(packageJson.repository.url.slice(0,-4))))}var getAction=function(){var _ref=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee(){var actionResponse;return _regenerator["default"].wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:if(!(process.env[ACTION.CREATE_JAVASCRIPT_PROJECT_ACTION.env]!==undefined)){_context.next=2;break}return _context.abrupt("return",ACTION.CREATE_JAVASCRIPT_PROJECT_ACTION.message);case 2:_context.prev=2;_context.next=5;return prompt([{name:"action",type:"select",message:"What do you want to do?",initial:0,choices:Object.values(ACTION).map(function(_){return{name:_.message}})}]);case 5:actionResponse=_context.sent;return _context.abrupt("return",actionResponse.action);case 9:_context.prev=9;_context.t0=_context["catch"](2);if(!(_context.t0==="")){_context.next=13;break}return _context.abrupt("return",ACTION.QUIT_ACTION.message);case 13:throw _context.t0;case 14:case"end":return _context.stop()}},_callee,null,[[2,9]])}));return function getAction(){return _ref.apply(this,arguments)}}();var _getAllFilesSync=function getAllFilesSync(dir){var files=fsExtra.readdirSync(dir);var results=[];files.forEach(function(file){var filePath=path.join(dir,file);var stat=fsExtra.statSync(filePath);if(stat.isDirectory()){results=[].concat((0,_toConsumableArray2["default"])(results),(0,_toConsumableArray2["default"])(_getAllFilesSync(filePath)))}else{results.push(filePath)}});return results};var copySampleProject=function copySampleProject(action){var packageRoot=path.dirname(findUp.sync("package.json",{cwd:path.dirname(__filename)}));var sampleProjectName=Object.values(ACTION).find(function(_){return action===_.message}).project;var sampleProjectPath=path.join(packageRoot,"sample-projects",sampleProjectName);var sampleProjectFiles=_getAllFilesSync(sampleProjectPath).map(function(file){return path.relative(sampleProjectPath,file)});var projectRoot=process.cwd();var existingFiles=fsExtra.readdirSync(projectRoot).filter(function(file){return file!==".DS_Store"});if(existingFiles.length){var errorMsg="This directory is not empty.\nPlease execute `tronbox init` in an empty directory.\n";console.info();console.info(chalk.red(errorMsg));process.exit()}var _iterator=_createForOfIteratorHelper(sampleProjectFiles),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var file=_step.value;var sampleProjectFile=path.resolve(sampleProjectPath,file);var targetProjectFile=path.resolve(projectRoot,file);fsExtra.copySync(sampleProjectFile,targetProjectFile)}}catch(err){_iterator.e(err)}finally{_iterator.f()}};var Init={run:function run(options,done){printAsciiLogo();printWelcomeMessage();getAction().then(function(action){if(action===ACTION.QUIT_ACTION.message){showStarOnGitHubMessage();done();return}copySampleProject(action);showCreatedMessage();showStarOnGitHubMessage();done()})["catch"](done)}};module.exports=Init;