diff --git a/docs/assets/hierarchy.js b/docs/assets/hierarchy.js index 50a74ee..8f1b56b 100644 --- a/docs/assets/hierarchy.js +++ b/docs/assets/hierarchy.js @@ -1 +1 @@ -window.hierarchyData = "eJyVlk1v2zAMhv+LzupmKbZi59auPewwZECHXoYeXEdt1DpyIMsdgiL/fZSDeZU/ZPqSIM5LvXxEi9QHMVVla7L5zeKEU54klMcxZWnKHykx8rmUhVWVBsUHYe5D5wdJNuTm9lrnZfWybeyxsdsjrEHJm9I7suGJoKQxJaiUttI854Wsvw4DvuztoYSoosxrWJ/YenflVrjqosiZEjbt2jkynv5zbBcb2E1aXR44Gx6P+HzXy+A6PZJtNWmKYWuF82hQ0BGXh7xs5AK0To9Agz/3qtwZqd2LRWFvH10eSTKVB4a2Fc7Q+sbgvGqdRSQ85xulc3PC70BPjyuuYHzKNIz7SThf3DVLPZdf6iDxYJ4ah7XuHZRuiTBUJ5tHSleR53Cb2wVInhqHlK7EuGEYqZPNI2UxHzgsq9QgAoeWxem08TzegqqxKPFfjB9NadW9XVS8kRhkJ40EC7mHUXtiBCwTmWf3bZ+bvICE7q1RekFznQrEDsd1MptHmH0sAjMuU3+/IbopbGPk7kHJPyj0YQgSmqci4B3G9bUIULgWfTK7rk+6uHuX2t4dlIWkQm4D8aLplWWcsiTi7jIm3BRzP/wB+lRbV7ufpjpKY08zU7SnRrDDLdAz3D69wnUQVdz/0qX3BRjWFKYahTFAoW9S11ioO3DUvXSU88ttwu3KSHLhPbholpQBpjiFkQfZCMgmpa7RUHfsXDaCuiq12cC332jluyrmOmyrQVzgeG/mXgJxc6OTYg7X+fwX2ITtew==" \ No newline at end of file +window.hierarchyData = "eJyVVsFymzAQ/RedlRYEAuRb0uTQQ8edSSeXTg4EK7USLDxCpOPJ+N+7IlNaGRDLwfbYfrtv367Yp3dimsa2ZPMzTnNBGYdXWtBYROKREiOfa1lZ1WhAvJPYvenyIMmG3Nxe67Jufm07e+zs9gg5KHlVekc2jGeUdKYGlNJWmueyku3nccCnvT3UEFXVZQv5iW13Vy7D1RBFzpTE86wDY8yKv4x9shHdLNXHD46GZRM8X/U6cQMeqS2ZJcVo64HL0mCgEywPZd3JFdIGPEIa/LlX9c5I7Q4Whd4+ujq4mKsDo7YHLqj1iYE56Zmz2O/zjdKlOeE7cIHHDTdjbI40LPc/4PJw8yTyWH6og8QL89A4WfnFmR1ShEUNsGVJRZp6DLelXSHJQ+MkFTyaJgxLGmDLkgQvRgzrJjWKwEkT2biXyIl5UMQCjXL/vH/raqvu7arhTcQgN2mUixB7WOoFGCE2Lny6L/vSlBUUdG+N0iuW61wg1hwFX6wjrH0qAtGAJEo8YojuKtsZuXtQ8jdK+jgE65pREeAOy/WxCKGpd7Cu25Ou7t6ktncHZaGoENsIvMa9WMTAvzgTcBmLE+di7otvoE+tdbP7bpqjNPa04KIXaIR2uAV6hNunF7gOoob7D7r2vgBmTcHVKNgAhb1J3WKh7oGj7tBRxjjvuwFdmSgu3IMPzJoxgItDNRkFj6CwTF01UAg8dq6agrop9Xcb+PQXrXxT1dKG7TGICxxInkiO840Binm4zuc/eZ7tjQ==" \ No newline at end of file diff --git a/docs/assets/icons.js b/docs/assets/icons.js index 58882d7..4fbadc5 100644 --- a/docs/assets/icons.js +++ b/docs/assets/icons.js @@ -3,7 +3,7 @@ function addIcons() { if (document.readyState === "loading") return document.addEventListener("DOMContentLoaded", addIcons); const svg = document.body.appendChild(document.createElementNS("http://www.w3.org/2000/svg", "svg")); - svg.innerHTML = `MMNEPVFCICPMFPCPTTAAATR`; + svg.innerHTML = `MMNEPVFCICPMFPCPTTAAATR`; svg.style.display = "none"; if (location.protocol === "file:") updateUseElements(); } diff --git a/docs/assets/icons.svg b/docs/assets/icons.svg index 50ad579..be7798f 100644 --- a/docs/assets/icons.svg +++ b/docs/assets/icons.svg @@ -1 +1 @@ -MMNEPVFCICPMFPCPTTAAATR \ No newline at end of file +MMNEPVFCICPMFPCPTTAAATR \ No newline at end of file diff --git a/docs/assets/main.js b/docs/assets/main.js index 19bbb7a..8182cee 100644 --- a/docs/assets/main.js +++ b/docs/assets/main.js @@ -1,9 +1,9 @@ "use strict"; window.translations={"copy":"Copy","copied":"Copied!","normally_hidden":"This member is normally hidden due to your filter settings.","hierarchy_expand":"Expand","hierarchy_collapse":"Collapse","folder":"Folder","search_index_not_available":"The search index is not available","search_no_results_found_for_0":"No results found for {0}","kind_1":"Project","kind_2":"Module","kind_4":"Namespace","kind_8":"Enumeration","kind_16":"Enumeration Member","kind_32":"Variable","kind_64":"Function","kind_128":"Class","kind_256":"Interface","kind_512":"Constructor","kind_1024":"Property","kind_2048":"Method","kind_4096":"Call Signature","kind_8192":"Index Signature","kind_16384":"Constructor Signature","kind_32768":"Parameter","kind_65536":"Type Literal","kind_131072":"Type Parameter","kind_262144":"Accessor","kind_524288":"Get Signature","kind_1048576":"Set Signature","kind_2097152":"Type Alias","kind_4194304":"Reference","kind_8388608":"Document"}; -"use strict";(()=>{var Ke=Object.create;var he=Object.defineProperty;var Ge=Object.getOwnPropertyDescriptor;var Ze=Object.getOwnPropertyNames;var Xe=Object.getPrototypeOf,Ye=Object.prototype.hasOwnProperty;var et=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var tt=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ze(e))!Ye.call(t,i)&&i!==n&&he(t,i,{get:()=>e[i],enumerable:!(r=Ge(e,i))||r.enumerable});return t};var nt=(t,e,n)=>(n=t!=null?Ke(Xe(t)):{},tt(e||!t||!t.__esModule?he(n,"default",{value:t,enumerable:!0}):n,t));var ye=et((me,ge)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,l],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(oc?d+=2:a==c&&(n+=r[l+1]*i[d+1],l+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var c=s.node.edges["*"];else{var c=new t.TokenSet;s.node.edges["*"]=c}if(s.str.length==0&&(c.final=!0),i.push({node:c,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}s.str.length==1&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),f=s.str.charAt(1),p;f in s.node.edges?p=s.node.edges[f]:(p=new t.TokenSet,s.node.edges[f]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),c=0;c1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof me=="object"?ge.exports=n():e.lunr=n()}(this,function(){return t})})()});var M,G={getItem(){return null},setItem(){}},K;try{K=localStorage,M=K}catch{K=G,M=G}var S={getItem:t=>M.getItem(t),setItem:(t,e)=>M.setItem(t,e),disableWritingLocalStorage(){M=G},disable(){localStorage.clear(),M=G},enable(){M=K}};window.TypeDoc||={disableWritingLocalStorage(){S.disableWritingLocalStorage()},disableLocalStorage:()=>{S.disable()},enableLocalStorage:()=>{S.enable()}};window.translations||={copy:"Copy",copied:"Copied!",normally_hidden:"This member is normally hidden due to your filter settings.",hierarchy_expand:"Expand",hierarchy_collapse:"Collapse",search_index_not_available:"The search index is not available",search_no_results_found_for_0:"No results found for {0}",folder:"Folder",kind_1:"Project",kind_2:"Module",kind_4:"Namespace",kind_8:"Enumeration",kind_16:"Enumeration Member",kind_32:"Variable",kind_64:"Function",kind_128:"Class",kind_256:"Interface",kind_512:"Constructor",kind_1024:"Property",kind_2048:"Method",kind_4096:"Call Signature",kind_8192:"Index Signature",kind_16384:"Constructor Signature",kind_32768:"Parameter",kind_65536:"Type Literal",kind_131072:"Type Parameter",kind_262144:"Accessor",kind_524288:"Get Signature",kind_1048576:"Set Signature",kind_2097152:"Type Alias",kind_4194304:"Reference",kind_8388608:"Document"};var pe=[];function X(t,e){pe.push({selector:e,constructor:t})}var Z=class{alwaysVisibleMember=null;constructor(){this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){pe.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!rt(e)){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r,document.querySelector(".col-sidebar").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(!n)return;let r=n.offsetParent==null,i=n;for(;i!==document.body;)i instanceof HTMLDetailsElement&&(i.open=!0),i=i.parentElement;if(n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let s=document.createElement("p");s.classList.add("warning"),s.textContent=window.translations.normally_hidden,n.prepend(s)}r&&e.scrollIntoView()}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent=window.translations.copied,e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent=window.translations.copy},100)},1e3)})})}};function rt(t){let e=t.getBoundingClientRect(),n=Math.max(document.documentElement.clientHeight,window.innerHeight);return!(e.bottom<0||e.top-n>=0)}var fe=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var Ie=nt(ye(),1);async function R(t){let e=Uint8Array.from(atob(t),s=>s.charCodeAt(0)),r=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate")),i=await new Response(r).text();return JSON.parse(i)}var Y="closing",ae="tsd-overlay";function it(){let t=Math.abs(window.innerWidth-document.documentElement.clientWidth);document.body.style.overflow="hidden",document.body.style.paddingRight=`${t}px`}function st(){document.body.style.removeProperty("overflow"),document.body.style.removeProperty("padding-right")}function xe(t,e){t.addEventListener("animationend",()=>{t.classList.contains(Y)&&(t.classList.remove(Y),document.getElementById(ae)?.remove(),t.close(),st())}),t.addEventListener("cancel",n=>{n.preventDefault(),ve(t)}),e?.closeOnClick&&document.addEventListener("click",n=>{t.open&&!t.contains(n.target)&&ve(t)},!0)}function Ee(t){if(t.open)return;let e=document.createElement("div");e.id=ae,document.body.appendChild(e),t.showModal(),it()}function ve(t){if(!t.open)return;document.getElementById(ae)?.classList.add(Y),t.classList.add(Y)}var I=class{el;app;constructor(e){this.el=e.el,this.app=e.app}};var be=document.head.appendChild(document.createElement("style"));be.dataset.for="filters";var le={};function we(t){for(let e of t.split(/\s+/))if(le.hasOwnProperty(e)&&!le[e])return!0;return!1}var ee=class extends I{key;value;constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),be.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=S.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){S.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),le[`tsd-is-${this.el.name}`]=this.value,this.app.filterChanged(),this.app.updateIndexVisibility()}};var Le=0;async function Se(t,e){if(!window.searchData)return;let n=await R(window.searchData);t.data=n,t.index=Ie.Index.load(n.index),e.innerHTML=""}function _e(){let t=document.getElementById("tsd-search-trigger"),e=document.getElementById("tsd-search"),n=document.getElementById("tsd-search-input"),r=document.getElementById("tsd-search-results"),i=document.getElementById("tsd-search-script"),s=document.getElementById("tsd-search-status");if(!(t&&e&&n&&r&&i&&s))throw new Error("Search controls missing");let o={base:document.documentElement.dataset.base};o.base.endsWith("/")||(o.base+="/"),i.addEventListener("error",()=>{let a=window.translations.search_index_not_available;Pe(s,a)}),i.addEventListener("load",()=>{Se(o,s)}),Se(o,s),ot({trigger:t,searchEl:e,results:r,field:n,status:s},o)}function ot(t,e){let{field:n,results:r,searchEl:i,status:s,trigger:o}=t;xe(i,{closeOnClick:!0});function a(){Ee(i),n.setSelectionRange(0,n.value.length)}o.addEventListener("click",a),n.addEventListener("input",fe(()=>{at(r,n,s,e)},200)),n.addEventListener("keydown",l=>{if(r.childElementCount===0||l.ctrlKey||l.metaKey||l.altKey)return;let d=n.getAttribute("aria-activedescendant"),f=d?document.getElementById(d):null;if(f){let p=!1,v=!1;switch(l.key){case"Home":case"End":case"ArrowLeft":case"ArrowRight":v=!0;break;case"ArrowDown":case"ArrowUp":p=l.shiftKey;break}(p||v)&&ke(n)}if(!l.shiftKey)switch(l.key){case"Enter":f?.querySelector("a")?.click();break;case"ArrowUp":Te(r,n,f,-1),l.preventDefault();break;case"ArrowDown":Te(r,n,f,1),l.preventDefault();break}});function c(){ke(n)}n.addEventListener("change",c),n.addEventListener("blur",c),n.addEventListener("click",c),document.body.addEventListener("keydown",l=>{if(l.altKey||l.metaKey||l.shiftKey)return;let d=l.ctrlKey&&l.key==="k",f=!l.ctrlKey&&!ut()&&l.key==="/";(d||f)&&(l.preventDefault(),a())})}function at(t,e,n,r){if(!r.index||!r.data)return;t.innerHTML="",n.innerHTML="",Le+=1;let i=e.value.trim(),s;if(i){let a=i.split(" ").map(c=>c.length?`*${c}*`:"").join(" ");s=r.index.search(a).filter(({ref:c})=>{let l=r.data.rows[Number(c)].classes;return!l||!we(l)})}else s=[];if(s.length===0&&i){let a=window.translations.search_no_results_found_for_0.replace("{0}",` "${te(i)}" `);Pe(n,a);return}for(let a=0;ac.score-a.score);let o=Math.min(10,s.length);for(let a=0;a`,f=Ce(c.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(f+=` (score: ${s[a].score.toFixed(2)})`),c.parent&&(f=` - ${Ce(c.parent,i)}.${f}`);let p=document.createElement("li");p.id=`tsd-search:${Le}-${a}`,p.role="option",p.ariaSelected="false",p.classList.value=c.classes??"";let v=document.createElement("a");v.tabIndex=-1,v.href=r.base+c.url,v.innerHTML=d+`${f}`,p.append(v),t.appendChild(p)}}function Te(t,e,n,r){let i;if(r===1?i=n?.nextElementSibling||t.firstElementChild:i=n?.previousElementSibling||t.lastElementChild,i!==n){if(!i||i.role!=="option"){console.error("Option missing");return}i.ariaSelected="true",i.scrollIntoView({behavior:"smooth",block:"nearest"}),e.setAttribute("aria-activedescendant",i.id),n?.setAttribute("aria-selected","false")}}function ke(t){let e=t.getAttribute("aria-activedescendant");(e?document.getElementById(e):null)?.setAttribute("aria-selected","false"),t.setAttribute("aria-activedescendant","")}function Ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(te(t.substring(s,o)),`${te(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(te(t.substring(s))),i.join("")}var lt={"&":"&","<":"<",">":">","'":"'",'"':"""};function te(t){return t.replace(/[&<>"'"]/g,e=>lt[e])}function Pe(t,e){t.innerHTML=e?`
${e}
`:""}var ct=["button","checkbox","file","hidden","image","radio","range","reset","submit"];function ut(){let t=document.activeElement;return t?t.isContentEditable||t.tagName==="TEXTAREA"||t.tagName==="SEARCH"?!0:t.tagName==="INPUT"&&!ct.includes(t.type):!1}var D="mousedown",Me="mousemove",$="mouseup",ne={x:0,y:0},Qe=!1,ce=!1,dt=!1,F=!1,Oe=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(Oe?"is-mobile":"not-mobile");Oe&&"ontouchstart"in document.documentElement&&(dt=!0,D="touchstart",Me="touchmove",$="touchend");document.addEventListener(D,t=>{ce=!0,F=!1;let e=D=="touchstart"?t.targetTouches[0]:t;ne.y=e.pageY||0,ne.x=e.pageX||0});document.addEventListener(Me,t=>{if(ce&&!F){let e=D=="touchstart"?t.targetTouches[0]:t,n=ne.x-(e.pageX||0),r=ne.y-(e.pageY||0);F=Math.sqrt(n*n+r*r)>10}});document.addEventListener($,()=>{ce=!1});document.addEventListener("click",t=>{Qe&&(t.preventDefault(),t.stopImmediatePropagation(),Qe=!1)});var re=class extends I{active;className;constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener($,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(D,n=>this.onDocumentPointerDown(n)),document.addEventListener($,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){F||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!F&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var ue=new Map,de=class{open;accordions=[];key;constructor(e,n){this.key=e,this.open=n}add(e){this.accordions.push(e),e.open=this.open,e.addEventListener("toggle",()=>{this.toggle(e.open)})}toggle(e){for(let n of this.accordions)n.open=e;S.setItem(this.key,e.toString())}},ie=class extends I{constructor(e){super(e);let n=this.el.querySelector("summary"),r=n.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)});let i=`tsd-accordion-${n.dataset.key??n.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`,s;if(ue.has(i))s=ue.get(i);else{let o=S.getItem(i),a=o?o==="true":this.el.open;s=new de(i,a),ue.set(i,s)}s.add(this.el)}};function He(t){let e=S.getItem("tsd-theme")||"os";t.value=e,Ae(e),t.addEventListener("change",()=>{S.setItem("tsd-theme",t.value),Ae(t.value)})}function Ae(t){document.documentElement.dataset.theme=t}var se;function Ne(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",Re),Re())}async function Re(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let e=await R(window.navigationData);se=document.documentElement.dataset.base,se.endsWith("/")||(se+="/"),t.innerHTML="";for(let n of e)Be(n,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function Be(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-accordion`:"tsd-accordion";let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.dataset.key=i.join("$"),o.innerHTML='',De(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let c=a.appendChild(document.createElement("ul"));c.className="tsd-nested-navigation";for(let l of t.children)Be(l,c,i)}else De(t,r,t.class)}function De(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));if(r.href=se+t.path,n&&(r.className=n),location.pathname===r.pathname&&!r.href.includes("#")&&(r.classList.add("current"),r.ariaCurrent="page"),t.kind){let i=window.translations[`kind_${t.kind}`].replaceAll('"',""");r.innerHTML=``}r.appendChild(Fe(t.text,document.createElement("span")))}else{let r=e.appendChild(document.createElement("span")),i=window.translations.folder.replaceAll('"',""");r.innerHTML=``,r.appendChild(Fe(t.text,document.createElement("span")))}}function Fe(t,e){let n=t.split(/(?<=[^A-Z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|(?<=[_-])(?=[^_-])/);for(let r=0;r{let i=r.target;for(;i.parentElement&&i.parentElement.tagName!="LI";)i=i.parentElement;i.dataset.dropdown&&(i.dataset.dropdown=String(i.dataset.dropdown!=="true"))});let t=new Map,e=new Set;for(let r of document.querySelectorAll(".tsd-full-hierarchy [data-refl]")){let i=r.querySelector("ul");t.has(r.dataset.refl)?e.add(r.dataset.refl):i&&t.set(r.dataset.refl,i)}for(let r of e)n(r);function n(r){let i=t.get(r).cloneNode(!0);i.querySelectorAll("[id]").forEach(s=>{s.removeAttribute("id")}),i.querySelectorAll("[data-dropdown]").forEach(s=>{s.dataset.dropdown="false"});for(let s of document.querySelectorAll(`[data-refl="${r}"]`)){let o=gt(),a=s.querySelector("ul");s.insertBefore(o,a),o.dataset.dropdown=String(!!a),a||s.appendChild(i.cloneNode(!0))}}}function pt(){let t=document.getElementById("tsd-hierarchy-script");t&&(t.addEventListener("load",Ve),Ve())}async function Ve(){let t=document.querySelector(".tsd-panel.tsd-hierarchy:has(h4 a)");if(!t||!window.hierarchyData)return;let e=+t.dataset.refl,n=await R(window.hierarchyData),r=t.querySelector("ul"),i=document.createElement("ul");if(i.classList.add("tsd-hierarchy"),ft(i,n,e),r.querySelectorAll("li").length==i.querySelectorAll("li").length)return;let s=document.createElement("span");s.classList.add("tsd-hierarchy-toggle"),s.textContent=window.translations.hierarchy_expand,t.querySelector("h4 a")?.insertAdjacentElement("afterend",s),s.insertAdjacentText("beforebegin",", "),s.addEventListener("click",()=>{s.textContent===window.translations.hierarchy_expand?(r.insertAdjacentElement("afterend",i),r.remove(),s.textContent=window.translations.hierarchy_collapse):(i.insertAdjacentElement("afterend",r),i.remove(),s.textContent=window.translations.hierarchy_expand)})}function ft(t,e,n){let r=e.roots.filter(i=>mt(e,i,n));for(let i of r)t.appendChild(je(e,i,n))}function je(t,e,n,r=new Set){if(r.has(e))return;r.add(e);let i=t.reflections[e],s=document.createElement("li");if(s.classList.add("tsd-hierarchy-item"),e===n){let o=s.appendChild(document.createElement("span"));o.textContent=i.name,o.classList.add("tsd-hierarchy-target")}else{for(let a of i.uniqueNameParents||[]){let c=t.reflections[a],l=s.appendChild(document.createElement("a"));l.textContent=c.name,l.href=oe+c.url,l.className=c.class+" tsd-signature-type",s.append(document.createTextNode("."))}let o=s.appendChild(document.createElement("a"));o.textContent=t.reflections[e].name,o.href=oe+i.url,o.className=i.class+" tsd-signature-type"}if(i.children){let o=s.appendChild(document.createElement("ul"));o.classList.add("tsd-hierarchy");for(let a of i.children){let c=je(t,a,n,r);c&&o.appendChild(c)}}return r.delete(e),s}function mt(t,e,n){if(e===n)return!0;let r=new Set,i=[t.reflections[e]];for(;i.length;){let s=i.pop();if(!r.has(s)){r.add(s);for(let o of s.children||[]){if(o===n)return!0;i.push(t.reflections[o])}}}return!1}function gt(){let t=document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("width","20"),t.setAttribute("height","20"),t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("fill","none"),t.innerHTML='',t}X(re,"a[data-toggle]");X(ie,".tsd-accordion");X(ee,".tsd-filter-item input[type=checkbox]");var qe=document.getElementById("tsd-theme");qe&&He(qe);var yt=new Z;Object.defineProperty(window,"app",{value:yt});_e();Ne();$e();"virtualKeyboard"in navigator&&(navigator.virtualKeyboard.overlaysContent=!0);})(); +"use strict";(()=>{var Ke=Object.create;var he=Object.defineProperty;var Ge=Object.getOwnPropertyDescriptor;var Ze=Object.getOwnPropertyNames;var Xe=Object.getPrototypeOf,Ye=Object.prototype.hasOwnProperty;var et=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var tt=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ze(e))!Ye.call(t,i)&&i!==n&&he(t,i,{get:()=>e[i],enumerable:!(r=Ge(e,i))||r.enumerable});return t};var nt=(t,e,n)=>(n=t!=null?Ke(Xe(t)):{},tt(e||!t||!t.__esModule?he(n,"default",{value:t,enumerable:!0}):n,t));var ye=et((me,ge)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=(function(e){return function(n){e.console&&console.warn&&console.warn(n)}})(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,l],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(oc?d+=2:a==c&&(n+=r[l+1]*i[d+1],l+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var c=s.node.edges["*"];else{var c=new t.TokenSet;s.node.edges["*"]=c}if(s.str.length==0&&(c.final=!0),i.push({node:c,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}s.str.length==1&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),f=s.str.charAt(1),p;f in s.node.edges?p=s.node.edges[f]:(p=new t.TokenSet,s.node.edges[f]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),c=0;c1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}if(s.type===t.QueryLexer.TERM)return t.QueryParser.parseTerm;var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},(function(e,n){typeof define=="function"&&define.amd?define(n):typeof me=="object"?ge.exports=n():e.lunr=n()})(this,function(){return t})})()});var M,G={getItem(){return null},setItem(){}},K;try{K=localStorage,M=K}catch{K=G,M=G}var S={getItem:t=>M.getItem(t),setItem:(t,e)=>M.setItem(t,e),disableWritingLocalStorage(){M=G},disable(){localStorage.clear(),M=G},enable(){M=K}};window.TypeDoc||={disableWritingLocalStorage(){S.disableWritingLocalStorage()},disableLocalStorage:()=>{S.disable()},enableLocalStorage:()=>{S.enable()}};window.translations||={copy:"Copy",copied:"Copied!",normally_hidden:"This member is normally hidden due to your filter settings.",hierarchy_expand:"Expand",hierarchy_collapse:"Collapse",search_index_not_available:"The search index is not available",search_no_results_found_for_0:"No results found for {0}",folder:"Folder",kind_1:"Project",kind_2:"Module",kind_4:"Namespace",kind_8:"Enumeration",kind_16:"Enumeration Member",kind_32:"Variable",kind_64:"Function",kind_128:"Class",kind_256:"Interface",kind_512:"Constructor",kind_1024:"Property",kind_2048:"Method",kind_4096:"Call Signature",kind_8192:"Index Signature",kind_16384:"Constructor Signature",kind_32768:"Parameter",kind_65536:"Type Literal",kind_131072:"Type Parameter",kind_262144:"Accessor",kind_524288:"Get Signature",kind_1048576:"Set Signature",kind_2097152:"Type Alias",kind_4194304:"Reference",kind_8388608:"Document"};var pe=[];function X(t,e){pe.push({selector:e,constructor:t})}var Z=class{alwaysVisibleMember=null;constructor(){this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){pe.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!rt(e)){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r,document.querySelector(".col-sidebar").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(!n)return;let r=n.offsetParent==null,i=n;for(;i!==document.body;)i instanceof HTMLDetailsElement&&(i.open=!0),i=i.parentElement;if(n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let s=document.createElement("p");s.classList.add("warning"),s.textContent=window.translations.normally_hidden,n.prepend(s)}r&&e.scrollIntoView()}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent=window.translations.copied,e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent=window.translations.copy},100)},1e3)})})}};function rt(t){let e=t.getBoundingClientRect(),n=Math.max(document.documentElement.clientHeight,window.innerHeight);return!(e.bottom<0||e.top-n>=0)}var fe=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var Ie=nt(ye(),1);async function R(t){let e=Uint8Array.from(atob(t),s=>s.charCodeAt(0)),r=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate")),i=await new Response(r).text();return JSON.parse(i)}var Y="closing",ae="tsd-overlay";function it(){let t=Math.abs(window.innerWidth-document.documentElement.clientWidth);document.body.style.overflow="hidden",document.body.style.paddingRight=`${t}px`}function st(){document.body.style.removeProperty("overflow"),document.body.style.removeProperty("padding-right")}function Ee(t,e){t.addEventListener("animationend",()=>{t.classList.contains(Y)&&(t.classList.remove(Y),document.getElementById(ae)?.remove(),t.close(),st())}),t.addEventListener("cancel",n=>{n.preventDefault(),ve(t)}),e?.closeOnClick&&document.addEventListener("click",n=>{t.open&&!t.contains(n.target)&&ve(t)},!0)}function xe(t){if(t.open)return;let e=document.createElement("div");e.id=ae,document.body.appendChild(e),t.showModal(),it()}function ve(t){if(!t.open)return;document.getElementById(ae)?.classList.add(Y),t.classList.add(Y)}var I=class{el;app;constructor(e){this.el=e.el,this.app=e.app}};var be=document.head.appendChild(document.createElement("style"));be.dataset.for="filters";var le={};function Le(t){for(let e of t.split(/\s+/))if(le.hasOwnProperty(e)&&!le[e])return!0;return!1}var ee=class extends I{key;value;constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),be.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=S.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){S.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),le[`tsd-is-${this.el.name}`]=this.value,this.app.filterChanged(),this.app.updateIndexVisibility()}};var we=0;async function Se(t,e){if(!window.searchData)return;let n=await R(window.searchData);t.data=n,t.index=Ie.Index.load(n.index),e.innerHTML=""}function _e(){let t=document.getElementById("tsd-search-trigger"),e=document.getElementById("tsd-search"),n=document.getElementById("tsd-search-input"),r=document.getElementById("tsd-search-results"),i=document.getElementById("tsd-search-script"),s=document.getElementById("tsd-search-status");if(!(t&&e&&n&&r&&i&&s))throw new Error("Search controls missing");let o={base:document.documentElement.dataset.base};o.base.endsWith("/")||(o.base+="/"),i.addEventListener("error",()=>{let a=window.translations.search_index_not_available;Pe(s,a)}),i.addEventListener("load",()=>{Se(o,s)}),Se(o,s),ot({trigger:t,searchEl:e,results:r,field:n,status:s},o)}function ot(t,e){let{field:n,results:r,searchEl:i,status:s,trigger:o}=t;Ee(i,{closeOnClick:!0});function a(){xe(i),n.setSelectionRange(0,n.value.length)}o.addEventListener("click",a),n.addEventListener("input",fe(()=>{at(r,n,s,e)},200)),n.addEventListener("keydown",l=>{if(r.childElementCount===0||l.ctrlKey||l.metaKey||l.altKey)return;let d=n.getAttribute("aria-activedescendant"),f=d?document.getElementById(d):null;if(f){let p=!1,v=!1;switch(l.key){case"Home":case"End":case"ArrowLeft":case"ArrowRight":v=!0;break;case"ArrowDown":case"ArrowUp":p=l.shiftKey;break}(p||v)&&ke(n)}if(!l.shiftKey)switch(l.key){case"Enter":f?.querySelector("a")?.click();break;case"ArrowUp":Te(r,n,f,-1),l.preventDefault();break;case"ArrowDown":Te(r,n,f,1),l.preventDefault();break}});function c(){ke(n)}n.addEventListener("change",c),n.addEventListener("blur",c),n.addEventListener("click",c),document.body.addEventListener("keydown",l=>{if(l.altKey||l.metaKey||l.shiftKey)return;let d=l.ctrlKey&&l.key==="k",f=!l.ctrlKey&&!ut()&&l.key==="/";(d||f)&&(l.preventDefault(),a())})}function at(t,e,n,r){if(!r.index||!r.data)return;t.innerHTML="",n.innerHTML="",we+=1;let i=e.value.trim(),s;if(i){let a=i.split(" ").map(c=>c.length?`*${c}*`:"").join(" ");s=r.index.search(a).filter(({ref:c})=>{let l=r.data.rows[Number(c)].classes;return!l||!Le(l)})}else s=[];if(s.length===0&&i){let a=window.translations.search_no_results_found_for_0.replace("{0}",` "${te(i)}" `);Pe(n,a);return}for(let a=0;ac.score-a.score);let o=Math.min(10,s.length);for(let a=0;a`,f=Ce(c.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(f+=` (score: ${s[a].score.toFixed(2)})`),c.parent&&(f=` + ${Ce(c.parent,i)}.${f}`);let p=document.createElement("li");p.id=`tsd-search:${we}-${a}`,p.role="option",p.ariaSelected="false",p.classList.value=c.classes??"";let v=document.createElement("a");v.tabIndex=-1,v.href=r.base+c.url,v.innerHTML=d+`${f}`,p.append(v),t.appendChild(p)}}function Te(t,e,n,r){let i;if(r===1?i=n?.nextElementSibling||t.firstElementChild:i=n?.previousElementSibling||t.lastElementChild,i!==n){if(!i||i.role!=="option"){console.error("Option missing");return}i.ariaSelected="true",i.scrollIntoView({behavior:"smooth",block:"nearest"}),e.setAttribute("aria-activedescendant",i.id),n?.setAttribute("aria-selected","false")}}function ke(t){let e=t.getAttribute("aria-activedescendant");(e?document.getElementById(e):null)?.setAttribute("aria-selected","false"),t.setAttribute("aria-activedescendant","")}function Ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(te(t.substring(s,o)),`${te(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(te(t.substring(s))),i.join("")}var lt={"&":"&","<":"<",">":">","'":"'",'"':"""};function te(t){return t.replace(/[&<>"'"]/g,e=>lt[e])}function Pe(t,e){t.innerHTML=e?`
${e}
`:""}var ct=["button","checkbox","file","hidden","image","radio","range","reset","submit"];function ut(){let t=document.activeElement;return t?t.isContentEditable||t.tagName==="TEXTAREA"||t.tagName==="SEARCH"?!0:t.tagName==="INPUT"&&!ct.includes(t.type):!1}var D="mousedown",Me="mousemove",$="mouseup",ne={x:0,y:0},Qe=!1,ce=!1,dt=!1,F=!1,Oe=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(Oe?"is-mobile":"not-mobile");Oe&&"ontouchstart"in document.documentElement&&(dt=!0,D="touchstart",Me="touchmove",$="touchend");document.addEventListener(D,t=>{ce=!0,F=!1;let e=D=="touchstart"?t.targetTouches[0]:t;ne.y=e.pageY||0,ne.x=e.pageX||0});document.addEventListener(Me,t=>{if(ce&&!F){let e=D=="touchstart"?t.targetTouches[0]:t,n=ne.x-(e.pageX||0),r=ne.y-(e.pageY||0);F=Math.sqrt(n*n+r*r)>10}});document.addEventListener($,()=>{ce=!1});document.addEventListener("click",t=>{Qe&&(t.preventDefault(),t.stopImmediatePropagation(),Qe=!1)});var re=class extends I{active;className;constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener($,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(D,n=>this.onDocumentPointerDown(n)),document.addEventListener($,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){F||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!F&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var ue=new Map,de=class{open;accordions=[];key;constructor(e,n){this.key=e,this.open=n}add(e){this.accordions.push(e),e.open=this.open,e.addEventListener("toggle",()=>{this.toggle(e.open)})}toggle(e){for(let n of this.accordions)n.open=e;S.setItem(this.key,e.toString())}},ie=class extends I{constructor(e){super(e);let n=this.el.querySelector("summary"),r=n.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)});let i=`tsd-accordion-${n.dataset.key??n.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`,s;if(ue.has(i))s=ue.get(i);else{let o=S.getItem(i),a=o?o==="true":this.el.open;s=new de(i,a),ue.set(i,s)}s.add(this.el)}};function He(t){let e=S.getItem("tsd-theme")||"os";t.value=e,Ae(e),t.addEventListener("change",()=>{S.setItem("tsd-theme",t.value),Ae(t.value)})}function Ae(t){document.documentElement.dataset.theme=t}var se;function Ne(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",Re),Re())}async function Re(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let e=await R(window.navigationData);se=document.documentElement.dataset.base,se.endsWith("/")||(se+="/"),t.innerHTML="";for(let n of e)Ve(n,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function Ve(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-accordion`:"tsd-accordion";let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.dataset.key=i.join("$"),o.innerHTML='',De(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let c=a.appendChild(document.createElement("ul"));c.className="tsd-nested-navigation";for(let l of t.children)Ve(l,c,i)}else De(t,r,t.class)}function De(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));if(r.href=se+t.path,n&&(r.className=n),location.pathname===r.pathname&&!r.href.includes("#")&&(r.classList.add("current"),r.ariaCurrent="page"),t.kind){let i=window.translations[`kind_${t.kind}`].replaceAll('"',""");r.innerHTML=``}r.appendChild(Fe(t.text,document.createElement("span")))}else{let r=e.appendChild(document.createElement("span")),i=window.translations.folder.replaceAll('"',""");r.innerHTML=``,r.appendChild(Fe(t.text,document.createElement("span")))}}function Fe(t,e){let n=t.split(/(?<=[^A-Z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|(?<=[_-])(?=[^_-])/);for(let r=0;r{let i=r.target;for(;i.parentElement&&i.parentElement.tagName!="LI";)i=i.parentElement;i.dataset.dropdown&&(i.dataset.dropdown=String(i.dataset.dropdown!=="true"))});let t=new Map,e=new Set;for(let r of document.querySelectorAll(".tsd-full-hierarchy [data-refl]")){let i=r.querySelector("ul");t.has(r.dataset.refl)?e.add(r.dataset.refl):i&&t.set(r.dataset.refl,i)}for(let r of e)n(r);function n(r){let i=t.get(r).cloneNode(!0);i.querySelectorAll("[id]").forEach(s=>{s.removeAttribute("id")}),i.querySelectorAll("[data-dropdown]").forEach(s=>{s.dataset.dropdown="false"});for(let s of document.querySelectorAll(`[data-refl="${r}"]`)){let o=gt(),a=s.querySelector("ul");s.insertBefore(o,a),o.dataset.dropdown=String(!!a),a||s.appendChild(i.cloneNode(!0))}}}function pt(){let t=document.getElementById("tsd-hierarchy-script");t&&(t.addEventListener("load",Be),Be())}async function Be(){let t=document.querySelector(".tsd-panel.tsd-hierarchy:has(h4 a)");if(!t||!window.hierarchyData)return;let e=+t.dataset.refl,n=await R(window.hierarchyData),r=t.querySelector("ul"),i=document.createElement("ul");if(i.classList.add("tsd-hierarchy"),ft(i,n,e),r.querySelectorAll("li").length==i.querySelectorAll("li").length)return;let s=document.createElement("span");s.classList.add("tsd-hierarchy-toggle"),s.textContent=window.translations.hierarchy_expand,t.querySelector("h4 a")?.insertAdjacentElement("afterend",s),s.insertAdjacentText("beforebegin",", "),s.addEventListener("click",()=>{s.textContent===window.translations.hierarchy_expand?(r.insertAdjacentElement("afterend",i),r.remove(),s.textContent=window.translations.hierarchy_collapse):(i.insertAdjacentElement("afterend",r),i.remove(),s.textContent=window.translations.hierarchy_expand)})}function ft(t,e,n){let r=e.roots.filter(i=>mt(e,i,n));for(let i of r)t.appendChild(je(e,i,n))}function je(t,e,n,r=new Set){if(r.has(e))return;r.add(e);let i=t.reflections[e],s=document.createElement("li");if(s.classList.add("tsd-hierarchy-item"),e===n){let o=s.appendChild(document.createElement("span"));o.textContent=i.name,o.classList.add("tsd-hierarchy-target")}else{for(let a of i.uniqueNameParents||[]){let c=t.reflections[a],l=s.appendChild(document.createElement("a"));l.textContent=c.name,l.href=oe+c.url,l.className=c.class+" tsd-signature-type",s.append(document.createTextNode("."))}let o=s.appendChild(document.createElement("a"));o.textContent=t.reflections[e].name,o.href=oe+i.url,o.className=i.class+" tsd-signature-type"}if(i.children){let o=s.appendChild(document.createElement("ul"));o.classList.add("tsd-hierarchy");for(let a of i.children){let c=je(t,a,n,r);c&&o.appendChild(c)}}return r.delete(e),s}function mt(t,e,n){if(e===n)return!0;let r=new Set,i=[t.reflections[e]];for(;i.length;){let s=i.pop();if(!r.has(s)){r.add(s);for(let o of s.children||[]){if(o===n)return!0;i.push(t.reflections[o])}}}return!1}function gt(){let t=document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("width","20"),t.setAttribute("height","20"),t.innerHTML='',t}X(re,"a[data-toggle]");X(ie,".tsd-accordion");X(ee,".tsd-filter-item input[type=checkbox]");var qe=document.getElementById("tsd-theme");qe&&He(qe);var yt=new Z;Object.defineProperty(window,"app",{value:yt});_e();Ne();$e();"virtualKeyboard"in navigator&&(navigator.virtualKeyboard.overlaysContent=!0);})(); /*! Bundled license information: lunr/lunr.js: diff --git a/docs/assets/navigation.js b/docs/assets/navigation.js index 4606a80..d88b8a6 100644 --- a/docs/assets/navigation.js +++ b/docs/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "eJyV101z2jAQBuD/4nOmaZjJR3ODwIFpM6QDzaXTgxAbUGJkj7Sm9XT632tMsGV7tVKOeF89lmVpB//8myD8weQ+mUyfTJaDwXJV5pBcJLnAXXUddLG3l93qpx3u0yrypvQmub/7d9EoY1tqOTuAxtleIYJpIZkKa8FeDiJd7WrkepPpeG3RCInn+w/BYSYgapFm27nOCySxthzjLApkoVM9RnoWaQF+qC4HHGNEyS6UG+CtidLClN45OWXeediJ46sBs0SjtP8hqRwvTwXCSu3BS3YCYYt1Ygw4KEkDdYUfPTMmI07Le4EfO9cIWzDeB3DrvPRYpKiWyK1GL8J7i/UrSPJ0nCr86KcsTWET3NVELMZdVtssBbaxkMGQbRWqA4TeCZXj5Yj5fmim1UErJBYGNs8KfpNcJ8Fr7EmMOoUrYd++F0AJTSm6sy9ytK2jqkU2L0L2G/wx1SVH1zfeJh8021gMWi9I0GxSPOn0Y4bspXiS6siM7YvzN+n0aEYf5MJsDBnL1Q28/tPi1ZxIDMZNrAnwkNs6GK4f49Fee2dcIsnTp5bPrqIbicGY6bUBHqIaMcP64oGbvHfksawU+5DpuuK5A5WN49m17YZ4sNv5meUYBgNwsbbSqBxVpn2kE+GxmMbxgabhNtx683S/hLD61e/LTawnf/5ye3U9Ijbsj/l0KDalsHJ+iaTjFENSvQnGZmv7SlOIEr5CSQLV9ajx35RF0O5nooOci1HSo8hJpLoeGn/8d9Efe7xGj/v1H5PPKU8=" \ No newline at end of file +window.navigationData = "eJyV101z2jAQBuD/4nOmaZhJP3KDwIFpU9KB5tLpQZgtqLFlj7Si9XT632tMsGV7tVKOeF89MrK0mO9/E4Q/mNwls/mjLkrQWG2qEpKrpBR4qK+Dsrm57lffHDDP6sizVLvk7sO/q1aZmkqliyMoXOQSEXQHpZkwBsz1KNLXbiauN5tPtwa1SPEy/xgcZwKiElmxX6rSIol15RhnZZGFzvUY6UlkFvxQUw44WouKXSg3wFszqYSuvPfklHnn/iBOjwb0GrVU/i9J5Xh5LhA2Mgcv2QuELdaJMeAoUxpoKvzohdYFcVpeCvzYpULYg/Z+AbfOSw82Q7lGbjUGEd5bbX9BSp6Oc4Uf/VhkGeyCu5qIxbjreptlwDYWMhiyjUR5hNAzoXK8HHG/r7rT+qDZFK2G3ZOE3yTXS/AaexKjTuFGmOevFiihLUV39lWJpnNkvcj6p0iHDf6U6pOT23feJh80u1gM2ixI0GxTPOn0Y4YcpHiS6siM7Yvzk/R6NKOPcmE2hozlmgbevLR4NScSg3E31gZ4yG0dDDeM8eigvTMukeTpc8tnV9GNxGBfbL6F03arW95R7tz3TcIdpWOmYFagC/AQ1esZ1hcPTPLS9KdprZj7QjUVzwxUNo5nH18/xIP9HxdmOcbBAGy3JtWyRFkoH+lEeCymN72iL7k9vdk8/T9bWH8atv42NpDffnx/czshNuy35XwstqWwcnmIpOMUQ1KzCaZ6b4ZKW4gSPkFFAvX1qPGfpUFQbmdwkEsxSnoQJYnU10PjTy8ww7Gna/S4H/8BLVtMVg==" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js index 7ee5843..5f42e60 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "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"; \ No newline at end of file +window.searchData = "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"; \ No newline at end of file diff --git a/docs/assets/style.css b/docs/assets/style.css index 5ba5a2a..44328e9 100644 --- a/docs/assets/style.css +++ b/docs/assets/style.css @@ -1595,9 +1595,9 @@ .container-main { grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax( - 0, - 20rem - ); + 0, + 20rem + ); grid-template-areas: "sidebar content toc"; } diff --git a/docs/classes/AsyncEventEmitter.html b/docs/classes/AsyncEventEmitter.html index d724d3d..0241b25 100644 --- a/docs/classes/AsyncEventEmitter.html +++ b/docs/classes/AsyncEventEmitter.html @@ -3,21 +3,22 @@

This class provides a foundation for event-based communication between BACnet components. It allows objects to register listeners for specific events and trigger those events asynchronously.

-

Type Parameters

  • T extends EventMap

    An interface mapping event names to their argument arrays

    -

Hierarchy (View Summary)

Implemented by

Index

Constructors

Type Parameters

  • T extends EventMap

    An interface mapping event names to their argument arrays

    +

Hierarchy (View Summary)

Implemented by

Index

Constructors

Methods

  • Removes a listener from the set of listeners for the specified event.

    +

Constructors

Methods

  • Removes a listener from the set of listeners for the specified event.

    Type Parameters

    • K extends string | number | symbol

    Parameters

    • event: K

      The event name to subscribe to

      -
    • cb: EventListener<T, K>

      The callback function to execute when the event is triggered

      -

    Returns AsyncEventEmitter<T>

    The event emitter's instance for chaining

    -

Returns AsyncEventEmitter<T>

The event emitter's instance for chaining

+
  • Adds a new listener for the specified event.

    Type Parameters

    • K extends string | number | symbol

    Parameters

    • event: K

      The event name to subscribe to

      -
    • cb: EventListener<T, K>

      The callback function to execute when the event is triggered

      -

    Returns AsyncEventEmitter<T>

    The callback function for chaining

    -
+
  • cb: EventListener<T, K>

    The callback function to execute when the event is triggered

    +
  • Returns AsyncEventEmitter<T>

    The callback function for chaining

    +
    diff --git a/docs/classes/BDAbstractProperty.html b/docs/classes/BDAbstractProperty.html index cd9d205..3b970cc 100644 --- a/docs/classes/BDAbstractProperty.html +++ b/docs/classes/BDAbstractProperty.html @@ -1,5 +1,5 @@ BDAbstractProperty | @bacnet-js/device
    @bacnet-js/device
      Preparing search index...

      Class BDAbstractProperty<Tag, Type, Data>Abstract

      Abstract base class for all types of properties.

      -

      Type Parameters

      • Tag extends ApplicationTag
      • Type extends ApplicationTagValueTypeMap[Tag]
      • Data extends BACNetAppData<Tag, Type> | BACNetAppData<Tag, Type>[]

      Hierarchy (View Summary)

      Index

      Constructors

      Type Parameters

      • Tag extends ApplicationTag
      • Type extends ApplicationTagValueTypeMap[Tag]
      • Data extends BACNetAppData<Tag, Type> | BACNetAppData<Tag, Type>[]

      Hierarchy (View Summary)

      Index

      Constructors

      Properties

      Methods

      addListener @@ -8,25 +8,25 @@ on removeListener setData -

      Constructors

      Properties

      identifier: PropertyIdentifier

      The BACnet identifier for this property. Must be unique within the +

      Constructors

      Properties

      identifier: PropertyIdentifier

      The BACnet identifier for this property. Must be unique within the properties added to the same object.

      -

      Whether the property representes a single value or an array (or list) of +

      Whether the property representes a single value or an array (or list) of values.

      Methods

      Methods

      • Consumer-facing method to set property data. Implementations of this method should encapsulate retrieval logic as a task that is executed via this property's task queue.

        -

        Parameters

        Returns Promise<void>

      +

      Parameters

      Returns Promise<void>

      diff --git a/docs/classes/BDAnalogInput.html b/docs/classes/BDAnalogInput.html index 21a59ce..4d047bb 100644 --- a/docs/classes/BDAnalogInput.html +++ b/docs/classes/BDAnalogInput.html @@ -14,7 +14,7 @@
    • Units
    • Reliability (optional but commonly included)
    • -

      Hierarchy (View Summary)

      Index

      Constructors

      Hierarchy (View Summary)

      Index

      Constructors

      Properties

      Accessors

      Methods

      Constructors

      Properties

      covIncrement: BDSingletProperty<REAL>
      description: BDSingletProperty<CHARACTER_STRING>
      engineeringUnit: BDSingletProperty<ENUMERATED, EngineeringUnits>
      eventState: BDSingletProperty<ENUMERATED, EventState>
      maxPresentValue: BDSingletProperty<REAL>
      minPresentValue: BDSingletProperty<REAL>
      objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
      objectName: BDSingletProperty<CHARACTER_STRING>
      objectType: BDSingletProperty<ENUMERATED, ObjectType>
      outOfService: BDSingletProperty<BOOLEAN>
      presentValue: BDSingletProperty<REAL>
      propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
      reliability: BDSingletProperty<ENUMERATED, Reliability>
      statusFlags: BDSingletProperty<BIT_STRING>

      Accessors

      • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

        Returns BACNetAppData<OBJECTIDENTIFIER>

      Methods

      Properties

      covIncrement: BDSingletProperty<REAL>
      description: BDSingletProperty<CHARACTER_STRING>
      engineeringUnit: BDSingletProperty<ENUMERATED, EngineeringUnits>
      eventState: BDSingletProperty<ENUMERATED, EventState>
      maxPresentValue: BDSingletProperty<REAL>
      minPresentValue: BDSingletProperty<REAL>
      objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
      objectName: BDSingletProperty<CHARACTER_STRING>
      objectType: BDSingletProperty<ENUMERATED, ObjectType>
      outOfService: BDSingletProperty<BOOLEAN>
      presentValue: BDSingletProperty<REAL>
      propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
      reliability: BDSingletProperty<ENUMERATED, Reliability>
      statusFlags: BDSingletProperty<BIT_STRING>

      Accessors

      • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

        Returns BACNetAppData<OBJECTIDENTIFIER>

      Methods

      • Adds a property to this object

        This method registers a new property with the object and sets up event subscriptions for property value changes.

        Type Parameters

        Parameters

        • property: T

          The property to add

          -

        Returns T

        The added property

        +

      Parameters

      • property: T

        The property to add

        +

      Returns T

      The added property

      Error if a property with the same identifier already exists

      -

      Returns BDAnalogInput

      The event emitter's instance for chaining

      +
      +
    • cb: EventListener<BDObjectEvents, K>

      The callback function to execute when the event is triggered

      +
    • Returns BDAnalogInput

      The callback function for chaining

      +
      diff --git a/docs/classes/BDAnalogOutput.html b/docs/classes/BDAnalogOutput.html index e35dede..bcc9df0 100644 --- a/docs/classes/BDAnalogOutput.html +++ b/docs/classes/BDAnalogOutput.html @@ -15,7 +15,7 @@
    • Priority_Array
    • Relinquish_Default
    • -

      Hierarchy (View Summary)

      Index

      Constructors

      Hierarchy (View Summary)

      Index

      Constructors

      Properties

      covIncrement: BDSingletProperty<REAL>
      currentCommandPriority: BDSingletProperty<UNSIGNED_INTEGER>

      The current command priority that is controlling the Present_Value

      +

      Parameters

      Returns BDAnalogOutput

      Properties

      covIncrement: BDSingletProperty<REAL>
      currentCommandPriority: BDSingletProperty<UNSIGNED_INTEGER>

      The current command priority that is controlling the Present_Value

      This property indicates which priority level in the priority array currently has control of the Present_Value property, or NULL if the Relinquish_Default is being used.

      -
      description: BDSingletProperty<CHARACTER_STRING>
      engineeringUnit: BDSingletProperty<ENUMERATED, EngineeringUnits>
      eventState: BDSingletProperty<ENUMERATED, EventState>
      maxPresentValue: BDSingletProperty<REAL>
      minPresentValue: BDSingletProperty<REAL>
      objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
      objectName: BDSingletProperty<CHARACTER_STRING>
      objectType: BDSingletProperty<ENUMERATED, ObjectType>
      outOfService: BDSingletProperty<BOOLEAN>
      presentValue: BDSingletProperty<REAL>
      priorityArray: BDArrayProperty<NULL | REAL>

      The priority array for command arbitration

      +
      description: BDSingletProperty<CHARACTER_STRING>
      engineeringUnit: BDSingletProperty<ENUMERATED, EngineeringUnits>
      eventState: BDSingletProperty<ENUMERATED, EventState>
      maxPresentValue: BDSingletProperty<REAL>
      minPresentValue: BDSingletProperty<REAL>
      objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
      objectName: BDSingletProperty<CHARACTER_STRING>
      objectType: BDSingletProperty<ENUMERATED, ObjectType>
      outOfService: BDSingletProperty<BOOLEAN>
      presentValue: BDSingletProperty<REAL>
      priorityArray: BDArrayProperty<NULL | REAL>

      The priority array for command arbitration

      This property represents the 16-level priority array used for command arbitration. BACnet devices use this mechanism to determine which command source has control over the output value at any given time.

      -
      propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
      reliability: BDSingletProperty<ENUMERATED, Reliability>
      relinquishDefault: BDSingletProperty<REAL>

      The default value for the present value when all priority array slots are NULL

      +
      propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
      reliability: BDSingletProperty<ENUMERATED, Reliability>
      relinquishDefault: BDSingletProperty<REAL>

      The default value for the present value when all priority array slots are NULL

      This property represents the value to be used for the Present_Value property when all entries in the Priority_Array property are NULL.

      -
      statusFlags: BDSingletProperty<BIT_STRING>

      Accessors

      • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

        Returns BACNetAppData<OBJECTIDENTIFIER>

      Methods

      statusFlags: BDSingletProperty<BIT_STRING>

      Accessors

      • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

        Returns BACNetAppData<OBJECTIDENTIFIER>

      Methods

      • Adds a property to this object

        This method registers a new property with the object and sets up event subscriptions for property value changes.

        Type Parameters

        Parameters

        • property: T

          The property to add

          -

        Returns T

        The added property

        +

      Parameters

      • property: T

        The property to add

        +

      Returns T

      The added property

      Error if a property with the same identifier already exists

      -

      Returns BDAnalogOutput

      The event emitter's instance for chaining

      +
      +
    • cb: EventListener<BDObjectEvents, K>

      The callback function to execute when the event is triggered

      +
    • Returns BDAnalogOutput

      The callback function for chaining

      +
      diff --git a/docs/classes/BDAnalogValue.html b/docs/classes/BDAnalogValue.html index 4d333f7..c20d912 100644 --- a/docs/classes/BDAnalogValue.html +++ b/docs/classes/BDAnalogValue.html @@ -1,4 +1,4 @@ -BDAnalogValue | @bacnet-js/device
      @bacnet-js/device
        Preparing search index...

        Class BDAnalogValue

        Hierarchy (View Summary)

        Index

        Constructors

        constructor +BDAnalogValue | @bacnet-js/device
        @bacnet-js/device
          Preparing search index...

          Class BDAnalogValue

          Hierarchy (View Summary)

          Index

          Constructors

          Properties

          Accessors

          Methods

          Constructors

          Properties

          covIncrement: BDSingletProperty<REAL>
          description: BDSingletProperty<CHARACTER_STRING>
          engineeringUnit: BDSingletProperty<ENUMERATED, EngineeringUnits>
          eventState: BDSingletProperty<ENUMERATED, EventState>
          maxPresentValue: BDSingletProperty<REAL>
          minPresentValue: BDSingletProperty<REAL>
          objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
          objectName: BDSingletProperty<CHARACTER_STRING>
          objectType: BDSingletProperty<ENUMERATED, ObjectType>
          outOfService: BDSingletProperty<BOOLEAN>
          presentValue: BDSingletProperty<REAL>
          propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
          reliability: BDSingletProperty<ENUMERATED, Reliability>
          statusFlags: BDSingletProperty<BIT_STRING>

          Accessors

          • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

            Returns BACNetAppData<OBJECTIDENTIFIER>

          Methods

          Constructors

          Properties

          covIncrement: BDSingletProperty<REAL>
          description: BDSingletProperty<CHARACTER_STRING>
          engineeringUnit: BDSingletProperty<ENUMERATED, EngineeringUnits>
          eventState: BDSingletProperty<ENUMERATED, EventState>
          maxPresentValue: BDSingletProperty<REAL>
          minPresentValue: BDSingletProperty<REAL>
          objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
          objectName: BDSingletProperty<CHARACTER_STRING>
          objectType: BDSingletProperty<ENUMERATED, ObjectType>
          outOfService: BDSingletProperty<BOOLEAN>
          presentValue: BDSingletProperty<REAL>
          propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
          reliability: BDSingletProperty<ENUMERATED, Reliability>
          statusFlags: BDSingletProperty<BIT_STRING>

          Accessors

          • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

            Returns BACNetAppData<OBJECTIDENTIFIER>

          Methods

          • Adds a property to this object

            This method registers a new property with the object and sets up event subscriptions for property value changes.

            Type Parameters

            Parameters

            • property: T

              The property to add

              -

            Returns T

            The added property

            +

          Parameters

          • property: T

            The property to add

            +

          Returns T

          The added property

          Error if a property with the same identifier already exists

          -

          Returns BDAnalogValue

          The event emitter's instance for chaining

          +
          +
        • cb: EventListener<BDObjectEvents, K>

          The callback function to execute when the event is triggered

          +
        • Returns BDAnalogValue

          The callback function for chaining

          +
          diff --git a/docs/classes/BDArrayProperty.html b/docs/classes/BDArrayProperty.html index eddac14..d41baef 100644 --- a/docs/classes/BDArrayProperty.html +++ b/docs/classes/BDArrayProperty.html @@ -1,4 +1,4 @@ -BDArrayProperty | @bacnet-js/device
          @bacnet-js/device
            Preparing search index...

            Class BDArrayProperty<Tag, Type>

            Type Parameters

            • Tag extends ApplicationTag
            • Type extends ApplicationTagValueTypeMap[Tag] = ApplicationTagValueTypeMap[Tag]

            Hierarchy

            • BDAbstractArrayProperty<Tag, Type>
              • BDArrayProperty
            Index

            Constructors

            constructor +BDArrayProperty | @bacnet-js/device
            @bacnet-js/device
              Preparing search index...

              Class BDArrayProperty<Tag, Type>

              Type Parameters

              • Tag extends ApplicationTag
              • Type extends ApplicationTagValueTypeMap[Tag] = ApplicationTagValueTypeMap[Tag]

              Hierarchy

              • BDAbstractArrayProperty<Tag, Type>
                • BDArrayProperty
              Index

              Constructors

              Properties

              Methods

              addListener @@ -7,25 +7,25 @@ on removeListener setData -

              Constructors

              • Type Parameters

                • Tag extends ApplicationTag
                • Type extends any = ApplicationTagValueTypeMap[Tag]

                Parameters

                • identifier: PropertyIdentifier
                • writable: boolean
                • data: BACNetAppData<Tag, Type>[]

                Returns BDArrayProperty<Tag, Type>

              Properties

              identifier: PropertyIdentifier

              The BACnet identifier for this property. Must be unique within the +

              Constructors

              • Type Parameters

                • Tag extends ApplicationTag
                • Type extends any = ApplicationTagValueTypeMap[Tag]

                Parameters

                • identifier: PropertyIdentifier
                • writable: boolean
                • data: BACNetAppData<Tag, Type>[]

                Returns BDArrayProperty<Tag, Type>

              Properties

              identifier: PropertyIdentifier

              The BACnet identifier for this property. Must be unique within the properties added to the same object.

              -
              type: ARRAY

              Whether the property representes a single value or an array (or list) of +

              type: ARRAY

              Whether the property representes a single value or an array (or list) of values.

              Methods

              Methods

              • Consumer-facing method to set property data. Implementations of this method should encapsulate retrieval logic as a task that is executed via this property's task queue.

                -

                Parameters

                Returns Promise<void>

              +

              Parameters

              Returns Promise<void>

              diff --git a/docs/classes/BDBinaryValue.html b/docs/classes/BDBinaryValue.html index fa222b5..5e4606e 100644 --- a/docs/classes/BDBinaryValue.html +++ b/docs/classes/BDBinaryValue.html @@ -2,7 +2,7 @@

              This class implements the core functionality required by all BACnet objects according to the BACnet specification. It manages object properties and handles property read/write operations and CoV notifications.

              -

              Hierarchy (View Summary)

              Index

              Constructors

              Hierarchy (View Summary)

              Index

              Constructors

              Properties

              Accessors

              Methods

              Constructors

              Properties

              description: BDSingletProperty<CHARACTER_STRING>
              eventState: BDSingletProperty<ENUMERATED, EventState>
              objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
              objectName: BDSingletProperty<CHARACTER_STRING>
              objectType: BDSingletProperty<ENUMERATED, ObjectType>
              outOfService: BDSingletProperty<BOOLEAN>
              presentValue: BDSingletProperty<ENUMERATED, BinaryPV>
              propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
              reliability: BDSingletProperty<ENUMERATED, Reliability>
              statusFlags: BDSingletProperty<BIT_STRING>

              Accessors

              • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                Returns BACNetAppData<OBJECTIDENTIFIER>

              Methods

              Constructors

              Properties

              description: BDSingletProperty<CHARACTER_STRING>
              eventState: BDSingletProperty<ENUMERATED, EventState>
              objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
              objectName: BDSingletProperty<CHARACTER_STRING>
              objectType: BDSingletProperty<ENUMERATED, ObjectType>
              outOfService: BDSingletProperty<BOOLEAN>
              presentValue: BDSingletProperty<ENUMERATED, BinaryPV>
              propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
              reliability: BDSingletProperty<ENUMERATED, Reliability>
              statusFlags: BDSingletProperty<BIT_STRING>

              Accessors

              • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                Returns BACNetAppData<OBJECTIDENTIFIER>

              Methods

              • Adds a property to this object

                This method registers a new property with the object and sets up event subscriptions for property value changes.

                Type Parameters

                Parameters

                • property: T

                  The property to add

                  -

                Returns T

                The added property

                +

              Parameters

              • property: T

                The property to add

                +

              Returns T

              The added property

              Error if a property with the same identifier already exists

              -

              Returns BDBinaryValue

              The event emitter's instance for chaining

              +
              +
            • cb: EventListener<BDObjectEvents, K>

              The callback function to execute when the event is triggered

              +
            • Returns BDBinaryValue

              The callback function for chaining

              +
              diff --git a/docs/classes/BDCharacterStringValue.html b/docs/classes/BDCharacterStringValue.html index beda5d8..6d923be 100644 --- a/docs/classes/BDCharacterStringValue.html +++ b/docs/classes/BDCharacterStringValue.html @@ -2,7 +2,7 @@

              This class implements the core functionality required by all BACnet objects according to the BACnet specification. It manages object properties and handles property read/write operations and CoV notifications.

              -

              Hierarchy (View Summary)

              Index

              Constructors

              Hierarchy (View Summary)

              Index

              Constructors

              Properties

              Accessors

              Methods

              Constructors

              Properties

              description: BDSingletProperty<CHARACTER_STRING>
              eventState: BDSingletProperty<ENUMERATED, EventState>
              objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
              objectName: BDSingletProperty<CHARACTER_STRING>
              objectType: BDSingletProperty<ENUMERATED, ObjectType>
              outOfService: BDSingletProperty<BOOLEAN>
              presentValue: BDSingletProperty<CHARACTER_STRING>
              propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
              reliability: BDSingletProperty<ENUMERATED, Reliability>
              statusFlags: BDSingletProperty<BIT_STRING>

              Accessors

              • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                Returns BACNetAppData<OBJECTIDENTIFIER>

              Methods

              Constructors

              Properties

              description: BDSingletProperty<CHARACTER_STRING>
              eventState: BDSingletProperty<ENUMERATED, EventState>
              objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
              objectName: BDSingletProperty<CHARACTER_STRING>
              objectType: BDSingletProperty<ENUMERATED, ObjectType>
              outOfService: BDSingletProperty<BOOLEAN>
              presentValue: BDSingletProperty<CHARACTER_STRING>
              propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
              reliability: BDSingletProperty<ENUMERATED, Reliability>
              statusFlags: BDSingletProperty<BIT_STRING>

              Accessors

              • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                Returns BACNetAppData<OBJECTIDENTIFIER>

              Methods

              • Adds a property to this object

                This method registers a new property with the object and sets up event subscriptions for property value changes.

                Type Parameters

                Parameters

                • property: T

                  The property to add

                  -

                Returns T

                The added property

                +

              Parameters

              • property: T

                The property to add

                +

              Returns T

              The added property

              Error if a property with the same identifier already exists

              -

              Returns BDCharacterStringValue

              The event emitter's instance for chaining

              +
              +
            • cb: EventListener<BDObjectEvents, K>

              The callback function to execute when the event is triggered

              +
            • Returns BDCharacterStringValue

              The callback function for chaining

              +
              diff --git a/docs/classes/BDDateTimeValue.html b/docs/classes/BDDateTimeValue.html index 97a2754..96c1180 100644 --- a/docs/classes/BDDateTimeValue.html +++ b/docs/classes/BDDateTimeValue.html @@ -2,7 +2,7 @@

              This class implements the core functionality required by all BACnet objects according to the BACnet specification. It manages object properties and handles property read/write operations and CoV notifications.

              -

              Hierarchy (View Summary)

              Index

              Constructors

              Hierarchy (View Summary)

              Index

              Constructors

              Properties

              Accessors

              Methods

              Constructors

              Properties

              description: BDSingletProperty<CHARACTER_STRING>
              eventState: BDSingletProperty<ENUMERATED, EventState>
              objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
              objectName: BDSingletProperty<CHARACTER_STRING>
              objectType: BDSingletProperty<ENUMERATED, ObjectType>
              outOfService: BDSingletProperty<BOOLEAN>
              presentValue: BDSingletProperty<DATETIME>
              propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
              reliability: BDSingletProperty<ENUMERATED, Reliability>
              statusFlags: BDSingletProperty<BIT_STRING>

              Accessors

              • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                Returns BACNetAppData<OBJECTIDENTIFIER>

              Methods

              Constructors

              Properties

              description: BDSingletProperty<CHARACTER_STRING>
              eventState: BDSingletProperty<ENUMERATED, EventState>
              objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
              objectName: BDSingletProperty<CHARACTER_STRING>
              objectType: BDSingletProperty<ENUMERATED, ObjectType>
              outOfService: BDSingletProperty<BOOLEAN>
              presentValue: BDSingletProperty<DATETIME>
              propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
              reliability: BDSingletProperty<ENUMERATED, Reliability>
              statusFlags: BDSingletProperty<BIT_STRING>

              Accessors

              • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                Returns BACNetAppData<OBJECTIDENTIFIER>

              Methods

              • Adds a property to this object

                This method registers a new property with the object and sets up event subscriptions for property value changes.

                Type Parameters

                Parameters

                • property: T

                  The property to add

                  -

                Returns T

                The added property

                +

              Parameters

              • property: T

                The property to add

                +

              Returns T

              The added property

              Error if a property with the same identifier already exists

              -

              Returns BDDateTimeValue

              The event emitter's instance for chaining

              +
              +
            • cb: EventListener<BDObjectEvents, K>

              The callback function to execute when the event is triggered

              +
            • Returns BDDateTimeValue

              The callback function for chaining

              +
              diff --git a/docs/classes/BDDateValue.html b/docs/classes/BDDateValue.html index 91485a9..710e3fb 100644 --- a/docs/classes/BDDateValue.html +++ b/docs/classes/BDDateValue.html @@ -2,7 +2,7 @@

              This class implements the core functionality required by all BACnet objects according to the BACnet specification. It manages object properties and handles property read/write operations and CoV notifications.

              -

              Hierarchy (View Summary)

              Index

              Constructors

              Hierarchy (View Summary)

              Index

              Constructors

              Properties

              Accessors

              Methods

              Constructors

              Properties

              description: BDSingletProperty<CHARACTER_STRING>
              eventState: BDSingletProperty<ENUMERATED, EventState>
              objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
              objectName: BDSingletProperty<CHARACTER_STRING>
              objectType: BDSingletProperty<ENUMERATED, ObjectType>
              outOfService: BDSingletProperty<BOOLEAN>
              presentValue: BDSingletProperty<DATE>
              propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
              reliability: BDSingletProperty<ENUMERATED, Reliability>
              statusFlags: BDSingletProperty<BIT_STRING>

              Accessors

              • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                Returns BACNetAppData<OBJECTIDENTIFIER>

              Methods

              Constructors

              Properties

              description: BDSingletProperty<CHARACTER_STRING>
              eventState: BDSingletProperty<ENUMERATED, EventState>
              objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
              objectName: BDSingletProperty<CHARACTER_STRING>
              objectType: BDSingletProperty<ENUMERATED, ObjectType>
              outOfService: BDSingletProperty<BOOLEAN>
              presentValue: BDSingletProperty<DATE>
              propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
              reliability: BDSingletProperty<ENUMERATED, Reliability>
              statusFlags: BDSingletProperty<BIT_STRING>

              Accessors

              • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                Returns BACNetAppData<OBJECTIDENTIFIER>

              Methods

              • Adds a property to this object

                This method registers a new property with the object and sets up event subscriptions for property value changes.

                Type Parameters

                Parameters

                • property: T

                  The property to add

                  -

                Returns T

                The added property

                +

              Parameters

              • property: T

                The property to add

                +

              Returns T

              The added property

              Error if a property with the same identifier already exists

              -

              Returns BDDateValue

              The event emitter's instance for chaining

              +
              +
            • cb: EventListener<BDObjectEvents, K>

              The callback function to execute when the event is triggered

              +
            • Returns BDDateValue

              The callback function for chaining

              +
              diff --git a/docs/classes/BDDevice.html b/docs/classes/BDDevice.html index 2f17d17..36be67a 100644 --- a/docs/classes/BDDevice.html +++ b/docs/classes/BDDevice.html @@ -20,7 +20,7 @@
            • Object_List
            • And other properties related to device capabilities and configuration
            • -

              Hierarchy (View Summary)

              Implements

              Index

              Constructors

              Hierarchy (View Summary)

              Implements

              Index

              Constructors

              Properties

              Accessors

              Methods

              addListener addObject addProperty @@ -74,24 +75,24 @@ according to the BACnet specification, including support for basic BACnet services and object types.

              Parameters

              • instance: number

                Device instance number (0-4194303). Must be unique on the BACnet network.

                -
              • opts: BDDeviceOpts

                Configuration options for this device

                -

              Returns BDDevice

              Properties

              activeCovSubscriptions: BDPolledArrayProperty<COV_SUBSCRIPTION>
              apduSegmentTimeout: BDSingletProperty<UNSIGNED_INTEGER>
              apduTimeout: BDSingletProperty<UNSIGNED_INTEGER>
              applicationSoftwareVersion: BDSingletProperty<CHARACTER_STRING>
              databaseRevision: BDSingletProperty<UNSIGNED_INTEGER>
              daylightSavingsStatus: BDPolledSingletProperty<BOOLEAN>
              description: BDSingletProperty<CHARACTER_STRING>
              deviceAddressBinding: BDArrayProperty<NULL>
              eventState: BDSingletProperty<ENUMERATED, EventState>
              firmwareRevision: BDSingletProperty<CHARACTER_STRING>
              localDate: BDPolledSingletProperty<DATE>
              localTime: BDPolledSingletProperty<TIME>
              location: BDSingletProperty<CHARACTER_STRING>
              maxApduLengthAccepted: BDSingletProperty<UNSIGNED_INTEGER>
              maxSegmentsAccepted: BDSingletProperty<UNSIGNED_INTEGER>
              modelName: BDSingletProperty<CHARACTER_STRING>
              numberOfApduRetries: BDSingletProperty<UNSIGNED_INTEGER>
              objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
              objectList: BDPolledArrayProperty<OBJECTIDENTIFIER>
              objectName: BDSingletProperty<CHARACTER_STRING>
              objectType: BDSingletProperty<ENUMERATED, ObjectType>
              outOfService: BDSingletProperty<BOOLEAN>
              propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
              protocolObjectTypesSupported: BDSingletProperty<BIT_STRING>
              protocolRevision: BDSingletProperty<UNSIGNED_INTEGER>
              protocolServicesSupported: BDSingletProperty<BIT_STRING>
              protocolVersion: BDSingletProperty<UNSIGNED_INTEGER>
              reliability: BDSingletProperty<ENUMERATED, Reliability>
              segmentationSupported: BDSingletProperty<ENUMERATED, Segmentation>
              serialNumber: BDSingletProperty<CHARACTER_STRING>
              statusFlags: BDSingletProperty<BIT_STRING>
              structuredObjectList: BDPolledArrayProperty<OBJECTIDENTIFIER>
              systemStatus: BDSingletProperty<ENUMERATED, DeviceStatus>
              utcOffset: BDPolledSingletProperty<SIGNED_INTEGER>
              vendorIdentifier: BDSingletProperty<UNSIGNED_INTEGER>
              vendorName: BDSingletProperty<CHARACTER_STRING>

              Accessors

              • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                Returns BACNetAppData<OBJECTIDENTIFIER>

              Methods

              • Adds a BACnet object to this device

                +
              • opts: BDDeviceOpts

                Configuration options for this device

                +

              Returns BDDevice

              Properties

              activeCovSubscriptions: BDPolledArrayProperty<COV_SUBSCRIPTION>
              apduSegmentTimeout: BDSingletProperty<UNSIGNED_INTEGER>
              apduTimeout: BDSingletProperty<UNSIGNED_INTEGER>
              applicationSoftwareVersion: BDSingletProperty<CHARACTER_STRING>
              databaseRevision: BDSingletProperty<UNSIGNED_INTEGER>
              daylightSavingsStatus: BDPolledSingletProperty<BOOLEAN>
              description: BDSingletProperty<CHARACTER_STRING>
              deviceAddressBinding: BDArrayProperty<NULL>
              eventState: BDSingletProperty<ENUMERATED, EventState>
              firmwareRevision: BDSingletProperty<CHARACTER_STRING>
              localDate: BDPolledSingletProperty<DATE>
              localTime: BDPolledSingletProperty<TIME>
              location: BDSingletProperty<CHARACTER_STRING>
              maxApduLengthAccepted: BDSingletProperty<UNSIGNED_INTEGER>
              maxSegmentsAccepted: BDSingletProperty<UNSIGNED_INTEGER>
              modelName: BDSingletProperty<CHARACTER_STRING>
              numberOfApduRetries: BDSingletProperty<UNSIGNED_INTEGER>
              objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
              objectList: BDPolledArrayProperty<OBJECTIDENTIFIER>
              objectName: BDSingletProperty<CHARACTER_STRING>
              objectType: BDSingletProperty<ENUMERATED, ObjectType>
              outOfService: BDSingletProperty<BOOLEAN>
              propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
              protocolObjectTypesSupported: BDSingletProperty<BIT_STRING>
              protocolRevision: BDSingletProperty<UNSIGNED_INTEGER>
              protocolServicesSupported: BDSingletProperty<BIT_STRING>
              protocolVersion: BDSingletProperty<UNSIGNED_INTEGER>
              reliability: BDSingletProperty<ENUMERATED, Reliability>
              segmentationSupported: BDSingletProperty<ENUMERATED, Segmentation>
              serialNumber: BDSingletProperty<CHARACTER_STRING>
              statusFlags: BDSingletProperty<BIT_STRING>
              structuredObjectList: BDPolledArrayProperty<OBJECTIDENTIFIER>
              systemStatus: BDSingletProperty<ENUMERATED, DeviceStatus>
              utcOffset: BDPolledSingletProperty<SIGNED_INTEGER>
              vendorIdentifier: BDSingletProperty<UNSIGNED_INTEGER>
              vendorName: BDSingletProperty<CHARACTER_STRING>

              Accessors

              • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                Returns BACNetAppData<OBJECTIDENTIFIER>

              Methods

              • Adds a BACnet object to this device

                This method registers a new BACnet object with the device and adds it to the device's object list. The object must have a unique identifier (type and instance).

                Type Parameters

                • T extends BDObject

                  The specific BACnet object type

                  -

                Parameters

                • object: T

                  The BACnet object to add to this device

                  -

                Returns T

                The added object

                +

              Parameters

              • object: T

                The BACnet object to add to this device

                +

              Returns T

              The added object

              Error if an object with the same identifier already exists

              -
              • Adds a property to this object

                This method registers a new property with the object and sets up event subscriptions for property value changes.

                Type Parameters

                Parameters

                • property: T

                  The property to add

                  -

                Returns T

                The added property

                +

              Parameters

              • property: T

                The property to add

                +

              Returns T

              The added property

              Error if a property with the same identifier already exists

              -
              • Adds a subordinate BACnet object to this device

                This method registers a new BACnet object with the device and adds it to the device's object list, just as BDDevice.addObject. Additionally, however, this method also registers the object as a subordinate object of @@ -99,13 +100,13 @@ subordinate object must be a Structured View object.

                Parameters

                • subordinate: BDStructuredView

                  The Structured View object to add as a new child of this Device object

                  -

                Returns BDStructuredView

              Returns BDStructuredView

              Returns BDDevice

              The event emitter's instance for chaining

              +
              +
            • cb: EventListener<BDObjectEvents, K>

              The callback function to execute when the event is triggered

              +
            • Returns BDDevice

              The callback function for chaining

              +
              diff --git a/docs/classes/BDError.html b/docs/classes/BDError.html index 3a6a329..7b046e6 100644 --- a/docs/classes/BDError.html +++ b/docs/classes/BDError.html @@ -1,7 +1,7 @@ BDError | @bacnet-js/device
              @bacnet-js/device
                Preparing search index...

                Class BDError

                Represents a BACnet-specific error with associated error code and error class.

                BACnet errors include both an error code and an error class to provide detailed information about the nature of the error according to the BACnet specification.

                -

                Hierarchy

                • Error
                  • BDError
                Index

                Constructors

                Hierarchy

                • Error
                  • BDError
                Index

                Constructors

                Properties

                cause? class code @@ -10,21 +10,22 @@ stack? stackTraceLimit

                Methods

                Constructors

                • Creates a new BACnet error instance

                  Parameters

                  • message: string

                    Human-readable error message

                    -
                  • code: ErrorCode

                    BACnet error code from the ErrorCode enum

                    -
                  • clss: ErrorClass

                    BACnet error class from the ErrorClass enum

                    -

                  Returns BDError

                Properties

                cause?: unknown
                class: ErrorClass

                The BACnet error class that categorizes this error

                -
                code: ErrorCode

                The specific BACnet error code

                -
                message: string
                name: string
                stack?: string
                stackTraceLimit: number

                The Error.stackTraceLimit property specifies the number of stack frames +

              • code: ErrorCode

                BACnet error code from the ErrorCode enum

                +
              • clss: ErrorClass

                BACnet error class from the ErrorClass enum

                +
              • Returns BDError

                Properties

                cause?: unknown
                class: ErrorClass

                The BACnet error class that categorizes this error

                +
                code: ErrorCode

                The specific BACnet error code

                +
                message: string
                name: string
                stack?: string
                stackTraceLimit: number

                The Error.stackTraceLimit property specifies the number of stack frames collected by a stack trace (whether generated by new Error().stack or Error.captureStackTrace(obj)).

                The default value is 10 but may be set to any valid JavaScript number. Changes will affect any stack trace captured after the value has been changed.

                If set to a non-number value, or set to a negative number, stack traces will not capture any frames.

                -

                Methods

                • Creates a .stack property on targetObject, which when accessed returns +

                Methods

                • Creates a .stack property on targetObject, which when accessed returns a string representing the location in the code at which Error.captureStackTrace() was called.

                  const myObject = {};
                  Error.captureStackTrace(myObject);
                  myObject.stack; // Similar to `new Error().stack` @@ -40,5 +41,6 @@
                  function a() {
                  b();
                  }

                  function b() {
                  c();
                  }

                  function c() {
                  // Create an error without stack trace to avoid calculating the stack trace twice.
                  const { stackTraceLimit } = Error;
                  Error.stackTraceLimit = 0;
                  const error = new Error();
                  Error.stackTraceLimit = stackTraceLimit;

                  // Capture the stack trace above function b
                  Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace
                  throw error;
                  }

                  a();
                  -

                  Parameters

                  • targetObject: object
                  • OptionalconstructorOpt: Function

                  Returns void

                +

                Parameters

                • targetObject: object
                • OptionalconstructorOpt: Function

                Returns void

                • Indicates whether the argument provided is a built-in Error instance or not.

                  +

                  Parameters

                  • error: unknown

                  Returns error is Error

                diff --git a/docs/classes/BDIntegerValue.html b/docs/classes/BDIntegerValue.html index 2ecdf6d..0795559 100644 --- a/docs/classes/BDIntegerValue.html +++ b/docs/classes/BDIntegerValue.html @@ -1,4 +1,4 @@ -BDIntegerValue | @bacnet-js/device
                @bacnet-js/device
                  Preparing search index...

                  Class BDIntegerValue

                  Hierarchy

                  • BDNumericObject<ApplicationTag.SIGNED_INTEGER>
                    • BDIntegerValue
                  Index

                  Constructors

                  constructor +BDIntegerValue | @bacnet-js/device
                  @bacnet-js/device
                    Preparing search index...

                    Class BDIntegerValue

                    Hierarchy

                    • BDNumericObject<ApplicationTag.SIGNED_INTEGER>
                      • BDIntegerValue
                    Index

                    Constructors

                    Properties

                    Accessors

                    Methods

                    Constructors

                    Properties

                    covIncrement: BDSingletProperty<UNSIGNED_INTEGER>
                    description: BDSingletProperty<CHARACTER_STRING>
                    engineeringUnit: BDSingletProperty<ENUMERATED, EngineeringUnits>
                    eventState: BDSingletProperty<ENUMERATED, EventState>
                    maxPresentValue: BDSingletProperty<SIGNED_INTEGER>
                    minPresentValue: BDSingletProperty<SIGNED_INTEGER>
                    objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
                    objectName: BDSingletProperty<CHARACTER_STRING>
                    objectType: BDSingletProperty<ENUMERATED, ObjectType>
                    outOfService: BDSingletProperty<BOOLEAN>
                    presentValue: BDSingletProperty<SIGNED_INTEGER>
                    propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
                    reliability: BDSingletProperty<ENUMERATED, Reliability>
                    statusFlags: BDSingletProperty<BIT_STRING>

                    Accessors

                    • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                      Returns BACNetAppData<OBJECTIDENTIFIER>

                    Methods

                    Constructors

                    Properties

                    covIncrement: BDSingletProperty<UNSIGNED_INTEGER>
                    description: BDSingletProperty<CHARACTER_STRING>
                    engineeringUnit: BDSingletProperty<ENUMERATED, EngineeringUnits>
                    eventState: BDSingletProperty<ENUMERATED, EventState>
                    maxPresentValue: BDSingletProperty<SIGNED_INTEGER>
                    minPresentValue: BDSingletProperty<SIGNED_INTEGER>
                    objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
                    objectName: BDSingletProperty<CHARACTER_STRING>
                    objectType: BDSingletProperty<ENUMERATED, ObjectType>
                    outOfService: BDSingletProperty<BOOLEAN>
                    presentValue: BDSingletProperty<SIGNED_INTEGER>
                    propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
                    reliability: BDSingletProperty<ENUMERATED, Reliability>
                    statusFlags: BDSingletProperty<BIT_STRING>

                    Accessors

                    • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                      Returns BACNetAppData<OBJECTIDENTIFIER>

                    Methods

                    • Adds a property to this object

                      This method registers a new property with the object and sets up event subscriptions for property value changes.

                      Type Parameters

                      Parameters

                      • property: T

                        The property to add

                        -

                      Returns T

                      The added property

                      +

                    Parameters

                    • property: T

                      The property to add

                      +

                    Returns T

                    The added property

                    Error if a property with the same identifier already exists

                    -

                    Returns BDIntegerValue

                    The event emitter's instance for chaining

                    +
                    +
                  • cb: EventListener<BDObjectEvents, K>

                    The callback function to execute when the event is triggered

                    +
                  • Returns BDIntegerValue

                    The callback function for chaining

                    +
                    diff --git a/docs/classes/BDMultiStateValue.html b/docs/classes/BDMultiStateValue.html index 57714ee..11e767f 100644 --- a/docs/classes/BDMultiStateValue.html +++ b/docs/classes/BDMultiStateValue.html @@ -2,7 +2,7 @@

                    This class implements the core functionality required by all BACnet objects according to the BACnet specification. It manages object properties and handles property read/write operations and CoV notifications.

                    -

                    Hierarchy (View Summary)

                    Index

                    Constructors

                    Hierarchy (View Summary)

                    Index

                    Constructors

                    Properties

                    Accessors

                    Methods

                    Constructors

                    Properties

                    description: BDSingletProperty<CHARACTER_STRING>
                    eventState: BDSingletProperty<ENUMERATED, EventState>
                    numberOfStates: BDPolledSingletProperty<UNSIGNED_INTEGER>
                    objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
                    objectName: BDSingletProperty<CHARACTER_STRING>
                    objectType: BDSingletProperty<ENUMERATED, ObjectType>
                    outOfService: BDSingletProperty<BOOLEAN>
                    presentValue: BDSingletProperty<UNSIGNED_INTEGER>
                    propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
                    reliability: BDSingletProperty<ENUMERATED, Reliability>
                    stateText: BDPolledArrayProperty<CHARACTER_STRING>
                    statusFlags: BDSingletProperty<BIT_STRING>

                    Accessors

                    • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                      Returns BACNetAppData<OBJECTIDENTIFIER>

                    Methods

                    Constructors

                    Properties

                    description: BDSingletProperty<CHARACTER_STRING>
                    eventState: BDSingletProperty<ENUMERATED, EventState>
                    numberOfStates: BDPolledSingletProperty<UNSIGNED_INTEGER>
                    objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
                    objectName: BDSingletProperty<CHARACTER_STRING>
                    objectType: BDSingletProperty<ENUMERATED, ObjectType>
                    outOfService: BDSingletProperty<BOOLEAN>
                    presentValue: BDSingletProperty<UNSIGNED_INTEGER>
                    propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
                    reliability: BDSingletProperty<ENUMERATED, Reliability>
                    stateText: BDPolledArrayProperty<CHARACTER_STRING>
                    statusFlags: BDSingletProperty<BIT_STRING>

                    Accessors

                    • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                      Returns BACNetAppData<OBJECTIDENTIFIER>

                    Methods

                    • Adds a property to this object

                      This method registers a new property with the object and sets up event subscriptions for property value changes.

                      Type Parameters

                      Parameters

                      • property: T

                        The property to add

                        -

                      Returns T

                      The added property

                      +

                    Parameters

                    • property: T

                      The property to add

                      +

                    Returns T

                    The added property

                    Error if a property with the same identifier already exists

                    -

                    Returns BDMultiStateValue

                    The event emitter's instance for chaining

                    +
                    +
                  • cb: EventListener<BDObjectEvents, K>

                    The callback function to execute when the event is triggered

                    +
                  • Returns BDMultiStateValue

                    The callback function for chaining

                    +
                    diff --git a/docs/classes/BDObject.html b/docs/classes/BDObject.html index 0f41d94..0557637 100644 --- a/docs/classes/BDObject.html +++ b/docs/classes/BDObject.html @@ -2,7 +2,7 @@

                    This class implements the core functionality required by all BACnet objects according to the BACnet specification. It manages object properties and handles property read/write operations and CoV notifications.

                    -

                    Hierarchy (View Summary)

                    Index

                    Constructors

                    Hierarchy (View Summary)

                    Index

                    Constructors

                    Properties

                    Accessors

                    Methods

                    Constructors

                    Properties

                    description: BDSingletProperty<CHARACTER_STRING>
                    eventState: BDSingletProperty<ENUMERATED, EventState>
                    objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
                    objectName: BDSingletProperty<CHARACTER_STRING>
                    objectType: BDSingletProperty<ENUMERATED, ObjectType>
                    outOfService: BDSingletProperty<BOOLEAN>
                    propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
                    reliability: BDSingletProperty<ENUMERATED, Reliability>
                    statusFlags: BDSingletProperty<BIT_STRING>

                    Accessors

                    Methods

                    Properties

                    description: BDSingletProperty<CHARACTER_STRING>
                    eventState: BDSingletProperty<ENUMERATED, EventState>
                    objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
                    objectName: BDSingletProperty<CHARACTER_STRING>
                    objectType: BDSingletProperty<ENUMERATED, ObjectType>
                    outOfService: BDSingletProperty<BOOLEAN>
                    propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
                    reliability: BDSingletProperty<ENUMERATED, Reliability>
                    statusFlags: BDSingletProperty<BIT_STRING>

                    Accessors

                    Methods

                    • Adds a property to this object

                      This method registers a new property with the object and sets up event subscriptions for property value changes.

                      Type Parameters

                      Parameters

                      • property: T

                        The property to add

                        -

                      Returns T

                      The added property

                      +

                    Parameters

                    • property: T

                      The property to add

                      +

                    Returns T

                    The added property

                    Error if a property with the same identifier already exists

                    -

                    Returns BDObject

                    The event emitter's instance for chaining

                    +
                    +
                  • cb: EventListener<BDObjectEvents, K>

                    The callback function to execute when the event is triggered

                    +
                  • Returns BDObject

                    The callback function for chaining

                    +
                    diff --git a/docs/classes/BDPolledArrayProperty.html b/docs/classes/BDPolledArrayProperty.html index 2b55aa7..07f3f2f 100644 --- a/docs/classes/BDPolledArrayProperty.html +++ b/docs/classes/BDPolledArrayProperty.html @@ -1,4 +1,4 @@ -BDPolledArrayProperty | @bacnet-js/device
                    @bacnet-js/device
                      Preparing search index...

                      Class BDPolledArrayProperty<Tag, Type>

                      Type Parameters

                      • Tag extends ApplicationTag
                      • Type extends ApplicationTagValueTypeMap[Tag] = ApplicationTagValueTypeMap[Tag]

                      Hierarchy

                      • BDAbstractArrayProperty<Tag, Type>
                        • BDPolledArrayProperty
                      Index

                      Constructors

                      constructor +BDPolledArrayProperty | @bacnet-js/device
                      @bacnet-js/device
                        Preparing search index...

                        Class BDPolledArrayProperty<Tag, Type>

                        Type Parameters

                        • Tag extends ApplicationTag
                        • Type extends ApplicationTagValueTypeMap[Tag] = ApplicationTagValueTypeMap[Tag]

                        Hierarchy

                        • BDAbstractArrayProperty<Tag, Type>
                          • BDPolledArrayProperty
                        Index

                        Constructors

                        Properties

                        Methods

                        addListener @@ -7,25 +7,25 @@ on removeListener setData -

                        Constructors

                        Properties

                        identifier: PropertyIdentifier

                        The BACnet identifier for this property. Must be unique within the +

                        Constructors

                        Properties

                        identifier: PropertyIdentifier

                        The BACnet identifier for this property. Must be unique within the properties added to the same object.

                        -
                        type: ARRAY

                        Whether the property representes a single value or an array (or list) of +

                        type: ARRAY

                        Whether the property representes a single value or an array (or list) of values.

                        Methods

                        Methods

                        • Consumer-facing method to set property data. Implementations of this method should encapsulate retrieval logic as a task that is executed via this property's task queue.

                          -

                          Returns Promise<void>

                        +

                        Returns Promise<void>

                        diff --git a/docs/classes/BDPolledSingletProperty.html b/docs/classes/BDPolledSingletProperty.html index c18f3a0..a618c6c 100644 --- a/docs/classes/BDPolledSingletProperty.html +++ b/docs/classes/BDPolledSingletProperty.html @@ -1,4 +1,4 @@ -BDPolledSingletProperty | @bacnet-js/device
                        @bacnet-js/device
                          Preparing search index...

                          Class BDPolledSingletProperty<Tag, Type>

                          Type Parameters

                          • Tag extends ApplicationTag
                          • Type extends ApplicationTagValueTypeMap[Tag] = ApplicationTagValueTypeMap[Tag]

                          Hierarchy

                          • BDAbstractSingletProperty<Tag, Type>
                            • BDPolledSingletProperty
                          Index

                          Constructors

                          constructor +BDPolledSingletProperty | @bacnet-js/device
                          @bacnet-js/device
                            Preparing search index...

                            Class BDPolledSingletProperty<Tag, Type>

                            Type Parameters

                            • Tag extends ApplicationTag
                            • Type extends ApplicationTagValueTypeMap[Tag] = ApplicationTagValueTypeMap[Tag]

                            Hierarchy

                            • BDAbstractSingletProperty<Tag, Type>
                              • BDPolledSingletProperty
                            Index

                            Constructors

                            Properties

                            Methods

                            Constructors

                            Properties

                            identifier: PropertyIdentifier

                            The BACnet identifier for this property. Must be unique within the +

                            Constructors

                            Properties

                            identifier: PropertyIdentifier

                            The BACnet identifier for this property. Must be unique within the properties added to the same object.

                            -
                            type: SINGLET

                            Whether the property representes a single value or an array (or list) of +

                            type: SINGLET

                            Whether the property representes a single value or an array (or list) of values.

                            Methods

                            Methods

                            • Consumer-facing method to set property data. Implementations of this method should encapsulate retrieval logic as a task that is executed via this property's task queue.

                              -

                              Returns Promise<void>

                            • Commodity method to set the value of the property rather than the entire +

                              Returns Promise<void>

                            • Commodity method to set the value of the property rather than the entire data element.

                              -

                              Returns Promise<void>

                            +

                            Returns Promise<void>

                            diff --git a/docs/classes/BDPositiveIntegerValue.html b/docs/classes/BDPositiveIntegerValue.html index 61ef157..eca9b8d 100644 --- a/docs/classes/BDPositiveIntegerValue.html +++ b/docs/classes/BDPositiveIntegerValue.html @@ -1,4 +1,4 @@ -BDPositiveIntegerValue | @bacnet-js/device
                            @bacnet-js/device
                              Preparing search index...

                              Class BDPositiveIntegerValue

                              Hierarchy

                              • BDNumericObject<ApplicationTag.UNSIGNED_INTEGER>
                                • BDPositiveIntegerValue
                              Index

                              Constructors

                              constructor +BDPositiveIntegerValue | @bacnet-js/device
                              @bacnet-js/device
                                Preparing search index...

                                Class BDPositiveIntegerValue

                                Hierarchy

                                • BDNumericObject<ApplicationTag.UNSIGNED_INTEGER>
                                  • BDPositiveIntegerValue
                                Index

                                Constructors

                                Properties

                                Accessors

                                Methods

                                Constructors

                                Properties

                                covIncrement: BDSingletProperty<UNSIGNED_INTEGER>
                                description: BDSingletProperty<CHARACTER_STRING>
                                engineeringUnit: BDSingletProperty<ENUMERATED, EngineeringUnits>
                                eventState: BDSingletProperty<ENUMERATED, EventState>
                                maxPresentValue: BDSingletProperty<UNSIGNED_INTEGER>
                                minPresentValue: BDSingletProperty<UNSIGNED_INTEGER>
                                objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
                                objectName: BDSingletProperty<CHARACTER_STRING>
                                objectType: BDSingletProperty<ENUMERATED, ObjectType>
                                outOfService: BDSingletProperty<BOOLEAN>
                                presentValue: BDSingletProperty<UNSIGNED_INTEGER>
                                propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
                                reliability: BDSingletProperty<ENUMERATED, Reliability>
                                statusFlags: BDSingletProperty<BIT_STRING>

                                Accessors

                                • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                                  Returns BACNetAppData<OBJECTIDENTIFIER>

                                Methods

                                Constructors

                                Properties

                                covIncrement: BDSingletProperty<UNSIGNED_INTEGER>
                                description: BDSingletProperty<CHARACTER_STRING>
                                engineeringUnit: BDSingletProperty<ENUMERATED, EngineeringUnits>
                                eventState: BDSingletProperty<ENUMERATED, EventState>
                                maxPresentValue: BDSingletProperty<UNSIGNED_INTEGER>
                                minPresentValue: BDSingletProperty<UNSIGNED_INTEGER>
                                objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
                                objectName: BDSingletProperty<CHARACTER_STRING>
                                objectType: BDSingletProperty<ENUMERATED, ObjectType>
                                outOfService: BDSingletProperty<BOOLEAN>
                                presentValue: BDSingletProperty<UNSIGNED_INTEGER>
                                propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
                                reliability: BDSingletProperty<ENUMERATED, Reliability>
                                statusFlags: BDSingletProperty<BIT_STRING>

                                Accessors

                                • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                                  Returns BACNetAppData<OBJECTIDENTIFIER>

                                Methods

                                • Adds a property to this object

                                  This method registers a new property with the object and sets up event subscriptions for property value changes.

                                  Type Parameters

                                  Parameters

                                  • property: T

                                    The property to add

                                    -

                                  Returns T

                                  The added property

                                  +

                                Parameters

                                • property: T

                                  The property to add

                                  +

                                Returns T

                                The added property

                                Error if a property with the same identifier already exists

                                -

                                Returns BDPositiveIntegerValue

                                The event emitter's instance for chaining

                                +
                                +
                              • cb: EventListener<BDObjectEvents, K>

                                The callback function to execute when the event is triggered

                                +
                              • Returns BDPositiveIntegerValue

                                The callback function for chaining

                                +
                                diff --git a/docs/classes/BDSingletProperty.html b/docs/classes/BDSingletProperty.html index 55200eb..669e449 100644 --- a/docs/classes/BDSingletProperty.html +++ b/docs/classes/BDSingletProperty.html @@ -1,4 +1,4 @@ -BDSingletProperty | @bacnet-js/device
                                @bacnet-js/device
                                  Preparing search index...

                                  Class BDSingletProperty<Tag, Type>

                                  Type Parameters

                                  • Tag extends ApplicationTag
                                  • Type extends ApplicationTagValueTypeMap[Tag] = ApplicationTagValueTypeMap[Tag]

                                  Hierarchy

                                  • BDAbstractSingletProperty<Tag, Type>
                                    • BDSingletProperty
                                  Index

                                  Constructors

                                  constructor +BDSingletProperty | @bacnet-js/device
                                  @bacnet-js/device
                                    Preparing search index...

                                    Class BDSingletProperty<Tag, Type>

                                    Type Parameters

                                    • Tag extends ApplicationTag
                                    • Type extends ApplicationTagValueTypeMap[Tag] = ApplicationTagValueTypeMap[Tag]

                                    Hierarchy

                                    • BDAbstractSingletProperty<Tag, Type>
                                      • BDSingletProperty
                                    Index

                                    Constructors

                                    Properties

                                    Methods

                                    Constructors

                                    • Type Parameters

                                      • Tag extends ApplicationTag
                                      • Type extends any = ApplicationTagValueTypeMap[Tag]

                                      Parameters

                                      • identifier: PropertyIdentifier
                                      • type: Tag
                                      • writable: boolean
                                      • value: Type
                                      • Optionalencoding: CharacterStringEncoding

                                      Returns BDSingletProperty<Tag, Type>

                                    Properties

                                    identifier: PropertyIdentifier

                                    The BACnet identifier for this property. Must be unique within the +

                                    Constructors

                                    • Type Parameters

                                      • Tag extends ApplicationTag
                                      • Type extends any = ApplicationTagValueTypeMap[Tag]

                                      Parameters

                                      • identifier: PropertyIdentifier
                                      • type: Tag
                                      • writable: boolean
                                      • value: Type
                                      • Optionalencoding: CharacterStringEncoding

                                      Returns BDSingletProperty<Tag, Type>

                                    Properties

                                    identifier: PropertyIdentifier

                                    The BACnet identifier for this property. Must be unique within the properties added to the same object.

                                    -
                                    type: SINGLET

                                    Whether the property representes a single value or an array (or list) of +

                                    type: SINGLET

                                    Whether the property representes a single value or an array (or list) of values.

                                    Methods

                                    Methods

                                    • Consumer-facing method to set property data. Implementations of this method should encapsulate retrieval logic as a task that is executed via this property's task queue.

                                      -

                                      Parameters

                                      Returns Promise<void>

                                    • Commodity method to set the value of the property rather than the entire +

                                      Parameters

                                      Returns Promise<void>

                                    • Commodity method to set the value of the property rather than the entire data element.

                                      -

                                      Parameters

                                      Returns Promise<void>

                                    +

                                    Parameters

                                    Returns Promise<void>

                                    diff --git a/docs/classes/BDStructuredView.html b/docs/classes/BDStructuredView.html index 1c89060..eeb0099 100644 --- a/docs/classes/BDStructuredView.html +++ b/docs/classes/BDStructuredView.html @@ -2,7 +2,7 @@ a container to hold references to subordinate objects, which may include other Structured View objects, thereby allowing multilevel hierarchies to be created. The hierarchies are intended to convey a structure or organization.

                                    -

                                    Hierarchy (View Summary)

                                    Index

                                    Constructors

                                    Hierarchy (View Summary)

                                    Index

                                    Constructors

                                    Properties

                                    Accessors

                                    Methods

                                    Constructors

                                    Properties

                                    description: BDSingletProperty<CHARACTER_STRING>
                                    eventState: BDSingletProperty<ENUMERATED, EventState>
                                    nodeType: BDSingletProperty<ENUMERATED, NodeType>
                                    objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
                                    objectName: BDSingletProperty<CHARACTER_STRING>
                                    objectType: BDSingletProperty<ENUMERATED, ObjectType>
                                    outOfService: BDSingletProperty<BOOLEAN>
                                    propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
                                    reliability: BDSingletProperty<ENUMERATED, Reliability>
                                    statusFlags: BDSingletProperty<BIT_STRING>
                                    subordinateList: BDPolledArrayProperty<OBJECTIDENTIFIER>

                                    Accessors

                                    • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                                      Returns BACNetAppData<OBJECTIDENTIFIER>

                                    Methods

                                    Constructors

                                    Properties

                                    description: BDSingletProperty<CHARACTER_STRING>
                                    eventState: BDSingletProperty<ENUMERATED, EventState>
                                    nodeType: BDSingletProperty<ENUMERATED, NodeType>
                                    objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
                                    objectName: BDSingletProperty<CHARACTER_STRING>
                                    objectType: BDSingletProperty<ENUMERATED, ObjectType>
                                    outOfService: BDSingletProperty<BOOLEAN>
                                    propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
                                    reliability: BDSingletProperty<ENUMERATED, Reliability>
                                    statusFlags: BDSingletProperty<BIT_STRING>
                                    subordinateList: BDPolledArrayProperty<OBJECTIDENTIFIER>

                                    Accessors

                                    • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                                      Returns BACNetAppData<OBJECTIDENTIFIER>

                                    Methods

                                    • Adds a property to this object

                                      This method registers a new property with the object and sets up event subscriptions for property value changes.

                                      Type Parameters

                                      Parameters

                                      • property: T

                                        The property to add

                                        -

                                      Returns T

                                      The added property

                                      +

                                    Parameters

                                    • property: T

                                      The property to add

                                      +

                                    Returns T

                                    The added property

                                    Error if a property with the same identifier already exists

                                    -
                                    • Adds a subordinate object to this structured view.

                                      Type Parameters

                                      Parameters

                                      • subordinate: T

                                        The BACnet object to add as a new child of this Structured View object

                                        -

                                      Returns T

                                    Returns T

                                    Returns BDStructuredView

                                    The event emitter's instance for chaining

                                    +
                                    +
                                  • cb: EventListener<BDObjectEvents, K>

                                    The callback function to execute when the event is triggered

                                    +
                                  • Returns BDStructuredView

                                    The callback function for chaining

                                    +
                                    diff --git a/docs/classes/BDTimeValue.html b/docs/classes/BDTimeValue.html index bd38224..1db3040 100644 --- a/docs/classes/BDTimeValue.html +++ b/docs/classes/BDTimeValue.html @@ -2,7 +2,7 @@

                                    This class implements the core functionality required by all BACnet objects according to the BACnet specification. It manages object properties and handles property read/write operations and CoV notifications.

                                    -

                                    Hierarchy (View Summary)

                                    Index

                                    Constructors

                                    Hierarchy (View Summary)

                                    Index

                                    Constructors

                                    Properties

                                    Accessors

                                    Methods

                                    Constructors

                                    Properties

                                    description: BDSingletProperty<CHARACTER_STRING>
                                    eventState: BDSingletProperty<ENUMERATED, EventState>
                                    objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
                                    objectName: BDSingletProperty<CHARACTER_STRING>
                                    objectType: BDSingletProperty<ENUMERATED, ObjectType>
                                    outOfService: BDSingletProperty<BOOLEAN>
                                    presentValue: BDSingletProperty<TIME>
                                    propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
                                    reliability: BDSingletProperty<ENUMERATED, Reliability>
                                    statusFlags: BDSingletProperty<BIT_STRING>

                                    Accessors

                                    • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                                      Returns BACNetAppData<OBJECTIDENTIFIER>

                                    Methods

                                    Constructors

                                    Properties

                                    description: BDSingletProperty<CHARACTER_STRING>
                                    eventState: BDSingletProperty<ENUMERATED, EventState>
                                    objectIdentifier: BDPolledSingletProperty<OBJECTIDENTIFIER>
                                    objectName: BDSingletProperty<CHARACTER_STRING>
                                    objectType: BDSingletProperty<ENUMERATED, ObjectType>
                                    outOfService: BDSingletProperty<BOOLEAN>
                                    presentValue: BDSingletProperty<TIME>
                                    propertyList: BDPolledArrayProperty<ENUMERATED, PropertyIdentifier>
                                    reliability: BDSingletProperty<ENUMERATED, Reliability>
                                    statusFlags: BDSingletProperty<BIT_STRING>

                                    Accessors

                                    • get identifier(): BACNetAppData<OBJECTIDENTIFIER>

                                      Returns BACNetAppData<OBJECTIDENTIFIER>

                                    Methods

                                    • Adds a property to this object

                                      This method registers a new property with the object and sets up event subscriptions for property value changes.

                                      Type Parameters

                                      Parameters

                                      • property: T

                                        The property to add

                                        -

                                      Returns T

                                      The added property

                                      +

                                    Parameters

                                    • property: T

                                      The property to add

                                      +

                                    Returns T

                                    The added property

                                    Error if a property with the same identifier already exists

                                    -

                                    Returns BDTimeValue

                                    The event emitter's instance for chaining

                                    +
                                    +
                                  • cb: EventListener<BDObjectEvents, K>

                                    The callback function to execute when the event is triggered

                                    +
                                  • Returns BDTimeValue

                                    The callback function for chaining

                                    +
                                    diff --git a/docs/classes/TaskQueue.html b/docs/classes/TaskQueue.html index c56a3cf..87541bb 100644 --- a/docs/classes/TaskQueue.html +++ b/docs/classes/TaskQueue.html @@ -1,8 +1,8 @@ TaskQueue | @bacnet-js/device
                                    @bacnet-js/device
                                      Preparing search index...

                                      Class TaskQueue

                                      A queue that takes in and runs asynchronous functions (tasks) in series.

                                      -
                                      Index

                                      Constructors

                                      Index

                                      Constructors

                                      Methods

                                      Constructors

                                      Methods

                                      • Runs a task function in the queue.

                                        +

                                      Constructors

                                      Methods

                                      • Runs a task function in the queue.

                                        Type Parameters

                                        • O

                                        Parameters

                                        Returns Promise<O>

                                        a promise that resolves to the same value as that which is returned by the task function.

                                        -
                                      +
                                      diff --git a/docs/enums/BDPropertyType.html b/docs/enums/BDPropertyType.html index b0d8939..a13afe3 100644 --- a/docs/enums/BDPropertyType.html +++ b/docs/enums/BDPropertyType.html @@ -1,6 +1,6 @@ BDPropertyType | @bacnet-js/device
                                      @bacnet-js/device
                                        Preparing search index...

                                        Enumeration BDPropertyType

                                        Enumerates the types of properties that can be defined.

                                        -
                                        Index

                                        Enumeration Members

                                        Index

                                        Enumeration Members

                                        Enumeration Members

                                        ARRAY: 1

                                        A property whose data consists of an array of values.

                                        -
                                        SINGLET: 0

                                        A property whose data consists of a single value.

                                        -
                                        +
                                        SINGLET: 0

                                        A property whose data consists of a single value.

                                        +
                                        diff --git a/docs/hierarchy.html b/docs/hierarchy.html index da41855..ede1b4e 100644 --- a/docs/hierarchy.html +++ b/docs/hierarchy.html @@ -1 +1 @@ -@bacnet-js/device
                                        @bacnet-js/device
                                          Preparing search index...
                                          +@bacnet-js/device
                                          @bacnet-js/device
                                            Preparing search index...
                                            diff --git a/docs/index.html b/docs/index.html index a235f11..1d0fc9d 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,5 +1,7 @@ -@bacnet-js/device
                                            @bacnet-js/device
                                              Preparing search index...

                                              @bacnet-js/device

                                              @bacnet-js/device

                                              A TypeScript library for implementing BACnet/IP devices in Node.js.

                                              -

                                              Under heavy development as of June 2025.

                                              +@bacnet-js/device
                                              @bacnet-js/device
                                                Preparing search index...

                                                @bacnet-js/device

                                                @bacnet-js/device

                                                +

                                                A TypeScript library for implementing BACnet/IP devices in Node.js.

                                                + +

                                                Under heavy development as of June 2025.

                                                This project was started by Jacopo Scazzosi (@jacoscaz), who continues to maintain it, halfway through 2025. However, just a few weeks after the first alpha release, it was then moved to the newly-created bacnet-js organization, @@ -7,7 +9,8 @@

                                                This library provides a high-level API that simplifies the instantiation and +

                                                +

                                                This library provides a high-level API that simplifies the instantiation and management of BACnet objects by abstracting network operations (subscription management, CoV propagation, value updates) and accurately modelling BACnet's object types through dedicated classes that automatically instantiate all @@ -29,16 +32,20 @@

                                                  + + -

                                                  This project is licensed under the MIT License - see the LICENSE file +

                                                  +

                                                  This project is licensed under the MIT License - see the LICENSE file for details.

                                                  -

                                                  See the examples directory for working usage examples which you should be +

                                                  +

                                                  See the examples directory for working usage examples which you should be able to run locally and use with any BACnet client of your choice. For local testing I tend to use YABE, which is native to Windows but can be made to work reasonably well on macOS and Linux via Wine.

                                                  -

                                                  See TESTING.md.

                                                  + +

                                                  See TESTING.md.

                                                diff --git a/docs/interfaces/BDAnalogInputOpts.html b/docs/interfaces/BDAnalogInputOpts.html index 5aacc83..a628e35 100644 --- a/docs/interfaces/BDAnalogInputOpts.html +++ b/docs/interfaces/BDAnalogInputOpts.html @@ -1,4 +1,4 @@ -BDAnalogInputOpts | @bacnet-js/device
                                                @bacnet-js/device
                                                  Preparing search index...

                                                  Interface BDAnalogInputOpts

                                                  interface BDAnalogInputOpts {
                                                      covIncrement?: number;
                                                      description?: string;
                                                      maxPresentValue?: number;
                                                      minPresentValue?: number;
                                                      name: string;
                                                      presentValue?: number;
                                                      unit: EngineeringUnits;
                                                      writable?: boolean;
                                                      writableOutOfService?: boolean;
                                                  }

                                                  Hierarchy (View Summary)

                                                  Index

                                                  Properties

                                                  covIncrement? +BDAnalogInputOpts | @bacnet-js/device
                                                  @bacnet-js/device
                                                    Preparing search index...

                                                    Interface BDAnalogInputOpts

                                                    interface BDAnalogInputOpts {
                                                        covIncrement?: number;
                                                        description?: string;
                                                        maxPresentValue?: number;
                                                        minPresentValue?: number;
                                                        name: string;
                                                        presentValue?: number;
                                                        unit: EngineeringUnits;
                                                        writable?: boolean;
                                                        writableOutOfService?: boolean;
                                                    }

                                                    Hierarchy (View Summary)

                                                    Index

                                                    Properties

                                                    covIncrement?: number
                                                    description?: string

                                                    An optional textual description of the object (Description property)

                                                    -
                                                    maxPresentValue?: number
                                                    minPresentValue?: number
                                                    name: string

                                                    The object's name (Object_Name property)

                                                    -
                                                    presentValue?: number
                                                    unit: EngineeringUnits
                                                    writable?: boolean
                                                    writableOutOfService?: boolean

                                                    Whether the Out_Of_Service property is writable from the BACnet network.

                                                    +

                                                    Properties

                                                    covIncrement?: number
                                                    description?: string

                                                    An optional textual description of the object (Description property)

                                                    +
                                                    maxPresentValue?: number
                                                    minPresentValue?: number
                                                    name: string

                                                    The object's name (Object_Name property)

                                                    +
                                                    presentValue?: number
                                                    unit: EngineeringUnits
                                                    writable?: boolean
                                                    writableOutOfService?: boolean

                                                    Whether the Out_Of_Service property is writable from the BACnet network.

                                                    When true, remote BACnet clients can set the object's Out_Of_Service property to TRUE or FALSE. Changing the property causes the object to emit an outofservice or inservice event accordingly. Default is false.

                                                    false

                                                    -
                                                    +
                                                    diff --git a/docs/interfaces/BDAnalogOutputOpts.html b/docs/interfaces/BDAnalogOutputOpts.html index ecebeae..f9e2719 100644 --- a/docs/interfaces/BDAnalogOutputOpts.html +++ b/docs/interfaces/BDAnalogOutputOpts.html @@ -1,4 +1,4 @@ -BDAnalogOutputOpts | @bacnet-js/device
                                                    @bacnet-js/device
                                                      Preparing search index...

                                                      Interface BDAnalogOutputOpts

                                                      interface BDAnalogOutputOpts {
                                                          covIncrement?: number;
                                                          description?: string;
                                                          maxPresentValue?: number;
                                                          minPresentValue?: number;
                                                          name: string;
                                                          presentValue?: number;
                                                          unit: EngineeringUnits;
                                                          writable?: boolean;
                                                          writableOutOfService?: boolean;
                                                      }

                                                      Hierarchy (View Summary)

                                                      Index

                                                      Properties

                                                      covIncrement? +BDAnalogOutputOpts | @bacnet-js/device
                                                      @bacnet-js/device
                                                        Preparing search index...

                                                        Interface BDAnalogOutputOpts

                                                        interface BDAnalogOutputOpts {
                                                            covIncrement?: number;
                                                            description?: string;
                                                            maxPresentValue?: number;
                                                            minPresentValue?: number;
                                                            name: string;
                                                            presentValue?: number;
                                                            unit: EngineeringUnits;
                                                            writable?: boolean;
                                                            writableOutOfService?: boolean;
                                                        }

                                                        Hierarchy (View Summary)

                                                        Index

                                                        Properties

                                                        covIncrement?: number
                                                        description?: string

                                                        An optional textual description of the object (Description property)

                                                        -
                                                        maxPresentValue?: number
                                                        minPresentValue?: number
                                                        name: string

                                                        The object's name (Object_Name property)

                                                        -
                                                        presentValue?: number
                                                        unit: EngineeringUnits
                                                        writable?: boolean
                                                        writableOutOfService?: boolean

                                                        Whether the Out_Of_Service property is writable from the BACnet network.

                                                        +

                                                        Properties

                                                        covIncrement?: number
                                                        description?: string

                                                        An optional textual description of the object (Description property)

                                                        +
                                                        maxPresentValue?: number
                                                        minPresentValue?: number
                                                        name: string

                                                        The object's name (Object_Name property)

                                                        +
                                                        presentValue?: number
                                                        unit: EngineeringUnits
                                                        writable?: boolean
                                                        writableOutOfService?: boolean

                                                        Whether the Out_Of_Service property is writable from the BACnet network.

                                                        When true, remote BACnet clients can set the object's Out_Of_Service property to TRUE or FALSE. Changing the property causes the object to emit an outofservice or inservice event accordingly. Default is false.

                                                        false

                                                        -
                                                        +
                                                        diff --git a/docs/interfaces/BDAnalogValueOpts.html b/docs/interfaces/BDAnalogValueOpts.html index 2c92691..e9f8a3a 100644 --- a/docs/interfaces/BDAnalogValueOpts.html +++ b/docs/interfaces/BDAnalogValueOpts.html @@ -1,4 +1,4 @@ -BDAnalogValueOpts | @bacnet-js/device
                                                        @bacnet-js/device
                                                          Preparing search index...

                                                          Interface BDAnalogValueOpts

                                                          interface BDAnalogValueOpts {
                                                              covIncrement?: number;
                                                              description?: string;
                                                              maxPresentValue?: number;
                                                              minPresentValue?: number;
                                                              name: string;
                                                              presentValue?: number;
                                                              unit: EngineeringUnits;
                                                              writable?: boolean;
                                                              writableOutOfService?: boolean;
                                                          }

                                                          Hierarchy (View Summary)

                                                          Index

                                                          Properties

                                                          covIncrement? +BDAnalogValueOpts | @bacnet-js/device
                                                          @bacnet-js/device
                                                            Preparing search index...

                                                            Interface BDAnalogValueOpts

                                                            interface BDAnalogValueOpts {
                                                                covIncrement?: number;
                                                                description?: string;
                                                                maxPresentValue?: number;
                                                                minPresentValue?: number;
                                                                name: string;
                                                                presentValue?: number;
                                                                unit: EngineeringUnits;
                                                                writable?: boolean;
                                                                writableOutOfService?: boolean;
                                                            }

                                                            Hierarchy (View Summary)

                                                            Index

                                                            Properties

                                                            covIncrement?: number
                                                            description?: string

                                                            An optional textual description of the object (Description property)

                                                            -
                                                            maxPresentValue?: number
                                                            minPresentValue?: number
                                                            name: string

                                                            The object's name (Object_Name property)

                                                            -
                                                            presentValue?: number
                                                            unit: EngineeringUnits
                                                            writable?: boolean
                                                            writableOutOfService?: boolean

                                                            Whether the Out_Of_Service property is writable from the BACnet network.

                                                            +

                                                            Properties

                                                            covIncrement?: number
                                                            description?: string

                                                            An optional textual description of the object (Description property)

                                                            +
                                                            maxPresentValue?: number
                                                            minPresentValue?: number
                                                            name: string

                                                            The object's name (Object_Name property)

                                                            +
                                                            presentValue?: number
                                                            unit: EngineeringUnits
                                                            writable?: boolean
                                                            writableOutOfService?: boolean

                                                            Whether the Out_Of_Service property is writable from the BACnet network.

                                                            When true, remote BACnet clients can set the object's Out_Of_Service property to TRUE or FALSE. Changing the property causes the object to emit an outofservice or inservice event accordingly. Default is false.

                                                            false

                                                            -
                                                            +
                                                            diff --git a/docs/interfaces/BDBinaryValueOpts.html b/docs/interfaces/BDBinaryValueOpts.html index 49d12aa..fd53b8e 100644 --- a/docs/interfaces/BDBinaryValueOpts.html +++ b/docs/interfaces/BDBinaryValueOpts.html @@ -2,18 +2,18 @@

                                                            This interface defines the base configuration parameters shared by every BACnet object type. Subclass-specific option interfaces extend this interface with additional properties.

                                                            -
                                                            interface BDBinaryValueOpts {
                                                                description?: string;
                                                                name: string;
                                                                presentValue?: BinaryPV;
                                                                writable: boolean;
                                                                writableOutOfService?: boolean;
                                                            }

                                                            Hierarchy (View Summary)

                                                            Index

                                                            Properties

                                                            interface BDBinaryValueOpts {
                                                                description?: string;
                                                                name: string;
                                                                presentValue?: BinaryPV;
                                                                writable: boolean;
                                                                writableOutOfService?: boolean;
                                                            }

                                                            Hierarchy (View Summary)

                                                            Index

                                                            Properties

                                                            description?: string

                                                            An optional textual description of the object (Description property)

                                                            -
                                                            name: string

                                                            The object's name (Object_Name property)

                                                            -
                                                            presentValue?: BinaryPV
                                                            writable: boolean
                                                            writableOutOfService?: boolean

                                                            Whether the Out_Of_Service property is writable from the BACnet network.

                                                            +
                                                            name: string

                                                            The object's name (Object_Name property)

                                                            +
                                                            presentValue?: BinaryPV
                                                            writable: boolean
                                                            writableOutOfService?: boolean

                                                            Whether the Out_Of_Service property is writable from the BACnet network.

                                                            When true, remote BACnet clients can set the object's Out_Of_Service property to TRUE or FALSE. Changing the property causes the object to emit an outofservice or inservice event accordingly. Default is false.

                                                            false

                                                            -
                                                            +
                                                            diff --git a/docs/interfaces/BDCharacterStringValueOpts.html b/docs/interfaces/BDCharacterStringValueOpts.html index 009080a..ecff4d1 100644 --- a/docs/interfaces/BDCharacterStringValueOpts.html +++ b/docs/interfaces/BDCharacterStringValueOpts.html @@ -2,18 +2,18 @@

                                                            This interface defines the base configuration parameters shared by every BACnet object type. Subclass-specific option interfaces extend this interface with additional properties.

                                                            -
                                                            interface BDCharacterStringValueOpts {
                                                                description?: string;
                                                                name: string;
                                                                presentValue?: string;
                                                                writable?: boolean;
                                                                writableOutOfService?: boolean;
                                                            }

                                                            Hierarchy (View Summary)

                                                            Index

                                                            Properties

                                                            interface BDCharacterStringValueOpts {
                                                                description?: string;
                                                                name: string;
                                                                presentValue?: string;
                                                                writable?: boolean;
                                                                writableOutOfService?: boolean;
                                                            }

                                                            Hierarchy (View Summary)

                                                            Index

                                                            Properties

                                                            description?: string

                                                            An optional textual description of the object (Description property)

                                                            -
                                                            name: string

                                                            The object's name (Object_Name property)

                                                            -
                                                            presentValue?: string
                                                            writable?: boolean
                                                            writableOutOfService?: boolean

                                                            Whether the Out_Of_Service property is writable from the BACnet network.

                                                            +
                                                            name: string

                                                            The object's name (Object_Name property)

                                                            +
                                                            presentValue?: string
                                                            writable?: boolean
                                                            writableOutOfService?: boolean

                                                            Whether the Out_Of_Service property is writable from the BACnet network.

                                                            When true, remote BACnet clients can set the object's Out_Of_Service property to TRUE or FALSE. Changing the property causes the object to emit an outofservice or inservice event accordingly. Default is false.

                                                            false

                                                            -
                                                            +
                                                            diff --git a/docs/interfaces/BDDateTimeValueOpts.html b/docs/interfaces/BDDateTimeValueOpts.html index 179ebc3..de5a733 100644 --- a/docs/interfaces/BDDateTimeValueOpts.html +++ b/docs/interfaces/BDDateTimeValueOpts.html @@ -2,18 +2,18 @@

                                                            This interface defines the base configuration parameters shared by every BACnet object type. Subclass-specific option interfaces extend this interface with additional properties.

                                                            -
                                                            interface BDDateTimeValueOpts {
                                                                description?: string;
                                                                name: string;
                                                                presentValue?: Date;
                                                                writable?: boolean;
                                                                writableOutOfService?: boolean;
                                                            }

                                                            Hierarchy (View Summary)

                                                            Index

                                                            Properties

                                                            interface BDDateTimeValueOpts {
                                                                description?: string;
                                                                name: string;
                                                                presentValue?: Date;
                                                                writable?: boolean;
                                                                writableOutOfService?: boolean;
                                                            }

                                                            Hierarchy (View Summary)

                                                            Index

                                                            Properties

                                                            description?: string

                                                            An optional textual description of the object (Description property)

                                                            -
                                                            name: string

                                                            The object's name (Object_Name property)

                                                            -
                                                            presentValue?: Date
                                                            writable?: boolean
                                                            writableOutOfService?: boolean

                                                            Whether the Out_Of_Service property is writable from the BACnet network.

                                                            +
                                                            name: string

                                                            The object's name (Object_Name property)

                                                            +
                                                            presentValue?: Date
                                                            writable?: boolean
                                                            writableOutOfService?: boolean

                                                            Whether the Out_Of_Service property is writable from the BACnet network.

                                                            When true, remote BACnet clients can set the object's Out_Of_Service property to TRUE or FALSE. Changing the property causes the object to emit an outofservice or inservice event accordingly. Default is false.

                                                            false

                                                            -
                                                            +
                                                            diff --git a/docs/interfaces/BDDateValueOpts.html b/docs/interfaces/BDDateValueOpts.html index 69836bb..ca241dc 100644 --- a/docs/interfaces/BDDateValueOpts.html +++ b/docs/interfaces/BDDateValueOpts.html @@ -2,18 +2,18 @@

                                                            This interface defines the base configuration parameters shared by every BACnet object type. Subclass-specific option interfaces extend this interface with additional properties.

                                                            -
                                                            interface BDDateValueOpts {
                                                                description?: string;
                                                                name: string;
                                                                presentValue?: Date;
                                                                writable?: boolean;
                                                                writableOutOfService?: boolean;
                                                            }

                                                            Hierarchy (View Summary)

                                                            Index

                                                            Properties

                                                            interface BDDateValueOpts {
                                                                description?: string;
                                                                name: string;
                                                                presentValue?: Date;
                                                                writable?: boolean;
                                                                writableOutOfService?: boolean;
                                                            }

                                                            Hierarchy (View Summary)

                                                            Index

                                                            Properties

                                                            description?: string

                                                            An optional textual description of the object (Description property)

                                                            -
                                                            name: string

                                                            The object's name (Object_Name property)

                                                            -
                                                            presentValue?: Date
                                                            writable?: boolean
                                                            writableOutOfService?: boolean

                                                            Whether the Out_Of_Service property is writable from the BACnet network.

                                                            +
                                                            name: string

                                                            The object's name (Object_Name property)

                                                            +
                                                            presentValue?: Date
                                                            writable?: boolean
                                                            writableOutOfService?: boolean

                                                            Whether the Out_Of_Service property is writable from the BACnet network.

                                                            When true, remote BACnet clients can set the object's Out_Of_Service property to TRUE or FALSE. Changing the property causes the object to emit an outofservice or inservice event accordingly. Default is false.

                                                            false

                                                            -
                                                            +
                                                            diff --git a/docs/interfaces/BDDeviceEvents.html b/docs/interfaces/BDDeviceEvents.html index 0f5f799..c2bb953 100644 --- a/docs/interfaces/BDDeviceEvents.html +++ b/docs/interfaces/BDDeviceEvents.html @@ -1,12 +1,12 @@ BDDeviceEvents | @bacnet-js/device
                                                            @bacnet-js/device
                                                              Preparing search index...

                                                              Interface BDDeviceEvents

                                                              Events that can be emitted by a BACnet node

                                                              -
                                                              interface BDDeviceEvents {
                                                                  aftercov: [
                                                                      data: | BACNetAppData<ApplicationTag, any>
                                                                      | BACNetAppData<ApplicationTag, any>[],
                                                                      property: BDAbstractProperty<any, any, any>,
                                                                      object: BDObject,
                                                                  ];
                                                                  error: [err: Error];
                                                                  inservice: [];
                                                                  listening: [];
                                                                  outofservice: [];
                                                                  [key: string]: any[];
                                                              }

                                                              Hierarchy (View Summary)

                                                              Indexable

                                                              • [key: string]: any[]
                                                              Index

                                                              Properties

                                                              interface BDDeviceEvents {
                                                                  aftercov: [
                                                                      data: | BACNetAppData<ApplicationTag, any>
                                                                      | BACNetAppData<ApplicationTag, any>[],
                                                                      property: BDAbstractProperty<any, any, any>,
                                                                      object: BDObject,
                                                                  ];
                                                                  error: [err: Error];
                                                                  inservice: [];
                                                                  listening: [];
                                                                  outofservice: [];
                                                                  [key: string]: any[];
                                                              }

                                                              Hierarchy (View Summary)

                                                              Indexable

                                                              • [key: string]: any[]
                                                              Index

                                                              Properties

                                                              aftercov: [
                                                                  data: | BACNetAppData<ApplicationTag, any>
                                                                  | BACNetAppData<ApplicationTag, any>[],
                                                                  property: BDAbstractProperty<any, any, any>,
                                                                  object: BDObject,
                                                              ]

                                                              Emitted after a property value has changed

                                                              -
                                                              error: [err: Error]

                                                              Emitted when an error occurs in the BACnet node

                                                              -
                                                              inservice: []

                                                              Emitted when the object's Out_Of_Service property is set to false, either from the network or locally

                                                              -
                                                              listening: []

                                                              Emitted when the BACnet node starts listening on the network

                                                              -
                                                              outofservice: []

                                                              Emitted when the object's Out_Of_Service property is set to true, either from the network or locally

                                                              -
                                                              +
                                                              error: [err: Error]

                                                              Emitted when an error occurs in the BACnet node

                                                              +
                                                              inservice: []

                                                              Emitted when the object's Out_Of_Service property is set to false, either from the network or locally

                                                              +
                                                              listening: []

                                                              Emitted when the BACnet node starts listening on the network

                                                              +
                                                              outofservice: []

                                                              Emitted when the object's Out_Of_Service property is set to true, either from the network or locally

                                                              +
                                                              diff --git a/docs/interfaces/BDDeviceOpts.html b/docs/interfaces/BDDeviceOpts.html index 9dc5556..4812f84 100644 --- a/docs/interfaces/BDDeviceOpts.html +++ b/docs/interfaces/BDDeviceOpts.html @@ -1,7 +1,7 @@ BDDeviceOpts | @bacnet-js/device
                                                              @bacnet-js/device
                                                                Preparing search index...

                                                                Interface BDDeviceOpts

                                                                Configuration options for creating a BACnet Device object

                                                                This interface defines the parameters required to initialize a BACnet Device, including identification, vendor information, and protocol configuration.

                                                                -
                                                                interface BDDeviceOpts {
                                                                    apduMaxLength?: number;
                                                                    apduRetries?: number;
                                                                    apduSegmentTimeout?: number;
                                                                    apduTimeout?: number;
                                                                    applicationSoftwareVersion?: string;
                                                                    broadcastAddress?: string;
                                                                    databaseRevision?: number;
                                                                    description?: string;
                                                                    firmwareRevision?: string;
                                                                    interface?: string;
                                                                    location?: string;
                                                                    modelName?: string;
                                                                    name: string;
                                                                    port?: number;
                                                                    reuseAddr?: boolean;
                                                                    serialNumber?: string;
                                                                    transport?: any;
                                                                    vendorId?: number;
                                                                    vendorName?: string;
                                                                    writableOutOfService?: boolean;
                                                                }

                                                                Hierarchy (View Summary)

                                                                Index

                                                                Properties

                                                                interface BDDeviceOpts {
                                                                    apduMaxLength?: number;
                                                                    apduRetries?: number;
                                                                    apduSegmentTimeout?: number;
                                                                    apduTimeout?: number;
                                                                    applicationSoftwareVersion?: string;
                                                                    broadcastAddress?: string;
                                                                    databaseRevision?: number;
                                                                    description?: string;
                                                                    firmwareRevision?: string;
                                                                    interface?: string;
                                                                    location?: string;
                                                                    modelName?: string;
                                                                    name: string;
                                                                    objectNumberingProvider?: BDObjectNumberingProvider;
                                                                    port?: number;
                                                                    reuseAddr?: boolean;
                                                                    serialNumber?: string;
                                                                    transport?: any;
                                                                    vendorId?: number;
                                                                    vendorName?: string;
                                                                    writableOutOfService?: boolean;
                                                                }

                                                                Hierarchy (View Summary)

                                                                Index

                                                                Properties

                                                                apduMaxLength?: number

                                                                Maximum APDU length this device can accept

                                                                -
                                                                apduRetries?: number

                                                                Number of APDU retries

                                                                -
                                                                apduSegmentTimeout?: number
                                                                apduTimeout?: number

                                                                APDU timeout in milliseconds

                                                                -
                                                                applicationSoftwareVersion?: string

                                                                The device's application software version

                                                                -
                                                                broadcastAddress?: string
                                                                databaseRevision?: number

                                                                Current database revision number

                                                                -
                                                                description?: string

                                                                The device's description (Description property)

                                                                -
                                                                firmwareRevision?: string

                                                                The device's firmware revision string

                                                                -
                                                                interface?: string
                                                                location?: string

                                                                General description of the device's physical location +

                                                                apduRetries?: number

                                                                Number of APDU retries

                                                                +
                                                                apduSegmentTimeout?: number
                                                                apduTimeout?: number

                                                                APDU timeout in milliseconds

                                                                +
                                                                applicationSoftwareVersion?: string

                                                                The device's application software version

                                                                +
                                                                broadcastAddress?: string
                                                                databaseRevision?: number

                                                                Current database revision number

                                                                +
                                                                description?: string

                                                                The device's description (Description property)

                                                                +
                                                                firmwareRevision?: string

                                                                The device's firmware revision string

                                                                +
                                                                interface?: string
                                                                location?: string

                                                                General description of the device's physical location e.g. "Room 101, Building A, Campus X"

                                                                -
                                                                modelName?: string

                                                                The device's model name

                                                                -
                                                                name: string

                                                                The device's name (Object_Name property)

                                                                -
                                                                port?: number
                                                                reuseAddr?: boolean
                                                                serialNumber?: string

                                                                Serial number of the device +

                                                                modelName?: string

                                                                The device's model name

                                                                +
                                                                name: string

                                                                The device's name (Object_Name property)

                                                                +
                                                                objectNumberingProvider?: BDObjectNumberingProvider

                                                                Provider for custom numbering of device objects.

                                                                +
                                                                port?: number
                                                                reuseAddr?: boolean
                                                                serialNumber?: string

                                                                Serial number of the device e.g. "SN-12345-6789"

                                                                -
                                                                transport?: any
                                                                vendorId?: number

                                                                Vendor identifier assigned by ASHRAE

                                                                +
                                                                transport?: any
                                                                vendorId?: number

                                                                Vendor identifier assigned by ASHRAE

                                                                vendorName?: string

                                                                The name of the device's vendor

                                                                -
                                                                writableOutOfService?: boolean

                                                                Whether the Out_Of_Service property is writable from the BACnet network.

                                                                +
                                                                vendorName?: string

                                                                The name of the device's vendor

                                                                +
                                                                writableOutOfService?: boolean

                                                                Whether the Out_Of_Service property is writable from the BACnet network.

                                                                When true, remote BACnet clients can set the object's Out_Of_Service property to TRUE or FALSE. Changing the property causes the object to emit an outofservice or inservice event accordingly. Default is false.

                                                                false

                                                                -
                                                                +
                                                                diff --git a/docs/interfaces/BDIntegerValueOpts.html b/docs/interfaces/BDIntegerValueOpts.html index c6c38e8..6a3b2ae 100644 --- a/docs/interfaces/BDIntegerValueOpts.html +++ b/docs/interfaces/BDIntegerValueOpts.html @@ -1,4 +1,4 @@ -BDIntegerValueOpts | @bacnet-js/device
                                                                @bacnet-js/device
                                                                  Preparing search index...

                                                                  Interface BDIntegerValueOpts

                                                                  interface BDIntegerValueOpts {
                                                                      covIncrement?: number;
                                                                      description?: string;
                                                                      maxPresentValue?: number;
                                                                      minPresentValue?: number;
                                                                      name: string;
                                                                      presentValue?: number;
                                                                      unit: EngineeringUnits;
                                                                      writable?: boolean;
                                                                      writableOutOfService?: boolean;
                                                                  }

                                                                  Hierarchy

                                                                  • Omit<BDNumericValueOpts, "maxPresentValue" | "minPresentValue" | "presentValue">
                                                                    • BDIntegerValueOpts
                                                                  Index

                                                                  Properties

                                                                  covIncrement? +BDIntegerValueOpts | @bacnet-js/device
                                                                  @bacnet-js/device
                                                                    Preparing search index...

                                                                    Interface BDIntegerValueOpts

                                                                    interface BDIntegerValueOpts {
                                                                        covIncrement?: number;
                                                                        description?: string;
                                                                        maxPresentValue?: number;
                                                                        minPresentValue?: number;
                                                                        name: string;
                                                                        presentValue?: number;
                                                                        unit: EngineeringUnits;
                                                                        writable?: boolean;
                                                                        writableOutOfService?: boolean;
                                                                    }

                                                                    Hierarchy

                                                                    • Omit<BDNumericValueOpts, "maxPresentValue" | "minPresentValue" | "presentValue">
                                                                      • BDIntegerValueOpts
                                                                    Index

                                                                    Properties

                                                                    covIncrement?: number
                                                                    description?: string

                                                                    An optional textual description of the object (Description property)

                                                                    -
                                                                    maxPresentValue?: number
                                                                    minPresentValue?: number
                                                                    name: string

                                                                    The object's name (Object_Name property)

                                                                    -
                                                                    presentValue?: number
                                                                    unit: EngineeringUnits
                                                                    writable?: boolean
                                                                    writableOutOfService?: boolean

                                                                    Whether the Out_Of_Service property is writable from the BACnet network.

                                                                    +

                                                                    Properties

                                                                    covIncrement?: number
                                                                    description?: string

                                                                    An optional textual description of the object (Description property)

                                                                    +
                                                                    maxPresentValue?: number
                                                                    minPresentValue?: number
                                                                    name: string

                                                                    The object's name (Object_Name property)

                                                                    +
                                                                    presentValue?: number
                                                                    unit: EngineeringUnits
                                                                    writable?: boolean
                                                                    writableOutOfService?: boolean

                                                                    Whether the Out_Of_Service property is writable from the BACnet network.

                                                                    When true, remote BACnet clients can set the object's Out_Of_Service property to TRUE or FALSE. Changing the property causes the object to emit an outofservice or inservice event accordingly. Default is false.

                                                                    false

                                                                    -
                                                                    +
                                                                    diff --git a/docs/interfaces/BDMultiStateValueOpts.html b/docs/interfaces/BDMultiStateValueOpts.html index 0848a4f..4bf460d 100644 --- a/docs/interfaces/BDMultiStateValueOpts.html +++ b/docs/interfaces/BDMultiStateValueOpts.html @@ -2,19 +2,19 @@

                                                                    This interface defines the base configuration parameters shared by every BACnet object type. Subclass-specific option interfaces extend this interface with additional properties.

                                                                    -
                                                                    interface BDMultiStateValueOpts {
                                                                        description?: string;
                                                                        name: string;
                                                                        presentValue?: number;
                                                                        states: [first: string, ...rest: string[]];
                                                                        writable?: boolean;
                                                                        writableOutOfService?: boolean;
                                                                    }

                                                                    Hierarchy (View Summary)

                                                                    Index

                                                                    Properties

                                                                    interface BDMultiStateValueOpts {
                                                                        description?: string;
                                                                        name: string;
                                                                        presentValue?: number;
                                                                        states: [first: string, ...rest: string[]];
                                                                        writable?: boolean;
                                                                        writableOutOfService?: boolean;
                                                                    }

                                                                    Hierarchy (View Summary)

                                                                    Index

                                                                    Properties

                                                                    description?: string

                                                                    An optional textual description of the object (Description property)

                                                                    -
                                                                    name: string

                                                                    The object's name (Object_Name property)

                                                                    -
                                                                    presentValue?: number
                                                                    states: [first: string, ...rest: string[]]
                                                                    writable?: boolean
                                                                    writableOutOfService?: boolean

                                                                    Whether the Out_Of_Service property is writable from the BACnet network.

                                                                    +
                                                                    name: string

                                                                    The object's name (Object_Name property)

                                                                    +
                                                                    presentValue?: number
                                                                    states: [first: string, ...rest: string[]]
                                                                    writable?: boolean
                                                                    writableOutOfService?: boolean

                                                                    Whether the Out_Of_Service property is writable from the BACnet network.

                                                                    When true, remote BACnet clients can set the object's Out_Of_Service property to TRUE or FALSE. Changing the property causes the object to emit an outofservice or inservice event accordingly. Default is false.

                                                                    false

                                                                    -
                                                                    +
                                                                    diff --git a/docs/interfaces/BDObjectEvents.html b/docs/interfaces/BDObjectEvents.html index b77eeb8..b1f1ae0 100644 --- a/docs/interfaces/BDObjectEvents.html +++ b/docs/interfaces/BDObjectEvents.html @@ -1,8 +1,8 @@ BDObjectEvents | @bacnet-js/device
                                                                    @bacnet-js/device
                                                                      Preparing search index...

                                                                      Interface BDObjectEvents

                                                                      Events that can be emitted by a BACnet object

                                                                      -
                                                                      interface BDObjectEvents {
                                                                          aftercov: [
                                                                              data: | BACNetAppData<ApplicationTag, any>
                                                                              | BACNetAppData<ApplicationTag, any>[],
                                                                              property: BDAbstractProperty<any, any, any>,
                                                                              object: BDObject,
                                                                          ];
                                                                          inservice: [];
                                                                          outofservice: [];
                                                                          [key: string]: any[];
                                                                      }

                                                                      Hierarchy (View Summary)

                                                                      Indexable

                                                                      • [key: string]: any[]
                                                                      Index

                                                                      Properties

                                                                      interface BDObjectEvents {
                                                                          aftercov: [
                                                                              data: | BACNetAppData<ApplicationTag, any>
                                                                              | BACNetAppData<ApplicationTag, any>[],
                                                                              property: BDAbstractProperty<any, any, any>,
                                                                              object: BDObject,
                                                                          ];
                                                                          inservice: [];
                                                                          outofservice: [];
                                                                          [key: string]: any[];
                                                                      }

                                                                      Hierarchy (View Summary)

                                                                      Indexable

                                                                      • [key: string]: any[]
                                                                      Index

                                                                      Properties

                                                                      aftercov: [
                                                                          data: | BACNetAppData<ApplicationTag, any>
                                                                          | BACNetAppData<ApplicationTag, any>[],
                                                                          property: BDAbstractProperty<any, any, any>,
                                                                          object: BDObject,
                                                                      ]

                                                                      Emitted after a property value has changed

                                                                      -
                                                                      inservice: []

                                                                      Emitted when the object's Out_Of_Service property is set to false, either from the network or locally

                                                                      -
                                                                      outofservice: []

                                                                      Emitted when the object's Out_Of_Service property is set to true, either from the network or locally

                                                                      -
                                                                      +
                                                                      inservice: []

                                                                      Emitted when the object's Out_Of_Service property is set to false, either from the network or locally

                                                                      +
                                                                      outofservice: []

                                                                      Emitted when the object's Out_Of_Service property is set to true, either from the network or locally

                                                                      +
                                                                      diff --git a/docs/interfaces/BDObjectNumberingProvider.html b/docs/interfaces/BDObjectNumberingProvider.html new file mode 100644 index 0000000..9d10486 --- /dev/null +++ b/docs/interfaces/BDObjectNumberingProvider.html @@ -0,0 +1,6 @@ +BDObjectNumberingProvider | @bacnet-js/device
                                                                      @bacnet-js/device
                                                                        Preparing search index...

                                                                        Interface BDObjectNumberingProvider

                                                                        Models a provider of object numbering.

                                                                        +
                                                                        interface BDObjectNumberingProvider {
                                                                            nextInstanceNumber<O extends BDObject>(object: O): number;
                                                                        }
                                                                        Index

                                                                        Methods

                                                                        • Returns the next instance number for the given object. +This number is scoped to this provider instance and is +unique within such scope.

                                                                          +

                                                                          Type Parameters

                                                                          Parameters

                                                                          • object: O

                                                                          Returns number

                                                                        diff --git a/docs/interfaces/BDObjectOpts.html b/docs/interfaces/BDObjectOpts.html index 91464e2..32062e0 100644 --- a/docs/interfaces/BDObjectOpts.html +++ b/docs/interfaces/BDObjectOpts.html @@ -2,16 +2,16 @@

                                                                        This interface defines the base configuration parameters shared by every BACnet object type. Subclass-specific option interfaces extend this interface with additional properties.

                                                                        -
                                                                        interface BDObjectOpts {
                                                                            description?: string;
                                                                            name: string;
                                                                            writableOutOfService?: boolean;
                                                                        }

                                                                        Hierarchy (View Summary)

                                                                        Index

                                                                        Properties

                                                                        interface BDObjectOpts {
                                                                            description?: string;
                                                                            name: string;
                                                                            writableOutOfService?: boolean;
                                                                        }

                                                                        Hierarchy (View Summary)

                                                                        Index

                                                                        Properties

                                                                        description?: string

                                                                        An optional textual description of the object (Description property)

                                                                        -
                                                                        name: string

                                                                        The object's name (Object_Name property)

                                                                        -
                                                                        writableOutOfService?: boolean

                                                                        Whether the Out_Of_Service property is writable from the BACnet network.

                                                                        +
                                                                        name: string

                                                                        The object's name (Object_Name property)

                                                                        +
                                                                        writableOutOfService?: boolean

                                                                        Whether the Out_Of_Service property is writable from the BACnet network.

                                                                        When true, remote BACnet clients can set the object's Out_Of_Service property to TRUE or FALSE. Changing the property causes the object to emit an outofservice or inservice event accordingly. Default is false.

                                                                        false

                                                                        -
                                                                        +
                                                                        diff --git a/docs/interfaces/BDPositiveIntegerValueOpts.html b/docs/interfaces/BDPositiveIntegerValueOpts.html index 82bcf4b..0f54d43 100644 --- a/docs/interfaces/BDPositiveIntegerValueOpts.html +++ b/docs/interfaces/BDPositiveIntegerValueOpts.html @@ -1,4 +1,4 @@ -BDPositiveIntegerValueOpts | @bacnet-js/device
                                                                        @bacnet-js/device
                                                                          Preparing search index...

                                                                          Interface BDPositiveIntegerValueOpts

                                                                          interface BDPositiveIntegerValueOpts {
                                                                              covIncrement?: number;
                                                                              description?: string;
                                                                              maxPresentValue?: number;
                                                                              minPresentValue?: number;
                                                                              name: string;
                                                                              presentValue?: number;
                                                                              unit: EngineeringUnits;
                                                                              writable?: boolean;
                                                                              writableOutOfService?: boolean;
                                                                          }

                                                                          Hierarchy

                                                                          • Omit<BDNumericValueOpts, "maxPresentValue" | "minPresentValue" | "presentValue">
                                                                            • BDPositiveIntegerValueOpts
                                                                          Index

                                                                          Properties

                                                                          covIncrement? +BDPositiveIntegerValueOpts | @bacnet-js/device
                                                                          @bacnet-js/device
                                                                            Preparing search index...

                                                                            Interface BDPositiveIntegerValueOpts

                                                                            interface BDPositiveIntegerValueOpts {
                                                                                covIncrement?: number;
                                                                                description?: string;
                                                                                maxPresentValue?: number;
                                                                                minPresentValue?: number;
                                                                                name: string;
                                                                                presentValue?: number;
                                                                                unit: EngineeringUnits;
                                                                                writable?: boolean;
                                                                                writableOutOfService?: boolean;
                                                                            }

                                                                            Hierarchy

                                                                            • Omit<BDNumericValueOpts, "maxPresentValue" | "minPresentValue" | "presentValue">
                                                                              • BDPositiveIntegerValueOpts
                                                                            Index

                                                                            Properties

                                                                            covIncrement?: number
                                                                            description?: string

                                                                            An optional textual description of the object (Description property)

                                                                            -
                                                                            maxPresentValue?: number
                                                                            minPresentValue?: number
                                                                            name: string

                                                                            The object's name (Object_Name property)

                                                                            -
                                                                            presentValue?: number
                                                                            unit: EngineeringUnits
                                                                            writable?: boolean
                                                                            writableOutOfService?: boolean

                                                                            Whether the Out_Of_Service property is writable from the BACnet network.

                                                                            +

                                                                            Properties

                                                                            covIncrement?: number
                                                                            description?: string

                                                                            An optional textual description of the object (Description property)

                                                                            +
                                                                            maxPresentValue?: number
                                                                            minPresentValue?: number
                                                                            name: string

                                                                            The object's name (Object_Name property)

                                                                            +
                                                                            presentValue?: number
                                                                            unit: EngineeringUnits
                                                                            writable?: boolean
                                                                            writableOutOfService?: boolean

                                                                            Whether the Out_Of_Service property is writable from the BACnet network.

                                                                            When true, remote BACnet clients can set the object's Out_Of_Service property to TRUE or FALSE. Changing the property causes the object to emit an outofservice or inservice event accordingly. Default is false.

                                                                            false

                                                                            -
                                                                            +
                                                                            diff --git a/docs/interfaces/BDPropertyAccessContext.html b/docs/interfaces/BDPropertyAccessContext.html index 983f75b..a3d1bf2 100644 --- a/docs/interfaces/BDPropertyAccessContext.html +++ b/docs/interfaces/BDPropertyAccessContext.html @@ -1,5 +1,5 @@ BDPropertyAccessContext | @bacnet-js/device
                                                                            @bacnet-js/device
                                                                              Preparing search index...

                                                                              Interface BDPropertyAccessContext

                                                                              Dictionary of items available while accessing a property's data, usually via a context or ctx argument.

                                                                              -
                                                                              interface BDPropertyAccessContext {
                                                                                  date: Date;
                                                                              }
                                                                              Index

                                                                              Properties

                                                                              interface BDPropertyAccessContext {
                                                                                  date: Date;
                                                                              }
                                                                              Index

                                                                              Properties

                                                                              Properties

                                                                              date: Date

                                                                              The date and time at which the property is being accessed.

                                                                              -
                                                                              +
                                                                              diff --git a/docs/interfaces/BDPropertyEvents.html b/docs/interfaces/BDPropertyEvents.html index 9c4044a..e2037a7 100644 --- a/docs/interfaces/BDPropertyEvents.html +++ b/docs/interfaces/BDPropertyEvents.html @@ -1,10 +1,10 @@ BDPropertyEvents | @bacnet-js/device
                                                                              @bacnet-js/device
                                                                                Preparing search index...

                                                                                Interface BDPropertyEvents<Tag, Type, Data>

                                                                                Maps the names of property events to the respective arrays of arguments. Used to strongly type calls to AsyncEventEmitter.prototype.on().

                                                                                interface BDPropertyEvents<
                                                                                    Tag extends ApplicationTag,
                                                                                    Type extends ApplicationTagValueTypeMap[Tag],
                                                                                    Data extends BACNetAppData<Tag, Type> | BACNetAppData<Tag, Type>[],
                                                                                > {
                                                                                    aftercov: [raw: Data, property: BDAbstractProperty<Tag, Type, Data>];
                                                                                    beforecov: [raw: Data, property: BDAbstractProperty<Tag, Type, Data>];
                                                                                    [key: string]: any[];
                                                                                }

                                                                                Type Parameters

                                                                                • Tag extends ApplicationTag
                                                                                • Type extends ApplicationTagValueTypeMap[Tag]
                                                                                • Data extends BACNetAppData<Tag, Type> | BACNetAppData<Tag, Type>[]

                                                                                Hierarchy (View Summary)

                                                                                Indexable

                                                                                • [key: string]: any[]
                                                                                Index

                                                                                Properties

                                                                                interface BDPropertyEvents<
                                                                                    Tag extends ApplicationTag,
                                                                                    Type extends ApplicationTagValueTypeMap[Tag],
                                                                                    Data extends BACNetAppData<Tag, Type> | BACNetAppData<Tag, Type>[],
                                                                                > {
                                                                                    aftercov: [raw: Data, property: BDAbstractProperty<Tag, Type, Data>];
                                                                                    beforecov: [raw: Data, property: BDAbstractProperty<Tag, Type, Data>];
                                                                                    [key: string]: any[];
                                                                                }

                                                                                Type Parameters

                                                                                • Tag extends ApplicationTag
                                                                                • Type extends ApplicationTagValueTypeMap[Tag]
                                                                                • Data extends BACNetAppData<Tag, Type> | BACNetAppData<Tag, Type>[]

                                                                                Hierarchy (View Summary)

                                                                                Indexable

                                                                                • [key: string]: any[]
                                                                                Index

                                                                                Properties

                                                                                Properties

                                                                                aftercov: [raw: Data, property: BDAbstractProperty<Tag, Type, Data>]

                                                                                Emitted after a property value has changed. Errors throws by listeners will be ignored.

                                                                                -
                                                                                beforecov: [raw: Data, property: BDAbstractProperty<Tag, Type, Data>]

                                                                                Emitted before a property value changes. Listeners can throw in order to +

                                                                                beforecov: [raw: Data, property: BDAbstractProperty<Tag, Type, Data>]

                                                                                Emitted before a property value changes. Listeners can throw in order to block the change from going through (useful for additional validation).

                                                                                -
                                                                                +
                                                                                diff --git a/docs/interfaces/BDStructuredViewOpts.html b/docs/interfaces/BDStructuredViewOpts.html index 6cd6c31..896690f 100644 --- a/docs/interfaces/BDStructuredViewOpts.html +++ b/docs/interfaces/BDStructuredViewOpts.html @@ -2,17 +2,17 @@

                                                                                This interface defines the base configuration parameters shared by every BACnet object type. Subclass-specific option interfaces extend this interface with additional properties.

                                                                                -
                                                                                interface BDStructuredViewOpts {
                                                                                    description?: string;
                                                                                    name: string;
                                                                                    nodeType?: NodeType;
                                                                                    writableOutOfService?: boolean;
                                                                                }

                                                                                Hierarchy (View Summary)

                                                                                Index

                                                                                Properties

                                                                                interface BDStructuredViewOpts {
                                                                                    description?: string;
                                                                                    name: string;
                                                                                    nodeType?: NodeType;
                                                                                    writableOutOfService?: boolean;
                                                                                }

                                                                                Hierarchy (View Summary)

                                                                                Index

                                                                                Properties

                                                                                description?: string

                                                                                An optional textual description of the object (Description property)

                                                                                -
                                                                                name: string

                                                                                The object's name (Object_Name property)

                                                                                -
                                                                                nodeType?: NodeType
                                                                                writableOutOfService?: boolean

                                                                                Whether the Out_Of_Service property is writable from the BACnet network.

                                                                                +
                                                                                name: string

                                                                                The object's name (Object_Name property)

                                                                                +
                                                                                nodeType?: NodeType
                                                                                writableOutOfService?: boolean

                                                                                Whether the Out_Of_Service property is writable from the BACnet network.

                                                                                When true, remote BACnet clients can set the object's Out_Of_Service property to TRUE or FALSE. Changing the property causes the object to emit an outofservice or inservice event accordingly. Default is false.

                                                                                false

                                                                                -
                                                                                +
                                                                                diff --git a/docs/interfaces/BDSubscription.html b/docs/interfaces/BDSubscription.html index 4e0051a..e887104 100644 --- a/docs/interfaces/BDSubscription.html +++ b/docs/interfaces/BDSubscription.html @@ -1,7 +1,7 @@ BDSubscription | @bacnet-js/device
                                                                                @bacnet-js/device
                                                                                  Preparing search index...

                                                                                  Interface BDSubscription<Tag, Type, Data>

                                                                                  Represents a subscription to COV (Change of Value) notifications

                                                                                  This interface defines the details of a COV subscription from another BACnet device.

                                                                                  -
                                                                                  interface BDSubscription<
                                                                                      Tag extends ApplicationTag,
                                                                                      Type extends ApplicationTagValueTypeMap[Tag],
                                                                                      Data extends BACNetAppData<Tag, Type> | BACNetAppData<Tag, Type>[],
                                                                                  > {
                                                                                      covIncrement: number;
                                                                                      expiresAt: number;
                                                                                      issueConfirmedNotifications: boolean;
                                                                                      lastDataSent: null | Data;
                                                                                      monitoredObjectId: BACNetObjectID;
                                                                                      monitoredProperty: BACNetPropertyID;
                                                                                      object: BDObject;
                                                                                      property: BDAbstractProperty<Tag, Type, Data>;
                                                                                      recipient: { address: number[]; network: number };
                                                                                      subscriber: BACNetAddress;
                                                                                      subscriptionProcessId: number;
                                                                                      timeRemaining: number;
                                                                                  }

                                                                                  Type Parameters

                                                                                  • Tag extends ApplicationTag
                                                                                  • Type extends ApplicationTagValueTypeMap[Tag]
                                                                                  • Data extends BACNetAppData<Tag, Type> | BACNetAppData<Tag, Type>[]

                                                                                  Hierarchy

                                                                                  • BACNetCovSubscription
                                                                                    • BDSubscription
                                                                                  Index

                                                                                  Properties

                                                                                  interface BDSubscription<
                                                                                      Tag extends ApplicationTag,
                                                                                      Type extends ApplicationTagValueTypeMap[Tag],
                                                                                      Data extends BACNetAppData<Tag, Type> | BACNetAppData<Tag, Type>[],
                                                                                  > {
                                                                                      covIncrement: number;
                                                                                      expiresAt: number;
                                                                                      issueConfirmedNotifications: boolean;
                                                                                      lastDataSent: Data | null;
                                                                                      monitoredObjectId: BACNetObjectID;
                                                                                      monitoredProperty: BACNetPropertyID;
                                                                                      object: BDObject;
                                                                                      property: BDAbstractProperty<Tag, Type, Data>;
                                                                                      recipient: { address: number[]; network: number };
                                                                                      subscriber: BACNetAddress;
                                                                                      subscriptionProcessId: number;
                                                                                      timeRemaining: number;
                                                                                  }

                                                                                  Type Parameters

                                                                                  • Tag extends ApplicationTag
                                                                                  • Type extends ApplicationTagValueTypeMap[Tag]
                                                                                  • Data extends BACNetAppData<Tag, Type> | BACNetAppData<Tag, Type>[]

                                                                                  Hierarchy

                                                                                  • BACNetCovSubscription
                                                                                    • BDSubscription
                                                                                  Index

                                                                                  Properties

                                                                                  covIncrement: number

                                                                                  Counter of COV notifications sent through this subscription

                                                                                  -
                                                                                  expiresAt: number

                                                                                  Expiration time in milliseconds since unix epoch

                                                                                  -
                                                                                  issueConfirmedNotifications: boolean

                                                                                  Whether to send confirmed notifications

                                                                                  -
                                                                                  lastDataSent: null | Data
                                                                                  monitoredObjectId: BACNetObjectID

                                                                                  Object ID being monitored for changes

                                                                                  -
                                                                                  monitoredProperty: BACNetPropertyID

                                                                                  Property ID being monitored for changes

                                                                                  -
                                                                                  object: BDObject
                                                                                  recipient: { address: number[]; network: number }
                                                                                  subscriber: BACNetAddress

                                                                                  Network address information of the subscriber

                                                                                  -
                                                                                  subscriptionProcessId: number

                                                                                  Process ID of the subscribing device

                                                                                  -
                                                                                  timeRemaining: number
                                                                                  +
                                                                                  expiresAt: number

                                                                                  Expiration time in milliseconds since unix epoch

                                                                                  +
                                                                                  issueConfirmedNotifications: boolean

                                                                                  Whether to send confirmed notifications

                                                                                  +
                                                                                  lastDataSent: Data | null
                                                                                  monitoredObjectId: BACNetObjectID

                                                                                  Object ID being monitored for changes

                                                                                  +
                                                                                  monitoredProperty: BACNetPropertyID

                                                                                  Property ID being monitored for changes

                                                                                  +
                                                                                  object: BDObject
                                                                                  recipient: { address: number[]; network: number }
                                                                                  subscriber: BACNetAddress

                                                                                  Network address information of the subscriber

                                                                                  +
                                                                                  subscriptionProcessId: number

                                                                                  Process ID of the subscribing device

                                                                                  +
                                                                                  timeRemaining: number
                                                                                  diff --git a/docs/interfaces/BDTimeValueOpts.html b/docs/interfaces/BDTimeValueOpts.html index d12b9bb..34d0b51 100644 --- a/docs/interfaces/BDTimeValueOpts.html +++ b/docs/interfaces/BDTimeValueOpts.html @@ -2,18 +2,18 @@

                                                                                  This interface defines the base configuration parameters shared by every BACnet object type. Subclass-specific option interfaces extend this interface with additional properties.

                                                                                  -
                                                                                  interface BDTimeValueOpts {
                                                                                      description?: string;
                                                                                      name: string;
                                                                                      presentValue?: Date;
                                                                                      writable?: boolean;
                                                                                      writableOutOfService?: boolean;
                                                                                  }

                                                                                  Hierarchy (View Summary)

                                                                                  Index

                                                                                  Properties

                                                                                  interface BDTimeValueOpts {
                                                                                      description?: string;
                                                                                      name: string;
                                                                                      presentValue?: Date;
                                                                                      writable?: boolean;
                                                                                      writableOutOfService?: boolean;
                                                                                  }

                                                                                  Hierarchy (View Summary)

                                                                                  Index

                                                                                  Properties

                                                                                  description?: string

                                                                                  An optional textual description of the object (Description property)

                                                                                  -
                                                                                  name: string

                                                                                  The object's name (Object_Name property)

                                                                                  -
                                                                                  presentValue?: Date
                                                                                  writable?: boolean
                                                                                  writableOutOfService?: boolean

                                                                                  Whether the Out_Of_Service property is writable from the BACnet network.

                                                                                  +
                                                                                  name: string

                                                                                  The object's name (Object_Name property)

                                                                                  +
                                                                                  presentValue?: Date
                                                                                  writable?: boolean
                                                                                  writableOutOfService?: boolean

                                                                                  Whether the Out_Of_Service property is writable from the BACnet network.

                                                                                  When true, remote BACnet clients can set the object's Out_Of_Service property to TRUE or FALSE. Changing the property causes the object to emit an outofservice or inservice event accordingly. Default is false.

                                                                                  false

                                                                                  -
                                                                                  +
                                                                                  diff --git a/docs/modules.html b/docs/modules.html index 9130115..10409d6 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -2,4 +2,4 @@

                                                                                  A TypeScript library for implementing BACnet IP devices in Node.js. This module provides all the necessary types and classes for creating and managing BACnet devices, objects, and properties.

                                                                                  -

                                                                                  Enumerations

                                                                                  BDPropertyType

                                                                                  Classes

                                                                                  AsyncEventEmitter
                                                                                  BDAbstractProperty
                                                                                  BDAnalogInput
                                                                                  BDAnalogOutput
                                                                                  BDAnalogValue
                                                                                  BDArrayProperty
                                                                                  BDBinaryValue
                                                                                  BDCharacterStringValue
                                                                                  BDDateTimeValue
                                                                                  BDDateValue
                                                                                  BDDevice
                                                                                  BDError
                                                                                  BDIntegerValue
                                                                                  BDMultiStateValue
                                                                                  BDObject
                                                                                  BDPolledArrayProperty
                                                                                  BDPolledSingletProperty
                                                                                  BDPositiveIntegerValue
                                                                                  BDSingletProperty
                                                                                  BDStructuredView
                                                                                  BDTimeValue
                                                                                  TaskQueue

                                                                                  Interfaces

                                                                                  BDAnalogInputOpts
                                                                                  BDAnalogOutputOpts
                                                                                  BDAnalogValueOpts
                                                                                  BDBinaryValueOpts
                                                                                  BDCharacterStringValueOpts
                                                                                  BDDateTimeValueOpts
                                                                                  BDDateValueOpts
                                                                                  BDDeviceEvents
                                                                                  BDDeviceOpts
                                                                                  BDIntegerValueOpts
                                                                                  BDMultiStateValueOpts
                                                                                  BDObjectEvents
                                                                                  BDObjectOpts
                                                                                  BDPositiveIntegerValueOpts
                                                                                  BDPropertyAccessContext
                                                                                  BDPropertyEvents
                                                                                  BDStructuredViewOpts
                                                                                  BDSubscription
                                                                                  BDTimeValueOpts

                                                                                  Type Aliases

                                                                                  BDAnalogValueObjectType
                                                                                  BDObjectUID
                                                                                  BDPropertyUID
                                                                                  EventArgs
                                                                                  EventKey
                                                                                  EventListener
                                                                                  EventMap
                                                                                  Task
                                                                                  +

                                                                                  Enumerations

                                                                                  BDPropertyType

                                                                                  Classes

                                                                                  AsyncEventEmitter
                                                                                  BDAbstractProperty
                                                                                  BDAnalogInput
                                                                                  BDAnalogOutput
                                                                                  BDAnalogValue
                                                                                  BDArrayProperty
                                                                                  BDBinaryValue
                                                                                  BDCharacterStringValue
                                                                                  BDDateTimeValue
                                                                                  BDDateValue
                                                                                  BDDevice
                                                                                  BDError
                                                                                  BDIntegerValue
                                                                                  BDMultiStateValue
                                                                                  BDObject
                                                                                  BDPolledArrayProperty
                                                                                  BDPolledSingletProperty
                                                                                  BDPositiveIntegerValue
                                                                                  BDSingletProperty
                                                                                  BDStructuredView
                                                                                  BDTimeValue
                                                                                  TaskQueue

                                                                                  Interfaces

                                                                                  BDAnalogInputOpts
                                                                                  BDAnalogOutputOpts
                                                                                  BDAnalogValueOpts
                                                                                  BDBinaryValueOpts
                                                                                  BDCharacterStringValueOpts
                                                                                  BDDateTimeValueOpts
                                                                                  BDDateValueOpts
                                                                                  BDDeviceEvents
                                                                                  BDDeviceOpts
                                                                                  BDIntegerValueOpts
                                                                                  BDMultiStateValueOpts
                                                                                  BDObjectEvents
                                                                                  BDObjectNumberingProvider
                                                                                  BDObjectOpts
                                                                                  BDPositiveIntegerValueOpts
                                                                                  BDPropertyAccessContext
                                                                                  BDPropertyEvents
                                                                                  BDStructuredViewOpts
                                                                                  BDSubscription
                                                                                  BDTimeValueOpts

                                                                                  Type Aliases

                                                                                  BDAnalogValueObjectType
                                                                                  BDObjectUID
                                                                                  BDPropertyUID
                                                                                  EventArgs
                                                                                  EventKey
                                                                                  EventListener
                                                                                  EventMap
                                                                                  Task
                                                                                  diff --git a/docs/types/BDAnalogValueObjectType.html b/docs/types/BDAnalogValueObjectType.html index e57ec03..1ae0cbd 100644 --- a/docs/types/BDAnalogValueObjectType.html +++ b/docs/types/BDAnalogValueObjectType.html @@ -1 +1 @@ -BDAnalogValueObjectType | @bacnet-js/device
                                                                                  @bacnet-js/device
                                                                                    Preparing search index...

                                                                                    Type Alias BDAnalogValueObjectType

                                                                                    BDAnalogValueObjectType:
                                                                                        | ObjectType.ANALOG_VALUE
                                                                                        | ObjectType.ANALOG_INPUT
                                                                                        | ObjectType.ANALOG_OUTPUT
                                                                                    +BDAnalogValueObjectType | @bacnet-js/device
                                                                                    @bacnet-js/device
                                                                                      Preparing search index...

                                                                                      Type Alias BDAnalogValueObjectType

                                                                                      BDAnalogValueObjectType:
                                                                                          | ObjectType.ANALOG_VALUE
                                                                                          | ObjectType.ANALOG_INPUT
                                                                                          | ObjectType.ANALOG_OUTPUT
                                                                                      diff --git a/docs/types/BDObjectUID.html b/docs/types/BDObjectUID.html index 031e956..97d241d 100644 --- a/docs/types/BDObjectUID.html +++ b/docs/types/BDObjectUID.html @@ -1,4 +1,4 @@ BDObjectUID | @bacnet-js/device
                                                                                      @bacnet-js/device
                                                                                        Preparing search index...

                                                                                        Type Alias BDObjectUID

                                                                                        BDObjectUID: number & { ___tag: "objectid" }

                                                                                        Unique object identifier scoped to the current process. This should be calculated as a number composed of two groups of four digits each, encoding the object type and object instance respectively.

                                                                                        -
                                                                                        +
                                                                                        diff --git a/docs/types/BDPropertyUID.html b/docs/types/BDPropertyUID.html index ae0a075..db2d755 100644 --- a/docs/types/BDPropertyUID.html +++ b/docs/types/BDPropertyUID.html @@ -2,4 +2,4 @@ This should be calculated as a number composed of three groups of four digits each, encoding the object type, object instance and property identifier respectively.

                                                                                        -
                                                                                        +
                                                                                        diff --git a/docs/types/EventArgs.html b/docs/types/EventArgs.html index ab2c0a0..8d7f9af 100644 --- a/docs/types/EventArgs.html +++ b/docs/types/EventArgs.html @@ -1 +1 @@ -EventArgs | @bacnet-js/device
                                                                                        @bacnet-js/device
                                                                                          Preparing search index...

                                                                                          Type Alias EventArgs<T, K>

                                                                                          EventArgs: K extends keyof T ? T[K] : never

                                                                                          Type Parameters

                                                                                          +EventArgs | @bacnet-js/device
                                                                                          @bacnet-js/device
                                                                                            Preparing search index...

                                                                                            Type Alias EventArgs<T, K>

                                                                                            EventArgs: K extends keyof T ? T[K] : never

                                                                                            Type Parameters

                                                                                            diff --git a/docs/types/EventKey.html b/docs/types/EventKey.html index 5dbac9f..99051c2 100644 --- a/docs/types/EventKey.html +++ b/docs/types/EventKey.html @@ -1 +1 @@ -EventKey | @bacnet-js/device
                                                                                            @bacnet-js/device
                                                                                              Preparing search index...

                                                                                              Type Alias EventKey<T>

                                                                                              EventKey: keyof T

                                                                                              Type Parameters

                                                                                              +EventKey | @bacnet-js/device
                                                                                              @bacnet-js/device
                                                                                                Preparing search index...

                                                                                                Type Alias EventKey<T>

                                                                                                EventKey: keyof T

                                                                                                Type Parameters

                                                                                                diff --git a/docs/types/EventListener.html b/docs/types/EventListener.html index 2d964e1..e4fe583 100644 --- a/docs/types/EventListener.html +++ b/docs/types/EventListener.html @@ -1 +1 @@ -EventListener | @bacnet-js/device
                                                                                                @bacnet-js/device
                                                                                                  Preparing search index...

                                                                                                  Type Alias EventListener<T, K>

                                                                                                  EventListener: T[K] extends unknown[]
                                                                                                      ? (...args: T[K]) => Promise<any> | any
                                                                                                      : never

                                                                                                  Type Parameters

                                                                                                  +EventListener | @bacnet-js/device
                                                                                                  @bacnet-js/device
                                                                                                    Preparing search index...

                                                                                                    Type Alias EventListener<T, K>

                                                                                                    EventListener: T[K] extends unknown[]
                                                                                                        ? (...args: T[K]) => Promise<any> | any
                                                                                                        : never

                                                                                                    Type Parameters

                                                                                                    diff --git a/docs/types/EventMap.html b/docs/types/EventMap.html index b0acbb4..5d5554a 100644 --- a/docs/types/EventMap.html +++ b/docs/types/EventMap.html @@ -1 +1 @@ -EventMap | @bacnet-js/device
                                                                                                    @bacnet-js/device
                                                                                                      Preparing search index...

                                                                                                      Type Alias EventMap

                                                                                                      EventMap: Record<string, any[]>
                                                                                                      +EventMap | @bacnet-js/device
                                                                                                      @bacnet-js/device
                                                                                                        Preparing search index...

                                                                                                        Type Alias EventMap

                                                                                                        EventMap: Record<string, any[]>
                                                                                                        diff --git a/docs/types/Task.html b/docs/types/Task.html index e38050a..d39a237 100644 --- a/docs/types/Task.html +++ b/docs/types/Task.html @@ -1 +1 @@ -Task | @bacnet-js/device
                                                                                                        @bacnet-js/device
                                                                                                          Preparing search index...

                                                                                                          Type Alias Task<T>

                                                                                                          Task: () => Promise<T>

                                                                                                          Type Parameters

                                                                                                          • T

                                                                                                          Type declaration

                                                                                                            • (): Promise<T>
                                                                                                            • Returns Promise<T>

                                                                                                          +Task | @bacnet-js/device
                                                                                                          @bacnet-js/device
                                                                                                            Preparing search index...

                                                                                                            Type Alias Task<T>

                                                                                                            Task: () => Promise<T>

                                                                                                            Type Parameters

                                                                                                            • T

                                                                                                            Type Declaration

                                                                                                              • (): Promise<T>
                                                                                                              • Returns Promise<T>

                                                                                                            diff --git a/src/examples/12-object-numbering.ts b/src/examples/12-object-numbering.ts new file mode 100644 index 0000000..750cda5 --- /dev/null +++ b/src/examples/12-object-numbering.ts @@ -0,0 +1,172 @@ +/** + * This file demonstrates how to use custom object numbering providers. + * + * By default, BDDevice assigns sequential instance numbers starting at 1 + * for each object type (e.g. analog-value 1, analog-value 2, binary-value 1, + * etc.). The `objectNumberingProvider` option lets you override this behavior + * with your own numbering logic. + */ + +import { EngineeringUnits, ObjectType } from '@bacnet-js/client'; +import { + BDDevice, + BDAnalogValue, + BDBinaryValue, + BDCharacterStringValue, + type BDDeviceOpts, + type BDObject, +} from '../index.js'; + +// --------------------------------------------------------------------- +// Example 1: Numbering with a custom starting offset +// --------------------------------------------------------------------- +// All object types start numbering at 100 instead of 1. + +class OffsetNumberingProvider { + + #counters: Partial> = Object.create(null); + #startAt: number; + + constructor(startAt: number) { + this.#startAt = startAt; + } + + nextInstanceNumber(object: O): number { + if (!(object.type in this.#counters)) { + this.#counters[object.type] = this.#startAt; + } + return this.#counters[object.type]!++; + } + +} + +const deviceA = new BDDevice(1, { + port: 47808, + interface: '0.0.0.0', + name: 'Offset-Numbered Device', + objectNumberingProvider: new OffsetNumberingProvider(100), +}); + +// These will be analog-value 100 and analog-value 101 +deviceA.addObject(new BDAnalogValue({ + name: 'Zone Temperature', + unit: EngineeringUnits.DEGREES_CELSIUS, + presentValue: 22.5, +})); +deviceA.addObject(new BDAnalogValue({ + name: 'Zone Humidity', + unit: EngineeringUnits.PERCENT, + presentValue: 55, +})); + +// This will be binary-value 100 (numbering is independent per type) +deviceA.addObject(new BDBinaryValue({ + name: 'Occupancy', + writable: false, +})); + +// --------------------------------------------------------------------- +// Example 2: Different starting offsets per object type +// --------------------------------------------------------------------- +// Analog values start at 1000, binary values at 2000, etc. + +class PerTypeOffsetNumberingProvider { + + #counters: Partial> = Object.create(null); + #startByType: Partial>; + #defaultStart: number; + + constructor(startByType: Partial>, defaultStart: number = 1) { + this.#startByType = startByType; + this.#defaultStart = defaultStart; + } + + nextInstanceNumber(object: O): number { + if (!(object.type in this.#counters)) { + this.#counters[object.type] = this.#startByType[object.type] ?? this.#defaultStart; + } + return this.#counters[object.type]!++; + } + +} + +const deviceB = new BDDevice(2, { + port: 47809, + interface: '0.0.0.0', + name: 'Per-Type Numbered Device', + objectNumberingProvider: new PerTypeOffsetNumberingProvider({ + [ObjectType.ANALOG_VALUE]: 1000, + [ObjectType.BINARY_VALUE]: 2000, + [ObjectType.CHARACTERSTRING_VALUE]: 3000, + }), +}); + +// analog-value 1000 +deviceB.addObject(new BDAnalogValue({ + name: 'Supply Air Temp', + unit: EngineeringUnits.DEGREES_CELSIUS, +})); + +// binary-value 2000 +deviceB.addObject(new BDBinaryValue({ + name: 'Fan Status', + writable: false, +})); + +// characterstring-value 3000 +deviceB.addObject(new BDCharacterStringValue({ + name: 'Room Label', + presentValue: 'Conference Room A', +})); + +// analog-value 1001 +deviceB.addObject(new BDAnalogValue({ + name: 'Return Air Temp', + unit: EngineeringUnits.DEGREES_CELSIUS, +})); + +// --------------------------------------------------------------------- +// Example 3: Name-derived numbering +// --------------------------------------------------------------------- +// Instance numbers are extracted from the object name itself, allowing +// explicit control over each object's instance number. + +class NameDerivedNumberingProvider { + + nextInstanceNumber(object: O): number { + const name = object.objectName.getValue(); + const match = name.match(/#(\d+)$/); + if (!match) { + throw new Error(`Object name "${name}" must end with # for name-derived numbering`); + } + return parseInt(match[1], 10); + } + +} + +const deviceC = new BDDevice(3, { + port: 47810, + interface: '0.0.0.0', + name: 'Name-Derived Numbered Device', + objectNumberingProvider: new NameDerivedNumberingProvider(), +}); + +// analog-value 50 +deviceC.addObject(new BDAnalogValue({ + name: 'Chilled Water Temp #50', + unit: EngineeringUnits.DEGREES_CELSIUS, + presentValue: 7, +})); + +// analog-value 75 +deviceC.addObject(new BDAnalogValue({ + name: 'Hot Water Temp #75', + unit: EngineeringUnits.DEGREES_CELSIUS, + presentValue: 60, +})); + +// binary-value 10 +deviceC.addObject(new BDBinaryValue({ + name: 'Valve Open #10', + writable: true, +})); \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 7fcc983..400f156 100644 --- a/src/index.ts +++ b/src/index.ts @@ -52,6 +52,7 @@ export { type BDDeviceOpts, type BDSubscription, type BDDeviceEvents, + type BDObjectNumberingProvider, } from './objects/device/types.js'; export * from './objects/numeric/analogoutput.js'; diff --git a/src/objects/device/device.ts b/src/objects/device/device.ts index 754202a..e987d3a 100644 --- a/src/objects/device/device.ts +++ b/src/objects/device/device.ts @@ -53,6 +53,7 @@ import { type BDDeviceOpts, type BDDeviceEvents, type BDQueuedCov, + type BDObjectNumberingProvider, } from './types.js'; import { @@ -60,6 +61,7 @@ import { } from '../structuredview.js'; import { + DefaultObjectNumberingProvider, sendConfirmedCovNotification, sendUnconfirmedCovNotification, } from './utils.js' @@ -129,10 +131,7 @@ export class BDDevice extends BDObject implements AsyncEventEmitter; - /** - * Dictionary of next instance numbers for each object type. - */ - readonly #nextInstanceNumber: Partial>; + readonly #objectNumberingProvider: BDObjectNumberingProvider; readonly objectList: BDPolledArrayProperty; readonly structuredObjectList: BDPolledArrayProperty; @@ -190,7 +189,8 @@ export class BDDevice extends BDObject implements AsyncEventEmitter(object: T): T { const type = object.objectType.getValue(); object.___setDevice(this); - if (!(type in this.#nextInstanceNumber)) { - this.#nextInstanceNumber[type] = 1; - } - object.___setIdentifier(this.#nextInstanceNumber[type]!++); + object.___setIdentifier(this.#objectNumberingProvider.nextInstanceNumber(object)); this.#objects.set(getObjectUID(object.identifier.value), object); this.#objectData.push(object.identifier); object.on('aftercov', this.#onChildAfterCov); diff --git a/src/objects/device/types.ts b/src/objects/device/types.ts index ae06d33..aabeed9 100644 --- a/src/objects/device/types.ts +++ b/src/objects/device/types.ts @@ -19,6 +19,7 @@ import { ApplicationTag, type ApplicationTagValueTypeMap, } from '@bacnet-js/client'; + /** * Represents a subscription to COV (Change of Value) notifications * @@ -171,4 +172,22 @@ export interface BDDeviceOpts extends ClientOptions, BDObjectOpts { * e.g. "SN-12345-6789" */ serialNumber?: string; + + /** + * Provider for custom numbering of device objects. + */ + objectNumberingProvider?: BDObjectNumberingProvider; +} + +/** + * Models a provider of object numbering. + */ +export interface BDObjectNumberingProvider { + + /** + * Returns the next instance number for the given object. + * This number is scoped to this provider instance and is + * unique within such scope. + */ + nextInstanceNumber(object: O): number; } diff --git a/src/objects/device/utils.ts b/src/objects/device/utils.ts index fe20371..888bf9f 100644 --- a/src/objects/device/utils.ts +++ b/src/objects/device/utils.ts @@ -1,4 +1,8 @@ +import { + type ObjectType, +} from '@bacnet-js/client'; + import { type BACNetClientType, ensureArray, @@ -11,8 +15,13 @@ import { import { type BDSubscription, type BDQueuedCov, + type BDObjectNumberingProvider, } from './types.js'; +import { + type BDObject, +} from '../generic/object.js'; + /** * Sends a confirmed COV (Change of Value) notification to a subscriber * @@ -58,3 +67,24 @@ export const sendUnconfirmedCovNotification = async (client: BACNetClientType, e [{ property: { id: cov.property.identifier }, value: ensureArray(cov.data) }], ); }; + +/** + * Default object numbering provider implementation. + * + * @internal + */ +export class DefaultObjectNumberingProvider implements BDObjectNumberingProvider { + + #nextInstanceNumberByType: Map; + + constructor() { + this.#nextInstanceNumberByType = new Map(); + } + + nextInstanceNumber(object: O): number { + const next = this.#nextInstanceNumberByType.get(object.type) ?? 1; + this.#nextInstanceNumberByType.set(object.type, next + 1); + return next; + } + +} diff --git a/src/objects/generic/object.ts b/src/objects/generic/object.ts index 52ba5c6..1d14ef2 100644 --- a/src/objects/generic/object.ts +++ b/src/objects/generic/object.ts @@ -188,6 +188,10 @@ export class BDObject extends AsyncEventEmitter { } + get type(): ObjectType { + return this.objectType.getValue(); + } + get identifier(): BACNetAppData { if (this.#identifier) { return this.#identifier; diff --git a/src/tests/objectnumbering.test.ts b/src/tests/objectnumbering.test.ts new file mode 100644 index 0000000..4d7625d --- /dev/null +++ b/src/tests/objectnumbering.test.ts @@ -0,0 +1,352 @@ +import { it, describe, beforeEach, afterEach } from 'node:test'; +import { deepStrictEqual } from 'node:assert'; +import { BDDevice } from '../objects/device/device.js'; +import { bsReadProperty } from './bacnet-stack-client.js'; +import { BDAnalogValue } from '../objects/numeric/analogvalue.js'; +import { BDAnalogInput } from '../objects/numeric/analoginput.js'; +import { BDBinaryValue } from '../objects/binaryvalue.js'; +import { BDCharacterStringValue } from '../objects/characterstringvalue.js'; +import { BDIntegerValue } from '../objects/numeric/integervalue.js'; +import { type BDObjectNumberingProvider } from '../objects/device/types.js'; +import { type BDObject } from '../objects/generic/object.js'; +import { EngineeringUnits, ObjectType, PropertyIdentifier } from '@bacnet-js/client'; + +describe('Object numbering (default provider)', () => { + + let device: BDDevice; + + afterEach(async () => { + device.destroy(); + }); + + it('should assign instance number 1 to the first object of a given type', async () => { + device = new BDDevice(1, { name: 'Test Device' }); + device.on('error', console.error); + device.addObject(new BDAnalogValue({ + name: 'AV First', + unit: EngineeringUnits.DEGREES_CELSIUS, + presentValue: 10, + })); + const value = await bsReadProperty(1, ObjectType.ANALOG_VALUE, 1, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(value.trim(), '(analog-value, 1)'); + }); + + it('should assign sequential instance numbers to objects of the same type', async () => { + device = new BDDevice(1, { name: 'Test Device' }); + device.on('error', console.error); + device.addObject(new BDAnalogValue({ + name: 'AV 1', + unit: EngineeringUnits.DEGREES_CELSIUS, + presentValue: 1, + })); + device.addObject(new BDAnalogValue({ + name: 'AV 2', + unit: EngineeringUnits.DEGREES_CELSIUS, + presentValue: 2, + })); + device.addObject(new BDAnalogValue({ + name: 'AV 3', + unit: EngineeringUnits.DEGREES_CELSIUS, + presentValue: 3, + })); + const v1 = await bsReadProperty(1, ObjectType.ANALOG_VALUE, 1, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(v1.trim(), '(analog-value, 1)'); + const v2 = await bsReadProperty(1, ObjectType.ANALOG_VALUE, 2, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(v2.trim(), '(analog-value, 2)'); + const v3 = await bsReadProperty(1, ObjectType.ANALOG_VALUE, 3, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(v3.trim(), '(analog-value, 3)'); + }); + + it('should number each object type independently starting at 1', async () => { + device = new BDDevice(1, { name: 'Test Device' }); + device.on('error', console.error); + device.addObject(new BDAnalogValue({ + name: 'AV 1', + unit: EngineeringUnits.DEGREES_CELSIUS, + presentValue: 10, + })); + device.addObject(new BDBinaryValue({ + name: 'BV 1', + writable: false, + })); + device.addObject(new BDCharacterStringValue({ + name: 'CSV 1', + presentValue: 'hello', + })); + device.addObject(new BDAnalogValue({ + name: 'AV 2', + unit: EngineeringUnits.DEGREES_CELSIUS, + presentValue: 20, + })); + device.addObject(new BDBinaryValue({ + name: 'BV 2', + writable: false, + })); + const av1 = await bsReadProperty(1, ObjectType.ANALOG_VALUE, 1, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(av1.trim(), '(analog-value, 1)'); + const av2 = await bsReadProperty(1, ObjectType.ANALOG_VALUE, 2, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(av2.trim(), '(analog-value, 2)'); + const bv1 = await bsReadProperty(1, ObjectType.BINARY_VALUE, 1, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(bv1.trim(), '(binary-value, 1)'); + const bv2 = await bsReadProperty(1, ObjectType.BINARY_VALUE, 2, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(bv2.trim(), '(binary-value, 2)'); + const csv1 = await bsReadProperty(1, ObjectType.CHARACTERSTRING_VALUE, 1, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(csv1.trim(), '(characterstring-value, 1)'); + }); + + it('should number analog-input and analog-value types independently', async () => { + device = new BDDevice(1, { name: 'Test Device' }); + device.on('error', console.error); + device.addObject(new BDAnalogValue({ + name: 'AV 1', + unit: EngineeringUnits.DEGREES_CELSIUS, + presentValue: 5, + })); + device.addObject(new BDAnalogInput({ + name: 'AI 1', + unit: EngineeringUnits.AMPERES, + presentValue: 15, + })); + device.addObject(new BDAnalogValue({ + name: 'AV 2', + unit: EngineeringUnits.DEGREES_CELSIUS, + presentValue: 25, + })); + device.addObject(new BDAnalogInput({ + name: 'AI 2', + unit: EngineeringUnits.AMPERES, + presentValue: 35, + })); + const av1 = await bsReadProperty(1, ObjectType.ANALOG_VALUE, 1, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(av1.trim(), '(analog-value, 1)'); + const av2 = await bsReadProperty(1, ObjectType.ANALOG_VALUE, 2, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(av2.trim(), '(analog-value, 2)'); + const ai1 = await bsReadProperty(1, ObjectType.ANALOG_INPUT, 1, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(ai1.trim(), '(analog-input, 1)'); + const ai2 = await bsReadProperty(1, ObjectType.ANALOG_INPUT, 2, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(ai2.trim(), '(analog-input, 2)'); + }); + +}); + +describe('Object numbering (custom provider, offset start)', () => { + + let device: BDDevice; + + afterEach(async () => { + device.destroy(); + }); + + it('should assign instance numbers starting from a custom offset', async () => { + const provider: BDObjectNumberingProvider = (() => { + const counters: Partial> = Object.create(null); + return { + nextInstanceNumber(object: O): number { + if (!(object.type in counters)) { + counters[object.type] = 100; + } + return counters[object.type]!++; + }, + }; + })(); + device = new BDDevice(1, { name: 'Test Device', objectNumberingProvider: provider }); + device.on('error', console.error); + device.addObject(new BDAnalogValue({ + name: 'AV 100', + unit: EngineeringUnits.DEGREES_CELSIUS, + presentValue: 1, + })); + device.addObject(new BDAnalogValue({ + name: 'AV 101', + unit: EngineeringUnits.DEGREES_CELSIUS, + presentValue: 2, + })); + const v1 = await bsReadProperty(1, ObjectType.ANALOG_VALUE, 100, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(v1.trim(), '(analog-value, 100)'); + const v2 = await bsReadProperty(1, ObjectType.ANALOG_VALUE, 101, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(v2.trim(), '(analog-value, 101)'); + }); + + it('should apply custom offset independently per type', async () => { + const provider: BDObjectNumberingProvider = (() => { + const counters: Partial> = Object.create(null); + return { + nextInstanceNumber(object: O): number { + if (!(object.type in counters)) { + counters[object.type] = 100; + } + return counters[object.type]!++; + }, + }; + })(); + device = new BDDevice(1, { name: 'Test Device', objectNumberingProvider: provider }); + device.on('error', console.error); + device.addObject(new BDAnalogValue({ + name: 'AV 100', + unit: EngineeringUnits.DEGREES_CELSIUS, + presentValue: 10, + })); + device.addObject(new BDBinaryValue({ + name: 'BV 100', + writable: false, + })); + device.addObject(new BDAnalogValue({ + name: 'AV 101', + unit: EngineeringUnits.DEGREES_CELSIUS, + presentValue: 20, + })); + const av1 = await bsReadProperty(1, ObjectType.ANALOG_VALUE, 100, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(av1.trim(), '(analog-value, 100)'); + const av2 = await bsReadProperty(1, ObjectType.ANALOG_VALUE, 101, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(av2.trim(), '(analog-value, 101)'); + const bv1 = await bsReadProperty(1, ObjectType.BINARY_VALUE, 100, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(bv1.trim(), '(binary-value, 100)'); + }); + +}); + +describe('Object numbering (custom provider, type-based offsets)', () => { + + let device: BDDevice; + + afterEach(async () => { + device.destroy(); + }); + + it('should assign different starting numbers per object type', async () => { + const startByType: Partial> = { + [ObjectType.ANALOG_VALUE]: 1000, + [ObjectType.BINARY_VALUE]: 2000, + [ObjectType.CHARACTERSTRING_VALUE]: 3000, + }; + const provider: BDObjectNumberingProvider = (() => { + const counters: Partial> = Object.create(null); + return { + nextInstanceNumber(object: O): number { + if (!(object.type in counters)) { + counters[object.type] = startByType[object.type] ?? 1; + } + return counters[object.type]!++; + }, + }; + })(); + device = new BDDevice(1, { name: 'Test Device', objectNumberingProvider: provider }); + device.on('error', console.error); + device.addObject(new BDAnalogValue({ + name: 'AV 1000', + unit: EngineeringUnits.DEGREES_CELSIUS, + presentValue: 10, + })); + device.addObject(new BDBinaryValue({ + name: 'BV 2000', + writable: false, + })); + device.addObject(new BDCharacterStringValue({ + name: 'CSV 3000', + presentValue: 'text', + })); + device.addObject(new BDAnalogValue({ + name: 'AV 1001', + unit: EngineeringUnits.DEGREES_CELSIUS, + presentValue: 20, + })); + const av1 = await bsReadProperty(1, ObjectType.ANALOG_VALUE, 1000, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(av1.trim(), '(analog-value, 1000)'); + const av2 = await bsReadProperty(1, ObjectType.ANALOG_VALUE, 1001, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(av2.trim(), '(analog-value, 1001)'); + const bv1 = await bsReadProperty(1, ObjectType.BINARY_VALUE, 2000, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(bv1.trim(), '(binary-value, 2000)'); + const csv1 = await bsReadProperty(1, ObjectType.CHARACTERSTRING_VALUE, 3000, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(csv1.trim(), '(characterstring-value, 3000)'); + }); + +}); + +describe('Object numbering (custom provider, name-based)', () => { + + let device: BDDevice; + + afterEach(async () => { + device.destroy(); + }); + + it('should derive instance numbers from object names', async () => { + const provider: BDObjectNumberingProvider = { + nextInstanceNumber(object: O): number { + const name = object.objectName.getValue(); + const match = name.match(/#(\d+)$/); + if (!match) { + throw new Error(`Object name "${name}" does not end with #`); + } + return parseInt(match[1], 10); + }, + }; + device = new BDDevice(1, { name: 'Test Device', objectNumberingProvider: provider }); + device.on('error', console.error); + device.addObject(new BDAnalogValue({ + name: 'Temperature #50', + unit: EngineeringUnits.DEGREES_CELSIUS, + presentValue: 22.5, + })); + device.addObject(new BDAnalogValue({ + name: 'Humidity #75', + unit: EngineeringUnits.PERCENT, + presentValue: 55, + })); + device.addObject(new BDBinaryValue({ + name: 'Occupancy #10', + writable: false, + })); + const av50 = await bsReadProperty(1, ObjectType.ANALOG_VALUE, 50, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(av50.trim(), '(analog-value, 50)'); + const av75 = await bsReadProperty(1, ObjectType.ANALOG_VALUE, 75, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(av75.trim(), '(analog-value, 75)'); + const bv10 = await bsReadProperty(1, ObjectType.BINARY_VALUE, 10, PropertyIdentifier.OBJECT_IDENTIFIER); + deepStrictEqual(bv10.trim(), '(binary-value, 10)'); + }); + +}); + +describe('Object numbering (custom provider verifies property reads)', () => { + + let device: BDDevice; + + afterEach(async () => { + device.destroy(); + }); + + it('should read Present_Value of custom-numbered objects correctly', async () => { + const provider: BDObjectNumberingProvider = (() => { + const counters: Partial> = Object.create(null); + return { + nextInstanceNumber(object: O): number { + if (!(object.type in counters)) { + counters[object.type] = 500; + } + return counters[object.type]!++; + }, + }; + })(); + device = new BDDevice(1, { name: 'Test Device', objectNumberingProvider: provider }); + device.on('error', console.error); + device.addObject(new BDAnalogValue({ + name: 'AV 500', + unit: EngineeringUnits.DEGREES_CELSIUS, + presentValue: 42.5, + })); + device.addObject(new BDIntegerValue({ + name: 'IV 500', + unit: EngineeringUnits.NO_UNITS, + presentValue: -99, + })); + const avPv = await bsReadProperty(1, ObjectType.ANALOG_VALUE, 500, PropertyIdentifier.PRESENT_VALUE); + deepStrictEqual(parseFloat(avPv), 42.5); + const avName = await bsReadProperty(1, ObjectType.ANALOG_VALUE, 500, PropertyIdentifier.OBJECT_NAME); + deepStrictEqual(avName.trim(), '"AV 500"'); + const ivPv = await bsReadProperty(1, ObjectType.INTEGER_VALUE, 500, PropertyIdentifier.PRESENT_VALUE); + deepStrictEqual(parseInt(ivPv), -99); + const ivName = await bsReadProperty(1, ObjectType.INTEGER_VALUE, 500, PropertyIdentifier.OBJECT_NAME); + deepStrictEqual(ivName.trim(), '"IV 500"'); + }); + +}); \ No newline at end of file