UNPKG

botpress

Version:

The world's first CMS for bots. Easily create, manage and extend chatbots.

174 lines (128 loc) 5.38 kB
'use strict'; var _child_process = require('child_process'); var _prompt = require('prompt'); var _prompt2 = _interopRequireDefault(_prompt); var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _mkdirp = require('mkdirp'); var _mkdirp2 = _interopRequireDefault(_mkdirp); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); var _glob = require('glob'); var _glob2 = _interopRequireDefault(_glob); var _bluebird = require('bluebird'); var _bluebird2 = _interopRequireDefault(_bluebird); var _stats = require('../stats'); var _stats2 = _interopRequireDefault(_stats); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new _bluebird2.default(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return _bluebird2.default.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } const introductionText = _chalk2.default` {dim ---------------} This tool will bootstrap a new {bold Botpress} module for you. For more information or help, please visit {underline https://botpress.io/docs} {dim ---------------}`; const nextStepText = _chalk2.default` {green 🎉 Your module was successfully bootstraped!} {yellow Next steps:} {yellow 1)} Install the dependencies by running {bold npm install} (or {bold yarn install}) {yellow 2)} Compile the module using {bold npm run compile} (or {bold yarn run compile}) {yellow 3)} Link the module to ease development and testing using {bold npm link} {yellow 4)} Install the module in your testing bot using {bold npm install --save path/to/the/module} {yellow 5)} Link the module using {bold npm link MODULE-NAME} {bold Enjoy Botpress!} `; const invalidDirectoryError = _chalk2.default` {red Fatal Error} You need to run this command in an empty directory. `; const templateNotFoundError = template => _chalk2.default` {red Fatal Error} Template {bold ${template}} not found. `; const copyingFile = name => _chalk2.default`{dim -> Copying ${name}}`; const assertDoesntExist = file => { if (_fs2.default.existsSync(file)) { console.log(invalidDirectoryError); process.exit(1); } }; /** * Loads a template a returns a map of files and content * @param {string} name The name of the template to load * @return {object} A map of files `{ path: content }`` * @private */ const loadTemplate = (() => { var _ref = _asyncToGenerator(function* (name) { const templatePath = _path2.default.join(__dirname, 'templates', name); if (!_fs2.default.existsSync) { console.log(templateNotFoundError(name)); process.exit(1); } const files = yield _bluebird2.default.fromCallback(function (cb) { return (0, _glob2.default)('**/*.*', { cwd: templatePath, dot: true }, cb); }); return _lodash2.default.reduce(files, function (obj, file) { const filePath = _path2.default.join(templatePath, file); obj[file] = _fs2.default.readFileSync(filePath).toString(); return obj; }, {}); }); return function loadTemplate(_x) { return _ref.apply(this, arguments); }; })(); const generate = (() => { var _ref2 = _asyncToGenerator(function* (result) { const files = yield loadTemplate('create-default'); for (const [name, content] of Object.entries(files)) { console.log(copyingFile(name)); const compiled = _lodash2.default.template(content, { interpolate: /<%=([\s\S]+?)%>/g }); const directory = _path2.default.dirname(name); if (directory.length) { _mkdirp2.default.sync(directory); } _fs2.default.writeFileSync(name, compiled(result)); } console.log(nextStepText); }); return function generate(_x2) { return _ref2.apply(this, arguments); }; })(); module.exports = () => { console.log(introductionText); const moduleDirectory = _path2.default.resolve('.'); const dirname = _path2.default.basename(moduleDirectory); (0, _stats2.default)({}).track('cli', 'modules', 'create'); _lodash2.default.each(['package.json', 'botfile.js', 'index.js'], assertDoesntExist); const schema = { properties: { name: { description: _chalk2.default.white('module name:'), pattern: /^(\@botpress\/|botpress-)[a-z0-9][a-z0-9-_\.]+$/, message: `Name must be only lowercase letters, digits, dashes, underscores and dots. It must also start with "@botpress/" or "botpress-"`, required: true, default: dirname }, description: { required: false, description: _chalk2.default.white('description:') }, author: { required: false, description: _chalk2.default.white('author:') } } }; _prompt2.default.message = ''; _prompt2.default.delimiter = ''; _prompt2.default.start(); _prompt2.default.get(schema, (err, result) => { generate(result); }); }; //# sourceMappingURL=create.js.map