@addapptables/ng-web-socket
Version:
Web socket module for Angular
363 lines (350 loc) • 10.6 kB
JavaScript
import { InjectionToken, Injectable, Inject, NgModule } from '@angular/core';
import { __awaiter } from 'tslib';
import 'reflect-metadata';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/** @type {?} */
const ROOT_GATEWAY = new InjectionToken('addapptables/websocket: Root WebSocket');
/** @type {?} */
const ROOT_ADAPTER = new InjectionToken('addapptables/websocket: Root Adapter');
/** @type {?} */
const FEATURE_GATEWAY = new InjectionToken('addapptables/websocket: Feature WebSocket');
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/** @type {?} */
const METADATA_KEY = '__@addapptables/websocket__';
/** @type {?} */
const getMetadata = (/**
* @param {?} target
* @return {?}
*/
(target) => Reflect.getMetadata(METADATA_KEY, target));
/**
* @template T
* @param {?=} webSocketOptions
* @return {?}
*/
function WebSocketGateway(webSocketOptions = {}) {
return (/**
* @param {?} target
* @return {?}
*/
(target) => {
/** @type {?} */
const metadata = getMetadata(target) || {};
Reflect.defineMetadata(METADATA_KEY, Object.assign(metadata, webSocketOptions), target);
});
}
/**
* @param {?} event
* @return {?}
*/
function Subscribe(event) {
return (/**
* @param {?} target
* @param {?} propertyKey
* @return {?}
*/
(target, propertyKey) => {
/** @type {?} */
const metadata = getMetadata(target) || {};
/** @type {?} */
const events = [{ name: event, function: propertyKey }];
if (metadata.events) {
events.push(...metadata.events);
}
Reflect.defineMetadata(METADATA_KEY, Object.assign(metadata, { events }), target);
});
}
/**
* @return {?}
*/
function WebSocketServer() {
return (/**
* @param {?} target
* @param {?} propertyKey
* @return {?}
*/
(target, propertyKey) => {
/** @type {?} */
const metadata = getMetadata(target) || {};
Reflect.defineMetadata(METADATA_KEY, Object.assign(metadata, { connection: propertyKey }), target);
});
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @record
* @template T
*/
function ISocketWithOptions() { }
if (false) {
/**
* @return {?}
*/
ISocketWithOptions.prototype.withOptions = function () { };
}
/** @type {?} */
const withOptions = 'withOptions';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class ManagerSocketAdapter {
/**
* @param {?} adapter
*/
constructor(adapter) {
this.adapter = adapter;
this.connections = [];
}
/**
* @param {?} serviceSockets
* @return {?}
*/
addSockects(serviceSockets) {
this.sockets = serviceSockets;
this.sockets.forEach((/**
* @param {?} socket
* @return {?}
*/
socket => {
/** @type {?} */
const metadata = (/** @type {?} */ (getMetadata(socket.constructor)));
if (metadata.autoConnect) {
this.connect(socket);
}
}));
}
/**
* @param {?} serviceSocket
* @return {?}
*/
connect(serviceSocket) {
return __awaiter(this, void 0, void 0, /** @this {!ManagerSocketAdapter} */ function* () {
/** @type {?} */
let metadata = (/** @type {?} */ (getMetadata(serviceSocket.constructor)));
/** @type {?} */
const methods = getMetadata(serviceSocket);
if (typeof serviceSocket[withOptions] === 'function') {
metadata = Object.assign(metadata, serviceSocket[withOptions]());
}
/** @type {?} */
const connection = yield this.adapter.connect(metadata.url, metadata.options);
this.bindConnection(methods, connection, serviceSocket);
/** @type {?} */
const events = methods && methods.events;
this.bindEvents(connection, events, serviceSocket);
});
}
/**
* @private
* @param {?} methods
* @param {?} connection
* @param {?} serviceSocket
* @return {?}
*/
bindConnection(methods, connection, serviceSocket) {
if (methods && methods.connection) {
serviceSocket[methods.connection] = connection;
}
this.connections.push(connection);
}
/**
* @private
* @param {?} connection
* @param {?} events
* @param {?} serviceSocket
* @return {?}
*/
bindEvents(connection, events, serviceSocket) {
if (events) {
events.forEach((/**
* @param {?} event
* @return {?}
*/
event => {
this.adapter.bindEvent(connection, event.name, serviceSocket[event.function].bind(serviceSocket));
}));
}
}
/**
* @return {?}
*/
ngOnDestroy() {
this.connections.forEach((/**
* @param {?} x
* @return {?}
*/
x => this.adapter.disconnect(x)));
}
}
ManagerSocketAdapter.decorators = [
{ type: Injectable }
];
/** @nocollapse */
ManagerSocketAdapter.ctorParameters = () => [
{ type: undefined, decorators: [{ type: Inject, args: [ROOT_ADAPTER,] }] }
];
if (false) {
/**
* @type {?}
* @private
*/
ManagerSocketAdapter.prototype.sockets;
/**
* @type {?}
* @private
*/
ManagerSocketAdapter.prototype.connections;
/**
* @type {?}
* @private
*/
ManagerSocketAdapter.prototype.adapter;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class SocketRootModule {
/**
* @param {?} managerSocketAdapter
* @param {?} sockets
*/
constructor(managerSocketAdapter, sockets) {
managerSocketAdapter.addSockects(sockets);
}
}
SocketRootModule.decorators = [
{ type: NgModule }
];
/** @nocollapse */
SocketRootModule.ctorParameters = () => [
{ type: ManagerSocketAdapter },
{ type: Array, decorators: [{ type: Inject, args: [ROOT_GATEWAY,] }] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class SocketFeatureModule {
/**
* @param {?} managerSocketAdapter
* @param {?} sockets
*/
constructor(managerSocketAdapter, sockets) {
managerSocketAdapter.addSockects(sockets);
}
}
SocketFeatureModule.decorators = [
{ type: NgModule }
];
/** @nocollapse */
SocketFeatureModule.ctorParameters = () => [
{ type: ManagerSocketAdapter },
{ type: Array, decorators: [{ type: Inject, args: [FEATURE_GATEWAY,] }] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class NgWebSocketModule {
/**
* @param {?} adapter
* @param {?} webSockets
* @return {?}
*/
static forRoot(adapter, webSockets) {
return {
ngModule: SocketRootModule,
providers: [
ManagerSocketAdapter,
webSockets,
adapter,
{
provide: ROOT_ADAPTER,
useExisting: adapter
},
{
provide: ROOT_GATEWAY,
deps: webSockets,
useFactory: createSourceInstances,
},
],
};
}
/**
* @param {?} webSockets
* @return {?}
*/
static forFeature(webSockets) {
return {
ngModule: SocketFeatureModule,
providers: [
webSockets,
{
provide: FEATURE_GATEWAY,
multi: true,
deps: webSockets,
useFactory: createSourceInstances,
},
],
};
}
}
NgWebSocketModule.decorators = [
{ type: NgModule }
];
/**
* @param {...?} instances
* @return {?}
*/
function createSourceInstances(...instances) {
return instances;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class WebSocketEventModel {
}
if (false) {
/** @type {?} */
WebSocketEventModel.prototype.name;
/** @type {?} */
WebSocketEventModel.prototype.function;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @template T
*/
class WebSocketOptions {
}
if (false) {
/** @type {?} */
WebSocketOptions.prototype.autoConnect;
/** @type {?} */
WebSocketOptions.prototype.url;
/** @type {?} */
WebSocketOptions.prototype.options;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
export { ManagerSocketAdapter, NgWebSocketModule, SocketFeatureModule, SocketRootModule, Subscribe, WebSocketEventModel, WebSocketGateway, WebSocketOptions, WebSocketServer, createSourceInstances as ɵa, ROOT_GATEWAY as ɵb, ROOT_ADAPTER as ɵc, FEATURE_GATEWAY as ɵd };
//# sourceMappingURL=addapptables-ng-web-socket.js.map