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": [
"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,

View File

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

View File

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

View File

@@ -2,7 +2,7 @@
<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 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/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/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>
</table>

View File

@@ -1,5 +1,5 @@
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 { exec } from 'mz/child_process'
import * as path from 'path'
@@ -82,7 +82,6 @@ export class Application {
app.commandLine.appendSwitch('disable-http-cache')
app.commandLine.appendSwitch('max-active-webgl-contexts', '9000')
app.commandLine.appendSwitch('lang', 'EN')
app.allowRendererProcessReuse = false
for (const flag of configData.flags || [['force_discrete_gpu', '0']]) {
app.commandLine.appendSwitch(flag[0], flag[1])

View File

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

View File

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

View File

@@ -90,6 +90,7 @@ class PTYDataQueue {
export class PTY {
private pty: nodePTY.IPty
private outputQueue: PTYDataQueue
exited = false
constructor (private id: string, private app: Application, ...args: any[]) {
this.pty = (nodePTY as any).spawn(...args)
@@ -101,7 +102,10 @@ export class PTY {
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 {
@@ -144,7 +148,7 @@ export class PTYManager {
})
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) => {

View File

@@ -3,10 +3,11 @@ import * as glasstron from 'glasstron'
import { Subject, Observable, debounceTime } from 'rxjs'
import { BrowserWindow, app, ipcMain, Rectangle, Menu, screen, BrowserWindowConstructorOptions, TouchBar, nativeImage } from 'electron'
import ElectronConfig = require('electron-config')
import { enable as enableRemote } from '@electron/remote/main'
import * as os from 'os'
import * as path from 'path'
import macOSRelease from 'macos-release'
import * as compareVersions from 'compare-versions'
import { compare as compareVersions } from 'compare-versions'
import type { Application } from './app'
import { parseArgs } from './cli'
@@ -14,7 +15,7 @@ import { loadConfig } from './config'
let DwmEnableBlurBehindWindow: any = null
if (process.platform === 'win32') {
DwmEnableBlurBehindWindow = require('windows-blurbehind').DwmEnableBlurBehindWindow
DwmEnableBlurBehindWindow = require('@tabby-gang/windows-blurbehind').DwmEnableBlurBehindWindow
}
export interface WindowOptions {
@@ -26,7 +27,7 @@ abstract class GlasstronWindow extends BrowserWindow {
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`)
@@ -65,7 +66,6 @@ export class Window {
nodeIntegration: true,
preload: path.join(__dirname, 'sentry.js'),
backgroundThrottling: false,
enableRemoteModule: true,
contextIsolation: false,
},
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.webContents.setVisualZoomLevelLimits(1, 1)

View File

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

View File

@@ -2,6 +2,7 @@ body {
min-height: 100vh;
overflow: hidden;
background: #1D272D;
-webkit-font-smoothing: antialiased;
}
.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 remote from '@electron/remote'
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
@@ -109,7 +110,7 @@ export async function findPlugins (): Promise<PluginInfo[]> {
})
}
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 })
}
}

View File

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

View File

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

View File

@@ -51,7 +51,7 @@ module.exports = {
'source-map-support': 'commonjs source-map-support',
'windows-swca': 'commonjs windows-swca',
'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',
},
plugins: [

View File

@@ -11,10 +11,10 @@
optionalDependencies:
parse5 "^5.0.0"
"@electron/remote@1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-1.2.0.tgz#772eb4c3ac17aaba5a9cf05a09092f6277f5671f"
integrity sha512-C774t2DFVJsa+dxU9Gc2nYzylRZoJ79I0Sxrh8T9cN69fBkntfGbyBEQiD9UfZopqL0CYLzk1anY2Ywhql6h1w==
"@electron/remote@2.0.1":
version "2.0.1"
resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-2.0.1.tgz#810cbc595a21f0f94641eb2d7e8264063a3f84de"
integrity sha512-bGX4/yB2bPZwXm1DsxgoABgH0Cz7oFtXJgkerB8VrStYdTyvhGAULzNLRn9rVmeAuC3VUDXaXpZIlZAZHpsLIA==
"@iarna/cli@^1.2.0":
version "1.2.0"
@@ -25,74 +25,74 @@
update-notifier "^2.2.0"
yargs "^8.0.2"
"@serialport/binding-abstract@9.2.3":
version "9.2.3"
resolved "https://registry.yarnpkg.com/@serialport/binding-abstract/-/binding-abstract-9.2.3.tgz#e7dd273357b6a698af7ad58db6f57f62443a0acb"
integrity sha512-cQs9tbIlG3P0IrOWyVirqlhWuJ7Ms2Zh9m2108z6Y5UW/iVj6wEOiW8EmK9QX9jmJXYllE7wgGgvVozP5oCj3w==
"@serialport/binding-abstract@10.0.0":
version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/binding-abstract/-/binding-abstract-10.0.0.tgz#c5aea29de3721de80640e290f52217d00d927e4e"
integrity sha512-1IwOMDOWqKO0csrTOv95Ah0Av012DZB8C0OF11SmE3eyh8ab1+y4/Yah/8byMAMG7TXw+2LqkNs1oZtOJGlY1Q==
dependencies:
debug "^4.3.2"
"@serialport/binding-mock@9.2.4":
version "9.2.4"
resolved "https://registry.yarnpkg.com/@serialport/binding-mock/-/binding-mock-9.2.4.tgz#8adf34742abcee80919e19f1266423ce1c9407e2"
integrity sha512-dpEhACCs44oQhh6ajJfJdvQdK38Vq0N4W6iD/gdplglDCK7qXRQCMUjJIeKdS/HSEiWkC3bwumUhUufdsOyT4g==
"@serialport/binding-mock@10.0.0":
version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/binding-mock/-/binding-mock-10.0.0.tgz#dc850c3e06f2be4b0c5e0461d2e12a2506cca573"
integrity sha512-X+lJqU/GbXxxqA4b3T+YK9vQLtoNSjRF+hz1gyYHpNxDFX0dSLU1OVnQUZ2Zi8aa6IBdk/4DcuGN0tDNAlmtKg==
dependencies:
"@serialport/binding-abstract" "9.2.3"
"@serialport/binding-abstract" "10.0.0"
debug "^4.3.2"
"@serialport/bindings@9.2.5":
version "9.2.5"
resolved "https://registry.yarnpkg.com/@serialport/bindings/-/bindings-9.2.5.tgz#d49f6e74d780340558c4dc33546a190befd5476b"
integrity sha512-fyabNg56gWbOMuYJc5c45z94sANC/WzTnGeML7Nr1IYVk0SJ1uksN4ETI8Nea9ZAtr4DhNiIMQ3/IOkyof6Tqg==
"@serialport/bindings@10.0.0":
version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/bindings/-/bindings-10.0.0.tgz#718b105adae977886967ab0edc68a067be9183f8"
integrity sha512-t415A6clhsUX0dBRzN0NRN7Yb6y9U1jA4oGzxL2fWCy7XxQq8beI0GnMebEUaZDWKZ7IAVwGnAPUunk7QdlWlA==
dependencies:
"@serialport/binding-abstract" "9.2.3"
"@serialport/parser-readline" "9.2.4"
"@serialport/binding-abstract" "10.0.0"
"@serialport/parser-readline" "10.0.0"
bindings "^1.5.0"
debug "^4.3.2"
nan "^2.15.0"
prebuild-install "^6.1.4"
node-addon-api "4.2.0"
prebuild-install "^7.0.0"
"@serialport/parser-byte-length@9.2.4":
version "9.2.4"
resolved "https://registry.yarnpkg.com/@serialport/parser-byte-length/-/parser-byte-length-9.2.4.tgz#cccdf3a95018d838cee9e7aa86ab3b5ad9e6c00f"
integrity sha512-sQD/iw4ZMU3xW9PLi0/GlvU6Y623jGeWecbMkO7izUo/6P7gtfv1c9ikd5h0kwL8AoAOpQA1lxdHIKox+umBUg==
"@serialport/parser-byte-length@10.0.0":
version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-byte-length/-/parser-byte-length-10.0.0.tgz#05ca2721a50dcdc93f68f3f1e72e10fd82362e84"
integrity sha512-QmZw7oTt6LBHBFbMIPLIZM4WuXpMeK5EpCpXKFtw4a7+yF0yLPwz6uSV2Cf3SvunCfI3eWvucMKpgYNOvglsgA==
"@serialport/parser-cctalk@9.2.4":
version "9.2.4"
resolved "https://registry.yarnpkg.com/@serialport/parser-cctalk/-/parser-cctalk-9.2.4.tgz#441533e6afc789e8cc5a017697632217bb33a861"
integrity sha512-T4TU5vQMwmo9AB3gQLFDWbfJXlW5jd9guEsB/nqKjFHTv0FXPdZ7DQ2TpSp8RnHWxU3GX6kYTaDO20BKzc8GPQ==
"@serialport/parser-cctalk@10.0.0":
version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-cctalk/-/parser-cctalk-10.0.0.tgz#de42e6952c086da3e384756502f9aaca0e97f881"
integrity sha512-jCxzY2IPghNMaJ+GsUgSOoPCI2v1FZg7RvpSJ/b/igK+M/z/p7oRyWf1LqMyjZT7rP4Ha8ZfsQQy5qGzQ3kuzw==
"@serialport/parser-delimiter@9.2.4":
version "9.2.4"
resolved "https://registry.yarnpkg.com/@serialport/parser-delimiter/-/parser-delimiter-9.2.4.tgz#7906162ab5601b52abe7bb011678248f0b50f6c0"
integrity sha512-4nvTAoYAgkxFiXrkI+3CA49Yd43CODjeszh89EK+I9c8wOZ+etZduRCzINYPiy26g7zO+GRAb9FoPCsY+sYcbQ==
"@serialport/parser-delimiter@10.0.0":
version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-delimiter/-/parser-delimiter-10.0.0.tgz#43eb2e3b4c4cf8633eb1200b3af5488ba9a7ecb6"
integrity sha512-s7j+RIxxmyb7xJ3WVcf+IfjFqyoh7k7Edqwqvk2sQLU6UOBNAktNQDHIM/vksQ9QkjJjvl8rIo0YznfBkWbZOQ==
"@serialport/parser-inter-byte-timeout@9.2.4":
version "9.2.4"
resolved "https://registry.yarnpkg.com/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-9.2.4.tgz#0ffb7f1449636f6363e894127d1f819b38e91c3c"
integrity sha512-SOAdvr0oBQIOCXX198hiTlxs4JTKg9j5piapw5tNq52fwDOWdbYrFneT/wN04UTMKaDrJuEvXq6T4rv4j7nJ5A==
"@serialport/parser-inter-byte-timeout@10.0.0":
version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-10.0.0.tgz#07fe7c42e77c9a6379daa6939de55fef99c06ce4"
integrity sha512-ygax3PHuPxi58D3/crCDENSFagvG5EsWjXj6AQRUisExPAAiD02RbZaRqTZluFvDbzMJ/29YJdcdIqnllzGVsw==
"@serialport/parser-readline@9.2.4":
version "9.2.4"
resolved "https://registry.yarnpkg.com/@serialport/parser-readline/-/parser-readline-9.2.4.tgz#15a4ec7e86ddc33ac84faac7bffd4560e4544ccb"
integrity sha512-Z1/qrZTQUVhNSJP1hd9YfDvq0o7d87rNwAjjRKbVpa7Qi51tG5BnKt43IV3NFMyBlVcRe0rnIb3tJu57E0SOwg==
"@serialport/parser-readline@10.0.0":
version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-readline/-/parser-readline-10.0.0.tgz#a87b0d92864e917e07010477057b66efe92d3af9"
integrity sha512-NI3oRY1+fLg94CZm887rgj4V6KyxaJmbmoRgua9bqRv7v/o0SqN9lSQwdYLHQVHpf03zTX9ziuoCV8w5CI3DQQ==
dependencies:
"@serialport/parser-delimiter" "9.2.4"
"@serialport/parser-delimiter" "10.0.0"
"@serialport/parser-ready@9.2.4":
version "9.2.4"
resolved "https://registry.yarnpkg.com/@serialport/parser-ready/-/parser-ready-9.2.4.tgz#e1fc93b9e3057972104db3f9311263397f420f25"
integrity sha512-Pyi94Itjl6qAURwIZr/gmZpMAyTmKXThm6vL5DoAWGQjcRHWB0gwv2TY2v7N+mQLJYUKU3cMnvnATXxHm7xjxw==
"@serialport/parser-ready@10.0.0":
version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-ready/-/parser-ready-10.0.0.tgz#eae67e9c0806f5b2d9750c1ef910a3cedb549119"
integrity sha512-pmMjRVy0wwVSzRt27AtMV/FJdSL6CdKvLUNx+ziDL9Lt30n85ZzrSdYJOwOB63HVIMg8+JRgiyxKNLs+JgMK2g==
"@serialport/parser-regex@9.2.4":
version "9.2.4"
resolved "https://registry.yarnpkg.com/@serialport/parser-regex/-/parser-regex-9.2.4.tgz#e232a84e00f3e8c366fc65ce20f8f4ac14960448"
integrity sha512-sI/cVvPOYz+Dbv4ZdnW16qAwvXiFf/1pGASQdbveRTlgJDdz7sRNlCBifzfTN2xljwvCTZYqiudKvDdC1TepRQ==
"@serialport/parser-regex@10.0.0":
version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-regex/-/parser-regex-10.0.0.tgz#a5dd648baf0952253a995bf0174ba2c19649e279"
integrity sha512-kLvK6bbDtpnVMagCK95m08W+XaXXzJpDvjzrMNSAtpaL+yeBu4XlEhHpt9+9S/MOetbz4vgWdZx2buYyw9iiGQ==
"@serialport/stream@9.2.4":
version "9.2.4"
resolved "https://registry.yarnpkg.com/@serialport/stream/-/stream-9.2.4.tgz#9fce093d0b46ed4599953b4fae81718e050d2b33"
integrity sha512-bLye8Ub4vUFQGmkh8qEqehr7SE7EJs2yDs0h9jzuL5oKi+F34CFmWkEErO8GAOQ8YNn7p6b3GxUgs+0BrHHDZQ==
"@serialport/stream@10.0.0":
version "10.0.0"
resolved "https://registry.yarnpkg.com/@serialport/stream/-/stream-10.0.0.tgz#482580b9bdad468ac2a60c41c7fb933f7dc7436f"
integrity sha512-KFBGWH6BEn4gXUYHEfbywplDX+sVhlL/Yzn/r7hn+qYnwVjhvQo8Vi35CPKESOUKnMKU48sGSUvNaOwU5znw2g==
dependencies:
debug "^4.3.2"
@@ -103,6 +103,13 @@
dependencies:
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":
version "2.7.4"
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"
integrity sha512-hBOx4SUlEPKwRi6PrXuTGw1z6lz0fjsibcWCM378YxsSu/6+C30L6CR49zIBKHiwNWCYIcOLjg4OHKZaFeLAug==
"@types/semver@^7.3.5":
version "7.3.8"
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.8.tgz#508a27995498d7586dcecd77c25e289bfaf90c59"
integrity sha512-D/2EJvAlCEtYFEYmmlGwbGXuK886HzyCc3nZX/tkFTQdEU8jZDAgiv08P162yB17y4ZXZoq7yFAnW4GDBb9Now==
"@types/node@^10.12.18":
version "10.17.60"
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b"
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:
version "1.3.5"
@@ -364,10 +376,10 @@ buffer@^5.5.0:
base64-js "^1.3.1"
ieee754 "^1.1.13"
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==
builder-util-runtime@8.9.1:
version "8.9.1"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.9.1.tgz#25f066b3fbc20b3e6236a9b956b1ebb0e33ff66a"
integrity sha512-c8a8J3wK6BIVLW7ls+7TRK9igspTbzWmUqxFbgK0m40Ggm6efUbxtWVCGIjc+dtchyr5qAMAUL6iEGRdS/6vwg==
dependencies:
debug "^4.3.2"
sax "^1.2.4"
@@ -728,6 +740,13 @@ decompress-response@^4.2.0:
dependencies:
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:
version "0.6.0"
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"
uuid "^3.0.1"
electron-updater@^4.3.9:
version "4.3.9"
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-4.3.9.tgz#247c660bafad7c07935e1b81acd3e9a5fd733154"
integrity sha512-LCNfedSwZfS4Hza+pDyPR05LqHtGorCStaBgVpRnfKxOlZcvpYEX0AbMeH5XUtbtGRoH2V8osbbf2qKPNb7AsA==
electron-updater@^4.6.1:
version "4.6.1"
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-4.6.1.tgz#80ca805c4f51b2e682aac29d18fed75d6a533d32"
integrity sha512-YsU1mHqXLrXXmBMsxhxy24PrbaB8rnpZDPmFa2gOkTYk/Ch13+R0fjsRSpPYvqtskVVY0ux8fu+HnUkVkqc7og==
dependencies:
"@types/semver" "^7.3.5"
builder-util-runtime "8.7.5"
"@types/semver" "^7.3.6"
builder-util-runtime "8.9.1"
fs-extra "^10.0.0"
js-yaml "^4.1.0"
lazy-val "^1.0.4"
lazy-val "^1.0.5"
lodash.escaperegexp "^4.1.2"
lodash.isequal "^4.5.0"
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"
integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc=
lazy-val@^1.0.4:
lazy-val@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d"
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"
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:
version "3.0.4"
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"
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:
version "1.0.2"
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"
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"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf"
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"
node-abi@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.3.0.tgz#62cc0d9c7976bd415889aba622ab8f5562082028"
integrity sha512-/+2sCVPXmj07GY/l0ggRr7+trqzX7F9d4QVfSArqIVYmRzc/LkXKr5FlRO6U8uZ/gVVclDDaBxBNITj1z1Z/Zw==
version "3.5.0"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.5.0.tgz#26e8b7b251c3260a5ac5ba5aef3b4345a0229248"
integrity sha512-LtHvNIBgOy5mO8mPEUtkCW/YCRWYEKshIvqhe1GHHyXEHEB5mgICyYnAcl4qan3uFeRROErKGzatFHPf6kDxWw==
dependencies:
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"
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:
version "3.1.0"
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"
which-pm-runs "^1.0.0"
prebuild-install@^6.1.4:
version "6.1.4"
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-6.1.4.tgz#ae3c0142ad611d58570b89af4986088a4937e00f"
integrity sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==
prebuild-install@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.0.0.tgz#3c5ce3902f1cb9d6de5ae94ca53575e4af0c1574"
integrity sha512-IvSenf33K7JcgddNz2D5w521EgO+4aMMjFt73Uk9FRzQ7P+QZPKrp7qPsDydsSwjGt3T5xRNnM1bj1zMTD5fTA==
dependencies:
detect-libc "^1.0.3"
expand-template "^2.0.3"
@@ -2742,11 +2766,11 @@ prebuild-install@^6.1.4:
minimist "^1.2.3"
mkdirp-classic "^0.5.3"
napi-build-utils "^1.0.1"
node-abi "^2.21.0"
node-abi "^3.3.0"
npmlog "^4.0.1"
pump "^3.0.0"
rc "^1.2.7"
simple-get "^3.0.3"
simple-get "^4.0.0"
tar-fs "^2.0.0"
tunnel-agent "^0.6.0"
@@ -3123,21 +3147,21 @@ serialize-error@^5.0.0:
dependencies:
type-fest "^0.8.0"
serialport@^9.2.5:
version "9.2.5"
resolved "https://registry.yarnpkg.com/serialport/-/serialport-9.2.5.tgz#23e81588336e844e8d7071742a00f501eec9f2b1"
integrity sha512-nsDsD2GN/43T2a8jQYr1HH76gmDZ575Ts8FOdcBRUY8ecaI16BPbXa612cPPkQjOfg28+KL5qtQL9c0vvTaidg==
serialport@^10.0.0:
version "10.0.0"
resolved "https://registry.yarnpkg.com/serialport/-/serialport-10.0.0.tgz#75ec9fd25683dc1acb9d8e24433608f641b0b9e0"
integrity sha512-fqOs6u4buZLbTpAPYZP4j2qwcOJ5Jxtg0x+llJFuMc4AVwrxx+iQc68/46aHCr+qJ2Wo2N86AZ/DDY5acSOODA==
dependencies:
"@serialport/binding-mock" "9.2.4"
"@serialport/bindings" "9.2.5"
"@serialport/parser-byte-length" "9.2.4"
"@serialport/parser-cctalk" "9.2.4"
"@serialport/parser-delimiter" "9.2.4"
"@serialport/parser-inter-byte-timeout" "9.2.4"
"@serialport/parser-readline" "9.2.4"
"@serialport/parser-ready" "9.2.4"
"@serialport/parser-regex" "9.2.4"
"@serialport/stream" "9.2.4"
"@serialport/binding-mock" "10.0.0"
"@serialport/bindings" "10.0.0"
"@serialport/parser-byte-length" "10.0.0"
"@serialport/parser-cctalk" "10.0.0"
"@serialport/parser-delimiter" "10.0.0"
"@serialport/parser-inter-byte-timeout" "10.0.0"
"@serialport/parser-readline" "10.0.0"
"@serialport/parser-ready" "10.0.0"
"@serialport/parser-regex" "10.0.0"
"@serialport/stream" "10.0.0"
debug "^4.3.2"
set-blocking@^2.0.0, set-blocking@~2.0.0:
@@ -3183,6 +3207,15 @@ simple-get@^3.0.3:
once "^1.3.1"
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:
version "1.1.6"
resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
@@ -3720,11 +3753,6 @@ widest-line@^2.0.0:
dependencies:
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:
version "3.1.0"
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",
"axios": "^0.21.1",
"clone-deep": "^4.0.1",
"compare-versions": "^3.6.0",
"compare-versions": "^4",
"core-js": "^3.18.2",
"cross-env": "7.0.3",
"css-loader": "^6.5.1",
"deep-equal": "2.0.5",
"electron": "13.5.1",
"electron-builder": "^22.11.7",
"electron": "16.0.2",
"electron-builder": "^22.14.5",
"electron-download": "^4.1.1",
"electron-installer-snap": "^5.1.0",
"electron-notarize": "^1.1.1",
"electron-rebuild": "^3.2.3",
"electron-rebuild": "^3.2.5",
"eslint": "^7.32.0",
"file-loader": "^6.2.0",
"graceful-fs": "^4.2.8",
@@ -46,7 +46,7 @@
"ngx-sortablejs": "^11.1.0",
"ngx-toastr": "^14.0.0",
"node-abi": "^3.2.0",
"node-sass": "^6.0.1",
"node-sass": "^7.0.0",
"npmlog": "5.0.1",
"npx": "^10.2.2",
"patch-package": "^6.4.7",
@@ -57,7 +57,7 @@
"pug-static-loader": "2.0.0",
"raw-loader": "4.0.2",
"sass-loader": "^12.3.0",
"shell-quote": "^1.7.2",
"shell-quote": "^1.7.3",
"shelljs": "0.8.4",
"slugify": "^1.6.1",
"sortablejs": "^1.14.0",
@@ -69,11 +69,11 @@
"svg-inline-loader": "^0.8.2",
"ts-loader": "^9.2.3",
"tslib": "^2.3.1",
"typedoc": "^0.22.7",
"typedoc": "^0.22.10",
"typescript": "^4.3.5",
"utils-decorators": "^1.10.4",
"val-loader": "4.0.0",
"webpack": "^5.61.0",
"webpack": "^5.64.4",
"webpack-bundle-analyzer": "^4.5.0",
"webpack-cli": "^4.9.1",
"yaml-loader": "0.6.0",
@@ -81,7 +81,7 @@
},
"resolutions": {
"lzma-native": "^8.0.0",
"*/node-abi": "^2.30.0",
"*/node-abi": "^3.5.0",
"**/graceful-fs": "^4.2.4"
},
"scripts": {
@@ -91,10 +91,9 @@
"start": "cross-env TABBY_DEV=1 electron app --debug --inspect",
"start:prod": "electron app --debug",
"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",
"postinstall": "node ./scripts/install-deps.js",
"patch": "patch-package; cd web; patch-package"
"postinstall": "patch-package && node ./scripts/install-deps.js"
},
"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
index f241acc..2bddb7f 100644
index 363f32c..a0434a9 100644
--- a/node_modules/app-builder-lib/out/appInfo.js
+++ b/node_modules/app-builder-lib/out/appInfo.js
@@ -100,9 +100,7 @@ class AppInfo {
@@ -12,4 +12,4 @@ index f241acc..2bddb7f 100644
+ return 'tabby-terminal'
}
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 vars = require('./vars')
const log = require('npmlog')
const { execSync } = require('child_process')
vars.allPackages.forEach(plugin => {
log.info('bump', plugin)
sh.cd(plugin)
sh.exec('npm --no-git-tag-version version ' + vars.version)
sh.exec('npm publish')
execSync('npm publish', { stdio: 'inherit' })
sh.cd('..')
})

View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "tabby-community-color-schemes",
"version": "1.0.163",
"version": "1.0.165-nightly.0",
"description": "Community color schemes for Tabby",
"keywords": [
"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
* toolbar UI

View File

@@ -1,6 +1,6 @@
{
"name": "tabby-core",
"version": "1.0.163",
"version": "1.0.165-nightly.0",
"description": "Tabby core",
"keywords": [
"tabby-builtin-plugin"
@@ -19,7 +19,6 @@
"devDependencies": {
"bootstrap": "^4.1.3",
"deepmerge": "^4.1.1",
"electron-updater": "^4.0.6",
"js-yaml": "^4.0.0",
"mixpanel": "^0.13.0",
"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 { HomeBaseService } from '../services/homeBase.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 { ThemesService } from '../services/themes.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 getNewTabParameters (profile: PartialProfile<P>): Promise<NewTabParameters<BaseTabComponent>>
abstract getNewTabParameters (profile: P): Promise<NewTabParameters<BaseTabComponent>>
getSuggestedName (profile: PartialProfile<P>): string|null {
return null

View File

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

View File

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

View File

@@ -29,3 +29,4 @@
)
.title.mr-2 {{getOptionText(option)}}
.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;
border-top-left-radius: 0;
border-top-right-radius: 0;
padding: 10px 15px;
}
.group-header {
padding: 0 1rem;
margin: 20px 0 10px;
margin: 15px 0 10px;
font-weight: bold;
&:first-child {
margin-top: 5px;
}
}
.icon {
@@ -30,4 +36,5 @@
input {
border-radius: 0;
border: none;
}

View File

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

View File

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

View File

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

View File

@@ -209,6 +209,6 @@ export class AppHotkeyProvider extends HotkeyProvider {
}
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())
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 {
@@ -317,6 +310,10 @@ export class AppService {
if (checkCanClose && !await tab.canClose()) {
return
}
const token = await this.tabRecovery.getFullRecoveryToken(tab)
if (token) {
this.closedTabsStack.push(token)
}
tab.destroy()
}

View File

@@ -27,6 +27,14 @@ export class HomeBaseService {
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 {
let body = `Version: ${this.appVersion}\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
} else if (event.key === 'Shift') {
key = 'Shift'
} else if (event.key === '`') {
key = '`'
} else if (event.key === '~') {
key = '~'
} else {
key = event.code
if (REGEX_LATIN_KEYNAME.test(event.key)) {
@@ -54,7 +58,6 @@ export function getKeyName (event: KeyEventData): KeyName {
Slash: '/',
Backslash: '\\',
IntlBackslash: '`',
Backquote: '~', // Electron says it's the tilde
Minus: '-',
Equal: '=',
Semicolon: ';',

View File

@@ -381,3 +381,8 @@ toggle {
start-page footer {
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 {
transition: 0.0625s background;
// transition: 0.0625s background ease;
i + * {
margin-left: 10px;
@@ -232,7 +232,7 @@ hotkey-input-modal {
.list-group.list-group-flush .list-group-item {
background: transparent;
border-color: rgba(0, 0, 0, 0.2);
border: none;
&:not(:last-child) {
border-bottom: none;
@@ -247,11 +247,16 @@ hotkey-input-modal {
.list-group-light {
.list-group-item {
border: none;
border: none !important;
outline: none !important;
background: transparent;
border-radius: $border-radius;
margin: 0 !important;
&.list-group-item-action {
&: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-decoration: none;
$component-active-color: $white;
$component-active-bg: #2f3a42;
$component-active-color: #4fadff;
$component-active-bg: #0059a559;
$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-x: 1rem;
@@ -197,3 +197,7 @@ $progress-height: 3px;
$alert-bg-level: 9;
$alert-border-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
"@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:
version "6.0.2"
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"
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:
version "4.3.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
@@ -39,51 +26,16 @@ debug@4:
dependencies:
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:
version "4.2.2"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
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":
version "6.3.0"
resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.3.0.tgz#dff53cfb3f104c9e422f346d53be8dbcc971bf11"
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:
version "5.0.0"
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"
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"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
dependencies:
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:
version "0.13.0"
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"
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:
version "1.3.0"
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"
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:
version "1.0.2"
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"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
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",
"version": "1.0.163",
"version": "1.0.165-nightly.0",
"description": "Electron-specific bindings",
"keywords": [
"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

View File

@@ -1,6 +1,6 @@
{
"name": "tabby-local",
"version": "1.0.163",
"version": "1.0.165-nightly.0",
"description": "Tabby's local shell plugin",
"keywords": [
"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)
if (!profile.options?.cwd) {
if (!profile.options.cwd) {
if (this.app.activeTab instanceof TerminalTabComponent && this.app.activeTab.session) {
profile.options ??= {}
profile.options.cwd = await this.app.activeTab.session.getWorkingDirectory() ?? undefined
}
if (this.app.activeTab instanceof SplitTabComponent) {
const focusedTab = this.app.activeTab.getFocusedTab()
if (focusedTab instanceof TerminalTabComponent && focusedTab.session) {
profile.options ??= {}
profile.options.cwd = await focusedTab.session.getWorkingDirectory() ?? undefined
}
}

View File

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

View File

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

View File

@@ -24,9 +24,9 @@ ul.nav-tabs.mb-2(ngbNav, #nav='ngbNav')
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)')
ngb-panel(*ngIf='!isAlreadyInstalled(plugin)', cardClass='bg-dark')
ngb-panel(*ngIf='!isAlreadyInstalled(plugin)')
ng-template(ngbPanelTitle)
.text-left
strong.d-block {{plugin.name}}
@@ -57,9 +57,9 @@ ul.nav-tabs.mb-2(ngbNav, #nav='ngbNav')
li(ngbNavItem)
a(ngbNavLink) Installed
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')
ngb-panel(cardClass='bg-dark')
ngb-panel
ng-template(ngbPanelTitle)
.text-left.mr-auto
div

View File

@@ -3,13 +3,10 @@ import { compare as semverCompare } from 'semver'
import { Observable, from, forkJoin, map } from 'rxjs'
import { Injectable, Inject } from '@angular/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 BLACKLIST = [
'terminus-shell-selector', // superseded by profiles
'terminus-scrollbar', // now useless
]
@Injectable({ providedIn: 'root' })
export class PluginManagerService {
@@ -69,7 +66,7 @@ export class PluginManagerService {
}))
),
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 => {
const mapping: Record<string, PluginInfo[]> = {}
for (const p of plugins) {

View File

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

View File

@@ -20,6 +20,7 @@ export interface SerialProfileOptions extends StreamProcessingOptions, LoginScri
xon?: boolean
xoff?: boolean
xany?: boolean
slowSend?: boolean
}
export const BAUD_RATES = [
@@ -123,7 +124,13 @@ export class SerialSession extends BaseSession {
}
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> {

View File

@@ -77,6 +77,12 @@ ul.nav-tabs(ngbNav, #nav='ngbNav')
.title 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)
a(ngbNavLink) Login scripts
ng-template(ngbNavContent)

View File

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

View File

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

View File

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

View File

@@ -32,7 +32,7 @@ ul.nav-tabs(ngbNav, #nav='ngbNav')
i.fas.fa-fw.fa-plus
| 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(*ngIf='isGroupVisible(group)')
.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
.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(
(click)='editDefaults(provider)',
*ngFor='let provider of profileProviders'

View File

@@ -100,9 +100,13 @@ export class ProfilesSettingsTabComponent extends BaseComponent {
if (!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
const result = await modal.result
const result = await modal.result.catch(() => null)
if (!result) {
return
}
// Fully replace the config
for (const k in profile) {
@@ -207,7 +211,7 @@ export class ProfilesSettingsTabComponent extends BaseComponent {
}
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 {

View File

@@ -6,45 +6,66 @@
| Application
ng-template(ngbNavContent)
.content-box
.tabby-logo.mt-3
h1.tabby-title Tabby
sup α
.row
.col-12.col-md-6
.logo-area
.tabby-logo.mt-3
.text-center
.text-muted {{homeBase.appVersion}}
h1.tabby-title Tabby
sup α
.text-muted {{homeBase.appVersion}}
.mb-5.mt-3
button.btn.btn-secondary.mr-3.mb-2((click)='homeBase.openGitHub()')
i.fab.fa-github
span GitHub
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'
button.btn.btn-secondary.mt-3.mb-2(
*ngIf='!updateAvailable && hostApp.platform !== Platform.Web',
(click)='checkForUpdates()',
[disabled]='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(
*ngIf='updateAvailable',
(click)='updater.update()',
)
i.fas.fa-sync
span Update
button.btn.btn-info.mt-3.mb-2(
*ngIf='updateAvailable',
(click)='updater.update()',
)
i.fas.fa-sync
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()')
.header
.title Shell integration

View File

@@ -9,6 +9,24 @@
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 {
display: flex;
min-height: 0;
@@ -16,7 +34,7 @@
> .nav {
padding: 20px 10px;
width: 212px;
width: 222px;
flex: none;
overflow-y: auto;
flex-wrap: nowrap;

View File

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

View File

@@ -30,6 +30,8 @@ export interface SSHProfileOptions extends LoginScriptsOptions {
algorithms?: Record<string, string[]>
proxyCommand?: string
forwardedPorts?: ForwardedPortConfig[]
socksProxyHost?: string
socksProxyPort?: number
}
export enum PortForwardType {
@@ -44,10 +46,15 @@ export interface ForwardedPortConfig {
port: number
targetAddress: string
targetPort: number
description: string
}
export const ALGORITHM_BLACKLIST = [
export let ALGORITHM_BLACKLIST = [
// cause native crashes in node crypto, use EC instead
'diffie-hellman-group-exchange-sha256',
'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
.ml-2 {{prompt.name}}
.prompt-text {{prompt.prompts[step]}}
.prompt-text {{prompt.prompts[step].prompt}}
input.form-control.mt-2(
#input,

View File

@@ -15,7 +15,7 @@ export class KeyboardInteractiveAuthComponent {
@ViewChild('input') input: ElementRef
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 {

View File

@@ -16,7 +16,7 @@
div(*ngIf='!sftp') Connecting
div(*ngIf='sftp')
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(
*ngIf='path !== "/"',
(click)='goUp()'

View File

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

View File

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

View File

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

View File

@@ -2,15 +2,48 @@ ul.nav-tabs(ngbNav, #nav='ngbNav')
li(ngbNavItem)
a(ngbNavLink) General
ng-template(ngbNavContent)
.d-flex.w-100(*ngIf='!useProxyCommand')
.form-group.w-100.mr-4
.d-flex.w-100.mt-3
.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
input.form-control(
type='text',
[(ngModel)]='profile.options.host',
)
.form-group
.form-group(*ngIf='connectionMode !== "proxyCommand"')
label Port
input.form-control(
type='number',
@@ -18,8 +51,28 @@ ul.nav-tabs(ngbNav, #nav='ngbNav')
[(ngModel)]='profile.options.port',
)
.alert.alert-info(*ngIf='useProxyCommand')
.mr-auto Using a proxy command instead of a network connection
.form-group(*ngIf='connectionMode === "jumpHost"')
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
label Username
@@ -93,13 +146,6 @@ ul.nav-tabs(ngbNav, #nav='ngbNav')
li(ngbNavItem)
a(ngbNavLink) Advanced
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')
.header
.title X11 forwarding
@@ -143,19 +189,6 @@ ul.nav-tabs(ngbNav, #nav='ngbNav')
[(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)
a(ngbNavLink) Ciphers
ng-template(ngbNavContent)

View File

@@ -16,7 +16,8 @@ export class SSHProfileSettingsComponent {
Platform = Platform
profile: SSHProfile
hasSavedPassword: boolean
useProxyCommand: boolean
connectionMode: 'direct'|'proxyCommand'|'jumpHost'|'socksProxy' = 'direct'
supportedAlgorithms = supportedAlgorithms
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.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) {
try {
this.hasSavedPassword = !!await this.passwordStorage.loadPassword(this.profile)
@@ -90,9 +98,18 @@ export class SSHProfileSettingsComponent {
.map(([key, _]) => key)
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
}
if (this.connectionMode !== 'socksProxy') {
this.profile.options.socksProxyHost = undefined
this.profile.options.socksProxyPort = undefined
}
this.loginScriptsSettings?.save()
}
@@ -104,4 +121,13 @@ export class SSHProfileSettingsComponent {
onForwardRemoved (fw: ForwardedPortConfig) {
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,
forwardedPorts: [],
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 {
type: SSHTabComponent,
inputs: { profile },

View File

@@ -1,4 +1,5 @@
import * as shellQuote from 'shell-quote'
import socksv5 from '@luminati-io/socksv5'
import { Duplex } from 'stream'
import { Injectable } from '@angular/core'
import { spawn } from 'child_process'
@@ -28,8 +29,8 @@ export class SSHService {
return this.detectedWinSCPPath ?? this.config.store.ssh.winSCPPath
}
async getWinSCPURI (profile: SSHProfile, cwd?: string): Promise<string> {
let uri = `scp://${profile.options.user}`
async getWinSCPURI (profile: SSHProfile, cwd?: string, username?: string): Promise<string> {
let uri = `scp://${username ?? profile.options.user}`
const password = await this.passwordStorage.loadPassword(profile)
if (password) {
uri += ':' + encodeURIComponent(password)
@@ -43,7 +44,7 @@ export class SSHService {
if (!path) {
return
}
const args = [await this.getWinSCPURI(session.profile)]
const args = [await this.getWinSCPURI(session.profile, undefined, session.authUsername ?? undefined)]
if (session.activePrivateKey) {
args.push('/privatekey')
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 {
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 { ForwardedPortConfig, PortForwardType } from '../api'
@@ -9,6 +9,7 @@ export class ForwardedPort implements ForwardedPortConfig {
port: number
targetAddress: string
targetPort: number
description: string
private listener: Server|null = null

View File

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

View File

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

View File

@@ -2,6 +2,13 @@
# 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":
version "16.0.1"
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.0.1.tgz#70cedfda26af7a2ca073fdcc9beb2fff4aa693f8"
@@ -15,9 +22,9 @@
"@types/node" "*"
"@types/ssh2@^0.5.46":
version "0.5.48"
resolved "https://registry.yarnpkg.com/@types/ssh2/-/ssh2-0.5.48.tgz#0d9e8654a76eaaf4cfeaeb88d74c4489cfcf7aea"
integrity sha512-cmQu0gp/6RtDXe1r2xXGgi0V0TeCdueDSRMEvBX8cTRT/sSREkUpgCYZLyh+iI8Ql+VNV8Az9toQoYa/IdgHbQ==
version "0.5.49"
resolved "https://registry.yarnpkg.com/@types/ssh2/-/ssh2-0.5.49.tgz#40014f780e3b7e6e667503df414fc884089c76e4"
integrity sha512-ffxhQhJqgTzrw8NxHTgkaDtAmAj2qxCyoves7ztpRgqvzbHcZTpTcm+ATWuuCbPQzxnnF4F3SGGTLGEWTZpwqA==
dependencies:
"@types/node" "*"
"@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"
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:
version "0.1.5"
resolved "https://registry.yarnpkg.com/sprintf/-/sprintf-0.1.5.tgz#8f83e39a9317c1a502cb7db8050e51c679f6edcf"

View File

@@ -1,6 +1,6 @@
{
"name": "tabby-telnet",
"version": "1.0.163",
"version": "1.0.165-nightly.0",
"description": "Telnet/socket connections for Tabby",
"keywords": [
"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 {
type: TelnetTabComponent,
inputs: { profile },

View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "tabby-terminal",
"version": "1.0.163",
"version": "1.0.165-nightly.0",
"description": "Tabby's terminal emulation core",
"keywords": [
"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.size = { columns, rows }
this.frontendReady.next()
this.frontendReady.complete()
this.config.enabledServices(this.decorators).forEach(decorator => {
try {
@@ -554,6 +555,7 @@ export class BaseTerminalTabComponent extends BaseTabComponent implements OnInit
}
})
this.output.complete()
this.frontendReady.complete()
super.destroy()
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')
.header
.title Frontend
.description Switches terminal frontend implementation (experimental)
.form-line(*ngIf='hostApp.platform !== Platform.Web')
.header
.title Frontend
.description Switches terminal frontend implementation (experimental)
select.form-control(
[(ngModel)]='config.store.terminal.frontend',
(ngModelChange)='config.save()',
)
option(value='xterm') xterm
option(value='xterm-webgl') xterm (WebGL)
select.form-control(
[(ngModel)]='config.store.terminal.frontend',
(ngModelChange)='config.save()',
)
option(value='xterm') xterm
option(value='xterm-webgl') xterm (WebGL)
.form-line
.header
.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
div.mt-4
h3 Keyboard
.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
.form-line
.header
.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
.header
.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
.header
.title Scroll on input
.description Scrolls the terminal to the bottom on user input
toggle(
[(ngModel)]='config.store.terminal.scrollOnInput',
(ngModelChange)='config.save()',
)
.form-line
.header
.title Paste on middle-click
div.mt-4
h3 Mouse
toggle(
[(ngModel)]='config.store.terminal.pasteOnMiddleClick',
(ngModelChange)='config.save()',
)
.form-line
.header
.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')
.header
.title Auto-open a terminal on app start
.form-line
.header
.title Paste on middle-click
toggle(
[(ngModel)]='config.store.terminal.autoOpen',
(ngModelChange)='config.save()',
)
toggle(
[(ngModel)]='config.store.terminal.pasteOnMiddleClick',
(ngModelChange)='config.save()',
)
.form-line
.header
.title Restore terminal tabs on app start
.form-line
.header
.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(
[(ngModel)]='config.store.recoverTabs',
(ngModelChange)='config.save()',
)
.form-line
.header
.title Require a key to click links
.description When enabled, links are only clickable while holding this key
.form-line
.header
.title Bracketed paste (requires shell support)
.description Prevents accidental execution of pasted commands
toggle(
[(ngModel)]='config.store.terminal.bracketedPaste',
(ngModelChange)='config.save()',
)
select.form-control(
[(ngModel)]='config.store.clickableLinks.modifier',
(ngModelChange)='config.save()',
)
option([value]='null') None
option(value='ctrlKey') Ctrl
option(value='altKey') {{altKeyName}}
option(value='shiftKey') Shift
option(value='metaKey') {{metaKeyName}}
.form-line
.header
.title Copy on select
toggle(
[(ngModel)]='config.store.terminal.copyOnSelect',
(ngModelChange)='config.save()',
)
div.mt-4
h3 Clipboard
.form-line
.header
.title Scroll on input
.description Scrolls the terminal to the bottom on user input
toggle(
[(ngModel)]='config.store.terminal.scrollOnInput',
(ngModelChange)='config.save()',
)
.form-line
.header
.title Copy on select
toggle(
[(ngModel)]='config.store.terminal.copyOnSelect',
(ngModelChange)='config.save()',
)
.form-line
.header
.title Use Alt key 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
.header
.title Bracketed paste (requires shell support)
.description Prevents accidental execution of pasted commands
toggle(
[(ngModel)]='config.store.terminal.bracketedPaste',
(ngModelChange)='config.save()',
)
.form-line
.header
.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()',
)
.form-line
.header
.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
.header
.title Warn on multi-line paste
.description Show a confirmation box when pasting multiple lines
toggle(
[(ngModel)]='config.store.terminal.warnOnMultilinePaste',
(ngModelChange)='config.save()',
)
div.mt-4
h3 Sound
.form-line(*ngIf='hostApp.platform === Platform.Windows')
.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()',
)
.form-line
.header
.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")')
.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 { ConfigService, HostAppService, Platform, PlatformService } from 'tabby-core'
import { ConfigService, HostAppService, Platform, PlatformService, altKeyName, metaKeyName } from 'tabby-core'
/** @hidden */
@Component({
@@ -7,6 +7,8 @@ import { ConfigService, HostAppService, Platform, PlatformService } from 'tabby-
})
export class TerminalSettingsTabComponent {
Platform = Platform
altKeyName = altKeyName
metaKeyName = metaKeyName
@HostBinding('class.content-box') true

View File

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

View File

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

View File

@@ -17,5 +17,8 @@
"resolutions": {
"**/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('socksv5', {})
Tabby.registerMock('@luminati-io/socksv5', {})
Tabby.registerMock('util', require('util/'))
Tabby.registerMock('keytar', {
getPassword: () => null,

View File

@@ -109,7 +109,7 @@ module.exports = options => {
'os',
'path',
'readline',
'socksv5',
'@luminati-io/socksv5',
'stream',
'windows-native-registry',
'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"
integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==
"@electron/get@^1.0.1":
version "1.12.2"
resolved "https://registry.npmjs.org/@electron/get/-/get-1.12.2.tgz"
integrity sha512-vAuHUbfvBQpYTJ5wB7uVIDq5c/Ry0fiTBMs7lnEYAo/qXXppIVcWdfBr57u6eRnKdVso7KSiH6p/LbQAG6Izrg==
"@electron/get@^1.13.0":
version "1.13.1"
resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.13.1.tgz#42a0aa62fd1189638bd966e23effaebb16108368"
integrity sha512-U5vkXDZ9DwXtkPqlB45tfYnnYBN8PePp1z/XDCupnSpdrxT8/ThCv9WCwPLf9oqiSGZTkH6dx2jDUPuoXpjkcA==
dependencies:
debug "^4.1.1"
env-paths "^2.2.0"
fs-extra "^8.1.0"
got "^9.6.0"
progress "^2.0.3"
sanitize-filename "^1.6.2"
semver "^6.2.0"
sumchecker "^3.0.1"
optionalDependencies:
global-agent "^2.0.2"
global-agent "^3.0.0"
global-tunnel-ng "^2.7.1"
"@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"
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":
version "0.5.0"
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"
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":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674"
@@ -412,10 +425,12 @@
"@types/node" "*"
"@types/responselike" "*"
"@types/debug@^4.1.5":
version "4.1.5"
resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz"
integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==
"@types/debug@^4.1.6":
version "4.1.7"
resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82"
integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==
dependencies:
"@types/ms" "*"
"@types/deep-equal@1.0.1":
version "1.0.1"
@@ -516,6 +531,11 @@
resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256"
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":
version "16.0.1"
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"
integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==
"@types/yargs@^16.0.2":
version "16.0.4"
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977"
integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==
"@types/yargs@^17.0.1":
version "17.0.7"
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.7.tgz#44a484c634761da4391477515a98772b82b5060f"
integrity sha512-OvLKmpKdea1aWtqHv9bxVVcMoT6syAeK+198dfETIFkAevYRGwqh4H+KFxfjUETZuUuE5sQCAFwdOdoHUdo8eg==
dependencies:
"@types/yargs-parser" "*"
@@ -1014,15 +1034,15 @@ ansistyles@~0.1.3:
resolved "https://registry.npmjs.org/ansistyles/-/ansistyles-0.1.3.tgz"
integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk=
app-builder-bin@3.5.13:
version "3.5.13"
resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.5.13.tgz#6dd7f4de34a4e408806f99b8c7d6ef1601305b7e"
integrity sha512-ighVe9G+bT1ENGdp9ecO1P+94vv/f+FUwaI+XkNzeg9bYF8Oi3BQ+mJuxS00UgyHs8luuOzjzC+qnAtdb43Mpg==
app-builder-bin@3.7.1:
version "3.7.1"
resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.7.1.tgz#cb0825c5e12efc85b196ac3ed9c89f076c61040e"
integrity sha512-ql93vEUq6WsstGXD+SBLSIQw6SNnhbDEM0swzgugytMxLp3rT24Ag/jcC80ZHxiPRTdew1niuR7P3/FCrDqIjw==
app-builder-lib@22.11.7:
version "22.11.7"
resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.11.7.tgz#c0ad1119ebfbf4189a8280ad693625f5e684dca6"
integrity sha512-pS9/cR4/TnNZVAHZECiSvvwTBzbwblj7KBBZkMKDG57nibq0I1XY8zAaYeHFdlYTyrRcz9JUXbAqJKezya7UFQ==
app-builder-lib@22.14.5:
version "22.14.5"
resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.14.5.tgz#a61a50b132b858e98fdc70b6b88994ae99b4f96d"
integrity sha512-k3VwKP4kpsnUaXoUkm1s4zaSHPHIMFnN4kPMU9yXaKmE1LfHHqBaEah5bXeTAX5V/BC41wFdg8CF5vOjvgy8Rg==
dependencies:
"7zip-bin" "~5.1.1"
"@develar/schema-utils" "~2.6.5"
@@ -1030,12 +1050,14 @@ app-builder-lib@22.11.7:
"@malept/flatpak-bundler" "^0.4.0"
async-exit-hook "^2.0.1"
bluebird-lst "^1.0.9"
builder-util "22.11.7"
builder-util-runtime "8.7.7"
builder-util "22.14.5"
builder-util-runtime "8.9.1"
chromium-pickle-js "^0.2.0"
debug "^4.3.2"
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"
hosted-git-info "^4.0.2"
is-ci "^3.0.0"
@@ -1432,34 +1454,27 @@ buffer@^5.1.0:
base64-js "^1.3.1"
ieee754 "^1.1.13"
builder-util-runtime@8.7.6:
version "8.7.6"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.6.tgz#4b43c96db2bd494ced7694bcd7674934655e8324"
integrity sha512-rj9AIY7CzLSuTOXpToiaQkruYh6UEQ+kYnd5UET22ch8MGClEtIZKXHG14qEiXEr2x4EOKDMxkcTa+9TYaE+ug==
builder-util-runtime@8.9.1:
version "8.9.1"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.9.1.tgz#25f066b3fbc20b3e6236a9b956b1ebb0e33ff66a"
integrity sha512-c8a8J3wK6BIVLW7ls+7TRK9igspTbzWmUqxFbgK0m40Ggm6efUbxtWVCGIjc+dtchyr5qAMAUL6iEGRdS/6vwg==
dependencies:
debug "^4.3.2"
sax "^1.2.4"
builder-util-runtime@8.7.7:
version "8.7.7"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.7.tgz#6c83cc3abe7a7a5c8b4ec8878f68adc828c07f0d"
integrity sha512-RUfoXzVrmFFI0K/Oft0CtP1LpTIOlBeLJatt5DePTI0KlxE156am4SGUpqtbbdqZNm++LkV9mX4olBDcXyGPow==
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==
builder-util@22.14.5:
version "22.14.5"
resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.14.5.tgz#42a18608d2a566c0846e91266464776c8bfb0cc9"
integrity sha512-zqIHDFJwmA7jV7SC9aI+33MWwT2mWoijH+Ol9IntNAwuuRXoS+7XeJwnhLBXOhcDBzXT4kDzHnRk4JKeaygEYA==
dependencies:
"7zip-bin" "~5.1.1"
"@types/debug" "^4.1.5"
"@types/debug" "^4.1.6"
"@types/fs-extra" "^9.0.11"
app-builder-bin "3.5.13"
app-builder-bin "3.7.1"
bluebird-lst "^1.0.9"
builder-util-runtime "8.7.7"
builder-util-runtime "8.9.1"
chalk "^4.1.1"
cross-spawn "^7.0.3"
debug "^4.3.2"
fs-extra "^10.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"
integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og=
cacache@^15.0.5:
version "15.2.0"
resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.2.0.tgz#73af75f77c58e72d8c630a7a2858cb18ef523389"
integrity sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==
cacache@^15.2.0:
version "15.3.0"
resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb"
integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==
dependencies:
"@npmcli/fs" "^1.0.0"
"@npmcli/move-file" "^1.0.1"
chownr "^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"
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"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -1902,7 +1918,7 @@ columnify@~1.5.4:
strip-ansi "^3.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"
resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
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"
integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
compare-versions@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62"
integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==
compare-version@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080"
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:
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"
integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
core-js@^3.18.2, core-js@^3.6.5:
core-js@^3.18.2:
version "3.18.2"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.18.2.tgz#63a551e8a29f305cd4123754846e65896619ba5b"
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:
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"
resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
@@ -2366,14 +2387,14 @@ dir-glob@^3.0.1:
dependencies:
path-type "^4.0.0"
dmg-builder@22.11.7:
version "22.11.7"
resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.11.7.tgz#5956008c18d40ee72c0ea01ffea9590dbf51df89"
integrity sha512-+I+XfP2DODHB6PwFANgpH/WMzzCA5r5XoMvbFCIYjQjJpXlO0XnqQaamzFl2vh/Wz/Qt0d0lJMgRy8gKR3MGdQ==
dmg-builder@22.14.5:
version "22.14.5"
resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.14.5.tgz#137c0b55e639badcc0b119eb060e6fa4ed61d948"
integrity sha512-1GvFGQE332bvPamcMwZDqWqfWfJTyyDLOsHMcGi0zs+Jh7JOn6/zuBkHJIWHdsj2QJbhzLVyd2/ZqttOKv7I8w==
dependencies:
app-builder-lib "22.11.7"
builder-util "22.11.7"
builder-util-runtime "8.7.6"
app-builder-lib "22.14.5"
builder-util "22.14.5"
builder-util-runtime "8.9.1"
fs-extra "^10.0.0"
iconv-lite "^0.6.2"
js-yaml "^4.1.0"
@@ -2484,17 +2505,17 @@ ejs@^3.1.6:
dependencies:
jake "^10.6.1"
electron-builder@^22.11.7:
version "22.11.7"
resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.11.7.tgz#cd97a0d9f6e6d388112e66b4376de431cca4d596"
integrity sha512-yQExSLt7Hbz/P8lLkZDdE/OnJJ7NCX+uiQcV+XIH0TeEZcD87ZnSqBBzGUN5akySU4BXXlrVZKeUsXACWrm5Kw==
electron-builder@^22.14.5:
version "22.14.5"
resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.14.5.tgz#3a25547bd4fe3728d4704da80956a794c5c31496"
integrity sha512-N73hSbXFz6Mz5Z6h6C5ly6CB+dUN6k1LuCDJjI8VF47bMXv/QE0HE+Kkb0GPKqTqM7Hsk/yIYX+kHCfSkR5FGg==
dependencies:
"@types/yargs" "^16.0.2"
app-builder-lib "22.11.7"
builder-util "22.11.7"
builder-util-runtime "8.7.7"
"@types/yargs" "^17.0.1"
app-builder-lib "22.14.5"
builder-util "22.14.5"
builder-util-runtime "8.9.1"
chalk "^4.1.1"
dmg-builder "22.11.7"
dmg-builder "22.14.5"
fs-extra "^10.0.0"
is-ci "^3.0.0"
lazy-val "^1.0.5"
@@ -2593,23 +2614,35 @@ electron-notarize@^1.1.1:
debug "^4.1.1"
fs-extra "^9.0.1"
electron-publish@22.11.7:
version "22.11.7"
resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.11.7.tgz#4126cbb08ccf082a2aa7fef89ee629b3a4b8ae9a"
integrity sha512-A4EhRRNBVz4SPzUlBrPO6BmuyDeI0pyprggPAV9rQ+SDVSnSB/WKPot9JwWMyArkGj3AUUTMNVT6hwZhMvhfqw==
electron-osx-sign@^0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.5.0.tgz#fc258c5e896859904bbe3d01da06902c04b51c3a"
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:
"@types/fs-extra" "^9.0.11"
builder-util "22.11.7"
builder-util-runtime "8.7.7"
builder-util "22.14.5"
builder-util-runtime "8.9.1"
chalk "^4.1.1"
fs-extra "^10.0.0"
lazy-val "^1.0.5"
mime "^2.5.2"
electron-rebuild@^3.2.3:
version "3.2.3"
resolved "https://registry.yarnpkg.com/electron-rebuild/-/electron-rebuild-3.2.3.tgz#2c0b06b7b1a5240fec96f1d368d04222e2590c3d"
integrity sha512-9oxNmKlDCaf651c+yJWCDIBpF6A9aY+wQtasLEeR5AsPYPuOKEX6xHnC2+WgCLOC94JEpCZznecyC84fbwZq4A==
electron-rebuild@^3.2.5:
version "3.2.5"
resolved "https://registry.yarnpkg.com/electron-rebuild/-/electron-rebuild-3.2.5.tgz#a9e82b4259aac33ad449f6959de68ded2c5679f8"
integrity sha512-U9dKi10V9w/BdIVB8a8dTKYLK3Q1d2WZ+Yo5qfM3XX/O4jI7KpnwgvWgGoVv0jTWPC2NlebF00ffWS/8NfUAtA==
dependencies:
"@malept/cross-spawn-promise" "^2.0.0"
colors "^1.3.3"
@@ -2618,10 +2651,11 @@ electron-rebuild@^3.2.3:
fs-extra "^10.0.0"
got "^11.7.0"
lzma-native "^8.0.1"
node-abi "^2.19.2"
node-abi "^3.0.0"
node-api-version "^0.1.4"
node-gyp "^8.1.0"
node-gyp "^8.4.0"
ora "^5.1.0"
semver "^7.3.5"
tar "^6.0.5"
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"
integrity sha512-DY8dA7gR51MSo66DqitEQoUMQ0Z+A2DSXFi7tK304bdTVqczCAfUuyQw6Wdg8hIoo5zIxkU1L24RQtUce1Ioig==
electron@13.5.1:
version "13.5.1"
resolved "https://registry.yarnpkg.com/electron/-/electron-13.5.1.tgz#76c02c39be228532f886a170b472cbd3d93f0d0f"
integrity sha512-ZyxhIhmdaeE3xiIGObf0zqEyCyuIDqZQBv9NKX8w5FNzGm87j4qR0H1+GQg6vz+cA1Nnv1x175Zvimzc0/UwEQ==
electron@16.0.2:
version "16.0.2"
resolved "https://registry.yarnpkg.com/electron/-/electron-16.0.2.tgz#6d0ae3152c410478dfffdbf80852a3840679b8c5"
integrity sha512-kT746yVMztrP4BbT3nrFNcUcfgFu2yelUw6TWBVTy0pju+fBISaqcvoiMrq+8U0vRpoXSu2MJYygOf4T0Det7g==
dependencies:
"@electron/get" "^1.0.1"
"@electron/get" "^1.13.0"
"@types/node" "^14.6.2"
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"
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:
version "2.1.4"
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"
path-is-absolute "^1.0.0"
global-agent@^2.0.2:
version "2.1.12"
resolved "https://registry.npmjs.org/global-agent/-/global-agent-2.1.12.tgz"
integrity sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg==
global-agent@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6"
integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==
dependencies:
boolean "^3.0.1"
core-js "^3.6.5"
es6-error "^4.1.1"
matcher "^3.0.0"
roarr "^2.15.3"
@@ -4355,6 +4397,13 @@ isarray@~1.0.0:
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
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:
version "4.0.8"
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"
integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc=
lazy-val@^1.0.4:
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:
lazy-val@^1.0.4, lazy-val@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d"
integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==
@@ -4949,13 +4993,13 @@ make-fetch-happen@^2.4.13:
socks-proxy-agent "^3.0.0"
ssri "^4.1.6"
make-fetch-happen@^8.0.14:
version "8.0.14"
resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz#aaba73ae0ab5586ad8eaa68bd83332669393e222"
integrity sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==
make-fetch-happen@^9.1.0:
version "9.1.0"
resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968"
integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==
dependencies:
agentkeepalive "^4.1.3"
cacache "^15.0.5"
cacache "^15.2.0"
http-cache-semantics "^4.1.0"
http-proxy-agent "^4.0.1"
https-proxy-agent "^5.0.0"
@@ -4966,8 +5010,9 @@ make-fetch-happen@^8.0.14:
minipass-fetch "^1.3.2"
minipass-flush "^1.0.5"
minipass-pipeline "^1.2.4"
negotiator "^0.6.2"
promise-retry "^2.0.1"
socks-proxy-agent "^5.0.0"
socks-proxy-agent "^6.0.0"
ssri "^8.0.0"
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"
integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
nan@^2.13.2, nan@^2.14.1:
version "2.14.2"
resolved "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz"
integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
nan@^2.15.0:
nan@^2.13.2, nan@^2.14.1, 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==
@@ -5257,6 +5297,11 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
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:
version "2.6.2"
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"
tslib "^2.0.3"
node-abi@^2.19.2, node-abi@^2.30.0:
version "2.30.0"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.0.tgz#8be53bf3e7945a34eea10e0fc9a5982776cf550b"
integrity sha512-g6bZh3YCKQRdwuO/tSZZYJAw622SjsRfJ2X0Iy4sSOHZ34/sPPdVBn8fev2tj7njzLwuqPw9uMtGsGkO5kIQvg==
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==
node-abi@^3.0.0, node-abi@^3.2.0, node-abi@^3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.5.0.tgz#26e8b7b251c3260a5ac5ba5aef3b4345a0229248"
integrity sha512-LtHvNIBgOy5mO8mPEUtkCW/YCRWYEKshIvqhe1GHHyXEHEB5mgICyYnAcl4qan3uFeRROErKGzatFHPf6kDxWw==
dependencies:
semver "^7.3.5"
@@ -5355,20 +5393,20 @@ node-gyp@^7.1.0:
tar "^6.0.2"
which "^2.0.2"
node-gyp@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.1.0.tgz#81f43283e922d285c886fb0e0f520a7fd431d8c2"
integrity sha512-o2elh1qt7YUp3lkMwY3/l4KF3j/A3fI/Qt4NH+CQQgPJdqGE9y7qnP84cjIWN27Q0jJkrSAhCVDg+wBVNBYdBg==
node-gyp@^8.4.0:
version "8.4.0"
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.0.tgz#6e1112b10617f0f8559c64b3f737e8109e5a8338"
integrity sha512-Bi/oCm5bH6F+FmzfUxJpPaxMEyIhszULGR3TprmTeku8/dMFcdTcypk120NeZqEt54r1BrgEKtm2jJiuIKE28Q==
dependencies:
env-paths "^2.2.0"
glob "^7.1.4"
graceful-fs "^4.2.6"
make-fetch-happen "^8.0.14"
make-fetch-happen "^9.1.0"
nopt "^5.0.0"
npmlog "^4.1.2"
rimraf "^3.0.2"
semver "^7.3.5"
tar "^6.1.0"
tar "^6.1.2"
which "^2.0.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"
integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==
node-sass@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-6.0.1.tgz#cad1ccd0ce63e35c7181f545d8b986f3a9a887fe"
integrity sha512-f+Rbqt92Ful9gX0cGtdYwjTrWAaGURgaK5rZCWOgCNyGWusFYHhbqCCBoFBeat+HKETOU02AyTxNhJV0YZf2jQ==
node-sass@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-7.0.0.tgz#33ee7c2df299d51f682f13d79f3d2a562225788e"
integrity sha512-6yUnsD3L8fVbgMX6nKQqZkjRcG7a/PpmF0pEyeWf+BgbTj2ToJlCYrnUifL2KbjV5gIY22I3oppahBWA3B+jUg==
dependencies:
async-foreach "^0.1.3"
chalk "^1.1.1"
chalk "^4.1.2"
cross-spawn "^7.0.3"
gaze "^1.0.0"
get-stdin "^4.0.1"
@@ -5410,7 +5448,7 @@ node-sass@^6.0.1:
meow "^9.0.0"
nan "^2.13.2"
node-gyp "^7.1.0"
npmlog "^4.0.0"
npmlog "^5.0.0"
request "^2.88.0"
sass-graph "2.2.5"
stdout-stream "^1.4.0"
@@ -5657,7 +5695,7 @@ npm@5.1.0:
wrappy "~1.0.2"
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"
resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz"
integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
@@ -5667,7 +5705,7 @@ npm@5.1.0:
gauge "~2.7.3"
set-blocking "~2.0.0"
npmlog@5.0.1:
npmlog@5.0.1, npmlog@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0"
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"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sanitize-filename@^1.6.2, sanitize-filename@^1.6.3:
sanitize-filename@^1.6.3:
version "1.6.3"
resolved "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz"
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"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
shell-quote@^1.7.2:
version "1.7.2"
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2"
integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==
shell-quote@^1.7.3:
version "1.7.3"
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123"
integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==
shelljs@0.8.4:
version "0.8.4"
@@ -7402,14 +7440,14 @@ socks-proxy-agent@^3.0.0:
agent-base "^4.0.1"
socks "^1.1.10"
socks-proxy-agent@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e"
integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==
socks-proxy-agent@^6.0.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.1.0.tgz#869cf2d7bd10fea96c7ad3111e81726855e285c3"
integrity sha512-57e7lwCN4Tzt3mXz25VxOErJKXlPfXmkMLnk310v/jwW20jWRVcgsOit+xNkN3eIEdB47GwnfAEBLacZ/wVIKg==
dependencies:
agent-base "^6.0.2"
debug "4"
socks "^2.3.3"
debug "^4.3.1"
socks "^2.6.1"
socks@^1.1.10:
version "1.1.10"
@@ -7419,7 +7457,7 @@ socks@^1.1.10:
ip "^1.1.4"
smart-buffer "^1.0.13"
socks@^2.3.3:
socks@^2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e"
integrity sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==
@@ -7869,10 +7907,10 @@ tar@^2.0.0, tar@~2.2.1:
fstream "^1.0.12"
inherits "2"
tar@^6.0.2, tar@^6.0.5, tar@^6.1.0:
version "6.1.7"
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.7.tgz#c566d1107d38b09e92983a68db5534fc7f6cab42"
integrity sha512-PBoRkOJU0X3lejJ8GaRCsobjXTgFofRDSPdSUhRSdlwJfifRlQBwGXitDItdGFu0/h0XDMCkig0RN1iT7DBxhA==
tar@^6.0.2, tar@^6.0.5, tar@^6.1.2:
version "6.1.11"
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621"
integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==
dependencies:
chownr "^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"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
typedoc@^0.22.7:
version "0.22.7"
resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.22.7.tgz#e5e095ab14676296f4b12ac3355321eae650e447"
integrity sha512-ndxxp+tU1Wczvdxp4u2/PvT1qjD6hdFdSdehpORHjE+JXmMkl2bftXCR0upHmsnesBG7VCcr8vfgloGHIH8glQ==
typedoc@^0.22.10:
version "0.22.10"
resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.22.10.tgz#221e1a2b17bcb71817ef027dc4c4969d572e7620"
integrity sha512-hQYZ4WtoMZ61wDC6w10kxA42+jclWngdmztNZsDvIz7BMJg7F2xnT+uYsUa7OluyKossdFj9E9Ye4QOZKTy8SA==
dependencies:
glob "^7.2.0"
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"
integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==
watchpack@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.2.0.tgz#47d78f5415fe550ecd740f99fe2882323a58b1ce"
integrity sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==
watchpack@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.0.tgz#a41bca3da6afaff31e92a433f4c856a0c25ea0c4"
integrity sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==
dependencies:
glob-to-regexp "^0.4.1"
graceful-fs "^4.1.2"
@@ -8499,15 +8537,15 @@ webpack-merge@^5.7.3:
clone-deep "^4.0.1"
wildcard "^2.0.0"
webpack-sources@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.0.tgz#b16973bcf844ebcdb3afde32eda1c04d0b90f89d"
integrity sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw==
webpack-sources@^3.2.2:
version "3.2.2"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.2.tgz#d88e3741833efec57c4c789b6010db9977545260"
integrity sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==
webpack@^5.61.0:
version "5.61.0"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.61.0.tgz#fa827f0ee9bdfd141dd73c3e891e955ebd52fe7f"
integrity sha512-fPdTuaYZ/GMGFm4WrPi2KRCqS1vDp773kj9S0iI5Uc//5cszsFEDgHNaX4Rj1vobUiU1dFIV3mA9k1eHeluFpw==
webpack@^5.64.4:
version "5.64.4"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.64.4.tgz#e1454b6a13009f57cc2c78e08416cd674622937b"
integrity sha512-LWhqfKjCLoYJLKJY8wk2C3h77i8VyHowG3qYNZiIqD6D0ZS40439S/KVuc/PY48jp2yQmy0mhMknq8cys4jFMw==
dependencies:
"@types/eslint-scope" "^3.7.0"
"@types/estree" "^0.0.50"
@@ -8531,8 +8569,8 @@ webpack@^5.61.0:
schema-utils "^3.1.0"
tapable "^2.1.1"
terser-webpack-plugin "^5.1.3"
watchpack "^2.2.0"
webpack-sources "^3.2.0"
watchpack "^2.3.0"
webpack-sources "^3.2.2"
which-boxed-primitive@^1.0.1, which-boxed-primitive@^1.0.2:
version "1.0.2"