@addapptables/ng-web-socket
Version:
Web socket module for Angular
414 lines (401 loc) • 12.6 kB
JavaScript
import { InjectionToken, Injectable, Inject, NgModule } from '@angular/core';
import { __spread, __awaiter, __generator } from 'tslib';
import 'reflect-metadata';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/** @type {?} */
var ROOT_GATEWAY = new InjectionToken('addapptables/websocket: Root WebSocket');
/** @type {?} */
var ROOT_ADAPTER = new InjectionToken('addapptables/websocket: Root Adapter');
/** @type {?} */
var FEATURE_GATEWAY = new InjectionToken('addapptables/websocket: Feature WebSocket');
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/** @type {?} */
var METADATA_KEY = '__@addapptables/websocket__';
/** @type {?} */
var getMetadata = (/**
* @param {?} target
* @return {?}
*/
function (target) { return Reflect.getMetadata(METADATA_KEY, target); });
/**
* @template T
* @param {?=} webSocketOptions
* @return {?}
*/
function WebSocketGateway(webSocketOptions) {
if (webSocketOptions === void 0) { webSocketOptions = {}; }
return (/**
* @param {?} target
* @return {?}
*/
function (target) {
/** @type {?} */
var metadata = getMetadata(target) || {};
Reflect.defineMetadata(METADATA_KEY, Object.assign(metadata, webSocketOptions), target);
});
}
/**
* @param {?} event
* @return {?}
*/
function Subscribe(event) {
return (/**
* @param {?} target
* @param {?} propertyKey
* @return {?}
*/
function (target, propertyKey) {
/** @type {?} */
var metadata = getMetadata(target) || {};
/** @type {?} */
var events = [{ name: event, function: propertyKey }];
if (metadata.events) {
events.push.apply(events, __spread(metadata.events));
}
Reflect.defineMetadata(METADATA_KEY, Object.assign(metadata, { events: events }), target);
});
}
/**
* @return {?}
*/
function WebSocketServer() {
return (/**
* @param {?} target
* @param {?} propertyKey
* @return {?}
*/
function (target, propertyKey) {
/** @type {?} */
var 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 {?} */
var withOptions = 'withOptions';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var ManagerSocketAdapter = /** @class */ (function () {
function ManagerSocketAdapter(adapter) {
this.adapter = adapter;
this.connections = [];
}
/**
* @param {?} serviceSockets
* @return {?}
*/
ManagerSocketAdapter.prototype.addSockects = /**
* @param {?} serviceSockets
* @return {?}
*/
function (serviceSockets) {
var _this = this;
this.sockets = serviceSockets;
this.sockets.forEach((/**
* @param {?} socket
* @return {?}
*/
function (socket) {
/** @type {?} */
var metadata = (/** @type {?} */ (getMetadata(socket.constructor)));
if (metadata.autoConnect) {
_this.connect(socket);
}
}));
};
/**
* @param {?} serviceSocket
* @return {?}
*/
ManagerSocketAdapter.prototype.connect = /**
* @param {?} serviceSocket
* @return {?}
*/
function (serviceSocket) {
return __awaiter(this, void 0, void 0, function () {
var metadata, methods, connection, events;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
metadata = (/** @type {?} */ (getMetadata(serviceSocket.constructor)));
methods = getMetadata(serviceSocket);
if (typeof serviceSocket[withOptions] === 'function') {
metadata = Object.assign(metadata, serviceSocket[withOptions]());
}
return [4 /*yield*/, this.adapter.connect(metadata.url, metadata.options)];
case 1:
connection = _a.sent();
this.bindConnection(methods, connection, serviceSocket);
events = methods && methods.events;
this.bindEvents(connection, events, serviceSocket);
return [2 /*return*/];
}
});
});
};
/**
* @private
* @param {?} methods
* @param {?} connection
* @param {?} serviceSocket
* @return {?}
*/
ManagerSocketAdapter.prototype.bindConnection = /**
* @private
* @param {?} methods
* @param {?} connection
* @param {?} serviceSocket
* @return {?}
*/
function (methods, connection, serviceSocket) {
if (methods && methods.connection) {
serviceSocket[methods.connection] = connection;
}
this.connections.push(connection);
};
/**
* @private
* @param {?} connection
* @param {?} events
* @param {?} serviceSocket
* @return {?}
*/
ManagerSocketAdapter.prototype.bindEvents = /**
* @private
* @param {?} connection
* @param {?} events
* @param {?} serviceSocket
* @return {?}
*/
function (connection, events, serviceSocket) {
var _this = this;
if (events) {
events.forEach((/**
* @param {?} event
* @return {?}
*/
function (event) {
_this.adapter.bindEvent(connection, event.name, serviceSocket[event.function].bind(serviceSocket));
}));
}
};
/**
* @return {?}
*/
ManagerSocketAdapter.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
var _this = this;
this.connections.forEach((/**
* @param {?} x
* @return {?}
*/
function (x) { return _this.adapter.disconnect(x); }));
};
ManagerSocketAdapter.decorators = [
{ type: Injectable }
];
/** @nocollapse */
ManagerSocketAdapter.ctorParameters = function () { return [
{ type: undefined, decorators: [{ type: Inject, args: [ROOT_ADAPTER,] }] }
]; };
return ManagerSocketAdapter;
}());
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
*/
var SocketRootModule = /** @class */ (function () {
function SocketRootModule(managerSocketAdapter, sockets) {
managerSocketAdapter.addSockects(sockets);
}
SocketRootModule.decorators = [
{ type: NgModule }
];
/** @nocollapse */
SocketRootModule.ctorParameters = function () { return [
{ type: ManagerSocketAdapter },
{ type: Array, decorators: [{ type: Inject, args: [ROOT_GATEWAY,] }] }
]; };
return SocketRootModule;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var SocketFeatureModule = /** @class */ (function () {
function SocketFeatureModule(managerSocketAdapter, sockets) {
managerSocketAdapter.addSockects(sockets);
}
SocketFeatureModule.decorators = [
{ type: NgModule }
];
/** @nocollapse */
SocketFeatureModule.ctorParameters = function () { return [
{ type: ManagerSocketAdapter },
{ type: Array, decorators: [{ type: Inject, args: [FEATURE_GATEWAY,] }] }
]; };
return SocketFeatureModule;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var NgWebSocketModule = /** @class */ (function () {
function NgWebSocketModule() {
}
/**
* @param {?} adapter
* @param {?} webSockets
* @return {?}
*/
NgWebSocketModule.forRoot = /**
* @param {?} adapter
* @param {?} webSockets
* @return {?}
*/
function (adapter, webSockets) {
return {
ngModule: SocketRootModule,
providers: [
ManagerSocketAdapter,
webSockets,
adapter,
{
provide: ROOT_ADAPTER,
useExisting: adapter
},
{
provide: ROOT_GATEWAY,
deps: webSockets,
useFactory: createSourceInstances,
},
],
};
};
/**
* @param {?} webSockets
* @return {?}
*/
NgWebSocketModule.forFeature = /**
* @param {?} webSockets
* @return {?}
*/
function (webSockets) {
return {
ngModule: SocketFeatureModule,
providers: [
webSockets,
{
provide: FEATURE_GATEWAY,
multi: true,
deps: webSockets,
useFactory: createSourceInstances,
},
],
};
};
NgWebSocketModule.decorators = [
{ type: NgModule }
];
return NgWebSocketModule;
}());
/**
* @param {...?} instances
* @return {?}
*/
function createSourceInstances() {
var instances = [];
for (var _i = 0; _i < arguments.length; _i++) {
instances[_i] = arguments[_i];
}
return instances;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var WebSocketEventModel = /** @class */ (function () {
function WebSocketEventModel() {
}
return 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
*/
var /**
* @template T
*/
WebSocketOptions = /** @class */ (function () {
function WebSocketOptions() {
}
return 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