diff --git a/docs/backend_api/assets/hierarchy.js b/docs/backend_api/assets/hierarchy.js index 49262a7a7a..e7c97ca8ef 100644 --- a/docs/backend_api/assets/hierarchy.js +++ b/docs/backend_api/assets/hierarchy.js @@ -1 +1 @@ -window.hierarchyData = "eJy1mF1v2jAUhv9Lrl2WOB9OegcVk7jZKrq7qUIhmOI1JMw2VdnEf99xUooTkeGAuSCRGnjPc16fc+z0r8PLUgrn/idxQxR4cYQCjCOEoyhEmIQJ8t3YQz7xCDyNYnjqu8iPA/VlD8ODOH5GDqfLnGaSlQVI/XWwH6tbka6pc++MvpWSOsh5ZcXCufdwjJwtz+FBlqdCUPFlnmavtFjMRMbZRs5oIfluU7JCDmZwobxI89mgUhms5DoHqeqXoCDF4k7J3tV/2CMH0tBCD+dC8jSTI5pl6biQTO6uBjmheQYLHqxYvuC0AJ/BG+RFIVxI6CIvDgnyEgKOe64PF4KfVRYE61m8s1I8yVSy7JMeh9GBvkJbpplxAke5TvBPTeVpQohG85hyQfnVNhblgs7W5WKbUzGbyd0Gbu/rHP8SgzrC+bX2sBdpYFOoZBv+KB0DY5qripNYLZxaWb30RzwtstX1xV/rGFgCRaXHH0rJ2Xxro/8+pQwooKpbFGm2WoOwFYwPLQMOaCydY0rfmIAhdT3FQek8g+prnWEs0w37UUKM6ymOWiYcjZky+r6RVpyodQziQ4do8R9WlHJWDh8nNlr2qGY20XAQBu0BOymEhCaj1kbsQbDvLCH1HqC24Dbj9ZuXUum1XYFTFQ2cBdo0Y87L6zeCo1QvrsStXYpjvay+lnz9BKWQ5uwP5XVtChsrelLYsNgAVa98VRM5Xdhxr6F2vgvVaa69jFP6e0uFfCiLJXuxVv0N1b4t4PvYU6ur7hru5CPEbbC71c3W2Q8asOM3CDNeMyktnJZ0sT5tAkc35IekamE/DPwOvildUvhBxoqXodgV2ZSKcsvtzMIGuklQQ7fDKOnIpqFmcQZ0ZnIqoGkWJDDJwm4BdYYxGCDwJniuyG1Z3HdoBB9DgzS2hPpNRxe2WBKd4r3hSeLW8In7X/gJfFJZ3jaJVhDDWo4D/cDyRNW/BEorZXHQ6uuqekOsXE0CvSSq9OY5PaRpZfdoaZp5FriNKQZvvula3OQA0yFtiOl5uLG0NwC8BK15JISjIFKGPlfEUdwxp260I1za+OEBONbfVe1O/z5DvkUX+BUdxp10Fv28cCM9bSj23XbP2+z1C8aRGkPP+/3+H2dhdLY=" \ No newline at end of file +window.hierarchyData = "eJy1l11v2jAUhv9Lrl2WOB9OegcVk7jZKrq7CaE0mOI1JMw2VbuK/77jpBQnIsPB2QVEIuQ9T87Ha/vd4WUphXP7k7ghCrw4QgHGEcJRFCJMwgT5buwhn3gE7kYx3PVd5MeB+rOH4UYcL5DD6TqnmWRlAVLvDvZjdSnSLXVuncm3UlIHOc+sWDm3Ho6Rs+c53MjyVAgqvkzS7JkWq+VDxtlOLsf3s9GSFZLyIs2Xo+rx0UZuc9CoHoFHpVjdKL2b+ocDcoBfizl+FJKnmZzQLEunhWTy7XqCM2IXeODGhuUrTgvILGQDeVEIXyR0kReHBHkJgRx7rg9fBC8UPsE6/isrxYNMJcs+sXEYHbErtHWaXSY/6XQSf4qpLCaEaBj3KReUX5+4olzR5bZc7XMqlkv5toPL6zbHv8Solr5cVg97kUY0h261yogSMEhFs4A4iVWNVBH1vp7wtMg2Fp1dCxgkARpHDzyWkrPHvdVUfWoYhIeWbYVPs82WFtIu/oeIAQCMiw4wpy9MgNlYhD9KXA6uxlQPPpXpjv0oQdwi/EnEBKDhDZPvO2n37rWAQWDoey3w3YZSzkpQs5rAk4yZJeEgDNrWOCuEhNGh9uZ4VOrrCaS2bbVOtuEsFhr1eK+lBXJTYcBK3caYcl5aePdJoxdQ4tZ5iWO9db6WfPsAVU9z9ofyuv+EVfHOKho2FDDqba3Kn9OVZb4aMpdnS22r2hWb0997KuRdWazZk31rN+T69rfvY08VUl01ztlHiIF5u2XNSuoHDcrpCywr0y2T0mb3oqv0mQHYQyE/JNVg+mHgd4DN6ZrCAxkrnsbircjmVJR7bulpDWaTaIb5DaOk4zUaakNMducrnItkik8CE/yBeqVT38AW4KB1qZGtk9rXCoIPKyANT6+PFbrwENXvVO1NTRK3pk7cf1LP4JPK8j/Rt9QN+xXO1zozVYfr0q4DjiJ986gOYFUek0CvfvVejzk9vp+d/bfEzLIUuA1TghNluhXD7jI6NA35PA83qjgk2TVMzZ0a7NCQSuGiQo3iDtsZ2tKvHefwSBrrR8GB7LuPS7ewAr/CwrgTa4gMXrn2nU8h9t32JA8ywVe4i3KVxeFw+Au2qvTj" \ No newline at end of file diff --git a/docs/backend_api/assets/navigation.js b/docs/backend_api/assets/navigation.js index b36f95491c..e62890e064 100644 --- a/docs/backend_api/assets/navigation.js +++ b/docs/backend_api/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "eJy9nGtv2zYUhv+L97XdmqTt1mIYZjvuEixpA9sNNhSFwUi0zUYSNZJK4w3976NuNinJdHQO3U9GU/N9H1K8nENS/vTfQNFHNXg7uCPBPU3ChQwES9WCJkpsUs4SNXg2SIla66/EPMwiKn/a+9Uf1yqO9PfvWRIO3p4+GwRrFoWCJoO3n7ZGv+ovUpGQ6Lc+you61OJJJpMHXXYSM6ULAW1MCdvzpfaMiJRaUcnwOZPPtWlRanCYZig3STClkmcioDu0QhCEtlfchj45/WU/9rdnW9bhHReK3EUGW2G8JAEIb6vXeG6vXj8JZ2/tPqSK8UR6ojxkg4ef0iXV3SJgyWpPF/BWgX1W+Er4Gko/0PwvdCtajauTNy/PXjhG17fPBlfCQ7qoMX5Xm1R/PMbR6RcJpDQFF4tCcFEKIod/Krh+qJKLI5DttJGQSyakGq+JuOJfqRgTafTMZZYExTDwids2tGvw2tURzG4gYhKxf4+Nu/UBUaZESDriPKLEnLOOQmp5wWnfZ/EdFd8FtrICsUqlGW4EXbLHI6MaTj1IzSlrlOlxZ86ivVZ9B2UlDFvxb/JHcASoUhfGdKuHWkjyRzgRgh8BrmEAo6yaHR2KHH6yqDAk4MkDLYOwOZ/pXpysjsLa4QMDLnvOMZvVcoBBTrX/cSEtBxjkX3F0TvX3RNHVh0o/lLtM0ePw7jODobdatgzxsJDdzfnizc8nr077cN2eHons9hTOFtIlySJlNNoDESwfkHi8WtumO3saWLHMN6cej6v0Th4e8JTlbwSP2ZGC35YLMI64UCqdKaIyOdZuO1SaZPETMW0Jm+OpGwU6ICKBGtEgIJNEMbUBLtMdSq312DT2sIPiY6PkkXEJtc/LImwxQdFOAAFwQUloJQf9ESoJYOSlVxcSrGNq7k/2YjAUXJ1ttF3GED6lgNNmJEgSrKEeZWmnwUSRlM25FoOa7BScRu85vK3ysk7xco2EypelnQZT+sAkwqIu7zIZ64dFIxpiRrGlARtD1YIOBKhKu+rZvXMI3+kG1XKW6tg2/JjqZA/aLU0JV33nRN6PeVL8C+ZkKDx5BURnIP72u3dTqpbBEFk6LZZOxyn/6sNQyxzwKydzrN1WxemWr5PDkKTWAOrtZqgAn2uuMCKSBWNBQ+3CSIR5vF1yCLLzVtYDIjrvTHB6kVwmUuUTM5KklkGR6P8IaKq4uCYJWaE7UFvQDx1++uoWRNDp5GwlqJTF4oMEs7RwTI8bvTQsGWLvrqmE4JnSfzIqlRciSwvPNNfBsFxyEaP7fFsQRSdT3S+xc0Mt44HEZ0O1FBF8+b4EC5BIpQiMokynUEv8VsK1vo9JFM2YQnSJWgFWzzKJwLjn5THemJ5XK2D8sV3NVMFwNBJzGEZHbg6gmCGvpbSk8EReHpIhBSRaUyoYR3CUAij34c0lGkBroBg8Hc91qQG5Ip5Q/PpqyTjnbR7nueIkojEqQrR1gHXPtwuwCbch4q63X6/nJ9/VrXmwdly3swNu+VE52q0WcXoJShT1lCl3iAH7bSYVj/XgJ7Gc6XmguFuFiQY69WBsumYsYfmE9OHuCw0QI7yp5HpO50zPPBJ39XanAbzsud3jR0W/loyrzt1bxL3t9u4SQy65er1ZjFrX3ulM6pwocsskU1xc0Ci1Dt36gnXrwdl24wzdZp1yMLI/aKKFguLi+YytEoLIcNpaKKb6AaCBaiEUzcX8+ioXQscx3XpQNjXaXIa4ldEQcc0+1RE0flVsCMFqflnJ+dxf268JZNR/yleX4lNxxJzdVELw4DnQ/lOqMpHo3ME6UIWymGo4rr8ZjUJfWIYYjOqK8/ssHYZhsSOee8Gh2lowpvzKwTAJm/cv+uJYMq45J/9iGaXizEqNw05qPaUBFyHWrdY56Mi/ILZIaoVDLqjotBJweWDj/j3Rfo8LpqgabiVcdSx60CQJeIiJvU0V8G1vK2dDx5J7BIHXvMnX7htvfakaQtBL51FxuVquWYpAMVRcPaS+zITqi4aI04tzxHjLS8NadEYeWLLChZs7DVcNZ5SIYI2d+00Vt1ukZyBMZFQrANvV33j2NJJ3MlX+64OokgISFacR5nZBHWrh2+yQtC/iI5CiCOdkhc5ndxpQBnmPS/NrBdcIn+sPfFV3IsC65kf+xQ4nidB9oUMMeI+gzAvekZhFRpLR40UdSwH+Rs4w2eiMScEQyrIIc7GCvT+VF8TYCrIZZcslFVfsngIJLA0EjFLiXfUKD4zEEMBhFFc+59oZzLFV6ATZc3O0uYfUx7Mlg2gBQ+s9iYGN0BBB4pSx+DVRwdrMgfoCWTJekJrvZMOIut7ABgLdkihDPDJDBInTej+vL0rnq3e9Maq91FZW2JfG1vEDVWz6lpdhP2JaqlMOjVher/DQcJaQJyx/TdelB4fMb4roFNrqLFcMGFfsE8PjWY8EzddSwwAWFzPAi69RHg5RHQ8Vqc41SUEgDQ04TCtz6AHRnTD0Mcc0gYe6PwZRFsJ6QlUWbr475LFPZXow2BJwlD8pLDfS5VCmsJ9OyAvCbfP5Iz+mBlnXhRH25nEVjMFUgIN8iBms0+UF4bY6FM1f8wI5V2UR5iy4hznrgghbwVMq1AY6zIzycIj62MFDwNot5QMNHxPu0ULBdcYhULpOMQRe41C3D0zXOW4v6+plH2gwZQrAMcr3sWHzeVX20C5K8xS454/pdB0CO38vx/yNl2HKeu6j6hKu7WJiCj6lJqSpd3aqCT//D/zi2xE=" \ No newline at end of file +window.navigationData = "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" \ No newline at end of file diff --git a/docs/backend_api/assets/search.js b/docs/backend_api/assets/search.js index 3773f4b386..9e1bbc7d2c 100644 --- a/docs/backend_api/assets/search.js +++ b/docs/backend_api/assets/search.js @@ -1 +1 @@ -window.searchData = "eJzVvW+T4zaSr/tVbrTf9voU/kqauHEi2h77js+dtX3cvbtx7sSEgyWxqmirRA2p6nbvxHz3SwKEBCR/lFAioPG82e0eN1OZZAJI5JMJ/P1NU39q3/zhL39/82u127z5A3/7Zlc8l2/+8Oa+WP9a7jY/t+um2h9+LneH5vO+rnaHN2/fvDTb7l8815uXbdn+j8l/+eXT4Xnb/fP1tmjbsvuZN2/+8Xb8S/9390/LZlds/+crRP/sHvoZ/MrbN/ui6f7xWTNOqjC+PCrz7r49NMX68FW5Xhff7A7V4fNRq+EX4rQCgq7U9EvvBZ2UVuz0Btf1rvuxl/WhbtIq+0Uo+XrF0S/4X+COy5Pnbev77zaJDemFVpub2bApDuXXTdn939SG9JLXR8m3s+bf6031UGUx5/kk+jb2VO2PTd29xvRfp2r3nuRbWfP+826dwZTWib2NHS+H9R+zDZtO+D9j5Aw2ZRo8g1G3GD9ccya9Obr/R6mn6EHmyYZDu/m3qv03f0hltKlq/1huyxxzwuYoN9/3uZOnIObnx/Lwdd096UVraWzpJa+Pkm/3pQLr2mzWtf986+7Lh7op3xcfq91j8gHWi26d6H+OfY/lrmy6SetPRfuU2D4n+smKvs1Y6wbEj/UvdXJTDnsr9aZWfKg7xyvz2HKoWyv7n+V3h/8YAoynYveYfJbv5LsY4yj/Nt+uc/f3h6Yb03kmxU58a8SjmTGnXdWuSm3LIPI2+j8Xza/vMsUUvezi5nFFYNH76nm/TT1XBHa17hduY93+5WD/gZ0gElvWSS/NX9dO+j9nHmzTT/CjeT2n/i/7fo79tqmff6o/pd5PGdkPnezGyM63R/Qyjl+9OxyK9dPz1TO3J+D3m2GkSqbLLPrvb2IXXhz/xbV5xZH6J5Fzs4oR+s/JiI40B5nQYf6pdk9lU10z/0TYMEQPfy53j4crA3/kQ73MrZOZ9yvMzumO9J/KSN3ie8zP6UJzYC7qFvb02Zt192i6r9PnbU4S8/rW7Iw00B5nom/zLeZkpIEpIBN9Czueq+crY6WRDYOovF606z54snWiF3aDta3+tCubZEobaTfQel+31aGqd4nU9sTl1bupr92yjXQeROXVt4ubkynsZGXW+PM+mcJWVF59U1C3keZnaNst5u0k1G3KqH9ahDNY9X79VPbVMZtv6+abpmhfmvJ91S2Paa1s3a/0yMD+Sjv8SnJ/TMcWx5udi0zx/8r06dLCRRicjpN/t7HF5rG+L5IFR1bgrsgTIhHtezpUbrpwe182h6r7oTQ2WLF7X2xuS/ZN9Vw0n//fMuW3GIT+Wub7HklR9ciAWESdbeAnZdVj8yIZ9U3Mmw+rwYw9Aalz6N+9yI/dcP1Qf9+9tXRJqV7mod5Zmbkt2F9ZoAoUN6Ly6jukVFJlnI7S8mo9v2hhpPpkscItxm3ySXdizs2k+7fVtky45HUSHzqJN1nvut9KONd00m4yy8wqckFazy9uidd6TlHLlO6gmCWTBR/6rMUPTer0cCfZ5EPqJlHBcpw1KUpwkC1nSm9uMZ+mKcFBe4qEpTcRdlxfcjPeoNJSm1t8h6odPsC7j0W1Le6T5Q6rdvgEhSc477dIUD40phCTZUO3+DrJyofO2wXKhm5hXZLyofF2/BVlQzfZ8l1fPzSybaoeNK/+qUPfif14Dt0T1D6N873pap4mctik1qmp7l/mBMD2+d93pZOnY9pCp+HlTdc52X8wh6f6uh8FpkCq53WfW+Pkq52rxOm8BUnqg3wzsiK0y7bMx2fUmHzo7Lw1VfudlT4vIvTNqdoqEJl1bCSpDgq1z1gcdMmWubVBoSG5SoPOW7GblX3yLUiTdbqg7cy6oEDfRGVB5zWeX1/j65yuvOa81vNqP3yN05R+nNc2VeWHr3fuwo8oi9IuXNnLPs7b9LHYviRyKicqtVelrd8IArkblW9cMqlq3z08dL9X7R7fv9wfmjJZFFE4ue1RbubPk6ASJTQhSRdajOa7WeCELmL59T0UzWzcEywKRt6tdU8VOJy0zxI+ZKhR8rUvE5YoXdI9XYWSb0H6AqVLdqSqTwpCucTlSWMbklcn+erftjjpgnEpUqGBcTctTTpvXJrKpDAWSVmYdF57Gz9/va13iYaNFbgeBGbVPU2tjK983lKZS9Yc/lg+VLtyk24O62RurMxbzGHOgoT7aWdArk112ooZonmu+ClpvQzROU25TJTOc6tlgOYRJ7/cYknoi2kSR+R9FU3WoDxT+QyxIXf1zHm70hXPkHB3unbmBlbNK6UJdtizD62J0LZ993Ko/1ztfk2W2Ojkba28zJqnXt36jMatFrdERT6++plrfF5hz9wSn0mrclX4nLctWYFPsJ+9eX3PeSPnlff4luWp7jmvvS1mSZT3d7KyTgCJSnrGiier6Dmv/8diW6V755605OjLL0P6qil262t3p/bh33EBkqdgwuqj4Z3lKN/xFc5Su3NBd/Nf02hv/jw7wX1e3/mFRr7K+XjtZStmklpqRiZGe96Oqv3mt32x2ySxomrLk7B8HjS/oChUOlc10SUrZpUShSZkqSM6r/+sshxf+yRQ7bKuP84ryqEaJ6rKOa+3FTaLY/p6W3E3eN/7ptuD/pZCYycon65JCol8nbNWEUXZknBhyls/NLImYTFOENjcohLnkjFdZLXdzMjeBoFxLytB2vaSznPLbcJVKk2tzWWd/6ssrs0Ehgp/soJyanua4pNO8Jm1LucWqPhal6mqUy5pnag0xdc9cV3KRW9JUZQSLrAJK1LG2qctR/EVv2EtygWzZheiBGbdrgrlvFkJSlDCFThZ/cl5vecXnwTrbLLKk/Na25UxVWLvCyvu3onLp3eCchlf74y1MpfsSLUEp8HpF7WdUaBBtE1QnRGl7azSDKDzbeoyLpqWpKiBmJe1ouG8RYnKGUiIlLOW4bw9MwoZgq3A/CqG83qmQOm+wjk5+issmQXRJ+3JQtDPW5UGnweR923Z+XnzZoBz36YM1Py83rOQeZDnSsHLY3SdB8vHKqch5eO0og+cvzkU++pD3cm5Uu2TgN8xeCZKJoTP3vvLAaCp4lkg9GUb5oNdaki+NHqcNTPz6MicTIn0y/aUx3+RzM+MyEP/99k46bL+86EvVT8f+I2xZhb8HZuSBQBftmPGSRLUhgT5x8v6Gm+dkaygSht582/sjdA8Caak6mdFldE2JZ5m8yJLaFVCbDlazG+BLmOMmosCx3NWGhwYo/tsXDVa+lIhqxjtE2ErakNidBVjSRJ8Re1IirCwFWkxFjXghigrwrzZOGtk3u2Q1mXzEmCt8QydDG1d1j8BcKH6Z4QuMfbMQRljU1LgjGitZyGNCd1vgzWiTEyCNoCZWfHGZcsSIQ6wnObEHJftmoE6RrHZfNxxWd8UyIMqnhN7vNKiWejjrF1Z8Mdl69IgkFH0dlsMctnMGSiE2pYBh1zWPwVmGG2pE6IGnBbwccOMSoz+0d8xYjiqlxAumLc1kWD5+eeHbXH4UP52+LpYP81+qV9YeYdO3nqQl0vzWUDkpHAWFHJOb1OY3VwNyjwHOQnK9Y6HQOXdbnM6+r7t/vZT+bFqq85B31f/Pd9n3NUju24KOf5K97fG/Uprf+WmVuaz7DbWpNQ/s8bzseBJ43zJ6ksWzMxRhyZkSk2fs6Fqvyq7vcm8aPtkRdXe9+LSZHDP6/1He0tiEqU3nqx8Gs8Flb7GuRDleQtmwUlf/SxY8pzuz9XVeeWT3oOQXB4yq3P2pGWSPs5zetafduXmeBrFtdjhpLCRV/jycmluRdmipgSKW3H3J3F59U6lcE5NXfT2df1ydQbtpK+Tth6k5dLaHnf3U9ltYvrIc7beVl7jycumeX/d5Xx9BynZtLz+CglPyfm3R5zTMUkhxUnbrCUUEXYkC0zzlk0QSwgXPi4KaaaTo7gM80nCUg8vTXGLIo/zhrh8Q5ov4KTl/wDe9vKH+19S7jBrIy6v5m70plLdjd7culftu6b7xh+TbBKKk6icGqfb+2bZ9hJ9t8V9uU0zGI2o/CMx3C6kUT3cMtzIhj+ne/VG3i3fv4ttE6rvwtt/hgXf7dbbl021e+wP9020Aw3sqdwPbIcfyGedFZbmw1hZ+b9Ik9SdbudJTUYn+mf5T7h5TfNFwg1s/u8CbEj8dYBFN/xG4eYyRVQX7i9zx3VkU5nQgFtFpuXcUu+T5mWqIu/zGicq7z7pnbiw+8KqlqKk21vYUhZzU82DOuef3XHNHz7vyyS6n0T2Kazc+s8uQ/cUv10B+lmTZpeeeybdruj8nEnF5rQjmp/W2py2Qhk9q/sZswNKoe92EJRRVxdMpFC3OcnKpnFTvttu+3/xY3F4SpdG6eQW2605mbaXmymnkriVws+AJmuiOKezOcnrw7XtBl5+s5dzmNtocFbTevexW74/1D8amafapfm6W8mH2mpb+JJzWTMUXszPcR7l5NO0z+2lKEEdTmFLcBrYOX3LpmjLb35bl23r6vbe74p9+1Qn4MhGeGmEH8v1POG5bErQ5HSyIWN703kbDv48n8CMgz+/Z337h3e77pMf6uZ7U6mSRvlBpK1auZH+STXPrfNxHv7qc4LqoF7xo8T7z6kLhc5p/yFJrQIxIEPpwrQNafwmEHcbvb/6/FOd+t2395+b+gbvPtEuyeqefZfk6/x1t0p+t2vLXX8lxNXdQ9iEdSe7CmTfwqJUAyBLqd+k1v9ZbF/Svv2Pg8SM2n/VLS4uTEih+30nz4UJt9PcdtSm1r91UnNakapKtNc9S4ko1fjrvrgmpdqmWueGuvf/Jp3iuzr7DJMqKzmRZ02u7x/Ldt0JKdzdQUle9uYo9CYx/B+r1oTeH2oXzScxYpB6qIuT1IxWfFtt08CFTtZDJyszVbAad/+03CSfZR4GwTecbb4dul+TqD90vubV+Lt1gkx2J6daZ81i95ravEm3PiebzqujyBvM6f+r7QsQks3rv7R9tcEN5nZP7/fFQ7n9nFj71gnNaEMavtQJys2XnK6nW9qTOLpRexPIzG1BOr1voW2ynZzR+Aa7uJPW6V70Rycuo94/BEW7KVQPS3ZvqX2SN5+1SfG8/smcPrThBt7/w7FsOpn6N5jZT1qn85xbzJAnvdN6zK3mSqJ/4pd/s1kzWeGJU/8G1SdU93TvPlMT7Fnt07q/s+AGI+DHtP3p/dGRGVvUsfbJdn1WuRvs+GYcNBoqPP+I0QhNZx0uOtIXHCuaXOuUE+Jt5kKnceLtnVP+Zju8pNP5jWZyp/MH07CRUvGDk3gD7ZMtQTdcfY7nu6XR+yQso87vzcPf7D6m0Nn+09IIy6lz2Vfh/lS2L9t0q2VrhDZG6A3WzPd1cyg3jvL+VK7rJg1Nao1gB3qbo+CcthyaeveYPvZqjdxbRmDvX+67gZdk3mmPovLrmxBGDmrfhER62rfHbsUP5fN+m+QEmdCa9titePB+IaN1HxKfidQJy3os0kj/vjDwhybdoXu9Ab3MusGH7yW3IMk5+4H+WU/YP2fNU9Emo/WdrBsw+l7jZOnvXuUbZL67n/k61TnDnaw8Rw1TjQdeXNxvS9f0lCZj3MmuTrJd41Pu/HH3q8nUv4GuiTlPJ/FmnMdpn+x134QvOK2TJUWc4jfIjHQ/lVLt22ic4k6XQO3p21zS6j7j3paTvglubDmvo2tt74LhDym2HieJ+Xcgp9/68FS1aa5COMk8dDIzXIcQWtAOjv3uY1Ft+3VuvgGtO7/eE5lP/1NJ6g8P5l+mOIbNiawfdnXWNahqv9lWj1X3kr6tm69NA22f9PpQJ+zLrdpy+I2Hulkff+NQ36RDt2q/rbebcn7YXrUPTlA+Xf9UbTb9WZX9RUiHFDVwVftkRK59kRn1PzzPD2U6nQ8zb7q5pOd3z8XVNz35ilaDnIyaehva2dp6snJqbL04VTLP6G0k3mBFbf9Xt2zYpHwCxX/phLVOWEad2wQBbadtmzWWrezG8kPzcnhKMbGZnc7BScup9ctu/fRV0a+PD9X8XrBe817ifdGvhlZiPu1/2KdJf1Ztvc+d9azan+o6xbhrrJh8etpNWaJ4z27IMkd6KW6lPCmd8z7KaCtm3UQ5YUuWOyjPWZTm9smTNTe+d/KcaU35XH8s0yXnrLxbpObsL6VJzFlZudNy9leSZbesuBskuGbcSnrSNsN9pJd0Trg/7sXdZCvc/5CrkUmidXMSlk1nAz4MYE+2obAyDWK/wZbiZEGbw4T2NjYkPMikvc1BJgkP3Zw4czO5vilbN9tbtW62qdoe2/xtj23CYt72JsW8fTlZMibeC7sBFO9/xlajzd929rL2R1m5ND7Uj4/bhJGqlXeLWc7+UpoBaGXlHoP2V5INQyvuBiPR3hU/W9+jmLx6ftvUzz+ZO+1TqPvQSWuMtIRaM35S+iubprpSXfvwl7OpgaecYtw/sta7036mgl+E0ua8z+GdeW802U3zvsJZ7po/r/v8u7V9A/LdY3jZipnXGFIzMt1ieN6O+Tc/+2bku/v5khWzbn8OTchy//N5/XfXn7bk657goKXzeia5h9TXOOtNpFG2JBzEeW8jPW/Nxxk9Xb4NKVq5RpomvH80WLxucQPpJWPm3tEYzj15qMslG8q59w/5RpSpbiC6pHWiO4h83RPfQnTJgiT3EPn6J72JaKx92rt8fMVveJvPBbNmpxYDs253o895sxLcexLOvMluPjmvd4JbFXy9M96rcMmOOSc5hCakOMshSttZpzkAncF5DjcfCKla14h5WZvXzluUqI2ALIPTjQS57ZnRWhDEUrS5ILfeKYpwfANyluG8wpJZhTiT9mQpxTlvVZpinCDaum05znnzZhRb+DZlKLc4r3eKlHawCU+Y1B5vuf209sxyC/f47zi1HaiYMLl9fHM50tuh0lkS3Jf0X89aiUdvPQHkj9T4z+Xu8eobPaDeWycxp/bzkUKoe76UZIwlfy7awzebGW0hY2O6xztxCbpDYvSfmVEda58poXrJlvloJDQlHxy5bMksPELNyAJILtnwXF2dIQv1HwTlHAV97V6i9cseFpRZX1frmUhnJy673ocZl/aFKqe4qe+itp/3iZS1gnLqmgT0hVpnRX2R9iReWgeTbra6pkGW0IbbrbEJYSAJ9W+BAy8bNBcI0tU2Twbosh2zoWBoSDIseFnzRGAw1D8xGrxsRRI4GNqQFA8iC9ICwlD5GyLCi6bNhoTEtNthwkumJQCFdFZOhgov6W5ufk+ZlbN3ySfqhLqkfQLUGSqfEXZetiXN1eDUoLTXg7/SijlXhJ81JNPm48yV2+mtyLEeTus/68rwc1YkuTY8wpaUq0eyC1oj9J7fxTbSPV0n2+v0n3UR4TkrklxGGGHLjBMqRuonOKAiQuMZJTAjjRMUwURqPKsMBuqd5GKTCO2TVLqMLMha63LJqkTVLqO9XcqDMy/ZMKPChSQH0te4XNQ91aGONM2R+GDHS3akqNYhXCFjvc6rrJlVsXPGpiw1O5csS1O1Q9Igt63buWTijMqd0K4MtTsXdU8byiY7jOGS3imqjkgePWHdEeIAXuXRpnwoXrZXvvHh4d9v1ZGvYLqaI/fOJshKsd324fT7zp2vP2k50LyTaI5w6Tx6/jnLl7R3hxF8t9uUv6VQ3gmsBoE30P3KpATWe2Y64oLO97MuYgo0TnP30gV9zbkg9tSOD7W9RSrF2OylWj0P9b2Tms+K8lDsqw91JyfFizfSDk5aPq23dbG5NsIMFD4KyqermbASqOrk5NP0dF7pXF2TnHw61jaINorN5vpkTTjBbTbzUzUXtN2U6+6hw7H47ftEXjHIPYbWWbwktKRqDp8Tr+tGZs6VPbDgofuf3qVcIXuB+VbJM7r/V3V4+rEpH6oU8UloxadO9N6JzmdPjyCOYWICI3rycAwSs2s+80zLkeaJDrV8jeY/NB+emmu3a9MG1M3hafae7TV2pBjHKeFblO5zTk8Dmqc4PO0Veqd2HSv1Rp7z1ba+T6P5vZWUV9tU+4te3yy7CqxxnwwypzG+2w17pZQ29Ikhs2EqdsOe6TZWJXV8a8qNvN6mfdMoXjpZeTU+blATaX3cot5O80RrU8bddToMTpXOvrMatE06JnulbzQiU20EB62ze8accyepwrWTlVXjn8p196h5z/1y9L9fyibRDNgYyea190vR3wbJma2ZU4o5tiBFGWa81klHqVP+RiPV2ZDeiwa5t/Ohqy8NGuk++96gC9o2wz5+rq5NjnyAzw/f74t1ufmPGWce+xJ+vyRxpGU6nBi8wqms73Zbf7L/pE9+1S+HOTUMY2OMfIudP1n5oJ4hi2VV+2677Yvi+r3Sh6Z6fCybpO70RdV21vX1DP1+6WB/IcXp2jHWteuncvOyLdNa5KTeyopDjs9y4y9hf+f7+tN3D9938UvbFtcuZGNTrOxd/al62Hmy01vkz7wfivZXUy/z25ULhSfg9zvvUiXTTbv++5s+geLKdtKR2oOovPr2Ibkp3OvCqj91k922bIYZ9VpqPLKj/4nN8BNP9icO3k8kt48Uu/Yd3235Y1M/dpFN+3X9cm1mbWSYk70fZK8H2Xktasp9F8Z/0zTJxoeVWA4S82p/6P7J+5f1uiyvLksY6d/LbD2ZeS3oYvnvuvmk2K2vXNdG+ncSq5PE9NorfVTeo1l7DwQZEQ/d+hFpQigm6VIQnhyzW29fNuXX8HioBEp/MfxAwtOiyBu+9Bn8+s/rDeqk5PsIJ9DnNVLO1/WLk9y5rZTh64w71S2BAeBwtzyq0wPdEuiepM75NconG7zUhLSD9owh8HCxBHZMnn+SyQzTTpF2JFiZNxkL4/NNEuiPjznJZcD4XLckJuDj3fIYERyHlkD7+aeiRaldf9qVTVrXNyJv4vn7uq0CopRAe09mbvUbv2U+gerzO+Wj1A4PeUugd4LjFqIUnzqtK4EJ5w7tymrM+yGLufm2br5pivalKd9X/kYsnXEuYbrpz4+xP9VWs3doU8aSzYGt75q5NzgKybo1GDp/ZvlXqKnX/jPftU5vcnI5/s72JwbNxPONqNoqkJvZjF0xb0Em2s8/oCtK6Tqx56Q4rjRG8RRLMVE92Up8UfngIND5is8/DjRG6YSrGdE/9WJ20ZTwrrz5BiS4M29CbX9VsvWcc5ako4R865GtEJ0xpYQ6Du2Rs0/6Or66bHtaonei/WyE4t/8ti92m5SalyeJOVWfufYQtZOckx2j8o9zVx6geJql56L6Vtz3Sd+7lXmTt78Pu8fmKp6gYeyiyqkWTaJ70hUTGeGvO19v6135U9nu6117/aoZSPkdrz9jPROtQeFrnMrq9XUojynf8hcnkbmVN7NjMQMxAO3N7FjMpQtR6huA3V6PZIH2J5EZlA/GqCUxs5CyJyPf+Hyom3V/7E7/U5ufyv5Mg2QKf2GEPwzCGyd8zqv3Xus5g4LzAdOYMf+AQKx8Rq/5N/Yv5zeDyv/6nhMY8q/oO/xfz3f4P9l3vn2xRdjpjXmxtdf/YkOA/4sPAZF5CCR70eL2L/pj2cx+0U5GRhrzcqjtD7VzMgRU1y96uWtf7rzXfXyZ+HX/sdsY70w+4of7X8r19VVPVFDOMsX+3XRR8raYlZuBGn8xSG9O0me8/9HbPVel8lzPyUlOWNPXqTjBNzBkW9yX2w9zkAe2w8idzz5izXh+2R6q/bZa+4cSpLGEiL6BMbuX5/uy+bEp19WsmQrbY6XvPek3MMk59bttVVy/TGCDnOxikJ3HHH8OPh3IMAf4BFLyzb6ngxlnJN7GunpHNM5NvoWvMxsEAjYkAkFRBswqQQC6z69BiFLbfOHg1qMEuhuho5uP8hgwcVlmAivO3JmZ1ZTZwGLaljTQYsoYfw79f0pz9dSsbYMn41+kyYZqnKHDxn+x+NX3jPHdbkOOAnutKYGU3MwooZZfpDi2LHyFZ5BLSsXnn4A0pTb1jh+Lpni+flyeRPyOWSJRMhFI9N5epm4lqneSVqXLam8SrKFU9WSr52X1q8dd3ZTf1s19tdmUO3uEYDIP/8KKf3Di90fxeY2aX180MiRRgVGM8vMbfcbaJ+ryuaz+rBYfqvf8/p7LCs+s6KIqpygqilN6dk0XUj1NUddlA5JUdVED0pV1RRgwr65rpHqCwq7LSh+K5rFMt8QexeVVunzeb82JOkmdxYm9jbvM6wcb6T6/GSxC5TnZ75HGs1PelxVOlNGgqqdMZ0AjxruMw9NP3da3mWuDE5MxCdC+a7rNwcfZrztQtT9I7SR29us+vs1JI/5kotPEJjw5oTcw4Lvdn+qq7a9RfLn/0JRzxy01pdo9WfHty/3Bis9u1OzCTGRKmsrMSQNGI9m/Ovgq/TsBGXMF8842CRRMcqzJ8Z3l3mwftU47s19QfXaCeqx7msT0JeXnQ6ZQ80R86bLaibbSnuIpN9JnVJ+/jT7qnGgTfUbZFFvoo7rJ4vEzCieIxo/6porFz6k7OxI/aZsmDj+jbMoo/Kh28hj8sgGJJ+ukIBGYQEOPORUYw/O/68Aj6XFq7oVlRBNpj1C7oHCqOCk4bCzZ4Mt9WNpI83SDLucBaaHaSY5Gu6BymrAuddXQRaXTBHXpj0C7oPjskC7hsWcXVE0Q0CXtcb+g7vxwLuUxW5eUnRvMJTxC5YKqCUO5LMVhceqnXU+Sx3HTpWD2Jqg5gdxRQs4M8PvPu/WMtxvq2M3GrZM348WeXl2OqlOi8vyK04vqpnJlonlSZ75oxLwTjIjqCY4vQgr748815rRP1f5qtX0h+UahuaRzJiAdafqFkZpi/Q7eZM6KgLEN6WoCJowIPcbeNDZnzvZk/G434FTHJJtw/+VlPRR8pH3CKuMII1JszkcmJIupIg34c9EevtlUyW3oFO9kVrcwI8VGcmRDss1khAGzNpQjzedvKiNUnrmxHCmdZl6/qLa7QTKl6k7mDdSftz8eaZ5gjxyj9Jx98ljn2XvlCJUT7ZdHyqfcM8ebkWOKHyy54Syfauc0ZUqavRM2xA8t3xcfq93jrLawk4h8gWX7a7X/z2JbbeYdaUBU/aIX+9EXO+Nde29y4lWXffXZzF4fX0jG7Ivprxhqv76f01c10nfo3RgKv+b3WAVv9XxPoasp7A1K+AVcU6GrLdzVs69znzDK96b+drU/+tc7vtYOJyBj9qDelN89m9v8Nu/ar7u/pVH2i15wNQgu2rUVPON1H9/lZJy233a6/sduUzbdzzVl299hbK44vd6PQpOGn3g5/UR/jXHrfiKjcW3xMHylRKb0AisnMKfiT021+/W75+Ix2VewIisnMqPy/a2Ip7Hxwb8Dd54JveDT2Bgu101rCL9bLZg63ZF7PK89ONimD40jLQgEJJ2PqKr2QuLmGiWHR9Oq51+0sq9e5wLdA1cqM+WUP/+8b6qPxWuXe6fIF/7zr30/vflTJ4n9VtWvHOFHldyzCdVZP5VlU72yAPuo0OnplCq9NC7Lfa1aVsKV8dgZ1TbF51+u/Xju2YTqbOvHf7eHQF+rVCfh+SQhrWr+rekz9DNhw+blKCahknVTPVa7b3aHV5/8dVTQiiidiITKtX/bXqmTfTKlKoeimTMezfPpR+Nvz1t+9XA8PjxPoeD+6v6hl/33rwVbR53s8zvzfEK1bE6sj3vmzKk2sdYJSfIhgYLfl59m67crP2VTb7ZumRT7obFz7J+Ll123IDezlKwbO9NuT8KSK9xvEGa/zX4zkP6Nlrv+NkID2Nt392330LdN/fyjlXmdulakgTBtYUQ+dCL3TmQm5X/sNt3dU9/tkum+txKrXRbV23WxL/9kNwBXaWoEXLmdOafYb/3u871t6fxQ/3/V/tvqtZzopKQRNvSHHur/rvYP1VWU6IzCj+Xh3X7/3e7h2pj+sT+ccV9ZAYkVO17ROUM3X0Zy9ezOfZZ2RxFplbvmxDVfs6tPLjuv1h+LzzOm8k5Aty1KP413ck/nCF6v2+mY0ozqXRvABvolDmQ72d/tuqh9ty6/f3URqK9hNUi5svzzvIr/Xu8OT/O877kXkcX/5umVTSWT7P9zf8D2POVMRn87yEmvZiIt8ylp62Kv167eXwlpY9SaMaXURwFpFfvfL0XTqTJvVPzNCskyOFx1wfXaNScJiVWr68PXxbZ7tJj5AptO0nqQlOUtfqg3cwOCQ50rJPivsvz126pp5wctnzpJD72knKrOVzGLav+nnOuFn8sc3retH69PMqdVpQu1N/Xz+24rsLtWJyuidSJSKvey+2HnLs26VruXXb17OMlIrN7Loa025Q8PfdfUDA2tmPqhtWISKtmakpZv6zkDwcp4qDMMhUC9a4OBQL/EAUFro7wP9azsVGuDvC5myZCRamuLPK5+fbVFHonf3KF+fNzaHN+81J4VZFJ7WTJ6h24Ga4t1H00W10bxVEZC9V52s1OOTkSSpKM4lXUUXu3Ex6KpivvtWYWKGaUTf33bGb0pf3vzh7+/cZeQ/eEN/1J8ueokPFTldtNJ+4trBV3Xz0PmbVOvX8wf/zr8s/8s14e66f+x/df/4+7N27/cvdXsS63kX//69i/uYfMfzP/gZJz+F/Mg6/7G0INs9CALHuTd3zh6kI8e5MGDovubeCvZl3ypggfF6EERPCi7v8m38u5LqXjwoBw9KIMHVfc3hR5UowdV8KDu/qaRqnr0oA4eXHR/W7wVqy/1MvzFxejBRfDgsvvb8q0UX7KVDh5cjh5cBg92HvSXFfrF1ejBVegAvT+wu7di8aVehFaysfMw4j3GfdhbKb8Ud8vwYeBAoQex3i8YR0qzsROx0ItY7xtMwF8eOxILPYn1/sEkfHjsTCz0Jtb7CFPw4bFDsdCjWO8nTMOHx07FQq9iva+wBXx47Fgs9CzW+wtbwofHzsVC72K9z7AVfHjsYCz0MN77DL9DD/Oxh/HQw3jvMxx6GB97GCdzlJmkOHwYTFOhh/HeZzj0MD72MB56GO99hkMP42MP46GH8d5nOPQwPvYwHnoY732GQw/jYw/joYfx3mf4Ak7rYw/joYfx5dTMzscOxkMH473L8OVbpb9UMpz5+NjBeOhg4m5qZRBj/xKhfwnjX6u36u5LrcPXJcb+JUL/EnxqZRFj9xJkGRRTi4sAC2HoXaL3F3GH3pYYe5cIvUuoqcVJjJ1LhM4l9NT6JMa+JULfEr23CDiSxdi3ROhbwvgWh69r7FwidC7Ru4sQ8HWNnUuEziV7fxESOYgce5cMvUv2/iIU+mU59i4ZepfsHUbAkSzH7iVD95ImzFqgTyXH/iVJpCWnogkJYq3QvaSajCfk2L9k6F+ydxkBpwE5djAZOphcTAYjcuxgMnQwuZwMRuTYwWToYNI4WLc8qi8V0XrsXzL0L2UmrzvwrBq7lwrdS/UOIxl6duxdKvQuxScDKDX2LhV6lxKTAZQae5cKvUvJyQBKjd1LkVi+dxgJNx4KhPOhe6neYaSAD4/dS4XupXqHkRL5phq7lwrdSy0n4z41di8VupfqPUZ2s0g3lpcsfHjsXyr0L238SyO19djBdOhg2jhYN4voL1er8Jf12MN06GHaeBgMV/XYw3ToYdp4GAxX9djDdOhh2mwV4TSixx6mQw/TZgKDsa4ee5gmO0YTfcFYV4NNY+hh2kRfcALTYw/ToYfp3mfkCjmJHnuYDj1Mm/ALBsp67GE69LCFie/hTLIYe9gi9LCFib/gTLIYe9gi9LCFie/hTLIYe9gi9LBF7zPqDr2wxdjDFqGHLUx8D8fzYuxhi9DDFiYhAbMui7GHLUIPW5glEgVCi7GDLUhaoncZxdG4WIDMROhgC+NgKNhdjP1rEfrXovcYGCgvxu61CN1r2TsMDJSXY+9aht617P1FwchvOfauZehdy95fYKC8HDvXMnSuZe8uOJEz9q1l6FvL3luURJPucuxby9C3lr234EB5OfatZehbS+NbMNZdjp1rGTrX0sT3MOJcjp1rSfJevb/AiHMJMl+hcy1NcgJGnMuxdy1D71r1DqMUMnk1dq9V6F6r6fTXauxeq9C9VmbzqNEssBr71yr0r5VZHmG4uho72Cp0sJVxsAUaFauxg61CB1uZyWsJ1R472Cp0sFXvMmoFHx472Cp0sJVxMBRlr8b+tQr9a2UmLxRlr8b+tSKpVRN+oSh7BZKrNLtq0qs4T3mH8qskwXpnXAynKu9AivWO5FjvTBCGs5V3IMt6R9KsdyZNAVMN9r/R50mm9c4E+zjheQdyrXck2XrXO5DGhOIOpFvvSL71zuTw4X7B/jf6PEm53pmoH0bA9r/R50nW9c4E/jhnewfyrnck8XpnJjectr0Dqdc74n8mYa/hloeh/P4owW/8D2d+YYqf+J9J2+OAmKEsP03zm8w9jokZSvTTTL9J3muJ7Qf+R5P9Jn+vFX4e+B/N95sUPo6sGcr405S/yeLj4JqhpD/N+ptEPo6vGcr708S/yeXjEJuh1D/J/TOTztcaRdkMZP8ZSf8zm//H8wcAAIwQAGaS+hpmtBlgAIxAAGby+houdwxgAEY4ADOpfRiuMwACGCEBzCT3YdDNAApghAUwk97XMLvNAA1gBAcwk+GHcTsDPIARIMBMkh+G7gwgAUaYADNp/gXcoTFABRjBAsyk+mEAzwAYYIQMMJPshzE8A2iAETbATL4fR+IM4AFG+AAzOf8Fg9YDRMAII2Am7b/g8NsDSsAIJmCWEwj8+8D3CCpgJv0PQ3oGYAEjtIAZADDBpQEvYAQYMMMAJtA0QAaMMANmMMACLxyAGjCCDZghARN0G4ADRsgBMzBggRcewA4YgQfM8IAF3F4wgA8Y4QfMAgQUbTMAEBghCMxQARhwM8AQGIEIzHABGHMzQBEYwQjMkIGJqBuABEZIArMoYaJAADgfgQnM0gS8agKcwAhPYIYRTETdACkwwhSY4QQLvOoBrMAIV2CGFUxE7QAtMMIWmMEFE1EzoAuM4AVm+QKOmgFgYIQwMIsYcNQMGAMjkIGp6RwwA5iBEc7A1HQamAHSwAhqYGo6E8wAbGCENjADECaiTsAbGAEOzDCEiagTIAdGmAMzGGEi6gTUgRHswAxJmIg6AXhghDwwAxMmok7AHhiBD8zwhImoE+AHRvgDM0hhgaNGQCAYQRDMUAUcNQIGwQiEYIYr4KgRUAhGMATT01Ef4BCMgAimp6M+QCIYQRHM0IXFCs59AEYwQiPYYjrqAziCER7BFtNRHwASjBAJZiADTt4ywCQYgRLMcIYlnvkBlmCES7DFJLpnAEwwQibYYpreM8AmGIETzACHiagL8AlGAAUzzGEiagKIghFGwQx3wFELoBSMYApm0AOOWgCoYIRUMEMfcNQCWAUjsIIZ/jARtQBcwQivYIZBTEQtAFkwwiyY4RATUQvAFoxwC7Y8k+sD5IIRdMEMjZhY9QG8YIReMAMkpkocgfMRgMEMk5hY9QHCYIRhMMMlJlZ9gDEY4RjMoImJVR+QDEZQBjN0YmLVBzCDEZrBDKCYWPUBz2AEaDDDKCZWfYA0GGEazGCKiVUfUA1GsAZbTUNZBsAGI2SDGVixxLlmwDYYgRtsNYlmGaAbjOANZpDFEqeqAeFgBHGw1SSgZQByMEI5mCEXS5wpBqCDEdLBDblYwg0zB6SDE9LBDblYwg0vB6SDE9LBDblYwg0vB6SDE9LBDbmAUQ8HoIMT0MENuIBRDwecgxPOwQ23WOLKW8A5OOEc3HALXBLKAefghHPwu8mWBQ4wByeYg99NNi5wQDk4oRzcUAtcG8oB5eCEcnBDLXCujQPKwQnl4IZaLGG8zgHl4IRycEMtlpBrckA5OKEc3FCLFWzg4YBycEI5uKEWKzhzcUA5OKEc3FCLFW7nAZSDE8rBDbXApaocUA5OKAdn07UDHFAOTigHZ5PlAxxADk4gB2fTFQQcQA5OGxwMtFjBqZOjFgfa48Cn6wg46nIYtTn07rTCUy9sdCDuZ6DFCk+9qNeBNjsYarHCUy9qd6D9DgZbrGBBAkcdD7TlwWALvGvgqOmBdj0YbrHCwx/1PdDGBwMuVnj4o94H2vzArf/h8Y/6Hwjp4MI2ceEJALAOTlgHN/CC3eEZANAOTmgHN/SC3eExAHAHJ7iDG3zB7rATA97BCe/ghl+wO+zFAHhwAjy4sHtf7MaAeHBCPLhBGOwOL+KAeXDCPPjAPLAjAujBCfTgFnrcYU8E1IMT6sHFZCU7B9CDE+jB5WQxOwfMgxPmweVkPTsHyIMT5MENwmAMDyPAPDhhHlxONxVyAD04gR5cTvcVckA9OKEe3PZOMDyMAffghHtwyz0YHsYAfHACPvjQQ4GHMSAfnJAPbskHw8MYoA9O0Ac3KAMnIThAH5ygD25QBmN4GgDsgxP2wS37YHgaAPCDE/jBLfyAjQIcwA9O4Ae38IPhaQTQD07oB7f0g+FpBOAPTvAHt/gDh3MAf3CCP7iyboinIcA/OOEfXNk0IB7JAIBwAkC47bfgeCQBAsIJAeGGaDAOa6U5QCCcIBCuLf+FtcccMBBOGAg3TINxiSAGBxCEEwjCbf8Fh91nHFAQTigItz0YHGIUDjAIJxiEG6zBJvpJAQfhhINw24vBsScDEsIJCeHaRobYEwEL4YSFcAM3mMCeCGgIJzSEG7zBBPZEwEM44SHc8A0m8JwOgAgnQIQvbAkqntMBEuEEifCFzUvjOR1AEU6gCDeQAzcwcQBFOIEifGHXZTynAyrCCRXhBnMwged0wEU44SLccA7cRcUBF+GEi3DLRcREZzXwQwJGuAUjAo8EQEY4ISN8Yf0QjwTARjhhI9zADibxSAB0hBM6wg3uYF14h14i4COc8BFu+YjEczIAJJwAEj4AEjwSACHhhJBwS0gkHgkAkXCCSLhFJBJ7MmAknDASbhmJxJ4MIAknkIRbSCKxJwJKwgkl4ZaSSOyJAJNwgkm4wR5MYk8EnIQTTsJtw4fCnghACSeghBvwwXAHFgekhBNSwm3jh8JzMkAlnKASvrJl+dgTASvhhJVw2wCisCcCWMIJLOEr24WLPRHQEk5oCV/Zc1CwJwJcwgku4YZ/MIU9EQATToAJNwCE4V4UDogJJ8SEr2yZFvZEwEw4YSbcMBBMLDlgJpwwE2G7QyCxFICZCMJMhO0O0XAkCABNBIEmwraH4P4KAaiJINREGAzCcIOFANxEEG4ihgYROBIEICeCkBNxZzcrcCQIgE4EQSfizp7JA0eCAOxEEHYiDAxhGo4EAeiJIPRE2CYRXKUuAD8RhJ8I2yWCy9QFACiCABRhT4HScCQIQFAEISjC9okssCcChCIIQhH2NKgF9kTAUARhKMKeCLXAngggiiAQRdhToRbYEwFFEYSiCENFcNu5ABRFEIoi7OFQsP5AAIoiCEURw/lQeCQAjCIIRhH2jChcdCwASBEEpAgLUnDVsQAkRRCSIgwZYbhyVQCUIghKERal4NI7AViKICxFcOuHeCQAmCIITBHcnlyARwKgKYLQFMFt8SoeCQCnCIJThMEjDFcSCMBTBOEpgk+XrwrAUwThKYJPl68KwFME4SmC27PK8EgEQEUQoCIsUMHFCAIAFUFPlLJHSsHTFAQ6VIqeKmV5Cq5mEOhgKXqylOUpuJxBoNOlRsdLWTfEIwkeMUXc0PIUDMUFOmaKnjNleQqm4gKdNUUPm7I8BWNxgQ6coidOWZ6CubhAh07RU6csT8FgXKCDp+jJU8IenIc9GR0+RYiKsG0kmO0KwFQEYSpC2gZO7ImAqghCVYSlKpjuCkBVBKEqwlKVFfZEgFUEwSrCYhXMZwXgKoJwFWG5Cga0AnAVQbiKkNNdnAJgFUGwipDTXZwCUBVBqIqQ012cAkAVQaCKMJCEY8AsAFURhKoIZc9wxCMJUBVBqIowkIRjwCwAVRGEqgg1fdaLAFRFEKoiDCThGFALQFUEoSrCQBKOAbUAVEUQqiIMJeEYUAuAVQTBKmLoKsEjEWAVQbCKsG0lGFALgFUEwSrCUBJ8Zo4AVEUQqiJsXwkG3AJQFUGoirCNJRhwC0BVBKEqwnaWYEYsAFURhKoIA0k4ZrQCUBVBqIqwvSWY0QpAVQShKsJAEo4ZrQBURRCqIgwk4ZjRCkBVBKEqwp5yhRmrAFRFEKoiDCTB/TkCQBVBoIowjARX+grAVARhKsKed4UZrwBMRRCmIgwiwadYA6IiCFERBpDgE0sBTxGEp4jF9LmjAKcIglPEYvroUQBTBIEpwrARfIAoQCmCoBRh0Ag+QxSQFEFIijBgBDfYCABSBAEpwnARWCooAEYRBKMIi1FgqaAAFEUQiiLsSVjwvCEBIIogEEVYiIK3VoChCMJQhGUosFROAIQiCEIRhojAAiEBAIogAEUYHgILhATAJ4LgE2FoCCwQEgCeCAJPhIUnOAwD7EQQdiIGdoKfB75H0Imw6ATHMICcCEJOxHL6FEkBwIkg4EQsp9PVAnATQbiJWJ1JVwNsIgg2Eavpw2QEoCaCUBOxmj5MRgBoIgg0Eavpw2QEYCaCMBNhG0zwNgAgE0GQiTAEZGIbAIiJIMREGAAysQ0AwEQQYCIM/5iIoQEvEYSXiNWZZRfgEkFwiVjZZRfHn4CXCMJL5N3ksisBLpEEl8i7yWVXAlgiCSyRdzb0W+KzoMGRzASWSMM+8GHjErASSViJNOgDrvsSkBJJSIm8s3EfbK2VgJRIQkrk3eSFGBJwEkk4iZzuMZGAkkhCSeR0j4kEjEQSRiLP9JhIgEgkQSTyTI+JBIREEkIiDfDgHLboSEBIJCEkkp05DxwAEkkAiWRnjgQHfEQSPiLZ9KnggI5IQkekoR2cw/IPCfCIJHhEWjyCTxYHeEQSPCLZmfPBAR2RhI5IduaIcABHJIEjkk2fEg7QiCRoRPLJ2moJwIgkYETyydpqCbCIJFhE8unjwiWgIpJQEcmnTwyXAIpIAkUknz40XAImIgkTkfZODQ533RIwEUmYiOTTN7dIwEQkYSKS25JWWLwkARSRBIpIC0VwQakEUEQSKCItFMEFpRJAEUmgiLRdJrigVAIqIgkVkQZy4DpACaCIJFBEWiiCK8gkgCKSQBFpoQiuIJMAikgCRaRhHPhgGwmYiCRMRIrpFncJkIgkSESK6RZ3CYiIJEREiukWdwmAiCRARIrpFncJeIgkPESK6RZ3CXCIpJdxyGkuJ9F1HPQ+DmkXYfj76EYOeiWHYRs4gpfoUg56K4dBGziCl+hejtHFHGYHgqdBeDcH8T8DNnACV6LrOej9HHL6diGJbuigV3RYEMJh7lKiWzroNR1y8pIhie7poBd1WBDCYepToss6CAiRFoRwmPqUAIRIAkKkBSEcph4lACGSgBBpQQguqpeAhEhCQqQlIbioXgISIgkJkZaE4KJ6CUiIJCREWhKCi+olICGSkBBpSQguqpeAhEhCQqQlIbioXgISIgkJkfaELVxULwEKkQSFyOGILeyJAIVIgkKkRSG4KF4CFCIJCpEWheCieAlQiCQoRFoUgovaJUAhkqAQaVEILmqXAIVIgkKkRSEC72gBCpEEhUiLQnBRuwQoRBIUIocGExxUARQiCQqRtsEEN9lIwEIkYSHSshCJxwKAIZLAEGlhCL5TRwIYIgkMkfYCEIkjU4BDJMEhcrgEBI8FAEQkASLSXgSCy+olQCKSIBG5sOsyHgsAikgCRaS9EETCHnYJsIgkWEQurCfiu68AGJEEjEgDOiZCUwBGJAEj0pAOjsvyJUAjkqARaVAHx2X5ErARSdiIXNizpnF4D+CIJHBEGtjBcVm+BHREEjoil/bcQezJAI9Igkfk0lYpYE8GgEQSQCKX9gwk7MkAkUiCSOTSRojYkwEkkQSSSAM9OC7Ll4CSSEJJpKEeHJflS4BJJMEk0t4kAmM8QEkkoSTSHsOFq/olwCSSYBJpz+HCVfUScBJJOIm0B3HhqnoJQIkkoETak7hwVb0EpEQSUiItKcFV9RKgEklQibSoBFfVS8BKJGElcjV58LkEqEQSVCItKsFF+RKwEklYibSsBBflSwBLJIEl0sISXJQvAS2RhJbIgZbgcQBwiSS4RFpcgovyJcAlkuASZfgHx0X5CgATRYCJMgSE46J8BZCJIshEWWSygAkXBZCJIshEWWSCi/IVYCaKMBNlIAi+WVYBaKIINFF3kyfwK4BMFEEm6s6WykBmpAA0UQSaKENBMDNSgJooQk3U3eRprApQE0WoiTIUhC/wtYcAmyiCTRSbPgddAWyiCDZRhoJAaKQANFEEmigLTWDCSQFoogg0URaawIBAAWiiCDRRhoLgK7UUoCaKUBNlIAi+QVYBaKIINFFnTuZSAJooAk0Umz6GXwFoogg0UQaC4BtdFYAmikATZe8fwS0pCmATRbCJMhwE33mnADdRhJsoA0JwRKgAOFEEnCg+fSCwAuBEEXCiDAjB2FEBcKIIOFH8jAMCcKIIOFGGg2BqqAA3UYSbKD5N7RTgJopwE2WvIIEFUwpgE0WwiTIUhOOWJAWwiSLYRBkKgu9QUYCaKEJNlDgzAQJoogg0UQaC4FtQFIAmikATdeYeEgWYiSLMRJ25h0QBZKIIMlFn7iFRAJkogkzUmXtIFEAmiiATJc44IEAmiiATZRAIxy1pCjATRZiJMgxkwoEAM1GEmSjLTHBLmwLQRBFooqQNA2GWTAFqogg1UZaa4JY2BbCJIthEWWyyZPAdAG6iCDdRlpssOfQCAE4UASfKgpOlwBoANyTkRBkSMmkC8EOCTpRFJ1MmAEck7ERZdjJlAnBEwk6U7SKZMgF4IqEnytKTKROAJ9K7zi09wX15Ct13Ti88t/Rk4h2gS8/prefqnCeii8/pzeeWnkxpADyR3n5u6QluDVToAvTRDejWE/GKBi9BJ55o6QluDVToInR6E7qlJ7g1UKHL0Olt6Jae4NZAhS5EpzeiW3qCWwMVuhSd0BNl6QluDVSAnihCT5SlJ7g1UAF6ogg9UZae4NZABeiJIvREWXqCWwMVoCeK0BNlbynBywKAJ4rAEzWczgUjG8BOFGEnSk+X8iuAThRBJ8qQEHxXhgLkRBFyovTkqcEKcBNFuInS06cGK4BNFMEmymIT3JmpADZRBJsoi00mkisAmyiCTZTFJri1UwFsogg2URab4NZOBbCJIthEGQqCryJWgJooQk2UpSa4NVQBaqIINVGGgkwEZ4CaKEJNlKUmE/kdQE0UoSbKQBBY06sAM1GEmSjLTHBrqwLMRBFmogwCmdheAGSiCDJRy+n8DAAmigATtTyTnwG8RBFeopZntscAlyiCS5ShHxO7G0BLFKElysCPid0NgCWKwBJl2MfE7gawEkVYibKsBHf2KkBLFKElysAPgTt7FaAlitASZeDHRIYJwBJFYIky7GMiwQBYiSKsRBn0gWdxQEoUISXKgA+BG5MVICWKkBJlwAc+vFwBUKIIKFEWlODGZAVQiSKoRBnyIXBjsgKoRBFUoiwqmQgEACpRBJUoezM77mxWAJUogkrU9NUlCoASRUCJMtwDz6EAkyiCSbShHjBFrgEk0QSS6LvpljoNGIkmjEQb5AFnUA0IiSaERBvggWdQDQCJJoBEG+CBZ1ANAIkmgEQb4oHHvwaERBNCou3NJXD8awBINAEk+m6yoVMDPqIJH9F30w2dGgASTQCJtm0luClfA0CiCSDRBnhA39eAj2jCR7RtK8EBiAaERBNCotlkM7EGgEQTQKLZZDOxBnxEEz6iDe+Y4EsaABJNAIlm05sQDQCJJoBEG+CBRx/gI5rwEW1vLsGjD/ARTfiItnwEjz7ARzThI5pNr74a4BFN8Ijm06uvBnhEEzyi+eTqqwEd0YSOaNtWgkcfoCOa0BFt6Qg+0UIDPKIJHtEGd8CmMg3oiCZ0RBvagbewGtARTeiIPkNHNKAjmtARfYaOaEBHNKEjmtvoD+6fNKAjmtARze30B/cfGuARTfCItpe0wwBaAzyiCR7RBncIfKCHBnxEEz6iDe/A8y/AI5rgES2mezo1wCOa4BEtJns6NaAjmtARLc70dGqARzTBI1pMz3+AjmhCR7Q4M/8BOKIJHNHizPwH4IgmcERbOIK7KjWAI5rAEW1Yx8QECtiIJmxEG9QxMYECNKIJGtGGdOAJFIARTcCItmAEd1VqAEY0ASPaHq6FZyDARTThItpgDoHPw9GAi2jCRbTBHAKfh6MBF9GEi2hpXRBuoDTgIppwEW17SvB5OBpwEU24iJa2tRjufzTgIppwEW0wh8Dn0WjARTThIlrZWRCvg4CLaMJFtLJ5GLwQAC6iCRfRym5D8EIAuIgmXEQruw/BEzngIppwEW0wh8B3fmjARTThItpgDoF7RDXgIppwEW0wh8DdTRpwEU24iFZ2NsTRMOAimnARbTCHwO1JGnARTbiI1rbLHXsi4CKacBFtMIfA7UkacBFNuIjWtl4BeyLgIppwEa1tShB7IuAimnARbTiHwO1JGoARTcCItte34/YkDciIJmREG9IhcHuSBmhEEzSiDeoQuD1JAzaiCRvRBnYI3J6kAR3RhI5oQzsEbk/SAI9ogke0PWILtydpgEc0wSPa0A6B25M0wCOa4BFtaIfA7Uka4BFN8Ihe2OJB7IkAj2iCR/TCFm9hTwR8RBM+og3uELg5SAM+ogkf0YZ3CNwcpAEg0QSQaMM7BL5zQwNAogkg0fZKd9wcpAEi0QSRaEM8BG4O0gCRaIJItEEeAjcHacBINGEk2raV4DY1DSiJJpRE24tLcJOYBphEE0yibVsJbtHSgJNowkn00noiHkwAlGgCSrRtK8ENUhqQEk1IibZtJbhBSgNUogkq0RaV4ItLNEAlmqASbVEJ7pDSAJVogkq0QR+4RUsDVKIJKtEWleAOKw1YiSasRBv4IfDFJxrQEk1oibZ9JbhFSwNaogkt0YZ+CNyipQEu0QSXaItL8M0pGuASTXCJtp0luKJXA1yiCS7R9pp33OOlAS7RBJdoi0twj5cGuEQTXKIN/xC4x0sDYKIJMNGGgAjc46UBMtEEmSzsQVy4x2sBoMmCQJPFnfVEOJYWgJosCDVZ3NnTkOBYWABusiDcZGG5CW7SWgBwsiDgZGHBCW7SWgBysiDkZDGQE+jKC4BOFgSdLCw6wU1aC8BOFoSdLAwMEbjLagHoyYLQk4WhIQJ3WS0APlkQfLKw+AR3WS0APlkQfLKwx3LhLqsFACgLAlAWhocI3GW1AABlQQDKwraY4E3bAiAU97/99e2bavexbA7l5rvdpvztzR/+8pc3P//8sC0Oh/K3w7pYP5Vv3v79zc+V/a9L/tb84ps//P0N66aEP/z9H/94636p/9vb42+Y/9b/6M8/75vqY3EIBPX7w6OkfgcYJ+ljsa02najD531pnvZE9rfuHkX29+pGiXwsD+t6d+j/N1+W8OwU9lnF7f9n3Txi/yD18IcuVjJ/6G/jNX/oj+00f+gPoYrSo8V6SE8POeghnB7M6bFwenCnh3R6aKeHiNKjuG8PTbE+3JfrddH9h+rw2dfH+/xxdhWb7nMdmur+5UA+FvM/looVti3uy20oyNfJfpEYQbs6VKg/R+Mopz8pI1JOU3Zjpap3oU7C1ylumBTbba9T7wd01PWHxZx0k3GDpZNXf3rZ96PlU3V4ql8O66di9xgK7ha/k+BlpNH7KhzJ0h/JS/tUP8FECWvKwfB9cXhqi2b9VH0sN+HblP7bjFTycOjeYv8/VYEwvvRkrYYBdSdfKbPeH9pA6sLzZmXH5SvENfWnUJrwpUUOXDfK1vVLOIesfGfkd6+TFr495Y21xcJNi68VaWQF7q38ofdKcaOX5wnrO/FeJSz8qt1m19Mr+qtaUf0SFY4T7o+TyInq5VB3y0K3QrdkjumL7092qsgJ9LeqbkOlPCl9HjVGyn2x/rXcbX5u1021P/zcO/DnfV2FXuetxfFSX/a78Gv2ubeTfotYSceRFXqGNw7i5uR7uHYpb7Av4l78/X1T7NZPvhTtzUQscnU2q3I4N3pChnDARQMrFx6IYU5miyEY4Jy58GAIZfqDRuMUeKibsi0+VrvHQA9v0LEh9FHSxSkucJJOkaVwccrKKbJwcUrcXHxfHrp16FB3jujrsfBfqo4Uta3vw2nOX20H/Yb3tHAW8MFIpl0MuBr+U39TgjXFxWd9Q779g/s3fQWV/YOIWybvabiy9D/8KtIJu2WLziLMG1/9DRNRcka+3JffnyajRaQzGzF0yl34U27kyzGCwk+oV/7o0m6pciu+GxJqETcP258YLTX+FMzjApP7pvxYjSZz5pndnzgeI6l7d2VT1eF0vvCn87gVq3t121E4vPA3HiJWoUFQ+Cn6ypyTUvwVsvZddLg7HGrgcH4cJ1WcwxmZTThhLP2NXvSLt3LGkZYfqEZu/Nbbeld2U+q+3rVhbL7wx5SIm5+NtEMdLhHe3Mwjo6t1vSmr533dJwaKtv9b8EV9d9WRgVEXxnRby5f1oW4CWZ7jD4uC20K4mZW7hUS7SXel3Vzr1i+3J5dujZHHFWUVtwyA3Xdf0nryMreM9cejDJPHwk3n0a+g/4litzlFKG33NzcltG313+Es7zvUXeynAz8yEuz7ROR+ZRC8LXePBzL7e9/wuPi5rMmde0kicpTanxltsfwVT0n3LeQx2HAzeuSiMfzM6MVo/8VEi+pTaGON/Z2IivbCXtahphOy5L6w18my8yiOipkfAfDosbwP0kLS37DGrajrbuPfbVb7+SpYt719A3M+xCJTHlZm5/cFfXs9gvf2EZFWGnG78tNY2tKXFuklVtpIlL84RkZOVlTd2OzOtnjp46hwVpV3vthI3zNi+7zvSEvJfHGR7vfS9G43kuUv3X3hTIys/psGY0v7KYPI+Ld/WYOLBNs5z3eHZWWYXRYrtwK5BKse/sCda4oFdxOedKuCm4lWK7c8cDcFxn0IT9H6/pcgwvDn7chNo/WRthNWEcv7ml1vfVNOy/jX+VxvqocqlOrv2IeXNLwst9tkbolneunep9toLYR7n26VvXObJrfGaxZvuFOQvkd/0ovccm6Kz7+Q5Ik/dnWkUt2X/bwPpmDprfLKOVjkMjaI2zfdKFt3n9ekkMO8tr+bjQQtm/KheNmGsRD38+OROe1OTrWr+k1n9/47/cLl0Y9vI1eNTbntJqjxfsCPlVlkjGtlkfSwv+/pz5EbHC7SQ4xEOuExP1rmkXuVTdUcPk/yAOHPfpFZu3LXvjRGuaot7tvuPz009bMNDcK53s9TRu6PfeH7bjfT/bdqh2QLX3acE5WGQlHa56+bLou0ctO0w3DMzcVcHBNNbr6OTA2XTdGW5W/rsm2PYfqu2LdPdRjtMX+vwCOjPSMcJgT8ZLHkcRNy2a6Lffl0eN6G79znM4u4LMUpuxaOj4WfVtEumxKZaDsJpYkUf+OsIifSkzSSQfIdI/Y7/NZvdduX+0NTdtvn/672D9WWREA+r17E+U43+W0m0IKf15aRiZpQXA/1uqH2UIUsxQ90ZWR09VA367KbDfodUQ8064IwM3/v4caWcvRbRUbn9ldettu2+BhOZ/42V0XO3kbaWJK/EXEQXLmMuFIuIxs5Cz920X/TRRFPRRssN/6eibnX4GIaF8ow92tsKd2i7gLMpctS8Lj59bHzdg+ThhPPyp94XiuvW19C//FTHpFDsZe2677GoW5s+i9UkPt1GSpu0vdEEmF+3UAkpu+F7ffV7iFMlko/Ul3GuV0vCtOlYEHSwxfXy7ihHYi9/xxOusxfDLhaOdeJf5Oe6G4tDWc25gd2XLs8WmQ6O5DezaGjHLm/EZU6biELhJLP72fEtEs2uby+1PHuf/qB+89NTd+Jv8/SLmQQr/ERUPPiw1au3UbH7Sn1Mm629sWvu/ih2nXhVttF2R/Jr/lhZ+QS7cuGX5P5X/M1LgIWQRYUY7zKN6y0j8X2hdjsz4XxznDfTTRucg3LwPypS0cPOF9e2ylLYKnw57D4t9iDyvBr+EFiJLzr5Yxxih+XS5dU18vo6R+xPCb8aeu16vWbEwNait1mvJHgflArI/N5R9nQs/0tVWRKrxfYzdWjxK+fpVGRRQt9HWJvLn6T/hT9SoGjjADzMwI8/t0BQOK/NLcu8WNGTESL3hSfxylHP2O7jJ6+TMqh3NDtovZ5+V30VHNKYATC/CrYu+hZZtNt0LoAu7A5URol+Xt6HpkI7oVWrYmUDrWLl0Kp/pITmQd+7JMYo8pPP1qS8frhOg3uf125OEZL0R9mavcn/fB14TKay+hv1O/7qO8EceKd8/JoVTuRh26TvzkzvIPKpHhdhyrtUJa/pkZmWDpZ1ZqUsPrhLI/MGvRydk9l0w2Y3eN43vFDQR65hTYirYeHeTpPlooko56sUTbJ9xu9jH5tv7T1DpZt+yv8scgqstgnlNsWD+X2cyjdX1hd7bmM5Kud9HERtb/+8/g41Ag6zZHkc/vLTHwoYWQSSf7UGL8UGEnjGNEfzjx+xjlJI8r5gzd+onnuvu7TeNHziUJkPXYnbASL/bXTZSEciGfquEAP8650pRZ9t98rfhLGUf42OH7+GXML5W8c4ycgI6jPjY2cXPgS+7bEV0icEOhT0VV0tAPK8HxJ0mHHvnHxVSJDOuUXa/ctjLGiPu3KiZ4Nf5Lk8ZNkKJGMHn+ZiXf4UOR4jPufmsc7tRE7nh39r8PjHeckLbTZ/zD8FW5zFAfs9efvV7hNKJKo6c/fr/Qf2BWj/Gk8siqLCiQq+lN5ZBUAlQhepj+jr6JndLtLhQGeCrpOogeOlTgOpPyuHb6KHjT7+pewMtCHpi4JdWxyc+nsY7uZa2njqyNLc2m3yIqBQYdDTfP2PjtjDvcf29xcFcaxoNw1tQlXESBWxxAr+nP97aVourh8tAT7Q0nHe2lTrt236lMXf3spm3D/5I96GZ9thiPJr5ISkeV7nqypiM3fJIvI4jdPLBHGfWHR04cTdiiaxxBNMO3Xikb2bHkSxwNdS19gtA9DYOu7jXQxuY6fk5xQFFP5M7GMj86PvDo0WvlGRw+Xo7AJ7/bTZ/HBflPXYV7Pn9FlfKjfy1kX2z67Aka0D8Dj53Pb3lTuPoavz2+YuIueytuyb21syvZlCyZ07Zf/30VP6K2pz3aJ5m4GqhuSVPKbjMRddBzUdi9093hmQdNByW/0ZDYQ9nAR8ueyyELqkyiUSfObMUVkH2oosa126+3Lpto9Hsrn/ZZWDLKFP7dFVqN1v2DnNOqf/rTG4t+lFYbnXr+BVEQWL/UiezZYN8dismBL6SdIhoVYsOjp7VCjHK8/a+j4uOjlsDYlkqafOfwyfn2K20a5rgHXIMcchmeuR0A4iC9Wx2xKtDafyvLXh6ppYRbbn890fKjWyxzL8nf1kb0qnazPJZoTvc+5iMyfPRUtzDH7NXMispGwlwX3mH77rmBxL6wThnp7mN+fJSLrvfpSj3LTDYF92RyqcNqTQdLRCnAtfcxVmzC3fefSRaeu3VFGtkp3Ogx51OJ+W7qe+PG+1K96FPGygSB/meBxc3An6EyqwC8UE5GtUE7iWL+lv0ZElj07aTCA9ptJRGT9bycQy/IXg8hSvU6W5cKo68jPXTgU63qhXCk5U8ezRwYHFPw4hx3ze3HDp3rsos6+sfe+2mzKoWyTEE3vc6rI1L0V+1RX7RCkBBOQf6iDjjzUwa7KxwExiqOE3+qmI8vSBqHT3U3+Yq+OTWCR3LST3pRFW3YTymMX/bWjnkHux34ycg3sd2+BED9B5fYeLt3rzq9hrracuX27cH0NYuVmqMhWz2rXb52LcJR6S2+kEHecD4oL/VI+EVmNdJJ4eKraUd008wsNRWQnqjkfqa/SHQ/9/vpBr3Ax8tu1xcNDF151gx+Y7ccLkXm8TqCtqexLJbpJ5fGxHDqDQj/z8+mRKdEKHsjiN3tzfuxtj5uWO5Evh3pb7X4NYmC/3TgyYK3a+7J7ibboPlDQ7yzgkfv6zl2GxsmPRbXt191g5Q+4zDBoxLHnNG7prdqhW6Mk/dGeUw5BBI/cmPciYYWCfx5DZJTeyxq9Sv90Jbf2uFbL1bE9z/X1uIZYflyLjnTSpfWUO/pAudenXICu3YEJ+hUau5KK+mHUd+H3X4rIYpSqLbfVY9V9/r7A+HjyyqGe6J70+0VFJN/tfuO3fTdWwzft74PZ6aACV7EcmTGs2od6uwmbAZk/HkQkJq7aJxMNhJ7ql1dH5kadoO5f7Xv3Iizbn0JFZH9cJ5I0OXRLmi8m1n2q5yI8EIut/MEYmUyu/Gg9mMy91+UGgooMr49C6QbXj1wjN6lGlvkIaKFd+fFrbMjYS7SRHRDZXwTn+Uns1/ilm3pt0i3Uzw8EYuOTtq+gCMX4a3/0jG32Iofm5fAUuq1f4idk7Ce1rbr3RT+zPFRhUajfkigiTy+sWgB+mb8+Cxk73LsI9bmmDaL+sFKR1fZG1DiB5Cnlos5h3nctWUwc1xFXZeVqFoQrEZPuf1HsODO6VcPF5tplc3T0AKZ5aLbypyUZOy3ZPd1oIfJ3TyLyrMNO2OfdmsQ13nQyvJfBUpdhYG69YO4UIu5AnnDVcPLYUBu58a3aT2URhGt+koZFer8ZSeMjU3wyGtnRYMckOV6N+zO3iuxz7TudiMf70ZiMPGhhWwdDWfh8dhGJ5zoZz93+sFuPwi2tr4+OrOLvZLX7onMeuw0gAv2ilcii++ei+bVA4WHQmeKGn+O1bhiyY2uUw7RCHnMVblxHelGgSbd+78MVN+hlGcaEm0wYOxZAOQ1dtlfI40bYDZLIGXj4ZmHCwN8VRi5YzxUpSPSX+eOhA463uz8oF5IrN4dqdzCBPhL9yCDh+WV7qPbbak0Lf/2IQ0U2G9P6Sh/BuW445grFhSs/U86FlMt36ch8Gp1y/VS5czEVWf7cy+qic3TKmX/eV2SPQC/NuGu3TD91YrdlM+zRyUjywaKMpJTgsC0/mBuGnSvcYO5cC+72YPK4GXODRYmjRzlHcv2M+lSZERcIWDDZFM8kl+gPj8gyatScw/0cs3J7UPWKV3eipmH06if8IpMwRhypr+lvI/YExQ1DK6gd7eh9qMnE8Wu5P0Si8l46qS7o7409LQiRjBgcM+FXMEZ2oe5enu/LZt99gnE9hb8rUZEN0jYYHtnnY7NIeADCau4PLRmZ7Ku7oV7tylE3hfCF6chGtRC3jEMpvyosMmF6pjTT35jzSC5/wjcj7didjzUic68BwAEi/bR3ZHPmWOSR9fdJyXAn5c8EPDKD1P9AQyZlfwd7XLrjPHG6CMPfm/HIMgcrDbzJIG56jazRwZF+a3xkEHWSRE6b8JOPLjWqjn9w65qO/PQAbPmbBh77RcDsHByyM6xErkpRHQ/uj9xvjU91WATXEbiM+/EPkV0H+6bqwufPv5ajw1T8dhV3aoGr8mTyWC3hduXyeHywi94jk1oux1Bsq4IEBcEJcpFu8zL0qYGD7YMj4+3zbkfMXBzDXDMXc8RUuNS2cCdMysj8STc+N/XzuNdX+NhlEVlTeWbG8+2KzORGT3Z+eXZkJvZYfvRU7cNF1y8XilyMmvK5/ljCegJ+F0CSuNXDyhtVE3B/2RCRx41YWRAC+ouEiDxAsSn3226D/tKJaNp1f6R232FiNu2EaPvvMfJMsE54XxjYNGGdDveLAWVkLVIzOiDE31rJyPYpVzw6jlkCcB3rc1YYObnLL5uQLjmoI7ffTiaNHf0rZXRkAEAPkwgO63JJy0jC1bzs6p07mSecV/xD6CPLq3tpL4e22pT1Q59dDAX6dztEVlf3vYn2mODwrfm0NPKondFRPsGpxcMM7hLFrrSPHZvbHIsUrrlNuMPAZGT2tldg4mgXPzoSr7AHFor7U7iIPJ/KHrhPzxkQ/un/OjKv3HZh5OZlW6IKAX8LF9nmZOuaH+pxhaFf1rqIhPCBtNBWv0JgEUnHrTgTVyLyxf0VT0Tmek8y2wmhPseJ3AhboeNcifAvEtKRhy62E8fPcH8jLCI3sPhaKr+9bnEceUs34GLf5FT7NPejBxGZy29BXzP3j54XkbnL1pZou2OTQy9UvhdGv0IYN/hri4jMcLRPXYD5q8HW5ChSf6GKnVV+rfZDvRTdzvhlHzryUq2+GwGV4XJ/mhKRsX0vDEwC2n/9cRFMLwmVNPomisiDznyqEi5WfmgVuR1r/xZ2E/tZAh151lB7KJrxCcv+blRHni/Uvqz7My5D+usjtUhAM+7bEn7sriLbhnGrhP+aI8sKToLIVVbezBCZMg47LsDmzO9GjaxBATLPbdH8wrZIuH2mT8TPsfLIiPRQtL+aKfs3UsbqZ0AiawF7WfRkb+Gfragjd2e9IOPAJcW5OjgmNm4lcT0/6CoTP1ES2a7ev6rTXRr0xQm/dldHBiGjQ/yC40SPlMflMI6U8HRWpeuNOR76feyWiSyNOdSPj9uJzboftYhIZm3ljVdwv05cROJqK8vGfWgR90tRIoGHFYnXcT+KjEzlm5OL6Kmi/nTLXFilIleCQ1Ps2mLdaxeWZQt/27+I7C87U0bsU5DIwwtGV+H5KQR3NryD3I5by9O9q8cSY9cNcXfEw+5/iVydXnYThyT788QiknaM344fnzCnG3M99SLyU1q5fZ8tbQQOzo+0T7vCKObq/tmxcd6Bb3GsWHbNSjIypLOa7OpP1cOu7MODgrT9+ps8GYlKrdDwugq/bkNHbk1cF+D4Rgd/aXcGD17mUr+ucIq598ddVlgsjg4o3RBcOgc8lpodj0tw/0sk6giVJrcSMH/fwyPrNgaJEzc8+KuLdDfz6cik9iAaXfLgb16O1QSuns9lZ1zhCnOlZ9ytMsIdzC6PS5Ib9+p4W5v7RkofVytXgXCsNXL/WEdmeYhJow/gM7XIModBpEusbPobEpuiPw+/byMOJ77gcGVneNzPuM6WYL7xT/CI7LIbHYPgN+EeC7RcE6PiR0+Pc8ffnrecXJPhJ0B1zDmgf337Zl/tyy7+7Z75y1//8Y//Hwp7ZHo="; \ No newline at end of file +window.searchData = "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"; \ No newline at end of file diff --git a/docs/backend_api/classes/backend_script_entrypoint._internal_.AbstractBeccaEntity.html b/docs/backend_api/classes/Backend_Script_API._internal_.AbstractBeccaEntity.html similarity index 62% rename from docs/backend_api/classes/backend_script_entrypoint._internal_.AbstractBeccaEntity.html rename to docs/backend_api/classes/Backend_Script_API._internal_.AbstractBeccaEntity.html index 58aa36ed39..8c5a31cef7 100644 --- a/docs/backend_api/classes/backend_script_entrypoint._internal_.AbstractBeccaEntity.html +++ b/docs/backend_api/classes/Backend_Script_API._internal_.AbstractBeccaEntity.html @@ -1,5 +1,5 @@ -
AbstractAbstractBase class for all backend entities.
+OptionalblobOptionaldateOptionaldateOptionalisOptionalisOptionalutcProtectedbeccaProtected_getProtected_setProtectedbeforeOptionalopts: {}OptionalisDeleted: booleanAbstractgetProtectedgetMark the entity as (soft) deleted. It will be completely erased later.
+OptionalblobOptionaldateOptionaldateOptionalisOptionalisOptionalutcProtectedbeccaProtected_getProtected_setProtectedbeforeOptionalopts: {}OptionalisDeleted: booleanAbstractgetProtectedgetMark the entity as (soft) deleted. It will be completely erased later.
This is a low-level method, for notes and branches use note.deleteNote() and 'branch.deleteBranch()` instead.
ProtectedputSaves entity - executes SQL, but doesn't commit the transaction on its own
-Optionalopts: {}AbstractupdateProtectedputSaves entity - executes SQL, but doesn't commit the transaction on its own
+Optionalopts: {}AbstractupdateThe class AsyncResource is designed to be extended by the embedder's async
+
The class AsyncResource is designed to be extended by the embedder's async
resources. Using this, users can easily trigger the lifetime events of their
own resources.
The init hook will trigger when an AsyncResource is instantiated.
import { AsyncResource, executionAsyncId } from 'node:async_hooks';
// AsyncResource() is meant to be extended. Instantiating a
// new AsyncResource() also triggers init. If triggerAsyncId is omitted then
// async_hook.executionAsyncId() is used.
const asyncResource = new AsyncResource(
type, { triggerAsyncId: executionAsyncId(), requireManualDestroy: false },
);
// Run a function in the execution context of the resource. This will
// * establish the context of the resource
// * trigger the AsyncHooks before callbacks
// * call the provided function `fn` with the supplied arguments
// * trigger the AsyncHooks after callbacks
// * restore the original execution context
asyncResource.runInAsyncScope(fn, thisArg, ...args);
// Call AsyncHooks destroy callbacks.
asyncResource.emitDestroy();
// Return the unique ID assigned to the AsyncResource instance.
asyncResource.asyncId();
// Return the trigger ID for the AsyncResource instance.
asyncResource.triggerAsyncId();
-AsyncResource() is meant to be extended. Instantiating a new AsyncResource() also triggers init. If triggerAsyncId is omitted then async_hook.executionAsyncId() is used.
The type of async event.
-OptionaltriggerAsyncId: number | AsyncResourceOptionsThe ID of the execution context that created +
OptionaltriggerAsyncId: number | AsyncResourceOptionsThe ID of the execution context that created
this async event (default: executionAsyncId()), or an
AsyncResourceOptions object (since v9.3.0)
The unique asyncId assigned to the resource.
Binds the given function to execute to this AsyncResource's scope.
The function to bind to the current AsyncResource.
Call all destroy hooks. This should only ever be called once. An error will
be thrown if it is called more than once. This must be manually called. If
the resource is left to be collected by the GC then the destroy hooks will
never be called.
A reference to asyncResource.
Call the provided function with the provided arguments in the execution context +
Call the provided function with the provided arguments in the execution context of the async resource. This will establish the context, trigger the AsyncHooks before callbacks, call the function, trigger the AsyncHooks after callbacks, and then restore the original execution context.
-The same triggerAsyncId that is passed to the AsyncResource constructor.
StaticbindBinds the given function to the current execution context.
The function to bind to the current execution context.
diff --git a/docs/backend_api/classes/Backend_Script_API._internal_.Axios.html b/docs/backend_api/classes/Backend_Script_API._internal_.Axios.html new file mode 100644 index 0000000000..f58babc744 --- /dev/null +++ b/docs/backend_api/classes/Backend_Script_API._internal_.Axios.html @@ -0,0 +1,16 @@ +Optionalconfig: AxiosRequestConfig<any>Optionalconfig: AxiosRequestConfig<D>Optionalconfig: AxiosRequestConfig<D>Optionalconfig: AxiosRequestConfig<any>Optionalconfig: AxiosRequestConfig<D>Optionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionalmessage: stringOptionalcode: stringOptionalconfig: InternalAxiosRequestConfig<D>Optionalrequest: anyOptionalresponse: AxiosResponse<T, D>OptionalcauseOptionalcodeOptionalconfigOptionalrequestOptionalresponseOptionalstackOptionalstatusStatic ReadonlyECONNABORTEDStatic ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyETIMEDOUTStatic OptionalprepareOptional override for formatting stack traces
+StaticstackStaticcaptureCreate .stack property on a target object
+OptionalconstructorOpt: FunctionStaticfromOptionalcode: stringOptionalconfig: InternalAxiosRequestConfig<D>Optionalrequest: anyOptionalresponse: AxiosResponse<T, D>OptionalcustomProps: objectOptionalheaders: string | AxiosHeaders | RawAxiosHeadersOptionalmatcher: AxiosHeaderMatcherOptionalmatcher: AxiosHeaderMatcherOptionalmatcher: true | AxiosHeaderParserOptionalparser: RegExpOptionalmatcher: AxiosHeaderMatcherOptionalparser: RegExpOptionalmatcher: AxiosHeaderMatcherOptionalparser: RegExpOptionalmatcher: AxiosHeaderMatcherOptionalparser: RegExpOptionalmatcher: AxiosHeaderMatcherOptionalparser: RegExpOptionalmatcher: AxiosHeaderMatcherOptionalparser: RegExpOptionalmatcher: AxiosHeaderMatcherOptionalmatcher: AxiosHeaderMatcherOptionalmatcher: AxiosHeaderMatcherOptionalmatcher: AxiosHeaderMatcherOptionalmatcher: AxiosHeaderMatcherOptionalmatcher: AxiosHeaderMatcherOptionalmatcher: AxiosHeaderMatcherOptionalmatcher: AxiosHeaderMatcherOptionalheaderName: stringOptionalvalue: AxiosHeaderValueOptionalrewrite: boolean | AxiosHeaderMatcherOptionalheaders: string | AxiosHeaders | RawAxiosHeadersOptionalrewrite: booleanOptionalrewrite: boolean | AxiosHeaderMatcherOptionalrewrite: boolean | AxiosHeaderMatcherOptionalrewrite: boolean | AxiosHeaderMatcherOptionalrewrite: boolean | AxiosHeaderMatcherOptionalrewrite: boolean | AxiosHeaderMatcherOptionalrewrite: boolean | AxiosHeaderMatcherOptionalasStrings: booleanStaticaccessorStaticconcatStaticfromOptionalthing: string | AxiosHeaders | RawAxiosHeadersAttachment represent data related/attached to the note. Conceptually similar to attributes, but intended for +larger amounts of data and generally not accessible to the user.
+OptionalattachmentOptionalblobOptionalcontentoptionally added to the entity
+OptionaldateOptionaldateOptionalisOptionalisOptionalisOptionalnoteeither noteId or revisionId to which this attachment belongs
+OptionalpositionOptionaltypeOptionalutcOptionalutcProtectedbeccaStaticentityStatichashedStaticprimaryProtected_getProtected_setOptionalisDeleted: booleantrue if the note has string content (not binary)
+Mark the entity as (soft) deleted. It will be completely erased later.
+This is a low-level method, for notes and branches use note.deleteNote() and 'branch.deleteBranch()` instead.
ProtectedputSaves entity - executes SQL, but doesn't commit the transaction on its own
+Optionalopts: {}Optionalopts: ContentOptsAttribute is an abstract concept which has two real uses - label (key - value pair) +and relation (representing named relationship between source and target note)
+Optionalrow: AttributeRowOptionalblobOptionaldateOptionaldateOptionalisOptionalisOptionalutcProtectedbeccaStaticentityStatichashedStaticprimaryProtected_getProtected_setOptionalisInheritable: booleanOptionalisDeleted: booleanProtectedgetMark the entity as (soft) deleted. It will be completely erased later.
+This is a low-level method, for notes and branches use note.deleteNote() and 'branch.deleteBranch()` instead.
ProtectedputSaves entity - executes SQL, but doesn't commit the transaction on its own
+Optionalopts: {}Branch represents a relationship between a child note and its parent note. Trilium allows a note to have multiple +parents.
+Note that you should not rely on the branch's identity, since it can change easily with a note's move. +Always check noteId instead.
+OptionalblobOptionalbranchOptionaldateOptionaldateOptionalisOptionalisOptionalutcProtectedbeccaBranch is weak when its existence should not hinder deletion of its note. +As a result, note with only weak branches should be immediately deleted. +An example is shared or bookmarked clones - they are created automatically and exist for technical reasons, +not as user-intended actions. From user perspective, they don't count as real clones and for the purpose +of deletion should not act as a clone.
+root branch will have undefined parent, all other branches have to have a parent note
+StaticentityStatichashedStaticprimaryProtected_getProtected_setOptionalnotePosition: numberDelete a branch. If this is a last note's branch, delete the note as well.
+OptionaldeleteId: stringoptional delete identified
+OptionaltaskContext: TaskContexttrue if note has been deleted, false otherwise
+OptionalisDeleted: booleanProtectedgetMark the entity as (soft) deleted. It will be completely erased later.
+This is a low-level method, for notes and branches use note.deleteNote() and 'branch.deleteBranch()` instead.
ProtectedputSaves entity - executes SQL, but doesn't commit the transaction on its own
+Optionalopts: {}EtapiToken is an entity representing token used to authenticate against Trilium REST API from client applications. +Used by:
+The format user is presented with is "
Optionalrow: EtapiTokenRowOptionalblobOptionaldateOptionaldateOptionaletapiOptionalisOptionalisOptionalutcProtectedbeccaStaticentityStatichashedStaticprimaryProtected_getProtected_setOptionalisDeleted: booleanProtectedgetMark the entity as (soft) deleted. It will be completely erased later.
+This is a low-level method, for notes and branches use note.deleteNote() and 'branch.deleteBranch()` instead.
ProtectedputSaves entity - executes SQL, but doesn't commit the transaction on its own
+Optionalopts: {}Trilium's main entity, which can represent text note, image, code note, file attachment etc.
-Trilium's main entity, which can represent text note, image, code note, file attachment etc.
+Optionalblobsize of the note content, attachment contents and revision contents in bytes
-size of the note content, attachment contents in bytes
-size of the content in bytes
-OptionaldateOptionaldateset during the deletion operation, before it is completed (removed from becca completely).
-OptionalisOptionalisnumber of note revisions for this note
-OptionalutcProtectedbeccaStaticentityStatichashedStaticprimaryOptionaltype: null | stringOptionalname: null | stringProtected_getProtected_setAdds a new attribute to this note. The attribute is saved and returned. +
Optionalblobsize of the note content, attachment contents and revision contents in bytes
+size of the note content, attachment contents in bytes
+size of the content in bytes
+OptionaldateOptionaldateset during the deletion operation, before it is completed (removed from becca completely).
+OptionalisOptionalisnumber of note revisions for this note
+OptionalutcProtectedbeccaStaticentityStatichashedStaticprimaryOptionaltype: null | stringOptionalname: null | stringProtected_getProtected_setAdds a new attribute to this note. The attribute is saved and returned. See addLabel, addRelation for more specific methods.
-attribute type (label / relation)
+attribute type (label / relation)
name of the attribute, not including the leading ~/#
value of the attribute - text for labels, target note ID for relations; optional.
-Adds a new label to this note. The label attribute is saved and returned.
+Adds a new label to this note. The label attribute is saved and returned.
name of the label, not including the leading #
text value of the label; optional
-Adds a new relation to this note. The relation attribute is saved and +
Adds a new relation to this note. The relation attribute is saved and returned.
name of the relation, not including the leading ~
-Some notes are eligible for conversion into an attachment of its parent, note must have these properties:
+Some notes are eligible for conversion into an attachment of its parent, note must have these properties:
Currently, works only for image notes.
In the future, this functionality might get more generic and some of the requirements relaxed.
-null if note is not eligible for conversion
-(Soft) delete a note and all its descendants.
+null if note is not eligible for conversion
+(Soft) delete a note and all its descendants.
optional delete identified
-OptionalisDeleted: booleanGives all possible note paths leading to this note. Paths containing search note are ignored (could form cycles)
+OptionalisDeleted: booleanGives all possible note paths leading to this note. Paths containing search note are ignored (could form cycles)
array of notePaths (each represented by array of noteIds constituting the particular note path)
-attribute type (label, relation, etc.)
+attribute type (label, relation, etc.)
attribute name
-attribute of the given type and name. If there are more such attributes, first is returned. +
attribute of the given type and name. If there are more such attributes, first is returned. Returns null if there's no such attribute belonging to this note.
-Optionalvalue: null | stringBeware that the method must not create a copy of the array, but actually returns its internal array +
Optionalvalue: null | stringBeware that the method must not create a copy of the array, but actually returns its internal array (for performance reasons)
Optionaltype: string(optional) attribute type to filter
Optionalname: string(optional) attribute name to filter
-all note's attributes, including inherited ones
-attribute type (label, relation, etc.)
+all note's attributes, including inherited ones
+attribute type (label, relation, etc.)
attribute name
attribute value of given type and name or null if no such attribute exists.
-Returns a note path considered to be the "best"
+Returns a note path considered to be the "best"
array of noteIds constituting the particular note path
-Returns a note path considered to be the "best"
+Returns a note path considered to be the "best"
serialized note path (e.g. 'root/a1h315/js725h')
-Note content has quite special handling - it's not a separate entity, but a lazily loaded +
Note content has quite special handling - it's not a separate entity, but a lazily loaded part of Note entity with its own sync. Reasons behind this hybrid design has been:
This is used for:
+This is used for:
returns only notes which are templated, does not include their subtrees +
returns only notes which are templated, does not include their subtrees in effect returns notes which are influenced by note's non-inheritable attributes
-valid object or null if the content cannot be parsed as JSON
-Optionalname: stringlabel name to filter
-all note's labels (attributes with type label), including inherited ones
-label name
+valid object or null if the content cannot be parsed as JSON
+Optionalname: stringlabel name to filter
+all note's labels (attributes with type label), including inherited ones
+label name
label value if label exists, null otherwise
-label name to filter
+label name to filter
all note's label values, including inherited ones
-attribute belonging to this specific note (excludes inherited attributes)
+attribute belonging to this specific note (excludes inherited attributes)
This method can be significantly faster than the getAttribute()
-Beware that the method must not create a copy of the array, but actually returns its internal array +
Beware that the method must not create a copy of the array, but actually returns its internal array (for performance reasons)
(optional) attribute type to filter
(optional) attribute name to filter
(optional) attribute value to filter
-note's "owned" attributes - excluding inherited ones
-attribute type (label, relation, etc.)
+note's "owned" attributes - excluding inherited ones
+attribute type (label, relation, etc.)
attribute name
attribute value of given type and name or null if no such attribute exists.
-label name to filter
-all note's labels (attributes with type label), excluding inherited ones
-label name
+label name to filter
+all note's labels (attributes with type label), excluding inherited ones
+label name
label value if label exists, null otherwise
-label name to filter
+label name to filter
all note's label values, excluding inherited ones
-relation name
-relation if it exists, null otherwise
-Optionalname: null | stringrelation name to filter
-all note's relations (attributes with type relation), excluding inherited ones
-relation name
+relation name
+relation if it exists, null otherwise
+Optionalname: null | stringrelation name to filter
+all note's relations (attributes with type relation), excluding inherited ones
+relation name
relation value if relation exists, null otherwise
-relation name
-relation if it exists, null otherwise
-Optionalname: stringrelation name to filter
-all note's relations (attributes with type relation), including inherited ones
-relation name
+relation name
+relation if it exists, null otherwise
+Optionalname: stringrelation name to filter
+all note's relations (attributes with type relation), including inherited ones
+relation name
relation value if relation exists, null otherwise
-JS script environment - either "frontend" or "backend"
-Returns strong (as opposed to weak) parent branches. See isWeak for details.
-includes the subtree root note as well
-label name
+JS script environment - either "frontend" or "backend"
+Returns strong (as opposed to weak) parent branches. See isWeak for details.
+includes the subtree root note as well
+label name
Optionalvalue: stringlabel value
true if label exists (including inherited)
-attribute name
+attribute name
Optionalvalue: stringattribute value
true if note has an attribute with given type and name (excluding inherited)
-label name
+label name
Optionalvalue: stringlabel value
true if label exists (excluding inherited)
-relation name
+relation name
Optionalvalue: stringrelation value
true if relation exists (excluding inherited)
-relation name
+relation name
Optionalvalue: stringrelation value
true if relation exists (including inherited)
-true if the note has string content (not binary)
-true if ancestorNoteId occurs in at least one of the note's paths
-boolean - true if there's no non-hidden path, note is not cloned to the visible tree
-true if this note is HTML
-true if this note is an image
-true if this note is JavaScript (code or attachment)
-true if this note is of application/json content type
-label name
+true if the note has string content (not binary)
+true if ancestorNoteId occurs in at least one of the note's paths
+boolean - true if there's no non-hidden path, note is not cloned to the visible tree
+true if this note is HTML
+true if this note is an image
+true if this note is JavaScript (code or attachment)
+true if this note is of application/json content type
+label name
true if label exists (including inherited) and does not have "false" value.
-true if this note is the root of the note tree. Root note has "root" noteId
-Mark the entity as (soft) deleted. It will be completely erased later.
+true if this note is the root of the note tree. Root note has "root" noteId
+Mark the entity as (soft) deleted. It will be completely erased later.
This is a low-level method, for notes and branches use note.deleteNote() and 'branch.deleteBranch()` instead.
ProtectedputRemoves given attribute name-value pair if it exists.
+ProtectedputRemoves given attribute name-value pair if it exists.
attribute type (label, relation, etc.)
attribute name
Optionalvalue: stringattribute value (optional)
-Remove label name-value pair, if it exists.
+Remove label name-value pair, if it exists.
label name
Optionalvalue: stringlabel value
-Remove the relation name-value pair, if it exists.
+Remove the relation name-value pair, if it exists.
relation name
Optionalvalue: stringrelation value (noteId)
-Saves entity - executes SQL, but doesn't commit the transaction on its own
-Optionalopts: {}choose by which property we detect if to update an existing attachment. +
Saves entity - executes SQL, but doesn't commit the transaction on its own
+Optionalopts: {}choose by which property we detect if to update an existing attachment. Supported values are either 'attachmentId' (default) or 'title'
-Update's given attribute's value or creates it if it doesn't exist
-attribute type (label, relation, etc.)
+Update's given attribute's value or creates it if it doesn't exist
+attribute type (label, relation, etc.)
attribute name
Optionalvalue: stringattribute value (optional)
-Update's given label's value or creates it if it doesn't exist
+Update's given label's value or creates it if it doesn't exist
label name
Optionalvalue: stringlabel value
-Update's given relation's value or creates it if it doesn't exist
+Update's given relation's value or creates it if it doesn't exist
relation name
Optionalvalue: stringrelation value (noteId)
-Based on enabled, the attribute is either set or removed.
-attribute type ('relation', 'label' etc.)
+Based on enabled, the attribute is either set or removed.
+attribute type ('relation', 'label' etc.)
toggle On or Off
attribute name
Optionalvalue: stringattribute value (optional)
-Based on enabled, label is either set or removed.
+Based on enabled, label is either set or removed.
toggle On or Off
label name
Optionalvalue: stringlabel value (optional)
-Based on enabled, relation is either set or removed.
+Based on enabled, relation is either set or removed.
toggle On or Off
relation name
Optionalvalue: stringrelation value (noteId)
-Option represents a name-value pair, either directly configurable by the user or some system property.
+OptionalblobOptionaldateOptionaldateOptionalisOptionalisOptionalutcProtectedbeccaStaticentityStatichashedStaticprimaryProtected_getProtected_setOptionalisDeleted: booleanProtectedgetMark the entity as (soft) deleted. It will be completely erased later.
+This is a low-level method, for notes and branches use note.deleteNote() and 'branch.deleteBranch()` instead.
ProtectedputSaves entity - executes SQL, but doesn't commit the transaction on its own
+Optionalopts: {}Revision represents a snapshot of note's title and content at some point in the past. +It's used for seamless note versioning.
+OptionalblobOptionalcontentOptionalcontentOptionaldateOptionaldateOptionaldateOptionalisOptionalisOptionalrevisionOptionalutcOptionalutcProtectedbeccaStaticentityStatichashedStaticprimaryProtected_getProtected_setRevisions are not soft-deletable, they are immediately hard-deleted (erased).
+OptionalisDeleted: booleanvalid object or null if the content cannot be parsed as JSON
+true if the note has string content (not binary)
+Mark the entity as (soft) deleted. It will be completely erased later.
+This is a low-level method, for notes and branches use note.deleteNote() and 'branch.deleteBranch()` instead.
ProtectedputSaves entity - executes SQL, but doesn't commit the transaction on its own
+Optionalopts: {}Optionalmessage: stringOptionalcode: stringOptionalconfig: InternalAxiosRequestConfig<any>Optionalrequest: anyOptionalresponse: AxiosResponse<T, any>OptionalcauseOptionalcodeOptionalconfigOptionalrequestOptionalresponseOptionalstackOptionalstatusStatic ReadonlyECONNABORTEDStatic ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyETIMEDOUTStatic OptionalprepareOptional override for formatting stack traces
+StaticstackStaticcaptureCreate .stack property on a target object
+OptionalconstructorOpt: FunctionStaticfromOptionalcode: stringOptionalconfig: InternalAxiosRequestConfig<D>Optionalrequest: anyOptionalresponse: AxiosResponse<T, D>OptionalcustomProps: objectIntegrates EventEmitter with AsyncResource for EventEmitters that
+
Integrates EventEmitter with AsyncResource for EventEmitters that
require manual async tracking. Specifically, all events emitted by instances
of events.EventEmitterAsyncResource will run within its async context.
import { EventEmitterAsyncResource, EventEmitter } from 'node:events';
import { notStrictEqual, strictEqual } from 'node:assert';
import { executionAsyncId, triggerAsyncId } from 'node:async_hooks';
// Async tracking tooling will identify this as 'Q'.
const ee1 = new EventEmitterAsyncResource({ name: 'Q' });
// 'foo' listeners will run in the EventEmitters async context.
ee1.on('foo', () => {
strictEqual(executionAsyncId(), ee1.asyncId);
strictEqual(triggerAsyncId(), ee1.triggerAsyncId);
});
const ee2 = new EventEmitter();
// 'foo' listeners on ordinary EventEmitters that do not track async
// context, however, run in the same async context as the emit().
ee2.on('foo', () => {
notStrictEqual(executionAsyncId(), ee2.asyncId);
notStrictEqual(triggerAsyncId(), ee2.triggerAsyncId);
});
Promise.resolve().then(() => {
ee1.emit('foo');
ee2.emit('foo');
});
@@ -7,7 +7,7 @@ of events.EventEmitterAsyncResource will run within its async
The EventEmitterAsyncResource class has the same methods and takes the
same options as EventEmitter and AsyncResource themselves.
EventEmitter and AsyncResource themsel
on
once
setOptionaloptions: EventEmitterAsyncResourceOptionsOnly optional in child class.
-Optionaloptions: EventEmitterAsyncResourceOptionsOnly optional in child class.
+ReadonlyasyncThe unique asyncId assigned to the resource.
ReadonlyasyncThe returned AsyncResource object has an additional eventEmitter property
that provides a reference to this EventEmitterAsyncResource.
ReadonlytriggerThe same triggerAsyncId that is passed to the AsyncResource constructor.
StaticcaptureValue: boolean
Change the default captureRejections option on all new EventEmitter objects.
Static ReadonlycaptureValue: Symbol.for('nodejs.rejection')
Static ReadonlycaptureValue: Symbol.for('nodejs.rejection')
See how to write a custom rejection handler.
StaticdefaultBy default, a maximum of 10 listeners can be registered for any single
+
StaticdefaultBy default, a maximum of 10 listeners can be registered for any single
event. This limit can be changed for individual EventEmitter instances
using the emitter.setMaxListeners(n) method. To change the default
for allEventEmitter instances, the events.defaultMaxListeners property
@@ -75,20 +75,20 @@ the event emitter instance, the event's name and the number of attached
listeners, respectively.
Its name property is set to 'MaxListenersExceededWarning'.
Static ReadonlyerrorThis symbol shall be used to install a listener for only monitoring 'error' events. Listeners installed using this symbol are called before the regular 'error' listeners are called.
Static ReadonlyerrorThis symbol shall be used to install a listener for only monitoring 'error' events. Listeners installed using this symbol are called before the regular 'error' listeners are called.
Installing a listener using this symbol does not change the behavior once an 'error' event is emitted. Therefore, the process will still crash if no
regular 'error' listener is installed.
Synchronously calls each of the listeners registered for the event named eventName, in the order they were registered, passing the supplied arguments
to each.
Returns true if the event had listeners, false otherwise.
import { EventEmitter } from 'node:events';
const myEmitter = new EventEmitter();
// First listener
myEmitter.on('event', function firstListener() {
console.log('Helloooo! first listener');
});
// Second listener
myEmitter.on('event', function secondListener(arg1, arg2) {
console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
});
// Third listener
myEmitter.on('event', function thirdListener(...args) {
const parameters = args.join(', ');
console.log(`event with parameters ${parameters} in third listener`);
});
console.log(myEmitter.listeners('event'));
myEmitter.emit('event', 1, 2, 3, 4, 5);
// Prints:
// [
// [Function: firstListener],
// [Function: secondListener],
// [Function: thirdListener]
// ]
// Helloooo! first listener
// event with parameters 1, 2 in second listener
// event with parameters 1, 2, 3, 4, 5 in third listener
-Call all destroy hooks. This should only ever be called once. An error will
+
Call all destroy hooks. This should only ever be called once. An error will
be thrown if it is called more than once. This must be manually called. If
the resource is left to be collected by the GC then the destroy hooks will
never be called.
Symbols.
Returns the current max listener value for the EventEmitter which is either
-set by emitter.setMaxListeners(n) or defaults to EventEmitter.defaultMaxListeners.
Returns the current max listener value for the EventEmitter which is either
+set by emitter.setMaxListeners(n) or defaults to EventEmitter.defaultMaxListeners.
Returns the number of listeners listening for the event named eventName.
+
Returns the number of listeners listening for the event named eventName.
If listener is provided, it will return how many times the listener is found
in the list of the listeners of the event.
The name of the event being listened for
Optionallistener: FunctionThe event handler function
Returns a copy of the array of listeners for the event named eventName.
Returns a copy of the array of listeners for the event named eventName.
server.on('connection', (stream) => {
console.log('someone connected!');
});
console.log(util.inspect(server.listeners('connection')));
// Prints: [ [Function] ]
Alias for emitter.removeListener().
Adds the listener function to the end of the listeners array for the event
+
Adds the listener function to the end of the listeners array for the event
named eventName. No checks are made to see if the listener has already
been added. Multiple calls passing the same combination of eventName and
listener will result in the listener being added, and called, multiple times.
The name of the event.
The callback function
Adds a one-time listener function for the event named eventName. The
+
Adds a one-time listener function for the event named eventName. The
next time eventName is triggered, this listener is removed and then invoked.
server.once('connection', (stream) => {
console.log('Ah, we have our first user!');
});
@@ -144,7 +144,7 @@ event listener to the beginning of the listeners array.
The name of the event.
The callback function
Adds the listener function to the beginning of the listeners array for the
+
Adds the listener function to the beginning of the listeners array for the
event named eventName. No checks are made to see if the listener has
already been added. Multiple calls passing the same combination of eventName
and listener will result in the listener being added, and called, multiple times.
listener will result in the listener being added,
The name of the event.
The callback function
Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this
+
Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this
listener is removed, and then invoked.
server.prependOnceListener('connection', (stream) => {
console.log('Ah, we have our first user!');
});
@@ -164,19 +164,19 @@ listener is removed, and then invoked.
The name of the event.
The callback function
Returns a copy of the array of listeners for the event named eventName,
+
Returns a copy of the array of listeners for the event named eventName,
including any wrappers (such as those created by .once()).
import { EventEmitter } from 'node:events';
const emitter = new EventEmitter();
emitter.once('log', () => console.log('log once'));
// Returns a new Array with a function `onceWrapper` which has a property
// `listener` which contains the original listener bound above
const listeners = emitter.rawListeners('log');
const logFnWrapper = listeners[0];
// Logs "log once" to the console and does not unbind the `once` event
logFnWrapper.listener();
// Logs "log once" to the console and removes the listener
logFnWrapper();
emitter.on('log', () => console.log('log persistently'));
// Will return a new Array with a single function bound by `.on()` above
const newListeners = emitter.rawListeners('log');
// Logs "log persistently" twice
newListeners[0]();
emitter.emit('log');
Removes all listeners, or those of the specified eventName.
Removes all listeners, or those of the specified eventName.
It is bad practice to remove listeners added elsewhere in the code,
particularly when the EventEmitter instance was created by some other
component or module (e.g. sockets or file streams).
Returns a reference to the EventEmitter, so that calls can be chained.
OptionaleventName: string | symbolRemoves the specified listener from the listener array for the event named eventName.
Removes the specified listener from the listener array for the event named eventName.
const callback = (stream) => {
console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);
@@ -203,13 +203,13 @@ recently added instance. In the example the once('ping') listener i
Returns a reference to the EventEmitter, so that calls can be chained.
By default EventEmitters will print a warning if more than 10 listeners are
+
By default EventEmitters will print a warning if more than 10 listeners are
added for a particular event. This is a useful default that helps finding
memory leaks. The emitter.setMaxListeners() method allows the limit to be
modified for this specific EventEmitter instance. The value can be set to Infinity (or 0) to indicate an unlimited number of listeners.
Returns a reference to the EventEmitter, so that calls can be chained.
StaticaddExperimentalListens once to the abort event on the provided signal.
StaticaddExperimentalListens once to the abort event on the provided signal.
Listening to the abort event on abort signals is unsafe and may
lead to resource leaks since another third party with the signal can
call e.stopImmediatePropagation(). Unfortunately Node.js cannot change
@@ -222,9 +222,9 @@ not prevent the listener from running.
import { addAbortListener } from 'node:events';
function example(signal) {
let disposable;
try {
signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
disposable = addAbortListener(signal, (e) => {
// Do something when signal is aborted.
});
} finally {
disposable?.[Symbol.dispose]();
}
}
-Disposable that removes the abort listener.
Disposable that removes the abort listener.
StaticgetReturns a copy of the array of listeners for the event named eventName.
StaticgetReturns a copy of the array of listeners for the event named eventName.
For EventEmitters this behaves exactly the same as calling .listeners on
the emitter.
For EventTargets this is the only way to get the event listeners for the
@@ -232,8 +232,8 @@ event target. This is useful for debugging and diagnostic purposes.
import { getEventListeners, EventEmitter } from 'node:events';
{
const ee = new EventEmitter();
const listener = () => console.log('Events are fun');
ee.on('foo', listener);
console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
}
{
const et = new EventTarget();
const listener = () => console.log('Events are fun');
et.addEventListener('foo', listener);
console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
}
-StaticgetReturns the currently set max amount of listeners.
+StaticgetReturns the currently set max amount of listeners.
For EventEmitters this behaves exactly the same as calling .getMaxListeners on
the emitter.
For EventTargets this is the only way to get the max event listeners for the
@@ -242,16 +242,16 @@ the max set, the EventTarget will print a warning.
import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
{
const ee = new EventEmitter();
console.log(getMaxListeners(ee)); // 10
setMaxListeners(11, ee);
console.log(getMaxListeners(ee)); // 11
}
{
const et = new EventTarget();
console.log(getMaxListeners(et)); // 10
setMaxListeners(11, et);
console.log(getMaxListeners(et)); // 11
}
-StaticlistenerA class method that returns the number of listeners for the given eventName registered on the given emitter.
StaticlistenerA class method that returns the number of listeners for the given eventName registered on the given emitter.
import { EventEmitter, listenerCount } from 'node:events';
const myEmitter = new EventEmitter();
myEmitter.on('event', () => {});
myEmitter.on('event', () => {});
console.log(listenerCount(myEmitter, 'event'));
// Prints: 2
-The emitter to query
+The emitter to query
The event name
Staticonimport { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
});
for await (const event of on(ee, 'foo')) {
// The execution of this inner block is synchronous and it
// processes one event at a time (even with await). Do not use
// if concurrent execution is required.
console.log(event); // prints ['bar'] [42]
}
// Unreachable here
+Staticonimport { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
});
for await (const event of on(ee, 'foo')) {
// The execution of this inner block is synchronous and it
// processes one event at a time (even with await). Do not use
// if concurrent execution is required.
console.log(event); // prints ['bar'] [42]
}
// Unreachable here
Returns an AsyncIterator that iterates eventName events. It will throw
@@ -266,9 +266,9 @@ composed of the emitted event arguments.
import { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
ee.emit('close');
});
for await (const event of on(ee, 'foo', { close: ['close'] })) {
console.log(event); // prints ['bar'] [42]
}
// the loop will exit after 'close' is emitted
console.log('done'); // prints 'done'
-Optionaloptions: StaticEventEmitterIteratorOptionsAn AsyncIterator that iterates eventName events emitted by the emitter
Optionaloptions: StaticEventEmitterIteratorOptionsAn AsyncIterator that iterates eventName events emitted by the emitter
import { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
});
for await (const event of on(ee, 'foo')) {
// The execution of this inner block is synchronous and it
// processes one event at a time (even with await). Do not use
// if concurrent execution is required.
console.log(event); // prints ['bar'] [42]
}
// Unreachable here
+import { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
});
for await (const event of on(ee, 'foo')) {
// The execution of this inner block is synchronous and it
// processes one event at a time (even with await). Do not use
// if concurrent execution is required.
console.log(event); // prints ['bar'] [42]
}
// Unreachable here
Returns an AsyncIterator that iterates eventName events. It will throw
@@ -283,9 +283,9 @@ composed of the emitted event arguments.
import { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
ee.emit('close');
});
for await (const event of on(ee, 'foo', { close: ['close'] })) {
console.log(event); // prints ['bar'] [42]
}
// the loop will exit after 'close' is emitted
console.log('done'); // prints 'done'
-Optionaloptions: StaticEventEmitterIteratorOptionsAn AsyncIterator that iterates eventName events emitted by the emitter
Optionaloptions: StaticEventEmitterIteratorOptionsAn AsyncIterator that iterates eventName events emitted by the emitter
StaticonceCreates a Promise that is fulfilled when the EventEmitter emits the given
+
StaticonceCreates a Promise that is fulfilled when the EventEmitter emits the given
event or that is rejected if the EventEmitter emits 'error' while waiting.
The Promise will resolve with an array of all the arguments emitted to the
given event.
import { EventEmitter, once } from 'node:events';
const ee = new EventEmitter();
const ac = new AbortController();
async function foo(emitter, event, signal) {
try {
await once(emitter, event, { signal });
console.log('event emitted!');
} catch (error) {
if (error.name === 'AbortError') {
console.error('Waiting for the event was canceled!');
} else {
console.error('There was an error', error.message);
}
}
}
foo(ee, 'foo', ac.signal);
ac.abort(); // Abort waiting for the event
ee.emit('foo'); // Prints: Waiting for the event was canceled!
-Optionaloptions: StaticEventEmitterOptionsCreates a Promise that is fulfilled when the EventEmitter emits the given
+
Optionaloptions: StaticEventEmitterOptionsCreates a Promise that is fulfilled when the EventEmitter emits the given
event or that is rejected if the EventEmitter emits 'error' while waiting.
The Promise will resolve with an array of all the arguments emitted to the
given event.
import { EventEmitter, once } from 'node:events';
const ee = new EventEmitter();
const ac = new AbortController();
async function foo(emitter, event, signal) {
try {
await once(emitter, event, { signal });
console.log('event emitted!');
} catch (error) {
if (error.name === 'AbortError') {
console.error('Waiting for the event was canceled!');
} else {
console.error('There was an error', error.message);
}
}
}
foo(ee, 'foo', ac.signal);
ac.abort(); // Abort waiting for the event
ee.emit('foo'); // Prints: Waiting for the event was canceled!
-Optionaloptions: StaticEventEmitterOptionsStaticsetimport { setMaxListeners, EventEmitter } from 'node:events';
const target = new EventTarget();
const emitter = new EventEmitter();
setMaxListeners(5, target, emitter);
+Optionaloptions: StaticEventEmitterOptionsStaticsetimport { setMaxListeners, EventEmitter } from 'node:events';
const target = new EventTarget();
const emitter = new EventEmitter();
setMaxListeners(5, target, emitter);
Optionaln: numberA non-negative number. The maximum number of listeners per EventTarget event.
Zero or more {EventTarget} or {EventEmitter} instances. If none are specified, n is set as the default max for all newly created {EventTarget} and {EventEmitter}
+
Zero or more {EventTarget} or {EventEmitter} instances. If none are specified, n is set as the default max for all newly created {EventTarget} and {EventEmitter}
objects.
The EventEmitter class is defined and exposed by the node:events module:
The EventEmitter class is defined and exposed by the node:events module:
import { EventEmitter } from 'node:events';
@@ -6,7 +6,7 @@
added and 'removeListener' when existing listeners are removed.
It supports the following option:
'removeListener' when existing listeners are removed.
on
once
setOptionaloptions: EventEmitterOptionsStaticcaptureValue: boolean
+Optionaloptions: EventEmitterOptionsStaticcaptureValue: boolean
Change the default captureRejections option on all new EventEmitter objects.
Static ReadonlycaptureValue: Symbol.for('nodejs.rejection')
name property is set to 'MaxListenersExceededWarning'Installing a listener using this symbol does not change the behavior once an 'error' event is emitted. Therefore, the process will still crash if no
regular 'error' listener is installed.
Optional[captureSynchronously calls each of the listeners registered for the event named eventName, in the order they were registered, passing the supplied arguments
+
Optional[captureSynchronously calls each of the listeners registered for the event named eventName, in the order they were registered, passing the supplied arguments
to each.
Returns true if the event had listeners, false otherwise.
import { EventEmitter } from 'node:events';
const myEmitter = new EventEmitter();
// First listener
myEmitter.on('event', function firstListener() {
console.log('Helloooo! first listener');
});
// Second listener
myEmitter.on('event', function secondListener(arg1, arg2) {
console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
});
// Third listener
myEmitter.on('event', function thirdListener(...args) {
const parameters = args.join(', ');
console.log(`event with parameters ${parameters} in third listener`);
});
console.log(myEmitter.listeners('event'));
myEmitter.emit('event', 1, 2, 3, 4, 5);
// Prints:
// [
// [Function: firstListener],
// [Function: secondListener],
// [Function: thirdListener]
// ]
// Helloooo! first listener
// event with parameters 1, 2 in second listener
// event with parameters 1, 2, 3, 4, 5 in third listener
-Returns an array listing the events for which the emitter has registered
listeners. The values in the array are strings or Symbols.
import { EventEmitter } from 'node:events';
const myEE = new EventEmitter();
myEE.on('foo', () => {});
myEE.on('bar', () => {});
const sym = Symbol('symbol');
myEE.on(sym, () => {});
console.log(myEE.eventNames());
// Prints: [ 'foo', 'bar', Symbol(symbol) ]
-Returns the current max listener value for the EventEmitter which is either
set by emitter.setMaxListeners(n) or defaults to EventEmitter.defaultMaxListeners.
Returns the number of listeners listening for the event named eventName.
+
Returns the number of listeners listening for the event named eventName.
If listener is provided, it will return how many times the listener is found
in the list of the listeners of the event.
Returns a copy of the array of listeners for the event named eventName.
Adds the listener function to the end of the listeners array for the event
named eventName. No checks are made to see if the listener has already
been added. Multiple calls passing the same combination of eventName and
listener will result in the listener being added, and called, multiple times.
import { EventEmitter } from 'node:events';
const myEE = new EventEmitter();
myEE.on('foo', () => console.log('a'));
myEE.prependListener('foo', () => console.log('b'));
myEE.emit('foo');
// Prints:
// b
// a
-Adds a one-time listener function for the event named eventName. The
+
Adds a one-time listener function for the event named eventName. The
next time eventName is triggered, this listener is removed and then invoked.
server.once('connection', (stream) => {
console.log('Ah, we have our first user!');
});
@@ -127,10 +127,10 @@ event listener to the beginning of the listeners array.
import { EventEmitter } from 'node:events';
const myEE = new EventEmitter();
myEE.once('foo', () => console.log('a'));
myEE.prependOnceListener('foo', () => console.log('b'));
myEE.emit('foo');
// Prints:
// b
// a
-Adds the listener function to the beginning of the listeners array for the
+
Adds the listener function to the beginning of the listeners array for the
event named eventName. No checks are made to see if the listener has
already been added. Multiple calls passing the same combination of eventName
and listener will result in the listener being added, and called, multiple times.
listener will result in the listener being added,
Returns a reference to the EventEmitter, so that calls can be chained.
Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this
+
Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this
listener is removed, and then invoked.
server.prependOnceListener('connection', (stream) => {
console.log('Ah, we have our first user!');
});
Returns a reference to the EventEmitter, so that calls can be chained.
Returns a copy of the array of listeners for the event named eventName,
+
Returns a copy of the array of listeners for the event named eventName,
including any wrappers (such as those created by .once()).
import { EventEmitter } from 'node:events';
const emitter = new EventEmitter();
emitter.once('log', () => console.log('log once'));
// Returns a new Array with a function `onceWrapper` which has a property
// `listener` which contains the original listener bound above
const listeners = emitter.rawListeners('log');
const logFnWrapper = listeners[0];
// Logs "log once" to the console and does not unbind the `once` event
logFnWrapper.listener();
// Logs "log once" to the console and removes the listener
logFnWrapper();
emitter.on('log', () => console.log('log persistently'));
// Will return a new Array with a single function bound by `.on()` above
const newListeners = emitter.rawListeners('log');
// Logs "log persistently" twice
newListeners[0]();
emitter.emit('log');
-Removes all listeners, or those of the specified eventName.
It is bad practice to remove listeners added elsewhere in the code,
particularly when the EventEmitter instance was created by some other
component or module (e.g. sockets or file streams).
Returns a reference to the EventEmitter, so that calls can be chained.
Removes the specified listener from the listener array for the event named eventName.
const callback = (stream) => {
console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);
@@ -188,14 +188,14 @@ recently added instance. In the example the once('ping') listener i
Returns a reference to the EventEmitter, so that calls can be chained.
By default EventEmitters will print a warning if more than 10 listeners are
added for a particular event. This is a useful default that helps finding
memory leaks. The emitter.setMaxListeners() method allows the limit to be
modified for this specific EventEmitter instance. The value can be set to Infinity (or 0) to indicate an unlimited number of listeners.
Returns a reference to the EventEmitter, so that calls can be chained.
StaticaddExperimentalListens once to the abort event on the provided signal.
StaticaddExperimentalListens once to the abort event on the provided signal.
Listening to the abort event on abort signals is unsafe and may
lead to resource leaks since another third party with the signal can
call e.stopImmediatePropagation(). Unfortunately Node.js cannot change
@@ -208,9 +208,9 @@ not prevent the listener from running.
import { addAbortListener } from 'node:events';
function example(signal) {
let disposable;
try {
signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
disposable = addAbortListener(signal, (e) => {
// Do something when signal is aborted.
});
} finally {
disposable?.[Symbol.dispose]();
}
}
-Disposable that removes the abort listener.
Disposable that removes the abort listener.
StaticgetReturns a copy of the array of listeners for the event named eventName.
StaticgetReturns a copy of the array of listeners for the event named eventName.
For EventEmitters this behaves exactly the same as calling .listeners on
the emitter.
For EventTargets this is the only way to get the event listeners for the
@@ -218,8 +218,8 @@ event target. This is useful for debugging and diagnostic purposes.
import { getEventListeners, EventEmitter } from 'node:events';
{
const ee = new EventEmitter();
const listener = () => console.log('Events are fun');
ee.on('foo', listener);
console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
}
{
const et = new EventTarget();
const listener = () => console.log('Events are fun');
et.addEventListener('foo', listener);
console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
}
-StaticgetReturns the currently set max amount of listeners.
+StaticgetReturns the currently set max amount of listeners.
For EventEmitters this behaves exactly the same as calling .getMaxListeners on
the emitter.
For EventTargets this is the only way to get the max event listeners for the
@@ -228,16 +228,16 @@ the max set, the EventTarget will print a warning.
import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
{
const ee = new EventEmitter();
console.log(getMaxListeners(ee)); // 10
setMaxListeners(11, ee);
console.log(getMaxListeners(ee)); // 11
}
{
const et = new EventTarget();
console.log(getMaxListeners(et)); // 10
setMaxListeners(11, et);
console.log(getMaxListeners(et)); // 11
}
-StaticlistenerA class method that returns the number of listeners for the given eventName registered on the given emitter.
StaticlistenerA class method that returns the number of listeners for the given eventName registered on the given emitter.
import { EventEmitter, listenerCount } from 'node:events';
const myEmitter = new EventEmitter();
myEmitter.on('event', () => {});
myEmitter.on('event', () => {});
console.log(listenerCount(myEmitter, 'event'));
// Prints: 2
-The emitter to query
+The emitter to query
The event name
Staticonimport { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
});
for await (const event of on(ee, 'foo')) {
// The execution of this inner block is synchronous and it
// processes one event at a time (even with await). Do not use
// if concurrent execution is required.
console.log(event); // prints ['bar'] [42]
}
// Unreachable here
+Staticonimport { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
});
for await (const event of on(ee, 'foo')) {
// The execution of this inner block is synchronous and it
// processes one event at a time (even with await). Do not use
// if concurrent execution is required.
console.log(event); // prints ['bar'] [42]
}
// Unreachable here
Returns an AsyncIterator that iterates eventName events. It will throw
@@ -252,9 +252,9 @@ composed of the emitted event arguments.
import { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
ee.emit('close');
});
for await (const event of on(ee, 'foo', { close: ['close'] })) {
console.log(event); // prints ['bar'] [42]
}
// the loop will exit after 'close' is emitted
console.log('done'); // prints 'done'
-Optionaloptions: StaticEventEmitterIteratorOptionsAn AsyncIterator that iterates eventName events emitted by the emitter
Optionaloptions: StaticEventEmitterIteratorOptionsAn AsyncIterator that iterates eventName events emitted by the emitter
import { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
});
for await (const event of on(ee, 'foo')) {
// The execution of this inner block is synchronous and it
// processes one event at a time (even with await). Do not use
// if concurrent execution is required.
console.log(event); // prints ['bar'] [42]
}
// Unreachable here
+import { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
});
for await (const event of on(ee, 'foo')) {
// The execution of this inner block is synchronous and it
// processes one event at a time (even with await). Do not use
// if concurrent execution is required.
console.log(event); // prints ['bar'] [42]
}
// Unreachable here
Returns an AsyncIterator that iterates eventName events. It will throw
@@ -269,9 +269,9 @@ composed of the emitted event arguments.
import { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
ee.emit('close');
});
for await (const event of on(ee, 'foo', { close: ['close'] })) {
console.log(event); // prints ['bar'] [42]
}
// the loop will exit after 'close' is emitted
console.log('done'); // prints 'done'
-Optionaloptions: StaticEventEmitterIteratorOptionsAn AsyncIterator that iterates eventName events emitted by the emitter
Optionaloptions: StaticEventEmitterIteratorOptionsAn AsyncIterator that iterates eventName events emitted by the emitter
StaticonceCreates a Promise that is fulfilled when the EventEmitter emits the given
+
StaticonceCreates a Promise that is fulfilled when the EventEmitter emits the given
event or that is rejected if the EventEmitter emits 'error' while waiting.
The Promise will resolve with an array of all the arguments emitted to the
given event.
import { EventEmitter, once } from 'node:events';
const ee = new EventEmitter();
const ac = new AbortController();
async function foo(emitter, event, signal) {
try {
await once(emitter, event, { signal });
console.log('event emitted!');
} catch (error) {
if (error.name === 'AbortError') {
console.error('Waiting for the event was canceled!');
} else {
console.error('There was an error', error.message);
}
}
}
foo(ee, 'foo', ac.signal);
ac.abort(); // Abort waiting for the event
ee.emit('foo'); // Prints: Waiting for the event was canceled!
-Optionaloptions: StaticEventEmitterOptionsCreates a Promise that is fulfilled when the EventEmitter emits the given
+
Optionaloptions: StaticEventEmitterOptionsCreates a Promise that is fulfilled when the EventEmitter emits the given
event or that is rejected if the EventEmitter emits 'error' while waiting.
The Promise will resolve with an array of all the arguments emitted to the
given event.
import { EventEmitter, once } from 'node:events';
const ee = new EventEmitter();
const ac = new AbortController();
async function foo(emitter, event, signal) {
try {
await once(emitter, event, { signal });
console.log('event emitted!');
} catch (error) {
if (error.name === 'AbortError') {
console.error('Waiting for the event was canceled!');
} else {
console.error('There was an error', error.message);
}
}
}
foo(ee, 'foo', ac.signal);
ac.abort(); // Abort waiting for the event
ee.emit('foo'); // Prints: Waiting for the event was canceled!
-Optionaloptions: StaticEventEmitterOptionsStaticsetimport { setMaxListeners, EventEmitter } from 'node:events';
const target = new EventTarget();
const emitter = new EventEmitter();
setMaxListeners(5, target, emitter);
+Optionaloptions: StaticEventEmitterOptionsStaticsetimport { setMaxListeners, EventEmitter } from 'node:events';
const target = new EventTarget();
const emitter = new EventEmitter();
setMaxListeners(5, target, emitter);
Optionaln: numberA non-negative number. The maximum number of listeners per EventTarget event.
Zero or more {EventTarget} or {EventEmitter} instances. If none are specified, n is set as the default max for all newly created {EventTarget} and {EventEmitter}
+
Zero or more {EventTarget} or {EventEmitter} instances. If none are specified, n is set as the default max for all newly created {EventTarget} and {EventEmitter}
objects.
Optionalresult: string | Record<string, undefined | string>StaticgetBecca is a backend cache of all notes, branches, and attributes. +There's a similar frontend cache Froca, and share cache Shaca.
+Points from attribute type-name to list of attributes
+Should be called when the set of all non-skeleton notes changes (added/removed)
+Optionaloptions: BuilderOptionsThe EventEmitter class is defined and exposed by the node:events module:
The EventEmitter class is defined and exposed by the node:events module:
import { EventEmitter } from 'node:events';
@@ -6,7 +6,7 @@
added and 'removeListener' when existing listeners are removed.
It supports the following option:
'removeListener' when existing listeners are removed.
on
once
setOptionaloptions: ParserOptionsStaticcaptureValue: boolean
+Optionaloptions: ParserOptionsStaticcaptureValue: boolean
Change the default captureRejections option on all new EventEmitter objects.
Static ReadonlycaptureValue: Symbol.for('nodejs.rejection')
Static ReadonlycaptureValue: Symbol.for('nodejs.rejection')
See how to write a custom rejection handler.
StaticdefaultBy default, a maximum of 10 listeners can be registered for any single
+
StaticdefaultBy default, a maximum of 10 listeners can be registered for any single
event. This limit can be changed for individual EventEmitter instances
using the emitter.setMaxListeners(n) method. To change the default
for allEventEmitter instances, the events.defaultMaxListeners property
@@ -68,42 +68,42 @@ the event emitter instance, the event's name and the number of attached
listeners, respectively.
Its name property is set to 'MaxListenersExceededWarning'.
Static ReadonlyerrorThis symbol shall be used to install a listener for only monitoring 'error' events. Listeners installed using this symbol are called before the regular 'error' listeners are called.
Static ReadonlyerrorThis symbol shall be used to install a listener for only monitoring 'error' events. Listeners installed using this symbol are called before the regular 'error' listeners are called.
Installing a listener using this symbol does not change the behavior once an 'error' event is emitted. Therefore, the process will still crash if no
regular 'error' listener is installed.
Synchronously calls each of the listeners registered for the event named eventName, in the order they were registered, passing the supplied arguments
to each.
Returns true if the event had listeners, false otherwise.
import { EventEmitter } from 'node:events';
const myEmitter = new EventEmitter();
// First listener
myEmitter.on('event', function firstListener() {
console.log('Helloooo! first listener');
});
// Second listener
myEmitter.on('event', function secondListener(arg1, arg2) {
console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
});
// Third listener
myEmitter.on('event', function thirdListener(...args) {
const parameters = args.join(', ');
console.log(`event with parameters ${parameters} in third listener`);
});
console.log(myEmitter.listeners('event'));
myEmitter.emit('event', 1, 2, 3, 4, 5);
// Prints:
// [
// [Function: firstListener],
// [Function: secondListener],
// [Function: thirdListener]
// ]
// Helloooo! first listener
// event with parameters 1, 2 in second listener
// event with parameters 1, 2, 3, 4, 5 in third listener
-Returns an array listing the events for which the emitter has registered +
Returns an array listing the events for which the emitter has registered
listeners. The values in the array are strings or Symbols.
import { EventEmitter } from 'node:events';
const myEE = new EventEmitter();
myEE.on('foo', () => {});
myEE.on('bar', () => {});
const sym = Symbol('symbol');
myEE.on(sym, () => {});
console.log(myEE.eventNames());
// Prints: [ 'foo', 'bar', Symbol(symbol) ]
Returns the current max listener value for the EventEmitter which is either
-set by emitter.setMaxListeners(n) or defaults to EventEmitter.defaultMaxListeners.
Returns the current max listener value for the EventEmitter which is either
+set by emitter.setMaxListeners(n) or defaults to EventEmitter.defaultMaxListeners.
Returns the number of listeners listening for the event named eventName.
+
Returns the number of listeners listening for the event named eventName.
If listener is provided, it will return how many times the listener is found
in the list of the listeners of the event.
The name of the event being listened for
Optionallistener: FunctionThe event handler function
Returns a copy of the array of listeners for the event named eventName.
Returns a copy of the array of listeners for the event named eventName.
server.on('connection', (stream) => {
console.log('someone connected!');
});
console.log(util.inspect(server.listeners('connection')));
// Prints: [ [Function] ]
Alias for emitter.removeListener().
Adds the listener function to the end of the listeners array for the event
+
Adds the listener function to the end of the listeners array for the event
named eventName. No checks are made to see if the listener has already
been added. Multiple calls passing the same combination of eventName and
listener will result in the listener being added, and called, multiple times.
The name of the event.
The callback function
Adds a one-time listener function for the event named eventName. The
+
Adds a one-time listener function for the event named eventName. The
next time eventName is triggered, this listener is removed and then invoked.
server.once('connection', (stream) => {
console.log('Ah, we have our first user!');
});
@@ -133,7 +133,7 @@ event listener to the beginning of the listeners array.
The name of the event.
The callback function
Optionalcb: (error: null | Error, result: any) => voidAdds the listener function to the beginning of the listeners array for the
+
Optionalcb: (error: null | Error, result: any) => voidAdds the listener function to the beginning of the listeners array for the
event named eventName. No checks are made to see if the listener has
already been added. Multiple calls passing the same combination of eventName
and listener will result in the listener being added, and called, multiple times.
listener will result in the listener being added,
The name of the event.
The callback function
Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this
+
Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this
listener is removed, and then invoked.
server.prependOnceListener('connection', (stream) => {
console.log('Ah, we have our first user!');
});
@@ -153,19 +153,19 @@ listener is removed, and then invoked.
The name of the event.
The callback function
Returns a copy of the array of listeners for the event named eventName,
+
Returns a copy of the array of listeners for the event named eventName,
including any wrappers (such as those created by .once()).
import { EventEmitter } from 'node:events';
const emitter = new EventEmitter();
emitter.once('log', () => console.log('log once'));
// Returns a new Array with a function `onceWrapper` which has a property
// `listener` which contains the original listener bound above
const listeners = emitter.rawListeners('log');
const logFnWrapper = listeners[0];
// Logs "log once" to the console and does not unbind the `once` event
logFnWrapper.listener();
// Logs "log once" to the console and removes the listener
logFnWrapper();
emitter.on('log', () => console.log('log persistently'));
// Will return a new Array with a single function bound by `.on()` above
const newListeners = emitter.rawListeners('log');
// Logs "log persistently" twice
newListeners[0]();
emitter.emit('log');
Removes all listeners, or those of the specified eventName.
Removes all listeners, or those of the specified eventName.
It is bad practice to remove listeners added elsewhere in the code,
particularly when the EventEmitter instance was created by some other
component or module (e.g. sockets or file streams).
Returns a reference to the EventEmitter, so that calls can be chained.
OptionaleventName: string | symbolRemoves the specified listener from the listener array for the event named eventName.
Removes the specified listener from the listener array for the event named eventName.
const callback = (stream) => {
console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);
@@ -192,13 +192,13 @@ recently added instance. In the example the once('ping') listener i
Returns a reference to the EventEmitter, so that calls can be chained.
By default EventEmitters will print a warning if more than 10 listeners are
+
By default EventEmitters will print a warning if more than 10 listeners are
added for a particular event. This is a useful default that helps finding
memory leaks. The emitter.setMaxListeners() method allows the limit to be
modified for this specific EventEmitter instance. The value can be set to Infinity (or 0) to indicate an unlimited number of listeners.
Returns a reference to the EventEmitter, so that calls can be chained.
StaticaddExperimentalListens once to the abort event on the provided signal.
StaticaddExperimentalListens once to the abort event on the provided signal.
Listening to the abort event on abort signals is unsafe and may
lead to resource leaks since another third party with the signal can
call e.stopImmediatePropagation(). Unfortunately Node.js cannot change
@@ -211,9 +211,9 @@ not prevent the listener from running.
import { addAbortListener } from 'node:events';
function example(signal) {
let disposable;
try {
signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
disposable = addAbortListener(signal, (e) => {
// Do something when signal is aborted.
});
} finally {
disposable?.[Symbol.dispose]();
}
}
-Disposable that removes the abort listener.
Disposable that removes the abort listener.
StaticgetReturns a copy of the array of listeners for the event named eventName.
StaticgetReturns a copy of the array of listeners for the event named eventName.
For EventEmitters this behaves exactly the same as calling .listeners on
the emitter.
For EventTargets this is the only way to get the event listeners for the
@@ -221,8 +221,8 @@ event target. This is useful for debugging and diagnostic purposes.
import { getEventListeners, EventEmitter } from 'node:events';
{
const ee = new EventEmitter();
const listener = () => console.log('Events are fun');
ee.on('foo', listener);
console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
}
{
const et = new EventTarget();
const listener = () => console.log('Events are fun');
et.addEventListener('foo', listener);
console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
}
-StaticgetReturns the currently set max amount of listeners.
+StaticgetReturns the currently set max amount of listeners.
For EventEmitters this behaves exactly the same as calling .getMaxListeners on
the emitter.
For EventTargets this is the only way to get the max event listeners for the
@@ -231,16 +231,16 @@ the max set, the EventTarget will print a warning.
import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
{
const ee = new EventEmitter();
console.log(getMaxListeners(ee)); // 10
setMaxListeners(11, ee);
console.log(getMaxListeners(ee)); // 11
}
{
const et = new EventTarget();
console.log(getMaxListeners(et)); // 10
setMaxListeners(11, et);
console.log(getMaxListeners(et)); // 11
}
-StaticlistenerA class method that returns the number of listeners for the given eventName registered on the given emitter.
StaticlistenerA class method that returns the number of listeners for the given eventName registered on the given emitter.
import { EventEmitter, listenerCount } from 'node:events';
const myEmitter = new EventEmitter();
myEmitter.on('event', () => {});
myEmitter.on('event', () => {});
console.log(listenerCount(myEmitter, 'event'));
// Prints: 2
-The emitter to query
+The emitter to query
The event name
Staticonimport { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
});
for await (const event of on(ee, 'foo')) {
// The execution of this inner block is synchronous and it
// processes one event at a time (even with await). Do not use
// if concurrent execution is required.
console.log(event); // prints ['bar'] [42]
}
// Unreachable here
+Staticonimport { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
});
for await (const event of on(ee, 'foo')) {
// The execution of this inner block is synchronous and it
// processes one event at a time (even with await). Do not use
// if concurrent execution is required.
console.log(event); // prints ['bar'] [42]
}
// Unreachable here
Returns an AsyncIterator that iterates eventName events. It will throw
@@ -255,9 +255,9 @@ composed of the emitted event arguments.
import { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
ee.emit('close');
});
for await (const event of on(ee, 'foo', { close: ['close'] })) {
console.log(event); // prints ['bar'] [42]
}
// the loop will exit after 'close' is emitted
console.log('done'); // prints 'done'
-Optionaloptions: StaticEventEmitterIteratorOptionsAn AsyncIterator that iterates eventName events emitted by the emitter
Optionaloptions: StaticEventEmitterIteratorOptionsAn AsyncIterator that iterates eventName events emitted by the emitter
import { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
});
for await (const event of on(ee, 'foo')) {
// The execution of this inner block is synchronous and it
// processes one event at a time (even with await). Do not use
// if concurrent execution is required.
console.log(event); // prints ['bar'] [42]
}
// Unreachable here
+import { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
});
for await (const event of on(ee, 'foo')) {
// The execution of this inner block is synchronous and it
// processes one event at a time (even with await). Do not use
// if concurrent execution is required.
console.log(event); // prints ['bar'] [42]
}
// Unreachable here
Returns an AsyncIterator that iterates eventName events. It will throw
@@ -272,9 +272,9 @@ composed of the emitted event arguments.
import { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
ee.emit('close');
});
for await (const event of on(ee, 'foo', { close: ['close'] })) {
console.log(event); // prints ['bar'] [42]
}
// the loop will exit after 'close' is emitted
console.log('done'); // prints 'done'
-Optionaloptions: StaticEventEmitterIteratorOptionsAn AsyncIterator that iterates eventName events emitted by the emitter
Optionaloptions: StaticEventEmitterIteratorOptionsAn AsyncIterator that iterates eventName events emitted by the emitter
StaticonceCreates a Promise that is fulfilled when the EventEmitter emits the given
+
StaticonceCreates a Promise that is fulfilled when the EventEmitter emits the given
event or that is rejected if the EventEmitter emits 'error' while waiting.
The Promise will resolve with an array of all the arguments emitted to the
given event.
import { EventEmitter, once } from 'node:events';
const ee = new EventEmitter();
const ac = new AbortController();
async function foo(emitter, event, signal) {
try {
await once(emitter, event, { signal });
console.log('event emitted!');
} catch (error) {
if (error.name === 'AbortError') {
console.error('Waiting for the event was canceled!');
} else {
console.error('There was an error', error.message);
}
}
}
foo(ee, 'foo', ac.signal);
ac.abort(); // Abort waiting for the event
ee.emit('foo'); // Prints: Waiting for the event was canceled!
-Optionaloptions: StaticEventEmitterOptionsCreates a Promise that is fulfilled when the EventEmitter emits the given
+
Optionaloptions: StaticEventEmitterOptionsCreates a Promise that is fulfilled when the EventEmitter emits the given
event or that is rejected if the EventEmitter emits 'error' while waiting.
The Promise will resolve with an array of all the arguments emitted to the
given event.
import { EventEmitter, once } from 'node:events';
const ee = new EventEmitter();
const ac = new AbortController();
async function foo(emitter, event, signal) {
try {
await once(emitter, event, { signal });
console.log('event emitted!');
} catch (error) {
if (error.name === 'AbortError') {
console.error('Waiting for the event was canceled!');
} else {
console.error('There was an error', error.message);
}
}
}
foo(ee, 'foo', ac.signal);
ac.abort(); // Abort waiting for the event
ee.emit('foo'); // Prints: Waiting for the event was canceled!
-Optionaloptions: StaticEventEmitterOptionsStaticsetimport { setMaxListeners, EventEmitter } from 'node:events';
const target = new EventTarget();
const emitter = new EventEmitter();
setMaxListeners(5, target, emitter);
+Optionaloptions: StaticEventEmitterOptionsStaticsetimport { setMaxListeners, EventEmitter } from 'node:events';
const target = new EventTarget();
const emitter = new EventEmitter();
setMaxListeners(5, target, emitter);
Optionaln: numberA non-negative number. The maximum number of listeners per EventTarget event.
Zero or more {EventTarget} or {EventEmitter} instances. If none are specified, n is set as the default max for all newly created {EventTarget} and {EventEmitter}
+
Zero or more {EventTarget} or {EventEmitter} instances. If none are specified, n is set as the default max for all newly created {EventTarget} and {EventEmitter}
objects.
Optionalconfig: AxiosRequestConfig<any>Optionalconfig: AxiosRequestConfig<D>Optionalconfig: AxiosRequestConfig<D>Optionalconfig: AxiosRequestConfig<any>Optionalconfig: AxiosRequestConfig<D>Optionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionalmessage: stringOptionalcode: stringOptionalconfig: InternalAxiosRequestConfig<D>Optionalrequest: anyOptionalresponse: AxiosResponse<T, D>OptionalcauseOptionalcodeOptionalconfigOptionalrequestOptionalresponseOptionalstackOptionalstatusStatic ReadonlyECONNABORTEDStatic ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyETIMEDOUTStatic OptionalprepareOptional override for formatting stack traces
-StaticstackStaticcaptureCreate .stack property on a target object
-OptionalconstructorOpt: FunctionStaticfromOptionalcode: stringOptionalconfig: InternalAxiosRequestConfig<D>Optionalrequest: anyOptionalresponse: AxiosResponse<T, D>OptionalcustomProps: objectOptionalheaders: string | AxiosHeaders | RawAxiosHeadersOptionalmatcher: AxiosHeaderMatcherOptionalmatcher: AxiosHeaderMatcherOptionalmatcher: true | AxiosHeaderParserOptionalparser: RegExpOptionalmatcher: AxiosHeaderMatcherOptionalparser: RegExpOptionalmatcher: AxiosHeaderMatcherOptionalparser: RegExpOptionalmatcher: AxiosHeaderMatcherOptionalparser: RegExpOptionalmatcher: AxiosHeaderMatcherOptionalparser: RegExpOptionalmatcher: AxiosHeaderMatcherOptionalparser: RegExpOptionalmatcher: AxiosHeaderMatcherOptionalmatcher: AxiosHeaderMatcherOptionalmatcher: AxiosHeaderMatcherOptionalmatcher: AxiosHeaderMatcherOptionalmatcher: AxiosHeaderMatcherOptionalmatcher: AxiosHeaderMatcherOptionalmatcher: AxiosHeaderMatcherOptionalmatcher: AxiosHeaderMatcherOptionalheaderName: stringOptionalvalue: AxiosHeaderValueOptionalrewrite: boolean | AxiosHeaderMatcherOptionalheaders: string | AxiosHeaders | RawAxiosHeadersOptionalrewrite: booleanOptionalrewrite: boolean | AxiosHeaderMatcherOptionalrewrite: boolean | AxiosHeaderMatcherOptionalrewrite: boolean | AxiosHeaderMatcherOptionalrewrite: boolean | AxiosHeaderMatcherOptionalrewrite: boolean | AxiosHeaderMatcherOptionalrewrite: boolean | AxiosHeaderMatcherOptionalasStrings: booleanStaticaccessorStaticconcatStaticfromOptionalthing: string | AxiosHeaders | RawAxiosHeadersAttachment represent data related/attached to the note. Conceptually similar to attributes, but intended for -larger amounts of data and generally not accessible to the user.
-OptionalattachmentOptionalblobOptionalcontentoptionally added to the entity
-OptionaldateOptionaldateOptionalisOptionalisOptionalisOptionalnoteeither noteId or revisionId to which this attachment belongs
-OptionalpositionOptionaltypeOptionalutcOptionalutcProtectedbeccaStaticentityStatichashedStaticprimaryProtected_getProtected_setOptionalisDeleted: booleantrue if the note has string content (not binary)
-Mark the entity as (soft) deleted. It will be completely erased later.
-This is a low-level method, for notes and branches use note.deleteNote() and 'branch.deleteBranch()` instead.
ProtectedputSaves entity - executes SQL, but doesn't commit the transaction on its own
-Optionalopts: {}Optionalopts: ContentOptsAttribute is an abstract concept which has two real uses - label (key - value pair) -and relation (representing named relationship between source and target note)
-Optionalrow: AttributeRowOptionalblobOptionaldateOptionaldateOptionalisOptionalisOptionalutcProtectedbeccaStaticentityStatichashedStaticprimaryProtected_getProtected_setOptionalisInheritable: booleanOptionalisDeleted: booleanProtectedgetMark the entity as (soft) deleted. It will be completely erased later.
-This is a low-level method, for notes and branches use note.deleteNote() and 'branch.deleteBranch()` instead.
ProtectedputSaves entity - executes SQL, but doesn't commit the transaction on its own
-Optionalopts: {}Branch represents a relationship between a child note and its parent note. Trilium allows a note to have multiple -parents.
-Note that you should not rely on the branch's identity, since it can change easily with a note's move. -Always check noteId instead.
-OptionalblobOptionalbranchOptionaldateOptionaldateOptionalisOptionalisOptionalutcProtectedbeccaBranch is weak when its existence should not hinder deletion of its note. -As a result, note with only weak branches should be immediately deleted. -An example is shared or bookmarked clones - they are created automatically and exist for technical reasons, -not as user-intended actions. From user perspective, they don't count as real clones and for the purpose -of deletion should not act as a clone.
-root branch will have undefined parent, all other branches have to have a parent note
-StaticentityStatichashedStaticprimaryProtected_getProtected_setOptionalnotePosition: numberDelete a branch. If this is a last note's branch, delete the note as well.
-OptionaldeleteId: stringoptional delete identified
-OptionaltaskContext: TaskContexttrue if note has been deleted, false otherwise
-OptionalisDeleted: booleanProtectedgetMark the entity as (soft) deleted. It will be completely erased later.
-This is a low-level method, for notes and branches use note.deleteNote() and 'branch.deleteBranch()` instead.
ProtectedputSaves entity - executes SQL, but doesn't commit the transaction on its own
-Optionalopts: {}EtapiToken is an entity representing token used to authenticate against Trilium REST API from client applications. -Used by:
-The format user is presented with is "
Optionalrow: EtapiTokenRowOptionalblobOptionaldateOptionaldateOptionaletapiOptionalisOptionalisOptionalutcProtectedbeccaStaticentityStatichashedStaticprimaryProtected_getProtected_setOptionalisDeleted: booleanProtectedgetMark the entity as (soft) deleted. It will be completely erased later.
-This is a low-level method, for notes and branches use note.deleteNote() and 'branch.deleteBranch()` instead.
ProtectedputSaves entity - executes SQL, but doesn't commit the transaction on its own
-Optionalopts: {}Option represents a name-value pair, either directly configurable by the user or some system property.
-OptionalblobOptionaldateOptionaldateOptionalisOptionalisOptionalutcProtectedbeccaStaticentityStatichashedStaticprimaryProtected_getProtected_setOptionalisDeleted: booleanProtectedgetMark the entity as (soft) deleted. It will be completely erased later.
-This is a low-level method, for notes and branches use note.deleteNote() and 'branch.deleteBranch()` instead.
ProtectedputSaves entity - executes SQL, but doesn't commit the transaction on its own
-Optionalopts: {}Revision represents a snapshot of note's title and content at some point in the past. -It's used for seamless note versioning.
-OptionalblobOptionalcontentOptionalcontentOptionaldateOptionaldateOptionaldateOptionalisOptionalisOptionalrevisionOptionalutcOptionalutcProtectedbeccaStaticentityStatichashedStaticprimaryProtected_getProtected_setRevisions are not soft-deletable, they are immediately hard-deleted (erased).
-OptionalisDeleted: booleanvalid object or null if the content cannot be parsed as JSON
-true if the note has string content (not binary)
-Mark the entity as (soft) deleted. It will be completely erased later.
-This is a low-level method, for notes and branches use note.deleteNote() and 'branch.deleteBranch()` instead.
ProtectedputSaves entity - executes SQL, but doesn't commit the transaction on its own
-Optionalopts: {}Optionalmessage: stringOptionalcode: stringOptionalconfig: InternalAxiosRequestConfig<any>Optionalrequest: anyOptionalresponse: AxiosResponse<T, any>OptionalcauseOptionalcodeOptionalconfigOptionalrequestOptionalresponseOptionalstackOptionalstatusStatic ReadonlyECONNABORTEDStatic ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyERR_Static ReadonlyETIMEDOUTStatic OptionalprepareOptional override for formatting stack traces
-StaticstackStaticcaptureCreate .stack property on a target object
-OptionalconstructorOpt: FunctionStaticfromOptionalcode: stringOptionalconfig: InternalAxiosRequestConfig<D>Optionalrequest: anyOptionalresponse: AxiosResponse<T, D>OptionalcustomProps: objectOptionalresult: string | Record<string, undefined | string>StaticgetBecca is a backend cache of all notes, branches, and attributes. -There's a similar frontend cache Froca, and share cache Shaca.
-Points from attribute type-name to list of attributes
-Should be called when the set of all non-skeleton notes changes (added/removed)
-Optionaloptions: BuilderOptionsOptionaloptions: ParserOptionsOptionaloptions: ParserOptionsThis object contains "at your risk" and "no BC guarantees" objects for advanced use cases.
-Axios library for HTTP requests. See https://axios-http.com for documentation
+This object contains "at your risk" and "no BC guarantees" objects for advanced use cases.
+Axios library for HTTP requests. See https://axios-http.com for documentation
cheerio library for HTML parsing and manipulation. See https://cheerio.js.org for documentation
-Note where the script is currently executing. This comes into play when your script is spread in multiple code +
cheerio library for HTML parsing and manipulation. See https://cheerio.js.org for documentation
+Note where the script is currently executing. This comes into play when your script is spread in multiple code notes, the script starts in "startNote", but then through function calls may jump into another note (currentNote). A similar concept in C would be FILE Don't mix this up with the concept of active note.
-day.js library for date manipulation. See https://day.js.org for documentation
-OptionaloriginEntity whose event triggered this execution
-sql
-OptionalstartNote where the script started executing (entrypoint). +
day.js library for date manipulation. See https://day.js.org for documentation
+OptionaloriginEntity whose event triggered this execution
+sql
+OptionalstartNote where the script started executing (entrypoint). As an analogy, in C this would be the file which contains the main() function of the current process.
-xml2js library for XML parsing. See https://github.com/Leonidas-from-XIV/node-xml2js for documentation
-If the backupName is e.g. "now", then the backup will be written to "backup-now.db" file
+xml2js library for XML parsing. See https://github.com/Leonidas-from-XIV/node-xml2js for documentation
+If the backupName is e.g. "now", then the backup will be written to "backup-now.db" file
resolves once the backup is finished
-Create data note - data in this context means object serializable to JSON. Created note will be of type 'code' and +
Create data note - data in this context means object serializable to JSON. Created note will be of type 'code' and JSON MIME type. See also createNewNote() for more options.
-object contains newly created entities note and branch
-create new note under this parent
-Optionalattributes?: AttributeRow[]Optionaljson?: booleanshould the note be JSON
-object contains newly created entities note and branch
+object contains newly created entities note and branch
+create new note under this parent
+Optionalattributes?: AttributeRow[]Optionaljson?: booleanshould the note be JSON
+object contains newly created entities note and branch
Creates a new launcher to the launchbar. If the launcher (id) already exists, it will be updated.
+Creates a new launcher to the launchbar. If the launcher (id) already exists, it will be updated.
name of the boxicon to be used (e.g. "bx-time")
id of the launcher, only alphanumeric at least 6 characters long
if true, will be created in the "Visible launchers", otherwise in "Available launchers"
@@ -89,76 +89,76 @@ JSON MIME type. See also createNewNote() for more options.OptionalwidgetNoteId?: stringfor type "customWidget"
-Create text note. See also createNewNote() for more options.
-If there's a branch between note and parent note, remove it. Otherwise, do nothing.
-Create text note. See also createNewNote() for more options.
+If there's a branch between note and parent note, remove it. Otherwise, do nothing.
+If there's no branch between note and parent note, create one. Otherwise, do nothing. Returns the new or existing branch.
if branch is created between note and parent note, set this prefix
-escaped string
-Returns day note for given date. If such note doesn't exist, it is created.
+escaped string
+Instance name identifies particular Trilium instance. It can be useful for scripts if some action needs to happen on only one specific instance.
-Returns month note for given date. If such a note doesn't exist, it is created.
+Retrieves notes with given label name & value
attribute name
Optionalvalue: stringattribute value
-Retrieves first note with given label name & value
+Retrieves first note with given label name & value
attribute name
Optionalvalue: stringattribute value
-Returns quarter note for given date. If such a note doesn't exist, it is created.
+Returns root note of the calendar.
-Returns root note of the calendar.
+Log given message to trilium logs and log pane in UI
-Log given message to trilium logs and log pane in UI
+Return randomly generated string of given length. This random string generation is NOT cryptographically secure.
of the string
random string
-Executes given anonymous function on the frontend(s). +
Executes given anonymous function on the frontend(s). Internally, this serializes the anonymous function into string and sends it to frontend(s) via WebSocket. Note that there can be multiple connected frontend instances (e.g. in different tabs). In such case, all instances execute the given function.
script to be executed on the frontend
list of parameters to the anonymous function to be sent to frontend
no return value is provided.
-Sync process can make data intermittently inconsistent. Scripts which require strong data consistency +
Sync process can make data intermittently inconsistent. Scripts which require strong data consistency can use this function to wait for a possible sync process to finish and prevent new sync process from starting while it is running.
Because this is an async process, the inner callback doesn't have automatic transaction handling, so in case you need to make some DB changes, you need to surround your call with api.transactional(...)
function to be executed while sync process is not running
resolves once the callback is finished (callback is awaited)
-This is a powerful search method - you can search by attributes and their values, e.g.: +
This is a powerful search method - you can search by attributes and their values, e.g.: "#dateModified =* MONTH AND #log". See https://triliumnext.github.io/Docs/Wiki/search.html for full documentation for all options
-This is a powerful search method - you can search by attributes and their values, e.g.: +
This is a powerful search method - you can search by attributes and their values, e.g.: "#dateModified =* MONTH AND #log". See https://triliumnext.github.io/Docs/Wiki/search.html for full documentation for all options
-This method finds note by its noteId and prefix and either sets it to the given parentNoteId +
This method finds note by its noteId and prefix and either sets it to the given parentNoteId or removes the branch (if parentNoteId is not given).
This method looks similar to toggleNoteInParent() but differs because we're looking up branch by prefix.
Sort child notes of a given note.
OptionalfoldersFirst?: booleanOptionalreverse?: booleanOptionalsortBy?: string'title', 'dateCreated', 'dateModified' or a label name See https://triliumnext.github.io/Docs/Wiki/sorting.html for details.
-Based on the value, either create or remove branch between note and parent note.
+Based on the value, either create or remove branch between note and parent note.
true if we want the branch to exist, false if we want it gone
if branch is created between note and parent note, set this prefix
-This functions wraps code which is supposed to be running in transaction. If transaction already +
This functions wraps code which is supposed to be running in transaction. If transaction already exists, then we'll use that transaction.
result of func callback
-OptionalrequireDisables automatic emitDestroy when the object is garbage collected.
This usually does not need to be set (even if emitDestroy is called
diff --git a/docs/backend_api/interfaces/backend_script_entrypoint._internal_.AttachmentOpts.html b/docs/backend_api/interfaces/Backend_Script_API._internal_.AttachmentOpts.html
similarity index 77%
rename from docs/backend_api/interfaces/backend_script_entrypoint._internal_.AttachmentOpts.html
rename to docs/backend_api/interfaces/Backend_Script_API._internal_.AttachmentOpts.html
index 52f2260cf9..847b1b238e 100644
--- a/docs/backend_api/interfaces/backend_script_entrypoint._internal_.AttachmentOpts.html
+++ b/docs/backend_api/interfaces/Backend_Script_API._internal_.AttachmentOpts.html
@@ -1,2 +1,2 @@
-
OptionalattachmentOptionalblobOptionalcontentOptionalcontentOptionaldateOptionaldeleteOptionalisOptionalisOptionalownerOptionalpositionOptionalutcOptionalutcConstruct a type with the properties of T except for those in type K.
+OptionaladapterOptionalallowOptionalauthOptionalbaseURLOptionalbeforeOptionalcancelOptionaldataOptionaldecompressOptionalenvOptionalfamilyOptionalfetchOptionalformOptionalhttpOptionalhttpsOptionalinsecureHTTPParserOptionallookupOptionalmaxOptionalmaxOptionalmaxOptionalmaxOptionalmethodOptionalonOptionalonOptionalparamsOptionalparamsOptionalproxyOptionalresponseOptionalresponseOptionalsignalOptionalsocketOptionaltimeoutOptionaltimeoutOptionaltransformOptionaltransformOptionaltransitionalOptionaltransportOptionalurlOptionalvalidateOptionalwithOptionalwithXSRFTokenOptionalxsrfOptionalxsrfOptionalconfig: AxiosRequestConfig<D>Optionalconfig: AxiosRequestConfig<D>Optionalconfig: AxiosRequestConfig<D>Optionalconfig: AxiosRequestConfig<any>Optionalconfig: AxiosRequestConfig<D>Optionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>OptionaladapterOptionalallowOptionalauthOptionalbaseURLOptionalbeforeOptionalcancelOptionaldataOptionaldecompressOptionalenvOptionalfamilyOptionalfetchOptionalformOptionalheadersOptionalhttpOptionalhttpsOptionalinsecureHTTPParserOptionallookupOptionalmaxOptionalmaxOptionalmaxOptionalmaxOptionalmethodOptionalonOptionalonOptionalparamsOptionalparamsOptionalproxyOptionalresponseOptionalresponseOptionalsignalOptionalsocketOptionaltimeoutOptionaltimeoutOptionaltransformOptionaltransformOptionaltransitionalOptionaltransportOptionalurlOptionalvalidateOptionalwithOptionalwithXSRFTokenOptionalxsrfOptionalxsrfOptionalrequestOptionalstatus: numberOptionalconfig: AxiosRequestConfig<D>ReadonlyVERSIONOptionalconfig: CreateAxiosDefaults<any>Optionalconfig: AxiosRequestConfig<D>Optionalconfig: AxiosRequestConfig<D>Optionalconfig: AxiosRequestConfig<any>Optionalconfig: AxiosRequestConfig<D>Optionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>Optionaldata: DOptionalconfig: AxiosRequestConfig<D>OptionalbranchOptionalisOptionalisOptionalnoteOptionalprefixOptionalutcOptionalbranchOptionalisOptionalisOptionalnoteOptionalprefixOptionalutcOptionalmessage: stringOptionalconfig: AxiosRequestConfig<any>Optionalrequest: anyOptionalselector: stringOptionalpropertyName: stringOptionalselector: stringOptionalselector: stringOptionalfilter: stringOptionalselector: stringOptionalselector: stringOptionalselector: stringOptionalfilter: stringOptionalselector: stringOptionalselector: stringOptionalfilter: stringOptionalselector: stringOptionalselector: stringOptionalend: numberOptionaltoggleSwitch: booleanOptionaltoggleSwitch: booleanOptionaloptions: CheerioParserOptionsOptionaloptions: CheerioParserOptionsOptionaloptions: CheerioParserOptionsOptionaloptions: CheerioParserOptionsOptionalcontext: null | DocumentOptionalkeepScripts: booleanOptionalforcewill also save this BAttachment entity
+OptionalforceOptionalforcewill also save this BNote entity
+Construct a type with the properties of T except for those in type K.
+OptionaladapterOptionalallowOptionalauthOptionalbaseURLOptionalbeforeOptionalcancelOptionaldataOptionaldecompressOptionalenvOptionalfamilyOptionalfetchOptionalformOptionalheadersOptionalhttpOptionalhttpsOptionalinsecureHTTPParserOptionallookupOptionalmaxOptionalmaxOptionalmaxOptionalmaxOptionalmethodOptionalonOptionalonOptionalparamsOptionalparamsOptionalproxyOptionalresponseOptionalresponseOptionalsignalOptionalsocketOptionaltimeoutOptionaltimeoutOptionaltransformOptionaltransformOptionaltransitionalOptionaltransportOptionalurlOptionalvalidateOptionalwithOptionalwithXSRFTokenOptionalxsrfOptionalxsrfOptionaloptions: ParamsSerializerOptionsOptionalcaptureEnables automatic capturing of promise rejection.
+OptionalnameThe type of async event, this is required when instantiating EventEmitterAsyncResource
+directly rather than as a child class.
OptionalrequireDisables automatic emitDestroy when the object is garbage collected.
+This usually does not need to be set (even if emitDestroy is called
+manually), unless the resource's asyncId is retrieved and the
+sensitive API's emitDestroy is called with it.
OptionaltriggerThe ID of the execution context that created this async event.
+The class AsyncResource is designed to be extended by the embedder's async
+resources. Using this, users can easily trigger the lifetime events of their
+own resources.
The init hook will trigger when an AsyncResource is instantiated.
The following is an overview of the AsyncResource API.
import { AsyncResource, executionAsyncId } from 'node:async_hooks';
// AsyncResource() is meant to be extended. Instantiating a
// new AsyncResource() also triggers init. If triggerAsyncId is omitted then
// async_hook.executionAsyncId() is used.
const asyncResource = new AsyncResource(
type, { triggerAsyncId: executionAsyncId(), requireManualDestroy: false },
);
// Run a function in the execution context of the resource. This will
// * establish the context of the resource
// * trigger the AsyncHooks before callbacks
// * call the provided function `fn` with the supplied arguments
// * trigger the AsyncHooks after callbacks
// * restore the original execution context
asyncResource.runInAsyncScope(fn, thisArg, ...args);
// Call AsyncHooks destroy callbacks.
asyncResource.emitDestroy();
// Return the unique ID assigned to the AsyncResource instance.
asyncResource.asyncId();
// Return the trigger ID for the AsyncResource instance.
asyncResource.triggerAsyncId();
+
+
+The unique asyncId assigned to the resource.
Call all destroy hooks. This should only ever be called once. An error will
+be thrown if it is called more than once. This must be manually called. If
+the resource is left to be collected by the GC then the destroy hooks will
+never be called.
A reference to asyncResource.
Call the provided function with the provided arguments in the execution context +of the async resource. This will establish the context, trigger the AsyncHooks +before callbacks, call the function, trigger the AsyncHooks after callbacks, and +then restore the original execution context.
+The same triggerAsyncId that is passed to the AsyncResource constructor.
Optional[captureSynchronously calls each of the listeners registered for the event named eventName, in the order they were registered, passing the supplied arguments
+
Optional[captureSynchronously calls each of the listeners registered for the event named eventName, in the order they were registered, passing the supplied arguments
to each.
Returns true if the event had listeners, false otherwise.
import { EventEmitter } from 'node:events';
const myEmitter = new EventEmitter();
// First listener
myEmitter.on('event', function firstListener() {
console.log('Helloooo! first listener');
});
// Second listener
myEmitter.on('event', function secondListener(arg1, arg2) {
console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
});
// Third listener
myEmitter.on('event', function thirdListener(...args) {
const parameters = args.join(', ');
console.log(`event with parameters ${parameters} in third listener`);
});
console.log(myEmitter.listeners('event'));
myEmitter.emit('event', 1, 2, 3, 4, 5);
// Prints:
// [
// [Function: firstListener],
// [Function: secondListener],
// [Function: thirdListener]
// ]
// Helloooo! first listener
// event with parameters 1, 2 in second listener
// event with parameters 1, 2, 3, 4, 5 in third listener
-Returns an array listing the events for which the emitter has registered
listeners. The values in the array are strings or Symbols.
import { EventEmitter } from 'node:events';
const myEE = new EventEmitter();
myEE.on('foo', () => {});
myEE.on('bar', () => {});
const sym = Symbol('symbol');
myEE.on(sym, () => {});
console.log(myEE.eventNames());
// Prints: [ 'foo', 'bar', Symbol(symbol) ]
-Returns the current max listener value for the EventEmitter which is either
-set by emitter.setMaxListeners(n) or defaults to EventEmitter.defaultMaxListeners.
emitter.setMaxListeners(n) or defaults to EventEmitter.defaultMaxListeners.
Returns the number of listeners listening for the event named eventName.
+
Returns the number of listeners listening for the event named eventName.
If listener is provided, it will return how many times the listener is found
in the list of the listeners of the event.
Returns a copy of the array of listeners for the event named eventName.
Adds the listener function to the end of the listeners array for the event
named eventName. No checks are made to see if the listener has already
been added. Multiple calls passing the same combination of eventName and
listener will result in the listener being added, and called, multiple times.
import { EventEmitter } from 'node:events';
const myEE = new EventEmitter();
myEE.on('foo', () => console.log('a'));
myEE.prependListener('foo', () => console.log('b'));
myEE.emit('foo');
// Prints:
// b
// a
-Adds a one-time listener function for the event named eventName. The
+
Adds a one-time listener function for the event named eventName. The
next time eventName is triggered, this listener is removed and then invoked.
server.once('connection', (stream) => {
console.log('Ah, we have our first user!');
});
@@ -72,10 +72,10 @@ event listener to the beginning of the listeners array.
import { EventEmitter } from 'node:events';
const myEE = new EventEmitter();
myEE.once('foo', () => console.log('a'));
myEE.prependOnceListener('foo', () => console.log('b'));
myEE.emit('foo');
// Prints:
// b
// a
-Adds the listener function to the beginning of the listeners array for the
+
Adds the listener function to the beginning of the listeners array for the
event named eventName. No checks are made to see if the listener has
already been added. Multiple calls passing the same combination of eventName
and listener will result in the listener being added, and called, multiple times.
listener will result in the listener being added,
Returns a reference to the EventEmitter, so that calls can be chained.
Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this
+
Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this
listener is removed, and then invoked.
server.prependOnceListener('connection', (stream) => {
console.log('Ah, we have our first user!');
});
Returns a reference to the EventEmitter, so that calls can be chained.
Returns a copy of the array of listeners for the event named eventName,
+
Returns a copy of the array of listeners for the event named eventName,
including any wrappers (such as those created by .once()).
import { EventEmitter } from 'node:events';
const emitter = new EventEmitter();
emitter.once('log', () => console.log('log once'));
// Returns a new Array with a function `onceWrapper` which has a property
// `listener` which contains the original listener bound above
const listeners = emitter.rawListeners('log');
const logFnWrapper = listeners[0];
// Logs "log once" to the console and does not unbind the `once` event
logFnWrapper.listener();
// Logs "log once" to the console and removes the listener
logFnWrapper();
emitter.on('log', () => console.log('log persistently'));
// Will return a new Array with a single function bound by `.on()` above
const newListeners = emitter.rawListeners('log');
// Logs "log persistently" twice
newListeners[0]();
emitter.emit('log');
-Removes all listeners, or those of the specified eventName.
It is bad practice to remove listeners added elsewhere in the code,
particularly when the EventEmitter instance was created by some other
component or module (e.g. sockets or file streams).
Returns a reference to the EventEmitter, so that calls can be chained.
Removes the specified listener from the listener array for the event named eventName.
const callback = (stream) => {
console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);
@@ -133,7 +133,7 @@ recently added instance. In the example the once('ping') listener i
Returns a reference to the EventEmitter, so that calls can be chained.
By default EventEmitters will print a warning if more than 10 listeners are
added for a particular event. This is a useful default that helps finding
memory leaks. The emitter.setMaxListeners() method allows the limit to be
diff --git a/docs/backend_api/interfaces/backend_script_entrypoint._internal_.EventEmitterOptions.html b/docs/backend_api/interfaces/Backend_Script_API._internal_.EventEmitterOptions.html
similarity index 75%
rename from docs/backend_api/interfaces/backend_script_entrypoint._internal_.EventEmitterOptions.html
rename to docs/backend_api/interfaces/Backend_Script_API._internal_.EventEmitterOptions.html
index 22549f04bc..cadfeb0da0 100644
--- a/docs/backend_api/interfaces/backend_script_entrypoint._internal_.EventEmitterOptions.html
+++ b/docs/backend_api/interfaces/Backend_Script_API._internal_.EventEmitterOptions.html
@@ -1,3 +1,3 @@
-
OptionallinkOptionaloptionsOptionalpurgeOptionalunlinkOptionaladapterOptionalallowOptionalauthOptionalbaseURLOptionalbeforeOptionalcancelOptionaldataOptionaldecompressOptionalenvOptionalfamilyOptionalfetchOptionalformOptionalhttpOptionalhttpsOptionalinsecureHTTPParserOptionallookupOptionalmaxOptionalmaxOptionalmaxOptionalmaxOptionalmethodOptionalonOptionalonOptionalparamsOptionalparamsOptionalproxyOptionalresponseOptionalresponseOptionalsignalOptionalsocketOptionaltimeoutOptionaltimeoutOptionaltransformOptionaltransformOptionaltransitionalOptionaltransportOptionalurlOptionalvalidateOptionalwithOptionalwithXSRFTokenOptionalxsrfOptionalxsrfDescribes a user-defined Iterator that is also iterable.
+OptionalreturnOptionalvalue: TReturnOptionalthrowOptionale: anyOptionalreturnOptionalvalue: TReturnOptionalthrowOptionale: anyOptionalbranchOptionaldateOptionalignoreOptionalisdefault is false
-Optionalisdefault is false
-Optionalmimedefault value is derived from default mimes for type
-Optionalnoteoptionally can force specific noteId
-Optionalnotedefault is the last existing notePosition in a parent + 10
-Optionalprefixdefault is empty string
-OptionaltargetOptionaltemplatetext, code, file, image, search, book, relationMap, canvas, webView
-OptionalutcOptionalbranchOptionaldateOptionalignoreOptionalisdefault is false
+Optionalisdefault is false
+Optionalmimedefault value is derived from default mimes for type
+Optionalnoteoptionally can force specific noteId
+Optionalnotedefault is the last existing notePosition in a parent + 10
+Optionalprefixdefault is empty string
+OptionaltargetOptionaltemplatetext, code, file, image, search, book, relationMap, canvas, webView
+OptionalutcOptionalblobOptionaldateOptionaldateOptionalisOptionaltitleOptionalutcOptionalblobOptionaldateOptionaldateOptionalisOptionaltitleOptionalutcOptionalcontentThe initial value of Object.prototype.constructor is the standard built-in Object constructor.
-Determines whether an object has a property with the specified name.
-A property name.
+Determines whether an object has a property with the specified name.
+A property name.
Determines whether an object exists in another object's prototype chain.
Another object whose prototype chain is to be checked.
-Determines whether a specified property is enumerable.
-A property name.
+Determines whether a specified property is enumerable.
+A property name.
Returns a date converted to a string using the current locale.
Returns a string representation of an object.
Returns the primitive value of the specified object.
diff --git a/docs/backend_api/interfaces/backend_script_entrypoint._internal_.OptionRow.html b/docs/backend_api/interfaces/Backend_Script_API._internal_.OptionRow.html similarity index 93% rename from docs/backend_api/interfaces/backend_script_entrypoint._internal_.OptionRow.html rename to docs/backend_api/interfaces/Backend_Script_API._internal_.OptionRow.html index 05612c86a5..60900b23f5 100644 --- a/docs/backend_api/interfaces/backend_script_entrypoint._internal_.OptionRow.html +++ b/docs/backend_api/interfaces/Backend_Script_API._internal_.OptionRow.html @@ -1,11 +1,11 @@ -Database representation of an option.
+Database representation of an option.
Options are key-value pairs that are used to store information such as user preferences (for example the current theme, sync server information), but also information about the state of the application).
-The name of the option.
+OptionalutcThe value of the option.
+OptionalblobOptionalcontentOptionaldateOptionalisOptionalrevisionOptionalutcOptionalblobOptionalcontentOptionaldateOptionalisOptionalrevisionOptionalutcOptionaloptions: CheerioParserOptionsOptionaloptions: CheerioParserOptionsOptionalcontext: null | DocumentOptionalkeepScripts: booleanAn instance of the frontend api available globally.
+An instance of the frontend api available globally.
pause() and resume()<
OptionalsignalCan be used to cancel awaiting events.
-OptionaldataOptionalendOptionalstart
Base class for all backend entities.
-