@loopeco/socketio
Version:
A enhanced LoopBack's WebSocket server based on socket.io
72 lines • 2.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSocketIoMetadata = exports.socketio = exports.SOCKET_IO_CONNECT_METADATA = exports.SOCKET_IO_SUBSCRIBE_METADATA = exports.SOCKET_IO_METADATA = void 0;
const core_1 = require("@loopback/core");
const keys_1 = require("../keys");
exports.SOCKET_IO_METADATA = core_1.MetadataAccessor.create('socketio');
exports.SOCKET_IO_SUBSCRIBE_METADATA = core_1.MetadataAccessor.create('socketio:subscribe');
exports.SOCKET_IO_CONNECT_METADATA = core_1.MetadataAccessor.create('socketio:connect');
/**
* Decorate a socketio controller class to specify the namespace.
*
* @example
* ```ts
* @socketio({namespace: '/chats'})
* export class SocketIoController {}
* ```
* @param spec A namespace or object
*/
function socketio(spec = {}) {
if (typeof spec === 'string' || spec instanceof RegExp) {
spec = { namespace: spec };
}
return core_1.ClassDecoratorFactory.createDecorator(exports.SOCKET_IO_METADATA, spec);
}
exports.socketio = socketio;
function getSocketIoMetadata(controllerClass) {
return core_1.MetadataInspector.getClassMetadata(exports.SOCKET_IO_METADATA, controllerClass);
}
exports.getSocketIoMetadata = getSocketIoMetadata;
(function (socketio) {
function io() {
return core_1.inject(keys_1.SocketIoBindings.IO);
}
socketio.io = io;
function namespace(name) {
return core_1.inject(`socketio.namespace.${name}`);
}
socketio.namespace = namespace;
function socket() {
return core_1.inject(keys_1.SocketIoBindings.SOCKET);
}
socketio.socket = socket;
/**
* Decorate a method to subscribe to socketio events.
* For example,
* ```ts
* @socketio.subscribe('chat message')
* async function onChat(msg: string) {
* }
* ```
* @param messageTypes
*/
function subscribe(...messageTypes) {
return core_1.MethodDecoratorFactory.createDecorator(exports.SOCKET_IO_SUBSCRIBE_METADATA, messageTypes);
}
socketio.subscribe = subscribe;
/**
* Decorate a controller method for `disconnect`
*/
function disconnect() {
return subscribe('disconnect');
}
socketio.disconnect = disconnect;
/**
* Decorate a controller method for `connect`
*/
function connect() {
return core_1.MethodDecoratorFactory.createDecorator(exports.SOCKET_IO_CONNECT_METADATA, true);
}
socketio.connect = connect;
})(socketio = exports.socketio || (exports.socketio = {}));
//# sourceMappingURL=socketio.decorator.js.map