From cd42c0bf53512c2b3e08af4e2e58d248a0998786 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E4=B9=8B=E5=AD=98?= Date: Tue, 4 Jun 2024 18:00:10 +0800 Subject: [PATCH 1/4] fix: electron main and renderer process --- src/lib/is-browser.ts | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/src/lib/is-browser.ts b/src/lib/is-browser.ts index cdf926a3e..c472b85af 100644 --- a/src/lib/is-browser.ts +++ b/src/lib/is-browser.ts @@ -1,26 +1,14 @@ const isStandardBrowserEnv = () => { // window is only defined when it is a browser if (typeof window !== 'undefined') { - // Is the process an electron application - // check if we are in electron `renderer` - const electronRenderCheck = - typeof navigator !== 'undefined' && - navigator.userAgent?.toLowerCase().indexOf(' electron/') > -1 - if (electronRenderCheck && process?.versions) { - const electronMainCheck = Object.prototype.hasOwnProperty.call( - process.versions, - 'electron', - ) - // Both electron checks are only true if the following webPreferences are set in the main electron BrowserWindow() - // webPreferences: { - // sandbox: false, - // nodeIntegration: true - // contextIsolation: false - // } - return !electronMainCheck + if (typeof process !== 'undefined') { + if (process.type === 'renderer') return true + else if (typeof process.electron !== 'undefined') return false } + return typeof window.document !== 'undefined' } + // return false if nothing is detected return false } From 35ad473c621c53cdfaa5b5a6fffa838160abf226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E4=B9=8B=E5=AD=98?= Date: Thu, 6 Jun 2024 13:26:12 +0800 Subject: [PATCH 2/4] fix: extend process interface --- package-lock.json | 21 ++++++++++++++------- src/lib/is-browser.ts | 9 +++++++++ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4dc46dc44..6b07239a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18554,7 +18554,8 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true + "dev": true, + "requires": {} }, "@octokit/plugin-rest-endpoint-methods": { "version": "7.2.3", @@ -20037,7 +20038,8 @@ "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -20274,7 +20276,8 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "requires": {} }, "add-stream": { "version": "1.0.0", @@ -22692,7 +22695,8 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", - "dev": true + "dev": true, + "requires": {} }, "eslint-import-resolver-node": { "version": "0.3.9", @@ -27431,7 +27435,8 @@ "version": "8.13.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -29230,7 +29235,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", - "dev": true + "dev": true, + "requires": {} }, "ts-node": { "version": "10.9.1", @@ -29969,7 +29975,8 @@ "ws": { "version": "8.14.2", "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==" + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "requires": {} }, "xdg-basedir": { "version": "5.1.0", diff --git a/src/lib/is-browser.ts b/src/lib/is-browser.ts index c472b85af..8b257b731 100644 --- a/src/lib/is-browser.ts +++ b/src/lib/is-browser.ts @@ -1,3 +1,12 @@ +declare global { + namespace NodeJS { + interface Process { + readonly electron: string; + readonly type: ('browser' | 'renderer' | 'worker' | 'utility'); + } + } +} + const isStandardBrowserEnv = () => { // window is only defined when it is a browser if (typeof window !== 'undefined') { From e84f3181558af24a6f186f82858b192d5bff091a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E4=B9=8B=E5=AD=98?= Date: Thu, 13 Jun 2024 11:28:05 +0800 Subject: [PATCH 3/4] add NEED_CHECK_BROWSER_ENVIRONMENT static property --- src/lib/client.ts | 5 +++++ src/lib/is-browser.ts | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/lib/client.ts b/src/lib/client.ts index 8ea645f61..a593ca090 100644 --- a/src/lib/client.ts +++ b/src/lib/client.ts @@ -405,6 +405,7 @@ export interface MqttClientEventCallbacks { */ export default class MqttClient extends TypedEventEmitter { public static VERSION = MQTTJS_VERSION + public static NEED_CHECK_BROWSER_ENVIRONMENT = true /** Public fields */ @@ -486,6 +487,10 @@ export default class MqttClient extends TypedEventEmitter typeof navigator !== 'undefined' && navigator.product === 'ReactNative' const isBrowser = - isStandardBrowserEnv() || isWebWorkerEnv() || isReactNativeEnv() + MqttClient.NEED_CHECK_BROWSER_ENVIRONMENT !== false && (isStandardBrowserEnv() || isWebWorkerEnv() || isReactNativeEnv()) export const isWebWorker = isWebWorkerEnv() From 1a0db33d3000a62a0e531fc59a81f8a98bd25adf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E4=B9=8B=E5=AD=98?= Date: Thu, 13 Jun 2024 11:44:29 +0800 Subject: [PATCH 4/4] fix: restore browser check --- src/lib/is-browser.ts | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/src/lib/is-browser.ts b/src/lib/is-browser.ts index ba3b5c3cb..2f09feacc 100644 --- a/src/lib/is-browser.ts +++ b/src/lib/is-browser.ts @@ -1,27 +1,7 @@ import MqttClient from './client' -declare global { - namespace NodeJS { - interface Process { - readonly electron: string; - readonly type: ('browser' | 'renderer' | 'worker' | 'utility'); - } - } -} - const isStandardBrowserEnv = () => { - // window is only defined when it is a browser - if (typeof window !== 'undefined') { - if (typeof process !== 'undefined') { - if (process.type === 'renderer') return true - else if (typeof process.electron !== 'undefined') return false - } - - return typeof window.document !== 'undefined' - } - - // return false if nothing is detected - return false + return typeof window !== 'undefined' && typeof window.document !== 'undefined' } const isWebWorkerEnv = () =>