iobroker.javascript 9.2.2 → 9.2.3
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/README.md +4 -11
- package/admin/assets/{AiChatPanel-Bbux7LP7.js → AiChatPanel-C4zUsNmN.js} +1 -1
- package/admin/assets/{ScriptEditor-DKljeYQN.js → ScriptEditor-C6W68ya0.js} +1 -1
- package/admin/assets/ScriptEditorVanillaMonaco-DYTcDqp_.js +3 -0
- package/admin/assets/cronHoverProvider-Bg0Vz-1E.js +2 -0
- package/admin/assets/index-45IwpC7_.js +1 -0
- package/admin/assets/{index-_BUuZlI0.js → index-BXfqctma.js} +1 -1
- package/admin/assets/{index-DSvAO584.js → index-CUau9-il.js} +83 -83
- package/admin/assets/{index-DgE6XhUM.js → index-crBQrXKG.js} +1 -1
- package/admin/assets/{index-CexrwGGC.js → index-qoSy77Bg.js} +41 -37
- package/admin/assets/{localSharedImportMap-BCwqnmn4.js → localSharedImportMap-CVlAGiIu.js} +1 -1
- package/admin/assets/stateHoverProvider-BYBqzJuX.js +9 -0
- package/admin/assets/{virtual_mf-REMOTE_ENTRY_ID_iobroker_javascript__remoteEntry_js-DNrEsMrg.js → virtual_mf-REMOTE_ENTRY_ID_iobroker_javascript__remoteEntry_js-CeYV4czE.js} +2 -2
- package/admin/custom/assets/Components-jfkoGyES.js +1 -0
- package/admin/custom/assets/ConfigCustomJavascriptSet__loadShare___mf_0_emotion_mf_1_react__loadShare__.mjs-sg07E3QA.js +1 -0
- package/admin/custom/assets/ConfigCustomJavascriptSet__loadShare___mf_0_emotion_mf_1_styled__loadShare__.mjs-CwjI4A-J.js +1 -0
- package/admin/custom/assets/{ConfigCustomJavascriptSet__loadShare__react__loadShare__.mjs-0SjJESw9.js → ConfigCustomJavascriptSet__loadShare__react__loadShare__.mjs-BW9Qbxx5.js} +1 -1
- package/admin/custom/assets/{ConfigCustomJavascriptSet__loadShare__react__loadShare__.mjs_commonjs-proxy-CInLgMWW.js → ConfigCustomJavascriptSet__loadShare__react__loadShare__.mjs_commonjs-proxy-2W2BYT2K.js} +1 -1
- package/admin/custom/assets/{ConfigCustomJavascriptSet__loadShare__react_mf_2_dom__loadShare__.mjs_commonjs-proxy-CorOEig8.js → ConfigCustomJavascriptSet__loadShare__react_mf_2_dom__loadShare__.mjs_commonjs-proxy-D8zcZsJo.js} +1 -1
- package/admin/custom/assets/DefaultPropsProvider-CfKHPa-G.js +1 -0
- package/admin/custom/assets/{TextField-DNzklBSl.js → TextField-CxPfV5Sr.js} +12 -12
- package/admin/custom/assets/{ThemeProvider-B4G3jidj.js → ThemeProvider-DSTCckLJ.js} +4 -4
- package/admin/custom/assets/{createSvgIcon-ZdrQ8zSU.js → createSvgIcon-b2B2NI3g.js} +1 -1
- package/admin/custom/assets/createTheme-MsdB8zt7.js +8 -0
- package/admin/custom/assets/defaultTheme-CmVP-QNF.js +1 -0
- package/admin/custom/assets/emotion-cache.browser.esm-BgJfNZJN.js +1 -0
- package/admin/custom/assets/emotion-react.browser.esm-chZAeh_-.js +1 -0
- package/admin/custom/assets/emotion-serialize.esm-BUa21YfQ.js +1 -0
- package/admin/custom/assets/emotion-styled.browser.esm-Yi13plpH.js +1 -0
- package/admin/custom/assets/emotion-use-insertion-effect-with-fallbacks.browser.esm-CEPeBbh9.js +1 -0
- package/admin/custom/assets/extends-CF3RwP-h.js +1 -0
- package/admin/custom/assets/index-17vbGv00.js +1 -0
- package/admin/custom/assets/{index-iRHaQfi-.js → index-B5DqCD_a.js} +1 -1
- package/admin/custom/assets/{index-DNKzDki_.js → index-CS_GBN2m.js} +159 -159
- package/admin/custom/assets/{index-NItS-TWp.js → index-ChQotUCl.js} +1 -1
- package/admin/custom/assets/{index-YBvFYuP6.js → index-CzRngQHl.js} +1 -1
- package/admin/custom/assets/index-DLNtxshy.js +1 -0
- package/admin/custom/assets/{index-Dp7A3XHd.js → index-DV76KW3-.js} +4 -4
- package/admin/custom/assets/{index-D0iTiVVG.js → index-DlQbqHom.js} +1 -1
- package/admin/custom/assets/{index-BptSiKBK.js → index-FTmk0JJx.js} +5 -5
- package/admin/custom/assets/index-qs6J40Tp.js +964 -0
- package/admin/custom/assets/{jsx-runtime-DfVU3AZG.js → jsx-runtime-BplTyRFk.js} +1 -1
- package/admin/custom/assets/localSharedImportMap-BeObsVNc.js +1 -0
- package/admin/custom/assets/useTheme-BV4xOYIL.js +1 -0
- package/admin/custom/assets/useTheme-ldICnlmf.js +1 -0
- package/admin/custom/assets/{virtualExposes-jSvr-kK3.js → virtualExposes-wYe_Np-4.js} +1 -1
- package/admin/custom/assets/{virtual_mf-REMOTE_ENTRY_ID_ConfigCustomJavascriptSet__customComponents_js-Br3IlnqO.js → virtual_mf-REMOTE_ENTRY_ID_ConfigCustomJavascriptSet__customComponents_js-BcRVut8U.js} +2 -2
- package/admin/custom/customComponents.js +1 -1
- package/admin/google-blockly/own/field_oid.js +151 -2
- package/admin/mf-manifest.json +1 -1
- package/admin/remoteEntry.js +1 -1
- package/admin/tab.html +10 -8
- package/build/lib/eventObj.js +21 -12
- package/build/lib/eventObj.js.map +1 -1
- package/build/lib/sandbox.js +168 -58
- package/build/lib/sandbox.js.map +1 -1
- package/build/lib/scheduler.js +18 -13
- package/build/lib/scheduler.js.map +1 -1
- package/build/main.js +224 -135
- package/build/main.js.map +1 -1
- package/build/types.d.ts +14 -6
- package/io-package.json +14 -1
- package/package.json +1 -1
- package/admin/assets/ScriptEditorVanillaMonaco-CaFyKuJ2.js +0 -3
- package/admin/assets/index-SHs7_wDh.js +0 -1
- package/admin/assets/stateHoverProvider-CGChzV5W.js +0 -3
- package/admin/custom/assets/Components-B9ZyjeRI.js +0 -1
- package/admin/custom/assets/DefaultPropsProvider-CGb21NGY.js +0 -1
- package/admin/custom/assets/createTheme-Wd4QxQE0.js +0 -8
- package/admin/custom/assets/defaultTheme-F2iJF2G2.js +0 -1
- package/admin/custom/assets/index-AZB1OHDH.js +0 -1
- package/admin/custom/assets/index-C0RmLaAj.js +0 -1
- package/admin/custom/assets/index-sozs10Ij.js +0 -960
- package/admin/custom/assets/localSharedImportMap-BxT0VwTO.js +0 -1
- package/admin/custom/assets/useTheme-BfhDdtAr.js +0 -1
- package/admin/custom/assets/useTheme-DWZ6jNyq.js +0 -1
- /package/admin/custom/assets/{index-huvZQhZw.js → index-D_5kZmfw.js} +0 -0
- /package/admin/custom/assets/{index-CmJ8HzSc.js → index-DpJ18x6R.js} +0 -0
- /package/admin/custom/assets/{leaflet-src-k2rCV-Ix.js → leaflet-src-B472P7Y1.js} +0 -0
package/build/types.d.ts
CHANGED
|
@@ -129,8 +129,10 @@ export interface JsScript {
|
|
|
129
129
|
script: Script;
|
|
130
130
|
onStopTimeout: number;
|
|
131
131
|
onStopCb: (cb: () => void) => void;
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
/** IO-10: Set for O(1) add/delete vs Array O(n) indexOf+splice */
|
|
133
|
+
intervals: Set<NodeJS.Timeout>;
|
|
134
|
+
/** IO-10: Set for O(1) add/delete vs Array O(n) indexOf+splice */
|
|
135
|
+
timeouts: Set<NodeJS.Timeout>;
|
|
134
136
|
schedules: IobSchedule[];
|
|
135
137
|
wizards: string[];
|
|
136
138
|
name: string;
|
|
@@ -705,16 +707,22 @@ export interface JavascriptContext {
|
|
|
705
707
|
subscriptions: SubscriptionResult[];
|
|
706
708
|
subscriptionsFile: FileSubscriptionResult[];
|
|
707
709
|
subscriptionsObject: SubscribeObject[];
|
|
710
|
+
/** O(1) dispatch map – pattern → list of subscribers (kept in sync with subscriptionsObject) */
|
|
711
|
+
subscriptionsObjectMap: Map<string, SubscribeObject[]>;
|
|
712
|
+
/** IO-9: Cache for sendTo broadcast – adapterName → instance ids, invalidated on system.adapter.* object change */
|
|
713
|
+
sendToInstanceCache: Map<string, string[]>;
|
|
708
714
|
subscribedPatterns: Record<string, number>;
|
|
709
715
|
subscribedPatternsFile: Record<string, number>;
|
|
710
|
-
adapterSubs: Record<string, string
|
|
716
|
+
adapterSubs: Record<string, Set<string>>;
|
|
711
717
|
cacheObjectEnums: Record<string, { enumIds: string[]; enumNames: string[] }>;
|
|
712
718
|
isEnums: boolean; // If some subscription wants enum
|
|
713
|
-
channels: Record<string, string
|
|
714
|
-
devices: Record<string, string
|
|
719
|
+
channels: Record<string, Set<string>> | null;
|
|
720
|
+
devices: Record<string, Set<string>> | null;
|
|
715
721
|
scheduler: Scheduler | null;
|
|
716
722
|
timers: { [scriptName: string]: JavascriptTimer[] };
|
|
717
|
-
|
|
723
|
+
/** Reverse-index: scriptName → Set<stateId> for O(1) timer cleanup in stopScript */
|
|
724
|
+
timersByScript: Map<string, Set<string>>;
|
|
725
|
+
enums: Set<string>;
|
|
718
726
|
timerId: number;
|
|
719
727
|
names: { [name: string]: string | string[] }; // name: id
|
|
720
728
|
scripts: Record<string, JsScript>;
|
package/io-package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "javascript",
|
|
4
|
-
"version": "9.2.
|
|
4
|
+
"version": "9.2.3",
|
|
5
5
|
"blockedVersions": [
|
|
6
6
|
"8.0.0",
|
|
7
7
|
"8.0.1"
|
|
@@ -40,6 +40,19 @@
|
|
|
40
40
|
"Matthias Kleine <info@haus-automatisierung.com>"
|
|
41
41
|
],
|
|
42
42
|
"news": {
|
|
43
|
+
"9.2.3": {
|
|
44
|
+
"en": "Performance optimizations done\nAdded on mouse over the value of the state",
|
|
45
|
+
"de": "Leistungsoptimierungen durchgeführt\nAuf der Maus über den Wert des Zustands hinzugefügt",
|
|
46
|
+
"ru": "Оптимизация производительности\nДобавлено на мыши над стоимостью государства",
|
|
47
|
+
"pt": "Otimizações de desempenho feitas\nAdicionado no mouse sobre o valor do estado",
|
|
48
|
+
"nl": "Prestatieoptimalisaties uitgevoerd\nToegevoegd aan muis boven de waarde van de status",
|
|
49
|
+
"fr": "Optimisations des performances effectuées\nAjouté sur la souris sur la valeur de l'état",
|
|
50
|
+
"it": "Ottimizzazione delle prestazioni\nAggiunto sul mouse sopra il valore dello stato",
|
|
51
|
+
"es": "Optimizaciones de rendimiento realizadas\nAñadido en el ratón sobre el valor del estado",
|
|
52
|
+
"pl": "Optymalizacja wykonania\nDodano na myszce nad wartością stanu",
|
|
53
|
+
"uk": "Оптимізація продуктивності\nДодано на мишу над значенням держави",
|
|
54
|
+
"zh-cn": "业绩优化\n在鼠标上大于状态值"
|
|
55
|
+
},
|
|
43
56
|
"9.2.2": {
|
|
44
57
|
"en": "Fix: AI chat mode tooltip no longer covers the dropdown options (issue #2201) — moved tooltip to the left of the selector\nClarified the AI chat mode descriptions in the tooltip: Agent is for larger models with tool support and handles both analysis and script creation, Code is for smaller models without tool support (uses two-step plan-then-code) — translations updated in all 11 languages\nAdded the \"is state exists\" block to blockly",
|
|
45
58
|
"de": "Fix: AI-Chat-Modus-Tooltip nicht mehr deckt die Dropdown-Optionen (Ausgabe #2201) - verschoben Tooltip auf die linke Seite des Selektors\nKI-Chat-Modus Beschreibungen im Tooltip: Agent ist für größere Modelle mit Werkzeugunterstützung und behandelt sowohl Analyse als auch Skript-Erstellung, Code ist für kleinere Modelle ohne Werkzeugunterstützung (verwendet zweistufigen Plan-then-Code) — Übersetzungen aktualisiert in allen 11 Sprachen\nDer \"is state exist\" Block wurde blockweise hinzugefügt",
|
package/package.json
CHANGED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./index-DSvAO584.js","./virtual_mf-REMOTE_ENTRY_ID_iobroker_javascript__remoteEntry_js-DNrEsMrg.js","./preload-helper-BDBacUwf.js","./createSvgIcon-DYs_tNrE.js","./iobroker_javascript__loadShare__react__loadShare__.mjs-CTZOFJS2.js","./iobroker_javascript__loadShare__react__loadShare__.mjs_commonjs-proxy-CE9lvhW8.js","./iobroker_javascript__loadShare__prop_mf_2_types__loadShare__.mjs-BCtSFofY.js","./iobroker_javascript__loadShare__react_mf_2_dom__loadShare__.mjs_commonjs-proxy-RQRRZMX5.js","./iobroker_javascript__loadShare__react_mf_2_dom__loadShare__.mjs-DeVAS-oa.js","./iobroker_javascript__loadShare___mf_0_mui_mf_1_material__loadShare__.mjs-CV1_X-Lf.js","./iobroker_javascript__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__.mjs-DkBjPSMw.js","./index-wHNMOf-c.js","./inheritsLoose-CIXm_zPk.js","./index-BTsjunTt.css","./inlineDiffController-DBLpPOe2.js","./applyCodeEdit-BdRnbz2g.js","./inlineChatWidget-Cu6rb4Ar.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{_ as g}from"./preload-helper-BDBacUwf.js";import{j as m}from"./createSvgIcon-DYs_tNrE.js";import{a as v}from"./iobroker_javascript__loadShare__react__loadShare__.mjs-CTZOFJS2.js";import{_ as T,a as N,b as M,h as A,i as w,Q as O,o as x,$ as j}from"./iobroker_javascript__loadShare___mf_0_mui_mf_1_material__loadShare__.mjs-CV1_X-Lf.js";import{n as E,Z as R}from"./index-wHNMOf-c.js";import{_ as p}from"./iobroker_javascript__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__.mjs-DkBjPSMw.js";import{h as V}from"./index-DSvAO584.js";import"./iobroker_javascript__loadShare__react__loadShare__.mjs_commonjs-proxy-CE9lvhW8.js";import"./iobroker_javascript__loadShare__prop_mf_2_types__loadShare__.mjs-BCtSFofY.js";import"./virtual_mf-REMOTE_ENTRY_ID_iobroker_javascript__remoteEntry_js-DNrEsMrg.js";import"./iobroker_javascript__loadShare__react_mf_2_dom__loadShare__.mjs_commonjs-proxy-RQRRZMX5.js";import"./iobroker_javascript__loadShare__react_mf_2_dom__loadShare__.mjs-DeVAS-oa.js";import"./inheritsLoose-CIXm_zPk.js";function K(k){return/^script\.js\.global\./.test(k)}let P=0;function $(k){const t=/\x1b\[[0-9;]*m/g;return k.replace(t,"")}class tt extends v.Component{monacoDiv=null;editor=null;monaco=window.monaco;get monacoTS(){var t,e;return(e=(t=this.monaco)==null?void 0:t.languages)==null?void 0:e.typescript}insert="";originalCode;runningInstancesStr;monacoCounter=0;location;breakpoints;lastSearch="";typings={};decorations=[];datapointProviderDisposable=null;inlineProviderDisposable=null;stateHoverDisposable=null;codeLensDisposable=null;inlineChatWidgetInstance=null;inlineDiffInstance=null;inlineDiffCssInjected=!1;triggerPrettier;contentChangeDisposable=null;mouseDownDisposable=null;constructor(t){super(t),this.state={name:"current",isDark:t.isDark||!1,language:t.language||"javascript",readOnly:t.readOnly||!1,alive:!0,check:!1,searchText:this.props.searchText||"",typingsLoaded:!1,showError:null},this.triggerPrettier=t.triggerPrettier,this.runningInstancesStr=JSON.stringify(this.props.runningInstances),this.originalCode=t.code||"",this.monacoDiv=v.createRef()}waitForMonaco(t){var i,o,n,r;let e=!!((o=(i=this.monacoTS)==null?void 0:i.typescriptDefaults)!=null&&o.getCompilerOptions);if(!e||!this.props.runningInstances){if(this.monaco=window.monaco,e=!!((r=(n=this.monacoTS)==null?void 0:n.typescriptDefaults)!=null&&r.getCompilerOptions),this.monacoCounter++,!e&&this.monacoCounter<20){console.log("wait for monaco loaded"),setTimeout(()=>this.waitForMonaco(t),200);return}this.monacoCounter>=20&&console.error("Cannot load monaco!")}else t&&t()}loadTypings(t){if(!this.editor)return;t||=this.props.runningInstances;const e=t&&Object.keys(t).find(i=>t==null?void 0:t[i]);e&&this.props.socket.sendTo(e.replace("system.adapter.",""),"loadTypings",null).then(i=>{this.setState({alive:!0,check:!0,typingsLoaded:!0}),this.setTypeCheck(!0),i.typings?(this.typings=i.typings,this.setEditorTypings(this.state.name)):console.error(`failed to load typings: ${i.error}`)})}componentDidMount(){var i,o,n,r,s,d,c,a;this.undo,this.redo,this.showInlineDiff,this.getEditorSelection,this.getEditorContent,this.getCursorPosition,this.highlightLineRange,this.goToLine,this.replaceSelection,this.getDiagnostics,this.getDocumentSymbols;let t=!!((o=(i=this.monacoTS)==null?void 0:i.typescriptDefaults)!=null&&o.getCompilerOptions);if((!t||!this.props.runningInstances)&&(this.monaco=window.monaco,t=!!((r=(n=this.monacoTS)==null?void 0:n.typescriptDefaults)!=null&&r.getCompilerOptions),!t)){console.log("wait for monaco loaded..."),this.waitForMonaco(()=>this.componentDidMount());return}if(!this.editor&&t&&this.monaco){console.log("Init editor"),(d=(s=this.props).onRegisterSelect)==null||d.call(s,()=>{var l;if(this.editor){const u=this.editor.getSelection();if(u)return(l=this.editor.getModel())==null?void 0:l.getValueInRange(u)}});const h=this.monacoTS.typescriptDefaults.getCompilerOptions();h.allowJs=!0,h.checkJs=this.props.checkJs!==!1,h.noLib=!0,h.lib=[],h.useUnknownInCatchVariables=!1,h.moduleResolution=this.monacoTS.ModuleResolutionKind.NodeJs,h.target=this.monacoTS.ScriptTarget.ESNext,h.module=this.monacoTS.ModuleKind.ESNext,h.allowNonTsExtensions=!0,this.monacoTS.typescriptDefaults.setCompilerOptions(h),this.setTypeCheck(!1),(c=this.monacoDiv)!=null&&c.current&&(this.editor=this.monaco.editor.create((a=this.monacoDiv)==null?void 0:a.current,{lineNumbers:"on",scrollBeyondLastLine:!1,automaticLayout:!0,glyphMargin:!!this.props.breakpoints,colorDecorators:!0}),this.contentChangeDisposable=this.editor.onDidChangeModelContent(()=>this.onChange()),this.monaco&&!this.datapointProviderDisposable&&g(async()=>{const{registerDatapointProvider:l}=await import("./AiDatapointProvider-B0i3I5Fm.js");return{registerDatapointProvider:l}},[],import.meta.url).then(({registerDatapointProvider:l})=>{this.monaco&&(this.datapointProviderDisposable=l(this.monaco,this.props.socket))}).catch(()=>{}),this.monaco&&!this.stateHoverDisposable&&g(async()=>{const{registerStateHoverProvider:l}=await import("./stateHoverProvider-CGChzV5W.js");return{registerStateHoverProvider:l}},[],import.meta.url).then(({registerStateHoverProvider:l})=>{this.monaco&&(this.stateHoverDisposable=l(this.monaco,this.props.socket))}).catch(()=>{}),this.props.aiCompletionsEnabled&&this.monaco&&!this.inlineProviderDisposable&&g(async()=>{const{registerAiInlineProvider:l}=await import("./AiInlineProvider-DkgjVSFQ.js");return{registerAiInlineProvider:l}},[],import.meta.url).then(({registerAiInlineProvider:l})=>{this.monaco&&(this.inlineProviderDisposable=l(this.monaco,this.props.socket,this.props.runningInstances))}).catch(()=>{}),this.loadTypings(),this.props.onForceSave&&this.editor.addCommand(this.monaco.KeyMod.CtrlCmd|this.monaco.KeyCode.KeyS,()=>this.props.onForceSave&&this.props.onForceSave()),this.registerAiActions(),this.monaco&&this.editor&&this.props.onAiAction&&!this.codeLensDisposable&&g(async()=>{const{registerAiCodeLensProvider:l}=await import("./index-DSvAO584.js").then(u=>u.o);return{registerAiCodeLensProvider:l}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13]),import.meta.url).then(({registerAiCodeLensProvider:l})=>{this.monaco&&this.editor&&this.props.onAiAction&&(this.codeLensDisposable=l(this.monaco,this.editor,(u,y,f,b,C)=>{var L,I,S;const D=(L=this.editor)==null?void 0:L.getModel(),_=D?D.getLineMaxColumn(Math.min(C,D.getLineCount())):1;(S=(I=this.props).onAiAction)==null||S.call(I,{action:u,code:y,rangeLabel:f,range:{startLine:b,startColumn:1,endLine:C,endColumn:_},kind:"codelens"})}))}).catch(()=>{}),setTimeout(()=>{this.highlightText(this.state.searchText),this.location=this.props.location||void 0,this.breakpoints=this.props.breakpoints,this.showDecorators()}))}const e={selectOnLineNumbers:!0,scrollBeyondLastLine:!1,automaticLayout:!0,readOnly:this.state.readOnly,language:this.state.language,isDark:this.state.isDark};this.setEditorOptions(e),this.editor&&(this.editor.focus(),this.editor.setValue(this.originalCode),this.props.onToggleBreakpoint&&(this.mouseDownDisposable=this.editor.onMouseDown(h=>{var u;const l=h.target;this.props.onToggleBreakpoint&&((u=l.detail)==null?void 0:u.glyphMarginLeft)!==void 0&&l.position&&this.props.onToggleBreakpoint(l.position.lineNumber-1)})))}setEditorOptions(t){var e;t&&(t.language&&this.setEditorLanguage(t.language),this.editor&&(t.readOnly!==void 0&&this.editor.updateOptions({readOnly:t.readOnly}),t.lineWrap!==void 0&&this.editor.updateOptions({wordWrap:t.lineWrap?"on":"off"})),t.typeCheck!==void 0&&this.setTypeCheck(t.typeCheck),t.isDark!==void 0&&((e=this.monaco)==null||e.editor.setTheme(t.isDark?"vs-dark":"vs")))}componentWillUnmount(){var t,e,i,o,n,r,s,d,c;(t=this.contentChangeDisposable)==null||t.dispose(),this.contentChangeDisposable=null,(e=this.mouseDownDisposable)==null||e.dispose(),this.mouseDownDisposable=null,(i=this.datapointProviderDisposable)==null||i.dispose(),this.datapointProviderDisposable=null,g(async()=>{const{clearDatapointCache:a}=await import("./AiDatapointProvider-B0i3I5Fm.js");return{clearDatapointCache:a}},[],import.meta.url).then(({clearDatapointCache:a})=>a()).catch(()=>{}),(o=this.inlineProviderDisposable)==null||o.dispose(),this.inlineProviderDisposable=null,(n=this.stateHoverDisposable)==null||n.dispose(),this.stateHoverDisposable=null,g(async()=>{const{clearStateHoverCache:a}=await import("./stateHoverProvider-CGChzV5W.js");return{clearStateHoverCache:a}},[],import.meta.url).then(({clearStateHoverCache:a})=>a()).catch(()=>{}),(r=this.codeLensDisposable)==null||r.dispose(),this.codeLensDisposable=null,(s=this.inlineChatWidgetInstance)==null||s.dispose(),this.inlineChatWidgetInstance=null,this.hideInlineDiff(),this.editor&&((c=(d=this.props).onRegisterSelect)==null||c.call(d,null),this.editor.dispose(),this.editor=null)}async doPrettier(){var i,o,n,r;const t=this.props.runningInstances&&Object.keys(this.props.runningInstances).find(s=>{var d;return(d=this.props.runningInstances)==null?void 0:d[s]});if(!t){window.alert(p.I18n.t("No script adapter instance found to format the code"));return}const e=await this.props.socket.sendTo(t.replace("system.adapter.",""),"prettier",{code:(i=this.editor)==null?void 0:i.getValue(),type:this.state.language});e.error?this.setState({showError:{title:p.I18n.t("Error formatting code"),message:$(e.error)}}):e.code&&((o=this.editor)==null||o.setValue(e.code),(r=(n=this.props).onChange)==null||r.call(n,e.code),this.showDecorators())}setEditorLanguage(t){var i,o;if(!this.editor)return;const e=this.editor.getModel();if(e){const n=e.getValue(),r=e.uri.path,s=typeof r=="string"&&r.includes(".")?r.substring(0,r.lastIndexOf(".")):"index",d=t==="javascript"?"js":t==="typescript"?"ts":t;e.dispose();const c=t==="javascript"||t==="typescript"?"typescript":t,a=(i=this.monaco)==null?void 0:i.editor.createModel(n,c,this.monaco.Uri.from({scheme:window.location.protocol.replace(":",""),path:`${s}${P++}.${d}`}));a&&(this.editor.setModel(a),(o=this.contentChangeDisposable)==null||o.dispose(),this.contentChangeDisposable=this.editor.onDidChangeModelContent(()=>this.onChange()))}}setTypeCheck(t){var i,o;const e={noSemanticValidation:!this.state.alive||!t,noSyntaxValidation:!this.state.alive};(i=this.monacoTS)==null||i.typescriptDefaults.setDiagnosticsOptions(e),(o=this.monacoTS)==null||o.javascriptDefaults.setDiagnosticsOptions({noSemanticValidation:!this.state.alive||!t,noSyntaxValidation:!this.state.alive})}setEditorTypings(t=""){var n,r,s,d;const e=K(t),i=`${t}.d.ts`,o=[];for(const c of Object.keys(this.typings))e&&(c==="global.d.ts"||c.startsWith("script.js.global")&&c!==i)||o.push({filePath:c,content:this.typings[c]});if((r=(n=this.monacoTS)==null?void 0:n.typescriptDefaults)!=null&&r.setExtraLibs)this.monacoTS.typescriptDefaults.setExtraLibs(o);else if((d=(s=this.monacoTS)==null?void 0:s.typescriptDefaults)!=null&&d.addExtraLib){const c=this.monacoTS.typescriptDefaults.getExtraLibs();o.forEach(a=>{!c[a.filePath]&&this.monaco&&this.monacoTS.typescriptDefaults.addExtraLib(a.content,a.filePath)})}}undo(){var t;(t=this.editor)==null||t.trigger("toolbar","undo",null)}redo(){var t;(t=this.editor)==null||t.trigger("toolbar","redo",null)}insertTextIntoEditor(t){if(!this.editor||!this.monaco)return;const e=this.editor.getSelection();if(e){const i=new this.monaco.Range(e.startLineNumber,e.startColumn,e.endLineNumber,e.endColumn);this.editor.executeEdits("",[{range:i,text:t,forceMoveMarkers:!0}])}this.editor.focus()}highlightText(t){var o;if(!this.editor||!this.monaco)return 0;const e=t?(o=this.editor.getModel())==null?void 0:o.findMatches(t,!0,!1,!1,null,!0):void 0;if(e!=null&&e.length)return e.forEach(n=>{var r;return(r=this.editor)==null?void 0:r.setSelection(n.range)}),this.editor.revealLine(e[0].range.startLineNumber),e.length;const i=this.editor.getPosition();if(i){const n=i.lineNumber,r=i.column;this.editor.setSelection(new this.monaco.Range(n,r,n,r))}return 0}showInlineDiff(t){if(!this.editor||!this.monaco)return;const e=this.editor,i=this.monaco;this.hideInlineDiff(),g(async()=>{const{InlineDiffController:o,INLINE_DIFF_CSS:n}=await import("./inlineDiffController-DBLpPOe2.js");return{InlineDiffController:o,INLINE_DIFF_CSS:n}},__vite__mapDeps([14,10,15]),import.meta.url).then(({InlineDiffController:o,INLINE_DIFF_CSS:n})=>{if(!this.inlineDiffCssInjected){const s=document.createElement("style");s.textContent=n,s.setAttribute("data-iob-aichat","inline-diff"),document.head.appendChild(s),this.inlineDiffCssInjected=!0}const r=new o(e,i,{range:t.range,originalText:t.originalText,modifiedText:t.modifiedText,onAccepted:()=>{var s;this.inlineDiffInstance=null,(s=t.onAccepted)==null||s.call(t)},onRejected:()=>{var s;this.inlineDiffInstance=null,(s=t.onRejected)==null||s.call(t)}});this.inlineDiffInstance=r,r.show()}).catch(()=>{})}hideInlineDiff(){if(this.inlineDiffInstance){try{this.inlineDiffInstance.dispose()}catch{}this.inlineDiffInstance=null}}showInlineChatWidget(){if(!this.editor||!this.monaco||!this.props.onInlineAsk)return;if(this.inlineChatWidgetInstance){this.inlineChatWidgetInstance.show();return}const t=this.editor,e=this.monaco,i=this.props.onInlineAsk,o=this.props.onAiAction;g(async()=>{const{InlineChatWidget:n}=await import("./inlineChatWidget-Cu6rb4Ar.js");return{InlineChatWidget:n}},__vite__mapDeps([16,10,15]),import.meta.url).then(({InlineChatWidget:n})=>{const r=new n(t,e,{onSubmit:async s=>i({question:s.question,selectedCode:s.selectedCode}),onEscalateToChat:s=>{o&&o({action:"ask",code:s.selectedCode,question:s.question,rangeLabel:s.range?`lines ${s.range.startLineNumber}-${s.range.endLineNumber}`:"whole file"})}});this.inlineChatWidgetInstance=r,r.show()}).catch(()=>{})}registerAiActions(){if(!this.editor||!this.monaco||!this.props.onAiAction)return;const t=this.monaco,e=(o,n={})=>{if(!this.editor||!this.props.onAiAction)return;const r=this.editor.getModel();if(!r)return;const s=this.editor.getSelection(),d=s&&!s.isEmpty();let c,a,h,l="selection";if(d)c=r.getValueInRange(s),a=s.startLineNumber===s.endLineNumber?`line ${s.startLineNumber}`:`lines ${s.startLineNumber}-${s.endLineNumber}`,h={startLine:s.startLineNumber,startColumn:s.startColumn,endLine:s.endLineNumber,endColumn:s.endColumn},l="selection";else{const u=this.editor.getPosition();let y=null;if(u)try{y=V(r.getValue(),u.lineNumber)}catch{}if(y){const f=y.startLine,b=y.endLine,C=r.getLineMaxColumn(b),D=new t.Range(f,1,b,C);c=r.getValueInRange(D),a=f===b?`line ${f}`:`lines ${f}-${b}`,h={startLine:f,startColumn:1,endLine:b,endColumn:C},l="codelens"}else c=r.getValue(),a="whole file",l="none"}this.props.onAiAction({action:o,code:c,rangeLabel:a,range:h,kind:l,...n})},i=[{id:"iobroker.ai.inline",label:`🤖 ${p.I18n.t("AI: Inline chat…")}`,keybindings:[t.KeyMod.CtrlCmd|t.KeyMod.Alt|t.KeyCode.KeyI],order:1,run:()=>{if(this.props.onInlineAsk)this.showInlineChatWidget();else{const o=window.prompt(p.I18n.t("Ask the AI about the selected code:"));o&&o.trim()&&e("ask",{question:o.trim()})}}},{id:"iobroker.ai.explain",label:`💡 ${p.I18n.t("AI: Explain")}`,keybindings:[t.KeyMod.CtrlCmd|t.KeyMod.Alt|t.KeyCode.KeyE],order:2,run:()=>e("explain")},{id:"iobroker.ai.refactor",label:`🔧 ${p.I18n.t("AI: Refactor")}`,keybindings:[t.KeyMod.CtrlCmd|t.KeyMod.Alt|t.KeyCode.KeyR],order:3,run:()=>e("refactor")},{id:"iobroker.ai.comment",label:`💬 ${p.I18n.t("AI: Add comments")}`,keybindings:[t.KeyMod.CtrlCmd|t.KeyMod.Alt|t.KeyCode.KeyC],order:4,run:()=>e("comment")},{id:"iobroker.ai.fix",label:`🛠️ ${p.I18n.t("AI: Fix problem")}`,keybindings:[t.KeyMod.CtrlCmd|t.KeyMod.Alt|t.KeyCode.KeyF],order:5,run:()=>{var n,r;let o;try{const s=(n=this.editor)==null?void 0:n.getModel(),d=(r=this.editor)==null?void 0:r.getPosition();if(s&&d){const a=t.editor.getModelMarkers({resource:s.uri}).find(h=>d.lineNumber>=h.startLineNumber&&d.lineNumber<=h.endLineNumber);a&&(o=a.message)}}catch{}e("fix",{diagnostic:o})}},{id:"iobroker.ai.tests",label:`✅ ${p.I18n.t("AI: Suggest tests")}`,order:6,run:()=>e("tests")}];for(const o of i)try{this.editor.addAction({id:o.id,label:o.label,contextMenuGroupId:"aichat",contextMenuOrder:o.order,keybindings:o.keybindings,run:()=>o.run()})}catch{}}getEditorSelection(){if(!this.editor)return null;const t=this.editor.getSelection();if(!t||t.isEmpty())return null;const e=this.editor.getModel();return e?{text:e.getValueInRange(t),range:{startLine:t.startLineNumber,startColumn:t.startColumn,endLine:t.endLineNumber,endColumn:t.endColumn}}:null}getEditorContent(){var t,e;return((e=(t=this.editor)==null?void 0:t.getModel())==null?void 0:e.getValue())??""}getCursorPosition(){var e;const t=(e=this.editor)==null?void 0:e.getPosition();return t?{line:t.lineNumber,column:t.column}:null}highlightLineRange(t,e){if(!this.editor||!this.monaco)return!1;const i=this.editor.getModel();if(!i)return!1;const o=i.getLineCount(),n=Math.max(1,Math.min(t,o)),r=Math.max(n,Math.min(e,o)),s=i.getLineMaxColumn(r);return this.editor.setSelection(new this.monaco.Range(n,1,r,s)),this.editor.revealLineInCenter(n),!0}goToLine(t,e=1){if(!this.editor||!this.monaco)return!1;const i=this.editor.getModel();if(!i)return!1;const o=i.getLineCount(),n=Math.max(1,Math.min(t,o));return this.editor.setPosition({lineNumber:n,column:e}),this.editor.revealLineInCenter(n),this.editor.focus(),!0}replaceSelection(t){if(!this.editor||!this.monaco)return!1;const e=this.editor.getSelection();if(!e)return!1;const i=new this.monaco.Range(e.startLineNumber,e.startColumn,e.endLineNumber,e.endColumn);return this.editor.executeEdits("",[{range:i,text:t,forceMoveMarkers:!0}]),this.editor.focus(),!0}getDiagnostics(){if(!this.editor||!this.monaco)return[];const t=this.editor.getModel();if(!t)return[];const e=this.monaco.editor.getModelMarkers({resource:t.uri}),i={8:"error",4:"warning",2:"info",1:"hint"};return e.map(o=>({line:o.startLineNumber,column:o.startColumn,endLine:o.endLineNumber,endColumn:o.endColumn,severity:i[o.severity]||"info",message:o.message,...o.source?{source:o.source}:{}}))}async getDocumentSymbols(){var i;if(!this.editor||!this.monaco)return[];const t=this.editor.getModel();if(!t)return[];const e=[];try{const o=this.monaco.languages,n=(i=o.getDocumentSymbolProviders)==null?void 0:i.call(o,t);if(n!=null&&n.length){const r={0:"file",1:"module",2:"namespace",3:"package",4:"class",5:"method",6:"property",7:"field",8:"constructor",9:"enum",10:"interface",11:"function",12:"variable",13:"constant",14:"string",15:"number",16:"boolean",17:"array",18:"object",19:"key",20:"null",21:"enum-member",22:"struct",23:"event",24:"operator",25:"type-parameter"};for(const s of n){const d={isCancellationRequested:!1},c=await s.provideDocumentSymbols(t,d);if(!c)continue;const a=h=>{var l;for(const u of h)e.push({name:u.name,kind:r[u.kind]||String(u.kind),line:u.range.startLineNumber,endLine:u.range.endLineNumber,...u.detail?{detail:u.detail}:{}}),(l=u.children)!=null&&l.length&&a(u.children)};if(a(c),e.length)break}}}catch{}if(e.length===0){const n=t.getValue().split(`
|
|
3
|
-
`),r=[{re:/^(?:export\s+)?(?:async\s+)?function\s+(\w+)/,kind:"function"},{re:/^(?:export\s+)?class\s+(\w+)/,kind:"class"},{re:/^(?:export\s+)?(?:const|let|var)\s+(\w+)/,kind:"variable"}];for(let s=0;s<n.length;s++){const d=n[s].trim();for(const{re:c,kind:a}of r){const h=c.exec(d);if(h!=null&&h[1]){e.push({name:h[1],kind:a,line:s+1,endLine:s+1});break}}}}return e}showDecorators(){var e;const t=[];if(this.location&&this.monaco&&(t.push({range:new this.monaco.Range(this.location.lineNumber+1,(this.location.columnNumber||0)+1,this.location.lineNumber+1,1e3),options:{isWholeLine:!1,className:this.props.isDark?"monacoCurrentLineDark":"monacoCurrentLine"}}),t.push({range:new this.monaco.Range(this.location.lineNumber+1,0,this.location.lineNumber+1,0),options:{isWholeLine:!0,className:this.props.isDark?"monacoCurrentFullLineDark":"monacoCurrentFullLine"}})),(e=this.breakpoints)==null||e.forEach(i=>{this.monaco&&t.push({range:new this.monaco.Range(i.location.lineNumber+1,0,i.location.lineNumber+1,100),options:{isWholeLine:!0,glyphMarginClassName:this.props.isDark?"monacoBreakPointDark":"monacoBreakPoint"}})}),this.editor){const i=this.editor.getModel();i&&(this.decorations=i.deltaDecorations(this.decorations,t))}}initNewScript(t,e){var i;this.setState({name:t}),this.originalCode=e||"",(i=this.editor)==null||i.setValue(e||""),this.highlightText(this.lastSearch),this.showDecorators(),this.setEditorTypings(t)}scrollToLineIfNeeded(t){if(this.editor){const e=this.editor.getVisibleRanges();(!e||!e[0]||e[0].startLineNumber>t||t>e[0].endLineNumber)&&this.editor.revealLineInCenter(t)}}UNSAFE_componentWillReceiveProps(t){const e={};this.state.name!==t.name&&this.initNewScript(t.name,t.code),JSON.stringify(t.runningInstances)!==this.runningInstancesStr&&(this.runningInstancesStr=JSON.stringify(t.runningInstances),this.state.typingsLoaded||this.loadTypings(t.runningInstances)),this.editor&&!t.changed&&(t.code!==this.originalCode||t.code!==this.editor.getValue())&&(this.originalCode=t.code||"",this.editor.setValue(this.originalCode),this.showDecorators(),this.location&&this.scrollToLineIfNeeded(this.location.lineNumber+1)),t.searchText!==this.lastSearch&&(this.lastSearch=t.searchText||"",this.highlightText(this.lastSearch)),JSON.stringify(t.location)!==JSON.stringify(this.location)&&JSON.stringify(t.breakpoints)!==JSON.stringify(this.breakpoints)?(this.location=t.location||void 0,this.breakpoints=t.breakpoints,this.showDecorators(),this.editor&&this.location&&this.scrollToLineIfNeeded(this.location.lineNumber+1)):JSON.stringify(t.breakpoints)!==JSON.stringify(this.breakpoints)?(this.breakpoints=t.breakpoints,this.showDecorators()):JSON.stringify(t.location)!==JSON.stringify(this.location)&&(this.location=t.location||void 0,this.showDecorators(),this.editor&&this.location&&this.scrollToLineIfNeeded(this.location.lineNumber+1)),this.state.language!==(t.language||"javascript")?(this.setState({language:t.language||"javascript"}),e.language=t.language||"javascript"):this.state.readOnly!==(t.readOnly||!1)?(this.setState({readOnly:t.readOnly||!1}),e.readOnly=t.readOnly):this.state.isDark!==(t.isDark||!1)&&(this.setState({isDark:t.isDark||!1}),e.isDark=t.isDark),this.setEditorOptions(e),t.aiCompletionsEnabled!==this.props.aiCompletionsEnabled&&(t.aiCompletionsEnabled&&this.monaco&&!this.inlineProviderDisposable?g(async()=>{const{registerAiInlineProvider:i}=await import("./AiInlineProvider-DkgjVSFQ.js");return{registerAiInlineProvider:i}},[],import.meta.url).then(({registerAiInlineProvider:i})=>{this.monaco&&(this.inlineProviderDisposable=i(this.monaco,this.props.socket,this.props.runningInstances))}).catch(()=>{}):!t.aiCompletionsEnabled&&this.inlineProviderDisposable&&(this.inlineProviderDisposable.dispose(),this.inlineProviderDisposable=null)),this.insert!==t.insert&&(this.insert=t.insert||"",this.insert&&(console.log(`Insert text: ${this.insert}`),setTimeout(i=>{this.insertTextIntoEditor(i),setTimeout(()=>this.props.onInserted&&this.props.onInserted(),100)},100,this.insert)))}onChange(){var t,e;!this.props.readOnly&&this.editor&&((e=(t=this.props).onChange)==null||e.call(t,this.editor.getValue()))}renderErrorDialog(){return this.state.showError?this.state.showError.full?m.jsxs(T,{open:!0,maxWidth:"md",onClose:()=>this.setState({showError:null}),children:[m.jsx(N,{children:this.state.showError.title||p.I18n.t("Error")}),m.jsx(M,{children:m.jsx("pre",{children:m.jsx("code",{children:this.state.showError.message})})}),m.jsx(A,{children:m.jsxs(w,{variant:"contained",startIcon:m.jsx(E,{}),onClick:()=>this.setState({showError:null}),children:[p.I18n.t("Close")," "]})})]}):m.jsx(O,{open:!0,autoHideDuration:5e3,onClose:()=>this.setState({showError:null}),message:this.state.showError.title,action:m.jsxs(v.Fragment,{children:[m.jsx(w,{color:"secondary",size:"small",onClick:()=>this.setState({showError:{...this.state.showError,full:!0}}),children:p.I18n.t("More")}),m.jsx(x,{size:"small","aria-label":"close",color:"inherit",onClick:()=>this.setState({showError:null}),children:m.jsx(E,{fontSize:"small"})})]})}):null}render(){var t;return!((t=this.monacoTS)!=null&&t.typescriptDefaults)||!this.props.runningInstances?(setTimeout(()=>{this.monaco=window.monaco,this.forceUpdate()},200),null):(this.props.triggerPrettier!==this.triggerPrettier&&(this.triggerPrettier=this.props.triggerPrettier,setTimeout(()=>this.doPrettier().catch(e=>console.error("Error formatting code:",e)),50)),m.jsxs("div",{ref:this.monacoDiv,style:{...this.props.style,width:"100%",height:"100%",overflow:"hidden",position:"relative"},children:[this.renderErrorDialog(),!this.state.check&&m.jsx(j,{size:"small",title:p.I18n.t("Check is not active, because javascript adapter is disabled"),style:{bottom:10,right:10,opacity:.5,position:"absolute",zIndex:1,background:"red",color:"white"},color:"secondary",children:m.jsx(R,{})})]}))}}export{tt as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as j,j as V}from"./createSvgIcon-DYs_tNrE.js";function ne(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}const we=j(V.jsx("path",{d:"M9.4 16.6 4.8 12l4.6-4.6L8 6l-6 6 6 6zm5.2 0 4.6-4.6-4.6-4.6L16 6l6 6-6 6z"}),"Code"),he=j(V.jsx("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4z"}),"Refresh");var K={},W={},B={};Object.defineProperty(B,"__esModule",{value:!0});B.StateType=B.Types=void 0;var x;(function(i){i.unknown="unknown",i.airCondition="airCondition",i.blind="blind",i.blindButtons="blindButtons",i.button="button",i.buttonSensor="buttonSensor",i.camera="camera",i.chart="chart",i.cie="cie",i.ct="ct",i.dimmer="dimmer",i.door="door",i.fireAlarm="fireAlarm",i.floodAlarm="floodAlarm",i.gate="gate",i.hue="hue",i.humidity="humidity",i.illuminance="illuminance",i.image="image",i.info="info",i.instance="instance",i.light="light",i.location="location",i.locationOne="locationOne",i.lock="lock",i.media="media",i.motion="motion",i.percentage="percentage",i.rgb="rgb",i.rgbSingle="rgbSingle",i.rgbwSingle="rgbwSingle",i.slider="slider",i.socket="socket",i.temperature="temperature",i.thermostat="thermostat",i.vacuumCleaner="vacuumCleaner",i.volume="volume",i.volumeGroup="volumeGroup",i.warning="warning",i.weatherCurrent="weatherCurrent",i.weatherForecast="weatherForecast",i.window="window",i.windowTilt="windowTilt"})(x||(B.Types=x={}));var Y;(function(i){i.Number="number",i.String="string",i.Boolean="boolean"})(Y||(B.StateType=Y={}));var R={};Object.defineProperty(R,"__esModule",{value:!0});R.checkEnum=z;R.roleOrEnum=L;R.roleOrEnumLight=oe;R.roleOrEnumBlind=ue;R.roleOrEnumGate=se;R.roleOrEnumWindow=de;R.roleOrEnumDoor=fe;R.getEnums=ce;R.getAllStatesInChannel=me;R.getAllStatesInDevice=pe;R.getObjectsBelowId=le;R.getFunctionEnums=ye;R.getParentId=Se;function z(i,r){let a=!1;return i&&i.forEach(l=>{const o=l.lastIndexOf(".");o!==-1&&(l=l.substring(o+1));for(const u in r)if(Object.prototype.hasOwnProperty.call(r,u)&&r[u].find(n=>n.test(l)))return a=!0,!1}),a}function L(i,r,a,l){return i.common.role&&(a!=null&&a.includes(i.common.role))?!0:z(r,l)}const J={en:[/lights?/i,/lamps?/i,/ceilings?/i],de:[/licht(er)?/i,/lampen?/i,/beleuchtung(en)?/i],ru:[/свет/i,/ламп[аы]/i,/торшеры?/,/подсветк[аи]/i,/лампочк[аи]/i,/светильники?/i]},X=["switch.light","dimmer","value.dimmer","level.dimmer","sensor.light","state.light"];function oe(i,r){return L(i,r,X,J)}const k={en:[/blinds?/i,/windows?/i,/shutters?/i],de:[/rollladen?/i,/fenstern?/i,/beschattung(en)?/i,/jalousien?/i],ru:[/ставни/i,/рольставни/i,/окна|окно/,/жалюзи/i]},Q=["blind","level.blind","value.blind","action.stop","button.stop","button.stop.blind","button.open.blind","button.close.blind","level.tilt","value.tilt","button.tilt.open","button.tilt.close","button.tilt.stop"];function ue(i,r){return L(i,r,Q,k)}const Z={en:[/gates?/i],de:[/^toren$/i,/^tor$/i],ru:[/ворота/i]},ee=["gate","value.gate","switch.gate","action.stop","button.stop"];function se(i,r){return L(i,r,ee,Z)}const te=["window","state.window","sensor.window","value.window"];function de(i,r){return L(i,r,te,k)}const re={en:[/doors?/i,/gates?/i,/wickets?/i,/entry|entries/i],de:[/^türe?/i,/^tuere?/i,/^tore?$/i,/einfahrt(en)?/i,/pforten?/i],ru:[/двери|дверь/i,/ворота/i,/калитка|калитки/,/въезды?/i,/входы?/i]},ae=["door","state.door","sensor.door"];function fe(i,r){return L(i,r,ae,re)}function ce(){return{door:{roles:ae,words:re},window:{roles:te,words:k},blind:{roles:Q,words:k},gate:{roles:ee,words:Z},light:{roles:X,words:J}}}function me(i,r){const a=[],l=new RegExp(`^${r.replace(/([$^.)([\]{}])/g,"\\$1")}\\.[^.]+$`);return i.forEach(o=>l.test(o)&&a.push(o)),a}function pe(i,r){const a=[],l=new RegExp(`^${r.replace(/([$^.)([\]{}])/g,"\\$1")}\\.[^.]+\\.[^.]+$`);return i.forEach(o=>l.test(o)&&a.push(o)),a}function le(i,r){const a=[];r+=".";let l=0,o=i.length-1,u=-1;for(;l<=o;){const n=Math.floor((l+o)/2);i[n]<r?l=n+1:(u=n,o=n-1)}if(u===-1||u>=i.length)return a;for(let n=u;n<i.length;n++){const s=i[n];if(s===r||s.startsWith(r))a.push(s);else break}return a}function ye(i,r){var a,l,o;const u=[],n=/^enum\.functions\./,s=le(r,"enum");for(const d of s)Object.prototype.hasOwnProperty.call(i,d)&&n.test(d)&&((a=i[d])===null||a===void 0?void 0:a.type)==="enum"&&(!((o=(l=i[d].common)===null||l===void 0?void 0:l.members)===null||o===void 0)&&o.length)&&u.push(d);return u}function Se(i){const r=i.lastIndexOf(".");return r!==-1?i.substring(0,r):i}var F={};Object.defineProperty(F,"__esModule",{value:!0});F.patterns=void 0;const e=B,p=R,c=/^[^.]+\.setting\./,t={working:{role:/^indicator\.working$/,indicator:!0,notSingle:!0,name:"WORKING",required:!1,defaultRole:"indicator.working",defaultType:e.StateType.Boolean},unreach:{role:/^indicator(\.maintenance)?\.unreach$/,indicator:!0,type:e.StateType.Boolean,notSingle:!0,name:"UNREACH",required:!1,defaultRole:"indicator.maintenance.unreach"},lowbat:{role:/^indicator(\.maintenance)?\.(lowbat|battery)$/,indicator:!0,type:e.StateType.Boolean,notSingle:!0,name:"LOWBAT",required:!1,defaultRole:"indicator.maintenance.lowbat"},maintain:{role:/^indicator\.maintenance$/,indicator:!0,type:e.StateType.Boolean,notSingle:!0,name:"MAINTAIN",required:!1,defaultRole:"indicator.maintenance"},error:{role:/^indicator\.error$/,indicator:!0,notSingle:!0,name:"ERROR",required:!1,defaultRole:"indicator.error",defaultType:e.StateType.String},direction:{role:/^indicator\.direction$/,indicator:!0,type:e.StateType.Boolean,notSingle:!0,name:"DIRECTION",required:!1,defaultRole:"indicator.direction"},direction_enum:{role:/^(indicator|value)\.direction$/,type:e.StateType.Number,notSingle:!0,name:"DIRECTION",required:!1,defaultStates:{0:"None",1:"Up/Open",2:"Down/Close",3:"Unknown"},defaultRole:"value.direction"},reachable:{role:/^indicator\.reachable$/,indicator:!0,type:e.StateType.Boolean,notSingle:!0,name:"CONNECTED",required:!1,defaultRole:"indicator.reachable",inverted:!0},battery:{role:/^value\.battery$/,indicator:!1,type:e.StateType.Number,write:!1,name:"BATTERY",required:!1,defaultRole:"value.battery",defaultUnit:"%"}},O={power:{role:/^value\.power$/,indicator:!1,type:e.StateType.Number,write:!1,name:"ELECTRIC_POWER",required:!1,defaultRole:"value.power",defaultUnit:"W"},current:{role:/^value\.current$/,indicator:!1,type:e.StateType.Number,write:!1,name:"CURRENT",required:!1,defaultRole:"value.current",defaultUnit:"mA"},voltage:{role:/^value\.voltage$/,indicator:!1,type:e.StateType.Number,write:!1,name:"VOLTAGE",required:!1,defaultRole:"value.voltage",defaultUnit:"V"},consumption:{role:/^value\.power\.consumption$/,indicator:!1,type:e.StateType.Number,write:!1,name:"CONSUMPTION",required:!1,defaultRole:"value.power.consumption",defaultUnit:"Wh"},frequency:{role:/^value\.frequency$/,indicator:!1,type:e.StateType.Number,write:!1,name:"FREQUENCY",required:!1,defaultRole:"value.frequency",defaultUnit:"Hz"}};F.patterns={chart:{states:[{objectType:"chart",name:"CHART"}],type:e.Types.chart},mediaPlayer:{states:[{role:/^media\.state(\..*)?$/,indicator:!1,type:[e.StateType.Boolean,e.StateType.Number],name:"STATE",required:!0,defaultRole:"media.state"},{role:/^(button|action)\.play(\..*)?$/,indicator:!1,write:!0,type:e.StateType.Boolean,name:"PLAY",required:!1,noSubscribe:!0,defaultRole:"button.play"},{role:/^(button|action)\.pause(\..*)?$/,indicator:!1,write:!0,type:e.StateType.Boolean,name:"PAUSE",required:!1,noSubscribe:!0,defaultRole:"button.pause"},{role:/^(button|action)\.stop(\..*)?$/,indicator:!1,write:!0,type:e.StateType.Boolean,name:"STOP",required:!1,noSubscribe:!0,defaultRole:"button.stop"},{role:/^(button|action)\.next(\..*)?$/,indicator:!1,write:!0,type:e.StateType.Boolean,name:"NEXT",required:!1,noSubscribe:!0,defaultRole:"button.next"},{role:/^(button|action)\.prev(\..*)?$/,indicator:!1,write:!0,type:e.StateType.Boolean,name:"PREV",required:!1,noSubscribe:!0,defaultRole:"button.prev"},{role:/^media\.mode\.shuffle(\..*)?$/,indicator:!1,write:!0,type:e.StateType.Boolean,name:"SHUFFLE",required:!1,defaultRole:"media.mode.shuffle"},{role:/^media\.mode\.repeat(\..*)?$/,indicator:!1,write:!0,type:e.StateType.Number,name:"REPEAT",required:!1,defaultRole:"media.mode.repeat"},{role:/^media\.artist(\..*)?$/,indicator:!1,write:!1,type:e.StateType.String,name:"ARTIST",required:!1,defaultRole:"media.artist"},{role:/^media\.album(\..*)?$/,indicator:!1,write:!1,type:e.StateType.String,name:"ALBUM",required:!1,defaultRole:"media.album"},{role:/^media\.title(\..*)?$/,indicator:!1,write:!1,type:e.StateType.String,name:"TITLE",required:!1,defaultRole:"media.title"},{role:/^media\.cover(\.big)?$/,indicator:!1,write:!1,type:e.StateType.String,name:"COVER",required:!1,notSingle:!0,defaultRole:"media.cover"},{role:/^media\.cover(\..*)$/,indicator:!1,write:!1,type:e.StateType.String,name:"COVER",required:!1,notSingle:!0},{role:/^media\.duration(\..*)?$/,indicator:!1,write:!1,type:e.StateType.Number,name:"DURATION",required:!1,defaultRole:"media.duration",defaultUnit:"sec"},{role:/^media\.elapsed(\..*)?$/,indicator:!1,type:e.StateType.Number,name:"ELAPSED",required:!1,defaultRole:"media.elapsed",defaultUnit:"sec"},{role:/^media\.seek(\..*)?$/,indicator:!1,write:!0,type:e.StateType.Number,name:"SEEK",required:!1,defaultRole:"media.seek"},{role:/^media\.track(\..*)?$/,indicator:!1,type:e.StateType.String,name:"TRACK",required:!1,defaultRole:"media.track"},{role:/^media\.episode(\..*)?$/,indicator:!1,type:e.StateType.String,name:"EPISODE",required:!1,defaultRole:"media.episode"},{role:/^media\.season(\..*)?$/,indicator:!1,type:e.StateType.String,name:"SEASON",required:!1,defaultRole:"media.season"},{role:/^level(\.volume)?$/,indicator:!1,type:e.StateType.Number,min:e.StateType.Number,max:e.StateType.Number,write:!0,name:"VOLUME",required:!1,notSingle:!0,defaultRole:"level.volume",defaultUnit:"%"},{role:/^value(\.volume)?$/,indicator:!1,type:e.StateType.Number,min:e.StateType.Number,max:e.StateType.Number,write:!1,name:"VOLUME_ACTUAL",required:!1,notSingle:!0,defaultRole:"value.volume",defaultUnit:"%"},{role:/^media(\.mute)?$/,indicator:!1,type:e.StateType.Boolean,write:!0,name:"MUTE",required:!1,notSingle:!0,defaultRole:"media.mute"},{role:/^media\.player\.name$/,indicator:!1,type:e.StateType.String,write:!1,name:"PLAYER_NAME",required:!1,notSingle:!0,defaultRole:"media.player.name"},{role:/^media\.player\.type/,indicator:!1,type:e.StateType.String,write:!1,name:"PLAYER_TYPE",required:!1,notSingle:!0,defaultRole:"media.player.type"},{stateName:/\.(paused|playerState)$/,indicator:!1,name:"IGNORE",required:!1,multiple:!0,noSubscribe:!0},t.reachable,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.media},weatherForecast:{states:[{role:/^weather\.icon(\.forecast\.0)?$/,indicator:!1,type:e.StateType.String,name:"ICON",required:!0,defaultRole:"weather.icon.forecast.0"},{role:/^value\.temperature\.min\.forecast\.0$/,indicator:!1,type:e.StateType.Number,name:"TEMP_MIN",required:!0,defaultRole:"value.temperature.min.forecast.0"},{role:/^value\.temperature\.max\.forecast\.0$/,indicator:!1,type:e.StateType.Number,name:"TEMP_MAX",required:!0,defaultRole:"value.temperature.max.forecast.0"},{role:/^value\.precipitation(\.forecast\.0)?$/,indicator:!1,type:e.StateType.Number,name:"PRECIPITATION_CHANCE",unit:"%",required:!1,defaultRole:"value.precipitation.forecast.0"},{role:/^value\.precipitation(\.forecast\.0)?$/,indicator:!1,type:e.StateType.Number,name:"PRECIPITATION",unit:"mm",required:!1,defaultRole:"value.precipitation.forecast.0"},{role:/^date(\.forecast\.0)?$/,indicator:!1,type:e.StateType.String,name:"DATE",required:!1,defaultRole:"date.forecast.0"},{role:/^dayofweek(\.forecast\.0)?$/,indicator:!1,type:e.StateType.String,name:"DOW",required:!1,defaultRole:"dayofweek.forecast.0"},{role:/^weather\.state(\.forecast\.0)?$/,indicator:!1,type:e.StateType.String,name:"STATE",required:!1,defaultRole:"weather.state.forecast.0"},{role:/^value\.temperature(\.forecast\.0)?$/,indicator:!1,type:e.StateType.Number,name:"TEMP",required:!1,defaultRole:"value.temperature.forecast.0"},{role:/^value\.pressure(\.forecast\.0)?$/,indicator:!1,type:e.StateType.Number,name:"PRESSURE",required:!1,defaultRole:"value.pressure.forecast.0"},{role:/^value\.humidity(\.forecast\.0)?$/,indicator:!1,type:e.StateType.Number,name:"HUMIDITY",required:!1,defaultRole:"value.humidity.forecast.0"},{role:/^(?:date|time)\.sunrise(?:\.forecast\.0)?$/,indicator:!1,type:[e.StateType.String,e.StateType.Number],name:"TIME_SUNRISE",required:!1,defaultRole:"date.sunrise"},{role:/^(?:date|time)\.sunset(?:\.forecast\.0)?$/,indicator:!1,type:[e.StateType.String,e.StateType.Number],name:"TIME_SUNSET",required:!1,defaultRole:"date.sunset"},{role:/^value\.temperature\.windchill(\.forecast\.0)?$/,indicator:!1,type:e.StateType.Number,name:"WIND_CHILL",required:!1,defaultRole:"value.temperature.windchill.forecast.0"},{role:/^value\.temperature\.feelslike(\.forecast\.0)?$/,indicator:!1,type:e.StateType.Number,name:"FEELS_LIKE",required:!1,defaultRole:"value.temperature.feelslike.forecast.0"},{role:/^value\.speed\.wind(\.forecast\.0)?$/,indicator:!1,type:e.StateType.Number,name:"WIND_SPEED",required:!1,defaultRole:"value.speed.wind.forecast.0"},{role:/^value\.direction\.wind(\.forecast\.0)?$/,indicator:!1,type:e.StateType.Number,name:"WIND_DIRECTION",required:!1,defaultRole:"value.direction.wind.forecast.0"},{role:/^weather\.direction\.wind(\.forecast\.0)?$/,indicator:!1,type:e.StateType.String,name:"WIND_DIRECTION_STR",required:!1,defaultRole:"weather.direction.wind.forecast.0"},{role:/^weather\.icon\.wind(\.forecast\.0)?$/,indicator:!1,type:e.StateType.String,name:"WIND_ICON",required:!1,defaultRole:"weather.icon.wind.forecast.0"},{role:/^weather\.chart\.url$/,indicator:!1,type:e.StateType.String,name:"HISTORY_CHART",required:!1,noSubscribe:!0,defaultRole:"weather.chart.url"},{role:/^weather\.chart\.url\.forecast$/,indicator:!1,type:e.StateType.String,name:"FORECAST_CHART",required:!1,noSubscribe:!0,defaultRole:"weather.chart.url.forecast"},{role:/^location$/,indicator:!1,type:e.StateType.String,name:"LOCATION",required:!1,defaultRole:"location"},{role:/^weather\.icon\.forecast.(\d+)$/,indicator:!1,type:e.StateType.String,name:"ICON%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0,notSingle:!0},{role:/^value\.temperature\.min\.forecast\.(\d+)$/,indicator:!1,type:e.StateType.Number,name:"TEMP_MIN%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^value\.temperature\.max\.forecast\.(\d+)$/,indicator:!1,type:e.StateType.Number,name:"TEMP_MAX%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^date\.forecast\.(\d+)$/,indicator:!1,type:e.StateType.String,name:"DATE%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^dayofweek\.forecast\.(\d+)$/,indicator:!1,type:e.StateType.String,name:"DOW%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^weather\.state\.forecast\.(\d+)$/,indicator:!1,type:e.StateType.String,name:"STATE%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^value\.temperature\.forecast\.(\d+)$/,indicator:!1,type:e.StateType.Number,name:"TEMP%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^value\.pressure\.forecast\.(\d+)?$/,indicator:!1,type:e.StateType.Number,name:"PRESSURE%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^value\.humidity\.forecast\.(\d+)$/,indicator:!1,type:e.StateType.Number,name:"HUMIDITY%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^value\.humidity\.max\.forecast\.(\d+)$/,indicator:!1,type:e.StateType.Number,name:"HUMIDITY_MAX%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^value\.precipitation\.forecast\.(\d+)$/,indicator:!1,type:e.StateType.Number,unit:"%",name:"PRECIPITATION_CHANCE%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^value\.precipitation\.forecast\.(\d+)$/,indicator:!1,type:e.StateType.Number,unit:"mm",name:"PRECIPITATION%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^value\.speed\.wind\.forecast\.(\d+)$/,indicator:!1,type:e.StateType.Number,name:"WIND_SPEED%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^value\.direction\.wind\.forecast\.(\d+)$/,indicator:!1,type:e.StateType.Number,name:"WIND_DIRECTION%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^weather\.direction\.wind\.forecast\.(\d+)$/,indicator:!1,type:e.StateType.String,name:"WIND_DIRECTION_STR%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^weather\.icon\.wind\.forecast\.(\d+)$/,indicator:!1,type:e.StateType.String,name:"WIND_ICON%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^(?:date|time)\.sunrise(?:\.forecast\.(\d+))?$/,indicator:!1,type:[e.StateType.String,e.StateType.Number],name:"TIME_SUNRISE%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^(?:date|time)\.sunset(?:\.forecast\.(\d+))?$/,indicator:!1,type:[e.StateType.String,e.StateType.Number],name:"TIME_SUNSET%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0}],type:e.Types.weatherForecast},rgb:{states:[{role:/^level\.color\.red$/,indicator:!1,type:e.StateType.Number,write:!0,name:"RED",required:!0,defaultRole:"level.color.red"},{role:/^level\.color\.green$/,indicator:!1,type:e.StateType.Number,write:!0,name:"GREEN",required:!0,defaultRole:"level.color.green"},{role:/^level\.color\.blue$/,indicator:!1,type:e.StateType.Number,write:!0,name:"BLUE",required:!0,defaultRole:"level.color.blue"},{role:/^level\.color\.white$/,indicator:!1,type:e.StateType.Number,write:!0,name:"WHITE",required:!1,defaultRole:"level.color.white"},{role:/^level\.dimmer$/,indicator:!1,type:e.StateType.Number,write:!0,name:"DIMMER",required:!1,defaultRole:"level.dimmer",defaultUnit:"%"},{role:/^level\.brightness$/,indicator:!1,type:e.StateType.Number,write:!0,name:"BRIGHTNESS",required:!1},{role:/^level\.color\.temperature$/,indicator:!1,type:e.StateType.Number,write:!0,name:"TEMPERATURE",required:!1,defaultRole:"level.color.temperature",defaultUnit:"°K"},{role:/^level\.effect$/,indicator:!1,type:[e.StateType.Number,e.StateType.String],write:!0,statesDefined:!0,name:"EFFECT",required:!1,defaultRole:"level.effect",defaultStates:{0:"None"}},{role:/^switch(\.light)?$|^state$/,indicator:!1,type:e.StateType.Boolean,write:!0,name:"ON",required:!1,defaultRole:"switch.light"},{role:/^(state|switch|sensor)\.light|switch$/,indicator:!1,type:e.StateType.Boolean,write:!1,name:"ON_ACTUAL",required:!1,defaultRole:"sensor.light",ignoreRole:c},{role:/^time\.(span|interval)$/,indicator:!1,type:e.StateType.Number,write:!0,name:"TRANSITION_TIME",required:!1,defaultRole:"time.span",defaultUnit:"ms"},...Object.values(O),t.working,t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.rgb},rgbwSingle:{states:[{role:/^level\.color\.rgbw$/,indicator:!1,type:e.StateType.String,write:!0,name:"RGBW",required:!0,defaultRole:"level.color.rgbw"},{role:/^level\.dimmer$/,indicator:!1,type:e.StateType.Number,write:!0,name:"DIMMER",required:!1,defaultRole:"level.dimmer",defaultUnit:"%"},{role:/^level\.brightness$/,indicator:!1,type:e.StateType.Number,write:!0,name:"BRIGHTNESS",required:!1,defaultUnit:"%"},{role:/^level\.color\.temperature$/,indicator:!1,type:e.StateType.Number,write:!0,name:"TEMPERATURE",required:!1,defaultRole:"level.color.temperature",defaultUnit:"°K"},{role:/^level\.effect$/,indicator:!1,type:[e.StateType.Number,e.StateType.String],write:!0,statesDefined:!0,name:"EFFECT",required:!1,defaultRole:"level.effect",defaultStates:{0:"None"}},{role:/^switch(\.light)?$/,indicator:!1,type:e.StateType.Boolean,write:!0,name:"ON",required:!1,defaultRole:"switch.light"},{role:/^(state|switch|sensor)\.light|switch$/,indicator:!1,type:e.StateType.Boolean,write:!1,name:"ON_ACTUAL",required:!1,defaultRole:"sensor.light",ignoreRole:c},{role:/^time\.(span|interval)$/,indicator:!1,type:e.StateType.Number,write:!0,name:"TRANSITION_TIME",required:!1,defaultRole:"time.span",defaultUnit:"ms"},...Object.values(O),t.working,t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.rgbwSingle},rgbSingle:{states:[{role:/^level\.color\.rgb$/,indicator:!1,type:e.StateType.String,write:!0,name:"RGB",required:!0,defaultRole:"level.color.rgb"},{role:/^level\.dimmer$/,indicator:!1,type:e.StateType.Number,write:!0,name:"DIMMER",required:!1,defaultRole:"level.dimmer",defaultUnit:"%"},{role:/^level\.brightness$/,indicator:!1,type:e.StateType.Number,write:!0,name:"BRIGHTNESS",required:!1,defaultUnit:"%"},{role:/^level\.color\.temperature$/,indicator:!1,type:e.StateType.Number,write:!0,name:"TEMPERATURE",required:!1,defaultRole:"level.color.temperature",defaultUnit:"°K"},{role:/^level\.effect$/,indicator:!1,type:[e.StateType.Number,e.StateType.String],write:!0,statesDefined:!0,name:"EFFECT",required:!1,defaultRole:"level.effect",defaultStates:{0:"None"}},{role:/^switch(\.light)?$/,indicator:!1,type:e.StateType.Boolean,write:!0,name:"ON",required:!1,defaultRole:"switch.light"},{role:/^(state|switch|sensor)\.light|switch$/,indicator:!1,type:e.StateType.Boolean,write:!1,name:"ON_ACTUAL",required:!1,defaultRole:"sensor.light",ignoreRole:c},{role:/^time\.(span|interval)$/,indicator:!1,type:e.StateType.Number,write:!0,name:"TRANSITION_TIME",required:!1,defaultRole:"time.span",defaultUnit:"ms"},...Object.values(O),t.working,t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.rgbSingle},cie:{states:[{role:/^level\.color\.cie$/,indicator:!1,type:e.StateType.String,write:!0,name:"CIE",required:!0,defaultRole:"level.color.cie"},{role:/^level\.dimmer$/,indicator:!1,type:e.StateType.Number,write:!0,name:"DIMMER",required:!1,defaultRole:"level.dimmer",defaultUnit:"%"},{role:/^level\.brightness$/,indicator:!1,type:e.StateType.Number,write:!0,name:"BRIGHTNESS",required:!1,defaultUnit:"%"},{role:/^level\.color\.temperature$/,indicator:!1,type:e.StateType.Number,write:!0,name:"TEMPERATURE",required:!1,defaultRole:"level.color.temperature",defaultUnit:"°K"},{role:/^level\.effect$/,indicator:!1,type:[e.StateType.Number,e.StateType.String],write:!0,statesDefined:!0,name:"EFFECT",required:!1,defaultRole:"level.effect",defaultStates:{0:"None"}},{role:/^switch(\.light)?$/,indicator:!1,type:e.StateType.Boolean,write:!0,name:"ON",required:!1,defaultRole:"switch.light"},{role:/^(state|switch|sensor)\.light|switch$/,indicator:!1,type:e.StateType.Boolean,write:!1,name:"ON_ACTUAL",required:!1,defaultRole:"sensor.light",ignoreRole:c},{role:/^time\.(span|interval)$/,indicator:!1,type:e.StateType.Number,write:!0,name:"TRANSITION_TIME",required:!1,defaultRole:"time.span",defaultUnit:"ms"},...Object.values(O),t.working,t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.cie},hue:{states:[{role:/^level\.color\.hue$/,indicator:!1,type:e.StateType.Number,write:!0,name:"HUE",required:!0,defaultRole:"level.color.hue",defaultUnit:"°"},{role:/^level\.dimmer$/,indicator:!1,type:e.StateType.Number,write:!0,name:"DIMMER",required:!1,searchInParent:!0,defaultRole:"level.dimmer",defaultUnit:"%"},{role:/^level\.brightness$/,indicator:!1,type:e.StateType.Number,write:!0,name:"BRIGHTNESS",required:!1},{role:/^level\.color\.saturation$/,indicator:!1,type:e.StateType.Number,write:!0,name:"SATURATION",required:!1,defaultRole:"level.color.saturation",defaultUnit:"%"},{role:/^level\.color\.temperature$/,indicator:!1,type:e.StateType.Number,write:!0,name:"TEMPERATURE",required:!1,defaultRole:"level.color.temperature",defaultUnit:"°K"},{role:/^level\.effect$/,indicator:!1,type:[e.StateType.Number,e.StateType.String],write:!0,statesDefined:!0,name:"EFFECT",required:!1,defaultRole:"level.effect",defaultStates:{0:"None"}},{role:/^switch(\.light)?$/,indicator:!1,type:e.StateType.Boolean,write:!0,name:"ON",required:!1,defaultRole:"switch.light"},{role:/^(state|switch|sensor)\.light|switch$/,indicator:!1,type:e.StateType.Boolean,write:!1,name:"ON_ACTUAL",required:!1,defaultRole:"sensor.light",ignoreRole:c},{role:/^time\.(span|interval)$/,indicator:!1,type:e.StateType.Number,write:!0,name:"TRANSITION_TIME",required:!1,defaultRole:"time.span",defaultUnit:"ms"},...Object.values(O),t.working,t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.hue},ct:{states:[{role:/^level\.color\.temperature$/,indicator:!1,type:e.StateType.Number,write:!0,name:"TEMPERATURE",required:!0,defaultRole:"level.color.temperature",defaultUnit:"°K"},{role:/^level\.dimmer$/,indicator:!1,type:e.StateType.Number,write:!0,name:"DIMMER",required:!1,defaultRole:"level.dimmer",defaultUnit:"%"},{role:/^level\.brightness$/,indicator:!1,type:e.StateType.Number,write:!0,name:"BRIGHTNESS",required:!1},{role:/^switch(\.light)?$/,indicator:!1,type:e.StateType.Boolean,write:!0,name:"ON",required:!1,defaultRole:"switch.light"},{role:/^(state|switch|sensor)\.light|switch$/,indicator:!1,type:e.StateType.Boolean,write:!1,name:"ON_ACTUAL",required:!1,defaultRole:"sensor.light",ignoreRole:c},{role:/^level\.effect$/,indicator:!1,type:[e.StateType.Number,e.StateType.String],write:!0,statesDefined:!0,name:"EFFECT",required:!1,defaultRole:"level.effect",defaultStates:{0:"None"}},{role:/^time\.(span|interval)$/,indicator:!1,type:e.StateType.Number,write:!0,name:"TRANSITION_TIME",required:!1,defaultRole:"time.span",defaultUnit:"ms"},...Object.values(O),t.working,t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.ct},warning:{states:[{role:/^value\.warning$/,indicator:!1,name:"LEVEL",required:!0,defaultRole:"value.warning"},{role:/^weather\.title\.short$/,indicator:!1,type:e.StateType.String,name:"TITLE",required:!1,defaultRole:"weather.title.short"},{role:/^weather\.title$/,indicator:!1,type:e.StateType.String,name:"INFO",required:!1,defaultRole:"weather.title"},{role:/^date\.start$/,indicator:!1,type:e.StateType.String,name:"START",required:!1,defaultRole:"date.start"},{role:/^date\.end$/,indicator:!1,type:e.StateType.String,name:"END",required:!1,defaultRole:"date.end"},{role:/^date$/,indicator:!1,type:e.StateType.String,name:"START",required:!1},{role:/^weather\.chart\.url/,indicator:!1,type:e.StateType.String,name:"ICON",required:!1,defaultRole:"weather.chart.url"},{role:/^weather\.state$/,indicator:!1,type:e.StateType.String,name:"DESC",required:!1,noSubscribe:!0,defaultRole:"weather.state"}],type:e.Types.warning},airCondition:{states:[{role:/temperature(\..*)?$/,indicator:!1,write:!0,type:e.StateType.Number,name:"SET",required:!0,defaultRole:"level.temperature",defaultUnit:"°C",ignoreRole:c},{role:/(level\.mode\.)?airconditioner$/,indicator:!1,write:!0,type:e.StateType.Number,searchInParent:!0,name:"MODE",required:!0,defaultRole:"level.mode.airconditioner",defaultStates:{0:"AUTO",3:"COOL",4:"DRY",5:"ECO",6:"FAN_ONLY",7:"HEAT",8:"OFF"},ignoreRole:c},{role:/(speed|mode)\.fan$/,indicator:!1,write:!0,type:e.StateType.Number,name:"SPEED",required:!1,defaultRole:"level.mode.fan",defaultStates:{0:"AUTO",1:"HIGH",2:"LOW",3:"MEDIUM",4:"QUIET",5:"TURBO"},ignoreRole:c},{role:/^switch(\.power)?$/,indicator:!1,write:!0,type:[e.StateType.Boolean,e.StateType.Number],searchInParent:!0,name:"POWER",required:!1,defaultRole:"switch.power"},{role:/temperature(\..*)?$/,indicator:!1,write:!1,type:e.StateType.Number,searchInParent:!0,name:"ACTUAL",required:!1,defaultRole:"value.temperature",defaultUnit:"°C",ignoreRole:c},{role:/humidity(\..*)?$/,indicator:!1,write:!1,type:e.StateType.Number,searchInParent:!0,name:"HUMIDITY",required:!1,defaultRole:"value.humidity",defaultUnit:"%",ignoreRole:c},{role:/^switch\.boost(\..*)?$/,indicator:!1,write:!0,type:[e.StateType.Boolean,e.StateType.Number],searchInParent:!0,name:"BOOST",required:!1,defaultRole:"switch.boost"},{role:/swing$/,indicator:!1,write:!0,type:e.StateType.Number,searchInParent:!0,name:"SWING",required:!1,defaultRole:"level.mode.swing",defaultStates:{0:"AUTO",1:"HORIZONTAL",2:"STATIONARY",3:"VERTICAL"},ignoreRole:c},{role:/swing$/,indicator:!1,write:!0,type:e.StateType.Boolean,searchInParent:!0,name:"SWING",required:!1,defaultRole:"switch.mode.swing",ignoreRole:c},...Object.values(O),t.unreach,t.maintain,t.error],type:e.Types.airCondition},thermostat:{states:[{role:/temperature(\..*)?$/,indicator:!1,write:!0,type:e.StateType.Number,name:"SET",required:!0,defaultRole:"level.temperature",defaultUnit:"°C",ignoreRole:c},{role:/temperature(\..*)?$/,indicator:!1,write:!1,type:e.StateType.Number,searchInParent:!0,name:"ACTUAL",required:!1,defaultRole:"value.temperature",defaultUnit:"°C",ignoreRole:c},{role:/humidity(\..*)?$/,indicator:!1,write:!1,type:e.StateType.Number,searchInParent:!0,name:"HUMIDITY",required:!1,defaultRole:"value.humidity",defaultUnit:"%",ignoreRole:c},{role:/^switch(\.mode)?\.boost(\..*)?$/,indicator:!1,write:!0,type:[e.StateType.Boolean,e.StateType.Number],searchInParent:!0,name:"BOOST",required:!1,defaultRole:"switch.mode.boost"},{role:/^switch(\.power)?$/,indicator:!1,write:!0,type:[e.StateType.Boolean,e.StateType.Number],searchInParent:!0,name:"POWER",required:!1,defaultRole:"switch.power"},{role:/^switch(\.mode)?\.party$/,indicator:!1,write:!0,type:[e.StateType.Boolean,e.StateType.Number],searchInParent:!0,name:"PARTY",required:!1,defaultRole:"switch.mode.party"},{role:/^level(\.mode)?\.thermostat$/,indicator:!1,write:!0,type:e.StateType.Number,searchInParent:!0,name:"MODE",required:!1,defaultRole:"level.mode.thermostat",defaultStates:{0:"AUTO",1:"MANUAL"}},t.working,t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.thermostat},vacuumCleaner:{states:[{role:/^switch\.power$/,indicator:!1,write:!0,type:[e.StateType.Boolean,e.StateType.Number],searchInParent:!0,name:"POWER",required:!0,defaultRole:"switch.power"},{role:/mode\.cleanup$/,indicator:!1,write:!0,type:e.StateType.Number,searchInParent:!0,name:"MODE",required:!0,defaultRole:"level.mode.cleanup",defaultStates:{0:"AUTO",1:"NORMAL",2:"QUIET",3:"ECO",4:"EXPRESS"},ignoreRole:c},{role:/vacuum\.map\.base64$/,indicator:!1,write:!1,type:e.StateType.String,searchInParent:!0,name:"MAP_BASE64",required:!1,defaultRole:"vacuum.map.base64",ignoreRole:c},{role:/vacuum\.map\.url$/,indicator:!1,write:!1,type:e.StateType.String,searchInParent:!0,name:"MAP_URL",required:!1,ignoreRole:c},{role:/mode\.work$/,indicator:!1,write:!0,type:e.StateType.Number,searchInParent:!0,name:"WORK_MODE",required:!1,defaultRole:"level.mode.work",defaultStates:{0:"AUTO",1:"FAST",2:"MEDIUM",3:"SLOW",4:"TURBO"},ignoreRole:c},{role:/^value\.water$/,indicator:!1,write:!1,type:e.StateType.Number,searchInParent:!0,unit:"%",name:"WATER",required:!1,defaultRole:"value.water",defaultUnit:"%"},{role:/^value\.waste$/,indicator:!1,write:!1,type:e.StateType.Number,searchInParent:!0,unit:"%",name:"WASTE",required:!1,defaultRole:"value.waste",defaultUnit:"%"},{role:/^value\.battery$/,indicator:!1,write:!1,type:e.StateType.Number,searchInParent:!0,unit:"%",name:"BATTERY",required:!1,defaultRole:"value.battery",defaultUnit:"%"},{role:/^value\.state$/,indicator:!1,write:!1,type:[e.StateType.Number,e.StateType.String],searchInParent:!0,name:"STATE",required:!1,defaultRole:"value.state"},{role:/^switch\.pause$/,indicator:!1,write:!0,type:e.StateType.Boolean,searchInParent:!0,name:"PAUSE",required:!1,defaultRole:"switch.pause"},{role:/^indicator(\.maintenance)?\.waste$|^indicator(\.alarm)?\.waste/,indicator:!0,type:e.StateType.Boolean,searchInParent:!0,name:"WASTE_ALARM",required:!1,defaultRole:"indicator.maintenance.waste"},{role:/^indicator(\.maintenance)?\.water$|^indicator(\.alarm)?\.water/,indicator:!0,type:e.StateType.Boolean,searchInParent:!0,name:"WATER_ALARM",required:!1,defaultRole:"indicator.maintenance.water"},{role:/^value(\.usage)?\.filter/,indicator:!0,type:e.StateType.Number,searchInParent:!0,name:"FILTER",required:!1,defaultRole:"value.usage.filter",defaultUnit:"%"},{role:/^value(\.usage)?\.brush/,indicator:!0,type:e.StateType.Number,searchInParent:!0,name:"BRUSH",required:!1,defaultRole:"value.usage.brush",defaultUnit:"%"},{role:/^value(\.usage)?\.sensors/,indicator:!0,type:e.StateType.Number,searchInParent:!0,name:"SENSORS",required:!1,defaultRole:"value.usage.sensors",defaultUnit:"%"},{role:/^value(\.usage)?\.brush\.side/,indicator:!0,type:e.StateType.Number,searchInParent:!0,name:"SIDE_BRUSH",required:!1,defaultRole:"value.usage.brush.side",defaultUnit:"%"},t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.vacuumCleaner},blinds:{states:[{role:/^level(\.blind)?$/,indicator:!1,type:e.StateType.Number,write:!0,enums:p.roleOrEnumBlind,name:"SET",required:!0,defaultRole:"level.blind",defaultUnit:"%"},{role:/^value(\.blind)?$/,indicator:!1,type:e.StateType.Number,enums:p.roleOrEnumBlind,name:"ACTUAL",required:!1,defaultRole:"value.blind",defaultUnit:"%"},{role:/^(button|action)\.stop(\.blind)?$/,indicator:!1,type:e.StateType.Boolean,write:!0,enums:p.roleOrEnumBlind,name:"STOP",required:!1,noSubscribe:!0,defaultRole:"button.stop.blind"},{role:/^(button|action)\.open(\.blind)?$/,indicator:!1,type:e.StateType.Boolean,write:!0,enums:p.roleOrEnumBlind,name:"OPEN",required:!1,noSubscribe:!0,defaultRole:"button.open.blind"},{role:/^(button|action)\.close(\.blind)?$/,indicator:!1,type:e.StateType.Boolean,write:!0,enums:p.roleOrEnumBlind,name:"CLOSE",required:!1,noSubscribe:!0,defaultRole:"button.close.blind"},{role:/^level(\.open)?\.tilt$/,indicator:!1,type:e.StateType.Number,write:!0,enums:p.roleOrEnumBlind,name:"TILT_SET",required:!1,defaultRole:"level.tilt"},{role:/^value(\.open)?\.tilt$/,indicator:!1,type:e.StateType.Number,enums:p.roleOrEnumBlind,name:"TILT_ACTUAL",required:!1,defaultRole:"value.tilt"},{role:/^(button|action)\.stop\.tilt$/,indicator:!1,type:e.StateType.Boolean,write:!0,enums:p.roleOrEnumBlind,name:"TILT_STOP",required:!1,noSubscribe:!0,defaultRole:"button.stop.tilt"},{role:/^(button|action)\.open\.tilt$/,indicator:!1,type:e.StateType.Boolean,write:!0,enums:p.roleOrEnumBlind,name:"TILT_OPEN",required:!1,noSubscribe:!0,defaultRole:"button.open.tilt"},{role:/^(button|action)\.close\.tilt$/,indicator:!1,type:e.StateType.Boolean,write:!0,enums:p.roleOrEnumBlind,name:"TILT_CLOSE",required:!1,noSubscribe:!0,defaultRole:"button.close.tilt"},t.direction,t.direction_enum,t.working,t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.blind},blindButtons:{states:[{role:/^(button|action)\.stop(\.blind)?$/,indicator:!1,type:e.StateType.Boolean,write:!0,enums:p.roleOrEnumBlind,name:"STOP",required:!0,noSubscribe:!0,defaultRole:"button.stop.blind"},{role:/^(button|action)\.open(\.blind)?$/,indicator:!1,type:e.StateType.Boolean,write:!0,enums:p.roleOrEnumBlind,name:"OPEN",required:!0,noSubscribe:!0,defaultRole:"button.open.blind"},{role:/^(button|action)\.close(\.blind)?$/,indicator:!1,type:e.StateType.Boolean,write:!0,enums:p.roleOrEnumBlind,name:"CLOSE",required:!0,noSubscribe:!0,defaultRole:"button.close.blind"},{role:/^level\.tilt$/,indicator:!1,type:e.StateType.Number,write:!0,enums:p.roleOrEnumBlind,name:"TILT_SET",required:!1,defaultRole:"level.tilt"},{role:/^value\.tilt$/,indicator:!1,type:e.StateType.Number,enums:p.roleOrEnumBlind,name:"TILT_ACTUAL",required:!1,defaultRole:"value.tilt"},{role:/^(button|action)\.stop\.tilt$/,indicator:!1,type:e.StateType.Boolean,write:!0,enums:p.roleOrEnumBlind,name:"TILT_STOP",required:!1,noSubscribe:!0,defaultRole:"button.stop.tilt"},{role:/^(button|action)\.open\.tilt$/,indicator:!1,type:e.StateType.Boolean,write:!0,enums:p.roleOrEnumBlind,name:"TILT_OPEN",required:!1,noSubscribe:!0,defaultRole:"button.open.tilt"},{role:/^(button|action)\.close\.tilt$/,indicator:!1,type:e.StateType.Boolean,write:!0,enums:p.roleOrEnumBlind,name:"TILT_CLOSE",required:!1,noSubscribe:!0,defaultRole:"button.close.tilt"},t.direction,t.direction_enum,t.working,t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.blindButtons},gate:{states:[{role:/^switch(\.gate)?$/,indicator:!1,type:e.StateType.Boolean,write:!0,enums:p.roleOrEnumGate,name:"SET",required:!0,defaultRole:"switch.gate"},{role:/^value(\.(position|gate))?$/,indicator:!1,type:e.StateType.Number,enums:p.roleOrEnumGate,name:"ACTUAL",required:!1,defaultRole:"value.blind",defaultUnit:"%",ignoreRole:c},{role:/^(button|action)\.stop$/,indicator:!1,type:e.StateType.Boolean,write:!0,enums:p.roleOrEnumGate,name:"STOP",required:!1,noSubscribe:!0,defaultRole:"button.stop"},t.direction,t.direction_enum,t.working,t.unreach,t.maintain,t.error],type:e.Types.gate},weatherCurrent:{states:[{role:/^value(\.temperature)?$/,indicator:!1,type:e.StateType.Number,name:"ACTUAL",required:!0,defaultRole:"value.temperature",defaultUnit:"°C"},{role:/^weather\.icon$/,indicator:!1,name:"ICON",required:!0,defaultRole:"weather.icon"},{role:/^value\.precipitation\.chance$/,indicator:!1,type:e.StateType.Number,name:"PRECIPITATION_CHANCE",defaultRole:"value.precipitation.chance",defaultUnit:"%"},{role:/^value\.precipitation\.type$/,indicator:!1,type:e.StateType.Number,name:"PRECIPITATION_TYPE",defaultRole:"value.precipitation.type",defaultStates:{0:"NO",1:"RAIN",2:"SNOW",3:"HAIL"}},{role:/^value\.pressure$/,indicator:!1,type:e.StateType.Number,name:"PRESSURE",defaultRole:"value.pressure",defaultUnit:"mbar"},{role:/^value\.pressure\.tendency$/,indicator:!1,type:e.StateType.String,name:"PRESSURE_TENDENCY",defaultRole:"value.pressure.tendency"},{role:/^value\.temperature\.windchill$/,indicator:!1,type:e.StateType.Number,name:"REAL_FEEL_TEMPERATURE",defaultRole:"value.temperature.windchill",defaultUnit:"°C"},{role:/^value\.humidity$/,indicator:!1,type:e.StateType.Number,name:"HUMIDITY",defaultRole:"value.humidity",defaultUnit:"%"},{role:/^value\.uv$/,indicator:!1,type:e.StateType.Number,name:"UV",defaultRole:"value.uv"},{role:/^weather\.state$/,indicator:!1,type:e.StateType.String,name:"WEATHER",defaultRole:"weather.state"},{role:/^value\.direction\.wind$/,indicator:!1,type:e.StateType.String,name:"WIND_DIRECTION",defaultRole:"value.direction.wind",defaultUnit:"°"},{role:/^value\.speed\.wind\.gust$/,indicator:!1,type:e.StateType.Number,name:"WIND_GUST",defaultRole:"value.speed.wind.gust",defaultUnit:"km/h"},{role:/^value\.speed\.wind$/,indicator:!1,type:e.StateType.Number,name:"WIND_SPEED",defaultRole:"value.speed.wind$",defaultUnit:"km/h"},t.lowbat,t.unreach,t.maintain,t.error,t.battery],type:e.Types.weatherCurrent},camera:{states:[{role:/^link\.camera(\.\w+)?$/,indicator:!1,type:e.StateType.String,name:"URL",required:!0,defaultRole:"link.camera"},{role:/^switch(\.camera)?\.autofocus$/,indicator:!1,type:e.StateType.Boolean,write:!0,name:"AUTOFOCUS",required:!1,defaultRole:"switch.camera.autofocus"},{role:/^switch(\.camera)?\.autowhitebalance$/,indicator:!1,type:e.StateType.Boolean,write:!0,name:"AUTOWHITEBALANCE",required:!1,defaultRole:"switch.camera.autowhitebalance"},{role:/^switch(\.camera)?\.brightness$/,indicator:!1,type:e.StateType.Boolean,write:!0,name:"BRIGHTNESS",required:!1,defaultRole:"switch.camera.brightness"},{role:/^switch(\.camera)?\.nightmode$/,indicator:!1,type:e.StateType.Boolean,write:!0,name:"NIGHTMODE",required:!1,defaultRole:"switch.camera.nightmode"},{role:/^level(\.camera)?\.position$|^level(\.camera)?(\.ptz)$/,indicator:!1,type:e.StateType.Number,write:!0,name:"PTZ",required:!1,defaultRole:"level.camera.position"},t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.camera,enumRequired:!1},lock:{states:[{role:/^switch\.lock$/,indicator:!1,type:e.StateType.Boolean,write:!0,name:"SET",required:!0,defaultRole:"switch.lock"},{role:/^state$/,indicator:!1,type:e.StateType.Boolean,write:!1,name:"ACTUAL",required:!1,defaultRole:"state"},{indicator:!1,type:e.StateType.Boolean,write:!0,read:!1,name:"OPEN",required:!1,noSubscribe:!0,defaultRole:"button",ignoreRole:c},{role:/^(state|sensor)(\.door)?$/,indicator:!1,type:e.StateType.Boolean,write:!1,name:"DOOR_STATE",required:!1,defaultRole:"sensor.door",ignoreRole:c},t.direction,t.direction_enum,t.working,t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.lock},motion:{states:[{role:/^(state\.)?motion$|^sensor\.motion$/,indicator:!1,type:e.StateType.Boolean,name:"ACTUAL",required:!0,defaultRole:"sensor.motion",ignoreRole:c},{role:/brightness$/,indicator:!1,type:e.StateType.Number,name:"SECOND",required:!1,defaultRole:"value.brightness",defaultUnit:"lux",ignoreRole:c},t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.motion},window:{states:[{role:/^(state|sensor)(\.window)?/,indicator:!1,type:e.StateType.Boolean,enums:p.roleOrEnumWindow,write:!1,name:"ACTUAL",required:!0,defaultRole:"sensor.window",ignoreRole:c},t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.window},windowTilt:{states:[{role:/^state$|^value(\.window)?$/,indicator:!1,type:e.StateType.Number,write:!1,enums:p.roleOrEnumWindow,name:"ACTUAL",required:!0,defaultRole:"value.window"},t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.windowTilt},fireAlarm:{states:[{role:/^(state|sensor|indicator)(\.alarm)?\.fire$/,indicator:!1,type:e.StateType.Boolean,name:"ACTUAL",required:!0,defaultRole:"sensor.alarm.fire",defaultChannelRole:"sensor.alarm.fire"},t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.fireAlarm,enumRequired:!1},floodAlarm:{states:[{role:/^(state|sensor|indicator)(\.alarm)?\.flood$/,indicator:!1,type:e.StateType.Boolean,name:"ACTUAL",required:!0,defaultRole:"sensor.alarm.flood",defaultChannelRole:"sensor.alarm.flood"},t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.floodAlarm},door:{states:[{role:/^(state|sensor)(\.door)?/,indicator:!1,type:e.StateType.Boolean,write:!1,enums:p.roleOrEnumDoor,name:"ACTUAL",required:!0,defaultRole:"sensor.door"},t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.door},dimmer:{states:[{role:/^level(\.dimmer)?$|^level\.brightness$/,indicator:!1,type:e.StateType.Number,write:!0,enums:p.roleOrEnumLight,name:"SET",required:!0,defaultRole:"level.dimmer",ignoreRole:/^level\.dimspeed$/,defaultUnit:"%"},{role:/^value(\.dimmer)?$/,indicator:!1,type:e.StateType.Number,write:!1,enums:p.roleOrEnumLight,name:"ACTUAL",required:!1,defaultRole:"value.dimmer",defaultUnit:"%"},{role:/^switch(\.light)?$|^state$/,indicator:!1,type:e.StateType.Boolean,write:!0,enums:p.roleOrEnumLight,name:"ON_SET",required:!1,defaultRole:"switch.light"},{role:/^level\.effect$/,indicator:!1,type:[e.StateType.Number,e.StateType.String],write:!0,statesDefined:!0,name:"EFFECT",required:!1,defaultRole:"level.effect",defaultStates:{0:"None"}},{role:/^(state|switch|sensor)\.light|switch$/,indicator:!1,type:e.StateType.Boolean,write:!1,enums:p.roleOrEnumLight,name:"ON_ACTUAL",required:!1,defaultRole:"sensor.light",ignoreRole:c},{role:/^time\.(span|interval)$/,indicator:!1,type:e.StateType.Number,write:!0,enums:p.roleOrEnumLight,name:"TRANSITION_TIME",required:!1,defaultRole:"time.span",defaultUnit:"ms"},...Object.values(O),t.working,t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.dimmer},light:{states:[{role:/^switch(\.light)?$|^state$/,enums:p.roleOrEnumLight,indicator:!1,type:e.StateType.Boolean,write:!0,name:"SET",required:!0,defaultRole:"switch.light"},{role:/^(state|switch|sensor)\.light|switch$/,indicator:!1,type:e.StateType.Boolean,write:!1,enums:p.roleOrEnumLight,name:"ON_ACTUAL",required:!1,defaultRole:"sensor.light",ignoreRole:c},{role:/^level\.effect$/,indicator:!1,type:[e.StateType.Number,e.StateType.String],write:!0,statesDefined:!0,name:"EFFECT",required:!1,defaultRole:"level.effect",defaultStates:{0:"None"}},...Object.values(O),t.working,t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.light},volume:{states:[{role:/^level\.volume$/,indicator:!1,type:e.StateType.Number,min:e.StateType.Number,max:e.StateType.Number,write:!0,name:"SET",required:!0,defaultRole:"level.volume",defaultUnit:"%"},{role:/^value\.volume$/,indicator:!1,type:e.StateType.Number,min:e.StateType.Number,max:e.StateType.Number,write:!1,name:"ACTUAL",required:!1,defaultRole:"value.volume",defaultUnit:"%"},{role:/^media\.mute$/,indicator:!1,type:e.StateType.Boolean,write:!0,name:"MUTE",required:!1,defaultRole:"media.mute"},t.working,t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.volume},locationOne:{states:[{role:/^value\.gps$/,indicator:!1,type:e.StateType.String,write:!1,name:"GPS",required:!0,defaultRole:"value.gps"},{role:/^value\.gps\.elevation$/,indicator:!1,type:e.StateType.Number,write:!1,name:"ELEVATION",required:!1,defaultRole:"value.gps.elevation"},{role:/^value(\.gps)?\.radius$/,indicator:!1,type:e.StateType.Number,write:!1,name:"RADIUS",required:!1,defaultRole:"value.gps.radius"},{role:/^value(\.gps)?\.accuracy$/,indicator:!1,type:e.StateType.Number,write:!1,name:"ACCURACY",required:!1,defaultRole:"value.gps.accuracy"},t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.locationOne},location:{states:[{role:/^value(\.gps)?\.longitude$/,indicator:!1,type:e.StateType.Number,write:!1,name:"LONGITUDE",required:!0,defaultRole:"value.gps.longitude",defaultUnit:"°"},{role:/^value(\.gps)?\.latitude$/,indicator:!1,type:e.StateType.Number,write:!1,name:"LATITUDE",required:!0,defaultRole:"value.gps.latitude",defaultUnit:"°"},{role:/^value(\.gps)?\.elevation$/,indicator:!1,type:e.StateType.Number,write:!1,name:"ELEVATION",required:!1,defaultRole:"value.gps.elevation"},{role:/^value(\.gps)?\.radius$/,indicator:!1,type:e.StateType.Number,write:!1,name:"RADIUS",required:!1,defaultRole:"value.gps.radius"},{role:/^value(\.gps)?\.accuracy$/,indicator:!1,type:e.StateType.Number,write:!1,name:"ACCURACY",required:!1,defaultRole:"value.gps.accuracy"},t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.location},volumeGroup:{states:[{role:/^level\.volume\.group?$/,indicator:!1,type:e.StateType.Number,min:e.StateType.Number,max:e.StateType.Number,write:!0,name:"SET",required:!0,defaultRole:"level.volume.group",defaultUnit:"%"},{role:/^value\.volume\.group$/,indicator:!1,type:e.StateType.Number,min:e.StateType.Number,max:e.StateType.Number,write:!1,name:"ACTUAL",required:!1,defaultRole:"value.volume.group",defaultUnit:"%"},{role:/^media\.mute\.group$/,indicator:!1,type:e.StateType.Boolean,write:!0,name:"MUTE",required:!1,defaultRole:"media.mute.group"},t.working,t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.volumeGroup},percentage:{states:[{role:/^level(\..*)?$/,indicator:!1,type:e.StateType.Number,write:!0,unit:"%",name:"SET",required:!0,defaultRole:"level",defaultUnit:"%",ignoreRole:c},{role:/^value(\..*)?$/,indicator:!1,type:e.StateType.Number,write:!1,name:"ACTUAL",required:!1,defaultRole:"value",defaultUnit:"%",ignoreRole:c},t.working,t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.percentage},levelSlider:{states:[{role:/^level(\..*)?$/,indicator:!1,type:e.StateType.Number,min:e.StateType.Number,max:e.StateType.Number,write:!0,name:"SET",required:!0,defaultRole:"level",defaultUnit:"%",ignoreRole:c},{role:/^value(\..*)?$/,indicator:!1,type:e.StateType.Number,min:e.StateType.Number,max:e.StateType.Number,write:!1,name:"ACTUAL",required:!1,defaultRole:"value",defaultUnit:"%",ignoreRole:c},t.working,t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.slider},socket:{states:[{role:/^switch(\.active)?$|^state$/,indicator:!1,type:e.StateType.Boolean,write:!0,name:"SET",required:!0,defaultRole:"switch"},{role:/^state(\.active)?$|^sensor.switch$/,indicator:!1,type:e.StateType.Boolean,write:!1,name:"ACTUAL",required:!1,defaultRole:"sensor.switch"},...Object.values(O),t.working,t.unreach,t.lowbat,t.maintain,t.error],type:e.Types.socket},button:{states:[{role:/^(button|action)(\.[.\w]+)?$/,indicator:!1,type:e.StateType.Boolean,read:!1,write:!0,name:"SET",required:!0,noSubscribe:!0,defaultRole:"button"},t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.button},buttonSensor:{states:[{role:/^button(\.[.\w]+)?$/,indicator:!1,type:e.StateType.Boolean,read:!0,write:!1,name:"PRESS",required:!0,defaultRole:"button.press"},{role:/^button\.long/,indicator:!1,type:e.StateType.Boolean,read:!0,write:!1,name:"PRESS_LONG",required:!1,defaultRole:"button.long"},t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.buttonSensor},temperature:{states:[{role:/\.temperature$/,indicator:!1,write:!1,type:e.StateType.Number,name:"ACTUAL",required:!0,defaultRole:"value.temperature",defaultUnit:"°C"},{role:/\.humidity$/,indicator:!1,write:!1,type:e.StateType.Number,name:"SECOND",required:!1,defaultRole:"value.humidity",defaultUnit:"%"},t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.temperature},humidity:{states:[{role:/\.humidity$/,indicator:!1,write:!1,type:e.StateType.Number,name:"ACTUAL",required:!0,defaultRole:"value.humidity",defaultUnit:"%"},t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.humidity},illuminance:{states:[{role:/\.brightness$/,indicator:!1,write:!1,type:e.StateType.Number,name:"ACTUAL",required:!0,defaultRole:"value.brightness",defaultUnit:"lux"},t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.illuminance},image:{states:[{role:/\.icon$|^icon$|^icon\.|\.icon\.|\.chart\.url\.|\.chart\.url$|^url.icon$/,indicator:!1,write:!1,type:e.StateType.String,name:"URL",defaultRole:"icon",required:!0,ignoreRole:c},t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.image},info:{states:[{indicator:!1,name:"ACTUAL",required:!0,multiple:!0,noDeviceDetection:!0,ignoreRole:/\.inhibit$/,defaultRole:"state"},t.working,t.unreach,t.lowbat,t.maintain,t.error,t.battery],type:e.Types.info}};Object.defineProperty(W,"__esModule",{value:!0});W.ChannelDetector=void 0;const A=B,U=R,_=F;let ie=class N{constructor(){this.enums=null,this.cache={}}_applyPattern(r,a,l,o,u){var n,s;if(!((n=r[a])===null||n===void 0)&&n.common){let d=null;if(l.role&&(d=l.role.test(r[a].common.role||""),d&&l.channelRole)){const S=(0,U.getParentId)(a),w=((s=r[S])===null||s===void 0?void 0:s.common.role)||"";w&&(r[S].type==="channel"||r[S].type==="device")?d=l.channelRole.test(w):d=!1}if(d===!1)return!1;if(l.type){if(typeof l.type=="string"){if(l.type!==r[a].common.type)return!1}else if(Array.isArray(l.type)){let S=!1;for(let w=0;w<l.type.length;w++)if(l.type[w]===r[a].common.type){S=!0;break}if(!S)return!1}}if(l.objectType&&r[a].type!==l.objectType||l.stateName&&!l.stateName.test(a)||l.unit&&l.unit!==r[a].common.unit)return!1;if(l.ignoreRole){const S=r[a].common.role||"";if(S&&l.ignoreRole.test(S))return!1}if(l.indicator===!1&&(r[a].common.role||"").match(/^indicator(\.[.\w]+)?$/))return!1;if(l.state){const S=a.split(".").pop()||"";if(S&&!l.state.test(S))return!1}const v=l.defaultRole&&r[a].common.role===l.defaultRole,T=l.defaultUnit?r[a].common.unit===l.defaultUnit:!1;if(l.min===A.StateType.Number&&typeof r[a].common.min!==A.StateType.Number&&(!T||r[a].common.unit!=="%")||l.max===A.StateType.Number&&typeof r[a].common.max!==A.StateType.Number&&(!T||r[a].common.unit!=="%")||l.statesDefined===!0&&typeof r[a].common.states!="object")return!1;if(!v){if(l.write!==void 0&&l.write!==!!r[a].common.write||l.read!==void 0&&l.read!==(r[a].common.read===void 0?!0:r[a].common.read))return!1;if(typeof l.enums=="function"){const S=this._getEnumsForId(r,a,u);if(!o&&!l.enums(r[a],S||[]))return!1}}return!0}return!1}_getEnumsForId(r,a,l){var o;this.enums||(this.enums=(0,U.getFunctionEnums)(r,l));const u=[];if(this.enums.forEach(n=>{r[n].common.members.includes(a)&&u.push(n)}),!u.length&&((o=r[a])===null||o===void 0?void 0:o.type)==="state"){const n=(0,U.getParentId)(a);r[n]&&(r[n].type==="channel"||r[n].type==="device")&&this.enums.forEach(s=>{r[s].common.members.includes(n)&&u.push(s)})}return u.length?u:null}static copyState(r,a){const l=a||JSON.parse(JSON.stringify(r));return l.original=r.original||r,"enums"in r&&r.enums&&(l.enums=r.enums),"role"in r&&r.role&&(l.role=r.role),"channelRole"in r&&r.channelRole&&(l.channelRole=r.channelRole),l}_testOneState(r){var a,l,o,u,n,s;const d=r.objects,v=r.pattern,T=r.state,S=r.channelStates,w=r.usedIds,g=r.usedInCurrentDevice,$=r.ignoreIndicators,C=r.ignoreEnums,D=r.sortedKeys;let m=r.result,I=!1;for(const y of S)if(!(T.name==="COVER"&&(m!=null&&m.states.find(b=>b.id&&b.name==="COVER")))){if(T.indicator&&$){const f=y.split(".").pop()||"";if(f&&$.includes(f))continue}if(!T.indicator){if(g.includes(y))continue;if(!T.notSingle){if(!r.detectAllPossibleDevices){if(w.includes(y))continue}}}if(this._applyPattern(d,y,T,C,D)){if(m||(m=JSON.parse(JSON.stringify(_.patterns[v])),r.result=m,m==null||m.states.forEach((b,f)=>N.copyState(_.patterns[v].states[f],b))),m.states.find(({id:b})=>b===y))I=!0;else for(const b of m.states)if(b.name===T.name){if(b.id){let f;r.favorId&&(y===r.favorId?f=!0:b.id===r.favorId&&(f=!1));const P=(o=(l=(a=d[b.id])===null||a===void 0?void 0:a.common)===null||l===void 0?void 0:l.role)!==null&&o!==void 0?o:"",h=(s=(n=(u=d[y])===null||u===void 0?void 0:u.common)===null||n===void 0?void 0:n.role)!==null&&s!==void 0?s:"",E=b.defaultRole;if(E&&f===void 0&&(h===E?f=!0:P===E&&(f=!1)),f===void 0){const q=h.split("."),M=q.length,H=P.split("."),G=H.length;h===""||q[0]==="state"&&H[0]!=="state"?f=!1:q[0]!=="state"&&H[0]==="state"||M>G?f=!0:M<G?f=!1:f=q[0]!=="state"}if(!f)break}b.id=y,I=!0;break}if(I&&(T.indicator||g.push(y),T.multiple&&S.length>1)){for(const b of S)if(b!==y&&(T.indicator||!g.includes(b)&&(T.notSingle||!w.includes(b)))&&this._applyPattern(d,b,T,C,D))if(T.indicator||g.push(b),Array.isArray(T)){const f=N.copyState(T[0]);f.id=b,m.states.push(f)}else{const f=N.copyState(T);f.id=b,m.states.push(f)}}}}return I}static findParentChannelOrDevice(r,a,l){if(!r[a])return;const o=a.split("."),u=a;if(r[a].type==="state"&&(o.pop(),a=o.join(".")),o.length<=2)return a;const n=r[a];if((n==null?void 0:n.type)==="device"||l&&(n==null?void 0:n.type)==="channel")return a;if(l)return;o.pop();const s=o.join("."),d=r[s];if(!d)return n?a:u;if(d.type==="device"||o.length<=2)return s;if((n==null?void 0:n.type)==="channel")return a;o.pop();const v=o.join("."),T=r[v];return!T||T.type!=="device"&&T.type!=="channel"?s:v}static getChannelOrDeviceStates(r,a,l,o=!1,u=!1){var n;const s=(n=r[a])===null||n===void 0?void 0:n.type;switch(s){case void 0:return[...(0,U.getObjectsBelowId)(l,a)];case"state":case"channel":case"device":case"folder":if(o&&s!=="device"){const d=N.findParentChannelOrDevice(r,a);return d&&d!==a?[...(0,U.getObjectsBelowId)(l,d)]:[a]}if(s!=="state")return[...(0,U.getObjectsBelowId)(l,a)];if(u){const d=N.findParentChannelOrDevice(r,a,!0);return d&&d!==a?[...(0,U.getObjectsBelowId)(l,d)]:[a]}return[a];default:return[a]}}static patternIsAllowed(r,a,l){if(!r)return!1;if(Array.isArray(r.type)){for(let o=0;o<r.type.length;o++)if(a&&!a.includes(r.type[o])||l&&l.includes(r.type[o]))return!1;return!0}return a&&!a.includes(r.type)?!1:!l||!l.includes(r.type)}static allRequiredStatesFound(r){if(!r.result)return!1;const a=r.result.states;for(let l=0;l<a.length;l++)if(a[l].required&&!a[l].id)return!1;return!0}static cleanState(r,a){var l,o;const u=((o=(l=a[r.id])===null||l===void 0?void 0:l.common)===null||o===void 0?void 0:o.role)||"";if(r.name.includes("%d")&&r.role&&r.id&&u){const n=r.role.exec(u);n&&(r.name=r.name.replace("%d",n[1]))}r.role&&delete r.role,r.enums&&delete r.enums,r.original&&delete r.original}sortTypes(r,a){return a.forEach(([l,o])=>{const u=r.indexOf(l),n=r.indexOf(o);if(u===-1||n===-1)return;const s=r.splice(u,1);r.splice(n,0,...s)}),r}_detectNext(r){var a,l,o,u;const{objects:n,id:s,_usedIdsOptional:d=[],ignoreIndicators:v,prioritizedTypes:T,detectParent:S,detectOnlyChannel:w,allowedTypes:g,excludedTypes:$,_keysOptional:C,detectAllPossibleDevices:D}=r;let{_patternList:m}=r;r._usedIdsOptional=d;const I=N.getChannelOrDeviceStates(n,s,C||[],S,w);if(!(!((a=n[s])===null||a===void 0)&&a.common)&&!I.length)return null;if((l=r._checkedPatterns)!==null&&l!==void 0||(r._checkedPatterns=[]),!m){const f=Object.keys(_.patterns).filter(P=>N.patternIsAllowed(_.patterns[P],g,$));m=T?this.sortTypes(f,T):f,r._patternList=m}const y={objects:n,channelStates:I,usedIds:d,ignoreIndicators:v||[],pattern:"unknown",usedInCurrentDevice:[],state:{},ignoreEnums:!!r.ignoreEnums,sortedKeys:C,favorId:r.detectParent?void 0:s,detectAllPossibleDevices:D},b=(o=n[s])===null||o===void 0?void 0:o.type;for(const f of m){if(r._checkedPatterns.includes(f))continue;r._checkedPatterns.push(f),delete y.result,y.pattern=f,y.usedInCurrentDevice=[];for(const h of _.patterns[f].states){let E=!1;if(y.state=h,this._testOneState(y)&&(E=!0),h.required&&!E){delete y.result;break}}if(!N.allRequiredStatesFound(y))continue;y.usedInCurrentDevice.forEach(h=>d.push(h));let P;if(b!=="device"){const h=(u=N.findParentChannelOrDevice(n,s))!==null&&u!==void 0?u:s;if(n[h]&&(n[h].type==="channel"||n[h].type==="device")){P=(0,U.getObjectsBelowId)(C,h);for(const E of P)y.result.states.forEach((q,M)=>{!q.id&&(q.indicator||q.searchInParent)&&!q.noDeviceDetection&&this._applyPattern(n,E,q.original,!!r.ignoreEnums,y.sortedKeys)&&y.result&&(y.result.states[M].id=E)})}}if(y.result.states.forEach(h=>N.cleanState(h,y.objects)),r.limitTypesToOneOf){for(const h of r.limitTypesToOneOf)if(h.includes(f))for(const E of h)E===f||r._checkedPatterns.includes(E)||r._checkedPatterns.push(E)}return y.result}return null}detect(r){var a;const{objects:l,id:o,ignoreCache:u,detectAllPossibleDevices:n}=r;let{_keysOptional:s,_usedIdsOptional:d}=r;if(!u&&this.cache[o]){const{allowedTypes:S=[],excludedTypes:w=[]}=r;if(!S.length&&!w.length)return this.cache[o];const g=this.cache[o].filter(({type:$})=>S.includes($)&&!w.includes($));if(g.length)return g}s?r._keysOptionalSorted||s.sort():(s=Object.keys(l),s.sort(),r._keysOptional=s),d&&!r.detectParent&&(d=[],r._usedIdsOptional=d),r.ignoreEnums===void 0&&((a=r.allowedTypes)===null||a===void 0?void 0:a.length)===1&&(r.ignoreEnums=!0),n&&(r.excludedTypes||(r.excludedTypes=[]),r.excludedTypes.includes(A.Types.info)||r.excludedTypes.push(A.Types.info)),r._checkedPatterns=[];const v=[];let T;for(;T=this._detectNext(r);)v.push(T),r.detectAllPossibleDevices&&(r._usedIdsOptional=[]);return v.sort((S,w)=>{if(S.type===A.Types.info&&w.type!==A.Types.info)return 1;if(w.type===A.Types.info&&S.type!==A.Types.info)return-1;const g=S.states.find(m=>m.id===o&&m.required)?1:0,$=w.states.find(m=>m.id===o&&m.required)?1:0;if(g!==$)return $-g;if(!g){const m=S.states.find(y=>y.id===o)?1:0,I=w.states.find(y=>y.id===o)?1:0;if(m!==I)return I-m}const C=S.states.filter(m=>m.id).length;return w.states.filter(m=>m.id).length-C}),this.cache[o]=v.length?v:null,this.cache[o]}static getPatterns(){const r={};return Object.keys(_.patterns).forEach(a=>{const l=JSON.parse(JSON.stringify(_.patterns[a]));l.states.forEach((o,u)=>{const n=_.patterns[a].states[u];n.role&&(l.states[u].role=n.role.toString()),n.enums&&(l.states[u].enums=!0)}),r[a]=l}),r}};W.ChannelDetector=ie;ie.getEnums=U.getEnums;(function(i){Object.defineProperty(i,"__esModule",{value:!0}),i.StateType=i.Types=void 0;const r=W;i.default=r.ChannelDetector;var a=B;Object.defineProperty(i,"Types",{enumerable:!0,get:function(){return a.Types}}),Object.defineProperty(i,"StateType",{enumerable:!0,get:function(){return a.StateType}})})(K);const Re=ne(K);export{Re as C,we as I,he as R,K as b};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
const p=/^[a-zA-Z_][a-zA-Z0-9_-]*\.\d+(?:\.[A-Za-z0-9_.\-/:#]+)+$/;function g(e,n){if(!e)return null;const s=Math.max(1,Math.min(n,e.length+1))-1,r=["'",'"',"`"];let i=null,t=-1;for(let u=s-1;u>=0;u--){const f=e[u];if(r.includes(f)&&e[u-1]!=="\\"){let l=0;for(let c=0;c<u;c++)e[c]===f&&e[c-1]!=="\\"&&l++;if(l%2===0){i=f,t=u;break}}}if(i===null||t<0)return null;let a=-1;for(let u=t+1;u<e.length;u++)if(e[u]===i&&e[u-1]!=="\\"){a=u;break}if(a<0||s<t||s>a)return null;const o=e.substring(t+1,a);return p.test(o)?{id:o,startColumn:t+2,endColumn:a+1}:null}function d(e){if(!e)return"";if(typeof e=="string")return e;if(typeof e=="object"){const n=e;return n.en||n.de||Object.values(n)[0]||""}return String(e)}function $(e){if(e==null)return"*null*";if(typeof e=="boolean")return e?"`true`":"`false`";if(typeof e=="number")return`\`${e}\``;if(typeof e=="string")return`\`"${e.length>200?`${e.substring(0,200)}…`:e}"\``;if(typeof e=="object")try{const n=JSON.stringify(e);return n.length>200?`\`${n.substring(0,200)}…\``:`\`${n}\``}catch{return"`<object>`"}return String(e)}function y(e){if(!e)return"";const s=Date.now()-e;if(s<0)return new Date(e).toLocaleString();const r=Math.floor(s/1e3);if(r<60)return`${r}s ago`;const i=Math.floor(r/60);if(i<60)return`${i} min ago`;const t=Math.floor(i/60);if(t<24)return`${t} h ago`;const a=Math.floor(t/24);return a<30?`${a} d ago`:new Date(e).toLocaleDateString()}function b(e,n,s){const r=[],i=(n==null?void 0:n.type)||"unknown";if(r.push(`**\`${e}\`** · *${i}*`),!n)return r.push("","⚠️ Object not found in the object database."),r.join(`
|
|
2
|
-
`);const t=n.common,a=d(t==null?void 0:t.name);a&&r.push(`Name: ${a}`);const o=[];t!=null&&t.type&&o.push(`type \`${t.type}\``),t!=null&&t.role&&o.push(`role \`${t.role}\``),t!=null&&t.unit&&o.push(`unit \`${t.unit}\``),(t==null?void 0:t.min)!==void 0&&o.push(`min \`${t.min}\``),(t==null?void 0:t.max)!==void 0&&o.push(`max \`${t.max}\``),o.length&&r.push(o.join(" · "));const u=[];if(((t==null?void 0:t.read)===!0||(t==null?void 0:t.read)===void 0)&&u.push("read"),(t==null?void 0:t.write)===!0&&u.push("write"),u.length===1&&r.push(`*${u[0]}-only*`),t!=null&&t.states&&typeof t.states=="object"){const f=Object.entries(t.states);if(f.length&&f.length<=8){r.push("","**Values:**");for(const[l,c]of f)r.push(`- \`${l}\` → ${c}`)}else f.length>8&&r.push("",`**Values:** ${f.length} defined`)}if(i==="state")if(r.push(""),s){const f=s.ack?"✓ ack":"✗ not ack",l=y(s.ts);r.push(`**Value:** ${$(s.val)} · ${f}${l?` · ${l}`:""}`),s.from&&r.push(`*from:* \`${s.from}\``)}else r.push("*No current value available.*");return r.join(`
|
|
3
|
-
`)}const w=5e3,h=new Map;async function S(e,n){const s=h.get(n);if(s&&Date.now()-s.fetchedAt<w)return{obj:s.obj,state:s.state};let r=null,i=null;try{r=await e.getObject(n)||null}catch{r=null}if((r==null?void 0:r.type)==="state")try{i=await e.getState(n)||null}catch{i=null}return h.set(n,{obj:r,state:i,fetchedAt:Date.now()}),{obj:r,state:i}}function j(){h.clear()}function A(e,n){const s=[];for(const r of["javascript","typescript"]){const i=e.languages.registerHoverProvider(r,{provideHover:async(t,a)=>{const o=t.getLineContent(a.lineNumber),u=g(o,a.column);if(!u)return null;try{const{obj:f,state:l}=await S(n,u.id),c=b(u.id,f,l);return{range:new e.Range(a.lineNumber,u.startColumn,a.lineNumber,u.endColumn),contents:[{value:c,isTrusted:!1,supportHtml:!1}]}}catch{return null}}});s.push(i)}return{dispose(){s.forEach(r=>{try{r.dispose()}catch{}})}}}export{j as clearStateHoverCache,g as extractIdUnderCursor,b as formatStateHoverMarkdown,A as registerStateHoverProvider};
|