Compare commits

...

15 commits

Author SHA1 Message Date
Philip Peterson
1d2feae11c
Fix ARM build (#230)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
2026-01-04 09:23:11 -05:00
Quine Global
098176dafb Upgrade electron-drag-click
Some checks are pending
CodeQL / Analyze (push) Waiting to run
2026-01-04 03:57:54 -05:00
Max Horvath
6331c14df9
Fix macOS 26 GPU performance issue by upgrading to Electron 38 (#222)
* Fix macOS 26 GPU performance issue by upgrading to Electron 38

Upgrades Electron from 34.5.1 to 38.6.0 to resolve excessive WindowServer
GPU usage on macOS 26 (Sequoia). This issue was caused by Electron's
override of the private _cornerMask API, which forced the compositor to
treat window masks as dynamic rather than static, resulting in persistent
high GPU load.

Changes:
- Upgrade electron: 34.5.1 → 38.6.0
- Upgrade electron-mksnapshot: 34.5.1 → 38.6.0
- Upgrade @electron/rebuild: ^3.7.1 → ^3.7.2
- Upgrade node-abi: ^3.67.0 → ^3.81.0 (required for Electron 38 support)

The fix was introduced in Electron 36.9.2, 37.6.0, 38.2.0, and all later
versions. We're upgrading to 38.6.0 as it's the latest stable version
compatible with Node 20.11.0.

Fixes: electron/electron#48376

* Use optional chaining

Signed-off-by: Philip Peterson <1326208+philip-peterson@users.noreply.github.com>

---------

Signed-off-by: Philip Peterson <1326208+philip-peterson@users.noreply.github.com>
Co-authored-by: Philip Peterson <1326208+philip-peterson@users.noreply.github.com>
2026-01-04 08:43:36 +00:00
Philip Peterson
3c4b7f30f4
Bump version to 4.0.0-q-canary.8 (#185)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
Co-authored-by: Philip Peterson <philip-peterson@users.noreply.github.com>
2025-08-31 01:00:06 -07:00
Philip Peterson
a495a38db3
Windows compatibility fixes (#183) 2025-08-30 23:07:24 -07:00
Philip Peterson
40cece79ba
Updates to scripts (#180) 2025-08-30 22:52:25 -07:00
Philip Peterson
47ff892422
Update README.md
Some checks failed
CodeQL / Analyze (push) Has been cancelled
Signed-off-by: Philip Peterson <1326208+philip-peterson@users.noreply.github.com>
2025-08-21 21:08:18 -07:00
Philip Peterson
a7dc9ce8f3
Add Quine logo
Signed-off-by: Philip Peterson <1326208+philip-peterson@users.noreply.github.com>
2025-08-21 21:04:52 -07:00
Philip Peterson
06f040a566
Fix scrollbar width being too small on Retina Mac (#167)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
2025-06-15 17:22:21 -07:00
Philip Peterson
fa460d697c
Search command should re-focus search box if already open (#164)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
2025-06-07 21:15:54 -07:00
Philip Peterson
d65dfba445
Update README.md with status badge
Some checks failed
CodeQL / Analyze (push) Has been cancelled
Signed-off-by: Philip Peterson <1326208+philip-peterson@users.noreply.github.com>
2025-05-23 01:15:35 -04:00
Philip Peterson
25bbf4082f bump custom ava version
Some checks failed
CodeQL / Analyze (push) Has been cancelled
2025-05-09 15:03:08 -07:00
Philip Peterson
36e5c150a8
Try fix ava cache issue (#153) 2025-05-09 14:38:35 -07:00
Philip Peterson
e46ef31d88
[ci] turn off ava cache (#138)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
it can cause permissions issues
2025-04-28 00:45:46 -07:00
dependabot[bot]
f432f61964
chore(deps): bump the minorandpatch group across 1 directory with 4 updates (#122)
Some checks are pending
CodeQL / Analyze (push) Waiting to run
2025-04-27 19:42:31 +00:00
23 changed files with 221 additions and 116 deletions

View file

@ -73,6 +73,11 @@ runs:
copy_artifact_path: target copy_artifact_path: target
copy_artifact_dest: target copy_artifact_dest: target
commands: | commands: |
# Install Python distutils in the ARM container
sudo apt-get update
sudo apt-get install -y python3-pip python3-setuptools python3-dev
pip3 install setuptools --break-system-packages || pip3 install setuptools
cd target cd target
# TODO upgrade node to 20.11.0 to match NODE_VERSION # TODO upgrade node to 20.11.0 to match NODE_VERSION
wget https://nodejs.org/dist/v18.16.0/node-v18.16.0-linux-${{ inputs.matrix-name }}.tar.xz wget https://nodejs.org/dist/v18.16.0/node-v18.16.0-linux-${{ inputs.matrix-name }}.tar.xz

View file

@ -79,8 +79,6 @@ jobs:
env: env:
NODE_VERSION: ${{ env.NODE_VERSION }} NODE_VERSION: ${{ env.NODE_VERSION }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Due to permissions issues, Windows needs cache turned off
AVA_CACHE: false
with: with:
node-version: ${{ env.NODE_VERSION }} node-version: ${{ env.NODE_VERSION }}
matrix-os: windows-latest matrix-os: windows-latest
@ -99,6 +97,28 @@ jobs:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Set up QEMU and binfmt
run: |
# Install qemu-user-static
sudo apt-get update
sudo apt-get install -y qemu-user-static binfmt-support python3-setuptools
# Install distutils for node-gyp
sudo apt-get install -y python3-distutils || sudo apt-get install -y python3-dev python-is-python3
# Download and install binfmt configurations
wget https://github.com/qemu/qemu/raw/master/scripts/qemu-binfmt-conf.sh
chmod +x qemu-binfmt-conf.sh
sudo ./qemu-binfmt-conf.sh --qemu-path /usr/bin --qemu-suffix -static --debian
# Import the binfmt configurations
sudo update-binfmts --import qemu-arm
sudo update-binfmts --import qemu-aarch64
# Verify they exist
ls -la /proc/sys/fs/binfmt_misc/qemu-arm* || true
- name: Build ARMv7l - name: Build ARMv7l
uses: ./.github/actions/build-linux-arm uses: ./.github/actions/build-linux-arm
env: env:

View file

@ -69,8 +69,6 @@ jobs:
env: env:
NODE_VERSION: ${{ env.NODE_VERSION }} NODE_VERSION: ${{ env.NODE_VERSION }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Due to permissions issues, Windows needs cache turned off
AVA_CACHE: false
with: with:
node-version: ${{ env.NODE_VERSION }} node-version: ${{ env.NODE_VERSION }}
matrix-os: windows-latest matrix-os: windows-latest
@ -86,6 +84,27 @@ jobs:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Set up QEMU and binfmt
run: |
# Install qemu-user-static
sudo apt-get update
sudo apt-get install -y qemu-user-static binfmt-support python3-setuptools
# Install distutils for node-gyp
sudo apt-get install -y python3-distutils || sudo apt-get install -y python3-dev python-is-python3
# Download and install binfmt configurations
wget https://github.com/qemu/qemu/raw/master/scripts/qemu-binfmt-conf.sh
chmod +x qemu-binfmt-conf.sh
sudo ./qemu-binfmt-conf.sh --qemu-path /usr/bin --qemu-suffix -static --debian
# Import the binfmt configurations
sudo update-binfmts --import qemu-arm
sudo update-binfmts --import qemu-aarch64
# Verify they exist
ls -la /proc/sys/fs/binfmt_misc/qemu-arm* || true
- name: Build ARMv7l - name: Build ARMv7l
uses: ./.github/actions/build-linux-arm uses: ./.github/actions/build-linux-arm
env: env:

View file

@ -3,12 +3,14 @@
</p> </p>
<p> <p>
<a aria-label="Vercel logo" href="https://vercel.com"> <a aria-label="Vercel logo" href="https://vercel.com"><img
<img src="https://img.shields.io/badge/MADE%20BY%20Vercel-000000.svg?style=for-the-badge&logo=vercel&labelColor=000000&logoWidth=20"> src="https://img.shields.io/badge/MADE%20BY%20Vercel-000000.svg?style=for-the-badge&logo=vercel&labelColor=000000&logoWidth=20"
</a> /></a> <a aria-label="Quine logo" href="https://quineglobal.com"><img
</p> width="143" height="28" alt="forked-by-quine" src="https://github.com/user-attachments/assets/57decaa2-7d8c-4d13-ada7-ff6b964346f7"
/></a>
</p>
[![Node CI](https://github.com/quine-global/hyper/actions/workflows/nodejs.yml/badge.svg?event=push)](https://github.com/quine-global/hyper/actions/workflows/nodejs.yml) [![Node CI](https://github.com/quine-global/hyper/actions/workflows/ci.yml/badge.svg?branch=canary)](https://github.com/quine-global/hyper/actions/workflows/ci.yml)
[![Changelog #213](https://img.shields.io/badge/changelog-%23213-lightgrey.svg)](https://changelog.com/213) [![Changelog #213](https://img.shields.io/badge/changelog-%23213-lightgrey.svg)](https://changelog.com/213)
@ -16,7 +18,7 @@ For more details, head to: https://hyper.is
## Project goals ## Project goals
The goal of the project is to create a beautiful and extensible experience for command-line interface users, built on open web standards. In the beginning, our focus will be primarily around speed, stability and the development of the correct API for extension authors. The goal of the project is to create a beautiful and customizable experience for command-line interface users, built on open web standards. We have picked up where Vercel left off, and intend to first offer stability, followed by a more tailored experience. We will still support customizability, but stability of theming APIs is not a goal.
In the future, we anticipate the community will come up with innovative additions to enhance what could be the simplest, most powerful and well-tested interface for productivity. In the future, we anticipate the community will come up with innovative additions to enhance what could be the simplest, most powerful and well-tested interface for productivity.

View file

@ -190,7 +190,7 @@ app.on('ready', () =>
} }
} }
]); ]);
app.dock.setMenu(dockMenu); app.dock?.setMenu(dockMenu);
} }
Menu.setApplicationMenu(AppMenu.buildMenu(menu)); Menu.setApplicationMenu(AppMenu.buildMenu(menu));

View file

@ -65,7 +65,10 @@ export const createMenu = (
Created by Guillermo Rauch Created by Guillermo Rauch
Copyright © 2022 Vercel, Inc. Copyright © 2022 Vercel, Inc.
`.split('\n').map(z => z.trim()).join('\n'), `
.split('\n')
.map((z) => z.trim())
.join('\n'),
buttons: [], buttons: [],
icon: icon as any icon: icon as any
}); });

View file

@ -2,7 +2,7 @@
"name": "hyper", "name": "hyper",
"productName": "Hyper", "productName": "Hyper",
"description": "A terminal built on web technologies", "description": "A terminal built on web technologies",
"version": "4.0.0-q-canary.6", "version": "4.0.0-q-canary.8",
"license": "MIT", "license": "MIT",
"author": { "author": {
"name": "ZEIT, Inc.", "name": "ZEIT, Inc.",
@ -13,19 +13,18 @@
"postinstall": "npx patch-package" "postinstall": "npx patch-package"
}, },
"dependencies": { "dependencies": {
"@babel/parser": "7.25.4", "@babel/parser": "7.27.0",
"@electron/remote": "2.1.2", "@electron/remote": "2.1.2",
"ast-types": "^0.16.1", "ast-types": "^0.16.1",
"async-retry": "1.3.3", "async-retry": "1.3.3",
"chokidar": "^3.6.0", "chokidar": "^3.6.0",
"color": "4.2.3", "color": "4.2.3",
"default-shell": "1.0.1", "default-shell": "1.0.1",
"electron-devtools-installer": "3.2.0", "electron-devtools-installer": "3.2.1",
"quine-electron-drag-click": "1.0.6d",
"electron-fetch": "1.9.1", "electron-fetch": "1.9.1",
"electron-is-dev": "2.0.0", "electron-is-dev": "2.0.0",
"electron-store": "8.2.0", "electron-store": "8.2.0",
"fs-extra": "11.2.0", "fs-extra": "11.3.0",
"git-describe": "4.1.1", "git-describe": "4.1.1",
"lodash": "4.17.21", "lodash": "4.17.21",
"ms": "2.1.3", "ms": "2.1.3",
@ -34,10 +33,11 @@
"os-locale": "5.0.0", "os-locale": "5.0.0",
"parse-url": "9.2.0", "parse-url": "9.2.0",
"queue": "6.0.2", "queue": "6.0.2",
"quine-electron-drag-click": "2.0.0",
"react": "18.3.1", "react": "18.3.1",
"react-dom": "18.3.1", "react-dom": "18.3.1",
"recast": "0.23.9", "recast": "0.23.11",
"semver": "7.6.3", "semver": "7.7.1",
"shell-env": "3.0.1", "shell-env": "3.0.1",
"sudo-prompt": "^9.2.1", "sudo-prompt": "^9.2.1",
"uuid": "10.0.0" "uuid": "10.0.0"

View file

@ -27,7 +27,9 @@ import toElectronBackgroundColor from '../utils/to-electron-background-color';
import contextMenuTemplate from './contextmenu'; import contextMenuTemplate from './contextmenu';
electronDragClick(); if (process.platform === 'darwin') {
electronDragClick();
}
export function newWindow( export function newWindow(
options_: BrowserWindowConstructorOptions, options_: BrowserWindowConstructorOptions,

View file

@ -12,14 +12,14 @@
resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7"
integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==
"@babel/parser@7.25.4": "@babel/parser@7.27.0":
version "7.25.4" version "7.27.0"
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz#af4f2df7d02440286b7de57b1c21acfb2a6f257a" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz#3d7d6ee268e41d2600091cbd4e145ffee85a44ec"
integrity sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA== integrity sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==
dependencies: dependencies:
"@babel/types" "^7.25.4" "@babel/types" "^7.27.0"
"@babel/types@^7.25.4": "@babel/types@^7.27.0":
version "7.27.0" version "7.27.0"
resolved "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz#ef9acb6b06c3173f6632d993ecb6d4ae470b4559" resolved "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz#ef9acb6b06c3173f6632d993ecb6d4ae470b4559"
integrity sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg== integrity sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==
@ -353,10 +353,10 @@ eastasianwidth@^0.2.0:
resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
electron-devtools-installer@3.2.0: electron-devtools-installer@3.2.1:
version "3.2.0" version "3.2.1"
resolved "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-3.2.0.tgz#acc48d24eb7033fe5af284a19667e73b78d406d0" resolved "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-3.2.1.tgz#338a0ada7b4232ee42cd88fe5cf305c6be95cfe9"
integrity sha512-t3UczsYugm4OAbqvdImMCImIMVdFzJAHgbwHpkl5jmfu1izVgUcP/mnrPqJIpEeCK1uZGpt+yHgWEN+9EwoYhQ== integrity sha512-FaCi+oDCOBTw0gJUsuw5dXW32b2Ekh5jO8lI1NRCQigo3azh2VogsIi0eelMVrP1+LkN/bewyH3Xoo1USjO0eQ==
dependencies: dependencies:
rimraf "^3.0.2" rimraf "^3.0.2"
semver "^7.2.1" semver "^7.2.1"
@ -492,10 +492,10 @@ foreground-child@^3.1.0:
cross-spawn "^7.0.6" cross-spawn "^7.0.6"
signal-exit "^4.0.1" signal-exit "^4.0.1"
fs-extra@11.2.0: fs-extra@11.3.0:
version "11.2.0" version "11.3.0"
resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d"
integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==
dependencies: dependencies:
graceful-fs "^4.2.0" graceful-fs "^4.2.0"
jsonfile "^6.0.1" jsonfile "^6.0.1"
@ -1219,10 +1219,10 @@ queue@6.0.2:
dependencies: dependencies:
inherits "~2.0.3" inherits "~2.0.3"
quine-electron-drag-click@1.0.6d: quine-electron-drag-click@2.0.0:
version "1.0.6-d" version "2.0.0"
resolved "https://registry.npmjs.org/quine-electron-drag-click/-/quine-electron-drag-click-1.0.6-d.tgz#210fc244fdf3a11b3ad1b2e2d7d7670176b5e19b" resolved "https://registry.npmjs.org/quine-electron-drag-click/-/quine-electron-drag-click-2.0.0.tgz#c6694a706b4c4eca75277ef2c34d7773476700e1"
integrity sha512-2geemTnPP3GuEGzOR/IbbXbTf+JX/VERjerA4r2TuXYHSanNiEbMWSSZ2wD8RllOnp/tBIE+O4CmmPfJ86rYQQ== integrity sha512-pieh1HawezFDn+cpBgs+RQXeR8wj0h/gZafB3sB9rYRQAHTs9V1R8gIq6u7SjGrn1esiM+iP4cknpzsbk/KQ9w==
dependencies: dependencies:
bindings "^1.5.0" bindings "^1.5.0"
node-addon-api "^3.0.2" node-addon-api "^3.0.2"
@ -1262,10 +1262,10 @@ readdirp@~3.6.0:
dependencies: dependencies:
picomatch "^2.2.1" picomatch "^2.2.1"
recast@0.23.9: recast@0.23.11:
version "0.23.9" version "0.23.11"
resolved "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz#587c5d3a77c2cfcb0c18ccce6da4361528c2587b" resolved "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz#8885570bb28cf773ba1dc600da7f502f7883f73f"
integrity sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q== integrity sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==
dependencies: dependencies:
ast-types "^0.16.1" ast-types "^0.16.1"
esprima "~4.0.0" esprima "~4.0.0"
@ -1312,21 +1312,16 @@ scheduler@^0.23.2:
dependencies: dependencies:
loose-envify "^1.1.0" loose-envify "^1.1.0"
semver@7.6.3: semver@7.7.1, semver@^7.2.1, semver@^7.3.5:
version "7.6.3" version "7.7.1"
resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f"
integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
semver@^5.5.0, semver@^5.6.0: semver@^5.5.0, semver@^5.6.0:
version "5.7.2" version "5.7.2"
resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
semver@^7.2.1, semver@^7.3.5:
version "7.7.1"
resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f"
integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
setimmediate@^1.0.5: setimmediate@^1.0.5:
version "1.0.5" version "1.0.5"
resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"

View file

@ -2,5 +2,8 @@ module.exports = {
files: ['test/*'], files: ['test/*'],
extensions: ['ts'], extensions: ['ts'],
require: ['ts-node/register/transpile-only'], require: ['ts-node/register/transpile-only'],
timeout: '2m' timeout: '2m',
verbose: true,
// Due to permissions issues, Windows needs cache turned off
cache: false
}; };

View file

@ -1,5 +1,8 @@
module.exports = { module.exports = {
files: ['test/unit/*'], files: ['test/unit/*'],
extensions: ['ts'], extensions: ['ts'],
require: ['ts-node/register/transpile-only'] require: ['ts-node/register/transpile-only'],
verbose: true,
// Due to permissions issues, Windows needs cache turned off
cache: false
}; };

13
bin/cp-snapshot.js vendored
View file

@ -1,3 +1,4 @@
const path = require('path'); const path = require('path');
const fs = require('fs'); const fs = require('fs');
const fsPromises = require('fs/promises'); const fsPromises = require('fs/promises');
@ -10,24 +11,30 @@ function copySnapshot(pathToElectron, archToCopy) {
const pathToBlobV8 = path.resolve(__dirname, '..', 'cache', archToCopy, v8ContextFileName); const pathToBlobV8 = path.resolve(__dirname, '..', 'cache', archToCopy, v8ContextFileName);
console.log('Copying v8 snapshots from', pathToBlob, 'to', pathToElectron); console.log('Copying v8 snapshots from', pathToBlob, 'to', pathToElectron);
fs.mkdirSync(pathToElectron, { recursive: true });
fs.copyFileSync(pathToBlob, path.join(pathToElectron, snapshotFileName)); fs.copyFileSync(pathToBlob, path.join(pathToElectron, snapshotFileName));
fs.copyFileSync(pathToBlobV8, path.join(pathToElectron, v8ContextFileName)); fs.copyFileSync(pathToBlobV8, path.join(pathToElectron, v8ContextFileName));
} }
function getPathToElectron() { function getPathToElectron() {
const electronPath = require.resolve('electron');
switch (process.platform) { switch (process.platform) {
case 'darwin': case 'darwin':
return path.resolve( return path.resolve(
__dirname, electronPath,
'..', '..',
'node_modules/electron/dist/Electron.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources' '..',
'..',
'dist/Electron.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources'
); );
case 'win32': case 'win32':
case 'linux': case 'linux':
return path.resolve(__dirname, '..', 'node_modules', 'electron', 'dist'); return path.resolve(electronPath, '..', '..', '..', 'dist');
} }
} }
function getV8ContextFileName(archToCopy) { function getV8ContextFileName(archToCopy) {
return `snapshot_blob.bin`; return `snapshot_blob.bin`;
} }

26
bin/mk-snapshot.js vendored
View file

@ -15,6 +15,12 @@ const archMap = {
}; };
async function main() { async function main() {
const npmConfigArch = process.env.npm_config_arch;
if (!npmConfigArch) {
throw new Error('env var npm_config_arch is not specified')
}
const baseDirPath = path.resolve(__dirname, '..'); const baseDirPath = path.resolve(__dirname, '..');
console.log('Creating a linked script..'); console.log('Creating a linked script..');
@ -32,11 +38,25 @@ async function main() {
// Verify if we will be able to use this in `mksnapshot` // Verify if we will be able to use this in `mksnapshot`
vm.runInNewContext(result.snapshotScript, undefined, {filename: snapshotScriptPath, displayErrors: true}); vm.runInNewContext(result.snapshotScript, undefined, {filename: snapshotScriptPath, displayErrors: true});
const outputBlobPath = `${baseDirPath}/cache/${process.env.npm_config_arch}`; const outputBlobPath = `${baseDirPath}/cache/${npmConfigArch}`;
await mkdirp(outputBlobPath); await mkdirp(outputBlobPath);
let mksnapshotBinPath
if (process.platform === 'win32') {
mksnapshotBinPath =
require.resolve(
path.join("electron-mksnapshot", "bin", "mksnapshot.exe")
);
} else {
mksnapshotBinPath =
require.resolve(
path.join("electron-mksnapshot", "bin", "mksnapshot")
);
}
mksnapshotBinPath = path.dirname(mksnapshotBinPath);
if (process.platform !== 'darwin') { if (process.platform !== 'darwin') {
const mksnapshotBinPath = `${baseDirPath}/node_modules/electron-mksnapshot/bin`;
const matchingDirs = crossArchDirs.map((dir) => `${mksnapshotBinPath}/${dir}`).filter((dir) => fs.existsSync(dir)); const matchingDirs = crossArchDirs.map((dir) => `${mksnapshotBinPath}/${dir}`).filter((dir) => fs.existsSync(dir));
for (const dir of matchingDirs) { for (const dir of matchingDirs) {
if (fs.existsSync(`${mksnapshotBinPath}/gen/v8/embedded.S`)) { if (fs.existsSync(`${mksnapshotBinPath}/gen/v8/embedded.S`)) {
@ -50,7 +70,7 @@ async function main() {
console.log(`Generating startup blob in "${outputBlobPath}"`); console.log(`Generating startup blob in "${outputBlobPath}"`);
const res = childProcess.execFileSync( const res = childProcess.execFileSync(
path.resolve(__dirname, '..', 'node_modules', 'electron-mksnapshot', 'bin', 'mksnapshot' + (process.platform === 'win32' ? '.exe' : '')), require.resolve(`electron-mksnapshot/bin/mksnapshot${process.platform === 'win32' ? '.exe' : ''}`),
[ [
'--startup-src=' + snapshotScriptPath, '--startup-src=' + snapshotScriptPath,
'--startup-blob=' + startupBlobPath, '--startup-blob=' + startupBlobPath,

5
bin/notarize.js vendored
View file

@ -1,11 +1,12 @@
const { notarize } = require("@electron/notarize");
exports.default = async function notarizing(context) { exports.default = async function notarizing(context) {
const { electronPlatformName, appOutDir } = context; const { electronPlatformName, appOutDir } = context;
if (electronPlatformName !== "darwin" || !process.env.APPLE_ID || !process.env.APPLE_PASSWORD) { if (electronPlatformName !== "darwin" || !process.env.APPLE_ID || !process.env.APPLE_PASSWORD) {
return; return;
} }
const { notarize } = await import('@electron/notarize');
const appName = context.packager.appInfo.productFilename; const appName = context.packager.appInfo.productFilename;
return await notarize({ return await notarize({
appBundleId: "com.quineglobal.hyper", appBundleId: "com.quineglobal.hyper",

View file

@ -141,7 +141,7 @@ export function openSearch(uid?: string) {
dispatch({ dispatch({
type: SESSION_SEARCH, type: SESSION_SEARCH,
uid: targetUid, uid: targetUid,
value: true value: new Date()
}); });
}; };
} }
@ -153,7 +153,7 @@ export function closeSearch(uid?: string, keyEvent?: any) {
dispatch({ dispatch({
type: SESSION_SEARCH, type: SESSION_SEARCH,
uid: targetUid, uid: targetUid,
value: false value: null
}); });
} else { } else {
if (keyEvent) { if (keyEvent) {

View file

@ -87,6 +87,7 @@ const SearchButton = ({
const SearchBox = forwardRef<HTMLDivElement, SearchBoxProps>((props, ref) => { const SearchBox = forwardRef<HTMLDivElement, SearchBoxProps>((props, ref) => {
const { const {
caseSensitive, caseSensitive,
dateFocused,
wholeWord, wholeWord,
regex, regex,
results, results,
@ -122,6 +123,14 @@ const SearchBox = forwardRef<HTMLDivElement, SearchBoxProps>((props, ref) => {
inputRef.current?.focus(); inputRef.current?.focus();
}, [inputRef.current]); }, [inputRef.current]);
useEffect(() => {
if (!dateFocused) {
return;
}
inputRef.current?.focus();
inputRef.current?.select();
}, [dateFocused]);
const searchButtonColors: SearchButtonColors = { const searchButtonColors: SearchButtonColors = {
backgroundColor: borderColor, backgroundColor: borderColor,
selectionColor, selectionColor,

View file

@ -1,14 +1,18 @@
import React, {forwardRef} from 'react'; import React, {forwardRef} from 'react';
import {useDevicePixelRatio} from 'use-device-pixel-ratio';
import type {StyleSheetProps} from '../../typings/hyper'; import type {StyleSheetProps} from '../../typings/hyper';
const StyleSheet = forwardRef<HTMLStyleElement, StyleSheetProps>((props, ref) => { const StyleSheet = forwardRef<HTMLStyleElement, StyleSheetProps>((props, ref) => {
const {borderColor} = props; const {borderColor} = props;
const dpr = useDevicePixelRatio();
return ( return (
<style jsx global ref={ref}>{` <style jsx global ref={ref}>{`
::-webkit-scrollbar { ::-webkit-scrollbar {
width: 5px; width: ${5 * dpr}px;
} }
::-webkit-scrollbar-thumb { ::-webkit-scrollbar-thumb {
-webkit-border-radius: 10px; -webkit-border-radius: 10px;

View file

@ -518,6 +518,7 @@ export default class Term extends React.PureComponent<
{this.props.customChildren} {this.props.customChildren}
{this.props.search ? ( {this.props.search ? (
<SearchBox <SearchBox
dateFocused={this.props.search}
next={this.searchNext} next={this.searchNext}
prev={this.searchPrevious} prev={this.searchPrevious}
close={this.closeSearchBox} close={this.closeSearchBox}

View file

@ -27,7 +27,7 @@ function Session(obj: Immutable.DeepPartial<session>) {
cols: null, cols: null,
rows: null, rows: null,
cleared: false, cleared: false,
search: false, search: null,
shell: '', shell: '',
pid: null, pid: null,
profile: '' profile: ''

View file

@ -1,5 +1,5 @@
{ {
"name": "hyper", "name": "hyper-root",
"version": "4.0.0-q-canary.8", "version": "4.0.0-q-canary.8",
"repository": "quine-global/hyper", "repository": "quine-global/hyper",
"engines": { "engines": {
@ -13,9 +13,9 @@
"build": "cross-env NODE_ENV=production webpack && tsc -b -v && cross-env BABEL_ENV=production babel target/renderer/bundle.js --out-file target/renderer/bundle.js --no-comments --minified", "build": "cross-env NODE_ENV=production webpack && tsc -b -v && cross-env BABEL_ENV=production babel target/renderer/bundle.js --out-file target/renderer/bundle.js --no-comments --minified",
"lint": "eslint . --fix --ext .js,.jsx,.ts,.tsx,.json", "lint": "eslint . --fix --ext .js,.jsx,.ts,.tsx,.json",
"test": "yarn run lint && yarn run test:unit", "test": "yarn run lint && yarn run test:unit",
"test:unit": "ava", "test:unit": "cross-env DEBUG=ava:watcher ava",
"test:unit:watch": "yarn run test:unit -- --watch", "test:unit:watch": "yarn run test:unit -- --watch",
"test:e2e": "ava --config ava-e2e.config.js", "test:e2e": "cross-env DEBUG=ava:watcher ava --config ava-e2e.config.js",
"postinstall": "yarn run v8-snapshot && webpack --config-name hyper-app && yarn run install-app-deps-with-retry && yarn run rebuild-node-pty && cpy --cwd=target node_modules \"../../app/\" && husky && yarn run generate-schema", "postinstall": "yarn run v8-snapshot && webpack --config-name hyper-app && yarn run install-app-deps-with-retry && yarn run rebuild-node-pty && cpy --cwd=target node_modules \"../../app/\" && husky && yarn run generate-schema",
"install-app-deps-with-retry": "electron-builder install-app-deps || electron-builder install-app-deps || electron-builder install-app-deps", "install-app-deps-with-retry": "electron-builder install-app-deps || electron-builder install-app-deps || electron-builder install-app-deps",
"rebuild-node-pty": "electron-rebuild -f -o node-pty -m target", "rebuild-node-pty": "electron-rebuild -f -o node-pty -m target",
@ -38,13 +38,23 @@
"@electron/remote": "2.1.2", "@electron/remote": "2.1.2",
"@react-icons/all-files": "4.1.0", "@react-icons/all-files": "4.1.0",
"@redux-devtools/extension": "^3.3.0", "@redux-devtools/extension": "^3.3.0",
"@xterm/addon-canvas": "0.7.0",
"@xterm/addon-fit": "0.10.0",
"@xterm/addon-image": "0.8.0",
"@xterm/addon-ligatures": "0.9.0",
"@xterm/addon-search": "0.15.0",
"@xterm/addon-unicode11": "0.8.0",
"@xterm/addon-web-links": "0.11.0",
"@xterm/addon-webgl": "0.18.0",
"@xterm/xterm": "5.5.0",
"args": "5.0.3", "args": "5.0.3",
"ava": "https://github.com/quine-global/ava#38aebe3badef8d54f68e8315e9849cfa83d531fe",
"chalk": "5.3.0", "chalk": "5.3.0",
"clsx": "2.1.1", "clsx": "2.1.1",
"color": "4.2.3", "color": "4.2.3",
"columnify": "1.6.0", "columnify": "1.6.0",
"electron-rebuild": "^3.2.9",
"css-loader": "7.1.2", "css-loader": "7.1.2",
"electron-rebuild": "^3.2.9",
"got": "12.4.1", "got": "12.4.1",
"json-loader": "0.5.7", "json-loader": "0.5.7",
"lodash": "4.17.21", "lodash": "4.17.21",
@ -67,17 +77,9 @@
"styled-jsx": "5.1.6", "styled-jsx": "5.1.6",
"stylis": "3.5.4", "stylis": "3.5.4",
"typescript-json-schema": "0.65.1", "typescript-json-schema": "0.65.1",
"use-device-pixel-ratio": "^1.1.2",
"uuid": "10.0.0", "uuid": "10.0.0",
"webpack-cli": "5.1.4", "webpack-cli": "5.1.4"
"@xterm/xterm": "5.5.0",
"@xterm/addon-canvas": "0.7.0",
"@xterm/addon-fit": "0.10.0",
"@xterm/addon-image": "0.8.0",
"@xterm/addon-ligatures": "0.9.0",
"@xterm/addon-search": "0.15.0",
"@xterm/addon-unicode11": "0.8.0",
"@xterm/addon-web-links": "0.11.0",
"@xterm/addon-webgl": "0.18.0"
}, },
"devDependencies": { "devDependencies": {
"@ava/babel": "2.0.0", "@ava/babel": "2.0.0",
@ -90,7 +92,7 @@
"@babel/plugin-proposal-optional-chaining": "7.21.0", "@babel/plugin-proposal-optional-chaining": "7.21.0",
"@babel/preset-react": "7.25.9", "@babel/preset-react": "7.25.9",
"@babel/preset-typescript": "7.26.0", "@babel/preset-typescript": "7.26.0",
"@electron/rebuild": "^3.7.1", "@electron/rebuild": "^3.7.2",
"@types/args": "5.0.3", "@types/args": "5.0.3",
"@types/async-retry": "1.4.9", "@types/async-retry": "1.4.9",
"@types/color": "3.0.6", "@types/color": "3.0.6",
@ -108,16 +110,15 @@
"@types/uuid": "10.0.0", "@types/uuid": "10.0.0",
"@typescript-eslint/eslint-plugin": "7.0.0", "@typescript-eslint/eslint-plugin": "7.0.0",
"@typescript-eslint/parser": "6.21.0", "@typescript-eslint/parser": "6.21.0",
"ava": "6.2.0",
"babel-loader": "9.2.1", "babel-loader": "9.2.1",
"concurrently": "9.1.0", "concurrently": "9.1.0",
"copy-webpack-plugin": "12.0.2", "copy-webpack-plugin": "12.0.2",
"cpy-cli": "^5.0.0", "cpy-cli": "^5.0.0",
"cross-env": "7.0.3", "cross-env": "7.0.3",
"electron": "34.5.1", "electron": "38.6.0",
"electron-mksnapshot": "34.5.1",
"electron-builder": "26.0.13", "electron-builder": "26.0.13",
"electron-link": "^0.6.0", "electron-link": "^0.6.0",
"electron-mksnapshot": "38.6.0",
"electronmon": "^2.0.3", "electronmon": "^2.0.3",
"eslint": "8.57.0", "eslint": "8.57.0",
"eslint-config-prettier": "9.1.0", "eslint-config-prettier": "9.1.0",
@ -157,7 +158,7 @@
}, },
"resolutions": { "resolutions": {
"@types/retry": "0.12.5", "@types/retry": "0.12.5",
"node-abi": "^3.67.0" "node-abi": "^3.81.0"
}, },
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
} }

View file

@ -74,7 +74,7 @@ export interface SessionSetCwdAction {
export interface SessionSearchAction { export interface SessionSearchAction {
type: typeof SESSION_SEARCH; type: typeof SESSION_SEARCH;
uid: string; uid: string;
value: boolean; value: Date | null;
} }
export type SessionActions = export type SessionActions =

7
typings/hyper.d.ts vendored
View file

@ -1,6 +1,6 @@
// eslint-disable-next-line eslint-comments/disable-enable-pair // eslint-disable-next-line eslint-comments/disable-enable-pair
/* eslint-disable import/order */ /* eslint-disable import/order */
import type {Immutable} from 'seamless-immutable'; import type {Immutable, ImmutableDate} from 'seamless-immutable';
import type Client from '../lib/utils/rpc'; import type Client from '../lib/utils/rpc';
declare global { declare global {
@ -118,7 +118,7 @@ export type session = {
pid: number | null; pid: number | null;
resizeAt?: number; resizeAt?: number;
rows: number | null; rows: number | null;
search: boolean; search: ImmutableDate | null;
shell: string | null; shell: string | null;
title: string; title: string;
uid: string; uid: string;
@ -326,6 +326,7 @@ import type {TermGroupConnectedProps} from '../lib/components/term-group';
export type TermGroupProps = TermGroupConnectedProps & TermGroupOwnProps; export type TermGroupProps = TermGroupConnectedProps & TermGroupOwnProps;
export type SearchBoxProps = { export type SearchBoxProps = {
dateFocused: ImmutableDate | null;
caseSensitive: boolean; caseSensitive: boolean;
wholeWord: boolean; wholeWord: boolean;
regex: boolean; regex: boolean;
@ -386,7 +387,7 @@ export type TermProps = {
rows: number | null; rows: number | null;
screenReaderMode: boolean; screenReaderMode: boolean;
scrollback: number; scrollback: number;
search: boolean; search: ImmutableDate | null;
searchAddon: SearchAddon | null; searchAddon: SearchAddon | null;
selectionColor: string; selectionColor: string;
term: Terminal | null; term: Terminal | null;

View file

@ -571,7 +571,7 @@
minimist "^1.2.6" minimist "^1.2.6"
plist "^3.0.5" plist "^3.0.5"
"@electron/rebuild@3.7.2", "@electron/rebuild@^3.7.1": "@electron/rebuild@3.7.2", "@electron/rebuild@^3.7.2":
version "3.7.2" version "3.7.2"
resolved "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.2.tgz#8d808b29159c50086d27a5dec72b40bf16b4b582" resolved "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.2.tgz#8d808b29159c50086d27a5dec72b40bf16b4b582"
integrity sha512-19/KbIR/DAxbsCkiaGMXIdPnMCJLkcf8AvGnduJtWBs/CBwiAjY1apCqOLVxrXg+rtXFCngbXhBanWjxLUt1Mg== integrity sha512-19/KbIR/DAxbsCkiaGMXIdPnMCJLkcf8AvGnduJtWBs/CBwiAjY1apCqOLVxrXg+rtXFCngbXhBanWjxLUt1Mg==
@ -1285,12 +1285,12 @@
dependencies: dependencies:
undici-types "~5.26.4" undici-types "~5.26.4"
"@types/node@^20.9.0": "@types/node@^22.7.7":
version "20.17.30" version "22.19.1"
resolved "https://registry.npmjs.org/@types/node/-/node-20.17.30.tgz#1d93f656d3b869dbef7b796568ac457606ba58d0" resolved "https://registry.npmjs.org/@types/node/-/node-22.19.1.tgz#1188f1ddc9f46b4cc3aec76749050b4e1f459b7b"
integrity sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg== integrity sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==
dependencies: dependencies:
undici-types "~6.19.2" undici-types "~6.21.0"
"@types/parse-path@^7.0.0": "@types/parse-path@^7.0.0":
version "7.0.3" version "7.0.3"
@ -2255,10 +2255,9 @@ at-least-node@^1.0.0:
resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
ava@6.2.0: "ava@https://github.com/quine-global/ava#38aebe3badef8d54f68e8315e9849cfa83d531fe":
version "6.2.0" version "6.2.0"
resolved "https://registry.npmjs.org/ava/-/ava-6.2.0.tgz#77be81e745ae219dd835c4e0941f6cf236bb23aa" resolved "https://github.com/quine-global/ava#38aebe3badef8d54f68e8315e9849cfa83d531fe"
integrity sha512-+GZk5PbyepjiO/68hzCZCUepQOQauKfNnI7sA4JukBTg97jD7E+tDKEA7OhGOGr6EorNNMM9+jqvgHVOTOzG4w==
dependencies: dependencies:
"@vercel/nft" "^0.27.5" "@vercel/nft" "^0.27.5"
acorn "^8.13.0" acorn "^8.13.0"
@ -3207,7 +3206,12 @@ delegates@^1.0.0:
resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==
detect-libc@^2.0.0, detect-libc@^2.0.1: detect-libc@^2.0.0:
version "2.0.4"
resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8"
integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==
detect-libc@^2.0.1:
version "2.0.3" version "2.0.3"
resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700"
integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==
@ -3350,10 +3354,10 @@ electron-link@^0.6.0:
resolve "^1.19.0" resolve "^1.19.0"
source-map "^0.7.3" source-map "^0.7.3"
electron-mksnapshot@34.5.1: electron-mksnapshot@38.6.0:
version "34.5.1" version "38.6.0"
resolved "https://registry.npmjs.org/electron-mksnapshot/-/electron-mksnapshot-34.5.1.tgz#25fd5e935e9566d8ce157cb173643b0a9cf904e4" resolved "https://registry.npmjs.org/electron-mksnapshot/-/electron-mksnapshot-38.6.0.tgz#ae9b20caa38087e157aba01607a85326d14d26d9"
integrity sha512-kD8VQLe/7vMw3ddAnJqcnseFQohTdZJSUgyoQpPwRa9fUf2Ko1sXBP9mriQjjw4Ho5SmKqaAz4rJMAUgsxf51Q== integrity sha512-2/TpAa4iZ9roln5fTcAEsZrgaUSliglbWkyow/ae+yij6RHJO0dFzKihynSynLnEXgOPRQT6zrqKV53TTQOufA==
dependencies: dependencies:
"@electron/get" "^2.0.1" "@electron/get" "^2.0.1"
extract-zip "^2.0.0" extract-zip "^2.0.0"
@ -3399,13 +3403,13 @@ electron-to-chromium@^1.5.73:
resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.139.tgz#56ae7d42439e2967a54badbadaeb12f748987f37" resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.139.tgz#56ae7d42439e2967a54badbadaeb12f748987f37"
integrity sha512-GGnRYOTdN5LYpwbIr0rwP/ZHOQSvAF6TG0LSzp28uCBb9JiXHJGmaaKw29qjNJc5bGnnp6kXJqRnGMQoELwi5w== integrity sha512-GGnRYOTdN5LYpwbIr0rwP/ZHOQSvAF6TG0LSzp28uCBb9JiXHJGmaaKw29qjNJc5bGnnp6kXJqRnGMQoELwi5w==
electron@34.5.1: electron@38.6.0:
version "34.5.1" version "38.6.0"
resolved "https://registry.npmjs.org/electron/-/electron-34.5.1.tgz#c7ce7b6f054eae6c7ef2d4ee933277db5bf069b3" resolved "https://registry.npmjs.org/electron/-/electron-38.6.0.tgz#c862bff41d42776e307bf5cc92503dda23612339"
integrity sha512-z2Wm7QjhnJ5592fLITynj8UwIk1mBiT402mOakxSYiADrERIci3IOPk7xWHAFOMvt/eoG5RW16PPhgJiedZcGA== integrity sha512-68OFNxJlrEStA+t8k5atzf4frJddvRR1N1oalr49Ll8YZ0+0nEsDhw4UNhTCoZKTjSYcxFF/4rt+sco+OlnB3g==
dependencies: dependencies:
"@electron/get" "^2.0.0" "@electron/get" "^2.0.0"
"@types/node" "^20.9.0" "@types/node" "^22.7.7"
extract-zip "^2.0.1" extract-zip "^2.0.1"
electronmon@^2.0.3: electronmon@^2.0.3:
@ -6081,10 +6085,10 @@ nested-error-stacks@^2.1.1:
resolved "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz#26c8a3cee6cc05fbcf1e333cd2fc3e003326c0b5" resolved "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz#26c8a3cee6cc05fbcf1e333cd2fc3e003326c0b5"
integrity sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw== integrity sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==
node-abi@^3.0.0, node-abi@^3.45.0, node-abi@^3.67.0: node-abi@^3.0.0, node-abi@^3.45.0, node-abi@^3.81.0:
version "3.74.0" version "3.81.0"
resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.74.0.tgz#5bfb4424264eaeb91432d2adb9da23c63a301ed0" resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.81.0.tgz#176a80904b2d382f5e5d1abcfb44d681cf9105c5"
integrity sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w== integrity sha512-I+SHs7vmUV9ooMDHVzFfUxFQRWeiBCGbI02+XB503WBS8RCDJl4vXSoAXzcnSWpzgItirp2EraDq7jQ2c7CIiA==
dependencies: dependencies:
semver "^7.3.5" semver "^7.3.5"
@ -8270,7 +8274,7 @@ undici-types@~5.26.4:
resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
undici-types@~6.19.2, undici-types@~6.19.8: undici-types@~6.19.8:
version "6.19.8" version "6.19.8"
resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02"
integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==
@ -8369,6 +8373,11 @@ uri-js@^4.2.2:
dependencies: dependencies:
punycode "^2.1.0" punycode "^2.1.0"
use-device-pixel-ratio@^1.1.2:
version "1.1.2"
resolved "https://registry.npmjs.org/use-device-pixel-ratio/-/use-device-pixel-ratio-1.1.2.tgz#e936b99d4037ff1028ac1ac2b5b2ef02ac55f91d"
integrity sha512-nFxV0HwLdRUt20kvIgqHYZe6PK/v4mU1X8/eLsT1ti5ck0l2ob0HDRziaJPx+YWzBo6dMm4cTac3mcyk68Gh+A==
use-sync-external-store@^1.0.0: use-sync-external-store@^1.0.0:
version "1.5.0" version "1.5.0"
resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0" resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0"