UNPKG

deepify

Version:
140 lines (109 loc) 4.48 kB
/** * Created by CCristi on 5/5/16. */ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.ActionGenerator = undefined; var _AbstractGenerator = require('./AbstractGenerator'); var _BrokenResourcesFileException = require('./Exception/BrokenResourcesFileException'); var _deepPackageManager = require('deep-package-manager'); var _MicroserviceGenerator = require('./MicroserviceGenerator'); var _joi = require('joi'); var _joi2 = _interopRequireDefault(_joi); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _fsExtra = require('fs-extra'); var _fsExtra2 = _interopRequireDefault(_fsExtra); var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } class ActionGenerator extends _AbstractGenerator.AbstractGenerator { /** * @param {Object[]} args */ constructor(...args) { super(...args); } /** * @param {Function} cb * @private */ _generate(cb) { let microservice = this.generationSchema.microservice; let autoload = microservice.autoload; let resource = this.generationSchema.resource; let action = this.generationSchema.action; let crud = this.generationSchema.crud; let actionStatement = this._actionStatement; let resourcesJson = this._resourcesJson; let lambdaPath = _path2.default.join(autoload.backend, actionStatement.source); let templateParams = { resource, action }; let lcResource = _MicroserviceGenerator.MicroserviceGenerator.identifier(resource); let lcAction = _MicroserviceGenerator.MicroserviceGenerator.identifier(action); resourcesJson[lcResource] = resourcesJson[lcResource] || {}; resourcesJson[lcResource][lcAction] = resourcesJson[lcResource][lcAction] || {}; resourcesJson[lcResource][lcAction] = actionStatement; _fsExtra2.default.ensureDirSync(lambdaPath); _fs2.default.writeFileSync(this._resourcesPath, JSON.stringify(resourcesJson, null, ' ')); this.renderFile(`backend/lambda/${crud}.es6`, _path2.default.join(autoload.backend, actionStatement.source, 'Handler.es6'), templateParams); this.renderFile('backend/lambda/bootstrap.es6', _path2.default.join(autoload.backend, actionStatement.source, 'bootstrap.es6'), templateParams); this.renderFile('backend/lambda/package.json', _path2.default.join(autoload.backend, actionStatement.source, 'package.json'), templateParams); cb(null, lambdaPath); } /** * @returns {Object} */ get _actionStatement() { let resource = this.generationSchema.resource; let action = this.generationSchema.action; let methods = this.generationSchema.methods; return { description: `${resource} ${action} Action`, type: 'lambda', methods: methods, source: _path2.default.join('src', _deepPackageManager.Helpers_Inflector.lispCase(resource), _deepPackageManager.Helpers_Inflector.lispCase(action)) }; } /** * @returns {Object} * @private */ get _resourcesJson() { try { let resourcesRaw = _fs2.default.readFileSync(this._resourcesPath).toString(); return JSON.parse(resourcesRaw); } catch (e) { throw new _BrokenResourcesFileException.BrokenResourcesFileException(this._resourcesPath); } } /** * @returns {String} * @private */ get _resourcesPath() { let microservice = this.generationSchema.microservice; let autoload = microservice.autoload; return _path2.default.join(autoload.backend, _deepPackageManager.Microservice_Instance.RESOURCES_FILE); } /** * @returns {Object} */ validationSchema() { return _joi2.default.object().keys({ microservice: _joi2.default.object().type(_deepPackageManager.Microservice_Instance).required(), resource: _joi2.default.string().required().regex(_AbstractGenerator.AbstractGenerator.DEEP_NAME_REGEXP), action: _joi2.default.string().required().regex(_AbstractGenerator.AbstractGenerator.DEEP_NAME_REGEXP), crud: _joi2.default.string().required().only(ActionGenerator.CRUDS), methods: _joi2.default.array().required().items(_joi2.default.string().only(_deepPackageManager.Microservice_Metadata_Action.HTTP_VERBS)).min(1) }); } /** * @returns {String[]} */ static get CRUDS() { return ['Custom', 'Create', 'Delete', 'Retrieve', 'Update']; } } exports.ActionGenerator = ActionGenerator;