UNPKG

rpc-websocketserver

Version:

Simple rpc websocket server, wrapping the very popular 'ws' library. Register your RPCs with convenient decorators.

50 lines 2.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.param = exports.register = exports.PARAM_NAMES_KEY = void 0; require("reflect-metadata"); /** * Symbol to be appended to function metadata */ exports.PARAM_NAMES_KEY = Symbol('__paramNames__'); /** * Decorator factory to register a function to a namespace * * @param methodName {string} - optional parameter to rename the function name to the provided string */ function register(methodName) { return function (target, propertyKey, descriptor) { var paramNames = Reflect.getOwnMetadata(exports.PARAM_NAMES_KEY, target, propertyKey) || []; var paramTypes = Reflect.getMetadata('design:paramtypes', target, propertyKey) || []; var params = {}; if (paramNames.length === paramTypes.length) { for (var i = 0; i < paramNames.length; i++) { if (typeof paramTypes[i].name === 'string') params[paramNames[i]] = paramTypes[i].name.toLowerCase(); } } var functionName = typeof propertyKey === 'string' ? propertyKey : propertyKey.toString(); var method = { namespace: target.constructor.name, name: methodName || functionName, func: target[propertyKey], params: params, }; target.constructor.methods.add(method); }; } exports.register = register; /** * Decorator factory to expose function parameter to registered method * * @param name {string} - associated name for param index */ function param(name) { return function (target, propertyKey, parameterIndex) { // TODO add limitations of parameters to readme (no type checking implemented) var paramNames = Reflect.getOwnMetadata(exports.PARAM_NAMES_KEY, target, propertyKey) || []; paramNames[parameterIndex] = name; Reflect.defineMetadata(exports.PARAM_NAMES_KEY, paramNames, target, propertyKey); }; } exports.param = param; //# sourceMappingURL=decorators.js.map