iobroker.javascript
Version:
Rules Engine for ioBroker
2 lines • 2.43 kB
JavaScript
var e=[/getState\s*\(\s*['"`]$/,/setState\s*\(\s*['"`]$/,/setStateChanged\s*\(\s*['"`]$/,/setStateDelayed\s*\(\s*['"`]$/,/existsState\s*\(\s*['"`]$/,/existsObject\s*\(\s*['"`]$/,/getObject\s*\(\s*['"`]$/,/on\s*\(\s*['"`]$/,/once\s*\(\s*['"`]$/,/subscribe\s*\(\s*['"`]$/,/on\s*\(\s*\{\s*id\s*:\s*['"`]$/,/\$\s*\(\s*['"`]$/],t=null,n=null;function r(e,t){return e&&typeof e==`object`?e[t]||e.en||``:e||``}async function i(e){return t||n||(n=(async()=>{let i=window.systemLang||`en`,a=await e.getObjectViewSystem(`state`,``,`香`),o=await e.getObjectViewSystem(`enum`,``,`香`),s={},c={};for(let e of Object.keys(o)){var l;let t=o[e],n=(l=t.common)==null?void 0:l.members;if(!n)continue;let a=r(t.common.name,i);for(let t of n)e.startsWith(`enum.rooms.`)?s[t]=a:e.startsWith(`enum.functions.`)&&(c[t]=a)}let u=[];for(let e of Object.keys(a)){let t=a[e];if(!(t!=null&&t.common))continue;let n=t.common,o=r(n.name,i),l=e.split(`.`),d,f;for(let e=l.length;e>=2;e--){let t=l.slice(0,e).join(`.`);if(!d&&s[t]&&(d=s[t]),!f&&c[t]&&(f=c[t]),d&&f)break}u.push({id:e,name:o,type:n.type,role:n.role,unit:n.unit,room:d,func:f,read:n.read,write:n.write})}return t=u,n=null,u})(),n)}function a(){t=null,n=null}function o(t,n){let r=[];for(let a of[`javascript`,`typescript`]){let o=t.languages.registerCompletionItemProvider(a,{triggerCharacters:[`'`,`"`,"`",`.`],async provideCompletionItems(r,a){let o=r.getLineContent(a.lineNumber).substring(0,a.column-1);if(!e.some(e=>e.test(o)))return;let s=o.match(/['"`]([^'"`]*)$/);if(!s)return;let c=s[1],l=a.column-c.length,u=await i(n),d;if(c){let e=c.toLowerCase();d=u.filter(t=>t.id.toLowerCase().includes(e)||t.name.toLowerCase().includes(e))}else d=u;d=d.slice(0,100);let f={startLineNumber:a.lineNumber,startColumn:l,endLineNumber:a.lineNumber,endColumn:a.column};return{suggestions:d.map(e=>{let n=[];e.name&&n.push(e.name),e.room&&n.push(`Room: ${e.room}`),e.func&&n.push(`Function: ${e.func}`);let r=[];return e.role&&r.push(`Role: ${e.role}`),e.type&&r.push(`Type: ${e.type}`),e.unit&&r.push(`Unit: ${e.unit}`),r.push(`Read: ${e.read===!1?`no`:`yes`}`),r.push(`Write: ${e.write===!1?`no`:`yes`}`),{label:e.id,kind:t.languages.CompletionItemKind.Value,detail:n.join(` | `),documentation:r.join(`
`),insertText:e.id,range:f,filterText:`${e.id} ${e.name}`,sortText:e.id}})}}});r.push(o)}return{dispose:()=>{r.forEach(e=>e.dispose())}}}export{a as clearDatapointCache,o as registerDatapointProvider};