UNPKG

botpress

Version:

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

93 lines (69 loc) 3.17 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _util = require('../util'); var _util2 = _interopRequireDefault(_util); var _validator = require('../dialog/validator'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(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 Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } const SKILLS_PREFIX = 'skill-'; const SKILLS_PREFIX_REGEX = new RegExp('^' + SKILLS_PREFIX); class SkillsManager { constructor({ logger }) { this._log = (level, msg) => { this.logger && this.logger[level] && this.logger[level](msg); }; this.logger = logger; this._log('info', `[Skills] Initiated`); } registerSkillsFromModules(modules) { this._skills = modules.filter(mod => { const shortName = _util2.default.getModuleShortname(mod.name); return SKILLS_PREFIX_REGEX.test(shortName); }).reduce((acc, curr) => { const shortName = _util2.default.getModuleShortname(curr.name); if (!curr.handlers.generate) { this._log('warn', `Skill "${shortName}" has no flow generator ("generate" method exposed)`); return acc; } if (!_lodash2.default.isFunction(curr.handlers.generate)) { this._log('warn', `Skill "${shortName}" generator is not a valid function`); return acc; } acc[shortName] = curr.handlers.generate; return acc; }, {}); this._log('info', `[Skills] Loaded ${_lodash2.default.keys(this._skills).length} skills`); } generateFlow(skillId, data) { var _this = this; return _asyncToGenerator(function* () { if (!_this._skills) { throw new Error("Skills haven't been initialized yet"); } //vv Backward compatible with old skills, just making sure there's no @botpress or botpress- skillId = _util2.default.getModuleShortname(skillId); if (!SKILLS_PREFIX_REGEX.test(skillId)) { skillId = SKILLS_PREFIX + skillId; } const generator = _this._skills[skillId]; if (!generator) { throw new Error(`Skill "${skillId}" not found`); } const generatedFlow = yield generator(data); const validationError = (0, _validator.validateFlowSchema)(generatedFlow.flow); if (validationError) { throw new Error(`Skill "${skillId}" generated an invalid flow: ${validationError}`); } if (!generatedFlow.transitions || !_lodash2.default.isArray(generatedFlow.transitions)) { throw new Error(`Skill "${skillId}" didn't generate valid "transitions"`); } return generatedFlow; })(); } } exports.default = SkillsManager; //# sourceMappingURL=index.js.map