From 22db551f1b4ea11a332ae307b7b279c2ab84c823 Mon Sep 17 00:00:00 2001 From: Baptiste Grob <60621355+baptiste-grob@users.noreply.github.com> Date: Mon, 28 Sep 2020 12:19:23 +0200 Subject: [PATCH] fix: stop relying on window.isElectron --- .../javascripts/ui_models/application_group.ts | 4 ++-- app/assets/javascripts/utils.ts | 16 ++++++++++++---- webpack.config.js | 1 + 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/app/assets/javascripts/ui_models/application_group.ts b/app/assets/javascripts/ui_models/application_group.ts index 1db1a977b..34f8ec82d 100644 --- a/app/assets/javascripts/ui_models/application_group.ts +++ b/app/assets/javascripts/ui_models/application_group.ts @@ -13,6 +13,7 @@ import { } from '@/services'; import { AppState } from '@/ui_models/app_state'; import { Bridge } from '@/services/bridge'; +import { isDesktopApplication } from '@/utils'; export class ApplicationGroup extends SNApplicationGroup { @@ -42,8 +43,7 @@ export class ApplicationGroup extends SNApplicationGroup { applicationCreator: this.createApplication }); - /** FIXME(baptiste): rely on a less fragile method to detect Electron */ - if ((window as any).isElectron) { + if (isDesktopApplication()) { Object.defineProperty(window, 'desktopManager', { get: () => (this.primaryApplication as WebApplication).getDesktopService() }); diff --git a/app/assets/javascripts/utils.ts b/app/assets/javascripts/utils.ts index dcac3d380..dfc719a46 100644 --- a/app/assets/javascripts/utils.ts +++ b/app/assets/javascripts/utils.ts @@ -74,10 +74,6 @@ export function debounce(this: any, func: any, wait: number, immediate = false) }; }; -export function isDesktopApplication() { - return (window as any).isElectron; -} - // https://tc39.github.io/ecma262/#sec-array.prototype.includes if (!Array.prototype.includes) { // eslint-disable-next-line no-extend-native @@ -148,3 +144,15 @@ export async function preventRefreshing( window.onbeforeunload = onBeforeUnload; } } + +/** Platform-detection functions */ +declare const __WEB__: boolean; +declare const __DESKTOP__: boolean; + +if (!__WEB__ && !__DESKTOP__) { + throw Error('Neither __WEB__ nor __DESKTOP__ is true. Check your configuration files.'); +} + +export function isDesktopApplication() { + return __DESKTOP__; +} diff --git a/webpack.config.js b/webpack.config.js index 3ffaf0aba..a8765035c 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -14,6 +14,7 @@ module.exports = (env = { new webpack.DefinePlugin({ __VERSION__: JSON.stringify(require('./package.json').version), __WEB__: JSON.stringify(env.platform === 'web'), + __DESKTOP__: JSON.stringify(env.platform === 'desktop'), }), new MiniCssExtractPlugin({ // Options similar to the same options in webpackOptions.output