home-assistant-javascript-templates 6.0.0-beta.0 → 6.0.0-beta.1
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 +3 -3
- package/dist/esm/index.d.ts +1 -2
- package/dist/esm/index.js +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -133,7 +133,7 @@ renderTemplate(
|
|
|
133
133
|
This method renders a `JavaScript` template and return its result. It needs a string as a parameter. Inside this string you can use [several objects and methods](#objects-and-methods-available-in-the-templates). It returns whatever the `JavaScript` code returns, because of that it is typed as `any`.
|
|
134
134
|
|
|
135
135
|
>[!NOTE]
|
|
136
|
-
>This method accepts an optional second parameter with an object. In this object it is possible to send a `variables` object, containing extra variables that will be appended to [the global variables](#variables) and a `refs` object, containing extra [refs variables](#refs-variables). The extra `refs` variables will be appended to the global ones, making them available even in templates that weere declared before the call to this method. You need to be aware, that if a ref variable already exists, sending it again in this method will
|
|
136
|
+
>This method accepts an optional second parameter with an object. In this object it is possible to send a `variables` object, containing extra variables that will be appended to [the global variables](#variables) and a `refs` object, containing extra [refs variables](#refs-variables). The extra `refs` variables will be appended to the global ones, making them available even in templates that weere declared before the call to this method. You need to be aware, that if a ref variable already exists, sending it again in this method will override it.
|
|
137
137
|
|
|
138
138
|
#### trackTemplate
|
|
139
139
|
|
|
@@ -155,7 +155,7 @@ If some entity was not reached in the template code because it was inside a cond
|
|
|
155
155
|
This method will return a function. When this function is executed, the tracking of that template/rendering function is removed and subsecuent changes in the entities of the template will not call the `renderingFunction`.
|
|
156
156
|
|
|
157
157
|
>[!NOTE]
|
|
158
|
-
>This method accepts an optional third parameter with an object. In this object it is possible to send a `variables` object, containing extra variables that will be appended to [the global variables](#variables) and a `refs` object, containing extra [refs variables](#refs-variables). The extra `refs` variables will be appended to the global ones, making them available even in templates that weere declared before the call to this method. You need to be aware, that if a ref variable already exists, sending it again in this method will
|
|
158
|
+
>This method accepts an optional third parameter with an object. In this object it is possible to send a `variables` object, containing extra variables that will be appended to [the global variables](#variables) and a `refs` object, containing extra [refs variables](#refs-variables). The extra `refs` variables will be appended to the global ones, making them available even in templates that weere declared before the call to this method. You need to be aware, that if a ref variable already exists, sending it again in this method will override it.
|
|
159
159
|
|
|
160
160
|
#### cleanTracked
|
|
161
161
|
|
|
@@ -508,7 +508,7 @@ haJsTemplates.getRenderer()
|
|
|
508
508
|
|
|
509
509
|
### Refs variables
|
|
510
510
|
|
|
511
|
-
`Refs` refers to "reactive variables". If you use a reactive variable in a template, this template will get re-render if the value of that reactive variable changes. To access reactive variables in a template you just need to access the `refs` object. The name of this object can be changed through the `refsVariableName` option of the [HomeAssistantJavaScriptTemplates class](#homeassistantjavascripttemplates-class).
|
|
511
|
+
`Refs` refers to "reactive variables", for each variable inside `refs`, [a ref object](#ref-and-unref) is registered behind the scenes. If you use a reactive variable in a template, this template will get re-render if the value of that reactive variable changes. To access reactive variables in a template you just need to access the `refs` object. The name of this object can be changed through the `refsVariableName` option of the [HomeAssistantJavaScriptTemplates class](#homeassistantjavascripttemplates-class).
|
|
512
512
|
|
|
513
513
|
#### Declaring a global reactive variable
|
|
514
514
|
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
type Vars = Record<string,
|
|
1
|
+
type Vars = Record<string, any>;
|
|
2
2
|
interface Options {
|
|
3
3
|
throwErrors?: boolean;
|
|
4
4
|
throwWarnings?: boolean;
|
|
@@ -65,7 +65,6 @@ declare class HomeAssistantJavaScriptTemplatesRenderer {
|
|
|
65
65
|
private _throwErrors;
|
|
66
66
|
private _throwWarnings;
|
|
67
67
|
private _variables;
|
|
68
|
-
private _refs;
|
|
69
68
|
private _refsVariableName;
|
|
70
69
|
private _autoReturn;
|
|
71
70
|
private _clientSideEntitiesRegExp;
|
package/dist/esm/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getPromisableResult as t}from"get-promisable-result";var e=function(){return e=Object.assign||function(t){for(var e,n=1,i=arguments.length;n<i;n++)for(var s in e=arguments[n])Object.prototype.hasOwnProperty.call(e,s)&&(t[s]=e[s]);return t},e.apply(this,arguments)};function n(t,e,n){if(n||2===arguments.length)for(var i,s=0,r=e.length;s<r;s++)!i&&s in e||(i||(i=Array.prototype.slice.call(e,0,s)),i[s]=e[s]);return t.concat(i||Array.prototype.slice.call(e))}"function"==typeof SuppressedError&&SuppressedError;var i,s,r,a,o="[home-assistant-javascript-templates]",c=/^([a-z_]+)\.(\w+)$/;!function(t){t.UNKNOWN="unknown",t.UNAVAILABLE="unavailable"}(i||(i={})),function(t){t.AREA_ID="area_id",t.NAME="name"}(s||(s={})),function(t){t.PANEL_URL="panel_url",t.LANG="lang"}(r||(r={})),function(t){t.LOCATION_CHANGED="location-changed",t.TRANSLATIONS_UPDATED="translations-updated",t.POPSTATE="popstate",t.SUBSCRIBE_EVENTS="subscribe_events",t.STATE_CHANGE_EVENT="state_changed"}(a||(a={}));var u="refs",d=function(t){return t.reduce((function(t,e){var n=e[0],i=e[1];return t[n.replace(c,"$2")]=i,t}),{})},_=function(t){return t.includes(".")},h="ref",p="value",f="toJSON",v=function(t,e){return void 0===e&&(e=!1),e?"".concat(u,".").concat(t):"".concat(h,".").concat(t)};function l(t,e,n){var c=function(){return Object.entries(t.hass.areas)},u=function(){return Object.entries(t.hass.devices)},l=function(){return Object.entries(t.hass.entities)},b=new Set,y=new Map,g=new Map,m=function(t,e){n&&console.warn("".concat(t," ").concat(e," used in a JavaScript template doesn't exist"))},w=function(t){return m("Entity",t)},E=function(t){return m("Domain",t)},A=function(t){var i=new SyntaxError(t);if(e)throw i;n&&console.warn(i)},N=function(e){t.hass.states[e]?b.add(e):w(e)},T=function(t){b.add(t)},S=function(e,n){var i=n.with_unit,s=void 0!==i&&i,r=n.rounded,a=void 0!==r&&r;if(e){var o=e.state,c=e.attributes.unit_of_measurement,u=Number(a),d=!1===a||isNaN(Number(o))?o:new Intl.NumberFormat(t.hass.language,{minimumFractionDigits:u,maximumFractionDigits:u}).format(Number(o));return s&&c?"".concat(d," ").concat(c):d}},O=function(t){return new Proxy(t,{get:function(t,e){return"state_with_unit"===e?S(t,{rounded:!0,with_unit:!0}):t[e]}})};return{get hass(){return t.hass},states:new Proxy((function(e,n){if(void 0===n&&(n={}),_(e))return N(e),S(t.hass.states[e],n);throw SyntaxError("".concat(o,": states method cannot be used with a domain, use it as an object instead."))}),{get:function(e,n){if(_(n))return N(n),O(t.hass.states[n]);var i=Object.entries(t.hass.states).filter((function(t){return t[0].startsWith(n)}));return i.length||E(n),new Proxy(d(i),{get:function(t,e){return N("".concat(n,".").concat(e)),O(t[e])}})}}),state_translated:function(e){if(N(e),t.hass.states[e])return t.hass.formatEntityState(t.hass.states[e])},is_state:function(e,n){var i;return N(e),Array.isArray(n)?n.some((function(n){var i;return(null===(i=t.hass.states[e])||void 0===i?void 0:i.state)===n})):(null===(i=t.hass.states[e])||void 0===i?void 0:i.state)===n},state_attr:function(e,n){var i,s;return N(e),null===(s=null===(i=t.hass.states[e])||void 0===i?void 0:i.attributes)||void 0===s?void 0:s[n]},is_state_attr:function(t,e,n){return this.state_attr(t,e)===n},has_value:function(t){return this.states(t)?!(this.is_state(t,i.UNKNOWN)||this.is_state(t,i.UNAVAILABLE)):(w(t),!1)},entities:new Proxy((function(e){if(void 0===e)return t.hass.entities;if(_(e))return N(e),t.hass.entities[e];var n=l().filter((function(t){return t[0].startsWith(e)}));return n.length||E(e),new Proxy(d(n),{get:function(t,n){return N("".concat(e,".").concat(n)),t[n]}})}),{get:function(t,e){return t(e)}}),entity_prop:function(e,n){var i;return N(e),null===(i=t.hass.entities[e])||void 0===i?void 0:i[n]},is_entity_prop:function(t,e,n){return this.entity_prop(t,e)===n},devices:new Proxy((function(e){if(void 0===e)return t.hass.devices;if(_(e))throw SyntaxError("".concat(o,": devices method cannot be used with an entity id, you should use a device id instead."));return t.hass.devices[e]}),{get:function(e,n){if(_(n))throw SyntaxError("".concat(o,": devices cannot be accesed using an entity id, you should use a device id instead."));return t.hass.devices[n]}}),device_attr:function(e,n){var i,s,r;if(_(e)){N(e);var a=null===(i=t.hass.entities[e])||void 0===i?void 0:i.device_id;return null===(s=t.hass.devices[a])||void 0===s?void 0:s[n]}return null===(r=t.hass.devices[e])||void 0===r?void 0:r[n]},is_device_attr:function(t,e,n){return this.device_attr(t,e)===n},device_id:function(e){var n;if(_(e))return N(e),null===(n=t.hass.entities[e])||void 0===n?void 0:n.device_id;var i=u().find((function(t){return t[1].name===e}));return null==i?void 0:i[0]},device_name:function(e){var n,i,s;if(_(e)){N(e);var r=null===(n=t.hass.entities[e])||void 0===n?void 0:n.device_id;return null===(i=t.hass.devices[r])||void 0===i?void 0:i.name}return null===(s=t.hass.devices[e])||void 0===s?void 0:s.name},areas:function(){return c().map((function(t){return t[1].area_id}))},area_id:function(e){var n,i;if(e in t.hass.devices)return this.device_attr(e,s.AREA_ID);var r=null===(n=t.hass.entities[e])||void 0===n?void 0:n.device_id;if(r)return this.device_attr(r,s.AREA_ID);var a=c().find((function(t){return t[1].name===e}));return null===(i=null==a?void 0:a[1])||void 0===i?void 0:i.area_id},area_name:function(e){var n,i,r;e in t.hass.devices&&(r=this.device_attr(e,s.AREA_ID));var a=null===(n=t.hass.entities[e])||void 0===n?void 0:n.device_id;a&&(r=this.device_attr(a,s.AREA_ID));var o=c().find((function(t){var n=t[1];return n.area_id===e||n.area_id===r}));return null===(i=null==o?void 0:o[1])||void 0===i?void 0:i.name},area_entities:function(t){var e=c().find((function(e){var n=e[1];return n.area_id===t||n.name===t}));return e?l().filter((function(t){return t[1].area_id===e[1].area_id})).map((function(t){return t[0]})):[]},area_devices:function(t){var e=c().find((function(e){var n=e[1];return n.area_id===t||n.name===t}));return e?u().filter((function(t){return t[1].area_id===e[1].area_id})).map((function(t){return t[1].id})):[]},get user_name(){return t.hass.user.name},get user_is_admin(){return t.hass.user.is_admin},get user_is_owner(){return t.hass.user.is_owner},get user_agent(){return window.navigator.userAgent},get tracked(){return b},cleanTracked:function(){b.clear()},ref:function(t,e){var n,i=v(e);if(y.has(e))return y.get(e);var s=new Proxy(((n={})[p]=void 0,n[f]=function(){return this[p]},n),{get:function(t,e,n){if(e===p||e===f)return T(i),Reflect.get(t,e,n);A("".concat(e," is not a valid ").concat(h," property. A ").concat(h,' only exposes a "').concat(p,'" property'))},set:function(e,n,s){if(n===p){var r=e[p];return e[p]=s,t({event_type:a.STATE_CHANGE_EVENT,data:{entity_id:i,old_state:{state:JSON.stringify(r)},new_state:{state:JSON.stringify(s)}}}),!0}return A('property "'.concat(n,'" cannot be set in a ').concat(h)),!1}});return y.set(e,s),s},unref:function(t,e){var n=v(e);y.has(e)?(y.delete(e),t(n)):A("".concat(e," is not a ref or it has been unrefed already"))},get refsVariables(){return g},buildRefsVariables:function(t,e){return Object.entries(e).forEach((function(t){var e=t[0],n=t[1];g.has(e)||g.set(e,n)})),new Proxy(e,{get:function(t,e){var n=v(e);return T(n),g.get(e)},set:function(e,n,i){var s=v(n),r=g.get(n);return g.set(n,i),t({event_type:a.STATE_CHANGE_EVENT,data:{entity_id:s,old_state:{state:JSON.stringify(r)},new_state:{state:JSON.stringify(i)}}}),!0}})},cleanRefsVariables:function(){g.clear()},clientSideProxy:new Proxy({},{get:function(e,i){switch(Object.values(r).includes(i)&&T(i),i){case r.PANEL_URL:return location.pathname;case r.LANG:return t.hass.language}n&&console.warn("clientSideProxy should only be used to access these variables: ".concat(Object.values(r).join(", ")))}})}}var b=function(){function t(t,e){var n=e.throwErrors,i=void 0!==n&&n,s=e.throwWarnings,a=void 0===s||s,o=e.variables,c=void 0===o?{}:o,d=e.refs,_=void 0===d?{}:d,h=e.refsVariableName,p=void 0===h?u:h,f=e.autoReturn,v=void 0===f||f;this._throwErrors=i,this._throwWarnings=a,this._variables=c,this._refs=_,this._refsVariableName=p,this._autoReturn=v,this._subscriptions=new Map,this._clientSideEntitiesRegExp=new RegExp("(^|[ \\?(+:\\{\\[><,])(".concat(Object.values(r).join("|"),")($|[ \\?)+:\\}\\]><.,])"),"gm"),this._scopped=l(t,i,a),this._watchForPanelUrlChange(),this._watchForEntitiesChange(),this._watchForLanguageChange()}return t.prototype._executeRenderingFunctions=function(t){var e=this;this._subscriptions.get(t).forEach((function(t,n){t.forEach((function(t,i){e.trackTemplate(n,i,t)}))}))},t.prototype._watchForPanelUrlChange=function(){var t=this;window.addEventListener(a.LOCATION_CHANGED,(function(){t._panelUrlWatchCallback()})),window.addEventListener(a.POPSTATE,(function(){t._panelUrlWatchCallback()}))},t.prototype._panelUrlWatchCallback=function(){this._subscriptions.has(r.PANEL_URL)&&this._executeRenderingFunctions(r.PANEL_URL)},t.prototype._watchForEntitiesChange=function(){var t=this;window.hassConnection.then((function(e){e.conn.subscribeMessage((function(e){return t._entityWatchCallback(e)}),{type:a.SUBSCRIBE_EVENTS,event_type:a.STATE_CHANGE_EVENT})}))},t.prototype._watchForLanguageChange=function(){var t=this;window.addEventListener(a.TRANSLATIONS_UPDATED,(function(){t._subscriptions.has(r.LANG)&&t._executeRenderingFunctions(r.LANG)}))},t.prototype._entityWatchCallback=function(t){if(this._subscriptions.size){var e=t.data.entity_id;this._subscriptions.has(e)&&this._executeRenderingFunctions(e)}},t.prototype._storeTracked=function(t,e,n){var i=this;this._scopped.tracked.forEach((function(s){var r=[e,n];if(i._subscriptions.has(s)){var a=i._subscriptions.get(s);if(a.has(t)){var o=a.get(t);o.has(e)||o.set.apply(o,r)}else a.set(t,new Map([r]))}else i._subscriptions.set(s,new Map([[t,new Map([r])]]))}))},t.prototype._untrackTemplate=function(t,e){var n=this;this._subscriptions.forEach((function(i,s){if(i.has(t)){var r=i.get(t);r.delete(e),0===r.size&&(i.delete(t),0===i.size&&n._subscriptions.delete(s))}}))},t.prototype.renderTemplate=function(t,i){void 0===i&&(i={});try{var s=i.variables,r=void 0===s?{}:s,a=i.refs,o=void 0===a?{}:a,c=new Map(Object.entries(e(e({},this._variables),r))),u=e(e({},this._refs),o),d=t.trim().replace(this._clientSideEntitiesRegExp,"$1clientSide.$2$3"),_=d.includes("return")||!this._autoReturn?d:"return ".concat(d);return(new(Function.bind.apply(Function,n(n([void 0,"hass","states","state_translated","is_state","state_attr","is_state_attr","has_value","entities","entity_prop","is_entity_prop","devices","device_attr","is_device_attr","device_id","device_name","areas","area_id","area_name","area_entities","area_devices","user_name","user_is_admin","user_is_owner","user_agent","clientSide","ref","unref",this._refsVariableName],Array.from(c.keys()),!1),["".concat('"use strict";'," ").concat(_)],!1)))).apply(void 0,n([this._scopped.hass,this._scopped.states,this._scopped.state_translated.bind(this._scopped),this._scopped.is_state.bind(this._scopped),this._scopped.state_attr.bind(this._scopped),this._scopped.is_state_attr.bind(this._scopped),this._scopped.has_value.bind(this._scopped),this._scopped.entities,this._scopped.entity_prop,this._scopped.is_entity_prop.bind(this._scopped),this._scopped.devices,this._scopped.device_attr.bind(this._scopped),this._scopped.is_device_attr.bind(this._scopped),this._scopped.device_id.bind(this._scopped),this._scopped.device_name.bind(this._scopped),this._scopped.areas.bind(this._scopped),this._scopped.area_id.bind(this._scopped),this._scopped.area_name.bind(this._scopped),this._scopped.area_entities.bind(this._scopped),this._scopped.area_devices.bind(this._scopped),this._scopped.user_name,this._scopped.user_is_admin,this._scopped.user_is_owner,this._scopped.user_agent,this._scopped.clientSideProxy,this._scopped.ref.bind(this._scopped,this._entityWatchCallback.bind(this)),this._scopped.unref.bind(this._scopped,this.cleanTracked.bind(this)),this._scopped.buildRefsVariables.bind(this._scopped,this._entityWatchCallback.bind(this))(u)],Array.from(c.values()),!1))}catch(t){if(this._throwErrors)throw t;return void(this._throwWarnings&&console.warn(t))}},t.prototype.trackTemplate=function(t,e,n){var i=this;void 0===n&&(n={}),this._scopped.cleanTracked();var s=this.renderTemplate(t,n);return this._storeTracked(t,e,n),e(s),function(){return i._untrackTemplate(t,e)}},t.prototype.cleanTracked=function(t){t?this._subscriptions.has(t)&&this._subscriptions.delete(t):this._subscriptions.clear()},Object.defineProperty(t.prototype,"variables",{get:function(){return this._variables},set:function(t){this._variables=t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"refs",{get:function(){return this._refs},set:function(t){var e=this,n=this._scopped.refsVariables;Array.from(n.keys()).forEach((function(t){e.cleanTracked(v(t,!0))})),this._scopped.cleanRefsVariables(),this._refs=t},enumerable:!1,configurable:!0}),t}(),y=function(){function e(e,n){void 0===n&&(n={}),this._renderer=t((function(){return e.hass}),(function(t){return!!(t&&t.areas&&t.devices&&t.entities&&t.states&&t.user)}),{retries:100,delay:50,rejectMessage:"The provided element doesn't contain a proper or initialised hass object"}).then((function(){return new b(e,n)}))}return e.prototype.getRenderer=function(){return this._renderer},e}();export{y as default};
|
|
1
|
+
import{getPromisableResult as t}from"get-promisable-result";var e=function(){return e=Object.assign||function(t){for(var e,n=1,i=arguments.length;n<i;n++)for(var s in e=arguments[n])Object.prototype.hasOwnProperty.call(e,s)&&(t[s]=e[s]);return t},e.apply(this,arguments)};function n(t,e,n){if(n||2===arguments.length)for(var i,s=0,r=e.length;s<r;s++)!i&&s in e||(i||(i=Array.prototype.slice.call(e,0,s)),i[s]=e[s]);return t.concat(i||Array.prototype.slice.call(e))}"function"==typeof SuppressedError&&SuppressedError;var i,s,r,a,o="[home-assistant-javascript-templates]",c=/^([a-z_]+)\.(\w+)$/;!function(t){t.UNKNOWN="unknown",t.UNAVAILABLE="unavailable"}(i||(i={})),function(t){t.AREA_ID="area_id",t.NAME="name"}(s||(s={})),function(t){t.PANEL_URL="panel_url",t.LANG="lang"}(r||(r={})),function(t){t.LOCATION_CHANGED="location-changed",t.TRANSLATIONS_UPDATED="translations-updated",t.POPSTATE="popstate",t.SUBSCRIBE_EVENTS="subscribe_events",t.STATE_CHANGE_EVENT="state_changed"}(a||(a={}));var u=function(t){return t.reduce((function(t,e){var n=e[0],i=e[1];return t[n.replace(c,"$2")]=i,t}),{})},d=function(t){return t.includes(".")},h="ref",_="value",p="toJSON",f=function(t){return"".concat(h,".").concat(t)};function v(t,e,n){var c=function(){return Object.entries(t.hass.areas)},v=function(){return Object.entries(t.hass.devices)},l=function(){return Object.entries(t.hass.entities)},b=new Set,y=new Map,g=function(t,e){n&&console.warn("".concat(t," ").concat(e," used in a JavaScript template doesn't exist"))},m=function(t){return g("Entity",t)},w=function(t){return g("Domain",t)},E=function(t){var i=new SyntaxError(t);if(e)throw i;n&&console.warn(i)},A=function(e){t.hass.states[e]?b.add(e):m(e)},N=function(t){b.add(t)},T=function(e,n){var i=n.with_unit,s=void 0!==i&&i,r=n.rounded,a=void 0!==r&&r;if(e){var o=e.state,c=e.attributes.unit_of_measurement,u=Number(a),d=!1===a||isNaN(Number(o))?o:new Intl.NumberFormat(t.hass.language,{minimumFractionDigits:u,maximumFractionDigits:u}).format(Number(o));return s&&c?"".concat(d," ").concat(c):d}},S=function(t){return new Proxy(t,{get:function(t,e){return"state_with_unit"===e?T(t,{rounded:!0,with_unit:!0}):t[e]}})};return{get hass(){return t.hass},states:new Proxy((function(e,n){if(void 0===n&&(n={}),d(e))return A(e),T(t.hass.states[e],n);throw SyntaxError("".concat(o,": states method cannot be used with a domain, use it as an object instead."))}),{get:function(e,n){if(d(n))return A(n),S(t.hass.states[n]);var i=Object.entries(t.hass.states).filter((function(t){return t[0].startsWith(n)}));return i.length||w(n),new Proxy(u(i),{get:function(t,e){return A("".concat(n,".").concat(e)),S(t[e])}})}}),state_translated:function(e){if(A(e),t.hass.states[e])return t.hass.formatEntityState(t.hass.states[e])},is_state:function(e,n){var i;return A(e),Array.isArray(n)?n.some((function(n){var i;return(null===(i=t.hass.states[e])||void 0===i?void 0:i.state)===n})):(null===(i=t.hass.states[e])||void 0===i?void 0:i.state)===n},state_attr:function(e,n){var i,s;return A(e),null===(s=null===(i=t.hass.states[e])||void 0===i?void 0:i.attributes)||void 0===s?void 0:s[n]},is_state_attr:function(t,e,n){return this.state_attr(t,e)===n},has_value:function(t){return this.states(t)?!(this.is_state(t,i.UNKNOWN)||this.is_state(t,i.UNAVAILABLE)):(m(t),!1)},entities:new Proxy((function(e){if(void 0===e)return t.hass.entities;if(d(e))return A(e),t.hass.entities[e];var n=l().filter((function(t){return t[0].startsWith(e)}));return n.length||w(e),new Proxy(u(n),{get:function(t,n){return A("".concat(e,".").concat(n)),t[n]}})}),{get:function(t,e){return t(e)}}),entity_prop:function(e,n){var i;return A(e),null===(i=t.hass.entities[e])||void 0===i?void 0:i[n]},is_entity_prop:function(t,e,n){return this.entity_prop(t,e)===n},devices:new Proxy((function(e){if(void 0===e)return t.hass.devices;if(d(e))throw SyntaxError("".concat(o,": devices method cannot be used with an entity id, you should use a device id instead."));return t.hass.devices[e]}),{get:function(e,n){if(d(n))throw SyntaxError("".concat(o,": devices cannot be accesed using an entity id, you should use a device id instead."));return t.hass.devices[n]}}),device_attr:function(e,n){var i,s,r;if(d(e)){A(e);var a=null===(i=t.hass.entities[e])||void 0===i?void 0:i.device_id;return null===(s=t.hass.devices[a])||void 0===s?void 0:s[n]}return null===(r=t.hass.devices[e])||void 0===r?void 0:r[n]},is_device_attr:function(t,e,n){return this.device_attr(t,e)===n},device_id:function(e){var n;if(d(e))return A(e),null===(n=t.hass.entities[e])||void 0===n?void 0:n.device_id;var i=v().find((function(t){return t[1].name===e}));return null==i?void 0:i[0]},device_name:function(e){var n,i,s;if(d(e)){A(e);var r=null===(n=t.hass.entities[e])||void 0===n?void 0:n.device_id;return null===(i=t.hass.devices[r])||void 0===i?void 0:i.name}return null===(s=t.hass.devices[e])||void 0===s?void 0:s.name},areas:function(){return c().map((function(t){return t[1].area_id}))},area_id:function(e){var n,i;if(e in t.hass.devices)return this.device_attr(e,s.AREA_ID);var r=null===(n=t.hass.entities[e])||void 0===n?void 0:n.device_id;if(r)return this.device_attr(r,s.AREA_ID);var a=c().find((function(t){return t[1].name===e}));return null===(i=null==a?void 0:a[1])||void 0===i?void 0:i.area_id},area_name:function(e){var n,i,r;e in t.hass.devices&&(r=this.device_attr(e,s.AREA_ID));var a=null===(n=t.hass.entities[e])||void 0===n?void 0:n.device_id;a&&(r=this.device_attr(a,s.AREA_ID));var o=c().find((function(t){var n=t[1];return n.area_id===e||n.area_id===r}));return null===(i=null==o?void 0:o[1])||void 0===i?void 0:i.name},area_entities:function(t){var e=c().find((function(e){var n=e[1];return n.area_id===t||n.name===t}));return e?l().filter((function(t){return t[1].area_id===e[1].area_id})).map((function(t){return t[0]})):[]},area_devices:function(t){var e=c().find((function(e){var n=e[1];return n.area_id===t||n.name===t}));return e?v().filter((function(t){return t[1].area_id===e[1].area_id})).map((function(t){return t[1].id})):[]},get user_name(){return t.hass.user.name},get user_is_admin(){return t.hass.user.is_admin},get user_is_owner(){return t.hass.user.is_owner},get user_agent(){return window.navigator.userAgent},get tracked(){return b},cleanTracked:function(){b.clear()},ref:function(t,e,n){var i;void 0===n&&(n=void 0);var s=f(e);if(y.has(e))return y.get(e);var r=new Proxy(((i={})[_]=n,i[p]=function(){return this[_]},i),{get:function(t,e,n){if(e===_||e===p)return N(s),Reflect.get(t,e,n);E("".concat(e," is not a valid ").concat(h," property. A ").concat(h,' only exposes a "').concat(_,'" property'))},set:function(e,n,i){if(n===_){var r=e[_];return e[_]=i,t({event_type:a.STATE_CHANGE_EVENT,data:{entity_id:s,old_state:{state:JSON.stringify(r)},new_state:{state:JSON.stringify(i)}}}),!0}return E('property "'.concat(n,'" cannot be set in a ').concat(h)),!1}});return y.set(e,r),r},unref:function(t,e){var n=f(e);y.has(e)?(y.delete(e),t(n)):E("".concat(e," is not a ref or it has been unrefed already"))},refs:function(t,e,n){void 0===n&&(n={});var i=this.ref,s=this.unref,r=new Proxy(n,{get:function(e,n){return i(t,n).value},set:function(e,n,s){return i(t,n).value=s,!0}});return Object.entries(n).forEach((function(n){var r=n[0],a=n[1];y.has(r)&&s(e,r),i(t,r,a)})),r},cleanRefs:function(t){var e=this;Array.from(y.keys()).forEach((function(n){e.unref(t,n)}))},clientSideProxy:new Proxy({},{get:function(e,i){switch(Object.values(r).includes(i)&&N(i),i){case r.PANEL_URL:return location.pathname;case r.LANG:return t.hass.language}n&&console.warn("clientSideProxy should only be used to access these variables: ".concat(Object.values(r).join(", ")))}})}}var l=function(){function t(t,e){var n=e.throwErrors,i=void 0!==n&&n,s=e.throwWarnings,a=void 0===s||s,o=e.variables,c=void 0===o?{}:o,u=e.refs,d=void 0===u?{}:u,h=e.refsVariableName,_=void 0===h?"refs":h,p=e.autoReturn,f=void 0===p||p;this._throwErrors=i,this._throwWarnings=a,this._variables=c,this._refsVariableName=_,this._autoReturn=f,this._subscriptions=new Map,this._clientSideEntitiesRegExp=new RegExp("(^|[ \\?(+:\\{\\[><,])(".concat(Object.values(r).join("|"),")($|[ \\?)+:\\}\\]><.,])"),"gm"),this._scopped=v(t,i,a),this.refs=d,this._watchForPanelUrlChange(),this._watchForEntitiesChange(),this._watchForLanguageChange()}return t.prototype._executeRenderingFunctions=function(t){var e=this;this._subscriptions.get(t).forEach((function(t,n){t.forEach((function(t,i){e.trackTemplate(n,i,t)}))}))},t.prototype._watchForPanelUrlChange=function(){var t=this;window.addEventListener(a.LOCATION_CHANGED,(function(){t._panelUrlWatchCallback()})),window.addEventListener(a.POPSTATE,(function(){t._panelUrlWatchCallback()}))},t.prototype._panelUrlWatchCallback=function(){this._subscriptions.has(r.PANEL_URL)&&this._executeRenderingFunctions(r.PANEL_URL)},t.prototype._watchForEntitiesChange=function(){var t=this;window.hassConnection.then((function(e){e.conn.subscribeMessage((function(e){return t._entityWatchCallback(e)}),{type:a.SUBSCRIBE_EVENTS,event_type:a.STATE_CHANGE_EVENT})}))},t.prototype._watchForLanguageChange=function(){var t=this;window.addEventListener(a.TRANSLATIONS_UPDATED,(function(){t._subscriptions.has(r.LANG)&&t._executeRenderingFunctions(r.LANG)}))},t.prototype._entityWatchCallback=function(t){if(this._subscriptions.size){var e=t.data.entity_id;this._subscriptions.has(e)&&this._executeRenderingFunctions(e)}},t.prototype._storeTracked=function(t,e,n){var i=this;this._scopped.tracked.forEach((function(s){var r=[e,n];if(i._subscriptions.has(s)){var a=i._subscriptions.get(s);if(a.has(t)){var o=a.get(t);o.has(e)||o.set.apply(o,r)}else a.set(t,new Map([r]))}else i._subscriptions.set(s,new Map([[t,new Map([r])]]))}))},t.prototype._untrackTemplate=function(t,e){var n=this;this._subscriptions.forEach((function(i,s){if(i.has(t)){var r=i.get(t);r.delete(e),0===r.size&&(i.delete(t),0===i.size&&n._subscriptions.delete(s))}}))},t.prototype.renderTemplate=function(t,i){void 0===i&&(i={});try{var s=i.variables,r=void 0===s?{}:s,a=i.refs,o=void 0===a?{}:a,c=new Map(Object.entries(e(e({},this._variables),r))),u=t.trim().replace(this._clientSideEntitiesRegExp,"$1clientSide.$2$3"),d=u.includes("return")||!this._autoReturn?u:"return ".concat(u);return(new(Function.bind.apply(Function,n(n([void 0,"hass","states","state_translated","is_state","state_attr","is_state_attr","has_value","entities","entity_prop","is_entity_prop","devices","device_attr","is_device_attr","device_id","device_name","areas","area_id","area_name","area_entities","area_devices","user_name","user_is_admin","user_is_owner","user_agent","clientSide","ref","unref",this._refsVariableName],Array.from(c.keys()),!1),["".concat('"use strict";'," ").concat(d)],!1)))).apply(void 0,n([this._scopped.hass,this._scopped.states,this._scopped.state_translated.bind(this._scopped),this._scopped.is_state.bind(this._scopped),this._scopped.state_attr.bind(this._scopped),this._scopped.is_state_attr.bind(this._scopped),this._scopped.has_value.bind(this._scopped),this._scopped.entities,this._scopped.entity_prop,this._scopped.is_entity_prop.bind(this._scopped),this._scopped.devices,this._scopped.device_attr.bind(this._scopped),this._scopped.is_device_attr.bind(this._scopped),this._scopped.device_id.bind(this._scopped),this._scopped.device_name.bind(this._scopped),this._scopped.areas.bind(this._scopped),this._scopped.area_id.bind(this._scopped),this._scopped.area_name.bind(this._scopped),this._scopped.area_entities.bind(this._scopped),this._scopped.area_devices.bind(this._scopped),this._scopped.user_name,this._scopped.user_is_admin,this._scopped.user_is_owner,this._scopped.user_agent,this._scopped.clientSideProxy,this._scopped.ref.bind(this._scopped,this._entityWatchCallback.bind(this)),this._scopped.unref.bind(this._scopped,this.cleanTracked.bind(this)),this._scopped.refs(this._entityWatchCallback.bind(this),this.cleanTracked.bind(this),o)],Array.from(c.values()),!1))}catch(t){if(this._throwErrors)throw t;return void(this._throwWarnings&&console.warn(t))}},t.prototype.trackTemplate=function(t,e,n){var i=this;void 0===n&&(n={}),this._scopped.cleanTracked();var s=this.renderTemplate(t,n);return this._storeTracked(t,e,n),e(s),function(){return i._untrackTemplate(t,e)}},t.prototype.cleanTracked=function(t){t?this._subscriptions.has(t)&&this._subscriptions.delete(t):this._subscriptions.clear()},Object.defineProperty(t.prototype,"variables",{get:function(){return this._variables},set:function(t){this._variables=t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"refs",{get:function(){return this._scopped.refs(this._entityWatchCallback.bind(this),this.cleanTracked.bind(this))},set:function(t){this._scopped.cleanRefs(this.cleanTracked.bind(this)),this._scopped.refs(this._entityWatchCallback.bind(this),this.cleanTracked.bind(this),t)},enumerable:!1,configurable:!0}),t}(),b=function(){function e(e,n){void 0===n&&(n={}),this._renderer=t((function(){return e.hass}),(function(t){return!!(t&&t.areas&&t.devices&&t.entities&&t.states&&t.user)}),{retries:100,delay:50,rejectMessage:"The provided element doesn't contain a proper or initialised hass object"}).then((function(){return new l(e,n)}))}return e.prototype.getRenderer=function(){return this._renderer},e}();export{b as default};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
type Vars = Record<string,
|
|
1
|
+
type Vars = Record<string, any>;
|
|
2
2
|
interface Options {
|
|
3
3
|
throwErrors?: boolean;
|
|
4
4
|
throwWarnings?: boolean;
|
|
@@ -65,7 +65,6 @@ declare class HomeAssistantJavaScriptTemplatesRenderer {
|
|
|
65
65
|
private _throwErrors;
|
|
66
66
|
private _throwWarnings;
|
|
67
67
|
private _variables;
|
|
68
|
-
private _refs;
|
|
69
68
|
private _refsVariableName;
|
|
70
69
|
private _autoReturn;
|
|
71
70
|
private _clientSideEntitiesRegExp;
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var t=require("get-promisable-result"),e=function(){return e=Object.assign||function(t){for(var e,n=1,i=arguments.length;n<i;n++)for(var s in e=arguments[n])Object.prototype.hasOwnProperty.call(e,s)&&(t[s]=e[s]);return t},e.apply(this,arguments)};function n(t,e,n){if(n||2===arguments.length)for(var i,s=0,r=e.length;s<r;s++)!i&&s in e||(i||(i=Array.prototype.slice.call(e,0,s)),i[s]=e[s]);return t.concat(i||Array.prototype.slice.call(e))}"function"==typeof SuppressedError&&SuppressedError;var i,s,r,a,o="[home-assistant-javascript-templates]",c=/^([a-z_]+)\.(\w+)$/;!function(t){t.UNKNOWN="unknown",t.UNAVAILABLE="unavailable"}(i||(i={})),function(t){t.AREA_ID="area_id",t.NAME="name"}(s||(s={})),function(t){t.PANEL_URL="panel_url",t.LANG="lang"}(r||(r={})),function(t){t.LOCATION_CHANGED="location-changed",t.TRANSLATIONS_UPDATED="translations-updated",t.POPSTATE="popstate",t.SUBSCRIBE_EVENTS="subscribe_events",t.STATE_CHANGE_EVENT="state_changed"}(a||(a={}));var u="refs",d=function(t){return t.reduce((function(t,e){var n=e[0],i=e[1];return t[n.replace(c,"$2")]=i,t}),{})},_=function(t){return t.includes(".")},h="ref",p="value",f="toJSON",l=function(t,e){return void 0===e&&(e=!1),e?"".concat(u,".").concat(t):"".concat(h,".").concat(t)};function v(t,e,n){var c=function(){return Object.entries(t.hass.areas)},u=function(){return Object.entries(t.hass.devices)},v=function(){return Object.entries(t.hass.entities)},b=new Set,y=new Map,g=new Map,m=function(t,e){n&&console.warn("".concat(t," ").concat(e," used in a JavaScript template doesn't exist"))},w=function(t){return m("Entity",t)},E=function(t){return m("Domain",t)},A=function(t){var i=new SyntaxError(t);if(e)throw i;n&&console.warn(i)},N=function(e){t.hass.states[e]?b.add(e):w(e)},T=function(t){b.add(t)},S=function(e,n){var i=n.with_unit,s=void 0!==i&&i,r=n.rounded,a=void 0!==r&&r;if(e){var o=e.state,c=e.attributes.unit_of_measurement,u=Number(a),d=!1===a||isNaN(Number(o))?o:new Intl.NumberFormat(t.hass.language,{minimumFractionDigits:u,maximumFractionDigits:u}).format(Number(o));return s&&c?"".concat(d," ").concat(c):d}},R=function(t){return new Proxy(t,{get:function(t,e){return"state_with_unit"===e?S(t,{rounded:!0,with_unit:!0}):t[e]}})};return{get hass(){return t.hass},states:new Proxy((function(e,n){if(void 0===n&&(n={}),_(e))return N(e),S(t.hass.states[e],n);throw SyntaxError("".concat(o,": states method cannot be used with a domain, use it as an object instead."))}),{get:function(e,n){if(_(n))return N(n),R(t.hass.states[n]);var i=Object.entries(t.hass.states).filter((function(t){return t[0].startsWith(n)}));return i.length||E(n),new Proxy(d(i),{get:function(t,e){return N("".concat(n,".").concat(e)),R(t[e])}})}}),state_translated:function(e){if(N(e),t.hass.states[e])return t.hass.formatEntityState(t.hass.states[e])},is_state:function(e,n){var i;return N(e),Array.isArray(n)?n.some((function(n){var i;return(null===(i=t.hass.states[e])||void 0===i?void 0:i.state)===n})):(null===(i=t.hass.states[e])||void 0===i?void 0:i.state)===n},state_attr:function(e,n){var i,s;return N(e),null===(s=null===(i=t.hass.states[e])||void 0===i?void 0:i.attributes)||void 0===s?void 0:s[n]},is_state_attr:function(t,e,n){return this.state_attr(t,e)===n},has_value:function(t){return this.states(t)?!(this.is_state(t,i.UNKNOWN)||this.is_state(t,i.UNAVAILABLE)):(w(t),!1)},entities:new Proxy((function(e){if(void 0===e)return t.hass.entities;if(_(e))return N(e),t.hass.entities[e];var n=v().filter((function(t){return t[0].startsWith(e)}));return n.length||E(e),new Proxy(d(n),{get:function(t,n){return N("".concat(e,".").concat(n)),t[n]}})}),{get:function(t,e){return t(e)}}),entity_prop:function(e,n){var i;return N(e),null===(i=t.hass.entities[e])||void 0===i?void 0:i[n]},is_entity_prop:function(t,e,n){return this.entity_prop(t,e)===n},devices:new Proxy((function(e){if(void 0===e)return t.hass.devices;if(_(e))throw SyntaxError("".concat(o,": devices method cannot be used with an entity id, you should use a device id instead."));return t.hass.devices[e]}),{get:function(e,n){if(_(n))throw SyntaxError("".concat(o,": devices cannot be accesed using an entity id, you should use a device id instead."));return t.hass.devices[n]}}),device_attr:function(e,n){var i,s,r;if(_(e)){N(e);var a=null===(i=t.hass.entities[e])||void 0===i?void 0:i.device_id;return null===(s=t.hass.devices[a])||void 0===s?void 0:s[n]}return null===(r=t.hass.devices[e])||void 0===r?void 0:r[n]},is_device_attr:function(t,e,n){return this.device_attr(t,e)===n},device_id:function(e){var n;if(_(e))return N(e),null===(n=t.hass.entities[e])||void 0===n?void 0:n.device_id;var i=u().find((function(t){return t[1].name===e}));return null==i?void 0:i[0]},device_name:function(e){var n,i,s;if(_(e)){N(e);var r=null===(n=t.hass.entities[e])||void 0===n?void 0:n.device_id;return null===(i=t.hass.devices[r])||void 0===i?void 0:i.name}return null===(s=t.hass.devices[e])||void 0===s?void 0:s.name},areas:function(){return c().map((function(t){return t[1].area_id}))},area_id:function(e){var n,i;if(e in t.hass.devices)return this.device_attr(e,s.AREA_ID);var r=null===(n=t.hass.entities[e])||void 0===n?void 0:n.device_id;if(r)return this.device_attr(r,s.AREA_ID);var a=c().find((function(t){return t[1].name===e}));return null===(i=null==a?void 0:a[1])||void 0===i?void 0:i.area_id},area_name:function(e){var n,i,r;e in t.hass.devices&&(r=this.device_attr(e,s.AREA_ID));var a=null===(n=t.hass.entities[e])||void 0===n?void 0:n.device_id;a&&(r=this.device_attr(a,s.AREA_ID));var o=c().find((function(t){var n=t[1];return n.area_id===e||n.area_id===r}));return null===(i=null==o?void 0:o[1])||void 0===i?void 0:i.name},area_entities:function(t){var e=c().find((function(e){var n=e[1];return n.area_id===t||n.name===t}));return e?v().filter((function(t){return t[1].area_id===e[1].area_id})).map((function(t){return t[0]})):[]},area_devices:function(t){var e=c().find((function(e){var n=e[1];return n.area_id===t||n.name===t}));return e?u().filter((function(t){return t[1].area_id===e[1].area_id})).map((function(t){return t[1].id})):[]},get user_name(){return t.hass.user.name},get user_is_admin(){return t.hass.user.is_admin},get user_is_owner(){return t.hass.user.is_owner},get user_agent(){return window.navigator.userAgent},get tracked(){return b},cleanTracked:function(){b.clear()},ref:function(t,e){var n,i=l(e);if(y.has(e))return y.get(e);var s=new Proxy(((n={})[p]=void 0,n[f]=function(){return this[p]},n),{get:function(t,e,n){if(e===p||e===f)return T(i),Reflect.get(t,e,n);A("".concat(e," is not a valid ").concat(h," property. A ").concat(h,' only exposes a "').concat(p,'" property'))},set:function(e,n,s){if(n===p){var r=e[p];return e[p]=s,t({event_type:a.STATE_CHANGE_EVENT,data:{entity_id:i,old_state:{state:JSON.stringify(r)},new_state:{state:JSON.stringify(s)}}}),!0}return A('property "'.concat(n,'" cannot be set in a ').concat(h)),!1}});return y.set(e,s),s},unref:function(t,e){var n=l(e);y.has(e)?(y.delete(e),t(n)):A("".concat(e," is not a ref or it has been unrefed already"))},get refsVariables(){return g},buildRefsVariables:function(t,e){return Object.entries(e).forEach((function(t){var e=t[0],n=t[1];g.has(e)||g.set(e,n)})),new Proxy(e,{get:function(t,e){var n=l(e);return T(n),g.get(e)},set:function(e,n,i){var s=l(n),r=g.get(n);return g.set(n,i),t({event_type:a.STATE_CHANGE_EVENT,data:{entity_id:s,old_state:{state:JSON.stringify(r)},new_state:{state:JSON.stringify(i)}}}),!0}})},cleanRefsVariables:function(){g.clear()},clientSideProxy:new Proxy({},{get:function(e,i){switch(Object.values(r).includes(i)&&T(i),i){case r.PANEL_URL:return location.pathname;case r.LANG:return t.hass.language}n&&console.warn("clientSideProxy should only be used to access these variables: ".concat(Object.values(r).join(", ")))}})}}var b=function(){function t(t,e){var n=e.throwErrors,i=void 0!==n&&n,s=e.throwWarnings,a=void 0===s||s,o=e.variables,c=void 0===o?{}:o,d=e.refs,_=void 0===d?{}:d,h=e.refsVariableName,p=void 0===h?u:h,f=e.autoReturn,l=void 0===f||f;this._throwErrors=i,this._throwWarnings=a,this._variables=c,this._refs=_,this._refsVariableName=p,this._autoReturn=l,this._subscriptions=new Map,this._clientSideEntitiesRegExp=new RegExp("(^|[ \\?(+:\\{\\[><,])(".concat(Object.values(r).join("|"),")($|[ \\?)+:\\}\\]><.,])"),"gm"),this._scopped=v(t,i,a),this._watchForPanelUrlChange(),this._watchForEntitiesChange(),this._watchForLanguageChange()}return t.prototype._executeRenderingFunctions=function(t){var e=this;this._subscriptions.get(t).forEach((function(t,n){t.forEach((function(t,i){e.trackTemplate(n,i,t)}))}))},t.prototype._watchForPanelUrlChange=function(){var t=this;window.addEventListener(a.LOCATION_CHANGED,(function(){t._panelUrlWatchCallback()})),window.addEventListener(a.POPSTATE,(function(){t._panelUrlWatchCallback()}))},t.prototype._panelUrlWatchCallback=function(){this._subscriptions.has(r.PANEL_URL)&&this._executeRenderingFunctions(r.PANEL_URL)},t.prototype._watchForEntitiesChange=function(){var t=this;window.hassConnection.then((function(e){e.conn.subscribeMessage((function(e){return t._entityWatchCallback(e)}),{type:a.SUBSCRIBE_EVENTS,event_type:a.STATE_CHANGE_EVENT})}))},t.prototype._watchForLanguageChange=function(){var t=this;window.addEventListener(a.TRANSLATIONS_UPDATED,(function(){t._subscriptions.has(r.LANG)&&t._executeRenderingFunctions(r.LANG)}))},t.prototype._entityWatchCallback=function(t){if(this._subscriptions.size){var e=t.data.entity_id;this._subscriptions.has(e)&&this._executeRenderingFunctions(e)}},t.prototype._storeTracked=function(t,e,n){var i=this;this._scopped.tracked.forEach((function(s){var r=[e,n];if(i._subscriptions.has(s)){var a=i._subscriptions.get(s);if(a.has(t)){var o=a.get(t);o.has(e)||o.set.apply(o,r)}else a.set(t,new Map([r]))}else i._subscriptions.set(s,new Map([[t,new Map([r])]]))}))},t.prototype._untrackTemplate=function(t,e){var n=this;this._subscriptions.forEach((function(i,s){if(i.has(t)){var r=i.get(t);r.delete(e),0===r.size&&(i.delete(t),0===i.size&&n._subscriptions.delete(s))}}))},t.prototype.renderTemplate=function(t,i){void 0===i&&(i={});try{var s=i.variables,r=void 0===s?{}:s,a=i.refs,o=void 0===a?{}:a,c=new Map(Object.entries(e(e({},this._variables),r))),u=e(e({},this._refs),o),d=t.trim().replace(this._clientSideEntitiesRegExp,"$1clientSide.$2$3"),_=d.includes("return")||!this._autoReturn?d:"return ".concat(d);return(new(Function.bind.apply(Function,n(n([void 0,"hass","states","state_translated","is_state","state_attr","is_state_attr","has_value","entities","entity_prop","is_entity_prop","devices","device_attr","is_device_attr","device_id","device_name","areas","area_id","area_name","area_entities","area_devices","user_name","user_is_admin","user_is_owner","user_agent","clientSide","ref","unref",this._refsVariableName],Array.from(c.keys()),!1),["".concat('"use strict";'," ").concat(_)],!1)))).apply(void 0,n([this._scopped.hass,this._scopped.states,this._scopped.state_translated.bind(this._scopped),this._scopped.is_state.bind(this._scopped),this._scopped.state_attr.bind(this._scopped),this._scopped.is_state_attr.bind(this._scopped),this._scopped.has_value.bind(this._scopped),this._scopped.entities,this._scopped.entity_prop,this._scopped.is_entity_prop.bind(this._scopped),this._scopped.devices,this._scopped.device_attr.bind(this._scopped),this._scopped.is_device_attr.bind(this._scopped),this._scopped.device_id.bind(this._scopped),this._scopped.device_name.bind(this._scopped),this._scopped.areas.bind(this._scopped),this._scopped.area_id.bind(this._scopped),this._scopped.area_name.bind(this._scopped),this._scopped.area_entities.bind(this._scopped),this._scopped.area_devices.bind(this._scopped),this._scopped.user_name,this._scopped.user_is_admin,this._scopped.user_is_owner,this._scopped.user_agent,this._scopped.clientSideProxy,this._scopped.ref.bind(this._scopped,this._entityWatchCallback.bind(this)),this._scopped.unref.bind(this._scopped,this.cleanTracked.bind(this)),this._scopped.buildRefsVariables.bind(this._scopped,this._entityWatchCallback.bind(this))(u)],Array.from(c.values()),!1))}catch(t){if(this._throwErrors)throw t;return void(this._throwWarnings&&console.warn(t))}},t.prototype.trackTemplate=function(t,e,n){var i=this;void 0===n&&(n={}),this._scopped.cleanTracked();var s=this.renderTemplate(t,n);return this._storeTracked(t,e,n),e(s),function(){return i._untrackTemplate(t,e)}},t.prototype.cleanTracked=function(t){t?this._subscriptions.has(t)&&this._subscriptions.delete(t):this._subscriptions.clear()},Object.defineProperty(t.prototype,"variables",{get:function(){return this._variables},set:function(t){this._variables=t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"refs",{get:function(){return this._refs},set:function(t){var e=this,n=this._scopped.refsVariables;Array.from(n.keys()).forEach((function(t){e.cleanTracked(l(t,!0))})),this._scopped.cleanRefsVariables(),this._refs=t},enumerable:!1,configurable:!0}),t}(),y=function(){function e(e,n){void 0===n&&(n={}),this._renderer=t.getPromisableResult((function(){return e.hass}),(function(t){return!!(t&&t.areas&&t.devices&&t.entities&&t.states&&t.user)}),{retries:100,delay:50,rejectMessage:"The provided element doesn't contain a proper or initialised hass object"}).then((function(){return new b(e,n)}))}return e.prototype.getRenderer=function(){return this._renderer},e}();module.exports=y;
|
|
1
|
+
"use strict";var t=require("get-promisable-result"),e=function(){return e=Object.assign||function(t){for(var e,n=1,i=arguments.length;n<i;n++)for(var s in e=arguments[n])Object.prototype.hasOwnProperty.call(e,s)&&(t[s]=e[s]);return t},e.apply(this,arguments)};function n(t,e,n){if(n||2===arguments.length)for(var i,s=0,r=e.length;s<r;s++)!i&&s in e||(i||(i=Array.prototype.slice.call(e,0,s)),i[s]=e[s]);return t.concat(i||Array.prototype.slice.call(e))}"function"==typeof SuppressedError&&SuppressedError;var i,s,r,a,o="[home-assistant-javascript-templates]",c=/^([a-z_]+)\.(\w+)$/;!function(t){t.UNKNOWN="unknown",t.UNAVAILABLE="unavailable"}(i||(i={})),function(t){t.AREA_ID="area_id",t.NAME="name"}(s||(s={})),function(t){t.PANEL_URL="panel_url",t.LANG="lang"}(r||(r={})),function(t){t.LOCATION_CHANGED="location-changed",t.TRANSLATIONS_UPDATED="translations-updated",t.POPSTATE="popstate",t.SUBSCRIBE_EVENTS="subscribe_events",t.STATE_CHANGE_EVENT="state_changed"}(a||(a={}));var u=function(t){return t.reduce((function(t,e){var n=e[0],i=e[1];return t[n.replace(c,"$2")]=i,t}),{})},d=function(t){return t.includes(".")},h="ref",_="value",p="toJSON",f=function(t){return"".concat(h,".").concat(t)};function v(t,e,n){var c=function(){return Object.entries(t.hass.areas)},v=function(){return Object.entries(t.hass.devices)},l=function(){return Object.entries(t.hass.entities)},b=new Set,y=new Map,g=function(t,e){n&&console.warn("".concat(t," ").concat(e," used in a JavaScript template doesn't exist"))},m=function(t){return g("Entity",t)},w=function(t){return g("Domain",t)},E=function(t){var i=new SyntaxError(t);if(e)throw i;n&&console.warn(i)},A=function(e){t.hass.states[e]?b.add(e):m(e)},N=function(t){b.add(t)},T=function(e,n){var i=n.with_unit,s=void 0!==i&&i,r=n.rounded,a=void 0!==r&&r;if(e){var o=e.state,c=e.attributes.unit_of_measurement,u=Number(a),d=!1===a||isNaN(Number(o))?o:new Intl.NumberFormat(t.hass.language,{minimumFractionDigits:u,maximumFractionDigits:u}).format(Number(o));return s&&c?"".concat(d," ").concat(c):d}},S=function(t){return new Proxy(t,{get:function(t,e){return"state_with_unit"===e?T(t,{rounded:!0,with_unit:!0}):t[e]}})};return{get hass(){return t.hass},states:new Proxy((function(e,n){if(void 0===n&&(n={}),d(e))return A(e),T(t.hass.states[e],n);throw SyntaxError("".concat(o,": states method cannot be used with a domain, use it as an object instead."))}),{get:function(e,n){if(d(n))return A(n),S(t.hass.states[n]);var i=Object.entries(t.hass.states).filter((function(t){return t[0].startsWith(n)}));return i.length||w(n),new Proxy(u(i),{get:function(t,e){return A("".concat(n,".").concat(e)),S(t[e])}})}}),state_translated:function(e){if(A(e),t.hass.states[e])return t.hass.formatEntityState(t.hass.states[e])},is_state:function(e,n){var i;return A(e),Array.isArray(n)?n.some((function(n){var i;return(null===(i=t.hass.states[e])||void 0===i?void 0:i.state)===n})):(null===(i=t.hass.states[e])||void 0===i?void 0:i.state)===n},state_attr:function(e,n){var i,s;return A(e),null===(s=null===(i=t.hass.states[e])||void 0===i?void 0:i.attributes)||void 0===s?void 0:s[n]},is_state_attr:function(t,e,n){return this.state_attr(t,e)===n},has_value:function(t){return this.states(t)?!(this.is_state(t,i.UNKNOWN)||this.is_state(t,i.UNAVAILABLE)):(m(t),!1)},entities:new Proxy((function(e){if(void 0===e)return t.hass.entities;if(d(e))return A(e),t.hass.entities[e];var n=l().filter((function(t){return t[0].startsWith(e)}));return n.length||w(e),new Proxy(u(n),{get:function(t,n){return A("".concat(e,".").concat(n)),t[n]}})}),{get:function(t,e){return t(e)}}),entity_prop:function(e,n){var i;return A(e),null===(i=t.hass.entities[e])||void 0===i?void 0:i[n]},is_entity_prop:function(t,e,n){return this.entity_prop(t,e)===n},devices:new Proxy((function(e){if(void 0===e)return t.hass.devices;if(d(e))throw SyntaxError("".concat(o,": devices method cannot be used with an entity id, you should use a device id instead."));return t.hass.devices[e]}),{get:function(e,n){if(d(n))throw SyntaxError("".concat(o,": devices cannot be accesed using an entity id, you should use a device id instead."));return t.hass.devices[n]}}),device_attr:function(e,n){var i,s,r;if(d(e)){A(e);var a=null===(i=t.hass.entities[e])||void 0===i?void 0:i.device_id;return null===(s=t.hass.devices[a])||void 0===s?void 0:s[n]}return null===(r=t.hass.devices[e])||void 0===r?void 0:r[n]},is_device_attr:function(t,e,n){return this.device_attr(t,e)===n},device_id:function(e){var n;if(d(e))return A(e),null===(n=t.hass.entities[e])||void 0===n?void 0:n.device_id;var i=v().find((function(t){return t[1].name===e}));return null==i?void 0:i[0]},device_name:function(e){var n,i,s;if(d(e)){A(e);var r=null===(n=t.hass.entities[e])||void 0===n?void 0:n.device_id;return null===(i=t.hass.devices[r])||void 0===i?void 0:i.name}return null===(s=t.hass.devices[e])||void 0===s?void 0:s.name},areas:function(){return c().map((function(t){return t[1].area_id}))},area_id:function(e){var n,i;if(e in t.hass.devices)return this.device_attr(e,s.AREA_ID);var r=null===(n=t.hass.entities[e])||void 0===n?void 0:n.device_id;if(r)return this.device_attr(r,s.AREA_ID);var a=c().find((function(t){return t[1].name===e}));return null===(i=null==a?void 0:a[1])||void 0===i?void 0:i.area_id},area_name:function(e){var n,i,r;e in t.hass.devices&&(r=this.device_attr(e,s.AREA_ID));var a=null===(n=t.hass.entities[e])||void 0===n?void 0:n.device_id;a&&(r=this.device_attr(a,s.AREA_ID));var o=c().find((function(t){var n=t[1];return n.area_id===e||n.area_id===r}));return null===(i=null==o?void 0:o[1])||void 0===i?void 0:i.name},area_entities:function(t){var e=c().find((function(e){var n=e[1];return n.area_id===t||n.name===t}));return e?l().filter((function(t){return t[1].area_id===e[1].area_id})).map((function(t){return t[0]})):[]},area_devices:function(t){var e=c().find((function(e){var n=e[1];return n.area_id===t||n.name===t}));return e?v().filter((function(t){return t[1].area_id===e[1].area_id})).map((function(t){return t[1].id})):[]},get user_name(){return t.hass.user.name},get user_is_admin(){return t.hass.user.is_admin},get user_is_owner(){return t.hass.user.is_owner},get user_agent(){return window.navigator.userAgent},get tracked(){return b},cleanTracked:function(){b.clear()},ref:function(t,e,n){var i;void 0===n&&(n=void 0);var s=f(e);if(y.has(e))return y.get(e);var r=new Proxy(((i={})[_]=n,i[p]=function(){return this[_]},i),{get:function(t,e,n){if(e===_||e===p)return N(s),Reflect.get(t,e,n);E("".concat(e," is not a valid ").concat(h," property. A ").concat(h,' only exposes a "').concat(_,'" property'))},set:function(e,n,i){if(n===_){var r=e[_];return e[_]=i,t({event_type:a.STATE_CHANGE_EVENT,data:{entity_id:s,old_state:{state:JSON.stringify(r)},new_state:{state:JSON.stringify(i)}}}),!0}return E('property "'.concat(n,'" cannot be set in a ').concat(h)),!1}});return y.set(e,r),r},unref:function(t,e){var n=f(e);y.has(e)?(y.delete(e),t(n)):E("".concat(e," is not a ref or it has been unrefed already"))},refs:function(t,e,n){void 0===n&&(n={});var i=this.ref,s=this.unref,r=new Proxy(n,{get:function(e,n){return i(t,n).value},set:function(e,n,s){return i(t,n).value=s,!0}});return Object.entries(n).forEach((function(n){var r=n[0],a=n[1];y.has(r)&&s(e,r),i(t,r,a)})),r},cleanRefs:function(t){var e=this;Array.from(y.keys()).forEach((function(n){e.unref(t,n)}))},clientSideProxy:new Proxy({},{get:function(e,i){switch(Object.values(r).includes(i)&&N(i),i){case r.PANEL_URL:return location.pathname;case r.LANG:return t.hass.language}n&&console.warn("clientSideProxy should only be used to access these variables: ".concat(Object.values(r).join(", ")))}})}}var l=function(){function t(t,e){var n=e.throwErrors,i=void 0!==n&&n,s=e.throwWarnings,a=void 0===s||s,o=e.variables,c=void 0===o?{}:o,u=e.refs,d=void 0===u?{}:u,h=e.refsVariableName,_=void 0===h?"refs":h,p=e.autoReturn,f=void 0===p||p;this._throwErrors=i,this._throwWarnings=a,this._variables=c,this._refsVariableName=_,this._autoReturn=f,this._subscriptions=new Map,this._clientSideEntitiesRegExp=new RegExp("(^|[ \\?(+:\\{\\[><,])(".concat(Object.values(r).join("|"),")($|[ \\?)+:\\}\\]><.,])"),"gm"),this._scopped=v(t,i,a),this.refs=d,this._watchForPanelUrlChange(),this._watchForEntitiesChange(),this._watchForLanguageChange()}return t.prototype._executeRenderingFunctions=function(t){var e=this;this._subscriptions.get(t).forEach((function(t,n){t.forEach((function(t,i){e.trackTemplate(n,i,t)}))}))},t.prototype._watchForPanelUrlChange=function(){var t=this;window.addEventListener(a.LOCATION_CHANGED,(function(){t._panelUrlWatchCallback()})),window.addEventListener(a.POPSTATE,(function(){t._panelUrlWatchCallback()}))},t.prototype._panelUrlWatchCallback=function(){this._subscriptions.has(r.PANEL_URL)&&this._executeRenderingFunctions(r.PANEL_URL)},t.prototype._watchForEntitiesChange=function(){var t=this;window.hassConnection.then((function(e){e.conn.subscribeMessage((function(e){return t._entityWatchCallback(e)}),{type:a.SUBSCRIBE_EVENTS,event_type:a.STATE_CHANGE_EVENT})}))},t.prototype._watchForLanguageChange=function(){var t=this;window.addEventListener(a.TRANSLATIONS_UPDATED,(function(){t._subscriptions.has(r.LANG)&&t._executeRenderingFunctions(r.LANG)}))},t.prototype._entityWatchCallback=function(t){if(this._subscriptions.size){var e=t.data.entity_id;this._subscriptions.has(e)&&this._executeRenderingFunctions(e)}},t.prototype._storeTracked=function(t,e,n){var i=this;this._scopped.tracked.forEach((function(s){var r=[e,n];if(i._subscriptions.has(s)){var a=i._subscriptions.get(s);if(a.has(t)){var o=a.get(t);o.has(e)||o.set.apply(o,r)}else a.set(t,new Map([r]))}else i._subscriptions.set(s,new Map([[t,new Map([r])]]))}))},t.prototype._untrackTemplate=function(t,e){var n=this;this._subscriptions.forEach((function(i,s){if(i.has(t)){var r=i.get(t);r.delete(e),0===r.size&&(i.delete(t),0===i.size&&n._subscriptions.delete(s))}}))},t.prototype.renderTemplate=function(t,i){void 0===i&&(i={});try{var s=i.variables,r=void 0===s?{}:s,a=i.refs,o=void 0===a?{}:a,c=new Map(Object.entries(e(e({},this._variables),r))),u=t.trim().replace(this._clientSideEntitiesRegExp,"$1clientSide.$2$3"),d=u.includes("return")||!this._autoReturn?u:"return ".concat(u);return(new(Function.bind.apply(Function,n(n([void 0,"hass","states","state_translated","is_state","state_attr","is_state_attr","has_value","entities","entity_prop","is_entity_prop","devices","device_attr","is_device_attr","device_id","device_name","areas","area_id","area_name","area_entities","area_devices","user_name","user_is_admin","user_is_owner","user_agent","clientSide","ref","unref",this._refsVariableName],Array.from(c.keys()),!1),["".concat('"use strict";'," ").concat(d)],!1)))).apply(void 0,n([this._scopped.hass,this._scopped.states,this._scopped.state_translated.bind(this._scopped),this._scopped.is_state.bind(this._scopped),this._scopped.state_attr.bind(this._scopped),this._scopped.is_state_attr.bind(this._scopped),this._scopped.has_value.bind(this._scopped),this._scopped.entities,this._scopped.entity_prop,this._scopped.is_entity_prop.bind(this._scopped),this._scopped.devices,this._scopped.device_attr.bind(this._scopped),this._scopped.is_device_attr.bind(this._scopped),this._scopped.device_id.bind(this._scopped),this._scopped.device_name.bind(this._scopped),this._scopped.areas.bind(this._scopped),this._scopped.area_id.bind(this._scopped),this._scopped.area_name.bind(this._scopped),this._scopped.area_entities.bind(this._scopped),this._scopped.area_devices.bind(this._scopped),this._scopped.user_name,this._scopped.user_is_admin,this._scopped.user_is_owner,this._scopped.user_agent,this._scopped.clientSideProxy,this._scopped.ref.bind(this._scopped,this._entityWatchCallback.bind(this)),this._scopped.unref.bind(this._scopped,this.cleanTracked.bind(this)),this._scopped.refs(this._entityWatchCallback.bind(this),this.cleanTracked.bind(this),o)],Array.from(c.values()),!1))}catch(t){if(this._throwErrors)throw t;return void(this._throwWarnings&&console.warn(t))}},t.prototype.trackTemplate=function(t,e,n){var i=this;void 0===n&&(n={}),this._scopped.cleanTracked();var s=this.renderTemplate(t,n);return this._storeTracked(t,e,n),e(s),function(){return i._untrackTemplate(t,e)}},t.prototype.cleanTracked=function(t){t?this._subscriptions.has(t)&&this._subscriptions.delete(t):this._subscriptions.clear()},Object.defineProperty(t.prototype,"variables",{get:function(){return this._variables},set:function(t){this._variables=t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"refs",{get:function(){return this._scopped.refs(this._entityWatchCallback.bind(this),this.cleanTracked.bind(this))},set:function(t){this._scopped.cleanRefs(this.cleanTracked.bind(this)),this._scopped.refs(this._entityWatchCallback.bind(this),this.cleanTracked.bind(this),t)},enumerable:!1,configurable:!0}),t}(),b=function(){function e(e,n){void 0===n&&(n={}),this._renderer=t.getPromisableResult((function(){return e.hass}),(function(t){return!!(t&&t.areas&&t.devices&&t.entities&&t.states&&t.user)}),{retries:100,delay:50,rejectMessage:"The provided element doesn't contain a proper or initialised hass object"}).then((function(){return new l(e,n)}))}return e.prototype.getRenderer=function(){return this._renderer},e}();module.exports=b;
|