deepify
Version:
DEEP Development Tools
140 lines (109 loc) • 4.48 kB
JavaScript
/**
* Created by CCristi on 5/5/16.
*/
;
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;