gypsum
Version:
Simple and easy lightweight typescript server side framework on Node.js.
77 lines • 4.08 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const string_1 = require("tools-box/string");
const object_1 = require("tools-box/object");
const types_1 = require("../types");
const defaultOptions = {
find: { domain: types_1.RESPONSE_DOMAINS.SELF, method: 'get', crud: 'read' },
findById: { domain: types_1.RESPONSE_DOMAINS.SELF, method: 'get', crud: 'read', params: ['id'] },
findOne: { domain: types_1.RESPONSE_DOMAINS.SELF, method: 'get', crud: 'read' },
count: { domain: types_1.RESPONSE_DOMAINS.SELF, method: 'get', crud: 'read' },
search: { domain: types_1.RESPONSE_DOMAINS.SELF, method: 'post', crud: 'read' },
insert: { domain: types_1.RESPONSE_DOMAINS.ALL, method: 'post', crud: 'create' },
insertOne: { domain: types_1.RESPONSE_DOMAINS.ALL, method: 'post', crud: 'create' },
update: { domain: types_1.RESPONSE_DOMAINS.ALL, method: 'put', crud: 'update' },
updateById: { domain: types_1.RESPONSE_DOMAINS.ALL, method: 'put', crud: 'update', params: ['id'] },
updateOne: { domain: types_1.RESPONSE_DOMAINS.ALL, method: 'put', crud: 'update' },
delete: { domain: types_1.RESPONSE_DOMAINS.ALL, method: 'delete', crud: 'delete' },
deleteById: { domain: types_1.RESPONSE_DOMAINS.ALL, method: 'delete', crud: 'delete', params: ['id'] },
deleteOne: { domain: types_1.RESPONSE_DOMAINS.ALL, method: 'delete', crud: 'delete' }
};
function SERVICE(options) {
return function (target, key, descriptor) {
let serviceName = string_1.capitalizeFirst(key);
function service(ctx) {
let args = [];
if (options && options.args && options.args.length)
for (let i = 0; i < options.args.length; i++)
args.push(object_1.getValue(ctx, options.args[i]));
args.push(ctx);
this[key](...args)
.then((res) => {
let response;
if (res) {
if (res instanceof types_1.Response)
response = res;
else if (res.data)
response = new types_1.Response(res);
else
response = new types_1.Response({ data: res });
}
else {
response = new types_1.Response({ data: true });
}
ctx.ok(response);
})
.catch((error) => ctx.next(error));
}
service.isService = true;
service.__name = serviceName;
service.secure = options ? options.secure : undefined;
service.authorize = options ? options.authorize : undefined;
service.apiType = options && options.apiType ? options.apiType : types_1.API_TYPES.ALL;
service.method = options && options.method ? options.method : (defaultOptions[key] ? defaultOptions[key].method : 'get');
service.crud = options && options.crud ? options.crud : (defaultOptions[key] ? defaultOptions[key].crud : getCrud(service.method));
service.domain = options && options.domain ? options.domain : (defaultOptions[key] ? defaultOptions[key].domain : types_1.RESPONSE_DOMAINS.SELF);
service.params = options && options.params ? options.params : (defaultOptions[key] ? defaultOptions[key].params || [] : []);
service.before = options && options.before ? options.before : [];
service.after = options && options.after ? options.after : [];
service.validate = options ? options.validate : undefined;
Object.defineProperty(target.constructor.prototype, serviceName, {
value: service,
writable: true,
enumerable: true
});
};
}
exports.SERVICE = SERVICE;
function getCrud(method) {
if (method === 'post')
return 'create';
if (method === 'put')
return 'update';
if (method === 'delete')
return 'delete';
return 'read';
}
//# sourceMappingURL=service.js.map