-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.html
174 lines (164 loc) · 22.6 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
<!DOCTYPE html><html class="default" lang="en"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>@mr-mkz/axon</title><meta name="description" content="Documentation for @mr-mkz/axon"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="assets/style.css"/><link rel="stylesheet" href="assets/highlight.css"/><script defer src="assets/main.js"></script><script async src="assets/icons.js" id="tsd-icons-script"></script><script async src="assets/search.js" id="tsd-search-script"></script><script async src="assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base="."><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="index.html" class="title">@mr-mkz/axon</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><h2>@mr-mkz/axon</h2></div><div class="tsd-panel tsd-typography"><a id="md:axonjs" class="tsd-anchor"></a><h1 class="tsd-anchor-link">Axon.js<a href="#md:axonjs" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h1><p><strong>like the brain's powerful neural pathways, simple yet strong.</strong></p>
<p>Axon is a backend library who tries to be simple and powerfull.</p>
<p>Currently Axon is 2X faster than Express. :D please checkout <a href="media/README.md">Axon Benchmarks</a></p>
<p><a href="https://t.me/axonjs" target="_blank" class="external">Axon telegram channel</a></p>
<p>Latest change:</p>
<ul>
<li>Https support added to AxonCore. <a href="https://github.com/MR-MKZ/AxonJs/issues/17" target="_blank" class="external">#17</a></li>
<li>Plugin manager system added to core. (Document will update soon - 2024/10/24)</li>
</ul>
<a id="md:installation" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Installation<a href="#md:installation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>Install Axon.js with npm</p>
<pre><code class="bash"><span class="hl-0"> </span><span class="hl-1">npm</span><span class="hl-0"> </span><span class="hl-2">install</span><span class="hl-0"> </span><span class="hl-2">@mr-mkz/axon</span>
</code><button type="button">Copy</button></pre>
<a id="md:benchmarks" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Benchmarks<a href="#md:benchmarks" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>You can checkout Axon benchmarks document and results from below link.</p>
<p><a href="media/README.md">Axon Benchmarks</a></p>
<a id="md:badges" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Badges<a href="#md:badges" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p align="center">
<a href="#">
<img alt="GitHub Actions Workflow Status" src="https://img.shields.io/github/actions/workflow/status/mr-mkz/axonjs/npm-publish.yml">
</a>
<a href="https://www.npmjs.com/package/@mr-mkz/axon">
<img alt="NPM Downloads" src="https://img.shields.io/npm/dy/%40mr-mkz%2Faxon?label=NPM%20Downloads&color=%235304db">
</a>
</p>
<p align="center">
<a href="#">
<img alt="GitHub Issues or Pull Requests" src="https://img.shields.io/github/issues/mr-mkz/axonjs?color=%23be04db">
</a>
<a href="#">
<img alt="npm bundle size" src="https://img.shields.io/bundlephobia/min/%40mr-mkz%2Faxon">
</a>
<a href="https://www.npmjs.com/package/@mr-mkz/axon">
<img alt="NPM Version" src="https://img.shields.io/npm/v/%40mr-mkz%2Faxon?label=NPM%20release&color=%2304dba9">
</a>
</p>
<a id="md:features" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Features<a href="#md:features" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><ul>
<li>Simple routing system</li>
<li>Support methods: GET, POST, PUT, PATCH, DELETE, OPTIONS.</li>
<li>Flexible routing system. (You can define routes in another files and then add them to core)</li>
<li>Default core logger</li>
<li>Configurable core</li>
<li>Plugin manager (You can create your own plugins and use them in other projects)</li>
<li>Controllers and Middlewares</li>
<li>Default cors configuration method</li>
<li>Support https server</li>
</ul>
<p><strong>More features soon...</strong></p>
<a id="md:roadmap-still-thinking" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Roadmap (still thinking)<a href="#md:roadmap-still-thinking" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><ul>
<li>Support controllers better than now.</li>
<li>Some changes in response structure.</li>
<li>Response meta generator.</li>
<li>Auto error detector (maybe)</li>
<li>Default schemas.</li>
<li>Default database connection methods.</li>
</ul>
<a id="md:documentation" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Documentation<a href="#md:documentation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>Currently Axon has a main core and a router class which you can make instance from router class every where you want and then gave the router instance to core to load routes.</p>
<p>More complete examples:</p>
<ul>
<li><a href="media/index.ts">Typescript Example</a></li>
<li><a href="media/index.js">Javascript Example</a></li>
</ul>
<a id="md:router" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Router<a href="#md:router" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Router is stil under constructing and it's not a stable version yet but currently it support this methods:</p>
<ul>
<li>GET</li>
<li>POST</li>
<li>PUT</li>
<li>PATCH</li>
<li>DELETE</li>
<li>OPTIONS</li>
</ul>
<p>You can access and create routes with just a few steps.</p>
<ol>
<li>creating a variable with a optional name and put <code>Router()</code> function in it.</li>
<li>define your routes with methods which you want and controller.
<ul>
<li>
<pre><code class="js"><span class="hl-0"> </span><span class="hl-3">const</span><span class="hl-0"> </span><span class="hl-4">router</span><span class="hl-0"> = </span><span class="hl-1">Router</span><span class="hl-0">()</span><br/><br/><span class="hl-0"> </span><span class="hl-5">router</span><span class="hl-0">.</span><span class="hl-1">get</span><span class="hl-0">(</span><span class="hl-5">path</span><span class="hl-0">, </span><span class="hl-1">controller</span><span class="hl-0">(</span><span class="hl-5">req</span><span class="hl-0">, </span><span class="hl-5">res</span><span class="hl-0">))</span>
</code><button type="button">Copy</button></pre>
</li>
</ul>
</li>
<li>load your routes in core with <code>loadRoute()</code> function;
<ul>
<li>
<pre><code class="js"><span class="hl-0"> </span><span class="hl-3">const</span><span class="hl-0"> </span><span class="hl-4">core</span><span class="hl-0"> = </span><span class="hl-1">Axon</span><span class="hl-0">(); </span><span class="hl-6">// easier and newer method</span><br/><span class="hl-0"> </span><span class="hl-6">// or</span><br/><span class="hl-0"> </span><span class="hl-6">// const core = new AxonCore();</span><br/><br/><span class="hl-0"> </span><span class="hl-5">core</span><span class="hl-0">.</span><span class="hl-1">loadRoute</span><span class="hl-0">(</span><span class="hl-5">router</span><span class="hl-0">)</span>
</code><button type="button">Copy</button></pre>
</li>
</ul>
</li>
<li>Done, you created your routes successfully :D</li>
</ol>
<a id="md:controller" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Controller<a href="#md:controller" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>you have to pass your controller to your route, compute and do your jobs in controller and when you want to response to user (each response, error and success) you must return res with some options which example and description for each option is below.</p>
<pre><code class="js"><span class="hl-5">res</span><span class="hl-0">.{</span><span class="hl-5">option</span><span class="hl-0">}</span>
</code><button type="button">Copy</button></pre>
<p>Options:</p>
<ul>
<li>status: This option must set to get access to other options. (you can use each option just once)</li>
<li>message: This option will set the response message for example response message of status 200 is OK.</li>
<li>setHeader: You can set header with this option and also you can use this option many times.</li>
<li>body: This option will end request and send response to user so you must use this as last option</li>
</ul>
<p>Example:</p>
<pre><code class="js"><span class="hl-3">const</span><span class="hl-0"> </span><span class="hl-1">controller</span><span class="hl-0"> = </span><span class="hl-3">async</span><span class="hl-0"> (</span><span class="hl-5">req</span><span class="hl-0">, </span><span class="hl-5">res</span><span class="hl-0">) </span><span class="hl-3">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-7">return</span><span class="hl-0"> </span><span class="hl-5">res</span><span class="hl-0">.</span><span class="hl-1">status</span><span class="hl-0">(</span><span class="hl-8">200</span><span class="hl-0">).</span><span class="hl-1">body</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-5">message:</span><span class="hl-0"> </span><span class="hl-2">"Hello, World"</span><br/><span class="hl-0"> })</span><br/><span class="hl-0">}</span>
</code><button type="button">Copy</button></pre>
<a id="md:middleware" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Middleware<a href="#md:middleware" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>middleware is a function which runs before running controller for validations or some actions like this and you can use it in two ways.</p>
<ol>
<li>adding a middleware for special route
<ul>
<li>Example:<pre><code class="js"><span class="hl-0"> </span><span class="hl-5">router</span><span class="hl-0">.</span><span class="hl-1">get</span><span class="hl-0">(</span><span class="hl-2">'/'</span><span class="hl-0">, </span><span class="hl-5">controller</span><span class="hl-0">).</span><span class="hl-1">middleware</span><span class="hl-0">(</span><span class="hl-3">async</span><span class="hl-0"> (</span><span class="hl-5">req</span><span class="hl-0">, </span><span class="hl-5">res</span><span class="hl-0">, </span><span class="hl-5">next</span><span class="hl-0">) </span><span class="hl-3">=></span><span class="hl-0"> </span><span class="hl-1">next</span><span class="hl-0">());</span>
</code><button type="button">Copy</button></pre>
you can also use multiple middlewares for a route by repeating middleware function and middlewares will run in order.</li>
</ul>
</li>
<li>loading middleware as a global middleware in Axon core.
<ul>
<li>Example:<pre><code class="js"><span class="hl-0"> </span><span class="hl-5">core</span><span class="hl-0">.</span><span class="hl-1">globalMiddleware</span><span class="hl-0">(</span><span class="hl-3">async</span><span class="hl-0"> (</span><span class="hl-5">req</span><span class="hl-0">, </span><span class="hl-5">res</span><span class="hl-0">, </span><span class="hl-5">next</span><span class="hl-0">) </span><span class="hl-3">=></span><span class="hl-0"> </span><span class="hl-1">next</span><span class="hl-0">());</span>
</code><button type="button">Copy</button></pre>
you can also use multiple middlewares in this way by adding middleware functions into an array (suggested method) or repeating this line of code.</li>
</ul>
</li>
</ol>
<a id="md:types" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Types<a href="#md:types" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>AxonJs has some types which can help you in developing your applications for auto suggestions of your code editor.</p>
<p><strong>Types detect automatically in Typescript but you need to set types for IDE suggestions in Javascript (<a href="./examples/index.js"><em>Javascript Example</em></a>).</strong></p>
<ul>
<li><code>AxonCoreConfig</code>: Type of core config object for configuration Axon core as you want.</li>
<li><code>AxonResponseMessage</code>: Type of core config option RESPONSE_MESSAGES.</li>
<li><code>AxonCorsConfig</code>: Type of core config option CORS.</li>
<li><code>AxonHttpsConfig</code>: Type of core config option HTTPS.</li>
<li><code>Request</code>: Type of controller request param. (IncomingMessage)</li>
<li><code>Response</code>: Type of controller response param. (ServerResponse)</li>
<li><code>Headers</code>: Type of response headers. (OutgoingHeaders)</li>
<li><code>nextFn</code>: Type of next function param in middleware.</li>
<li><code>Controller</code>: Type of controller function.</li>
<li><code>Middleware</code>: Type of middleware function.</li>
</ul>
<a id="md:axon-core-config" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Axon Core config<a href="#md:axon-core-config" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>you can config Axon core with <code>loadConfig</code> method.
if you want to have ide suggestions for core config use AxonCoreConfig type.</p>
<p>Usage:</p>
<pre><code class="js"><span class="hl-5">core</span><span class="hl-0">.</span><span class="hl-1">loadConfig</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-5">LOGGER:</span><span class="hl-0"> </span><span class="hl-3">false</span><br/><span class="hl-0">})</span>
</code><button type="button">Copy</button></pre>
<p>Configs:</p>
<ul>
<li><code>DEBUG</code>: boolean to set debug mode of core. (default false)</li>
<li><code>LOGGER</code>: boolean to set core logger on or off. (default true)</li>
<li><code>LOGGER_VERBOSE</code>: boolean to set core logger in verbose mode. (default false)</li>
<li><code>RESPONSE_MESSAGES</code>: object to change default value of some core responses. (type: AxonResponseMessage)</li>
<li><code>CORS</code>: object to change core cors settings. (type: AxonCorsConfig)</li>
<li><code>HTTPS</code>: object to config server for https. (type: AxonHttpsConfig)</li>
</ul>
<a id="md:running-server" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Running server<a href="#md:running-server" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p><code>listen</code> method runs your webserver.</p>
<p><strong>If you want to run your server on https, you have to set key and cert file in HTTPS config of core to run https server automatically by core</strong></p>
<pre><code class="js"><span class="hl-5">core</span><span class="hl-0">.</span><span class="hl-1">loadConfig</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-5">HTTPS:</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-5">key:</span><span class="hl-0"> </span><span class="hl-5">fs</span><span class="hl-0">.</span><span class="hl-1">readFileSync</span><span class="hl-0">(</span><span class="hl-5">path</span><span class="hl-0">.</span><span class="hl-1">join</span><span class="hl-0">(</span><span class="hl-2">"server.key"</span><span class="hl-0">)),</span><br/><span class="hl-0"> </span><span class="hl-5">cert:</span><span class="hl-0"> </span><span class="hl-5">fs</span><span class="hl-0">.</span><span class="hl-1">readFileSync</span><span class="hl-0">(</span><span class="hl-5">path</span><span class="hl-0">.</span><span class="hl-1">join</span><span class="hl-0">(</span><span class="hl-2">"server.crt"</span><span class="hl-0">))</span><br/><span class="hl-0"> }</span><br/><span class="hl-0">})</span>
</code><button type="button">Copy</button></pre>
<p><strong><code>core.listen()</code> has some default values</strong></p>
<ol>
<li>host: default value of host in 127.0.0.1</li>
<li>port: default value of port is 8000</li>
<li>callback: if you don't set callback function, core will log running message automatically if logger be on in core config.(logger is on in default config)</li>
</ol>
<pre><code class="js"><span class="hl-5">core</span><span class="hl-0">.</span><span class="hl-1">listen</span><span class="hl-0">(</span><span class="hl-2">"0.0.0.0"</span><span class="hl-0">, </span><span class="hl-8">80</span><span class="hl-0">, () </span><span class="hl-3">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-5">console</span><span class="hl-0">.</span><span class="hl-1">log</span><span class="hl-0">(</span><span class="hl-2">"server is running on port 80"</span><span class="hl-0">)</span><br/><span class="hl-0">});</span>
</code><button type="button">Copy</button></pre>
<a id="md:contributing" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Contributing<a href="#md:contributing" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>Contributions are always welcome!</p>
<a id="md:authors" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Authors<a href="#md:authors" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><ul>
<li><a href="https://www.github.com/Mr-MKZ" target="_blank" class="external">@Mr-MKZ</a></li>
</ul>
</div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="assets/icons.svg#icon-chevronDown"></use></svg>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#md:axonjs"><span>Axon.js</span></a><ul><li><a href="#md:installation"><span>Installation</span></a></li><li><a href="#md:benchmarks"><span>Benchmarks</span></a></li><li><a href="#md:badges"><span>Badges</span></a></li><li><a href="#md:features"><span>Features</span></a></li><li><a href="#md:roadmap-still-thinking"><span>Roadmap (still thinking)</span></a></li><li><a href="#md:documentation"><span>Documentation</span></a></li><li><ul><li><a href="#md:router"><span>Router</span></a></li><li><a href="#md:controller"><span>Controller</span></a></li><li><a href="#md:middleware"><span>Middleware</span></a></li><li><a href="#md:types"><span>Types</span></a></li><li><a href="#md:axon-core-config"><span>Axon <wbr/>Core config</span></a></li><li><a href="#md:running-server"><span>Running server</span></a></li></ul></li><li><a href="#md:contributing"><span>Contributing</span></a></li><li><a href="#md:authors"><span>Authors</span></a></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="modules.html" class="current"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="assets/icons.svg#icon-1"></use></svg><span>@mr-mkz/axon</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base="."><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>