homebridge-config-ui-x 5.3.1-beta.9 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -4
- package/dist/bin/standalone.d.ts +2 -0
- package/dist/bin/standalone.js +58 -0
- package/dist/bin/standalone.js.map +1 -0
- package/dist/modules/platform-tools/terminal/terminal.service.js +26 -26
- package/dist/modules/platform-tools/terminal/terminal.service.js.map +1 -1
- package/dist/modules/server/server.service.js +1 -1
- package/package.json +4 -4
- package/public/assets/monaco-0.21.3/LICENSE +21 -0
- package/public/assets/monaco-0.21.3/README.md +96 -0
- package/public/assets/monaco-0.21.3/ThirdPartyNotices.txt +283 -0
- package/public/assets/monaco-0.21.3/package.json +38 -0
- package/public/assets/service-icons/air-purifier.svg +50 -0
- package/public/assets/{hap-icons → service-icons}/air-quality-sensor.svg +2 -2
- package/public/assets/service-icons/carbon-dioxide-sensor.svg +53 -0
- package/public/assets/service-icons/carbon-monoxide-sensor.svg +53 -0
- package/public/assets/service-icons/contact-sensor.svg +45 -0
- package/public/assets/service-icons/door.svg +28 -0
- package/public/assets/service-icons/doorbell.svg +7 -0
- package/public/assets/service-icons/fan.svg +15 -0
- package/public/assets/service-icons/filter-maintenance.svg +54 -0
- package/public/assets/service-icons/garage-door.svg +120 -0
- package/public/assets/service-icons/microphone.svg +12 -0
- package/public/assets/service-icons/smoke-sensor.svg +38 -0
- package/public/assets/service-icons/speaker.svg +28 -0
- package/public/assets/service-icons/television.svg +17 -0
- package/public/assets/service-icons/washing-machine.svg +34 -0
- package/public/assets/service-icons/window-covering.svg +44 -0
- package/public/assets/service-icons/window.svg +67 -0
- package/public/{chunk-B5AYH2BC.js → chunk-2HZOWWRB.js} +1 -1
- package/public/{chunk-GEXFURZE.js → chunk-2TDOLECC.js} +1 -1
- package/public/chunk-2ZM2CO7S.js +1 -0
- package/public/{chunk-KKMV35EJ.js → chunk-3JNJJOX6.js} +1 -1
- package/public/{chunk-S5VOLN5S.js → chunk-3L7PIOD5.js} +1 -1
- package/public/{chunk-AKD24HZC.js → chunk-3QBYXJ7T.js} +1 -1
- package/public/{chunk-FG353N2G.js → chunk-3WCZQYFM.js} +1 -1
- package/public/{chunk-7G2YYPIL.js → chunk-4A6F5427.js} +1 -1
- package/public/{chunk-VWWI5W24.js → chunk-4I4YTNGD.js} +1 -1
- package/public/{chunk-GYBGIQ6I.js → chunk-5FOJUOIT.js} +1 -1
- package/public/chunk-645YHJEQ.js +4 -0
- package/public/{chunk-FXOH6MUI.js → chunk-6BITWEO6.js} +1 -1
- package/public/{chunk-25NXLXGL.js → chunk-6HJHVJPI.js} +1 -1
- package/public/chunk-6NW4EKE6.js +4 -0
- package/public/{chunk-GBILZGBS.js → chunk-73PB5ERF.js} +1 -1
- package/public/{chunk-7OOZYU5L.js → chunk-7M4GTFPB.js} +1 -1
- package/public/{chunk-IH6TCZKW.js → chunk-7NWB7MN6.js} +1 -1
- package/public/chunk-BHQK7H4B.js +1 -0
- package/public/{chunk-E3QIV2NC.js → chunk-BLNEXUND.js} +1 -1
- package/public/{chunk-G6OT66TG.js → chunk-BQ7Q4FRF.js} +1 -1
- package/public/chunk-CLGDJPWG.js +12 -0
- package/public/{chunk-DE76AGV3.js → chunk-DCEE4BJT.js} +1 -1
- package/public/{chunk-RPRM66DV.js → chunk-DYB33NRF.js} +1 -1
- package/public/{chunk-TVRTT63H.js → chunk-EKINPADV.js} +1 -1
- package/public/{chunk-UPWD7C23.js → chunk-EQHN6CPG.js} +1 -1
- package/public/{chunk-3T4CLJZB.js → chunk-EZQF5CUM.js} +1 -1
- package/public/{chunk-CYSLA66J.js → chunk-F6NZALU5.js} +1 -1
- package/public/{chunk-P72KTIAV.js → chunk-FG5QICVJ.js} +1 -1
- package/public/{chunk-RYQXCZEW.js → chunk-FIQUQJTU.js} +1 -1
- package/public/{chunk-WYH2UWLZ.js → chunk-FKZEDXUZ.js} +1 -1
- package/public/chunk-FYDO54CR.js +1 -0
- package/public/{chunk-MJK6N6PA.js → chunk-FYI7RHOJ.js} +1 -1
- package/public/{chunk-S7AIVWKK.js → chunk-G6KV6PYE.js} +1 -1
- package/public/chunk-GNULJZ2P.js +1 -0
- package/public/{chunk-H337OZRD.js → chunk-HHGB2T2Q.js} +1 -1
- package/public/{chunk-2FTHA637.js → chunk-HO4UVRDI.js} +1 -1
- package/public/{chunk-23XH7HBN.js → chunk-HSAZV5QQ.js} +1 -1
- package/public/{chunk-6WLDPZET.js → chunk-IAVKQO7M.js} +1 -1
- package/public/{chunk-RHCMG64A.js → chunk-JCYDPJQ5.js} +1 -1
- package/public/chunk-KLQ6BEKS.js +2 -0
- package/public/chunk-KPOP67KE.js +1 -0
- package/public/{chunk-VPU5FNT3.js → chunk-KYB236MX.js} +1 -1
- package/public/{chunk-HWXVYPUM.js → chunk-LJDW32KF.js} +3 -3
- package/public/{chunk-F3MG6UU6.js → chunk-M4QDQWSG.js} +1 -1
- package/public/chunk-O7RJ6JXM.js +1 -0
- package/public/{chunk-2APX6TML.js → chunk-OMGXHYZA.js} +1 -1
- package/public/{chunk-O3ZUJHYU.js → chunk-OSQ37ZQY.js} +1 -1
- package/public/{chunk-HJ4A27B3.js → chunk-OW6LBBVH.js} +1 -1
- package/public/{chunk-NO7RIAKI.js → chunk-PPSFRNJC.js} +1 -1
- package/public/{chunk-HC4PHBTI.js → chunk-QL5UNVZO.js} +1 -1
- package/public/{chunk-OFGO6QZU.js → chunk-QM6QRTMV.js} +1 -1
- package/public/{chunk-Y6FHYF3A.js → chunk-QZWC7RP4.js} +1 -1
- package/public/{chunk-YP6XHKAT.js → chunk-R6KN5Y43.js} +1 -1
- package/public/{chunk-UKEZ5GGN.js → chunk-RCYYU6LQ.js} +1 -1
- package/public/{chunk-V2JQMGNW.js → chunk-RGXCQLZU.js} +1 -1
- package/public/{chunk-S7D4ALZN.js → chunk-RZ4UMDVF.js} +1 -1
- package/public/{chunk-TP4NTACL.js → chunk-TOI5IERI.js} +1 -1
- package/public/{chunk-3E7ISGPA.js → chunk-U4UZ4WQX.js} +1 -1
- package/public/{chunk-O64A5SOM.js → chunk-U52WKM74.js} +1 -1
- package/public/{chunk-6TXOJ5PS.js → chunk-UFFQKHXE.js} +1 -1
- package/public/{chunk-O4DNLPYF.js → chunk-ULWO2VVV.js} +1 -1
- package/public/{chunk-IMT3YYMD.js → chunk-V35TPDVW.js} +1 -1
- package/public/{chunk-T5INXMWC.js → chunk-V7OQR5Y4.js} +1 -1
- package/public/{chunk-5DCA7TNW.js → chunk-VJOMQ46T.js} +1 -1
- package/public/{chunk-5KQOUNSC.js → chunk-VRXR6ACJ.js} +1 -1
- package/public/{chunk-KZE6PFIV.js → chunk-WG533VX7.js} +1 -1
- package/public/{chunk-OH5DGT3H.js → chunk-YPZJFK3W.js} +1 -1
- package/public/{chunk-KB5AKZT6.js → chunk-Z6DMMN6D.js} +1 -1
- package/public/{chunk-AJZXTLH5.js → chunk-ZO74PVYQ.js} +1 -1
- package/public/index.html +2 -2
- package/public/main-HN6ISZGH.js +1 -0
- package/public/media/fa-brands-400-Q3XCMWHQ.woff2 +0 -0
- package/public/media/fa-brands-400-R2XQZCET.ttf +0 -0
- package/public/media/fa-regular-400-QSNYFYRT.woff2 +0 -0
- package/public/media/fa-regular-400-XUOPSR7E.ttf +0 -0
- package/public/media/fa-solid-900-5ZUYHGA7.woff2 +0 -0
- package/public/media/fa-solid-900-PJNKLK6W.ttf +0 -0
- package/public/styles-XESJTHVW.css +1 -0
- package/public/assets/hap-icons/air-purifier.svg +0 -62
- package/public/assets/hap-icons/carbon-dioxide-sensor.svg +0 -72
- package/public/assets/hap-icons/carbon-monoxide-sensor.svg +0 -72
- package/public/assets/hap-icons/contact-sensor-closed.svg +0 -36
- package/public/assets/hap-icons/contact-sensor-open.svg +0 -81
- package/public/assets/hap-icons/door-closed.svg +0 -33
- package/public/assets/hap-icons/door-open.svg +0 -49
- package/public/assets/hap-icons/doorbell.svg +0 -9
- package/public/assets/hap-icons/fan-off.svg +0 -25
- package/public/assets/hap-icons/fan-on.svg +0 -25
- package/public/assets/hap-icons/filter-maintenance.svg +0 -26
- package/public/assets/hap-icons/garage-door.svg +0 -25
- package/public/assets/hap-icons/microphone.svg +0 -14
- package/public/assets/hap-icons/smoke-sensor.svg +0 -59
- package/public/assets/hap-icons/speaker.svg +0 -46
- package/public/assets/hap-icons/television.svg +0 -16
- package/public/assets/hap-icons/window-closed.svg +0 -86
- package/public/assets/hap-icons/window-covering-closed.svg +0 -49
- package/public/assets/hap-icons/window-covering-open.svg +0 -44
- package/public/assets/hap-icons/window-open.svg +0 -137
- package/public/chunk-3MXSPHL2.js +0 -1
- package/public/chunk-7SQCM466.js +0 -1
- package/public/chunk-CFYGJBJN.js +0 -1
- package/public/chunk-CPAHENLQ.js +0 -1
- package/public/chunk-DEQA7IOH.js +0 -4
- package/public/chunk-HVZJ7SFU.js +0 -1
- package/public/chunk-IDOLIFNQ.js +0 -1
- package/public/chunk-MADTYIL6.js +0 -12
- package/public/chunk-RJOGO4M5.js +0 -2
- package/public/chunk-WEVBEUAJ.js +0 -4
- package/public/main-KCMESMSJ.js +0 -1
- package/public/media/fa-brands-400-WVWUIHCX.woff2 +0 -0
- package/public/media/fa-regular-400-I5DJMINO.woff2 +0 -0
- package/public/media/fa-solid-900-C5F6UWGT.woff2 +0 -0
- package/public/styles-LG2MDN7O.css +0 -1
- /package/public/assets/{monaco → monaco-0.21.3}/min/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
- /package/public/assets/{monaco → monaco-0.21.3}/min/vs/base/worker/workerMain.js +0 -0
- /package/public/assets/{monaco → monaco-0.21.3}/min/vs/basic-languages/shell/shell.js +0 -0
- /package/public/assets/{monaco → monaco-0.21.3}/min/vs/editor/editor.main.css +0 -0
- /package/public/assets/{monaco → monaco-0.21.3}/min/vs/editor/editor.main.js +0 -0
- /package/public/assets/{monaco → monaco-0.21.3}/min/vs/editor/editor.main.nls.js +0 -0
- /package/public/assets/{monaco → monaco-0.21.3}/min/vs/language/json/jsonMode.js +0 -0
- /package/public/assets/{monaco → monaco-0.21.3}/min/vs/language/json/jsonWorker.js +0 -0
- /package/public/assets/{monaco → monaco-0.21.3}/min/vs/loader.js +0 -0
- /package/public/assets/{hap-icons → service-icons}/robot-vacuum.svg +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `homebridge-config-ui-x` will be documented in this file. This project tries to adhere to [Semantic Versioning](http://semver.org/).
|
|
4
4
|
|
|
5
|
-
## v5.
|
|
5
|
+
## v5.4.0 (2025-08-02)
|
|
6
6
|
|
|
7
7
|
### UI Changes
|
|
8
8
|
|
|
9
|
+
- updates to the `th.json` language file (#2520) (@tomzt)
|
|
9
10
|
- json config editor to offer child bridge restarts where possible
|
|
10
11
|
- improvements to the restore config file modal
|
|
11
12
|
- terminal session persistence and macos shell optimization (#2493) (@seidnerj)
|
|
@@ -26,19 +27,27 @@ All notable changes to `homebridge-config-ui-x` will be documented in this file.
|
|
|
26
27
|
- air quality sensor tile: update icon to match new style
|
|
27
28
|
- show in sys info widget if arch is 32-bit or 64-bit
|
|
28
29
|
- fix for custom ui colouring in dark mode
|
|
30
|
+
- updated icons: co, co2, smoke, contact, garage
|
|
31
|
+
- thermostat accessory: show target slider when available
|
|
32
|
+
- updated icon for door, window and window covering services
|
|
33
|
+
- accessory info: show props on characteristic click
|
|
34
|
+
- credits modal: added new section for translations
|
|
35
|
+
- custom types: expose a switch/outlet as a washing machine
|
|
36
|
+
- refreshed icons for fan, television, speaker + filter
|
|
37
|
+
- added confirmation modal for shutting down
|
|
29
38
|
|
|
30
39
|
### Other Changes
|
|
31
40
|
|
|
32
|
-
- remove now unused `standalone.ts` file
|
|
33
|
-
- update `@homebridge/node-pty-prebuilt-multiarch` to `0.14.1-beta`
|
|
34
41
|
- added `arm` runners to the ui workflows for testing
|
|
35
42
|
- make 'keep orphans' setting available in ui settings service
|
|
36
43
|
- improve types for widgets
|
|
44
|
+
- upgrade `@ngx-translate/core` from `v16` to `v17`
|
|
45
|
+
- fix get pairings, ignore `.json.bak` files
|
|
37
46
|
|
|
38
47
|
### Homebridge Dependencies
|
|
39
48
|
|
|
40
49
|
- `@homebridge/hap-client` @ `v3.1.1`
|
|
41
|
-
- `@homebridge/node-pty-prebuilt-multiarch` @ `v0.
|
|
50
|
+
- `@homebridge/node-pty-prebuilt-multiarch` @ `v0.13.1`
|
|
42
51
|
- `@homebridge/plugin-ui-utils` @ `v2.1.0`
|
|
43
52
|
|
|
44
53
|
## v5.3.0 (2025-07-23)
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
const node_os_1 = require("node:os");
|
|
41
|
+
const node_path_1 = require("node:path");
|
|
42
|
+
const node_process_1 = __importDefault(require("node:process"));
|
|
43
|
+
const commander_1 = require("commander");
|
|
44
|
+
node_process_1.default.title = 'homebridge-config-ui-x';
|
|
45
|
+
commander_1.program
|
|
46
|
+
.allowUnknownOption()
|
|
47
|
+
.allowExcessArguments()
|
|
48
|
+
.option('-U, --user-storage-path [path]', '', p => node_process_1.default.env.UIX_STORAGE_PATH = p)
|
|
49
|
+
.option('-P, --plugin-path [path]', '', p => node_process_1.default.env.UIX_CUSTOM_PLUGIN_PATH = p)
|
|
50
|
+
.option('-I, --insecure', '', () => node_process_1.default.env.UIX_INSECURE_MODE = '1')
|
|
51
|
+
.option('-T, --no-timestamp', '', () => node_process_1.default.env.UIX_LOG_NO_TIMESTAMPS = '1')
|
|
52
|
+
.parse(node_process_1.default.argv);
|
|
53
|
+
if (!node_process_1.default.env.UIX_STORAGE_PATH) {
|
|
54
|
+
node_process_1.default.env.UIX_STORAGE_PATH = (0, node_path_1.resolve)((0, node_os_1.homedir)(), '.homebridge');
|
|
55
|
+
}
|
|
56
|
+
node_process_1.default.env.UIX_CONFIG_PATH = (0, node_path_1.resolve)(node_process_1.default.env.UIX_STORAGE_PATH, 'config.json');
|
|
57
|
+
Promise.resolve().then(() => __importStar(require('../main')));
|
|
58
|
+
//# sourceMappingURL=standalone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standalone.js","sourceRoot":"","sources":["../../src/bin/standalone.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,qCAAiC;AACjC,yCAAmC;AACnC,gEAAkC;AAElC,yCAAmC;AAEnC,sBAAO,CAAC,KAAK,GAAG,wBAAwB,CAAA;AAExC,mBAAO;KACJ,kBAAkB,EAAE;KACpB,oBAAoB,EAAE;KACtB,MAAM,CAAC,gCAAgC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,sBAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,CAAC;KACnF,MAAM,CAAC,0BAA0B,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,sBAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,CAAC,CAAC;KACnF,MAAM,CAAC,gBAAgB,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,sBAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,GAAG,CAAC;KACvE,MAAM,CAAC,oBAAoB,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,sBAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,GAAG,CAAC;KAC/E,KAAK,CAAC,sBAAO,CAAC,IAAI,CAAC,CAAA;AAEtB,IAAI,CAAC,sBAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAClC,sBAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,IAAA,mBAAO,EAAC,IAAA,iBAAO,GAAE,EAAE,aAAa,CAAC,CAAA;AAClE,CAAC;AAED,sBAAO,CAAC,GAAG,CAAC,eAAe,GAAG,IAAA,mBAAO,EAAC,sBAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAA;AAElF,kDAAO,SAAS,IAAC"}
|
|
@@ -28,7 +28,7 @@ let TerminalService = TerminalService_1 = class TerminalService {
|
|
|
28
28
|
this.nodePtyService = nodePtyService;
|
|
29
29
|
this.ending = false;
|
|
30
30
|
this.instanceId = Math.random().toString(36).substring(2, 11);
|
|
31
|
-
this.logger.
|
|
31
|
+
this.logger.debug(`TerminalService instance created: ${this.instanceId}`);
|
|
32
32
|
}
|
|
33
33
|
async getPreferredShell() {
|
|
34
34
|
if (node_os_1.default.platform() === 'darwin' && await (0, fs_extra_1.pathExists)('/bin/zsh')) {
|
|
@@ -39,7 +39,7 @@ let TerminalService = TerminalService_1 = class TerminalService {
|
|
|
39
39
|
async startSession(client, size) {
|
|
40
40
|
this.ending = false;
|
|
41
41
|
if (!this.configService.enableTerminalAccess) {
|
|
42
|
-
this.logger.
|
|
42
|
+
this.logger.warn('Terminal is not enabled, disconnecting client...');
|
|
43
43
|
client.disconnect();
|
|
44
44
|
return;
|
|
45
45
|
}
|
|
@@ -98,9 +98,9 @@ let TerminalService = TerminalService_1 = class TerminalService {
|
|
|
98
98
|
client.on('disconnect', onEnd.bind(this));
|
|
99
99
|
}
|
|
100
100
|
async attachToPersistentTerminal(client, size) {
|
|
101
|
-
this.logger.
|
|
101
|
+
this.logger.debug(`[${this.instanceId}] attachToPersistentTerminal called`);
|
|
102
102
|
if (!TerminalService_1.persistentTerminal) {
|
|
103
|
-
this.logger.
|
|
103
|
+
this.logger.debug(`[${this.instanceId}] Creating new persistent terminal session.`);
|
|
104
104
|
const shell = await this.getPreferredShell();
|
|
105
105
|
TerminalService_1.persistentTerminal = this.nodePtyService.spawn(shell, [], {
|
|
106
106
|
name: 'xterm-color',
|
|
@@ -110,7 +110,7 @@ let TerminalService = TerminalService_1 = class TerminalService {
|
|
|
110
110
|
env: node_process_1.default.env,
|
|
111
111
|
});
|
|
112
112
|
if (!TerminalService_1.dataListenerAttached) {
|
|
113
|
-
this.logger.
|
|
113
|
+
this.logger.debug(`[${this.instanceId}] Attaching data listener`);
|
|
114
114
|
TerminalService_1.persistentTerminal.onData((data) => {
|
|
115
115
|
try {
|
|
116
116
|
this.logger.debug(`[${this.instanceId}] Terminal output: ${data.length} characters`);
|
|
@@ -120,26 +120,26 @@ let TerminalService = TerminalService_1 = class TerminalService {
|
|
|
120
120
|
TerminalService_1.terminalBuffer = TerminalService_1.terminalBuffer.slice(-maxBufferSize);
|
|
121
121
|
}
|
|
122
122
|
if (TerminalService_1.connectedClients.size > 0) {
|
|
123
|
-
this.logger.
|
|
123
|
+
this.logger.debug(`[${this.instanceId}] Sending output to ${TerminalService_1.connectedClients.size} connected clients`);
|
|
124
124
|
TerminalService_1.connectedClients.forEach((client) => {
|
|
125
125
|
try {
|
|
126
126
|
client.emit('stdout', data);
|
|
127
127
|
}
|
|
128
128
|
catch (e) {
|
|
129
|
-
this.logger.
|
|
129
|
+
this.logger.error(`[${this.instanceId}] Error sending output to a client: ${e}`);
|
|
130
130
|
TerminalService_1.connectedClients.delete(client);
|
|
131
131
|
}
|
|
132
132
|
});
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
135
|
catch (e) {
|
|
136
|
-
this.logger.
|
|
136
|
+
this.logger.error(`[${this.instanceId}] Error sending output to client: ${e}`);
|
|
137
137
|
}
|
|
138
138
|
});
|
|
139
139
|
TerminalService_1.dataListenerAttached = true;
|
|
140
140
|
}
|
|
141
141
|
TerminalService_1.persistentTerminal.onExit((exitInfo) => {
|
|
142
|
-
this.logger.
|
|
142
|
+
this.logger.debug(`[${this.instanceId}] Persistent terminal exited.`);
|
|
143
143
|
TerminalService_1.connectedClients.forEach((client) => {
|
|
144
144
|
try {
|
|
145
145
|
client.emit('process-exit', exitInfo.exitCode);
|
|
@@ -155,30 +155,30 @@ let TerminalService = TerminalService_1 = class TerminalService {
|
|
|
155
155
|
});
|
|
156
156
|
}
|
|
157
157
|
else {
|
|
158
|
-
this.logger.
|
|
158
|
+
this.logger.debug(`[${this.instanceId}] Attaching to existing persistent terminal.`);
|
|
159
159
|
try {
|
|
160
160
|
TerminalService_1.persistentTerminal.resize(size.cols, size.rows);
|
|
161
161
|
}
|
|
162
162
|
catch (e) { }
|
|
163
163
|
}
|
|
164
|
-
this.logger.
|
|
164
|
+
this.logger.debug(`[${this.instanceId}] Cleaning up existing client listeners`);
|
|
165
165
|
client.removeAllListeners('stdin');
|
|
166
166
|
client.removeAllListeners('resize');
|
|
167
|
-
this.logger.
|
|
167
|
+
this.logger.debug(`[${this.instanceId}] Adding client to connected clients`);
|
|
168
168
|
TerminalService_1.connectedClients.add(client);
|
|
169
169
|
if (TerminalService_1.terminalBuffer && TerminalService_1.terminalBuffer.length > 0) {
|
|
170
|
-
this.logger.
|
|
170
|
+
this.logger.debug(`[${this.instanceId}] Sending ${TerminalService_1.terminalBuffer.length} chars of buffer to new client`);
|
|
171
171
|
try {
|
|
172
172
|
client.emit('stdout', TerminalService_1.terminalBuffer);
|
|
173
173
|
}
|
|
174
174
|
catch (e) {
|
|
175
|
-
this.logger.
|
|
175
|
+
this.logger.error(`[${this.instanceId}] Error sending buffer to client: ${e}`);
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
178
|
else {
|
|
179
|
-
this.logger.
|
|
179
|
+
this.logger.debug(`[${this.instanceId}] No buffer to send to new client`);
|
|
180
180
|
}
|
|
181
|
-
this.logger.
|
|
181
|
+
this.logger.debug(`[${this.instanceId}] Adding stdin and resize listeners`);
|
|
182
182
|
client.on('stdin', (data) => {
|
|
183
183
|
this.logger.debug(`[${this.instanceId}] Received stdin from client: ${data.length} characters`);
|
|
184
184
|
if (TerminalService_1.persistentTerminal) {
|
|
@@ -186,11 +186,11 @@ let TerminalService = TerminalService_1 = class TerminalService {
|
|
|
186
186
|
TerminalService_1.persistentTerminal.write(data);
|
|
187
187
|
}
|
|
188
188
|
else {
|
|
189
|
-
this.logger.
|
|
189
|
+
this.logger.warn(`[${this.instanceId}] No persistent terminal to write to!`);
|
|
190
190
|
}
|
|
191
191
|
});
|
|
192
192
|
client.on('resize', (resize) => {
|
|
193
|
-
this.logger.
|
|
193
|
+
this.logger.debug(`[${this.instanceId}] Received resize from client`);
|
|
194
194
|
try {
|
|
195
195
|
if (TerminalService_1.persistentTerminal) {
|
|
196
196
|
TerminalService_1.persistentTerminal.resize(resize.cols, resize.rows);
|
|
@@ -199,41 +199,41 @@ let TerminalService = TerminalService_1 = class TerminalService {
|
|
|
199
199
|
catch (e) { }
|
|
200
200
|
});
|
|
201
201
|
const onEnd = () => {
|
|
202
|
-
this.logger.
|
|
202
|
+
this.logger.debug(`[${this.instanceId}] Client disconnecting`);
|
|
203
203
|
client.removeAllListeners('stdin');
|
|
204
204
|
client.removeAllListeners('resize');
|
|
205
205
|
client.removeAllListeners('end');
|
|
206
206
|
client.removeAllListeners('disconnect');
|
|
207
207
|
if (TerminalService_1.connectedClients.has(client)) {
|
|
208
208
|
TerminalService_1.connectedClients.delete(client);
|
|
209
|
-
this.logger.
|
|
209
|
+
this.logger.debug(`[${this.instanceId}] Removed client from connected clients`);
|
|
210
210
|
}
|
|
211
|
-
this.logger.
|
|
211
|
+
this.logger.debug(`[${this.instanceId}] Client cleanup complete`);
|
|
212
212
|
};
|
|
213
213
|
client.on('end', onEnd);
|
|
214
214
|
client.on('disconnect', onEnd);
|
|
215
215
|
}
|
|
216
216
|
hasPersistentSession() {
|
|
217
217
|
const hasPersistent = TerminalService_1.persistentTerminal !== null;
|
|
218
|
-
this.logger.
|
|
218
|
+
this.logger.debug(`[${this.instanceId}] hasPersistentSession: ${hasPersistent}`);
|
|
219
219
|
return hasPersistent;
|
|
220
220
|
}
|
|
221
221
|
destroyPersistentSession() {
|
|
222
|
-
this.logger.
|
|
222
|
+
this.logger.debug(`[${this.instanceId}] Destroying persistent terminal session`);
|
|
223
223
|
if (TerminalService_1.persistentTerminal) {
|
|
224
224
|
try {
|
|
225
|
-
this.logger.
|
|
225
|
+
this.logger.debug(`[${this.instanceId}] Killing persistent terminal process`);
|
|
226
226
|
TerminalService_1.persistentTerminal.kill();
|
|
227
227
|
}
|
|
228
228
|
catch (e) {
|
|
229
|
-
this.logger.
|
|
229
|
+
this.logger.error(`[${this.instanceId}] Error killing persistent terminal: ${e}`);
|
|
230
230
|
}
|
|
231
231
|
TerminalService_1.persistentTerminal = null;
|
|
232
232
|
}
|
|
233
233
|
TerminalService_1.terminalBuffer = '';
|
|
234
234
|
TerminalService_1.dataListenerAttached = false;
|
|
235
235
|
TerminalService_1.connectedClients.clear();
|
|
236
|
-
this.logger.
|
|
236
|
+
this.logger.debug(`[${this.instanceId}] Persistent terminal session destroyed`);
|
|
237
237
|
}
|
|
238
238
|
};
|
|
239
239
|
exports.TerminalService = TerminalService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.service.js","sourceRoot":"","sources":["../../../../src/modules/platform-tools/terminal/terminal.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,sDAAwB;AACxB,gEAAkC;AAElC,2CAA2C;AAC3C,uCAAqC;AAErC,wEAAmE;AACnE,wEAA4D;AAC5D,8EAAwE;AAQjE,IAAM,eAAe,uBAArB,MAAM,eAAe;IAQ1B,YACU,aAA4B,EAC5B,MAAc,EACd,cAA8B;QAF9B,kBAAa,GAAb,aAAa,CAAe;QAC5B,WAAM,GAAN,MAAM,CAAQ;QACd,mBAAc,GAAd,cAAc,CAAgB;QAVhC,WAAM,GAAG,KAAK,CAAA;QAYpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAC7D,IAAI,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"terminal.service.js","sourceRoot":"","sources":["../../../../src/modules/platform-tools/terminal/terminal.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -158,7 +158,7 @@ let ServerService = class ServerService {
|
|
|
158
158
|
async getDevicePairings() {
|
|
159
159
|
const persistPath = (0, node_path_1.join)(this.configService.storagePath, 'persist');
|
|
160
160
|
const devices = (await (0, fs_extra_1.readdir)(persistPath))
|
|
161
|
-
.filter(x => x.match(/AccessoryInfo\.([A-
|
|
161
|
+
.filter(x => x.match(/AccessoryInfo\.([A-Fa-f0-9]+)\.json$/));
|
|
162
162
|
const configFile = await this.configEditorService.getConfigFile();
|
|
163
163
|
return Promise.all(devices.map(async (x) => {
|
|
164
164
|
return await this.getDevicePairingById(x.split('.')[1], configFile);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-config-ui-x",
|
|
3
3
|
"displayName": "Homebridge UI",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.4.0",
|
|
5
5
|
"description": "A web based management, configuration and control platform for Homebridge.",
|
|
6
6
|
"author": "oznu <dev@oz.nu>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
"@fastify/multipart": "9.0.3",
|
|
83
83
|
"@fastify/static": "8.2.0",
|
|
84
84
|
"@homebridge/hap-client": "3.1.1",
|
|
85
|
-
"@homebridge/node-pty-prebuilt-multiarch": "0.
|
|
85
|
+
"@homebridge/node-pty-prebuilt-multiarch": "0.13.1",
|
|
86
86
|
"@nestjs/axios": "4.0.1",
|
|
87
87
|
"@nestjs/common": "11.1.5",
|
|
88
88
|
"@nestjs/core": "11.1.5",
|
|
@@ -119,7 +119,7 @@
|
|
|
119
119
|
"unzipper": "0.12.3"
|
|
120
120
|
},
|
|
121
121
|
"devDependencies": {
|
|
122
|
-
"@antfu/eslint-config": "^5.
|
|
122
|
+
"@antfu/eslint-config": "^5.1.0",
|
|
123
123
|
"@nestjs/testing": "^11.1.5",
|
|
124
124
|
"@prettier/plugin-xml": "^3.4.2",
|
|
125
125
|
"@types/fs-extra": "^11.0.4",
|
|
@@ -140,7 +140,7 @@
|
|
|
140
140
|
"ts-loader": "^9.5.2",
|
|
141
141
|
"ts-node": "^10.9.2",
|
|
142
142
|
"tsconfig-paths": "^4.2.0",
|
|
143
|
-
"typescript": "^5.
|
|
143
|
+
"typescript": "^5.9.2",
|
|
144
144
|
"unplugin-swc": "^1.5.5",
|
|
145
145
|
"vitest": "^3.2.4"
|
|
146
146
|
},
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2016 - present Microsoft Corporation
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Monaco Editor
|
|
2
|
+
|
|
3
|
+
[](https://dev.azure.com/ms/monaco-editor/_build/latest?definitionId=3)
|
|
4
|
+
|
|
5
|
+
The Monaco Editor is the code editor which powers [VS Code](https://github.com/Microsoft/vscode), with the features better described [here](https://code.visualstudio.com/docs/editor/editingevolved).
|
|
6
|
+
|
|
7
|
+
Please note that this repository contains no source code for the code editor, it only contains the scripts to package everything together and ship the `monaco-editor` npm module.
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
## Try it out
|
|
12
|
+
|
|
13
|
+
Try the editor out [on our website](https://microsoft.github.io/monaco-editor/index.html).
|
|
14
|
+
|
|
15
|
+
## Installing
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
$ npm install monaco-editor
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
You will get:
|
|
22
|
+
* inside `esm`: ESM version of the editor (compatible with e.g. webpack)
|
|
23
|
+
* inside `dev`: AMD bundled, not minified
|
|
24
|
+
* inside `min`: AMD bundled, and minified
|
|
25
|
+
* inside `min-maps`: source maps for `min`
|
|
26
|
+
* `monaco.d.ts`: this specifies the API of the editor (this is what is actually versioned, everything else is considered private and might break with any release).
|
|
27
|
+
|
|
28
|
+
It is recommended to develop against the `dev` version, and in production to use the `min` version.
|
|
29
|
+
|
|
30
|
+
## Documentation
|
|
31
|
+
|
|
32
|
+
* Learn how to integrate the editor with these [complete samples](https://github.com/Microsoft/monaco-editor-samples/).
|
|
33
|
+
* [Integrate the AMD version](./docs/integrate-amd.md).
|
|
34
|
+
* [Integrate the AMD version cross-domain](./docs/integrate-amd-cross.md)
|
|
35
|
+
* [Integrate the ESM version](./docs/integrate-esm.md)
|
|
36
|
+
* Learn how to use the editor API and try out your own customizations in the [playground](https://microsoft.github.io/monaco-editor/playground.html).
|
|
37
|
+
* Explore the [API docs](https://microsoft.github.io/monaco-editor/api/index.html) or read them straight from [`monaco.d.ts`](https://github.com/Microsoft/monaco-editor/blob/master/website/playground/monaco.d.ts.txt).
|
|
38
|
+
* Read [this guide](https://github.com/Microsoft/monaco-editor/wiki/Accessibility-Guide-for-Integrators) to ensure the editor is accessible to all your users!
|
|
39
|
+
* Create a Monarch tokenizer for a new programming language [in the Monarch playground](https://microsoft.github.io/monaco-editor/monarch.html).
|
|
40
|
+
* Ask questions on [StackOverflow](https://stackoverflow.com/questions/tagged/monaco-editor)! Search open and closed issues, there are a lot of tips in there!
|
|
41
|
+
|
|
42
|
+
## Issues
|
|
43
|
+
|
|
44
|
+
Create [issues](https://github.com/Microsoft/monaco-editor/issues) in this repository for anything related to the Monaco Editor. Always mention **the version** of the editor when creating issues and **the browser** you're having trouble in. Please search for existing issues to avoid duplicates.
|
|
45
|
+
|
|
46
|
+
## FAQ
|
|
47
|
+
|
|
48
|
+
❓ **What is the relationship between VS Code and the Monaco Editor?**
|
|
49
|
+
|
|
50
|
+
The Monaco Editor is generated straight from VS Code's sources with some shims around services the code needs to make it run in a web browser outside of its home.
|
|
51
|
+
|
|
52
|
+
❓ **What is the relationship between VS Code's version and the Monaco Editor's version?**
|
|
53
|
+
|
|
54
|
+
None. The Monaco Editor is a library and it reflects directly the source code.
|
|
55
|
+
|
|
56
|
+
❓ **I've written an extension for VS Code, will it work on the Monaco Editor in a browser?**
|
|
57
|
+
|
|
58
|
+
No.
|
|
59
|
+
|
|
60
|
+
> Note: If the extension is fully based on the [LSP](https://microsoft.github.io/language-server-protocol/) and if the language server is authored in JavaScript, then it would be possible.
|
|
61
|
+
|
|
62
|
+
❓ **Why all these web workers and why should I care?**
|
|
63
|
+
|
|
64
|
+
Language services create web workers to compute heavy stuff outside of the UI thread. They cost hardly anything in terms of resource overhead and you shouldn't worry too much about them, as long as you get them to work (see above the cross-domain case).
|
|
65
|
+
|
|
66
|
+
❓ **What is this `loader.js`? Can I use `require.js`?**
|
|
67
|
+
|
|
68
|
+
It is an AMD loader that we use in VS Code. Yes.
|
|
69
|
+
|
|
70
|
+
❓ **I see the warning "Could not create web worker". What should I do?**
|
|
71
|
+
|
|
72
|
+
HTML5 does not allow pages loaded on `file://` to create web workers. Please load the editor with a web server on `http://` or `https://` schemes. Please also see the cross-domain case above.
|
|
73
|
+
|
|
74
|
+
❓ **Is the editor supported in mobile browsers or mobile web app frameworks?**
|
|
75
|
+
|
|
76
|
+
No.
|
|
77
|
+
|
|
78
|
+
❓ **Why doesn't the editor support TextMate grammars?**
|
|
79
|
+
|
|
80
|
+
* Please see https://github.com/bolinfest/monaco-tm which puts together `monaco-editor`, `vscode-oniguruma` and `vscode-textmate` to get TM grammar support in the editor.
|
|
81
|
+
|
|
82
|
+
❓ **What about IE 11 support?**
|
|
83
|
+
|
|
84
|
+
* The Monaco Editor no longer supports IE 11. The last version that was tested on IE 11 is `0.18.1`.
|
|
85
|
+
|
|
86
|
+
## Development setup
|
|
87
|
+
|
|
88
|
+
Please see [CONTRIBUTING](./CONTRIBUTING.md)
|
|
89
|
+
|
|
90
|
+
## Code of Conduct
|
|
91
|
+
|
|
92
|
+
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
## License
|
|
96
|
+
Licensed under the [MIT](https://github.com/Microsoft/monaco-editor/blob/master/LICENSE.md) License.
|