Compare commits

...

81 Commits

Author SHA1 Message Date
Eugene Pankov
8f71f29007 electron 16 2021-12-12 14:15:04 +01:00
Eugene Pankov
b6fd909d67 electron 14 2021-12-12 14:05:55 +01:00
Eugene Pankov
9500fa8770 dep fix 2021-12-12 13:18:20 +01:00
Eugene Pankov
f92d9c85cb allowRendererProcessReuse 2021-12-12 13:14:24 +01:00
Eugene Pankov
04533a683b upgraded node-serialport 2021-12-12 12:23:24 +01:00
Eugene Pankov
08a38bbf61 serial: slow feed mode - fixes #4901 2021-12-12 12:23:15 +01:00
Eugene Pankov
5f94e84542 theme tweaks, fixed #5068 2021-12-12 12:18:02 +01:00
Eugene Pankov
bdcd2720c4 properly disable yargs warning 2021-12-12 12:10:48 +01:00
Eugene Pankov
4784a076fa disable vibrancy on Windows by default 2021-12-12 12:03:18 +01:00
Eugene Pankov
07c522385f fixed yargs deprecation warnings 2021-12-12 12:03:10 +01:00
Eugene Pankov
d039d76cff fixed restored local tabs being unresponsive - fixes #5122, fixes #5124, fixes #5101 2021-12-12 12:03:01 +01:00
Eugene Pankov
f91754ce7c build fix 2021-12-09 14:10:49 +01:00
Eugene Pankov
5911794b20 Update build.yml 2021-12-09 13:29:08 +01:00
Eugene Pankov
f640bf9443 Revert "Update build.yml"
This reverts commit 9f50d8506c.
2021-12-09 13:28:55 +01:00
Eugene Pankov
9f50d8506c Update build.yml 2021-12-09 13:02:26 +01:00
Eugene Pankov
361f6c2fe5 Update build.yml 2021-12-09 11:25:46 +01:00
Eugene Pankov
8cac38e1ef Update build.yml 2021-12-09 11:18:31 +01:00
Eugene Pankov
75757d027e Update README.md 2021-12-09 01:07:52 +01:00
Eugene Pankov
0c8b6e56da theme tweaks 2021-12-08 23:33:45 +01:00
Eugene Pankov
5be4a12ee5 theme updates 2021-12-08 23:25:46 +01:00
Eugene Pankov
433c7d33d9 fixed tab title recovery for split tabs - fixes #4810 2021-12-08 21:45:58 +01:00
Eugene Pankov
b755346ac0 fixed #5001 2021-12-08 21:01:48 +01:00
Eugene Pankov
4c663e4a20 profile settings: allow filtering by description - fixes #5022 2021-12-08 20:58:13 +01:00
Eugene Pankov
a34e4c236d lint 2021-12-08 20:38:16 +01:00
Eugene Pankov
b2b91f0cfd fixed X11 display spec parsing - fixes #5073, fixes #4978 2021-12-08 20:25:37 +01:00
Eugene Pankov
bbb02f4e64 bundle the clickable-links plugin with Tabby 2021-12-08 19:54:26 +01:00
Eugene Pankov
3eaf46e09d disabled ssh algorithm blacklist by default - fixes #4995, fixes #5072 2021-12-08 19:32:41 +01:00
Eugeny
fc02d27056 Merge pull request #5052 from Eugeny/dependabot/npm_and_yarn/node-sass-7.0.0 2021-12-07 09:10:48 +01:00
Eugeny
0fe7d81a5f Merge pull request #4988 from Eugeny/dependabot/npm_and_yarn/typedoc-0.22.10 2021-12-07 09:10:17 +01:00
dependabot[bot]
59dbe6ba83 Bump node-sass from 6.0.1 to 7.0.0
Bumps [node-sass](https://github.com/sass/node-sass) from 6.0.1 to 7.0.0.
- [Release notes](https://github.com/sass/node-sass/releases)
- [Changelog](https://github.com/sass/node-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/node-sass/compare/v6.0.1...v7.0.0)

---
updated-dependencies:
- dependency-name: node-sass
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-07 04:05:50 +00:00
Eugene Pankov
860a577ddb fixed ESM default imports 2021-12-06 19:13:26 +01:00
dependabot[bot]
2edb9cc5b8 Bump typedoc from 0.22.9 to 0.22.10
Bumps [typedoc](https://github.com/TypeStrong/TypeDoc) from 0.22.9 to 0.22.10.
- [Release notes](https://github.com/TypeStrong/TypeDoc/releases)
- [Changelog](https://github.com/TypeStrong/typedoc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/TypeStrong/TypeDoc/compare/v0.22.9...v0.22.10)

---
updated-dependencies:
- dependency-name: typedoc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-06 17:39:46 +00:00
Eugene Pankov
5bc13965e1 Update package.json 2021-12-06 18:35:33 +01:00
Eugene Pankov
2ca93fdb98 Update build.yml 2021-12-06 18:16:20 +01:00
Eugene Pankov
aa62ca9a6e Update ssh.ts 2021-12-06 18:12:54 +01:00
Eugene Pankov
1928cda394 Update build.yml 2021-12-06 18:06:07 +01:00
Eugene Pankov
64f8e033c4 Update ssh.ts 2021-12-06 18:03:22 +01:00
Eugene Pankov
23280c2143 Update build.yml 2021-12-06 17:46:38 +01:00
Eugene Pankov
d2ec08e3f8 build updates 2021-12-06 12:14:06 +01:00
Eugeny
b186f986ac Merge pull request #4964 from Eugeny/dependabot/npm_and_yarn/app/electron-updater-4.6.1 2021-12-06 11:51:05 +01:00
Eugeny
dbf91228fe Merge pull request #4970 from Eugeny/dependabot/npm_and_yarn/electron-builder-22.14.5 2021-12-06 11:50:42 +01:00
Eugeny
b58198b82b Merge pull request #4996 from Eugeny/dependabot/npm_and_yarn/webpack-5.64.4 2021-12-06 11:50:03 +01:00
Eugeny
eca92760f3 Merge pull request #5002 from Eugeny/dependabot/npm_and_yarn/app/serialport-9.2.8 2021-12-06 11:49:50 +01:00
Eugeny
d4815ca827 Merge pull request #4997 from Eugeny/dependabot/npm_and_yarn/tabby-ssh/types/ssh2-0.5.49 2021-12-06 11:49:33 +01:00
Eugeny
4c19122acb Merge pull request #5009 from Eugeny/dependabot/github_actions/actions/setup-node-2.5.0 2021-12-06 11:49:25 +01:00
Eugene Pankov
6bdbca4e19 Update build.yml 2021-12-06 11:46:52 +01:00
Eugene Pankov
bb47a5d76f ssh: respect keyboard-interactive prompt echo setting - fixes #5045 2021-12-06 09:19:49 +01:00
Eugene Pankov
f308fd481d bumped plugins 2021-12-06 09:19:32 +01:00
Eugene Pankov
34adf767eb ensure patch-package runs on web 2021-12-01 10:04:09 +01:00
Eugene Pankov
2c6a26b01a bumped windows build image 2021-11-30 19:05:49 +01:00
dependabot[bot]
e596553dbf Bump actions/setup-node from 2.4.0 to 2.5.0
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 2.4.0 to 2.5.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v2.4.0...v2.5.0)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-30 04:14:38 +00:00
dependabot[bot]
990b1b8623 Bump serialport from 9.2.5 to 9.2.8 in /app
Bumps [serialport](https://github.com/serialport/node-serialport) from 9.2.5 to 9.2.8.
- [Release notes](https://github.com/serialport/node-serialport/releases)
- [Changelog](https://github.com/serialport/node-serialport/blob/master/CHANGELOG.md)
- [Commits](https://github.com/serialport/node-serialport/compare/@serialport/bindings@9.2.5...@serialport/bindings@9.2.8)

---
updated-dependencies:
- dependency-name: serialport
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-29 04:01:51 +00:00
Eugene Pankov
9856249c88 fixed #5000 - native socksv5 connection support in ssh and connection mode UI overhaul 2021-11-28 18:21:26 +01:00
dependabot[bot]
7818f0642f Bump @types/ssh2 from 0.5.48 to 0.5.49 in /tabby-ssh
Bumps [@types/ssh2](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/ssh2) from 0.5.48 to 0.5.49.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/ssh2)

---
updated-dependencies:
- dependency-name: "@types/ssh2"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-26 04:20:02 +00:00
dependabot[bot]
bcea319eb8 Bump webpack from 5.61.0 to 5.64.4
Bumps [webpack](https://github.com/webpack/webpack) from 5.61.0 to 5.64.4.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.61.0...v5.64.4)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-26 04:05:14 +00:00
Eugeny
246ae9fe77 Merge pull request #4993 from Eugeny/all-contributors/add-NessunKim 2021-11-25 12:36:26 +01:00
allcontributors[bot]
b4a678640e docs: update .all-contributorsrc [skip ci] 2021-11-25 11:36:13 +00:00
allcontributors[bot]
8692c17ea4 docs: update README.md [skip ci] 2021-11-25 11:36:12 +00:00
Eugeny
59ee098fde Merge pull request #4992 from NessunKim/hotkey-backticks 2021-11-25 12:36:11 +01:00
Nessun Kim
cd09043558 Fix hotkey setter to handle backticks and tildes properly 2021-11-25 20:12:00 +09:00
dependabot[bot]
be8f8eec70 Bump electron-builder from 22.11.7 to 22.14.5
Bumps [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder) from 22.11.7 to 22.14.5.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/v22.14.5/packages/electron-builder)

---
updated-dependencies:
- dependency-name: electron-builder
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-22 04:07:44 +00:00
dependabot[bot]
85fb2c5725 Bump electron-updater from 4.3.9 to 4.6.1 in /app
Bumps [electron-updater](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-updater) from 4.3.9 to 4.6.1.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-updater/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/HEAD/packages/electron-updater)

---
updated-dependencies:
- dependency-name: electron-updater
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-22 04:02:00 +00:00
Eugene Pankov
2baede4675 ignore fewer errors in profileSettingsTab 2021-11-21 17:51:32 +01:00
Eugeny
176992a629 Merge pull request #4962 from highfredo/master 2021-11-21 17:49:06 +01:00
highfredo
905e7ffc43 Deepclone profile before passing it to the configuration component and fix uncaught error on modal dismiss 2021-11-21 13:43:02 +01:00
Eugene Pankov
8ff130ebfd fixed #4931 - allow empty username to work with winscp integration 2021-11-20 17:39:10 +01:00
Eugene Pankov
064bcb31d8 fixed toolbar color in paper theme - fixes #4954 2021-11-20 17:24:09 +01:00
Eugene Pankov
25e4e5e8b4 Merge branch 'master' of github.com:Eugeny/tabby 2021-11-20 13:36:32 +01:00
Eugene Pankov
e3018086fb build against an older glibc 2021-11-20 13:36:27 +01:00
Eugeny
f3908da0a6 Merge pull request #4889 from Eugeny/dependabot/npm_and_yarn/shell-quote-1.7.3 2021-11-19 22:58:43 +01:00
Eugeny
2e57ffb169 Merge pull request #4907 from Eugeny/dependabot/npm_and_yarn/electron-rebuild-3.2.5 2021-11-19 22:58:11 +01:00
Eugeny
bda8199e5d Merge pull request #4923 from Eugeny/dependabot/npm_and_yarn/typedoc-0.22.9 2021-11-19 22:57:50 +01:00
Eugeny
a6cbb64f59 Merge pull request #4960 from Eugeny/all-contributors/add-highfredo 2021-11-19 22:57:03 +01:00
allcontributors[bot]
8b1efaeb53 docs: update .all-contributorsrc [skip ci] 2021-11-19 21:56:14 +00:00
allcontributors[bot]
fa767adf52 docs: update README.md [skip ci] 2021-11-19 21:56:13 +00:00
Eugene Pankov
096a6128c9 style tweaks 2021-11-19 22:53:34 +01:00
highfredo
a5fa022792 Autofill port forwarding inputs with the deleted port 2021-11-19 20:18:32 +01:00
highfredo
2922df08f4 Add description to ssh port forwarding 2021-11-19 20:17:08 +01:00
dependabot[bot]
8899e57f81 Bump typedoc from 0.22.7 to 0.22.9
Bumps [typedoc](https://github.com/TypeStrong/TypeDoc) from 0.22.7 to 0.22.9.
- [Release notes](https://github.com/TypeStrong/TypeDoc/releases)
- [Changelog](https://github.com/TypeStrong/typedoc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/TypeStrong/TypeDoc/compare/v0.22.7...v0.22.9)

---
updated-dependencies:
- dependency-name: typedoc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-15 04:08:47 +00:00
dependabot[bot]
f379159a70 Bump electron-rebuild from 3.2.3 to 3.2.5
Bumps [electron-rebuild](https://github.com/electron/electron-rebuild) from 3.2.3 to 3.2.5.
- [Release notes](https://github.com/electron/electron-rebuild/releases)
- [Changelog](https://github.com/electron/electron-rebuild/blob/master/.releaserc.json)
- [Commits](https://github.com/electron/electron-rebuild/compare/v3.2.3...v3.2.5)

---
updated-dependencies:
- dependency-name: electron-rebuild
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-11 04:03:25 +00:00
dependabot[bot]
ec850344fc Bump shell-quote from 1.7.2 to 1.7.3
Bumps [shell-quote](https://github.com/substack/node-shell-quote) from 1.7.2 to 1.7.3.
- [Release notes](https://github.com/substack/node-shell-quote/releases)
- [Changelog](https://github.com/substack/node-shell-quote/blob/master/CHANGELOG.md)
- [Commits](https://github.com/substack/node-shell-quote/compare/v1.7.2...1.7.3)

---
updated-dependencies:
- dependency-name: shell-quote
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-08 04:06:41 +00:00
100 changed files with 1332 additions and 760 deletions

View File

@@ -478,6 +478,24 @@
"contributions": [ "contributions": [
"design" "design"
] ]
},
{
"login": "highfredo",
"name": "Alfredo Arellano de la Fuente",
"avatar_url": "https://avatars.githubusercontent.com/u/5951524?v=4",
"profile": "https://github.com/highfredo",
"contributions": [
"code"
]
},
{
"login": "NessunKim",
"name": "MH Kim",
"avatar_url": "https://avatars.githubusercontent.com/u/12974079?v=4",
"profile": "https://github.com/NessunKim",
"contributions": [
"code"
]
} }
], ],
"contributorsPerLine": 7, "contributorsPerLine": 7,

View File

@@ -11,9 +11,9 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- name: Installing Node - name: Installing Node
uses: actions/setup-node@v2.4.0 uses: actions/setup-node@v2.5.0
with: with:
node-version: 14 node-version: 16
- name: Install deps - name: Install deps
run: | run: |
@@ -46,9 +46,9 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- name: Installing Node - name: Installing Node
uses: actions/setup-node@v2.4.0 uses: actions/setup-node@v2.5.0
with: with:
node-version: 14 node-version: 16
- name: Install deps - name: Install deps
run: | run: |
@@ -129,7 +129,7 @@ jobs:
path: artifact-zip path: artifact-zip
Linux-Build: Linux-Build:
runs-on: ubuntu-latest runs-on: ubuntu-18.04 # build against an older glibc for compatibility
needs: Lint needs: Lint
steps: steps:
@@ -139,9 +139,9 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- name: Install Node - name: Install Node
uses: actions/setup-node@v2.4.0 uses: actions/setup-node@v2.5.0
with: with:
node-version: 14 node-version: 16
- name: Install deps - name: Install deps
run: | run: |
@@ -153,7 +153,6 @@ jobs:
cd .. cd ..
rm app/node_modules/.yarn-integrity rm app/node_modules/.yarn-integrity
yarn yarn
npm run patch
- name: Build native deps - name: Build native deps
run: scripts/build-native.js run: scripts/build-native.js
@@ -244,7 +243,7 @@ jobs:
path: artifact-web path: artifact-web
Windows-Build: Windows-Build:
runs-on: windows-2016 runs-on: windows-2022
needs: Lint needs: Lint
steps: steps:
@@ -254,9 +253,14 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- name: Installing Node - name: Installing Node
uses: actions/setup-node@v2.4.0 uses: actions/setup-node@v2.5.0
with: with:
node-version: 14 node-version: 16
- name: Update node-gyp
run: |
npm install --global node-gyp@8.4.1
npm prefix -g | % {npm config set node_gyp "$_\node_modules\node-gyp\bin\node-gyp.js"}
- name: Build - name: Build
shell: powershell shell: powershell
@@ -274,7 +278,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
WIN_CSC_LINK: ${{ secrets.WIN_CSC_LINK }} WIN_CSC_LINK: ${{ secrets.WIN_CSC_LINK }}
WIN_CSC_KEY_PASSWORD: ${{ secrets.WIN_CSC_KEY_PASSWORD }} WIN_CSC_KEY_PASSWORD: ${{ secrets.WIN_CSC_KEY_PASSWORD }}
# DEBUG: electron-builder,electron-builder:* DEBUG: electron-builder,electron-builder:*
- name: Build packages without signing - name: Build packages without signing
run: node scripts/build-windows.js run: node scripts/build-windows.js

View File

@@ -12,7 +12,7 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- name: Installing Node - name: Installing Node
uses: actions/setup-node@v2.4.0 uses: actions/setup-node@v2.5.0
with: with:
node-version: 14 node-version: 14

View File

@@ -2,7 +2,7 @@
<p align="center"> <p align="center">
<a href="https://github.com/Eugeny/tabby/releases/latest"><img alt="GitHub All Releases" src="https://img.shields.io/github/downloads/eugeny/tabby/total.svg?label=DOWNLOADS&logo=github&style=for-the-badge"></a> &nbsp; <a href="https://nightly.link/Eugeny/tabby/workflows/build/master"><img src="https://shields.io/badge/-Nightly%20Builds-orange?logo=hackthebox&logoColor=fff&style=for-the-badge"/></a> &nbsp; <a href="https://matrix.to/#/#tabby-general:matrix.org"><img alt="Matrix" src="https://img.shields.io/matrix/tabby-general:matrix.org?logo=matrix&style=for-the-badge&color=magenta"></a> <a href="https://github.com/Eugeny/tabby/releases/latest"><img alt="GitHub All Releases" src="https://img.shields.io/github/downloads/eugeny/tabby/total.svg?label=DOWNLOADS&logo=github&style=for-the-badge"></a> &nbsp; <a href="https://nightly.link/Eugeny/tabby/workflows/build/master"><img src="https://shields.io/badge/-Nightly%20Builds-orange?logo=hackthebox&logoColor=fff&style=for-the-badge"/></a> &nbsp; <a href="https://matrix.to/#/#tabby-general:matrix.org"><img alt="Matrix" src="https://img.shields.io/matrix/tabby-general:matrix.org?logo=matrix&style=for-the-badge&color=magenta"></a> &nbsp; <a href="https://twitter.com/eugeeeeny"><img alt="Twitter" src="https://shields.io/badge/Subscribe-News-blue?logo=twitter&style=for-the-badge&color=blue"></a>
</p> </p>
<p align="center"> <p align="center">
@@ -216,6 +216,8 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
<td align="center"><a href="https://github.com/Me1onRind"><img src="https://avatars.githubusercontent.com/u/19531270?v=4?s=100" width="100px;" alt=""/><br /><sub><b>zZ</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Me1onRind" title="Code">💻</a></td> <td align="center"><a href="https://github.com/Me1onRind"><img src="https://avatars.githubusercontent.com/u/19531270?v=4?s=100" width="100px;" alt=""/><br /><sub><b>zZ</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Me1onRind" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/tainoNZ"><img src="https://avatars.githubusercontent.com/u/49261322?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Aaron Davison</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=tainoNZ" title="Code">💻</a></td> <td align="center"><a href="https://github.com/tainoNZ"><img src="https://avatars.githubusercontent.com/u/49261322?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Aaron Davison</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=tainoNZ" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/composer404"><img src="https://avatars.githubusercontent.com/u/58251560?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Przemyslaw Kozik</b></sub></a><br /><a href="#design-composer404" title="Design">🎨</a></td> <td align="center"><a href="https://github.com/composer404"><img src="https://avatars.githubusercontent.com/u/58251560?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Przemyslaw Kozik</b></sub></a><br /><a href="#design-composer404" title="Design">🎨</a></td>
<td align="center"><a href="https://github.com/highfredo"><img src="https://avatars.githubusercontent.com/u/5951524?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alfredo Arellano de la Fuente</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=highfredo" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/NessunKim"><img src="https://avatars.githubusercontent.com/u/12974079?v=4?s=100" width="100px;" alt=""/><br /><sub><b>MH Kim</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=NessunKim" title="Code">💻</a></td>
</tr> </tr>
</table> </table>

View File

@@ -1,5 +1,5 @@
import { app, ipcMain, Menu, Tray, shell, screen, globalShortcut, MenuItemConstructorOptions } from 'electron' import { app, ipcMain, Menu, Tray, shell, screen, globalShortcut, MenuItemConstructorOptions } from 'electron'
import * as promiseIpc from 'electron-promise-ipc' import promiseIpc from 'electron-promise-ipc'
import * as remote from '@electron/remote/main' import * as remote from '@electron/remote/main'
import { exec } from 'mz/child_process' import { exec } from 'mz/child_process'
import * as path from 'path' import * as path from 'path'
@@ -82,7 +82,6 @@ export class Application {
app.commandLine.appendSwitch('disable-http-cache') app.commandLine.appendSwitch('disable-http-cache')
app.commandLine.appendSwitch('max-active-webgl-contexts', '9000') app.commandLine.appendSwitch('max-active-webgl-contexts', '9000')
app.commandLine.appendSwitch('lang', 'EN') app.commandLine.appendSwitch('lang', 'EN')
app.allowRendererProcessReuse = false
for (const flag of configData.flags || [['force_discrete_gpu', '0']]) { for (const flag of configData.flags || [['force_discrete_gpu', '0']]) {
app.commandLine.appendSwitch(flag[0], flag[1]) app.commandLine.appendSwitch(flag[0], flag[1])

View File

@@ -25,7 +25,7 @@ export function parseArgs (argv: string[], cwd: string): any {
type: 'string', type: 'string',
}) })
}) })
.version('version', '', app.getVersion()) .version(app.getVersion())
.option('debug', { .option('debug', {
alias: 'd', alias: 'd',
describe: 'Show DevTools on start', describe: 'Show DevTools on start',
@@ -35,11 +35,6 @@ export function parseArgs (argv: string[], cwd: string): any {
describe: 'Start minimized', describe: 'Start minimized',
type: 'boolean', type: 'boolean',
}) })
.option('version', {
alias: 'v',
describe: 'Show version and exit',
type: 'boolean',
})
.help('help') .help('help')
.parse() .parse()
} }

View File

@@ -1,4 +1,4 @@
import * as LRU from 'lru-cache' import LRU from 'lru-cache'
import * as fs from 'fs' import * as fs from 'fs'
const lru = new LRU({ max: 256, maxAge: 250 }) const lru = new LRU({ max: 256, maxAge: 250 })
const origLstat = fs.realpathSync.bind(fs) const origLstat = fs.realpathSync.bind(fs)

View File

@@ -90,6 +90,7 @@ class PTYDataQueue {
export class PTY { export class PTY {
private pty: nodePTY.IPty private pty: nodePTY.IPty
private outputQueue: PTYDataQueue private outputQueue: PTYDataQueue
exited = false
constructor (private id: string, private app: Application, ...args: any[]) { constructor (private id: string, private app: Application, ...args: any[]) {
this.pty = (nodePTY as any).spawn(...args) this.pty = (nodePTY as any).spawn(...args)
@@ -101,7 +102,10 @@ export class PTY {
setImmediate(() => this.emit('data', data)) setImmediate(() => this.emit('data', data))
}) })
this.pty.on('data', data => this.outputQueue.push(Buffer.from(data))) this.pty.onData(data => this.outputQueue.push(Buffer.from(data)))
this.pty.onExit(() => {
this.exited = true
})
} }
getPID (): number { getPID (): number {
@@ -144,7 +148,7 @@ export class PTYManager {
}) })
ipcMain.on('pty:exists', (event, id) => { ipcMain.on('pty:exists', (event, id) => {
event.returnValue = !!this.ptys[id] event.returnValue = this.ptys[id] && !this.ptys[id].exited
}) })
ipcMain.on('pty:get-pid', (event, id) => { ipcMain.on('pty:get-pid', (event, id) => {

View File

@@ -3,10 +3,11 @@ import * as glasstron from 'glasstron'
import { Subject, Observable, debounceTime } from 'rxjs' import { Subject, Observable, debounceTime } from 'rxjs'
import { BrowserWindow, app, ipcMain, Rectangle, Menu, screen, BrowserWindowConstructorOptions, TouchBar, nativeImage } from 'electron' import { BrowserWindow, app, ipcMain, Rectangle, Menu, screen, BrowserWindowConstructorOptions, TouchBar, nativeImage } from 'electron'
import ElectronConfig = require('electron-config') import ElectronConfig = require('electron-config')
import { enable as enableRemote } from '@electron/remote/main'
import * as os from 'os' import * as os from 'os'
import * as path from 'path' import * as path from 'path'
import macOSRelease from 'macos-release' import macOSRelease from 'macos-release'
import * as compareVersions from 'compare-versions' import { compare as compareVersions } from 'compare-versions'
import type { Application } from './app' import type { Application } from './app'
import { parseArgs } from './cli' import { parseArgs } from './cli'
@@ -14,7 +15,7 @@ import { loadConfig } from './config'
let DwmEnableBlurBehindWindow: any = null let DwmEnableBlurBehindWindow: any = null
if (process.platform === 'win32') { if (process.platform === 'win32') {
DwmEnableBlurBehindWindow = require('windows-blurbehind').DwmEnableBlurBehindWindow DwmEnableBlurBehindWindow = require('@tabby-gang/windows-blurbehind').DwmEnableBlurBehindWindow
} }
export interface WindowOptions { export interface WindowOptions {
@@ -26,7 +27,7 @@ abstract class GlasstronWindow extends BrowserWindow {
abstract setBlur (_: boolean) abstract setBlur (_: boolean)
} }
const macOSVibrancyType = process.platform === 'darwin' ? compareVersions.compare(macOSRelease().version, '10.14', '>=') ? 'fullscreen-ui' : 'dark' : null const macOSVibrancyType = process.platform === 'darwin' ? compareVersions(macOSRelease().version, '10.14', '>=') ? 'fullscreen-ui' : 'dark' : null
const activityIcon = nativeImage.createFromPath(`${app.getAppPath()}/assets/activity.png`) const activityIcon = nativeImage.createFromPath(`${app.getAppPath()}/assets/activity.png`)
@@ -65,7 +66,6 @@ export class Window {
nodeIntegration: true, nodeIntegration: true,
preload: path.join(__dirname, 'sentry.js'), preload: path.join(__dirname, 'sentry.js'),
backgroundThrottling: false, backgroundThrottling: false,
enableRemoteModule: true,
contextIsolation: false, contextIsolation: false,
}, },
maximizable: true, maximizable: true,
@@ -126,6 +126,8 @@ export class Window {
} }
}) })
enableRemote(this.window.webContents)
this.window.loadURL(`file://${app.getAppPath()}/dist/index.html`, { extraHeaders: 'pragma: no-cache\n' }) this.window.loadURL(`file://${app.getAppPath()}/dist/index.html`, { extraHeaders: 'pragma: no-cache\n' })
this.window.webContents.setVisualZoomLevelLimits(1, 1) this.window.webContents.setVisualZoomLevelLimits(1, 1)

View File

@@ -15,13 +15,13 @@
}, },
"dependencies": { "dependencies": {
"@angular/cdk": "^12.2.9", "@angular/cdk": "^12.2.9",
"@electron/remote": "1.2.0", "@electron/remote": "2.0.1",
"@tabby-gang/node-pty": "^0.11.0-beta.200", "@tabby-gang/node-pty": "^0.11.0-beta.200",
"any-promise": "^1.3.0", "any-promise": "^1.3.0",
"electron-config": "2.0.0", "electron-config": "2.0.0",
"electron-debug": "^3.2.0", "electron-debug": "^3.2.0",
"electron-promise-ipc": "^2.2.4", "electron-promise-ipc": "^2.2.4",
"electron-updater": "^4.3.9", "electron-updater": "^4.6.1",
"fontmanager-redux": "1.1.0", "fontmanager-redux": "1.1.0",
"glasstron": "0.0.7", "glasstron": "0.0.7",
"js-yaml": "4.1.0", "js-yaml": "4.1.0",
@@ -35,17 +35,16 @@
"yargs": "^17.2.1" "yargs": "^17.2.1"
}, },
"optionalDependencies": { "optionalDependencies": {
"@tabby-gang/windows-blurbehind": "^3.0.0",
"macos-native-processlist": "^2.0.0", "macos-native-processlist": "^2.0.0",
"serialport": "^9.2.5", "serialport": "^10.0.0",
"windows-blurbehind": "^1.0.1",
"windows-native-registry": "^3.1.0", "windows-native-registry": "^3.1.0",
"windows-process-tree": "^0.3.2" "windows-process-tree": "^0.3.2"
}, },
"devDependencies": { "devDependencies": {
"@types/mz": "2.7.4", "@types/mz": "2.7.4",
"@types/node": "16.0.1", "@types/node": "16.0.1",
"ngx-filesize": "^2.0.16", "ngx-filesize": "^2.0.16"
"node-abi": "^3.3.0"
}, },
"peerDependencies": { "peerDependencies": {
"tabby-community-color-schemes": "*", "tabby-community-color-schemes": "*",

View File

@@ -2,6 +2,7 @@ body {
min-height: 100vh; min-height: 100vh;
overflow: hidden; overflow: hidden;
background: #1D272D; background: #1D272D;
-webkit-font-smoothing: antialiased;
} }
.modal-dialog, .modal-backdrop, .no-drag { .modal-dialog, .modal-backdrop, .no-drag {

View File

@@ -0,0 +1,6 @@
export const PLUGIN_BLACKLIST = [
'terminus-shell-selector', // superseded by profiles
'terminus-scrollbar', // now useless
'terminus-clickable-links', // now bundled with Tabby
'tabby-clickable-links', // now bundled with Tabby
]

View File

@@ -2,6 +2,7 @@ import * as fs from 'mz/fs'
import * as path from 'path' import * as path from 'path'
import * as remote from '@electron/remote' import * as remote from '@electron/remote'
import { PluginInfo } from '../../tabby-core/src/api/mainProcess' import { PluginInfo } from '../../tabby-core/src/api/mainProcess'
import { PLUGIN_BLACKLIST } from './pluginBlacklist'
const nodeModule = require('module') // eslint-disable-line @typescript-eslint/no-var-requires const nodeModule = require('module') // eslint-disable-line @typescript-eslint/no-var-requires
@@ -109,7 +110,7 @@ export async function findPlugins (): Promise<PluginInfo[]> {
}) })
} }
for (const packageName of pluginNames) { for (const packageName of pluginNames) {
if (packageName.startsWith(PREFIX) || packageName.startsWith(LEGACY_PREFIX)) { if ((packageName.startsWith(PREFIX) || packageName.startsWith(LEGACY_PREFIX)) && !PLUGIN_BLACKLIST.includes(packageName)) {
candidateLocations.push({ pluginDir, packageName }) candidateLocations.push({ pluginDir, packageName })
} }
} }

View File

@@ -6,6 +6,7 @@
"declaration": false, "declaration": false,
"noImplicitAny": false, "noImplicitAny": false,
"removeComments": false, "removeComments": false,
"esModuleInterop": true,
"emitDecoratorMetadata": true, "emitDecoratorMetadata": true,
"experimentalDecorators": true, "experimentalDecorators": true,
"sourceMap": true, "sourceMap": true,

View File

@@ -3,11 +3,13 @@
"baseUrl": "./lib", "baseUrl": "./lib",
"module": "commonjs", "module": "commonjs",
"target": "es2017", "target": "es2017",
"moduleResolution": "node",
"declaration": false, "declaration": false,
"noImplicitAny": false, "noImplicitAny": false,
"removeComments": false, "removeComments": false,
"emitDecoratorMetadata": true, "emitDecoratorMetadata": true,
"experimentalDecorators": true, "experimentalDecorators": true,
"esModuleInterop": true,
"sourceMap": true, "sourceMap": true,
"noUnusedParameters": true, "noUnusedParameters": true,
"noImplicitReturns": true, "noImplicitReturns": true,

View File

@@ -51,7 +51,7 @@ module.exports = {
'source-map-support': 'commonjs source-map-support', 'source-map-support': 'commonjs source-map-support',
'windows-swca': 'commonjs windows-swca', 'windows-swca': 'commonjs windows-swca',
'windows-native-registry': 'commonjs windows-native-registry', 'windows-native-registry': 'commonjs windows-native-registry',
'windows-blurbehind': 'commonjs windows-blurbehind', '@tabby-gang/windows-blurbehind': 'commonjs @tabby-gang/windows-blurbehind',
'yargs/yargs': 'commonjs yargs/yargs', 'yargs/yargs': 'commonjs yargs/yargs',
}, },
plugins: [ plugins: [

View File

@@ -11,10 +11,10 @@
optionalDependencies: optionalDependencies:
parse5 "^5.0.0" parse5 "^5.0.0"
"@electron/remote@1.2.0": "@electron/remote@2.0.1":
version "1.2.0" version "2.0.1"
resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-1.2.0.tgz#772eb4c3ac17aaba5a9cf05a09092f6277f5671f" resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-2.0.1.tgz#810cbc595a21f0f94641eb2d7e8264063a3f84de"
integrity sha512-C774t2DFVJsa+dxU9Gc2nYzylRZoJ79I0Sxrh8T9cN69fBkntfGbyBEQiD9UfZopqL0CYLzk1anY2Ywhql6h1w== integrity sha512-bGX4/yB2bPZwXm1DsxgoABgH0Cz7oFtXJgkerB8VrStYdTyvhGAULzNLRn9rVmeAuC3VUDXaXpZIlZAZHpsLIA==
"@iarna/cli@^1.2.0": "@iarna/cli@^1.2.0":
version "1.2.0" version "1.2.0"
@@ -25,74 +25,74 @@
update-notifier "^2.2.0" update-notifier "^2.2.0"
yargs "^8.0.2" yargs "^8.0.2"
"@serialport/binding-abstract@9.2.3": "@serialport/binding-abstract@10.0.0":
version "9.2.3" version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/binding-abstract/-/binding-abstract-9.2.3.tgz#e7dd273357b6a698af7ad58db6f57f62443a0acb" resolved "https://registry.yarnpkg.com/@serialport/binding-abstract/-/binding-abstract-10.0.0.tgz#c5aea29de3721de80640e290f52217d00d927e4e"
integrity sha512-cQs9tbIlG3P0IrOWyVirqlhWuJ7Ms2Zh9m2108z6Y5UW/iVj6wEOiW8EmK9QX9jmJXYllE7wgGgvVozP5oCj3w== integrity sha512-1IwOMDOWqKO0csrTOv95Ah0Av012DZB8C0OF11SmE3eyh8ab1+y4/Yah/8byMAMG7TXw+2LqkNs1oZtOJGlY1Q==
dependencies: dependencies:
debug "^4.3.2" debug "^4.3.2"
"@serialport/binding-mock@9.2.4": "@serialport/binding-mock@10.0.0":
version "9.2.4" version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/binding-mock/-/binding-mock-9.2.4.tgz#8adf34742abcee80919e19f1266423ce1c9407e2" resolved "https://registry.yarnpkg.com/@serialport/binding-mock/-/binding-mock-10.0.0.tgz#dc850c3e06f2be4b0c5e0461d2e12a2506cca573"
integrity sha512-dpEhACCs44oQhh6ajJfJdvQdK38Vq0N4W6iD/gdplglDCK7qXRQCMUjJIeKdS/HSEiWkC3bwumUhUufdsOyT4g== integrity sha512-X+lJqU/GbXxxqA4b3T+YK9vQLtoNSjRF+hz1gyYHpNxDFX0dSLU1OVnQUZ2Zi8aa6IBdk/4DcuGN0tDNAlmtKg==
dependencies: dependencies:
"@serialport/binding-abstract" "9.2.3" "@serialport/binding-abstract" "10.0.0"
debug "^4.3.2" debug "^4.3.2"
"@serialport/bindings@9.2.5": "@serialport/bindings@10.0.0":
version "9.2.5" version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/bindings/-/bindings-9.2.5.tgz#d49f6e74d780340558c4dc33546a190befd5476b" resolved "https://registry.yarnpkg.com/@serialport/bindings/-/bindings-10.0.0.tgz#718b105adae977886967ab0edc68a067be9183f8"
integrity sha512-fyabNg56gWbOMuYJc5c45z94sANC/WzTnGeML7Nr1IYVk0SJ1uksN4ETI8Nea9ZAtr4DhNiIMQ3/IOkyof6Tqg== integrity sha512-t415A6clhsUX0dBRzN0NRN7Yb6y9U1jA4oGzxL2fWCy7XxQq8beI0GnMebEUaZDWKZ7IAVwGnAPUunk7QdlWlA==
dependencies: dependencies:
"@serialport/binding-abstract" "9.2.3" "@serialport/binding-abstract" "10.0.0"
"@serialport/parser-readline" "9.2.4" "@serialport/parser-readline" "10.0.0"
bindings "^1.5.0" bindings "^1.5.0"
debug "^4.3.2" debug "^4.3.2"
nan "^2.15.0" node-addon-api "4.2.0"
prebuild-install "^6.1.4" prebuild-install "^7.0.0"
"@serialport/parser-byte-length@9.2.4": "@serialport/parser-byte-length@10.0.0":
version "9.2.4" version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-byte-length/-/parser-byte-length-9.2.4.tgz#cccdf3a95018d838cee9e7aa86ab3b5ad9e6c00f" resolved "https://registry.yarnpkg.com/@serialport/parser-byte-length/-/parser-byte-length-10.0.0.tgz#05ca2721a50dcdc93f68f3f1e72e10fd82362e84"
integrity sha512-sQD/iw4ZMU3xW9PLi0/GlvU6Y623jGeWecbMkO7izUo/6P7gtfv1c9ikd5h0kwL8AoAOpQA1lxdHIKox+umBUg== integrity sha512-QmZw7oTt6LBHBFbMIPLIZM4WuXpMeK5EpCpXKFtw4a7+yF0yLPwz6uSV2Cf3SvunCfI3eWvucMKpgYNOvglsgA==
"@serialport/parser-cctalk@9.2.4": "@serialport/parser-cctalk@10.0.0":
version "9.2.4" version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-cctalk/-/parser-cctalk-9.2.4.tgz#441533e6afc789e8cc5a017697632217bb33a861" resolved "https://registry.yarnpkg.com/@serialport/parser-cctalk/-/parser-cctalk-10.0.0.tgz#de42e6952c086da3e384756502f9aaca0e97f881"
integrity sha512-T4TU5vQMwmo9AB3gQLFDWbfJXlW5jd9guEsB/nqKjFHTv0FXPdZ7DQ2TpSp8RnHWxU3GX6kYTaDO20BKzc8GPQ== integrity sha512-jCxzY2IPghNMaJ+GsUgSOoPCI2v1FZg7RvpSJ/b/igK+M/z/p7oRyWf1LqMyjZT7rP4Ha8ZfsQQy5qGzQ3kuzw==
"@serialport/parser-delimiter@9.2.4": "@serialport/parser-delimiter@10.0.0":
version "9.2.4" version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-delimiter/-/parser-delimiter-9.2.4.tgz#7906162ab5601b52abe7bb011678248f0b50f6c0" resolved "https://registry.yarnpkg.com/@serialport/parser-delimiter/-/parser-delimiter-10.0.0.tgz#43eb2e3b4c4cf8633eb1200b3af5488ba9a7ecb6"
integrity sha512-4nvTAoYAgkxFiXrkI+3CA49Yd43CODjeszh89EK+I9c8wOZ+etZduRCzINYPiy26g7zO+GRAb9FoPCsY+sYcbQ== integrity sha512-s7j+RIxxmyb7xJ3WVcf+IfjFqyoh7k7Edqwqvk2sQLU6UOBNAktNQDHIM/vksQ9QkjJjvl8rIo0YznfBkWbZOQ==
"@serialport/parser-inter-byte-timeout@9.2.4": "@serialport/parser-inter-byte-timeout@10.0.0":
version "9.2.4" version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-9.2.4.tgz#0ffb7f1449636f6363e894127d1f819b38e91c3c" resolved "https://registry.yarnpkg.com/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-10.0.0.tgz#07fe7c42e77c9a6379daa6939de55fef99c06ce4"
integrity sha512-SOAdvr0oBQIOCXX198hiTlxs4JTKg9j5piapw5tNq52fwDOWdbYrFneT/wN04UTMKaDrJuEvXq6T4rv4j7nJ5A== integrity sha512-ygax3PHuPxi58D3/crCDENSFagvG5EsWjXj6AQRUisExPAAiD02RbZaRqTZluFvDbzMJ/29YJdcdIqnllzGVsw==
"@serialport/parser-readline@9.2.4": "@serialport/parser-readline@10.0.0":
version "9.2.4" version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-readline/-/parser-readline-9.2.4.tgz#15a4ec7e86ddc33ac84faac7bffd4560e4544ccb" resolved "https://registry.yarnpkg.com/@serialport/parser-readline/-/parser-readline-10.0.0.tgz#a87b0d92864e917e07010477057b66efe92d3af9"
integrity sha512-Z1/qrZTQUVhNSJP1hd9YfDvq0o7d87rNwAjjRKbVpa7Qi51tG5BnKt43IV3NFMyBlVcRe0rnIb3tJu57E0SOwg== integrity sha512-NI3oRY1+fLg94CZm887rgj4V6KyxaJmbmoRgua9bqRv7v/o0SqN9lSQwdYLHQVHpf03zTX9ziuoCV8w5CI3DQQ==
dependencies: dependencies:
"@serialport/parser-delimiter" "9.2.4" "@serialport/parser-delimiter" "10.0.0"
"@serialport/parser-ready@9.2.4": "@serialport/parser-ready@10.0.0":
version "9.2.4" version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-ready/-/parser-ready-9.2.4.tgz#e1fc93b9e3057972104db3f9311263397f420f25" resolved "https://registry.yarnpkg.com/@serialport/parser-ready/-/parser-ready-10.0.0.tgz#eae67e9c0806f5b2d9750c1ef910a3cedb549119"
integrity sha512-Pyi94Itjl6qAURwIZr/gmZpMAyTmKXThm6vL5DoAWGQjcRHWB0gwv2TY2v7N+mQLJYUKU3cMnvnATXxHm7xjxw== integrity sha512-pmMjRVy0wwVSzRt27AtMV/FJdSL6CdKvLUNx+ziDL9Lt30n85ZzrSdYJOwOB63HVIMg8+JRgiyxKNLs+JgMK2g==
"@serialport/parser-regex@9.2.4": "@serialport/parser-regex@10.0.0":
version "9.2.4" version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-regex/-/parser-regex-9.2.4.tgz#e232a84e00f3e8c366fc65ce20f8f4ac14960448" resolved "https://registry.yarnpkg.com/@serialport/parser-regex/-/parser-regex-10.0.0.tgz#a5dd648baf0952253a995bf0174ba2c19649e279"
integrity sha512-sI/cVvPOYz+Dbv4ZdnW16qAwvXiFf/1pGASQdbveRTlgJDdz7sRNlCBifzfTN2xljwvCTZYqiudKvDdC1TepRQ== integrity sha512-kLvK6bbDtpnVMagCK95m08W+XaXXzJpDvjzrMNSAtpaL+yeBu4XlEhHpt9+9S/MOetbz4vgWdZx2buYyw9iiGQ==
"@serialport/stream@9.2.4": "@serialport/stream@10.0.0":
version "9.2.4" version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/stream/-/stream-9.2.4.tgz#9fce093d0b46ed4599953b4fae81718e050d2b33" resolved "https://registry.yarnpkg.com/@serialport/stream/-/stream-10.0.0.tgz#482580b9bdad468ac2a60c41c7fb933f7dc7436f"
integrity sha512-bLye8Ub4vUFQGmkh8qEqehr7SE7EJs2yDs0h9jzuL5oKi+F34CFmWkEErO8GAOQ8YNn7p6b3GxUgs+0BrHHDZQ== integrity sha512-KFBGWH6BEn4gXUYHEfbywplDX+sVhlL/Yzn/r7hn+qYnwVjhvQo8Vi35CPKESOUKnMKU48sGSUvNaOwU5znw2g==
dependencies: dependencies:
debug "^4.3.2" debug "^4.3.2"
@@ -103,6 +103,13 @@
dependencies: dependencies:
nan "^2.14.0" nan "^2.14.0"
"@tabby-gang/windows-blurbehind@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@tabby-gang/windows-blurbehind/-/windows-blurbehind-3.0.0.tgz#48d409c2eb14a12c867b70de5ee4d6769ef45e8f"
integrity sha512-ah6eJcoQZWOZfu9sd2pWlOJmfl1v+2EZQMeIp7MWvg+/16WS16UFNdnOtlV6AUiABHfZo2QKfCNUEuorCM+Q2A==
dependencies:
"@types/node" "^10.12.18"
"@types/mz@2.7.4": "@types/mz@2.7.4":
version "2.7.4" version "2.7.4"
resolved "https://registry.yarnpkg.com/@types/mz/-/mz-2.7.4.tgz#f9d1535cb5171199b28ae6abd6ec29e856551401" resolved "https://registry.yarnpkg.com/@types/mz/-/mz-2.7.4.tgz#f9d1535cb5171199b28ae6abd6ec29e856551401"
@@ -115,10 +122,15 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.0.1.tgz#70cedfda26af7a2ca073fdcc9beb2fff4aa693f8" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.0.1.tgz#70cedfda26af7a2ca073fdcc9beb2fff4aa693f8"
integrity sha512-hBOx4SUlEPKwRi6PrXuTGw1z6lz0fjsibcWCM378YxsSu/6+C30L6CR49zIBKHiwNWCYIcOLjg4OHKZaFeLAug== integrity sha512-hBOx4SUlEPKwRi6PrXuTGw1z6lz0fjsibcWCM378YxsSu/6+C30L6CR49zIBKHiwNWCYIcOLjg4OHKZaFeLAug==
"@types/semver@^7.3.5": "@types/node@^10.12.18":
version "7.3.8" version "10.17.60"
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.8.tgz#508a27995498d7586dcecd77c25e289bfaf90c59" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b"
integrity sha512-D/2EJvAlCEtYFEYmmlGwbGXuK886HzyCc3nZX/tkFTQdEU8jZDAgiv08P162yB17y4ZXZoq7yFAnW4GDBb9Now== integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==
"@types/semver@^7.3.6":
version "7.3.9"
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.9.tgz#152c6c20a7688c30b967ec1841d31ace569863fc"
integrity sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==
JSONStream@^1.3.4, JSONStream@^1.3.5: JSONStream@^1.3.4, JSONStream@^1.3.5:
version "1.3.5" version "1.3.5"
@@ -364,10 +376,10 @@ buffer@^5.5.0:
base64-js "^1.3.1" base64-js "^1.3.1"
ieee754 "^1.1.13" ieee754 "^1.1.13"
builder-util-runtime@8.7.5: builder-util-runtime@8.9.1:
version "8.7.5" version "8.9.1"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.5.tgz#fbe59e274818885e0d2e358d5b7017c34ae6b0f5" resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.9.1.tgz#25f066b3fbc20b3e6236a9b956b1ebb0e33ff66a"
integrity sha512-fgUFHKtMNjdvH6PDRFntdIGUPgwZ69sXsAqEulCtoiqgWes5agrMq/Ud274zjJRTbckYh2PHh8/1CpFc6dpsbQ== integrity sha512-c8a8J3wK6BIVLW7ls+7TRK9igspTbzWmUqxFbgK0m40Ggm6efUbxtWVCGIjc+dtchyr5qAMAUL6iEGRdS/6vwg==
dependencies: dependencies:
debug "^4.3.2" debug "^4.3.2"
sax "^1.2.4" sax "^1.2.4"
@@ -728,6 +740,13 @@ decompress-response@^4.2.0:
dependencies: dependencies:
mimic-response "^2.0.0" mimic-response "^2.0.0"
decompress-response@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
dependencies:
mimic-response "^3.1.0"
deep-extend@^0.6.0: deep-extend@^0.6.0:
version "0.6.0" version "0.6.0"
resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz"
@@ -865,16 +884,16 @@ electron-promise-ipc@^2.2.4:
serialize-error "^5.0.0" serialize-error "^5.0.0"
uuid "^3.0.1" uuid "^3.0.1"
electron-updater@^4.3.9: electron-updater@^4.6.1:
version "4.3.9" version "4.6.1"
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-4.3.9.tgz#247c660bafad7c07935e1b81acd3e9a5fd733154" resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-4.6.1.tgz#80ca805c4f51b2e682aac29d18fed75d6a533d32"
integrity sha512-LCNfedSwZfS4Hza+pDyPR05LqHtGorCStaBgVpRnfKxOlZcvpYEX0AbMeH5XUtbtGRoH2V8osbbf2qKPNb7AsA== integrity sha512-YsU1mHqXLrXXmBMsxhxy24PrbaB8rnpZDPmFa2gOkTYk/Ch13+R0fjsRSpPYvqtskVVY0ux8fu+HnUkVkqc7og==
dependencies: dependencies:
"@types/semver" "^7.3.5" "@types/semver" "^7.3.6"
builder-util-runtime "8.7.5" builder-util-runtime "8.9.1"
fs-extra "^10.0.0" fs-extra "^10.0.0"
js-yaml "^4.1.0" js-yaml "^4.1.0"
lazy-val "^1.0.4" lazy-val "^1.0.5"
lodash.escaperegexp "^4.1.2" lodash.escaperegexp "^4.1.2"
lodash.isequal "^4.5.0" lodash.isequal "^4.5.0"
semver "^7.3.5" semver "^7.3.5"
@@ -1682,7 +1701,7 @@ lazy-property@~1.0.0:
resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147"
integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc= integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc=
lazy-val@^1.0.4: lazy-val@^1.0.5:
version "1.0.5" version "1.0.5"
resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d" resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d"
integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q== integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==
@@ -2010,6 +2029,11 @@ mimic-response@^2.0.0:
resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz" resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz"
integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==
mimic-response@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
minimatch@^3.0.4: minimatch@^3.0.4:
version "3.0.4" version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz"
@@ -2111,11 +2135,6 @@ nan@^2.13.2, nan@^2.14.0:
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
nan@^2.15.0:
version "2.15.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee"
integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==
napi-build-utils@^1.0.1: napi-build-utils@^1.0.1:
version "1.0.2" version "1.0.2"
resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz"
@@ -2136,7 +2155,7 @@ ngx-filesize@^2.0.16:
filesize ">= 4.0.0" filesize ">= 4.0.0"
tslib "^2.0.0" tslib "^2.0.0"
node-abi@^2.20.0, node-abi@^2.21.0, node-abi@^2.7.0: node-abi@^2.20.0, node-abi@^2.7.0:
version "2.30.1" version "2.30.1"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf"
integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w== integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==
@@ -2144,9 +2163,9 @@ node-abi@^2.20.0, node-abi@^2.21.0, node-abi@^2.7.0:
semver "^5.4.1" semver "^5.4.1"
node-abi@^3.3.0: node-abi@^3.3.0:
version "3.3.0" version "3.5.0"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.3.0.tgz#62cc0d9c7976bd415889aba622ab8f5562082028" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.5.0.tgz#26e8b7b251c3260a5ac5ba5aef3b4345a0229248"
integrity sha512-/+2sCVPXmj07GY/l0ggRr7+trqzX7F9d4QVfSArqIVYmRzc/LkXKr5FlRO6U8uZ/gVVclDDaBxBNITj1z1Z/Zw== integrity sha512-LtHvNIBgOy5mO8mPEUtkCW/YCRWYEKshIvqhe1GHHyXEHEB5mgICyYnAcl4qan3uFeRROErKGzatFHPf6kDxWw==
dependencies: dependencies:
semver "^7.3.5" semver "^7.3.5"
@@ -2155,6 +2174,11 @@ node-addon-api@3.0.0:
resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.0.tgz" resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.0.tgz"
integrity sha512-sSHCgWfJ+Lui/u+0msF3oyCgvdkhxDbkCS6Q8uiJquzOimkJBvX6hl5aSSA7DR1XbMpdM8r7phjcF63sF4rkKg== integrity sha512-sSHCgWfJ+Lui/u+0msF3oyCgvdkhxDbkCS6Q8uiJquzOimkJBvX6hl5aSSA7DR1XbMpdM8r7phjcF63sF4rkKg==
node-addon-api@4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.2.0.tgz#117cbb5a959dff0992e1c586ae0393573e4d2a87"
integrity sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==
node-addon-api@^3.0.0, node-addon-api@^3.0.2, node-addon-api@^3.1.0: node-addon-api@^3.0.0, node-addon-api@^3.0.2, node-addon-api@^3.1.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz" resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz"
@@ -2731,10 +2755,10 @@ prebuild-install@^6.0.0:
tunnel-agent "^0.6.0" tunnel-agent "^0.6.0"
which-pm-runs "^1.0.0" which-pm-runs "^1.0.0"
prebuild-install@^6.1.4: prebuild-install@^7.0.0:
version "6.1.4" version "7.0.0"
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-6.1.4.tgz#ae3c0142ad611d58570b89af4986088a4937e00f" resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.0.0.tgz#3c5ce3902f1cb9d6de5ae94ca53575e4af0c1574"
integrity sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ== integrity sha512-IvSenf33K7JcgddNz2D5w521EgO+4aMMjFt73Uk9FRzQ7P+QZPKrp7qPsDydsSwjGt3T5xRNnM1bj1zMTD5fTA==
dependencies: dependencies:
detect-libc "^1.0.3" detect-libc "^1.0.3"
expand-template "^2.0.3" expand-template "^2.0.3"
@@ -2742,11 +2766,11 @@ prebuild-install@^6.1.4:
minimist "^1.2.3" minimist "^1.2.3"
mkdirp-classic "^0.5.3" mkdirp-classic "^0.5.3"
napi-build-utils "^1.0.1" napi-build-utils "^1.0.1"
node-abi "^2.21.0" node-abi "^3.3.0"
npmlog "^4.0.1" npmlog "^4.0.1"
pump "^3.0.0" pump "^3.0.0"
rc "^1.2.7" rc "^1.2.7"
simple-get "^3.0.3" simple-get "^4.0.0"
tar-fs "^2.0.0" tar-fs "^2.0.0"
tunnel-agent "^0.6.0" tunnel-agent "^0.6.0"
@@ -3123,21 +3147,21 @@ serialize-error@^5.0.0:
dependencies: dependencies:
type-fest "^0.8.0" type-fest "^0.8.0"
serialport@^9.2.5: serialport@^10.0.0:
version "9.2.5" version "10.0.0"
resolved "https://registry.yarnpkg.com/serialport/-/serialport-9.2.5.tgz#23e81588336e844e8d7071742a00f501eec9f2b1" resolved "https://registry.yarnpkg.com/serialport/-/serialport-10.0.0.tgz#75ec9fd25683dc1acb9d8e24433608f641b0b9e0"
integrity sha512-nsDsD2GN/43T2a8jQYr1HH76gmDZ575Ts8FOdcBRUY8ecaI16BPbXa612cPPkQjOfg28+KL5qtQL9c0vvTaidg== integrity sha512-fqOs6u4buZLbTpAPYZP4j2qwcOJ5Jxtg0x+llJFuMc4AVwrxx+iQc68/46aHCr+qJ2Wo2N86AZ/DDY5acSOODA==
dependencies: dependencies:
"@serialport/binding-mock" "9.2.4" "@serialport/binding-mock" "10.0.0"
"@serialport/bindings" "9.2.5" "@serialport/bindings" "10.0.0"
"@serialport/parser-byte-length" "9.2.4" "@serialport/parser-byte-length" "10.0.0"
"@serialport/parser-cctalk" "9.2.4" "@serialport/parser-cctalk" "10.0.0"
"@serialport/parser-delimiter" "9.2.4" "@serialport/parser-delimiter" "10.0.0"
"@serialport/parser-inter-byte-timeout" "9.2.4" "@serialport/parser-inter-byte-timeout" "10.0.0"
"@serialport/parser-readline" "9.2.4" "@serialport/parser-readline" "10.0.0"
"@serialport/parser-ready" "9.2.4" "@serialport/parser-ready" "10.0.0"
"@serialport/parser-regex" "9.2.4" "@serialport/parser-regex" "10.0.0"
"@serialport/stream" "9.2.4" "@serialport/stream" "10.0.0"
debug "^4.3.2" debug "^4.3.2"
set-blocking@^2.0.0, set-blocking@~2.0.0: set-blocking@^2.0.0, set-blocking@~2.0.0:
@@ -3183,6 +3207,15 @@ simple-get@^3.0.3:
once "^1.3.1" once "^1.3.1"
simple-concat "^1.0.0" simple-concat "^1.0.0"
simple-get@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.0.tgz#73fa628278d21de83dadd5512d2cc1f4872bd675"
integrity sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==
dependencies:
decompress-response "^6.0.0"
once "^1.3.1"
simple-concat "^1.0.0"
slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: slide@^1.1.6, slide@~1.1.3, slide@~1.1.6:
version "1.1.6" version "1.1.6"
resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
@@ -3720,11 +3753,6 @@ widest-line@^2.0.0:
dependencies: dependencies:
string-width "^2.1.1" string-width "^2.1.1"
windows-blurbehind@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/windows-blurbehind/-/windows-blurbehind-1.0.1.tgz#ff098713873304e38330b2c54cc41bb369b587b9"
integrity sha512-1HzHfCiM1ayrbACJu5qE9zELV24uX/tINT6kxaZwLY3rtQAoeav6x9z7LFHWoLaGDN/sYbnK+9Vk0cz7fsk5HQ==
windows-native-registry@^3.1.0: windows-native-registry@^3.1.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.yarnpkg.com/windows-native-registry/-/windows-native-registry-3.1.0.tgz#909ef3254519fdec57d2f149ac59a2c9dc84419a" resolved "https://registry.yarnpkg.com/windows-native-registry/-/windows-native-registry-3.1.0.tgz#909ef3254519fdec57d2f149ac59a2c9dc84419a"

View File

@@ -25,17 +25,17 @@
"apply-loader": "2.0.0", "apply-loader": "2.0.0",
"axios": "^0.21.1", "axios": "^0.21.1",
"clone-deep": "^4.0.1", "clone-deep": "^4.0.1",
"compare-versions": "^3.6.0", "compare-versions": "^4",
"core-js": "^3.18.2", "core-js": "^3.18.2",
"cross-env": "7.0.3", "cross-env": "7.0.3",
"css-loader": "^6.5.1", "css-loader": "^6.5.1",
"deep-equal": "2.0.5", "deep-equal": "2.0.5",
"electron": "13.5.1", "electron": "16.0.2",
"electron-builder": "^22.11.7", "electron-builder": "^22.14.5",
"electron-download": "^4.1.1", "electron-download": "^4.1.1",
"electron-installer-snap": "^5.1.0", "electron-installer-snap": "^5.1.0",
"electron-notarize": "^1.1.1", "electron-notarize": "^1.1.1",
"electron-rebuild": "^3.2.3", "electron-rebuild": "^3.2.5",
"eslint": "^7.32.0", "eslint": "^7.32.0",
"file-loader": "^6.2.0", "file-loader": "^6.2.0",
"graceful-fs": "^4.2.8", "graceful-fs": "^4.2.8",
@@ -46,7 +46,7 @@
"ngx-sortablejs": "^11.1.0", "ngx-sortablejs": "^11.1.0",
"ngx-toastr": "^14.0.0", "ngx-toastr": "^14.0.0",
"node-abi": "^3.2.0", "node-abi": "^3.2.0",
"node-sass": "^6.0.1", "node-sass": "^7.0.0",
"npmlog": "5.0.1", "npmlog": "5.0.1",
"npx": "^10.2.2", "npx": "^10.2.2",
"patch-package": "^6.4.7", "patch-package": "^6.4.7",
@@ -57,7 +57,7 @@
"pug-static-loader": "2.0.0", "pug-static-loader": "2.0.0",
"raw-loader": "4.0.2", "raw-loader": "4.0.2",
"sass-loader": "^12.3.0", "sass-loader": "^12.3.0",
"shell-quote": "^1.7.2", "shell-quote": "^1.7.3",
"shelljs": "0.8.4", "shelljs": "0.8.4",
"slugify": "^1.6.1", "slugify": "^1.6.1",
"sortablejs": "^1.14.0", "sortablejs": "^1.14.0",
@@ -69,11 +69,11 @@
"svg-inline-loader": "^0.8.2", "svg-inline-loader": "^0.8.2",
"ts-loader": "^9.2.3", "ts-loader": "^9.2.3",
"tslib": "^2.3.1", "tslib": "^2.3.1",
"typedoc": "^0.22.7", "typedoc": "^0.22.10",
"typescript": "^4.3.5", "typescript": "^4.3.5",
"utils-decorators": "^1.10.4", "utils-decorators": "^1.10.4",
"val-loader": "4.0.0", "val-loader": "4.0.0",
"webpack": "^5.61.0", "webpack": "^5.64.4",
"webpack-bundle-analyzer": "^4.5.0", "webpack-bundle-analyzer": "^4.5.0",
"webpack-cli": "^4.9.1", "webpack-cli": "^4.9.1",
"yaml-loader": "0.6.0", "yaml-loader": "0.6.0",
@@ -81,7 +81,7 @@
}, },
"resolutions": { "resolutions": {
"lzma-native": "^8.0.0", "lzma-native": "^8.0.0",
"*/node-abi": "^2.30.0", "*/node-abi": "^3.5.0",
"**/graceful-fs": "^4.2.4" "**/graceful-fs": "^4.2.4"
}, },
"scripts": { "scripts": {
@@ -91,10 +91,9 @@
"start": "cross-env TABBY_DEV=1 electron app --debug --inspect", "start": "cross-env TABBY_DEV=1 electron app --debug --inspect",
"start:prod": "electron app --debug", "start:prod": "electron app --debug",
"prod": "cross-env TABBY_DEV=1 electron app", "prod": "cross-env TABBY_DEV=1 electron app",
"docs": "typedoc --out docs/api --tsconfig tabby-core/tsconfig.typings.json tabby-core/src/index.ts && typedoc --out docs/api/terminal --tsconfig tabby-terminal/tsconfig.typings.json tabby-terminal/src/index.ts && typedoc --out docs/api/local --tsconfig tabby-local/tsconfig.typings.json tabby-local/src/index.ts && typedoc --out docs/api/settings --tsconfig tabby-settings/tsconfig.typings.json tabby-settings/src/index.ts", "docs": "node scripts/build-docs.js",
"lint": "eslint --ext ts */src */lib", "lint": "eslint --ext ts */src */lib",
"postinstall": "node ./scripts/install-deps.js", "postinstall": "patch-package && node ./scripts/install-deps.js"
"patch": "patch-package; cd web; patch-package"
}, },
"private": true "private": true
} }

View File

@@ -1,5 +1,5 @@
diff --git a/node_modules/app-builder-lib/out/appInfo.js b/node_modules/app-builder-lib/out/appInfo.js diff --git a/node_modules/app-builder-lib/out/appInfo.js b/node_modules/app-builder-lib/out/appInfo.js
index f241acc..2bddb7f 100644 index 363f32c..a0434a9 100644
--- a/node_modules/app-builder-lib/out/appInfo.js --- a/node_modules/app-builder-lib/out/appInfo.js
+++ b/node_modules/app-builder-lib/out/appInfo.js +++ b/node_modules/app-builder-lib/out/appInfo.js
@@ -100,9 +100,7 @@ class AppInfo { @@ -100,9 +100,7 @@ class AppInfo {
@@ -12,4 +12,4 @@ index f241acc..2bddb7f 100644
+ return 'tabby-terminal' + return 'tabby-terminal'
} }
get sanitizedName() { get sanitizedName() {
return sanitizeFileName_1.sanitizeFileName(this.name); return filename_1.sanitizeFileName(this.name);

9
scripts/build-docs.js Executable file
View File

@@ -0,0 +1,9 @@
#!/usr/bin/env node
const sh = require('shelljs')
const vars = require('./vars')
const log = require('npmlog')
vars.packagesWithDocs.forEach(([dest, src]) => {
log.info('docs', src)
sh.exec(`yarn typedoc --out docs/api/${dest} --tsconfig ${src}/tsconfig.typings.json ${src}/src/index.ts`)
})

View File

@@ -2,11 +2,12 @@
const sh = require('shelljs') const sh = require('shelljs')
const vars = require('./vars') const vars = require('./vars')
const log = require('npmlog') const log = require('npmlog')
const { execSync } = require('child_process')
vars.allPackages.forEach(plugin => { vars.allPackages.forEach(plugin => {
log.info('bump', plugin) log.info('bump', plugin)
sh.cd(plugin) sh.cd(plugin)
sh.exec('npm --no-git-tag-version version ' + vars.version) sh.exec('npm --no-git-tag-version version ' + vars.version)
sh.exec('npm publish') execSync('npm publish', { stdio: 'inherit' })
sh.cd('..') sh.cd('..')
}) })

View File

@@ -25,6 +25,14 @@ exports.builtinPlugins = [
'tabby-electron', 'tabby-electron',
'tabby-local', 'tabby-local',
'tabby-plugin-manager', 'tabby-plugin-manager',
'tabby-linkifier',
]
exports.packagesWithDocs = [
['.', 'tabby-core'],
['terminal', 'tabby-terminal'],
['local', 'tabby-local'],
['settings', 'tabby-settings'],
] ]
exports.allPackages = [ exports.allPackages = [

View File

@@ -1,6 +1,6 @@
{ {
"name": "tabby-community-color-schemes", "name": "tabby-community-color-schemes",
"version": "1.0.163", "version": "1.0.165-nightly.0",
"description": "Community color schemes for Tabby", "description": "Community color schemes for Tabby",
"keywords": [ "keywords": [
"tabby-builtin-plugin" "tabby-builtin-plugin"

View File

@@ -1,7 +1,13 @@
Tabby Core Plugin # Tabby Core Plugin
--------------------
See also: [Settings plugin API](./settings/), [Terminal plugin API](./terminal/), [Local terminal API](./local/) See also:
* [Settings plugin API](./settings/)
* [Terminal plugin API](./terminal/)
* [Local terminal API](./local/)
* [Linkifier plugin API](./linkifier/)
This module provides:
* tabbed interface services * tabbed interface services
* toolbar UI * toolbar UI

View File

@@ -1,6 +1,6 @@
{ {
"name": "tabby-core", "name": "tabby-core",
"version": "1.0.163", "version": "1.0.165-nightly.0",
"description": "Tabby core", "description": "Tabby core",
"keywords": [ "keywords": [
"tabby-builtin-plugin" "tabby-builtin-plugin"
@@ -19,7 +19,6 @@
"devDependencies": { "devDependencies": {
"bootstrap": "^4.1.3", "bootstrap": "^4.1.3",
"deepmerge": "^4.1.1", "deepmerge": "^4.1.1",
"electron-updater": "^4.0.6",
"js-yaml": "^4.0.0", "js-yaml": "^4.0.0",
"mixpanel": "^0.13.0", "mixpanel": "^0.13.0",
"ngx-filesize": "^2.0.16", "ngx-filesize": "^2.0.16",

View File

@@ -25,7 +25,7 @@ export { DockingService, Screen } from '../services/docking.service'
export { Logger, ConsoleLogger, LogService } from '../services/log.service' export { Logger, ConsoleLogger, LogService } from '../services/log.service'
export { HomeBaseService } from '../services/homeBase.service' export { HomeBaseService } from '../services/homeBase.service'
export { HotkeysService } from '../services/hotkeys.service' export { HotkeysService } from '../services/hotkeys.service'
export { KeyEventData, KeyName, Keystroke } from '../services/hotkeys.util' export { KeyEventData, KeyName, Keystroke, altKeyName, metaKeyName } from '../services/hotkeys.util'
export { NotificationsService } from '../services/notifications.service' export { NotificationsService } from '../services/notifications.service'
export { ThemesService } from '../services/themes.service' export { ThemesService } from '../services/themes.service'
export { ProfilesService } from '../services/profiles.service' export { ProfilesService } from '../services/profiles.service'

View File

@@ -44,7 +44,7 @@ export abstract class ProfileProvider<P extends Profile> {
abstract getBuiltinProfiles (): Promise<PartialProfile<P>[]> abstract getBuiltinProfiles (): Promise<PartialProfile<P>[]>
abstract getNewTabParameters (profile: PartialProfile<P>): Promise<NewTabParameters<BaseTabComponent>> abstract getNewTabParameters (profile: P): Promise<NewTabParameters<BaseTabComponent>>
getSuggestedName (profile: PartialProfile<P>): string|null { getSuggestedName (profile: PartialProfile<P>): string|null {
return null return null

View File

@@ -6,7 +6,6 @@
overflow: hidden; overflow: hidden;
user-select: none; user-select: none;
-webkit-user-drag: none; -webkit-user-drag: none;
-webkit-font-smoothing: antialiased;
will-change: transform; will-change: transform;
cursor: default; cursor: default;
animation: 0.5s ease-out fadeIn; animation: 0.5s ease-out fadeIn;

View File

@@ -108,13 +108,13 @@ export class AppRootComponent {
if (hotkey === 'move-tab-right') { if (hotkey === 'move-tab-right') {
this.app.moveSelectedTabRight() this.app.moveSelectedTabRight()
} }
if (hotkey === 'reopen-tab') {
this.app.reopenLastTab()
}
if (hotkey === 'duplicate-tab') { if (hotkey === 'duplicate-tab') {
this.app.duplicateTab(this.app.activeTab) this.app.duplicateTab(this.app.activeTab)
} }
} }
if (hotkey === 'reopen-tab') {
this.app.reopenLastTab()
}
if (hotkey === 'toggle-fullscreen') { if (hotkey === 'toggle-fullscreen') {
hostWindow.toggleFullscreen() hostWindow.toggleFullscreen()
} }

View File

@@ -29,3 +29,4 @@
) )
.title.mr-2 {{getOptionText(option)}} .title.mr-2 {{getOptionText(option)}}
.description.no-wrap.text-muted {{option.description}} .description.no-wrap.text-muted {{option.description}}
.no-wrap.badge.badge-secondary.text-muted.ml-auto(*ngIf='selectedIndex == i') Enter

View File

@@ -7,11 +7,17 @@
overflow: auto; overflow: auto;
border-top-left-radius: 0; border-top-left-radius: 0;
border-top-right-radius: 0; border-top-right-radius: 0;
padding: 10px 15px;
} }
.group-header { .group-header {
padding: 0 1rem; padding: 0 1rem;
margin: 20px 0 10px; margin: 15px 0 10px;
font-weight: bold;
&:first-child {
margin-top: 5px;
}
} }
.icon { .icon {
@@ -30,4 +36,5 @@
input { input {
border-radius: 0; border-radius: 0;
border: none;
} }

View File

@@ -306,6 +306,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
async ngAfterViewInit (): Promise<void> { async ngAfterViewInit (): Promise<void> {
if (this._recoveredState) { if (this._recoveredState) {
await this.recoverContainer(this.root, this._recoveredState, this._recoveredState.duplicate) await this.recoverContainer(this.root, this._recoveredState, this._recoveredState.duplicate)
this.updateTitle()
this.layout() this.layout()
setTimeout(() => { setTimeout(() => {
if (this.hasFocus) { if (this.hasFocus) {

View File

@@ -3,7 +3,7 @@ div
h1.tabby-title Tabby h1.tabby-title Tabby
sup α sup α
.list-group.list-group-light.mb-4 .list-group.mb-4
a.list-group-item.list-group-item-action.d-flex( a.list-group-item.list-group-item-action.d-flex(
*ngFor='let button of getButtons(); trackBy: buttonsTrackBy', *ngFor='let button of getButtons(); trackBy: buttonsTrackBy',
(click)='button.click()', (click)='button.click()',

View File

@@ -12,7 +12,7 @@ appearance:
frame: thin frame: thin
css: '/* * { color: blue !important; } */' css: '/* * { color: blue !important; } */'
opacity: 1.0 opacity: 1.0
vibrancy: true vibrancy: false
vibrancyType: 'blur' vibrancyType: 'blur'
terminal: terminal:
showBuiltinProfiles: true showBuiltinProfiles: true

View File

@@ -209,6 +209,6 @@ export class AppHotkeyProvider extends HotkeyProvider {
} }
static getProfileHotkeyName (profile: PartialProfile<Profile>): string { static getProfileHotkeyName (profile: PartialProfile<Profile>): string {
return profile.id!.replace(/\./g, '-') return (profile.id ?? profile.name).replace(/\./g, '-')
} }
} }

View File

@@ -102,13 +102,6 @@ export class AppService {
}) })
hostWindow.windowFocused$.subscribe(() => this._activeTab?.emitFocused()) hostWindow.windowFocused$.subscribe(() => this._activeTab?.emitFocused())
this.tabClosed$.subscribe(async tab => {
const token = await tabRecovery.getFullRecoveryToken(tab)
if (token) {
this.closedTabsStack.push(token)
}
})
} }
addTabRaw (tab: BaseTabComponent, index: number|null = null): void { addTabRaw (tab: BaseTabComponent, index: number|null = null): void {
@@ -317,6 +310,10 @@ export class AppService {
if (checkCanClose && !await tab.canClose()) { if (checkCanClose && !await tab.canClose()) {
return return
} }
const token = await this.tabRecovery.getFullRecoveryToken(tab)
if (token) {
this.closedTabsStack.push(token)
}
tab.destroy() tab.destroy()
} }

View File

@@ -27,6 +27,14 @@ export class HomeBaseService {
this.platform.openExternal('https://github.com/Eugeny/tabby') this.platform.openExternal('https://github.com/Eugeny/tabby')
} }
openDiscussions (): void {
this.platform.openExternal('https://github.com/Eugeny/tabby/discussions')
}
openTwitter (): void {
this.platform.openExternal('https://twitter.com/eugeeeeny')
}
reportBug (): void { reportBug (): void {
let body = `Version: ${this.appVersion}\n` let body = `Version: ${this.appVersion}\n`
body += `Platform: ${this.hostApp.platform} ${process.arch} ${this.platform.getOSRelease()}\n` body += `Platform: ${this.hostApp.platform} ${process.arch} ${this.platform.getOSRelease()}\n`

View File

@@ -39,6 +39,10 @@ export function getKeyName (event: KeyEventData): KeyName {
key = altKeyName key = altKeyName
} else if (event.key === 'Shift') { } else if (event.key === 'Shift') {
key = 'Shift' key = 'Shift'
} else if (event.key === '`') {
key = '`'
} else if (event.key === '~') {
key = '~'
} else { } else {
key = event.code key = event.code
if (REGEX_LATIN_KEYNAME.test(event.key)) { if (REGEX_LATIN_KEYNAME.test(event.key)) {
@@ -54,7 +58,6 @@ export function getKeyName (event: KeyEventData): KeyName {
Slash: '/', Slash: '/',
Backslash: '\\', Backslash: '\\',
IntlBackslash: '`', IntlBackslash: '`',
Backquote: '~', // Electron says it's the tilde
Minus: '-', Minus: '-',
Equal: '=', Equal: '=',
Semicolon: ';', Semicolon: ';',

View File

@@ -381,3 +381,8 @@ toggle {
start-page footer { start-page footer {
background: $white !important; background: $white !important;
} }
.terminal-toolbar {
background: #ffffff4a !important;
border-bottom: 1px solid #00000026 !important;
}

View File

@@ -223,7 +223,7 @@ hotkey-input-modal {
} }
.list-group-item { .list-group-item {
transition: 0.0625s background; // transition: 0.0625s background ease;
i + * { i + * {
margin-left: 10px; margin-left: 10px;
@@ -232,7 +232,7 @@ hotkey-input-modal {
.list-group.list-group-flush .list-group-item { .list-group.list-group-flush .list-group-item {
background: transparent; background: transparent;
border-color: rgba(0, 0, 0, 0.2); border: none;
&:not(:last-child) { &:not(:last-child) {
border-bottom: none; border-bottom: none;
@@ -247,11 +247,16 @@ hotkey-input-modal {
.list-group-light { .list-group-light {
.list-group-item { .list-group-item {
border: none; border: none !important;
outline: none !important;
background: transparent;
border-radius: $border-radius;
margin: 0 !important;
&.list-group-item-action { &.list-group-item-action {
&:hover, &.active { &:hover, &.active {
background: $list-group-hover-bg; background: $component-active-bg;
color: $component-active-color;
} }
} }
} }

View File

@@ -78,11 +78,11 @@ $link-color: $gray-400;
$link-hover-color: $white; $link-hover-color: $white;
$link-hover-decoration: none; $link-hover-decoration: none;
$component-active-color: $white; $component-active-color: #4fadff;
$component-active-bg: #2f3a42; $component-active-bg: #0059a559;
$list-group-bg: $table-bg; $list-group-bg: $table-bg;
$list-group-border-color: $table-border-color; $list-group-border-color: transparent;
$list-group-item-padding-y: 0.8rem; $list-group-item-padding-y: 0.8rem;
$list-group-item-padding-x: 1rem; $list-group-item-padding-x: 1rem;
@@ -197,3 +197,7 @@ $progress-height: 3px;
$alert-bg-level: 9; $alert-bg-level: 9;
$alert-border-level: 5; $alert-border-level: 5;
$alert-color-level: -5; $alert-color-level: -5;
$text-muted: rgba(255, 255, 255, 0.5);
$card-bg: $list-group-bg;

View File

@@ -2,11 +2,6 @@
# yarn lockfile v1 # yarn lockfile v1
"@types/semver@^7.3.5":
version "7.3.5"
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.5.tgz#74deebbbcb1e86634dbf10a5b5e8798626f5a597"
integrity sha512-iotVxtCCsPLRAvxMFFgxL8HD2l4mAZ2Oin7/VJ2ooWO0VOK4EGOGmZWZn1uCq7RofR3I/1IOSjCHlFT71eVK0Q==
agent-base@6: agent-base@6:
version "6.0.2" version "6.0.2"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
@@ -24,14 +19,6 @@ bootstrap@^4.1.3:
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.5.3.tgz#c6a72b355aaf323920be800246a6e4ef30997fe6" resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.5.3.tgz#c6a72b355aaf323920be800246a6e4ef30997fe6"
integrity sha512-o9ppKQioXGqhw8Z7mah6KdTYpNQY//tipnkxppWhPbiSWdD+1raYsnhwEZjkTHYbGee4cVQ0Rx65EhOY/HNLcQ== integrity sha512-o9ppKQioXGqhw8Z7mah6KdTYpNQY//tipnkxppWhPbiSWdD+1raYsnhwEZjkTHYbGee4cVQ0Rx65EhOY/HNLcQ==
builder-util-runtime@8.7.5:
version "8.7.5"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.5.tgz#fbe59e274818885e0d2e358d5b7017c34ae6b0f5"
integrity sha512-fgUFHKtMNjdvH6PDRFntdIGUPgwZ69sXsAqEulCtoiqgWes5agrMq/Ud274zjJRTbckYh2PHh8/1CpFc6dpsbQ==
dependencies:
debug "^4.3.2"
sax "^1.2.4"
debug@4: debug@4:
version "4.3.1" version "4.3.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
@@ -39,51 +26,16 @@ debug@4:
dependencies: dependencies:
ms "2.1.2" ms "2.1.2"
debug@^4.3.2:
version "4.3.2"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
dependencies:
ms "2.1.2"
deepmerge@^4.1.1: deepmerge@^4.1.1:
version "4.2.2" version "4.2.2"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
electron-updater@^4.0.6:
version "4.3.9"
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-4.3.9.tgz#247c660bafad7c07935e1b81acd3e9a5fd733154"
integrity sha512-LCNfedSwZfS4Hza+pDyPR05LqHtGorCStaBgVpRnfKxOlZcvpYEX0AbMeH5XUtbtGRoH2V8osbbf2qKPNb7AsA==
dependencies:
"@types/semver" "^7.3.5"
builder-util-runtime "8.7.5"
fs-extra "^10.0.0"
js-yaml "^4.1.0"
lazy-val "^1.0.4"
lodash.escaperegexp "^4.1.2"
lodash.isequal "^4.5.0"
semver "^7.3.5"
"filesize@>= 4.0.0": "filesize@>= 4.0.0":
version "6.3.0" version "6.3.0"
resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.3.0.tgz#dff53cfb3f104c9e422f346d53be8dbcc971bf11" resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.3.0.tgz#dff53cfb3f104c9e422f346d53be8dbcc971bf11"
integrity sha512-ytx0ruGpDHKWVoiui6+BY/QMNngtDQ/pJaFwfBpQif0J63+E8DLdFyqS3NkKQn7vIruUEpoGD9JUJSg7Kp+I0g== integrity sha512-ytx0ruGpDHKWVoiui6+BY/QMNngtDQ/pJaFwfBpQif0J63+E8DLdFyqS3NkKQn7vIruUEpoGD9JUJSg7Kp+I0g==
fs-extra@^10.0.0:
version "10.0.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1"
integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==
dependencies:
graceful-fs "^4.2.0"
jsonfile "^6.0.1"
universalify "^2.0.0"
graceful-fs@^4.1.6, graceful-fs@^4.2.0:
version "4.2.4"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
https-proxy-agent@5.0.0: https-proxy-agent@5.0.0:
version "5.0.0" version "5.0.0"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
@@ -97,44 +49,13 @@ inherits@^2.0.3:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
js-yaml@^4.0.0, js-yaml@^4.1.0: js-yaml@^4.0.0:
version "4.1.0" version "4.1.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
dependencies: dependencies:
argparse "^2.0.1" argparse "^2.0.1"
jsonfile@^6.0.1:
version "6.1.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
dependencies:
universalify "^2.0.0"
optionalDependencies:
graceful-fs "^4.1.6"
lazy-val@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.4.tgz#882636a7245c2cfe6e0a4e3ba6c5d68a137e5c65"
integrity sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q==
lodash.escaperegexp@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347"
integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=
lodash.isequal@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA=
lru-cache@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
dependencies:
yallist "^4.0.0"
mixpanel@^0.13.0: mixpanel@^0.13.0:
version "0.13.0" version "0.13.0"
resolved "https://registry.yarnpkg.com/mixpanel/-/mixpanel-0.13.0.tgz#699bf510d9ba013c75edcf979ff1e24085fde9d2" resolved "https://registry.yarnpkg.com/mixpanel/-/mixpanel-0.13.0.tgz#699bf510d9ba013c75edcf979ff1e24085fde9d2"
@@ -188,18 +109,6 @@ safe-buffer@~5.2.0:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
sax@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
semver@^7.3.5:
version "7.3.5"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
dependencies:
lru-cache "^6.0.0"
string_decoder@^1.1.1: string_decoder@^1.1.1:
version "1.3.0" version "1.3.0"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
@@ -212,11 +121,6 @@ tslib@^2.0.0:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a"
integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==
universalify@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
util-deprecate@^1.0.1: util-deprecate@^1.0.1:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@@ -226,8 +130,3 @@ uuid@^8.0.0:
version "8.3.2" version "8.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==

View File

@@ -1,6 +1,6 @@
{ {
"name": "tabby-electron", "name": "tabby-electron",
"version": "1.0.163", "version": "1.0.165-nightly.0",
"description": "Electron-specific bindings", "description": "Electron-specific bindings",
"keywords": [ "keywords": [
"tabby-builtin-plugin" "tabby-builtin-plugin"

View File

@@ -0,0 +1,3 @@
# Tabby Linkifier Plugin
This plugin makes URLs, IPs and file paths in the terminal clickable and adds a context menu that allows quickly copying them.

View File

@@ -0,0 +1,22 @@
{
"name": "tabby-linkifier",
"version": "1.0.165-nightly.0",
"description": "Makes URLs, IPs and file paths clickable in Tabby",
"keywords": [
"tabby-builtin-plugin"
],
"main": "dist/index.js",
"typings": "typings/index.d.ts",
"scripts": {
"build": "webpack --progress --color --display-modules",
"watch": "webpack --progress --color --watch"
},
"files": [
"typings"
],
"author": "Eugene Pankov",
"license": "MIT",
"devDependencies": {
"untildify": "^4.0.0"
}
}

View File

@@ -0,0 +1,16 @@
import { BaseTerminalTabComponent } from 'tabby-terminal'
export abstract class LinkHandler {
regex: RegExp
priority = 1
convert (uri: string, _tab?: BaseTerminalTabComponent): Promise<string>|string {
return uri
}
verify (_uri: string, _tab?: BaseTerminalTabComponent): Promise<boolean>|boolean {
return true
}
abstract handle (uri: string, tab?: BaseTerminalTabComponent): void
}

View File

@@ -0,0 +1,12 @@
import { ConfigProvider } from 'tabby-core'
/** @hidden */
export class ClickableLinksConfigProvider extends ConfigProvider {
defaults = {
clickableLinks: {
modifier: null,
},
}
platformDefaults = { }
}

View File

@@ -0,0 +1,67 @@
import { Inject, Injectable } from '@angular/core'
import { ConfigService, PlatformService } from 'tabby-core'
import { TerminalDecorator, BaseTerminalTabComponent } from 'tabby-terminal'
import { LinkHandler } from './api'
@Injectable()
export class LinkHighlighterDecorator extends TerminalDecorator {
constructor (
private config: ConfigService,
private platform: PlatformService,
@Inject(LinkHandler) private handlers: LinkHandler[],
) {
super()
}
attach (tab: BaseTerminalTabComponent): void {
if (!(tab.frontend as any).xterm) {
// not hterm
return
}
for (const handler of this.handlers) {
const getLink = async uri => handler.convert(uri, tab)
const openLink = async uri => handler.handle(await getLink(uri), tab)
;(tab.frontend as any).xterm.registerLinkMatcher(
handler.regex,
(event: MouseEvent, uri: string) => {
if (!this.willHandleEvent(event)) {
return
}
openLink(uri)
},
{
priority: handler.priority,
validationCallback: async (uri: string, callback: (isValid: boolean) => void) => {
callback(await handler.verify(await handler.convert(uri, tab), tab))
},
willLinkActivate: (event: MouseEvent, uri: string) => {
if (event.button === 2) {
this.platform.popupContextMenu([
{
click: () => openLink(uri),
label: 'Open',
},
{
click: async () => {
this.platform.setClipboard({ text: await getLink(uri) })
},
label: 'Copy',
},
])
return false
}
return this.willHandleEvent(event)
},
}
)
}
}
private willHandleEvent (event: MouseEvent) {
const modifier = this.config.store.clickableLinks.modifier
return !modifier || event[modifier]
}
}

View File

@@ -0,0 +1,108 @@
import * as fs from 'fs/promises'
import * as path from 'path'
import untildify from 'untildify'
import { Injectable } from '@angular/core'
import { ToastrService } from 'ngx-toastr'
import { PlatformService } from 'tabby-core'
import { BaseTerminalTabComponent } from 'tabby-terminal'
import { LinkHandler } from './api'
@Injectable()
export class URLHandler extends LinkHandler {
// From https://urlregex.com/
regex = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((:((6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1-5][0-9]{4})|([0-5]{1,5})|([0-9]{1,4})))?(?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-\+=&;%@\.\w_]*)#?(?:[\.\!\/\\\w]*))?)/
priority = 5
constructor (private platform: PlatformService) {
super()
}
handle (uri: string): void {
this.platform.openExternal(uri)
}
}
@Injectable()
export class IPHandler extends LinkHandler {
regex = /\b((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/
priority = 4
constructor (private platform: PlatformService) {
super()
}
handle (uri: string): void {
this.platform.openExternal(`http://${uri}`)
}
}
export class BaseFileHandler extends LinkHandler {
constructor (
protected toastr: ToastrService,
protected platform: PlatformService,
) {
super()
}
async handle (uri: string): Promise<void> {
try {
this.platform.openExternal('file://' + uri)
} catch (err) {
this.toastr.error(err.toString())
}
}
async verify (uri: string): Promise<boolean> {
try {
await fs.access(uri)
return true
} catch {
return false
}
}
async convert (uri: string, tab?: BaseTerminalTabComponent): Promise<string> {
let p = untildify(uri)
if (!path.isAbsolute(p) && tab) {
const cwd = await tab.session?.getWorkingDirectory()
if (cwd) {
p = path.resolve(cwd, p)
}
}
return p
}
}
@Injectable()
export class UnixFileHandler extends BaseFileHandler {
// Only absolute and home paths
regex = /[~]?(\/[\w\d.~-]{1,100})+/
constructor (
protected toastr: ToastrService,
protected platform: PlatformService,
) {
super(toastr, platform)
}
}
@Injectable()
export class WindowsFileHandler extends BaseFileHandler {
regex = /(([a-zA-Z]:|\\|~)\\[\w\-()\\\.]{1,1024}|"([a-zA-Z]:|\\)\\[\w\s\-()\\\.]{1,1024}")/
constructor (
protected toastr: ToastrService,
protected platform: PlatformService,
) {
super(toastr, platform)
}
convert (uri: string, tab?: BaseTerminalTabComponent): Promise<string> {
const sanitizedUri = uri.replace(/"/g, '')
return super.convert(sanitizedUri, tab)
}
}

View File

@@ -0,0 +1,27 @@
/* eslint-disable @typescript-eslint/no-extraneous-class */
import { NgModule } from '@angular/core'
import { ToastrModule } from 'ngx-toastr'
import { ConfigProvider } from 'tabby-core'
import { TerminalDecorator } from 'tabby-terminal'
import { LinkHandler } from './api'
import { UnixFileHandler, WindowsFileHandler, URLHandler, IPHandler } from './handlers'
import { LinkHighlighterDecorator } from './decorator'
import { ClickableLinksConfigProvider } from './config'
@NgModule({
imports: [
ToastrModule,
],
providers: [
{ provide: LinkHandler, useClass: URLHandler, multi: true },
{ provide: LinkHandler, useClass: IPHandler, multi: true },
{ provide: LinkHandler, useClass: UnixFileHandler, multi: true },
{ provide: LinkHandler, useClass: WindowsFileHandler, multi: true },
{ provide: TerminalDecorator, useClass: LinkHighlighterDecorator, multi: true },
{ provide: ConfigProvider, useClass: ClickableLinksConfigProvider, multi: true },
],
})
export default class LinkifierModule { }
export * from './api'

View File

@@ -0,0 +1,7 @@
{
"extends": "../tsconfig.json",
"exclude": ["node_modules", "dist"],
"compilerOptions": {
"baseUrl": "src",
}
}

View File

@@ -0,0 +1,14 @@
{
"extends": "../tsconfig.json",
"exclude": ["node_modules", "dist", "typings"],
"compilerOptions": {
"baseUrl": "src",
"emitDeclarationOnly": true,
"declaration": true,
"declarationDir": "./typings",
"paths": {
"tabby-*": ["../../tabby-*"],
"*": ["../../app/node_modules/*"]
}
}
}

View File

@@ -0,0 +1,5 @@
const config = require('../webpack.plugin.config')
module.exports = config({
name: 'linkifier',
dirname: __dirname,
})

View File

@@ -0,0 +1,8 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
untildify@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b"
integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==

View File

@@ -1,5 +1,4 @@
Tabby Local Plugin # Tabby Local Plugin
---------------------
* local shells * local shells

View File

@@ -1,6 +1,6 @@
{ {
"name": "tabby-local", "name": "tabby-local",
"version": "1.0.163", "version": "1.0.165-nightly.0",
"description": "Tabby's local shell plugin", "description": "Tabby's local shell plugin",
"keywords": [ "keywords": [
"tabby-builtin-plugin" "tabby-builtin-plugin"

View File

@@ -45,19 +45,17 @@ export class LocalProfilesService extends ProfileProvider<LocalProfile> {
})) }))
} }
async getNewTabParameters (profile: PartialProfile<LocalProfile>): Promise<NewTabParameters<TerminalTabComponent>> { async getNewTabParameters (profile: LocalProfile): Promise<NewTabParameters<TerminalTabComponent>> {
profile = deepClone(profile) profile = deepClone(profile)
if (!profile.options?.cwd) { if (!profile.options.cwd) {
if (this.app.activeTab instanceof TerminalTabComponent && this.app.activeTab.session) { if (this.app.activeTab instanceof TerminalTabComponent && this.app.activeTab.session) {
profile.options ??= {}
profile.options.cwd = await this.app.activeTab.session.getWorkingDirectory() ?? undefined profile.options.cwd = await this.app.activeTab.session.getWorkingDirectory() ?? undefined
} }
if (this.app.activeTab instanceof SplitTabComponent) { if (this.app.activeTab instanceof SplitTabComponent) {
const focusedTab = this.app.activeTab.getFocusedTab() const focusedTab = this.app.activeTab.getFocusedTab()
if (focusedTab instanceof TerminalTabComponent && focusedTab.session) { if (focusedTab instanceof TerminalTabComponent && focusedTab.session) {
profile.options ??= {}
profile.options.cwd = await focusedTab.session.getWorkingDirectory() ?? undefined profile.options.cwd = await focusedTab.session.getWorkingDirectory() ?? undefined
} }
} }

View File

@@ -295,18 +295,16 @@ export class Session extends BaseSession {
} else { } else {
await new Promise<void>((resolve) => { await new Promise<void>((resolve) => {
this.kill('SIGTERM') this.kill('SIGTERM')
setImmediate(() => { setTimeout(() => {
try { try {
process.kill(this.pty!.getPID(), 0) process.kill(this.pty!.getPID(), 0)
// still alive // still alive
setTimeout(() => { this.kill('SIGKILL')
this.kill('SIGKILL') resolve()
resolve()
}, 1000)
} catch { } catch {
resolve() resolve()
} }
}) }, 500)
}) })
} }
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "tabby-plugin-manager", "name": "tabby-plugin-manager",
"version": "1.0.163", "version": "1.0.165-nightly.0",
"description": "Tabby's plugin manager", "description": "Tabby's plugin manager",
"keywords": [ "keywords": [
"tabby-builtin-plugin" "tabby-builtin-plugin"

View File

@@ -24,9 +24,9 @@ ul.nav-tabs.mb-2(ngbNav, #nav='ngbNav')
placeholder='Search plugins' placeholder='Search plugins'
) )
ngb-accordion.mb-4(*ngIf='availablePlugins$', type='dark', [closeOthers]='true') ngb-accordion.mb-4(*ngIf='availablePlugins$', [closeOthers]='true')
ng-container(*ngFor='let plugin of (availablePlugins$|async)') ng-container(*ngFor='let plugin of (availablePlugins$|async)')
ngb-panel(*ngIf='!isAlreadyInstalled(plugin)', cardClass='bg-dark') ngb-panel(*ngIf='!isAlreadyInstalled(plugin)')
ng-template(ngbPanelTitle) ng-template(ngbPanelTitle)
.text-left .text-left
strong.d-block {{plugin.name}} strong.d-block {{plugin.name}}
@@ -57,9 +57,9 @@ ul.nav-tabs.mb-2(ngbNav, #nav='ngbNav')
li(ngbNavItem) li(ngbNavItem)
a(ngbNavLink) Installed a(ngbNavLink) Installed
ng-template(ngbNavContent) ng-template(ngbNavContent)
ngb-accordion.mb-4(type='dark', [closeOthers]='true') ngb-accordion.mb-4([closeOthers]='true')
ng-container(*ngFor='let plugin of pluginManager.installedPlugins') ng-container(*ngFor='let plugin of pluginManager.installedPlugins')
ngb-panel(cardClass='bg-dark') ngb-panel
ng-template(ngbPanelTitle) ng-template(ngbPanelTitle)
.text-left.mr-auto .text-left.mr-auto
div div

View File

@@ -3,13 +3,10 @@ import { compare as semverCompare } from 'semver'
import { Observable, from, forkJoin, map } from 'rxjs' import { Observable, from, forkJoin, map } from 'rxjs'
import { Injectable, Inject } from '@angular/core' import { Injectable, Inject } from '@angular/core'
import { Logger, LogService, PlatformService, BOOTSTRAP_DATA, BootstrapData, PluginInfo } from 'tabby-core' import { Logger, LogService, PlatformService, BOOTSTRAP_DATA, BootstrapData, PluginInfo } from 'tabby-core'
import { PLUGIN_BLACKLIST } from '../../../app/src/pluginBlacklist'
const OFFICIAL_NPM_ACCOUNT = 'eugenepankov' const OFFICIAL_NPM_ACCOUNT = 'eugenepankov'
const BLACKLIST = [
'terminus-shell-selector', // superseded by profiles
'terminus-scrollbar', // now useless
]
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class PluginManagerService { export class PluginManagerService {
@@ -69,7 +66,7 @@ export class PluginManagerService {
})) }))
), ),
map(plugins => plugins.filter(x => x.packageName.startsWith(namePrefix))), map(plugins => plugins.filter(x => x.packageName.startsWith(namePrefix))),
map(plugins => plugins.filter(x => !BLACKLIST.includes(x.packageName))), map(plugins => plugins.filter(x => !PLUGIN_BLACKLIST.includes(x.packageName))),
map(plugins => { map(plugins => {
const mapping: Record<string, PluginInfo[]> = {} const mapping: Record<string, PluginInfo[]> = {}
for (const p of plugins) { for (const p of plugins) {

View File

@@ -1,6 +1,6 @@
{ {
"name": "tabby-serial", "name": "tabby-serial",
"version": "1.0.163", "version": "1.0.165-nightly.0",
"description": "Serial connections for Tabby", "description": "Serial connections for Tabby",
"keywords": [ "keywords": [
"tabby-builtin-plugin" "tabby-builtin-plugin"

View File

@@ -20,6 +20,7 @@ export interface SerialProfileOptions extends StreamProcessingOptions, LoginScri
xon?: boolean xon?: boolean
xoff?: boolean xoff?: boolean
xany?: boolean xany?: boolean
slowSend?: boolean
} }
export const BAUD_RATES = [ export const BAUD_RATES = [
@@ -123,7 +124,13 @@ export class SerialSession extends BaseSession {
} }
write (data: Buffer): void { write (data: Buffer): void {
this.streamProcessor.feedFromTerminal(data) if (!this.profile.options.slowSend) {
this.streamProcessor.feedFromTerminal(data)
} else {
for (const byte of data) {
this.streamProcessor.feedFromTerminal(Buffer.from([byte]))
}
}
} }
async destroy (): Promise<void> { async destroy (): Promise<void> {

View File

@@ -77,6 +77,12 @@ ul.nav-tabs(ngbNav, #nav='ngbNav')
.title Xany .title Xany
toggle([(ngModel)]='profile.options.xany') toggle([(ngModel)]='profile.options.xany')
.form-line
.header
.title Slow feed
.description Sends data one byte at a time
toggle([(ngModel)]='profile.options.slowFeed')
li(ngbNavItem) li(ngbNavItem)
a(ngbNavLink) Login scripts a(ngbNavLink) Login scripts
ng-template(ngbNavContent) ng-template(ngbNavContent)

View File

@@ -30,6 +30,7 @@ export class SerialProfilesService extends ProfileProvider<SerialProfile> {
inputNewlines: null, inputNewlines: null,
outputNewlines: null, outputNewlines: null,
scripts: [], scripts: [],
slowSend: false,
}, },
} }

View File

@@ -1,5 +1,4 @@
Tabby Settings Plugin # Tabby Settings Plugin
------------------------
* tabbed settings interface * tabbed settings interface

View File

@@ -1,6 +1,6 @@
{ {
"name": "tabby-settings", "name": "tabby-settings",
"version": "1.0.163", "version": "1.0.165-nightly.0",
"description": "Tabby terminal settings page", "description": "Tabby terminal settings page",
"keywords": [ "keywords": [
"tabby-builtin-plugin" "tabby-builtin-plugin"

View File

@@ -32,7 +32,7 @@ ul.nav-tabs(ngbNav, #nav='ngbNav')
i.fas.fa-fw.fa-plus i.fas.fa-fw.fa-plus
| New profile | New profile
.list-group.list-group-light.mt-3.mb-3 .list-group.mt-3.mb-3
ng-container(*ngFor='let group of profileGroups') ng-container(*ngFor='let group of profileGroups')
ng-container(*ngIf='isGroupVisible(group)') ng-container(*ngIf='isGroupVisible(group)')
.list-group-item.list-group-item-action.d-flex.align-items-center( .list-group-item.list-group-item-action.d-flex.align-items-center(
@@ -118,7 +118,7 @@ ul.nav-tabs(ngbNav, #nav='ngbNav')
.title Default profile settings .title Default profile settings
.description These apply to all profiles of a given type .description These apply to all profiles of a given type
.list-group.list-group-light.mt-3.mb-3 .list-group.mt-3.mb-3
a.list-group-item.list-group-item-action( a.list-group-item.list-group-item-action(
(click)='editDefaults(provider)', (click)='editDefaults(provider)',
*ngFor='let provider of profileProviders' *ngFor='let provider of profileProviders'

View File

@@ -100,9 +100,13 @@ export class ProfilesSettingsTabComponent extends BaseComponent {
if (!provider) { if (!provider) {
throw new Error('Cannot edit a profile without a provider') throw new Error('Cannot edit a profile without a provider')
} }
modal.componentInstance.profile = Object.assign({}, profile) modal.componentInstance.profile = deepClone(profile)
modal.componentInstance.profileProvider = provider modal.componentInstance.profileProvider = provider
const result = await modal.result
const result = await modal.result.catch(() => null)
if (!result) {
return
}
// Fully replace the config // Fully replace the config
for (const k in profile) { for (const k in profile) {
@@ -207,7 +211,7 @@ export class ProfilesSettingsTabComponent extends BaseComponent {
} }
isProfileVisible (profile: PartialProfile<Profile>): boolean { isProfileVisible (profile: PartialProfile<Profile>): boolean {
return !this.filter || profile.name.toLowerCase().includes(this.filter.toLowerCase()) return !this.filter || (profile.name + '$' + (this.getDescription(profile) ?? '')).toLowerCase().includes(this.filter.toLowerCase())
} }
iconIsSVG (icon?: string): boolean { iconIsSVG (icon?: string): boolean {

View File

@@ -6,45 +6,66 @@
| Application | Application
ng-template(ngbNavContent) ng-template(ngbNavContent)
.content-box .content-box
.tabby-logo.mt-3 .row
h1.tabby-title Tabby .col-12.col-md-6
sup α .logo-area
.tabby-logo.mt-3
.text-center h1.tabby-title Tabby
.text-muted {{homeBase.appVersion}} sup α
.text-muted {{homeBase.appVersion}}
.mb-5.mt-3 button.btn.btn-secondary.mt-3.mb-2(
button.btn.btn-secondary.mr-3.mb-2((click)='homeBase.openGitHub()') *ngIf='!updateAvailable && hostApp.platform !== Platform.Web',
i.fab.fa-github (click)='checkForUpdates()',
span GitHub [disabled]='checkingForUpdate'
button.btn.btn-secondary.mr-3.mb-2((click)='homeBase.reportBug()')
i.fas.fa-bug
span Report a problem
button.btn.btn-secondary.mr-3.mb-2(
(click)='showReleaseNotes()',
)
i.fas.fa-book
span What's new
button.btn.btn-secondary.mr-3.mb-2(
*ngIf='!updateAvailable && hostApp.platform !== Platform.Web',
(click)='checkForUpdates()',
[disabled]='checkingForUpdate'
)
i.fas.fa-sync(
[class.fa-spin]='checkingForUpdate'
) )
span Check for updates i.fas.fa-sync(
[class.fa-spin]='checkingForUpdate'
)
span Check for updates
button.btn.btn-info.mr-3.mb-2( button.btn.btn-info.mt-3.mb-2(
*ngIf='updateAvailable', *ngIf='updateAvailable',
(click)='updater.update()', (click)='updater.update()',
) )
i.fas.fa-sync i.fas.fa-sync
span Update span Update
.col-12.col-md-6
.list-group.list-group-light.mb-5
button.list-group-item.list-group-item-action.link-card((click)='homeBase.reportBug()')
i.fas.fa-fw.fa-bug
div
div Report a problem
small.text-muted Generate a pre-filled GitHub issue
button.list-group-item.list-group-item-action.link-card((click)='homeBase.openDiscussions()')
i.fas.fa-fw.fa-comments
div
div Ask a question
small.text-muted On GitHub Discussions
button.list-group-item.list-group-item-action.link-card((click)='homeBase.openGitHub()')
i.fab.fa-fw.fa-github
div
div GitHub
small.text-muted Source code
button.list-group-item.list-group-item-action.link-card((click)='showReleaseNotes()')
i.fas.fa-fw.fa-book
div
div What's new
small.text-muted Show release notes
button.list-group-item.list-group-item-action.link-card((click)='homeBase.openTwitter()')
i.fab.fa-fw.fa-twitter
div
div Subscribe to updates
small.text-muted Tabby news and updates on Twitter
h3 Application settings
.form-line(*ngIf='platform.isShellIntegrationSupported()') .form-line(*ngIf='platform.isShellIntegrationSupported()')
.header .header
.title Shell integration .title Shell integration

View File

@@ -9,6 +9,24 @@
flex: none; flex: none;
} }
.logo-area {
.tabby-logo {
margin: 0 0 0 -8px;
width: 60px;
height: 60px;
}
.tabby-title {
text-align: left;
}
}
.link-card {
display: flex;
line-height: 1;
align-items: center;
}
> .content { > .content {
display: flex; display: flex;
min-height: 0; min-height: 0;
@@ -16,7 +34,7 @@
> .nav { > .nav {
padding: 20px 10px; padding: 20px 10px;
width: 212px; width: 222px;
flex: none; flex: none;
overflow-y: auto; overflow-y: auto;
flex-wrap: nowrap; flex-wrap: nowrap;

View File

@@ -1,6 +1,6 @@
{ {
"name": "tabby-ssh", "name": "tabby-ssh",
"version": "1.0.163", "version": "1.0.165-nightly.0",
"description": "SSH connections for Tabby", "description": "SSH connections for Tabby",
"keywords": [ "keywords": [
"tabby-builtin-plugin" "tabby-builtin-plugin"
@@ -29,7 +29,7 @@
}, },
"dependencies": { "dependencies": {
"run-script-os": "^1.1.3", "run-script-os": "^1.1.3",
"socksv5": "^0.0.6" "@luminati-io/socksv5": "^0.0.7"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/animations": "^9.1.9", "@angular/animations": "^9.1.9",

View File

@@ -30,6 +30,8 @@ export interface SSHProfileOptions extends LoginScriptsOptions {
algorithms?: Record<string, string[]> algorithms?: Record<string, string[]>
proxyCommand?: string proxyCommand?: string
forwardedPorts?: ForwardedPortConfig[] forwardedPorts?: ForwardedPortConfig[]
socksProxyHost?: string
socksProxyPort?: number
} }
export enum PortForwardType { export enum PortForwardType {
@@ -44,10 +46,15 @@ export interface ForwardedPortConfig {
port: number port: number
targetAddress: string targetAddress: string
targetPort: number targetPort: number
description: string
} }
export const ALGORITHM_BLACKLIST = [ export let ALGORITHM_BLACKLIST = [
// cause native crashes in node crypto, use EC instead // cause native crashes in node crypto, use EC instead
'diffie-hellman-group-exchange-sha256', 'diffie-hellman-group-exchange-sha256',
'diffie-hellman-group-exchange-sha1', 'diffie-hellman-group-exchange-sha1',
] ]
if (!process.env.TABBY_ENABLE_SSH_ALG_BLACKLIST) {
ALGORITHM_BLACKLIST = []
}

View File

@@ -2,7 +2,7 @@
strong Keyboard-interactive auth strong Keyboard-interactive auth
.ml-2 {{prompt.name}} .ml-2 {{prompt.name}}
.prompt-text {{prompt.prompts[step]}} .prompt-text {{prompt.prompts[step].prompt}}
input.form-control.mt-2( input.form-control.mt-2(
#input, #input,

View File

@@ -15,7 +15,7 @@ export class KeyboardInteractiveAuthComponent {
@ViewChild('input') input: ElementRef @ViewChild('input') input: ElementRef
isPassword (): boolean { isPassword (): boolean {
return this.prompt.prompts[this.step].toLowerCase().includes('password') return this.prompt.prompts[this.step].prompt.toLowerCase().includes('password') || !this.prompt.prompts[this.step].echo
} }
previous (): void { previous (): void {

View File

@@ -16,7 +16,7 @@
div(*ngIf='!sftp') Connecting div(*ngIf='!sftp') Connecting
div(*ngIf='sftp') div(*ngIf='sftp')
div(*ngIf='fileList === null') Loading div(*ngIf='fileList === null') Loading
.list-group.list-group-flush(*ngIf='fileList !== null') .list-group.list-group-light(*ngIf='fileList !== null')
.list-group-item.list-group-item-action.d-flex.align-items-center( .list-group-item.list-group-item-action.d-flex.align-items-center(
*ngIf='path !== "/"', *ngIf='path !== "/"',
(click)='goUp()' (click)='goUp()'

View File

@@ -1,15 +1,20 @@
.list-group.mb-3 .list-group.mb-3
.list-group-item.d-flex.align-items-center(*ngFor='let fw of model') .list-group-item.d-flex.align-items-center(*ngFor='let fw of model')
strong(*ngIf='fw.type === PortForwardType.Local') Local div
strong(*ngIf='fw.type === PortForwardType.Remote') Remote .ms-2.d-flex.align-items-center
strong(*ngIf='fw.type === PortForwardType.Dynamic') Dynamic strong(*ngIf='fw.type === PortForwardType.Local') Local
.ml-3 {{fw.host}}:{{fw.port}} strong(*ngIf='fw.type === PortForwardType.Remote') Remote
.ml-2 &rarr; strong(*ngIf='fw.type === PortForwardType.Dynamic') Dynamic
.ml-2(*ngIf='fw.type !== PortForwardType.Dynamic') {{fw.targetAddress}}:{{fw.targetPort}} .ml-3 {{fw.host}}:{{fw.port}}
.ml-2(*ngIf='fw.type === PortForwardType.Dynamic') SOCKS proxy .ml-2 &rarr;
.ml-2(*ngIf='fw.type !== PortForwardType.Dynamic') {{fw.targetAddress}}:{{fw.targetPort}}
.ml-2(*ngIf='fw.type === PortForwardType.Dynamic') SOCKS proxy
div {{fw.description}}
button.btn.btn-link.hover-reveal.ml-auto((click)='remove(fw)') button.btn.btn-link.hover-reveal.ml-auto((click)='remove(fw)')
i.fas.fa-trash-alt i.fas.fa-trash-alt
h5 Add a port forward
.input-group.mb-2(*ngIf='newForward.type === PortForwardType.Dynamic') .input-group.mb-2(*ngIf='newForward.type === PortForwardType.Dynamic')
input.form-control(type='text', [(ngModel)]='newForward.host') input.form-control(type='text', [(ngModel)]='newForward.host')
.input-group-append .input-group-append
@@ -31,6 +36,9 @@
.input-group-text : .input-group-text :
input.form-control(type='number', [(ngModel)]='newForward.targetPort') input.form-control(type='number', [(ngModel)]='newForward.targetPort')
.input-group.mb-2
input.form-control(type='text', placeholder='Description', [(ngModel)]='newForward.description')
.d-flex .d-flex
.btn-group.mr-auto( .btn-group.mr-auto(
[(ngModel)]='newForward.type', [(ngModel)]='newForward.type',

View File

@@ -26,6 +26,7 @@ export class SSHPortForwardingConfigComponent {
port: 8000, port: 8000,
targetAddress: '127.0.0.1', targetAddress: '127.0.0.1',
targetPort: 80, targetPort: 80,
description: '',
} }
} }
@@ -40,5 +41,6 @@ export class SSHPortForwardingConfigComponent {
remove (fw: ForwardedPortConfig) { remove (fw: ForwardedPortConfig) {
this.forwardRemoved.emit(fw) this.forwardRemoved.emit(fw)
this.newForward = fw
} }
} }

View File

@@ -1,5 +1,5 @@
.modal-header .modal-header(*ngIf='session.forwardedPorts.length')
h5.m-0 Port forwarding h5.m-0 Forwarded ports
.modal-body.pt-0 .modal-body.pt-0
ssh-port-forwarding-config( ssh-port-forwarding-config(

View File

@@ -2,15 +2,48 @@ ul.nav-tabs(ngbNav, #nav='ngbNav')
li(ngbNavItem) li(ngbNavItem)
a(ngbNavLink) General a(ngbNavLink) General
ng-template(ngbNavContent) ng-template(ngbNavContent)
.d-flex.w-100(*ngIf='!useProxyCommand') .d-flex.w-100.mt-3
.form-group.w-100.mr-4 .form-group.mr-2(
ngbDropdown
)
label Connection
button.btn.btn-secondary.d-block(ngbDropdownToggle) {{getConnectionDropdownTitle()}}
div(ngbDropdownMenu)
button.dropdown-item(
(click)='connectionMode = "direct"',
) Direct
button.dropdown-item(
*ngIf='hostApp.platform !== Platform.Web',
(click)='connectionMode = "proxyCommand"',
)
div Proxy command
.text-muted Command's stdin/stdout is used instead of a network connection
button.dropdown-item(
(click)='connectionMode = "jumpHost"',
)
div Jump host
.text-muted Connect to a different host first and use it as a proxy
button.dropdown-item(
(click)='connectionMode = "socksProxy"',
)
div SOCKS proxy
.text-muted Connect through a proxy server
.form-group.w-100(*ngIf='connectionMode === "proxyCommand"')
label Proxy command
input.form-control(
type='text',
[(ngModel)]='profile.options.proxyCommand',
)
.form-group.w-100.mr-2(*ngIf='connectionMode !== "proxyCommand"')
label Host label Host
input.form-control( input.form-control(
type='text', type='text',
[(ngModel)]='profile.options.host', [(ngModel)]='profile.options.host',
) )
.form-group .form-group(*ngIf='connectionMode !== "proxyCommand"')
label Port label Port
input.form-control( input.form-control(
type='number', type='number',
@@ -18,8 +51,28 @@ ul.nav-tabs(ngbNav, #nav='ngbNav')
[(ngModel)]='profile.options.port', [(ngModel)]='profile.options.port',
) )
.alert.alert-info(*ngIf='useProxyCommand') .form-group(*ngIf='connectionMode === "jumpHost"')
.mr-auto Using a proxy command instead of a network connection label Jump host
select.form-control([(ngModel)]='profile.options.jumpHost')
option([ngValue]='null') Select
option([ngValue]='x.id', *ngFor='let x of jumpHosts') {{x.name}}
.d-flex.w-100(*ngIf='connectionMode === "socksProxy"')
.form-group.w-100.mr-2
label SOCKS proxy host
input.form-control(
type='text',
[(ngModel)]='profile.options.socksProxyHost',
)
.form-group
label SOCKS proxy port
input.form-control(
type='number',
placeholder='5000',
[(ngModel)]='profile.options.socksProxyPort',
)
.form-group .form-group
label Username label Username
@@ -93,13 +146,6 @@ ul.nav-tabs(ngbNav, #nav='ngbNav')
li(ngbNavItem) li(ngbNavItem)
a(ngbNavLink) Advanced a(ngbNavLink) Advanced
ng-template(ngbNavContent) ng-template(ngbNavContent)
.form-line(*ngIf='!useProxyCommand')
.header
.title Jump host
select.form-control([(ngModel)]='profile.options.jumpHost')
option(value='') None
option([ngValue]='x.id', *ngFor='let x of jumpHosts') {{x.name}}
.form-line(ng:if='hostApp.platform !== Platform.Web') .form-line(ng:if='hostApp.platform !== Platform.Web')
.header .header
.title X11 forwarding .title X11 forwarding
@@ -143,19 +189,6 @@ ul.nav-tabs(ngbNav, #nav='ngbNav')
[(ngModel)]='profile.options.readyTimeout', [(ngModel)]='profile.options.readyTimeout',
) )
.form-line(*ngIf='!profile.options.jumpHost && hostApp.platform !== Platform.Web')
.header
.title Use a proxy command
.description Command's stdin/stdout is used instead of a network connection
toggle([(ngModel)]='useProxyCommand')
.form-group(*ngIf='useProxyCommand && !profile.options.jumpHost')
label Proxy command
input.form-control(
type='text',
[(ngModel)]='profile.options.proxyCommand',
)
li(ngbNavItem) li(ngbNavItem)
a(ngbNavLink) Ciphers a(ngbNavLink) Ciphers
ng-template(ngbNavContent) ng-template(ngbNavContent)

View File

@@ -16,7 +16,8 @@ export class SSHProfileSettingsComponent {
Platform = Platform Platform = Platform
profile: SSHProfile profile: SSHProfile
hasSavedPassword: boolean hasSavedPassword: boolean
useProxyCommand: boolean
connectionMode: 'direct'|'proxyCommand'|'jumpHost'|'socksProxy' = 'direct'
supportedAlgorithms = supportedAlgorithms supportedAlgorithms = supportedAlgorithms
algorithms: Record<string, Record<string, boolean>> = {} algorithms: Record<string, Record<string, boolean>> = {}
@@ -43,7 +44,14 @@ export class SSHProfileSettingsComponent {
this.profile.options.auth = this.profile.options.auth ?? null this.profile.options.auth = this.profile.options.auth ?? null
this.profile.options.privateKeys ??= [] this.profile.options.privateKeys ??= []
this.useProxyCommand = !!this.profile.options.proxyCommand if (this.profile.options.proxyCommand) {
this.connectionMode = 'proxyCommand'
} else if (this.profile.options.jumpHost) {
this.connectionMode = 'jumpHost'
} else if (this.profile.options.socksProxyHost) {
this.connectionMode = 'socksProxy'
}
if (this.profile.options.user) { if (this.profile.options.user) {
try { try {
this.hasSavedPassword = !!await this.passwordStorage.loadPassword(this.profile) this.hasSavedPassword = !!await this.passwordStorage.loadPassword(this.profile)
@@ -90,9 +98,18 @@ export class SSHProfileSettingsComponent {
.map(([key, _]) => key) .map(([key, _]) => key)
this.profile.options.algorithms![k].sort() this.profile.options.algorithms![k].sort()
} }
if (!this.useProxyCommand) {
if (this.connectionMode !== 'jumpHost') {
this.profile.options.jumpHost = undefined
}
if (this.connectionMode !== 'proxyCommand') {
this.profile.options.proxyCommand = undefined this.profile.options.proxyCommand = undefined
} }
if (this.connectionMode !== 'socksProxy') {
this.profile.options.socksProxyHost = undefined
this.profile.options.socksProxyPort = undefined
}
this.loginScriptsSettings?.save() this.loginScriptsSettings?.save()
} }
@@ -104,4 +121,13 @@ export class SSHProfileSettingsComponent {
onForwardRemoved (fw: ForwardedPortConfig) { onForwardRemoved (fw: ForwardedPortConfig) {
this.profile.options.forwardedPorts = this.profile.options.forwardedPorts?.filter(x => x !== fw) this.profile.options.forwardedPorts = this.profile.options.forwardedPorts?.filter(x => x !== fw)
} }
getConnectionDropdownTitle () {
return {
direct: 'Direct',
proxyCommand: 'Proxy command',
jumpHost: 'Jump host',
socksProxy: 'SOCKS proxy',
}[this.connectionMode]
}
} }

View File

@@ -37,6 +37,8 @@ export class SSHProfilesService extends ProfileProvider<SSHProfile> {
proxyCommand: null, proxyCommand: null,
forwardedPorts: [], forwardedPorts: [],
scripts: [], scripts: [],
socksProxyHost: null,
socksProxyPort: null,
}, },
} }
@@ -73,7 +75,7 @@ export class SSHProfilesService extends ProfileProvider<SSHProfile> {
}] }]
} }
async getNewTabParameters (profile: PartialProfile<SSHProfile>): Promise<NewTabParameters<SSHTabComponent>> { async getNewTabParameters (profile: SSHProfile): Promise<NewTabParameters<SSHTabComponent>> {
return { return {
type: SSHTabComponent, type: SSHTabComponent,
inputs: { profile }, inputs: { profile },

View File

@@ -1,4 +1,5 @@
import * as shellQuote from 'shell-quote' import * as shellQuote from 'shell-quote'
import socksv5 from '@luminati-io/socksv5'
import { Duplex } from 'stream' import { Duplex } from 'stream'
import { Injectable } from '@angular/core' import { Injectable } from '@angular/core'
import { spawn } from 'child_process' import { spawn } from 'child_process'
@@ -28,8 +29,8 @@ export class SSHService {
return this.detectedWinSCPPath ?? this.config.store.ssh.winSCPPath return this.detectedWinSCPPath ?? this.config.store.ssh.winSCPPath
} }
async getWinSCPURI (profile: SSHProfile, cwd?: string): Promise<string> { async getWinSCPURI (profile: SSHProfile, cwd?: string, username?: string): Promise<string> {
let uri = `scp://${profile.options.user}` let uri = `scp://${username ?? profile.options.user}`
const password = await this.passwordStorage.loadPassword(profile) const password = await this.passwordStorage.loadPassword(profile)
if (password) { if (password) {
uri += ':' + encodeURIComponent(password) uri += ':' + encodeURIComponent(password)
@@ -43,7 +44,7 @@ export class SSHService {
if (!path) { if (!path) {
return return
} }
const args = [await this.getWinSCPURI(session.profile)] const args = [await this.getWinSCPURI(session.profile, undefined, session.authUsername ?? undefined)]
if (session.activePrivateKey) { if (session.activePrivateKey) {
args.push('/privatekey') args.push('/privatekey')
args.push(session.activePrivateKey) args.push(session.activePrivateKey)
@@ -52,6 +53,61 @@ export class SSHService {
} }
} }
export class SocksProxyStream extends Duplex {
private client: Duplex|null
private header: Buffer|null
constructor (private profile: SSHProfile) {
super({
allowHalfOpen: false,
})
}
async start (): Promise<void> {
this.client = await new Promise((resolve, reject) => {
const connector = socksv5.connect({
host: this.profile.options.host,
port: this.profile.options.port,
proxyHost: this.profile.options.socksProxyHost ?? '127.0.0.1',
proxyPort: this.profile.options.socksProxyPort ?? 5000,
auths: [socksv5.auth.None()],
}, s => {
resolve(s)
this.header = s.read()
this.push(this.header)
})
connector.on('error', (err) => {
reject(err)
this.destroy(err)
})
})
this.client?.on('data', data => {
if (data !== this.header) {
// socksv5 doesn't reliably emit the first data event
this.push(data)
this.header = null
}
})
this.client?.on('close', (err) => {
this.destroy(err)
})
}
_read (size: number): void {
this.client?.read(size)
}
_write (chunk: Buffer, _encoding: string, callback: (error?: Error | null) => void): void {
this.client?.write(chunk, callback)
}
_destroy (error: Error|null, callback: (error: Error|null) => void): void {
this.client?.destroy()
callback(error)
}
}
export class ProxyCommandStream extends Duplex { export class ProxyCommandStream extends Duplex {
private process: ChildProcess private process: ChildProcess

View File

@@ -1,4 +1,4 @@
import socksv5 from 'socksv5' import socksv5 from '@luminati-io/socksv5'
import { Server, Socket, createServer } from 'net' import { Server, Socket, createServer } from 'net'
import { ForwardedPortConfig, PortForwardType } from '../api' import { ForwardedPortConfig, PortForwardType } from '../api'
@@ -9,6 +9,7 @@ export class ForwardedPort implements ForwardedPortConfig {
port: number port: number
targetAddress: string targetAddress: string
targetPort: number targetPort: number
description: string
private listener: Server|null = null private listener: Server|null = null

View File

@@ -12,7 +12,7 @@ import { BaseSession } from 'tabby-terminal'
import { Socket } from 'net' import { Socket } from 'net'
import { Client, ClientChannel, SFTPWrapper } from 'ssh2' import { Client, ClientChannel, SFTPWrapper } from 'ssh2'
import { Subject, Observable } from 'rxjs' import { Subject, Observable } from 'rxjs'
import { ProxyCommandStream } from '../services/ssh.service' import { ProxyCommandStream, SocksProxyStream } from '../services/ssh.service'
import { PasswordStorageService } from '../services/passwordStorage.service' import { PasswordStorageService } from '../services/passwordStorage.service'
import { promisify } from 'util' import { promisify } from 'util'
import { SFTPSession } from './sftp' import { SFTPSession } from './sftp'
@@ -22,6 +22,11 @@ import { X11Socket } from './x11'
const WINDOWS_OPENSSH_AGENT_PIPE = '\\\\.\\pipe\\openssh-ssh-agent' const WINDOWS_OPENSSH_AGENT_PIPE = '\\\\.\\pipe\\openssh-ssh-agent'
export interface Prompt {
prompt: string
echo?: boolean
}
interface AuthMethod { interface AuthMethod {
type: 'none'|'publickey'|'agent'|'password'|'keyboard-interactive'|'hostbased' type: 'none'|'publickey'|'agent'|'password'|'keyboard-interactive'|'hostbased'
name?: string name?: string
@@ -34,7 +39,7 @@ export class KeyboardInteractivePrompt {
constructor ( constructor (
public name: string, public name: string,
public instruction: string, public instruction: string,
public prompts: string[], public prompts: Prompt[],
private callback: (_: string[]) => void, private callback: (_: string[]) => void,
) { } ) { }
@@ -50,18 +55,19 @@ export class SSHSession extends BaseSession {
forwardedPorts: ForwardedPort[] = [] forwardedPorts: ForwardedPort[] = []
jumpStream: any jumpStream: any
proxyCommandStream: ProxyCommandStream|null = null proxyCommandStream: ProxyCommandStream|null = null
socksProxyStream: SocksProxyStream|null = null
savedPassword?: string savedPassword?: string
get serviceMessage$ (): Observable<string> { return this.serviceMessage } get serviceMessage$ (): Observable<string> { return this.serviceMessage }
get keyboardInteractivePrompt$ (): Observable<KeyboardInteractivePrompt> { return this.keyboardInteractivePrompt } get keyboardInteractivePrompt$ (): Observable<KeyboardInteractivePrompt> { return this.keyboardInteractivePrompt }
agentPath?: string agentPath?: string
activePrivateKey: string|null = null activePrivateKey: string|null = null
authUsername: string|null = null
private remainingAuthMethods: AuthMethod[] = [] private remainingAuthMethods: AuthMethod[] = []
private serviceMessage = new Subject<string>() private serviceMessage = new Subject<string>()
private keyboardInteractivePrompt = new Subject<KeyboardInteractivePrompt>() private keyboardInteractivePrompt = new Subject<KeyboardInteractivePrompt>()
private keychainPasswordUsed = false private keychainPasswordUsed = false
private authUsername: string|null = null
private passwordStorage: PasswordStorageService private passwordStorage: PasswordStorageService
private ngbModal: NgbModal private ngbModal: NgbModal
@@ -212,7 +218,7 @@ export class SSHSession extends BaseSession {
this.emitKeyboardInteractivePrompt(new KeyboardInteractivePrompt( this.emitKeyboardInteractivePrompt(new KeyboardInteractivePrompt(
name, name,
instructions, instructions,
prompts.map(x => x.prompt), prompts,
finish, finish,
)) ))
})) }))
@@ -231,6 +237,11 @@ export class SSHSession extends BaseSession {
}) })
try { try {
if (this.profile.options.socksProxyHost) {
this.emitServiceMessage(colors.bgBlue.black(' Proxy ') + ` Using ${this.profile.options.socksProxyHost}:${this.profile.options.socksProxyPort}`)
this.socksProxyStream = new SocksProxyStream(this.profile)
await this.socksProxyStream.start()
}
if (this.profile.options.proxyCommand) { if (this.profile.options.proxyCommand) {
this.emitServiceMessage(colors.bgBlue.black(' Proxy command ') + ` Using ${this.profile.options.proxyCommand}`) this.emitServiceMessage(colors.bgBlue.black(' Proxy command ') + ` Using ${this.profile.options.proxyCommand}`)
this.proxyCommandStream = new ProxyCommandStream(this.profile.options.proxyCommand) this.proxyCommandStream = new ProxyCommandStream(this.profile.options.proxyCommand)
@@ -262,7 +273,7 @@ export class SSHSession extends BaseSession {
ssh.connect({ ssh.connect({
host: this.profile.options.host.trim(), host: this.profile.options.host.trim(),
port: this.profile.options.port ?? 22, port: this.profile.options.port ?? 22,
sock: this.proxyCommandStream ?? this.jumpStream, sock: this.proxyCommandStream ?? this.jumpStream ?? this.socksProxyStream,
username: this.authUsername ?? undefined, username: this.authUsername ?? undefined,
tryKeyboard: true, tryKeyboard: true,
agent: this.agentPath, agent: this.agentPath,
@@ -279,9 +290,7 @@ export class SSHSession extends BaseSession {
algorithms, algorithms,
authHandler: (methodsLeft, partialSuccess, callback) => { authHandler: (methodsLeft, partialSuccess, callback) => {
this.zone.run(async () => { this.zone.run(async () => {
const a = await this.handleAuth(methodsLeft) callback(await this.handleAuth(methodsLeft))
console.warn(a)
callback(a)
}) })
}, },
}) })
@@ -362,7 +371,7 @@ export class SSHSession extends BaseSession {
this.ssh.on('x11', async (details, accept, reject) => { this.ssh.on('x11', async (details, accept, reject) => {
this.logger.info(`Incoming X11 connection from ${details.srcIP}:${details.srcPort}`) this.logger.info(`Incoming X11 connection from ${details.srcIP}:${details.srcPort}`)
const displaySpec = process.env.DISPLAY ?? 'localhost:0' const displaySpec = (this.config.store.ssh.x11Display || process.env.DISPLAY) ?? 'localhost:0'
this.logger.debug(`Trying display ${displaySpec}`) this.logger.debug(`Trying display ${displaySpec}`)
const socket = new X11Socket() const socket = new X11Socket()

View File

@@ -6,8 +6,8 @@ export class X11Socket {
private socket: Socket | null = null private socket: Socket | null = null
static resolveDisplaySpec (spec?: string|null): SocketConnectOpts { static resolveDisplaySpec (spec?: string|null): SocketConnectOpts {
// eslint-disable-next-line prefer-const // eslint-disable-next-line prefer-const, @typescript-eslint/no-unused-vars
let [xHost, xDisplay] = /^(.+):(\d+)(?:.(\d+))$/.exec(spec ?? process.env.DISPLAY ?? 'localhost:0') ?? [] let [_, xHost, xDisplay] = /^(.+):(\d+)(?:.(\d+))$/.exec(spec ?? process.env.DISPLAY ?? 'localhost:0') ?? []
if (process.platform === 'win32') { if (process.platform === 'win32') {
xHost ??= 'localhost' xHost ??= 'localhost'
} else { } else {

View File

@@ -2,6 +2,13 @@
# yarn lockfile v1 # yarn lockfile v1
"@luminati-io/socksv5@^0.0.7":
version "0.0.7"
resolved "https://registry.yarnpkg.com/@luminati-io/socksv5/-/socksv5-0.0.7.tgz#87414177d473c97aaefa907a3fe454d62d2fceca"
integrity sha512-paEEbcstjMZb2SvFHsSUOzimkx80/pFmMG5T3XR6Keb4NeBfYWEAtlVeiF39OrHRf9AjpNxahhwzdCAlLXZ4Hw==
dependencies:
ipv6 "*"
"@types/node@*", "@types/node@16.0.1": "@types/node@*", "@types/node@16.0.1":
version "16.0.1" version "16.0.1"
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.0.1.tgz#70cedfda26af7a2ca073fdcc9beb2fff4aa693f8" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.0.1.tgz#70cedfda26af7a2ca073fdcc9beb2fff4aa693f8"
@@ -15,9 +22,9 @@
"@types/node" "*" "@types/node" "*"
"@types/ssh2@^0.5.46": "@types/ssh2@^0.5.46":
version "0.5.48" version "0.5.49"
resolved "https://registry.yarnpkg.com/@types/ssh2/-/ssh2-0.5.48.tgz#0d9e8654a76eaaf4cfeaeb88d74c4489cfcf7aea" resolved "https://registry.yarnpkg.com/@types/ssh2/-/ssh2-0.5.49.tgz#40014f780e3b7e6e667503df414fc884089c76e4"
integrity sha512-cmQu0gp/6RtDXe1r2xXGgi0V0TeCdueDSRMEvBX8cTRT/sSREkUpgCYZLyh+iI8Ql+VNV8Az9toQoYa/IdgHbQ== integrity sha512-ffxhQhJqgTzrw8NxHTgkaDtAmAj2qxCyoves7ztpRgqvzbHcZTpTcm+ATWuuCbPQzxnnF4F3SGGTLGEWTZpwqA==
dependencies: dependencies:
"@types/node" "*" "@types/node" "*"
"@types/ssh2-streams" "*" "@types/ssh2-streams" "*"
@@ -215,13 +222,6 @@ safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
socksv5@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/socksv5/-/socksv5-0.0.6.tgz#1327235ff7e8de21ac434a0a579dc69c3f071061"
integrity sha1-EycjX/fo3iGsQ0oKV53GnD8HEGE=
dependencies:
ipv6 "*"
sprintf@0.1.x: sprintf@0.1.x:
version "0.1.5" version "0.1.5"
resolved "https://registry.yarnpkg.com/sprintf/-/sprintf-0.1.5.tgz#8f83e39a9317c1a502cb7db8050e51c679f6edcf" resolved "https://registry.yarnpkg.com/sprintf/-/sprintf-0.1.5.tgz#8f83e39a9317c1a502cb7db8050e51c679f6edcf"

View File

@@ -1,6 +1,6 @@
{ {
"name": "tabby-telnet", "name": "tabby-telnet",
"version": "1.0.163", "version": "1.0.165-nightly.0",
"description": "Telnet/socket connections for Tabby", "description": "Telnet/socket connections for Tabby",
"keywords": [ "keywords": [
"tabby-builtin-plugin" "tabby-builtin-plugin"

View File

@@ -55,7 +55,7 @@ export class TelnetProfilesService extends ProfileProvider<TelnetProfile> {
] ]
} }
async getNewTabParameters (profile: PartialProfile<TelnetProfile>): Promise<NewTabParameters<TelnetTabComponent>> { async getNewTabParameters (profile: TelnetProfile): Promise<NewTabParameters<TelnetTabComponent>> {
return { return {
type: TelnetTabComponent, type: TelnetTabComponent,
inputs: { profile }, inputs: { profile },

View File

@@ -1,5 +1,4 @@
Tabby Terminal Plugin # Tabby Terminal Plugin
------------------------
* terminal tabs * terminal tabs
* terminal frontends * terminal frontends

View File

@@ -1,6 +1,6 @@
{ {
"name": "tabby-terminal", "name": "tabby-terminal",
"version": "1.0.163", "version": "1.0.165-nightly.0",
"description": "Tabby's terminal emulation core", "description": "Tabby's terminal emulation core",
"keywords": [ "keywords": [
"tabby-builtin-plugin" "tabby-builtin-plugin"

View File

@@ -298,6 +298,7 @@ export class BaseTerminalTabComponent extends BaseTabComponent implements OnInit
this.frontend.resize$.pipe(first()).subscribe(async ({ columns, rows }) => { this.frontend.resize$.pipe(first()).subscribe(async ({ columns, rows }) => {
this.size = { columns, rows } this.size = { columns, rows }
this.frontendReady.next() this.frontendReady.next()
this.frontendReady.complete()
this.config.enabledServices(this.decorators).forEach(decorator => { this.config.enabledServices(this.decorators).forEach(decorator => {
try { try {
@@ -554,6 +555,7 @@ export class BaseTerminalTabComponent extends BaseTabComponent implements OnInit
} }
}) })
this.output.complete() this.output.complete()
this.frontendReady.complete()
super.destroy() super.destroy()
if (this.session?.open) { if (this.session?.open) {

View File

@@ -1,169 +1,203 @@
h3.mb-3 Terminal div
h3.mb-3 Rendering
.form-line(*ngIf='hostApp.platform !== Platform.Web') .form-line(*ngIf='hostApp.platform !== Platform.Web')
.header .header
.title Frontend .title Frontend
.description Switches terminal frontend implementation (experimental) .description Switches terminal frontend implementation (experimental)
select.form-control( select.form-control(
[(ngModel)]='config.store.terminal.frontend', [(ngModel)]='config.store.terminal.frontend',
(ngModelChange)='config.save()', (ngModelChange)='config.save()',
) )
option(value='xterm') xterm option(value='xterm') xterm
option(value='xterm-webgl') xterm (WebGL) option(value='xterm-webgl') xterm (WebGL)
.form-line div.mt-4
.header h3 Keyboard
.title Terminal bell
.btn-group(
[(ngModel)]='config.store.terminal.bell',
(ngModelChange)='config.save()',
ngbRadioGroup
)
label.btn.btn-secondary(ngbButtonLabel)
input(
type='radio',
ngbButton,
[value]='"off"'
)
| Off
label.btn.btn-secondary(ngbButtonLabel)
input(
type='radio',
ngbButton,
[value]='"visual"'
)
| Visual
label.btn.btn-secondary(ngbButtonLabel)
input(
type='radio',
ngbButton,
[value]='"audible"'
)
| Audible
.alert.alert-info.d-flex.align-items-center(*ngIf='config.store.terminal.bell != "audible" && (config.store.terminal.profile || "").startsWith("wsl")') .form-line
.mr-auto WSL terminal bell can only be muted via Volume Mixer .header
button.btn.btn-secondary((click)='openWSLVolumeMixer()') Show Mixer .title Use {{altKeyName}} as the Meta key
.description Lets the shell handle Meta key instead of OS
toggle(
[(ngModel)]='config.store.terminal.altIsMeta',
(ngModelChange)='config.save()',
)
.form-line .form-line
.header .header
.title Right click .title Scroll on input
.description(*ngIf='config.store.terminal.rightClick == "paste"') Long-click for context menu .description Scrolls the terminal to the bottom on user input
.btn-group( toggle(
[(ngModel)]='config.store.terminal.rightClick', [(ngModel)]='config.store.terminal.scrollOnInput',
(ngModelChange)='config.save()', (ngModelChange)='config.save()',
ngbRadioGroup )
)
label.btn.btn-secondary(ngbButtonLabel)
input(
type='radio',
ngbButton,
value='off'
)
| Off
label.btn.btn-secondary(ngbButtonLabel)
input(
type='radio',
ngbButton,
value='menu'
)
| Context menu
label.btn.btn-secondary(ngbButtonLabel)
input(
type='radio',
ngbButton,
value='paste'
)
| Paste
.form-line div.mt-4
.header h3 Mouse
.title Paste on middle-click
toggle( .form-line
[(ngModel)]='config.store.terminal.pasteOnMiddleClick', .header
(ngModelChange)='config.save()', .title Right click
) .description(*ngIf='config.store.terminal.rightClick == "paste"') Long-click for context menu
.btn-group(
[(ngModel)]='config.store.terminal.rightClick',
(ngModelChange)='config.save()',
ngbRadioGroup
)
label.btn.btn-secondary(ngbButtonLabel)
input(
type='radio',
ngbButton,
value='off'
)
| Off
label.btn.btn-secondary(ngbButtonLabel)
input(
type='radio',
ngbButton,
value='menu'
)
| Context menu
label.btn.btn-secondary(ngbButtonLabel)
input(
type='radio',
ngbButton,
value='paste'
)
| Paste
.form-line(*ngIf='hostApp.platform !== Platform.Web') .form-line
.header .header
.title Auto-open a terminal on app start .title Paste on middle-click
toggle( toggle(
[(ngModel)]='config.store.terminal.autoOpen', [(ngModel)]='config.store.terminal.pasteOnMiddleClick',
(ngModelChange)='config.save()', (ngModelChange)='config.save()',
) )
.form-line .form-line
.header .header
.title Restore terminal tabs on app start .title Word separators
.description Double-click selection will stop at these characters
input.form-control(
type='text',
placeholder=' ()[]{}\'"',
[(ngModel)]='config.store.terminal.wordSeparator',
(ngModelChange)='config.save()',
)
toggle( .form-line
[(ngModel)]='config.store.recoverTabs', .header
(ngModelChange)='config.save()', .title Require a key to click links
) .description When enabled, links are only clickable while holding this key
.form-line select.form-control(
.header [(ngModel)]='config.store.clickableLinks.modifier',
.title Bracketed paste (requires shell support) (ngModelChange)='config.save()',
.description Prevents accidental execution of pasted commands )
toggle( option([value]='null') None
[(ngModel)]='config.store.terminal.bracketedPaste', option(value='ctrlKey') Ctrl
(ngModelChange)='config.save()', option(value='altKey') {{altKeyName}}
) option(value='shiftKey') Shift
option(value='metaKey') {{metaKeyName}}
.form-line div.mt-4
.header h3 Clipboard
.title Copy on select
toggle(
[(ngModel)]='config.store.terminal.copyOnSelect',
(ngModelChange)='config.save()',
)
.form-line .form-line
.header .header
.title Scroll on input .title Copy on select
.description Scrolls the terminal to the bottom on user input toggle(
toggle( [(ngModel)]='config.store.terminal.copyOnSelect',
[(ngModel)]='config.store.terminal.scrollOnInput', (ngModelChange)='config.save()',
(ngModelChange)='config.save()', )
)
.form-line .form-line
.header .header
.title Use Alt key as the Meta key .title Bracketed paste (requires shell support)
.description Lets the shell handle Meta key instead of OS .description Prevents accidental execution of pasted commands
toggle( toggle(
[(ngModel)]='config.store.terminal.altIsMeta', [(ngModel)]='config.store.terminal.bracketedPaste',
(ngModelChange)='config.save()', (ngModelChange)='config.save()',
) )
.form-line .form-line
.header .header
.title Word separators .title Warn on multi-line paste
.description Double-click selection will stop at these characters .description Show a confirmation box when pasting multiple lines
input.form-control( toggle(
type='text', [(ngModel)]='config.store.terminal.warnOnMultilinePaste',
placeholder=' ()[]{}\'"', (ngModelChange)='config.save()',
[(ngModel)]='config.store.terminal.wordSeparator', )
(ngModelChange)='config.save()',
)
.form-line div.mt-4
.header h3 Sound
.title Warn on multi-line paste
.description Show a confirmation box when pasting multiple lines
toggle(
[(ngModel)]='config.store.terminal.warnOnMultilinePaste',
(ngModelChange)='config.save()',
)
.form-line(*ngIf='hostApp.platform === Platform.Windows') .form-line
.header .header
.title Set Tabby as %COMSPEC% .title Terminal bell
.description Allows opening .bat files in tabs, but breaks some shells .btn-group(
toggle( [(ngModel)]='config.store.terminal.bell',
[(ngModel)]='config.store.terminal.setComSpec', (ngModelChange)='config.save()',
(ngModelChange)='config.save()', ngbRadioGroup
) )
label.btn.btn-secondary(ngbButtonLabel)
input(
type='radio',
ngbButton,
[value]='"off"'
)
| Off
label.btn.btn-secondary(ngbButtonLabel)
input(
type='radio',
ngbButton,
[value]='"visual"'
)
| Visual
label.btn.btn-secondary(ngbButtonLabel)
input(
type='radio',
ngbButton,
[value]='"audible"'
)
| Audible
.alert.alert-info.d-flex.align-items-center(*ngIf='config.store.terminal.bell != "audible" && (config.store.terminal.profile || "").startsWith("wsl")')
.mr-auto WSL terminal bell can only be muted via Volume Mixer
button.btn.btn-secondary((click)='openWSLVolumeMixer()') Show Mixer
div.mt-4
h3 Startup
.form-line(*ngIf='hostApp.platform !== Platform.Web')
.header
.title Auto-open a terminal on app start
toggle(
[(ngModel)]='config.store.terminal.autoOpen',
(ngModelChange)='config.save()',
)
.form-line
.header
.title Restore terminal tabs on app start
toggle(
[(ngModel)]='config.store.recoverTabs',
(ngModelChange)='config.save()',
)
div.mt-4(*ngIf='hostApp.platform === Platform.Windows')
h3 Windows
.form-line
.header
.title Set Tabby as %COMSPEC%
.description Allows opening .bat files in tabs, but breaks some shells
toggle(
[(ngModel)]='config.store.terminal.setComSpec',
(ngModelChange)='config.save()',
)

View File

@@ -1,5 +1,5 @@
import { Component, HostBinding } from '@angular/core' import { Component, HostBinding } from '@angular/core'
import { ConfigService, HostAppService, Platform, PlatformService } from 'tabby-core' import { ConfigService, HostAppService, Platform, PlatformService, altKeyName, metaKeyName } from 'tabby-core'
/** @hidden */ /** @hidden */
@Component({ @Component({
@@ -7,6 +7,8 @@ import { ConfigService, HostAppService, Platform, PlatformService } from 'tabby-
}) })
export class TerminalSettingsTabComponent { export class TerminalSettingsTabComponent {
Platform = Platform Platform = Platform
altKeyName = altKeyName
metaKeyName = metaKeyName
@HostBinding('class.content-box') true @HostBinding('class.content-box') true

View File

@@ -1,6 +1,6 @@
{ {
"name": "tabby-web-demo", "name": "tabby-web-demo",
"version": "1.0.163", "version": "1.0.165-nightly.0",
"main": "dist/index.js", "main": "dist/index.js",
"typings": "dist/index.d.ts", "typings": "dist/index.d.ts",
"scripts": { "scripts": {

View File

@@ -1,6 +1,6 @@
{ {
"name": "tabby-web", "name": "tabby-web",
"version": "1.0.163", "version": "1.0.165-nightly.0",
"description": "Web-specific bindings", "description": "Web-specific bindings",
"keywords": [ "keywords": [
"tabby-builtin-plugin" "tabby-builtin-plugin"

View File

@@ -17,5 +17,8 @@
"resolutions": { "resolutions": {
"**/util": "^0.12.0" "**/util": "^0.12.0"
}, },
"version": "1.0.163" "scripts": {
"postinstall": "patch-package"
},
"version": "1.0.165-nightly.0"
} }

View File

@@ -84,7 +84,7 @@ Tabby.registerModule('crypto', {
}, },
}) })
Tabby.registerMock('dns', {}) Tabby.registerMock('dns', {})
Tabby.registerMock('socksv5', {}) Tabby.registerMock('@luminati-io/socksv5', {})
Tabby.registerMock('util', require('util/')) Tabby.registerMock('util', require('util/'))
Tabby.registerMock('keytar', { Tabby.registerMock('keytar', {
getPassword: () => null, getPassword: () => null,

View File

@@ -109,7 +109,7 @@ module.exports = options => {
'os', 'os',
'path', 'path',
'readline', 'readline',
'socksv5', '@luminati-io/socksv5',
'stream', 'stream',
'windows-native-registry', 'windows-native-registry',
'windows-process-tree', 'windows-process-tree',

380
yarn.lock
View File

@@ -125,20 +125,20 @@
resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752"
integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg== integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==
"@electron/get@^1.0.1": "@electron/get@^1.13.0":
version "1.12.2" version "1.13.1"
resolved "https://registry.npmjs.org/@electron/get/-/get-1.12.2.tgz" resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.13.1.tgz#42a0aa62fd1189638bd966e23effaebb16108368"
integrity sha512-vAuHUbfvBQpYTJ5wB7uVIDq5c/Ry0fiTBMs7lnEYAo/qXXppIVcWdfBr57u6eRnKdVso7KSiH6p/LbQAG6Izrg== integrity sha512-U5vkXDZ9DwXtkPqlB45tfYnnYBN8PePp1z/XDCupnSpdrxT8/ThCv9WCwPLf9oqiSGZTkH6dx2jDUPuoXpjkcA==
dependencies: dependencies:
debug "^4.1.1" debug "^4.1.1"
env-paths "^2.2.0" env-paths "^2.2.0"
fs-extra "^8.1.0" fs-extra "^8.1.0"
got "^9.6.0" got "^9.6.0"
progress "^2.0.3" progress "^2.0.3"
sanitize-filename "^1.6.2" semver "^6.2.0"
sumchecker "^3.0.1" sumchecker "^3.0.1"
optionalDependencies: optionalDependencies:
global-agent "^2.0.2" global-agent "^3.0.0"
global-tunnel-ng "^2.7.1" global-tunnel-ng "^2.7.1"
"@electron/universal@1.0.5": "@electron/universal@1.0.5":
@@ -172,6 +172,11 @@
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.0.0-beta2.tgz#d66c6e9aad085d003f2cf88244f6adce16e07f78" resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.0.0-beta2.tgz#d66c6e9aad085d003f2cf88244f6adce16e07f78"
integrity sha512-od2COSiBZ70dB5YgZuZEJ3Jy3RHFUhKKjN4dBxNVtmC8DYlyuI4q9wUSzmpLWXQVnRTADRoOLywA9E6SRaS6YQ== integrity sha512-od2COSiBZ70dB5YgZuZEJ3Jy3RHFUhKKjN4dBxNVtmC8DYlyuI4q9wUSzmpLWXQVnRTADRoOLywA9E6SRaS6YQ==
"@gar/promisify@^1.0.1":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210"
integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==
"@humanwhocodes/config-array@^0.5.0": "@humanwhocodes/config-array@^0.5.0":
version "0.5.0" version "0.5.0"
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9"
@@ -238,6 +243,14 @@
"@nodelib/fs.scandir" "2.1.5" "@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0" fastq "^1.6.0"
"@npmcli/fs@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.0.0.tgz#589612cfad3a6ea0feafcb901d29c63fd52db09f"
integrity sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==
dependencies:
"@gar/promisify" "^1.0.1"
semver "^7.3.5"
"@npmcli/move-file@^1.0.1": "@npmcli/move-file@^1.0.1":
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674"
@@ -412,10 +425,12 @@
"@types/node" "*" "@types/node" "*"
"@types/responselike" "*" "@types/responselike" "*"
"@types/debug@^4.1.5": "@types/debug@^4.1.6":
version "4.1.5" version "4.1.7"
resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz" resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82"
integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ== integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==
dependencies:
"@types/ms" "*"
"@types/deep-equal@1.0.1": "@types/deep-equal@1.0.1":
version "1.0.1" version "1.0.1"
@@ -516,6 +531,11 @@
resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256"
integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==
"@types/ms@*":
version "0.7.31"
resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
"@types/node@*", "@types/node@16.0.1": "@types/node@*", "@types/node@16.0.1":
version "16.0.1" version "16.0.1"
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.0.1.tgz#70cedfda26af7a2ca073fdcc9beb2fff4aa693f8" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.0.1.tgz#70cedfda26af7a2ca073fdcc9beb2fff4aa693f8"
@@ -566,10 +586,10 @@
resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz" resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz"
integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==
"@types/yargs@^16.0.2": "@types/yargs@^17.0.1":
version "16.0.4" version "17.0.7"
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.7.tgz#44a484c634761da4391477515a98772b82b5060f"
integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== integrity sha512-OvLKmpKdea1aWtqHv9bxVVcMoT6syAeK+198dfETIFkAevYRGwqh4H+KFxfjUETZuUuE5sQCAFwdOdoHUdo8eg==
dependencies: dependencies:
"@types/yargs-parser" "*" "@types/yargs-parser" "*"
@@ -1014,15 +1034,15 @@ ansistyles@~0.1.3:
resolved "https://registry.npmjs.org/ansistyles/-/ansistyles-0.1.3.tgz" resolved "https://registry.npmjs.org/ansistyles/-/ansistyles-0.1.3.tgz"
integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk=
app-builder-bin@3.5.13: app-builder-bin@3.7.1:
version "3.5.13" version "3.7.1"
resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.5.13.tgz#6dd7f4de34a4e408806f99b8c7d6ef1601305b7e" resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.7.1.tgz#cb0825c5e12efc85b196ac3ed9c89f076c61040e"
integrity sha512-ighVe9G+bT1ENGdp9ecO1P+94vv/f+FUwaI+XkNzeg9bYF8Oi3BQ+mJuxS00UgyHs8luuOzjzC+qnAtdb43Mpg== integrity sha512-ql93vEUq6WsstGXD+SBLSIQw6SNnhbDEM0swzgugytMxLp3rT24Ag/jcC80ZHxiPRTdew1niuR7P3/FCrDqIjw==
app-builder-lib@22.11.7: app-builder-lib@22.14.5:
version "22.11.7" version "22.14.5"
resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.11.7.tgz#c0ad1119ebfbf4189a8280ad693625f5e684dca6" resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.14.5.tgz#a61a50b132b858e98fdc70b6b88994ae99b4f96d"
integrity sha512-pS9/cR4/TnNZVAHZECiSvvwTBzbwblj7KBBZkMKDG57nibq0I1XY8zAaYeHFdlYTyrRcz9JUXbAqJKezya7UFQ== integrity sha512-k3VwKP4kpsnUaXoUkm1s4zaSHPHIMFnN4kPMU9yXaKmE1LfHHqBaEah5bXeTAX5V/BC41wFdg8CF5vOjvgy8Rg==
dependencies: dependencies:
"7zip-bin" "~5.1.1" "7zip-bin" "~5.1.1"
"@develar/schema-utils" "~2.6.5" "@develar/schema-utils" "~2.6.5"
@@ -1030,12 +1050,14 @@ app-builder-lib@22.11.7:
"@malept/flatpak-bundler" "^0.4.0" "@malept/flatpak-bundler" "^0.4.0"
async-exit-hook "^2.0.1" async-exit-hook "^2.0.1"
bluebird-lst "^1.0.9" bluebird-lst "^1.0.9"
builder-util "22.11.7" builder-util "22.14.5"
builder-util-runtime "8.7.7" builder-util-runtime "8.9.1"
chromium-pickle-js "^0.2.0" chromium-pickle-js "^0.2.0"
debug "^4.3.2" debug "^4.3.2"
ejs "^3.1.6" ejs "^3.1.6"
electron-publish "22.11.7" electron-osx-sign "^0.5.0"
electron-publish "22.14.5"
form-data "^4.0.0"
fs-extra "^10.0.0" fs-extra "^10.0.0"
hosted-git-info "^4.0.2" hosted-git-info "^4.0.2"
is-ci "^3.0.0" is-ci "^3.0.0"
@@ -1432,34 +1454,27 @@ buffer@^5.1.0:
base64-js "^1.3.1" base64-js "^1.3.1"
ieee754 "^1.1.13" ieee754 "^1.1.13"
builder-util-runtime@8.7.6: builder-util-runtime@8.9.1:
version "8.7.6" version "8.9.1"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.6.tgz#4b43c96db2bd494ced7694bcd7674934655e8324" resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.9.1.tgz#25f066b3fbc20b3e6236a9b956b1ebb0e33ff66a"
integrity sha512-rj9AIY7CzLSuTOXpToiaQkruYh6UEQ+kYnd5UET22ch8MGClEtIZKXHG14qEiXEr2x4EOKDMxkcTa+9TYaE+ug== integrity sha512-c8a8J3wK6BIVLW7ls+7TRK9igspTbzWmUqxFbgK0m40Ggm6efUbxtWVCGIjc+dtchyr5qAMAUL6iEGRdS/6vwg==
dependencies: dependencies:
debug "^4.3.2" debug "^4.3.2"
sax "^1.2.4" sax "^1.2.4"
builder-util-runtime@8.7.7: builder-util@22.14.5:
version "8.7.7" version "22.14.5"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.7.tgz#6c83cc3abe7a7a5c8b4ec8878f68adc828c07f0d" resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.14.5.tgz#42a18608d2a566c0846e91266464776c8bfb0cc9"
integrity sha512-RUfoXzVrmFFI0K/Oft0CtP1LpTIOlBeLJatt5DePTI0KlxE156am4SGUpqtbbdqZNm++LkV9mX4olBDcXyGPow== integrity sha512-zqIHDFJwmA7jV7SC9aI+33MWwT2mWoijH+Ol9IntNAwuuRXoS+7XeJwnhLBXOhcDBzXT4kDzHnRk4JKeaygEYA==
dependencies:
debug "^4.3.2"
sax "^1.2.4"
builder-util@22.11.7:
version "22.11.7"
resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.11.7.tgz#ae9707afa6a31feafa13c274ac83b4fe28ef1467"
integrity sha512-ihqUe5ey82LM9qqQe0/oIcaSm9w+B9UjcsWJZxJliTBsbU+sErOpDFpHW+sim0veiTF/EIcGUh9HoduWw+l9FA==
dependencies: dependencies:
"7zip-bin" "~5.1.1" "7zip-bin" "~5.1.1"
"@types/debug" "^4.1.5" "@types/debug" "^4.1.6"
"@types/fs-extra" "^9.0.11" "@types/fs-extra" "^9.0.11"
app-builder-bin "3.5.13" app-builder-bin "3.7.1"
bluebird-lst "^1.0.9" bluebird-lst "^1.0.9"
builder-util-runtime "8.7.7" builder-util-runtime "8.9.1"
chalk "^4.1.1" chalk "^4.1.1"
cross-spawn "^7.0.3"
debug "^4.3.2" debug "^4.3.2"
fs-extra "^10.0.0" fs-extra "^10.0.0"
is-ci "^3.0.0" is-ci "^3.0.0"
@@ -1478,11 +1493,12 @@ builtins@^1.0.3:
resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz"
integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og=
cacache@^15.0.5: cacache@^15.2.0:
version "15.2.0" version "15.3.0"
resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.2.0.tgz#73af75f77c58e72d8c630a7a2858cb18ef523389" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb"
integrity sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw== integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==
dependencies: dependencies:
"@npmcli/fs" "^1.0.0"
"@npmcli/move-file" "^1.0.1" "@npmcli/move-file" "^1.0.1"
chownr "^2.0.0" chownr "^2.0.0"
fs-minipass "^2.0.0" fs-minipass "^2.0.0"
@@ -1662,7 +1678,7 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2:
escape-string-regexp "^1.0.5" escape-string-regexp "^1.0.5"
supports-color "^5.3.0" supports-color "^5.3.0"
chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
version "4.1.2" version "4.1.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -1902,7 +1918,7 @@ columnify@~1.5.4:
strip-ansi "^3.0.0" strip-ansi "^3.0.0"
wcwidth "^1.0.0" wcwidth "^1.0.0"
combined-stream@^1.0.5, combined-stream@^1.0.6, combined-stream@~1.0.5, combined-stream@~1.0.6: combined-stream@^1.0.5, combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.5, combined-stream@~1.0.6:
version "1.0.8" version "1.0.8"
resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
@@ -1936,10 +1952,15 @@ commander@^7.0.0, commander@^7.2.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
compare-versions@^3.6.0: compare-version@^0.1.2:
version "3.6.0" version "0.1.2"
resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080"
integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== integrity sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=
compare-versions@^4:
version "4.1.1"
resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-4.1.1.tgz#d881fc9f47d6eb2b8f63109dc5e82dae39c3680c"
integrity sha512-jHQA7zMUpbO+FhPz/kADChZVSk3edtD7c3WkEAjleBtwgAl0ji6wGrYxryaBhViGgq0A+Pb6JPhjhg9jpth4mQ==
concat-map@0.0.1: concat-map@0.0.1:
version "0.0.1" version "0.0.1"
@@ -2061,7 +2082,7 @@ core-js@^2.4.0:
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
core-js@^3.18.2, core-js@^3.6.5: core-js@^3.18.2:
version "3.18.2" version "3.18.2"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.18.2.tgz#63a551e8a29f305cd4123754846e65896619ba5b" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.18.2.tgz#63a551e8a29f305cd4123754846e65896619ba5b"
integrity sha512-zNhPOUoSgoizoSQFdX1MeZO16ORRb9FFQLts8gSYbZU5FcgXhp24iMWMxnOQo5uIaIG7/6FA/IqJPwev1o9ZXQ== integrity sha512-zNhPOUoSgoizoSQFdX1MeZO16ORRb9FFQLts8gSYbZU5FcgXhp24iMWMxnOQo5uIaIG7/6FA/IqJPwev1o9ZXQ==
@@ -2210,7 +2231,7 @@ debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2:
dependencies: dependencies:
ms "2.1.2" ms "2.1.2"
debug@^2.1.3, debug@^2.2.0, debug@^2.6.9: debug@^2.1.3, debug@^2.2.0, debug@^2.6.8, debug@^2.6.9:
version "2.6.9" version "2.6.9"
resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
@@ -2366,14 +2387,14 @@ dir-glob@^3.0.1:
dependencies: dependencies:
path-type "^4.0.0" path-type "^4.0.0"
dmg-builder@22.11.7: dmg-builder@22.14.5:
version "22.11.7" version "22.14.5"
resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.11.7.tgz#5956008c18d40ee72c0ea01ffea9590dbf51df89" resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.14.5.tgz#137c0b55e639badcc0b119eb060e6fa4ed61d948"
integrity sha512-+I+XfP2DODHB6PwFANgpH/WMzzCA5r5XoMvbFCIYjQjJpXlO0XnqQaamzFl2vh/Wz/Qt0d0lJMgRy8gKR3MGdQ== integrity sha512-1GvFGQE332bvPamcMwZDqWqfWfJTyyDLOsHMcGi0zs+Jh7JOn6/zuBkHJIWHdsj2QJbhzLVyd2/ZqttOKv7I8w==
dependencies: dependencies:
app-builder-lib "22.11.7" app-builder-lib "22.14.5"
builder-util "22.11.7" builder-util "22.14.5"
builder-util-runtime "8.7.6" builder-util-runtime "8.9.1"
fs-extra "^10.0.0" fs-extra "^10.0.0"
iconv-lite "^0.6.2" iconv-lite "^0.6.2"
js-yaml "^4.1.0" js-yaml "^4.1.0"
@@ -2484,17 +2505,17 @@ ejs@^3.1.6:
dependencies: dependencies:
jake "^10.6.1" jake "^10.6.1"
electron-builder@^22.11.7: electron-builder@^22.14.5:
version "22.11.7" version "22.14.5"
resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.11.7.tgz#cd97a0d9f6e6d388112e66b4376de431cca4d596" resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.14.5.tgz#3a25547bd4fe3728d4704da80956a794c5c31496"
integrity sha512-yQExSLt7Hbz/P8lLkZDdE/OnJJ7NCX+uiQcV+XIH0TeEZcD87ZnSqBBzGUN5akySU4BXXlrVZKeUsXACWrm5Kw== integrity sha512-N73hSbXFz6Mz5Z6h6C5ly6CB+dUN6k1LuCDJjI8VF47bMXv/QE0HE+Kkb0GPKqTqM7Hsk/yIYX+kHCfSkR5FGg==
dependencies: dependencies:
"@types/yargs" "^16.0.2" "@types/yargs" "^17.0.1"
app-builder-lib "22.11.7" app-builder-lib "22.14.5"
builder-util "22.11.7" builder-util "22.14.5"
builder-util-runtime "8.7.7" builder-util-runtime "8.9.1"
chalk "^4.1.1" chalk "^4.1.1"
dmg-builder "22.11.7" dmg-builder "22.14.5"
fs-extra "^10.0.0" fs-extra "^10.0.0"
is-ci "^3.0.0" is-ci "^3.0.0"
lazy-val "^1.0.5" lazy-val "^1.0.5"
@@ -2593,23 +2614,35 @@ electron-notarize@^1.1.1:
debug "^4.1.1" debug "^4.1.1"
fs-extra "^9.0.1" fs-extra "^9.0.1"
electron-publish@22.11.7: electron-osx-sign@^0.5.0:
version "22.11.7" version "0.5.0"
resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.11.7.tgz#4126cbb08ccf082a2aa7fef89ee629b3a4b8ae9a" resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.5.0.tgz#fc258c5e896859904bbe3d01da06902c04b51c3a"
integrity sha512-A4EhRRNBVz4SPzUlBrPO6BmuyDeI0pyprggPAV9rQ+SDVSnSB/WKPot9JwWMyArkGj3AUUTMNVT6hwZhMvhfqw== integrity sha512-icoRLHzFz/qxzDh/N4Pi2z4yVHurlsCAYQvsCSG7fCedJ4UJXBS6PoQyGH71IfcqKupcKeK7HX/NkyfG+v6vlQ==
dependencies:
bluebird "^3.5.0"
compare-version "^0.1.2"
debug "^2.6.8"
isbinaryfile "^3.0.2"
minimist "^1.2.0"
plist "^3.0.1"
electron-publish@22.14.5:
version "22.14.5"
resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.14.5.tgz#34bcdce671f0e651330db20040d6919c77c94bd6"
integrity sha512-h+NANRdaA0PqGF15GKvorseWPzh1PXa/zx4I37//PIokW8eKIov8ky23foUSb55ZFWUHGpxQJux7y2NCfBtQeg==
dependencies: dependencies:
"@types/fs-extra" "^9.0.11" "@types/fs-extra" "^9.0.11"
builder-util "22.11.7" builder-util "22.14.5"
builder-util-runtime "8.7.7" builder-util-runtime "8.9.1"
chalk "^4.1.1" chalk "^4.1.1"
fs-extra "^10.0.0" fs-extra "^10.0.0"
lazy-val "^1.0.5" lazy-val "^1.0.5"
mime "^2.5.2" mime "^2.5.2"
electron-rebuild@^3.2.3: electron-rebuild@^3.2.5:
version "3.2.3" version "3.2.5"
resolved "https://registry.yarnpkg.com/electron-rebuild/-/electron-rebuild-3.2.3.tgz#2c0b06b7b1a5240fec96f1d368d04222e2590c3d" resolved "https://registry.yarnpkg.com/electron-rebuild/-/electron-rebuild-3.2.5.tgz#a9e82b4259aac33ad449f6959de68ded2c5679f8"
integrity sha512-9oxNmKlDCaf651c+yJWCDIBpF6A9aY+wQtasLEeR5AsPYPuOKEX6xHnC2+WgCLOC94JEpCZznecyC84fbwZq4A== integrity sha512-U9dKi10V9w/BdIVB8a8dTKYLK3Q1d2WZ+Yo5qfM3XX/O4jI7KpnwgvWgGoVv0jTWPC2NlebF00ffWS/8NfUAtA==
dependencies: dependencies:
"@malept/cross-spawn-promise" "^2.0.0" "@malept/cross-spawn-promise" "^2.0.0"
colors "^1.3.3" colors "^1.3.3"
@@ -2618,10 +2651,11 @@ electron-rebuild@^3.2.3:
fs-extra "^10.0.0" fs-extra "^10.0.0"
got "^11.7.0" got "^11.7.0"
lzma-native "^8.0.1" lzma-native "^8.0.1"
node-abi "^2.19.2" node-abi "^3.0.0"
node-api-version "^0.1.4" node-api-version "^0.1.4"
node-gyp "^8.1.0" node-gyp "^8.4.0"
ora "^5.1.0" ora "^5.1.0"
semver "^7.3.5"
tar "^6.0.5" tar "^6.0.5"
yargs "^17.0.1" yargs "^17.0.1"
@@ -2630,12 +2664,12 @@ electron-to-chromium@^1.3.723:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.736.tgz#f632d900a1f788dab22fec9c62ec5c9c8f0c4052" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.736.tgz#f632d900a1f788dab22fec9c62ec5c9c8f0c4052"
integrity sha512-DY8dA7gR51MSo66DqitEQoUMQ0Z+A2DSXFi7tK304bdTVqczCAfUuyQw6Wdg8hIoo5zIxkU1L24RQtUce1Ioig== integrity sha512-DY8dA7gR51MSo66DqitEQoUMQ0Z+A2DSXFi7tK304bdTVqczCAfUuyQw6Wdg8hIoo5zIxkU1L24RQtUce1Ioig==
electron@13.5.1: electron@16.0.2:
version "13.5.1" version "16.0.2"
resolved "https://registry.yarnpkg.com/electron/-/electron-13.5.1.tgz#76c02c39be228532f886a170b472cbd3d93f0d0f" resolved "https://registry.yarnpkg.com/electron/-/electron-16.0.2.tgz#6d0ae3152c410478dfffdbf80852a3840679b8c5"
integrity sha512-ZyxhIhmdaeE3xiIGObf0zqEyCyuIDqZQBv9NKX8w5FNzGm87j4qR0H1+GQg6vz+cA1Nnv1x175Zvimzc0/UwEQ== integrity sha512-kT746yVMztrP4BbT3nrFNcUcfgFu2yelUw6TWBVTy0pju+fBISaqcvoiMrq+8U0vRpoXSu2MJYygOf4T0Det7g==
dependencies: dependencies:
"@electron/get" "^1.0.1" "@electron/get" "^1.13.0"
"@types/node" "^14.6.2" "@types/node" "^14.6.2"
extract-zip "^1.0.3" extract-zip "^1.0.3"
@@ -3190,6 +3224,15 @@ forever-agent@~0.6.1:
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
form-data@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.8"
mime-types "^2.1.12"
form-data@~2.1.1: form-data@~2.1.1:
version "2.1.4" version "2.1.4"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
@@ -3474,13 +3517,12 @@ glob@~7.1.1, glob@~7.1.2:
once "^1.3.0" once "^1.3.0"
path-is-absolute "^1.0.0" path-is-absolute "^1.0.0"
global-agent@^2.0.2: global-agent@^3.0.0:
version "2.1.12" version "3.0.0"
resolved "https://registry.npmjs.org/global-agent/-/global-agent-2.1.12.tgz" resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6"
integrity sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg== integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==
dependencies: dependencies:
boolean "^3.0.1" boolean "^3.0.1"
core-js "^3.6.5"
es6-error "^4.1.1" es6-error "^4.1.1"
matcher "^3.0.0" matcher "^3.0.0"
roarr "^2.15.3" roarr "^2.15.3"
@@ -4355,6 +4397,13 @@ isarray@~1.0.0:
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
isbinaryfile@^3.0.2:
version "3.0.3"
resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80"
integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==
dependencies:
buffer-alloc "^1.2.0"
isbinaryfile@^4.0.8: isbinaryfile@^4.0.8:
version "4.0.8" version "4.0.8"
resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.8.tgz#5d34b94865bd4946633ecc78a026fc76c5b11fcf" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.8.tgz#5d34b94865bd4946633ecc78a026fc76c5b11fcf"
@@ -4658,12 +4707,7 @@ lazy-property@~1.0.0:
resolved "https://registry.npmjs.org/lazy-property/-/lazy-property-1.0.0.tgz" resolved "https://registry.npmjs.org/lazy-property/-/lazy-property-1.0.0.tgz"
integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc= integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc=
lazy-val@^1.0.4: lazy-val@^1.0.4, lazy-val@^1.0.5:
version "1.0.4"
resolved "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.4.tgz"
integrity sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q==
lazy-val@^1.0.5:
version "1.0.5" version "1.0.5"
resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d" resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d"
integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q== integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==
@@ -4949,13 +4993,13 @@ make-fetch-happen@^2.4.13:
socks-proxy-agent "^3.0.0" socks-proxy-agent "^3.0.0"
ssri "^4.1.6" ssri "^4.1.6"
make-fetch-happen@^8.0.14: make-fetch-happen@^9.1.0:
version "8.0.14" version "9.1.0"
resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz#aaba73ae0ab5586ad8eaa68bd83332669393e222" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968"
integrity sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ== integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==
dependencies: dependencies:
agentkeepalive "^4.1.3" agentkeepalive "^4.1.3"
cacache "^15.0.5" cacache "^15.2.0"
http-cache-semantics "^4.1.0" http-cache-semantics "^4.1.0"
http-proxy-agent "^4.0.1" http-proxy-agent "^4.0.1"
https-proxy-agent "^5.0.0" https-proxy-agent "^5.0.0"
@@ -4966,8 +5010,9 @@ make-fetch-happen@^8.0.14:
minipass-fetch "^1.3.2" minipass-fetch "^1.3.2"
minipass-flush "^1.0.5" minipass-flush "^1.0.5"
minipass-pipeline "^1.2.4" minipass-pipeline "^1.2.4"
negotiator "^0.6.2"
promise-retry "^2.0.1" promise-retry "^2.0.1"
socks-proxy-agent "^5.0.0" socks-proxy-agent "^6.0.0"
ssri "^8.0.0" ssri "^8.0.0"
map-age-cleaner@^0.1.1: map-age-cleaner@^0.1.1:
@@ -5237,12 +5282,7 @@ mute-stream@~0.0.4:
resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz" resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz"
integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
nan@^2.13.2, nan@^2.14.1: nan@^2.13.2, nan@^2.14.1, nan@^2.15.0:
version "2.14.2"
resolved "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz"
integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
nan@^2.15.0:
version "2.15.0" version "2.15.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee"
integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==
@@ -5257,6 +5297,11 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
negotiator@^0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
neo-async@^2.6.2: neo-async@^2.6.2:
version "2.6.2" version "2.6.2"
resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz"
@@ -5289,17 +5334,10 @@ no-case@^3.0.4:
lower-case "^2.0.2" lower-case "^2.0.2"
tslib "^2.0.3" tslib "^2.0.3"
node-abi@^2.19.2, node-abi@^2.30.0: node-abi@^3.0.0, node-abi@^3.2.0, node-abi@^3.5.0:
version "2.30.0" version "3.5.0"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.0.tgz#8be53bf3e7945a34eea10e0fc9a5982776cf550b" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.5.0.tgz#26e8b7b251c3260a5ac5ba5aef3b4345a0229248"
integrity sha512-g6bZh3YCKQRdwuO/tSZZYJAw622SjsRfJ2X0Iy4sSOHZ34/sPPdVBn8fev2tj7njzLwuqPw9uMtGsGkO5kIQvg== integrity sha512-LtHvNIBgOy5mO8mPEUtkCW/YCRWYEKshIvqhe1GHHyXEHEB5mgICyYnAcl4qan3uFeRROErKGzatFHPf6kDxWw==
dependencies:
semver "^5.4.1"
node-abi@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.2.0.tgz#c8ec6874f808b4da5fbd56e9506390ce65b152a2"
integrity sha512-/qb92JAb2uiwEQ4aXpVphXfGJU77qdCieXACDaIofcMz+YMPBmnCo8v0OlzJBuXh5QHmMiiI/GKyiCzbjOMn2g==
dependencies: dependencies:
semver "^7.3.5" semver "^7.3.5"
@@ -5355,20 +5393,20 @@ node-gyp@^7.1.0:
tar "^6.0.2" tar "^6.0.2"
which "^2.0.2" which "^2.0.2"
node-gyp@^8.1.0: node-gyp@^8.4.0:
version "8.1.0" version "8.4.0"
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.1.0.tgz#81f43283e922d285c886fb0e0f520a7fd431d8c2" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.0.tgz#6e1112b10617f0f8559c64b3f737e8109e5a8338"
integrity sha512-o2elh1qt7YUp3lkMwY3/l4KF3j/A3fI/Qt4NH+CQQgPJdqGE9y7qnP84cjIWN27Q0jJkrSAhCVDg+wBVNBYdBg== integrity sha512-Bi/oCm5bH6F+FmzfUxJpPaxMEyIhszULGR3TprmTeku8/dMFcdTcypk120NeZqEt54r1BrgEKtm2jJiuIKE28Q==
dependencies: dependencies:
env-paths "^2.2.0" env-paths "^2.2.0"
glob "^7.1.4" glob "^7.1.4"
graceful-fs "^4.2.6" graceful-fs "^4.2.6"
make-fetch-happen "^8.0.14" make-fetch-happen "^9.1.0"
nopt "^5.0.0" nopt "^5.0.0"
npmlog "^4.1.2" npmlog "^4.1.2"
rimraf "^3.0.2" rimraf "^3.0.2"
semver "^7.3.5" semver "^7.3.5"
tar "^6.1.0" tar "^6.1.2"
which "^2.0.2" which "^2.0.2"
node-gyp@~3.6.2: node-gyp@~3.6.2:
@@ -5395,13 +5433,13 @@ node-releases@^1.1.71:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe"
integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==
node-sass@^6.0.1: node-sass@^7.0.0:
version "6.0.1" version "7.0.0"
resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-6.0.1.tgz#cad1ccd0ce63e35c7181f545d8b986f3a9a887fe" resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-7.0.0.tgz#33ee7c2df299d51f682f13d79f3d2a562225788e"
integrity sha512-f+Rbqt92Ful9gX0cGtdYwjTrWAaGURgaK5rZCWOgCNyGWusFYHhbqCCBoFBeat+HKETOU02AyTxNhJV0YZf2jQ== integrity sha512-6yUnsD3L8fVbgMX6nKQqZkjRcG7a/PpmF0pEyeWf+BgbTj2ToJlCYrnUifL2KbjV5gIY22I3oppahBWA3B+jUg==
dependencies: dependencies:
async-foreach "^0.1.3" async-foreach "^0.1.3"
chalk "^1.1.1" chalk "^4.1.2"
cross-spawn "^7.0.3" cross-spawn "^7.0.3"
gaze "^1.0.0" gaze "^1.0.0"
get-stdin "^4.0.1" get-stdin "^4.0.1"
@@ -5410,7 +5448,7 @@ node-sass@^6.0.1:
meow "^9.0.0" meow "^9.0.0"
nan "^2.13.2" nan "^2.13.2"
node-gyp "^7.1.0" node-gyp "^7.1.0"
npmlog "^4.0.0" npmlog "^5.0.0"
request "^2.88.0" request "^2.88.0"
sass-graph "2.2.5" sass-graph "2.2.5"
stdout-stream "^1.4.0" stdout-stream "^1.4.0"
@@ -5657,7 +5695,7 @@ npm@5.1.0:
wrappy "~1.0.2" wrappy "~1.0.2"
write-file-atomic "~2.1.0" write-file-atomic "~2.1.0"
"npmlog@0 || 1 || 2 || 3 || 4", "npmlog@2 || ^3.1.0 || ^4.0.0", npmlog@^4.0.0, npmlog@^4.1.2, npmlog@~4.1.2: "npmlog@0 || 1 || 2 || 3 || 4", "npmlog@2 || ^3.1.0 || ^4.0.0", npmlog@^4.1.2, npmlog@~4.1.2:
version "4.1.2" version "4.1.2"
resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz"
integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
@@ -5667,7 +5705,7 @@ npm@5.1.0:
gauge "~2.7.3" gauge "~2.7.3"
set-blocking "~2.0.0" set-blocking "~2.0.0"
npmlog@5.0.1: npmlog@5.0.1, npmlog@^5.0.0:
version "5.0.1" version "5.0.1"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0"
integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==
@@ -7132,7 +7170,7 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1:
resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sanitize-filename@^1.6.2, sanitize-filename@^1.6.3: sanitize-filename@^1.6.3:
version "1.6.3" version "1.6.3"
resolved "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz" resolved "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz"
integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==
@@ -7278,10 +7316,10 @@ shebang-regex@^3.0.0:
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
shell-quote@^1.7.2: shell-quote@^1.7.3:
version "1.7.2" version "1.7.3"
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123"
integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==
shelljs@0.8.4: shelljs@0.8.4:
version "0.8.4" version "0.8.4"
@@ -7402,14 +7440,14 @@ socks-proxy-agent@^3.0.0:
agent-base "^4.0.1" agent-base "^4.0.1"
socks "^1.1.10" socks "^1.1.10"
socks-proxy-agent@^5.0.0: socks-proxy-agent@^6.0.0:
version "5.0.1" version "6.1.0"
resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.1.0.tgz#869cf2d7bd10fea96c7ad3111e81726855e285c3"
integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== integrity sha512-57e7lwCN4Tzt3mXz25VxOErJKXlPfXmkMLnk310v/jwW20jWRVcgsOit+xNkN3eIEdB47GwnfAEBLacZ/wVIKg==
dependencies: dependencies:
agent-base "^6.0.2" agent-base "^6.0.2"
debug "4" debug "^4.3.1"
socks "^2.3.3" socks "^2.6.1"
socks@^1.1.10: socks@^1.1.10:
version "1.1.10" version "1.1.10"
@@ -7419,7 +7457,7 @@ socks@^1.1.10:
ip "^1.1.4" ip "^1.1.4"
smart-buffer "^1.0.13" smart-buffer "^1.0.13"
socks@^2.3.3: socks@^2.6.1:
version "2.6.1" version "2.6.1"
resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e" resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e"
integrity sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA== integrity sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==
@@ -7869,10 +7907,10 @@ tar@^2.0.0, tar@~2.2.1:
fstream "^1.0.12" fstream "^1.0.12"
inherits "2" inherits "2"
tar@^6.0.2, tar@^6.0.5, tar@^6.1.0: tar@^6.0.2, tar@^6.0.5, tar@^6.1.2:
version "6.1.7" version "6.1.11"
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.7.tgz#c566d1107d38b09e92983a68db5534fc7f6cab42" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621"
integrity sha512-PBoRkOJU0X3lejJ8GaRCsobjXTgFofRDSPdSUhRSdlwJfifRlQBwGXitDItdGFu0/h0XDMCkig0RN1iT7DBxhA== integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==
dependencies: dependencies:
chownr "^2.0.0" chownr "^2.0.0"
fs-minipass "^2.0.0" fs-minipass "^2.0.0"
@@ -8185,10 +8223,10 @@ typedarray@^0.0.6:
resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
typedoc@^0.22.7: typedoc@^0.22.10:
version "0.22.7" version "0.22.10"
resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.22.7.tgz#e5e095ab14676296f4b12ac3355321eae650e447" resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.22.10.tgz#221e1a2b17bcb71817ef027dc4c4969d572e7620"
integrity sha512-ndxxp+tU1Wczvdxp4u2/PvT1qjD6hdFdSdehpORHjE+JXmMkl2bftXCR0upHmsnesBG7VCcr8vfgloGHIH8glQ== integrity sha512-hQYZ4WtoMZ61wDC6w10kxA42+jclWngdmztNZsDvIz7BMJg7F2xnT+uYsUa7OluyKossdFj9E9Ye4QOZKTy8SA==
dependencies: dependencies:
glob "^7.2.0" glob "^7.2.0"
lunr "^2.3.9" lunr "^2.3.9"
@@ -8443,10 +8481,10 @@ vscode-textmate@5.2.0:
resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e"
integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==
watchpack@^2.2.0: watchpack@^2.3.0:
version "2.2.0" version "2.3.0"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.2.0.tgz#47d78f5415fe550ecd740f99fe2882323a58b1ce" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.0.tgz#a41bca3da6afaff31e92a433f4c856a0c25ea0c4"
integrity sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA== integrity sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==
dependencies: dependencies:
glob-to-regexp "^0.4.1" glob-to-regexp "^0.4.1"
graceful-fs "^4.1.2" graceful-fs "^4.1.2"
@@ -8499,15 +8537,15 @@ webpack-merge@^5.7.3:
clone-deep "^4.0.1" clone-deep "^4.0.1"
wildcard "^2.0.0" wildcard "^2.0.0"
webpack-sources@^3.2.0: webpack-sources@^3.2.2:
version "3.2.0" version "3.2.2"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.0.tgz#b16973bcf844ebcdb3afde32eda1c04d0b90f89d" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.2.tgz#d88e3741833efec57c4c789b6010db9977545260"
integrity sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw== integrity sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==
webpack@^5.61.0: webpack@^5.64.4:
version "5.61.0" version "5.64.4"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.61.0.tgz#fa827f0ee9bdfd141dd73c3e891e955ebd52fe7f" resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.64.4.tgz#e1454b6a13009f57cc2c78e08416cd674622937b"
integrity sha512-fPdTuaYZ/GMGFm4WrPi2KRCqS1vDp773kj9S0iI5Uc//5cszsFEDgHNaX4Rj1vobUiU1dFIV3mA9k1eHeluFpw== integrity sha512-LWhqfKjCLoYJLKJY8wk2C3h77i8VyHowG3qYNZiIqD6D0ZS40439S/KVuc/PY48jp2yQmy0mhMknq8cys4jFMw==
dependencies: dependencies:
"@types/eslint-scope" "^3.7.0" "@types/eslint-scope" "^3.7.0"
"@types/estree" "^0.0.50" "@types/estree" "^0.0.50"
@@ -8531,8 +8569,8 @@ webpack@^5.61.0:
schema-utils "^3.1.0" schema-utils "^3.1.0"
tapable "^2.1.1" tapable "^2.1.1"
terser-webpack-plugin "^5.1.3" terser-webpack-plugin "^5.1.3"
watchpack "^2.2.0" watchpack "^2.3.0"
webpack-sources "^3.2.0" webpack-sources "^3.2.2"
which-boxed-primitive@^1.0.1, which-boxed-primitive@^1.0.2: which-boxed-primitive@^1.0.1, which-boxed-primitive@^1.0.2:
version "1.0.2" version "1.0.2"