UNPKG

gypsum

Version:

Simple and easy lightweight typescript server side framework on Node.js.

77 lines 4.08 kB
"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