@loopback/socketio
Version:
LoopBack's WebSocket server based on socket.io
76 lines • 2.82 kB
JavaScript
// Copyright IBM Corp. and LoopBack contributors 2019,2020. All Rights Reserved.
// Node module: @loopback/socketio
// This file is licensed under the MIT License.
// License text available at https://opensource.org/licenses/MIT
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 (0, core_1.inject)(keys_1.SocketIoBindings.IO);
}
socketio.io = io;
function namespace(name) {
return (0, core_1.inject)(`socketio.namespace.${name}`);
}
socketio.namespace = namespace;
function socket() {
return (0, 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 = socketio = {}));
//# sourceMappingURL=socketio.decorator.js.map
;