diff --git a/apps/studio/package.json b/apps/studio/package.json index 36e25eeb6c..6aadede88f 100644 --- a/apps/studio/package.json +++ b/apps/studio/package.json @@ -102,7 +102,7 @@ "@types/yauzl": "^2.10.3", "@vitejs/plugin-react": "^5.1.4", "@wp-playground/blueprints": "3.1.34", - "electron": "^41.4.0", + "electron": "^42.1.0", "electron-devtools-installer": "^4.0.0", "electron-vite": "^5.0.0", "patch-package": "^8.0.1", diff --git a/apps/studio/src/tests/index.test.ts b/apps/studio/src/tests/index.test.ts index 8e6a81690e..2130536340 100644 --- a/apps/studio/src/tests/index.test.ts +++ b/apps/studio/src/tests/index.test.ts @@ -67,6 +67,7 @@ vi.mock( 'src/modules/cli/lib/macos-installation-manager', () => ( { vi.mock( 'src/modules/cli/lib/linux-installation-manager', () => ( { autoInstallLinuxCliIfNeeded: vi.fn().mockResolvedValue( undefined ), } ) ); +vi.mock( 'electron-squirrel-startup', () => ( { default: false } ) ); vi.mock( 'electron-devtools-installer', () => ( { installExtension: vi.fn().mockResolvedValue( { id: 'test-extension' } ), REACT_DEVELOPER_TOOLS: { id: 'fmkadmapgofadopljbjfkapdkoienihi' }, diff --git a/apps/studio/vitest.config.ts b/apps/studio/vitest.config.ts index 255aefff4b..463be34d64 100644 --- a/apps/studio/vitest.config.ts +++ b/apps/studio/vitest.config.ts @@ -10,6 +10,11 @@ export default mergeConfig( name: 'studio', include: [ 'src/**/*.test.{ts,tsx}' ], setupFiles: [ path.resolve( __dirname, './vitest.setup.ts' ) ], + env: { + // Prevents electron/index.js from trying to download the Electron binary + // when path.txt is absent (e.g. in CI where only the npm package is installed). + ELECTRON_OVERRIDE_DIST_PATH: '/dev/null', + }, }, resolve: { alias: { diff --git a/package-lock.json b/package-lock.json index c713ee9f78..c6f9441fd9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,9 @@ "apps/*", "tools/*" ], + "dependencies": { + "node-abi": "^3.92.0" + }, "devDependencies": { "@automattic/wp-babel-makepot": "^1.2.0", "@eslint/js": "^9.39.2", @@ -619,7 +622,7 @@ "@types/yauzl": "^2.10.3", "@vitejs/plugin-react": "^5.1.4", "@wp-playground/blueprints": "3.1.34", - "electron": "^41.4.0", + "electron": "^42.1.0", "electron-devtools-installer": "^4.0.0", "electron-vite": "^5.0.0", "patch-package": "^8.0.1", @@ -19792,22 +19795,22 @@ "license": "MIT" }, "node_modules/electron": { - "version": "41.4.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-41.4.0.tgz", - "integrity": "sha512-1afmxJGyrZ4bve+PDCs8YtNjjVu4cPwUtSjx36o6gyJWI0NvhebMKtIzzKNOScRyXntH2hX0i350Xgm3BKiEYQ==", + "version": "42.2.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-42.2.0.tgz", + "integrity": "sha512-b2Tc7sIKiZEl0tBVwFM5GJ+FT5KYhmy9QJHjx8BGVZPVW2SctXWEvrE959ElB56qw7H05dBkhlikDA1DmpaAMw==", "dev": true, - "hasInstallScript": true, "license": "MIT", "dependencies": { - "@electron/get": "^2.0.0", + "@electron/get": "^5.0.0", "@types/node": "^24.9.0", "extract-zip": "^2.0.1" }, "bin": { - "electron": "cli.js" + "electron": "cli.js", + "install-electron": "install.js" }, "engines": { - "node": ">= 12.20.55" + "node": ">= 22.12.0" } }, "node_modules/electron-devtools-installer": { @@ -20164,25 +20167,24 @@ } }, "node_modules/electron/node_modules/@electron/get": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", - "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-5.0.0.tgz", + "integrity": "sha512-pjoBpru1KdEtcExBnuHAP1cAc/5faoedw0hzJkL3o4/IJp7HNF1+fbrdxT3gMYRX2oJfvnA/WXeCTVQpYYxyJA==", "dev": true, "license": "MIT", "dependencies": { "debug": "^4.1.1", - "env-paths": "^2.2.0", - "fs-extra": "^8.1.0", - "got": "^11.8.5", + "env-paths": "^3.0.0", + "graceful-fs": "^4.2.11", "progress": "^2.0.3", - "semver": "^6.2.0", + "semver": "^7.6.3", "sumchecker": "^3.0.1" }, "engines": { - "node": ">=12" + "node": ">=22.12.0" }, "optionalDependencies": { - "global-agent": "^3.0.0" + "undici": "^7.24.4" } }, "node_modules/electron/node_modules/@types/node": { @@ -20195,39 +20197,17 @@ "undici-types": "~7.16.0" } }, - "node_modules/electron/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/electron/node_modules/env-paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", "dev": true, "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/electron/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/electron/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/electron/node_modules/undici-types": { @@ -20237,16 +20217,6 @@ "dev": true, "license": "MIT" }, - "node_modules/electron/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/electron2appx": { "version": "2.1.2", "license": "MIT", @@ -26447,8 +26417,9 @@ } }, "node_modules/node-abi": { - "version": "3.87.0", - "dev": true, + "version": "3.92.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.92.0.tgz", + "integrity": "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==", "license": "MIT", "dependencies": { "semver": "^7.3.5"