homebridge-config-ui-x 5.12.1-beta.7 → 5.12.1-beta.9
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/package.json +8 -3
- package/public/{chunk-KAPGBFLJ.js → chunk-2WY7OHS3.js} +1 -1
- package/public/{chunk-S5H22WRF.js → chunk-5VQ42S62.js} +1 -1
- package/public/{chunk-JTQQTKY7.js → chunk-ABEGZR4S.js} +1 -1
- package/public/{chunk-KLWYBXMO.js → chunk-B5VZPCMG.js} +1 -1
- package/public/{chunk-4J3J7FSY.js → chunk-BG5R3K3W.js} +1 -1
- package/public/{chunk-JNPGEJ3W.js → chunk-C3OHEJYI.js} +1 -1
- package/public/{chunk-7LOFSGZK.js → chunk-DFIU7YL4.js} +1 -1
- package/public/{chunk-PQPDMNKK.js → chunk-DLFCGYGB.js} +1 -1
- package/public/{chunk-F332UHUK.js → chunk-DZHTCVQ3.js} +1 -1
- package/public/chunk-E773VJLI.js +1 -0
- package/public/chunk-END6WICU.js +1 -0
- package/public/chunk-EOQA6LYA.js +1 -0
- package/public/{chunk-5VXOT5GC.js → chunk-ESCWTBUZ.js} +1 -1
- package/public/{chunk-UCTE5J3F.js → chunk-EYMA3MVV.js} +1 -1
- package/public/{chunk-VY4NTNG3.js → chunk-GEK4M54S.js} +1 -1
- package/public/{chunk-GFJO2QTW.js → chunk-GZD66OFT.js} +1 -1
- package/public/chunk-IB247UL5.js +4 -0
- package/public/{chunk-YIHVWXAX.js → chunk-ICKLYQ7C.js} +2 -2
- package/public/{chunk-PSSWIPLS.js → chunk-IMI2RZ46.js} +1 -1
- package/public/{chunk-K73S26T3.js → chunk-IZWQYACB.js} +1 -1
- package/public/{chunk-2QUH2FXS.js → chunk-JJGNR7WT.js} +1 -1
- package/public/{chunk-7AD56BSX.js → chunk-JMPDHTJK.js} +1 -1
- package/public/{chunk-EKYMLGZU.js → chunk-JP5PZ43M.js} +1 -1
- package/public/{chunk-IXSMCZ5A.js → chunk-JRGRN6QD.js} +1 -1
- package/public/{chunk-KDNXPUO5.js → chunk-LABZFZLD.js} +1 -1
- package/public/{chunk-ZH3VNDIS.js → chunk-MBLEJVQV.js} +1 -1
- package/public/chunk-MGXPEQE7.js +19 -0
- package/public/{chunk-SCW535TW.js → chunk-NT7IQCMH.js} +1 -1
- package/public/{chunk-WZXTVC6W.js → chunk-OMEQ6FGM.js} +1 -1
- package/public/{chunk-G5C66QEU.js → chunk-OX22563K.js} +1 -1
- package/public/{chunk-MTYIEY2M.js → chunk-PE2GX5FN.js} +1 -1
- package/public/{chunk-RGRPV7TK.js → chunk-PIUE42YY.js} +1 -1
- package/public/{chunk-6P53ACWC.js → chunk-PJYTYQ2O.js} +1 -1
- package/public/{chunk-VFZPU4ZL.js → chunk-QTJHXXNA.js} +1 -1
- package/public/{chunk-ARR3OK4P.js → chunk-R6GUMZUN.js} +1 -1
- package/public/{chunk-BADNEAHD.js → chunk-SHCRZWO6.js} +1 -1
- package/public/{chunk-YQXFTYEI.js → chunk-SNF4UEIW.js} +6 -6
- package/public/{chunk-S3E6JDMS.js → chunk-SSWIXX3X.js} +1 -1
- package/public/{chunk-3WNDNRRB.js → chunk-U42INEHF.js} +1 -1
- package/public/{chunk-55DZYJHI.js → chunk-UWIOFP4B.js} +1 -1
- package/public/{chunk-ZMEMMUUF.js → chunk-UZZUODGJ.js} +1 -1
- package/public/index.html +1 -1
- package/public/{main-XUQ5G5JD.js → main-KLJYWDOJ.js} +1 -1
- package/public/chunk-3VAD7GQK.js +0 -1
- package/public/chunk-C5UZ5BUH.js +0 -1
- package/public/chunk-D3QQAOPW.js +0 -1
- package/public/chunk-HOHCTPYN.js +0 -4
- package/public/chunk-HZA5LDUU.js +0 -19
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "homebridge-config-ui-x",
|
|
3
3
|
"displayName": "Homebridge UI",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "5.12.1-beta.
|
|
5
|
+
"version": "5.12.1-beta.9",
|
|
6
6
|
"description": "A web based management, configuration and control platform for Homebridge.",
|
|
7
7
|
"author": "oznu <dev@oz.nu>",
|
|
8
8
|
"license": "MIT",
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
"dependencies": {
|
|
82
82
|
"@fastify/helmet": "13.0.2",
|
|
83
83
|
"@fastify/multipart": "9.3.0",
|
|
84
|
-
"@fastify/static": "
|
|
84
|
+
"@fastify/static": "9.0.0",
|
|
85
85
|
"@homebridge/hap-client": "3.1.2",
|
|
86
86
|
"@homebridge/node-pty-prebuilt-multiarch": "0.13.1",
|
|
87
87
|
"@nestjs/axios": "4.0.1",
|
|
@@ -115,12 +115,16 @@
|
|
|
115
115
|
"reflect-metadata": "0.2.2",
|
|
116
116
|
"rxjs": "7.8.2",
|
|
117
117
|
"semver": "7.7.3",
|
|
118
|
-
"systeminformation": "5.
|
|
118
|
+
"systeminformation": "5.28.0",
|
|
119
119
|
"tail": "2.2.6",
|
|
120
120
|
"tar": "7.5.2",
|
|
121
121
|
"tcp-port-used": "1.0.2",
|
|
122
122
|
"unzipper": "0.12.3"
|
|
123
123
|
},
|
|
124
|
+
"optionalDependencies": {
|
|
125
|
+
"macos-temperature-sensor": "1.0.4",
|
|
126
|
+
"osx-temperature-sensor": "1.0.8"
|
|
127
|
+
},
|
|
124
128
|
"devDependencies": {
|
|
125
129
|
"@antfu/eslint-config": "^6.7.3",
|
|
126
130
|
"@nestjs/testing": "^11.1.10",
|
|
@@ -147,6 +151,7 @@
|
|
|
147
151
|
"vitest": "^4.0.16"
|
|
148
152
|
},
|
|
149
153
|
"overrides": {
|
|
154
|
+
"@fastify/static": "9.0.0",
|
|
150
155
|
"@homebridge/hap-client": {
|
|
151
156
|
"axios": "1.13.2"
|
|
152
157
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as vt,b as $t,c as Ht,d as St}from"./chunk-GFJO2QTW.js";import{a as Ct}from"./chunk-UUDM2ZE6.js";import{a as Ot}from"./chunk-V62JRIHN.js";import{u as U,x as wt}from"./chunk-HOWYXHPL.js";import{a as Et}from"./chunk-V6SS3LLE.js";import{b as B}from"./chunk-ZCGZM7LU.js";import{a as kt,b as xt}from"./chunk-PQPDMNKK.js";import{a as q}from"./chunk-SGI3H2QJ.js";import{s as _t,t as yt}from"./chunk-BNNKKGLH.js";import{c as pt,e as I}from"./chunk-F332UHUK.js";import{C as ut,D as bt,c as mt,e as ft,l as ht}from"./chunk-WZXTVC6W.js";import{b as gt}from"./chunk-2QUH2FXS.js";import{C as O,D as H,F as N,I as F,h as ct}from"./chunk-7AD56BSX.js";import{Ab as S,Cb as rt,Db as at,Dc as r,Eb as lt,Ec as l,Fb as _,Fc as X,Gb as a,Hb as d,Ib as m,Rb as E,Xb as y,Za as o,Zb as p,aa as g,ea as st,ga as u,ha as b,hb as ot,ic as dt,jc as Y,kc as C,lc as M,mb as G,mc as V,n as nt,nb as R,sa as k,yb as $,yc as Q,zb as x}from"./chunk-JJ5CEM72.js";import{a as j,b as K,d as et,g as it,h as w}from"./chunk-VJN6YUS2.js";var Dt=it(Ht(),1);var Mt=it(Ot(),1);var Tt=(s,v)=>({"fa-trash":s,"fa-circle-notch fa-spin":v});function Ft(s,v){s&1&&(a(0,"div",13),m(1,"i",20),d())}function Ut(s,v){if(s&1){let t=E();a(0,"li",9)(1,"span"),C(2),r(3,"date"),m(4,"br"),a(5,"span",21),C(6),r(7,"date"),d()(),a(8,"span",22)(9,"button",25),r(10,"translate"),r(11,"translate"),y("click",function(){let i=u(t).$implicit,n=p(2);return b(n.restore(i.id))}),m(12,"i",26),d(),a(13,"button",27),r(14,"translate"),r(15,"translate"),y("click",function(){let i=u(t).$implicit,n=p(2);return b(n.download(i.id))}),m(16,"i",28),d(),a(17,"button",23),r(18,"translate"),r(19,"translate"),y("click",function(){let i=u(t).$implicit,n=p(2);return b(n.delete(i.id))}),m(20,"i",24),d()()()}if(s&2){let t=v.$implicit,e=p(2);o(2),V(" ",X(3,16,t.timestamp,"mediumDate")),o(4),M(X(7,19,t.timestamp,"shortTime")),o(3),_("disabled",e.clicked()||e.deleting())("ngbTooltip",l(10,22,"config.restore.copy_to_editor"))("openDelay",150),$("aria-label",l(11,24,"config.restore.copy_to_editor")),o(4),_("disabled",e.clicked()||e.deleting())("ngbTooltip",l(14,26,"form.button_download"))("openDelay",150),$("aria-label",l(15,28,"form.button_download")),o(4),_("disabled",e.clicked()||e.deleting())("ngbTooltip",l(18,30,"form.button_delete"))("openDelay",150),$("aria-label",l(19,32,"form.button_delete")),o(3),Y(Q(34,Tt,t.id!==e.deleting(),t.id===e.deleting()))}}function qt(s,v){if(s&1){let t=E();a(0,"ul",14),at(1,Ut,21,37,"li",9,rt),a(3,"li",9)(4,"span"),C(5),r(6,"translate"),m(7,"br"),a(8,"span",21),C(9),r(10,"translate"),d()(),a(11,"span",22)(12,"button",23),r(13,"translate"),r(14,"translate"),y("click",function(){u(t);let i=p();return b(i.deleteAllBackups())}),m(15,"i",24),d()()()()}if(s&2){let t=p();o(),lt(t.backupList()),o(4),V(" ",l(6,8,"form.button_delete_all")),o(4),M(l(10,10,"common.labels.no_confirmation")),o(3),_("disabled",t.clicked()||t.deleting())("ngbTooltip",l(13,12,"form.button_delete_all"))("openDelay",150),$("aria-label",l(14,14,"form.button_delete")),o(3),Y(Q(16,Tt,t.deleting()!=="all",t.deleting()==="all"))}}var Bt=(()=>{class s{$activeModal=g(_t);$api=g(F);$router=g(I);$toastr=g(N);$translate=g(O);modalData=g(U);currentConfig=this.modalData.currentConfig;fromSettings=this.modalData.fromSettings??!1;loading=k(!0);backupList=k([]);clicked=k(!1);deleting=k(null);ngOnInit(){this.getConfigBackups()}getConfigBackups(){return w(this,null,function*(){try{let t=yield this.$api.get("/config-editor/backups");this.loading.set(!1),this.backupList.set(t)}catch(t){this.loading.set(!1),console.error(t),this.$toastr.error(t.error?.message||t.message,this.$translate.instant("toast.title_error")),this.dismissModal()}})}restore(t){return this.$activeModal.close(t)}download(t){return w(this,null,function*(){this.clicked.set(!0);try{let e=yield this.$api.get(`/config-editor/backups/${t}`),i=JSON.stringify(e,null,4),n=new Blob([i],{type:"application/json"}),f=`config-backup-${t}.json`;(0,Mt.saveAs)(n,f),this.clicked.set(!1)}catch(e){this.clicked.set(!1),this.$toastr.error(e.error?.message||e.message,this.$translate.instant("toast.title_error")),console.error(e)}})}downloadCurrentConfig(){let t=`data:text/json;charset=utf-8,${encodeURIComponent(this.currentConfig)}`,e=document.createElement("a");e.setAttribute("href",t),e.setAttribute("download","config.json"),document.body.appendChild(e),e.click(),e.remove()}delete(t){return w(this,null,function*(){this.deleting.set(t);try{yield this.$api.delete(`/config-editor/backups/${t}`),yield this.getConfigBackups(),this.deleting.set(null)}catch(e){this.deleting.set(null),this.$toastr.error(e.error?.message||e.message,this.$translate.instant("toast.title_error")),console.error(e)}})}deleteAllBackups(){return w(this,null,function*(){this.deleting.set("all");try{yield this.$api.delete("/config-editor/backups"),this.$toastr.success(this.$translate.instant("config.restore.toast_backups_deleted"),this.$translate.instant("toast.title_success")),this.backupList.set([]),this.deleting.set(null)}catch(t){this.$toastr.error(t.error?.message||t.message,this.$translate.instant("toast.title_error")),console.error(t),this.deleting.set(null)}})}dismissModal(){this.fromSettings&&this.$router.navigate(["/settings"]),this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=R({type:s,selectors:[["ng-component"]],decls:40,vars:31,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body"],[1,"text-center","mb-3"],[1,"fas","fa-history","primary-text",2,"font-size","75px"],[1,"mb-3"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"grey-text"],[1,"btn","btn-primary","m-0","ms-3","py-1",3,"click","disabled"],[1,"fas","fa-arrow-right"],[1,"text-center","primary-text"],[1,"list-group","list-group-box","mt-3"],[1,"modal-footer","justify-content-between"],[1,"text-start"],[1,"text-center"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-end"],[1,"fa","fa-circle-notch","fa-spin","mt-3",2,"font-size","75px"],[1,"grey-text","small"],[2,"display","flex","flex-wrap","nowrap"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-danger","m-0","ms-2",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-primary","m-0","ms-3","py-1",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas","fa-history"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-primary","m-0","ms-2",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas","fa-download"]],template:function(e,i){e&1&&(a(0,"div",0)(1,"div",1)(2,"h5",2),C(3),r(4,"translate"),d(),a(5,"button",3),r(6,"translate"),y("click",function(){return i.dismissModal()}),d()(),a(7,"div",4)(8,"div",5),m(9,"i",6),d(),a(10,"ul",7)(11,"li"),C(12),r(13,"translate"),d(),a(14,"li"),C(15),r(16,"translate"),d()(),a(17,"ul",8)(18,"li",9)(19,"div")(20,"span"),C(21),r(22,"translate"),d(),m(23,"br"),a(24,"small",10),C(25),r(26,"translate"),d()(),a(27,"button",11),r(28,"translate"),y("click",function(){return i.downloadCurrentConfig()}),m(29,"i",12),d()()(),x(30,Ft,2,0,"div",13)(31,qt,16,19,"ul",14),d(),a(32,"div",15),m(33,"div",16),a(34,"div",17)(35,"button",18),r(36,"translate"),y("click",function(){return i.dismissModal()}),C(37),r(38,"translate"),d()(),m(39,"div",19),d()()),e&2&&(o(3),M(l(4,13,"config.restore.title")),o(2),_("disabled",i.clicked()||i.deleting()),$("aria-label",l(6,15,"form.button_close")),o(7),M(l(13,17,"config.restore.help_1")),o(3),M(l(16,19,"config.restore.help_2")),o(6),M(l(22,21,"form.button_download")),o(4),M(l(26,23,"config.restore.download")),o(2),_("disabled",i.clicked()||i.deleting()),$("aria-label",l(28,25,"backup.backup_now")),o(3),S(i.loading()?30:i.backupList().length?31:-1),o(5),_("disabled",i.clicked()||i.deleting()),$("aria-label",l(36,27,"form.button_close")),o(2),V(" ",l(38,29,"form.button_close")," "))},dependencies:[q,bt,ct,H],encapsulation:2})}return s})();function zt(s,v){if(s&1){let t=E();a(0,"button",13),r(1,"translate"),r(2,"translate"),y("click",function(){u(t);let i=p();return b(i.onCancelRestore())}),m(3,"i",14),d()}if(s&2){let t=p();_("disabled",t.saveInProgress())("openDelay",150)("ngbTooltip",l(1,4,"form.button_cancel")),$("aria-label",l(2,6,"form.button_cancel"))}}function Lt(s,v){if(s&1){let t=E();a(0,"button",15),r(1,"translate"),r(2,"translate"),y("click",function(){u(t);let i=p();return b(i.onRestore())}),m(3,"i",16),d()}s&2&&(_("openDelay",150)("ngbTooltip",l(1,3,"form.button_restore")),$("aria-label",l(2,5,"form.button_restore")))}function Jt(s,v){if(s&1){let t=E();a(0,"button",15),r(1,"translate"),r(2,"translate"),y("click",function(){u(t);let i=p();return b(i.toggleSideBySide())}),m(3,"i",17),d()}if(s&2){let t=p();_("openDelay",150)("ngbTooltip",l(1,7,t.renderSideBySide()?"config.restore.view_inline":"config.restore.view_side_by_side")),$("aria-label",l(2,9,t.renderSideBySide()?"config.restore.view_inline":"config.restore.view_side_by_side")),o(3),dt("fa-columns",!t.renderSideBySide())("fa-bars",t.renderSideBySide())}}function Wt(s,v){s&1&&m(0,"i",8)}function Kt(s,v){s&1&&m(0,"i",9)}function Gt(s,v){if(s&1){let t=E();a(0,"ngx-monaco-editor",18),y("onInit",function(i){u(t);let n=p();return b(n.onEditorInit(i))})("keydown.control.s",function(i){u(t);let n=p();return i.preventDefault(),b(n.onSave())})("keydown.meta.s",function(i){u(t);let n=p();return i.preventDefault(),b(n.onSave())}),d()}if(s&2){let t=p();_("options",t.editorOptions)("model",t.monacoEditorModel)}}function Yt(s,v){if(s&1){let t=E();a(0,"ngx-monaco-diff-editor",19),y("onInit",function(i){u(t);let n=p();return b(n.onInitDiffEditor(i))})("keydown.control.s",function(i){u(t);let n=p();return i.preventDefault(),b(n.onSave())})("keydown.meta.s",function(i){u(t);let n=p();return i.preventDefault(),b(n.onSave())}),d()}if(s&2){let t=p();_("options",t.editorOptions)("originalModel",t.diffOriginalModel)("modifiedModel",t.diffModifiedModel)}}function Qt(s,v){if(s&1){let t=E();a(0,"textarea",20),y("ngModelChange",function(i){u(t);let n=p();return b(n.homebridgeConfig.set(i))}),C(1," "),d()}if(s&2){let t=p();_("ngModel",t.homebridgeConfig())}}var Pe=(()=>{class s{injector=g(st);$api=g(F);$md=g(Ct);$modal=g(yt);$monacoEditor=g(Et);$renderer=g(ot);$route=g(pt);$router=g(I);$settings=g(gt);$toastr=g(N);$translate=g(O);editorDecorations=[];lastHeight;visualViewPortEventCallback;latestSavedConfig;childBridgesToRestart=[];hbPendingRestart=!1;isDebugModeEnabled=this.$settings.isFeatureEnabled("childBridgeDebugMode");isMatterSupported=this.$settings.isFeatureEnabled("matterSupport");homebridgeConfig=k("");originalConfig=k("");saveInProgress=k(!1);isMobile=k(!1);monacoEditor;editorOptions;monacoEditorModel;diffOriginalModel;diffModifiedModel;renderSideBySide=k(!1);constructor(){this.isMobile.set(!!this.$md.detect.mobile())}ngOnInit(){let t=this.$translate.instant("menu.config_json_editor");this.$settings.setPageTitle(t),this.editorOptions={language:"json",theme:this.$settings.actualLightingMode==="dark"?"vs-dark":"vs-light",renderSideBySide:this.renderSideBySide(),renderIndicators:!0,ignoreTrimWhitespace:!1,glyphMargin:!0};let e=document.querySelector(".content");this.$renderer.setStyle(e,"height","100%"),this.visualViewPortEventCallback=()=>this.visualViewPortChanged(),this.lastHeight=window.innerHeight,window.visualViewport&&!this.isMobile()&&(window.visualViewport.addEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.disableTouchMove()),this.visualViewPortEventCallback=()=>this.visualViewPortChanged(),this.lastHeight=window.innerHeight,window.visualViewport&&!this.isMobile()&&(window.visualViewport.addEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.disableTouchMove()),this.$route.data.subscribe(n=>{this.homebridgeConfig.set(n.config),this.latestSavedConfig=JSON.parse(n.config),this.diffModifiedModel&&this.updateDiffModels()}),this.monacoEditorModel={value:"{}",language:"json",uri:window.monaco?window.monaco.Uri.parse("a://homebridge/config.json"):void 0},this.diffOriginalModel={code:"",language:"json"},this.diffModifiedModel={code:this.homebridgeConfig()||"{}",language:"json"},window.monaco?this.setMonacoEditorModel():this.waitForMonaco();let{action:i}=this.$router.parseUrl(this.$router.url).queryParams;if(i){switch(i){case"restore":{this.onRestore(!0);break}}this.$router.navigate([],{queryParams:{},replaceUrl:!0,queryParamsHandling:""})}}waitForMonaco(){return w(this,null,function*(){try{yield nt(this.$monacoEditor.readyEvent),this.setMonacoEditorModel()}catch(t){console.error("Failed to wait for monaco ready event:",t)}})}onEditorInit(t){window.editor=t,this.monacoEditor=t;let e=this.monacoEditor.getModel();e&&e.setValue(this.homebridgeConfig())}onInitDiffEditor(t){this.monacoEditor=t.getModifiedEditor(),this.updateDiffModels(),window.editor=t}updateDiffModels(){if(this.diffOriginalModel&&(this.diffOriginalModel.code=this.originalConfig()||""),this.diffModifiedModel&&(this.diffModifiedModel.code=this.homebridgeConfig()||"{}"),window.editor&&window.editor.getOriginalEditor){let t=window.editor.getOriginalEditor(),e=window.editor.getModifiedEditor();if(t&&e){let i=t.getModel(),n=e.getModel();i&&i.setValue(this.originalConfig()||""),n&&n.setValue(this.homebridgeConfig()||"{}")}}}onSave(){return w(this,null,function*(){if(!this.saveInProgress()){this.monacoEditor&&(this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[])),this.saveInProgress.set(!0);try{if(!this.isMobile()){yield this.monacoEditor.getAction("editor.action.formatDocument").run();let e=window.monaco.editor.getModelMarkers({owner:"json"});for(let i of e)if(i.message==="Duplicate object key"){this.saveInProgress.set(!1),this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error"));return}this.homebridgeConfig.set(this.monacoEditor.getModel().getValue())}let t=this.parseConfigFromEditor();this.homebridgeConfig.set(JSON.stringify(t,null,4)),typeof t.bridge!="object"?this.$toastr.error(this.$translate.instant("config.config_bridge_missing"),this.$translate.instant("toast.title_error")):/^(?:[0-9A-F]{2}:){5}[0-9A-F]{2}$/i.test(t.bridge.username)?t.accessories&&!Array.isArray(t.accessories)?this.$toastr.error(this.$translate.instant("config.config_accessory_must_be_array"),this.$translate.instant("toast.title_error")):t.platforms&&!Array.isArray(t.platforms)?this.$toastr.error(this.$translate.instant("config.config_platform_must_be_array"),this.$translate.instant("toast.title_error")):t.platforms&&Array.isArray(t.platforms)&&!this.validateSection(t.platforms,"platform")||t.accessories&&Array.isArray(t.accessories)&&!this.validateSection(t.accessories,"accessory")||t.plugins&&Array.isArray(t.plugins)&&!this.validatePlugins(t.plugins,"plugins")||t.disabledPlugins&&Array.isArray(t.disabledPlugins)&&!this.validatePlugins(t.disabledPlugins,"disabledPlugins")||(yield this.saveConfig(t),this.originalConfig.set("")):this.$toastr.error(this.$translate.instant("config.config_username_error"),this.$translate.instant("toast.title_error"))}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error"))}this.saveInProgress.set(!1)}})}onRestore(t=!1){return w(this,null,function*(){let e=G([{provide:U,useValue:{currentConfig:this.homebridgeConfig(),fromSettings:t}}],this.injector),i=this.$modal.open(Bt,{size:"lg",backdrop:"static",injector:e});try{let n=yield i.result;try{this.originalConfig()||(this.originalConfig.set(this.homebridgeConfig()),this.updateDiffModels());let f=yield this.$api.get(`/config-editor/backups/${n}`);this.$toastr.info(this.$translate.instant("config.restore.confirm"),this.$translate.instant("config.title_backup_loaded")),this.homebridgeConfig.set(JSON.stringify(f,null,4)),this.updateDiffModels(),this.monacoEditor&&window.editor.modifiedEditor&&(this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[]),this.monacoEditor.executeEdits("beautifier",[{identifier:"delete",range:new monaco.Range(1,1,this.monacoEditor.getModel().getLineCount()+10,1),text:"",forceMoveMarkers:!0}]),this.monacoEditor.executeEdits("beautifier",[{identifier:"insert",range:new monaco.Range(1,1,1,1),text:this.homebridgeConfig(),forceMoveMarkers:!0}]))}catch(f){console.error(f);let h=f?.error?.message||this.$translate.instant("backup.load_error");this.$toastr.error(h,this.$translate.instant("toast.title_error"))}}catch{}})}onCancelRestore(){if(window.editor&&window.editor.dispose)try{window.editor.dispose(),window.editor=void 0}catch{}this.homebridgeConfig.set(this.originalConfig()),this.originalConfig.set(""),this.renderSideBySide()&&this.toggleSideBySide(),this.updateDiffModels(),this.onRestore()}toggleSideBySide(){this.renderSideBySide.set(!this.renderSideBySide()),this.editorOptions=K(j({},this.editorOptions),{renderSideBySide:this.renderSideBySide()})}ngOnDestroy(){let t=document.querySelector(".content");this.$renderer.removeStyle(t,"height"),window.visualViewport&&(window.visualViewport.removeEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.enableTouchMove());try{if(window.editor&&window.editor.dispose&&(window.editor.dispose(),window.editor=void 0),window.monaco){let e=window.monaco.Uri.parse("file:///original.json"),i=window.monaco.Uri.parse("file:///modified.json"),n=window.monaco.editor.getModel(e);n&&n.dispose();let f=window.monaco.editor.getModel(i);f&&f.dispose();let T=(window.monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas||[]).filter(D=>D.uri!=="http://homebridge/config.json");window.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({validate:!0,allowComments:!1,schemas:T})}this.monacoEditor&&this.monacoEditor.dispose()}catch{}}validateSection(t,e){for(let i of t){if(typeof i!="object"||i===null||Array.isArray(i))return this.$toastr.error(this.$translate.instant("config.error_blocks_objects",{type:e}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(JSON.stringify(i)),!1;if(!(e in i))return this.$toastr.error(this.$translate.instant("config.error_blocks_type",{type:e}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(JSON.stringify(i)),!1;if(typeof i[e]!="string")return this.$toastr.error(this.$translate.instant("config.error_string_type",{type:e}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(JSON.stringify(i)),!1}return!0}validatePlugins(t,e){for(let i of t)if(typeof i!="string")return this.$toastr.error(this.$translate.instant("config.error_string_array",{key:e}),this.$translate.instant("toast.title_error")),!1;return!0}highlightOffendingArrayItem(t){this.monacoEditor&&(t=JSON.stringify(t,null,4).split(`
|
|
1
|
+
import{a as vt,b as $t,c as Ht,d as St}from"./chunk-GZD66OFT.js";import{a as Ct}from"./chunk-UUDM2ZE6.js";import{a as Ot}from"./chunk-V62JRIHN.js";import{u as U,x as wt}from"./chunk-HOWYXHPL.js";import{a as Et}from"./chunk-V6SS3LLE.js";import{b as B}from"./chunk-ZCGZM7LU.js";import{a as kt,b as xt}from"./chunk-DLFCGYGB.js";import{a as q}from"./chunk-SGI3H2QJ.js";import{s as _t,t as yt}from"./chunk-BNNKKGLH.js";import{c as pt,e as I}from"./chunk-DZHTCVQ3.js";import{C as ut,D as bt,c as mt,e as ft,l as ht}from"./chunk-OMEQ6FGM.js";import{b as gt}from"./chunk-JJGNR7WT.js";import{C as O,D as H,F as N,I as F,h as ct}from"./chunk-JMPDHTJK.js";import{Ab as S,Cb as rt,Db as at,Dc as r,Eb as lt,Ec as l,Fb as _,Fc as X,Gb as a,Hb as d,Ib as m,Rb as E,Xb as y,Za as o,Zb as p,aa as g,ea as st,ga as u,ha as b,hb as ot,ic as dt,jc as Y,kc as C,lc as M,mb as G,mc as V,n as nt,nb as R,sa as k,yb as $,zb as x,zc as Q}from"./chunk-JJ5CEM72.js";import{a as j,b as K,d as et,g as it,h as w}from"./chunk-VJN6YUS2.js";var Dt=it(Ht(),1);var Mt=it(Ot(),1);var Tt=(s,v,t)=>({"fa-trash":s,"fa-circle-notch":v,"fa-spin":t});function Ft(s,v){s&1&&(a(0,"div",13),m(1,"i",20),d())}function Ut(s,v){if(s&1){let t=E();a(0,"li",9)(1,"span"),C(2),r(3,"date"),m(4,"br"),a(5,"span",21),C(6),r(7,"date"),d()(),a(8,"span",22)(9,"button",25),r(10,"translate"),r(11,"translate"),y("click",function(){let i=u(t).$implicit,n=p(2);return b(n.restore(i.id))}),m(12,"i",26),d(),a(13,"button",27),r(14,"translate"),r(15,"translate"),y("click",function(){let i=u(t).$implicit,n=p(2);return b(n.download(i.id))}),m(16,"i",28),d(),a(17,"button",23),r(18,"translate"),r(19,"translate"),y("click",function(){let i=u(t).$implicit,n=p(2);return b(n.delete(i.id))}),m(20,"i",24),d()()()}if(s&2){let t=v.$implicit,e=p(2);o(2),V(" ",X(3,16,t.timestamp,"mediumDate")),o(4),M(X(7,19,t.timestamp,"shortTime")),o(3),_("disabled",e.clicked()||e.deleting())("ngbTooltip",l(10,22,"config.restore.copy_to_editor"))("openDelay",150),$("aria-label",l(11,24,"config.restore.copy_to_editor")),o(4),_("disabled",e.clicked()||e.deleting())("ngbTooltip",l(14,26,"form.button_download"))("openDelay",150),$("aria-label",l(15,28,"form.button_download")),o(4),_("disabled",e.clicked()||e.deleting())("ngbTooltip",l(18,30,"form.button_delete"))("openDelay",150),$("aria-label",l(19,32,"form.button_delete")),o(3),Y(Q(34,Tt,t.id!==e.deleting(),t.id===e.deleting(),t.id===e.deleting()))}}function qt(s,v){if(s&1){let t=E();a(0,"ul",14),at(1,Ut,21,38,"li",9,rt),a(3,"li",9)(4,"span"),C(5),r(6,"translate"),m(7,"br"),a(8,"span",21),C(9),r(10,"translate"),d()(),a(11,"span",22)(12,"button",23),r(13,"translate"),r(14,"translate"),y("click",function(){u(t);let i=p();return b(i.deleteAllBackups())}),m(15,"i",24),d()()()()}if(s&2){let t=p();o(),lt(t.backupList()),o(4),V(" ",l(6,8,"form.button_delete_all")),o(4),M(l(10,10,"common.labels.no_confirmation")),o(3),_("disabled",t.clicked()||t.deleting())("ngbTooltip",l(13,12,"form.button_delete_all"))("openDelay",150),$("aria-label",l(14,14,"form.button_delete")),o(3),Y(Q(16,Tt,t.deleting()!=="all",t.deleting()==="all",t.deleting()==="all"))}}var Bt=(()=>{class s{$activeModal=g(_t);$api=g(F);$router=g(I);$toastr=g(N);$translate=g(O);modalData=g(U);currentConfig=this.modalData.currentConfig;fromSettings=this.modalData.fromSettings??!1;loading=k(!0);backupList=k([]);clicked=k(!1);deleting=k(null);ngOnInit(){this.getConfigBackups()}getConfigBackups(){return w(this,null,function*(){try{let t=yield this.$api.get("/config-editor/backups");this.loading.set(!1),this.backupList.set(t)}catch(t){this.loading.set(!1),console.error(t),this.$toastr.error(t.error?.message||t.message,this.$translate.instant("toast.title_error")),this.dismissModal()}})}restore(t){return this.$activeModal.close(t)}download(t){return w(this,null,function*(){this.clicked.set(!0);try{let e=yield this.$api.get(`/config-editor/backups/${t}`),i=JSON.stringify(e,null,4),n=new Blob([i],{type:"application/json"}),f=`config-backup-${t}.json`;(0,Mt.saveAs)(n,f),this.clicked.set(!1)}catch(e){this.clicked.set(!1),this.$toastr.error(e.error?.message||e.message,this.$translate.instant("toast.title_error")),console.error(e)}})}downloadCurrentConfig(){let t=`data:text/json;charset=utf-8,${encodeURIComponent(this.currentConfig)}`,e=document.createElement("a");e.setAttribute("href",t),e.setAttribute("download","config.json"),document.body.appendChild(e),e.click(),e.remove()}delete(t){return w(this,null,function*(){this.deleting.set(t);try{yield this.$api.delete(`/config-editor/backups/${t}`),yield this.getConfigBackups(),this.deleting.set(null)}catch(e){this.deleting.set(null),this.$toastr.error(e.error?.message||e.message,this.$translate.instant("toast.title_error")),console.error(e)}})}deleteAllBackups(){return w(this,null,function*(){this.deleting.set("all");try{yield this.$api.delete("/config-editor/backups"),this.$toastr.success(this.$translate.instant("config.restore.toast_backups_deleted"),this.$translate.instant("toast.title_success")),this.backupList.set([]),this.deleting.set(null)}catch(t){this.$toastr.error(t.error?.message||t.message,this.$translate.instant("toast.title_error")),console.error(t),this.deleting.set(null)}})}dismissModal(){this.fromSettings&&this.$router.navigate(["/settings"]),this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=R({type:s,selectors:[["ng-component"]],decls:40,vars:31,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body"],[1,"text-center","mb-3"],[1,"fas","fa-history","primary-text",2,"font-size","75px"],[1,"mb-3"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"grey-text"],[1,"btn","btn-primary","m-0","ms-3","py-1",3,"click","disabled"],[1,"fas","fa-arrow-right"],[1,"text-center","primary-text"],[1,"list-group","list-group-box","mt-3"],[1,"modal-footer","justify-content-between"],[1,"text-start"],[1,"text-center"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-end"],[1,"fa","fa-circle-notch","fa-spin","mt-3",2,"font-size","75px"],[1,"grey-text","small"],[2,"display","flex","flex-wrap","nowrap"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-danger","m-0","ms-2",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-primary","m-0","ms-3","py-1",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas","fa-history"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-primary","m-0","ms-2",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas","fa-download"]],template:function(e,i){e&1&&(a(0,"div",0)(1,"div",1)(2,"h5",2),C(3),r(4,"translate"),d(),a(5,"button",3),r(6,"translate"),y("click",function(){return i.dismissModal()}),d()(),a(7,"div",4)(8,"div",5),m(9,"i",6),d(),a(10,"ul",7)(11,"li"),C(12),r(13,"translate"),d(),a(14,"li"),C(15),r(16,"translate"),d()(),a(17,"ul",8)(18,"li",9)(19,"div")(20,"span"),C(21),r(22,"translate"),d(),m(23,"br"),a(24,"small",10),C(25),r(26,"translate"),d()(),a(27,"button",11),r(28,"translate"),y("click",function(){return i.downloadCurrentConfig()}),m(29,"i",12),d()()(),x(30,Ft,2,0,"div",13)(31,qt,16,20,"ul",14),d(),a(32,"div",15),m(33,"div",16),a(34,"div",17)(35,"button",18),r(36,"translate"),y("click",function(){return i.dismissModal()}),C(37),r(38,"translate"),d()(),m(39,"div",19),d()()),e&2&&(o(3),M(l(4,13,"config.restore.title")),o(2),_("disabled",i.clicked()||i.deleting()),$("aria-label",l(6,15,"form.button_close")),o(7),M(l(13,17,"config.restore.help_1")),o(3),M(l(16,19,"config.restore.help_2")),o(6),M(l(22,21,"form.button_download")),o(4),M(l(26,23,"config.restore.download")),o(2),_("disabled",i.clicked()||i.deleting()),$("aria-label",l(28,25,"backup.backup_now")),o(3),S(i.loading()?30:i.backupList().length?31:-1),o(5),_("disabled",i.clicked()||i.deleting()),$("aria-label",l(36,27,"form.button_close")),o(2),V(" ",l(38,29,"form.button_close")," "))},dependencies:[q,bt,ct,H],encapsulation:2})}return s})();function zt(s,v){if(s&1){let t=E();a(0,"button",13),r(1,"translate"),r(2,"translate"),y("click",function(){u(t);let i=p();return b(i.onCancelRestore())}),m(3,"i",14),d()}if(s&2){let t=p();_("disabled",t.saveInProgress())("openDelay",150)("ngbTooltip",l(1,4,"form.button_cancel")),$("aria-label",l(2,6,"form.button_cancel"))}}function Lt(s,v){if(s&1){let t=E();a(0,"button",15),r(1,"translate"),r(2,"translate"),y("click",function(){u(t);let i=p();return b(i.onRestore())}),m(3,"i",16),d()}s&2&&(_("openDelay",150)("ngbTooltip",l(1,3,"form.button_restore")),$("aria-label",l(2,5,"form.button_restore")))}function Jt(s,v){if(s&1){let t=E();a(0,"button",15),r(1,"translate"),r(2,"translate"),y("click",function(){u(t);let i=p();return b(i.toggleSideBySide())}),m(3,"i",17),d()}if(s&2){let t=p();_("openDelay",150)("ngbTooltip",l(1,7,t.renderSideBySide()?"config.restore.view_inline":"config.restore.view_side_by_side")),$("aria-label",l(2,9,t.renderSideBySide()?"config.restore.view_inline":"config.restore.view_side_by_side")),o(3),dt("fa-columns",!t.renderSideBySide())("fa-bars",t.renderSideBySide())}}function Wt(s,v){s&1&&m(0,"i",8)}function Kt(s,v){s&1&&m(0,"i",9)}function Gt(s,v){if(s&1){let t=E();a(0,"ngx-monaco-editor",18),y("onInit",function(i){u(t);let n=p();return b(n.onEditorInit(i))})("keydown.control.s",function(i){u(t);let n=p();return i.preventDefault(),b(n.onSave())})("keydown.meta.s",function(i){u(t);let n=p();return i.preventDefault(),b(n.onSave())}),d()}if(s&2){let t=p();_("options",t.editorOptions)("model",t.monacoEditorModel)}}function Yt(s,v){if(s&1){let t=E();a(0,"ngx-monaco-diff-editor",19),y("onInit",function(i){u(t);let n=p();return b(n.onInitDiffEditor(i))})("keydown.control.s",function(i){u(t);let n=p();return i.preventDefault(),b(n.onSave())})("keydown.meta.s",function(i){u(t);let n=p();return i.preventDefault(),b(n.onSave())}),d()}if(s&2){let t=p();_("options",t.editorOptions)("originalModel",t.diffOriginalModel)("modifiedModel",t.diffModifiedModel)}}function Qt(s,v){if(s&1){let t=E();a(0,"textarea",20),y("ngModelChange",function(i){u(t);let n=p();return b(n.homebridgeConfig.set(i))}),C(1," "),d()}if(s&2){let t=p();_("ngModel",t.homebridgeConfig())}}var Pe=(()=>{class s{injector=g(st);$api=g(F);$md=g(Ct);$modal=g(yt);$monacoEditor=g(Et);$renderer=g(ot);$route=g(pt);$router=g(I);$settings=g(gt);$toastr=g(N);$translate=g(O);editorDecorations=[];lastHeight;visualViewPortEventCallback;latestSavedConfig;childBridgesToRestart=[];hbPendingRestart=!1;isDebugModeEnabled=this.$settings.isFeatureEnabled("childBridgeDebugMode");isMatterSupported=this.$settings.isFeatureEnabled("matterSupport");homebridgeConfig=k("");originalConfig=k("");saveInProgress=k(!1);isMobile=k(!1);monacoEditor;editorOptions;monacoEditorModel;diffOriginalModel;diffModifiedModel;renderSideBySide=k(!1);constructor(){this.isMobile.set(!!this.$md.detect.mobile())}ngOnInit(){let t=this.$translate.instant("menu.config_json_editor");this.$settings.setPageTitle(t),this.editorOptions={language:"json",theme:this.$settings.actualLightingMode==="dark"?"vs-dark":"vs-light",renderSideBySide:this.renderSideBySide(),renderIndicators:!0,ignoreTrimWhitespace:!1,glyphMargin:!0};let e=document.querySelector(".content");this.$renderer.setStyle(e,"height","100%"),this.visualViewPortEventCallback=()=>this.visualViewPortChanged(),this.lastHeight=window.innerHeight,window.visualViewport&&!this.isMobile()&&(window.visualViewport.addEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.disableTouchMove()),this.visualViewPortEventCallback=()=>this.visualViewPortChanged(),this.lastHeight=window.innerHeight,window.visualViewport&&!this.isMobile()&&(window.visualViewport.addEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.disableTouchMove()),this.$route.data.subscribe(n=>{this.homebridgeConfig.set(n.config),this.latestSavedConfig=JSON.parse(n.config),this.diffModifiedModel&&this.updateDiffModels()}),this.monacoEditorModel={value:"{}",language:"json",uri:window.monaco?window.monaco.Uri.parse("a://homebridge/config.json"):void 0},this.diffOriginalModel={code:"",language:"json"},this.diffModifiedModel={code:this.homebridgeConfig()||"{}",language:"json"},window.monaco?this.setMonacoEditorModel():this.waitForMonaco();let{action:i}=this.$router.parseUrl(this.$router.url).queryParams;if(i){switch(i){case"restore":{this.onRestore(!0);break}}this.$router.navigate([],{queryParams:{},replaceUrl:!0,queryParamsHandling:""})}}waitForMonaco(){return w(this,null,function*(){try{yield nt(this.$monacoEditor.readyEvent),this.setMonacoEditorModel()}catch(t){console.error("Failed to wait for monaco ready event:",t)}})}onEditorInit(t){window.editor=t,this.monacoEditor=t;let e=this.monacoEditor.getModel();e&&e.setValue(this.homebridgeConfig())}onInitDiffEditor(t){this.monacoEditor=t.getModifiedEditor(),this.updateDiffModels(),window.editor=t}updateDiffModels(){if(this.diffOriginalModel&&(this.diffOriginalModel.code=this.originalConfig()||""),this.diffModifiedModel&&(this.diffModifiedModel.code=this.homebridgeConfig()||"{}"),window.editor&&window.editor.getOriginalEditor){let t=window.editor.getOriginalEditor(),e=window.editor.getModifiedEditor();if(t&&e){let i=t.getModel(),n=e.getModel();i&&i.setValue(this.originalConfig()||""),n&&n.setValue(this.homebridgeConfig()||"{}")}}}onSave(){return w(this,null,function*(){if(!this.saveInProgress()){this.monacoEditor&&(this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[])),this.saveInProgress.set(!0);try{if(!this.isMobile()){yield this.monacoEditor.getAction("editor.action.formatDocument").run();let e=window.monaco.editor.getModelMarkers({owner:"json"});for(let i of e)if(i.message==="Duplicate object key"){this.saveInProgress.set(!1),this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error"));return}this.homebridgeConfig.set(this.monacoEditor.getModel().getValue())}let t=this.parseConfigFromEditor();this.homebridgeConfig.set(JSON.stringify(t,null,4)),typeof t.bridge!="object"?this.$toastr.error(this.$translate.instant("config.config_bridge_missing"),this.$translate.instant("toast.title_error")):/^(?:[0-9A-F]{2}:){5}[0-9A-F]{2}$/i.test(t.bridge.username)?t.accessories&&!Array.isArray(t.accessories)?this.$toastr.error(this.$translate.instant("config.config_accessory_must_be_array"),this.$translate.instant("toast.title_error")):t.platforms&&!Array.isArray(t.platforms)?this.$toastr.error(this.$translate.instant("config.config_platform_must_be_array"),this.$translate.instant("toast.title_error")):t.platforms&&Array.isArray(t.platforms)&&!this.validateSection(t.platforms,"platform")||t.accessories&&Array.isArray(t.accessories)&&!this.validateSection(t.accessories,"accessory")||t.plugins&&Array.isArray(t.plugins)&&!this.validatePlugins(t.plugins,"plugins")||t.disabledPlugins&&Array.isArray(t.disabledPlugins)&&!this.validatePlugins(t.disabledPlugins,"disabledPlugins")||(yield this.saveConfig(t),this.originalConfig.set("")):this.$toastr.error(this.$translate.instant("config.config_username_error"),this.$translate.instant("toast.title_error"))}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error"))}this.saveInProgress.set(!1)}})}onRestore(t=!1){return w(this,null,function*(){let e=G([{provide:U,useValue:{currentConfig:this.homebridgeConfig(),fromSettings:t}}],this.injector),i=this.$modal.open(Bt,{size:"lg",backdrop:"static",injector:e});try{let n=yield i.result;try{this.originalConfig()||(this.originalConfig.set(this.homebridgeConfig()),this.updateDiffModels());let f=yield this.$api.get(`/config-editor/backups/${n}`);this.$toastr.info(this.$translate.instant("config.restore.confirm"),this.$translate.instant("config.title_backup_loaded")),this.homebridgeConfig.set(JSON.stringify(f,null,4)),this.updateDiffModels(),this.monacoEditor&&window.editor.modifiedEditor&&(this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[]),this.monacoEditor.executeEdits("beautifier",[{identifier:"delete",range:new monaco.Range(1,1,this.monacoEditor.getModel().getLineCount()+10,1),text:"",forceMoveMarkers:!0}]),this.monacoEditor.executeEdits("beautifier",[{identifier:"insert",range:new monaco.Range(1,1,1,1),text:this.homebridgeConfig(),forceMoveMarkers:!0}]))}catch(f){console.error(f);let h=f?.error?.message||this.$translate.instant("backup.load_error");this.$toastr.error(h,this.$translate.instant("toast.title_error"))}}catch{}})}onCancelRestore(){if(window.editor&&window.editor.dispose)try{window.editor.dispose(),window.editor=void 0}catch{}this.homebridgeConfig.set(this.originalConfig()),this.originalConfig.set(""),this.renderSideBySide()&&this.toggleSideBySide(),this.updateDiffModels(),this.onRestore()}toggleSideBySide(){this.renderSideBySide.set(!this.renderSideBySide()),this.editorOptions=K(j({},this.editorOptions),{renderSideBySide:this.renderSideBySide()})}ngOnDestroy(){let t=document.querySelector(".content");this.$renderer.removeStyle(t,"height"),window.visualViewport&&(window.visualViewport.removeEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.enableTouchMove());try{if(window.editor&&window.editor.dispose&&(window.editor.dispose(),window.editor=void 0),window.monaco){let e=window.monaco.Uri.parse("file:///original.json"),i=window.monaco.Uri.parse("file:///modified.json"),n=window.monaco.editor.getModel(e);n&&n.dispose();let f=window.monaco.editor.getModel(i);f&&f.dispose();let T=(window.monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas||[]).filter(D=>D.uri!=="http://homebridge/config.json");window.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({validate:!0,allowComments:!1,schemas:T})}this.monacoEditor&&this.monacoEditor.dispose()}catch{}}validateSection(t,e){for(let i of t){if(typeof i!="object"||i===null||Array.isArray(i))return this.$toastr.error(this.$translate.instant("config.error_blocks_objects",{type:e}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(JSON.stringify(i)),!1;if(!(e in i))return this.$toastr.error(this.$translate.instant("config.error_blocks_type",{type:e}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(JSON.stringify(i)),!1;if(typeof i[e]!="string")return this.$toastr.error(this.$translate.instant("config.error_string_type",{type:e}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(JSON.stringify(i)),!1}return!0}validatePlugins(t,e){for(let i of t)if(typeof i!="string")return this.$toastr.error(this.$translate.instant("config.error_string_array",{key:e}),this.$translate.instant("toast.title_error")),!1;return!0}highlightOffendingArrayItem(t){this.monacoEditor&&(t=JSON.stringify(t,null,4).split(`
|
|
2
2
|
`).map(e=>` ${e}`).join(`
|
|
3
3
|
`),requestAnimationFrame(()=>{let e=this.monacoEditor.getModel().findMatches(t);if(e.length){let i=e[0].range,n=new monaco.Range(i.startLineNumber,i.startColumn,i.endLineNumber,i.endColumn);this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[{range:n,options:{isWholeLine:!0,linesDecorationsClassName:"hb-monaco-editor-line-error"}}])}}))}setMonacoEditorModel(){if(window.monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas.some(i=>i.uri==="http://homebridge/config.json"))return;let t=monaco.Uri.parse("a://homebridge/config.json"),e=St(this.$translate,{isDebugModeEnabled:this.isDebugModeEnabled,isMatterSupported:this.isMatterSupported});window.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({allowComments:!1,validate:!0,schemas:[{uri:"http://homebridge/config.json",fileMatch:[t.toString()],schema:{type:"object",additionalProperties:!1,required:["bridge"],properties:{bridge:{type:"object",additionalProperties:!1,required:["name","username","port","pin"],properties:j({name:{type:"string",title:this.$translate.instant("settings.name"),description:`The Homebridge instance name.
|
|
4
4
|
This should be unique if you are running multiple instances of Homebridge.`,default:"Homebridge"},username:{type:"string",title:this.$translate.instant("users.label_username"),description:`Homebridge username must be 6 pairs of colon-separated hexadecimal characters (A-F 0-9).
|