From c648678c15bdb0673cd0ea053c8c01fc1eff4e65 Mon Sep 17 00:00:00 2001 From: Kirill Nagaitsev Date: Tue, 23 Jul 2019 15:44:02 -0500 Subject: [PATCH] refactor(server): move transport mode default setting into helper --- lib/Server.js | 22 +---- lib/utils/normalizeOptions.js | 27 ++++-- .../normalizeOptions.test.js.snap | 84 +++++++++++++++++-- test/server/utils/normalizeOptions.test.js | 57 +++++++++++++ 4 files changed, 153 insertions(+), 37 deletions(-) diff --git a/lib/Server.js b/lib/Server.js index 53bf442229..bd19774ff0 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -61,27 +61,7 @@ class Server { this.log = _log || createLogger(options); - if (this.options.transportMode === undefined) { - this.options.transportMode = { - server: 'sockjs', - client: 'sockjs', - }; - } else { - switch (typeof this.options.transportMode) { - case 'string': - this.options.transportMode = { - server: this.options.transportMode, - client: this.options.transportMode, - }; - break; - // if not a string, it is an object - default: - this.options.transportMode.server = - this.options.transportMode.server || 'sockjs'; - this.options.transportMode.client = - this.options.transportMode.client || 'sockjs'; - } - + if (this.options.transportMode !== undefined) { this.log.warn( 'transportMode is an experimental option, meaning its usage could potentially change without warning' ); diff --git a/lib/utils/normalizeOptions.js b/lib/utils/normalizeOptions.js index 443d2df94a..885f365687 100644 --- a/lib/utils/normalizeOptions.js +++ b/lib/utils/normalizeOptions.js @@ -9,14 +9,25 @@ function normalizeOptions(compiler, options) { options.contentBase = options.contentBase !== undefined ? options.contentBase : process.cwd(); - // set serverMode default - if (options.serverMode === undefined) { - options.serverMode = 'sockjs'; - } - - // set clientMode default - if (options.clientMode === undefined) { - options.clientMode = 'sockjs'; + // normalize transportMode option + if (options.transportMode === undefined) { + options.transportMode = { + server: 'sockjs', + client: 'sockjs', + }; + } else { + switch (typeof options.transportMode) { + case 'string': + options.transportMode = { + server: options.transportMode, + client: options.transportMode, + }; + break; + // if not a string, it is an object + default: + options.transportMode.server = options.transportMode.server || 'sockjs'; + options.transportMode.client = options.transportMode.client || 'sockjs'; + } } if (!options.watchOptions) { diff --git a/test/server/utils/__snapshots__/normalizeOptions.test.js.snap b/test/server/utils/__snapshots__/normalizeOptions.test.js.snap index 0658e08b4b..5741d85d9a 100644 --- a/test/server/utils/__snapshots__/normalizeOptions.test.js.snap +++ b/test/server/utils/__snapshots__/normalizeOptions.test.js.snap @@ -2,37 +2,105 @@ exports[`normalizeOptions contentBase array should set correct options 1`] = ` Object { - "clientMode": "sockjs", "contentBase": Array [ "/path/to/dist1", "/path/to/dist2", ], - "serverMode": "sockjs", + "transportMode": Object { + "client": "sockjs", + "server": "sockjs", + }, "watchOptions": Object {}, } `; exports[`normalizeOptions contentBase string should set correct options 1`] = ` Object { - "clientMode": "sockjs", "contentBase": "/path/to/dist", - "serverMode": "sockjs", + "transportMode": Object { + "client": "sockjs", + "server": "sockjs", + }, "watchOptions": Object {}, } `; exports[`normalizeOptions no options should set correct options 1`] = ` Object { - "clientMode": "sockjs", - "serverMode": "sockjs", + "transportMode": Object { + "client": "sockjs", + "server": "sockjs", + }, + "watchOptions": Object {}, +} +`; + +exports[`normalizeOptions transportMode custom client path should set correct options 1`] = ` +Object { + "transportMode": Object { + "client": "/path/to/custom/client/", + "server": "sockjs", + }, + "watchOptions": Object {}, +} +`; + +exports[`normalizeOptions transportMode custom server class should set correct options 1`] = ` +Object { + "transportMode": Object { + "client": "sockjs", + "server": [Function], + }, + "watchOptions": Object {}, +} +`; + +exports[`normalizeOptions transportMode custom server path should set correct options 1`] = ` +Object { + "transportMode": Object { + "client": "sockjs", + "server": "/path/to/custom/server/", + }, + "watchOptions": Object {}, +} +`; + +exports[`normalizeOptions transportMode sockjs string should set correct options 1`] = ` +Object { + "transportMode": Object { + "client": "sockjs", + "server": "sockjs", + }, + "watchOptions": Object {}, +} +`; + +exports[`normalizeOptions transportMode ws object should set correct options 1`] = ` +Object { + "transportMode": Object { + "client": "ws", + "server": "ws", + }, + "watchOptions": Object {}, +} +`; + +exports[`normalizeOptions transportMode ws string should set correct options 1`] = ` +Object { + "transportMode": Object { + "client": "ws", + "server": "ws", + }, "watchOptions": Object {}, } `; exports[`normalizeOptions watchOptions should set correct options 1`] = ` Object { - "clientMode": "sockjs", - "serverMode": "sockjs", + "transportMode": Object { + "client": "sockjs", + "server": "sockjs", + }, "watchOptions": Object { "poll": true, }, diff --git a/test/server/utils/normalizeOptions.test.js b/test/server/utils/normalizeOptions.test.js index c1f66f4939..1490b36088 100644 --- a/test/server/utils/normalizeOptions.test.js +++ b/test/server/utils/normalizeOptions.test.js @@ -37,6 +37,63 @@ describe('normalizeOptions', () => { }, optionsResults: null, }, + { + title: 'transportMode sockjs string', + multiCompiler: false, + options: { + transportMode: 'sockjs', + }, + optionsResults: null, + }, + { + title: 'transportMode ws string', + multiCompiler: false, + options: { + transportMode: 'ws', + }, + optionsResults: null, + }, + { + title: 'transportMode ws object', + multiCompiler: false, + options: { + transportMode: { + server: 'ws', + client: 'ws', + }, + }, + optionsResults: null, + }, + { + title: 'transportMode custom server path', + multiCompiler: false, + options: { + transportMode: { + server: '/path/to/custom/server/', + }, + }, + optionsResults: null, + }, + { + title: 'transportMode custom server class', + multiCompiler: false, + options: { + transportMode: { + server: class CustomServerImplementation {}, + }, + }, + optionsResults: null, + }, + { + title: 'transportMode custom client path', + multiCompiler: false, + options: { + transportMode: { + client: '/path/to/custom/client/', + }, + }, + optionsResults: null, + }, ]; cases.forEach((data) => {