rpc-websocketserver
Version:
Simple rpc websocket server, wrapping the very popular 'ws' library. Register your RPCs with convenient decorators.
50 lines • 2.08 kB
JavaScript
;
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