mirror of
https://github.com/Eugeny/tabby.git
synced 2025-08-02 07:26:58 +00:00
Compare commits
725 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
f6d08af986 | ||
![]() |
7ddb67f28e | ||
![]() |
ff2c2031b5 | ||
![]() |
1ab528b05c | ||
![]() |
f4f52321f5 | ||
![]() |
286b6cfdde | ||
![]() |
b97149aa73 | ||
![]() |
2094c44992 | ||
![]() |
a8409a0aec | ||
![]() |
5c2ac72bac | ||
![]() |
be09e7829f | ||
![]() |
a9320a33c9 | ||
![]() |
0e881e47e2 | ||
![]() |
3b7f4be643 | ||
![]() |
8f361f841c | ||
![]() |
0e0d59f2c5 | ||
![]() |
ca9b8307c2 | ||
![]() |
d837a3d7fd | ||
![]() |
555e1e733d | ||
![]() |
2e546fb72e | ||
![]() |
a2d4b76070 | ||
![]() |
34edee2f37 | ||
![]() |
f17b7fb8ce | ||
![]() |
cbe5ea7fdd | ||
![]() |
c00405afff | ||
![]() |
555db7bef9 | ||
![]() |
94e9e7d439 | ||
![]() |
c4850f2172 | ||
![]() |
2d33a0030d | ||
![]() |
1f576edf85 | ||
![]() |
6d139434d7 | ||
![]() |
e9ba07c7a3 | ||
![]() |
4f083098c3 | ||
![]() |
03369da32c | ||
![]() |
edb2cf2b7b | ||
![]() |
91a1ae1cbe | ||
![]() |
4a9f17ace9 | ||
![]() |
d5babde1fa | ||
![]() |
902c1fceb1 | ||
![]() |
1d340e4666 | ||
![]() |
b922fe7776 | ||
![]() |
de3829a94c | ||
![]() |
964e0ad2bc | ||
![]() |
742affb88b | ||
![]() |
e9999ee883 | ||
![]() |
1c8288bfe1 | ||
![]() |
37044fbb01 | ||
![]() |
5507171fee | ||
![]() |
472b421484 | ||
![]() |
b076541962 | ||
![]() |
8201e0b9ef | ||
![]() |
6293a43571 | ||
![]() |
b61bc943ec | ||
![]() |
be668403c5 | ||
![]() |
90a173d8b7 | ||
![]() |
bbcc84e9b0 | ||
![]() |
b0a8832499 | ||
![]() |
8cd1c4a9af | ||
![]() |
1ada4338b7 | ||
![]() |
4a701fa7b4 | ||
![]() |
b718448904 | ||
![]() |
7770cf2573 | ||
![]() |
49755f855f | ||
![]() |
daa1b4572e | ||
![]() |
d48e22a9d2 | ||
![]() |
fc82010729 | ||
![]() |
4a8f3fbd7f | ||
![]() |
4c435672a5 | ||
![]() |
0311754ce0 | ||
![]() |
ff5da104c1 | ||
![]() |
b01b902829 | ||
![]() |
595707eed4 | ||
![]() |
441ee4fb6e | ||
![]() |
51827d6750 | ||
![]() |
9807bbe32a | ||
![]() |
181b55890d | ||
![]() |
c8c5f1a0fd | ||
![]() |
222c6a9f3c | ||
![]() |
0400c8fe63 | ||
![]() |
099d9b06d6 | ||
![]() |
ad26b39cca | ||
![]() |
f465c359ef | ||
![]() |
67aead225c | ||
![]() |
280c421ae4 | ||
![]() |
b6fc43faa2 | ||
![]() |
b5a985b8a3 | ||
![]() |
2f7dcf3339 | ||
![]() |
7e38f11c06 | ||
![]() |
86cd560089 | ||
![]() |
c0c4580461 | ||
![]() |
5cb65dfd84 | ||
![]() |
2b5f623b50 | ||
![]() |
a8d5cf469e | ||
![]() |
d261b89803 | ||
![]() |
21cb452d62 | ||
![]() |
b07a2113d2 | ||
![]() |
f545b3eacf | ||
![]() |
87fe8deaa8 | ||
![]() |
1068450ddd | ||
![]() |
b355fff0f8 | ||
![]() |
f80b0eb65b | ||
![]() |
285691326f | ||
![]() |
3ecffbfda6 | ||
![]() |
3d89a15d18 | ||
![]() |
491d4c3b3a | ||
![]() |
995f329835 | ||
![]() |
28f2ea595d | ||
![]() |
42b7c573ea | ||
![]() |
c40294628a | ||
![]() |
c11a10144e | ||
![]() |
7b6cdb274c | ||
![]() |
a3c74ecdba | ||
![]() |
94d91f8182 | ||
![]() |
e4f32c9ade | ||
![]() |
65fd7b05b1 | ||
![]() |
2150fab55b | ||
![]() |
644cb76fd3 | ||
![]() |
4106d97f6b | ||
![]() |
98103fd139 | ||
![]() |
9453e8ba7b | ||
![]() |
2f78575cd7 | ||
![]() |
500acee064 | ||
![]() |
42eb5f6b78 | ||
![]() |
ef19b92e85 | ||
![]() |
f263f954d4 | ||
![]() |
2ce0f03282 | ||
![]() |
150999d3a3 | ||
![]() |
8cc76555d2 | ||
![]() |
f0f8f06890 | ||
![]() |
176a55c91d | ||
![]() |
fc6dfc50dd | ||
![]() |
34d020f66a | ||
![]() |
fa0ef69c46 | ||
![]() |
e5c1e421f7 | ||
![]() |
f3994f1bd9 | ||
![]() |
6956ef9e0f | ||
![]() |
a080129882 | ||
![]() |
ef9bfe6120 | ||
![]() |
37d69e858f | ||
![]() |
ee594f5bcd | ||
![]() |
adf022de2c | ||
![]() |
c5a9b890c4 | ||
![]() |
2d1a96a12b | ||
![]() |
5289981485 | ||
![]() |
a89047b205 | ||
![]() |
a7b4496d22 | ||
![]() |
09cd9d0e18 | ||
![]() |
fb2a4d268d | ||
![]() |
9b61615701 | ||
![]() |
077d2421e1 | ||
![]() |
202ba18a8c | ||
![]() |
63f33f8f4b | ||
![]() |
3bd89a0194 | ||
![]() |
604bc28c9a | ||
![]() |
f81f5d122a | ||
![]() |
3633be750e | ||
![]() |
404fd72ea9 | ||
![]() |
402b76bcc9 | ||
![]() |
b6c97ffa49 | ||
![]() |
20aa1d814f | ||
![]() |
786daaac32 | ||
![]() |
0360ad2dd0 | ||
![]() |
0a451c5876 | ||
![]() |
5a9625424c | ||
![]() |
62c1f6463b | ||
![]() |
9fe82f2c0a | ||
![]() |
09838197a2 | ||
![]() |
27114797a2 | ||
![]() |
4dc77d11cf | ||
![]() |
245698b67d | ||
![]() |
017fabaf6f | ||
![]() |
6c11189b3e | ||
![]() |
dd70f5f5d8 | ||
![]() |
47277ac5aa | ||
![]() |
b69cbbcdd1 | ||
![]() |
efba980a1d | ||
![]() |
f31da67508 | ||
![]() |
2ba76cc0b9 | ||
![]() |
62d14ac0cb | ||
![]() |
c1b4ffd248 | ||
![]() |
87cacdb568 | ||
![]() |
2a11bc4fcc | ||
![]() |
f716baa7d4 | ||
![]() |
5b60daf366 | ||
![]() |
11f9f4e824 | ||
![]() |
0daf48f699 | ||
![]() |
8fb0ea4d75 | ||
![]() |
d9948cf6e2 | ||
![]() |
54b618cffc | ||
![]() |
690dde628e | ||
![]() |
3dfbcf9d41 | ||
![]() |
d91ba71ec0 | ||
![]() |
99698913a8 | ||
![]() |
0dbb16d859 | ||
![]() |
0f8cff2d5b | ||
![]() |
471f9effcf | ||
![]() |
04faf1a04a | ||
![]() |
656f5c2561 | ||
![]() |
99bc2c1c65 | ||
![]() |
87837bf66b | ||
![]() |
c8735243f3 | ||
![]() |
b197a16e5c | ||
![]() |
1a361e67b3 | ||
![]() |
fc471b2c16 | ||
![]() |
ae17faa7e5 | ||
![]() |
5fb70f1812 | ||
![]() |
03fc68bb6d | ||
![]() |
bb9c80623d | ||
![]() |
4dd0a5951f | ||
![]() |
b010791767 | ||
![]() |
ef61a141a6 | ||
![]() |
85cad2c8e3 | ||
![]() |
ac990c2bbc | ||
![]() |
cf1f3825c6 | ||
![]() |
fa8c30b279 | ||
![]() |
99f5a9ebb2 | ||
![]() |
15ed6ac632 | ||
![]() |
18aa78fa2e | ||
![]() |
8dcb6060b8 | ||
![]() |
d14424a891 | ||
![]() |
e569fe60a7 | ||
![]() |
9a666f3467 | ||
![]() |
edb098bf6f | ||
![]() |
dec575d7a4 | ||
![]() |
dee608c1c8 | ||
![]() |
d90f68c439 | ||
![]() |
6a7ac612ee | ||
![]() |
8c8f972448 | ||
![]() |
3c97bb4cd2 | ||
![]() |
ffeed1611d | ||
![]() |
7f4a3f0529 | ||
![]() |
3801d490e5 | ||
![]() |
43899a6683 | ||
![]() |
2e717eaeb9 | ||
![]() |
09fa765a3c | ||
![]() |
e2c4a08754 | ||
![]() |
1c1514bb3a | ||
![]() |
e6711f760d | ||
![]() |
133c5067b6 | ||
![]() |
dd1e7706a4 | ||
![]() |
c154efeb14 | ||
![]() |
78274b8504 | ||
![]() |
1ebf756f59 | ||
![]() |
33666529e5 | ||
![]() |
56b2b2a717 | ||
![]() |
2ac26685b0 | ||
![]() |
606392d1a5 | ||
![]() |
881e7bf91c | ||
![]() |
ba57f7b0c4 | ||
![]() |
be2a100738 | ||
![]() |
6749ef3b15 | ||
![]() |
a241f2b36f | ||
![]() |
efe444567d | ||
![]() |
afb4343828 | ||
![]() |
3a67f1eb41 | ||
![]() |
d7c8bc9da0 | ||
![]() |
8ed6a78610 | ||
![]() |
7574a692f0 | ||
![]() |
f4ea106816 | ||
![]() |
84b8e8b0aa | ||
![]() |
8a0152278f | ||
![]() |
d2416580c0 | ||
![]() |
bfae131b8b | ||
![]() |
d93a549406 | ||
![]() |
c29a430b92 | ||
![]() |
a4f8bc9dc1 | ||
![]() |
a186ae70c7 | ||
![]() |
f68c28cf6e | ||
![]() |
8101014a29 | ||
![]() |
ab1f8dba16 | ||
![]() |
cb4c36bf66 | ||
![]() |
eac6f92bcc | ||
![]() |
f6e6259678 | ||
![]() |
9c8692f049 | ||
![]() |
8d479c7392 | ||
![]() |
d1f7131386 | ||
![]() |
1a0eb415b0 | ||
![]() |
58e5a56ac1 | ||
![]() |
8924b74fb4 | ||
![]() |
c4af0886b4 | ||
![]() |
cf53e7a0da | ||
![]() |
617557998d | ||
![]() |
682d665fb7 | ||
![]() |
a72ccf32d7 | ||
![]() |
5f384c8cf5 | ||
![]() |
64309b364f | ||
![]() |
b5707c6884 | ||
![]() |
d12dcc2e06 | ||
![]() |
ee5e58d312 | ||
![]() |
da469c9f46 | ||
![]() |
4633d6e45e | ||
![]() |
6d10bc6592 | ||
![]() |
67f5e79f03 | ||
![]() |
3d604102c9 | ||
![]() |
aef7ea8fbf | ||
![]() |
354be07caa | ||
![]() |
4470abbd11 | ||
![]() |
e815394750 | ||
![]() |
1a67ab5503 | ||
![]() |
20a1ea49a5 | ||
![]() |
ec956d463a | ||
![]() |
555d072ef9 | ||
![]() |
866a374863 | ||
![]() |
dc6cee9f21 | ||
![]() |
7276eb6bef | ||
![]() |
3254e8ac19 | ||
![]() |
4f678cc8ce | ||
![]() |
384ec443a1 | ||
![]() |
64030c758a | ||
![]() |
31ecf46f12 | ||
![]() |
ab55650be8 | ||
![]() |
dde89b58b2 | ||
![]() |
36434fb93c | ||
![]() |
5e848f14df | ||
![]() |
a8f4c43e4b | ||
![]() |
35c92db737 | ||
![]() |
42e7e03cbd | ||
![]() |
455ce5fc7c | ||
![]() |
8546898841 | ||
![]() |
9fa2b85aeb | ||
![]() |
e2a6db3fbd | ||
![]() |
9ee3e2ac84 | ||
![]() |
205da833eb | ||
![]() |
9e38ff658e | ||
![]() |
331e6c6bdd | ||
![]() |
52689a587a | ||
![]() |
911369d9dd | ||
![]() |
3d013195ce | ||
![]() |
406927be3c | ||
![]() |
c3a00eb31d | ||
![]() |
5ff3593024 | ||
![]() |
e452a825c6 | ||
![]() |
87ba3f72d1 | ||
![]() |
86dfc49861 | ||
![]() |
53c03b4349 | ||
![]() |
9c3e63fd74 | ||
![]() |
2f9e9cbbda | ||
![]() |
c5b4eb5905 | ||
![]() |
a47862e0a8 | ||
![]() |
83492b9f26 | ||
![]() |
cccdab5739 | ||
![]() |
85799f49f3 | ||
![]() |
63a0cde5ff | ||
![]() |
c7c1e6ebd6 | ||
![]() |
70d3f30034 | ||
![]() |
184960c3f5 | ||
![]() |
25405440c7 | ||
![]() |
2dd1733926 | ||
![]() |
d815fe0836 | ||
![]() |
6c5f5d5570 | ||
![]() |
aa83e235f2 | ||
![]() |
a2de93d14f | ||
![]() |
24f0f17063 | ||
![]() |
89990fd148 | ||
![]() |
de0db8b7a5 | ||
![]() |
62946d0d4e | ||
![]() |
97adb8e508 | ||
![]() |
9eaa084e84 | ||
![]() |
a9dc550b01 | ||
![]() |
e7911f8fbc | ||
![]() |
4568e37586 | ||
![]() |
1faf9681a2 | ||
![]() |
ac3713e4a0 | ||
![]() |
db86150832 | ||
![]() |
607ea4b549 | ||
![]() |
4ee8e90665 | ||
![]() |
ead8c9e867 | ||
![]() |
69c2331279 | ||
![]() |
ebc2052874 | ||
![]() |
1491e1dc59 | ||
![]() |
96f5296062 | ||
![]() |
baf368d430 | ||
![]() |
2aaeb86f27 | ||
![]() |
e7f4158ad7 | ||
![]() |
bac97a2340 | ||
![]() |
d34650ef5f | ||
![]() |
73de8d8a81 | ||
![]() |
9077e78a85 | ||
![]() |
6545484a87 | ||
![]() |
996a8e9801 | ||
![]() |
c8ec91c54b | ||
![]() |
d9227f70ce | ||
![]() |
8599837e08 | ||
![]() |
4a9f4bced5 | ||
![]() |
d0a93cf258 | ||
![]() |
5c2e8a1db1 | ||
![]() |
c4dfb44bc8 | ||
![]() |
35289a54b3 | ||
![]() |
cbc60c606c | ||
![]() |
8cb783ddf6 | ||
![]() |
3aa4c6105b | ||
![]() |
4bf67b0904 | ||
![]() |
c3b4b3deac | ||
![]() |
35722f6257 | ||
![]() |
0a07d0cd7f | ||
![]() |
504f0a5183 | ||
![]() |
dd5ee69b11 | ||
![]() |
545cd36309 | ||
![]() |
74f87b848b | ||
![]() |
14d734365a | ||
![]() |
85d1763533 | ||
![]() |
86e1abd44f | ||
![]() |
e49e066e7a | ||
![]() |
6406e63e29 | ||
![]() |
389b2f06d2 | ||
![]() |
ebf6f41e8a | ||
![]() |
6d5fa04492 | ||
![]() |
d9fbd7626a | ||
![]() |
1ce48c02b5 | ||
![]() |
097b671a84 | ||
![]() |
ea15efb407 | ||
![]() |
6a8b37cd2b | ||
![]() |
96571dd543 | ||
![]() |
caa2bb7284 | ||
![]() |
fc2a335956 | ||
![]() |
2bdf3ec704 | ||
![]() |
0b26df4cde | ||
![]() |
425f399276 | ||
![]() |
68441af22a | ||
![]() |
3cb3d7b086 | ||
![]() |
9f2f97e0bb | ||
![]() |
6887c1d57b | ||
![]() |
638dd79cf4 | ||
![]() |
22e9d43f5b | ||
![]() |
47345afd3c | ||
![]() |
f74edad743 | ||
![]() |
96da7d2c52 | ||
![]() |
90a16b59f8 | ||
![]() |
3687de884a | ||
![]() |
36e73e22f1 | ||
![]() |
82d38f9c11 | ||
![]() |
bc25b3d304 | ||
![]() |
904563aef2 | ||
![]() |
c7881a9716 | ||
![]() |
145c982341 | ||
![]() |
55fefa65ff | ||
![]() |
8375c2bb38 | ||
![]() |
8280b542f9 | ||
![]() |
6e36165bb1 | ||
![]() |
63a3abe8f9 | ||
![]() |
a23935d4cb | ||
![]() |
27907b6979 | ||
![]() |
7b0c41d2a9 | ||
![]() |
998614bf2e | ||
![]() |
d069f39bc7 | ||
![]() |
7e92d4c49f | ||
![]() |
6c9c2b46f0 | ||
![]() |
94caaabef8 | ||
![]() |
76d4457651 | ||
![]() |
89691bd1a3 | ||
![]() |
2ed6014e85 | ||
![]() |
181c523020 | ||
![]() |
76fbdf926f | ||
![]() |
44b1bb8917 | ||
![]() |
ef400ae901 | ||
![]() |
9b904856fa | ||
![]() |
b2b6582bdb | ||
![]() |
d3ac784e79 | ||
![]() |
b40ad69b89 | ||
![]() |
0237aad34f | ||
![]() |
b9b3db78a1 | ||
![]() |
d2d1bd391e | ||
![]() |
e8dfc41504 | ||
![]() |
c575fa5ece | ||
![]() |
c161023a90 | ||
![]() |
3b073d68b4 | ||
![]() |
c20e4e75a6 | ||
![]() |
0fd712fb2e | ||
![]() |
5c49029060 | ||
![]() |
621ba8c1f3 | ||
![]() |
61c0511abc | ||
![]() |
47ca84cc64 | ||
![]() |
64643a2922 | ||
![]() |
f3bb875116 | ||
![]() |
534fc7f270 | ||
![]() |
2ff608c6ff | ||
![]() |
a9300f89bc | ||
![]() |
f3e99de219 | ||
![]() |
2a990f25ad | ||
![]() |
acbb9d4ce4 | ||
![]() |
6eafd88ec2 | ||
![]() |
0cf169ac8d | ||
![]() |
028d0b839c | ||
![]() |
a53eb6c188 | ||
![]() |
f6ed710063 | ||
![]() |
693bff2fee | ||
![]() |
9800b8cd89 | ||
![]() |
44be7a2cfa | ||
![]() |
8f257f29d0 | ||
![]() |
7dd118ab2a | ||
![]() |
579f59c520 | ||
![]() |
ee78f43c4b | ||
![]() |
60af21c139 | ||
![]() |
f44b495b99 | ||
![]() |
ed6229ee7c | ||
![]() |
99ddf637df | ||
![]() |
fb56957752 | ||
![]() |
6ae9c27860 | ||
![]() |
e0f1a684f8 | ||
![]() |
5350468c14 | ||
![]() |
a636b310a2 | ||
![]() |
31e28ff8eb | ||
![]() |
870f67f8de | ||
![]() |
93f558b359 | ||
![]() |
d8f99c5fa3 | ||
![]() |
1cfa08197a | ||
![]() |
7a5db36656 | ||
![]() |
28fa198568 | ||
![]() |
e74a5d1658 | ||
![]() |
61187d3f3e | ||
![]() |
850168a41b | ||
![]() |
fbdc143c85 | ||
![]() |
e7e89d6c80 | ||
![]() |
5f89f2877c | ||
![]() |
17065f4cee | ||
![]() |
299414639c | ||
![]() |
163fa009fb | ||
![]() |
c7eabbd248 | ||
![]() |
99e105492a | ||
![]() |
af772c41d6 | ||
![]() |
5deb763cac | ||
![]() |
e0aa475450 | ||
![]() |
7f7c10b775 | ||
![]() |
70a1ec60b5 | ||
![]() |
3d48f36df7 | ||
![]() |
b76830958c | ||
![]() |
ff6221255b | ||
![]() |
252edad93f | ||
![]() |
9ee0f8a937 | ||
![]() |
c834d89466 | ||
![]() |
331291f34d | ||
![]() |
e6303980fa | ||
![]() |
1280e13c1f | ||
![]() |
1dec46908a | ||
![]() |
e18c6c2db9 | ||
![]() |
ee24eec39b | ||
![]() |
47865c5718 | ||
![]() |
8c055dddda | ||
![]() |
b45914ece5 | ||
![]() |
6d55058de6 | ||
![]() |
f512663499 | ||
![]() |
4bd036c78c | ||
![]() |
e5575f93fb | ||
![]() |
7bc353b0dd | ||
![]() |
dc6a81d17f | ||
![]() |
4da21a2537 | ||
![]() |
8ea270fb74 | ||
![]() |
bc0e1936c2 | ||
![]() |
587f295c30 | ||
![]() |
27ff57e47e | ||
![]() |
dfbbb68286 | ||
![]() |
7bc92b12e3 | ||
![]() |
540732d129 | ||
![]() |
7eb70e2925 | ||
![]() |
28a9c55006 | ||
![]() |
3e4427deaa | ||
![]() |
b56471aef6 | ||
![]() |
1c812faf3d | ||
![]() |
95967882e3 | ||
![]() |
d1ddbe213f | ||
![]() |
ba073d546a | ||
![]() |
981f673dbb | ||
![]() |
eece7b7b3e | ||
![]() |
27c9df9bc8 | ||
![]() |
6968dcdd13 | ||
![]() |
bcaa638ef0 | ||
![]() |
c243de3704 | ||
![]() |
4e35d2a367 | ||
![]() |
c2e42682d6 | ||
![]() |
5e566c2fd9 | ||
![]() |
effaa81582 | ||
![]() |
4cd9290972 | ||
![]() |
b9a570be9b | ||
![]() |
3ddbb62658 | ||
![]() |
2ee336bef8 | ||
![]() |
8d767ac497 | ||
![]() |
955ef9b361 | ||
![]() |
90cf46b826 | ||
![]() |
c08ba92f33 | ||
![]() |
4bf2963d1e | ||
![]() |
e81228782d | ||
![]() |
dd6dd01e16 | ||
![]() |
31ad686545 | ||
![]() |
b79b3302ab | ||
![]() |
68220d1afc | ||
![]() |
a8e1cee84a | ||
![]() |
bd713f8e07 | ||
![]() |
3bc387b1d9 | ||
![]() |
2844f699ff | ||
![]() |
1d3333e83b | ||
![]() |
4f0daf7a77 | ||
![]() |
3421a8e19f | ||
![]() |
927ca57e56 | ||
![]() |
c63c7dae3f | ||
![]() |
e0f05654f7 | ||
![]() |
2a1501c91e | ||
![]() |
f244f09362 | ||
![]() |
3c2af3045d | ||
![]() |
d82b0b4661 | ||
![]() |
5e2ec1a9bf | ||
![]() |
1d8a71fbc0 | ||
![]() |
7b9a6f1055 | ||
![]() |
8bd9a0d4bc | ||
![]() |
69c1c9f664 | ||
![]() |
d30836681d | ||
![]() |
0a597ffd5f | ||
![]() |
757c91815b | ||
![]() |
deb01266ea | ||
![]() |
d3cff11602 | ||
![]() |
f177a5c734 | ||
![]() |
bf4e0e4f3d | ||
![]() |
9d509dd3ce | ||
![]() |
02674d0f86 | ||
![]() |
ff6ec006e7 | ||
![]() |
a4ed9a5444 | ||
![]() |
d01e3a97d5 | ||
![]() |
3f84a9239a | ||
![]() |
84d4ca4053 | ||
![]() |
19c4a77d6f | ||
![]() |
c16c250847 | ||
![]() |
0905be77bc | ||
![]() |
3d11179a06 | ||
![]() |
516d7eae9a | ||
![]() |
2e486c5e53 | ||
![]() |
d87f329838 | ||
![]() |
e6de63c689 | ||
![]() |
bb845ee803 | ||
![]() |
9e67996e24 | ||
![]() |
b5523d9820 | ||
![]() |
ad26e4f6a3 | ||
![]() |
ae40f009a0 | ||
![]() |
7ee603df60 | ||
![]() |
a8eb0d8346 | ||
![]() |
924a8da2f5 | ||
![]() |
07ab28279c | ||
![]() |
dbb6c544de | ||
![]() |
8c3d2531dc | ||
![]() |
e8fc47665b | ||
![]() |
574d8d9c7a | ||
![]() |
16c9e20b2a | ||
![]() |
665e0ff692 | ||
![]() |
8c71b26109 | ||
![]() |
6aeb9a62e6 | ||
![]() |
337d1f4df5 | ||
![]() |
057bd3f6d1 | ||
![]() |
b01a2e42fb | ||
![]() |
62efe406f5 | ||
![]() |
43f6ad3530 | ||
![]() |
a060246269 | ||
![]() |
802752d76c | ||
![]() |
a7fc2f4ddc | ||
![]() |
6a2fcd9f16 | ||
![]() |
90f475e532 | ||
![]() |
af6294e404 | ||
![]() |
17f471ac24 | ||
![]() |
4274ed563b | ||
![]() |
2acda3be5f | ||
![]() |
2848f9f257 | ||
![]() |
6536e3d4b5 | ||
![]() |
cdaa4fe106 | ||
![]() |
a07e27ef4b | ||
![]() |
2d5e4477b8 | ||
![]() |
f1213fb83e | ||
![]() |
947c751bc7 | ||
![]() |
0ca00b81d5 | ||
![]() |
7c10b57fb9 | ||
![]() |
ffa6d41d8b | ||
![]() |
5ecab9f304 | ||
![]() |
dc9508f80d | ||
![]() |
b6aa1f764b | ||
![]() |
63f8ac2d92 | ||
![]() |
da4622a2ed | ||
![]() |
2896321076 | ||
![]() |
092e5fb8aa | ||
![]() |
43bb3f7f2d | ||
![]() |
b144724ed5 | ||
![]() |
04f233b4a5 | ||
![]() |
7645a1d2c7 | ||
![]() |
2953ea60e8 | ||
![]() |
8d5b2bc4c5 | ||
![]() |
1d1e620db6 | ||
![]() |
3532195760 | ||
![]() |
9d55c7c0ed | ||
![]() |
b9fcf6cac3 | ||
![]() |
e49deee303 | ||
![]() |
f4da5955de | ||
![]() |
5db0ccf96a | ||
![]() |
f8f9c81a66 | ||
![]() |
75b51983cc | ||
![]() |
7e66af2585 | ||
![]() |
ac8026b6d9 | ||
![]() |
119cfdc577 | ||
![]() |
09ce7e062f | ||
![]() |
9cd4fb5417 | ||
![]() |
7887cf58d2 | ||
![]() |
af9c9e580c | ||
![]() |
a4c98db69e | ||
![]() |
122e68de04 | ||
![]() |
d922b2de1f | ||
![]() |
84e2cdb191 | ||
![]() |
b424876cf8 | ||
![]() |
3e306c1479 | ||
![]() |
fb4258d0a2 | ||
![]() |
c9965d3d1a | ||
![]() |
5411ef4802 | ||
![]() |
fbc67970b4 | ||
![]() |
08910933e0 | ||
![]() |
ee23ca0770 | ||
![]() |
febdb96c2b | ||
![]() |
d771bd196c | ||
![]() |
4782a67fe0 | ||
![]() |
6cd5d819ea | ||
![]() |
f8cc637e19 | ||
![]() |
23907ffffe | ||
![]() |
9af1f40086 | ||
![]() |
2a1e1007b7 | ||
![]() |
4c2168b4b5 | ||
![]() |
8920cc7924 | ||
![]() |
8ee7022307 | ||
![]() |
380266a57c | ||
![]() |
5679d5edf1 | ||
![]() |
6a9d569345 | ||
![]() |
eccbd66c18 | ||
![]() |
041a2a92d5 | ||
![]() |
a735c910d5 |
@@ -162,6 +162,87 @@
|
|||||||
"contributions": [
|
"contributions": [
|
||||||
"code"
|
"code"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "hammster",
|
||||||
|
"name": "Hans Koch",
|
||||||
|
"avatar_url": "https://avatars0.githubusercontent.com/u/1093709?v=4",
|
||||||
|
"profile": "https://hans-koch.me",
|
||||||
|
"contributions": [
|
||||||
|
"code"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "ThePuzzlemaker",
|
||||||
|
"name": "Dak Smyth",
|
||||||
|
"avatar_url": "https://avatars3.githubusercontent.com/u/12666617?v=4",
|
||||||
|
"profile": "http://thepuzzlemaker.info",
|
||||||
|
"contributions": [
|
||||||
|
"code"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "yfwz100",
|
||||||
|
"name": "Wang Zhi",
|
||||||
|
"avatar_url": "https://avatars2.githubusercontent.com/u/983211?v=4",
|
||||||
|
"profile": "http://yfwz100.github.io",
|
||||||
|
"contributions": [
|
||||||
|
"code"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "jack1142",
|
||||||
|
"name": "jack1142",
|
||||||
|
"avatar_url": "https://avatars0.githubusercontent.com/u/6032823?v=4",
|
||||||
|
"profile": "https://github.com/jack1142",
|
||||||
|
"contributions": [
|
||||||
|
"code"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "hdougie",
|
||||||
|
"name": "Howie Douglas",
|
||||||
|
"avatar_url": "https://avatars1.githubusercontent.com/u/450799?v=4",
|
||||||
|
"profile": "https://github.com/hdougie",
|
||||||
|
"contributions": [
|
||||||
|
"code"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "ckaczor",
|
||||||
|
"name": "Chris Kaczor",
|
||||||
|
"avatar_url": "https://avatars2.githubusercontent.com/u/180906?v=4",
|
||||||
|
"profile": "https://chriskaczor.com",
|
||||||
|
"contributions": [
|
||||||
|
"code"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "boxmein",
|
||||||
|
"name": "Johannes Kadak",
|
||||||
|
"avatar_url": "https://avatars1.githubusercontent.com/u/358714?v=4",
|
||||||
|
"profile": "https://www.boxmein.net",
|
||||||
|
"contributions": [
|
||||||
|
"code"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "LeSeulArtichaut",
|
||||||
|
"name": "LeSeulArtichaut",
|
||||||
|
"avatar_url": "https://avatars1.githubusercontent.com/u/38361244?v=4",
|
||||||
|
"profile": "https://github.com/LeSeulArtichaut",
|
||||||
|
"contributions": [
|
||||||
|
"code"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "CyrilTaylor",
|
||||||
|
"name": "Cyril Taylor",
|
||||||
|
"avatar_url": "https://avatars0.githubusercontent.com/u/12631466?v=4",
|
||||||
|
"profile": "https://github.com/CyrilTaylor",
|
||||||
|
"contributions": [
|
||||||
|
"code"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"contributorsPerLine": 7,
|
"contributorsPerLine": 7,
|
||||||
@@ -169,5 +250,6 @@
|
|||||||
"projectOwner": "Eugeny",
|
"projectOwner": "Eugeny",
|
||||||
"repoType": "github",
|
"repoType": "github",
|
||||||
"repoHost": "https://github.com",
|
"repoHost": "https://github.com",
|
||||||
"commitConvention": "none"
|
"commitConvention": "none",
|
||||||
|
"skipCi": true
|
||||||
}
|
}
|
||||||
|
@@ -31,6 +31,12 @@ rules:
|
|||||||
'@typescript-eslint/promise-function-async': off
|
'@typescript-eslint/promise-function-async': off
|
||||||
'@typescript-eslint/no-unnecessary-type-assertion': off
|
'@typescript-eslint/no-unnecessary-type-assertion': off
|
||||||
'@typescript-eslint/require-array-sort-compare': off
|
'@typescript-eslint/require-array-sort-compare': off
|
||||||
|
'@typescript-eslint/no-floating-promises': off
|
||||||
|
'@typescript-eslint/prefer-readonly': off
|
||||||
|
'@typescript-eslint/require-await': off
|
||||||
|
'@typescript-eslint/strict-boolean-expressions': off
|
||||||
|
'@typescript-eslint/no-misused-promises': off
|
||||||
|
'@typescript-eslint/typedef': off
|
||||||
'@typescript-eslint/no-use-before-define':
|
'@typescript-eslint/no-use-before-define':
|
||||||
- error
|
- error
|
||||||
- classes: false
|
- classes: false
|
||||||
@@ -39,7 +45,8 @@ rules:
|
|||||||
- error
|
- error
|
||||||
- never
|
- never
|
||||||
block-scoped-var: error
|
block-scoped-var: error
|
||||||
brace-style:
|
brace-style: off
|
||||||
|
'@typescript-eslint/brace-style':
|
||||||
- error
|
- error
|
||||||
- 1tbs
|
- 1tbs
|
||||||
- allowSingleLine: true
|
- allowSingleLine: true
|
||||||
@@ -80,3 +87,14 @@ rules:
|
|||||||
- as-needed
|
- as-needed
|
||||||
- keywords: true
|
- keywords: true
|
||||||
numbers: true
|
numbers: true
|
||||||
|
quotes: off
|
||||||
|
'@typescript-eslint/quotes':
|
||||||
|
- error
|
||||||
|
- single
|
||||||
|
- allowTemplateLiterals: true
|
||||||
|
'@typescript-eslint/no-non-null-assertion': off
|
||||||
|
'@typescript-eslint/no-unnecessary-condition': off
|
||||||
|
'@typescript-eslint/no-untyped-public-signature': off # bugs out on constructors
|
||||||
|
'@typescript-eslint/restrict-template-expressions': off
|
||||||
|
'@typescript-eslint/no-dynamic-delete': off
|
||||||
|
'@typescript-eslint/prefer-nullish-coalescing': off
|
||||||
|
4
.github/stale.yml
vendored
4
.github/stale.yml
vendored
@@ -1,7 +1,7 @@
|
|||||||
# Number of days of inactivity before an issue becomes stale
|
# Number of days of inactivity before an issue becomes stale
|
||||||
daysUntilStale: 60
|
daysUntilStale: 180
|
||||||
# Number of days of inactivity before a stale issue is closed
|
# Number of days of inactivity before a stale issue is closed
|
||||||
daysUntilClose: 14
|
daysUntilClose: 90
|
||||||
# Issues with these labels will never be considered stale
|
# Issues with these labels will never be considered stale
|
||||||
exemptLabels:
|
exemptLabels:
|
||||||
- "T: Enhancement"
|
- "T: Enhancement"
|
||||||
|
30
.github/workflows/docs.yml
vendored
Normal file
30
.github/workflows/docs.yml
vendored
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
name: Docs
|
||||||
|
on: push
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-18.04
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v1
|
||||||
|
|
||||||
|
- name: Installing Node
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
version: 10
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
eval $(ssh-agent -s)
|
||||||
|
ssh-add <(echo "$DOCS_PRIVATE_KEY")
|
||||||
|
yarn cache clean
|
||||||
|
cd app
|
||||||
|
yarn
|
||||||
|
cd ..
|
||||||
|
rm app/node_modules/.yarn-integrity
|
||||||
|
yarn
|
||||||
|
yarn run docs
|
||||||
|
rsync -e "ssh -o StrictHostKeyChecking=no" -arv docs/api/ root@ajenti.org:/srv/terminus-docs/
|
||||||
|
|
||||||
|
env:
|
||||||
|
DOCS_PRIVATE_KEY: ${{ secrets.DOCS_PRIVATE_KEY }}
|
26
.github/workflows/lint.yml
vendored
Normal file
26
.github/workflows/lint.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
name: Lint
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: macOS-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v1
|
||||||
|
|
||||||
|
- name: Installing Node
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
version: 10
|
||||||
|
|
||||||
|
- name: Install deps
|
||||||
|
run: |
|
||||||
|
npm i -g yarn@1.19.1
|
||||||
|
cd app
|
||||||
|
yarn
|
||||||
|
cd ..
|
||||||
|
rm app/node_modules/.yarn-integrity
|
||||||
|
yarn
|
||||||
|
|
||||||
|
- name: Lint
|
||||||
|
run: yarn run lint
|
76
.github/workflows/linux.yml
vendored
Normal file
76
.github/workflows/linux.yml
vendored
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
name: Linux Build
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v1
|
||||||
|
|
||||||
|
- name: Install Node
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
version: 10
|
||||||
|
|
||||||
|
- name: Install deps
|
||||||
|
run: |
|
||||||
|
npm i -g yarn@1.19.1
|
||||||
|
cd app
|
||||||
|
yarn
|
||||||
|
cd ..
|
||||||
|
rm app/node_modules/.yarn-integrity
|
||||||
|
yarn
|
||||||
|
|
||||||
|
- name: Build native deps
|
||||||
|
run: scripts/build-native.js
|
||||||
|
|
||||||
|
- name: Build typings
|
||||||
|
run: yarn run build:typings
|
||||||
|
|
||||||
|
- name: Webpack
|
||||||
|
run: yarn run build
|
||||||
|
|
||||||
|
- name: Prepackage plugins
|
||||||
|
run: scripts/prepackage-plugins.js
|
||||||
|
|
||||||
|
- name: Build packages
|
||||||
|
run: scripts/build-linux.js
|
||||||
|
env:
|
||||||
|
DEBUG: electron-builder,electron-builder:*
|
||||||
|
GH_TOKEN: ${{ secrets.GH_TOKEN }}
|
||||||
|
|
||||||
|
- name: Package artifacts
|
||||||
|
run: |
|
||||||
|
mkdir artifact-deb
|
||||||
|
mv dist/*.deb artifact-deb/ || true
|
||||||
|
mkdir artifact-rpm
|
||||||
|
mv dist/*.rpm artifact-rpm/ || true
|
||||||
|
mkdir artifact-snap
|
||||||
|
mv dist/*.snap artifact-snap/ || true
|
||||||
|
mkdir artifact-tar.gz
|
||||||
|
mv dist/*.tar.gz artifact-tar.gz/ || true
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@master
|
||||||
|
name: Upload DEB
|
||||||
|
with:
|
||||||
|
name: Linux .deb
|
||||||
|
path: artifact-deb
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@master
|
||||||
|
name: Upload RPM
|
||||||
|
with:
|
||||||
|
name: Linux .rpm
|
||||||
|
path: artifact-rpm
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@master
|
||||||
|
name: Upload Snap
|
||||||
|
with:
|
||||||
|
name: Linux .snap
|
||||||
|
path: artifact-snap
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@master
|
||||||
|
name: Upload tarball
|
||||||
|
with:
|
||||||
|
name: Linux tarball
|
||||||
|
path: artifact-tar.gz
|
69
.github/workflows/macos.yml
vendored
Normal file
69
.github/workflows/macos.yml
vendored
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
name: macOS Build
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: macOS-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v1
|
||||||
|
|
||||||
|
- name: Installing Node
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
version: 10
|
||||||
|
|
||||||
|
- name: Install deps
|
||||||
|
run: |
|
||||||
|
sudo npm i -g yarn@1.19.1
|
||||||
|
cd app
|
||||||
|
yarn
|
||||||
|
cd ..
|
||||||
|
rm app/node_modules/.yarn-integrity
|
||||||
|
yarn
|
||||||
|
|
||||||
|
- name: Build native deps
|
||||||
|
run: scripts/build-native.js
|
||||||
|
|
||||||
|
- name: Build typings
|
||||||
|
run: yarn run build:typings
|
||||||
|
|
||||||
|
- name: Webpack
|
||||||
|
run: yarn run build
|
||||||
|
|
||||||
|
- name: Prepackage plugins
|
||||||
|
run: scripts/prepackage-plugins.js
|
||||||
|
|
||||||
|
- name: Build and sign packages
|
||||||
|
run: scripts/build-macos.js
|
||||||
|
if: github.repository == 'Eugeny/terminus' && github.event_name == 'push'
|
||||||
|
env:
|
||||||
|
DEBUG: electron-builder,electron-builder:*
|
||||||
|
GH_TOKEN: ${{ secrets.GH_TOKEN }}
|
||||||
|
CSC_LINK: ${{ secrets.CSC_LINK }}
|
||||||
|
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Build packages without signing
|
||||||
|
run: scripts/build-macos.js
|
||||||
|
if: github.repository != 'Eugeny/terminus' || github.event_name != 'push'
|
||||||
|
env:
|
||||||
|
DEBUG: electron-builder,electron-builder:*
|
||||||
|
|
||||||
|
- name: Package artifacts
|
||||||
|
run: |
|
||||||
|
mkdir artifact-pkg
|
||||||
|
mv dist/*.pkg artifact-pkg/
|
||||||
|
mkdir artifact-zip
|
||||||
|
mv dist/*.zip artifact-zip/
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@master
|
||||||
|
name: Upload PKG
|
||||||
|
with:
|
||||||
|
name: macOS .pkg
|
||||||
|
path: artifact-pkg
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@master
|
||||||
|
name: Upload ZIP
|
||||||
|
with:
|
||||||
|
name: macOS .zip
|
||||||
|
path: artifact-zip
|
54
.github/workflows/windows.yml
vendored
Normal file
54
.github/workflows/windows.yml
vendored
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
name: Windows Build
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: windows-2016
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v1
|
||||||
|
|
||||||
|
- name: Installing Node
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
version: 10
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
shell: powershell
|
||||||
|
run: |
|
||||||
|
npm i -g yarn@1.19.1
|
||||||
|
yarn
|
||||||
|
node scripts/build-native.js
|
||||||
|
yarn run build
|
||||||
|
node scripts/prepackage-plugins.js
|
||||||
|
|
||||||
|
- name: Build and sign packages
|
||||||
|
run: node scripts/build-windows.js
|
||||||
|
if: github.repository == 'Eugeny/terminus' && github.event_name == 'push'
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GH_TOKEN }}
|
||||||
|
WIN_CSC_LINK: ${{ secrets.WIN_CSC_LINK }}
|
||||||
|
WIN_CSC_KEY_PASSWORD: ${{ secrets.WIN_CSC_KEY_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Build packages without signing
|
||||||
|
run: node scripts/build-windows.js
|
||||||
|
if: github.repository != 'Eugeny/terminus' || github.event_name != 'push'
|
||||||
|
|
||||||
|
- name: Package artifacts
|
||||||
|
run: |
|
||||||
|
mkdir artifact-setup
|
||||||
|
mv dist/*-setup.exe artifact-setup/
|
||||||
|
mkdir artifact-portable
|
||||||
|
mv dist/*-portable.exe artifact-portable/
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@master
|
||||||
|
name: Upload installer
|
||||||
|
with:
|
||||||
|
name: Installer
|
||||||
|
path: artifact-setup
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@master
|
||||||
|
name: Upload portable build
|
||||||
|
with:
|
||||||
|
name: Portable build
|
||||||
|
path: artifact-portable
|
4
.gitignore
vendored
4
.gitignore
vendored
@@ -24,3 +24,7 @@ yarn-error.log
|
|||||||
docs/api
|
docs/api
|
||||||
.travis.ssh.key
|
.travis.ssh.key
|
||||||
*.code-workspace
|
*.code-workspace
|
||||||
|
|
||||||
|
.electron-symbols
|
||||||
|
sentry.properties
|
||||||
|
sentry-symbols.js
|
||||||
|
14
.mergify.yml
Normal file
14
.mergify.yml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
pull_request_rules:
|
||||||
|
- name: automatic merge on CI success and review
|
||||||
|
conditions:
|
||||||
|
- "status-success=Windows Build / Build"
|
||||||
|
- "status-success=macOS Build / Build"
|
||||||
|
- "status-success=Linux Build / Build"
|
||||||
|
- "status-success=continuous-integration/appveyor/pr"
|
||||||
|
- "#approved-reviews-by>=1"
|
||||||
|
- "#changes-requested-reviews-by=0"
|
||||||
|
- base=master
|
||||||
|
actions:
|
||||||
|
merge:
|
||||||
|
method: merge
|
||||||
|
strict: true
|
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDDFM4nHSbET5V7EYNgjA8NeVfOxV0wVMdZ2YvsDzD+qPJ4+MYbvsL7ZPaSxQSn7n6ATkLHjKje5RpF/Rl9K3kucGs0P6cqJVeE0qryEteQ3Q+fYAk+bD2J9ZQ/hv/0NtLl8T+7lJUZ3WUxFH73sgph77Sw0z+kMpPaK7U2vqMBQD/7+6iJgya31wP0qW0XKDz1BjKeXgwTg10Pm4vcGsR4c2q7YIzSzBHffcyo0vJyFvOX/ZKHlZRcq/wnQMeOl/hPgf1xCENjQZmFVReQlYSw5cNNDT9HZPKekOAZFFez7/AbPiTIo/bnBYIv0mdUjr3nw8nXF505q8LiD3z/ksaaWDqe9CCLM4W0Bh7/dhP7IGPdfX0fVHLhOnYIOsG21D8rWJjMPkVRSLyEvWNAnVuObJNHoQu8VATnOxfPNnMun72IHyyFWVoADk5JcsMbzcP7gZB+5oJO7U1qpcdndtBOA3ZlF0Uz2jVZnqavoEBWT39tl3vs69hAA3aTPGclg7HMuAJOl4HsKmaUgDxqV2wCX/S4pDqmKMbmumDLX+MM0xl0gXj/zpVJp9BzdnrArkC40ivmC6TSA4wrdN0tNBlqApkH5/jxGWrcu2AXVn9PGF3+QrjW0iu+QMZCaKWDhLIQC835uFwzhnNGlx41B7uxMLuNFxKXdQ3f/cC9QMG8ew== TravisCIDeployKey
|
|
41
.travis.yml
41
.travis.yml
@@ -1,6 +1,5 @@
|
|||||||
language: node_js
|
language: node_js
|
||||||
node_js: 11
|
node_js: 11
|
||||||
osx_image: xcode11
|
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- Build
|
- Build
|
||||||
@@ -9,42 +8,12 @@ stages:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
include:
|
include:
|
||||||
- stage: 'Build'
|
|
||||||
if: branch = xxx
|
|
||||||
os: linux
|
|
||||||
before_install:
|
|
||||||
- set -e
|
|
||||||
- rm app/node_modules/.yarn-integrity || true
|
|
||||||
- yarn
|
|
||||||
script:
|
|
||||||
- set -e
|
|
||||||
- python -c "import fcntl; fcntl.fcntl(1, fcntl.F_SETFL, 0)" # https://github.com/travis-ci/travis-ci/issues/8920
|
|
||||||
- scripts/build-native.js
|
|
||||||
- yarn run build:typings
|
|
||||||
- yarn run build
|
|
||||||
- scripts/prepackage-plugins.js
|
|
||||||
- travis_wait scripts/build-linux.js
|
|
||||||
|
|
||||||
- stage: 'Build'
|
|
||||||
os: osx
|
|
||||||
before_install:
|
|
||||||
- set -e
|
|
||||||
- rm app/node_modules/.yarn-integrity || true
|
|
||||||
- yarn
|
|
||||||
script:
|
|
||||||
- set -e
|
|
||||||
- scripts/build-native.js
|
|
||||||
- yarn run build:typings
|
|
||||||
- yarn run build
|
|
||||||
- scripts/prepackage-plugins.js
|
|
||||||
- travis_wait scripts/build-macos.js
|
|
||||||
|
|
||||||
- stage: 'Docs'
|
- stage: 'Docs'
|
||||||
os: linux
|
os: linux
|
||||||
if: branch = master
|
if: branch = master
|
||||||
script:
|
script:
|
||||||
|
- '[ -z "${encrypted_4e2fb4889ef8_iv}" ] && exit 0 || true'
|
||||||
- set -e
|
- set -e
|
||||||
- '[ -z "${encrypted_4e2fb4889ef8_iv}" ] && exit 0'
|
|
||||||
- openssl aes-256-cbc -K $encrypted_4e2fb4889ef8_key -iv $encrypted_4e2fb4889ef8_iv -in .travis.ssh.key.enc -out .travis.ssh.key -d
|
- openssl aes-256-cbc -K $encrypted_4e2fb4889ef8_key -iv $encrypted_4e2fb4889ef8_iv -in .travis.ssh.key.enc -out .travis.ssh.key -d
|
||||||
- eval "$(ssh-agent -s)"
|
- eval "$(ssh-agent -s)"
|
||||||
- chmod 600 .travis.ssh.key
|
- chmod 600 .travis.ssh.key
|
||||||
@@ -65,11 +34,3 @@ addons:
|
|||||||
sources:
|
sources:
|
||||||
- sourceline: 'deb https://dl.yarnpkg.com/debian/ stable main'
|
- sourceline: 'deb https://dl.yarnpkg.com/debian/ stable main'
|
||||||
key_url: 'https://dl.yarnpkg.com/debian/pubkey.gpg'
|
key_url: 'https://dl.yarnpkg.com/debian/pubkey.gpg'
|
||||||
|
|
||||||
|
|
||||||
cache:
|
|
||||||
directories:
|
|
||||||
- 'terminus-*/node_modules'
|
|
||||||
- $HOME/.cache/yarn
|
|
||||||
- $HOME/.cache/electron
|
|
||||||
- $HOME/.cache/electron-builder
|
|
||||||
|
@@ -13,16 +13,18 @@ export class Application {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const configData = loadConfig()
|
const configData = loadConfig()
|
||||||
if (process.platform === 'linux' && ((configData.appearance || {}).opacity || 1) !== 1) {
|
if (process.platform === 'linux') {
|
||||||
app.commandLine.appendSwitch('enable-transparent-visuals')
|
app.commandLine.appendSwitch('no-sandbox')
|
||||||
app.disableHardwareAcceleration()
|
if (((configData.appearance || {}).opacity || 1) !== 1) {
|
||||||
|
app.commandLine.appendSwitch('enable-transparent-visuals')
|
||||||
|
app.disableHardwareAcceleration()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
app.commandLine.appendSwitch('disable-http-cache')
|
app.commandLine.appendSwitch('disable-http-cache')
|
||||||
app.commandLine.appendSwitch('lang', 'EN')
|
app.commandLine.appendSwitch('lang', 'EN')
|
||||||
|
|
||||||
for (const flag of configData.flags || [['force_discrete_gpu', '0']]) {
|
for (const flag of configData.flags || [['force_discrete_gpu', '0']]) {
|
||||||
console.log('Setting Electron flag:', flag.join('='))
|
|
||||||
app.commandLine.appendSwitch(flag[0], flag[1])
|
app.commandLine.appendSwitch(flag[0], flag[1])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -58,7 +60,7 @@ export class Application {
|
|||||||
if (!this.hasWindows()) {
|
if (!this.hasWindows()) {
|
||||||
await this.newWindow()
|
await this.newWindow()
|
||||||
}
|
}
|
||||||
this.windows[0].send(event, ...args)
|
this.windows.filter(w => !w.isDestroyed())[0].send(event, ...args)
|
||||||
}
|
}
|
||||||
|
|
||||||
enableTray () {
|
enableTray () {
|
||||||
@@ -72,7 +74,7 @@ export class Application {
|
|||||||
this.tray = new Tray(`${app.getAppPath()}/assets/tray.png`)
|
this.tray = new Tray(`${app.getAppPath()}/assets/tray.png`)
|
||||||
}
|
}
|
||||||
|
|
||||||
this.tray.on('click', () => this.focus())
|
this.tray.on('click', () => setTimeout(() => this.focus()));
|
||||||
|
|
||||||
const contextMenu = Menu.buildFromTemplate([{
|
const contextMenu = Menu.buildFromTemplate([{
|
||||||
label: 'Show',
|
label: 'Show',
|
||||||
@@ -100,7 +102,6 @@ export class Application {
|
|||||||
focus () {
|
focus () {
|
||||||
for (let window of this.windows) {
|
for (let window of this.windows) {
|
||||||
window.show()
|
window.show()
|
||||||
window.focus()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,7 +126,7 @@ export class Application {
|
|||||||
{ role: 'services', submenu: [] },
|
{ role: 'services', submenu: [] },
|
||||||
{ type: 'separator' },
|
{ type: 'separator' },
|
||||||
{ role: 'hide' },
|
{ role: 'hide' },
|
||||||
{ role: 'hideothers' },
|
{ role: 'hideOthers' },
|
||||||
{ role: 'unhide' },
|
{ role: 'unhide' },
|
||||||
{ type: 'separator' },
|
{ type: 'separator' },
|
||||||
{
|
{
|
||||||
@@ -146,21 +147,21 @@ export class Application {
|
|||||||
{ role: 'cut' },
|
{ role: 'cut' },
|
||||||
{ role: 'copy' },
|
{ role: 'copy' },
|
||||||
{ role: 'paste' },
|
{ role: 'paste' },
|
||||||
{ role: 'pasteandmatchstyle' },
|
{ role: 'pasteAndMatchStyle' },
|
||||||
{ role: 'delete' },
|
{ role: 'delete' },
|
||||||
{ role: 'selectall' },
|
{ role: 'selectAll' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'View',
|
label: 'View',
|
||||||
submenu: [
|
submenu: [
|
||||||
{ role: 'reload' },
|
{ role: 'reload' },
|
||||||
{ role: 'forcereload' },
|
{ role: 'forceReload' },
|
||||||
{ role: 'toggledevtools' },
|
{ role: 'toggleDevTools' },
|
||||||
{ type: 'separator' },
|
{ type: 'separator' },
|
||||||
{ role: 'resetzoom' },
|
{ role: 'resetZoom' },
|
||||||
{ role: 'zoomin' },
|
{ role: 'zoomIn' },
|
||||||
{ role: 'zoomout' },
|
{ role: 'zoomOut' },
|
||||||
{ type: 'separator' },
|
{ type: 'separator' },
|
||||||
{ role: 'togglefullscreen' },
|
{ role: 'togglefullscreen' },
|
||||||
],
|
],
|
||||||
|
@@ -1,8 +1,11 @@
|
|||||||
|
import './sentry'
|
||||||
import './lru'
|
import './lru'
|
||||||
import { app, ipcMain, Menu } from 'electron'
|
import { app, ipcMain, Menu } from 'electron'
|
||||||
import { parseArgs } from './cli'
|
import { parseArgs } from './cli'
|
||||||
import { Application } from './app'
|
import { Application } from './app'
|
||||||
import electronDebug = require('electron-debug')
|
import electronDebug = require('electron-debug')
|
||||||
|
import * as path from 'path'
|
||||||
|
import * as fs from 'fs'
|
||||||
|
|
||||||
if (!process.env.TERMINUS_PLUGINS) {
|
if (!process.env.TERMINUS_PLUGINS) {
|
||||||
process.env.TERMINUS_PLUGINS = ''
|
process.env.TERMINUS_PLUGINS = ''
|
||||||
@@ -10,6 +13,14 @@ if (!process.env.TERMINUS_PLUGINS) {
|
|||||||
|
|
||||||
const application = new Application()
|
const application = new Application()
|
||||||
|
|
||||||
|
if (process.env.PORTABLE_EXECUTABLE_DIR) {
|
||||||
|
const portableData = path.join(process.env.PORTABLE_EXECUTABLE_DIR, 'terminus-data')
|
||||||
|
if (!fs.existsSync(portableData)) {
|
||||||
|
fs.mkdirSync(portableData)
|
||||||
|
}
|
||||||
|
app.setPath('userData', portableData)
|
||||||
|
}
|
||||||
|
|
||||||
ipcMain.on('app:new-window', () => {
|
ipcMain.on('app:new-window', () => {
|
||||||
application.newWindow()
|
application.newWindow()
|
||||||
})
|
})
|
||||||
@@ -39,14 +50,14 @@ const argv = parseArgs(process.argv, process.cwd())
|
|||||||
|
|
||||||
if (!app.requestSingleInstanceLock()) {
|
if (!app.requestSingleInstanceLock()) {
|
||||||
app.quit()
|
app.quit()
|
||||||
process.exit(0)
|
app.exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argv.d) {
|
if (argv.d) {
|
||||||
electronDebug({
|
electronDebug({
|
||||||
isEnabled: true,
|
isEnabled: true,
|
||||||
showDevTools: true,
|
showDevTools: true,
|
||||||
devToolsMode: 'undocked'
|
devToolsMode: 'undocked',
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
21
app/lib/sentry.ts
Normal file
21
app/lib/sentry.ts
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
const { init } = 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
|
||||||
|
try {
|
||||||
|
release = require('electron').app.getVersion()
|
||||||
|
} catch {
|
||||||
|
release = require('electron').remote.app.getVersion()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isDev) {
|
||||||
|
init({
|
||||||
|
dsn: SENTRY_DSN,
|
||||||
|
release,
|
||||||
|
integrations (integrations) {
|
||||||
|
return integrations.filter(integration => integration.name !== 'Breadcrumbs')
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
@@ -3,6 +3,7 @@ import { debounceTime } from 'rxjs/operators'
|
|||||||
import { BrowserWindow, app, ipcMain, Rectangle, screen } from 'electron'
|
import { BrowserWindow, app, ipcMain, Rectangle, screen } from 'electron'
|
||||||
import ElectronConfig = require('electron-config')
|
import ElectronConfig = require('electron-config')
|
||||||
import * as os from 'os'
|
import * as os from 'os'
|
||||||
|
import * as path from 'path'
|
||||||
|
|
||||||
import { loadConfig } from './config'
|
import { loadConfig } from './config'
|
||||||
|
|
||||||
@@ -46,10 +47,11 @@ export class Window {
|
|||||||
minHeight: 300,
|
minHeight: 300,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
nodeIntegration: true,
|
nodeIntegration: true,
|
||||||
|
preload: path.join(__dirname, 'sentry.js'),
|
||||||
},
|
},
|
||||||
frame: false,
|
frame: false,
|
||||||
show: false,
|
show: false,
|
||||||
backgroundColor: '#00000000'
|
backgroundColor: '#00000000',
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.windowBounds) {
|
if (this.windowBounds) {
|
||||||
@@ -80,7 +82,7 @@ export class Window {
|
|||||||
this.window = new BrowserWindow(bwOptions)
|
this.window = new BrowserWindow(bwOptions)
|
||||||
this.window.once('ready-to-show', () => {
|
this.window.once('ready-to-show', () => {
|
||||||
if (process.platform === 'darwin') {
|
if (process.platform === 'darwin') {
|
||||||
this.window.setVibrancy('dark')
|
this.window.setVibrancy('window')
|
||||||
} else if (process.platform === 'win32' && (configData.appearance || {}).vibrancy) {
|
} else if (process.platform === 'win32' && (configData.appearance || {}).vibrancy) {
|
||||||
this.setVibrancy(true)
|
this.setVibrancy(true)
|
||||||
}
|
}
|
||||||
@@ -106,7 +108,7 @@ export class Window {
|
|||||||
this.ready = new Promise(resolve => {
|
this.ready = new Promise(resolve => {
|
||||||
const listener = event => {
|
const listener = event => {
|
||||||
if (event.sender === this.window.webContents) {
|
if (event.sender === this.window.webContents) {
|
||||||
ipcMain.removeListener('app:ready', listener)
|
ipcMain.removeListener('app:ready', listener as any)
|
||||||
resolve()
|
resolve()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -147,10 +149,14 @@ export class Window {
|
|||||||
this.window.webContents.send(event, ...args)
|
this.window.webContents.send(event, ...args)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isDestroyed () {
|
||||||
|
return !this.window || this.window.isDestroyed();
|
||||||
|
}
|
||||||
|
|
||||||
private setupWindowManagement () {
|
private setupWindowManagement () {
|
||||||
this.window.on('show', () => {
|
this.window.on('show', () => {
|
||||||
this.visible.next(true)
|
this.visible.next(true)
|
||||||
this.window.webContents.send('host:window-shown')
|
this.send('host:window-shown')
|
||||||
})
|
})
|
||||||
|
|
||||||
this.window.on('hide', () => {
|
this.window.on('hide', () => {
|
||||||
@@ -160,20 +166,20 @@ export class Window {
|
|||||||
let moveSubscription = new Observable<void>(observer => {
|
let moveSubscription = new Observable<void>(observer => {
|
||||||
this.window.on('move', () => observer.next())
|
this.window.on('move', () => observer.next())
|
||||||
}).pipe(debounceTime(250)).subscribe(() => {
|
}).pipe(debounceTime(250)).subscribe(() => {
|
||||||
this.window.webContents.send('host:window-moved')
|
this.send('host:window-moved')
|
||||||
})
|
})
|
||||||
|
|
||||||
this.window.on('closed', () => {
|
this.window.on('closed', () => {
|
||||||
moveSubscription.unsubscribe()
|
moveSubscription.unsubscribe()
|
||||||
})
|
})
|
||||||
|
|
||||||
this.window.on('enter-full-screen', () => this.window.webContents.send('host:window-enter-full-screen'))
|
this.window.on('enter-full-screen', () => this.send('host:window-enter-full-screen'))
|
||||||
this.window.on('leave-full-screen', () => this.window.webContents.send('host:window-leave-full-screen'))
|
this.window.on('leave-full-screen', () => this.send('host:window-leave-full-screen'))
|
||||||
|
|
||||||
this.window.on('close', event => {
|
this.window.on('close', event => {
|
||||||
if (!this.closing) {
|
if (!this.closing) {
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
this.window.webContents.send('host:window-close-request')
|
this.send('host:window-close-request')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
this.windowConfig.set('windowBoundaries', this.windowBounds)
|
this.windowConfig.set('windowBoundaries', this.windowBounds)
|
||||||
@@ -196,6 +202,10 @@ export class Window {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
this.window.on('focus', () => {
|
||||||
|
this.send('host:window-focused')
|
||||||
|
})
|
||||||
|
|
||||||
ipcMain.on('window-focus', event => {
|
ipcMain.on('window-focus', event => {
|
||||||
if (!this.window || event.sender !== this.window.webContents) {
|
if (!this.window || event.sender !== this.window.webContents) {
|
||||||
return
|
return
|
||||||
|
@@ -20,33 +20,35 @@
|
|||||||
"@angular/forms": "7.2.8",
|
"@angular/forms": "7.2.8",
|
||||||
"@angular/platform-browser": "7.2.8",
|
"@angular/platform-browser": "7.2.8",
|
||||||
"@angular/platform-browser-dynamic": "7.2.8",
|
"@angular/platform-browser-dynamic": "7.2.8",
|
||||||
"@ng-bootstrap/ng-bootstrap": "^4.2.0",
|
"@ng-bootstrap/ng-bootstrap": "^4.2.2",
|
||||||
"devtron": "1.4.0",
|
"devtron": "1.4.0",
|
||||||
"fontmanager-redux": "0.3.2",
|
|
||||||
"electron-config": "2.0.0",
|
"electron-config": "2.0.0",
|
||||||
"electron-debug": "^3.0.1",
|
"electron-debug": "^3.0.1",
|
||||||
"electron-is-dev": "1.1.0",
|
"electron-is-dev": "1.1.0",
|
||||||
"electron-updater": "^4.0.6",
|
"electron-updater": "^4.2.0",
|
||||||
|
"fontmanager-redux": "0.4.0",
|
||||||
"js-yaml": "3.13.1",
|
"js-yaml": "3.13.1",
|
||||||
"keytar": "^4.7.0",
|
"keytar": "^5.0.0",
|
||||||
"mz": "^2.7.0",
|
"mz": "^2.7.0",
|
||||||
"ngx-toastr": "^10.0.4",
|
"ngx-toastr": "^10.2.0",
|
||||||
"node-pty": "^0.9.0-beta19",
|
"node-pty": "^0.10.0-beta2",
|
||||||
"npm": "~6.9.0",
|
"npm": "6.9.0",
|
||||||
"path": "0.12.7",
|
"path": "0.12.7",
|
||||||
"rxjs": "^6.5.2",
|
"rxjs": "^6.5.4",
|
||||||
"rxjs-compat": "^6.5.2",
|
"rxjs-compat": "^6.5.4",
|
||||||
"yargs": "^13.3.0",
|
"yargs": "^15.1.0",
|
||||||
"zone.js": "^0.8.29"
|
"zone.js": "^0.8.29"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@terminus-term/windows-process-tree": "^0.2.4",
|
"macos-native-processlist": "^1.0.2",
|
||||||
"macos-native-processlist": "^1.0.1",
|
|
||||||
"windows-blurbehind": "^1.0.1",
|
"windows-blurbehind": "^1.0.1",
|
||||||
"windows-native-registry": "^1.0.14",
|
"windows-native-registry": "^1.0.17",
|
||||||
|
"windows-process-tree": "^0.2.4",
|
||||||
"windows-swca": "^2.0.2"
|
"windows-swca": "^2.0.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/mz": "0.0.32"
|
"@types/mz": "0.0.32",
|
||||||
|
"@types/node": "12.7.12",
|
||||||
|
"node-abi": "^2.13.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -6,33 +6,3 @@ import '@fortawesome/fontawesome-free/css/brands.css'
|
|||||||
import '@fortawesome/fontawesome-free/css/fontawesome.css'
|
import '@fortawesome/fontawesome-free/css/fontawesome.css'
|
||||||
import 'ngx-toastr/toastr.css'
|
import 'ngx-toastr/toastr.css'
|
||||||
import './preload.scss'
|
import './preload.scss'
|
||||||
|
|
||||||
import * as Raven from 'raven-js'
|
|
||||||
|
|
||||||
const SENTRY_DSN = 'https://4717a0a7ee0b4429bd3a0f06c3d7eec3@sentry.io/181876'
|
|
||||||
|
|
||||||
Raven.config(
|
|
||||||
SENTRY_DSN,
|
|
||||||
{
|
|
||||||
release: require('electron').remote.app.getVersion(),
|
|
||||||
dataCallback: (data: any) => {
|
|
||||||
const normalize = (filename: string) => {
|
|
||||||
const splitArray = filename.split('/')
|
|
||||||
return splitArray[splitArray.length - 1]
|
|
||||||
}
|
|
||||||
|
|
||||||
data.exception.values[0].stacktrace.frames.forEach((frame: any) => {
|
|
||||||
frame.filename = normalize(frame.filename)
|
|
||||||
})
|
|
||||||
|
|
||||||
data.culprit = data.exception.values[0].stacktrace.frames[0].filename
|
|
||||||
|
|
||||||
return data
|
|
||||||
},
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
process.on('uncaughtException' as any, (err) => {
|
|
||||||
Raven.captureException(err as any)
|
|
||||||
console.error(err)
|
|
||||||
})
|
|
||||||
|
@@ -7,7 +7,8 @@ import * as isDev from 'electron-is-dev'
|
|||||||
import './global.scss'
|
import './global.scss'
|
||||||
import './toastr.scss'
|
import './toastr.scss'
|
||||||
|
|
||||||
import { enableProdMode, NgModuleRef } from '@angular/core'
|
import { enableProdMode, NgModuleRef, ApplicationRef } from '@angular/core'
|
||||||
|
import { enableDebugTools } from '@angular/platform-browser'
|
||||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'
|
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'
|
||||||
|
|
||||||
import { getRootModule } from './app.module'
|
import { getRootModule } from './app.module'
|
||||||
@@ -18,8 +19,8 @@ location.hash = ''
|
|||||||
|
|
||||||
;(process as any).enablePromiseAPI = true
|
;(process as any).enablePromiseAPI = true
|
||||||
|
|
||||||
if (process.platform === 'win32') {
|
if (process.platform === 'win32' && !('HOME' in process.env)) {
|
||||||
process.env.HOME = process.env.HOMEDRIVE + process.env.HOMEPATH
|
process.env.HOME = `${process.env.HOMEDRIVE}${process.env.HOMEPATH}`
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isDev) {
|
if (isDev) {
|
||||||
@@ -37,7 +38,14 @@ async function bootstrap (plugins: PluginInfo[], safeMode = false): Promise<NgMo
|
|||||||
})
|
})
|
||||||
const module = getRootModule(pluginsModules)
|
const module = getRootModule(pluginsModules)
|
||||||
window['rootModule'] = module
|
window['rootModule'] = module
|
||||||
return platformBrowserDynamic().bootstrapModule(module)
|
return platformBrowserDynamic().bootstrapModule(module).then(moduleRef => {
|
||||||
|
if (isDev) {
|
||||||
|
const applicationRef = moduleRef.injector.get(ApplicationRef)
|
||||||
|
const componentRef = applicationRef.components[0]
|
||||||
|
enableDebugTools(componentRef)
|
||||||
|
}
|
||||||
|
return moduleRef
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
findPlugins().then(async plugins => {
|
findPlugins().then(async plugins => {
|
||||||
|
@@ -12,7 +12,7 @@ function normalizePath (path: string): string {
|
|||||||
return path
|
return path
|
||||||
}
|
}
|
||||||
|
|
||||||
nodeRequire.main.paths.map((x: string) => nodeModule.globalPaths.push(normalizePath(x)))
|
global['module'].paths.map((x: string) => nodeModule.globalPaths.push(normalizePath(x)))
|
||||||
|
|
||||||
if (process.env.TERMINUS_DEV) {
|
if (process.env.TERMINUS_DEV) {
|
||||||
nodeModule.globalPaths.unshift(path.dirname(require('electron').remote.app.getAppPath()))
|
nodeModule.globalPaths.unshift(path.dirname(require('electron').remote.app.getAppPath()))
|
||||||
@@ -156,7 +156,9 @@ export async function findPlugins (): Promise<PluginInfo[]> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
(window as any).installedPlugins = foundPlugins
|
foundPlugins.sort((a, b) => a.name > b.name ? 1 : -1)
|
||||||
|
|
||||||
|
;(window as any).installedPlugins = foundPlugins
|
||||||
return foundPlugins
|
return foundPlugins
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -176,7 +178,7 @@ export async function loadPlugins (foundPlugins: PluginInfo[], progress: Progres
|
|||||||
pluginModule['bootstrap'] = packageModule.bootstrap
|
pluginModule['bootstrap'] = packageModule.bootstrap
|
||||||
plugins.push(pluginModule)
|
plugins.push(pluginModule)
|
||||||
console.timeEnd(label)
|
console.timeEnd(label)
|
||||||
await (new Promise(x => setTimeout(x, 50)))
|
await new Promise(x => setTimeout(x, 50))
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`Could not load ${foundPlugin.name}:`, error)
|
console.error(`Could not load ${foundPlugin.name}:`, error)
|
||||||
}
|
}
|
||||||
|
@@ -10,6 +10,10 @@
|
|||||||
background-image: none;
|
background-image: none;
|
||||||
width: auto;
|
width: auto;
|
||||||
|
|
||||||
|
&.toast-error {
|
||||||
|
background-color: #BD362F;
|
||||||
|
}
|
||||||
|
|
||||||
&.toast-info {
|
&.toast-info {
|
||||||
background-color: #555;
|
background-color: #555;
|
||||||
}
|
}
|
||||||
|
@@ -6,6 +6,7 @@ module.exports = {
|
|||||||
target: 'node',
|
target: 'node',
|
||||||
entry: {
|
entry: {
|
||||||
'index.ignore': 'file-loader?name=index.html!pug-html-loader!' + path.resolve(__dirname, './index.pug'),
|
'index.ignore': 'file-loader?name=index.html!pug-html-loader!' + path.resolve(__dirname, './index.pug'),
|
||||||
|
sentry: path.resolve(__dirname, 'lib/sentry.ts'),
|
||||||
preload: path.resolve(__dirname, 'src/entry.preload.ts'),
|
preload: path.resolve(__dirname, 'src/entry.preload.ts'),
|
||||||
bundle: path.resolve(__dirname, 'src/entry.ts'),
|
bundle: path.resolve(__dirname, 'src/entry.ts'),
|
||||||
},
|
},
|
||||||
@@ -78,5 +79,8 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
new webpack.optimize.ModuleConcatenationPlugin(),
|
new webpack.optimize.ModuleConcatenationPlugin(),
|
||||||
|
new webpack.DefinePlugin({
|
||||||
|
'process.type': '"renderer"'
|
||||||
|
}),
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
@@ -45,5 +45,8 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
new webpack.optimize.ModuleConcatenationPlugin(),
|
new webpack.optimize.ModuleConcatenationPlugin(),
|
||||||
|
new webpack.DefinePlugin({
|
||||||
|
'process.type': '"main"',
|
||||||
|
}),
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
530
app/yarn.lock
530
app/yarn.lock
@@ -51,19 +51,17 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
tslib "^1.9.0"
|
tslib "^1.9.0"
|
||||||
|
|
||||||
"@ng-bootstrap/ng-bootstrap@^4.2.0":
|
"@ng-bootstrap/ng-bootstrap@^4.2.2":
|
||||||
version "4.2.0"
|
version "4.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-4.2.0.tgz#17152252834f3b5dc50742f3aafeaa9eb27a05f8"
|
resolved "https://registry.yarnpkg.com/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-4.2.2.tgz#a1c3a9576656cb4f793bbc3df56dfbdeb098f2fb"
|
||||||
integrity sha512-41Sg9RKgFGfnkWJhzPJIumYbib+GCTZ8N17q3PGfLORqtIN25KUFHGuO8EYOYd+zrDVYe8g4JYZoxQZvxaxm6w==
|
integrity sha512-v8QmC17bv9he5Ep6zutaI9aQ2w/2NqySP0fejOKe7cacKpGUqsLIakpyd2FD7mfZu7pSCCtHYpRWR+h6yq+Ngg==
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib "^1.9.0"
|
tslib "^1.9.0"
|
||||||
|
|
||||||
"@terminus-term/windows-process-tree@^0.2.4":
|
"@types/color-name@^1.1.1":
|
||||||
version "0.2.4"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/@terminus-term/windows-process-tree/-/windows-process-tree-0.2.4.tgz#558f33d5afd934b070aec78da2529fc4042cf90d"
|
resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
|
||||||
integrity sha512-FbquNhrFoe9EBwVITV9bqd/wukJLJSVI2pAzvM8dBvPP3/ErTiavZWU0W/J5av61SavJFDMkSiYVYL5NJe30zg==
|
integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
|
||||||
dependencies:
|
|
||||||
nan "^2.13.2"
|
|
||||||
|
|
||||||
"@types/mz@0.0.32":
|
"@types/mz@0.0.32":
|
||||||
version "0.0.32"
|
version "0.0.32"
|
||||||
@@ -72,11 +70,21 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
"@types/node@*", "@types/node@^10.12.18":
|
"@types/node@*", "@types/node@12.7.12":
|
||||||
|
version "12.7.12"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.12.tgz#7c6c571cc2f3f3ac4a59a5f2bd48f5bdbc8653cc"
|
||||||
|
integrity sha512-KPYGmfD0/b1eXurQ59fXD1GBzhSQfz6/lKBxkaHX9dKTzjXbK68Zt7yGUxUsCS1jeTy/8aL+d9JEr+S54mpkWQ==
|
||||||
|
|
||||||
|
"@types/node@^10.12.18":
|
||||||
version "10.12.18"
|
version "10.12.18"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67"
|
||||||
integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==
|
integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==
|
||||||
|
|
||||||
|
"@types/semver@^6.0.2":
|
||||||
|
version "6.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.2.0.tgz#d688d574400d96c5b0114968705366f431831e1a"
|
||||||
|
integrity sha512-1OzrNb4RuAzIT7wHSsgZRlMBlNsJl+do6UblR7JMW4oB7bbR+uBEYtUh7gEc/jM84GGilh68lSOokyM/zNUlBA==
|
||||||
|
|
||||||
JSONStream@^1.3.4, JSONStream@^1.3.5:
|
JSONStream@^1.3.4, JSONStream@^1.3.5:
|
||||||
version "1.3.5"
|
version "1.3.5"
|
||||||
resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
|
resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
|
||||||
@@ -95,7 +103,7 @@ accessibility-developer-tools@^2.11.0:
|
|||||||
resolved "https://registry.yarnpkg.com/accessibility-developer-tools/-/accessibility-developer-tools-2.12.0.tgz#3da0cce9d6ec6373964b84f35db7cfc3df7ab514"
|
resolved "https://registry.yarnpkg.com/accessibility-developer-tools/-/accessibility-developer-tools-2.12.0.tgz#3da0cce9d6ec6373964b84f35db7cfc3df7ab514"
|
||||||
integrity sha1-PaDM6dbsY3OWS4TzXbfPw996tRQ=
|
integrity sha1-PaDM6dbsY3OWS4TzXbfPw996tRQ=
|
||||||
|
|
||||||
agent-base@4, agent-base@^4.1.0:
|
agent-base@4, agent-base@^4.3.0:
|
||||||
version "4.3.0"
|
version "4.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee"
|
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee"
|
||||||
integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==
|
integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==
|
||||||
@@ -143,18 +151,26 @@ ansi-regex@^3.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
|
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
|
||||||
integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
|
integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
|
||||||
|
|
||||||
ansi-regex@^4.1.0:
|
ansi-regex@^5.0.0:
|
||||||
version "4.1.0"
|
version "5.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
|
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
|
||||||
integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
|
integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
|
||||||
|
|
||||||
ansi-styles@^3.2.0, ansi-styles@^3.2.1:
|
ansi-styles@^3.2.1:
|
||||||
version "3.2.1"
|
version "3.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
||||||
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
|
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
|
||||||
dependencies:
|
dependencies:
|
||||||
color-convert "^1.9.0"
|
color-convert "^1.9.0"
|
||||||
|
|
||||||
|
ansi-styles@^4.0.0:
|
||||||
|
version "4.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.0.tgz#5681f0dcf7ae5880a7841d8831c4724ed9cc0172"
|
||||||
|
integrity sha512-7kFQgnEaMdRtwf6uSfUnVr9gSGC7faurn+J/Mv90/W+iTtN0405/nLdopfMWwchyxhbGYl6TC4Sccn9TUkGAgg==
|
||||||
|
dependencies:
|
||||||
|
"@types/color-name" "^1.1.1"
|
||||||
|
color-convert "^2.0.1"
|
||||||
|
|
||||||
ansicolors@~0.3.2:
|
ansicolors@~0.3.2:
|
||||||
version "0.3.2"
|
version "0.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979"
|
resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979"
|
||||||
@@ -194,9 +210,9 @@ are-we-there-yet@~1.1.2:
|
|||||||
readable-stream "^2.0.6"
|
readable-stream "^2.0.6"
|
||||||
|
|
||||||
argparse@^1.0.7:
|
argparse@^1.0.7:
|
||||||
version "1.0.9"
|
version "1.0.10"
|
||||||
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
|
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
|
||||||
integrity sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=
|
integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
|
||||||
dependencies:
|
dependencies:
|
||||||
sprintf-js "~1.0.2"
|
sprintf-js "~1.0.2"
|
||||||
|
|
||||||
@@ -255,13 +271,12 @@ bin-links@^1.1.2:
|
|||||||
graceful-fs "^4.1.11"
|
graceful-fs "^4.1.11"
|
||||||
write-file-atomic "^2.3.0"
|
write-file-atomic "^2.3.0"
|
||||||
|
|
||||||
bl@^1.0.0:
|
bl@^3.0.0:
|
||||||
version "1.2.2"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c"
|
resolved "https://registry.yarnpkg.com/bl/-/bl-3.0.0.tgz#3611ec00579fd18561754360b21e9f784500ff88"
|
||||||
integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==
|
integrity sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==
|
||||||
dependencies:
|
dependencies:
|
||||||
readable-stream "^2.3.5"
|
readable-stream "^3.0.1"
|
||||||
safe-buffer "^5.1.1"
|
|
||||||
|
|
||||||
block-stream@*:
|
block-stream@*:
|
||||||
version "0.0.9"
|
version "0.0.9"
|
||||||
@@ -270,23 +285,11 @@ block-stream@*:
|
|||||||
dependencies:
|
dependencies:
|
||||||
inherits "~2.0.0"
|
inherits "~2.0.0"
|
||||||
|
|
||||||
bluebird-lst@^1.0.6, bluebird-lst@^1.0.7:
|
|
||||||
version "1.0.8"
|
|
||||||
resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.8.tgz#61b572e8b3eb57e0fff676a0e54566d93597e6a4"
|
|
||||||
integrity sha512-InUDOaBaIjIobOa3O4YRAbFgff907uTJZXW0m0rhk3zhVZ4GvsmdCLEAKC1CTWTtUWCM8iWTTfFX9N/xQR/etw==
|
|
||||||
dependencies:
|
|
||||||
bluebird "^3.5.4"
|
|
||||||
|
|
||||||
bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.3:
|
bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.3:
|
||||||
version "3.5.5"
|
version "3.5.5"
|
||||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f"
|
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f"
|
||||||
integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==
|
integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==
|
||||||
|
|
||||||
bluebird@^3.5.4:
|
|
||||||
version "3.5.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.4.tgz#d6cc661595de30d5b3af5fcedd3c0b3ef6ec5714"
|
|
||||||
integrity sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==
|
|
||||||
|
|
||||||
boxen@^1.2.1:
|
boxen@^1.2.1:
|
||||||
version "1.3.0"
|
version "1.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b"
|
resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b"
|
||||||
@@ -308,37 +311,17 @@ brace-expansion@^1.1.7:
|
|||||||
balanced-match "^1.0.0"
|
balanced-match "^1.0.0"
|
||||||
concat-map "0.0.1"
|
concat-map "0.0.1"
|
||||||
|
|
||||||
buffer-alloc-unsafe@^1.1.0:
|
|
||||||
version "1.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
|
|
||||||
integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
|
|
||||||
|
|
||||||
buffer-alloc@^1.2.0:
|
|
||||||
version "1.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
|
|
||||||
integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
|
|
||||||
dependencies:
|
|
||||||
buffer-alloc-unsafe "^1.1.0"
|
|
||||||
buffer-fill "^1.0.0"
|
|
||||||
|
|
||||||
buffer-fill@^1.0.0:
|
|
||||||
version "1.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
|
|
||||||
integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
|
|
||||||
|
|
||||||
buffer-from@^1.0.0:
|
buffer-from@^1.0.0:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
|
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
|
||||||
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
|
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
|
||||||
|
|
||||||
builder-util-runtime@~8.1.0:
|
builder-util-runtime@8.4.0:
|
||||||
version "8.1.1"
|
version "8.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.1.1.tgz#f2f6fc43e33d26892bd491667fc746ad69bccc50"
|
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.4.0.tgz#3163fffc078e6b8f3dd5b6eb12a8345573590682"
|
||||||
integrity sha512-+ieS4PMB33vVE2S3ZNWBEQJ1zKmAs/agrBdh7XadE1lKLjrH4aXYuOh9OOGdxqIRldhlhNBaF+yKMMEFOdNVig==
|
integrity sha512-CJB/eKfPf2vHrkmirF5eicVnbDCkMBbwd5tRYlTlgud16zFeqD7QmrVUAOEXdnsrcNkiLg9dbuUsQKtl/AwsYQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
bluebird-lst "^1.0.6"
|
|
||||||
debug "^4.1.1"
|
debug "^4.1.1"
|
||||||
fs-extra-p "^7.0.0"
|
|
||||||
sax "^1.2.4"
|
sax "^1.2.4"
|
||||||
|
|
||||||
builtins@^1.0.3:
|
builtins@^1.0.3:
|
||||||
@@ -410,7 +393,7 @@ chalk@^2.0.1:
|
|||||||
escape-string-regexp "^1.0.5"
|
escape-string-regexp "^1.0.5"
|
||||||
supports-color "^5.3.0"
|
supports-color "^5.3.0"
|
||||||
|
|
||||||
chownr@^1.0.1, chownr@^1.1.1:
|
chownr@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
|
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
|
||||||
integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
|
integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
|
||||||
@@ -464,14 +447,14 @@ cliui@^4.0.0:
|
|||||||
strip-ansi "^4.0.0"
|
strip-ansi "^4.0.0"
|
||||||
wrap-ansi "^2.0.0"
|
wrap-ansi "^2.0.0"
|
||||||
|
|
||||||
cliui@^5.0.0:
|
cliui@^6.0.0:
|
||||||
version "5.0.0"
|
version "6.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
|
resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
|
||||||
integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
|
integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
string-width "^3.1.0"
|
string-width "^4.2.0"
|
||||||
strip-ansi "^5.2.0"
|
strip-ansi "^6.0.0"
|
||||||
wrap-ansi "^5.1.0"
|
wrap-ansi "^6.2.0"
|
||||||
|
|
||||||
clone@^1.0.2:
|
clone@^1.0.2:
|
||||||
version "1.0.4"
|
version "1.0.4"
|
||||||
@@ -498,11 +481,23 @@ color-convert@^1.9.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
color-name "1.1.3"
|
color-name "1.1.3"
|
||||||
|
|
||||||
|
color-convert@^2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
|
||||||
|
integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
|
||||||
|
dependencies:
|
||||||
|
color-name "~1.1.4"
|
||||||
|
|
||||||
color-name@1.1.3:
|
color-name@1.1.3:
|
||||||
version "1.1.3"
|
version "1.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
|
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
|
||||||
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
|
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
|
||||||
|
|
||||||
|
color-name@~1.1.4:
|
||||||
|
version "1.1.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
|
||||||
|
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||||
|
|
||||||
colors@^1.1.2:
|
colors@^1.1.2:
|
||||||
version "1.3.3"
|
version "1.3.3"
|
||||||
resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d"
|
resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d"
|
||||||
@@ -667,12 +662,12 @@ decode-uri-component@^0.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
|
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
|
||||||
integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
|
integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
|
||||||
|
|
||||||
decompress-response@^3.3.0:
|
decompress-response@^4.2.0:
|
||||||
version "3.3.0"
|
version "4.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
|
resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986"
|
||||||
integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=
|
integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==
|
||||||
dependencies:
|
dependencies:
|
||||||
mimic-response "^1.0.0"
|
mimic-response "^2.0.0"
|
||||||
|
|
||||||
deep-extend@^0.6.0:
|
deep-extend@^0.6.0:
|
||||||
version "0.6.0"
|
version "0.6.0"
|
||||||
@@ -803,25 +798,24 @@ electron-localshortcut@^3.1.0:
|
|||||||
keyboardevent-from-electron-accelerator "^1.1.0"
|
keyboardevent-from-electron-accelerator "^1.1.0"
|
||||||
keyboardevents-areequal "^0.2.1"
|
keyboardevents-areequal "^0.2.1"
|
||||||
|
|
||||||
electron-updater@^4.0.6:
|
electron-updater@^4.2.0:
|
||||||
version "4.0.6"
|
version "4.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-4.0.6.tgz#9c4f495ae0e80bf4425e3e1b801c5ed2ab933c2d"
|
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-4.2.0.tgz#f9ecfc657f65ead737d42b9efecf628d3756b550"
|
||||||
integrity sha512-JPGLME6fxJcHG8hX7HWFl6Aew6iVm0DkcrENreKa5SUJCHG+uUaAhxDGDt+YGcNkyx1uJ6eBGMvFxDTLUv67pg==
|
integrity sha512-GuS3g7HDh17x/SaFjxjswlWUaKHczksYkV2Xc5CKj/bZH0YCvTSHtOmnBAdAmCk99u/71p3zP8f0jIqDfGcjww==
|
||||||
dependencies:
|
dependencies:
|
||||||
bluebird-lst "^1.0.6"
|
"@types/semver" "^6.0.2"
|
||||||
builder-util-runtime "~8.1.0"
|
builder-util-runtime "8.4.0"
|
||||||
fs-extra-p "^7.0.0"
|
fs-extra "^8.1.0"
|
||||||
js-yaml "^3.12.0"
|
js-yaml "^3.13.1"
|
||||||
lazy-val "^1.0.3"
|
lazy-val "^1.0.4"
|
||||||
lodash.isequal "^4.5.0"
|
lodash.isequal "^4.5.0"
|
||||||
pako "^1.0.7"
|
pako "^1.0.10"
|
||||||
semver "^5.6.0"
|
semver "^6.3.0"
|
||||||
source-map-support "^0.5.9"
|
|
||||||
|
|
||||||
emoji-regex@^7.0.1:
|
emoji-regex@^8.0.0:
|
||||||
version "7.0.3"
|
version "8.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
|
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
|
||||||
integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
|
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
|
||||||
|
|
||||||
encoding@^0.1.11:
|
encoding@^0.1.11:
|
||||||
version "0.1.12"
|
version "0.1.12"
|
||||||
@@ -837,6 +831,13 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
once "^1.4.0"
|
once "^1.4.0"
|
||||||
|
|
||||||
|
end-of-stream@^1.4.1:
|
||||||
|
version "1.4.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
|
||||||
|
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
|
||||||
|
dependencies:
|
||||||
|
once "^1.4.0"
|
||||||
|
|
||||||
env-paths@^1.0.0:
|
env-paths@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0"
|
resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0"
|
||||||
@@ -943,6 +944,14 @@ find-up@^3.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
locate-path "^3.0.0"
|
locate-path "^3.0.0"
|
||||||
|
|
||||||
|
find-up@^4.1.0:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
|
||||||
|
integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
|
||||||
|
dependencies:
|
||||||
|
locate-path "^5.0.0"
|
||||||
|
path-exists "^4.0.0"
|
||||||
|
|
||||||
flush-write-stream@^1.0.0:
|
flush-write-stream@^1.0.0:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
|
resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
|
||||||
@@ -951,10 +960,10 @@ flush-write-stream@^1.0.0:
|
|||||||
inherits "^2.0.3"
|
inherits "^2.0.3"
|
||||||
readable-stream "^2.3.6"
|
readable-stream "^2.3.6"
|
||||||
|
|
||||||
fontmanager-redux@0.3.2:
|
fontmanager-redux@0.4.0:
|
||||||
version "0.3.2"
|
version "0.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/fontmanager-redux/-/fontmanager-redux-0.3.2.tgz#e5c8d8dc8fda98629eaef4201a27df9e56a122f4"
|
resolved "https://registry.yarnpkg.com/fontmanager-redux/-/fontmanager-redux-0.4.0.tgz#f4c8232a2e2adc6e996a9d4516ab522d1a5da067"
|
||||||
integrity sha512-NWmTbYfDijrx8qLJ2+O2VgYKhdfsMy/ec+Qf2DGxoLJDZHaRhBKd2Eufh4fFmfJUAwhzrkIgbKJsNT/IYJDbaA==
|
integrity sha512-ZXo6KsOfU0+kvyKz49fpe1T+XIvFuWliQSSjLhMnDDlWIBCpIKN1fwTRIgY9guwzKMVym6uKXbeeqwpqVU1+Vg==
|
||||||
|
|
||||||
forever-agent@~0.6.1:
|
forever-agent@~0.6.1:
|
||||||
version "0.6.1"
|
version "0.6.1"
|
||||||
@@ -991,20 +1000,12 @@ fs-constants@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
|
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
|
||||||
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
|
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
|
||||||
|
|
||||||
fs-extra-p@^7.0.0:
|
fs-extra@^8.1.0:
|
||||||
version "7.0.1"
|
version "8.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-7.0.1.tgz#4eec0b6dfa150fa90f6ddd773b4fb1d55cad54e3"
|
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
|
||||||
integrity sha512-yhd2OV0HnHt2oitlp+X9hl2ReX4X/7kQeL7/72qzPHTZj5eUPGzAKOvEglU02Fa1OeG2rSy/aKB4WGVaLiF8tw==
|
integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
|
||||||
dependencies:
|
dependencies:
|
||||||
bluebird-lst "^1.0.7"
|
graceful-fs "^4.2.0"
|
||||||
fs-extra "^7.0.1"
|
|
||||||
|
|
||||||
fs-extra@^7.0.1:
|
|
||||||
version "7.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
|
|
||||||
integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
|
|
||||||
dependencies:
|
|
||||||
graceful-fs "^4.1.2"
|
|
||||||
jsonfile "^4.0.0"
|
jsonfile "^4.0.0"
|
||||||
universalify "^0.1.0"
|
universalify "^0.1.0"
|
||||||
|
|
||||||
@@ -1152,11 +1153,16 @@ got@^6.7.1:
|
|||||||
unzip-response "^2.0.1"
|
unzip-response "^2.0.1"
|
||||||
url-parse-lax "^1.0.0"
|
url-parse-lax "^1.0.0"
|
||||||
|
|
||||||
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
|
graceful-fs@^4.1.11, graceful-fs@^4.1.15:
|
||||||
version "4.1.15"
|
version "4.1.15"
|
||||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
|
||||||
integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
|
integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
|
||||||
|
|
||||||
|
graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0:
|
||||||
|
version "4.2.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02"
|
||||||
|
integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==
|
||||||
|
|
||||||
har-schema@^2.0.0:
|
har-schema@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
|
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
|
||||||
@@ -1213,11 +1219,11 @@ http-signature@~1.2.0:
|
|||||||
sshpk "^1.7.0"
|
sshpk "^1.7.0"
|
||||||
|
|
||||||
https-proxy-agent@^2.2.1:
|
https-proxy-agent@^2.2.1:
|
||||||
version "2.2.1"
|
version "2.2.4"
|
||||||
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0"
|
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b"
|
||||||
integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==
|
integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==
|
||||||
dependencies:
|
dependencies:
|
||||||
agent-base "^4.1.0"
|
agent-base "^4.3.0"
|
||||||
debug "^3.1.0"
|
debug "^3.1.0"
|
||||||
|
|
||||||
humanize-ms@^1.2.1:
|
humanize-ms@^1.2.1:
|
||||||
@@ -1344,6 +1350,11 @@ is-fullwidth-code-point@^2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
|
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
|
||||||
integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
|
integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
|
||||||
|
|
||||||
|
is-fullwidth-code-point@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
|
||||||
|
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
|
||||||
|
|
||||||
is-installed-globally@^0.1.0:
|
is-installed-globally@^0.1.0:
|
||||||
version "0.1.0"
|
version "0.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80"
|
resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80"
|
||||||
@@ -1409,7 +1420,7 @@ isstream@~0.1.2:
|
|||||||
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
||||||
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
|
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
|
||||||
|
|
||||||
js-yaml@3.13.1, js-yaml@^3.12.0:
|
js-yaml@3.13.1, js-yaml@^3.13.1:
|
||||||
version "3.13.1"
|
version "3.13.1"
|
||||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
|
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
|
||||||
integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
|
integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
|
||||||
@@ -1474,13 +1485,13 @@ keyboardevents-areequal@^0.2.1:
|
|||||||
resolved "https://registry.yarnpkg.com/keyboardevents-areequal/-/keyboardevents-areequal-0.2.2.tgz#88191ec738ce9f7591c25e9056de928b40277194"
|
resolved "https://registry.yarnpkg.com/keyboardevents-areequal/-/keyboardevents-areequal-0.2.2.tgz#88191ec738ce9f7591c25e9056de928b40277194"
|
||||||
integrity sha512-Nv+Kr33T0mEjxR500q+I6IWisOQ0lK1GGOncV0kWE6n4KFmpcu7RUX5/2B0EUtX51Cb0HjZ9VJsSY3u4cBa0kw==
|
integrity sha512-Nv+Kr33T0mEjxR500q+I6IWisOQ0lK1GGOncV0kWE6n4KFmpcu7RUX5/2B0EUtX51Cb0HjZ9VJsSY3u4cBa0kw==
|
||||||
|
|
||||||
keytar@^4.7.0:
|
keytar@^5.0.0:
|
||||||
version "4.11.0"
|
version "5.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/keytar/-/keytar-4.11.0.tgz#891569045b287a0dabe69320e2381e059b02363f"
|
resolved "https://registry.yarnpkg.com/keytar/-/keytar-5.0.0.tgz#c89b6b7a4608fd7af633d9f8474b1a7eb97cbe6f"
|
||||||
integrity sha512-cGn2xd4NY0yCBrU5zQ/lwIagP1UBOhUEemi6iSJU2gshN1RHkxHekSdLUji9IWNo5B1Va/iwXXWzGD2p8ziqfQ==
|
integrity sha512-a5UheK59YOlJf9i+2Osaj/kkH6mK0RCHVMtJ84u6ZfbfRIbOJ/H4b5VlOF/LgNHF6s78dRSBzZnvIuPiBKv6wg==
|
||||||
dependencies:
|
dependencies:
|
||||||
nan "2.14.0"
|
nan "2.14.0"
|
||||||
prebuild-install "5.3.0"
|
prebuild-install "5.3.3"
|
||||||
|
|
||||||
latest-version@^3.0.0:
|
latest-version@^3.0.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
@@ -1494,7 +1505,7 @@ lazy-property@~1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147"
|
resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147"
|
||||||
integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc=
|
integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc=
|
||||||
|
|
||||||
lazy-val@^1.0.3:
|
lazy-val@^1.0.4:
|
||||||
version "1.0.4"
|
version "1.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.4.tgz#882636a7245c2cfe6e0a4e3ba6c5d68a137e5c65"
|
resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.4.tgz#882636a7245c2cfe6e0a4e3ba6c5d68a137e5c65"
|
||||||
integrity sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q==
|
integrity sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q==
|
||||||
@@ -1656,6 +1667,13 @@ locate-path@^3.0.0:
|
|||||||
p-locate "^3.0.0"
|
p-locate "^3.0.0"
|
||||||
path-exists "^3.0.0"
|
path-exists "^3.0.0"
|
||||||
|
|
||||||
|
locate-path@^5.0.0:
|
||||||
|
version "5.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
|
||||||
|
integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
|
||||||
|
dependencies:
|
||||||
|
p-locate "^4.1.0"
|
||||||
|
|
||||||
lock-verify@^2.0.2, lock-verify@^2.1.0:
|
lock-verify@^2.0.2, lock-verify@^2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.1.0.tgz#fff4c918b8db9497af0c5fa7f6d71555de3ceb47"
|
resolved "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.1.0.tgz#fff4c918b8db9497af0c5fa7f6d71555de3ceb47"
|
||||||
@@ -1734,10 +1752,10 @@ lru-cache@^5.1.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
yallist "^3.0.2"
|
yallist "^3.0.2"
|
||||||
|
|
||||||
macos-native-processlist@^1.0.1:
|
macos-native-processlist@^1.0.2:
|
||||||
version "1.0.1"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/macos-native-processlist/-/macos-native-processlist-1.0.1.tgz#df48bbd114554bd69e7c2c76f976836ef8270ca8"
|
resolved "https://registry.yarnpkg.com/macos-native-processlist/-/macos-native-processlist-1.0.2.tgz#78767e4fdea3eea782bbf063dac8c1e2420786dc"
|
||||||
integrity sha512-Kn8EUW8xOM+06GFMp8I2fxIK8iSaR/fraAU5ddfnKVRn6/+dmQ5VGBSG4k6ce3u/EOQxd/7paBCAz17nXqH0cg==
|
integrity sha512-ShX+vFA44eaJ9/JCPTrhL0j4KLVKrYjeTQCFuR0kx7qWxETBDbFX8I3WKKXeALMtWSD+F4TDpza2mwCcE2tWAw==
|
||||||
dependencies:
|
dependencies:
|
||||||
nan "^2.13.2"
|
nan "^2.13.2"
|
||||||
|
|
||||||
@@ -1794,10 +1812,10 @@ mimic-fn@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
|
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
|
||||||
integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
|
integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
|
||||||
|
|
||||||
mimic-response@^1.0.0:
|
mimic-response@^2.0.0:
|
||||||
version "1.0.1"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
|
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.0.0.tgz#996a51c60adf12cb8a87d7fb8ef24c2f3d5ebb46"
|
||||||
integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
|
integrity sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ==
|
||||||
|
|
||||||
minimatch@^3.0.4:
|
minimatch@^3.0.4:
|
||||||
version "3.0.4"
|
version "3.0.4"
|
||||||
@@ -1871,16 +1889,11 @@ ms@2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||||
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
|
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
|
||||||
|
|
||||||
ms@^2.0.0:
|
ms@^2.0.0, ms@^2.1.1:
|
||||||
version "2.1.2"
|
version "2.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
|
||||||
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
|
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
|
||||||
|
|
||||||
ms@^2.1.1:
|
|
||||||
version "2.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
|
|
||||||
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
|
|
||||||
|
|
||||||
mute-stream@~0.0.4:
|
mute-stream@~0.0.4:
|
||||||
version "0.0.8"
|
version "0.0.8"
|
||||||
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
|
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
|
||||||
@@ -1895,7 +1908,7 @@ mz@^2.7.0:
|
|||||||
object-assign "^4.0.1"
|
object-assign "^4.0.1"
|
||||||
thenify-all "^1.0.0"
|
thenify-all "^1.0.0"
|
||||||
|
|
||||||
nan@2.14.0, nan@^2.13.2:
|
nan@2.14.0, nan@^2.13.2, nan@^2.14.0:
|
||||||
version "2.14.0"
|
version "2.14.0"
|
||||||
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
|
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
|
||||||
integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
|
integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
|
||||||
@@ -1905,17 +1918,17 @@ napi-build-utils@^1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.1.tgz#1381a0f92c39d66bf19852e7873432fc2123e508"
|
resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.1.tgz#1381a0f92c39d66bf19852e7873432fc2123e508"
|
||||||
integrity sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==
|
integrity sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==
|
||||||
|
|
||||||
ngx-toastr@^10.0.4:
|
ngx-toastr@^10.2.0:
|
||||||
version "10.0.4"
|
version "10.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/ngx-toastr/-/ngx-toastr-10.0.4.tgz#cbc61b8d67d748194ea7a28542b01e39bf1fc6c2"
|
resolved "https://registry.yarnpkg.com/ngx-toastr/-/ngx-toastr-10.2.0.tgz#8a79008de0b1c013f90120a53e0355af5762e969"
|
||||||
integrity sha512-iN+zr2Msae5wV334c1dytRhSYNdUz467jwv1NE91lMmllsMkpUzZlu8VdFCeTFt+/R4TWzz19xBRqhpp+OAuVA==
|
integrity sha512-6ASr5bcvQmtNKb4D2VEsQjCXyROq6GwberBWO0bVt+xcBYPUea4aRTgX8in9apX9buaTafzG+h3HlnIraspoPg==
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib "^1.9.0"
|
tslib "^1.9.0"
|
||||||
|
|
||||||
node-abi@^2.7.0:
|
node-abi@^2.13.0, node-abi@^2.7.0:
|
||||||
version "2.9.0"
|
version "2.13.0"
|
||||||
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.9.0.tgz#ae4075b298dab2d92dd1e22c48ccc7ffd7f06200"
|
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.13.0.tgz#e2f2ec444d0aca3ea1b3874b6de41d1665828f63"
|
||||||
integrity sha512-jmEOvv0eanWjhX8dX1pmjb7oJl1U1oR4FOh0b2GnvALwSYoOdU7sj+kLDSAyjo4pfC9aj/IxkloxdLJQhSSQBA==
|
integrity sha512-9HrZGFVTR5SOu3PZAnAY2hLO36aW1wmA+FDsVkr85BTST32TLCA1H/AEcatVRAsWLyXS3bqUDYCAjq5/QGuSTA==
|
||||||
dependencies:
|
dependencies:
|
||||||
semver "^5.4.1"
|
semver "^5.4.1"
|
||||||
|
|
||||||
@@ -1963,12 +1976,12 @@ node-gyp@^4.0.0:
|
|||||||
tar "^4.4.8"
|
tar "^4.4.8"
|
||||||
which "1"
|
which "1"
|
||||||
|
|
||||||
node-pty@^0.9.0-beta19:
|
node-pty@^0.10.0-beta2:
|
||||||
version "0.9.0-beta19"
|
version "0.10.0-beta3"
|
||||||
resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-0.9.0-beta19.tgz#0fd381b2006f4665c4c2ee0509219e591842371a"
|
resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-0.10.0-beta3.tgz#a33c9fc67c9e4d4f124111e1da2a72b0783008e7"
|
||||||
integrity sha512-MkKEvBnauGnzgXNr/oaoWQLVXm1gheIKZs4YQp8883ZiETmbEnpSvD0FU3bELcPXG5VFPRqIGsQJ4KUMBLzkPA==
|
integrity sha512-j7MoJ3K999jrT9gAVs7JvM/skAQXQITrZK/PhL9B4W4GAPkANKwdu9uEtNvYionQ9dV8gRGte7lg9D2cRDdAiA==
|
||||||
dependencies:
|
dependencies:
|
||||||
nan "^2.13.2"
|
nan "^2.14.0"
|
||||||
|
|
||||||
noop-logger@^0.1.1:
|
noop-logger@^0.1.1:
|
||||||
version "0.1.1"
|
version "0.1.1"
|
||||||
@@ -2104,7 +2117,7 @@ npm-user-validate@~1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.0.tgz#8ceca0f5cea04d4e93519ef72d0557a75122e951"
|
resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.0.tgz#8ceca0f5cea04d4e93519ef72d0557a75122e951"
|
||||||
integrity sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE=
|
integrity sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE=
|
||||||
|
|
||||||
npm@~6.9.0:
|
npm@6.9.0:
|
||||||
version "6.9.0"
|
version "6.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/npm/-/npm-6.9.0.tgz#5296720486814a64a7fb082de00c4b5cfd11211f"
|
resolved "https://registry.yarnpkg.com/npm/-/npm-6.9.0.tgz#5296720486814a64a7fb082de00c4b5cfd11211f"
|
||||||
integrity sha512-91V+zB5hDxO+Jyp2sUKS7juHlIM95dGQxTeQtmZI1nAI/7kjWXFipPrtwwKjhyKmV4GsS2LzJhrxRjGWsU9z/w==
|
integrity sha512-91V+zB5hDxO+Jyp2sUKS7juHlIM95dGQxTeQtmZI1nAI/7kjWXFipPrtwwKjhyKmV4GsS2LzJhrxRjGWsU9z/w==
|
||||||
@@ -2255,7 +2268,7 @@ opener@^1.5.1:
|
|||||||
resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed"
|
resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed"
|
||||||
integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==
|
integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==
|
||||||
|
|
||||||
os-homedir@^1.0.0, os-homedir@^1.0.1:
|
os-homedir@^1.0.0:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
|
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
|
||||||
integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
|
integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
|
||||||
@@ -2301,6 +2314,13 @@ p-limit@^2.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
p-try "^2.0.0"
|
p-try "^2.0.0"
|
||||||
|
|
||||||
|
p-limit@^2.2.0:
|
||||||
|
version "2.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537"
|
||||||
|
integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==
|
||||||
|
dependencies:
|
||||||
|
p-try "^2.0.0"
|
||||||
|
|
||||||
p-locate@^2.0.0:
|
p-locate@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
|
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
|
||||||
@@ -2315,6 +2335,13 @@ p-locate@^3.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
p-limit "^2.0.0"
|
p-limit "^2.0.0"
|
||||||
|
|
||||||
|
p-locate@^4.1.0:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
|
||||||
|
integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
|
||||||
|
dependencies:
|
||||||
|
p-limit "^2.2.0"
|
||||||
|
|
||||||
p-try@^1.0.0:
|
p-try@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
|
resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
|
||||||
@@ -2368,7 +2395,7 @@ pacote@^9.1.0, pacote@^9.2.3, pacote@^9.5.0:
|
|||||||
unique-filename "^1.1.1"
|
unique-filename "^1.1.1"
|
||||||
which "^1.3.1"
|
which "^1.3.1"
|
||||||
|
|
||||||
pako@^1.0.7:
|
pako@^1.0.10:
|
||||||
version "1.0.10"
|
version "1.0.10"
|
||||||
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732"
|
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732"
|
||||||
integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==
|
integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==
|
||||||
@@ -2387,6 +2414,11 @@ path-exists@^3.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
|
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
|
||||||
integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
|
integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
|
||||||
|
|
||||||
|
path-exists@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
|
||||||
|
integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
|
||||||
|
|
||||||
path-is-absolute@^1.0.0:
|
path-is-absolute@^1.0.0:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
||||||
@@ -2432,10 +2464,10 @@ pkg-up@^2.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
find-up "^2.1.0"
|
find-up "^2.1.0"
|
||||||
|
|
||||||
prebuild-install@5.3.0:
|
prebuild-install@5.3.3:
|
||||||
version "5.3.0"
|
version "5.3.3"
|
||||||
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.0.tgz#58b4d8344e03590990931ee088dd5401b03004c8"
|
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.3.tgz#ef4052baac60d465f5ba6bf003c9c1de79b9da8e"
|
||||||
integrity sha512-aaLVANlj4HgZweKttFNUVNRxDukytuIuxeK2boIMHjagNJCiVKWFsKF4tCE3ql3GbrD2tExPQ7/pwtEJcHNZeg==
|
integrity sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g==
|
||||||
dependencies:
|
dependencies:
|
||||||
detect-libc "^1.0.3"
|
detect-libc "^1.0.3"
|
||||||
expand-template "^2.0.3"
|
expand-template "^2.0.3"
|
||||||
@@ -2446,11 +2478,10 @@ prebuild-install@5.3.0:
|
|||||||
node-abi "^2.7.0"
|
node-abi "^2.7.0"
|
||||||
noop-logger "^0.1.1"
|
noop-logger "^0.1.1"
|
||||||
npmlog "^4.0.1"
|
npmlog "^4.0.1"
|
||||||
os-homedir "^1.0.1"
|
pump "^3.0.0"
|
||||||
pump "^2.0.1"
|
|
||||||
rc "^1.2.7"
|
rc "^1.2.7"
|
||||||
simple-get "^2.7.0"
|
simple-get "^3.0.3"
|
||||||
tar-fs "^1.13.0"
|
tar-fs "^2.0.0"
|
||||||
tunnel-agent "^0.6.0"
|
tunnel-agent "^0.6.0"
|
||||||
which-pm-runs "^1.0.0"
|
which-pm-runs "^1.0.0"
|
||||||
|
|
||||||
@@ -2516,15 +2547,7 @@ psl@^1.1.24:
|
|||||||
resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.32.tgz#3f132717cf2f9c169724b2b6caf373cf694198db"
|
resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.32.tgz#3f132717cf2f9c169724b2b6caf373cf694198db"
|
||||||
integrity sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g==
|
integrity sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g==
|
||||||
|
|
||||||
pump@^1.0.0:
|
pump@^2.0.0:
|
||||||
version "1.0.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954"
|
|
||||||
integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==
|
|
||||||
dependencies:
|
|
||||||
end-of-stream "^1.1.0"
|
|
||||||
once "^1.3.1"
|
|
||||||
|
|
||||||
pump@^2.0.0, pump@^2.0.1:
|
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
|
resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
|
||||||
integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
|
integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
|
||||||
@@ -2644,7 +2667,7 @@ read@1, read@~1.0.1, read@~1.0.7:
|
|||||||
dependencies:
|
dependencies:
|
||||||
mute-stream "~0.0.4"
|
mute-stream "~0.0.4"
|
||||||
|
|
||||||
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
|
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6:
|
||||||
version "2.3.6"
|
version "2.3.6"
|
||||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
|
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
|
||||||
integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
|
integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
|
||||||
@@ -2657,7 +2680,7 @@ read@1, read@~1.0.1, read@~1.0.7:
|
|||||||
string_decoder "~1.1.1"
|
string_decoder "~1.1.1"
|
||||||
util-deprecate "~1.0.1"
|
util-deprecate "~1.0.1"
|
||||||
|
|
||||||
readable-stream@^3.1.1:
|
readable-stream@^3.0.1, readable-stream@^3.1.1:
|
||||||
version "3.4.0"
|
version "3.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc"
|
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc"
|
||||||
integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==
|
integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==
|
||||||
@@ -2778,15 +2801,15 @@ run-queue@^1.0.0, run-queue@^1.0.3:
|
|||||||
dependencies:
|
dependencies:
|
||||||
aproba "^1.1.1"
|
aproba "^1.1.1"
|
||||||
|
|
||||||
rxjs-compat@^6.5.2:
|
rxjs-compat@^6.5.4:
|
||||||
version "6.5.2"
|
version "6.5.4"
|
||||||
resolved "https://registry.yarnpkg.com/rxjs-compat/-/rxjs-compat-6.5.2.tgz#e469070adf6260bdad195e9d4a39f444ae28b458"
|
resolved "https://registry.yarnpkg.com/rxjs-compat/-/rxjs-compat-6.5.4.tgz#03825692af3fe363e04c43f41ff4113d76bbd305"
|
||||||
integrity sha512-TRMkTp4FgSxE2HtGvxmgRukh3JqdFM7ejAj1Ti/VdodbPGfWvZR5+KdLKRV9jVDFyu2SknM8RD+PR54KGnoLjg==
|
integrity sha512-rkn+lbOHUQOurdd74J/hjmDsG9nFx0z66fvnbs8M95nrtKvNqCKdk7iZqdY51CGmDemTQk+kUPy4s8HVOHtkfA==
|
||||||
|
|
||||||
rxjs@^6.5.2:
|
rxjs@^6.5.4:
|
||||||
version "6.5.2"
|
version "6.5.4"
|
||||||
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7"
|
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c"
|
||||||
integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==
|
integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib "^1.9.0"
|
tslib "^1.9.0"
|
||||||
|
|
||||||
@@ -2813,9 +2836,14 @@ semver-diff@^2.0.0:
|
|||||||
semver "^5.0.3"
|
semver "^5.0.3"
|
||||||
|
|
||||||
"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
|
"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
|
||||||
version "5.7.0"
|
version "5.7.1"
|
||||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
|
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
||||||
integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==
|
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
||||||
|
|
||||||
|
semver@^6.3.0:
|
||||||
|
version "6.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
|
||||||
|
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
|
||||||
|
|
||||||
semver@~5.3.0:
|
semver@~5.3.0:
|
||||||
version "5.3.0"
|
version "5.3.0"
|
||||||
@@ -2857,12 +2885,12 @@ simple-concat@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6"
|
resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6"
|
||||||
integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=
|
integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=
|
||||||
|
|
||||||
simple-get@^2.7.0:
|
simple-get@^3.0.3:
|
||||||
version "2.8.1"
|
version "3.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d"
|
resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3"
|
||||||
integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==
|
integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==
|
||||||
dependencies:
|
dependencies:
|
||||||
decompress-response "^3.3.0"
|
decompress-response "^4.2.0"
|
||||||
once "^1.3.1"
|
once "^1.3.1"
|
||||||
simple-concat "^1.0.0"
|
simple-concat "^1.0.0"
|
||||||
|
|
||||||
@@ -2910,19 +2938,6 @@ sorted-union-stream@~2.1.3:
|
|||||||
from2 "^1.3.0"
|
from2 "^1.3.0"
|
||||||
stream-iterate "^1.1.0"
|
stream-iterate "^1.1.0"
|
||||||
|
|
||||||
source-map-support@^0.5.9:
|
|
||||||
version "0.5.12"
|
|
||||||
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599"
|
|
||||||
integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==
|
|
||||||
dependencies:
|
|
||||||
buffer-from "^1.0.0"
|
|
||||||
source-map "^0.6.0"
|
|
||||||
|
|
||||||
source-map@^0.6.0:
|
|
||||||
version "0.6.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
|
||||||
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
|
||||||
|
|
||||||
spdx-correct@^3.0.0:
|
spdx-correct@^3.0.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
|
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
|
||||||
@@ -3024,14 +3039,14 @@ string-width@^1.0.1:
|
|||||||
is-fullwidth-code-point "^2.0.0"
|
is-fullwidth-code-point "^2.0.0"
|
||||||
strip-ansi "^4.0.0"
|
strip-ansi "^4.0.0"
|
||||||
|
|
||||||
string-width@^3.0.0, string-width@^3.1.0:
|
string-width@^4.1.0, string-width@^4.2.0:
|
||||||
version "3.1.0"
|
version "4.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
|
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
|
||||||
integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
|
integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
|
||||||
dependencies:
|
dependencies:
|
||||||
emoji-regex "^7.0.1"
|
emoji-regex "^8.0.0"
|
||||||
is-fullwidth-code-point "^2.0.0"
|
is-fullwidth-code-point "^3.0.0"
|
||||||
strip-ansi "^5.1.0"
|
strip-ansi "^6.0.0"
|
||||||
|
|
||||||
string_decoder@^1.1.1:
|
string_decoder@^1.1.1:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
@@ -3071,12 +3086,12 @@ strip-ansi@^4.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ansi-regex "^3.0.0"
|
ansi-regex "^3.0.0"
|
||||||
|
|
||||||
strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
|
strip-ansi@^6.0.0:
|
||||||
version "5.2.0"
|
version "6.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
|
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
|
||||||
integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
|
integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
|
||||||
dependencies:
|
dependencies:
|
||||||
ansi-regex "^4.1.0"
|
ansi-regex "^5.0.0"
|
||||||
|
|
||||||
strip-eof@^1.0.0:
|
strip-eof@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
@@ -3095,28 +3110,26 @@ supports-color@^5.3.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
has-flag "^3.0.0"
|
has-flag "^3.0.0"
|
||||||
|
|
||||||
tar-fs@^1.13.0:
|
tar-fs@^2.0.0:
|
||||||
version "1.16.3"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509"
|
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.0.tgz#677700fc0c8b337a78bee3623fdc235f21d7afad"
|
||||||
integrity sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==
|
integrity sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==
|
||||||
dependencies:
|
dependencies:
|
||||||
chownr "^1.0.1"
|
chownr "^1.1.1"
|
||||||
mkdirp "^0.5.1"
|
mkdirp "^0.5.1"
|
||||||
pump "^1.0.0"
|
pump "^3.0.0"
|
||||||
tar-stream "^1.1.2"
|
tar-stream "^2.0.0"
|
||||||
|
|
||||||
tar-stream@^1.1.2:
|
tar-stream@^2.0.0:
|
||||||
version "1.6.2"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555"
|
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.0.tgz#d1aaa3661f05b38b5acc9b7020efdca5179a2cc3"
|
||||||
integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==
|
integrity sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==
|
||||||
dependencies:
|
dependencies:
|
||||||
bl "^1.0.0"
|
bl "^3.0.0"
|
||||||
buffer-alloc "^1.2.0"
|
end-of-stream "^1.4.1"
|
||||||
end-of-stream "^1.0.0"
|
|
||||||
fs-constants "^1.0.0"
|
fs-constants "^1.0.0"
|
||||||
readable-stream "^2.3.0"
|
inherits "^2.0.3"
|
||||||
to-buffer "^1.1.1"
|
readable-stream "^3.1.1"
|
||||||
xtend "^4.0.0"
|
|
||||||
|
|
||||||
tar@^2.0.0:
|
tar@^2.0.0:
|
||||||
version "2.2.2"
|
version "2.2.2"
|
||||||
@@ -3189,11 +3202,6 @@ tiny-relative-date@^1.3.0:
|
|||||||
resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07"
|
resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07"
|
||||||
integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==
|
integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==
|
||||||
|
|
||||||
to-buffer@^1.1.1:
|
|
||||||
version "1.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
|
|
||||||
integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
|
|
||||||
|
|
||||||
tough-cookie@~2.4.3:
|
tough-cookie@~2.4.3:
|
||||||
version "2.4.3"
|
version "2.4.3"
|
||||||
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
|
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
|
||||||
@@ -3389,10 +3397,17 @@ windows-blurbehind@^1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/windows-blurbehind/-/windows-blurbehind-1.0.1.tgz#ff098713873304e38330b2c54cc41bb369b587b9"
|
resolved "https://registry.yarnpkg.com/windows-blurbehind/-/windows-blurbehind-1.0.1.tgz#ff098713873304e38330b2c54cc41bb369b587b9"
|
||||||
integrity sha512-1HzHfCiM1ayrbACJu5qE9zELV24uX/tINT6kxaZwLY3rtQAoeav6x9z7LFHWoLaGDN/sYbnK+9Vk0cz7fsk5HQ==
|
integrity sha512-1HzHfCiM1ayrbACJu5qE9zELV24uX/tINT6kxaZwLY3rtQAoeav6x9z7LFHWoLaGDN/sYbnK+9Vk0cz7fsk5HQ==
|
||||||
|
|
||||||
windows-native-registry@^1.0.14:
|
windows-native-registry@^1.0.17:
|
||||||
version "1.0.14"
|
version "1.0.17"
|
||||||
resolved "https://registry.yarnpkg.com/windows-native-registry/-/windows-native-registry-1.0.14.tgz#35c742b1278473127cbfb3b76e0db3d1ef626872"
|
resolved "https://registry.yarnpkg.com/windows-native-registry/-/windows-native-registry-1.0.17.tgz#d8cce48b364703a55c226690431b325114405022"
|
||||||
integrity sha512-C2UgyZYJYcPFjkhfNuy09CUa6wXAti4x/tLPgzudDDrqpTyczcgnBEpiablmE6j7E7ownouWTqgVcHW8HJyqhw==
|
integrity sha512-u9Fp9TyDo5dvhlW6hYBOdHPETtAahXKxo3jeW5EXwNK7qa+nSNopQycN1drtBVWe3jpJXvyKpt9zrjiDd+u4JQ==
|
||||||
|
dependencies:
|
||||||
|
nan "^2.14.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==
|
||||||
dependencies:
|
dependencies:
|
||||||
nan "^2.13.2"
|
nan "^2.13.2"
|
||||||
|
|
||||||
@@ -3418,14 +3433,14 @@ wrap-ansi@^2.0.0:
|
|||||||
string-width "^1.0.1"
|
string-width "^1.0.1"
|
||||||
strip-ansi "^3.0.1"
|
strip-ansi "^3.0.1"
|
||||||
|
|
||||||
wrap-ansi@^5.1.0:
|
wrap-ansi@^6.2.0:
|
||||||
version "5.1.0"
|
version "6.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
|
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
|
||||||
integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
|
integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
|
||||||
dependencies:
|
dependencies:
|
||||||
ansi-styles "^3.2.0"
|
ansi-styles "^4.0.0"
|
||||||
string-width "^3.0.0"
|
string-width "^4.1.0"
|
||||||
strip-ansi "^5.0.0"
|
strip-ansi "^6.0.0"
|
||||||
|
|
||||||
wrappy@1:
|
wrappy@1:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
@@ -3446,7 +3461,7 @@ xdg-basedir@^3.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
|
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
|
||||||
integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=
|
integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=
|
||||||
|
|
||||||
xtend@^4.0.0, xtend@~4.0.1:
|
xtend@~4.0.1:
|
||||||
version "4.0.1"
|
version "4.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
|
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
|
||||||
integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
|
integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
|
||||||
@@ -3471,10 +3486,10 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3:
|
|||||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
|
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
|
||||||
integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
|
integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
|
||||||
|
|
||||||
yargs-parser@^13.1.1:
|
yargs-parser@^16.1.0:
|
||||||
version "13.1.1"
|
version "16.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"
|
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-16.1.0.tgz#73747d53ae187e7b8dbe333f95714c76ea00ecf1"
|
||||||
integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==
|
integrity sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==
|
||||||
dependencies:
|
dependencies:
|
||||||
camelcase "^5.0.0"
|
camelcase "^5.0.0"
|
||||||
decamelize "^1.2.0"
|
decamelize "^1.2.0"
|
||||||
@@ -3504,21 +3519,22 @@ yargs@^11.0.0:
|
|||||||
y18n "^3.2.1"
|
y18n "^3.2.1"
|
||||||
yargs-parser "^9.0.2"
|
yargs-parser "^9.0.2"
|
||||||
|
|
||||||
yargs@^13.3.0:
|
yargs@^15.1.0:
|
||||||
version "13.3.0"
|
version "15.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83"
|
resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.1.0.tgz#e111381f5830e863a89550bd4b136bb6a5f37219"
|
||||||
integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==
|
integrity sha512-T39FNN1b6hCW4SOIk1XyTOWxtXdcen0t+XYrysQmChzSipvhBO8Bj0nK1ozAasdk24dNWuMZvr4k24nz+8HHLg==
|
||||||
dependencies:
|
dependencies:
|
||||||
cliui "^5.0.0"
|
cliui "^6.0.0"
|
||||||
find-up "^3.0.0"
|
decamelize "^1.2.0"
|
||||||
|
find-up "^4.1.0"
|
||||||
get-caller-file "^2.0.1"
|
get-caller-file "^2.0.1"
|
||||||
require-directory "^2.1.1"
|
require-directory "^2.1.1"
|
||||||
require-main-filename "^2.0.0"
|
require-main-filename "^2.0.0"
|
||||||
set-blocking "^2.0.0"
|
set-blocking "^2.0.0"
|
||||||
string-width "^3.0.0"
|
string-width "^4.2.0"
|
||||||
which-module "^2.0.0"
|
which-module "^2.0.0"
|
||||||
y18n "^4.0.0"
|
y18n "^4.0.0"
|
||||||
yargs-parser "^13.1.1"
|
yargs-parser "^16.1.0"
|
||||||
|
|
||||||
zone.js@^0.8.29:
|
zone.js@^0.8.29:
|
||||||
version "0.8.29"
|
version "0.8.29"
|
||||||
|
@@ -1,207 +0,0 @@
|
|||||||
trigger:
|
|
||||||
tags:
|
|
||||||
include:
|
|
||||||
- v*
|
|
||||||
branches:
|
|
||||||
include:
|
|
||||||
- master
|
|
||||||
|
|
||||||
variables:
|
|
||||||
- group: Vars
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
# - job: Windows
|
|
||||||
# pool:
|
|
||||||
# vmImage: 'vs2017-win2016'
|
|
||||||
|
|
||||||
# steps:
|
|
||||||
# - task: NodeTool@0
|
|
||||||
# inputs:
|
|
||||||
# versionSpec: '10.x'
|
|
||||||
# displayName: 'Install Node.js'
|
|
||||||
|
|
||||||
# - script: yarn --network-timeout 100000
|
|
||||||
# displayName: 'Install dependencies'
|
|
||||||
|
|
||||||
# - script: node scripts/build-native.js
|
|
||||||
# displayName: 'Rebuild native dependencies'
|
|
||||||
|
|
||||||
# - script: yarn run build
|
|
||||||
# displayName: 'Build'
|
|
||||||
|
|
||||||
# - script: node scripts/prepackage-plugins.js
|
|
||||||
# displayName: 'Prepackage plugins'
|
|
||||||
|
|
||||||
# - script: node scripts/build-windows.js
|
|
||||||
# displayName: 'Package'
|
|
||||||
# env:
|
|
||||||
# WIN_CSC_LINK: $(WIN_CSC_LINK)
|
|
||||||
# WIN_CSC_KEY_PASSWORD: $(WIN_CSC_KEY_PASSWORD)
|
|
||||||
# BT_TOKEN: $(BT_TOKEN)
|
|
||||||
# GH_TOKEN: $(GH_TOKEN)
|
|
||||||
# DEBUG: electron-builder
|
|
||||||
|
|
||||||
# - task: CopyFiles@2
|
|
||||||
# inputs:
|
|
||||||
# contents: 'dist\\*-setup.exe'
|
|
||||||
# targetFolder: $(Build.ArtifactStagingDirectory)
|
|
||||||
# flattenFolders: true
|
|
||||||
# cleanTargetFolder: true
|
|
||||||
|
|
||||||
# - task: PublishBuildArtifacts@1
|
|
||||||
# inputs:
|
|
||||||
# pathtoPublish: $(Build.ArtifactStagingDirectory)
|
|
||||||
# artifactName: Windows - Installer
|
|
||||||
# condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
|
|
||||||
|
|
||||||
# - task: CopyFiles@2
|
|
||||||
# inputs:
|
|
||||||
# contents: 'dist\\*-portable.exe'
|
|
||||||
# targetFolder: $(Build.ArtifactStagingDirectory)
|
|
||||||
# flattenFolders: true
|
|
||||||
# cleanTargetFolder: true
|
|
||||||
|
|
||||||
# - task: PublishBuildArtifacts@1
|
|
||||||
# inputs:
|
|
||||||
# pathtoPublish: $(Build.ArtifactStagingDirectory)
|
|
||||||
# artifactName: Windows - Portable build
|
|
||||||
# condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
|
|
||||||
|
|
||||||
- job: Linux
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-16.04'
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- task: NodeTool@0
|
|
||||||
inputs:
|
|
||||||
versionSpec: '10.x'
|
|
||||||
displayName: 'Install Node.js'
|
|
||||||
|
|
||||||
- script: yarn
|
|
||||||
displayName: 'Install dependencies'
|
|
||||||
|
|
||||||
- script: node scripts/build-native.js
|
|
||||||
displayName: 'Rebuild native dependencies'
|
|
||||||
|
|
||||||
- script: yarn run build
|
|
||||||
displayName: 'Build'
|
|
||||||
|
|
||||||
- script: node scripts/prepackage-plugins.js
|
|
||||||
displayName: 'Prepackage plugins'
|
|
||||||
|
|
||||||
- script: node scripts/build-linux.js
|
|
||||||
displayName: 'Package'
|
|
||||||
env:
|
|
||||||
BT_TOKEN: $(BT_TOKEN)
|
|
||||||
GH_TOKEN: $(GH_TOKEN)
|
|
||||||
|
|
||||||
- task: CopyFiles@2
|
|
||||||
inputs:
|
|
||||||
contents: 'dist/*.deb'
|
|
||||||
targetFolder: $(Build.ArtifactStagingDirectory)
|
|
||||||
flattenFolders: true
|
|
||||||
cleanTargetFolder: true
|
|
||||||
|
|
||||||
- task: PublishBuildArtifacts@1
|
|
||||||
inputs:
|
|
||||||
pathtoPublish: $(Build.ArtifactStagingDirectory)
|
|
||||||
artifactName: Linux - DEB
|
|
||||||
condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
|
|
||||||
|
|
||||||
- task: CopyFiles@2
|
|
||||||
inputs:
|
|
||||||
contents: 'dist/*.rpm'
|
|
||||||
targetFolder: $(Build.ArtifactStagingDirectory)
|
|
||||||
flattenFolders: true
|
|
||||||
cleanTargetFolder: true
|
|
||||||
|
|
||||||
- task: PublishBuildArtifacts@1
|
|
||||||
inputs:
|
|
||||||
pathtoPublish: $(Build.ArtifactStagingDirectory)
|
|
||||||
artifactName: Linux - RPM
|
|
||||||
condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
|
|
||||||
|
|
||||||
- task: CopyFiles@2
|
|
||||||
inputs:
|
|
||||||
contents: 'dist/*.snap'
|
|
||||||
targetFolder: $(Build.ArtifactStagingDirectory)
|
|
||||||
flattenFolders: true
|
|
||||||
cleanTargetFolder: true
|
|
||||||
|
|
||||||
- task: PublishBuildArtifacts@1
|
|
||||||
inputs:
|
|
||||||
pathtoPublish: $(Build.ArtifactStagingDirectory)
|
|
||||||
artifactName: Linux - Snap
|
|
||||||
condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
|
|
||||||
|
|
||||||
- task: CopyFiles@2
|
|
||||||
inputs:
|
|
||||||
contents: 'dist/*.tar.gz'
|
|
||||||
targetFolder: $(Build.ArtifactStagingDirectory)
|
|
||||||
flattenFolders: true
|
|
||||||
cleanTargetFolder: true
|
|
||||||
|
|
||||||
- task: PublishBuildArtifacts@1
|
|
||||||
inputs:
|
|
||||||
pathtoPublish: $(Build.ArtifactStagingDirectory)
|
|
||||||
artifactName: Linux - tar.gz
|
|
||||||
condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
|
|
||||||
|
|
||||||
# - job: macOS
|
|
||||||
# pool:
|
|
||||||
# vmImage: 'macOS-10.14'
|
|
||||||
|
|
||||||
# steps:
|
|
||||||
# - task: NodeTool@0
|
|
||||||
# inputs:
|
|
||||||
# versionSpec: '10.x'
|
|
||||||
# displayName: 'Install Node.js'
|
|
||||||
|
|
||||||
# - script: yarn
|
|
||||||
# displayName: 'Install dependencies'
|
|
||||||
|
|
||||||
# - script: node scripts/build-native.js
|
|
||||||
# displayName: 'Rebuild native dependencies'
|
|
||||||
|
|
||||||
# - script: yarn run build
|
|
||||||
# displayName: 'Build'
|
|
||||||
|
|
||||||
# - script: node scripts/prepackage-plugins.js
|
|
||||||
# displayName: 'Prepackage plugins'
|
|
||||||
|
|
||||||
# - script: node scripts/build-macos.js
|
|
||||||
# displayName: 'Package'
|
|
||||||
# env:
|
|
||||||
# CSC_LINK: $(CSC_LINK)
|
|
||||||
# CSC_KEY_PASSWORD: $(CSC_KEY_PASSWORD)
|
|
||||||
# BT_TOKEN: $(BT_TOKEN)
|
|
||||||
# GH_TOKEN: $(GH_TOKEN)
|
|
||||||
# APPSTORE_USERNAME: $(APPSTORE_USERNAME)
|
|
||||||
# APPSTORE_PASSWORD: $(APPSTORE_PASSWORD)
|
|
||||||
# DEBUG: electron-builder
|
|
||||||
|
|
||||||
# - task: CopyFiles@2
|
|
||||||
# inputs:
|
|
||||||
# contents: 'dist/*.dmg'
|
|
||||||
# targetFolder: $(Build.ArtifactStagingDirectory)
|
|
||||||
# flattenFolders: true
|
|
||||||
# cleanTargetFolder: true
|
|
||||||
|
|
||||||
# - task: PublishBuildArtifacts@1
|
|
||||||
# inputs:
|
|
||||||
# pathtoPublish: $(Build.ArtifactStagingDirectory)
|
|
||||||
# artifactName: macOS - DMG
|
|
||||||
# condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
|
|
||||||
|
|
||||||
# - task: CopyFiles@2
|
|
||||||
# inputs:
|
|
||||||
# contents: 'dist/*.zip'
|
|
||||||
# targetFolder: $(Build.ArtifactStagingDirectory)
|
|
||||||
# flattenFolders: true
|
|
||||||
# cleanTargetFolder: true
|
|
||||||
|
|
||||||
# - task: PublishBuildArtifacts@1
|
|
||||||
# inputs:
|
|
||||||
# pathtoPublish: $(Build.ArtifactStagingDirectory)
|
|
||||||
# artifactName: macOS - app.zip
|
|
||||||
# condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
|
|
@@ -1,4 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
cat > '/usr/bin/${executable}' << END
|
||||||
|
#!/bin/sh
|
||||||
|
'/opt/${productFilename}/${executable}' --no-sandbox $@
|
||||||
|
END
|
||||||
|
|
||||||
# Link to the binary
|
chmod +x '/usr/bin/${executable}'
|
||||||
ln -sf '/opt/${productFilename}/${executable}' '/usr/bin/${executable}'
|
|
||||||
|
@@ -5,9 +5,8 @@ const path = require('path')
|
|||||||
const notarizer = require('electron-notarize')
|
const notarizer = require('electron-notarize')
|
||||||
|
|
||||||
module.exports = async function (params) {
|
module.exports = async function (params) {
|
||||||
console.log('env: ', process.env)
|
|
||||||
// notarize the app on Mac OS only.
|
// notarize the app on Mac OS only.
|
||||||
if (process.platform !== 'darwin' || process.env.BUILD_SOURCEBRANCH !== 'refs/heads/master' || process.env.TRAVIS_BRANCH && !process.env.TRAVIS_PULL_REQUEST_BRANCH) {
|
if (process.platform !== 'darwin' || process.env.GITHUB_REF !== 'refs/heads/master' || process.env.GITHUB_REF && !process.env.GITHUB_REF.startsWith('refs/tags/')) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
console.log('afterSign hook triggered', params)
|
console.log('afterSign hook triggered', params)
|
||||||
|
@@ -8,5 +8,7 @@
|
|||||||
<true/>
|
<true/>
|
||||||
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
|
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
|
||||||
<true/>
|
<true/>
|
||||||
|
<key>com.apple.security.cs.disable-library-validation</key>
|
||||||
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
81
package.json
81
package.json
@@ -1,33 +1,35 @@
|
|||||||
{
|
{
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@fortawesome/fontawesome-free": "^5.9.0",
|
"@fortawesome/fontawesome-free": "^5.12.0",
|
||||||
|
"@sentry/cli": "^1.49.0",
|
||||||
|
"@sentry/electron": "^1.0.0",
|
||||||
"@types/electron-config": "^3.2.2",
|
"@types/electron-config": "^3.2.2",
|
||||||
"@types/electron-debug": "^2.1.0",
|
"@types/electron-debug": "^2.1.0",
|
||||||
"@types/fs-promise": "1.0.3",
|
|
||||||
"@types/js-yaml": "^3.12.1",
|
"@types/js-yaml": "^3.12.1",
|
||||||
"@types/node": "^12.6.2",
|
"@types/node": "12.7.12",
|
||||||
"@types/webpack-env": "1.13.9",
|
"@types/webpack-env": "1.15.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^1.12.0",
|
"@typescript-eslint/eslint-plugin": "^2.13.0",
|
||||||
"@typescript-eslint/parser": "^1.12.0",
|
"@typescript-eslint/parser": "^2.17.0",
|
||||||
"app-builder-lib": "^21.0.8",
|
|
||||||
"apply-loader": "2.0.0",
|
"apply-loader": "2.0.0",
|
||||||
"awesome-typescript-loader": "^5.0.0",
|
"awesome-typescript-loader": "^5.0.0",
|
||||||
"core-js": "^3.1.4",
|
"core-js": "^3.6.4",
|
||||||
"cross-env": "5.2.0",
|
"cross-env": "6.0.3",
|
||||||
"css-loader": "3.0.0",
|
"css-loader": "3.4.2",
|
||||||
"electron": "^5.0.7",
|
"electron": "^7.1.10",
|
||||||
"electron-builder": "^21.0.8",
|
"electron-builder": "22.1.0",
|
||||||
"electron-installer-snap": "^4.0.0",
|
"electron-download": "^4.1.1",
|
||||||
|
"electron-installer-snap": "^5.0.0",
|
||||||
"electron-notarize": "^0.1.1",
|
"electron-notarize": "^0.1.1",
|
||||||
"electron-rebuild": "^1.8.5",
|
"electron-rebuild": "^1.9.0",
|
||||||
"eslint": "^5.16.0",
|
"eslint": "^6.8.0",
|
||||||
"file-loader": "^4.0.0",
|
"eslint-plugin-import": "^2.20.0",
|
||||||
"graceful-fs": "^4.1.15",
|
"file-loader": "^5.0.2",
|
||||||
|
"graceful-fs": "^4.2.2",
|
||||||
"html-loader": "0.5.5",
|
"html-loader": "0.5.5",
|
||||||
"json-loader": "0.5.7",
|
"json-loader": "0.5.7",
|
||||||
"node-abi": "^2.9.0",
|
"node-abi": "^2.12.0",
|
||||||
"node-gyp": "^5.0.2",
|
"node-gyp": "^6.1.0",
|
||||||
"node-sass": "^4.12.0",
|
"node-sass": "^4.13.0",
|
||||||
"npmlog": "4.1.2",
|
"npmlog": "4.1.2",
|
||||||
"npx": "^10.2.0",
|
"npx": "^10.2.0",
|
||||||
"pug": "^2.0.4",
|
"pug": "^2.0.4",
|
||||||
@@ -35,22 +37,21 @@
|
|||||||
"pug-lint": "^2.6.0",
|
"pug-lint": "^2.6.0",
|
||||||
"pug-loader": "^2.4.0",
|
"pug-loader": "^2.4.0",
|
||||||
"pug-static-loader": "2.0.0",
|
"pug-static-loader": "2.0.0",
|
||||||
"raven-js": "3.27.2",
|
"raw-loader": "4.0.0",
|
||||||
"raw-loader": "3.0.0",
|
"sass-loader": "^8.0.0",
|
||||||
"sass-loader": "^7.0.1",
|
|
||||||
"shelljs": "0.8.3",
|
"shelljs": "0.8.3",
|
||||||
"source-code-pro": "^2.30.1",
|
"source-code-pro": "^2.30.2",
|
||||||
"source-sans-pro": "2.45.0",
|
"source-sans-pro": "3.6.0",
|
||||||
"style-loader": "^0.23.1",
|
"style-loader": "^1.1.2",
|
||||||
"svg-inline-loader": "^0.8.0",
|
"svg-inline-loader": "^0.8.0",
|
||||||
"to-string-loader": "1.1.5",
|
"to-string-loader": "1.1.6",
|
||||||
"tslib": "^1.10.0",
|
"tslib": "^1.10.0",
|
||||||
"typedoc": "^0.14.2",
|
"typedoc": "^0.16.7",
|
||||||
"typescript": "^3.5.3",
|
"typescript": "^3.7.4",
|
||||||
"url-loader": "^2.0.0",
|
"url-loader": "^3.0.0",
|
||||||
"val-loader": "1.1.1",
|
"val-loader": "2.1.0",
|
||||||
"webpack": "^4.35.2",
|
"webpack": "^5.0.0-beta.12",
|
||||||
"webpack-cli": "^3.3.6",
|
"webpack-cli": "^3.3.10",
|
||||||
"yaml-loader": "0.5.0"
|
"yaml-loader": "0.5.0"
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
@@ -80,11 +81,6 @@
|
|||||||
"installerIcon": "./build/windows/icon.ico"
|
"installerIcon": "./build/windows/icon.ico"
|
||||||
},
|
},
|
||||||
"publish": [
|
"publish": [
|
||||||
{
|
|
||||||
"provider": "bintray",
|
|
||||||
"token": "d993c4faa708a4cba84fa3a8e822457e7298d75c",
|
|
||||||
"component": "main"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"provider": "github"
|
"provider": "github"
|
||||||
}
|
}
|
||||||
@@ -98,6 +94,7 @@
|
|||||||
"artifactName": "terminus-${version}-macos.${ext}",
|
"artifactName": "terminus-${version}-macos.${ext}",
|
||||||
"hardenedRuntime": true,
|
"hardenedRuntime": true,
|
||||||
"entitlements": "./build/mac/entitlements.plist",
|
"entitlements": "./build/mac/entitlements.plist",
|
||||||
|
"entitlementsInherit": "./build/mac/entitlements.plist",
|
||||||
"extendInfo": {
|
"extendInfo": {
|
||||||
"NSRequiresAquaSystemAppearance": false
|
"NSRequiresAquaSystemAppearance": false
|
||||||
}
|
}
|
||||||
@@ -110,6 +107,9 @@
|
|||||||
"icon": "./build/icons",
|
"icon": "./build/icons",
|
||||||
"artifactName": "terminus-${version}-linux.${ext}"
|
"artifactName": "terminus-${version}-linux.${ext}"
|
||||||
},
|
},
|
||||||
|
"snap": {
|
||||||
|
"plugs": ["default", "system-files", "system-observe"]
|
||||||
|
},
|
||||||
"deb": {
|
"deb": {
|
||||||
"depends": [
|
"depends": [
|
||||||
"gconf2",
|
"gconf2",
|
||||||
@@ -139,8 +139,5 @@
|
|||||||
"lint": "eslint --ext ts */src",
|
"lint": "eslint --ext ts */src",
|
||||||
"postinstall": "node ./scripts/install-deps.js"
|
"postinstall": "node ./scripts/install-deps.js"
|
||||||
},
|
},
|
||||||
"repository": "eugeny/terminus",
|
"repository": "eugeny/terminus"
|
||||||
"dependencies": {
|
|
||||||
"eslint-plugin-import": "^2.18.0"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -2,11 +2,12 @@
|
|||||||
const builder = require('electron-builder').build
|
const builder = require('electron-builder').build
|
||||||
const vars = require('./vars')
|
const vars = require('./vars')
|
||||||
|
|
||||||
const isTag = (process.env.BUILD_SOURCEBRANCH || '').startsWith('refs/tags/')
|
const isTag = (process.env.GITHUB_REF || '').startsWith('refs/tags/')
|
||||||
|
const isCI = !!process.env.GITHUB_REF
|
||||||
|
|
||||||
builder({
|
builder({
|
||||||
dir: true,
|
dir: true,
|
||||||
linux: ['snap', 'deb', 'rpm', 'tar.gz'],
|
linux: ['deb', 'tar.gz', 'rpm'],
|
||||||
config: {
|
config: {
|
||||||
extraMetadata: {
|
extraMetadata: {
|
||||||
version: vars.version,
|
version: vars.version,
|
||||||
|
@@ -2,7 +2,8 @@
|
|||||||
const builder = require('electron-builder').build
|
const builder = require('electron-builder').build
|
||||||
const vars = require('./vars')
|
const vars = require('./vars')
|
||||||
|
|
||||||
const isTag = (process.env.BUILD_SOURCEBRANCH || '').startsWith('refs/tags/')
|
const isTag = (process.env.GITHUB_REF || '').startsWith('refs/tags/')
|
||||||
|
const isCI = !!process.env.GITHUB_REF
|
||||||
|
|
||||||
builder({
|
builder({
|
||||||
dir: true,
|
dir: true,
|
||||||
|
@@ -3,21 +3,24 @@ const rebuild = require('electron-rebuild').default
|
|||||||
const path = require('path')
|
const path = require('path')
|
||||||
const vars = require('./vars')
|
const vars = require('./vars')
|
||||||
|
|
||||||
lifecycles = []
|
let lifecycles = []
|
||||||
for (let dir of ['app', 'terminus-core', 'terminus-ssh', 'terminus-terminal']) {
|
for (let dir of ['app', 'terminus-core', 'terminus-ssh', 'terminus-terminal']) {
|
||||||
build = rebuild({
|
const build = rebuild({
|
||||||
buildPath: path.resolve(__dirname, '../' + dir),
|
buildPath: path.resolve(__dirname, '../' + dir),
|
||||||
electronVersion: vars.electronVersion,
|
electronVersion: vars.electronVersion,
|
||||||
force: true,
|
force: true,
|
||||||
})
|
})
|
||||||
build.catch(() => process.exit(1))
|
build.catch(e => {
|
||||||
lifecycles.push([build.lifecycle, dir])
|
console.error(e)
|
||||||
|
process.exit(1)
|
||||||
|
})
|
||||||
|
lifecycles.push([build.lifecycle, dir])
|
||||||
}
|
}
|
||||||
|
|
||||||
console.info('Building against Electron', vars.electronVersion)
|
console.info('Building against Electron', vars.electronVersion)
|
||||||
|
|
||||||
for (let [lc, dir] of lifecycles) {
|
for (let [lc, dir] of lifecycles) {
|
||||||
lc.on('module-found', name => {
|
lc.on('module-found', name => {
|
||||||
console.info('Rebuilding', dir + '/' + name)
|
console.info('Rebuilding', dir + '/' + name)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,8 @@
|
|||||||
const builder = require('electron-builder').build
|
const builder = require('electron-builder').build
|
||||||
const vars = require('./vars')
|
const vars = require('./vars')
|
||||||
|
|
||||||
const isTag = (process.env.BUILD_SOURCEBRANCH || '').startsWith('refs/tags/')
|
const isTag = (process.env.GITHUB_REF || process.env.BUILD_SOURCEBRANCH || '').startsWith('refs/tags/')
|
||||||
|
const isCI = !!process.env.GITHUB_REF
|
||||||
|
|
||||||
builder({
|
builder({
|
||||||
dir: true,
|
dir: true,
|
||||||
|
@@ -25,8 +25,5 @@ if (['darwin', 'linux'].includes(process.platform)) {
|
|||||||
for (let x of vars.builtinPlugins) {
|
for (let x of vars.builtinPlugins) {
|
||||||
sh.ln('-fs', '../' + x, x)
|
sh.ln('-fs', '../' + x, x)
|
||||||
}
|
}
|
||||||
for (let x of vars.bundledModules) {
|
|
||||||
sh.ln('-fs', '../app/node_modules/' + x, x)
|
|
||||||
}
|
|
||||||
sh.cd('..')
|
sh.cd('..')
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "terminus-community-color-schemes",
|
"name": "terminus-community-color-schemes",
|
||||||
"version": "1.0.83-nightly.0",
|
"version": "1.0.99-nightly.0",
|
||||||
"description": "Community color schemes for Terminus",
|
"description": "Community color schemes for Terminus",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"terminus-builtin-plugin"
|
"terminus-builtin-plugin"
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
const path = require('path')
|
const path = require('path')
|
||||||
const webpack = require('webpack')
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
target: 'node',
|
target: 'node',
|
||||||
entry: 'src/index.ts',
|
entry: 'src/index.ts',
|
||||||
context: __dirname,
|
context: __dirname,
|
||||||
|
devtool: 'eval-cheap-module-source-map',
|
||||||
output: {
|
output: {
|
||||||
path: path.resolve(__dirname, 'dist'),
|
path: path.resolve(__dirname, 'dist'),
|
||||||
filename: 'index.js',
|
filename: 'index.js',
|
||||||
@@ -48,11 +48,4 @@ module.exports = {
|
|||||||
/^@ng-bootstrap/,
|
/^@ng-bootstrap/,
|
||||||
/^terminus-/,
|
/^terminus-/,
|
||||||
],
|
],
|
||||||
plugins: [
|
|
||||||
new webpack.optimize.ModuleConcatenationPlugin(),
|
|
||||||
new webpack.SourceMapDevToolPlugin({
|
|
||||||
exclude: [/node_modules/, /vendor/],
|
|
||||||
filename: '[file].map',
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "terminus-core",
|
"name": "terminus-core",
|
||||||
"version": "1.0.83-nightly.4",
|
"version": "1.0.99-nightly.0",
|
||||||
"description": "Terminus core",
|
"description": "Terminus core",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"terminus-builtin-plugin"
|
"terminus-builtin-plugin"
|
||||||
@@ -23,12 +23,12 @@
|
|||||||
"axios": "^0.19.0",
|
"axios": "^0.19.0",
|
||||||
"bootstrap": "^4.1.3",
|
"bootstrap": "^4.1.3",
|
||||||
"core-js": "^3.1.2",
|
"core-js": "^3.1.2",
|
||||||
"deepmerge": "^3.2.0",
|
"deepmerge": "^4.1.1",
|
||||||
"electron-updater": "^4.0.6",
|
"electron-updater": "^4.0.6",
|
||||||
"js-yaml": "^3.9.0",
|
"js-yaml": "^3.9.0",
|
||||||
"mixpanel": "^0.10.2",
|
"mixpanel": "^0.10.2",
|
||||||
"ng2-dnd": "^5.0.2",
|
"ng2-dnd": "^5.0.2",
|
||||||
"ngx-perfect-scrollbar": "^6.0.0",
|
"ngx-perfect-scrollbar": "^8.0.0",
|
||||||
"shell-escape": "^0.2.0",
|
"shell-escape": "^0.2.0",
|
||||||
"uuid": "^3.3.2",
|
"uuid": "^3.3.2",
|
||||||
"winston": "^3.2.1"
|
"winston": "^3.2.1"
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
export { BaseTabComponent, BaseTabProcess } from '../components/baseTab.component'
|
export { BaseTabComponent, BaseTabProcess } from '../components/baseTab.component'
|
||||||
|
export { TabHeaderComponent } from '../components/tabHeader.component'
|
||||||
export { SplitTabComponent, SplitContainer } from '../components/splitTab.component'
|
export { SplitTabComponent, SplitContainer } from '../components/splitTab.component'
|
||||||
export { TabRecoveryProvider, RecoveredTab } from './tabRecovery'
|
export { TabRecoveryProvider, RecoveredTab } from './tabRecovery'
|
||||||
export { ToolbarButtonProvider, ToolbarButton } from './toolbarButtonProvider'
|
export { ToolbarButtonProvider, ToolbarButton } from './toolbarButtonProvider'
|
||||||
|
@@ -34,5 +34,5 @@ export abstract class TabRecoveryProvider {
|
|||||||
* @returns [[RecoveredTab]] descriptor containing tab type and component inputs
|
* @returns [[RecoveredTab]] descriptor containing tab type and component inputs
|
||||||
* or `null` if this token is from a different tab type or is not supported
|
* or `null` if this token is from a different tab type or is not supported
|
||||||
*/
|
*/
|
||||||
abstract async recover (recoveryToken: any): Promise<RecoveredTab | null>
|
abstract async recover (recoveryToken: any): Promise<RecoveredTab|null>
|
||||||
}
|
}
|
||||||
|
@@ -5,7 +5,7 @@ export interface ToolbarButton {
|
|||||||
/**
|
/**
|
||||||
* Raw SVG icon code
|
* Raw SVG icon code
|
||||||
*/
|
*/
|
||||||
icon: string
|
icon?: string
|
||||||
|
|
||||||
title: string
|
title: string
|
||||||
|
|
||||||
|
@@ -6,9 +6,7 @@ title-bar(
|
|||||||
.content(
|
.content(
|
||||||
[class.tabs-on-top]='config.store.appearance.tabsLocation == "top"'
|
[class.tabs-on-top]='config.store.appearance.tabsLocation == "top"'
|
||||||
)
|
)
|
||||||
.tab-bar(
|
.tab-bar
|
||||||
*ngIf='!hostApp.isFullScreen',
|
|
||||||
)
|
|
||||||
.inset.background(*ngIf='hostApp.platform == Platform.macOS && config.store.appearance.frame == "thin" && config.store.appearance.tabsLocation == "top"')
|
.inset.background(*ngIf='hostApp.platform == Platform.macOS && config.store.appearance.frame == "thin" && config.store.appearance.tabsLocation == "top"')
|
||||||
.tabs(
|
.tabs(
|
||||||
dnd-sortable-container,
|
dnd-sortable-container,
|
||||||
@@ -40,7 +38,7 @@ title-bar(
|
|||||||
button.btn.btn-secondary.btn-tab-bar(
|
button.btn.btn-secondary.btn-tab-bar(
|
||||||
[title]='button.title',
|
[title]='button.title',
|
||||||
(click)='button.click && button.click()',
|
(click)='button.click && button.click()',
|
||||||
[innerHTML]='sanitizeIcon(button.icon)',
|
[fastHtmlBind]='button.icon',
|
||||||
ngbDropdownToggle,
|
ngbDropdownToggle,
|
||||||
)
|
)
|
||||||
div(*ngIf='button.submenu', ngbDropdownMenu)
|
div(*ngIf='button.submenu', ngbDropdownMenu)
|
||||||
@@ -49,8 +47,11 @@ title-bar(
|
|||||||
(click)='item.click()',
|
(click)='item.click()',
|
||||||
ngbDropdownItem,
|
ngbDropdownItem,
|
||||||
)
|
)
|
||||||
.icon-wrapper([innerHTML]='sanitizeIcon(item.icon)')
|
.icon-wrapper(
|
||||||
.ml-3 {{item.title}}
|
*ngIf='hasIcons(button.submenuItems)',
|
||||||
|
[fastHtmlBind]='item.icon'
|
||||||
|
)
|
||||||
|
div([class.ml-3]='hasIcons(button.submenuItems)') {{item.title}}
|
||||||
|
|
||||||
.drag-space.background([class.persistent]='config.store.appearance.frame == "thin" && hostApp.platform != Platform.macOS')
|
.drag-space.background([class.persistent]='config.store.appearance.frame == "thin" && hostApp.platform != Platform.macOS')
|
||||||
|
|
||||||
@@ -63,7 +64,7 @@ title-bar(
|
|||||||
button.btn.btn-secondary.btn-tab-bar(
|
button.btn.btn-secondary.btn-tab-bar(
|
||||||
[title]='button.title',
|
[title]='button.title',
|
||||||
(click)='button.click && button.click()',
|
(click)='button.click && button.click()',
|
||||||
[innerHTML]='sanitizeIcon(button.icon)',
|
[fastHtmlBind]='button.icon',
|
||||||
ngbDropdownToggle,
|
ngbDropdownToggle,
|
||||||
)
|
)
|
||||||
div(*ngIf='button.submenu', ngbDropdownMenu)
|
div(*ngIf='button.submenu', ngbDropdownMenu)
|
||||||
@@ -72,14 +73,17 @@ title-bar(
|
|||||||
(click)='item.click()',
|
(click)='item.click()',
|
||||||
ngbDropdownItem,
|
ngbDropdownItem,
|
||||||
)
|
)
|
||||||
.icon-wrapper([innerHTML]='sanitizeIcon(item.icon)')
|
.icon-wrapper(
|
||||||
.ml-3 {{item.title}}
|
*ngIf='hasIcons(button.submenuItems)',
|
||||||
|
[fastHtmlBind]='item.icon'
|
||||||
|
)
|
||||||
|
div([class.ml-3]='hasIcons(button.submenuItems)') {{item.title}}
|
||||||
|
|
||||||
button.btn.btn-secondary.btn-tab-bar.btn-update(
|
button.btn.btn-secondary.btn-tab-bar.btn-update(
|
||||||
*ngIf='updatesAvailable',
|
*ngIf='updatesAvailable',
|
||||||
title='Update available',
|
title='Update available - Click to install',
|
||||||
(click)='updateApp()',
|
(click)='updateApp()',
|
||||||
[innerHTML]='sanitizeIcon(updateIcon)'
|
[fastHtmlBind]='updateIcon'
|
||||||
)
|
)
|
||||||
|
|
||||||
window-controls.background(
|
window-controls.background(
|
||||||
|
@@ -18,6 +18,7 @@ $tab-border-radius: 4px;
|
|||||||
|
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
|
height: 100%;
|
||||||
flex: auto;
|
flex: auto;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column-reverse;
|
flex-direction: column-reverse;
|
||||||
@@ -63,6 +64,7 @@ $tab-border-radius: 4px;
|
|||||||
&>.drag-space {
|
&>.drag-space {
|
||||||
min-width: 1px;
|
min-width: 1px;
|
||||||
flex: 1 0 1%;
|
flex: 1 0 1%;
|
||||||
|
margin-top: 2px; // for window resizing
|
||||||
-webkit-app-region: drag;
|
-webkit-app-region: drag;
|
||||||
|
|
||||||
&.persistent {
|
&.persistent {
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
import { Component, Inject, Input, HostListener, HostBinding } from '@angular/core'
|
import { Component, Inject, Input, HostListener, HostBinding } from '@angular/core'
|
||||||
import { trigger, style, animate, transition, state } from '@angular/animations'
|
import { trigger, style, animate, transition, state } from '@angular/animations'
|
||||||
import { DomSanitizer } from '@angular/platform-browser'
|
|
||||||
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
|
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
|
||||||
|
|
||||||
import { ElectronService } from '../services/electron.service'
|
import { ElectronService } from '../services/electron.service'
|
||||||
@@ -75,7 +74,6 @@ export class AppRootComponent {
|
|||||||
public hostApp: HostAppService,
|
public hostApp: HostAppService,
|
||||||
public config: ConfigService,
|
public config: ConfigService,
|
||||||
public app: AppService,
|
public app: AppService,
|
||||||
private domSanitizer: DomSanitizer,
|
|
||||||
@Inject(ToolbarButtonProvider) private toolbarButtonProviders: ToolbarButtonProvider[],
|
@Inject(ToolbarButtonProvider) private toolbarButtonProviders: ToolbarButtonProvider[],
|
||||||
log: LogService,
|
log: LogService,
|
||||||
ngbModal: NgbModal,
|
ngbModal: NgbModal,
|
||||||
@@ -128,8 +126,9 @@ export class AppRootComponent {
|
|||||||
})
|
})
|
||||||
|
|
||||||
this.hostApp.windowCloseRequest$.subscribe(async () => {
|
this.hostApp.windowCloseRequest$.subscribe(async () => {
|
||||||
await this.app.closeAllTabs()
|
if (await this.app.closeAllTabs()) {
|
||||||
this.hostApp.closeWindow()
|
this.hostApp.closeWindow()
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
if (window['safeModeReason']) {
|
if (window['safeModeReason']) {
|
||||||
@@ -145,7 +144,7 @@ export class AppRootComponent {
|
|||||||
config.changed$.subscribe(() => this.updateVibrancy())
|
config.changed$.subscribe(() => this.updateVibrancy())
|
||||||
this.updateVibrancy()
|
this.updateVibrancy()
|
||||||
|
|
||||||
let lastProgress = null
|
let lastProgress: number|null = null
|
||||||
this.app.tabOpened$.subscribe(tab => {
|
this.app.tabOpened$.subscribe(tab => {
|
||||||
this.unsortedTabs.push(tab)
|
this.unsortedTabs.push(tab)
|
||||||
tab.progress$.subscribe(progress => {
|
tab.progress$.subscribe(progress => {
|
||||||
@@ -218,8 +217,18 @@ export class AppRootComponent {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
updateApp () {
|
async updateApp () {
|
||||||
this.updater.update()
|
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 () {
|
onTabDragStart () {
|
||||||
@@ -239,8 +248,8 @@ export class AppRootComponent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sanitizeIcon (icon: string): any {
|
hasIcons (submenuItems: ToolbarButton[]): boolean {
|
||||||
return this.domSanitizer.bypassSecurityTrustHtml(icon || '')
|
return submenuItems.some(x => !!x.icon)
|
||||||
}
|
}
|
||||||
|
|
||||||
private getToolbarButtons (aboveZero: boolean): ToolbarButton[] {
|
private getToolbarButtons (aboveZero: boolean): ToolbarButton[] {
|
||||||
@@ -249,7 +258,7 @@ export class AppRootComponent {
|
|||||||
buttons = buttons.concat(provider.provide())
|
buttons = buttons.concat(provider.provide())
|
||||||
})
|
})
|
||||||
return buttons
|
return buttons
|
||||||
.filter(button => button.weight > 0 === aboveZero)
|
.filter(button => (button.weight || 0) > 0 === aboveZero)
|
||||||
.sort((a: ToolbarButton, b: ToolbarButton) => (a.weight || 0) - (b.weight || 0))
|
.sort((a: ToolbarButton, b: ToolbarButton) => (a.weight || 0) - (b.weight || 0))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -36,7 +36,7 @@ export abstract class BaseTabComponent {
|
|||||||
/**
|
/**
|
||||||
* CSS color override for the tab's header
|
* CSS color override for the tab's header
|
||||||
*/
|
*/
|
||||||
color: string = null
|
color: string|null = null
|
||||||
|
|
||||||
protected hasFocus = false
|
protected hasFocus = false
|
||||||
|
|
||||||
@@ -50,14 +50,14 @@ export abstract class BaseTabComponent {
|
|||||||
private titleChange = new Subject<string>()
|
private titleChange = new Subject<string>()
|
||||||
private focused = new Subject<void>()
|
private focused = new Subject<void>()
|
||||||
private blurred = new Subject<void>()
|
private blurred = new Subject<void>()
|
||||||
private progress = new Subject<number>()
|
private progress = new Subject<number|null>()
|
||||||
private activity = new Subject<boolean>()
|
private activity = new Subject<boolean>()
|
||||||
private destroyed = new Subject<void>()
|
private destroyed = new Subject<void>()
|
||||||
|
|
||||||
get focused$ (): Observable<void> { return this.focused }
|
get focused$ (): Observable<void> { return this.focused }
|
||||||
get blurred$ (): Observable<void> { return this.blurred }
|
get blurred$ (): Observable<void> { return this.blurred }
|
||||||
get titleChange$ (): Observable<string> { return this.titleChange }
|
get titleChange$ (): Observable<string> { return this.titleChange }
|
||||||
get progress$ (): Observable<number> { return this.progress }
|
get progress$ (): Observable<number|null> { return this.progress }
|
||||||
get activity$ (): Observable<boolean> { return this.activity }
|
get activity$ (): Observable<boolean> { return this.activity }
|
||||||
get destroyed$ (): Observable<void> { return this.destroyed }
|
get destroyed$ (): Observable<void> { return this.destroyed }
|
||||||
get recoveryStateChangedHint$ (): Observable<void> { return this.recoveryStateChangedHint }
|
get recoveryStateChangedHint$ (): Observable<void> { return this.recoveryStateChangedHint }
|
||||||
@@ -83,7 +83,7 @@ export abstract class BaseTabComponent {
|
|||||||
*
|
*
|
||||||
* @param {type} progress: value between 0 and 1, or `null` to remove
|
* @param {type} progress: value between 0 and 1, or `null` to remove
|
||||||
*/
|
*/
|
||||||
setProgress (progress: number) {
|
setProgress (progress: number|null) {
|
||||||
this.progress.next(progress)
|
this.progress.next(progress)
|
||||||
if (progress) {
|
if (progress) {
|
||||||
if (this.progressClearTimeout) {
|
if (this.progressClearTimeout) {
|
||||||
@@ -125,7 +125,7 @@ export abstract class BaseTabComponent {
|
|||||||
/**
|
/**
|
||||||
* Override this to enable task completion notifications for the tab
|
* Override this to enable task completion notifications for the tab
|
||||||
*/
|
*/
|
||||||
async getCurrentProcess (): Promise<BaseTabProcess> {
|
async getCurrentProcess (): Promise<BaseTabProcess|null> {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,13 +147,15 @@ export abstract class BaseTabComponent {
|
|||||||
/**
|
/**
|
||||||
* Called before the tab is closed
|
* Called before the tab is closed
|
||||||
*/
|
*/
|
||||||
destroy (): void {
|
destroy (skipDestroyedEvent = false): void {
|
||||||
this.focused.complete()
|
this.focused.complete()
|
||||||
this.blurred.complete()
|
this.blurred.complete()
|
||||||
this.titleChange.complete()
|
this.titleChange.complete()
|
||||||
this.progress.complete()
|
this.progress.complete()
|
||||||
this.recoveryStateChangedHint.complete()
|
this.recoveryStateChangedHint.complete()
|
||||||
this.destroyed.next()
|
if (!skipDestroyedEvent) {
|
||||||
|
this.destroyed.next()
|
||||||
|
}
|
||||||
this.destroyed.complete()
|
this.destroyed.complete()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +0,0 @@
|
|||||||
.icon(tabindex='0', [class.active]='model', (keyup.space)='click()')
|
|
||||||
i.fas.fa-square.off
|
|
||||||
i.fas.fa-check-square.on
|
|
||||||
.text {{text}}
|
|
@@ -1,55 +0,0 @@
|
|||||||
:host {
|
|
||||||
cursor: pointer;
|
|
||||||
margin: 5px 0;
|
|
||||||
|
|
||||||
&:focus {
|
|
||||||
background: rgba(255,255,255,.05);
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:active {
|
|
||||||
background: rgba(255,255,255,.1);
|
|
||||||
border-radius: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&[disabled] {
|
|
||||||
opacity: 0.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.off {
|
|
||||||
color: rgba(0, 0, 0, .5);
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon {
|
|
||||||
position: relative;
|
|
||||||
flex: none;
|
|
||||||
width: 14px;
|
|
||||||
height: 14px;
|
|
||||||
|
|
||||||
i {
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
top: -2px;
|
|
||||||
transition: 0.25s opacity;
|
|
||||||
display: block;
|
|
||||||
font-size: 18px;
|
|
||||||
}
|
|
||||||
|
|
||||||
i.on, &.active i.off {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
i.off, &.active i.on {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.text {
|
|
||||||
flex: auto;
|
|
||||||
margin-left: 8px;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -4,8 +4,12 @@ import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'
|
|||||||
/** @hidden */
|
/** @hidden */
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'checkbox',
|
selector: 'checkbox',
|
||||||
template: require('./checkbox.component.pug'),
|
template: `
|
||||||
styles: [require('./checkbox.component.scss')],
|
<div class="custom-control custom-checkbox">
|
||||||
|
<input type="checkbox" class="custom-control-input" [(ngModel)]='model'>
|
||||||
|
<label class="custom-control-label">{{text}}</label>
|
||||||
|
</div>
|
||||||
|
`,
|
||||||
providers: [
|
providers: [
|
||||||
{ provide: NG_VALUE_ACCESSOR, useExisting: CheckboxComponent, multi: true },
|
{ provide: NG_VALUE_ACCESSOR, useExisting: CheckboxComponent, multi: true },
|
||||||
],
|
],
|
||||||
|
@@ -3,3 +3,24 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
flex: auto;
|
flex: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
::ng-deep split-tab > .child {
|
||||||
|
position: absolute;
|
||||||
|
transition: 0.125s all;
|
||||||
|
opacity: .75;
|
||||||
|
|
||||||
|
&.focused {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.minimized {
|
||||||
|
opacity: .1;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.maximized {
|
||||||
|
z-index: 2;
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.25) 0px 0px 30px;
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -33,8 +33,8 @@ export class SplitContainer {
|
|||||||
/**
|
/**
|
||||||
* @return Flat list of all tabs inside this container
|
* @return Flat list of all tabs inside this container
|
||||||
*/
|
*/
|
||||||
getAllTabs () {
|
getAllTabs (): BaseTabComponent[] {
|
||||||
let r = []
|
let r: BaseTabComponent[] = []
|
||||||
for (const child of this.children) {
|
for (const child of this.children) {
|
||||||
if (child instanceof SplitContainer) {
|
if (child instanceof SplitContainer) {
|
||||||
r = r.concat(child.getAllTabs())
|
r = r.concat(child.getAllTabs())
|
||||||
@@ -94,7 +94,7 @@ export class SplitContainer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async serialize () {
|
async serialize () {
|
||||||
const children = []
|
const children: any[] = []
|
||||||
for (const child of this.children) {
|
for (const child of this.children) {
|
||||||
if (child instanceof SplitContainer) {
|
if (child instanceof SplitContainer) {
|
||||||
children.push(await child.serialize())
|
children.push(await child.serialize())
|
||||||
@@ -141,6 +141,8 @@ export interface SplitSpannerInfo {
|
|||||||
styles: [require('./splitTab.component.scss')],
|
styles: [require('./splitTab.component.scss')],
|
||||||
})
|
})
|
||||||
export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDestroy {
|
export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDestroy {
|
||||||
|
static DIRECTIONS: SplitDirection[] = ['t', 'r', 'b', 'l']
|
||||||
|
|
||||||
/** @hidden */
|
/** @hidden */
|
||||||
@ViewChild('vc', { read: ViewContainerRef }) viewContainer: ViewContainerRef
|
@ViewChild('vc', { read: ViewContainerRef }) viewContainer: ViewContainerRef
|
||||||
|
|
||||||
@@ -156,6 +158,7 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes
|
|||||||
_spanners: SplitSpannerInfo[] = []
|
_spanners: SplitSpannerInfo[] = []
|
||||||
|
|
||||||
private focusedTab: BaseTabComponent
|
private focusedTab: BaseTabComponent
|
||||||
|
private maximizedTab: BaseTabComponent|null = null
|
||||||
private hotkeysSubscription: Subscription
|
private hotkeysSubscription: Subscription
|
||||||
private viewRefs: Map<BaseTabComponent, EmbeddedViewRef<any>> = new Map()
|
private viewRefs: Map<BaseTabComponent, EmbeddedViewRef<any>> = new Map()
|
||||||
|
|
||||||
@@ -226,6 +229,13 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes
|
|||||||
case 'pane-nav-down':
|
case 'pane-nav-down':
|
||||||
this.navigate('b')
|
this.navigate('b')
|
||||||
break
|
break
|
||||||
|
case 'pane-maximize':
|
||||||
|
if (this.maximizedTab) {
|
||||||
|
this.maximize(null)
|
||||||
|
} else if (this.getAllTabs().length > 1) {
|
||||||
|
this.maximize(this.focusedTab)
|
||||||
|
}
|
||||||
|
break
|
||||||
case 'close-pane':
|
case 'close-pane':
|
||||||
this.removeTab(this.focusedTab)
|
this.removeTab(this.focusedTab)
|
||||||
break
|
break
|
||||||
@@ -261,6 +271,10 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes
|
|||||||
return this.focusedTab
|
return this.focusedTab
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getMaximizedTab (): BaseTabComponent|null {
|
||||||
|
return this.maximizedTab
|
||||||
|
}
|
||||||
|
|
||||||
focus (tab: BaseTabComponent) {
|
focus (tab: BaseTabComponent) {
|
||||||
this.focusedTab = tab
|
this.focusedTab = tab
|
||||||
for (const x of this.getAllTabs()) {
|
for (const x of this.getAllTabs()) {
|
||||||
@@ -272,6 +286,15 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes
|
|||||||
tab.emitFocused()
|
tab.emitFocused()
|
||||||
this.focusChanged.next(tab)
|
this.focusChanged.next(tab)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.maximizedTab !== tab) {
|
||||||
|
this.maximizedTab = null
|
||||||
|
}
|
||||||
|
this.layout()
|
||||||
|
}
|
||||||
|
|
||||||
|
maximize (tab: BaseTabComponent|null) {
|
||||||
|
this.maximizedTab = tab
|
||||||
this.layout()
|
this.layout()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -292,9 +315,9 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes
|
|||||||
/**
|
/**
|
||||||
* Inserts a new `tab` to the `side` of the `relative` tab
|
* Inserts a new `tab` to the `side` of the `relative` tab
|
||||||
*/
|
*/
|
||||||
addTab (tab: BaseTabComponent, relative: BaseTabComponent, side: SplitDirection) {
|
addTab (tab: BaseTabComponent, relative: BaseTabComponent|null, side: SplitDirection) {
|
||||||
let target = this.getParentOf(relative) || this.root
|
let target = (relative ? this.getParentOf(relative) : null) || this.root
|
||||||
let insertIndex = target.children.indexOf(relative)
|
let insertIndex = relative ? target.children.indexOf(relative) : -1
|
||||||
|
|
||||||
if (
|
if (
|
||||||
target.orientation === 'v' && ['l', 'r'].includes(side) ||
|
target.orientation === 'v' && ['l', 'r'].includes(side) ||
|
||||||
@@ -302,7 +325,7 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes
|
|||||||
) {
|
) {
|
||||||
const newContainer = new SplitContainer()
|
const newContainer = new SplitContainer()
|
||||||
newContainer.orientation = target.orientation === 'v' ? 'h' : 'v'
|
newContainer.orientation = target.orientation === 'v' ? 'h' : 'v'
|
||||||
newContainer.children = [relative]
|
newContainer.children = relative ? [relative] : []
|
||||||
newContainer.ratios = [1]
|
newContainer.ratios = [1]
|
||||||
target.children[insertIndex] = newContainer
|
target.children[insertIndex] = newContainer
|
||||||
target = newContainer
|
target = newContainer
|
||||||
@@ -333,6 +356,9 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes
|
|||||||
|
|
||||||
removeTab (tab: BaseTabComponent) {
|
removeTab (tab: BaseTabComponent) {
|
||||||
const parent = this.getParentOf(tab)
|
const parent = this.getParentOf(tab)
|
||||||
|
if (!parent) {
|
||||||
|
return
|
||||||
|
}
|
||||||
const index = parent.children.indexOf(tab)
|
const index = parent.children.indexOf(tab)
|
||||||
parent.ratios.splice(index, 1)
|
parent.ratios.splice(index, 1)
|
||||||
parent.children.splice(index, 1)
|
parent.children.splice(index, 1)
|
||||||
@@ -356,11 +382,18 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes
|
|||||||
navigate (dir: SplitDirection) {
|
navigate (dir: SplitDirection) {
|
||||||
let rel: BaseTabComponent | SplitContainer = this.focusedTab
|
let rel: BaseTabComponent | SplitContainer = this.focusedTab
|
||||||
let parent = this.getParentOf(rel)
|
let parent = this.getParentOf(rel)
|
||||||
|
if (!parent) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
const orientation = ['l', 'r'].includes(dir) ? 'h' : 'v'
|
const orientation = ['l', 'r'].includes(dir) ? 'h' : 'v'
|
||||||
|
|
||||||
while (parent !== this.root && parent.orientation !== orientation) {
|
while (parent !== this.root && parent.orientation !== orientation) {
|
||||||
rel = parent
|
rel = parent
|
||||||
parent = this.getParentOf(rel)
|
parent = this.getParentOf(rel)
|
||||||
|
if (!parent) {
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parent.orientation !== orientation) {
|
if (parent.orientation !== orientation) {
|
||||||
@@ -381,13 +414,15 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes
|
|||||||
|
|
||||||
async splitTab (tab: BaseTabComponent, dir: SplitDirection) {
|
async splitTab (tab: BaseTabComponent, dir: SplitDirection) {
|
||||||
const newTab = await this.tabsService.duplicate(tab)
|
const newTab = await this.tabsService.duplicate(tab)
|
||||||
this.addTab(newTab, tab, dir)
|
if (newTab) {
|
||||||
|
this.addTab(newTab, tab, dir)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @returns the immediate parent of `tab`
|
* @returns the immediate parent of `tab`
|
||||||
*/
|
*/
|
||||||
getParentOf (tab: BaseTabComponent | SplitContainer, root?: SplitContainer): SplitContainer {
|
getParentOf (tab: BaseTabComponent | SplitContainer, root?: SplitContainer): SplitContainer|null {
|
||||||
root = root || this.root
|
root = root || this.root
|
||||||
for (const child of root.children) {
|
for (const child of root.children) {
|
||||||
if (child instanceof SplitContainer) {
|
if (child instanceof SplitContainer) {
|
||||||
@@ -414,8 +449,8 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @hidden */
|
/** @hidden */
|
||||||
async getCurrentProcess (): Promise<BaseTabProcess> {
|
async getCurrentProcess (): Promise<BaseTabProcess|null> {
|
||||||
return (await Promise.all(this.getAllTabs().map(x => x.getCurrentProcess()))).find(x => !!x)
|
return (await Promise.all(this.getAllTabs().map(x => x.getCurrentProcess()))).find(x => !!x) || null
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @hidden */
|
/** @hidden */
|
||||||
@@ -424,6 +459,13 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes
|
|||||||
this.splitAdjusted.next(spanner)
|
this.splitAdjusted.next(spanner)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
destroy () {
|
||||||
|
super.destroy()
|
||||||
|
for (const x of this.getAllTabs()) {
|
||||||
|
x.destroy()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private attachTabView (tab: BaseTabComponent) {
|
private attachTabView (tab: BaseTabComponent) {
|
||||||
const ref = this.viewContainer.insert(tab.hostView) as EmbeddedViewRef<any> // eslint-disable-line @typescript-eslint/no-unnecessary-type-assertion
|
const ref = this.viewContainer.insert(tab.hostView) as EmbeddedViewRef<any> // eslint-disable-line @typescript-eslint/no-unnecessary-type-assertion
|
||||||
this.viewRefs.set(tab, ref)
|
this.viewRefs.set(tab, ref)
|
||||||
@@ -443,8 +485,10 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes
|
|||||||
|
|
||||||
private detachTabView (tab: BaseTabComponent) {
|
private detachTabView (tab: BaseTabComponent) {
|
||||||
const ref = this.viewRefs.get(tab)
|
const ref = this.viewRefs.get(tab)
|
||||||
this.viewRefs.delete(tab)
|
if (ref) {
|
||||||
this.viewContainer.remove(this.viewContainer.indexOf(ref))
|
this.viewRefs.delete(tab)
|
||||||
|
this.viewContainer.remove(this.viewContainer.indexOf(ref))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private layout () {
|
private layout () {
|
||||||
@@ -471,14 +515,22 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes
|
|||||||
if (child instanceof SplitContainer) {
|
if (child instanceof SplitContainer) {
|
||||||
this.layoutInternal(child, childX, childY, childW, childH)
|
this.layoutInternal(child, childX, childY, childW, childH)
|
||||||
} else {
|
} else {
|
||||||
const element = this.viewRefs.get(child).rootNodes[0]
|
const element = this.viewRefs.get(child)!.rootNodes[0]
|
||||||
element.style.position = 'absolute'
|
element.classList.toggle('child', true)
|
||||||
|
element.classList.toggle('maximized', child === this.maximizedTab)
|
||||||
|
element.classList.toggle('minimized', this.maximizedTab && child !== this.maximizedTab)
|
||||||
|
element.classList.toggle('focused', child === this.focusedTab)
|
||||||
element.style.left = `${childX}%`
|
element.style.left = `${childX}%`
|
||||||
element.style.top = `${childY}%`
|
element.style.top = `${childY}%`
|
||||||
element.style.width = `${childW}%`
|
element.style.width = `${childW}%`
|
||||||
element.style.height = `${childH}%`
|
element.style.height = `${childH}%`
|
||||||
|
|
||||||
element.style.opacity = child === this.focusedTab ? 1 : 0.75
|
if (child === this.maximizedTab) {
|
||||||
|
element.style.left = '5%'
|
||||||
|
element.style.top = '5%'
|
||||||
|
element.style.width = '90%'
|
||||||
|
element.style.height = '90%'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
offset += sizes[i]
|
offset += sizes[i]
|
||||||
|
|
||||||
@@ -518,7 +570,7 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes
|
|||||||
/** @hidden */
|
/** @hidden */
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class SplitTabRecoveryProvider extends TabRecoveryProvider {
|
export class SplitTabRecoveryProvider extends TabRecoveryProvider {
|
||||||
async recover (recoveryToken: any): Promise<RecoveredTab> {
|
async recover (recoveryToken: any): Promise<RecoveredTab|null> {
|
||||||
if (recoveryToken && recoveryToken.type === 'app:split-tab') {
|
if (recoveryToken && recoveryToken.type === 'app:split-tab') {
|
||||||
return {
|
return {
|
||||||
type: SplitTabComponent,
|
type: SplitTabComponent,
|
||||||
|
@@ -16,13 +16,17 @@ export class SplitTabSpannerComponent {
|
|||||||
@HostBinding('class.v') isVertical = true
|
@HostBinding('class.v') isVertical = true
|
||||||
@HostBinding('style.left') cssLeft: string
|
@HostBinding('style.left') cssLeft: string
|
||||||
@HostBinding('style.top') cssTop: string
|
@HostBinding('style.top') cssTop: string
|
||||||
@HostBinding('style.width') cssWidth: string
|
@HostBinding('style.width') cssWidth: string | null
|
||||||
@HostBinding('style.height') cssHeight: string
|
@HostBinding('style.height') cssHeight: string | null
|
||||||
private marginOffset = -5
|
private marginOffset = -5
|
||||||
|
|
||||||
constructor (private element: ElementRef) { }
|
constructor (private element: ElementRef) { }
|
||||||
|
|
||||||
ngAfterViewInit () {
|
ngAfterViewInit () {
|
||||||
|
this.element.nativeElement.addEventListener('dblclick', () => {
|
||||||
|
this.reset()
|
||||||
|
})
|
||||||
|
|
||||||
this.element.nativeElement.addEventListener('mousedown', (e: MouseEvent) => {
|
this.element.nativeElement.addEventListener('mousedown', (e: MouseEvent) => {
|
||||||
this.isActive = true
|
this.isActive = true
|
||||||
const start = this.isVertical ? e.pageY : e.pageX
|
const start = this.isVertical ? e.pageY : e.pageX
|
||||||
@@ -49,14 +53,16 @@ export class SplitTabSpannerComponent {
|
|||||||
diff = Math.max(diff, -this.container.ratios[this.index - 1] + 0.1)
|
diff = Math.max(diff, -this.container.ratios[this.index - 1] + 0.1)
|
||||||
diff = Math.min(diff, this.container.ratios[this.index] - 0.1)
|
diff = Math.min(diff, this.container.ratios[this.index] - 0.1)
|
||||||
|
|
||||||
this.container.ratios[this.index - 1] += diff
|
if (diff) {
|
||||||
this.container.ratios[this.index] -= diff
|
this.container.ratios[this.index - 1] += diff
|
||||||
this.change.emit()
|
this.container.ratios[this.index] -= diff
|
||||||
|
this.change.emit()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
document.addEventListener('mouseup', offHandler)
|
document.addEventListener('mouseup', offHandler, { passive: true })
|
||||||
this.element.nativeElement.parentElement.addEventListener('mousemove', dragHandler)
|
this.element.nativeElement.parentElement.addEventListener('mousemove', dragHandler)
|
||||||
})
|
}, { passive: true })
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnChanges () {
|
ngOnChanges () {
|
||||||
@@ -67,18 +73,25 @@ export class SplitTabSpannerComponent {
|
|||||||
this.container.x,
|
this.container.x,
|
||||||
this.container.y + this.container.h * this.container.getOffsetRatio(this.index),
|
this.container.y + this.container.h * this.container.getOffsetRatio(this.index),
|
||||||
this.container.w,
|
this.container.w,
|
||||||
null
|
0
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
this.setDimensions(
|
this.setDimensions(
|
||||||
this.container.x + this.container.w * this.container.getOffsetRatio(this.index),
|
this.container.x + this.container.w * this.container.getOffsetRatio(this.index),
|
||||||
this.container.y,
|
this.container.y,
|
||||||
null,
|
0,
|
||||||
this.container.h
|
this.container.h
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reset () {
|
||||||
|
const ratio = (this.container.ratios[this.index - 1] + this.container.ratios[this.index]) / 2
|
||||||
|
this.container.ratios[this.index - 1] = ratio
|
||||||
|
this.container.ratios[this.index] = ratio
|
||||||
|
this.change.emit()
|
||||||
|
}
|
||||||
|
|
||||||
private setDimensions (x: number, y: number, w: number, h: number) {
|
private setDimensions (x: number, y: number, w: number, h: number) {
|
||||||
this.cssLeft = `${x}%`
|
this.cssLeft = `${x}%`
|
||||||
this.cssTop = `${y}%`
|
this.cssTop = `${y}%`
|
||||||
|
@@ -20,7 +20,7 @@ $tabs-height: 38px;
|
|||||||
cursor: -webkit-grab;
|
cursor: -webkit-grab;
|
||||||
|
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
width: 20px;
|
width: 22px;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
transition: 0.25s all;
|
transition: 0.25s all;
|
||||||
@@ -48,7 +48,7 @@ $tabs-height: 38px;
|
|||||||
width: $button-size;
|
width: $button-size;
|
||||||
height: $button-size;
|
height: $button-size;
|
||||||
border-radius: $button-size / 2;
|
border-radius: $button-size / 2;
|
||||||
line-height: $button-size * 0.9;
|
line-height: $button-size;
|
||||||
align-self: center;
|
align-self: center;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
|
|
||||||
|
@@ -10,7 +10,7 @@ import { AppService } from '../services/app.service'
|
|||||||
import { HostAppService, Platform } from '../services/hostApp.service'
|
import { HostAppService, Platform } from '../services/hostApp.service'
|
||||||
|
|
||||||
/** @hidden */
|
/** @hidden */
|
||||||
export interface ISortableComponent {
|
export interface SortableComponentProxy {
|
||||||
setDragHandle (_: HTMLElement)
|
setDragHandle (_: HTMLElement)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -25,7 +25,7 @@ export class TabHeaderComponent {
|
|||||||
@Input() @HostBinding('class.active') active: boolean
|
@Input() @HostBinding('class.active') active: boolean
|
||||||
@Input() @HostBinding('class.has-activity') hasActivity: boolean
|
@Input() @HostBinding('class.has-activity') hasActivity: boolean
|
||||||
@Input() tab: BaseTabComponent
|
@Input() tab: BaseTabComponent
|
||||||
@Input() progress: number
|
@Input() progress: number|null
|
||||||
@ViewChild('handle') handle: ElementRef
|
@ViewChild('handle') handle: ElementRef
|
||||||
|
|
||||||
private constructor (
|
private constructor (
|
||||||
@@ -34,7 +34,7 @@ export class TabHeaderComponent {
|
|||||||
private hostApp: HostAppService,
|
private hostApp: HostAppService,
|
||||||
private ngbModal: NgbModal,
|
private ngbModal: NgbModal,
|
||||||
private hotkeys: HotkeysService,
|
private hotkeys: HotkeysService,
|
||||||
@Inject(SortableComponent) private parentDraggable: ISortableComponent,
|
@Inject(SortableComponent) private parentDraggable: SortableComponentProxy,
|
||||||
@Optional() @Inject(TabContextMenuItemProvider) protected contextMenuProviders: TabContextMenuItemProvider[],
|
@Optional() @Inject(TabContextMenuItemProvider) protected contextMenuProviders: TabContextMenuItemProvider[],
|
||||||
) {
|
) {
|
||||||
this.hotkeys.matchedHotkey.subscribe((hotkey) => {
|
this.hotkeys.matchedHotkey.subscribe((hotkey) => {
|
||||||
@@ -78,12 +78,21 @@ export class TabHeaderComponent {
|
|||||||
this.showRenameTabModal()
|
this.showRenameTabModal()
|
||||||
}
|
}
|
||||||
|
|
||||||
@HostListener('auxclick', ['$event']) async onAuxClick ($event: MouseEvent) {
|
@HostListener('mousedown', ['$event']) async onMouseDown ($event: MouseEvent) {
|
||||||
|
if ($event.which === 2) {
|
||||||
|
$event.preventDefault()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@HostListener('mouseup', ['$event']) async onMouseUp ($event: MouseEvent) {
|
||||||
if ($event.which === 2) {
|
if ($event.which === 2) {
|
||||||
this.app.closeTab(this.tab, true)
|
this.app.closeTab(this.tab, true)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@HostListener('auxclick', ['$event']) async onAuxClick ($event: MouseEvent) {
|
||||||
if ($event.which === 3) {
|
if ($event.which === 3) {
|
||||||
event.preventDefault()
|
$event.preventDefault()
|
||||||
|
|
||||||
const contextMenu = this.electron.remote.Menu.buildFromTemplate(await this.buildContextMenu())
|
const contextMenu = this.electron.remote.Menu.buildFromTemplate(await this.buildContextMenu())
|
||||||
|
|
||||||
|
@@ -16,55 +16,8 @@
|
|||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
margin-left: -10px;
|
margin-left: -10px;
|
||||||
|
|
||||||
&:focus {
|
|
||||||
background: rgba(255,255,255,.05);
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&[disabled] {
|
&[disabled] {
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
.body {
|
|
||||||
$border-width: 2px;
|
|
||||||
border-radius: 5px;
|
|
||||||
border: $border-width solid rgba(255, 255, 255, .2);
|
|
||||||
padding: $padding;
|
|
||||||
height: $toggle-size + $border-width * 2 + $padding * 2;
|
|
||||||
width: $toggle-size * 2 + $border-width * 2 + $padding * 2;
|
|
||||||
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
.toggle {
|
|
||||||
position: absolute;
|
|
||||||
border-radius: 2px;
|
|
||||||
width: $toggle-size;
|
|
||||||
height: $toggle-size;
|
|
||||||
background: #475158;
|
|
||||||
top: $padding;
|
|
||||||
left: $padding;
|
|
||||||
transition: 0.25s left;
|
|
||||||
line-height: 19px;
|
|
||||||
text-align: center;
|
|
||||||
font-size: 10px;
|
|
||||||
|
|
||||||
i {
|
|
||||||
opacity: 0;
|
|
||||||
transition: 0.25s opacity;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.active .body .toggle {
|
|
||||||
left: $toggle-size + $padding;
|
|
||||||
|
|
||||||
i {
|
|
||||||
color: white;
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&:active {
|
|
||||||
background: rgba(255,255,255,.1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -6,13 +6,10 @@ import { CheckboxComponent } from './checkbox.component'
|
|||||||
@Component({
|
@Component({
|
||||||
selector: 'toggle',
|
selector: 'toggle',
|
||||||
template: `
|
template: `
|
||||||
<div class="switch">
|
<div class="custom-control custom-switch">
|
||||||
<div class="body">
|
<input type="checkbox" class="custom-control-input" [(ngModel)]='model'>
|
||||||
<div class="toggle" [class.bg-primary]='model'>
|
<label class="custom-control-label"></label>
|
||||||
<i class="fa fa-check"></i>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
`,
|
`,
|
||||||
styles: [require('./toggle.component.scss')],
|
styles: [require('./toggle.component.scss')],
|
||||||
providers: [
|
providers: [
|
||||||
|
@@ -12,7 +12,8 @@ export class WindowControlsComponent {
|
|||||||
constructor (public hostApp: HostAppService, public app: AppService) { }
|
constructor (public hostApp: HostAppService, public app: AppService) { }
|
||||||
|
|
||||||
async closeWindow () {
|
async closeWindow () {
|
||||||
await this.app.closeAllTabs()
|
if (await this.app.closeAllTabs()) {
|
||||||
this.hostApp.closeWindow()
|
this.hostApp.closeWindow()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -50,5 +50,7 @@ hotkeys:
|
|||||||
- 'Ctrl-Alt-Up'
|
- 'Ctrl-Alt-Up'
|
||||||
pane-nav-left:
|
pane-nav-left:
|
||||||
- 'Ctrl-Alt-Left'
|
- 'Ctrl-Alt-Left'
|
||||||
|
pane-maximize:
|
||||||
|
- 'Ctrl-Alt-Enter'
|
||||||
close-pane: []
|
close-pane: []
|
||||||
pluginBlacklist: ['ssh']
|
pluginBlacklist: ['ssh']
|
||||||
|
@@ -48,6 +48,8 @@ hotkeys:
|
|||||||
- '⌘-⌥-Up'
|
- '⌘-⌥-Up'
|
||||||
pane-nav-left:
|
pane-nav-left:
|
||||||
- '⌘-⌥-Left'
|
- '⌘-⌥-Left'
|
||||||
|
pane-maximize:
|
||||||
|
- '⌘-⌥-Enter'
|
||||||
close-pane:
|
close-pane:
|
||||||
- '⌘-Shift-W'
|
- '⌘-Shift-W'
|
||||||
pluginBlacklist: ['ssh']
|
pluginBlacklist: ['ssh']
|
||||||
|
@@ -5,6 +5,7 @@ hotkeys:
|
|||||||
- 'Ctrl+Space'
|
- 'Ctrl+Space'
|
||||||
toggle-fullscreen:
|
toggle-fullscreen:
|
||||||
- 'F11'
|
- 'F11'
|
||||||
|
- 'Alt-Enter'
|
||||||
close-tab:
|
close-tab:
|
||||||
- 'Ctrl-Shift-W'
|
- 'Ctrl-Shift-W'
|
||||||
toggle-last-tab: []
|
toggle-last-tab: []
|
||||||
@@ -50,5 +51,7 @@ hotkeys:
|
|||||||
- 'Ctrl-Alt-Up'
|
- 'Ctrl-Alt-Up'
|
||||||
pane-nav-left:
|
pane-nav-left:
|
||||||
- 'Ctrl-Alt-Left'
|
- 'Ctrl-Alt-Left'
|
||||||
|
pane-maximize:
|
||||||
|
- 'Ctrl-Alt-Enter'
|
||||||
close-pane: []
|
close-pane: []
|
||||||
pluginBlacklist: []
|
pluginBlacklist: []
|
||||||
|
@@ -8,9 +8,10 @@ appearance:
|
|||||||
frame: thin
|
frame: thin
|
||||||
css: '/* * { color: blue !important; } */'
|
css: '/* * { color: blue !important; } */'
|
||||||
opacity: 1.0
|
opacity: 1.0
|
||||||
vibrancy: false
|
vibrancy: true
|
||||||
vibrancyType: 'blur'
|
vibrancyType: 'blur'
|
||||||
enableAnalytics: true
|
enableAnalytics: true
|
||||||
enableWelcomeTab: true
|
enableWelcomeTab: true
|
||||||
electronFlags:
|
electronFlags:
|
||||||
- ['force_discrete_gpu', '0']
|
- ['force_discrete_gpu', '0']
|
||||||
|
enableAutomaticUpdates: true
|
||||||
|
14
terminus-core/src/directives/fastHtmlBind.directive.ts
Normal file
14
terminus-core/src/directives/fastHtmlBind.directive.ts
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
import { Directive, Input, ElementRef, OnChanges } from '@angular/core'
|
||||||
|
|
||||||
|
/** @hidden */
|
||||||
|
@Directive({
|
||||||
|
selector: '[fastHtmlBind]',
|
||||||
|
})
|
||||||
|
export class FastHtmlBindDirective implements OnChanges {
|
||||||
|
@Input() fastHtmlBind: string
|
||||||
|
constructor (private el: ElementRef) { }
|
||||||
|
|
||||||
|
ngOnChanges () {
|
||||||
|
this.el.nativeElement.innerHTML = this.fastHtmlBind || ''
|
||||||
|
}
|
||||||
|
}
|
@@ -93,6 +93,10 @@ export class AppHotkeyProvider extends HotkeyProvider {
|
|||||||
id: 'split-top',
|
id: 'split-top',
|
||||||
name: 'Split to the top',
|
name: 'Split to the top',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 'pane-maximize',
|
||||||
|
name: 'Maximize the active pane',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: 'pane-nav-up',
|
id: 'pane-nav-up',
|
||||||
name: 'Focus the pane above',
|
name: 'Focus the pane above',
|
||||||
|
@@ -21,6 +21,7 @@ import { SplitTabSpannerComponent } from './components/splitTabSpanner.component
|
|||||||
import { WelcomeTabComponent } from './components/welcomeTab.component'
|
import { WelcomeTabComponent } from './components/welcomeTab.component'
|
||||||
|
|
||||||
import { AutofocusDirective } from './directives/autofocus.directive'
|
import { AutofocusDirective } from './directives/autofocus.directive'
|
||||||
|
import { FastHtmlBindDirective } from './directives/fastHtmlBind.directive'
|
||||||
|
|
||||||
import { HotkeyProvider } from './api/hotkeyProvider'
|
import { HotkeyProvider } from './api/hotkeyProvider'
|
||||||
import { ConfigProvider } from './api/configProvider'
|
import { ConfigProvider } from './api/configProvider'
|
||||||
@@ -80,6 +81,7 @@ const PROVIDERS = [
|
|||||||
RenameTabModalComponent,
|
RenameTabModalComponent,
|
||||||
SafeModeModalComponent,
|
SafeModeModalComponent,
|
||||||
AutofocusDirective,
|
AutofocusDirective,
|
||||||
|
FastHtmlBindDirective,
|
||||||
SplitTabComponent,
|
SplitTabComponent,
|
||||||
SplitTabSpannerComponent,
|
SplitTabSpannerComponent,
|
||||||
WelcomeTabComponent,
|
WelcomeTabComponent,
|
||||||
|
@@ -1,8 +1,11 @@
|
|||||||
|
|
||||||
import { Observable, Subject, AsyncSubject } from 'rxjs'
|
import { Observable, Subject, AsyncSubject } from 'rxjs'
|
||||||
import { takeUntil } from 'rxjs/operators'
|
import { takeUntil } from 'rxjs/operators'
|
||||||
import { Injectable } from '@angular/core'
|
import { Injectable } from '@angular/core'
|
||||||
|
|
||||||
import { BaseTabComponent } from '../components/baseTab.component'
|
import { BaseTabComponent } from '../components/baseTab.component'
|
||||||
import { SplitTabComponent } from '../components/splitTab.component'
|
import { SplitTabComponent } from '../components/splitTab.component'
|
||||||
|
|
||||||
import { ConfigService } from './config.service'
|
import { ConfigService } from './config.service'
|
||||||
import { HostAppService } from './hostApp.service'
|
import { HostAppService } from './hostApp.service'
|
||||||
import { TabRecoveryService } from './tabRecovery.service'
|
import { TabRecoveryService } from './tabRecovery.service'
|
||||||
@@ -22,14 +25,14 @@ class CompletionObserver {
|
|||||||
|
|
||||||
async tick () {
|
async tick () {
|
||||||
if (!await this.tab.getCurrentProcess()) {
|
if (!await this.tab.getCurrentProcess()) {
|
||||||
this.done.next(null)
|
this.done.next()
|
||||||
this.stop()
|
this.stop()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stop () {
|
stop () {
|
||||||
clearInterval(this.interval)
|
clearInterval(this.interval)
|
||||||
this.destroyed.next(null)
|
this.destroyed.next()
|
||||||
this.destroyed.complete()
|
this.destroyed.complete()
|
||||||
this.done.complete()
|
this.done.complete()
|
||||||
}
|
}
|
||||||
@@ -67,29 +70,50 @@ export class AppService {
|
|||||||
private tabRecovery: TabRecoveryService,
|
private tabRecovery: TabRecoveryService,
|
||||||
private tabsService: TabsService,
|
private tabsService: TabsService,
|
||||||
) {
|
) {
|
||||||
this.tabRecovery.recoverTabs().then(tabs => {
|
if (hostApp.getWindow().id === 1) {
|
||||||
for (const tab of tabs) {
|
if (config.store.terminal.recoverTabs) {
|
||||||
this.openNewTabRaw(tab.type, tab.options)
|
this.tabRecovery.recoverTabs().then(tabs => {
|
||||||
|
for (const tab of tabs) {
|
||||||
|
this.openNewTabRaw(tab.type, tab.options)
|
||||||
|
}
|
||||||
|
this.startTabStorage()
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
/** Continue to store the tabs even if the setting is currently off */
|
||||||
|
this.startTabStorage()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.tabsChanged$.subscribe(() => {
|
hostApp.windowFocused$.subscribe(() => {
|
||||||
tabRecovery.saveTabs(this.tabs)
|
this._activeTab?.emitFocused()
|
||||||
})
|
|
||||||
setInterval(() => {
|
|
||||||
tabRecovery.saveTabs(this.tabs)
|
|
||||||
}, 30000)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
addTabRaw (tab: BaseTabComponent) {
|
startTabStorage () {
|
||||||
this.tabs.push(tab)
|
this.tabsChanged$.subscribe(() => {
|
||||||
|
this.tabRecovery.saveTabs(this.tabs)
|
||||||
|
})
|
||||||
|
setInterval(() => {
|
||||||
|
this.tabRecovery.saveTabs(this.tabs)
|
||||||
|
}, 30000)
|
||||||
|
}
|
||||||
|
|
||||||
|
addTabRaw (tab: BaseTabComponent, index: number|null = null) {
|
||||||
|
if (index !== null) {
|
||||||
|
this.tabs.splice(index, 0, tab)
|
||||||
|
} else {
|
||||||
|
this.tabs.push(tab)
|
||||||
|
}
|
||||||
|
|
||||||
this.selectTab(tab)
|
this.selectTab(tab)
|
||||||
this.tabsChanged.next()
|
this.tabsChanged.next()
|
||||||
this.tabOpened.next(tab)
|
this.tabOpened.next(tab)
|
||||||
|
|
||||||
tab.recoveryStateChangedHint$.subscribe(() => {
|
if (this.hostApp.getWindow().id === 1) {
|
||||||
this.tabRecovery.saveTabs(this.tabs)
|
tab.recoveryStateChangedHint$.subscribe(() => {
|
||||||
})
|
this.tabRecovery.saveTabs(this.tabs)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
tab.titleChange$.subscribe(title => {
|
tab.titleChange$.subscribe(title => {
|
||||||
if (tab === this._activeTab) {
|
if (tab === this._activeTab) {
|
||||||
@@ -106,6 +130,11 @@ export class AppService {
|
|||||||
this.tabsChanged.next()
|
this.tabsChanged.next()
|
||||||
this.tabClosed.next(tab)
|
this.tabClosed.next(tab)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if (tab instanceof SplitTabComponent) {
|
||||||
|
tab.tabAdded$.subscribe(() => this.emitTabsChanged())
|
||||||
|
tab.tabRemoved$.subscribe(() => this.emitTabsChanged())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -138,7 +167,7 @@ export class AppService {
|
|||||||
if (this.tabs.includes(this._activeTab)) {
|
if (this.tabs.includes(this._activeTab)) {
|
||||||
this.lastTabIndex = this.tabs.indexOf(this._activeTab)
|
this.lastTabIndex = this.tabs.indexOf(this._activeTab)
|
||||||
} else {
|
} else {
|
||||||
this.lastTabIndex = null
|
this.lastTabIndex = 0
|
||||||
}
|
}
|
||||||
if (this._activeTab) {
|
if (this._activeTab) {
|
||||||
this._activeTab.clearActivity()
|
this._activeTab.clearActivity()
|
||||||
@@ -154,6 +183,17 @@ export class AppService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getParentTab (tab: BaseTabComponent): SplitTabComponent|null {
|
||||||
|
for (const topLevelTab of this.tabs) {
|
||||||
|
if (topLevelTab instanceof SplitTabComponent) {
|
||||||
|
if (topLevelTab.getAllTabs().includes(tab)) {
|
||||||
|
return topLevelTab
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
/** Switches between the current tab and the previously active one */
|
/** Switches between the current tab and the previously active one */
|
||||||
toggleLastTab () {
|
toggleLastTab () {
|
||||||
if (!this.lastTabIndex || this.lastTabIndex >= this.tabs.length) {
|
if (!this.lastTabIndex || this.lastTabIndex >= this.tabs.length) {
|
||||||
@@ -202,24 +242,28 @@ export class AppService {
|
|||||||
async duplicateTab (tab: BaseTabComponent) {
|
async duplicateTab (tab: BaseTabComponent) {
|
||||||
const dup = await this.tabsService.duplicate(tab)
|
const dup = await this.tabsService.duplicate(tab)
|
||||||
if (dup) {
|
if (dup) {
|
||||||
this.addTabRaw(dup)
|
this.addTabRaw(dup, this.tabs.indexOf(tab) + 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async closeAllTabs () {
|
/**
|
||||||
|
* Attempts to close all tabs, returns false if one of the tabs blocked closure
|
||||||
|
*/
|
||||||
|
async closeAllTabs (): Promise<boolean> {
|
||||||
for (const tab of this.tabs) {
|
for (const tab of this.tabs) {
|
||||||
if (!await tab.canClose()) {
|
if (!await tab.canClose()) {
|
||||||
return
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (const tab of this.tabs) {
|
for (const tab of this.tabs) {
|
||||||
tab.destroy()
|
tab.destroy(true)
|
||||||
}
|
}
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @hidden */
|
/** @hidden */
|
||||||
emitReady () {
|
emitReady () {
|
||||||
this.ready.next(null)
|
this.ready.next()
|
||||||
this.ready.complete()
|
this.ready.complete()
|
||||||
this.hostApp.emitReady()
|
this.hostApp.emitReady()
|
||||||
}
|
}
|
||||||
@@ -236,7 +280,7 @@ export class AppService {
|
|||||||
})
|
})
|
||||||
this.completionObservers.set(tab, observer)
|
this.completionObservers.set(tab, observer)
|
||||||
}
|
}
|
||||||
return this.completionObservers.get(tab).done$
|
return this.completionObservers.get(tab)!.done$
|
||||||
}
|
}
|
||||||
|
|
||||||
stopObservingTabCompletion (tab: BaseTabComponent) {
|
stopObservingTabCompletion (tab: BaseTabComponent) {
|
||||||
|
@@ -7,7 +7,7 @@ import { ConfigProvider } from '../api/configProvider'
|
|||||||
import { ElectronService } from './electron.service'
|
import { ElectronService } from './electron.service'
|
||||||
import { HostAppService } from './hostApp.service'
|
import { HostAppService } from './hostApp.service'
|
||||||
|
|
||||||
const configMerge = (a, b) => require('deepmerge')(a, b, { arrayMerge: (_d, s) => s })
|
const configMerge = (a, b) => require('deepmerge')(a, b, { arrayMerge: (_d, s) => s }) // eslint-disable-line @typescript-eslint/no-var-requires
|
||||||
|
|
||||||
function isStructuralMember (v) {
|
function isStructuralMember (v) {
|
||||||
return v instanceof Object && !(v instanceof Array) &&
|
return v instanceof Object && !(v instanceof Array) &&
|
||||||
@@ -71,8 +71,8 @@ export class ConfigProxy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getValue (_key: string): any { }
|
getValue (_key: string): any { } // eslint-disable-line @typescript-eslint/no-empty-function
|
||||||
setValue (_key: string, _value: any) { }
|
setValue (_key: string, _value: any) { } // eslint-disable-line @typescript-eslint/no-empty-function
|
||||||
}
|
}
|
||||||
|
|
||||||
@Injectable({ providedIn: 'root' })
|
@Injectable({ providedIn: 'root' })
|
||||||
@@ -95,7 +95,7 @@ export class ConfigService {
|
|||||||
private changed = new Subject<void>()
|
private changed = new Subject<void>()
|
||||||
private _store: any
|
private _store: any
|
||||||
private defaults: any
|
private defaults: any
|
||||||
private servicesCache: { [id: string]: Function[] } = null
|
private servicesCache: { [id: string]: Function[] }|null = null
|
||||||
|
|
||||||
get changed$ (): Observable<void> { return this.changed }
|
get changed$ (): Observable<void> { return this.changed }
|
||||||
|
|
||||||
@@ -125,7 +125,22 @@ export class ConfigService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getDefaults () {
|
getDefaults () {
|
||||||
return this.defaults
|
const cleanup = o => {
|
||||||
|
if (o instanceof Array) {
|
||||||
|
return o.map(cleanup)
|
||||||
|
} else if (o instanceof Object) {
|
||||||
|
const r = {}
|
||||||
|
for (const k of Object.keys(o)) {
|
||||||
|
if (k !== '__nonStructural') {
|
||||||
|
r[k] = cleanup(o[k])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return r
|
||||||
|
} else {
|
||||||
|
return o
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cleanup(this.defaults)
|
||||||
}
|
}
|
||||||
|
|
||||||
load (): void {
|
load (): void {
|
||||||
@@ -170,7 +185,7 @@ export class ConfigService {
|
|||||||
*
|
*
|
||||||
* @typeparam T Base provider type
|
* @typeparam T Base provider type
|
||||||
*/
|
*/
|
||||||
enabledServices<T> (services: T[]): T[] {
|
enabledServices<T extends object> (services: T[]): T[] {
|
||||||
if (!this.servicesCache) {
|
if (!this.servicesCache) {
|
||||||
this.servicesCache = {}
|
this.servicesCache = {}
|
||||||
const ngModule = window['rootModule'].ngInjectorDef
|
const ngModule = window['rootModule'].ngInjectorDef
|
||||||
|
@@ -30,8 +30,8 @@ export class DockingService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const newBounds: Bounds = { x: 0, y: 0, width: 0, height: 0 }
|
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 fill = this.config.store.appearance.dockFill <= 1 ? this.config.store.appearance.dockFill : 1
|
||||||
const [minWidth, minHeight] = this.hostApp.getWindow().getMinimumSize()
|
const [minWidth, minHeight] = this.hostApp.getWindow().getMinimumSize()
|
||||||
|
|
||||||
if (dockSide === 'left' || dockSide === 'right') {
|
if (dockSide === 'left' || dockSide === 'right') {
|
||||||
@@ -64,15 +64,15 @@ export class DockingService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getScreens () {
|
getScreens () {
|
||||||
const primaryDisplayID = this.electron.screen.getPrimaryDisplay().id;
|
const primaryDisplayID = this.electron.screen.getPrimaryDisplay().id
|
||||||
return this.electron.screen.getAllDisplays().sort((a,b) => (
|
return this.electron.screen.getAllDisplays().sort((a, b) =>
|
||||||
a.bounds.x === b.bounds.x ? a.bounds.y - b.bounds.y : a.bounds.x - b.bounds.x
|
a.bounds.x === b.bounds.x ? a.bounds.y - b.bounds.y : a.bounds.x - b.bounds.x
|
||||||
)).map((display,index) => {
|
).map((display,index) => {
|
||||||
return {
|
return {
|
||||||
id: display.id,
|
id: display.id,
|
||||||
name: display.id === primaryDisplayID ? 'Primary Display' : `Display ${index +1}`,
|
name: display.id === primaryDisplayID ? 'Primary Display' : `Display ${index +1}`,
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
private repositionWindow () {
|
private repositionWindow () {
|
||||||
|
@@ -56,10 +56,6 @@ export class ElectronService {
|
|||||||
browserWindow: Electron.BrowserWindow,
|
browserWindow: Electron.BrowserWindow,
|
||||||
options: Electron.MessageBoxOptions
|
options: Electron.MessageBoxOptions
|
||||||
): Promise<MessageBoxResponse> {
|
): Promise<MessageBoxResponse> {
|
||||||
return new Promise(resolve => {
|
return this.dialog.showMessageBox(browserWindow, options)
|
||||||
this.dialog.showMessageBox(browserWindow, options, (response, checkboxChecked) => {
|
|
||||||
resolve({ response, checkboxChecked })
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -30,9 +30,14 @@ export class HomeBaseService {
|
|||||||
let body = `Version: ${this.appVersion}\n`
|
let body = `Version: ${this.appVersion}\n`
|
||||||
body += `Platform: ${os.platform()} ${os.release()}\n`
|
body += `Platform: ${os.platform()} ${os.release()}\n`
|
||||||
const label = {
|
const label = {
|
||||||
|
aix: 'OS: IBM AIX',
|
||||||
|
android: 'OS: Android',
|
||||||
darwin: 'OS: macOS',
|
darwin: 'OS: macOS',
|
||||||
windows: 'OS: Windows',
|
freebsd: 'OS: FreeBSD',
|
||||||
linux: 'OS: Linux',
|
linux: 'OS: Linux',
|
||||||
|
openbsd: 'OS: OpenBSD',
|
||||||
|
sunos: 'OS: Solaris',
|
||||||
|
win32: 'OS: Windows',
|
||||||
}[os.platform()]
|
}[os.platform()]
|
||||||
const plugins = (window as any).installedPlugins.filter(x => !x.isBuiltin).map(x => x.name)
|
const plugins = (window as any).installedPlugins.filter(x => !x.isBuiltin).map(x => x.name)
|
||||||
body += `Plugins: ${plugins.join(', ') || 'none'}\n\n`
|
body += `Plugins: ${plugins.join(', ') || 'none'}\n\n`
|
||||||
|
@@ -39,6 +39,7 @@ export class HostAppService {
|
|||||||
private configChangeBroadcast = new Subject<void>()
|
private configChangeBroadcast = new Subject<void>()
|
||||||
private windowCloseRequest = new Subject<void>()
|
private windowCloseRequest = new Subject<void>()
|
||||||
private windowMoved = new Subject<void>()
|
private windowMoved = new Subject<void>()
|
||||||
|
private windowFocused = new Subject<void>()
|
||||||
private displayMetricsChanged = new Subject<void>()
|
private displayMetricsChanged = new Subject<void>()
|
||||||
private logger: Logger
|
private logger: Logger
|
||||||
private windowId: number
|
private windowId: number
|
||||||
@@ -85,6 +86,8 @@ export class HostAppService {
|
|||||||
|
|
||||||
get windowMoved$ (): Observable<void> { return this.windowMoved }
|
get windowMoved$ (): Observable<void> { return this.windowMoved }
|
||||||
|
|
||||||
|
get windowFocused$ (): Observable<void> { return this.windowFocused }
|
||||||
|
|
||||||
get displayMetricsChanged$ (): Observable<void> { return this.displayMetricsChanged }
|
get displayMetricsChanged$ (): Observable<void> { return this.displayMetricsChanged }
|
||||||
|
|
||||||
private constructor (
|
private constructor (
|
||||||
@@ -128,6 +131,10 @@ export class HostAppService {
|
|||||||
this.zone.run(() => this.windowMoved.next())
|
this.zone.run(() => this.windowMoved.next())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
electron.ipcRenderer.on('host:window-focused', () => {
|
||||||
|
this.zone.run(() => this.windowFocused.next())
|
||||||
|
})
|
||||||
|
|
||||||
electron.ipcRenderer.on('host:display-metrics-changed', () => {
|
electron.ipcRenderer.on('host:display-metrics-changed', () => {
|
||||||
this.zone.run(() => this.displayMetricsChanged.next())
|
this.zone.run(() => this.displayMetricsChanged.next())
|
||||||
})
|
})
|
||||||
@@ -147,6 +154,8 @@ export class HostAppService {
|
|||||||
this.cliPaste.next(text)
|
this.cliPaste.next(text)
|
||||||
} else if (op === 'profile') {
|
} else if (op === 'profile') {
|
||||||
this.cliOpenProfile.next(argv.profileName)
|
this.cliOpenProfile.next(argv.profileName)
|
||||||
|
} else if (op === undefined) {
|
||||||
|
this.newWindow()
|
||||||
} else {
|
} else {
|
||||||
this.secondInstance.next()
|
this.secondInstance.next()
|
||||||
}
|
}
|
||||||
@@ -213,7 +222,7 @@ export class HostAppService {
|
|||||||
setVibrancy (enable: boolean, type: string) {
|
setVibrancy (enable: boolean, type: string) {
|
||||||
document.body.classList.toggle('vibrant', enable)
|
document.body.classList.toggle('vibrant', enable)
|
||||||
if (this.platform === Platform.macOS) {
|
if (this.platform === Platform.macOS) {
|
||||||
this.getWindow().setVibrancy(enable ? 'dark' : null)
|
this.getWindow().setVibrancy(enable ? 'dark' : null as any) // electron issue 20269
|
||||||
}
|
}
|
||||||
if (this.platform === Platform.Windows) {
|
if (this.platform === Platform.Windows) {
|
||||||
this.electron.ipcRenderer.send('window-set-vibrancy', enable, type)
|
this.electron.ipcRenderer.send('window-set-vibrancy', enable, type)
|
||||||
|
@@ -93,7 +93,7 @@ export class HotkeysService {
|
|||||||
return stringifyKeySequence(this.currentKeystrokes.map(x => x.event))
|
return stringifyKeySequence(this.currentKeystrokes.map(x => x.event))
|
||||||
}
|
}
|
||||||
|
|
||||||
getCurrentFullyMatchedHotkey (): string {
|
getCurrentFullyMatchedHotkey (): string|null {
|
||||||
const currentStrokes = this.getCurrentKeystrokes()
|
const currentStrokes = this.getCurrentKeystrokes()
|
||||||
const config = this.getHotkeysConfig()
|
const config = this.getHotkeysConfig()
|
||||||
for (const id in config) {
|
for (const id in config) {
|
||||||
@@ -116,7 +116,7 @@ export class HotkeysService {
|
|||||||
getCurrentPartiallyMatchedHotkeys (): PartialHotkeyMatch[] {
|
getCurrentPartiallyMatchedHotkeys (): PartialHotkeyMatch[] {
|
||||||
const currentStrokes = this.getCurrentKeystrokes()
|
const currentStrokes = this.getCurrentKeystrokes()
|
||||||
const config = this.getHotkeysConfig()
|
const config = this.getHotkeysConfig()
|
||||||
const result = []
|
const result: PartialHotkeyMatch[] = []
|
||||||
for (const id in config) {
|
for (const id in config) {
|
||||||
for (const sequence of config[id]) {
|
for (const sequence of config[id]) {
|
||||||
for (let matchLength = Math.min(currentStrokes.length, sequence.length); matchLength > 0; matchLength--) {
|
for (let matchLength = Math.min(currentStrokes.length, sequence.length); matchLength > 0; matchLength--) {
|
||||||
|
@@ -15,7 +15,7 @@ export function stringifyKeySequence (events: KeyboardEvent[]): string[] {
|
|||||||
events = events.slice()
|
events = events.slice()
|
||||||
|
|
||||||
while (events.length > 0) {
|
while (events.length > 0) {
|
||||||
const event = events.shift()
|
const event = events.shift()!
|
||||||
if ((event as any).event === 'keydown') {
|
if ((event as any).event === 'keydown') {
|
||||||
const itemKeys: string[] = []
|
const itemKeys: string[] = []
|
||||||
if (event.ctrlKey) {
|
if (event.ctrlKey) {
|
||||||
|
@@ -18,11 +18,18 @@ export class ShellIntegrationService {
|
|||||||
private automatorWorkflowsDestination: string
|
private automatorWorkflowsDestination: string
|
||||||
private registryKeys = [
|
private registryKeys = [
|
||||||
{
|
{
|
||||||
path: 'Software\\Classes\\Directory\\Background\\shell\\Open Terminus here',
|
path: 'Software\\Classes\\Directory\\Background\\shell\\Terminus',
|
||||||
|
value: 'Open Terminus here',
|
||||||
command: 'open "%V"',
|
command: 'open "%V"',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'Software\\Classes\\*\\shell\\Paste path into Terminus',
|
path: 'SOFTWARE\\Classes\\Directory\\shell\\Terminus',
|
||||||
|
value: 'Open Terminus here',
|
||||||
|
command: 'open "%V"',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'Software\\Classes\\*\\shell\\Terminus',
|
||||||
|
value: 'Paste path into Terminus',
|
||||||
command: 'paste "%V"',
|
command: 'paste "%V"',
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
@@ -37,7 +44,7 @@ export class ShellIntegrationService {
|
|||||||
'extras',
|
'extras',
|
||||||
'automator-workflows',
|
'automator-workflows',
|
||||||
)
|
)
|
||||||
this.automatorWorkflowsDestination = path.join(process.env.HOME, 'Library', 'Services')
|
this.automatorWorkflowsDestination = path.join(process.env.HOME as string, 'Library', 'Services')
|
||||||
}
|
}
|
||||||
this.updatePaths()
|
this.updatePaths()
|
||||||
}
|
}
|
||||||
@@ -61,9 +68,17 @@ export class ShellIntegrationService {
|
|||||||
for (const registryKey of this.registryKeys) {
|
for (const registryKey of this.registryKeys) {
|
||||||
wnr.createRegistryKey(wnr.HK.CU, registryKey.path)
|
wnr.createRegistryKey(wnr.HK.CU, registryKey.path)
|
||||||
wnr.createRegistryKey(wnr.HK.CU, registryKey.path + '\\command')
|
wnr.createRegistryKey(wnr.HK.CU, registryKey.path + '\\command')
|
||||||
|
wnr.setRegistryValue(wnr.HK.CU, registryKey.path, '', wnr.REG.SZ, registryKey.value)
|
||||||
wnr.setRegistryValue(wnr.HK.CU, registryKey.path, 'Icon', wnr.REG.SZ, exe)
|
wnr.setRegistryValue(wnr.HK.CU, registryKey.path, 'Icon', wnr.REG.SZ, exe)
|
||||||
wnr.setRegistryValue(wnr.HK.CU, registryKey.path + '\\command', '', wnr.REG.SZ, exe + ' ' + registryKey.command)
|
wnr.setRegistryValue(wnr.HK.CU, registryKey.path + '\\command', '', wnr.REG.SZ, exe + ' ' + registryKey.command)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(wnr.getRegistryKey(wnr.HK.CU, 'Software\\Classes\\Directory\\Background\\shell\\Open Terminus here')) {
|
||||||
|
wnr.deleteRegistryKey(wnr.HK.CU, 'Software\\Classes\\Directory\\Background\\shell\\Open Terminus here')
|
||||||
|
}
|
||||||
|
if(wnr.getRegistryKey(wnr.HK.CU, 'Software\\Classes\\*\\shell\\Paste path into Terminus')) {
|
||||||
|
wnr.deleteRegistryKey(wnr.HK.CU, 'Software\\Classes\\*\\shell\\Paste path into Terminus')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -27,7 +27,7 @@ export class TabRecoveryService {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
async recoverTab (token: any): Promise<RecoveredTab> {
|
async recoverTab (token: any): Promise<RecoveredTab|null> {
|
||||||
for (const provider of this.config.enabledServices(this.tabRecoveryProviders)) {
|
for (const provider of this.config.enabledServices(this.tabRecoveryProviders)) {
|
||||||
try {
|
try {
|
||||||
const tab = await provider.recover(token)
|
const tab = await provider.recover(token)
|
||||||
|
@@ -29,7 +29,7 @@ export class TabsService {
|
|||||||
/**
|
/**
|
||||||
* Duplicates an existing tab instance (using the tab recovery system)
|
* Duplicates an existing tab instance (using the tab recovery system)
|
||||||
*/
|
*/
|
||||||
async duplicate (tab: BaseTabComponent): Promise<BaseTabComponent> {
|
async duplicate (tab: BaseTabComponent): Promise<BaseTabComponent|null> {
|
||||||
const token = await tab.getRecoveryToken()
|
const token = await tab.getRecoveryToken()
|
||||||
if (!token) {
|
if (!token) {
|
||||||
return null
|
return null
|
||||||
|
@@ -4,7 +4,7 @@ import { Theme } from '../api/theme'
|
|||||||
|
|
||||||
@Injectable({ providedIn: 'root' })
|
@Injectable({ providedIn: 'root' })
|
||||||
export class ThemesService {
|
export class ThemesService {
|
||||||
private styleElement: HTMLElement = null
|
private styleElement: HTMLElement|null = null
|
||||||
|
|
||||||
/** @hidden */
|
/** @hidden */
|
||||||
constructor (
|
constructor (
|
||||||
@@ -17,22 +17,22 @@ export class ThemesService {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
findTheme (name: string): Theme {
|
findTheme (name: string): Theme|null {
|
||||||
return this.config.enabledServices(this.themes).find(x => x.name === name)
|
return this.config.enabledServices(this.themes).find(x => x.name === name) || null
|
||||||
}
|
}
|
||||||
|
|
||||||
findCurrentTheme (): Theme {
|
findCurrentTheme (): Theme {
|
||||||
return this.findTheme(this.config.store.appearance.theme) || this.findTheme('Standard')
|
return this.findTheme(this.config.store.appearance.theme) || this.findTheme('Standard')!
|
||||||
}
|
}
|
||||||
|
|
||||||
applyTheme (theme: Theme): void {
|
applyTheme (theme: Theme): void {
|
||||||
if (!this.styleElement) {
|
if (!this.styleElement) {
|
||||||
this.styleElement = document.createElement('style')
|
this.styleElement = document.createElement('style')
|
||||||
this.styleElement.setAttribute('id', 'theme')
|
this.styleElement.setAttribute('id', 'theme')
|
||||||
document.querySelector('head').appendChild(this.styleElement)
|
document.querySelector('head')!.appendChild(this.styleElement)
|
||||||
}
|
}
|
||||||
this.styleElement.textContent = theme.css
|
this.styleElement.textContent = theme.css
|
||||||
document.querySelector('style#custom-css').innerHTML = this.config.store.appearance.css
|
document.querySelector('style#custom-css')!.innerHTML = this.config.store.appearance.css
|
||||||
}
|
}
|
||||||
|
|
||||||
private applyCurrentTheme (): void {
|
private applyCurrentTheme (): void {
|
||||||
|
@@ -42,7 +42,7 @@ export class TouchbarService {
|
|||||||
const showIcon = this.app.activeTab !== tab && hasActivity
|
const showIcon = this.app.activeTab !== tab && hasActivity
|
||||||
const segment = this.tabSegments[app.tabs.indexOf(tab)]
|
const segment = this.tabSegments[app.tabs.indexOf(tab)]
|
||||||
if (segment) {
|
if (segment) {
|
||||||
segment.icon = showIcon ? activityIcon : null
|
segment.icon = showIcon ? activityIcon : undefined
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@@ -83,7 +83,9 @@ export class TouchbarService {
|
|||||||
segments: buttons.map(button => this.getButton(button)),
|
segments: buttons.map(button => this.getButton(button)),
|
||||||
mode: 'buttons',
|
mode: 'buttons',
|
||||||
change: (selectedIndex) => this.zone.run(() => {
|
change: (selectedIndex) => this.zone.run(() => {
|
||||||
buttons[selectedIndex].click()
|
if (buttons[selectedIndex].click) {
|
||||||
|
buttons[selectedIndex].click!()
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -100,8 +102,8 @@ export class TouchbarService {
|
|||||||
|
|
||||||
private getButton (button: ToolbarButton): Electron.SegmentedControlSegment {
|
private getButton (button: ToolbarButton): Electron.SegmentedControlSegment {
|
||||||
return {
|
return {
|
||||||
label: button.touchBarNSImage ? null : this.shortenTitle(button.touchBarTitle || button.title),
|
label: button.touchBarNSImage ? undefined : this.shortenTitle(button.touchBarTitle || button.title),
|
||||||
icon: button.touchBarNSImage ? this.getCachedNSImage(button.touchBarNSImage) : null,
|
icon: button.touchBarNSImage ? this.getCachedNSImage(button.touchBarNSImage) : undefined,
|
||||||
// click: () => this.zone.run(() => button.click()),
|
// click: () => this.zone.run(() => button.click()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,8 +1,13 @@
|
|||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
|
import * as fs from 'fs'
|
||||||
|
import os from 'os'
|
||||||
|
|
||||||
|
import { spawn } from 'mz/child_process'
|
||||||
|
|
||||||
import { Injectable } from '@angular/core'
|
import { Injectable } from '@angular/core'
|
||||||
import { Logger, LogService } from './log.service'
|
import { Logger, LogService } from './log.service'
|
||||||
import { ElectronService } from './electron.service'
|
import { ElectronService } from './electron.service'
|
||||||
|
import { ConfigService } from './config.service'
|
||||||
|
|
||||||
const UPDATES_URL = 'https://api.github.com/repos/eugeny/terminus/releases/latest'
|
const UPDATES_URL = 'https://api.github.com/repos/eugeny/terminus/releases/latest'
|
||||||
|
|
||||||
@@ -18,13 +23,22 @@ export class UpdaterService {
|
|||||||
constructor (
|
constructor (
|
||||||
log: LogService,
|
log: LogService,
|
||||||
private electron: ElectronService,
|
private electron: ElectronService,
|
||||||
|
config: ConfigService,
|
||||||
) {
|
) {
|
||||||
this.logger = log.create('updater')
|
this.logger = log.create('updater')
|
||||||
|
|
||||||
|
if (process.platform === 'linux') {
|
||||||
|
this.electronUpdaterAvailable = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
this.autoUpdater = electron.remote.require('electron-updater').autoUpdater
|
this.autoUpdater = electron.remote.require('electron-updater').autoUpdater
|
||||||
|
|
||||||
|
this.autoUpdater.autoInstallOnAppQuit = !!config.store.enableAutomaticUpdates
|
||||||
|
|
||||||
this.autoUpdater.on('update-available', () => {
|
this.autoUpdater.on('update-available', () => {
|
||||||
this.logger.info('Update available')
|
this.logger.info('Update available')
|
||||||
|
this.autoUpdater.downloadUpdate()
|
||||||
})
|
})
|
||||||
this.autoUpdater.once('update-not-available', () => {
|
this.autoUpdater.once('update-not-available', () => {
|
||||||
this.logger.info('No updates')
|
this.logger.info('No updates')
|
||||||
@@ -48,7 +62,7 @@ export class UpdaterService {
|
|||||||
|
|
||||||
async check (): Promise<boolean> {
|
async check (): Promise<boolean> {
|
||||||
if (!this.electronUpdaterAvailable) {
|
if (!this.electronUpdaterAvailable) {
|
||||||
this.logger.debug('Checking for updates')
|
this.logger.debug('Checking for updates through fallback method.')
|
||||||
const response = await axios.get(UPDATES_URL)
|
const response = await axios.get(UPDATES_URL)
|
||||||
const data = response.data
|
const data = response.data
|
||||||
const version = data.tag_name.substring(1)
|
const version = data.tag_name.substring(1)
|
||||||
@@ -67,8 +81,21 @@ export class UpdaterService {
|
|||||||
if (!this.electronUpdaterAvailable) {
|
if (!this.electronUpdaterAvailable) {
|
||||||
this.electron.shell.openExternal(this.updateURL)
|
this.electron.shell.openExternal(this.updateURL)
|
||||||
} else {
|
} else {
|
||||||
await this.downloaded
|
if (process.platform === 'win32') {
|
||||||
this.autoUpdater.quitAndInstall()
|
let downloadpath = await this.autoUpdater.downloadUpdate()
|
||||||
|
fs.exists(downloadpath[0], (exists) => {
|
||||||
|
if (exists) {
|
||||||
|
fs.copyFile(downloadpath[0], os.tmpdir() + 'terminus-installer-temp.exe', (err) => {
|
||||||
|
if (!err) {
|
||||||
|
spawn(os.tmpdir() + 'terminus-installer-temp.exe', ['--force-run'], { detached: true, stdio: 'ignore' })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
await this.downloaded
|
||||||
|
this.autoUpdater.quitAndInstall(false, true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
import { Injectable, NgZone } from '@angular/core'
|
import { Injectable, NgZone } from '@angular/core'
|
||||||
|
import { Subscription } from 'rxjs'
|
||||||
import { AppService } from './services/app.service'
|
import { AppService } from './services/app.service'
|
||||||
import { BaseTabComponent } from './components/baseTab.component'
|
import { BaseTabComponent } from './components/baseTab.component'
|
||||||
import { TabHeaderComponent } from './components/tabHeader.component'
|
import { TabHeaderComponent } from './components/tabHeader.component'
|
||||||
@@ -16,39 +17,49 @@ export class CloseContextMenu extends TabContextMenuItemProvider {
|
|||||||
super()
|
super()
|
||||||
}
|
}
|
||||||
|
|
||||||
async getItems (tab: BaseTabComponent): Promise<Electron.MenuItemConstructorOptions[]> {
|
async getItems (tab: BaseTabComponent, tabHeader?: TabHeaderComponent): Promise<Electron.MenuItemConstructorOptions[]> {
|
||||||
return [
|
let items = [
|
||||||
{
|
{
|
||||||
label: 'Close',
|
label: 'Close',
|
||||||
click: () => this.zone.run(() => {
|
click: () => this.zone.run(() => {
|
||||||
this.app.closeTab(tab, true)
|
if (this.app.tabs.includes(tab)) {
|
||||||
}),
|
this.app.closeTab(tab, true)
|
||||||
},
|
} else {
|
||||||
{
|
tab.destroy()
|
||||||
label: 'Close other tabs',
|
|
||||||
click: () => this.zone.run(() => {
|
|
||||||
for (const t of this.app.tabs.filter(x => x !== tab)) {
|
|
||||||
this.app.closeTab(t, true)
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Close tabs to the right',
|
|
||||||
click: () => this.zone.run(() => {
|
|
||||||
for (const t of this.app.tabs.slice(this.app.tabs.indexOf(tab) + 1)) {
|
|
||||||
this.app.closeTab(t, true)
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Close tabs to the left',
|
|
||||||
click: () => this.zone.run(() => {
|
|
||||||
for (const t of this.app.tabs.slice(0, this.app.tabs.indexOf(tab))) {
|
|
||||||
this.app.closeTab(t, true)
|
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
if (tabHeader) {
|
||||||
|
items = [
|
||||||
|
...items,
|
||||||
|
{
|
||||||
|
label: 'Close other tabs',
|
||||||
|
click: () => this.zone.run(() => {
|
||||||
|
for (const t of this.app.tabs.filter(x => x !== tab)) {
|
||||||
|
this.app.closeTab(t, true)
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Close tabs to the right',
|
||||||
|
click: () => this.zone.run(() => {
|
||||||
|
for (const t of this.app.tabs.slice(this.app.tabs.indexOf(tab) + 1)) {
|
||||||
|
this.app.closeTab(t, true)
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Close tabs to the left',
|
||||||
|
click: () => this.zone.run(() => {
|
||||||
|
for (const t of this.app.tabs.slice(0, this.app.tabs.indexOf(tab))) {
|
||||||
|
this.app.closeTab(t, true)
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
return items
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,28 +86,31 @@ export class CommonOptionsContextMenu extends TabContextMenuItemProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async getItems (tab: BaseTabComponent, tabHeader?: TabHeaderComponent): Promise<Electron.MenuItemConstructorOptions[]> {
|
async getItems (tab: BaseTabComponent, tabHeader?: TabHeaderComponent): Promise<Electron.MenuItemConstructorOptions[]> {
|
||||||
return [
|
if (tabHeader) {
|
||||||
{
|
return [
|
||||||
label: 'Rename',
|
{
|
||||||
click: () => this.zone.run(() => tabHeader.showRenameTabModal()),
|
label: 'Rename',
|
||||||
},
|
click: () => this.zone.run(() => tabHeader?.showRenameTabModal()),
|
||||||
{
|
},
|
||||||
label: 'Duplicate',
|
{
|
||||||
click: () => this.zone.run(() => this.app.duplicateTab(tab)),
|
label: 'Duplicate',
|
||||||
},
|
click: () => this.zone.run(() => this.app.duplicateTab(tab)),
|
||||||
{
|
},
|
||||||
label: 'Color',
|
{
|
||||||
sublabel: COLORS.find(x => x.value === tab.color).name,
|
label: 'Color',
|
||||||
submenu: COLORS.map(color => ({
|
sublabel: COLORS.find(x => x.value === tab.color)!.name,
|
||||||
label: color.name,
|
submenu: COLORS.map(color => ({
|
||||||
type: 'radio',
|
label: color.name,
|
||||||
checked: tab.color === color.value,
|
type: 'radio',
|
||||||
click: () => this.zone.run(() => {
|
checked: tab.color === color.value,
|
||||||
tab.color = color.value
|
click: () => this.zone.run(() => {
|
||||||
}),
|
tab.color = color.value
|
||||||
})) as Electron.MenuItemConstructorOptions[],
|
}),
|
||||||
},
|
})) as Electron.MenuItemConstructorOptions[],
|
||||||
]
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
return []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,36 +126,61 @@ export class TaskCompletionContextMenu extends TabContextMenuItemProvider {
|
|||||||
|
|
||||||
async getItems (tab: BaseTabComponent): Promise<Electron.MenuItemConstructorOptions[]> {
|
async getItems (tab: BaseTabComponent): Promise<Electron.MenuItemConstructorOptions[]> {
|
||||||
const process = await tab.getCurrentProcess()
|
const process = await tab.getCurrentProcess()
|
||||||
if (process) {
|
let items: Electron.MenuItemConstructorOptions[] = []
|
||||||
return [
|
|
||||||
{
|
|
||||||
id: 'process-name',
|
|
||||||
enabled: false,
|
|
||||||
label: 'Current process: ' + process.name,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Notify when done',
|
|
||||||
type: 'checkbox',
|
|
||||||
checked: (tab as any).__completionNotificationEnabled,
|
|
||||||
click: () => this.zone.run(() => {
|
|
||||||
(tab as any).__completionNotificationEnabled = !(tab as any).__completionNotificationEnabled
|
|
||||||
|
|
||||||
if ((tab as any).__completionNotificationEnabled) {
|
const extTab: (BaseTabComponent & { __completionNotificationEnabled?: boolean, __outputNotificationSubscription?: Subscription|null }) = tab
|
||||||
this.app.observeTabCompletion(tab).subscribe(() => {
|
|
||||||
new Notification('Process completed', {
|
if (process) {
|
||||||
body: process.name,
|
items.push({
|
||||||
}).addEventListener('click', () => {
|
id: 'process-name',
|
||||||
this.app.selectTab(tab)
|
enabled: false,
|
||||||
})
|
label: 'Current process: ' + process.name,
|
||||||
;(tab as any).__completionNotificationEnabled = false
|
})
|
||||||
|
items.push({
|
||||||
|
label: 'Notify when done',
|
||||||
|
type: 'checkbox',
|
||||||
|
checked: extTab.__completionNotificationEnabled,
|
||||||
|
click: () => this.zone.run(() => {
|
||||||
|
extTab.__completionNotificationEnabled = !extTab.__completionNotificationEnabled
|
||||||
|
|
||||||
|
if (extTab.__completionNotificationEnabled) {
|
||||||
|
this.app.observeTabCompletion(tab).subscribe(() => {
|
||||||
|
new Notification('Process completed', {
|
||||||
|
body: process.name,
|
||||||
|
}).addEventListener('click', () => {
|
||||||
|
this.app.selectTab(tab)
|
||||||
})
|
})
|
||||||
} else {
|
extTab.__completionNotificationEnabled = false
|
||||||
this.app.stopObservingTabCompletion(tab)
|
})
|
||||||
}
|
} else {
|
||||||
}),
|
this.app.stopObservingTabCompletion(tab)
|
||||||
},
|
}
|
||||||
]
|
}),
|
||||||
|
})
|
||||||
}
|
}
|
||||||
return []
|
items.push({
|
||||||
|
label: 'Notify on activity',
|
||||||
|
type: 'checkbox',
|
||||||
|
checked: !!extTab.__outputNotificationSubscription,
|
||||||
|
click: () => this.zone.run(() => {
|
||||||
|
if (extTab.__outputNotificationSubscription) {
|
||||||
|
extTab.__outputNotificationSubscription.unsubscribe()
|
||||||
|
extTab.__outputNotificationSubscription = null
|
||||||
|
} else {
|
||||||
|
extTab.__outputNotificationSubscription = tab.activity$.subscribe(active => {
|
||||||
|
if (extTab.__outputNotificationSubscription && active) {
|
||||||
|
extTab.__outputNotificationSubscription.unsubscribe()
|
||||||
|
extTab.__outputNotificationSubscription = null
|
||||||
|
new Notification('Tab activity', {
|
||||||
|
body: tab.title,
|
||||||
|
}).addEventListener('click', () => {
|
||||||
|
this.app.selectTab(tab)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
return items
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,4 +16,8 @@ app-root {
|
|||||||
terminaltab .content {
|
terminaltab .content {
|
||||||
margin: 5px !important;
|
margin: 5px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ssh-tab .content {
|
||||||
|
margin: 5px !important;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -138,7 +138,7 @@ app-root {
|
|||||||
background: transparent;
|
background: transparent;
|
||||||
line-height: 42px;
|
line-height: 42px;
|
||||||
|
|
||||||
svg {
|
svg, path {
|
||||||
fill: $black;
|
fill: $black;
|
||||||
fill-opacity: 0.75;
|
fill-opacity: 0.75;
|
||||||
}
|
}
|
||||||
|
@@ -1,103 +1,11 @@
|
|||||||
$tab-border-radius: 5px;
|
@import "./theme.vars";
|
||||||
|
|
||||||
|
// ---------
|
||||||
|
|
||||||
|
|
||||||
$button-hover-bg: rgba(0, 0, 0, .25);
|
$button-hover-bg: rgba(0, 0, 0, .25);
|
||||||
$button-active-bg: rgba(0, 0, 0, .5);
|
$button-active-bg: rgba(0, 0, 0, .5);
|
||||||
|
|
||||||
|
|
||||||
$white: #fff !default;
|
|
||||||
$black: #000 !default;
|
|
||||||
$red: #d9534f !default;
|
|
||||||
$orange: #f0ad4e !default;
|
|
||||||
$yellow: #ffd500 !default;
|
|
||||||
$green: #5cb85c !default;
|
|
||||||
$blue: #0275d8 !default;
|
|
||||||
$teal: #5bc0de !default;
|
|
||||||
$pink: #ff5b77 !default;
|
|
||||||
$purple: #613d7c !default;
|
|
||||||
|
|
||||||
$theme-colors: (
|
|
||||||
"primary": $blue,
|
|
||||||
"secondary": #394b5d
|
|
||||||
);
|
|
||||||
|
|
||||||
$content-bg: rgba(39, 49, 60, 0.65); //#1D272D;
|
|
||||||
$content-bg-solid: #1D272D;
|
|
||||||
$body-bg: #131d27;
|
|
||||||
$body-bg2: #20333e;
|
|
||||||
|
|
||||||
$body-color: #ccc;
|
|
||||||
$font-family-sans-serif: "Source Sans Pro";
|
|
||||||
$font-family-monospace: "Source Code Pro";
|
|
||||||
$font-size-base: 14rem / 16;
|
|
||||||
|
|
||||||
$btn-border-radius: 0;
|
|
||||||
$btn-secondary-color: #ccc;
|
|
||||||
$btn-secondary-bg: #222;
|
|
||||||
$btn-secondary-border: #444;
|
|
||||||
|
|
||||||
//$btn-warning-bg: rgba($orange, .5);
|
|
||||||
|
|
||||||
|
|
||||||
$nav-tabs-border-width: 0;
|
|
||||||
$nav-tabs-border-radius: 0;
|
|
||||||
$nav-tabs-link-hover-border-color: $body-bg;
|
|
||||||
$nav-tabs-active-link-hover-color: $white;
|
|
||||||
$nav-tabs-active-link-hover-bg: $blue;
|
|
||||||
$nav-tabs-active-link-hover-border-color: darken($blue, 30%);
|
|
||||||
$nav-pills-border-radius: 0;
|
|
||||||
|
|
||||||
$input-bg: #111;
|
|
||||||
$input-disabled-bg: #333;
|
|
||||||
|
|
||||||
$input-color: $body-color;
|
|
||||||
$input-color-placeholder: #333;
|
|
||||||
$input-border-color: #344;
|
|
||||||
$input-border-width: 1px;
|
|
||||||
//$input-box-shadow: inset 0 1px 1px rgba($black,.075);
|
|
||||||
$input-border-radius: 0;
|
|
||||||
$custom-select-border-radius: 0;
|
|
||||||
$input-bg-focus: $input-bg;
|
|
||||||
$input-border-focus: lighten($blue, 25%);
|
|
||||||
$input-focus-box-shadow: none;
|
|
||||||
$input-color-focus: $input-color;
|
|
||||||
$input-group-addon-bg: $body-bg;
|
|
||||||
$input-group-addon-border-color: $input-border-color;
|
|
||||||
|
|
||||||
$modal-content-bg: $content-bg-solid;
|
|
||||||
$modal-content-border-color: $body-bg;
|
|
||||||
$modal-header-border-color: transparent;
|
|
||||||
$modal-footer-border-color: transparent;
|
|
||||||
|
|
||||||
$popover-bg: $body-bg;
|
|
||||||
|
|
||||||
$dropdown-bg: $body-bg;
|
|
||||||
$dropdown-link-color: $body-color;
|
|
||||||
$dropdown-link-hover-color: white;
|
|
||||||
$dropdown-link-hover-bg: $body-bg2;
|
|
||||||
//$dropdown-link-active-color: $component-active-color;
|
|
||||||
//$dropdown-link-active-bg: $component-active-bg;
|
|
||||||
$dropdown-link-disabled-color: #333;
|
|
||||||
$dropdown-header-color: #333;
|
|
||||||
|
|
||||||
$list-group-color: $body-color;
|
|
||||||
$list-group-bg: rgba(255,255,255,.05);
|
|
||||||
$list-group-border-color: rgba(255,255,255,.1);
|
|
||||||
$list-group-hover-bg: rgba(255,255,255,.1);
|
|
||||||
$list-group-link-active-bg: rgba(255,255,255,.2);
|
|
||||||
|
|
||||||
$list-group-action-color: $body-color;
|
|
||||||
$list-group-action-bg: rgba(255,255,255,.05);
|
|
||||||
$list-group-action-active-bg: $list-group-link-active-bg;
|
|
||||||
|
|
||||||
$pre-bg: $dropdown-bg;
|
|
||||||
$pre-color: $dropdown-link-color;
|
|
||||||
|
|
||||||
$alert-danger-bg: $body-bg;
|
|
||||||
$alert-danger-text: $red;
|
|
||||||
$alert-danger-border: $red;
|
|
||||||
|
|
||||||
$headings-font-weight: lighter;
|
|
||||||
$headings-color: #eee;
|
|
||||||
|
|
||||||
@import '~bootstrap/scss/bootstrap.scss';
|
@import '~bootstrap/scss/bootstrap.scss';
|
||||||
|
|
||||||
window-controls {
|
window-controls {
|
||||||
@@ -230,18 +138,20 @@ settings-tab > ngb-tabset {
|
|||||||
|
|
||||||
& > .nav {
|
& > .nav {
|
||||||
background: rgba(0, 0, 0, 0.25);
|
background: rgba(0, 0, 0, 0.25);
|
||||||
|
flex-shrink: 0;
|
||||||
|
|
||||||
& > .nav-item > .nav-link {
|
& > .nav-item > .nav-link {
|
||||||
border: none;
|
border: none;
|
||||||
padding: 10px 50px 10px 20px;
|
padding: 10px 50px 10px 20px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
border-radius: 0;
|
||||||
|
|
||||||
&:not(.active) {
|
&:not(.active) {
|
||||||
color: $body-color;
|
color: $body-color;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
color: $white;
|
color: $white;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -309,14 +219,6 @@ hotkey-input-modal {
|
|||||||
margin-bottom: 2px;
|
margin-bottom: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-tabs {
|
|
||||||
background: $btn-secondary-bg;
|
|
||||||
.nav-link {
|
|
||||||
transition: 0.25s all;
|
|
||||||
border-bottom-color: $nav-tabs-border-color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ngb-tabset .tab-content {
|
ngb-tabset .tab-content {
|
||||||
padding-top: 20px;
|
padding-top: 20px;
|
||||||
}
|
}
|
||||||
@@ -360,22 +262,10 @@ ngb-tabset .tab-content {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
select.form-control {
|
|
||||||
-webkit-appearance: none;
|
|
||||||
background-image: url("data:image/svg+xml;utf8,<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='24' height='24' viewBox='0 0 24 24'><path fill='#444' d='M7.406 7.828l4.594 4.594 4.594-4.594 1.406 1.406-6 6-6-6z'></path></svg>");
|
|
||||||
background-position: 100% 50%;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
padding-right: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
checkbox i.on {
|
checkbox i.on {
|
||||||
color: $blue;
|
color: $blue;
|
||||||
}
|
}
|
||||||
|
|
||||||
toggle.active .body .toggle {
|
|
||||||
background: $blue;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal .modal-footer {
|
.modal .modal-footer {
|
||||||
background: rgba(0, 0, 0, .25);
|
background: rgba(0, 0, 0, .25);
|
||||||
|
|
||||||
@@ -404,3 +294,101 @@ toggle.active .body .toggle {
|
|||||||
*::-webkit-resizer {
|
*::-webkit-resizer {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
search-panel {
|
||||||
|
background: rgba(39, 49, 60, 0.65) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
cursor: pointer;
|
||||||
|
justify-content: flex-start;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
&.disabled,
|
||||||
|
&:disabled {
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn.btn-outline-secondary {
|
||||||
|
@include button-outline-variant(#9badb9, #fff);
|
||||||
|
&:hover:not([disabled]), &:active:not([disabled]), &.active:not([disabled]) {
|
||||||
|
background-color: #3f484e;
|
||||||
|
border-color: darken(#9badb9, 25%);
|
||||||
|
}
|
||||||
|
|
||||||
|
border-color: darken(#9badb9, 25%);
|
||||||
|
|
||||||
|
&.disabled,
|
||||||
|
&:disabled {
|
||||||
|
color: #9badb9;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-warning:not(:disabled):not(.disabled) {
|
||||||
|
&.active, &:active {
|
||||||
|
color: $gray-900;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-secondary:not(:disabled):not(.disabled) {
|
||||||
|
&.active, &:active {
|
||||||
|
background: #191e23;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-link {
|
||||||
|
&:hover, &[aria-expanded=true], &:active, &.active {
|
||||||
|
color: $link-hover-color;
|
||||||
|
border-radius: $btn-border-radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
&[aria-expanded=true], &:active, &.active {
|
||||||
|
background: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-group .btn.active {
|
||||||
|
border-color: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-tabs {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
|
||||||
|
&.nav-justified .nav-link {
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link {
|
||||||
|
border: none;
|
||||||
|
border-bottom: $nav-tabs-border-width solid transparent;
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 5px 0;
|
||||||
|
margin-right: 20px;
|
||||||
|
|
||||||
|
uib-tab-heading > i {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include hover-focus {
|
||||||
|
color: $nav-tabs-link-active-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.disabled {
|
||||||
|
color: $nav-link-disabled-color;
|
||||||
|
border-color: transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item:last-child .nav-link {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link.active,
|
||||||
|
.nav-item.show .nav-link {
|
||||||
|
color: $nav-tabs-link-active-color;
|
||||||
|
border-color: $nav-tabs-link-active-border-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
187
terminus-core/src/theme.vars.scss
Normal file
187
terminus-core/src/theme.vars.scss
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
$white: #fff;
|
||||||
|
$gray-100: #f8f9fa;
|
||||||
|
$gray-200: #e9ecef;
|
||||||
|
$gray-300: #dee2e6;
|
||||||
|
$gray-400: #ced4da;
|
||||||
|
$gray-500: #adb5bd;
|
||||||
|
$gray-600: #6c757d;
|
||||||
|
$gray-700: #495057;
|
||||||
|
$gray-800: #343a40;
|
||||||
|
$gray-900: #212529;
|
||||||
|
$black: #000;
|
||||||
|
|
||||||
|
|
||||||
|
$red: #d9534f !default;
|
||||||
|
$orange: #f0ad4e !default;
|
||||||
|
$yellow: #ffd500 !default;
|
||||||
|
$green: #5cb85c !default;
|
||||||
|
$blue: #0275d8 !default;
|
||||||
|
$teal: #5bc0de !default;
|
||||||
|
$pink: #ff5b77 !default;
|
||||||
|
$purple: #613d7c !default;
|
||||||
|
|
||||||
|
|
||||||
|
@import "~bootstrap/scss/functions";
|
||||||
|
|
||||||
|
$content-bg: rgba(39, 49, 60, 0.65); //#1D272D;
|
||||||
|
$content-bg-solid: #1D272D;
|
||||||
|
|
||||||
|
$table-bg: rgba(255,255,255,.05);
|
||||||
|
$table-bg-hover: rgba(255,255,255,.1);
|
||||||
|
$table-border-color: rgba(255,255,255,.1);
|
||||||
|
|
||||||
|
$theme-colors: (
|
||||||
|
primary: $blue,
|
||||||
|
secondary: #38434e,
|
||||||
|
success: $green,
|
||||||
|
info: $blue,
|
||||||
|
warning: $orange,
|
||||||
|
danger: $red,
|
||||||
|
light: $gray-300,
|
||||||
|
dark: $gray-800,
|
||||||
|
rare: $purple
|
||||||
|
);
|
||||||
|
|
||||||
|
$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;
|
||||||
|
$font-size-lg: 1.28rem;
|
||||||
|
$font-size-sm: .85rem;
|
||||||
|
|
||||||
|
$line-height-base: 1.6;
|
||||||
|
|
||||||
|
$headings-color: #ced9e2;
|
||||||
|
$headings-font-weight: lighter;
|
||||||
|
|
||||||
|
$input-btn-padding-y: .3rem;
|
||||||
|
$input-btn-padding-x: .9rem;
|
||||||
|
$input-btn-line-height: 1.6;
|
||||||
|
$input-btn-line-height-sm: 1.8;
|
||||||
|
$input-btn-line-height-lg: 1.8;
|
||||||
|
|
||||||
|
$btn-link-disabled-color: $gray-600;
|
||||||
|
$btn-focus-box-shadow: none;
|
||||||
|
|
||||||
|
$h4-font-size: 18px;
|
||||||
|
|
||||||
|
$link-color: $gray-400;
|
||||||
|
$link-hover-color: $white;
|
||||||
|
$link-hover-decoration: none;
|
||||||
|
|
||||||
|
$component-active-color: $white;
|
||||||
|
$component-active-bg: #2f3a42;
|
||||||
|
|
||||||
|
$list-group-bg: $table-bg;
|
||||||
|
$list-group-border-color: $table-border-color;
|
||||||
|
|
||||||
|
$list-group-item-padding-y: 0.8rem;
|
||||||
|
$list-group-item-padding-x: 1rem;
|
||||||
|
|
||||||
|
$list-group-hover-bg: $table-bg-hover;
|
||||||
|
$list-group-active-bg: rgba(255,255,255,.2);
|
||||||
|
$list-group-active-color: $component-active-color;
|
||||||
|
$list-group-active-border-color: translate;
|
||||||
|
|
||||||
|
$list-group-action-color: $body-color;
|
||||||
|
$list-group-action-hover-color: white;
|
||||||
|
|
||||||
|
$list-group-action-active-color: $component-active-color;
|
||||||
|
$list-group-action-active-bg: $list-group-active-bg;
|
||||||
|
|
||||||
|
$alert-padding-y: 0.9rem;
|
||||||
|
$alert-padding-x: 1.25rem;
|
||||||
|
|
||||||
|
$input-box-shadow: none;
|
||||||
|
|
||||||
|
$transition-base: all .15s ease-in-out;
|
||||||
|
$transition-fade: opacity .1s linear;
|
||||||
|
$transition-collapse: height .35s ease;
|
||||||
|
$btn-transition: all .15s ease-in-out;
|
||||||
|
|
||||||
|
$popover-bg: $body-bg;
|
||||||
|
$popover-body-color: $body-color;
|
||||||
|
$popover-header-bg: $table-bg-hover;
|
||||||
|
$popover-header-color: $headings-color;
|
||||||
|
$popover-arrow-color: $popover-bg;
|
||||||
|
$popover-max-width: 360px;
|
||||||
|
|
||||||
|
$btn-border-width: 2px;
|
||||||
|
|
||||||
|
$input-bg: #181e23;
|
||||||
|
$input-disabled-bg: #2e3235;
|
||||||
|
|
||||||
|
$input-color: #ddd;
|
||||||
|
$input-border-color: $input-bg;
|
||||||
|
$input-border-width: 2px;
|
||||||
|
|
||||||
|
$input-focus-bg: $input-bg;
|
||||||
|
$input-focus-border-color: rgba(171, 171, 171, 0.61);
|
||||||
|
$input-focus-color: $input-color;
|
||||||
|
|
||||||
|
$input-btn-focus-color: var(--focus-color);
|
||||||
|
$input-btn-focus-box-shadow: 0 0 0 2px $input-btn-focus-color;
|
||||||
|
|
||||||
|
$input-group-addon-color: $input-color;
|
||||||
|
$input-group-addon-bg: $input-bg;
|
||||||
|
$input-group-addon-border-color: transparent;
|
||||||
|
$input-group-btn-border-color: $input-bg;
|
||||||
|
|
||||||
|
$nav-tabs-border-radius: 0;
|
||||||
|
$nav-tabs-border-color: transparent;
|
||||||
|
$nav-tabs-border-width: 2px;
|
||||||
|
$nav-tabs-link-hover-border-color: transparent;
|
||||||
|
$nav-tabs-link-active-color: #eee;
|
||||||
|
$nav-tabs-link-active-bg: transparent;
|
||||||
|
$nav-tabs-link-active-border-color: #eee;
|
||||||
|
|
||||||
|
$navbar-padding-y: 0;
|
||||||
|
$navbar-padding-x: 0;
|
||||||
|
|
||||||
|
$dropdown-bg: $content-bg-solid;
|
||||||
|
$dropdown-color: $body-color;
|
||||||
|
$dropdown-border-width: 1px;
|
||||||
|
$dropdown-box-shadow: 0 .5rem 1rem rgba($black,.175);
|
||||||
|
$dropdown-header-color: $gray-500;
|
||||||
|
|
||||||
|
$dropdown-link-color: $body-color;
|
||||||
|
$dropdown-link-hover-color: #eee;
|
||||||
|
$dropdown-link-hover-bg: rgba(255,255,255,.04);
|
||||||
|
$dropdown-link-active-color: white;
|
||||||
|
$dropdown-link-active-bg: rgba(0, 0, 0, .2);
|
||||||
|
$dropdown-item-padding-y: 0.5rem;
|
||||||
|
$dropdown-item-padding-x: 1.5rem;
|
||||||
|
|
||||||
|
|
||||||
|
$code-color: $orange;
|
||||||
|
$code-bg: rgba(0, 0, 0, .25);
|
||||||
|
$code-padding-y: 3px;
|
||||||
|
$code-padding-x: 5px;
|
||||||
|
$pre-bg: $dropdown-bg;
|
||||||
|
$pre-color: $dropdown-link-color;
|
||||||
|
|
||||||
|
$badge-font-size: 0.75rem;
|
||||||
|
$badge-font-weight: bold;
|
||||||
|
$badge-padding-y: 4px;
|
||||||
|
$badge-padding-x: 6px;
|
||||||
|
|
||||||
|
|
||||||
|
$custom-control-indicator-size: 1.2rem;
|
||||||
|
$custom-control-indicator-bg: $body-bg;
|
||||||
|
$custom-control-indicator-border-color: lighten($body-bg, 25%);
|
||||||
|
$custom-control-indicator-checked-bg: theme-color("primary");
|
||||||
|
$custom-control-indicator-checked-color: $body-bg;
|
||||||
|
$custom-control-indicator-checked-border-color: transparent;
|
||||||
|
$custom-control-indicator-active-bg: rgba(255, 255, 0, 0.5);
|
||||||
|
|
||||||
|
|
||||||
|
$modal-content-bg: $content-bg-solid;
|
||||||
|
$modal-content-border-color: $body-bg;
|
||||||
|
$modal-header-border-width: 0;
|
||||||
|
$modal-footer-border-color: #222;
|
||||||
|
$modal-footer-border-width: 1px;
|
||||||
|
$modal-content-border-width: 0;
|
@@ -1,11 +1,10 @@
|
|||||||
const path = require('path')
|
const path = require('path')
|
||||||
const webpack = require('webpack')
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
target: 'node',
|
target: 'node',
|
||||||
entry: 'src/index.ts',
|
entry: 'src/index.ts',
|
||||||
context: __dirname,
|
context: __dirname,
|
||||||
mode: 'development',
|
devtool: 'eval-cheap-module-source-map',
|
||||||
output: {
|
output: {
|
||||||
path: path.resolve(__dirname, 'dist'),
|
path: path.resolve(__dirname, 'dist'),
|
||||||
filename: 'index.js',
|
filename: 'index.js',
|
||||||
@@ -58,11 +57,4 @@ module.exports = {
|
|||||||
/^@angular/,
|
/^@angular/,
|
||||||
/^@ng-bootstrap/,
|
/^@ng-bootstrap/,
|
||||||
],
|
],
|
||||||
plugins: [
|
|
||||||
new webpack.optimize.ModuleConcatenationPlugin(),
|
|
||||||
new webpack.SourceMapDevToolPlugin({
|
|
||||||
exclude: [/node_modules/, /vendor/],
|
|
||||||
filename: '[file].map',
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
}
|
}
|
||||||
|
@@ -7,6 +7,11 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.1.tgz#5c6f4a1eabca84792fbd916f0cb40847f123c656"
|
resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.1.tgz#5c6f4a1eabca84792fbd916f0cb40847f123c656"
|
||||||
integrity sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA==
|
integrity sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA==
|
||||||
|
|
||||||
|
"@types/semver@^6.0.2":
|
||||||
|
version "6.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.2.0.tgz#d688d574400d96c5b0114968705366f431831e1a"
|
||||||
|
integrity sha512-1OzrNb4RuAzIT7wHSsgZRlMBlNsJl+do6UblR7JMW4oB7bbR+uBEYtUh7gEc/jM84GGilh68lSOokyM/zNUlBA==
|
||||||
|
|
||||||
"@types/shell-escape@^0.2.0":
|
"@types/shell-escape@^0.2.0":
|
||||||
version "0.2.0"
|
version "0.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/@types/shell-escape/-/shell-escape-0.2.0.tgz#cd2f0df814388599dd07196dcc510de2669d1ed2"
|
resolved "https://registry.yarnpkg.com/@types/shell-escape/-/shell-escape-0.2.0.tgz#cd2f0df814388599dd07196dcc510de2669d1ed2"
|
||||||
@@ -19,17 +24,17 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
winston "*"
|
winston "*"
|
||||||
|
|
||||||
agent-base@^4.1.0:
|
agent-base@^4.3.0:
|
||||||
version "4.2.1"
|
version "4.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
|
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee"
|
||||||
integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==
|
integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==
|
||||||
dependencies:
|
dependencies:
|
||||||
es6-promisify "^5.0.0"
|
es6-promisify "^5.0.0"
|
||||||
|
|
||||||
argparse@^1.0.7:
|
argparse@^1.0.7:
|
||||||
version "1.0.9"
|
version "1.0.10"
|
||||||
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
|
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
|
||||||
integrity sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=
|
integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
|
||||||
dependencies:
|
dependencies:
|
||||||
sprintf-js "~1.0.2"
|
sprintf-js "~1.0.2"
|
||||||
|
|
||||||
@@ -41,43 +46,23 @@ async@^2.6.1:
|
|||||||
lodash "^4.17.11"
|
lodash "^4.17.11"
|
||||||
|
|
||||||
axios@^0.19.0:
|
axios@^0.19.0:
|
||||||
version "0.19.0"
|
version "0.19.1"
|
||||||
resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8"
|
resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.1.tgz#8a6a04eed23dfe72747e1dd43c604b8f1677b5aa"
|
||||||
integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==
|
integrity sha512-Yl+7nfreYKaLRvAvjNPkvfjnQHJM1yLBY3zhqAwcJSwR/6ETkanUgylgtIvkvz0xJ+p/vZuNw8X7Hnb7Whsbpw==
|
||||||
dependencies:
|
dependencies:
|
||||||
follow-redirects "1.5.10"
|
follow-redirects "1.5.10"
|
||||||
is-buffer "^2.0.2"
|
|
||||||
|
|
||||||
bluebird-lst@^1.0.6, bluebird-lst@^1.0.7:
|
|
||||||
version "1.0.8"
|
|
||||||
resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.8.tgz#61b572e8b3eb57e0fff676a0e54566d93597e6a4"
|
|
||||||
integrity sha512-InUDOaBaIjIobOa3O4YRAbFgff907uTJZXW0m0rhk3zhVZ4GvsmdCLEAKC1CTWTtUWCM8iWTTfFX9N/xQR/etw==
|
|
||||||
dependencies:
|
|
||||||
bluebird "^3.5.4"
|
|
||||||
|
|
||||||
bluebird@^3.5.4:
|
|
||||||
version "3.5.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f"
|
|
||||||
integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==
|
|
||||||
|
|
||||||
bootstrap@^4.1.3:
|
bootstrap@^4.1.3:
|
||||||
version "4.3.1"
|
version "4.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.3.1.tgz#280ca8f610504d99d7b6b4bfc4b68cec601704ac"
|
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.4.1.tgz#8582960eea0c5cd2bede84d8b0baf3789c3e8b01"
|
||||||
integrity sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==
|
integrity sha512-tbx5cHubwE6e2ZG7nqM3g/FZ5PQEDMWmMGNrCUBVRPHXTJaH7CBDdsLeu3eCh3B1tzAxTnAbtmrzvWEvT2NNEA==
|
||||||
|
|
||||||
buffer-from@^1.0.0:
|
builder-util-runtime@8.4.0:
|
||||||
version "1.1.1"
|
version "8.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
|
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.4.0.tgz#3163fffc078e6b8f3dd5b6eb12a8345573590682"
|
||||||
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
|
integrity sha512-CJB/eKfPf2vHrkmirF5eicVnbDCkMBbwd5tRYlTlgud16zFeqD7QmrVUAOEXdnsrcNkiLg9dbuUsQKtl/AwsYQ==
|
||||||
|
|
||||||
builder-util-runtime@~8.1.0:
|
|
||||||
version "8.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.1.1.tgz#f2f6fc43e33d26892bd491667fc746ad69bccc50"
|
|
||||||
integrity sha512-+ieS4PMB33vVE2S3ZNWBEQJ1zKmAs/agrBdh7XadE1lKLjrH4aXYuOh9OOGdxqIRldhlhNBaF+yKMMEFOdNVig==
|
|
||||||
dependencies:
|
dependencies:
|
||||||
bluebird-lst "^1.0.6"
|
|
||||||
debug "^4.1.1"
|
debug "^4.1.1"
|
||||||
fs-extra-p "^7.0.0"
|
|
||||||
sax "^1.2.4"
|
sax "^1.2.4"
|
||||||
|
|
||||||
color-convert@^1.9.1:
|
color-convert@^1.9.1:
|
||||||
@@ -132,9 +117,9 @@ colorspace@1.1.x:
|
|||||||
text-hex "1.0.x"
|
text-hex "1.0.x"
|
||||||
|
|
||||||
core-js@^3.1.2:
|
core-js@^3.1.2:
|
||||||
version "3.1.4"
|
version "3.6.4"
|
||||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.1.4.tgz#3a2837fc48e582e1ae25907afcd6cf03b0cc7a07"
|
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647"
|
||||||
integrity sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ==
|
integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==
|
||||||
|
|
||||||
core-util-is@~1.0.0:
|
core-util-is@~1.0.0:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
@@ -162,10 +147,10 @@ debug@^4.1.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ms "^2.1.1"
|
ms "^2.1.1"
|
||||||
|
|
||||||
deepmerge@^3.2.0:
|
deepmerge@^4.1.1:
|
||||||
version "3.2.1"
|
version "4.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.2.1.tgz#76a1f47854bcfcd66ee9a948d110540a8e12b261"
|
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
|
||||||
integrity sha512-+hbDSzTqEW0fWgnlKksg7XAOtT+ddZS5lHZJ6f6MdixRs9wQy+50fm1uUCVb1IkvjLUYX/SfFO021ZNwriURTw==
|
integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
|
||||||
|
|
||||||
diagnostics@^1.1.1:
|
diagnostics@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
@@ -177,19 +162,18 @@ diagnostics@^1.1.1:
|
|||||||
kuler "1.0.x"
|
kuler "1.0.x"
|
||||||
|
|
||||||
electron-updater@^4.0.6:
|
electron-updater@^4.0.6:
|
||||||
version "4.0.6"
|
version "4.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-4.0.6.tgz#9c4f495ae0e80bf4425e3e1b801c5ed2ab933c2d"
|
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-4.2.0.tgz#f9ecfc657f65ead737d42b9efecf628d3756b550"
|
||||||
integrity sha512-JPGLME6fxJcHG8hX7HWFl6Aew6iVm0DkcrENreKa5SUJCHG+uUaAhxDGDt+YGcNkyx1uJ6eBGMvFxDTLUv67pg==
|
integrity sha512-GuS3g7HDh17x/SaFjxjswlWUaKHczksYkV2Xc5CKj/bZH0YCvTSHtOmnBAdAmCk99u/71p3zP8f0jIqDfGcjww==
|
||||||
dependencies:
|
dependencies:
|
||||||
bluebird-lst "^1.0.6"
|
"@types/semver" "^6.0.2"
|
||||||
builder-util-runtime "~8.1.0"
|
builder-util-runtime "8.4.0"
|
||||||
fs-extra-p "^7.0.0"
|
fs-extra "^8.1.0"
|
||||||
js-yaml "^3.12.0"
|
js-yaml "^3.13.1"
|
||||||
lazy-val "^1.0.3"
|
lazy-val "^1.0.4"
|
||||||
lodash.isequal "^4.5.0"
|
lodash.isequal "^4.5.0"
|
||||||
pako "^1.0.7"
|
pako "^1.0.10"
|
||||||
semver "^5.6.0"
|
semver "^6.3.0"
|
||||||
source-map-support "^0.5.9"
|
|
||||||
|
|
||||||
enabled@1.0.x:
|
enabled@1.0.x:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
@@ -216,9 +200,9 @@ es6-promisify@^5.0.0:
|
|||||||
es6-promise "^4.0.3"
|
es6-promise "^4.0.3"
|
||||||
|
|
||||||
esprima@^4.0.0:
|
esprima@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
|
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
|
||||||
integrity sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==
|
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
|
||||||
|
|
||||||
fast-safe-stringify@^2.0.4:
|
fast-safe-stringify@^2.0.4:
|
||||||
version "2.0.6"
|
version "2.0.6"
|
||||||
@@ -237,34 +221,26 @@ follow-redirects@1.5.10:
|
|||||||
dependencies:
|
dependencies:
|
||||||
debug "=3.1.0"
|
debug "=3.1.0"
|
||||||
|
|
||||||
fs-extra-p@^7.0.0:
|
fs-extra@^8.1.0:
|
||||||
version "7.0.1"
|
version "8.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-7.0.1.tgz#4eec0b6dfa150fa90f6ddd773b4fb1d55cad54e3"
|
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
|
||||||
integrity sha512-yhd2OV0HnHt2oitlp+X9hl2ReX4X/7kQeL7/72qzPHTZj5eUPGzAKOvEglU02Fa1OeG2rSy/aKB4WGVaLiF8tw==
|
integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
|
||||||
dependencies:
|
dependencies:
|
||||||
bluebird-lst "^1.0.7"
|
graceful-fs "^4.2.0"
|
||||||
fs-extra "^7.0.1"
|
|
||||||
|
|
||||||
fs-extra@^7.0.1:
|
|
||||||
version "7.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
|
|
||||||
integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
|
|
||||||
dependencies:
|
|
||||||
graceful-fs "^4.1.2"
|
|
||||||
jsonfile "^4.0.0"
|
jsonfile "^4.0.0"
|
||||||
universalify "^0.1.0"
|
universalify "^0.1.0"
|
||||||
|
|
||||||
graceful-fs@^4.1.2, graceful-fs@^4.1.6:
|
graceful-fs@^4.1.6, graceful-fs@^4.2.0:
|
||||||
version "4.1.11"
|
version "4.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02"
|
||||||
integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
|
integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==
|
||||||
|
|
||||||
https-proxy-agent@2.2.1:
|
https-proxy-agent@3.0.0:
|
||||||
version "2.2.1"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0"
|
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-3.0.0.tgz#0106efa5d63d6d6f3ab87c999fa4877a3fd1ff97"
|
||||||
integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==
|
integrity sha512-y4jAxNEihqvBI5F3SaO2rtsjIOnnNA8sEbuiP+UhJZJHeM2NRm6c09ax2tgqme+SgUUvjao2fJXF4h3D6Cb2HQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
agent-base "^4.1.0"
|
agent-base "^4.3.0"
|
||||||
debug "^3.1.0"
|
debug "^3.1.0"
|
||||||
|
|
||||||
inherits@^2.0.3, inherits@~2.0.3:
|
inherits@^2.0.3, inherits@~2.0.3:
|
||||||
@@ -277,11 +253,6 @@ is-arrayish@^0.3.1:
|
|||||||
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
|
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
|
||||||
integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
|
integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
|
||||||
|
|
||||||
is-buffer@^2.0.2:
|
|
||||||
version "2.0.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725"
|
|
||||||
integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==
|
|
||||||
|
|
||||||
is-stream@^1.1.0:
|
is-stream@^1.1.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
||||||
@@ -292,7 +263,7 @@ isarray@~1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
||||||
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
|
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
|
||||||
|
|
||||||
js-yaml@^3.12.0, js-yaml@^3.9.0:
|
js-yaml@^3.13.1, js-yaml@^3.9.0:
|
||||||
version "3.13.1"
|
version "3.13.1"
|
||||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
|
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
|
||||||
integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
|
integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
|
||||||
@@ -314,7 +285,7 @@ kuler@1.0.x:
|
|||||||
dependencies:
|
dependencies:
|
||||||
colornames "^1.1.1"
|
colornames "^1.1.1"
|
||||||
|
|
||||||
lazy-val@^1.0.3:
|
lazy-val@^1.0.4:
|
||||||
version "1.0.4"
|
version "1.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.4.tgz#882636a7245c2cfe6e0a4e3ba6c5d68a137e5c65"
|
resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.4.tgz#882636a7245c2cfe6e0a4e3ba6c5d68a137e5c65"
|
||||||
integrity sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q==
|
integrity sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q==
|
||||||
@@ -341,11 +312,11 @@ logform@^2.1.1:
|
|||||||
triple-beam "^1.3.0"
|
triple-beam "^1.3.0"
|
||||||
|
|
||||||
mixpanel@^0.10.2:
|
mixpanel@^0.10.2:
|
||||||
version "0.10.2"
|
version "0.10.3"
|
||||||
resolved "https://registry.yarnpkg.com/mixpanel/-/mixpanel-0.10.2.tgz#10ff6cd76034b262d469094ad3d8c99039345376"
|
resolved "https://registry.yarnpkg.com/mixpanel/-/mixpanel-0.10.3.tgz#2dff3bc0e17b57d6365547d315cbbf3ecfdb8a00"
|
||||||
integrity sha512-+zbBQGd/Q5LLRooqJ2iyEDzKz2/ly4TipH5tE9te0BDMJpROxUMGffPulyHbh4FtMcbJuPmIUSIfy//JhhnlnA==
|
integrity sha512-wIYr5o+1XSzJ80o3QED35K/yfPAKi5FigZXTSfcs4vltfeKbilIjNgwxdno7LrqzhjoSjmIyDWkI7D3lr7TwDw==
|
||||||
dependencies:
|
dependencies:
|
||||||
https-proxy-agent "2.2.1"
|
https-proxy-agent "3.0.0"
|
||||||
|
|
||||||
ms@2.0.0:
|
ms@2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
@@ -353,37 +324,37 @@ ms@2.0.0:
|
|||||||
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
|
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
|
||||||
|
|
||||||
ms@^2.1.1:
|
ms@^2.1.1:
|
||||||
version "2.1.1"
|
version "2.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
|
||||||
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
|
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
|
||||||
|
|
||||||
ng2-dnd@^5.0.2:
|
ng2-dnd@^5.0.2:
|
||||||
version "5.0.2"
|
version "5.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/ng2-dnd/-/ng2-dnd-5.0.2.tgz#862278ac7dedfa14f5783bbf34014d5d73dfefb4"
|
resolved "https://registry.yarnpkg.com/ng2-dnd/-/ng2-dnd-5.0.2.tgz#862278ac7dedfa14f5783bbf34014d5d73dfefb4"
|
||||||
integrity sha512-5mWWBePwvEPsNd/HkdbD543Q9mPyJofL6zkNydl8/Ah3qrrvZT2DaEPbknY08OgkXpI2qUGksc01OzzVlRQ9dQ==
|
integrity sha512-5mWWBePwvEPsNd/HkdbD543Q9mPyJofL6zkNydl8/Ah3qrrvZT2DaEPbknY08OgkXpI2qUGksc01OzzVlRQ9dQ==
|
||||||
|
|
||||||
ngx-perfect-scrollbar@^6.0.0:
|
ngx-perfect-scrollbar@^8.0.0:
|
||||||
version "6.0.0"
|
version "8.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/ngx-perfect-scrollbar/-/ngx-perfect-scrollbar-6.0.0.tgz#92b51957c04ed6a6d416beca2707bab005667b68"
|
resolved "https://registry.yarnpkg.com/ngx-perfect-scrollbar/-/ngx-perfect-scrollbar-8.0.0.tgz#19c1bbf9b1a36d89b00a68f7834e39427d29182f"
|
||||||
integrity sha512-x4bzfI7AmeZubUN+tJJ99GYniSgHLJbTAg3ecbWd8dG6z59efgx4yxUjN1sDh7UYgimtg3w857qXEZJW/USAhA==
|
integrity sha512-IXoFbULQnxyJj0gdCcKCLE/6OW9HCP9KARzMCKS1kNxTuzG4DghjM2AaCBRM5/sFwdbn6rqOKMCINtHA8W8YCA==
|
||||||
dependencies:
|
dependencies:
|
||||||
perfect-scrollbar "^1.3.0"
|
perfect-scrollbar "^1.4.0"
|
||||||
resize-observer-polyfill "^1.4.0"
|
resize-observer-polyfill "^1.5.0"
|
||||||
|
|
||||||
one-time@0.0.4:
|
one-time@0.0.4:
|
||||||
version "0.0.4"
|
version "0.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/one-time/-/one-time-0.0.4.tgz#f8cdf77884826fe4dff93e3a9cc37b1e4480742e"
|
resolved "https://registry.yarnpkg.com/one-time/-/one-time-0.0.4.tgz#f8cdf77884826fe4dff93e3a9cc37b1e4480742e"
|
||||||
integrity sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=
|
integrity sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=
|
||||||
|
|
||||||
pako@^1.0.7:
|
pako@^1.0.10:
|
||||||
version "1.0.10"
|
version "1.0.10"
|
||||||
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732"
|
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732"
|
||||||
integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==
|
integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==
|
||||||
|
|
||||||
perfect-scrollbar@^1.3.0:
|
perfect-scrollbar@^1.4.0:
|
||||||
version "1.3.0"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/perfect-scrollbar/-/perfect-scrollbar-1.3.0.tgz#61da56f94b58870d8e0a617bce649cee17d1e3b2"
|
resolved "https://registry.yarnpkg.com/perfect-scrollbar/-/perfect-scrollbar-1.4.0.tgz#5d014ef9775e1f43058a1dbae9ed1daf0e7091f1"
|
||||||
integrity sha512-7Ub8YOvZB5k+pTy0K3LYUDnH9Xl3qvHcclJyIX+AV5UxHxll146iVGq4rtc+848nTDBQq89J7QxKKMA++cTXzQ==
|
integrity sha512-/2Sk/khljhdrsamjJYS5NjrH+GKEHEwh7zFSiYyxROyYKagkE4kSn2zDQDRTOMo8mpT2jikxx6yI1dG7lNP/hw==
|
||||||
|
|
||||||
process-nextick-args@~2.0.0:
|
process-nextick-args@~2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
@@ -412,10 +383,10 @@ readable-stream@^3.1.1:
|
|||||||
string_decoder "^1.1.1"
|
string_decoder "^1.1.1"
|
||||||
util-deprecate "^1.0.1"
|
util-deprecate "^1.0.1"
|
||||||
|
|
||||||
resize-observer-polyfill@^1.4.0:
|
resize-observer-polyfill@^1.5.0:
|
||||||
version "1.5.0"
|
version "1.5.1"
|
||||||
resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.0.tgz#660ff1d9712a2382baa2cad450a4716209f9ca69"
|
resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
|
||||||
integrity sha512-M2AelyJDVR/oLnToJLtuDJRBBWUGUvvGigj1411hXhAdyFWqMaqHp7TixW3FpiLuVaikIcR1QL+zqoJoZlOgpg==
|
integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
|
||||||
|
|
||||||
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
||||||
version "5.1.2"
|
version "5.1.2"
|
||||||
@@ -427,10 +398,10 @@ sax@^1.2.4:
|
|||||||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
||||||
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
|
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
|
||||||
|
|
||||||
semver@^5.6.0:
|
semver@^6.3.0:
|
||||||
version "5.7.0"
|
version "6.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
|
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
|
||||||
integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==
|
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
|
||||||
|
|
||||||
shell-escape@^0.2.0:
|
shell-escape@^0.2.0:
|
||||||
version "0.2.0"
|
version "0.2.0"
|
||||||
@@ -444,19 +415,6 @@ simple-swizzle@^0.2.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
is-arrayish "^0.3.1"
|
is-arrayish "^0.3.1"
|
||||||
|
|
||||||
source-map-support@^0.5.9:
|
|
||||||
version "0.5.12"
|
|
||||||
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599"
|
|
||||||
integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==
|
|
||||||
dependencies:
|
|
||||||
buffer-from "^1.0.0"
|
|
||||||
source-map "^0.6.0"
|
|
||||||
|
|
||||||
source-map@^0.6.0:
|
|
||||||
version "0.6.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
|
||||||
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
|
||||||
|
|
||||||
sprintf-js@~1.0.2:
|
sprintf-js@~1.0.2:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
|
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
|
||||||
@@ -492,9 +450,9 @@ triple-beam@^1.2.0, triple-beam@^1.3.0:
|
|||||||
integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==
|
integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==
|
||||||
|
|
||||||
universalify@^0.1.0:
|
universalify@^0.1.0:
|
||||||
version "0.1.1"
|
version "0.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7"
|
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
|
||||||
integrity sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=
|
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
|
||||||
|
|
||||||
util-deprecate@^1.0.1, util-deprecate@~1.0.1:
|
util-deprecate@^1.0.1, util-deprecate@~1.0.1:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
@@ -502,9 +460,9 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1:
|
|||||||
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
|
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
|
||||||
|
|
||||||
uuid@^3.3.2:
|
uuid@^3.3.2:
|
||||||
version "3.3.2"
|
version "3.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
|
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
|
||||||
integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
|
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
|
||||||
|
|
||||||
winston-transport@^4.3.0:
|
winston-transport@^4.3.0:
|
||||||
version "4.3.0"
|
version "4.3.0"
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "terminus-plugin-manager",
|
"name": "terminus-plugin-manager",
|
||||||
"version": "1.0.83-nightly.0",
|
"version": "1.0.99-nightly.0",
|
||||||
"description": "Terminus' plugin manager",
|
"description": "Terminus' plugin manager",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"terminus-builtin-plugin"
|
"terminus-builtin-plugin"
|
||||||
@@ -17,12 +17,10 @@
|
|||||||
"author": "Eugene Pankov",
|
"author": "Eugene Pankov",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/mz": "0.0.32",
|
|
||||||
"@types/semver": "^6.0.0",
|
"@types/semver": "^6.0.0",
|
||||||
"axios": "^0.19.0",
|
"axios": "^0.19.0",
|
||||||
"mz": "^2.6.0",
|
"mz": "^2.6.0",
|
||||||
"ngx-pipes": "^1.6.1",
|
"semver": "^7.1.1"
|
||||||
"semver": "^6.1.0"
|
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@angular/common": "^7",
|
"@angular/common": "^7",
|
||||||
|
@@ -5,12 +5,12 @@
|
|||||||
|
|
||||||
.d-flex
|
.d-flex
|
||||||
h3.mb-1 Installed
|
h3.mb-1 Installed
|
||||||
button.btn.btn-outline-info.btn-sm.ml-auto((click)='openPluginsFolder()')
|
button.btn.btn-outline-secondary.btn-sm.ml-auto((click)='openPluginsFolder()')
|
||||||
i.fas.fa-folder
|
i.fas.fa-folder
|
||||||
span Plugins folder
|
span Plugins folder
|
||||||
|
|
||||||
.list-group.list-group-flush.mt-2
|
.list-group.list-group-flush.mt-2
|
||||||
.list-group-item.d-flex.align-items-center(*ngFor='let plugin of pluginManager.installedPlugins|orderBy:"name"')
|
.list-group-item.d-flex.align-items-center(*ngFor='let plugin of pluginManager.installedPlugins')
|
||||||
.mr-auto.d-flex.flex-column
|
.mr-auto.d-flex.flex-column
|
||||||
div
|
div
|
||||||
strong {{plugin.name}}
|
strong {{plugin.name}}
|
||||||
@@ -28,20 +28,20 @@
|
|||||||
i.fas.fa-fw.fa-circle-notch.fa-spin(*ngIf='busy[plugin.name] == BusyState.Installing')
|
i.fas.fa-fw.fa-circle-notch.fa-spin(*ngIf='busy[plugin.name] == BusyState.Installing')
|
||||||
span Upgrade ({{knownUpgrades[plugin.name].version}})
|
span Upgrade ({{knownUpgrades[plugin.name].version}})
|
||||||
|
|
||||||
button.btn.btn-primary.ml-2(
|
button.btn.btn-link.text-primary.ml-2(
|
||||||
*ngIf='config.store.pluginBlacklist.includes(plugin.name)',
|
*ngIf='config.store.pluginBlacklist.includes(plugin.name)',
|
||||||
(click)='enablePlugin(plugin)'
|
(click)='enablePlugin(plugin)'
|
||||||
)
|
)
|
||||||
i.fas.fa-fw.fa-play
|
i.fas.fa-fw.fa-play
|
||||||
|
|
||||||
button.btn.btn-secondary.ml-2(
|
button.btn.btn-link.ml-2(
|
||||||
*ngIf='!config.store.pluginBlacklist.includes(plugin.name)',
|
*ngIf='!config.store.pluginBlacklist.includes(plugin.name)',
|
||||||
(click)='disablePlugin(plugin)'
|
(click)='disablePlugin(plugin)'
|
||||||
)
|
)
|
||||||
i.fas.fa-fw.fa-pause
|
i.fas.fa-fw.fa-pause
|
||||||
|
|
||||||
button.btn.btn-danger.ml-2(
|
button.btn.btn-link.text-danger.ml-2(
|
||||||
(click)='uninstallPlugin(plugin)',
|
(click)='uninstallPlugin(plugin)',
|
||||||
*ngIf='!plugin.isBuiltin',
|
*ngIf='!plugin.isBuiltin',
|
||||||
[disabled]='busy[plugin.name] != undefined'
|
[disabled]='busy[plugin.name] != undefined'
|
||||||
)
|
)
|
||||||
@@ -65,7 +65,7 @@ div
|
|||||||
|
|
||||||
|
|
||||||
.list-group.list-group-flush.mb-4(*ngIf='availablePlugins$')
|
.list-group.list-group-flush.mb-4(*ngIf='availablePlugins$')
|
||||||
ng-container(*ngFor='let plugin of (availablePlugins$|async|orderBy:"name")')
|
ng-container(*ngFor='let plugin of (availablePlugins$|async)')
|
||||||
.list-group-item.d-flex.align-items-center(*ngIf='!isAlreadyInstalled(plugin)')
|
.list-group-item.d-flex.align-items-center(*ngIf='!isAlreadyInstalled(plugin)')
|
||||||
button.btn.btn-primary.mr-3(
|
button.btn.btn-primary.mr-3(
|
||||||
(click)='installPlugin(plugin)',
|
(click)='installPlugin(plugin)',
|
||||||
@@ -73,7 +73,7 @@ div
|
|||||||
)
|
)
|
||||||
i.fas.fa-fw.fa-download(*ngIf='busy[plugin.name] != BusyState.Installing')
|
i.fas.fa-fw.fa-download(*ngIf='busy[plugin.name] != BusyState.Installing')
|
||||||
i.fas.fa-fw.fa-circle-notch.fa-spin(*ngIf='busy[plugin.name] == BusyState.Installing')
|
i.fas.fa-fw.fa-circle-notch.fa-spin(*ngIf='busy[plugin.name] == BusyState.Installing')
|
||||||
|
|
||||||
div((click)='showPluginInfo(plugin)')
|
div((click)='showPluginInfo(plugin)')
|
||||||
div
|
div
|
||||||
strong {{plugin.name}}
|
strong {{plugin.name}}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
import { BehaviorSubject, Observable } from 'rxjs'
|
import { BehaviorSubject, Observable } from 'rxjs'
|
||||||
import { debounceTime, distinctUntilChanged, first, tap, flatMap } from 'rxjs/operators'
|
import { debounceTime, distinctUntilChanged, first, tap, flatMap, map } from 'rxjs/operators'
|
||||||
import * as semver from 'semver'
|
import * as semver from 'semver'
|
||||||
|
|
||||||
import { Component, Input } from '@angular/core'
|
import { Component, Input } from '@angular/core'
|
||||||
@@ -18,7 +18,7 @@ export class PluginsSettingsTabComponent {
|
|||||||
@Input() availablePlugins$: Observable<PluginInfo[]>
|
@Input() availablePlugins$: Observable<PluginInfo[]>
|
||||||
@Input() availablePluginsQuery$ = new BehaviorSubject<string>('')
|
@Input() availablePluginsQuery$ = new BehaviorSubject<string>('')
|
||||||
@Input() availablePluginsReady = false
|
@Input() availablePluginsReady = false
|
||||||
@Input() knownUpgrades: {[id: string]: PluginInfo} = {}
|
@Input() knownUpgrades: {[id: string]: PluginInfo|null} = {}
|
||||||
@Input() busy: {[id: string]: BusyState} = {}
|
@Input() busy: {[id: string]: BusyState} = {}
|
||||||
@Input() erroredPlugin: string
|
@Input() erroredPlugin: string
|
||||||
@Input() errorMessage: string
|
@Input() errorMessage: string
|
||||||
@@ -43,9 +43,12 @@ export class PluginsSettingsTabComponent {
|
|||||||
}))
|
}))
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
this.availablePlugins$.pipe(first()).subscribe(available => {
|
this.availablePlugins$.pipe(first(), map((plugins: PluginInfo[]) => {
|
||||||
|
plugins.sort((a, b) => a.name > b.name ? 1 : -1)
|
||||||
|
return plugins
|
||||||
|
})).subscribe(available => {
|
||||||
for (const plugin of this.pluginManager.installedPlugins) {
|
for (const plugin of this.pluginManager.installedPlugins) {
|
||||||
this.knownUpgrades[plugin.name] = available.find(x => x.name === plugin.name && semver.gt(x.version, plugin.version))
|
this.knownUpgrades[plugin.name] = available.find(x => x.name === plugin.name && semver.gt(x.version, plugin.version)) || null
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -91,7 +94,7 @@ export class PluginsSettingsTabComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async upgradePlugin (plugin: PluginInfo): Promise<void> {
|
async upgradePlugin (plugin: PluginInfo): Promise<void> {
|
||||||
return this.installPlugin(this.knownUpgrades[plugin.name])
|
return this.installPlugin(this.knownUpgrades[plugin.name]!)
|
||||||
}
|
}
|
||||||
|
|
||||||
showPluginInfo (plugin: PluginInfo) {
|
showPluginInfo (plugin: PluginInfo) {
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
import { NgModule } from '@angular/core'
|
import { NgModule } from '@angular/core'
|
||||||
import { BrowserModule } from '@angular/platform-browser'
|
import { BrowserModule } from '@angular/platform-browser'
|
||||||
import { FormsModule } from '@angular/forms'
|
import { FormsModule } from '@angular/forms'
|
||||||
import { NgPipesModule } from 'ngx-pipes'
|
|
||||||
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
|
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
|
||||||
|
|
||||||
import { SettingsTabProvider } from 'terminus-settings'
|
import { SettingsTabProvider } from 'terminus-settings'
|
||||||
@@ -15,7 +14,6 @@ import { PluginsSettingsTabProvider } from './settings'
|
|||||||
BrowserModule,
|
BrowserModule,
|
||||||
FormsModule,
|
FormsModule,
|
||||||
NgbModule,
|
NgbModule,
|
||||||
NgPipesModule,
|
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
{ provide: SettingsTabProvider, useClass: PluginsSettingsTabProvider, multi: true },
|
{ provide: SettingsTabProvider, useClass: PluginsSettingsTabProvider, multi: true },
|
||||||
|
@@ -8,6 +8,10 @@ const NAME_PREFIX = 'terminus-'
|
|||||||
const KEYWORD = 'terminus-plugin'
|
const KEYWORD = 'terminus-plugin'
|
||||||
const OFFICIAL_NPM_ACCOUNT = 'eugenepankov'
|
const OFFICIAL_NPM_ACCOUNT = 'eugenepankov'
|
||||||
|
|
||||||
|
const BLACKLIST = [
|
||||||
|
'terminus-shell-selector', // superseded by profiles
|
||||||
|
]
|
||||||
|
|
||||||
export interface PluginInfo {
|
export interface PluginInfo {
|
||||||
name: string
|
name: string
|
||||||
description: string
|
description: string
|
||||||
@@ -75,6 +79,7 @@ export class PluginManagerService {
|
|||||||
isOfficial: item.package.publisher.username === OFFICIAL_NPM_ACCOUNT,
|
isOfficial: item.package.publisher.username === OFFICIAL_NPM_ACCOUNT,
|
||||||
}))),
|
}))),
|
||||||
map(plugins => plugins.filter(x => x.packageName.startsWith(NAME_PREFIX))),
|
map(plugins => plugins.filter(x => x.packageName.startsWith(NAME_PREFIX))),
|
||||||
|
map(plugins => plugins.filter(x => !BLACKLIST.includes(x.packageName))),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
const path = require('path')
|
const path = require('path')
|
||||||
const webpack = require('webpack')
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
target: 'node',
|
target: 'node',
|
||||||
entry: 'src/index.ts',
|
entry: 'src/index.ts',
|
||||||
context: __dirname,
|
context: __dirname,
|
||||||
|
devtool: 'eval-cheap-module-source-map',
|
||||||
output: {
|
output: {
|
||||||
path: path.resolve(__dirname, 'dist'),
|
path: path.resolve(__dirname, 'dist'),
|
||||||
filename: 'index.js',
|
filename: 'index.js',
|
||||||
@@ -26,7 +26,7 @@ module.exports = {
|
|||||||
test: /\.ts$/,
|
test: /\.ts$/,
|
||||||
use: {
|
use: {
|
||||||
loader: 'awesome-typescript-loader',
|
loader: 'awesome-typescript-loader',
|
||||||
query: {
|
options: {
|
||||||
configFileName: path.resolve(__dirname, 'tsconfig.json'),
|
configFileName: path.resolve(__dirname, 'tsconfig.json'),
|
||||||
typeRoots: [
|
typeRoots: [
|
||||||
path.resolve(__dirname, 'node_modules/@types'),
|
path.resolve(__dirname, 'node_modules/@types'),
|
||||||
@@ -53,11 +53,4 @@ module.exports = {
|
|||||||
/^@ng-bootstrap/,
|
/^@ng-bootstrap/,
|
||||||
/^terminus-/,
|
/^terminus-/,
|
||||||
],
|
],
|
||||||
plugins: [
|
|
||||||
new webpack.optimize.ModuleConcatenationPlugin(),
|
|
||||||
new webpack.SourceMapDevToolPlugin({
|
|
||||||
exclude: [/node_modules/, /vendor/],
|
|
||||||
filename: '[file].map',
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
}
|
}
|
||||||
|
@@ -2,22 +2,10 @@
|
|||||||
# yarn lockfile v1
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
"@types/mz@0.0.32":
|
|
||||||
version "0.0.32"
|
|
||||||
resolved "https://registry.yarnpkg.com/@types/mz/-/mz-0.0.32.tgz#e8248b4e41424c052edc1725dd33650c313a3659"
|
|
||||||
integrity sha512-cy3yebKhrHuOcrJGkfwNHhpTXQLgmXSv1BX+4p32j+VUQ6aP2eJ5cL7OvGcAQx75fCTFaAIIAKewvqL+iwSd4g==
|
|
||||||
dependencies:
|
|
||||||
"@types/node" "*"
|
|
||||||
|
|
||||||
"@types/node@*":
|
|
||||||
version "12.0.10"
|
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.10.tgz#51babf9c7deadd5343620055fc8aff7995c8b031"
|
|
||||||
integrity sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ==
|
|
||||||
|
|
||||||
"@types/semver@^6.0.0":
|
"@types/semver@^6.0.0":
|
||||||
version "6.0.1"
|
version "6.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.0.1.tgz#a984b405c702fa5a7ec6abc56b37f2ba35ef5af6"
|
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.2.0.tgz#d688d574400d96c5b0114968705366f431831e1a"
|
||||||
integrity sha512-ffCdcrEE5h8DqVxinQjo+2d1q+FV5z7iNtPofw3JsrltSoSVlOGaW0rY8XxtO9XukdTn8TaCGWmk2VFGhI70mg==
|
integrity sha512-1OzrNb4RuAzIT7wHSsgZRlMBlNsJl+do6UblR7JMW4oB7bbR+uBEYtUh7gEc/jM84GGilh68lSOokyM/zNUlBA==
|
||||||
|
|
||||||
any-promise@^1.0.0:
|
any-promise@^1.0.0:
|
||||||
version "1.3.0"
|
version "1.3.0"
|
||||||
@@ -25,12 +13,11 @@ any-promise@^1.0.0:
|
|||||||
integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
|
integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
|
||||||
|
|
||||||
axios@^0.19.0:
|
axios@^0.19.0:
|
||||||
version "0.19.0"
|
version "0.19.1"
|
||||||
resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8"
|
resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.1.tgz#8a6a04eed23dfe72747e1dd43c604b8f1677b5aa"
|
||||||
integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==
|
integrity sha512-Yl+7nfreYKaLRvAvjNPkvfjnQHJM1yLBY3zhqAwcJSwR/6ETkanUgylgtIvkvz0xJ+p/vZuNw8X7Hnb7Whsbpw==
|
||||||
dependencies:
|
dependencies:
|
||||||
follow-redirects "1.5.10"
|
follow-redirects "1.5.10"
|
||||||
is-buffer "^2.0.2"
|
|
||||||
|
|
||||||
debug@=3.1.0:
|
debug@=3.1.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
@@ -46,11 +33,6 @@ follow-redirects@1.5.10:
|
|||||||
dependencies:
|
dependencies:
|
||||||
debug "=3.1.0"
|
debug "=3.1.0"
|
||||||
|
|
||||||
is-buffer@^2.0.2:
|
|
||||||
version "2.0.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725"
|
|
||||||
integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==
|
|
||||||
|
|
||||||
ms@2.0.0:
|
ms@2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||||
@@ -65,20 +47,15 @@ mz@^2.6.0:
|
|||||||
object-assign "^4.0.1"
|
object-assign "^4.0.1"
|
||||||
thenify-all "^1.0.0"
|
thenify-all "^1.0.0"
|
||||||
|
|
||||||
ngx-pipes@^1.6.1:
|
|
||||||
version "1.6.6"
|
|
||||||
resolved "https://registry.yarnpkg.com/ngx-pipes/-/ngx-pipes-1.6.6.tgz#32bb80906c220f1e84d5cce7d6dae002cffead4b"
|
|
||||||
integrity sha512-mRV0xOZDd6/Jlvti4W0pDepZRIHLHd3kZ6ZzdqyGCU0dxbKVWWLTR1jlNlxN1ruMk8eO0Y8lNh6a1bEW7dJP1w==
|
|
||||||
|
|
||||||
object-assign@^4.0.1:
|
object-assign@^4.0.1:
|
||||||
version "4.1.1"
|
version "4.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||||
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
|
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
|
||||||
|
|
||||||
semver@^6.1.0:
|
semver@^7.1.1:
|
||||||
version "6.1.2"
|
version "7.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.2.tgz#079960381376a3db62eb2edc8a3bfb10c7cfe318"
|
resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.1.tgz#29104598a197d6cbe4733eeecbe968f7b43a9667"
|
||||||
integrity sha512-z4PqiCpomGtWj8633oeAdXm1Kn1W++3T8epkZYnwiVgIYIJ0QHszhInYSJTYxebByQH7KVCEAn8R9duzZW2PhQ==
|
integrity sha512-WfuG+fl6eh3eZ2qAf6goB7nhiCd7NPXhmyFxigB/TOkQyeLP8w8GsVehvtGNtnNmyboz4TgeK40B1Kbql/8c5A==
|
||||||
|
|
||||||
thenify-all@^1.0.0:
|
thenify-all@^1.0.0:
|
||||||
version "1.6.0"
|
version "1.6.0"
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "terminus-settings",
|
"name": "terminus-settings",
|
||||||
"version": "1.0.83-nightly.4",
|
"version": "1.0.99-nightly.0",
|
||||||
"description": "Terminus terminal settings page",
|
"description": "Terminus terminal settings page",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"terminus-builtin-plugin"
|
"terminus-builtin-plugin"
|
||||||
@@ -17,8 +17,7 @@
|
|||||||
"author": "Eugene Pankov",
|
"author": "Eugene Pankov",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/deep-equal": "1.0.1",
|
"@types/deep-equal": "1.0.1"
|
||||||
"ngx-pipes": "^1.6.1"
|
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@angular/common": "^7",
|
"@angular/common": "^7",
|
||||||
@@ -26,7 +25,7 @@
|
|||||||
"@angular/forms": "^7",
|
"@angular/forms": "^7",
|
||||||
"@angular/platform-browser": "^7",
|
"@angular/platform-browser": "^7",
|
||||||
"@ng-bootstrap/ng-bootstrap": "^1",
|
"@ng-bootstrap/ng-bootstrap": "^1",
|
||||||
"terminus-core": "*",
|
"rxjs": "^5",
|
||||||
"rxjs": "^5"
|
"terminus-core": "*"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -41,8 +41,8 @@ export class HotkeyInputModalComponent {
|
|||||||
@Input() timeoutProgress = 0
|
@Input() timeoutProgress = 0
|
||||||
|
|
||||||
private keySubscription: Subscription
|
private keySubscription: Subscription
|
||||||
private lastKeyEvent: number
|
private lastKeyEvent: number|null = null
|
||||||
private keyTimeoutInterval: number = null
|
private keyTimeoutInterval: number|null = null
|
||||||
|
|
||||||
constructor (
|
constructor (
|
||||||
private modalInstance: NgbActiveModal,
|
private modalInstance: NgbActiveModal,
|
||||||
@@ -78,7 +78,7 @@ export class HotkeyInputModalComponent {
|
|||||||
this.keySubscription.unsubscribe()
|
this.keySubscription.unsubscribe()
|
||||||
this.hotkeys.clearCurrentKeystrokes()
|
this.hotkeys.clearCurrentKeystrokes()
|
||||||
this.hotkeys.enable()
|
this.hotkeys.enable()
|
||||||
clearInterval(this.keyTimeoutInterval)
|
clearInterval(this.keyTimeoutInterval!)
|
||||||
}
|
}
|
||||||
|
|
||||||
close () {
|
close () {
|
||||||
|
@@ -8,14 +8,14 @@ ngb-tabset.vertical(type='pills', [activeId]='activeTab')
|
|||||||
ng-template(ngbTabContent)
|
ng-template(ngbTabContent)
|
||||||
.d-flex.align-items-center.mb-4
|
.d-flex.align-items-center.mb-4
|
||||||
h1.terminus-title.mb-2.mr-2 Terminus
|
h1.terminus-title.mb-2.mr-2 Terminus
|
||||||
sup α
|
sup α
|
||||||
|
|
||||||
.text-muted.mr-auto {{homeBase.appVersion}}
|
.text-muted.mr-auto {{homeBase.appVersion}}
|
||||||
|
|
||||||
button.btn.btn-secondary.mr-3((click)='homeBase.openGitHub()')
|
button.btn.btn-secondary.mr-3((click)='homeBase.openGitHub()')
|
||||||
i.fab.fa-github
|
i.fab.fa-github
|
||||||
span GitHub
|
span GitHub
|
||||||
|
|
||||||
button.btn.btn-secondary((click)='homeBase.reportBug()')
|
button.btn.btn-secondary((click)='homeBase.reportBug()')
|
||||||
i.fas.fa-bug
|
i.fas.fa-bug
|
||||||
span Report a problem
|
span Report a problem
|
||||||
@@ -57,7 +57,7 @@ ngb-tabset.vertical(type='pills', [activeId]='activeTab')
|
|||||||
.title(*ngIf='hostApp.platform === Platform.Windows') Acrylic background
|
.title(*ngIf='hostApp.platform === Platform.Windows') Acrylic background
|
||||||
.title(*ngIf='hostApp.platform === Platform.macOS') Vibrancy
|
.title(*ngIf='hostApp.platform === Platform.macOS') Vibrancy
|
||||||
.description Gives the window a blurred transparent background
|
.description Gives the window a blurred transparent background
|
||||||
|
|
||||||
toggle(
|
toggle(
|
||||||
[(ngModel)]='config.store.appearance.vibrancy',
|
[(ngModel)]='config.store.appearance.vibrancy',
|
||||||
(ngModelChange)='config.save()'
|
(ngModelChange)='config.save()'
|
||||||
@@ -85,7 +85,7 @@ ngb-tabset.vertical(type='pills', [activeId]='activeTab')
|
|||||||
[value]='"fluent"'
|
[value]='"fluent"'
|
||||||
)
|
)
|
||||||
| Fluent
|
| Fluent
|
||||||
|
|
||||||
.form-line
|
.form-line
|
||||||
.header
|
.header
|
||||||
.title Transparency
|
.title Transparency
|
||||||
@@ -236,6 +236,12 @@ ngb-tabset.vertical(type='pills', [activeId]='activeTab')
|
|||||||
(ngModelChange)='config.save(); config.requestRestart()',
|
(ngModelChange)='config.save(); config.requestRestart()',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
.form-line
|
||||||
|
.header
|
||||||
|
.title Automatic Updates
|
||||||
|
.description Enable automatic installation of updates when they become available.
|
||||||
|
toggle([(ngModel)]='config.store.enableAutomaticUpdates', (ngModelChange)='config.save()')
|
||||||
|
|
||||||
.form-line
|
.form-line
|
||||||
.header
|
.header
|
||||||
.title Custom CSS
|
.title Custom CSS
|
||||||
@@ -250,27 +256,28 @@ ngb-tabset.vertical(type='pills', [activeId]='activeTab')
|
|||||||
| Hotkeys
|
| Hotkeys
|
||||||
ng-template(ngbTabContent)
|
ng-template(ngbTabContent)
|
||||||
h3.mb-3 Hotkeys
|
h3.mb-3 Hotkeys
|
||||||
|
|
||||||
.input-group.mb-4
|
.input-group.mb-4
|
||||||
.input-group-prepend
|
.input-group-prepend
|
||||||
.input-group-text
|
.input-group-text
|
||||||
i.fas.fa-fw.fa-search
|
i.fas.fa-fw.fa-search
|
||||||
input.form-control(type='search', placeholder='Search hotkeys', [(ngModel)]='hotkeyFilter')
|
input.form-control(type='search', placeholder='Search hotkeys', [(ngModel)]='hotkeyFilter')
|
||||||
|
|
||||||
.form-group
|
.form-group
|
||||||
table.hotkeys-table
|
table.hotkeys-table
|
||||||
tr
|
tr
|
||||||
th Name
|
th Name
|
||||||
th ID
|
th ID
|
||||||
th Hotkey
|
th Hotkey
|
||||||
tr(*ngFor='let hotkey of hotkeyDescriptions|filterBy:["name"]:hotkeyFilter')
|
ng-container(*ngFor='let hotkey of hotkeyDescriptions')
|
||||||
td {{hotkey.name}}
|
tr(*ngIf='!hotkeyFilter || hotkey.name.toLowerCase().includes(hotkeyFilter.toLowerCase())')
|
||||||
td {{hotkey.id}}
|
td {{hotkey.name}}
|
||||||
td.pr-5
|
td {{hotkey.id}}
|
||||||
multi-hotkey-input(
|
td.pr-5
|
||||||
[model]='getHotkey(hotkey.id)',
|
multi-hotkey-input(
|
||||||
(modelChange)='setHotkey(hotkey.id, $event); config.save(); docking.dock()'
|
[model]='getHotkey(hotkey.id)',
|
||||||
)
|
(modelChange)='setHotkey(hotkey.id, $event); config.save(); docking.dock()'
|
||||||
|
)
|
||||||
|
|
||||||
ngb-tab(*ngFor='let provider of settingsProviders', [id]='provider.id')
|
ngb-tab(*ngFor='let provider of settingsProviders', [id]='provider.id')
|
||||||
ng-template(ngbTabTitle)
|
ng-template(ngbTabTitle)
|
||||||
@@ -279,7 +286,7 @@ ngb-tabset.vertical(type='pills', [activeId]='activeTab')
|
|||||||
ng-template(ngbTabContent)
|
ng-template(ngbTabContent)
|
||||||
settings-tab-body([provider]='provider')
|
settings-tab-body([provider]='provider')
|
||||||
|
|
||||||
|
|
||||||
ngb-tab(id='config-file')
|
ngb-tab(id='config-file')
|
||||||
ng-template(ngbTabTitle)
|
ng-template(ngbTabTitle)
|
||||||
i.fas.fa-fw.fa-code.mr-2
|
i.fas.fa-fw.fa-code.mr-2
|
||||||
@@ -297,7 +304,7 @@ ngb-tabset.vertical(type='pills', [activeId]='activeTab')
|
|||||||
textarea.form-control.h-100(
|
textarea.form-control.h-100(
|
||||||
[(ngModel)]='configDefaults',
|
[(ngModel)]='configDefaults',
|
||||||
readonly
|
readonly
|
||||||
)
|
)
|
||||||
.mt-2.mb-2.d-flex
|
.mt-2.mb-2.d-flex
|
||||||
button.btn.btn-primary((click)='saveConfigFile()', *ngIf='isConfigFileValid()')
|
button.btn.btn-primary((click)='saveConfigFile()', *ngIf='isConfigFileValid()')
|
||||||
i.fas.fa-check.mr-2
|
i.fas.fa-check.mr-2
|
||||||
|
@@ -70,12 +70,12 @@ export class SettingsTabComponent extends BaseTabComponent {
|
|||||||
onConfigChange()
|
onConfigChange()
|
||||||
|
|
||||||
const onScreenChange = () => {
|
const onScreenChange = () => {
|
||||||
this.zone.run(() => this.screens = this.docking.getScreens());
|
this.zone.run(() => this.screens = this.docking.getScreens())
|
||||||
}
|
}
|
||||||
|
|
||||||
electron.screen.on('display-added', onScreenChange);
|
electron.screen.on('display-added', onScreenChange)
|
||||||
electron.screen.on('display-removed', onScreenChange);
|
electron.screen.on('display-removed', onScreenChange)
|
||||||
electron.screen.on('display-metrics-changed', onScreenChange);
|
electron.screen.on('display-metrics-changed', onScreenChange)
|
||||||
|
|
||||||
hotkeys.getHotkeyDescriptions().then(descriptions => {
|
hotkeys.getHotkeyDescriptions().then(descriptions => {
|
||||||
this.hotkeyDescriptions = descriptions
|
this.hotkeyDescriptions = descriptions
|
||||||
@@ -100,7 +100,7 @@ export class SettingsTabComponent extends BaseTabComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async getRecoveryToken (): Promise<any> {
|
async getRecoveryToken (): Promise<any> {
|
||||||
return { type: 'app:settings' }
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy () {
|
ngOnDestroy () {
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
:host /deep/ ngb-tabset {
|
:host /deep/ ngb-tabset {
|
||||||
flex: auto;
|
flex: auto;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
:host /deep/ ngb-tabset > .nav {
|
:host /deep/ ngb-tabset > .nav {
|
||||||
display: flex;
|
display: block;
|
||||||
flex-direction: column;
|
overflow-y: auto;
|
||||||
flex: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
:host /deep/ ngb-tabset > .tab-content {
|
:host /deep/ ngb-tabset > .tab-content {
|
||||||
|
@@ -2,7 +2,6 @@ import { NgModule } from '@angular/core'
|
|||||||
import { BrowserModule } from '@angular/platform-browser'
|
import { BrowserModule } from '@angular/platform-browser'
|
||||||
import { FormsModule } from '@angular/forms'
|
import { FormsModule } from '@angular/forms'
|
||||||
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
|
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
|
||||||
import { NgPipesModule } from 'ngx-pipes'
|
|
||||||
|
|
||||||
import TerminusCorePlugin, { ToolbarButtonProvider, TabRecoveryProvider, HotkeyProvider, ConfigProvider } from 'terminus-core'
|
import TerminusCorePlugin, { ToolbarButtonProvider, TabRecoveryProvider, HotkeyProvider, ConfigProvider } from 'terminus-core'
|
||||||
|
|
||||||
@@ -22,7 +21,6 @@ import { SettingsConfigProvider } from './config'
|
|||||||
BrowserModule,
|
BrowserModule,
|
||||||
FormsModule,
|
FormsModule,
|
||||||
NgbModule,
|
NgbModule,
|
||||||
NgPipesModule,
|
|
||||||
TerminusCorePlugin,
|
TerminusCorePlugin,
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
|
@@ -6,7 +6,7 @@ import { SettingsTabComponent } from './components/settingsTab.component'
|
|||||||
/** @hidden */
|
/** @hidden */
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class RecoveryProvider extends TabRecoveryProvider {
|
export class RecoveryProvider extends TabRecoveryProvider {
|
||||||
async recover (recoveryToken: any): Promise<RecoveredTab> {
|
async recover (recoveryToken: any): Promise<RecoveredTab|null> {
|
||||||
if (recoveryToken && recoveryToken.type === 'app:settings') {
|
if (recoveryToken && recoveryToken.type === 'app:settings') {
|
||||||
return { type: SettingsTabComponent }
|
return { type: SettingsTabComponent }
|
||||||
}
|
}
|
||||||
|
@@ -1,11 +1,10 @@
|
|||||||
const path = require('path')
|
const path = require('path')
|
||||||
const webpack = require('webpack')
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
target: 'node',
|
target: 'node',
|
||||||
entry: 'src/index.ts',
|
entry: 'src/index.ts',
|
||||||
context: __dirname,
|
context: __dirname,
|
||||||
mode: 'development',
|
devtool: 'eval-cheap-module-source-map',
|
||||||
output: {
|
output: {
|
||||||
path: path.resolve(__dirname, 'dist'),
|
path: path.resolve(__dirname, 'dist'),
|
||||||
filename: 'index.js',
|
filename: 'index.js',
|
||||||
@@ -55,11 +54,4 @@ module.exports = {
|
|||||||
/^@ng-bootstrap/,
|
/^@ng-bootstrap/,
|
||||||
/^terminus-/,
|
/^terminus-/,
|
||||||
],
|
],
|
||||||
plugins: [
|
|
||||||
new webpack.optimize.ModuleConcatenationPlugin(),
|
|
||||||
new webpack.SourceMapDevToolPlugin({
|
|
||||||
exclude: [/node_modules/, /vendor/],
|
|
||||||
filename: '[file].map',
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user