From e1211926e4b64244640b1bb97ac61599c47314a3 Mon Sep 17 00:00:00 2001 From: Lawrence Forooghian Date: Thu, 24 Aug 2023 15:54:39 -0300 Subject: [PATCH] =?UTF-8?q?Decouple=20Platform.Transport=E2=80=99s=20trans?= =?UTF-8?q?port=20order=20from=20implementations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Preparation for #1394 (making transports tree-shakable). --- src/common/lib/transport/connectionmanager.ts | 3 ++- src/common/platform.ts | 8 +++++++- src/platform/nodejs/lib/transport/index.ts | 6 +++++- src/platform/web/lib/transport/index.ts | 9 ++++++++- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/common/lib/transport/connectionmanager.ts b/src/common/lib/transport/connectionmanager.ts index 2845ac9fb7..d0e9a0a1a6 100644 --- a/src/common/lib/transport/connectionmanager.ts +++ b/src/common/lib/transport/connectionmanager.ts @@ -410,7 +410,8 @@ class ConnectionManager extends EventEmitter { static initTransports() { WebSocketTransport(ConnectionManager); - Utils.arrForEach(Platform.Transports, function (initFn) { + Utils.arrForEach(Platform.Transports.order, function (transportName) { + const initFn = Platform.Transports.implementations[transportName]!; initFn(ConnectionManager); }); } diff --git a/src/common/platform.ts b/src/common/platform.ts index aa8e133019..3e103063dc 100644 --- a/src/common/platform.ts +++ b/src/common/platform.ts @@ -7,11 +7,14 @@ import IBufferUtils from './types/IBufferUtils'; import * as WebBufferUtils from '../platform/web/lib/util/bufferutils'; import * as NodeBufferUtils from '../platform/nodejs/lib/util/bufferutils'; import { IUntypedCryptoStatic } from '../common/types/ICryptoStatic'; +import TransportName from './constants/TransportName'; type Bufferlike = WebBufferUtils.Bufferlike | NodeBufferUtils.Bufferlike; type BufferUtilsOutput = WebBufferUtils.Output | NodeBufferUtils.Output; type ToBufferOutput = WebBufferUtils.ToBufferOutput | NodeBufferUtils.ToBufferOutput; +export type TransportImplementations = Partial>; + export default class Platform { static Config: IPlatformConfig; /* @@ -29,7 +32,10 @@ export default class Platform { */ static Crypto: IUntypedCryptoStatic | null; static Http: typeof IHttp; - static Transports: TransportInitialiser[]; + static Transports: { + order: TransportName[]; + implementations: TransportImplementations; + }; static Defaults: IDefaults; static WebStorage: IWebStorage | null; } diff --git a/src/platform/nodejs/lib/transport/index.ts b/src/platform/nodejs/lib/transport/index.ts index 1c0163c500..c5db7c0429 100644 --- a/src/platform/nodejs/lib/transport/index.ts +++ b/src/platform/nodejs/lib/transport/index.ts @@ -1,3 +1,7 @@ +import TransportName from 'common/constants/TransportName'; import initialiseNodeCometTransport from './nodecomettransport'; -export default [initialiseNodeCometTransport]; +export default { + order: [TransportName.Comet], + implementations: { [TransportName.Comet]: initialiseNodeCometTransport }, +}; diff --git a/src/platform/web/lib/transport/index.ts b/src/platform/web/lib/transport/index.ts index 8d97bccaa7..98674dd0e9 100644 --- a/src/platform/web/lib/transport/index.ts +++ b/src/platform/web/lib/transport/index.ts @@ -1,4 +1,11 @@ +import TransportName from 'common/constants/TransportName'; import initialiseXHRPollingTransport from './xhrpollingtransport'; import initialiseXHRStreamingTransport from './xhrstreamingtransport'; -export default [initialiseXHRPollingTransport, initialiseXHRStreamingTransport]; +export default { + order: [TransportName.XhrPolling, TransportName.XhrStreaming], + implementations: { + [TransportName.XhrPolling]: initialiseXHRPollingTransport, + [TransportName.XhrStreaming]: initialiseXHRStreamingTransport, + }, +};