Skip to content

Commit 4ab8bd4

Browse files
[Tech] Move to Electron-Vite (#796)
* feat: notify when setting up CL * feat: update wine list on settings after downloading/removing another CL * [Tech] Move to electron-vite * fix: preload files * chore: submodules branch * bytecode * rename, fix svgr * also export from electron.vite.config.ts * chore: bytecode preload files as well * chore: update extension helper submodule * revert: preload bytecoding * chore: submodules * Add 'axios' to dependenciesToNotExternalize in vite.config.ts * fix: getPCIds failing on windows * Revert "fix: getPCIds failing on windows" This reverts commit ab42cfe. * Revert "Add 'axios' to dependenciesToNotExternalize in vite.config.ts" This reverts commit d237d3b. --------- Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com> Co-authored-by: Brett Cleary <27568879+BrettCleary@users.noreply.github.com>
1 parent 014d73d commit 4ab8bd4

File tree

15 files changed

+277
-401
lines changed

15 files changed

+277
-401
lines changed

electron.vite.config.ts

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import config from './vite.config'
2+
3+
export default config

package.json

+10-11
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "hyperplay",
33
"version": "0.12.0",
44
"private": true,
5-
"main": "build/electron/main.js",
5+
"main": "build/main/main.js",
66
"homepage": "./",
77
"license": "GPL-3.0-only",
88
"description": "An Open Source Launcher for Web3, GOG and Epic Games",
@@ -245,7 +245,7 @@
245245
},
246246
"scripts": {
247247
"setup": "yarn install && yarn allow-scripts",
248-
"start": "vite",
248+
"start": "electron-vite dev --watch",
249249
"debug:react": "react-devtools",
250250
"codecheck": "tsc --noEmit",
251251
"find-deadcode": "ts-prune --error",
@@ -258,20 +258,20 @@
258258
"test:e2e": "cross-env-shell docker compose -f e2e/docker-compose.yml run --rm --build process_all bash e2e/entrypoint.sh",
259259
"test:e2ePackaged": "cross-env TEST_PACKAGED=true yarn test:e2e",
260260
"manualTestProxyJest": "jest mmExtIntegration.test.ts",
261-
"release:linux": "yarn pkgResetExtension:x64:linux && export NODE_ENV_ELECTRON_VITE=production && vite build && electron-builder -p always --linux deb rpm pacman tar.xz",
261+
"release:linux": "yarn pkgResetExtension:x64:linux && export NODE_ENV_ELECTRON_VITE=production && electron-vite build && electron-builder -p always --linux deb rpm pacman tar.xz",
262262
"release:updateFlathub:ci": "tsc flathub/update-flathub.ts --skipLibCheck --target es2015 --moduleResolution node --module commonjs && node flathub/update-flathub.js",
263-
"release:mac:x64": "yarn pkgResetExtension:x64:mac && export NODE_ENV_ELECTRON_VITE=production && vite build && electron-builder -p always --mac --x64",
264-
"release:mac:arm64": "yarn pkgResetExtension:arm64:mac && export NODE_ENV_ELECTRON_VITE=production && vite build && electron-builder -p always --mac --arm64",
265-
"dist:linux": "yarn pkgResetExtension:x64:linux && export NODE_ENV_ELECTRON_VITE=production && vite build && electron-builder --linux",
263+
"release:mac:x64": "yarn pkgResetExtension:x64:mac && export NODE_ENV_ELECTRON_VITE=production && electron-vite build && electron-builder -p always --mac --x64",
264+
"release:mac:arm64": "yarn pkgResetExtension:arm64:mac && export NODE_ENV_ELECTRON_VITE=production && electron-vite build && electron-builder -p always --mac --arm64",
265+
"dist:linux": "yarn pkgResetExtension:x64:linux && export NODE_ENV_ELECTRON_VITE=production && electron-vite build && electron-builder --linux",
266266
"dist:linux:ci:deb": "yarn dist:linux deb --publish=never",
267267
"dist:linux:ci:rpm": "yarn dist:linux rpm --publish=never",
268268
"dist:linux:ci:pacman": "yarn dist:linux pacman --publish=never",
269269
"dist:linux:ci:flatpak": "npm run dist:linux tar.xz --publish=never",
270-
"dist:mac:base": "export NODE_ENV_ELECTRON_VITE=production && export CSC_IDENTITY_AUTO_DISCOVERY=false && vite build && electron-builder --mac",
270+
"dist:mac:base": "export NODE_ENV_ELECTRON_VITE=production && export CSC_IDENTITY_AUTO_DISCOVERY=false && electron-vite build && electron-builder --mac",
271271
"dist:mac:x64": "yarn pkgResetExtension:x64:mac && yarn dist:mac:base --x64 --publish=never",
272272
"dist:mac:arm64": "yarn pkgResetExtension:arm64:mac && yarn dist:mac:base --arm64 --publish=never",
273-
"dist:win": "yarn pkgResetExtension:x64:win && cross-env NODE_ENV_ELECTRON_VITE=production vite build && electron-builder --win nsis --publish=never",
274-
"build-signed:win": "vite build && electron-builder --win -c.win.certificateSubjectName=\"HyperPlay Labs Inc.\"",
273+
"dist:win": "yarn pkgResetExtension:x64:win && cross-env NODE_ENV_ELECTRON_VITE=production electron-vite build && electron-builder --win nsis --publish=never",
274+
"build-signed:win": "electron-vite build && electron-builder --win -c.win.certificateSubjectName=\"HyperPlay Labs Inc.\"",
275275
"lint": "eslint --cache -c .eslintrc --ext .tsx,ts ./src",
276276
"lint-fix": "eslint --fix -c .eslintrc --ext .tsx,ts ./src",
277277
"flatpak:build": "cd flatpak-build && flatpak-builder build xyz.hyperplay.HyperPlay.yml --install --force-clean --user",
@@ -325,7 +325,7 @@
325325
"electron": "^28.0.0",
326326
"electron-builder": "^24.6.3",
327327
"electron-playwright-helpers": "^1.6.0",
328-
"electron-vite": "^1.0.23",
328+
"electron-vite": "^2.1.0",
329329
"eslint": "^8.13.0",
330330
"eslint-config-prettier": "^8.5.0",
331331
"eslint-plugin-import": "^2.26.0",
@@ -345,7 +345,6 @@
345345
"type-fest": "^3.2.0",
346346
"typescript": "^5.3.2",
347347
"vite": "^5.1.4",
348-
"vite-plugin-electron": "^0.10.2",
349348
"vite-plugin-svgr": "^2.2.2"
350349
},
351350
"optionalDependencies": {},

src/backend/main.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -425,27 +425,27 @@ if (!gotTheLock) {
425425
const ses = session.fromPartition(
426426
'persist:InPageWindowEthereumExternalWallet'
427427
)
428-
ses.setPreloads([path.join(__dirname, 'providerPreload.js')])
428+
ses.setPreloads([path.join(__dirname, '../preload/providerPreload.js')])
429429

430430
const authSession = session.fromPartition('persist:auth')
431431
authSession.setPreloads([
432-
path.join(__dirname, 'providerPreload.js'),
433-
path.join(__dirname, 'auth_provider_preload.js')
432+
path.join(__dirname, '../preload/providerPreload.js'),
433+
path.join(__dirname, '../preload/auth_provider_preload.js')
434434
])
435435

436436
const emailModalSession = session.fromPartition('persist:emailModal')
437437
emailModalSession.setPreloads([
438-
path.join(__dirname, 'email_modal_provider_preload.js')
438+
path.join(__dirname, '../preload/email_modal_provider_preload.js')
439439
])
440440

441441
const hpStoreSession = session.fromPartition('persist:hyperplaystore')
442442
hpStoreSession.setPreloads([
443-
path.join(__dirname, 'hyperplay_store_preload.js'),
444-
path.join(__dirname, 'webview_style_preload.js')
443+
path.join(__dirname, '../preload/hyperplay_store_preload.js'),
444+
path.join(__dirname, '../preload/webview_style_preload.js')
445445
])
446446
const epicStoreSession = session.fromPartition('persist:epicstore')
447447
epicStoreSession.setPreloads([
448-
path.join(__dirname, 'webview_style_preload.js')
448+
path.join(__dirname, '../preload/webview_style_preload.js')
449449
])
450450

451451
// keyboards with alt and no option key can be used with mac so register both
@@ -947,7 +947,7 @@ ipcMain.handle('authGOG', async (event, code) => GOGUser.login(code))
947947
ipcMain.handle('logoutLegendary', LegendaryUser.logout)
948948
ipcMain.on('logoutGOG', GOGUser.logout)
949949
ipcMain.handle('getLocalPeloadPath', async () => {
950-
return fixAsarPath(join(publicDir, 'webviewPreload.js'))
950+
return fixAsarPath(join(publicDir, '../preload/webviewPreload.js'))
951951
})
952952

953953
ipcMain.handle('getAmazonLoginData', NileUser.getLoginData)

src/backend/main_window.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export const createMainWindow = () => {
7777
contextIsolation: true,
7878
nodeIntegration: true,
7979
// sandbox: false,
80-
preload: path.join(__dirname, 'preload.js'),
80+
preload: path.join(__dirname, '../preload/preload.js'),
8181
webSecurity: app.isPackaged
8282
}
8383
})

src/backend/storeManagers/storeManagerCommon/games.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ const openNewBrowserGameWindow = async (
7171
webviewTag: true,
7272
contextIsolation: true,
7373
nodeIntegration: true,
74-
preload: path.join(__dirname, 'preload.js')
74+
preload: path.join(__dirname, '../preload/preload.js')
7575
},
7676
show: false
7777
})

src/backend/utils.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ import {
7575
} from './storeManagers/nile/electronStores'
7676

7777
import makeClient from 'discord-rich-presence-typescript'
78-
import { showDialogBoxModalAuto } from './dialog/dialog'
78+
import { notify, showDialogBoxModalAuto } from './dialog/dialog'
7979
import { getMainWindow, sendFrontendMessage } from './main_window'
8080
import { GlobalConfig } from './config'
8181
import { GameConfig } from './game_config'
@@ -911,6 +911,14 @@ export async function downloadDefaultWine() {
911911
})
912912
}
913913

914+
notify({
915+
title: i18next.t('notification.wine-download.title', 'Compatibility Layer'),
916+
body: i18next.t(
917+
'notification.wine-download.message',
918+
'Setting up the default compatibility layer'
919+
)
920+
})
921+
914922
const result = await installWineVersion(
915923
release,
916924
onProgress,

src/backend/wine/manager/downloader/main.ts

+4
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {
2525
unlinkFile,
2626
unzipFile
2727
} from './utilities'
28+
import { sendFrontendMessage } from 'backend/main_window'
2829

2930
interface getVersionsProps {
3031
repositorys?: Repositorys[]
@@ -311,6 +312,9 @@ async function installVersion({
311312

312313
// resolve with disksize
313314
versionInfo.disksize = getFolderSize(installSubDir)
315+
316+
sendFrontendMessage('wineVersionsUpdated')
317+
314318
return { versionInfo: versionInfo, installDir: installSubDir }
315319
}
316320

src/common/typedefs/vite.d.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
declare module '*.jpg' {
2-
const src: string
3-
export default src
4-
}
1+
/// <reference types="vite/client" />
2+
/// <reference types="electron-vite/node" />
3+
/// <reference types="vite-plugin-svgr/client" />

src/frontend/App.css

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
@import '~@fontsource/rajdhani/index.css';
2-
@import '~@fontsource/barlow/index.css';
1+
@import '@fontsource/rajdhani/index.css';
2+
@import '@fontsource/barlow/index.css';
33
/*
44
Subset of font https://github.com/googlefonts/noto-emoji
55
which includes only flags emoji generated using command:

src/frontend/screens/Settings/components/WineVersionSelector.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export default function WineVersionSelector() {
3131
}
3232
setRefreshing(false)
3333
}
34+
window.api.handleWineVersionsUpdated(getAltWine)
3435
getAltWine()
3536
}, [])
3637

tsconfig.json

+2-7
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,13 @@
2424
"noEmit": true,
2525
"noFallthroughCasesInSwitch": true,
2626
"baseUrl": "./src/",
27-
"types": [
28-
"vite-plugin-svgr/client",
29-
"vite/client",
30-
"@types/chrome",
31-
"@types/jest"
32-
],
27+
"types": ["@types/chrome", "@types/jest"],
3328
"typeRoots": ["./node_modules", "src/common/typedefs"],
3429
"strictPropertyInitialization": true
3530
},
3631
"include": ["src"],
3732
"exclude": [
38-
"vite.config.ts",
33+
"electron.vite.config.ts",
3934
"**/__tests__/**",
4035
"**/__mocks__/**",
4136
"sign",

vite.config.ts

+62-103
Original file line numberDiff line numberDiff line change
@@ -1,115 +1,74 @@
1-
import { defineConfig } from 'vite'
2-
import electron from 'vite-plugin-electron'
31
import react from '@vitejs/plugin-react'
42
import svgr from 'vite-plugin-svgr'
5-
import path from 'path'
6-
import { bytecodePlugin } from 'electron-vite'
3+
import { join } from 'path'
4+
import {
5+
bytecodePlugin,
6+
defineConfig,
7+
externalizeDepsPlugin
8+
} from 'electron-vite'
79

8-
const srcAliases = ['backend', 'frontend', 'common'].map((srcFolder) => {
10+
const srcAliases = ['backend', 'frontend', 'common'].map((aliasName) => {
911
return {
10-
find: srcFolder,
11-
replacement: path.resolve(__dirname, `./src/${srcFolder}`)
12+
find: aliasName,
13+
replacement: join(__dirname, 'src', aliasName)
1214
}
1315
})
1416

15-
const aliases = [
16-
{
17-
find: '~@fontsource',
18-
replacement: path.resolve(__dirname, 'node_modules/@fontsource')
19-
},
20-
...srcAliases
21-
]
17+
const dependenciesToNotExternalize = ['check-disk-space']
2218

23-
const electronViteConfig = {
24-
build: { outDir: 'build/electron', target: 'es2020' },
25-
optimizeDeps: {
26-
esbuildOptions: {
27-
target: 'es2020'
28-
}
19+
export default defineConfig(({ mode }) => ({
20+
main: {
21+
build: {
22+
rollupOptions: {
23+
input: 'src/backend/main.ts'
24+
},
25+
outDir: 'build/main',
26+
minify: mode === 'production',
27+
sourcemap: mode === 'development' ? 'inline' : false
28+
},
29+
resolve: { alias: srcAliases },
30+
plugins: [
31+
externalizeDepsPlugin({ exclude: dependenciesToNotExternalize }),
32+
bytecodePlugin()
33+
]
2934
},
30-
resolve: {
31-
alias: aliases
32-
}
33-
}
34-
35-
export default defineConfig({
36-
build: {
37-
outDir: 'build'
35+
preload: {
36+
build: {
37+
rollupOptions: {
38+
input: [
39+
'src/backend/preload.ts',
40+
'src/backend/hyperplay-extension-helper/extensionPreload.ts',
41+
'src/backend/hyperplay-proxy-server/providerPreload.ts',
42+
'src/backend/hyperplay_store_preload.ts',
43+
'src/backend/webview_style_preload.ts',
44+
'src/backend/auth_provider_preload.ts',
45+
'src/backend/email_modal_provider_preload.ts'
46+
]
47+
},
48+
outDir: 'build/preload',
49+
minify: mode === 'production',
50+
sourcemap: mode === 'development' ? 'inline' : false
51+
},
52+
resolve: { alias: srcAliases },
53+
plugins: [externalizeDepsPlugin({ exclude: dependenciesToNotExternalize })]
54+
},
55+
renderer: {
56+
root: '.',
57+
build: {
58+
rollupOptions: {
59+
input: 'index.html'
60+
},
61+
target: 'esnext',
62+
outDir: 'build',
63+
emptyOutDir: false,
64+
minify: mode === 'production',
65+
sourcemap: mode === 'development' ? 'inline' : false
66+
},
67+
resolve: { alias: srcAliases },
68+
plugins: [svgr(), react()]
3869
},
3970
resolve: {
40-
alias: aliases
71+
alias: srcAliases
4172
},
42-
plugins: [
43-
react(),
44-
electron([
45-
{
46-
entry: 'src/backend/main.ts',
47-
vite: {
48-
...electronViteConfig,
49-
plugins: [bytecodePlugin()],
50-
resolve: {
51-
alias: [
52-
{
53-
find: 'axios',
54-
replacement: path.resolve(
55-
__dirname,
56-
'node_modules/axios/dist/node/axios.cjs'
57-
)
58-
},
59-
{
60-
find: 'form-data',
61-
replacement: path.resolve(
62-
__dirname,
63-
'node_modules/form-data/lib/form_data.js'
64-
)
65-
},
66-
...aliases
67-
]
68-
}
69-
}
70-
},
71-
{
72-
entry: path.resolve(__dirname + '/src/backend/preload.ts'),
73-
vite: electronViteConfig
74-
},
75-
{
76-
entry: path.resolve(
77-
__dirname +
78-
'/src/backend/hyperplay-extension-helper/extensionPreload.ts'
79-
),
80-
vite: electronViteConfig
81-
},
82-
{
83-
entry: path.resolve(
84-
__dirname + '/src/backend/hyperplay-proxy-server/providerPreload.ts'
85-
),
86-
vite: electronViteConfig
87-
},
88-
{
89-
entry: path.resolve(
90-
__dirname + '/src/backend/hyperplay_store_preload.ts'
91-
),
92-
vite: electronViteConfig
93-
},
94-
{
95-
entry: path.resolve(
96-
__dirname + '/src/backend/webview_style_preload.ts'
97-
),
98-
vite: electronViteConfig
99-
},
100-
{
101-
entry: path.resolve(
102-
__dirname + '/src/backend/auth_provider_preload.ts'
103-
),
104-
vite: electronViteConfig
105-
},
106-
{
107-
entry: path.resolve(
108-
__dirname + '/src/backend/email_modal_provider_preload.ts'
109-
),
110-
vite: electronViteConfig
111-
}
112-
]),
113-
svgr()
114-
]
115-
})
73+
plugins: [svgr()]
74+
}))

0 commit comments

Comments
 (0)