Compare commits

...

362 Commits

Author SHA1 Message Date
Eugene Pankov
c7bee48199 fixed zooming - fixes #3684 2021-05-13 18:36:45 +02:00
Eugene Pankov
1326fd7355 only hide on blur when docking is enabled - fixes #3782 2021-05-13 17:40:02 +02:00
Eugene Pankov
ee368a3716 fixed bell 2021-05-13 17:30:48 +02:00
Eugene Pankov
c9367d04c3 added missing dep 2021-05-13 17:30:37 +02:00
Eugene Pankov
2f63a1ebbb fixed layout with tabs on side 2021-05-13 17:06:16 +02:00
Eugene Pankov
c956ee1183 fixed css config field 2021-05-13 17:06:11 +02:00
Eugene Pankov
f76a5505ec style tweak 2021-05-13 17:02:43 +02:00
Eugene Pankov
4aafcf82e8 build fixes 2021-05-13 17:00:29 +02:00
Eugene Pankov
76ffef751c handle squirrel errors in updater 2021-05-13 16:54:27 +02:00
Eugene Pankov
5c22e22caa plugged memory leaks 2021-05-13 16:40:23 +02:00
Eugene Pankov
c98fd2042d downgraded electron/remote 2021-05-12 10:29:56 +02:00
Eugene Pankov
ac45f24bf9 fixed docs build 2021-05-12 10:21:41 +02:00
Eugene
60c85c49cc Merge pull request #3241 from Eugeny/dependabot/npm_and_yarn/terminus-core/readable-stream-3.6.0
Bump readable-stream from 2.3.7 to 3.6.0 in /terminus-core
2021-05-12 09:44:46 +02:00
Eugene
2a1b5d6a30 Merge pull request #3801 from Eugeny/dependabot/npm_and_yarn/sentry/cli-1.64.2
Bump @sentry/cli from 1.63.1 to 1.64.2
2021-05-12 09:44:15 +02:00
Eugene
931335ec31 Merge pull request #3691 from Eugeny/dependabot/npm_and_yarn/types/fs-extra-9.0.11
Bump @types/fs-extra from 9.0.9 to 9.0.11
2021-05-12 09:44:05 +02:00
Eugene
f3ddb54499 Merge pull request #3703 from Eugeny/dependabot/npm_and_yarn/app/js-yaml-4.1.0
Bump js-yaml from 4.0.0 to 4.1.0 in /app
2021-05-12 09:43:16 +02:00
Eugene
275f9e5633 Merge pull request #3792 from Eugeny/dependabot/npm_and_yarn/core-js-3.12.1
Bump core-js from 3.9.1 to 3.12.1
2021-05-12 09:42:53 +02:00
Eugene
b988c36bf9 Merge pull request #3791 from Eugeny/dependabot/npm_and_yarn/terminus-core/core-js-3.12.1
Bump core-js from 3.9.1 to 3.12.1 in /terminus-core
2021-05-12 09:42:48 +02:00
Eugene
381ee6f1b2 Merge pull request #3771 from Eugeny/dependabot/npm_and_yarn/types/node-15.0.2
Bump @types/node from 14.14.35 to 15.0.2
2021-05-12 09:41:25 +02:00
Eugene Pankov
a423447532 Merge branch 'master' of github.com:Eugeny/terminus 2021-05-12 09:39:48 +02:00
Eugene Pankov
bb386f7f8a Update electron.service.ts 2021-05-12 09:39:45 +02:00
Eugene
99a86e7ff5 Merge pull request #3739 from Eugeny/dependabot/npm_and_yarn/terminus-core/types/js-yaml-4.0.1
Bump @types/js-yaml from 4.0.0 to 4.0.1 in /terminus-core
2021-05-12 09:38:04 +02:00
Eugene
2e9d8f609e Merge pull request #3725 from Eugeny/dependabot/npm_and_yarn/terminus-ssh/strip-ansi-7.0.0
Bump strip-ansi from 6.0.0 to 7.0.0 in /terminus-ssh
2021-05-12 09:37:49 +02:00
Eugene
71e6caff0a Merge pull request #3723 from Eugeny/dependabot/npm_and_yarn/app/node-abi-2.26.0
Bump node-abi from 2.21.0 to 2.26.0 in /app
2021-05-12 09:37:19 +02:00
Eugene
235a53018e Merge pull request #3793 from Eugeny/dependabot/npm_and_yarn/eslint-7.26.0
Bump eslint from 7.22.0 to 7.26.0
2021-05-12 09:36:36 +02:00
Eugene
dd22aba099 Merge pull request #3800 from Eugeny/dependabot/npm_and_yarn/typescript-eslint/parser-4.23.0
Bump @typescript-eslint/parser from 4.18.0 to 4.23.0
2021-05-12 09:36:02 +02:00
Eugene
2db700a77f Merge pull request #3712 from Eugeny/dependabot/npm_and_yarn/app/ssri-6.0.2
[Security] Bump ssri from 6.0.1 to 6.0.2 in /app
2021-05-12 09:35:51 +02:00
Eugene Pankov
f5fdf6cf44 Merge branch 'master' of github.com:Eugeny/terminus 2021-05-12 09:35:35 +02:00
Eugene Pankov
8f02239815 Update dependabot.yml 2021-05-12 09:35:33 +02:00
Eugene
e462e207de Merge pull request #3673 from Eugeny/dependabot/npm_and_yarn/node-gyp-8.0.0
Bump node-gyp from 7.1.2 to 8.0.0
2021-05-12 09:33:53 +02:00
Eugene Pankov
24210dee38 Merge branch 'master' of github.com:Eugeny/terminus 2021-05-12 09:32:57 +02:00
Eugene Pankov
87a98288b9 bumped electron 2021-05-12 09:32:53 +02:00
Eugene
be2015a833 Merge pull request #3653 from Eugeny/dependabot/npm_and_yarn/y18n-3.2.2
[Security] Bump y18n from 3.2.1 to 3.2.2
2021-05-12 09:32:46 +02:00
Eugene
75a59769fc Merge pull request #3652 from Eugeny/dependabot/npm_and_yarn/app/y18n-3.2.2
[Security] Bump y18n from 3.2.1 to 3.2.2 in /app
2021-05-12 09:32:42 +02:00
Eugene
c28b474f24 Merge pull request #3625 from Eugeny/dependabot/npm_and_yarn/terminus-plugin-manager/semver-7.3.5
Bump semver from 7.3.4 to 7.3.5 in /terminus-plugin-manager
2021-05-12 09:32:18 +02:00
Eugene
e9ea8b0506 Merge pull request #3650 from Eugeny/dependabot/npm_and_yarn/app/rxjs-6.6.7
Bump rxjs from 6.6.6 to 6.6.7 in /app
2021-05-12 09:32:08 +02:00
Eugene
44367465cc Merge pull request #3688 from Eugeny/dependabot/npm_and_yarn/app/windows-process-tree-0.3.0
Bump windows-process-tree from 0.2.4 to 0.3.0 in /app
2021-05-12 09:31:32 +02:00
Eugene
c017c42b70 Merge pull request #3798 from Eugeny/dependabot/npm_and_yarn/postcss-8.2.15
[Security] Bump postcss from 8.2.8 to 8.2.15
2021-05-12 09:30:25 +02:00
Eugene
26117dfce0 Merge pull request #3785 from Eugeny/dependabot/npm_and_yarn/app/hosted-git-info-2.8.9
[Security] Bump hosted-git-info from 2.8.8 to 2.8.9 in /app
2021-05-12 09:30:19 +02:00
Eugene
ae809e9ee2 Merge pull request #3774 from Eugeny/dependabot/npm_and_yarn/terminus-core/ngx-perfect-scrollbar-10.1.1
Bump ngx-perfect-scrollbar from 10.1.0 to 10.1.1 in /terminus-core
2021-05-12 09:30:11 +02:00
Eugene
58516718d6 Merge pull request #3735 from Eugeny/dependabot/npm_and_yarn/typedoc-0.20.36
Bump typedoc from 0.20.32 to 0.20.36
2021-05-12 09:29:47 +02:00
dependabot-preview[bot]
9dac5cdf9d Bump js-yaml from 4.0.0 to 4.1.0 in /app
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.0.0 to 4.1.0.
- [Release notes](https://github.com/nodeca/js-yaml/releases)
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.0.0...4.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-12 07:28:10 +00:00
dependabot-preview[bot]
dbc291ff8c Bump @types/js-yaml from 4.0.0 to 4.0.1 in /terminus-core
Bumps [@types/js-yaml](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/js-yaml) from 4.0.0 to 4.0.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/js-yaml)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-12 07:28:08 +00:00
dependabot-preview[bot]
dc5f7991b8 Bump semver from 7.3.4 to 7.3.5 in /terminus-plugin-manager
Bumps [semver](https://github.com/npm/node-semver) from 7.3.4 to 7.3.5.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/master/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v7.3.4...v7.3.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-12 07:27:56 +00:00
Eugene
df2e60150c Merge pull request #3757 from Eugeny/dependabot/add-v2-config-file
Upgrade to GitHub-native Dependabot
2021-05-12 09:27:53 +02:00
Eugene
516572f9d9 Merge pull request #3659 from Eugeny/dependabot/npm_and_yarn/terminus-core/electron/remote-1.1.0
Bump @electron/remote from 1.0.4 to 1.1.0 in /terminus-core
2021-05-12 09:27:12 +02:00
Eugene
b3cca4f789 Merge pull request #3803 from Eugeny/dependabot/npm_and_yarn/terminus-core/electron-updater-4.3.9
Bump electron-updater from 4.3.8 to 4.3.9 in /terminus-core
2021-05-12 09:26:41 +02:00
Eugene
e59ebb76ac Merge pull request #3658 from Eugeny/dependabot/npm_and_yarn/app/electron/remote-1.1.0
Bump @electron/remote from 1.0.4 to 1.1.0 in /app
2021-05-12 09:26:17 +02:00
Eugene
0476ef35bb Merge pull request #3807 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-addon-ligatures-0.5.0
Bump xterm-addon-ligatures from 0.4.0 to 0.5.0 in /terminus-terminal
2021-05-12 09:16:22 +02:00
Eugene
8b3139719a Merge pull request #3806 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-addon-webgl-0.11.0
Bump xterm-addon-webgl from 0.10.0 to 0.11.0 in /terminus-terminal
2021-05-12 09:16:16 +02:00
dependabot-preview[bot]
66ebc0dd71 Bump xterm-addon-webgl from 0.10.0 to 0.11.0 in /terminus-terminal
Bumps [xterm-addon-webgl](https://github.com/xtermjs/xterm.js) from 0.10.0 to 0.11.0.
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](https://github.com/xtermjs/xterm.js/compare/0.10...0.11)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-12 07:15:22 +00:00
Eugene
11328d5880 Merge pull request #3804 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-4.12.0
Bump xterm from 4.11.0 to 4.12.0 in /terminus-terminal
2021-05-12 09:13:23 +02:00
Eugene Pankov
af2fd17c34 Merge branch 'master' of github.com:Eugeny/terminus 2021-05-12 09:12:10 +02:00
Eugene Pankov
d21d019b5c install bsdtar in linux workflow 2021-05-12 09:12:07 +02:00
dependabot-preview[bot]
f4a825f67b Bump xterm-addon-ligatures from 0.4.0 to 0.5.0 in /terminus-terminal
Bumps [xterm-addon-ligatures](https://github.com/xtermjs/xterm.js) from 0.4.0 to 0.5.0.
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](https://github.com/xtermjs/xterm.js/compare/0.4...0.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-12 04:17:53 +00:00
dependabot-preview[bot]
4ce916241a Bump xterm from 4.11.0 to 4.12.0 in /terminus-terminal
Bumps [xterm](https://github.com/xtermjs/xterm.js) from 4.11.0 to 4.12.0.
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](https://github.com/xtermjs/xterm.js/compare/4.11.0...4.12.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-12 04:16:36 +00:00
dependabot-preview[bot]
4780a6b913 Bump electron-updater from 4.3.8 to 4.3.9 in /terminus-core
Bumps [electron-updater](https://github.com/electron-userland/electron-builder) from 4.3.8 to 4.3.9.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-12 04:16:32 +00:00
dependabot-preview[bot]
58710cfdbe Bump @sentry/cli from 1.63.1 to 1.64.2
Bumps [@sentry/cli](https://github.com/getsentry/sentry-cli) from 1.63.1 to 1.64.2.
- [Release notes](https://github.com/getsentry/sentry-cli/releases)
- [Changelog](https://github.com/getsentry/sentry-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-cli/compare/1.63.1...1.64.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-11 04:32:05 +00:00
dependabot-preview[bot]
8a6b3a6fbb Bump @typescript-eslint/parser from 4.18.0 to 4.23.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 4.18.0 to 4.23.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.23.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-11 04:27:43 +00:00
dependabot-preview[bot]
40897c278b [Security] Bump postcss from 8.2.8 to 8.2.15
Bumps [postcss](https://github.com/postcss/postcss) from 8.2.8 to 8.2.15. **This update includes a security fix.**
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.2.8...8.2.15)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-11 04:25:17 +00:00
dependabot-preview[bot]
d54dbc3c50 Bump eslint from 7.22.0 to 7.26.0
Bumps [eslint](https://github.com/eslint/eslint) from 7.22.0 to 7.26.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v7.22.0...v7.26.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-10 04:34:59 +00:00
dependabot-preview[bot]
789ca2c635 Bump core-js from 3.9.1 to 3.12.1
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.9.1 to 3.12.1.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.12.1/packages/core-js)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-10 04:34:03 +00:00
dependabot-preview[bot]
eacc30bc82 Bump core-js from 3.9.1 to 3.12.1 in /terminus-core
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.9.1 to 3.12.1.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.12.1/packages/core-js)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-10 04:31:06 +00:00
dependabot-preview[bot]
dc7fc30d27 [Security] Bump hosted-git-info from 2.8.8 to 2.8.9 in /app
Bumps [hosted-git-info](https://github.com/npm/hosted-git-info) from 2.8.8 to 2.8.9. **This update includes a security fix.**
- [Release notes](https://github.com/npm/hosted-git-info/releases)
- [Changelog](https://github.com/npm/hosted-git-info/blob/v2.8.9/CHANGELOG.md)
- [Commits](https://github.com/npm/hosted-git-info/compare/v2.8.8...v2.8.9)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-07 18:00:47 +00:00
dependabot-preview[bot]
6de6fd8f40 Bump ngx-perfect-scrollbar from 10.1.0 to 10.1.1 in /terminus-core
Bumps [ngx-perfect-scrollbar](https://github.com/zefoy/ngx-perfect-scrollbar) from 10.1.0 to 10.1.1.
- [Release notes](https://github.com/zefoy/ngx-perfect-scrollbar/releases)
- [Commits](https://github.com/zefoy/ngx-perfect-scrollbar/compare/v10.1.0...v10.1.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-06 04:18:04 +00:00
dependabot-preview[bot]
fb9fb57a18 Bump @types/node from 14.14.35 to 15.0.2
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.14.35 to 15.0.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-05 04:20:09 +00:00
Eugene Pankov
e434fe5a8a linux: fixed window-app association - fixes #3720 2021-05-02 20:19:52 +02:00
Eugene Pankov
1b1127ab28 added pacman builds - fixes #3761 2021-05-02 20:02:46 +02:00
Eugene Pankov
fe8dd891b4 fixed one-off sessions not auto closing 2021-05-02 19:22:45 +02:00
Eugene Pankov
f7b603a631 fixed backtick key detection - fixes #3742 2021-05-02 16:03:36 +02:00
Eugene Pankov
44040ba54b permanent port forwards - fixes #3479, fixes #2395 2021-05-02 15:08:22 +02:00
Eugene Pankov
f87efcf5bd an option to remember private key passphrases - fixes #3689 2021-05-02 13:11:15 +02:00
dependabot-preview[bot]
e2d467046b Upgrade to GitHub-native Dependabot 2021-04-29 15:09:52 +00:00
Eugene Pankov
220ae6ccaa Merge branch 'master' of github.com:Eugeny/terminus 2021-04-25 21:06:26 +02:00
Eugene Pankov
3c6374be19 better ssh connection list management - fixes #1351 2021-04-25 21:06:23 +02:00
Eugene Pankov
d32e31d45e handle invalid pty ids in ipc 2021-04-25 20:12:49 +02:00
Eugene
d7a33dc0ce Merge pull request #3736 from Eugeny/imgbot
[ImgBot] Optimize images
2021-04-24 20:05:55 +02:00
ImgBotApp
bc736dd13a [ImgBot] Optimize images
/build/icons/Icon-MacOS-512x512@2x.png -- 188.59kb -> 165.81kb (12.08%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
2021-04-24 17:58:57 +00:00
Eugene Pankov
7cf8f8d58e ssh - added proxy command support - fixes #3722 2021-04-24 19:57:05 +02:00
Eugene Pankov
ff0cd36b6a new macOS icon - fixes #3721 2021-04-24 19:56:48 +02:00
Eugene Pankov
767bc8e56f bumped webgl context limit (fixes #3729) 2021-04-24 11:05:37 +02:00
Eugene Pankov
8801839c7a fixed misaligned tab content - fixes #3715 2021-04-24 10:57:29 +02:00
dependabot-preview[bot]
642293dbdb Bump typedoc from 0.20.32 to 0.20.36
Bumps [typedoc](https://github.com/TypeStrong/TypeDoc) from 0.20.32 to 0.20.36.
- [Release notes](https://github.com/TypeStrong/TypeDoc/releases)
- [Commits](https://github.com/TypeStrong/TypeDoc/compare/v0.20.32...v0.20.36)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-23 04:20:53 +00:00
dependabot-preview[bot]
99e3144ddf Bump strip-ansi from 6.0.0 to 7.0.0 in /terminus-ssh
Bumps [strip-ansi](https://github.com/chalk/strip-ansi) from 6.0.0 to 7.0.0.
- [Release notes](https://github.com/chalk/strip-ansi/releases)
- [Commits](https://github.com/chalk/strip-ansi/compare/v6.0.0...v7.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-22 16:29:17 +00:00
dependabot-preview[bot]
c38b684b56 Bump node-abi from 2.21.0 to 2.26.0 in /app
Bumps [node-abi](https://github.com/lgeiger/node-abi) from 2.21.0 to 2.26.0.
- [Release notes](https://github.com/lgeiger/node-abi/releases)
- [Commits](https://github.com/lgeiger/node-abi/compare/v2.21.0...v2.26.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-22 16:13:26 +00:00
dependabot-preview[bot]
f8871cb1c5 [Security] Bump ssri from 6.0.1 to 6.0.2 in /app
Bumps [ssri](https://github.com/npm/ssri) from 6.0.1 to 6.0.2. **This update includes a security fix.**
- [Release notes](https://github.com/npm/ssri/releases)
- [Changelog](https://github.com/npm/ssri/blob/v6.0.2/CHANGELOG.md)
- [Commits](https://github.com/npm/ssri/compare/v6.0.1...v6.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-16 21:52:56 +00:00
Eugene Pankov
7ab3238617 build fix 2021-04-16 21:18:23 +02:00
Eugene Pankov
6d89d7a8d0 lint 2021-04-16 20:54:21 +02:00
Eugene Pankov
e277c52f71 handle empty env vars - fixed #3217 2021-04-16 20:49:57 +02:00
Eugene Pankov
2cafd97751 fixed Windows font name autocomplete - fixed #3686 2021-04-16 20:43:23 +02:00
Eugene Pankov
ad78f38210 sorted plugins list 2021-04-16 20:33:11 +02:00
dependabot-preview[bot]
a647b394e5 Bump node-gyp from 7.1.2 to 8.0.0
Bumps [node-gyp](https://github.com/nodejs/node-gyp) from 7.1.2 to 8.0.0.
- [Release notes](https://github.com/nodejs/node-gyp/releases)
- [Changelog](https://github.com/nodejs/node-gyp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodejs/node-gyp/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-16 18:25:29 +00:00
dependabot-preview[bot]
4ec4620cd5 Bump rxjs from 6.6.6 to 6.6.7 in /app
Bumps [rxjs](https://github.com/reactivex/rxjs) from 6.6.6 to 6.6.7.
- [Release notes](https://github.com/reactivex/rxjs/releases)
- [Changelog](https://github.com/ReactiveX/rxjs/blob/6.6.7/CHANGELOG.md)
- [Commits](https://github.com/reactivex/rxjs/compare/6.6.6...6.6.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-16 18:24:10 +00:00
Eugene Pankov
4f32908c48 node-pty and flow control fixes - fixed #3695, fixed #3701, fixed #3696, fixed #3690 2021-04-16 20:15:39 +02:00
dependabot-preview[bot]
682b336784 Bump @types/fs-extra from 9.0.9 to 9.0.11
Bumps [@types/fs-extra](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/fs-extra) from 9.0.9 to 9.0.11.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/fs-extra)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-13 04:25:52 +00:00
dependabot-preview[bot]
0687e31d21 Bump windows-process-tree from 0.2.4 to 0.3.0 in /app
Bumps [windows-process-tree](https://github.com/Microsoft/vscode-windows-process-tree) from 0.2.4 to 0.3.0.
- [Release notes](https://github.com/Microsoft/vscode-windows-process-tree/releases)
- [Commits](https://github.com/Microsoft/vscode-windows-process-tree/commits/v0.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-12 04:26:09 +00:00
Eugene Pankov
8f0ba06f63 use older ubuntu runners to get a lower glibc ver dependency 2021-04-11 19:18:58 +02:00
Eugene Pankov
d221ad3078 ui tweak 2021-04-11 19:18:43 +02:00
Eugene Pankov
5b4d5efcc9 ui tweak 2021-04-08 22:46:47 +02:00
Eugene Pankov
8987cc39aa settings sidebar scroll 2021-04-08 22:45:01 +02:00
Eugene Pankov
2f2dd442ad build fix 2021-04-08 22:38:18 +02:00
dependabot-preview[bot]
2e7de08649 Bump @electron/remote from 1.0.4 to 1.1.0 in /app
Bumps [@electron/remote](https://github.com/electron/remote) from 1.0.4 to 1.1.0.
- [Release notes](https://github.com/electron/remote/releases)
- [Changelog](https://github.com/electron/remote/blob/master/.releaserc.json)
- [Commits](https://github.com/electron/remote/compare/v1.0.4...v1.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-08 20:28:43 +00:00
dependabot-preview[bot]
88f4c7e835 Bump @electron/remote from 1.0.4 to 1.1.0 in /terminus-core
Bumps [@electron/remote](https://github.com/electron/remote) from 1.0.4 to 1.1.0.
- [Release notes](https://github.com/electron/remote/releases)
- [Changelog](https://github.com/electron/remote/blob/master/.releaserc.json)
- [Commits](https://github.com/electron/remote/compare/v1.0.4...v1.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-08 20:28:25 +00:00
dependabot-preview[bot]
de3218522e [Security] Bump y18n from 3.2.1 to 3.2.2
Bumps [y18n](https://github.com/yargs/y18n) from 3.2.1 to 3.2.2. **This update includes a security fix.**
- [Release notes](https://github.com/yargs/y18n/releases)
- [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yargs/y18n/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-08 20:28:20 +00:00
dependabot-preview[bot]
f7ed97b8a4 [Security] Bump y18n from 3.2.1 to 3.2.2 in /app
Bumps [y18n](https://github.com/yargs/y18n) from 3.2.1 to 3.2.2. **This update includes a security fix.**
- [Release notes](https://github.com/yargs/y18n/releases)
- [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yargs/y18n/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-08 20:28:18 +00:00
Eugene Pankov
8bfc86e623 bundle size opt 2021-04-08 22:26:47 +02:00
Eugene
50b1fb2410 Merge pull request #3677 from Eugeny/all-contributors/add-starxg 2021-04-06 10:44:53 +02:00
allcontributors[bot]
327daf03ef docs: update .all-contributorsrc [skip ci] 2021-04-06 07:59:17 +00:00
allcontributors[bot]
224a72d029 docs: update README.md [skip ci] 2021-04-06 07:59:16 +00:00
Eugene Pankov
3c5615e464 build fix 2021-04-05 12:52:54 +02:00
Eugene Pankov
e99908761d new tab color and activity indicators 2021-04-05 12:47:16 +02:00
Eugene Pankov
0ff81abb0c bumped electron 2021-04-05 12:32:41 +02:00
Eugene Pankov
b4e703674b settings ui updates 2021-04-05 12:32:37 +02:00
Eugene Pankov
dc53668685 search ui tweaks 2021-04-05 11:17:13 +02:00
Eugene Pankov
2df848f4c0 exclude main process sourcemaps from asar 2021-04-05 11:10:38 +02:00
Eugene Pankov
247cf6f93e added a select-all shortcut - fixes #3081 2021-04-05 11:10:27 +02:00
Eugene Pankov
797265abb1 build fix 2021-04-04 21:18:46 +02:00
Eugene Pankov
62bdcb1af4 Merge branch 'master' of github.com:Eugeny/terminus 2021-04-04 21:15:43 +02:00
Eugene Pankov
25ae56718d mention the sync-config plugin 2021-04-04 21:15:39 +02:00
Eugene
b24978dc0e Merge pull request #3647 from Eugeny/dependabot/npm_and_yarn/app/keytar-7.6.0
Bump keytar from 7.4.0 to 7.6.0 in /app
2021-04-04 21:07:15 +02:00
Eugene
46a4df108b Merge pull request #3641 from Eugeny/dependabot/npm_and_yarn/types/fs-extra-9.0.9
Bump @types/fs-extra from 8.1.1 to 9.0.9
2021-04-04 21:03:50 +02:00
Eugene
3091e2be69 Merge pull request #3634 from Eugeny/dependabot/npm_and_yarn/terminus-ssh/run-script-os-1.1.6
Bump run-script-os from 1.1.5 to 1.1.6 in /terminus-ssh
2021-04-04 21:03:38 +02:00
Eugene
9a49e94642 Merge pull request #3622 from Eugeny/dependabot/npm_and_yarn/fortawesome/fontawesome-free-5.15.3
Bump @fortawesome/fontawesome-free from 5.15.2 to 5.15.3
2021-04-04 20:40:07 +02:00
Eugene Pankov
cf13fca835 back to official node-pty 2021-04-04 20:37:04 +02:00
Eugene Pankov
174a1bcca7 remote pty 2021-04-04 20:07:57 +02:00
Eugene Pankov
80c781a8ca make tabs always-present in DOM 2021-04-04 20:03:03 +02:00
Eugene Pankov
d71ee6b6f1 disable tray icon on linux - fixes #2471, fixes #1642 2021-04-04 19:59:23 +02:00
Eugene Pankov
3a7204c2ee style fix 2021-04-04 18:17:42 +02:00
dependabot-preview[bot]
5236956469 Bump keytar from 7.4.0 to 7.6.0 in /app
Bumps [keytar](https://github.com/atom/node-keytar) from 7.4.0 to 7.6.0.
- [Release notes](https://github.com/atom/node-keytar/releases)
- [Commits](https://github.com/atom/node-keytar/compare/v7.4.0...v7.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-29 04:22:05 +00:00
dependabot-preview[bot]
4dfb8df7fa Bump @types/fs-extra from 8.1.1 to 9.0.9
Bumps [@types/fs-extra](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/fs-extra) from 8.1.1 to 9.0.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/fs-extra)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-26 04:35:49 +00:00
dependabot-preview[bot]
61e65c7ec8 Bump run-script-os from 1.1.5 to 1.1.6 in /terminus-ssh
Bumps [run-script-os](https://github.com/charlesguse/run-script-os) from 1.1.5 to 1.1.6.
- [Release notes](https://github.com/charlesguse/run-script-os/releases)
- [Commits](https://github.com/charlesguse/run-script-os/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-25 04:19:44 +00:00
dependabot-preview[bot]
64ab172b8e Bump @fortawesome/fontawesome-free from 5.15.2 to 5.15.3
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 5.15.2 to 5.15.3.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/5.15.2...5.15.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-22 04:26:01 +00:00
Eugene Pankov
bd46b08c9d use @electron/remote 2021-03-20 17:12:39 +01:00
Eugene Pankov
4a97cc4383 dvorak shortcuts support - fixes #2544, fixes #2670 2021-03-20 17:12:25 +01:00
Eugene Pankov
2c11feed83 deep-clone ssh connections - fixes #3617 2021-03-20 16:24:25 +01:00
Eugene
481aa654a3 Merge pull request #3605 from Eugeny/dependabot/npm_and_yarn/app/types/node-14.14.35
Bump @types/node from 14.14.31 to 14.14.35 in /app
2021-03-20 12:43:08 +01:00
Eugene Pankov
7d1ec5b869 ui 2021-03-20 12:41:31 +01:00
Eugene Pankov
5f098ef791 bumped eslint 2021-03-20 12:41:27 +01:00
Eugene Pankov
15029066e4 Merge branch 'master' of github.com:Eugeny/terminus 2021-03-20 12:40:02 +01:00
Eugene
dbf90a5ce3 Merge pull request #3601 from Eugeny/dependabot/npm_and_yarn/patch-package-6.4.7
Bump patch-package from 6.2.2 to 6.4.7
2021-03-20 12:39:55 +01:00
Eugene Pankov
c6d4eb7083 ui 2021-03-20 12:20:48 +01:00
Eugene Pankov
e56fac03b9 fixed pkg version 2021-03-20 12:08:55 +01:00
Eugene Pankov
1132a18a0a bump ng-bootstrap 2021-03-20 12:06:10 +01:00
dependabot-preview[bot]
ebc8d846e3 Bump @types/node from 14.14.31 to 14.14.35 in /app
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.14.31 to 14.14.35.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-20 10:02:12 +00:00
dependabot-preview[bot]
123f68d705 Bump patch-package from 6.2.2 to 6.4.7
Bumps [patch-package](https://github.com/ds300/patch-package) from 6.2.2 to 6.4.7.
- [Release notes](https://github.com/ds300/patch-package/releases)
- [Changelog](https://github.com/ds300/patch-package/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ds300/patch-package/compare/v6.2.2...v6.4.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-20 10:01:01 +00:00
Eugene Pankov
8f9a7539c4 Merge branch 'master' of github.com:Eugeny/terminus 2021-03-20 11:00:31 +01:00
Eugene
98d46468e5 Merge pull request #3190 from Eugeny/dependabot/npm_and_yarn/app/types/mz-2.7.3
Bump @types/mz from 0.0.32 to 2.7.3 in /app
2021-03-20 10:59:55 +01:00
Eugene
a6d5a93e6e Merge pull request #3580 from Eugeny/dependabot/npm_and_yarn/sentry/cli-1.63.1
Bump @sentry/cli from 1.63.0 to 1.63.1
2021-03-20 10:59:50 +01:00
Eugene
558ef9894c Merge pull request #3596 from Eugeny/dependabot/npm_and_yarn/app/ngx-toastr-13.2.1
Bump ngx-toastr from 13.2.0 to 13.2.1 in /app
2021-03-20 10:59:31 +01:00
Eugene
7357dc178a Merge pull request #3598 from Eugeny/dependabot/npm_and_yarn/typedoc-0.20.32
Bump typedoc from 0.20.28 to 0.20.32
2021-03-20 10:59:15 +01:00
Eugene
cd7df7c700 Merge pull request #3599 from Eugeny/dependabot/npm_and_yarn/node-abi-2.21.0
Bump node-abi from 2.20.0 to 2.21.0
2021-03-20 10:59:06 +01:00
Eugene
a4c4c93bac Merge pull request #3607 from Eugeny/dependabot/npm_and_yarn/css-loader-5.1.3
Bump css-loader from 5.0.1 to 5.1.3
2021-03-20 10:58:51 +01:00
Eugene
a97619a474 Merge pull request #3609 from Eugeny/dependabot/npm_and_yarn/types/node-14.14.35
Bump @types/node from 14.14.31 to 14.14.35
2021-03-20 10:58:43 +01:00
Eugene
cd1cac96e9 Merge pull request #3616 from Eugeny/dependabot/npm_and_yarn/webpack-5.26.3
Bump webpack from 5.18.0 to 5.26.3
2021-03-20 10:58:37 +01:00
Eugene Pankov
9861766da0 Merge branch 'master' of github.com:Eugeny/terminus 2021-03-20 10:57:13 +01:00
dependabot-preview[bot]
bcd5f3b8bf Bump webpack from 5.18.0 to 5.26.3
Bumps [webpack](https://github.com/webpack/webpack) from 5.18.0 to 5.26.3.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.18.0...v5.26.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-18 04:21:37 +00:00
dependabot-preview[bot]
3e4f2c467d Bump @types/node from 14.14.31 to 14.14.35
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.14.31 to 14.14.35.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-16 04:23:59 +00:00
dependabot-preview[bot]
e84270609f Bump css-loader from 5.0.1 to 5.1.3
Bumps [css-loader](https://github.com/webpack-contrib/css-loader) from 5.0.1 to 5.1.3.
- [Release notes](https://github.com/webpack-contrib/css-loader/releases)
- [Changelog](https://github.com/webpack-contrib/css-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/css-loader/compare/v5.0.1...v5.1.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-16 04:23:00 +00:00
Eugene Pankov
62b1538462 fixed #3472 2021-03-15 08:59:22 +01:00
dependabot-preview[bot]
d6a62344b8 Bump node-abi from 2.20.0 to 2.21.0
Bumps [node-abi](https://github.com/lgeiger/node-abi) from 2.20.0 to 2.21.0.
- [Release notes](https://github.com/lgeiger/node-abi/releases)
- [Commits](https://github.com/lgeiger/node-abi/compare/v2.20.0...v2.21.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-15 04:24:56 +00:00
dependabot-preview[bot]
d2e16cd73a Bump typedoc from 0.20.28 to 0.20.32
Bumps [typedoc](https://github.com/TypeStrong/TypeDoc) from 0.20.28 to 0.20.32.
- [Release notes](https://github.com/TypeStrong/TypeDoc/releases)
- [Commits](https://github.com/TypeStrong/TypeDoc/compare/v0.20.28...v0.20.32)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-15 04:24:28 +00:00
dependabot-preview[bot]
87d3b08c37 Bump ngx-toastr from 13.2.0 to 13.2.1 in /app
Bumps [ngx-toastr](https://github.com/scttcper/ngx-toastr) from 13.2.0 to 13.2.1.
- [Release notes](https://github.com/scttcper/ngx-toastr/releases)
- [Commits](https://github.com/scttcper/ngx-toastr/compare/v13.2.0...v13.2.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-15 04:23:28 +00:00
Eugene
3a7db137c5 Merge pull request #3595 from Eugeny/imgbot
[ImgBot] Optimize images
2021-03-14 20:01:03 +01:00
ImgBotApp
da0f4e7afc [ImgBot] Optimize images
*Total -- 1,742.80kb -> 1,143.10kb (34.41%)

/docs/readme-ssh.png -- 613.63kb -> 371.43kb (39.47%)
/docs/readme-terminal.png -- 1,082.06kb -> 727.74kb (32.75%)
/terminus-terminal/src/icons/suse.svg -- 3.46kb -> 2.80kb (18.98%)
/app/assets/logo.svg -- 2.94kb -> 2.62kb (10.98%)
/build/icons/icon.svg -- 3.08kb -> 2.75kb (10.75%)
/terminus-terminal/src/icons/linux.svg -- 18.02kb -> 16.95kb (5.95%)
/terminus-terminal/src/icons/debian.svg -- 5.33kb -> 5.02kb (5.86%)
/terminus-terminal/src/icons/cmd.svg -- 0.40kb -> 0.38kb (4.85%)
/terminus-serial/src/icons/serial.svg -- 4.29kb -> 4.08kb (4.74%)
/terminus-terminal/src/icons/clink.svg -- 0.40kb -> 0.38kb (4.39%)
/terminus-terminal/src/icons/plus.svg -- 0.46kb -> 0.44kb (4.26%)
/terminus-terminal/src/icons/cmder-powershell.svg -- 0.57kb -> 0.55kb (3.08%)
/terminus-terminal/src/icons/cmder.svg -- 0.57kb -> 0.56kb (3.06%)
/terminus-terminal/src/icons/profiles.svg -- 0.67kb -> 0.65kb (2.92%)
/terminus-terminal/src/icons/ubuntu.svg -- 3.09kb -> 3.00kb (2.69%)
/terminus-terminal/src/icons/powershell.svg -- 0.66kb -> 0.64kb (2.65%)
/terminus-terminal/src/icons/powershell-core.svg -- 0.66kb -> 0.65kb (2.65%)
/terminus-terminal/src/icons/git-bash.svg -- 0.72kb -> 0.70kb (2.45%)
/terminus-terminal/src/icons/cygwin.svg -- 0.31kb -> 0.31kb (2.17%)
/terminus-terminal/src/icons/alpine.svg -- 1.46kb -> 1.44kb (1.74%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
2021-03-14 18:56:55 +00:00
Eugene Pankov
e1980a6611 updated readme 2021-03-14 19:55:59 +01:00
Eugene Pankov
08cc19946f fixed font loading in the web version 2021-03-14 14:40:36 +01:00
Eugene Pankov
f6d4a51239 proper xdg category 2021-03-14 11:51:27 +01:00
Eugene Pankov
36f77c5b63 added hex serial input/output modes 2021-03-14 11:34:58 +01:00
Eugene Pankov
3676b90c9f build fix 2021-03-13 22:09:05 +01:00
Eugene Pankov
c4204167cd make tab close button not take up extra space - fixes #3502 2021-03-13 22:08:20 +01:00
Eugene Pankov
604d7c464f fixed cycling tab reordering via hotkeys - fixes #3510 2021-03-13 21:43:36 +01:00
Eugene Pankov
e42bd11725 made progress detection optional - fixes #3472 2021-03-13 21:38:03 +01:00
Eugene Pankov
864932d663 settings ui tweak 2021-03-13 21:30:22 +01:00
Eugene Pankov
9e68c735dc added scrolling to typeahead - fixes #1178 2021-03-13 21:28:21 +01:00
Eugene Pankov
be43f8b50d disallow disabling core plugins - fixes #1990 2021-03-13 21:25:25 +01:00
Eugene Pankov
c290633e7e detect user@domain style usernames in ssh quick connect - fixes #3026 2021-03-13 21:02:49 +01:00
Eugene Pankov
d03211631a fixed #2600 2021-03-13 20:09:45 +01:00
Eugene Pankov
ca27c05f0f bumped electron 2021-03-13 20:06:42 +01:00
Eugene Pankov
62a21b03ea duplicate tab title and color when duplicating a tab - fixes #3588 2021-03-13 20:06:37 +01:00
dependabot-preview[bot]
2f7d29c523 Bump @sentry/cli from 1.63.0 to 1.63.1
Bumps [@sentry/cli](https://github.com/getsentry/sentry-cli) from 1.63.0 to 1.63.1.
- [Release notes](https://github.com/getsentry/sentry-cli/releases)
- [Changelog](https://github.com/getsentry/sentry-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-cli/compare/1.63.0...1.63.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-11 04:23:43 +00:00
Eugene Pankov
6236ee95c3 Update app.module.ts 2021-03-10 22:25:02 +01:00
Eugene Pankov
836014c270 shorter notification for copying 2021-03-10 22:08:11 +01:00
Eugene Pankov
0bf870738e option to disable dynamic tab title in profiles - fixes #3574 2021-03-10 21:36:12 +01:00
Eugene Pankov
7c1697b9cb Revert "Bump electron-is-dev from 1.2.0 to 2.0.0 in /app"
This reverts commit a241144827.
2021-03-10 21:17:42 +01:00
dependabot-preview[bot]
67190e9622 Bump readable-stream from 2.3.7 to 3.6.0 in /terminus-core
Bumps [readable-stream](https://github.com/nodejs/readable-stream) from 2.3.7 to 3.6.0.
- [Release notes](https://github.com/nodejs/readable-stream/releases)
- [Commits](https://github.com/nodejs/readable-stream/compare/v2.3.7...v3.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 19:55:59 +00:00
Eugene Pankov
c800dd6e44 Merge branch 'master' of github.com:Eugeny/terminus 2021-03-10 20:54:44 +01:00
Eugene
68e9a1f66b Merge pull request #3320 from Eugeny/dependabot/npm_and_yarn/terminus-core/ngx-perfect-scrollbar-10.1.0
Bump ngx-perfect-scrollbar from 8.0.0 to 10.1.0 in /terminus-core
2021-03-10 20:54:36 +01:00
Eugene Pankov
f925d63fb0 Merge branch 'master' of github.com:Eugeny/terminus 2021-03-10 20:51:53 +01:00
Eugene Pankov
e79fc13de9 bumped plugins 2021-03-10 20:51:50 +01:00
Eugene Pankov
0c963dcbcc expose sessionChanged$ 2021-03-10 20:51:44 +01:00
Eugene
b7b672ce9b Merge pull request #3548 from Eugeny/dependabot/npm_and_yarn/electron-builder-22.10.5
Bump electron-builder from 22.10.4 to 22.10.5
2021-03-10 20:50:33 +01:00
Eugene
4c8bb45d01 Merge pull request #3544 from Eugeny/dependabot/npm_and_yarn/graceful-fs-4.2.6 2021-03-10 20:49:11 +01:00
Eugene
d4f8a88451 Merge pull request #3525 from Eugeny/dependabot/npm_and_yarn/terminus-core/core-js-3.9.1 2021-03-10 20:49:01 +01:00
dependabot-preview[bot]
fac8fafa36 Bump electron-builder from 22.10.4 to 22.10.5
Bumps [electron-builder](https://github.com/electron-userland/electron-builder) from 22.10.4 to 22.10.5.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/compare/v22.10.4...v22.10.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 19:48:54 +00:00
dependabot-preview[bot]
bc854fcfff Bump graceful-fs from 4.2.4 to 4.2.6
Bumps [graceful-fs](https://github.com/isaacs/node-graceful-fs) from 4.2.4 to 4.2.6.
- [Release notes](https://github.com/isaacs/node-graceful-fs/releases)
- [Commits](https://github.com/isaacs/node-graceful-fs/compare/v4.2.4...v4.2.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 19:48:51 +00:00
Eugene
ebc83b8064 Merge pull request #3375 from Eugeny/dependabot/npm_and_yarn/app/ngx-toastr-13.2.0 2021-03-10 20:48:50 +01:00
dependabot-preview[bot]
6757deab67 Bump core-js from 3.8.2 to 3.9.1 in /terminus-core
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.8.2 to 3.9.1.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.9.1/packages/core-js)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 19:48:28 +00:00
dependabot-preview[bot]
fe68d9a34e Bump ngx-toastr from 12.1.0 to 13.2.0 in /app
Bumps [ngx-toastr](https://github.com/scttcper/ngx-toastr) from 12.1.0 to 13.2.0.
- [Release notes](https://github.com/scttcper/ngx-toastr/releases)
- [Commits](https://github.com/scttcper/ngx-toastr/compare/v12.1.0...v13.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 19:48:26 +00:00
dependabot-preview[bot]
f42c3cdde4 Bump @types/mz from 0.0.32 to 2.7.3 in /app
Bumps [@types/mz](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/mz) from 0.0.32 to 2.7.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/mz)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 19:48:21 +00:00
Eugene
2840ae2aa7 Merge pull request #3546 from Eugeny/dependabot/npm_and_yarn/pug-3.0.2
Bump pug from 3.0.1 to 3.0.2
2021-03-10 20:47:19 +01:00
Eugene
b275f5311d Merge pull request #3530 from Eugeny/dependabot/npm_and_yarn/core-js-3.9.1
Bump core-js from 3.8.3 to 3.9.1
2021-03-10 20:47:09 +01:00
Eugene
4e084cdc93 Merge pull request #3559 from Eugeny/dependabot/npm_and_yarn/app/node-abi-2.21.0
Bump node-abi from 2.20.0 to 2.21.0 in /app
2021-03-10 20:46:47 +01:00
Eugene
910b207160 Merge pull request #3572 from Eugeny/dependabot/npm_and_yarn/html-loader-2.1.2
Bump html-loader from 1.3.2 to 2.1.2
2021-03-10 20:46:23 +01:00
Eugene
f54ff37010 Merge pull request #3560 from Eugeny/dependabot/npm_and_yarn/typescript-eslint/parser-4.17.0
Bump @typescript-eslint/parser from 4.14.1 to 4.17.0
2021-03-10 20:42:50 +01:00
Eugene
03d9d46a8c Merge pull request #3423 from Eugeny/dependabot/npm_and_yarn/webpack-cli-4.5.0
Bump webpack-cli from 4.4.0 to 4.5.0
2021-03-10 20:42:41 +01:00
Eugene
7111f35268 Merge pull request #3550 from Eugeny/dependabot/npm_and_yarn/sentry/electron-2.4.0
Bump @sentry/electron from 2.2.0 to 2.4.0
2021-03-10 20:42:12 +01:00
Eugene
44427ac3b6 Merge pull request #3568 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-4.11.0
Bump xterm from 4.10.0 to 4.11.0 in /terminus-terminal
2021-03-10 20:42:04 +01:00
Eugene
8816910e43 Merge pull request #3567 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-addon-serialize-0.5.0
Bump xterm-addon-serialize from 0.4.0 to 0.5.0 in /terminus-terminal
2021-03-10 20:41:01 +01:00
Eugene
31464ee37a Merge pull request #3566 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-addon-webgl-0.10.0
Bump xterm-addon-webgl from 0.9.0 to 0.10.0 in /terminus-terminal
2021-03-10 20:40:54 +01:00
dependabot-preview[bot]
4bdb72021b Bump html-loader from 1.3.2 to 2.1.2
Bumps [html-loader](https://github.com/webpack-contrib/html-loader) from 1.3.2 to 2.1.2.
- [Release notes](https://github.com/webpack-contrib/html-loader/releases)
- [Changelog](https://github.com/webpack-contrib/html-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/html-loader/compare/v1.3.2...v2.1.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 04:21:47 +00:00
dependabot-preview[bot]
7d5e70c718 Bump xterm from 4.10.0 to 4.11.0 in /terminus-terminal
Bumps [xterm](https://github.com/xtermjs/xterm.js) from 4.10.0 to 4.11.0.
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](https://github.com/xtermjs/xterm.js/compare/4.10.0...4.11.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 04:18:43 +00:00
dependabot-preview[bot]
6af92c9f95 Bump xterm-addon-serialize from 0.4.0 to 0.5.0 in /terminus-terminal
Bumps xterm-addon-serialize from 0.4.0 to 0.5.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 04:18:16 +00:00
dependabot-preview[bot]
4a8fe78b07 Bump xterm-addon-webgl from 0.9.0 to 0.10.0 in /terminus-terminal
Bumps [xterm-addon-webgl](https://github.com/xtermjs/xterm.js) from 0.9.0 to 0.10.0.
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](https://github.com/xtermjs/xterm.js/compare/0.9...0.10)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 04:17:54 +00:00
dependabot-preview[bot]
1aa6bc3c10 Bump @typescript-eslint/parser from 4.14.1 to 4.17.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 4.14.1 to 4.17.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.17.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-09 04:18:01 +00:00
dependabot-preview[bot]
93d74bf3cb Bump node-abi from 2.20.0 to 2.21.0 in /app
Bumps [node-abi](https://github.com/lgeiger/node-abi) from 2.20.0 to 2.21.0.
- [Release notes](https://github.com/lgeiger/node-abi/releases)
- [Commits](https://github.com/lgeiger/node-abi/compare/v2.20.0...v2.21.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-08 04:21:17 +00:00
Eugene
9e16ef5a57 Merge pull request #3555 from Eugeny/all-contributors/add-iamchating 2021-03-05 17:18:41 +03:00
allcontributors[bot]
741c77506c docs: update .all-contributorsrc [skip ci] 2021-03-05 14:17:23 +00:00
allcontributors[bot]
507cc16190 docs: update README.md [skip ci] 2021-03-05 14:17:22 +00:00
Eugene
bfeb353858 Merge pull request #3554 from iamchating/master
FIX: #3520
2021-03-05 17:17:06 +03:00
Tan, Tian
806bfef8bf FIX: #3520 2021-03-05 21:19:43 +08:00
Eugene Pankov
975b5a117d build typings before docs 2021-03-04 09:42:46 +01:00
dependabot-preview[bot]
46e4832a66 Bump @sentry/electron from 2.2.0 to 2.4.0
Bumps [@sentry/electron](https://github.com/getsentry/sentry-electron) from 2.2.0 to 2.4.0.
- [Release notes](https://github.com/getsentry/sentry-electron/releases)
- [Changelog](https://github.com/getsentry/sentry-electron/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-electron/compare/2.2.0...2.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-04 04:22:48 +00:00
dependabot-preview[bot]
6ab7093cc6 Bump pug from 3.0.1 to 3.0.2
Bumps [pug](https://github.com/pugjs/pug) from 3.0.1 to 3.0.2.
- [Release notes](https://github.com/pugjs/pug/releases)
- [Commits](https://github.com/pugjs/pug/compare/pug@3.0.1...pug@3.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-04 04:20:52 +00:00
dependabot-preview[bot]
00cc2474cc Bump core-js from 3.8.3 to 3.9.1
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.8.3 to 3.9.1.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.9.1/packages/core-js)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:42:25 +00:00
dependabot-preview[bot]
4e4d02041a Bump webpack-cli from 4.4.0 to 4.5.0
Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 4.4.0 to 4.5.0.
- [Release notes](https://github.com/webpack/webpack-cli/releases)
- [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.4.0...webpack-cli@4.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:41:22 +00:00
Eugene
09ac506dd3 Merge pull request #3504 from Eugeny/dependabot/npm_and_yarn/terminus-settings/utils-decorators-1.8.1
Bump utils-decorators from 1.8.0 to 1.8.1 in /terminus-settings
2021-03-03 23:40:26 +03:00
Eugene
769ce6bc0b Merge pull request #3527 from Eugeny/dependabot/npm_and_yarn/app/rxjs-6.6.6
Bump rxjs from 6.6.3 to 6.6.6 in /app
2021-03-03 23:40:14 +03:00
Eugene
26605124c1 Merge pull request #3172 from Eugeny/dependabot/npm_and_yarn/terminus-plugin-manager/semver-7.3.4
Bump semver from 7.2.2 to 7.3.4 in /terminus-plugin-manager
2021-03-03 23:40:07 +03:00
Eugene
7465c32645 Merge pull request #3380 from Eugeny/dependabot/npm_and_yarn/tslib-2.1.0
Bump tslib from 2.0.3 to 2.1.0
2021-03-03 23:39:56 +03:00
Eugene
846ac62a7f Merge pull request #3541 from Eugeny/dependabot/npm_and_yarn/pug-code-gen-2.0.3
Bump pug-code-gen from 2.0.2 to 2.0.3
2021-03-03 23:39:49 +03:00
Eugene
eae2c5ee16 Merge pull request #3529 from Eugeny/dependabot/npm_and_yarn/typescript-3.9.9
Bump typescript from 3.9.7 to 3.9.9
2021-03-03 23:39:05 +03:00
Eugene
4fd89105e5 Merge pull request #3483 from Eugeny/dependabot/npm_and_yarn/terminus-ssh/types/node-14.14.31
Bump @types/node from 14.14.14 to 14.14.31 in /terminus-ssh
2021-03-03 23:38:56 +03:00
dependabot[bot]
87c1bef16e Bump pug-code-gen from 2.0.2 to 2.0.3
Bumps [pug-code-gen](https://github.com/pugjs/pug) from 2.0.2 to 2.0.3.
- [Release notes](https://github.com/pugjs/pug/releases)
- [Commits](https://github.com/pugjs/pug/compare/pug-code-gen@2.0.2...pug@2.0.3)

Signed-off-by: dependabot[bot] <support@github.com>
2021-03-03 20:38:54 +00:00
Eugene
eed35c2613 Merge pull request #3484 from Eugeny/dependabot/npm_and_yarn/app/types/node-14.14.31
Bump @types/node from 14.14.14 to 14.14.31 in /app
2021-03-03 23:38:44 +03:00
dependabot-preview[bot]
678f2f7a85 Bump @types/node from 14.14.14 to 14.14.31 in /app
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.14.14 to 14.14.31.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:37:35 +00:00
Eugene
0b1bacaf0d Merge pull request #3542 from Eugeny/dependabot/npm_and_yarn/pug-3.0.1
[Security] Bump pug from 3.0.0 to 3.0.1
2021-03-03 23:37:31 +03:00
dependabot-preview[bot]
98b5a27382 Bump @types/node from 14.14.14 to 14.14.31 in /terminus-ssh
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.14.14 to 14.14.31.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:37:11 +00:00
dependabot-preview[bot]
76a81b9402 Bump typescript from 3.9.7 to 3.9.9
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 3.9.7 to 3.9.9.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v3.9.7...v3.9.9)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:36:37 +00:00
dependabot-preview[bot]
634b221aa3 Bump tslib from 2.0.3 to 2.1.0
Bumps [tslib](https://github.com/Microsoft/tslib) from 2.0.3 to 2.1.0.
- [Release notes](https://github.com/Microsoft/tslib/releases)
- [Commits](https://github.com/Microsoft/tslib/compare/2.0.3...2.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:36:17 +00:00
dependabot-preview[bot]
ffcb3e72c2 [Security] Bump pug from 3.0.0 to 3.0.1
Bumps [pug](https://github.com/pugjs/pug) from 3.0.0 to 3.0.1. **This update includes a security fix.**
- [Release notes](https://github.com/pugjs/pug/releases)
- [Commits](https://github.com/pugjs/pug/compare/pug@3.0.0...pug@3.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:36:17 +00:00
dependabot-preview[bot]
b4b7bdeb16 Bump semver from 7.2.2 to 7.3.4 in /terminus-plugin-manager
Bumps [semver](https://github.com/npm/node-semver) from 7.2.2 to 7.3.4.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/master/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v7.2.2...v7.3.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:36:04 +00:00
Eugene
21daa4aa18 Merge pull request #3486 from Eugeny/dependabot/npm_and_yarn/types/node-14.14.31
Bump @types/node from 14.14.14 to 14.14.31
2021-03-03 23:35:51 +03:00
Eugene
867dbcddcc Merge pull request #3482 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/slugify-1.4.7
Bump slugify from 1.4.6 to 1.4.7 in /terminus-terminal
2021-03-03 23:35:08 +03:00
Eugene
b906dbd8d6 Merge pull request #3189 from Eugeny/dependabot/npm_and_yarn/terminus-core/uuid-8.3.2
Bump uuid from 8.2.0 to 8.3.2 in /terminus-core
2021-03-03 23:34:59 +03:00
Eugene
e5c7d0649f Merge pull request #3347 from Eugeny/dependabot/npm_and_yarn/terminus-ssh/run-script-os-1.1.5
Bump run-script-os from 1.1.3 to 1.1.5 in /terminus-ssh
2021-03-03 23:34:48 +03:00
Eugene
55286bc7e7 Merge pull request #3429 from Eugeny/dependabot/npm_and_yarn/sass-loader-11.0.1
Bump sass-loader from 10.1.1 to 11.0.1
2021-03-03 23:34:40 +03:00
Eugene Pankov
359e41f884 Merge branch 'dependabot/npm_and_yarn/typedoc-0.20.28' 2021-03-03 21:33:49 +01:00
Eugene Pankov
cc93578ada typedoc fixes 2021-03-03 21:33:37 +01:00
dependabot-preview[bot]
2e54fa317c Bump @types/node from 14.14.14 to 14.14.31
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.14.14 to 14.14.31.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:26:55 +00:00
dependabot-preview[bot]
c3bd725ce8 Bump ngx-perfect-scrollbar from 8.0.0 to 10.1.0 in /terminus-core
Bumps [ngx-perfect-scrollbar](https://github.com/zefoy/ngx-perfect-scrollbar) from 8.0.0 to 10.1.0.
- [Release notes](https://github.com/zefoy/ngx-perfect-scrollbar/releases)
- [Commits](https://github.com/zefoy/ngx-perfect-scrollbar/compare/v8.0.0...v10.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:25:49 +00:00
Eugene
18f69c5527 Merge pull request #3485 from Eugeny/dependabot/npm_and_yarn/app/serialport-9.0.7
Bump serialport from 9.0.4 to 9.0.7 in /app
2021-03-03 23:24:38 +03:00
Eugene
0102a2a61b Merge pull request #3301 from Eugeny/dependabot/npm_and_yarn/terminus-core/types/js-yaml-4.0.0
Bump @types/js-yaml from 3.12.5 to 4.0.0 in /terminus-core
2021-03-03 23:24:31 +03:00
Eugene
1de709561c Merge pull request #3381 from Eugeny/dependabot/npm_and_yarn/types/js-yaml-4.0.0
Bump @types/js-yaml from 3.12.5 to 4.0.0
2021-03-03 23:24:26 +03:00
Eugene
9f985ee8f0 Merge pull request #3287 from Eugeny/dependabot/npm_and_yarn/terminus-core/js-yaml-4.0.0
Bump js-yaml from 3.14.0 to 4.0.0 in /terminus-core
2021-03-03 23:24:20 +03:00
Eugene
1a35ed3c73 Merge pull request #3528 from Eugeny/dependabot/npm_and_yarn/app/electron-is-dev-2.0.0
Bump electron-is-dev from 1.2.0 to 2.0.0 in /app
2021-03-03 23:23:53 +03:00
dependabot-preview[bot]
a241144827 Bump electron-is-dev from 1.2.0 to 2.0.0 in /app
Bumps [electron-is-dev](https://github.com/sindresorhus/electron-is-dev) from 1.2.0 to 2.0.0.
- [Release notes](https://github.com/sindresorhus/electron-is-dev/releases)
- [Commits](https://github.com/sindresorhus/electron-is-dev/compare/v1.2.0...v2.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:04:32 +00:00
dependabot-preview[bot]
18e341f886 Bump js-yaml from 3.14.0 to 4.0.0 in /terminus-core
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 3.14.0 to 4.0.0.
- [Release notes](https://github.com/nodeca/js-yaml/releases)
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/3.14.0...4.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:03:52 +00:00
Eugene
3182d4428d Merge pull request #3321 from Eugeny/dependabot/npm_and_yarn/app/glasstron-0.0.7
Bump glasstron from 0.0.6 to 0.0.7 in /app
2021-03-03 23:02:28 +03:00
Eugene
6dfcb9422a Merge pull request #3379 from Eugeny/dependabot/npm_and_yarn/fortawesome/fontawesome-free-5.15.2
Bump @fortawesome/fontawesome-free from 5.15.1 to 5.15.2
2021-03-03 22:59:20 +03:00
Eugene Pankov
ad5993b94f bumepd node-abi 2021-03-03 20:58:33 +01:00
Eugene Pankov
eb9826fb2a macos: only query default shell once 2021-03-02 22:55:06 +01:00
Eugene Pankov
1c81baa6f2 added docking space adjustment - fixes #3524 2021-03-02 22:53:26 +01:00
Eugene Pankov
e07c5db0a8 let themes specify macos titlebar buttons offset - fixes #3507 2021-03-02 22:41:17 +01:00
Eugene Pankov
b93989d02b remove titlebar padding in fullscreen - fixes #3532 2021-03-02 22:12:15 +01:00
Eugene Pankov
15bfde6077 Update linux.yml 2021-03-02 22:01:42 +01:00
Eugene Pankov
4243e79a11 patch node-abi in linux builds 2021-03-02 21:58:15 +01:00
Eugene Pankov
eb49001614 node-abi patches 2021-03-02 15:58:36 +01:00
Eugene
3aaa670400 Merge pull request #3535 from Eugeny/all-contributors/add-clarkwang 2021-03-02 13:03:25 +03:00
allcontributors[bot]
5371b2d1a6 docs: update .all-contributorsrc [skip ci] 2021-03-02 09:13:12 +00:00
allcontributors[bot]
e46281a9a7 docs: update README.md [skip ci] 2021-03-02 09:13:11 +00:00
Eugene
9d4aa179a0 Merge pull request #3534 from clarkwang/hotkeys-for-tab-11-20
fixes #3500: add hotkey support for Tabs 11~20
2021-03-02 12:12:59 +03:00
Clark Wang
20118afd1f fixes #3500: add hotkey support for Tabs 11~20 2021-03-02 16:57:40 +08:00
dependabot-preview[bot]
b29daac3c6 Bump @types/js-yaml from 3.12.5 to 4.0.0
Bumps [@types/js-yaml](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/js-yaml) from 3.12.5 to 4.0.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/js-yaml)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-02 08:56:51 +00:00
dependabot-preview[bot]
8ba9e8b210 Bump @types/js-yaml from 3.12.5 to 4.0.0 in /terminus-core
Bumps [@types/js-yaml](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/js-yaml) from 3.12.5 to 4.0.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/js-yaml)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-02 08:55:39 +00:00
Eugene
f3f3edfbb6 Merge pull request #3526 from Eugeny/dependabot/npm_and_yarn/terminus-core/electron-updater-4.3.8
Bump electron-updater from 4.3.5 to 4.3.8 in /terminus-core
2021-03-02 11:54:23 +03:00
Eugene Pankov
472cb18a16 Merge branch 'master' of github.com:Eugeny/terminus 2021-03-02 09:52:51 +01:00
Eugene Pankov
7c8d8ebc81 ui tweaks 2021-03-02 09:52:48 +01:00
Eugene Pankov
18fc0fa886 bumped electron to stable 2021-03-02 09:52:41 +01:00
dependabot-preview[bot]
5a90c246b9 Bump rxjs from 6.6.3 to 6.6.6 in /app
Bumps [rxjs](https://github.com/reactivex/rxjs) from 6.6.3 to 6.6.6.
- [Release notes](https://github.com/reactivex/rxjs/releases)
- [Changelog](https://github.com/ReactiveX/rxjs/blob/6.6.6/CHANGELOG.md)
- [Commits](https://github.com/reactivex/rxjs/compare/6.6.3...6.6.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-02 04:16:46 +00:00
dependabot-preview[bot]
9bc31556f2 Bump electron-updater from 4.3.5 to 4.3.8 in /terminus-core
Bumps [electron-updater](https://github.com/electron-userland/electron-builder) from 4.3.5 to 4.3.8.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-02 04:16:22 +00:00
dependabot-preview[bot]
2c81491825 Bump @fortawesome/fontawesome-free from 5.15.1 to 5.15.2
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 5.15.1 to 5.15.2.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/5.15.1...5.15.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-01 20:16:43 +00:00
dependabot-preview[bot]
9ed18d965c Bump glasstron from 0.0.6 to 0.0.7 in /app
Bumps [glasstron](https://github.com/AryToNeX/Glasstron) from 0.0.6 to 0.0.7.
- [Release notes](https://github.com/AryToNeX/Glasstron/releases)
- [Commits](https://github.com/AryToNeX/Glasstron/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-01 20:15:11 +00:00
Eugene
b4f76847bf Merge pull request #3425 from Eugeny/dependabot/npm_and_yarn/electron-rebuild-2.3.5
Bump electron-rebuild from 2.3.4 to 2.3.5
2021-03-01 23:03:26 +03:00
Eugene
b9bcb14dd7 Merge pull request #3466 from Eugeny/dependabot/npm_and_yarn/app/keytar-7.4.0
Bump keytar from 7.3.0 to 7.4.0 in /app
2021-03-01 23:03:05 +03:00
Eugene
ee3e17981b Merge pull request #3503 from Eugeny/dependabot/npm_and_yarn/app/zone.js-0.11.4
Bump zone.js from 0.11.3 to 0.11.4 in /app
2021-03-01 23:02:37 +03:00
Eugene
415d833ae6 Merge pull request #3515 from Eugeny/dependabot/npm_and_yarn/sentry/cli-1.63.0
Bump @sentry/cli from 1.61.0 to 1.63.0
2021-03-01 23:02:13 +03:00
Eugene Pankov
ed9117670e split fpm options 2021-02-28 12:34:49 +01:00
Eugene Pankov
0ecd47346d Merge branch 'master' of github.com:Eugeny/terminus 2021-02-28 12:15:27 +01:00
Eugene Pankov
bc0024ec06 disable packaging build-id links - fixes #3523 2021-02-28 12:15:25 +01:00
dependabot-preview[bot]
bdec20f7c7 Bump @sentry/cli from 1.61.0 to 1.63.0
Bumps [@sentry/cli](https://github.com/getsentry/sentry-cli) from 1.61.0 to 1.63.0.
- [Release notes](https://github.com/getsentry/sentry-cli/releases)
- [Changelog](https://github.com/getsentry/sentry-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-cli/compare/1.61.0...1.63.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-26 04:22:23 +00:00
dependabot-preview[bot]
45ebe3caf9 Bump utils-decorators from 1.8.0 to 1.8.1 in /terminus-settings
Bumps [utils-decorators](https://github.com/vlio20/utils-decorators) from 1.8.0 to 1.8.1.
- [Release notes](https://github.com/vlio20/utils-decorators/releases)
- [Commits](https://github.com/vlio20/utils-decorators/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-24 04:17:51 +00:00
dependabot-preview[bot]
7315bc8d8b Bump zone.js from 0.11.3 to 0.11.4 in /app
Bumps [zone.js](https://github.com/angular/angular/tree/HEAD/packages/zone.js) from 0.11.3 to 0.11.4.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/master/packages/zone.js/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/zone.js-0.11.4/packages/zone.js)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-24 04:17:15 +00:00
Eugene
a969dc1ea4 use yarn in HACKING.md 2021-02-23 13:51:48 +01:00
dependabot-preview[bot]
2733dc69be Bump typedoc from 0.18.0 to 0.20.28
Bumps [typedoc](https://github.com/TypeStrong/TypeDoc) from 0.18.0 to 0.20.28.
- [Release notes](https://github.com/TypeStrong/TypeDoc/releases)
- [Commits](https://github.com/TypeStrong/TypeDoc/compare/v0.18.0...v0.20.28)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-23 04:24:34 +00:00
Eugene Pankov
bb86848cd3 Merge branch 'master' of github.com:Eugeny/terminus 2021-02-22 11:22:25 +01:00
Eugene
e844ad6063 Merge pull request #3491 from Eugeny/all-contributors/add-VectorKappa 2021-02-22 12:58:48 +03:00
allcontributors[bot]
a096a691cc docs: update .all-contributorsrc [skip ci] 2021-02-22 09:58:08 +00:00
allcontributors[bot]
a28e25e96a docs: update README.md [skip ci] 2021-02-22 09:58:07 +00:00
Eugene
a09ce13709 Merge pull request #3489 from VectorKappa/master
Add Nord theme
2021-02-22 12:57:28 +03:00
VectorKappa
123d8ceb5f Add Nord theme 2021-02-22 09:34:36 +01:00
dependabot-preview[bot]
c0155c8d4e Bump serialport from 9.0.4 to 9.0.7 in /app
Bumps [serialport](https://github.com/serialport/node-serialport) from 9.0.4 to 9.0.7.
- [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.0.4...v9.0.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-22 04:18:38 +00:00
dependabot-preview[bot]
fcda35b02e Bump slugify from 1.4.6 to 1.4.7 in /terminus-terminal
Bumps [slugify](https://github.com/simov/slugify) from 1.4.6 to 1.4.7.
- [Release notes](https://github.com/simov/slugify/releases)
- [Commits](https://github.com/simov/slugify/compare/v1.4.6...v1.4.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-22 04:16:20 +00:00
Eugene Pankov
9d6a1031da more responsive css editing 2021-02-20 19:53:27 +01:00
Eugene Pankov
c119d3283e fixed #3464 2021-02-20 19:43:21 +01:00
dependabot-preview[bot]
3667fb45ee Bump keytar from 7.3.0 to 7.4.0 in /app
Bumps [keytar](https://github.com/atom/node-keytar) from 7.3.0 to 7.4.0.
- [Release notes](https://github.com/atom/node-keytar/releases)
- [Commits](https://github.com/atom/node-keytar/compare/v7.3.0...v7.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-16 04:16:55 +00:00
Eugene Pankov
92d34343f1 fixed missing serial settings tab 2021-02-15 16:08:55 +01:00
Eugene Pankov
8afad944b7 Merge branch 'master' of https://github.com/Eugeny/terminus 2021-02-14 13:07:56 +01:00
Eugene Pankov
707d077eb2 fixed winpty input - fixes #3397 2021-02-13 15:05:29 +01:00
Eugene Pankov
92eabab509 cleanup 2021-02-13 14:53:19 +01:00
Eugene Pankov
888cfc6548 fixed windows build 2021-02-13 14:10:56 +01:00
Eugene Pankov
9cb10c3e21 tweaked plugins ui 2021-02-13 13:53:25 +01:00
Eugene Pankov
661d5af9ba casing 2021-02-13 13:40:05 +01:00
Eugene Pankov
26429bf209 removed toolbar buttons from touchbar 2021-02-13 13:25:46 +01:00
Eugene Pankov
4779c41f48 bumped electron 2021-02-13 13:16:55 +01:00
Eugene Pankov
b11eda8653 bumped electron 2021-02-13 13:04:41 +01:00
Eugene Pankov
23bff8750c added static/dynamic tab size setting - fixes #3426 2021-02-13 12:55:55 +01:00
Eugene Pankov
aab1ae3ceb reconnect hotkey - fixes #3344 2021-02-13 12:49:07 +01:00
Eugene Pankov
9b5b5a9d00 re-fixed session restarting 2021-02-13 12:47:21 +01:00
Eugene Pankov
9c87cf3f3a fixed tabs on side with compact theme 2021-02-13 12:42:23 +01:00
Eugene Pankov
a8c7134218 fixed SSH reconnection behaviour - fixed #3446, fixed #3442 2021-02-13 12:42:15 +01:00
Eugene Pankov
9734830a74 web demo fixes 2021-02-13 12:14:14 +01:00
Eugene Pankov
5fa056751d bumped angular 2021-02-13 12:14:09 +01:00
Eugene Pankov
6fdccd0a02 cleanup webpack configs 2021-02-13 12:11:38 +01:00
dependabot-preview[bot]
41ee7b7bbf Bump sass-loader from 10.1.1 to 11.0.1
Bumps [sass-loader](https://github.com/webpack-contrib/sass-loader) from 10.1.1 to 11.0.1.
- [Release notes](https://github.com/webpack-contrib/sass-loader/releases)
- [Changelog](https://github.com/webpack-contrib/sass-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/sass-loader/compare/v10.1.1...v11.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-09 04:22:04 +00:00
dependabot-preview[bot]
a755fdaa4e Bump electron-rebuild from 2.3.4 to 2.3.5
Bumps [electron-rebuild](https://github.com/electron/electron-rebuild) from 2.3.4 to 2.3.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/v2.3.4...v2.3.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-08 04:25:07 +00:00
Eugene
1149d68d1c Merge pull request #3243 from Eugeny/dependabot/npm_and_yarn/https-proxy-agent-2.2.4
[Security] Bump https-proxy-agent from 2.0.0 to 2.2.4
2021-02-07 16:33:41 +01:00
Eugene
1d92a3f89d Merge pull request #3242 from Eugeny/dependabot/npm_and_yarn/tar-2.2.2
[Security] Bump tar from 2.2.1 to 2.2.2
2021-02-07 16:33:25 +01:00
Eugene
3557345d70 Merge pull request #3222 from Eugeny/dependabot/npm_and_yarn/terminus-plugin-manager/axios-0.21.1
[Security] Bump axios from 0.19.2 to 0.21.1 in /terminus-plugin-manager
2021-02-07 16:33:06 +01:00
Eugene
86ebdd92b4 Merge pull request #3221 from Eugeny/dependabot/npm_and_yarn/terminus-core/axios-0.21.1
[Security] Bump axios from 0.19.2 to 0.21.1 in /terminus-core
2021-02-07 16:32:59 +01:00
Eugene
4764ec8249 Merge pull request #3239 from Eugeny/dependabot/npm_and_yarn/tough-cookie-2.3.4
[Security] Bump tough-cookie from 2.3.2 to 2.3.4
2021-02-07 16:32:49 +01:00
Eugene Pankov
b1752bd0b4 updated cwd settings UI 2021-02-07 13:44:17 +01:00
Eugene Pankov
1e697a952a upgraded xterm.js 2021-02-07 13:44:08 +01:00
Eugene Pankov
6bad2a2167 cache dscl output 2021-02-07 13:43:58 +01:00
Eugene Pankov
61a46e3b4a lint 2021-02-07 13:15:24 +01:00
Eugene Pankov
cba90cec0a better error messages for X11 forwarding issues 2021-02-07 12:49:34 +01:00
Eugene Pankov
7583d92747 set terminus to use built-in graphics by default - fixes #657 2021-02-07 12:49:22 +01:00
Eugene Pankov
e2b99d71ad lint 2021-02-06 17:47:17 +01:00
dependabot-preview[bot]
c829daac41 [Security] Bump tar from 2.2.1 to 2.2.2
Bumps [tar](https://github.com/npm/node-tar) from 2.2.1 to 2.2.2. **This update includes a security fix.**
- [Release notes](https://github.com/npm/node-tar/releases)
- [Changelog](https://github.com/npm/node-tar/blob/master/CHANGELOG.md)
- [Commits](https://github.com/npm/node-tar/compare/v2.2.1...v2.2.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-06 15:47:12 +00:00
Eugene Pankov
aac38fa190 CWD detection on windows where possible 2021-02-06 16:45:38 +01:00
Eugene Pankov
7098622c8f bumped electron 2021-02-06 11:20:34 +01:00
Eugene Pankov
8695003c74 lint 2021-02-01 11:40:49 +01:00
Eugene Pankov
43a27a7b7c serial newline modes 2021-01-31 20:07:26 +01:00
Eugene Pankov
dd2d2ce20d Update tsconfig.json 2021-01-31 19:33:33 +01:00
Eugene Pankov
73574374f0 readline input mode for serial terminals - #3099, #2661 2021-01-31 19:33:30 +01:00
Eugene Pankov
5bd1bfd565 better editor ts support 2021-01-31 18:20:58 +01:00
Eugene Pankov
0611afa8b5 better session handlers behaviour, added serial auto-reconnection logic - #3099 2021-01-31 18:20:39 +01:00
Eugene Pankov
91c9e8affd bumped angular 2021-01-28 22:01:42 +01:00
Eugene Pankov
322ffc5847 margin fix 2021-01-28 21:55:29 +01:00
Eugene Pankov
21084b5d24 bumped js-yaml 2021-01-28 21:52:11 +01:00
dependabot-preview[bot]
4c840a0db1 [Security] Bump https-proxy-agent from 2.0.0 to 2.2.4
Bumps [https-proxy-agent](https://github.com/TooTallNate/node-https-proxy-agent) from 2.0.0 to 2.2.4. **This update includes security fixes.**
- [Release notes](https://github.com/TooTallNate/node-https-proxy-agent/releases)
- [Commits](https://github.com/TooTallNate/node-https-proxy-agent/compare/2.0.0...2.2.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-28 20:48:14 +00:00
dependabot-preview[bot]
3b69172f62 Bump uuid from 8.2.0 to 8.3.2 in /terminus-core
Bumps [uuid](https://github.com/uuidjs/uuid) from 8.2.0 to 8.3.2.
- [Release notes](https://github.com/uuidjs/uuid/releases)
- [Changelog](https://github.com/uuidjs/uuid/blob/master/CHANGELOG.md)
- [Commits](https://github.com/uuidjs/uuid/compare/v8.2.0...v8.3.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-28 20:48:05 +00:00
Eugene Pankov
e0efb4073a bumped eslint 2021-01-28 21:46:31 +01:00
Eugene Pankov
c42b62afe6 bumped deps 2021-01-28 21:11:53 +01:00
Eugene Pankov
e2b11c83d5 fixed cli args handling 2021-01-28 21:11:47 +01:00
Eugene Pankov
891fa5770a Update electron-builder.yml 2021-01-28 18:45:09 +01:00
Eugene Pankov
6b395cc2b3 fixed windows native module import 2021-01-28 18:20:45 +01:00
Eugene Pankov
448a1a094f fixed macOS native module builds 2021-01-27 00:26:48 +01:00
Eugene Pankov
788dd61a13 exclude native modules from app.asar and sign them 2021-01-26 15:29:18 +01:00
dependabot-preview[bot]
6545a2fda6 Bump run-script-os from 1.1.3 to 1.1.5 in /terminus-ssh
Bumps [run-script-os](https://github.com/charlesguse/run-script-os) from 1.1.3 to 1.1.5.
- [Release notes](https://github.com/charlesguse/run-script-os/releases)
- [Commits](https://github.com/charlesguse/run-script-os/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-18 04:31:15 +00:00
dependabot-preview[bot]
ceb638e08d [Security] Bump tough-cookie from 2.3.2 to 2.3.4
Bumps [tough-cookie](https://github.com/salesforce/tough-cookie) from 2.3.2 to 2.3.4. **This update includes security fixes.**
- [Release notes](https://github.com/salesforce/tough-cookie/releases)
- [Changelog](https://github.com/salesforce/tough-cookie/blob/master/CHANGELOG.md)
- [Commits](https://github.com/salesforce/tough-cookie/compare/v2.3.2...v2.3.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-02 09:43:15 +00:00
dependabot-preview[bot]
040098050d Bump axios from 0.19.2 to 0.21.1 in /terminus-plugin-manager
Bumps [axios](https://github.com/axios/axios) from 0.19.2 to 0.21.1.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v0.21.1/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.19.2...v0.21.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-02 09:43:10 +00:00
dependabot-preview[bot]
00de7c148f Bump axios from 0.19.2 to 0.21.1 in /terminus-core
Bumps [axios](https://github.com/axios/axios) from 0.19.2 to 0.21.1.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v0.21.1/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.19.2...v0.21.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-02 09:43:06 +00:00
194 changed files with 5791 additions and 4095 deletions

View File

@@ -343,6 +343,42 @@
"contributions": [
"code"
]
},
{
"login": "VectorKappa",
"name": "Piotr Patalong",
"avatar_url": "https://avatars.githubusercontent.com/u/29167842?v=4",
"profile": "http://patalong.pl",
"contributions": [
"design"
]
},
{
"login": "clarkwang",
"name": "Clark Wang",
"avatar_url": "https://avatars.githubusercontent.com/u/157076?v=4",
"profile": "https://github.com/clarkwang",
"contributions": [
"code"
]
},
{
"login": "iamchating",
"name": "iamchating",
"avatar_url": "https://avatars.githubusercontent.com/u/7088153?v=4",
"profile": "https://github.com/iamchating",
"contributions": [
"code"
]
},
{
"login": "starxg",
"name": "starxg",
"avatar_url": "https://avatars.githubusercontent.com/u/34997494?v=4",
"profile": "https://github.com/starxg",
"contributions": [
"plugin"
]
}
],
"contributorsPerLine": 7,

View File

@@ -1,6 +1,8 @@
parser: '@typescript-eslint/parser'
parserOptions:
project: tsconfig.json
project:
- tsconfig.json
- '*/tsconfig.typings.json'
extends:
- 'plugin:@typescript-eslint/all'
plugins:
@@ -37,6 +39,7 @@ rules:
'@typescript-eslint/no-misused-promises': off
'@typescript-eslint/typedef': off
'@typescript-eslint/consistent-type-imports': off
'@typescript-eslint/sort-type-union-intersection-members': off
'@typescript-eslint/no-use-before-define':
- error
- classes: false
@@ -81,7 +84,8 @@ rules:
argsIgnorePattern: ^_
no-undef: error
no-var: error
object-curly-spacing:
object-curly-spacing: off
'@typescript-eslint/object-curly-spacing':
- error
- always
quote-props:

56
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,56 @@
version: 2
updates:
- package-ecosystem: npm
directory: "/"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 20
- package-ecosystem: npm
directory: "/app"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 20
- package-ecosystem: npm
directory: "/terminus-core"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 20
- package-ecosystem: npm
directory: "/terminus-settings"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 20
- package-ecosystem: npm
directory: "/terminus-terminal"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 20
- package-ecosystem: npm
directory: "/terminus-community-color-schemes"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 20
- package-ecosystem: npm
directory: "/terminus-plugin-manager"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 20
- package-ecosystem: npm
directory: "/terminus-ssh"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 20
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 20

View File

@@ -11,7 +11,7 @@ jobs:
- name: Installing Node
uses: actions/setup-node@v1
with:
node-version: 10
node-version: 15
- name: Build
run: |
@@ -23,6 +23,7 @@ jobs:
cd ..
rm app/node_modules/.yarn-integrity
yarn
yarn run build:typings
yarn run docs
rsync -e "ssh -o StrictHostKeyChecking=no" -arv docs/api/ root@ajenti.org:/srv/terminus-docs/

View File

@@ -2,7 +2,7 @@ name: Linux Build
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
runs-on: ubuntu-18.04
steps:
- name: Checkout
@@ -15,12 +15,17 @@ jobs:
- name: Install deps
run: |
sudo apt-get install bsdtar
npm i -g yarn@1.19.1
cd app
yarn
cd ..
rm app/node_modules/.yarn-integrity
yarn
./node_modules/.bin/patch-package
cd app
../node_modules/.bin/patch-package
cd ..
- name: Build native deps
run: scripts/build-native.js
@@ -53,6 +58,8 @@ jobs:
mv dist/*.deb artifact-deb/ || true
mkdir artifact-rpm
mv dist/*.rpm artifact-rpm/ || true
mkdir artifact-pacman
mv dist/*.pacman artifact-pacman/ || true
mkdir artifact-snap
mv dist/*.snap artifact-snap/ || true
mkdir artifact-tar.gz
@@ -61,19 +68,25 @@ jobs:
- uses: actions/upload-artifact@master
name: Upload DEB
with:
name: Linux .deb
name: Linux DEB
path: artifact-deb
- uses: actions/upload-artifact@master
name: Upload RPM
with:
name: Linux .rpm
name: Linux RPM
path: artifact-rpm
- uses: actions/upload-artifact@master
name: Upload Pacman Package
with:
name: Linux Pacman
path: artifact-pacman
- uses: actions/upload-artifact@master
name: Upload Snap
with:
name: Linux .snap
name: Linux Snap
path: artifact-snap
- uses: actions/upload-artifact@master

View File

@@ -7,9 +7,7 @@ jobs:
matrix:
include:
- arch: x86_64
electron_setup_cmd: 'true'
- arch: arm64
electron_setup_cmd: 'yarn add -D electron@11.1.1'
steps:
- name: Checkout
@@ -28,9 +26,10 @@ jobs:
cd ..
rm app/node_modules/.yarn-integrity
yarn
- name: Upgrade Electron for ARM builds
run: ${{ matrix.electron_setup_cmd }}
./node_modules/.bin/patch-package
cd app
../node_modules/.bin/patch-package
cd ..
- name: Build native deps
run: scripts/build-native.js

1
.gitignore vendored
View File

@@ -33,3 +33,4 @@ sentry.properties
sentry-symbols.js
terminus-ssh/util/pagent.exe
*.psd

View File

@@ -10,27 +10,25 @@ First, install the dependencies:
```
# macOS/Linux:
npm install
./scripts/install-deps.js
yarn
./scripts/build-native.js
# Windows:
npm -g install windows-build-tools
npm install
node scripts\install-deps.js
yarn
node scripts\build-native.js
```
Now, check if your build is working:
```
npm run build
yarn run build
```
Start Terminus with
```
npm start
yarn start
```
# Project layout

View File

@@ -1,44 +1,92 @@
![](https://github.com/Eugeny/terminus/raw/master/docs/readme.png)
![](docs/readme.png)
<p align="center">
<a href="https://raw.githubusercontent.com/Eugeny/terminus/master/LICENSE"><img alt="GitHub" src="https://img.shields.io/github/license/eugeny/terminus.svg?label=License&style=flat-square"></a> <a href="https://ci.appveyor.com/project/Eugeny/terminus"><img alt="AppVeyor" src="https://img.shields.io/appveyor/ci/eugeny/****terminus****.svg?label=CI&logo=appveyor&logoColor=white&style=flat-square"></a>
</p>
<p align="center">
<a href="https://github.com/Eugeny/terminus/releases/latest"><img alt="GitHub All Releases" src="https://img.shields.io/github/downloads/eugeny/terminus/total.svg?label=RELEASE&logo=github&style=for-the-badge"></a> <a href="https://nightly.link/Eugeny/terminus/workflows/windows/master"><img src="https://shields.io/badge/-Nightly-blue?logo=windows&style=for-the-badge"/></a> <a href="https://nightly.link/Eugeny/terminus/workflows/macos/master"><img src="https://shields.io/badge/-Nightly-black?logo=apple&style=for-the-badge"/></a> <a href="https://nightly.link/Eugeny/terminus/workflows/linux/master"><img src="https://shields.io/badge/-Nightly-orange?logo=linux&style=for-the-badge"/></a> <a href="https://gitter.im/terminus-terminal/community"><img alt="Gitter" src="https://img.shields.io/gitter/room/terminus/community.svg?color=magenta&logo=gitter&style=for-the-badge"></a>
</p>
----
**Terminus** is a highly configurable terminal emulator for Windows, macOS and Linux
**Terminus** is a highly configurable terminal emulator, SSH and serial client for Windows, macOS and Linux
* Integrated SSH client and connection manager
* Theming and color schemes
* Fully configurable shortcuts
* Split panes
* Remembers your tabs
* PowerShell (and PS Core), WSL, Git-Bash, Cygwin, Cmder and CMD support
* Direct file transfer from/to SSH sessions via Zmodem
* Full Unicode support including double-width characters
* Doesn't choke on fast-flowing outputs
* Proper shell experience on Windows including tab completion (via Clink)
* Integrated SSH client and connection manager
* Integrated serial terminal
* Theming and color schemes
* Fully configurable shortcuts and multi-chord shortcuts
* Split panes
* Remembers your tabs
* PowerShell (and PS Core), WSL, Git-Bash, Cygwin, Cmder and CMD support
* Direct file transfer from/to SSH sessions via Zmodem
* Full Unicode support including double-width characters
* Doesn't choke on fast-flowing outputs
* Proper shell experience on Windows including tab completion (via Clink)
[![Buy me a coffee](https://github.com/Eugeny/terminus/raw/master/docs/kofi.png)](https://ko-fi.com/eugeny)
---
# Contents
- [Contents](#contents)
- [What Terminus is and isn't](#what-terminus-is-and-isnt)
- [Terminal features](#terminal-features)
- [SSH Client](#ssh-client)
- [Serial Terminal](#serial-terminal)
- [Portable](#portable)
- [Plugins](#plugins)
- [Themes](#themes)
- [Contributing](#contributing)
<a name="about"></a>
# What Terminus is and isn't
* **Terminus is** an alternative to Windows' standard terminal (conhost), PowerShell ISE, PuTTY or iTerm
* **Terminus is not** a new shell or a MinGW or Cygwin replacement. Neither is it lightweight - if RAM usage is of importance, consider [Conemu](https://conemu.github.io) or [Alacritty](https://github.com/jwilm/alacritty)
---
<a name="terminal"></a>
# Terminal features
![](docs/readme-terminal.png)
* A V220 terminal + various extensions
* Multiple nested split panes
* Tabs on any side of the window
* Optional dockable window with a global spawn hotkey ("Quake console")
* Progress detection
* Notification on process completion
* Bracketed paste, multiline paste warnings
* Font ligatures
* Custom shell profiles
* Optional RMB paste and copy-on select (PuTTY style)
<a name="ssh"></a>
# SSH Client
![](docs/readme-ssh.png)
* SSH2 client with a connection manager
* X11 and port forwarding
* Automatic jump host management
* Agent forwarding (incl. Pageant and Windows native OpenSSH Agent)
* Login scripts
<a name="serial"></a>
# Serial Terminal
* Saved connections
* Readline input support
* Optional hex byte-by-byte input and hexdump output
* Newline conversion
* Automatic reconnection
<a name="portable"></a>
# Portable
For portable in windows, user can create folder `data` at the same directory as `Terminal.exe` to save the settings.
Terminus will run as a portable app on Windows, if you create a `data` folder in the same location where `Terminus.exe` lives.
<a name="plugins"></a>
# Plugins
Plugins and themes can be installed directly from the Settings view inside Terminus.
@@ -48,7 +96,9 @@ Plugins and themes can be installed directly from the Settings view inside Termi
* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - quickly send commands to one or all terminal tabs
* [save-output](https://github.com/Eugeny/terminus-save-output) - record terminal output into a file
* [scrollbar](https://github.com/kbjr/terminus-scrollbar) - adds a scrollbar to hterm tabs
* [sync-config](https://github.com/starxg/terminus-sync-config) - sync the config to Gist or Gitee
<a name="themes"></a>
# Themes
* [hype](https://github.com/Eugeny/terminus-theme-hype) - a Hyper inspired theme
@@ -57,8 +107,7 @@ Plugins and themes can be installed directly from the Settings view inside Termi
* [windows10](https://www.npmjs.com/package/terminus-theme-windows10)
* [altair](https://github.com/yxuko/terminus-altair)
---
<a name="contributing"></a>
# Contributing
Pull requests and plugins are welcome!
@@ -66,6 +115,7 @@ Pull requests and plugins are welcome!
See [HACKING.md](https://github.com/Eugeny/terminus/blob/master/HACKING.md) and [API docs](http://ajenti.org/terminus-docs/) for information of how the project is laid out, and a very brief plugin development tutorial.
---
<a name="contributors"></a>
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
@@ -121,6 +171,10 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
<tr>
<td align="center"><a href="https://github.com/TakuroOnoda"><img src="https://avatars0.githubusercontent.com/u/1407926?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Takuro Onoda</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=TakuroOnoda" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/frauhottelmann"><img src="https://avatars2.githubusercontent.com/u/902705?v=4?s=100" width="100px;" alt=""/><br /><sub><b>frauhottelmann</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=frauhottelmann" title="Code">💻</a></td>
<td align="center"><a href="http://patalong.pl"><img src="https://avatars.githubusercontent.com/u/29167842?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Piotr Patalong</b></sub></a><br /><a href="#design-VectorKappa" title="Design">🎨</a></td>
<td align="center"><a href="https://github.com/clarkwang"><img src="https://avatars.githubusercontent.com/u/157076?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Clark Wang</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=clarkwang" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/iamchating"><img src="https://avatars.githubusercontent.com/u/7088153?v=4?s=100" width="100px;" alt=""/><br /><sub><b>iamchating</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=iamchating" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/starxg"><img src="https://avatars.githubusercontent.com/u/34997494?v=4?s=100" width="100px;" alt=""/><br /><sub><b>starxg</b></sub></a><br /><a href="#plugin-starxg" title="Plugin/utility libraries">🔌</a></td>
</tr>
</table>

View File

@@ -1,55 +1 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{fill:url(#SVGID_1_);}
.st1{opacity:0.16;fill:url(#SVGID_2_);}
.st2{fill:url(#SVGID_3_);}
.st3{opacity:0.16;fill:url(#SVGID_4_);}
.st4{fill:url(#SVGID_5_);}
.st5{opacity:0.15;fill:url(#SVGID_6_);}
.st6{fill:url(#SVGID_7_);}
</style>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="260.9675" y1="871.1813" x2="919.1845" y2="491.1596">
<stop offset="0" style="stop-color:#669ABD"/>
<stop offset="1" style="stop-color:#77DBDB"/>
</linearGradient>
<polygon class="st0" points="297.54,934.52 882.6,596.72 882.61,427.82 297.54,765.65 "/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="553.5051" y1="617.8278" x2="626.647" y2="744.5132">
<stop offset="0.5588" style="stop-color:#000000;stop-opacity:0"/>
<stop offset="1" style="stop-color:#000000"/>
</linearGradient>
<polygon class="st1" points="297.54,934.52 882.6,596.72 882.61,427.82 297.54,765.65 "/>
</g>
<g>
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="114.6631" y1="744.5275" x2="334.0905" y2="871.2141">
<stop offset="0" style="stop-color:#6A8FAD"/>
<stop offset="1" style="stop-color:#669ABD"/>
</linearGradient>
<polygon class="st2" points="151.23,681.18 151.22,850.09 297.54,934.52 297.54,765.65 "/>
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="260.9478" y1="744.5281" x2="187.8059" y2="871.2135">
<stop offset="0.5588" style="stop-color:#000000;stop-opacity:0"/>
<stop offset="1" style="stop-color:#000000"/>
</linearGradient>
<polygon class="st3" points="151.23,681.18 151.22,850.09 297.54,934.52 297.54,765.65 "/>
</g>
<g>
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="114.663" y1="237.793" x2="553.5026" y2="491.1571">
<stop offset="0" style="stop-color:#6A8FAD"/>
<stop offset="1" style="stop-color:#669ABD"/>
</linearGradient>
<polygon class="st4" points="151.23,174.45 151.21,343.36 443.79,512.27 590.08,427.81 "/>
<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="370.6562" y1="301.1281" x2="297.5094" y2="427.8221">
<stop offset="0.5588" style="stop-color:#000000;stop-opacity:0"/>
<stop offset="1" style="stop-color:#000000"/>
</linearGradient>
<polygon class="st5" points="151.23,174.45 151.21,343.36 443.79,512.27 590.08,427.81 "/>
</g>
<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="78.0912" y1="554.4979" x2="736.3375" y2="174.4593">
<stop offset="0" style="stop-color:#CCECFF"/>
<stop offset="1" style="stop-color:#9FECED"/>
</linearGradient>
<polygon class="st6" points="297.51,765.64 151.23,681.18 590.08,427.81 151.23,174.45 297.5,90 882.61,427.82 "/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" x="0" y="0" version="1.1" viewBox="0 0 1024 1024" xml:space="preserve" style="enable-background:new 0 0 1024 1024"><style type="text/css">.st0{fill:url(#SVGID_1_)}.st1{opacity:.16;fill:url(#SVGID_2_)}.st2{fill:url(#SVGID_3_)}.st3{opacity:.16;fill:url(#SVGID_4_)}.st4{fill:url(#SVGID_5_)}.st5{opacity:.15;fill:url(#SVGID_6_)}.st6{fill:url(#SVGID_7_)}</style><g><linearGradient id="SVGID_1_" x1="260.967" x2="919.184" y1="871.181" y2="491.16" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#669abd"/><stop offset="1" style="stop-color:#77dbdb"/></linearGradient><polygon points="297.54 934.52 882.6 596.72 882.61 427.82 297.54 765.65" class="st0"/><linearGradient id="SVGID_2_" x1="553.505" x2="626.647" y1="617.828" y2="744.513" gradientUnits="userSpaceOnUse"><stop offset=".559" style="stop-color:#000;stop-opacity:0"/><stop offset="1" style="stop-color:#000"/></linearGradient><polygon points="297.54 934.52 882.6 596.72 882.61 427.82 297.54 765.65" class="st1"/></g><g><linearGradient id="SVGID_3_" x1="114.663" x2="334.091" y1="744.528" y2="871.214" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#6a8fad"/><stop offset="1" style="stop-color:#669abd"/></linearGradient><polygon points="151.23 681.18 151.22 850.09 297.54 934.52 297.54 765.65" class="st2"/><linearGradient id="SVGID_4_" x1="260.948" x2="187.806" y1="744.528" y2="871.213" gradientUnits="userSpaceOnUse"><stop offset=".559" style="stop-color:#000;stop-opacity:0"/><stop offset="1" style="stop-color:#000"/></linearGradient><polygon points="151.23 681.18 151.22 850.09 297.54 934.52 297.54 765.65" class="st3"/></g><g><linearGradient id="SVGID_5_" x1="114.663" x2="553.503" y1="237.793" y2="491.157" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#6a8fad"/><stop offset="1" style="stop-color:#669abd"/></linearGradient><polygon points="151.23 174.45 151.21 343.36 443.79 512.27 590.08 427.81" class="st4"/><linearGradient id="SVGID_6_" x1="370.656" x2="297.509" y1="301.128" y2="427.822" gradientUnits="userSpaceOnUse"><stop offset=".559" style="stop-color:#000;stop-opacity:0"/><stop offset="1" style="stop-color:#000"/></linearGradient><polygon points="151.23 174.45 151.21 343.36 443.79 512.27 590.08 427.81" class="st5"/></g><linearGradient id="SVGID_7_" x1="78.091" x2="736.337" y1="554.498" y2="174.459" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#ccecff"/><stop offset="1" style="stop-color:#9feced"/></linearGradient><polygon points="297.51 765.64 151.23 681.18 590.08 427.81 151.23 174.45 297.5 90 882.61 427.82" class="st6"/></svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -1,14 +1,21 @@
import { app, ipcMain, Menu, Tray, shell, screen, globalShortcut, MenuItemConstructorOptions } from 'electron'
import * as promiseIpc from 'electron-promise-ipc'
import * as remote from '@electron/remote/main'
import { loadConfig } from './config'
import { Window, WindowOptions } from './window'
import { pluginManager } from './pluginManager'
import { PTYManager } from './pty'
export class Application {
private tray?: Tray
private ptyManager = new PTYManager()
private windows: Window[] = []
constructor () {
remote.initialize()
this.ptyManager.init(this)
ipcMain.on('app:config-change', (_event, config) => {
this.broadcast('host:config-change', config)
})
@@ -40,6 +47,7 @@ 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
@@ -106,7 +114,7 @@ export class Application {
}
enableTray (): void {
if (this.tray) {
if (this.tray || process.platform === 'linux') {
return
}
if (process.platform === 'darwin') {
@@ -131,6 +139,9 @@ export class Application {
}
disableTray (): void {
if (process.platform === 'linux') {
return
}
this.tray?.destroy()
this.tray = null
}
@@ -201,13 +212,8 @@ export class Application {
label: 'View',
submenu: [
{ role: 'reload' },
{ role: 'forceReload' },
{ role: 'toggleDevTools' },
{ type: 'separator' },
{ role: 'resetZoom' },
{ role: 'zoomIn' },
{ role: 'zoomOut' },
{ type: 'separator' },
{ role: 'togglefullscreen' },
],
},

57
app/lib/bufferizedPTY.js Normal file
View File

@@ -0,0 +1,57 @@
/** @hidden */
module.exports = function patchPTYModule (mod) {
const oldSpawn = mod.spawn
if (mod.patched) {
return
}
mod.patched = true
mod.spawn = (file, args, opt) => {
let terminal = oldSpawn(file, args, opt)
let timeout = null
let buffer = Buffer.from('')
let lastFlush = 0
let nextTimeout = 0
// Minimum prebuffering window (ms) if the input is non-stop flowing
const minWindow = 5
// Maximum buffering time (ms) until output must be flushed unconditionally
const maxWindow = 100
function flush () {
if (buffer.length) {
terminal.emit('data-buffered', buffer)
}
lastFlush = Date.now()
buffer = Buffer.from('')
}
function reschedule () {
if (timeout) {
clearTimeout(timeout)
}
nextTimeout = Date.now() + minWindow
timeout = setTimeout(() => {
timeout = null
flush()
}, minWindow)
}
terminal.on('data', data => {
if (typeof data === 'string') {
data = Buffer.from(data)
}
buffer = Buffer.concat([buffer, data])
if (Date.now() - lastFlush > maxWindow) {
// Taking too much time buffering, flush to keep things interactive
flush()
} else {
if (Date.now() > nextTimeout - maxWindow / 10) {
// Extend the window if it's expiring
reschedule()
}
}
})
return terminal
}
}

View File

@@ -6,7 +6,7 @@ import { app } from 'electron'
export function loadConfig (): any {
const configPath = path.join(app.getPath('userData'), 'config.yaml')
if (fs.existsSync(configPath)) {
return yaml.safeLoad(fs.readFileSync(configPath, 'utf8'))
return yaml.load(fs.readFileSync(configPath, 'utf8'))
} else {
return {}
}

View File

@@ -1,12 +1,8 @@
import * as path from 'path'
import * as fs from 'fs'
import * as electron from 'electron'
let appPath: string | null = null
try {
appPath = path.dirname(require('electron').app.getPath('exe'))
} catch {
appPath = path.dirname(require('electron').remote.app.getPath('exe'))
}
const appPath = path.dirname(electron.app.getPath('exe'))
if (fs.existsSync(path.join(appPath, 'terminus-data'))) {
fs.renameSync(path.join(appPath, 'terminus-data'), path.join(appPath, 'data'))
@@ -14,9 +10,5 @@ if (fs.existsSync(path.join(appPath, 'terminus-data'))) {
const portableData = path.join(appPath, 'data')
if (fs.existsSync(portableData)) {
console.log('reset user data to ' + portableData)
try {
require('electron').app.setPath('userData', portableData)
} catch {
require('electron').remote.app.setPath('userData', portableData)
}
electron.app.setPath('userData', portableData)
}

154
app/lib/pty.ts Normal file
View File

@@ -0,0 +1,154 @@
import * as nodePTY from '@terminus-term/node-pty'
import { v4 as uuidv4 } from 'uuid'
import { ipcMain } from 'electron'
import { Application } from './app'
class PTYDataQueue {
private buffers: Buffer[] = []
private delta = 0
private maxChunk = 1024
private maxDelta = 1024 * 50
private flowPaused = false
constructor (private pty: nodePTY.IPty, private onData: (data: Buffer) => void) { }
push (data: Buffer) {
this.buffers.push(data)
this.maybeEmit()
}
ack (length: number) {
this.delta -= length
this.maybeEmit()
}
private maybeEmit () {
if (this.delta <= this.maxDelta && this.flowPaused) {
this.resume()
return
}
if (this.buffers.length > 0) {
if (this.delta > this.maxDelta && !this.flowPaused) {
this.pause()
return
}
const buffersToSend = []
let totalLength = 0
while (totalLength < this.maxChunk && this.buffers.length) {
totalLength += this.buffers[0].length
buffersToSend.push(this.buffers.shift())
}
if (buffersToSend.length === 0) {
return
}
let toSend = Buffer.concat(buffersToSend)
if (toSend.length > this.maxChunk) {
this.buffers.unshift(toSend.slice(this.maxChunk))
toSend = toSend.slice(0, this.maxChunk)
}
this.onData(toSend)
this.delta += toSend.length
if (this.buffers.length) {
setImmediate(() => this.maybeEmit())
}
}
}
private pause () {
this.pty.pause()
this.flowPaused = true
}
private resume () {
this.pty.resume()
this.flowPaused = false
this.maybeEmit()
}
}
export class PTY {
private pty: nodePTY.IPty
private outputQueue: PTYDataQueue
constructor (private id: string, private app: Application, ...args: any[]) {
this.pty = (nodePTY as any).spawn(...args)
for (const key of ['close', 'exit']) {
(this.pty as any).on(key, (...eventArgs) => this.emit(key, ...eventArgs))
}
this.outputQueue = new PTYDataQueue(this.pty, data => {
setImmediate(() => this.emit('data-buffered', data))
})
this.pty.on('data', data => this.outputQueue.push(Buffer.from(data)))
}
getPID (): number {
return this.pty.pid
}
resize (columns: number, rows: number): void {
if ((this.pty as any)._writable) {
this.pty.resize(columns, rows)
}
}
write (buffer: Buffer): void {
if ((this.pty as any)._writable) {
this.pty.write(buffer.toString())
}
}
ackData (length: number): void {
this.outputQueue.ack(length)
}
kill (signal?: string): void {
this.pty.kill(signal)
}
private emit (event: string, ...args: any[]) {
this.app.broadcast(`pty:${this.id}:${event}`, ...args)
}
}
export class PTYManager {
private ptys: Record<string, PTY|undefined> = {}
init (app: Application): void {
//require('./bufferizedPTY')(nodePTY) // eslint-disable-line @typescript-eslint/no-var-requires
ipcMain.on('pty:spawn', (event, ...options) => {
const id = uuidv4().toString()
event.returnValue = id
this.ptys[id] = new PTY(id, app, ...options)
})
ipcMain.on('pty:exists', (event, id) => {
event.returnValue = !!this.ptys[id]
})
ipcMain.on('pty:get-pid', (event, id) => {
event.returnValue = this.ptys[id]?.getPID()
})
ipcMain.on('pty:resize', (_event, id, columns, rows) => {
this.ptys[id]?.resize(columns, rows)
})
ipcMain.on('pty:write', (_event, id, data) => {
this.ptys[id]?.write(Buffer.from(data))
})
ipcMain.on('pty:kill', (_event, id, signal) => {
this.ptys[id]?.kill(signal)
})
ipcMain.on('pty:ack-data', (_event, id, length) => {
this.ptys[id]?.ackData(length)
})
}
}

View File

@@ -1,16 +1,14 @@
const { init } = String(process.type) === 'main' ? require('@sentry/electron/dist/main') : require('@sentry/electron/dist/renderer')
import * as isDev from 'electron-is-dev'
const SENTRY_DSN = 'https://4717a0a7ee0b4429bd3a0f06c3d7eec3@sentry.io/181876'
let release = null
try {
release = require('electron').app.getVersion()
} catch {
release = require('electron').remote.app.getVersion()
release = require('@electron/remote').app.getVersion()
}
if (!isDev) {
if (!process.env.TERMINUS_DEV) {
init({
dsn: SENTRY_DSN,
release,

View File

@@ -36,7 +36,7 @@ export class Window {
private windowConfig: ElectronConfig
private windowBounds?: Rectangle
private closing = false
private lastVibrancy: {enabled: boolean, type?: string} | null = null
private lastVibrancy: { enabled: boolean, type?: string } | null = null
private disableVibrancyWhileDragging = false
private configStore: any
@@ -88,7 +88,7 @@ export class Window {
bwOptions.frame = true
} else {
if (process.platform === 'darwin') {
bwOptions.titleBarStyle = 'hiddenInset'
bwOptions.titleBarStyle = 'hidden'
}
}
@@ -117,13 +117,16 @@ export class Window {
})
this.window.on('blur', () => {
if (this.configStore.appearance?.dockHideOnBlur) {
if (this.configStore.appearance.dock !== 'off' && this.configStore.appearance?.dockHideOnBlur) {
this.hide()
}
})
this.window.loadURL(`file://${app.getAppPath()}/dist/index.html?${this.window.id}`, { extraHeaders: 'pragma: no-cache\n' })
this.window.webContents.setVisualZoomLevelLimits(1, 1)
this.window.webContents.setZoomFactor(1)
if (process.platform !== 'darwin') {
this.window.setMenu(null)
}

View File

@@ -1,6 +1,7 @@
{
"name": "terminus",
"description": "A terminal for a modern age",
"private": true,
"repository": "https://github.com/eugeny/terminus",
"author": {
"name": "Eugene Pankov",
@@ -13,42 +14,44 @@
"watch": "webpack --progress --color --watch"
},
"dependencies": {
"@angular/animations": "^9.1.9",
"@angular/common": "^9.1.11",
"@angular/compiler": "^9.1.9",
"@angular/core": "^9.1.9",
"@angular/forms": "^9.1.11",
"@angular/platform-browser": "^9.1.9",
"@angular/platform-browser-dynamic": "^9.1.9",
"@ng-bootstrap/ng-bootstrap": "^6.1.0",
"@terminus-term/node-pty": "0.10.0-beta10",
"@angular/animations": "^11.1.1",
"@angular/common": "^11.1.1",
"@angular/compiler": "^11.1.1",
"@angular/core": "^11.1.1",
"@angular/forms": "^11.1.1",
"@angular/platform-browser": "^11.1.1",
"@angular/platform-browser-dynamic": "^11.1.1",
"@electron/remote": "1.0.4",
"@ng-bootstrap/ng-bootstrap": "^7.0.0",
"@terminus-term/node-pty": "0.10.0-terminus.3",
"any-promise": "^1.3.0",
"electron-config": "2.0.0",
"electron-debug": "^3.0.1",
"electron-is-dev": "1.1.0",
"electron-debug": "^3.2.0",
"electron-promise-ipc": "^2.2.4",
"fontmanager-redux": "1.0.0",
"glasstron": "0.0.6",
"js-yaml": "3.14.0",
"keytar": "^7.2.0",
"glasstron": "0.0.7",
"js-yaml": "4.1.0",
"keytar": "^7.6.0",
"mz": "^2.7.0",
"ngx-toastr": "^12.0.1",
"native-process-working-directory": "^1.0.2",
"ngx-toastr": "^13.2.1",
"npm": "6",
"path": "0.12.7",
"rxjs": "^6.5.5",
"yargs": "^15.4.1",
"zone.js": "^0.11.3"
"rxjs": "^6.6.7",
"yargs": "^16.2.0",
"zone.js": "^0.11.4"
},
"optionalDependencies": {
"macos-native-processlist": "^2.0.0",
"serialport": "^9.0.4",
"serialport": "^9.0.7",
"windows-blurbehind": "^1.0.1",
"windows-native-registry": "^3.0.0",
"windows-process-tree": "^0.2.4"
"windows-process-tree": "^0.3.0"
},
"devDependencies": {
"@types/mz": "0.0.32",
"@types/node": "14.14.14",
"node-abi": "2.19.3",
"@types/mz": "2.7.3",
"@types/node": "14.14.35",
"node-abi": "^2.26.0",
"source-map-support": "^0.5.19"
},
"peerDependencies": {
@@ -59,5 +62,8 @@
"terminus-settings": "*",
"terminus-ssh": "*",
"terminus-terminal": "*"
},
"resolutions": {
"*/node-abi": "^2.20.0"
}
}

View File

@@ -13,7 +13,7 @@ export function getRootModule (plugins: any[]) {
positionClass: 'toast-bottom-center',
toastClass: 'toast',
preventDuplicates: true,
extendedTimeOut: 5000,
extendedTimeOut: 1000,
}),
]
const bootstrap = [

View File

@@ -2,8 +2,6 @@ import 'zone.js'
import 'core-js/proposals/reflect-metadata'
import 'rxjs'
import * as isDev from 'electron-is-dev'
import './global.scss'
import './toastr.scss'
@@ -23,7 +21,7 @@ if (process.platform === 'win32' && !('HOME' in process.env)) {
process.env.HOME = `${process.env.HOMEDRIVE}${process.env.HOMEPATH}`
}
if (isDev) {
if (process.env.TERMINUS_DEV && !process.env.TERMINUS_FORCE_ANGULAR_PROD) {
console.warn('Running in debug mode')
} else {
enableProdMode()
@@ -39,7 +37,7 @@ async function bootstrap (plugins: PluginInfo[], safeMode = false): Promise<NgMo
const module = getRootModule(pluginsModules)
window['rootModule'] = module
return platformBrowserDynamic().bootstrapModule(module).then(moduleRef => {
if (isDev) {
if (process.env.TERMINUS_DEV) {
const applicationRef = moduleRef.injector.get(ApplicationRef)
const componentRef = applicationRef.components[0]
enableDebugTools(componentRef)

View File

@@ -17,6 +17,10 @@ body {
}
.btn {
display: inline-flex;
align-items: center;
flex-wrap: nowrap;
& > svg {
pointer-events: none;
}
@@ -95,3 +99,42 @@ input[type=range] {
&::-moz-range-track { @include track(); }
&::-ms-track { @include track(); }
}
a[ngbdropdownitem] {
cursor: pointer;
}
ngb-typeahead-window {
max-height: 60vh;
overflow: auto;
}
.hover-reveal {
opacity: 0;
.hover-reveal-parent:hover &,
*:hover > &,
&:hover {
opacity: 1;
}
}
@keyframes terminalShakeFrames {
0% {
transform: translateX(0);
}
25% {
transform: translateX(5px);
}
50% {
transform: translateX(-5px);
}
75% {
transform: translateX(5px);
}
100% {
transform: translateX(0);
}
}

View File

@@ -1,5 +1,6 @@
import * as fs from 'mz/fs'
import * as path from 'path'
import * as remote from '@electron/remote'
const nodeModule = require('module') // eslint-disable-line @typescript-eslint/no-var-requires
const nodeRequire = (global as any).require
@@ -15,13 +16,13 @@ function normalizePath (p: string): string {
global['module'].paths.map((x: string) => nodeModule.globalPaths.push(normalizePath(x)))
if (process.env.TERMINUS_DEV) {
nodeModule.globalPaths.unshift(path.dirname(require('electron').remote.app.getAppPath()))
nodeModule.globalPaths.unshift(path.dirname(remote.app.getAppPath()))
}
const builtinPluginsPath = process.env.TERMINUS_DEV ? path.dirname(require('electron').remote.app.getAppPath()) : path.join((process as any).resourcesPath, 'builtin-plugins')
const builtinPluginsPath = process.env.TERMINUS_DEV ? path.dirname(remote.app.getAppPath()) : path.join((process as any).resourcesPath, 'builtin-plugins')
const userPluginsPath = path.join(
require('electron').remote.app.getPath('userData'),
remote.app.getPath('userData'),
'plugins',
)

View File

@@ -7,6 +7,7 @@
height: 100vh;
display: flex;
animation: 0.5s ease-out fadeIn;
background: radial-gradient(#3a66820a 0%, #000e17 30%, black 100%);
&>div {
width: 200px;
@@ -23,6 +24,7 @@
transition: 1s ease-out width;
background: #a1c5e4;
height: 3px;
box-shadow: 0 0 2px #ffffff1f;
}
}
}
@@ -37,8 +39,8 @@
.terminus-logo {
width: 160px;
height: 160px;
width: 120px;
height: 120px;
background: url('../assets/logo.svg');
background-repeat: none;
background-size: contain;
@@ -51,7 +53,7 @@
font-family: 'Source Sans Pro';
text-align: center;
font-weight: normal;
font-size: 42px;
font-size: 32px;
margin: 0;
sup {

View File

@@ -2,14 +2,16 @@
display: flex;
flex-direction: column;
align-items: center;
padding: 20px;
padding: 20px 0 50px;
.toast {
box-shadow: 0 1px 0 rgba(0,0,0,.25);
padding: 10px;
padding: 7px 12px;
background-image: none;
width: auto;
flex-basis: auto;
border-radius: 0.5rem;
font-size: 0.75rem;
&.toast-error {
background-color: #BD362F;

View File

@@ -68,7 +68,6 @@ module.exports = {
'@ng-bootstrap/ng-bootstrap': 'commonjs @ng-bootstrap/ng-bootstrap',
child_process: 'commonjs child_process',
electron: 'commonjs electron',
'electron-is-dev': 'commonjs electron-is-dev',
fs: 'commonjs fs',
'ngx-toastr': 'commonjs ngx-toastr',
module: 'commonjs module',

View File

@@ -1,9 +1,10 @@
const path = require('path')
const webpack = require('webpack')
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
module.exports = {
name: 'terminus-main',
target: 'node',
target: 'electron-main',
entry: {
main: path.resolve(__dirname, 'lib/index.ts'),
},
@@ -33,19 +34,25 @@ module.exports = {
],
},
externals: {
'any-promise': 'commonjs any-promise',
electron: 'commonjs electron',
'electron-config': 'commonjs electron-config',
'electron-debug': 'commonjs electron-debug',
'electron-promise-ipc': 'commonjs electron-promise-ipc',
'electron-vibrancy': 'commonjs electron-vibrancy',
fs: 'commonjs fs',
glasstron: 'commonjs glasstron',
mz: 'commonjs mz',
npm: 'commonjs npm',
'@terminus-term/node-pty': 'commonjs @terminus-term/node-pty',
path: 'commonjs path',
rxjs: 'commonjs rxjs',
'rxjs/operators': 'commonjs rxjs/operators',
util: 'commonjs util',
'source-map-support': 'commonjs source-map-support',
'windows-swca': 'commonjs windows-swca',
'windows-blurbehind': 'commonjs windows-blurbehind',
'yargs/yargs': 'commonjs yargs/yargs',
},
plugins: [
new webpack.optimize.ModuleConcatenationPlugin(),
@@ -53,6 +60,8 @@ module.exports = {
'process.type': '"main"',
}),
],
// Ignore warnings due to yarg's dynamic module loading
ignoreWarnings: [/node_modules\/yargs/],
}
if (process.env.BUNDLE_ANALYZER) {
module.exports.plugins.push(new BundleAnalyzerPlugin())
}

View File

@@ -2,40 +2,59 @@
# yarn lockfile v1
"@angular/animations@^9.1.9":
version "9.1.13"
resolved "https://registry.npmjs.org/@angular/animations/-/animations-9.1.13.tgz"
integrity sha512-ane1eeQmsP7fcAiLgRhle7YIDgE88WDMMvzqJYhSxwLzXNF/hwqNeskmNcjo8bLt9h/yTIjrCQbycLCHJfU8UQ==
"@angular/animations@^11.1.1":
version "11.2.0"
resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-11.2.0.tgz#383438758c61d98f43c5ea1078d8388eb8784387"
integrity sha512-orYrBPNAsF8VpvuOaXTtPltwK2nsje5R8sWJnRC2dh1RCRdyIqHwmRIU0Mi6qLMiEaLNrFPGEMyQ9gB+sC/vYg==
dependencies:
tslib "^2.0.0"
"@angular/common@^9.1.11":
version "9.1.13"
resolved "https://registry.npmjs.org/@angular/common/-/common-9.1.13.tgz"
integrity sha512-QACUhJWlly/nfHUmjopVS1p6ayxxa/NqjyftdCeBJaoyM2YohqWixP/n/keu1K/srJ96aFpUNsZQgmgoRv5SOQ==
"@angular/common@^11.1.1":
version "11.2.0"
resolved "https://registry.yarnpkg.com/@angular/common/-/common-11.2.0.tgz#90d602c0e33bb95a4d0c4c597f08255d78ed580f"
integrity sha512-wsWI5F6Y2DNxne2D5uk8e9U/vn95UYZLMNBW+QXI9U/I9kDSXoa8yEvNcn1x0XfNXBMst5pi4iSF5M8mIck1eg==
dependencies:
tslib "^2.0.0"
"@angular/compiler@^9.1.9":
version "9.1.13"
resolved "https://registry.npmjs.org/@angular/compiler/-/compiler-9.1.13.tgz"
integrity sha512-9MLB1Xx7odKuxDoybVwiOB1ZEUZpL8FurYm4RVuW39ntsUt0IMC9Hb8UagZLTAWhaWSHydkD/KBQVVobGqd0lA==
"@angular/compiler@^11.1.1":
version "11.2.0"
resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-11.2.0.tgz#130bee57dd1daa1326d37bef4b63c02aa7309cc2"
integrity sha512-EW6LM/kUYhQkuFqGt03c/eRKZAYr0LLEdMOn//j1uIh+wSq9KLffBGpky6b63xdfWxsXi8OucXUOydTQBckNEQ==
dependencies:
tslib "^2.0.0"
"@angular/core@^9.1.9":
version "9.1.13"
resolved "https://registry.npmjs.org/@angular/core/-/core-9.1.13.tgz"
integrity sha512-mBm24Q9GjkAsxMAzqQ86U1078+yTEpr0+syMEruUtJ0HUH6Fzn3J+6xTLb+BVcGb9RkCkFaV9T5mcn6ZM0f++g==
"@angular/core@^11.1.1":
version "11.2.0"
resolved "https://registry.yarnpkg.com/@angular/core/-/core-11.2.0.tgz#309ae61d55b21fca0b644a6571109741d64b2467"
integrity sha512-jnbnJTW2GwfkRoXG8J4zs5FMcahMZwo6jrZGe9FiXjCYG9cLEuOXy4h99Z1s/o0vc/VXyWgym7SmeEgv+urf8g==
dependencies:
tslib "^2.0.0"
"@angular/forms@^9.1.11":
version "9.1.13"
resolved "https://registry.npmjs.org/@angular/forms/-/forms-9.1.13.tgz"
integrity sha512-soGVZmPq2bzkxvtTyeJB8p3ejzm4xxt+43hJw6Ag8NxpwUFPVa30oJge3JV+u8Y4yBtl5SbOZ4bBX3EkMxLcGQ==
"@angular/forms@^11.1.1":
version "11.2.0"
resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-11.2.0.tgz#8ba7a98efdd464a4a6b901ba1f220162dd80c1ed"
integrity sha512-FgIG9ou27FbmyFv0n6pF95cQEz412/+iyY9OSlDnezD/7yU4fwk4NNPgP6Z/b1k7ClLYxP/YKC00WVhi1i8HdA==
dependencies:
tslib "^2.0.0"
"@angular/platform-browser-dynamic@^9.1.9":
version "9.1.13"
resolved "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-9.1.13.tgz"
integrity sha512-jCeHyAZ4Nap1/FOqAlKEg9UxQaSkHrxnQr6hYtWwC4ZDVUn3zLWQf6J+mbeYNOXN5yQxEiIqqhORYeOCLLqf1w==
"@angular/platform-browser-dynamic@^11.1.1":
version "11.2.0"
resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-11.2.0.tgz#647fe6d8dfa7651d38564240cbf75f97f11754b7"
integrity sha512-bBCtgtL87mvDT0K3HNBS19UC0BzIJUTGnYKJS9IugyfTEqlldB4juMmh/3FPjk30kxxJ8IB/ydaN2uVhBAxPVQ==
dependencies:
tslib "^2.0.0"
"@angular/platform-browser@^9.1.9":
version "9.1.13"
resolved "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-9.1.13.tgz"
integrity sha512-F3iTz1zNbtrs7KFKUxbj8qmTsd/fiuTNcpBExjE5TtatRiE6J8vNvN1+Z/1FgPe0UXBSdTzSwZ8/RxWKw20RMw==
"@angular/platform-browser@^11.1.1":
version "11.2.0"
resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-11.2.0.tgz#d1bbafd394ebfb600043060ec2d8543763041403"
integrity sha512-xd3O4svQ95BN/KpzQUFkSWfvwiCURuLJhLlDkxzLA58ElA0qodHOjQmQz/1vRFh/nXQQoWg8z9ixbmcRGzWTow==
dependencies:
tslib "^2.0.0"
"@electron/remote@1.0.4":
version "1.0.4"
resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-1.0.4.tgz#f1c8cf3560bab762b462bfae9991919cced8bc33"
integrity sha512-kguDJRhL3ZynHrkbX8Tr7xoAzGsNgh4eqXkycXb6cgXbOgehGqkBVe+MnjSVMXz3QJykerGKPy28gqcM7AFGYw==
"@iarna/cli@^1.2.0":
version "1.2.0"
@@ -46,95 +65,102 @@
update-notifier "^2.2.0"
yargs "^8.0.2"
"@ng-bootstrap/ng-bootstrap@^6.1.0":
version "6.2.0"
resolved "https://registry.yarnpkg.com/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-6.2.0.tgz#0506d612ca6002bd8fa398d006fa2641013e11d4"
integrity sha512-wqwhnJFyEwvzWQJjXrEt+7oBTSvu2qPbdYvUFYhDVzOJLWB5M7YEhDAkMrfHQJ0pZNBMGr580FqYue+XiURY0Q==
"@serialport/binding-abstract@^9.0.2":
version "9.0.2"
resolved "https://registry.npmjs.org/@serialport/binding-abstract/-/binding-abstract-9.0.2.tgz"
integrity sha512-kyMX6usn+VLpidt0YsDq5JwztIan9TPCX6skr0XcalOxI8I7w+/2qVZJzjgo2fSqDnPRcU2jMWTytwzEXFODvQ==
"@ng-bootstrap/ng-bootstrap@^7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-7.0.0.tgz#3bfa62eb52fdb891b1ce693ea11c39127e2d1ab7"
integrity sha512-SxUaptGWJmCxM0d2Zy1mx7K7p/YBwGZ69NmmBQVY4BE6p5av0hWrVmv9rzzfBz0rhxU7RPZLor2Jpaoq8Xyl4w==
dependencies:
debug "^4.1.1"
tslib "^2.0.0"
"@serialport/binding-mock@^9.0.2":
version "9.0.2"
resolved "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-9.0.2.tgz"
integrity sha512-HfrvJ/LXULHk8w63CGxwDNiDidFgDX8BnadY+cgVS6yHMHikbhLCLjCmUKsKBWaGKRqOznl0w+iUl7TMi1lkXQ==
"@serialport/binding-abstract@^9.0.7":
version "9.0.7"
resolved "https://registry.yarnpkg.com/@serialport/binding-abstract/-/binding-abstract-9.0.7.tgz#d2c7ecea0f100bdf20187bfc0d34ba90f5504e1e"
integrity sha512-g1ncCMIG9rMsxo/28ObYmXZcHThlvtZygsCANmyMUuFS7SwXY4+PhcEnt2+ZcMkEDNRiOklT+ngtIVx5GGpt/A==
dependencies:
"@serialport/binding-abstract" "^9.0.2"
debug "^4.1.1"
debug "^4.3.1"
"@serialport/bindings@^9.0.4":
version "9.0.4"
resolved "https://registry.npmjs.org/@serialport/bindings/-/bindings-9.0.4.tgz"
integrity sha512-6dlE1vm5c1xk667f1Zm7D+msbHJ9jdnUr9l8DResKpj2iCBzbCNsW+yCYq26WxzXWc1L2HUaS3/aL+k0wm5amg==
"@serialport/binding-mock@^9.0.7":
version "9.0.7"
resolved "https://registry.yarnpkg.com/@serialport/binding-mock/-/binding-mock-9.0.7.tgz#2fda427adc113320461f33f7426dfca73e8ad1de"
integrity sha512-aR8H+htZwwZZkVb1MdbnNvGWw8eXVRqQ2qPhkbKyx0N/LY5aVIgCgT98Kt1YylLsG7SzNG+Jbhd4wzwEuPVT5Q==
dependencies:
"@serialport/binding-abstract" "^9.0.2"
"@serialport/parser-readline" "^9.0.1"
"@serialport/binding-abstract" "^9.0.7"
debug "^4.3.1"
"@serialport/bindings@^9.0.7":
version "9.0.7"
resolved "https://registry.yarnpkg.com/@serialport/bindings/-/bindings-9.0.7.tgz#8f53fb56eb866d5a1021a19ced1ddc20a60916d7"
integrity sha512-cNWaxnEbbpLoSJ6GMb0ZeCpaciczm8XRE4jgBqe/BflWZb+wyiTYIocbsySxpS40WT3kJ0sNTFag77uSmQ6ftg==
dependencies:
"@serialport/binding-abstract" "^9.0.7"
"@serialport/parser-readline" "^9.0.7"
bindings "^1.5.0"
debug "^4.3.1"
nan "^2.14.2"
prebuild-install "^6.0.0"
prebuild-install "^6.0.1"
"@serialport/parser-byte-length@^9.0.1":
version "9.0.1"
resolved "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-9.0.1.tgz"
integrity sha512-1Ikv4lgCNw8OMf35yCpgzjHwkpgBEkhBuXFXIdWZk+ixaHFLlAtp03QxGPZBmzHMK58WDmEQoBHC1V5BkkAKSQ==
"@serialport/parser-byte-length@^9.0.7":
version "9.0.7"
resolved "https://registry.yarnpkg.com/@serialport/parser-byte-length/-/parser-byte-length-9.0.7.tgz#9e362bba70eeffcd2eb0804afeca4bb1dee59d5f"
integrity sha512-evf7oOOSBMBn2AZZbgBFMRIyEzlsyQkhqaPm7IBCPTxMDXRf4tKkFYJHYZB0/6d1W4eI0meH079UqmSsh/uoDA==
"@serialport/parser-cctalk@^9.0.1":
version "9.0.1"
resolved "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-9.0.1.tgz"
integrity sha512-GtMda2DeJ+23bNqOc79JYV06dax2n3FLLFM3zA7nfReCOi98QbuDj4TUbFESMOnp4DB0oMO0GYHCR9gHOedTkg==
"@serialport/parser-cctalk@^9.0.7":
version "9.0.7"
resolved "https://registry.yarnpkg.com/@serialport/parser-cctalk/-/parser-cctalk-9.0.7.tgz#fa0e1539f067aced22a5ef7d64fdac14f1a6a4d3"
integrity sha512-ert5jhMkeiTfr44TkbdySC09J8UwAsf/RxBucVN5Mz5enG509RggnkfFi4mfj3UCG2vZ7qsmM6gtZ62DshY02Q==
"@serialport/parser-delimiter@^9.0.1":
version "9.0.1"
resolved "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-9.0.1.tgz"
integrity sha512-+oaSl5zEu47OlrRiF5p5tn2qgGqYuhVcE+NI+Pv4E1xsNB/A0fFxxMv/8XUw466CRLEJ5IESIB9qbFvKE6ltaQ==
"@serialport/parser-delimiter@^9.0.7":
version "9.0.7"
resolved "https://registry.yarnpkg.com/@serialport/parser-delimiter/-/parser-delimiter-9.0.7.tgz#7bef2447d4282dd00dc659719b310edeb30ff294"
integrity sha512-Vb2NPeXPZ/28M4m5x4OAHFd8jRAeddNCgvL+Q+H/hqFPY1w47JcMLchC7pigRW8Cnt1fklmzfwdNQ8Fb+kMkxQ==
"@serialport/parser-readline@^9.0.1":
version "9.0.1"
resolved "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-9.0.1.tgz"
integrity sha512-38058gxvyfgdeLpg3aUyD98NuWkVB9yyTLpcSdeQ3GYiupivwH6Tdy/SKPmxlHIw3Ml2qil5MR2mtW2fLPB5CQ==
"@serialport/parser-inter-byte-timeout@^9.0.7":
version "9.0.7"
resolved "https://registry.yarnpkg.com/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-9.0.7.tgz#55b315b49d8ad37f981ba69bb9443f25c96aec17"
integrity sha512-lUZ3cwgUluBvJ1jf+0LQsqoiPYAokDO6+fRCw9HCfnrF/OS60Gm4rxuyo2uQIueqZkJ7NIFP+ibKsULrA47AEA==
"@serialport/parser-readline@^9.0.7":
version "9.0.7"
resolved "https://registry.yarnpkg.com/@serialport/parser-readline/-/parser-readline-9.0.7.tgz#8b096028170fb2644bcf0f997d534a344cfd00e6"
integrity sha512-ydoLbgVQQPxWrwbe3Fhh4XnZexbkEQAC6M/qgRTzjnKvTjrD61CJNxLc3vyDaAPI9bJIhTiI7eTX3JB5jJv8Hg==
dependencies:
"@serialport/parser-delimiter" "^9.0.1"
"@serialport/parser-delimiter" "^9.0.7"
"@serialport/parser-ready@^9.0.1":
version "9.0.1"
resolved "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-9.0.1.tgz"
integrity sha512-lgzGkVJaaV1rJVx26WwI2UKyPxc0vu1rsOeldzA3VVbF+ABrblUQA06+cRPpT6k96GY+X4+1fB1rWuPpt8HbgQ==
"@serialport/parser-ready@^9.0.7":
version "9.0.7"
resolved "https://registry.yarnpkg.com/@serialport/parser-ready/-/parser-ready-9.0.7.tgz#d9eb9801c6003fdb1450c557f3e256a188a9f3be"
integrity sha512-3qYhI4cNUPAYqVYvdwV57Y+PVRl4dJf1fPBtMoWtwDgwopsAXTR93WCs49WuUq9JCyNW+8Hrfqv8x8eNAD5Dqg==
"@serialport/parser-regex@^9.0.1":
version "9.0.1"
resolved "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-9.0.1.tgz"
integrity sha512-BHTV+Lkl+J8hSecFtDRENaR4fgA6tw44J+dmA1vEKEyum0iDN4bihbu8yvztYyo4PhBGUKDfm/PnD5EkJm0dPA==
"@serialport/parser-regex@^9.0.7":
version "9.0.7"
resolved "https://registry.yarnpkg.com/@serialport/parser-regex/-/parser-regex-9.0.7.tgz#d8a02e3a169faa2f6604e8293832cc676b865f48"
integrity sha512-5XF+FXbhqQ/5bVKM4NaGs1m+E9KjfmeCx/obwsKaUZognQF67jwoTfjJJWNP/21jKfxdl8XoCYjZjASl3XKRAw==
"@serialport/stream@^9.0.2":
version "9.0.2"
resolved "https://registry.npmjs.org/@serialport/stream/-/stream-9.0.2.tgz"
integrity sha512-0RkVe+gvwZu/PPfbb7ExQ+euGoCTGKD/B8TQ5fuhe+eKk1sh73RwjKmu9gp6veSNqx9Zljnh1dF6mhdEKWZpSA==
"@serialport/stream@^9.0.7":
version "9.0.7"
resolved "https://registry.yarnpkg.com/@serialport/stream/-/stream-9.0.7.tgz#0bf023eb0233a714fcc5a86de09e381e466d9882"
integrity sha512-c/h7HPAeFiryD9iTGlaSvPqHFHSZ0NMQHxC4rcmKS2Vu3qJuEtkBdTLABwsMp7iWEiSnI4KC3s7bHapaXP06FQ==
dependencies:
debug "^4.1.1"
debug "^4.3.1"
"@terminus-term/node-pty@0.10.0-beta10":
version "0.10.0-beta10"
resolved "https://registry.yarnpkg.com/@terminus-term/node-pty/-/node-pty-0.10.0-beta10.tgz#de9dade3d7549d44b0906ec0d0b9e1bb411f1f21"
integrity sha512-j9RJk7sD/es4vR6+AR5M/p3SicVxY6kZEeE0UQKhHNcaAla90/mcGeBNicAWPaAkjO1uQZVbYh5cJMMu5unQgA==
"@terminus-term/node-pty@0.10.0-terminus.3":
version "0.10.0-terminus.3"
resolved "https://registry.yarnpkg.com/@terminus-term/node-pty/-/node-pty-0.10.0-terminus.3.tgz#9dbd64d52afda5079e66265a89d313fe42affab7"
integrity sha512-HvIOts22dnoBXhRfLiK9DyPasuixYVgEUvgqZmOr0B0Ki9tF8e074oYPUtzLRll6Y553QiUzTWhriCS99MChNQ==
dependencies:
nan "^2.14.0"
"@types/mz@0.0.32":
version "0.0.32"
resolved "https://registry.npmjs.org/@types/mz/-/mz-0.0.32.tgz"
integrity sha512-cy3yebKhrHuOcrJGkfwNHhpTXQLgmXSv1BX+4p32j+VUQ6aP2eJ5cL7OvGcAQx75fCTFaAIIAKewvqL+iwSd4g==
"@types/mz@2.7.3":
version "2.7.3"
resolved "https://registry.yarnpkg.com/@types/mz/-/mz-2.7.3.tgz#e42a21e73f5f9340fe4a176981fafb1eb8cc6c12"
integrity sha512-Zp1NUJ4Alh3gaun0a5rkF3DL7b2j1WB6rPPI5h+CJ98sQnxe9qwskClvupz/4bqChGR3L/BRhTjlaOwR+uiZJg==
dependencies:
"@types/node" "*"
"@types/node@*", "@types/node@14.14.14":
version "14.14.14"
resolved "https://registry.npmjs.org/@types/node/-/node-14.14.14.tgz"
integrity sha512-UHnOPWVWV1z+VV8k6L1HhG7UbGBgIdghqF3l9Ny9ApPghbjICXkUJSd/b9gOgQfjM1r+37cipdw/HJ3F6ICEnQ==
"@types/node@*", "@types/node@14.14.35":
version "14.14.35"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.35.tgz#42c953a4e2b18ab931f72477e7012172f4ffa313"
integrity sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag==
JSONStream@^1.3.4, JSONStream@^1.3.5:
version "1.3.5"
@@ -231,9 +257,9 @@ ansistyles@~0.1.3:
resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz"
integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk=
any-promise@^1.0.0:
any-promise@^1.0.0, any-promise@^1.3.0:
version "1.3.0"
resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz"
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2:
@@ -259,12 +285,10 @@ are-we-there-yet@~1.1.2:
delegates "^1.0.0"
readable-stream "^2.0.6"
argparse@^1.0.7:
version "1.0.10"
resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz"
integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
dependencies:
sprintf-js "~1.0.2"
argparse@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
asap@^2.0.0:
version "2.0.6"
@@ -523,14 +547,14 @@ cliui@^5.0.0:
strip-ansi "^5.2.0"
wrap-ansi "^5.1.0"
cliui@^6.0.0:
version "6.0.0"
resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz"
integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
cliui@^7.0.2:
version "7.0.4"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
dependencies:
string-width "^4.2.0"
strip-ansi "^6.0.0"
wrap-ansi "^6.2.0"
wrap-ansi "^7.0.0"
clone@^1.0.2:
version "1.0.4"
@@ -709,14 +733,14 @@ debug@^3.1.0:
dependencies:
ms "^2.1.1"
debug@^4.0.1, debug@^4.1.1, debug@^4.3.1:
debug@^4.0.1, debug@^4.3.1:
version "4.3.1"
resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz"
integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
dependencies:
ms "2.1.2"
debuglog@*, debuglog@^1.0.1:
debuglog@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz"
integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=
@@ -837,10 +861,10 @@ electron-config@2.0.0:
dependencies:
conf "^1.0.0"
electron-debug@^3.0.1:
version "3.1.0"
resolved "https://registry.npmjs.org/electron-debug/-/electron-debug-3.1.0.tgz"
integrity sha512-SWEqLj4MgfV3tGuO5eBLQ5/Nr6M+KPxsnE0bUJZvQebGJus6RAcdmvd7L+l0Ji31h2mmrN23l2tHFtCa2FvurA==
electron-debug@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/electron-debug/-/electron-debug-3.2.0.tgz#46a15b555c3b11872218c65ea01d058aa0814920"
integrity sha512-7xZh+LfUvJ52M9rn6N+tPuDw6oRAjxUj9SoxAZfJ0hVCXhZCsdkrSt7TgXOiWiEOBgEV8qwUIO/ScxllsPS7ow==
dependencies:
electron-is-dev "^1.1.0"
electron-localshortcut "^3.1.0"
@@ -850,7 +874,7 @@ electron-is-accelerator@^0.1.0:
resolved "https://registry.npmjs.org/electron-is-accelerator/-/electron-is-accelerator-0.1.2.tgz"
integrity sha1-UJ5RDCala1Xhf4Y6SwThEYRqsns=
electron-is-dev@1.1.0, electron-is-dev@^1.1.0:
electron-is-dev@^1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-1.1.0.tgz"
integrity sha512-Z1qA/1oHNowGtSBIcWk0pcLEqYT/j+13xUw/MYOrBUOL4X7VN0i0KCTf5SqyvMPmW5pSPKbo28wkxMxzZ20YnQ==
@@ -967,16 +991,16 @@ es6-promisify@^5.0.0:
dependencies:
es6-promise "^4.0.3"
escalade@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
esprima@^4.0.0:
version "4.0.1"
resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
execa@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
@@ -1044,14 +1068,6 @@ find-up@^3.0.0:
dependencies:
locate-path "^3.0.0"
find-up@^4.1.0:
version "4.1.0"
resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz"
integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
dependencies:
locate-path "^5.0.0"
path-exists "^4.0.0"
flush-write-stream@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
@@ -1179,7 +1195,7 @@ get-caller-file@^1.0.1:
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
get-caller-file@^2.0.1:
get-caller-file@^2.0.1, get-caller-file@^2.0.5:
version "2.0.5"
resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
@@ -1217,10 +1233,10 @@ github-from-package@0.0.0:
resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz"
integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=
glasstron@0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/glasstron/-/glasstron-0.0.6.tgz#1438899cd49a1cda1999290be2165310b759fd62"
integrity sha512-WBE1zH3ZcYhLlfKATfKzuN05Anno2WYlVfImWteU5RM+gqdFLHGIxxM3VR16JvFF5oIYah01MBGQ2+3xTq44iQ==
glasstron@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/glasstron/-/glasstron-0.0.7.tgz#d0f3e8344351bbcb89a39323282b4ddb06b03ba0"
integrity sha512-zeqfC0E153yBKWHB8ZBA5rT1o1dCCQcPECBryzWLX3uy6VTX3CUcy7kjk/4BlVztEIbpV2plEetpOxSAOe5cqw==
dependencies:
node-addon-api "^3.0.0"
x11 "^2.3.0"
@@ -1302,9 +1318,9 @@ has@^1.0.3:
function-bind "^1.1.1"
hosted-git-info@^2.1.4, hosted-git-info@^2.7.1, hosted-git-info@^2.8.8:
version "2.8.8"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
version "2.8.9"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
http-cache-semantics@^3.8.1:
version "3.8.1"
@@ -1377,7 +1393,7 @@ import-lazy@^2.1.0:
resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=
imurmurhash@*, imurmurhash@^0.1.4:
imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz"
integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
@@ -1581,13 +1597,12 @@ isstream@~0.1.2:
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz"
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
js-yaml@3.14.0:
version "3.14.0"
resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz"
integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==
js-yaml@4.1.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 "^1.0.7"
esprima "^4.0.0"
argparse "^2.0.1"
jsbn@~0.1.0:
version "0.1.1"
@@ -1644,10 +1659,10 @@ keyboardevents-areequal@^0.2.1:
resolved "https://registry.npmjs.org/keyboardevents-areequal/-/keyboardevents-areequal-0.2.2.tgz"
integrity sha512-Nv+Kr33T0mEjxR500q+I6IWisOQ0lK1GGOncV0kWE6n4KFmpcu7RUX5/2B0EUtX51Cb0HjZ9VJsSY3u4cBa0kw==
keytar@^7.2.0:
version "7.3.0"
resolved "https://registry.npmjs.org/keytar/-/keytar-7.3.0.tgz"
integrity sha512-t8YD0ETO5AeRxCaaN4N/hzj3JusIH0ugjVooE724+ozaVG9+l16Mau62T+U8tEhCv7SozY/g69BWF1U+o47qJg==
keytar@^7.6.0:
version "7.6.0"
resolved "https://registry.yarnpkg.com/keytar/-/keytar-7.6.0.tgz#498e796443cb543d31722099443f29d7b5c44100"
integrity sha512-H3cvrTzWb11+iv0NOAnoNAPgEapVZnYLVHZQyxmh7jdmVfR/c0jNNFEZ6AI38W/4DeTGTaY66ZX4Z1SbfKPvCQ==
dependencies:
node-addon-api "^3.0.0"
prebuild-install "^6.0.0"
@@ -1831,13 +1846,6 @@ locate-path@^3.0.0:
p-locate "^3.0.0"
path-exists "^3.0.0"
locate-path@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz"
integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
dependencies:
p-locate "^4.1.0"
lock-verify@^2.0.2, lock-verify@^2.1.0:
version "2.2.1"
resolved "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.2.1.tgz#81107948c51ed16f97b96ff8b60675affb243fc1"
@@ -1854,11 +1862,6 @@ lockfile@^1.0.4:
dependencies:
signal-exit "^3.0.2"
lodash._baseindexof@*:
version "3.1.0"
resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c"
integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw=
lodash._baseuniq@~4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8"
@@ -1867,33 +1870,11 @@ lodash._baseuniq@~4.6.0:
lodash._createset "~4.0.0"
lodash._root "~3.0.0"
lodash._bindcallback@*:
version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4=
lodash._cacheindexof@*:
version "3.0.2"
resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92"
integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI=
lodash._createcache@*:
version "3.1.2"
resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093"
integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM=
dependencies:
lodash._getnative "^3.0.0"
lodash._createset@~4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26"
integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY=
lodash._getnative@*, lodash._getnative@^3.0.0:
version "3.9.1"
resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=
lodash._root@~3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
@@ -1904,11 +1885,6 @@ lodash.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0:
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
lodash.restparam@*:
version "3.6.1"
resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=
lodash.union@~4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88"
@@ -2115,17 +2091,24 @@ napi-build-utils@^1.0.1:
resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz"
integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==
ngx-toastr@^12.0.1:
version "12.1.0"
resolved "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-12.1.0.tgz"
integrity sha512-rytCRBhvuudj614Kfj9GoIVQDrFuLvHSMP1YrMwTmR1SNkNJZOpGKmaSDCCBrNDkSrGouzMWBlFbl1UDBBsiqw==
native-process-working-directory@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/native-process-working-directory/-/native-process-working-directory-1.0.2.tgz#7843e2fa1490f53cf8d2c7d1913de8b275e8b89a"
integrity sha512-3a67QQV8r3YMUTSOgvtMOCjPDgCpb/8xjv93L8Cqb8bv3hOKsWis4/+8HCu3bgj8ADQV75SCYFSsAGM5G0cXmQ==
dependencies:
tslib "^1.10.0"
node-addon-api "^3.1.0"
node-abi@2.19.3, node-abi@^2.7.0:
version "2.19.3"
resolved "https://registry.npmjs.org/node-abi/-/node-abi-2.19.3.tgz"
integrity sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg==
ngx-toastr@^13.2.1:
version "13.2.1"
resolved "https://registry.yarnpkg.com/ngx-toastr/-/ngx-toastr-13.2.1.tgz#531bc7da6a524a861e0409bd2749878b3b3f8a3f"
integrity sha512-UAzp7/xWK9IXA2LsOmhpaaIGCqscvJokoQpBNpAMrjEkDeSlFf8PWQAuQY795KW0mJb3qF9UG/s23nsXfMYKmg==
dependencies:
tslib "^2.0.0"
node-abi@^2.20.0, node-abi@^2.26.0, node-abi@^2.7.0:
version "2.26.0"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.26.0.tgz#355d5d4bc603e856f74197adbf3f5117a396ba40"
integrity sha512-ag/Vos/mXXpWLLAYWsAoQdgS+gW7IwvgMLOgqopm/DbzAjazLltzgzpVMsFlgmo9TzG5hGXeaBZx2AI731RIsQ==
dependencies:
semver "^5.4.1"
@@ -2134,7 +2117,7 @@ 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@^3.0.0, node-addon-api@^3.0.2:
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"
integrity sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==
@@ -2324,7 +2307,6 @@ npm@6:
cmd-shim "^3.0.3"
columnify "~1.5.4"
config-chain "^1.1.12"
debuglog "*"
detect-indent "~5.0.0"
detect-newline "^2.1.0"
dezalgo "~1.0.3"
@@ -2339,7 +2321,6 @@ npm@6:
has-unicode "~2.0.1"
hosted-git-info "^2.8.8"
iferr "^1.0.2"
imurmurhash "*"
infer-owner "^1.0.4"
inflight "~1.0.6"
inherits "^2.0.4"
@@ -2358,14 +2339,8 @@ npm@6:
libnpx "^10.2.4"
lock-verify "^2.1.0"
lockfile "^1.0.4"
lodash._baseindexof "*"
lodash._baseuniq "~4.6.0"
lodash._bindcallback "*"
lodash._cacheindexof "*"
lodash._createcache "*"
lodash._getnative "*"
lodash.clonedeep "~4.5.0"
lodash.restparam "*"
lodash.union "~4.6.0"
lodash.uniq "~4.5.0"
lodash.without "~4.4.0"
@@ -2545,7 +2520,7 @@ p-limit@^1.1.0:
dependencies:
p-try "^1.0.0"
p-limit@^2.0.0, p-limit@^2.2.0:
p-limit@^2.0.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
@@ -2566,13 +2541,6 @@ p-locate@^3.0.0:
dependencies:
p-limit "^2.0.0"
p-locate@^4.1.0:
version "4.1.0"
resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz"
integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
dependencies:
p-limit "^2.2.0"
p-try@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz"
@@ -2650,11 +2618,6 @@ path-exists@^3.0.0:
resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz"
integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
path-exists@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"
integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
@@ -2712,10 +2675,10 @@ pkg-up@^2.0.0:
dependencies:
find-up "^2.1.0"
prebuild-install@^6.0.0:
version "6.0.0"
resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.0.0.tgz"
integrity sha512-h2ZJ1PXHKWZpp1caLw0oX9sagVpL2YTk+ZwInQbQ3QqNd4J03O6MpFNmMTJlkfgPENWqe5kP0WjQLqz5OjLfsw==
prebuild-install@^6.0.0, prebuild-install@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-6.0.1.tgz#5902172f7a40eb67305b96c2a695db32636ee26d"
integrity sha512-7GOJrLuow8yeiyv75rmvZyeMGzl8mdEX5gY69d6a6bHWmiPevwqFw+tQavhK0EYMaSg3/KD24cWqeQv1EWsqDQ==
dependencies:
detect-libc "^1.0.3"
expand-template "^2.0.3"
@@ -3058,10 +3021,10 @@ run-queue@^1.0.0, run-queue@^1.0.3:
dependencies:
aproba "^1.1.1"
rxjs@^6.5.5:
version "6.6.3"
resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz"
integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==
rxjs@^6.6.7:
version "6.6.7"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==
dependencies:
tslib "^1.9.0"
@@ -3099,21 +3062,22 @@ serialize-error@^5.0.0:
dependencies:
type-fest "^0.8.0"
serialport@^9.0.4:
version "9.0.4"
resolved "https://registry.npmjs.org/serialport/-/serialport-9.0.4.tgz"
integrity sha512-Wtl6sxciHKNdJKW8jUZm+f5KRXt0J0UP25ksM8N31l08KTdAhZ5MmKNUFpoO/YYG6TvHFOu+07PUX35m+TUw7g==
serialport@^9.0.7:
version "9.0.7"
resolved "https://registry.yarnpkg.com/serialport/-/serialport-9.0.7.tgz#bd116a70bd7acbfd587491acd3ee03e02a0df71c"
integrity sha512-NeDfVks3JAJ7s8cXDopx1iUUgC/7TaltE7iQGiSewIWMZaK7oStiz3VJzcuKgor7F+U/y6zbAnj4i6eHq0on+g==
dependencies:
"@serialport/binding-mock" "^9.0.2"
"@serialport/bindings" "^9.0.4"
"@serialport/parser-byte-length" "^9.0.1"
"@serialport/parser-cctalk" "^9.0.1"
"@serialport/parser-delimiter" "^9.0.1"
"@serialport/parser-readline" "^9.0.1"
"@serialport/parser-ready" "^9.0.1"
"@serialport/parser-regex" "^9.0.1"
"@serialport/stream" "^9.0.2"
debug "^4.1.1"
"@serialport/binding-mock" "^9.0.7"
"@serialport/bindings" "^9.0.7"
"@serialport/parser-byte-length" "^9.0.7"
"@serialport/parser-cctalk" "^9.0.7"
"@serialport/parser-delimiter" "^9.0.7"
"@serialport/parser-inter-byte-timeout" "^9.0.7"
"@serialport/parser-readline" "^9.0.7"
"@serialport/parser-ready" "^9.0.7"
"@serialport/parser-regex" "^9.0.7"
"@serialport/stream" "^9.0.7"
debug "^4.3.1"
set-blocking@^2.0.0, set-blocking@~2.0.0:
version "2.0.0"
@@ -3241,11 +3205,6 @@ split-on-first@^1.0.0:
resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
sshpk@^1.7.0:
version "1.16.1"
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz"
@@ -3262,9 +3221,9 @@ sshpk@^1.7.0:
tweetnacl "~0.14.0"
ssri@^6.0.0, ssri@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
version "6.0.2"
resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5"
integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==
dependencies:
figgy-pudding "^3.5.1"
@@ -3503,15 +3462,15 @@ tough-cookie@~2.5.0:
psl "^1.1.28"
punycode "^2.1.1"
tslib@^1.10.0, tslib@^1.9.0:
tslib@^1.9.0:
version "1.14.1"
resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
tslib@^2.0.0:
version "2.0.3"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c"
integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==
version "2.1.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a"
integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==
tunnel-agent@^0.6.0:
version "0.6.0"
@@ -3709,10 +3668,10 @@ windows-native-registry@^3.0.0:
dependencies:
node-addon-api "^3.0.0"
windows-process-tree@^0.2.4:
version "0.2.4"
resolved "https://registry.yarnpkg.com/windows-process-tree/-/windows-process-tree-0.2.4.tgz#747af587b54cc6c996f2be0836cc8a8fd0dc038f"
integrity sha512-9gag9AHm3Iin/4YC1EwoIfZlqW/rG2eV7rJZ4Fy5NnAMGdewmnwsie5Rz+CJo2vSolqzzfw7hPeu3oOdniNejg==
windows-process-tree@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/windows-process-tree/-/windows-process-tree-0.3.0.tgz#cf0d9291b22fba2a7f5a687c8272866e28fbcafd"
integrity sha512-0bKI4gcd5MOsOpn2TdStCSlnjThtH6BdHrocekY9qCgTqgEtdaUs0B5BaqyzF9jXoTSwz38NMdE1F55o4fgv9Q==
dependencies:
nan "^2.13.2"
@@ -3740,10 +3699,10 @@ wrap-ansi@^5.1.0:
string-width "^3.0.0"
strip-ansi "^5.0.0"
wrap-ansi@^6.2.0:
version "6.2.0"
resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz"
integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
wrap-ansi@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
dependencies:
ansi-styles "^4.0.0"
string-width "^4.1.0"
@@ -3781,15 +3740,20 @@ xtend@~4.0.1:
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
y18n@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
version "3.2.2"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696"
integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==
y18n@^4.0.0:
version "4.0.1"
resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz"
integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==
y18n@^5.0.5:
version "5.0.8"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
yallist@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
@@ -3808,13 +3772,10 @@ yargs-parser@^15.0.1:
camelcase "^5.0.0"
decamelize "^1.2.0"
yargs-parser@^18.1.2:
version "18.1.3"
resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz"
integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
dependencies:
camelcase "^5.0.0"
decamelize "^1.2.0"
yargs-parser@^20.2.2:
version "20.2.7"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a"
integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==
yargs-parser@^7.0.0:
version "7.0.0"
@@ -3840,22 +3801,18 @@ yargs@^14.2.3:
y18n "^4.0.0"
yargs-parser "^15.0.1"
yargs@^15.4.1:
version "15.4.1"
resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz"
integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
yargs@^16.2.0:
version "16.2.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
dependencies:
cliui "^6.0.0"
decamelize "^1.2.0"
find-up "^4.1.0"
get-caller-file "^2.0.1"
cliui "^7.0.2"
escalade "^3.1.1"
get-caller-file "^2.0.5"
require-directory "^2.1.1"
require-main-filename "^2.0.0"
set-blocking "^2.0.0"
string-width "^4.2.0"
which-module "^2.0.0"
y18n "^4.0.0"
yargs-parser "^18.1.2"
y18n "^5.0.5"
yargs-parser "^20.2.2"
yargs@^8.0.2:
version "8.0.2"
@@ -3876,9 +3833,9 @@ yargs@^8.0.2:
y18n "^3.2.1"
yargs-parser "^7.0.0"
zone.js@^0.11.3:
version "0.11.3"
resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.11.3.tgz#255a6313174731cc014d63233ef04fd9858da375"
integrity sha512-Y4hTHoh4VcxU5BDGAqEoOnOiyT254w6CiHtpQxAJUSMZPyVgdbKf+5R7Mwz6xsPhMIeBXk5rTopRZDpjssTCUg==
zone.js@^0.11.4:
version "0.11.4"
resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.11.4.tgz#0f70dcf6aba80f698af5735cbb257969396e8025"
integrity sha512-DDh2Ab+A/B+9mJyajPjHFPWfYU1H+pdun4wnnk0OcQTNjem1XQSZ2CDW+rfZEUDjv5M19SBqAkjZi0x5wuB5Qw==
dependencies:
tslib "^2.0.0"

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

View File

@@ -1,57 +1 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{opacity:0.8;fill:#00232E;}
.st1{fill:url(#SVGID_1_);}
.st2{opacity:0.16;fill:url(#SVGID_2_);}
.st3{fill:url(#SVGID_3_);}
.st4{opacity:0.16;fill:url(#SVGID_4_);}
.st5{fill:url(#SVGID_5_);}
.st6{opacity:0.15;fill:url(#SVGID_6_);}
.st7{fill:url(#SVGID_7_);}
</style>
<polygon class="st0" points="449.5,645.47 407.51,621.23 533.47,548.5 407.51,475.77 449.5,451.53 617.45,548.5 "/>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="439.0065" y1="603.0394" x2="627.9464" y2="493.9549">
<stop offset="0" style="stop-color:#669ABD"/>
<stop offset="1" style="stop-color:#77DBDB"/>
</linearGradient>
<polygon class="st1" points="449.5,621.22 617.45,524.25 617.45,475.77 449.5,572.75 "/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="522.9788" y1="530.3148" x2="543.9741" y2="566.6795">
<stop offset="0.5588" style="stop-color:#000000;stop-opacity:0"/>
<stop offset="1" style="stop-color:#000000"/>
</linearGradient>
<polygon class="st2" points="449.5,621.22 617.45,524.25 617.45,475.77 449.5,572.75 "/>
</g>
<g>
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="397.0101" y1="566.6837" x2="459.9963" y2="603.0487">
<stop offset="0" style="stop-color:#6A8FAD"/>
<stop offset="1" style="stop-color:#669ABD"/>
</linearGradient>
<polygon class="st3" points="407.51,548.5 407.5,596.99 449.5,621.22 449.5,572.75 "/>
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="439.0009" y1="566.6838" x2="418.0056" y2="603.0486">
<stop offset="0.5588" style="stop-color:#000000;stop-opacity:0"/>
<stop offset="1" style="stop-color:#000000"/>
</linearGradient>
<polygon class="st4" points="407.51,548.5 407.5,596.99 449.5,621.22 449.5,572.75 "/>
</g>
<g>
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="397.0101" y1="421.2265" x2="522.9781" y2="493.9542">
<stop offset="0" style="stop-color:#6A8FAD"/>
<stop offset="1" style="stop-color:#669ABD"/>
</linearGradient>
<polygon class="st5" points="407.51,403.04 407.5,451.53 491.49,500.01 533.48,475.77 "/>
<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="470.4924" y1="439.4067" x2="449.4958" y2="475.774">
<stop offset="0.5588" style="stop-color:#000000;stop-opacity:0"/>
<stop offset="1" style="stop-color:#000000"/>
</linearGradient>
<polygon class="st6" points="407.51,403.04 407.5,451.53 491.49,500.01 533.48,475.77 "/>
</g>
<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="386.5123" y1="512.136" x2="575.4605" y2="403.0467">
<stop offset="0" style="stop-color:#CCECFF"/>
<stop offset="1" style="stop-color:#9FECED"/>
</linearGradient>
<polygon class="st7" points="449.5,572.74 407.51,548.5 533.48,475.77 407.51,403.04 449.49,378.8 617.45,475.77 "/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" x="0" y="0" version="1.1" viewBox="0 0 1024 1024" xml:space="preserve" style="enable-background:new 0 0 1024 1024"><style type="text/css">.st0{opacity:.8;fill:#00232e}.st1{fill:url(#SVGID_1_)}.st2{opacity:.16;fill:url(#SVGID_2_)}.st3{fill:url(#SVGID_3_)}.st4{opacity:.16;fill:url(#SVGID_4_)}.st5{fill:url(#SVGID_5_)}.st6{opacity:.15;fill:url(#SVGID_6_)}.st7{fill:url(#SVGID_7_)}</style><polygon points="449.5 645.47 407.51 621.23 533.47 548.5 407.51 475.77 449.5 451.53 617.45 548.5" class="st0"/><g><linearGradient id="SVGID_1_" x1="439.007" x2="627.946" y1="603.039" y2="493.955" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#669abd"/><stop offset="1" style="stop-color:#77dbdb"/></linearGradient><polygon points="449.5 621.22 617.45 524.25 617.45 475.77 449.5 572.75" class="st1"/><linearGradient id="SVGID_2_" x1="522.979" x2="543.974" y1="530.315" y2="566.679" gradientUnits="userSpaceOnUse"><stop offset=".559" style="stop-color:#000;stop-opacity:0"/><stop offset="1" style="stop-color:#000"/></linearGradient><polygon points="449.5 621.22 617.45 524.25 617.45 475.77 449.5 572.75" class="st2"/></g><g><linearGradient id="SVGID_3_" x1="397.01" x2="459.996" y1="566.684" y2="603.049" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#6a8fad"/><stop offset="1" style="stop-color:#669abd"/></linearGradient><polygon points="407.51 548.5 407.5 596.99 449.5 621.22 449.5 572.75" class="st3"/><linearGradient id="SVGID_4_" x1="439.001" x2="418.006" y1="566.684" y2="603.049" gradientUnits="userSpaceOnUse"><stop offset=".559" style="stop-color:#000;stop-opacity:0"/><stop offset="1" style="stop-color:#000"/></linearGradient><polygon points="407.51 548.5 407.5 596.99 449.5 621.22 449.5 572.75" class="st4"/></g><g><linearGradient id="SVGID_5_" x1="397.01" x2="522.978" y1="421.226" y2="493.954" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#6a8fad"/><stop offset="1" style="stop-color:#669abd"/></linearGradient><polygon points="407.51 403.04 407.5 451.53 491.49 500.01 533.48 475.77" class="st5"/><linearGradient id="SVGID_6_" x1="470.492" x2="449.496" y1="439.407" y2="475.774" gradientUnits="userSpaceOnUse"><stop offset=".559" style="stop-color:#000;stop-opacity:0"/><stop offset="1" style="stop-color:#000"/></linearGradient><polygon points="407.51 403.04 407.5 451.53 491.49 500.01 533.48 475.77" class="st6"/></g><linearGradient id="SVGID_7_" x1="386.512" x2="575.461" y1="512.136" y2="403.047" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#ccecff"/><stop offset="1" style="stop-color:#9feced"/></linearGradient><polygon points="449.5 572.74 407.51 548.5 533.48 475.77 407.51 403.04 449.49 378.8 617.45 475.77" class="st7"/></svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

BIN
docs/readme-ssh.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 KiB

BIN
docs/readme-terminal.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 728 KiB

View File

@@ -8,8 +8,9 @@ afterAllArtifactBuild: "./build/mac/afterBuildHook.js"
files:
- '**/*'
- dist
- '!lib'
- '!src'
- '!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme}'
- '!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme,node.lib}'
- '!**/node_modules/*/{test,__tests__,tests,powered-test,example,examples,docs}'
- '!**/node_modules/@angular/common/locales'
- '!**/node_modules/@angular/compiler/src'
@@ -30,6 +31,8 @@ files:
extraResources:
- builtin-plugins
- extras
asarUnpack:
- dist/*.map
publish:
- provider: github
@@ -62,11 +65,13 @@ mac:
NSRemovableVolumesUsageDescription: 'A subprocess requests access to files on a removable volume.'
linux:
category: Utilities
category: Utility
icon: "./build/icons"
artifactName: terminus-${version}-linux.${ext}
executableArgs:
- "--no-sandbox"
desktop:
StartupWMClass: terminus
snap:
plugs:
- default
@@ -83,7 +88,13 @@ deb:
- libxtst6
- libnss3
afterInstall: build/linux/after-install.tpl
pacman:
depends:
- gnome-keyring
- libsecret
rpm:
depends:
- screen
- gnome-keyring
fpm:
- '--rpm-rpmbuild-define'
- '_build_id_links none'

View File

@@ -1,80 +1,80 @@
{
"devDependencies": {
"@fortawesome/fontawesome-free": "^5.13.0",
"@sentry/cli": "^1.61.0",
"@sentry/electron": "^2.0.4",
"@fortawesome/fontawesome-free": "^5.15.3",
"@sentry/cli": "^1.64.2",
"@sentry/electron": "^2.4.0",
"@terminus-term/to-string-loader": "1.1.7-beta.1",
"@types/electron-config": "^3.2.2",
"@types/electron-debug": "^2.1.0",
"@types/fs-extra": "^8.1.1",
"@types/js-yaml": "^3.12.5",
"@types/node": "14.14.14",
"@types/fs-extra": "^9.0.11",
"@types/js-yaml": "^4.0.0",
"@types/node": "14.14.35",
"@types/webpack-env": "^1.16.0",
"@typescript-eslint/eslint-plugin": "^4.11.0",
"@typescript-eslint/parser": "^4.11.0",
"@typescript-eslint/eslint-plugin": "^4.14.1",
"@typescript-eslint/parser": "^4.23.0",
"apply-loader": "2.0.0",
"awesome-typescript-loader": "^5.2.1",
"compare-versions": "^3.6.0",
"core-js": "^3.8.1",
"cross-env": "7.0.2",
"css-loader": "3.4.2",
"electron": "12.0.0-beta.16",
"electron-builder": "22.10.4",
"core-js": "^3.12.1",
"cross-env": "7.0.3",
"css-loader": "5.2.0",
"electron": "12.0.6",
"electron-builder": "22.10.5",
"electron-download": "^4.1.1",
"electron-installer-snap": "^5.1.0",
"electron-notarize": "^1.0.0",
"electron-rebuild": "^2.3.4",
"eslint": "^7.6.0",
"electron-rebuild": "^2.3.5",
"eslint": "^7.26.0",
"eslint-plugin-import": "^2.21.1",
"file-loader": "^5.1.0",
"graceful-fs": "^4.2.4",
"html-loader": "0.5.5",
"file-loader": "^6.2.0",
"graceful-fs": "^4.2.6",
"html-loader": "2.1.2",
"json-loader": "0.5.7",
"lru-cache": "^6.0.0",
"macos-release": "^2.4.1",
"node-abi": "^2.19.3",
"node-gyp": "^7.1.2",
"node-abi": "^2.21.0",
"node-gyp": "^8.0.0",
"node-sass": "^5.0.0",
"npmlog": "4.1.2",
"npx": "^10.2.2",
"pug": "^2.0.4",
"patch-package": "^6.4.7",
"pug": "^3.0.2",
"pug-html-loader": "1.1.5",
"pug-lint": "^2.6.0",
"pug-loader": "^2.4.0",
"pug-static-loader": "2.0.0",
"raw-loader": "4.0.1",
"sass-loader": "^10.1.0",
"raw-loader": "4.0.2",
"sass-loader": "^11.0.1",
"shelljs": "0.8.4",
"source-code-pro": "^2.30.2",
"source-sans-pro": "3.6.0",
"ssh2-streams": "^0.4.10",
"style-loader": "^2.0.0",
"svg-inline-loader": "^0.8.2",
"to-string-loader": "1.1.6",
"tslib": "^2.0.3",
"typedoc": "^0.18.0",
"typescript": "^3.9.7",
"url-loader": "^3.0.0",
"val-loader": "2.1.1",
"webpack": "^5.11.0",
"webpack-cli": "^4.2.0",
"tslib": "^2.1.0",
"typedoc": "^0.20.36",
"typescript": "^3.9.9",
"url-loader": "^4.1.1",
"val-loader": "3.1.0",
"webpack": "^5.31.0",
"webpack-bundle-analyzer": "^4.4.0",
"webpack-cli": "^4.6.0",
"yaml-loader": "0.6.0"
},
"resolutions": {
"*/node-abi": "^2.19.3",
"*/node-abi": "^2.20.0",
"**/graceful-fs": "^4.2.4"
},
"scripts": {
"build": "npm run build:typings && webpack --color --config app/webpack.main.config.js && webpack --color --config app/webpack.config.js && webpack --color --config terminus-core/webpack.config.js && webpack --color --config terminus-settings/webpack.config.js && webpack --color --config terminus-terminal/webpack.config.js && webpack --color --config terminus-plugin-manager/webpack.config.js && webpack --color --config terminus-community-color-schemes/webpack.config.js && webpack --color --config terminus-ssh/webpack.config.js && webpack --color --config terminus-serial/webpack.config.js",
"build:typings": "node scripts/build-typings.js",
"watch": "cross-env TERMINUS_DEV=1 webpack --progress --color --watch",
"start": "cross-env TERMINUS_DEV=1 electron app --debug",
"start": "cross-env TERMINUS_DEV=1 electron app --debug --inspect",
"start:prod": "electron app --debug",
"prod": "cross-env TERMINUS_DEV=1 electron app",
"docs": "typedoc --out docs/api terminus-core/src && typedoc --out docs/api/terminal --tsconfig terminus-terminal/tsconfig.typings.json terminus-terminal/src && typedoc --out docs/api/settings --tsconfig terminus-settings/tsconfig.typings.json terminus-settings/src",
"docs": "typedoc --out docs/api --tsconfig terminus-core/src/tsconfig.typings.json terminus-core/src/index.ts && typedoc --out docs/api/terminal --tsconfig terminus-terminal/tsconfig.typings.json terminus-terminal/src/index.ts && typedoc --out docs/api/settings --tsconfig terminus-settings/tsconfig.typings.json terminus-settings/src/index.ts",
"lint": "eslint --ext ts */src */lib",
"postinstall": "node ./scripts/install-deps.js"
},
"repository": "eugeny/terminus",
"author": "Eugene Pankov",
"license": "MIT"
"private": true
}

View File

@@ -7,7 +7,7 @@ const isCI = !!process.env.GITHUB_REF
builder({
dir: true,
linux: ['deb', 'tar.gz', 'rpm'],
linux: ['deb', 'tar.gz', 'rpm', 'pacman'],
config: {
extraMetadata: {
version: vars.version,

View File

@@ -1,8 +1,6 @@
#!/usr/bin/env node
const builder = require('electron-builder').build
const vars = require('./vars')
const fs = require('fs')
const signHook = require('../build/mac/afterSignHook')
const isTag = (process.env.GITHUB_REF || '').startsWith('refs/tags/')
@@ -16,6 +14,7 @@ builder({
extraMetadata: {
version: vars.version,
},
npmRebuild: process.env.ARCH !== 'arm64',
},
publish: isTag ? 'always' : 'onTag',
}).catch(e => {

View File

@@ -1,6 +1,6 @@
{
"name": "terminus-community-color-schemes",
"version": "1.0.123-nightly.0",
"version": "1.0.135-nightly.0",
"description": "Community color schemes for Terminus",
"keywords": [
"terminus-builtin-plugin"

View File

@@ -0,0 +1,42 @@
!
!
*.foreground: #d8dee9
*.background: #2e3440
*.cursorColor: #d8dee9
!
! Black
*.color0: #3b4252
*.color8: #373e4d
!
! Red
*.color1: #bf616a
*.color9: #94545d
!
! Green
*.color2: #a3be8c
*.color10: #809575
!
! Yellow
*.color3: #ebcb8b
*.color11: #b29e75
!
! Blue
*.color4: #81a1c1
*.color12: #68809a
!
! Magenta
*.color5: #b48ead
*.color13: #8c738c
!
! Cyan
*.color6: #88c0d0
*.color14: #6d96a5
!
! White
*.color7: #e5e9f0
*.color15: #aeb3bb
!
! Bold, Italic, Underline
*.colorBD: #a5abb6
!*.colorIT:
!*.colorUL:

View File

@@ -1,51 +1,6 @@
const path = require('path')
module.exports = {
target: 'node',
entry: 'src/index.ts',
context: __dirname,
devtool: 'cheap-module-source-map',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'index.js',
pathinfo: true,
libraryTarget: 'umd',
devtoolModuleFilenameTemplate: 'webpack-terminus-community-color-schemes:///[resource-path]',
},
mode: process.env.TERMINUS_DEV ? 'development' : 'production',
optimization:{
minimize: false,
},
resolve: {
modules: ['.', 'src', 'node_modules', '../app/node_modules'].map(x => path.join(__dirname, x)),
extensions: ['.ts', '.js'],
},
module: {
rules: [
{
test: /\.ts$/,
use: {
loader: 'awesome-typescript-loader',
options: {
configFileName: path.resolve(__dirname, 'tsconfig.json'),
typeRoots: [
path.resolve(__dirname, 'node_modules/@types'),
path.resolve(__dirname, '../node_modules/@types'),
],
paths: {
"terminus-*": [path.resolve(__dirname, '../terminus-*')],
"*": [path.resolve(__dirname, '../app/node_modules/*')],
},
},
},
},
{ test: /[\\\/]schemes[\\\/]/, use: "raw-loader" },
],
},
externals: [
/^rxjs/,
/^@angular/,
/^@ng-bootstrap/,
/^terminus-/,
],
}
const config = require('../webpack.plugin.config')
module.exports = config({
name: 'community-color-schemes',
dirname: __dirname,
})
module.exports.module.rules.push({ test: /[\\\/]schemes[\\\/]/, use: 'raw-loader' })

View File

@@ -1,6 +1,6 @@
{
"name": "terminus-core",
"version": "1.0.123-nightly.0",
"version": "1.0.135-nightly.0",
"description": "Terminus core",
"keywords": [
"terminus-builtin-plugin"
@@ -17,19 +17,21 @@
"author": "Eugene Pankov",
"license": "MIT",
"devDependencies": {
"@types/js-yaml": "^3.9.0",
"@electron/remote": "1.0.4",
"@types/js-yaml": "^4.0.0",
"@types/shell-escape": "^0.2.0",
"@types/winston": "^2.3.6",
"axios": "^0.19.0",
"axios": "^0.21.1",
"bootstrap": "^4.1.3",
"clone-deep": "^4.0.1",
"core-js": "^3.1.2",
"deepmerge": "^4.1.1",
"electron-updater": "^4.0.6",
"js-yaml": "^3.9.0",
"js-yaml": "^4.0.0",
"mixpanel": "^0.10.2",
"ng2-dnd": "^5.0.2",
"ngx-perfect-scrollbar": "^8.0.0",
"readable-stream": "2.3.7",
"ngx-perfect-scrollbar": "^10.1.0",
"readable-stream": "3.6.0",
"shell-escape": "^0.2.0",
"uuid": "^8.0.0",
"winston": "^3.3.3"

View File

@@ -1,3 +1,4 @@
export { BaseComponent, SubscriptionContainer } from '../components/base.component'
export { BaseTabComponent, BaseTabProcess } from '../components/baseTab.component'
export { TabHeaderComponent } from '../components/tabHeader.component'
export { SplitTabComponent, SplitContainer } from '../components/splitTab.component'
@@ -17,7 +18,9 @@ export { Logger, LogService } from '../services/log.service'
export { HomeBaseService } from '../services/homeBase.service'
export { HotkeysService } from '../services/hotkeys.service'
export { HostAppService, Platform } from '../services/hostApp.service'
export { NotificationsService } from '../services/notifications.service'
export { ShellIntegrationService } from '../services/shellIntegration.service'
export { ThemesService } from '../services/themes.service'
export { TabsService } from '../services/tabs.service'
export { UpdaterService } from '../services/updater.service'
export * from '../utils'

View File

@@ -1,3 +1,4 @@
import deepClone from 'clone-deep'
import { TabComponentType } from '../services/tabs.service'
export interface RecoveredTab {
@@ -35,10 +36,26 @@ export interface RecoveryToken {
* ```
*/
export abstract class TabRecoveryProvider {
/**
* @param recoveryToken a recovery token found in the saved tabs list
* @returns [[boolean]] whether this [[TabRecoveryProvider]] can recover a tab from this token
*/
abstract async applicableTo (recoveryToken: RecoveryToken): Promise<boolean>
/**
* @param recoveryToken a recovery token found in the saved tabs list
* @returns [[RecoveredTab]] descriptor containing tab type and component inputs
* or `null` if this token is from a different tab type or is not supported
*/
abstract async recover (recoveryToken: RecoveryToken): Promise<RecoveredTab|null>
abstract async recover (recoveryToken: RecoveryToken): Promise<RecoveredTab>
/**
* @param recoveryToken a recovery token found in the saved tabs list
* @returns [[RecoveryToken]] a new recovery token to create the duplicate tab from
*
* The default implementation just returns a deep copy of the original token
*/
duplicate (recoveryToken: RecoveryToken): RecoveryToken {
return deepClone(recoveryToken)
}
}

View File

@@ -10,4 +10,7 @@ export abstract class Theme {
css: string
terminalBackground: string
macOSWindowButtonsInsetX?: number
macOSWindowButtonsInsetY?: number
}

View File

@@ -1,6 +1,6 @@
title-bar(
*ngIf='!hostApp.isFullScreen && config.store.appearance.frame == "full" && config.store.appearance.dock == "off"',
[class.inset]='hostApp.platform == Platform.macOS'
[class.inset]='hostApp.platform == Platform.macOS && !hostApp.isFullScreen'
)
.content(
@@ -9,6 +9,7 @@ title-bar(
)
.tab-bar
.inset.background(*ngIf='hostApp.platform == Platform.macOS \
&& !hostApp.isFullScreen \
&& config.store.appearance.frame == "thin" \
&& (config.store.appearance.tabsLocation == "top" || config.store.appearance.tabsLocation == "left")')
.tabs(
@@ -24,7 +25,6 @@ title-bar(
[index]='idx',
[tab]='tab',
[active]='tab == app.activeTab',
[hasActivity]='tab.activity$|async',
@animateTab,
[@.disabled]='hasVerticalTabs()',
(click)='app.selectTab(tab)',
@@ -85,7 +85,7 @@ title-bar(
button.btn.btn-secondary.btn-tab-bar.btn-update(
*ngIf='updatesAvailable',
title='Update available - Click to install',
(click)='updateApp()',
(click)='updater.update()',
[fastHtmlBind]='updateIcon'
)
@@ -94,12 +94,14 @@ title-bar(
&& (hostApp.platform == Platform.Windows || hostApp.platform == Platform.Linux)',
)
start-page(*ngIf='ready && app.tabs.length == 0')
.content
start-page.content-tab.content-tab-active(*ngIf='ready && app.tabs.length == 0')
tab-body(
*ngFor='let tab of unsortedTabs',
[active]='tab == app.activeTab',
[tab]='tab',
)
tab-body.content-tab(
*ngFor='let tab of unsortedTabs',
[class.content-tab-active]='tab == app.activeTab',
[active]='tab == app.activeTab',
[tab]='tab',
)
ng-template(ngbModalContainer)

View File

@@ -85,6 +85,7 @@ $side-tab-width: 200px;
cursor: pointer;
display: flex;
align-items: center;
padding: 0 15px;
flex: 0 0 auto;
border-bottom: 2px solid transparent;
@@ -133,9 +134,24 @@ $side-tab-width: 200px;
}
}
.tabs-content {
flex: auto;
display: flex;
.content {
flex: 1 1 0;
position: relative;
min-height: 0;
min-width: 0;
> .content-tab {
position: absolute;
top: 0;
width: 100%;
height: 100%;
left: -1000%;
&.content-tab-active {
left: 0;
}
}
}
hotkey-hint {

View File

@@ -68,7 +68,6 @@ export class AppRootComponent {
private constructor (
private docking: DockingService,
private electron: ElectronService,
private hotkeys: HotkeysService,
private updater: UpdaterService,
private touchbar: TouchbarService,
@@ -76,6 +75,7 @@ export class AppRootComponent {
public config: ConfigService,
public app: AppService,
@Inject(ToolbarButtonProvider) private toolbarButtonProviders: ToolbarButtonProvider[],
electron: ElectronService,
log: LogService,
ngbModal: NgbModal,
_themes: ThemesService,
@@ -136,12 +136,18 @@ export class AppRootComponent {
ngbModal.open(SafeModeModalComponent)
}
this.updater.check().then(available => {
this.updatesAvailable = available
})
setInterval(() => {
if (this.config.store.enableAutomaticUpdates) {
this.updater.check().then(available => {
this.updatesAvailable = available
})
}
}, 3600 * 12)
this.touchbar.update()
this.hostApp.useBuiltinGraphics()
config.changed$.subscribe(() => this.updateVibrancy())
this.updateVibrancy()
@@ -188,20 +194,6 @@ export class AppRootComponent {
return this.config.store.appearance.tabsLocation === 'left' || this.config.store.appearance.tabsLocation === 'right'
}
async updateApp () {
if ((await this.electron.showMessageBox(
this.hostApp.getWindow(),
{
type: 'warning',
message: 'Installing the update will close all tabs and restart Terminus.',
buttons: ['Cancel', 'Update'],
defaultId: 1,
}
)).response === 1) {
this.updater.update()
}
}
onTabDragStart () {
this.tabsDragging = true
}

View File

@@ -0,0 +1,54 @@
import { Observable, Subscription } from 'rxjs'
interface CancellableEvent {
element: HTMLElement
event: string
handler: EventListenerOrEventListenerObject
options?: boolean|AddEventListenerOptions
}
export class SubscriptionContainer {
private subscriptions: Subscription[] = []
private events: CancellableEvent[] = []
addEventListener (element: HTMLElement, event: string, handler: EventListenerOrEventListenerObject, options?: boolean|AddEventListenerOptions): void {
element.addEventListener(event, handler, options)
this.events.push({
element,
event,
handler,
options,
})
}
subscribe <T> (observable: Observable<T>, handler: (v: T) => void): void {
this.subscriptions.push(observable.subscribe(handler))
}
cancelAll (): void {
for (const s of this.subscriptions) {
s.unsubscribe()
}
for (const e of this.events) {
e.element.removeEventListener(e.event, e.handler, e.options)
}
this.subscriptions = []
this.events = []
}
}
export class BaseComponent {
private subscriptionContainer = new SubscriptionContainer()
addEventListenerUntilDestroyed (element: HTMLElement, event: string, handler: EventListenerOrEventListenerObject, options?: boolean|AddEventListenerOptions): void {
this.subscriptionContainer.addEventListener(element, event, handler, options)
}
subscribeUntilDestroyed <T> (observable: Observable<T>, handler: (v: T) => void): void {
this.subscriptionContainer.subscribe(observable, handler)
}
ngOnDestroy (): void {
this.subscriptionContainer.cancelAll()
}
}

View File

@@ -1,6 +1,7 @@
import { Observable, Subject } from 'rxjs'
import { ViewRef } from '@angular/core'
import { RecoveryToken } from '../api/tabRecovery'
import { BaseComponent } from './base.component'
/**
* Represents an active "process" inside a tab,
@@ -13,7 +14,7 @@ export interface BaseTabProcess {
/**
* Abstract base class for custom tab components
*/
export abstract class BaseTabComponent {
export abstract class BaseTabComponent extends BaseComponent {
/**
* Parent tab (usually a SplitTabComponent)
*/
@@ -69,6 +70,7 @@ export abstract class BaseTabComponent {
get recoveryStateChangedHint$ (): Observable<void> { return this.recoveryStateChangedHint }
protected constructor () {
super()
this.focused$.subscribe(() => {
this.hasFocus = true
})
@@ -158,10 +160,17 @@ export abstract class BaseTabComponent {
this.blurred.complete()
this.titleChange.complete()
this.progress.complete()
this.activity.complete()
this.recoveryStateChangedHint.complete()
if (!skipDestroyedEvent) {
this.destroyed.next()
}
this.destroyed.complete()
}
/** @hidden */
ngOnDestroy (): void {
this.destroy()
super.ngOnDestroy()
}
}

View File

@@ -17,7 +17,7 @@ import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'
})
export class CheckboxComponent implements ControlValueAccessor {
@HostBinding('class.active') @Input() model: boolean
@Input() disabled: boolean
@HostBinding('class.disabled') @Input() disabled: boolean
@Input() text: string
private changed = new Array<(val: boolean) => void>()

View File

@@ -7,7 +7,7 @@
(ngModelChange)='onFilterChange()'
)
.list-group.mt-3(*ngIf='filteredOptions.length')
.list-group(*ngIf='filteredOptions.length')
a.list-group-item.list-group-item-action.d-flex.align-items-center(
#item,
(click)='selectOption(option)',

View File

@@ -1,6 +1,12 @@
.modal-body {
padding: 0;
}
.list-group {
max-height: 70vh;
overflow: auto;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
.icon {
@@ -11,3 +17,8 @@
.title {
margin-left: 10px;
}
input {
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}

View File

@@ -1,9 +1,10 @@
import { Component, Input, HostListener, ViewChildren, QueryList, ElementRef } from '@angular/core'
import { Component, Input, HostListener, ViewChildren, QueryList, ElementRef } from '@angular/core' // eslint-disable-line @typescript-eslint/no-unused-vars
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
import { SelectorOption } from '../api/selector'
/** @hidden */
@Component({
selector: 'selector-modal',
template: require('./selectorModal.component.pug'),
styles: [require('./selectorModal.component.scss')],
})

View File

@@ -1,4 +1,4 @@
import { Observable, Subject, Subscription } from 'rxjs'
import { Observable, Subject } from 'rxjs'
import { Component, Injectable, ViewChild, ViewContainerRef, EmbeddedViewRef, AfterViewInit, OnDestroy } from '@angular/core'
import { BaseTabComponent, BaseTabProcess } from './baseTab.component'
import { TabRecoveryProvider, RecoveredTab, RecoveryToken } from '../api/tabRecovery'
@@ -163,7 +163,6 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
/** @hidden */
private focusedTab: BaseTabComponent|null = null
private maximizedTab: BaseTabComponent|null = null
private hotkeysSubscription: Subscription
private viewRefs: Map<BaseTabComponent, EmbeddedViewRef<any>> = new Map()
private tabAdded = new Subject<BaseTabComponent>()
@@ -210,7 +209,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
})
this.blurred$.subscribe(() => this.getAllTabs().forEach(x => x.emitBlurred()))
this.hotkeysSubscription = this.hotkeys.matchedHotkey.subscribe(hotkey => {
this.subscribeUntilDestroyed(this.hotkeys.matchedHotkey, hotkey => {
if (!this.hasFocus || !this.focusedTab) {
return
}
@@ -256,7 +255,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
/** @hidden */
async ngAfterViewInit (): Promise<void> {
if (this._recoveredState) {
await this.recoverContainer(this.root, this._recoveredState)
await this.recoverContainer(this.root, this._recoveredState, this._recoveredState.duplicate)
this.layout()
setTimeout(() => {
if (this.hasFocus) {
@@ -272,7 +271,9 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
/** @hidden */
ngOnDestroy (): void {
this.hotkeysSubscription.unsubscribe()
this.tabAdded.complete()
this.tabRemoved.complete()
super.ngOnDestroy()
}
/** @returns Flat list of all sub-tabs */
@@ -497,15 +498,18 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
const ref = this.viewContainer.insert(tab.hostView) as EmbeddedViewRef<any> // eslint-disable-line @typescript-eslint/no-unnecessary-type-assertion
this.viewRefs.set(tab, ref)
ref.rootNodes[0].addEventListener('click', () => this.focus(tab))
tab.addEventListenerUntilDestroyed(ref.rootNodes[0], 'click', () => this.focus(tab))
tab.titleChange$.subscribe(t => this.setTitle(t))
tab.activity$.subscribe(a => a ? this.displayActivity() : this.clearActivity())
tab.progress$.subscribe(p => this.setProgress(p))
tab.subscribeUntilDestroyed(tab.titleChange$, t => this.setTitle(t))
tab.subscribeUntilDestroyed(tab.activity$, a => a ? this.displayActivity() : this.clearActivity())
tab.subscribeUntilDestroyed(tab.progress$, p => this.setProgress(p))
if (tab.title) {
this.setTitle(tab.title)
}
tab.destroyed$.subscribe(() => {
tab.subscribeUntilDestroyed(tab.recoveryStateChangedHint$, () => {
this.recoveryStateChangedHint.next()
})
tab.subscribeUntilDestroyed(tab.destroyed$, () => {
this.removeTab(tab)
})
}
@@ -567,7 +571,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
})
}
private async recoverContainer (root: SplitContainer, state: any) {
private async recoverContainer (root: SplitContainer, state: any, duplicate = false) {
const children: (SplitContainer | BaseTabComponent)[] = []
root.orientation = state.orientation
root.ratios = state.ratios
@@ -575,10 +579,10 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
for (const childState of state.children) {
if (childState.type === 'app:split-tab') {
const child = new SplitContainer()
await this.recoverContainer(child, childState)
await this.recoverContainer(child, childState, duplicate)
children.push(child)
} else {
const recovered = await this.tabRecovery.recoverTab(childState)
const recovered = await this.tabRecovery.recoverTab(childState, duplicate)
if (recovered) {
const tab = this.tabsService.create(recovered.type, recovered.options)
children.push(tab)
@@ -599,13 +603,21 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
/** @hidden */
@Injectable()
export class SplitTabRecoveryProvider extends TabRecoveryProvider {
async recover (recoveryToken: RecoveryToken): Promise<RecoveredTab|null> {
if (recoveryToken.type === 'app:split-tab') {
return {
type: SplitTabComponent,
options: { _recoveredState: recoveryToken },
}
async applicableTo (recoveryToken: RecoveryToken): Promise<boolean> {
return recoveryToken.type === 'app:split-tab'
}
async recover (recoveryToken: RecoveryToken): Promise<RecoveredTab> {
return {
type: SplitTabComponent,
options: { _recoveredState: recoveryToken },
}
}
duplicate (recoveryToken: RecoveryToken): RecoveryToken {
return {
...recoveryToken,
duplicate: true,
}
return null
}
}

View File

@@ -1,15 +1,11 @@
:host {
display: none;
display: flex;
flex: auto;
position: relative;
overflow: hidden;
&.active {
display: flex;
>* {
flex: auto;
}
>* {
flex: auto;
}
> perfect-scrollbar {

View File

@@ -1,7 +1,10 @@
.colorbar([style.background-color]='tab.color', *ngIf='tab.color != null')
.progressbar([style.width]='progress + "%"', *ngIf='progress != null')
.index(*ngIf='!config.store.terminal.hideTabIndex',
#handle,
[style.background-color]='tab.color',
) {{index + 1}}
.name([title]='tab.customTitle || tab.title') {{tab.customTitle || tab.title}}
.activity-indicator(*ngIf='tab.activity$|async')
.index(*ngIf='!config.store.terminal.hideTabIndex', #handle) {{index + 1}}
.name(
[title]='tab.customTitle || tab.title',
[class.no-hover]='config.store.terminal.hideCloseButton'
) {{tab.customTitle || tab.title}}
button(*ngIf='!config.store.terminal.hideCloseButton',(click)='app.closeTab(tab, true)') &times;

View File

@@ -4,8 +4,16 @@ $tabs-height: 38px;
position: relative;
cursor: pointer;
> * { cursor: pointer; }
flex: 1000 1 200px;
width: 200px;
padding: 0 10px;
&.flex-width {
flex: 1000 1 auto;
width: auto;
}
display: flex;
flex-direction: row;
@@ -24,7 +32,6 @@ $tabs-height: 38px;
-webkit-app-region: no-drag;
cursor: -webkit-grab;
margin-left: 10px;
width: 22px;
border-radius: 10px;
text-align: center;
@@ -34,7 +41,7 @@ $tabs-height: 38px;
.name {
flex: auto;
margin: 0 1px 0 10px;
margin-top: 1px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
@@ -42,6 +49,10 @@ $tabs-height: 38px;
align-self: center;
}
.index + .name {
margin-left: 10px;
}
button {
display: block;
flex: none;
@@ -49,13 +60,15 @@ $tabs-height: 38px;
opacity: 0;
-webkit-app-region: no-drag;
position: absolute;
right: 0;
$button-size: 26px;
width: $button-size;
height: $button-size;
border-radius: $button-size / 2;
border-radius: $button-size / 6;
line-height: $button-size;
align-self: center;
margin-right: 10px;
text-align: center;
font-size: 20px;
@@ -65,6 +78,13 @@ $tabs-height: 38px;
}
}
&:hover .name:not(.no-hover) {
-webkit-mask-image: linear-gradient(black 0 0), linear-gradient(to left, transparent 0%, black 100%);
-webkit-mask-size: calc(100% - 60px) auto, 60px auto;
-webkit-mask-repeat: no-repeat;
-webkit-mask-position: left, right;
}
&:hover button {
transition: 0.25s opacity;
display: block;
@@ -83,8 +103,30 @@ $tabs-height: 38px;
position: absolute;
left: 0;
top: 0;
height: 5px;
z-index: -1;
height: 3px;
z-index: 1;
transition: 0.25s width;
}
.colorbar {
position: absolute;
left: 0;
bottom: 0;
height: 3px;
width: 100%;
z-index: 1;
}
&.active .activity-indicator {
display: none;
}
.activity-indicator {
position: absolute;
left: 10px;
right: 10px;
bottom: 4px;
height: 2px;
z-index: -1;
}
}

View File

@@ -1,6 +1,6 @@
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import type { MenuItemConstructorOptions } from 'electron'
import { Component, Input, Optional, Inject, HostBinding, HostListener, ViewChild, ElementRef } from '@angular/core'
import { Component, Input, Optional, Inject, HostBinding, HostListener, ViewChild, ElementRef, NgZone } from '@angular/core'
import { SortableComponent } from 'ng2-dnd'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { TabContextMenuItemProvider } from '../api/tabContextMenuProvider'
@@ -11,6 +11,7 @@ import { ElectronService } from '../services/electron.service'
import { AppService } from '../services/app.service'
import { HostAppService, Platform } from '../services/hostApp.service'
import { ConfigService } from '../services/config.service'
import { BaseComponent } from './base.component'
/** @hidden */
export interface SortableComponentProxy {
@@ -23,13 +24,12 @@ export interface SortableComponentProxy {
template: require('./tabHeader.component.pug'),
styles: [require('./tabHeader.component.scss')],
})
export class TabHeaderComponent {
export class TabHeaderComponent extends BaseComponent {
@Input() index: number
@Input() @HostBinding('class.active') active: boolean
@Input() @HostBinding('class.has-activity') hasActivity: boolean
@Input() tab: BaseTabComponent
@Input() progress: number|null
@ViewChild('handle') handle: ElementRef
@ViewChild('handle') handle?: ElementRef
private constructor (
public app: AppService,
@@ -38,10 +38,12 @@ export class TabHeaderComponent {
private hostApp: HostAppService,
private ngbModal: NgbModal,
private hotkeys: HotkeysService,
private zone: NgZone,
@Inject(SortableComponent) private parentDraggable: SortableComponentProxy,
@Optional() @Inject(TabContextMenuItemProvider) protected contextMenuProviders: TabContextMenuItemProvider[],
) {
this.hotkeys.matchedHotkey.subscribe((hotkey) => {
super()
this.subscribeUntilDestroyed(this.hotkeys.matchedHotkey, (hotkey) => {
if (this.app.activeTab === this.tab) {
if (hotkey === 'rename-tab') {
this.showRenameTabModal()
@@ -52,13 +54,15 @@ export class TabHeaderComponent {
}
ngOnInit () {
this.tab.progress$.subscribe(progress => {
this.progress = progress
this.subscribeUntilDestroyed(this.tab.progress$, progress => {
this.zone.run(() => {
this.progress = progress
})
})
}
ngAfterViewInit () {
if (this.hostApp.platform === Platform.macOS) {
if (this.handle && this.hostApp.platform === Platform.macOS) {
this.parentDraggable.setDragHandle(this.handle.nativeElement)
}
}
@@ -81,6 +85,10 @@ export class TabHeaderComponent {
return items.slice(1)
}
@HostBinding('class.flex-width') get isFlexWidthEnabled (): boolean {
return this.config.store.appearance.flexTabs
}
@HostListener('dblclick') onDoubleClick (): void {
this.showRenameTabModal()
}
@@ -101,7 +109,7 @@ export class TabHeaderComponent {
if ($event.which === 3) {
$event.preventDefault()
const contextMenu = this.electron.remote.Menu.buildFromTemplate(await this.buildContextMenu())
const contextMenu = this.electron.Menu.buildFromTemplate(await this.buildContextMenu())
contextMenu.popup({
x: $event.pageX,

View File

@@ -3,7 +3,6 @@
$toggle-size: 18px;
$height: 30px;
$padding: 2px;
cursor: pointer;
display: inline-flex;
overflow: visible;
border-radius: 3px;
@@ -16,8 +15,11 @@
padding-left: 10px;
margin-left: -10px;
&[disabled] {
&.disabled {
opacity: 0.5;
}
* {
cursor: pointer;
}
}

View File

@@ -42,6 +42,16 @@ hotkeys:
- 'Alt-9'
tab-10:
- 'Alt-0'
tab-11: []
tab-12: []
tab-13: []
tab-14: []
tab-15: []
tab-16: []
tab-17: []
tab-18: []
tab-19: []
tab-20: []
split-right:
- 'Ctrl-Shift-E'
split-bottom:

View File

@@ -40,6 +40,16 @@ hotkeys:
- '⌘-9'
tab-10:
- '⌘-0'
tab-11: []
tab-12: []
tab-13: []
tab-14: []
tab-15: []
tab-16: []
tab-17: []
tab-18: []
tab-19: []
tab-20: []
split-right:
- '⌘-Shift-D'
split-bottom:

View File

@@ -43,6 +43,16 @@ hotkeys:
- 'Alt-9'
tab-10:
- 'Alt-0'
tab-11: []
tab-12: []
tab-13: []
tab-14: []
tab-15: []
tab-16: []
tab-17: []
tab-18: []
tab-19: []
tab-20: []
split-right:
- 'Ctrl-Shift-E'
split-bottom:

View File

@@ -2,8 +2,10 @@ appearance:
dock: off
dockScreen: current
dockFill: 0.5
dockSpace: 1
dockHideOnBlur: false
dockAlwaysOnTop: true
flexTabs: false
tabsLocation: top
cycleTabs: true
theme: Standard

View File

@@ -89,6 +89,46 @@ export class AppHotkeyProvider extends HotkeyProvider {
id: 'tab-10',
name: 'Tab 10',
},
{
id: 'tab-11',
name: 'Tab 11',
},
{
id: 'tab-12',
name: 'Tab 12',
},
{
id: 'tab-13',
name: 'Tab 13',
},
{
id: 'tab-14',
name: 'Tab 14',
},
{
id: 'tab-15',
name: 'Tab 15',
},
{
id: 'tab-16',
name: 'Tab 16',
},
{
id: 'tab-17',
name: 'Tab 17',
},
{
id: 'tab-18',
name: 'Tab 18',
},
{
id: 'tab-19',
name: 'Tab 19',
},
{
id: 'tab-20',
name: 'Tab 20',
},
{
id: 'split-right',
name: 'Split to the right',

View File

@@ -44,8 +44,11 @@ import 'ng2-dnd/bundles/style.css'
// PerfectScrollbar fix
import { fromEvent } from 'rxjs/internal/observable/fromEvent'
import { merge } from 'rxjs/internal/observable/merge'
require('rxjs').fromEvent = fromEvent
require('rxjs').merge = merge
try {
require('rxjs').fromEvent = fromEvent
require('rxjs').merge = merge
} catch {}
const PROVIDERS = [
{ provide: HotkeyProvider, useClass: AppHotkeyProvider, multi: true },
@@ -110,7 +113,7 @@ export default class AppModule { // eslint-disable-line @typescript-eslint/no-ex
})
}
static forRoot (): ModuleWithProviders {
static forRoot (): ModuleWithProviders<AppModule> {
return {
ngModule: AppModule,
providers: PROVIDERS,

View File

@@ -100,7 +100,7 @@ export class AppService {
hostApp.windowFocused$.subscribe(() => this._activeTab?.emitFocused())
this.tabClosed$.subscribe(async tab => {
const token = await tab.getRecoveryToken()
const token = await tabRecovery.getFullRecoveryToken(tab)
if (token) {
this.closedTabsStack.push(token)
}
@@ -263,7 +263,7 @@ export class AppService {
if (tabIndex > 0) {
this.swapTabs(this._activeTab, this.tabs[tabIndex - 1])
} else if (this.config.store.appearance.cycleTabs) {
this.swapTabs(this._activeTab, this.tabs[this.tabs.length - 1])
this.tabs.push(this.tabs.shift()!)
}
}
}
@@ -277,7 +277,7 @@ export class AppService {
if (tabIndex < this.tabs.length - 1) {
this.swapTabs(this._activeTab, this.tabs[tabIndex + 1])
} else if (this.config.store.appearance.cycleTabs) {
this.swapTabs(this._activeTab, this.tabs[0])
this.tabs.unshift(this.tabs.pop()!)
}
}
}

View File

@@ -144,7 +144,7 @@ export class ConfigService {
load (): void {
if (fs.existsSync(this.path)) {
this._store = yaml.safeLoad(fs.readFileSync(this.path, 'utf8'))
this._store = yaml.load(fs.readFileSync(this.path, 'utf8'))
} else {
this._store = {}
}
@@ -154,7 +154,7 @@ export class ConfigService {
save (): void {
// Scrub undefined values
this._store = JSON.parse(JSON.stringify(this._store))
fs.writeFileSync(this.path, yaml.safeDump(this._store), 'utf8')
fs.writeFileSync(this.path, yaml.dump(this._store), 'utf8')
this.emitChange()
this.hostApp.broadcastConfigChange(JSON.parse(JSON.stringify(this.store)))
}
@@ -163,14 +163,14 @@ export class ConfigService {
* Reads config YAML as string
*/
readRaw (): string {
return yaml.safeDump(this._store)
return yaml.dump(this._store)
}
/**
* Writes config YAML as string
*/
writeRaw (data: string): void {
this._store = yaml.safeLoad(data)
this._store = yaml.load(data)
this.save()
this.load()
this.emitChange()

View File

@@ -34,25 +34,30 @@ export class DockingService {
const newBounds: Bounds = { x: 0, y: 0, width: 0, height: 0 }
const fill = this.config.store.appearance.dockFill <= 1 ? this.config.store.appearance.dockFill : 1
const space = this.config.store.appearance.dockSpace <= 1 ? this.config.store.appearance.dockSpace : 1
const [minWidth, minHeight] = this.hostApp.getWindow().getMinimumSize()
if (dockSide === 'left' || dockSide === 'right') {
newBounds.width = Math.max(minWidth, Math.round(fill * display.bounds.width))
newBounds.height = display.bounds.height
newBounds.height = Math.round(display.bounds.height * space)
}
if (dockSide === 'top' || dockSide === 'bottom') {
newBounds.width = display.bounds.width
newBounds.width = Math.round(display.bounds.width * space)
newBounds.height = Math.max(minHeight, Math.round(fill * display.bounds.height))
}
if (dockSide === 'right') {
newBounds.x = display.bounds.x + display.bounds.width - newBounds.width
} else {
} else if (dockSide === 'left') {
newBounds.x = display.bounds.x
} else {
newBounds.x = display.bounds.x + Math.round(display.bounds.width / 2 * (1 - space))
}
if (dockSide === 'bottom') {
newBounds.y = display.bounds.y + display.bounds.height - newBounds.height
} else {
} else if (dockSide === 'top') {
newBounds.y = display.bounds.y
} else {
newBounds.y = display.bounds.y + Math.round(display.bounds.height / 2 * (1 - space))
}
const alwaysOnTop = this.config.store.appearance.dockAlwaysOnTop

View File

@@ -1,5 +1,6 @@
import { Injectable } from '@angular/core'
import { App, IpcRenderer, Shell, Dialog, Clipboard, GlobalShortcut, Screen, Remote, AutoUpdater, TouchBar, BrowserWindow, Menu, MenuItem, NativeImage, MessageBoxOptions } from 'electron'
import * as remote from '@electron/remote'
export interface MessageBoxResponse {
response: number
@@ -17,30 +18,31 @@ export class ElectronService {
nativeImage: typeof NativeImage
screen: Screen
remote: Remote
process: any
autoUpdater: AutoUpdater
TouchBar: typeof TouchBar
BrowserWindow: typeof BrowserWindow
Menu: typeof Menu
MenuItem: typeof MenuItem
private electron: any
/** @hidden */
private constructor () {
this.electron = require('electron')
this.remote = this.electron.remote
this.app = this.remote.app
this.screen = this.remote.screen
this.dialog = this.remote.dialog
this.shell = this.electron.shell
this.clipboard = this.electron.clipboard
this.ipcRenderer = this.electron.ipcRenderer
this.globalShortcut = this.remote.globalShortcut
this.nativeImage = this.remote.nativeImage
this.autoUpdater = this.remote.autoUpdater
this.TouchBar = this.remote.TouchBar
this.BrowserWindow = this.remote.BrowserWindow
this.Menu = this.remote.Menu
this.MenuItem = this.remote.MenuItem
const electron = require('electron')
this.shell = electron.shell
this.clipboard = electron.clipboard
this.ipcRenderer = electron.ipcRenderer
this.process = remote.getGlobal('process')
this.app = remote.app
this.screen = remote.screen
this.dialog = remote.dialog
this.globalShortcut = remote.globalShortcut
this.nativeImage = remote.nativeImage
this.autoUpdater = remote.autoUpdater
this.TouchBar = remote.TouchBar
this.BrowserWindow = remote.BrowserWindow
this.Menu = remote.Menu
this.MenuItem = remote.MenuItem
}
async showMessageBox (

View File

@@ -8,6 +8,12 @@ import { ElectronService } from './electron.service'
import { Logger, LogService } from './log.service'
import { isWindowsBuild, WIN_BUILD_FLUENT_BG_SUPPORTED } from '../utils'
/* eslint-disable block-scoped-var */
try {
var wnr = require('windows-native-registry') // eslint-disable-line @typescript-eslint/no-var-requires, no-var
} catch (_) { }
export enum Platform {
Linux = 'Linux',
macOS = 'macOS',
@@ -154,7 +160,7 @@ export class HostAppService {
electron.ipcRenderer.on('cli', (_$event, argv: any, cwd: string, secondInstance: boolean) => this.zone.run(async () => {
this.logger.info('Second instance', argv)
const op = argv._[0]
const opAsPath = path.resolve(cwd, op)
const opAsPath = op ? path.resolve(cwd, op) : null
if (op === 'open') {
this.cliOpenDirectory.next(path.resolve(cwd, argv.directory))
} else if (op === 'run') {
@@ -167,9 +173,9 @@ export class HostAppService {
this.cliPaste.next(text)
} else if (op === 'profile') {
this.cliOpenProfile.next(argv.profileName)
} else if (op === undefined) {
} else if (secondInstance && op === undefined) {
this.newWindow()
} else if ((await fs.lstat(opAsPath)).isDirectory()) {
} else if (opAsPath && (await fs.lstat(opAsPath)).isDirectory()) {
this.cliOpenDirectory.next(opAsPath)
}
@@ -283,6 +289,20 @@ export class HostAppService {
this.electron.ipcRenderer.send('app:register-global-hotkey', specs)
}
useBuiltinGraphics (): void {
const keyPath = 'SOFTWARE\\Microsoft\\DirectX\\UserGpuPreferences'
const valueName = this.electron.app.getPath('exe')
if (this.platform === Platform.Windows) {
if (!wnr.getRegistryValue(wnr.HK.CU, keyPath, valueName)) {
wnr.setRegistryValue(wnr.HK.CU, keyPath, valueName, wnr.REG.SZ, 'GpuPreference=1;')
}
}
}
setTrafficLightInset (x: number, y: number): void {
this.getWindow().setTrafficLightPosition({ x, y })
}
relaunch (): void {
if (this.isPortable) {
this.electron.app.relaunch({ execPath: process.env.PORTABLE_EXECUTABLE_FILE })

View File

@@ -1,7 +1,7 @@
import { Injectable, Inject, NgZone, EventEmitter } from '@angular/core'
import { Observable, Subject } from 'rxjs'
import { HotkeyDescription, HotkeyProvider } from '../api/hotkeyProvider'
import { stringifyKeySequence } from './hotkeys.util'
import { stringifyKeySequence, EventData } from './hotkeys.util'
import { ConfigService } from './config.service'
import { ElectronService } from './electron.service'
import { HostAppService } from './hostApp.service'
@@ -14,10 +14,6 @@ export interface PartialHotkeyMatch {
const KEY_TIMEOUT = 2000
interface EventBufferEntry {
event: KeyboardEvent
time: number
}
@Injectable({ providedIn: 'root' })
export class HotkeysService {
@@ -32,7 +28,7 @@ export class HotkeysService {
get hotkey$ (): Observable<string> { return this._hotkey }
private _hotkey = new Subject<string>()
private currentKeystrokes: EventBufferEntry[] = []
private currentKeystrokes: EventData[] = []
private disabledLevel = 0
private hotkeyDescriptions: HotkeyDescription[] = []
@@ -73,7 +69,16 @@ export class HotkeysService {
*/
pushKeystroke (name: string, nativeEvent: KeyboardEvent): void {
(nativeEvent as any).event = name
this.currentKeystrokes.push({ event: nativeEvent, time: performance.now() })
this.currentKeystrokes.push({
ctrlKey: nativeEvent.ctrlKey,
metaKey: nativeEvent.metaKey,
altKey: nativeEvent.altKey,
shiftKey: nativeEvent.shiftKey,
code: nativeEvent.code,
key: nativeEvent.key,
eventName: name,
time: performance.now(),
})
}
/**
@@ -104,7 +109,7 @@ export class HotkeysService {
getCurrentKeystrokes (): string[] {
this.currentKeystrokes = this.currentKeystrokes.filter(x => performance.now() - x.time < KEY_TIMEOUT)
return stringifyKeySequence(this.currentKeystrokes.map(x => x.event))
return stringifyKeySequence(this.currentKeystrokes)
}
getCurrentFullyMatchedHotkey (): string|null {

View File

@@ -10,13 +10,26 @@ export const altKeyName = {
linux: 'Alt',
}[process.platform]
export function stringifyKeySequence (events: KeyboardEvent[]): string[] {
export interface EventData {
ctrlKey: boolean
metaKey: boolean
altKey: boolean
shiftKey: boolean
key: string
code: string
eventName: string
time: number
}
const REGEX_LATIN_KEYNAME = /^[A-Za-z]$/
export function stringifyKeySequence (events: EventData[]): string[] {
const items: string[] = []
events = events.slice()
while (events.length > 0) {
const event = events.shift()!
if ((event as any).event === 'keydown') {
if (event.eventName === 'keydown') {
const itemKeys: string[] = []
if (event.ctrlKey) {
itemKeys.push('Ctrl')
@@ -37,23 +50,29 @@ export function stringifyKeySequence (events: KeyboardEvent[]): string[] {
}
let key = event.code
key = key.replace('Key', '')
key = key.replace('Arrow', '')
key = key.replace('Digit', '')
key = {
Comma: ',',
Period: '.',
Slash: '/',
Backslash: '\\',
IntlBackslash: '\\',
Backquote: '`',
Minus: '-',
Equal: '=',
Semicolon: ';',
Quote: '\'',
BracketLeft: '[',
BracketRight: ']',
}[key] || key
if (REGEX_LATIN_KEYNAME.test(event.key)) {
// Handle Dvorak etc via the reported "character" instead of the scancode
key = event.key.toUpperCase()
} else {
key = key.replace('Key', '')
key = key.replace('Arrow', '')
key = key.replace('Digit', '')
key = {
Comma: ',',
Period: '.',
Slash: '/',
Backslash: '\\',
IntlBackslash: '`',
Backquote: '~', // Electron says it's the tilde
Minus: '-',
Equal: '=',
Semicolon: ';',
Quote: '\'',
BracketLeft: '[',
BracketRight: ']',
}[key] || key
}
itemKeys.push(key)
items.push(itemKeys.join('-'))
}

View File

@@ -1,11 +1,13 @@
import { Injectable } from '@angular/core'
import { ElectronService } from './electron.service'
import * as winston from 'winston'
import type * as winston from 'winston'
import * as fs from 'fs'
import * as path from 'path'
const initializeWinston = (electron: ElectronService) => {
const logDirectory = electron.app.getPath('userData')
// eslint-disable-next-line
const winston = require('winston')
if (!fs.existsSync(logDirectory)) {
fs.mkdirSync(logDirectory)
@@ -64,7 +66,11 @@ export class LogService {
/** @hidden */
private constructor (electron: ElectronService) {
this.log = initializeWinston(electron)
if (!process.env.XWEB) {
this.log = initializeWinston(electron)
} else {
this.log = console as any
}
}
create (name: string): Logger {

View File

@@ -0,0 +1,23 @@
import { Injectable } from '@angular/core'
import { ToastrService } from 'ngx-toastr'
@Injectable({ providedIn: 'root' })
export class NotificationsService {
private constructor (
private toastr: ToastrService,
) { }
notice (text: string): void {
this.toastr.info(text, undefined, {
timeOut: 1000,
})
}
info (text: string, details?: string): void {
this.toastr.info(text, details)
}
error (text: string, details?: string): void {
this.toastr.error(text, details)
}
}

View File

@@ -24,30 +24,36 @@ export class TabRecoveryService {
}
window.localStorage.tabsRecovery = JSON.stringify(
(await Promise.all(
tabs
.map(async tab => tab.getRecoveryToken().then(r => {
if (r) {
r.tabTitle = tab.title
if (tab.color) {
r.tabColor = tab.color
}
}
return r
}))
tabs.map(async tab => this.getFullRecoveryToken(tab))
)).filter(token => !!token)
)
}
async recoverTab (token: RecoveryToken): Promise<RecoveredTab|null> {
async getFullRecoveryToken (tab: BaseTabComponent): Promise<RecoveryToken|null> {
const token = await tab.getRecoveryToken()
if (token) {
token.tabTitle = tab.title
if (tab.color) {
token.tabColor = tab.color
}
}
return token
}
async recoverTab (token: RecoveryToken, duplicate = false): Promise<RecoveredTab|null> {
for (const provider of this.config.enabledServices(this.tabRecoveryProviders ?? [])) {
try {
const tab = await provider.recover(token)
if (tab !== null) {
tab.options = tab.options || {}
tab.options.color = token.tabColor ?? null
tab.options.title = token.tabTitle || ''
return tab
if (!await provider.applicableTo(token)) {
continue
}
if (duplicate) {
token = provider.duplicate(token)
}
const tab = await provider.recover(token)
tab.options = tab.options || {}
tab.options.color = token.tabColor ?? null
tab.options.title = token.tabTitle || ''
return tab
} catch (error) {
this.logger.warn('Tab recovery crashed:', token, provider, error)
}

View File

@@ -30,11 +30,11 @@ export class TabsService {
* Duplicates an existing tab instance (using the tab recovery system)
*/
async duplicate (tab: BaseTabComponent): Promise<BaseTabComponent|null> {
const token = await tab.getRecoveryToken()
const token = await this.tabRecovery.getFullRecoveryToken(tab)
if (!token) {
return null
}
const dup = await this.tabRecovery.recoverTab(token)
const dup = await this.tabRecovery.recoverTab(token, true)
if (dup) {
return this.create(dup.type, dup.options)
}

View File

@@ -1,6 +1,7 @@
import { Inject, Injectable } from '@angular/core'
import { ConfigService } from '../services/config.service'
import { Theme } from '../api/theme'
import { HostAppService, Platform } from './hostApp.service'
@Injectable({ providedIn: 'root' })
export class ThemesService {
@@ -9,6 +10,7 @@ export class ThemesService {
/** @hidden */
private constructor (
private config: ConfigService,
private hostApp: HostAppService,
@Inject(Theme) private themes: Theme[],
) {
this.applyCurrentTheme()
@@ -33,6 +35,12 @@ export class ThemesService {
}
this.styleElement.textContent = theme.css
document.querySelector('style#custom-css')!.innerHTML = this.config.store.appearance.css
if (this.hostApp.platform === Platform.macOS) {
this.hostApp.setTrafficLightInset(
theme.macOSWindowButtonsInsetX ?? 14,
theme.macOSWindowButtonsInsetY ?? 22,
)
}
}
private applyCurrentTheme (): void {

View File

@@ -1,24 +1,18 @@
import { NativeImage, SegmentedControlSegment, TouchBarSegmentedControl } from 'electron'
import { Injectable, Inject, NgZone } from '@angular/core'
import { SegmentedControlSegment, TouchBarSegmentedControl } from 'electron'
import { Injectable, NgZone } from '@angular/core'
import { AppService } from './app.service'
import { ConfigService } from './config.service'
import { ElectronService } from './electron.service'
import { HostAppService, Platform } from './hostApp.service'
import { ToolbarButton, ToolbarButtonProvider } from '../api'
/** @hidden */
@Injectable({ providedIn: 'root' })
export class TouchbarService {
private tabsSegmentedControl: TouchBarSegmentedControl
private buttonsSegmentedControl: TouchBarSegmentedControl
private tabSegments: SegmentedControlSegment[] = []
private nsImageCache: Record<string, NativeImage> = {}
private constructor (
private app: AppService,
private hostApp: HostAppService,
@Inject(ToolbarButtonProvider) private toolbarButtonProviders: ToolbarButtonProvider[],
private config: ConfigService,
private electron: ElectronService,
private zone: NgZone,
) {
@@ -63,16 +57,6 @@ export class TouchbarService {
return
}
let buttons: ToolbarButton[] = []
this.config.enabledServices(this.toolbarButtonProviders).forEach(provider => {
buttons = buttons.concat(provider.provide())
})
buttons = buttons.filter(x => !!x.touchBarNSImage)
buttons.sort((a, b) => (a.weight ?? 0) - (b.weight ?? 0))
this.tabSegments = this.app.tabs.map(tab => ({
label: this.shortenTitle(tab.title),
}))
this.tabsSegmentedControl = new this.electron.TouchBar.TouchBarSegmentedControl({
segments: this.tabSegments,
selectedIndex: this.app.activeTab ? this.app.tabs.indexOf(this.app.activeTab) : undefined,
@@ -81,43 +65,14 @@ export class TouchbarService {
}),
})
this.buttonsSegmentedControl = new this.electron.TouchBar.TouchBarSegmentedControl({
segments: buttons.map(button => this.getButton(button)),
mode: 'buttons',
change: (selectedIndex) => this.zone.run(() => {
if (buttons[selectedIndex].click) {
buttons[selectedIndex].click!()
}
}),
})
const touchBar = new this.electron.TouchBar({
items: [
this.tabsSegmentedControl,
new this.electron.TouchBar.TouchBarSpacer({ size: 'flexible' }),
new this.electron.TouchBar.TouchBarSpacer({ size: 'small' }),
this.buttonsSegmentedControl,
],
})
this.hostApp.setTouchBar(touchBar)
}
private getButton (button: ToolbarButton): SegmentedControlSegment {
return {
label: button.touchBarNSImage ? undefined : this.shortenTitle(button.touchBarTitle ?? button.title),
icon: button.touchBarNSImage ? this.getCachedNSImage(button.touchBarNSImage) : undefined,
// click: () => this.zone.run(() => button.click()),
}
}
private getCachedNSImage (name: string) {
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if (!this.nsImageCache[name]) {
this.nsImageCache[name] = this.electron.nativeImage.createFromNamedImage(name, [0, 0, 1])
}
return this.nsImageCache[name]
}
private shortenTitle (title: string): string {
if (title.length > 15) {
title = title.substring(0, 15) + '...'

View File

@@ -4,6 +4,7 @@ import { Injectable } from '@angular/core'
import { Logger, LogService } from './log.service'
import { ElectronService } from './electron.service'
import { ConfigService } from './config.service'
import { HostAppService } from './hostApp.service'
const UPDATES_URL = 'https://api.github.com/repos/eugeny/terminus/releases/latest'
@@ -17,8 +18,9 @@ export class UpdaterService {
private constructor (
log: LogService,
config: ConfigService,
private electron: ElectronService,
private config: ConfigService,
private hostApp: HostAppService,
) {
this.logger = log.create('updater')
@@ -58,10 +60,47 @@ export class UpdaterService {
}
async check (): Promise<boolean> {
if (!this.config.store.enableAutomaticUpdates) {
return false
}
if (!this.electronUpdaterAvailable) {
if (this.electronUpdaterAvailable) {
return new Promise((resolve, reject) => {
// eslint-disable-next-line @typescript-eslint/init-declarations, prefer-const
let cancel
const onNoUpdate = () => {
cancel()
resolve(false)
}
const onUpdate = () => {
cancel()
resolve(this.downloaded)
}
const onError = (err) => {
cancel()
reject(err)
}
cancel = () => {
this.electron.autoUpdater.off('error', onError)
this.electron.autoUpdater.off('update-not-available', onNoUpdate)
this.electron.autoUpdater.off('update-available', onUpdate)
}
this.electron.autoUpdater.on('error', onError)
this.electron.autoUpdater.on('update-not-available', onNoUpdate)
this.electron.autoUpdater.on('update-available', onUpdate)
try {
this.electron.autoUpdater.checkForUpdates()
} catch (e) {
this.electronUpdaterAvailable = false
this.logger.info('Electron updater unavailable, falling back', e)
}
})
this.electron.autoUpdater.on('update-available', () => {
this.logger.info('Update available')
})
this.electron.autoUpdater.once('update-not-available', () => {
this.logger.info('No updates')
})
} else {
this.logger.debug('Checking for updates through fallback method.')
const response = await axios.get(UPDATES_URL)
const data = response.data
@@ -81,8 +120,18 @@ export class UpdaterService {
if (!this.electronUpdaterAvailable) {
this.electron.shell.openExternal(this.updateURL)
} else {
await this.downloaded
this.electron.autoUpdater.quitAndInstall()
if ((await this.electron.showMessageBox(
this.hostApp.getWindow(),
{
type: 'warning',
message: 'Installing the update will close all tabs and restart Terminus.',
buttons: ['Cancel', 'Update'],
defaultId: 1,
}
)).response === 1) {
await this.downloaded
this.electron.autoUpdater.quitAndInstall()
}
}
}
}

View File

@@ -1,6 +1,10 @@
@import './theme.scss';
app-root {
.tabs-on-side .tab-bar {
height: 100% !important;
}
.tab-bar {
height: 27px !important;
@@ -12,6 +16,10 @@ app-root {
height: 14px;
}
}
.inset {
width: 70 !important;
}
}
terminaltab .content {

View File

@@ -108,7 +108,7 @@ window-controls {
button:hover {
background: rgba($black, 0.125);
svg {
fill: $black;
}
@@ -132,8 +132,6 @@ body {
app-root {
&> .content {
.tab-bar {
height: 40px;
.btn-tab-bar {
background: transparent;
line-height: 42px;
@@ -171,6 +169,10 @@ app-root {
background: $blue;
}
.activity-indicator {
background:rgba(0, 0, 0, 0.2);
}
&.active {
color: $black;
background: $content-bg;
@@ -192,10 +194,6 @@ app-root {
&.active {
border-bottom-color: transparent;
}
&.has-activity:not(.active) {
background: linear-gradient(to bottom, rgba(208, 0, 0, 0) 95%, #36beff 96%);
}
}
}
@@ -210,10 +208,6 @@ app-root {
&.active {
margin-top: -1px;
}
&.has-activity:not(.active) {
background: linear-gradient(to top, rgba(208, 0, 0, 0) 95%, #36beff 96%);
}
}
}
}
@@ -230,11 +224,10 @@ tab-body {
background: $content-bg;
}
settings-tab > ngb-tabset {
border-right: 1px solid $body-bg;
settings-tab > .content {
& > .nav {
background: rgba(0, 0, 0, 0.25);
border-right: 1px solid $body-bg;
& > .nav-item > .nav-link {
border: none;
@@ -317,10 +310,6 @@ hotkey-input-modal {
}
}
ngb-tabset .tab-content {
padding-top: 20px;
}
[ngbradiogroup] > label.active {
background: $blue;
}

View File

@@ -66,7 +66,9 @@ app-root {
border: none;
transition: 0.25s all;
&:hover { background: $button-hover-bg !important; }
right: 5px;
&:hover { background: $button-active-bg !important; }
&:active { background: $button-active-bg !important; }
}
@@ -74,6 +76,10 @@ app-root {
background: $green;
}
.activity-indicator {
background:rgba(255, 255, 255, 0.2);
}
&.active {
color: white;
background: $content-bg;
@@ -95,10 +101,6 @@ app-root {
&.active {
border-bottom-color: transparent;
}
&.has-activity:not(.active) {
background: linear-gradient(to bottom, rgba(208, 0, 0, 0) 95%, #1aa99c 100%);
}
}
}
@@ -113,10 +115,6 @@ app-root {
&.active {
margin-top: -1px;
}
&.has-activity:not(.active) {
background: linear-gradient(to top, rgba(208, 0, 0, 0) 95%, #1aa99c 100%);
}
}
}
}
@@ -133,30 +131,6 @@ tab-body {
background: $content-bg;
}
settings-tab > ngb-tabset {
border-right: 1px solid $body-bg;
& > .nav {
background: rgba(0, 0, 0, 0.25);
flex-shrink: 0;
& > .nav-item > .nav-link {
border: none;
padding: 10px 50px 10px 20px;
font-size: 14px;
border-radius: 0;
&:not(.active) {
color: $body-color;
&:hover {
color: $white;
}
}
}
}
}
multi-hotkey-input {
.item {
background: $body-bg2;
@@ -219,10 +193,6 @@ hotkey-input-modal {
margin-bottom: 2px;
}
ngb-tabset .tab-content {
padding-top: 20px;
}
[ngbradiogroup] > label.active {
background: $blue;
}
@@ -269,10 +239,6 @@ ngb-tabset .tab-content {
border: none;
border-top: 1px solid rgba(255, 255, 255, .1);
&:not(.combi) {
padding: $list-group-item-padding-y $list-group-item-padding-x;
}
&:first-child {
border-top: none;
}
@@ -319,7 +285,7 @@ checkbox i.on {
}
search-panel {
background: rgba(39, 49, 60, 0.65) !important;
background: rgba(39, 49, 60, 0.95) !important;
}

View File

@@ -15,6 +15,8 @@ export class StandardCompactTheme extends Theme {
name = 'Compact'
css = require('./theme.compact.scss')
terminalBackground = '#222a33'
macOSWindowButtonsInsetX = 8
macOSWindowButtonsInsetY = 12
}
/** @hidden */

View File

@@ -46,7 +46,6 @@ $body-color: #ccc;
$body-bg: #131d27;
$body-bg2: #20333e;
$font-family-sans-serif: "Source Sans Pro";
$font-family-monospace: "Source Code Pro";
$font-size-base: 14rem / 16;
@@ -55,6 +54,12 @@ $font-size-sm: .85rem;
$line-height-base: 1.6;
$border-radius: .4rem;
$border-radius-lg: .6rem;
$border-radius-sm: .2rem;
// -----
$headings-color: #ced9e2;
$headings-font-weight: lighter;

View File

@@ -1,60 +1,5 @@
const path = require('path')
module.exports = {
target: 'node',
entry: 'src/index.ts',
context: __dirname,
devtool: 'cheap-module-source-map',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'index.js',
pathinfo: true,
libraryTarget: 'umd',
devtoolModuleFilenameTemplate: 'webpack-terminus-core:///[resource-path]',
},
mode: process.env.TERMINUS_DEV ? 'development' : 'production',
optimization:{
minimize: false,
},
resolve: {
modules: ['.', 'src', 'node_modules', '../app/node_modules'].map(x => path.join(__dirname, x)),
extensions: ['.ts', '.js'],
},
module: {
rules: [
{
test: /\.ts$/,
use: {
loader: 'awesome-typescript-loader',
options: {
configFileName: path.resolve(__dirname, 'tsconfig.json'),
typeRoots: [
path.resolve(__dirname, 'node_modules/@types'),
path.resolve(__dirname, '../node_modules/@types'),
],
paths: {
"terminus-*": [path.resolve(__dirname, '../terminus-*')],
"*": [path.resolve(__dirname, '../app/node_modules/*')],
},
},
},
},
{ test: /\.pug$/, use: ['apply-loader', 'pug-loader'] },
{ test: /\.scss$/, use: ['to-string-loader', 'css-loader', 'sass-loader'] },
{ test: /\.css$/, use: ['to-string-loader', 'css-loader'], include: /component\.css/ },
{ test: /\.css$/, use: ['style-loader', 'css-loader'], exclude: /component\.css/ },
{ test: /\.yaml$/, use: ['json-loader', 'yaml-loader'] },
{ test: /\.svg/, use: ['svg-inline-loader'] },
],
},
externals: [
'electron',
'fs',
'os',
'path',
'windows-native-registry',
/^rxjs/,
/^@angular/,
/^@ng-bootstrap/,
],
}
const config = require('../webpack.plugin.config')
module.exports = config({
name: 'core',
dirname: __dirname,
})

View File

@@ -11,15 +11,20 @@
enabled "2.0.x"
kuler "^2.0.0"
"@types/js-yaml@^3.9.0":
version "3.12.5"
resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.5.tgz#136d5e6a57a931e1cce6f9d8126aa98a9c92a6bb"
integrity sha512-JCcp6J0GV66Y4ZMDAQCXot4xprYB+Zfd3meK9+INSJeVZwJmHAW30BBEEkPzXswMXuiyReUGOP3GxrADc9wPww==
"@electron/remote@1.0.4":
version "1.0.4"
resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-1.0.4.tgz#f1c8cf3560bab762b462bfae9991919cced8bc33"
integrity sha512-kguDJRhL3ZynHrkbX8Tr7xoAzGsNgh4eqXkycXb6cgXbOgehGqkBVe+MnjSVMXz3QJykerGKPy28gqcM7AFGYw==
"@types/semver@^7.3.1":
version "7.3.4"
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.4.tgz#43d7168fec6fa0988bb1a513a697b29296721afb"
integrity sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ==
"@types/js-yaml@^4.0.0":
version "4.0.1"
resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.1.tgz#5544730b65a480b18ace6b6ce914e519cec2d43b"
integrity sha512-xdOvNmXmrZqqPy3kuCQ+fz6wA0xU5pji9cd1nDrflWaAWtYLLGk5ykW0H6yg5TVyehHP1pfmuuSaZkhP+kspVA==
"@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==
"@types/shell-escape@^0.2.0":
version "0.2.0"
@@ -40,43 +45,45 @@ agent-base@^4.3.0:
dependencies:
es6-promisify "^5.0.0"
argparse@^1.0.7:
version "1.0.10"
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
dependencies:
sprintf-js "~1.0.2"
argparse@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
async@^3.1.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720"
integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==
at-least-node@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
axios@^0.19.0:
version "0.19.2"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27"
integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==
axios@^0.21.1:
version "0.21.1"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8"
integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==
dependencies:
follow-redirects "1.5.10"
follow-redirects "^1.10.0"
bootstrap@^4.1.3:
version "4.5.3"
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.5.3.tgz#c6a72b355aaf323920be800246a6e4ef30997fe6"
integrity sha512-o9ppKQioXGqhw8Z7mah6KdTYpNQY//tipnkxppWhPbiSWdD+1raYsnhwEZjkTHYbGee4cVQ0Rx65EhOY/HNLcQ==
builder-util-runtime@8.7.2:
version "8.7.2"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.2.tgz#d93afc71428a12789b437e13850e1fa7da956d72"
integrity sha512-xBqv+8bg6cfnzAQK1k3OGpfaHg+QkPgIgpEkXNhouZ0WiUkyZCftuRc2LYzQrLucFywpa14Xbc6+hTbpq83yRA==
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.1.1"
debug "^4.3.2"
sax "^1.2.4"
clone-deep@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
dependencies:
is-plain-object "^2.0.4"
kind-of "^6.0.2"
shallow-clone "^3.0.0"
color-convert@^1.9.1:
version "1.9.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
@@ -124,22 +131,15 @@ colorspace@1.1.x:
text-hex "1.0.x"
core-js@^3.1.2:
version "3.8.2"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.2.tgz#0a1fd6709246da9ca8eff5bb0cbd15fba9ac7044"
integrity sha512-FfApuSRgrR6G5s58casCBd9M2k+4ikuu4wbW6pJyYU7bd9zvFc9qf7vr5xmrZOhT9nn+8uwlH1oRR9jTnFoA3A==
version "3.12.1"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.12.1.tgz#6b5af4ff55616c08a44d386f1f510917ff204112"
integrity sha512-Ne9DKPHTObRuB09Dru5AjwKjY4cJHVGu+y5f7coGn1E9Grkc3p2iBwE9AI/nJzsE29mQF7oq+mhYYRqOMFN1Bw==
core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
debug@=3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
dependencies:
ms "2.0.0"
debug@^3.1.0:
version "3.2.6"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
@@ -147,10 +147,10 @@ debug@^3.1.0:
dependencies:
ms "^2.1.1"
debug@^4.1.1:
version "4.2.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"
integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==
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"
@@ -160,17 +160,18 @@ deepmerge@^4.1.1:
integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
electron-updater@^4.0.6:
version "4.3.5"
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-4.3.5.tgz#4fb36f593a031c87ea07ee141c9f064d5deffb15"
integrity sha512-5jjN7ebvfj1cLI0VZMdCnJk6aC4bP+dy7ryBf21vArR0JzpRVk0OZHA2QBD+H5rm6ZSeDYHOY6+8PrMEqJ4wlQ==
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.1"
builder-util-runtime "8.7.2"
fs-extra "^9.0.1"
js-yaml "^3.14.0"
"@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.2"
semver "^7.3.5"
enabled@2.0.x:
version "2.0.0"
@@ -189,11 +190,6 @@ es6-promisify@^5.0.0:
dependencies:
es6-promise "^4.0.3"
esprima@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
fast-safe-stringify@^2.0.4:
version "2.0.7"
resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743"
@@ -209,22 +205,19 @@ fn.name@1.x.x:
resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc"
integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==
follow-redirects@1.5.10:
version "1.5.10"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
dependencies:
debug "=3.1.0"
follow-redirects@^1.10.0:
version "1.13.1"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.1.tgz#5f69b813376cee4fd0474a3aba835df04ab763b7"
integrity sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==
fs-extra@^9.0.1:
version "9.0.1"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc"
integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==
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:
at-least-node "^1.0.0"
graceful-fs "^4.2.0"
jsonfile "^6.0.1"
universalify "^1.0.0"
universalify "^2.0.0"
graceful-fs@^4.1.6, graceful-fs@^4.2.0:
version "4.2.4"
@@ -249,6 +242,13 @@ is-arrayish@^0.3.1:
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
is-plain-object@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
dependencies:
isobject "^3.0.1"
is-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
@@ -259,13 +259,17 @@ isarray@~1.0.0:
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
js-yaml@^3.14.0, js-yaml@^3.9.0:
version "3.14.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482"
integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==
isobject@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
js-yaml@^4.0.0, js-yaml@^4.1.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 "^1.0.7"
esprima "^4.0.0"
argparse "^2.0.1"
jsonfile@^6.0.1:
version "6.1.0"
@@ -276,6 +280,11 @@ jsonfile@^6.0.1:
optionalDependencies:
graceful-fs "^4.1.6"
kind-of@^6.0.2:
version "6.0.3"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
kuler@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3"
@@ -286,6 +295,11 @@ lazy-val@^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"
@@ -302,6 +316,13 @@ logform@^2.2.0:
ms "^2.1.1"
triple-beam "^1.3.0"
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.10.2:
version "0.10.3"
resolved "https://registry.yarnpkg.com/mixpanel/-/mixpanel-0.10.3.tgz#2dff3bc0e17b57d6365547d315cbbf3ecfdb8a00"
@@ -309,11 +330,6 @@ mixpanel@^0.10.2:
dependencies:
https-proxy-agent "3.0.0"
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
ms@2.1.2, ms@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
@@ -324,13 +340,14 @@ ng2-dnd@^5.0.2:
resolved "https://registry.yarnpkg.com/ng2-dnd/-/ng2-dnd-5.0.2.tgz#862278ac7dedfa14f5783bbf34014d5d73dfefb4"
integrity sha512-5mWWBePwvEPsNd/HkdbD543Q9mPyJofL6zkNydl8/Ah3qrrvZT2DaEPbknY08OgkXpI2qUGksc01OzzVlRQ9dQ==
ngx-perfect-scrollbar@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/ngx-perfect-scrollbar/-/ngx-perfect-scrollbar-8.0.0.tgz#19c1bbf9b1a36d89b00a68f7834e39427d29182f"
integrity sha512-IXoFbULQnxyJj0gdCcKCLE/6OW9HCP9KARzMCKS1kNxTuzG4DghjM2AaCBRM5/sFwdbn6rqOKMCINtHA8W8YCA==
ngx-perfect-scrollbar@^10.1.0:
version "10.1.1"
resolved "https://registry.yarnpkg.com/ngx-perfect-scrollbar/-/ngx-perfect-scrollbar-10.1.1.tgz#f89832b9109e89bb59d516184638accd028e9735"
integrity sha512-f9IaDJGlBzSxnJ3Ki76n2JdzfQngUFyCf0E+CuVLaR5jL0IJDcTu7vOs8wexXunRMTd8xvIv0+sdIxf8hXAGWg==
dependencies:
perfect-scrollbar "^1.4.0"
perfect-scrollbar "1.5.0"
resize-observer-polyfill "^1.5.0"
tslib "^2.0.0"
one-time@^1.0.0:
version "1.0.0"
@@ -339,7 +356,7 @@ one-time@^1.0.0:
dependencies:
fn.name "1.x.x"
perfect-scrollbar@^1.4.0:
perfect-scrollbar@1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/perfect-scrollbar/-/perfect-scrollbar-1.5.0.tgz#821d224ed8ff61990c23f26db63048cdc75b6b83"
integrity sha512-NrNHJn5mUGupSiheBTy6x+6SXCFbLlm8fVZh9moIzw/LgqElN5q4ncR4pbCBCYuCJ8Kcl9mYM0NgDxvW+b4LxA==
@@ -349,7 +366,16 @@ process-nextick-args@~2.0.0:
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
readable-stream@2.3.7, readable-stream@^2.3.7:
readable-stream@3.6.0, readable-stream@^3.4.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
dependencies:
inherits "^2.0.3"
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
readable-stream@^2.3.7:
version "2.3.7"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
@@ -362,15 +388,6 @@ readable-stream@2.3.7, readable-stream@^2.3.7:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
readable-stream@^3.4.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
dependencies:
inherits "^2.0.3"
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
resize-observer-polyfill@^1.5.0:
version "1.5.1"
resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
@@ -391,10 +408,19 @@ sax@^1.2.4:
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
semver@^7.3.2:
version "7.3.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
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"
shallow-clone@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
dependencies:
kind-of "^6.0.2"
shell-escape@^0.2.0:
version "0.2.0"
@@ -408,11 +434,6 @@ simple-swizzle@^0.2.2:
dependencies:
is-arrayish "^0.3.1"
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
stack-trace@0.0.x:
version "0.0.10"
resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
@@ -442,10 +463,10 @@ triple-beam@^1.2.0, triple-beam@^1.3.0:
resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9"
integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==
universalify@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d"
integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==
tslib@^2.0.0:
version "2.1.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"
@@ -458,9 +479,9 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1:
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
uuid@^8.0.0:
version "8.3.1"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31"
integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==
version "8.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
winston-transport@^4.4.0:
version "4.4.0"
@@ -484,3 +505,8 @@ winston@*, winston@^3.3.3:
stack-trace "0.0.x"
triple-beam "^1.3.0"
winston-transport "^4.4.0"
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": "terminus-plugin-manager",
"version": "1.0.123-nightly.0",
"version": "1.0.135-nightly.0",
"description": "Terminus' plugin manager",
"keywords": [
"terminus-builtin-plugin"
@@ -18,7 +18,7 @@
"license": "MIT",
"devDependencies": {
"@types/semver": "^7.1.0",
"axios": "^0.19.0",
"axios": "^0.21.1",
"electron-promise-ipc": "^2.2.4",
"mz": "^2.6.0",
"semver": "^7.1.1"

View File

@@ -2,7 +2,6 @@
strong Error in {{erroredPlugin}}:
pre {{errorMessage}}
.d-flex
h3.mb-1 Installed
button.btn.btn-outline-secondary.btn-sm.ml-auto((click)='openPluginsFolder()')
@@ -11,11 +10,17 @@
.list-group.list-group-flush.mt-2
.list-group-item.d-flex.align-items-center(*ngFor='let plugin of pluginManager.installedPlugins')
toggle(
[ngModel]='isPluginEnabled(plugin)',
(ngModelChange)='togglePlugin(plugin)',
[disabled]='!canDisablePlugin(plugin)'
)
.mr-auto.d-flex.flex-column
div
strong {{plugin.name}}
small.text-muted.ml-1(*ngIf='!plugin.isBuiltin') {{plugin.version}} / {{plugin.author}}
small.text-warning.ml-1(*ngIf='config.store.pluginBlacklist.includes(plugin.name)') Disabled
small.text-warning.ml-1(*ngIf='!isPluginEnabled(plugin)') Disabled
a.text-muted.mb-0((click)='showPluginInfo(plugin)')
small {{plugin.description}}
@@ -28,18 +33,6 @@
i.fas.fa-fw.fa-circle-notch.fa-spin(*ngIf='busy.get(plugin.name) == BusyState.Installing')
span Upgrade ({{knownUpgrades[plugin.name].version}})
button.btn.btn-link.text-primary.ml-2(
*ngIf='config.store.pluginBlacklist.includes(plugin.name)',
(click)='enablePlugin(plugin)'
)
i.fas.fa-fw.fa-play
button.btn.btn-link.ml-2(
*ngIf='!config.store.pluginBlacklist.includes(plugin.name)',
(click)='disablePlugin(plugin)'
)
i.fas.fa-fw.fa-pause
button.btn.btn-link.text-danger.ml-2(
(click)='uninstallPlugin(plugin)',
*ngIf='!plugin.isBuiltin',

View File

@@ -9,6 +9,8 @@ import { PluginInfo, PluginManagerService } from '../services/pluginManager.serv
enum BusyState { Installing = 'Installing', Uninstalling = 'Uninstalling' }
const FORCE_ENABLE = ['terminus-core', 'terminus-settings']
/** @hidden */
@Component({
template: require('./pluginsSettingsTab.component.pug'),
@@ -102,6 +104,22 @@ export class PluginsSettingsTabComponent {
this.electron.shell.openExternal('https://www.npmjs.com/package/' + plugin.packageName)
}
isPluginEnabled (plugin: PluginInfo) {
return !this.config.store.pluginBlacklist.includes(plugin.name)
}
canDisablePlugin (plugin: PluginInfo) {
return !FORCE_ENABLE.includes(plugin.packageName)
}
togglePlugin (plugin: PluginInfo) {
if (this.isPluginEnabled(plugin)) {
this.disablePlugin(plugin)
} else {
this.enablePlugin(plugin)
}
}
enablePlugin (plugin: PluginInfo) {
this.config.store.pluginBlacklist = this.config.store.pluginBlacklist.filter(x => x !== plugin.name)
this.config.save()

View File

@@ -3,6 +3,7 @@ import { BrowserModule } from '@angular/platform-browser'
import { FormsModule } from '@angular/forms'
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
import TerminusCorePlugin from 'terminus-core'
import { SettingsTabProvider } from 'terminus-settings'
import { PluginsSettingsTabComponent } from './components/pluginsSettingsTab.component'
@@ -14,6 +15,7 @@ import { PluginsSettingsTabProvider } from './settings'
BrowserModule,
FormsModule,
NgbModule,
TerminusCorePlugin,
],
providers: [
{ provide: SettingsTabProvider, useClass: PluginsSettingsTabProvider, multi: true },

View File

@@ -57,6 +57,7 @@ export class PluginManagerService {
}))),
map(plugins => plugins.filter(x => x.packageName.startsWith(NAME_PREFIX))),
map(plugins => plugins.filter(x => !BLACKLIST.includes(x.packageName))),
map(plugins => plugins.sort((a, b) => a.name.localeCompare(b.name))),
)
}

View File

@@ -1,56 +1,5 @@
const path = require('path')
module.exports = {
target: 'node',
entry: 'src/index.ts',
context: __dirname,
devtool: 'cheap-module-source-map',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'index.js',
pathinfo: true,
libraryTarget: 'umd',
devtoolModuleFilenameTemplate: 'webpack-terminus-plugin-manager:///[resource-path]',
},
mode: process.env.TERMINUS_DEV ? 'development' : 'production',
optimization:{
minimize: false,
},
resolve: {
modules: ['.', 'src', 'node_modules', '../app/node_modules'].map(x => path.join(__dirname, x)),
extensions: ['.ts', '.js'],
},
module: {
rules: [
{
test: /\.ts$/,
use: {
loader: 'awesome-typescript-loader',
options: {
configFileName: path.resolve(__dirname, 'tsconfig.json'),
typeRoots: [
path.resolve(__dirname, 'node_modules/@types'),
path.resolve(__dirname, '../node_modules/@types'),
],
paths: {
"terminus-*": [path.resolve(__dirname, '../terminus-*')],
"*": [path.resolve(__dirname, '../app/node_modules/*')],
},
},
},
},
{ test: /\.pug$/, use: ['apply-loader', 'pug-loader'] },
{ test: /\.scss$/, use: ['to-string-loader', 'css-loader', 'sass-loader'] },
],
},
externals: [
'fs',
'net',
'path',
'electron-promise-ipc',
/^rxjs/,
/^@angular/,
/^@ng-bootstrap/,
/^terminus-/,
],
}
const config = require('../webpack.plugin.config')
module.exports = config({
name: 'plugin-manager',
dirname: __dirname,
})

View File

@@ -12,12 +12,12 @@ any-promise@^1.0.0:
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
axios@^0.19.0:
version "0.19.2"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27"
integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==
axios@^0.21.1:
version "0.21.1"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8"
integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==
dependencies:
follow-redirects "1.5.10"
follow-redirects "^1.10.0"
call-bind@^1.0.0:
version "1.0.0"
@@ -27,13 +27,6 @@ call-bind@^1.0.0:
function-bind "^1.1.1"
get-intrinsic "^1.0.0"
debug@=3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
dependencies:
ms "2.0.0"
define-properties@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
@@ -78,12 +71,10 @@ es-to-primitive@^1.2.1:
is-date-object "^1.0.1"
is-symbol "^1.0.2"
follow-redirects@1.5.10:
version "1.5.10"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
dependencies:
debug "=3.1.0"
follow-redirects@^1.10.0:
version "1.13.1"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.1.tgz#5f69b813376cee4fd0474a3aba835df04ab763b7"
integrity sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==
function-bind@^1.1.1:
version "1.1.1"
@@ -145,10 +136,12 @@ is-symbol@^1.0.2:
dependencies:
has-symbols "^1.0.1"
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
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"
mz@^2.6.0:
version "2.7.0"
@@ -195,9 +188,11 @@ object.entries@^1.1.3:
has "^1.0.3"
semver@^7.1.1:
version "7.3.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
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"
serialize-error@^5.0.0:
version "5.0.0"
@@ -245,3 +240,8 @@ uuid@^3.0.1:
version "3.4.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
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": "terminus-serial",
"version": "1.0.123-nightly.0",
"version": "1.0.135-nightly.0",
"description": "Serial connection manager for Terminus",
"keywords": [
"terminus-builtin-plugin"
@@ -20,7 +20,10 @@
"@types/node": "14.14.14",
"@types/ssh2": "^0.5.35",
"ansi-colors": "^4.1.1",
"cli-spinner": "^0.2.10"
"binstring": "^0.2.1",
"buffer-replace": "^1.0.0",
"cli-spinner": "^0.2.10",
"hexer": "^1.5.0"
},
"peerDependencies": {
"@angular/animations": "^9.1.9",

View File

@@ -1,7 +1,15 @@
import hexdump from 'hexer'
import colors from 'ansi-colors'
import binstring from 'binstring'
import stripAnsi from 'strip-ansi'
import bufferReplace from 'buffer-replace'
import { BaseSession } from 'terminus-terminal'
import { SerialPort } from 'serialport'
import { Logger } from 'terminus-core'
import { Subject, Observable } from 'rxjs'
import { Subject, Observable, interval } from 'rxjs'
import { debounce } from 'rxjs/operators'
import { ReadLine, createInterface as createReadline, clearLine } from 'readline'
import { PassThrough, Readable, Writable } from 'stream'
export interface LoginScript {
expect: string
@@ -23,6 +31,10 @@ export interface SerialConnection {
xany: boolean
scripts?: LoginScript[]
color?: string
inputMode?: InputMode
inputNewlines?: NewlineMode
outputMode?: OutputMode
outputNewlines?: NewlineMode
}
export const BAUD_RATES = [
@@ -34,6 +46,10 @@ export interface SerialPortInfo {
description?: string
}
export type InputMode = null | 'readline' | 'readline-hex' // eslint-disable-line @typescript-eslint/no-type-alias
export type OutputMode = null | 'hex' // eslint-disable-line @typescript-eslint/no-type-alias
export type NewlineMode = null | 'cr' | 'lf' | 'crlf' // eslint-disable-line @typescript-eslint/no-type-alias
export class SerialSession extends BaseSession {
scripts?: LoginScript[]
serial: SerialPort
@@ -41,58 +57,38 @@ export class SerialSession extends BaseSession {
get serviceMessage$ (): Observable<string> { return this.serviceMessage }
private serviceMessage = new Subject<string>()
private inputReadline: ReadLine
private inputPromptVisible = true
private inputReadlineInStream: Readable & Writable
private inputReadlineOutStream: Readable & Writable
constructor (public connection: SerialConnection) {
super()
this.scripts = connection.scripts ?? []
this.inputReadlineInStream = new PassThrough()
this.inputReadlineOutStream = new PassThrough()
this.inputReadline = createReadline({
input: this.inputReadlineInStream,
output: this.inputReadlineOutStream,
terminal: true,
prompt: this.connection.inputMode === 'readline-hex' ? 'hex> ' : '> ',
} as any)
this.inputReadlineOutStream.on('data', data => {
this.emitOutput(Buffer.from(data))
})
this.inputReadline.on('line', line => {
this.onInput(new Buffer(line + '\n'))
this.resetInputPrompt()
})
this.output$.pipe(debounce(() => interval(500))).subscribe(() => this.onOutputSettled())
}
async start (): Promise<void> {
this.open = true
this.serial.on('data', data => {
const dataString = data.toString()
this.emitOutput(data)
if (this.scripts) {
let found = false
for (const script of this.scripts) {
let match = false
let cmd = ''
if (script.isRegex) {
const re = new RegExp(script.expect, 'g')
if (dataString.match(re)) {
cmd = dataString.replace(re, script.send)
match = true
found = true
}
} else {
if (dataString.includes(script.expect)) {
cmd = script.send
match = true
found = true
}
}
if (match) {
this.logger.info('Executing script: "' + cmd + '"')
this.serial.write(cmd + '\n')
this.scripts = this.scripts.filter(x => x !== script)
} else {
if (script.optional) {
this.logger.debug('Skip optional script: ' + script.expect)
found = true
this.scripts = this.scripts.filter(x => x !== script)
} else {
break
}
}
}
if (found) {
this.executeUnconditionalScripts()
}
}
this.serial.on('readable', () => {
this.onOutput(this.serial.read())
})
this.serial.on('end', () => {
@@ -106,23 +102,33 @@ export class SerialSession extends BaseSession {
}
write (data: Buffer): void {
if (this.serial) {
this.serial.write(data.toString())
if (this.connection.inputMode?.startsWith('readline')) {
this.inputReadlineInStream.write(data)
} else {
this.onInput(data)
}
}
async destroy (): Promise<void> {
this.serviceMessage.complete()
this.inputReadline.close()
await super.destroy()
}
// eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-empty-function
resize (_, __) { }
resize (_, __) {
this.inputReadlineOutStream.emit('resize')
}
kill (_?: string): void {
this.serial.close()
}
emitServiceMessage (msg: string): void {
this.serviceMessage.next(msg)
this.logger.info(stripAnsi(msg))
}
async getChildProcesses (): Promise<any[]> {
return []
}
@@ -139,6 +145,118 @@ export class SerialSession extends BaseSession {
return null
}
private replaceNewlines (data: Buffer, mode?: NewlineMode): Buffer {
if (!mode) {
return data
}
data = bufferReplace(data, '\r\n', '\n')
data = bufferReplace(data, '\r', '\n')
const replacement = {
strip: '',
cr: '\r',
lf: '\n',
crlf: '\r\n',
}[mode]
return bufferReplace(data, '\n', replacement)
}
private onInput (data: Buffer) {
if (this.connection.inputMode === 'readline-hex') {
const tokens = data.toString().split(/\s/g)
data = Buffer.concat(tokens.filter(t => !!t).map(t => {
if (t.startsWith('0x')) {
t = t.substring(2)
}
return binstring(t, { 'in': 'hex' })
}))
}
data = this.replaceNewlines(data, this.connection.inputNewlines)
if (this.serial) {
this.serial.write(data.toString())
}
}
private onOutputSettled () {
if (this.connection.inputMode?.startsWith('readline') && !this.inputPromptVisible) {
this.resetInputPrompt()
}
}
private resetInputPrompt () {
this.emitOutput(new Buffer('\r\n'))
this.inputReadline.prompt(true)
this.inputPromptVisible = true
}
private onOutput (data: Buffer) {
const dataString = data.toString()
if (this.connection.inputMode?.startsWith('readline')) {
if (this.inputPromptVisible) {
clearLine(this.inputReadlineOutStream, 0)
this.inputPromptVisible = false
}
}
data = this.replaceNewlines(data, this.connection.outputNewlines)
if (this.connection.outputMode === 'hex') {
this.emitOutput(Buffer.concat([
new Buffer('\r\n'),
Buffer.from(hexdump(data, {
group: 1,
gutter: 4,
divide: colors.gray(' '),
emptyHuman: colors.gray(''),
}).replace(/\n/g, '\r\n')),
new Buffer('\r\n\n'),
]))
} else {
this.emitOutput(data)
}
if (this.scripts) {
let found = false
for (const script of this.scripts) {
let match = false
let cmd = ''
if (script.isRegex) {
const re = new RegExp(script.expect, 'g')
if (re.test(dataString)) {
cmd = dataString.replace(re, script.send)
match = true
found = true
}
} else {
if (dataString.includes(script.expect)) {
cmd = script.send
match = true
found = true
}
}
if (match) {
this.logger.info('Executing script: "' + cmd + '"')
this.serial.write(cmd + '\n')
this.scripts = this.scripts.filter(x => x !== script)
} else {
if (script.optional) {
this.logger.debug('Skip optional script: ' + script.expect)
found = true
this.scripts = this.scripts.filter(x => x !== script)
} else {
break
}
}
}
if (found) {
this.executeUnconditionalScripts()
}
}
}
private executeUnconditionalScripts () {
if (this.scripts) {
for (const script of this.scripts) {

View File

@@ -1,8 +1,8 @@
.modal-body
ngb-tabset([activeId]='basic')
ngb-tab(id='basic')
ng-template(ngbTabTitle) General
ng-template(ngbTabContent)
ul.nav-tabs(ngbNav, #nav='ngbNav')
li(ngbNavItem)
a(ngbNavLink) General
ng-template(ngbNavContent)
.form-group
label Name
input.form-control(
@@ -11,25 +11,88 @@
[(ngModel)]='connection.name',
)
.form-group
label Path
input.form-control(
type='text',
[(ngModel)]='connection.port',
[ngbTypeahead]='portsAutocomplete',
[resultFormatter]='portsFormatter',
)
.row
.col-6
.form-group
label Path
input.form-control(
type='text',
[(ngModel)]='connection.port',
[ngbTypeahead]='portsAutocomplete',
[resultFormatter]='portsFormatter',
)
.form-group
label Baud Rate
select.form-control(
[(ngModel)]='connection.baudrate',
)
option([value]='x', *ngFor='let x of baudRates') {{x}}
.col-6
.form-group
label Baud Rate
select.form-control(
[(ngModel)]='connection.baudrate',
)
option([value]='x', *ngFor='let x of baudRates') {{x}}
ngb-tab(id='advanced')
ng-template(ngbTabTitle) Advanced
ng-template(ngbTabContent)
.row
.col-6
.form-line
.header
.title Input mode
.d-flex(ngbDropdown)
button.btn.btn-secondary.btn-tab-bar(
ngbDropdownToggle,
) {{getInputModeName(connection.inputMode)}}
div(ngbDropdownMenu)
a.d-flex.flex-column(
*ngFor='let mode of inputModes',
(click)='connection.inputMode = mode.key',
ngbDropdownItem
)
div {{mode.name}}
.text-muted {{mode.description}}
.col-6
.form-line
.header
.title Input newlines
select.form-control(
[(ngModel)]='connection.inputNewlines',
)
option([ngValue]='mode.key', *ngFor='let mode of newlineModes') {{mode.name}}
.row
.col-6
.form-line
.header
.title Output mode
.d-flex(ngbDropdown)
button.btn.btn-secondary.btn-tab-bar(
ngbDropdownToggle,
) {{getOutputModeName(connection.outputMode)}}
div(ngbDropdownMenu)
a.d-flex.flex-column(
*ngFor='let mode of outputModes',
(click)='connection.outputMode = mode.key',
ngbDropdownItem
)
div {{mode.name}}
.text-muted {{mode.description}}
.col-6
.form-line
.header
.title Output newlines
select.form-control(
[(ngModel)]='connection.outputNewlines',
)
option([ngValue]='mode.key', *ngFor='let mode of newlineModes') {{mode.name}}
li(ngbNavItem)
a(ngbNavLink) Advanced
ng-template(ngbNavContent)
.form-line
.header
.title Tab color
@@ -87,9 +150,9 @@
.title Xany
toggle([(ngModel)]='connection.xany')
ngb-tab(id='scripts')
ng-template(ngbTabTitle) Login scripts
ng-template(ngbTabContent)
li(ngbNavItem)
a(ngbNavLink) Login scripts
ng-template(ngbNavContent)
table(*ngIf='connection.scripts.length > 0')
tr
th String to expect
@@ -129,6 +192,8 @@
i.fas.fa-plus
span New item
div([ngbNavOutlet]='nav')
.modal-footer
button.btn.btn-outline-primary((click)='save()') Save
button.btn.btn-outline-danger((click)='cancel()') Cancel

View File

@@ -15,6 +15,22 @@ export class EditConnectionModalComponent {
connection: SerialConnection
foundPorts: SerialPortInfo[]
baudRates = BAUD_RATES
inputModes = [
{ key: null, name: 'Normal', description: 'Input is sent as you type' },
{ key: 'readline', name: 'Line by line', description: 'Line editor, input is sent after you press Enter' },
{ key: 'readline-hex', name: 'Hexadecimal', description: 'Send bytes by typing in hex values' },
]
outputModes = [
{ key: null, name: 'Normal', description: 'Output is shown as it is received' },
{ key: 'hex', name: 'Hexadecimal', description: 'Output is shown as a hexdump' },
]
newlineModes = [
{ key: null, name: 'Keep' },
{ key: 'strip', name: 'Strip' },
{ key: 'cr', name: 'Force CR' },
{ key: 'lf', name: 'Force LF' },
{ key: 'crlf', name: 'Force CRLF' },
]
constructor (
private modalInstance: NgbActiveModal,
@@ -24,6 +40,14 @@ export class EditConnectionModalComponent {
) {
}
getInputModeName (key) {
return this.inputModes.find(x => x.key === key)?.name
}
getOutputModeName (key) {
return this.outputModes.find(x => x.key === key)?.name
}
portsAutocomplete = text$ => text$.pipe(map(() => {
return this.foundPorts.map(x => x.name)
}))

View File

@@ -34,6 +34,10 @@ export class SerialSettingsTabComponent {
xany: false,
xoff: false,
xon: false,
inputMode: null,
outputMode: null,
inputNewlines: null,
outputNewlines: null,
}
const modal = this.ngbModal.open(EditConnectionModalComponent)

View File

@@ -1,16 +1,16 @@
.tab-toolbar
.tab-toolbar([class.show]='!session || !session.open')
.btn.btn-outline-secondary.reveal-button
i.fas.fa-ellipsis-h
.toolbar(*ngIf='session', [class.show]='!session.open')
i.fas.fa-circle.text-success.mr-2(*ngIf='session.open')
i.fas.fa-circle.text-danger.mr-2(*ngIf='!session.open')
strong(*ngIf='session') {{session.connection.port}} ({{session.connection.baudrate}})
.toolbar
i.fas.fa-circle.text-success.mr-2(*ngIf='session && session.open')
i.fas.fa-circle.text-danger.mr-2(*ngIf='!session || !session.open')
strong {{connection.port}} ({{connection.baudrate}})
.mr-auto
button.btn.btn-secondary.mr-3((click)='changeBaudRate()', *ngIf='session.open')
button.btn.btn-secondary.mr-3((click)='changeBaudRate()', *ngIf='session && session.open')
span Change baud rate
button.btn.btn-info((click)='reconnect()', *ngIf='!session.open')
button.btn.btn-info((click)='reconnect()', *ngIf='!session || !session.open')
i.fas.fa-reload
span Reconnect

View File

@@ -6,32 +6,32 @@ import { first } from 'rxjs/operators'
import { BaseTerminalTabComponent } from 'terminus-terminal'
import { SerialService } from '../services/serial.service'
import { SerialConnection, SerialSession, BAUD_RATES } from '../api'
import { Subscription } from 'rxjs'
/** @hidden */
@Component({
selector: 'serial-tab',
template: BaseTerminalTabComponent.template + (require('./serialTab.component.pug') as string),
template: `${BaseTerminalTabComponent.template} ${require('./serialTab.component.pug')}`,
styles: [require('./serialTab.component.scss'), ...BaseTerminalTabComponent.styles],
animations: BaseTerminalTabComponent.animations,
})
export class SerialTabComponent extends BaseTerminalTabComponent {
connection?: SerialConnection
session?: SerialSession
session: SerialSession|null = null
serialPort: any
private homeEndSubscription: Subscription
private serialService: SerialService
// eslint-disable-next-line @typescript-eslint/no-useless-constructor
constructor (
injector: Injector,
) {
super(injector)
this.serialService = injector.get(SerialService)
}
ngOnInit () {
this.logger = this.log.create('terminalTab')
this.homeEndSubscription = this.hotkeys.matchedHotkey.subscribe(hotkey => {
this.subscribeUntilDestroyed(this.hotkeys.matchedHotkey, hotkey => {
if (!this.hasFocus) {
return
}
@@ -42,6 +42,9 @@ export class SerialTabComponent extends BaseTerminalTabComponent {
case 'end':
this.sendInput('\x1b[F' )
break
case 'restart-serial-session':
this.reconnect()
break
}
})
@@ -62,12 +65,8 @@ export class SerialTabComponent extends BaseTerminalTabComponent {
return
}
this.session = this.injector.get(SerialService).createSession(this.connection)
this.session.serviceMessage$.subscribe(msg => {
this.write(`\r\n${colors.black.bgWhite(' serial ')} ${msg}\r\n`)
this.session?.resize(this.size.columns, this.size.rows)
})
this.attachSessionHandlers()
const session = this.serialService.createSession(this.connection)
this.setSession(session)
this.write(`Connecting to `)
const spinner = new Spinner({
@@ -80,15 +79,32 @@ export class SerialTabComponent extends BaseTerminalTabComponent {
spinner.start()
try {
this.serialPort = await this.injector.get(SerialService).connectSession(this.session)
this.serialPort = await this.serialService.connectSession(this.session!)
spinner.stop(true)
session.emitServiceMessage('Port opened')
} catch (e) {
spinner.stop(true)
this.write(colors.black.bgRed(' X ') + ' ' + colors.red(e.message) + '\r\n')
return
}
await this.session.start()
this.session.resize(this.size.columns, this.size.rows)
await this.session!.start()
this.session!.resize(this.size.columns, this.size.rows)
}
protected attachSessionHandlers () {
this.attachSessionHandler(this.session!.serviceMessage$, msg => {
this.write(`\r\n${colors.black.bgWhite(' Serial ')} ${msg}\r\n`)
this.session?.resize(this.size.columns, this.size.rows)
})
this.attachSessionHandler(this.session!.destroyed$, () => {
this.write('Press any key to reconnect\r\n')
this.input$.pipe(first()).subscribe(() => {
if (!this.session?.open) {
this.reconnect()
}
})
})
super.attachSessionHandlers()
}
async getRecoveryToken (): Promise<any> {
@@ -99,8 +115,10 @@ export class SerialTabComponent extends BaseTerminalTabComponent {
}
}
reconnect () {
this.initializeSession()
async reconnect (): Promise<void> {
this.session?.destroy()
await this.initializeSession()
this.session?.releaseInitialDataBuffer()
}
async changeBaudRate () {
@@ -110,9 +128,4 @@ export class SerialTabComponent extends BaseTerminalTabComponent {
this.serialPort.update({ baudRate: rate })
this.connection!.baudrate = rate
}
ngOnDestroy () {
this.homeEndSubscription.unsubscribe()
super.ngOnDestroy()
}
}

View File

@@ -12,6 +12,7 @@ export class SerialConfigProvider extends ConfigProvider {
serial: [
'Alt-K',
],
'restart-serial-session': [],
},
}

Some files were not shown because too many files have changed in this diff Show More