UNPKG

@addapptables/ng-web-socket

Version:
363 lines (350 loc) 10.6 kB
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