From f81ec14da729000eff3bcddaaa7a08d9e3491f53 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Sat, 1 Jul 2023 19:04:21 +0200 Subject: [PATCH] Initial Commit --- .gitignore | 1 + .vitepress/.gitignore | 1 + .vitepress/config.ts | 77 ++ .vitepress/theme/custom.css | 12 + .vitepress/theme/index.ts | 5 + docs/api/clients.md | 8 + docs/api/messages.md | 62 ++ docs/api/redis-channels.md | 38 + docs/architecture/benchmark.md | 71 ++ docs/architecture/index.md | 43 ++ docs/architecture/live.png | Bin 0 -> 19961 bytes docs/architecture/overview.jpg | Bin 0 -> 67117 bytes docs/architecture/replay.png | Bin 0 -> 24138 bytes docs/configuration.md | 41 ++ docs/index.md | 11 + docs/installation/debian.md | 68 ++ docs/installation/index.md | 53 ++ index.md | 13 + package-lock.json | 1265 ++++++++++++++++++++++++++++++++ package.json | 10 + public/icons/redis.svg | 2 + 21 files changed, 1781 insertions(+) create mode 100644 .gitignore create mode 100644 .vitepress/.gitignore create mode 100644 .vitepress/config.ts create mode 100644 .vitepress/theme/custom.css create mode 100644 .vitepress/theme/index.ts create mode 100644 docs/api/clients.md create mode 100644 docs/api/messages.md create mode 100644 docs/api/redis-channels.md create mode 100644 docs/architecture/benchmark.md create mode 100644 docs/architecture/index.md create mode 100644 docs/architecture/live.png create mode 100644 docs/architecture/overview.jpg create mode 100644 docs/architecture/replay.png create mode 100644 docs/configuration.md create mode 100644 docs/index.md create mode 100644 docs/installation/debian.md create mode 100644 docs/installation/index.md create mode 100644 index.md create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/icons/redis.svg diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..40b878d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ \ No newline at end of file diff --git a/.vitepress/.gitignore b/.vitepress/.gitignore new file mode 100644 index 0000000..6e25fa8 --- /dev/null +++ b/.vitepress/.gitignore @@ -0,0 +1 @@ +cache/ \ No newline at end of file diff --git a/.vitepress/config.ts b/.vitepress/config.ts new file mode 100644 index 0000000..55311ba --- /dev/null +++ b/.vitepress/config.ts @@ -0,0 +1,77 @@ +import { defineConfig } from 'vitepress' + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: "Thalos", + description: "A VitePress Site", + cleanUrls: true, + themeConfig: { + search: { + provider: 'local' + }, + + // https://vitepress.dev/reference/default-theme-config + nav: [ + { text: 'Home', link: '/' }, + { text: 'Documentation', link: '/docs/' } + ], + + sidebar: [ + { + text: "Getting Started", + collapsed: true, + items: [ + { + text: 'Installation', + link: '/docs/installation/', + collapsed: true, + items: [ + { + text: "Package Managers", + items: [ + { text: "Ubuntu/Debian", link: '/docs/installation/debian' }, + ] + }, + { text: "Bundled binaries", link: '/docs/installation/#bundled-binaries' }, + { text: "Compiling from source", link: '/docs/installation/#compiling-from-source' }, + ] + }, + { + text: 'Configuration', + link: '/docs/configuration' + } + ] + }, + { + text: 'Architecture', + collapsed: true, + items: [ + { text: 'Overview', link: '/docs/architecture/' }, + { text: 'Benchmark', link: '/docs/architecture/benchmark' } + ] + }, + { + text: 'API', + collapsed: true, + items: [ + { text: 'Messages', link: '/docs/api/messages' }, + { text: 'Channels', link: '/docs/api/redis-channels' }, + { text: 'Clients', link: '/docs/api/clients' } + ], + } + ], + + socialLinks: [ + { icon: 'github', link: 'https://github.com/eosswedenorg/thalos' } + ], + footer: { + message: 'Released under the MIT License.', + copyright: 'Copyright © 2023 Sw/eden' + } + }, + + markdown: { + lineNumbers: true + } + +}) diff --git a/.vitepress/theme/custom.css b/.vitepress/theme/custom.css new file mode 100644 index 0000000..25545ba --- /dev/null +++ b/.vitepress/theme/custom.css @@ -0,0 +1,12 @@ +:root { + --vp-c-bg: #fcfcfc; + --vp-c-brand: #bc544b; + --vp-c-brand-light: #ca5d53; + --vp-c-brand-lighter: #e7695e; + --vp-c-brand-dark: #8d413a; + --vp-c-brand-darker: #7e3933; +} + +.dark { + --vp-c-bg: #1e1e20; +} \ No newline at end of file diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts new file mode 100644 index 0000000..f7e4fa4 --- /dev/null +++ b/.vitepress/theme/index.ts @@ -0,0 +1,5 @@ +import DefaultTheme from 'vitepress/theme' + +import './custom.css' + +export default DefaultTheme; diff --git a/docs/api/clients.md b/docs/api/clients.md new file mode 100644 index 0000000..68edd9d --- /dev/null +++ b/docs/api/clients.md @@ -0,0 +1,8 @@ +# Clients + +List of officially supported client libraries + +| Name | Language | +| ------------------------------------------------------------------- | -------- | +| [thalos-go](https://github.com/eosswedenorg/thalos/tree/master/api) | Golang | +| [thalos-nodejs](https://github.com/eosswedenorg/thalos-nodejs) | Nodejs | \ No newline at end of file diff --git a/docs/api/messages.md b/docs/api/messages.md new file mode 100644 index 0000000..f37cb2d --- /dev/null +++ b/docs/api/messages.md @@ -0,0 +1,62 @@ +# Messages + +This document describes the different messages that are sent + +## Encoding + +All messages are encoded in `json` format + +## Types + +### HeartBeat + +Heartbeat messages are posted to the heartbeat channel periodically. + +| Field | Datatype | Description | +| -------------------------- | -------- | ------------------------------------------- | +| blocknum | int | Current block number | +| head_blocknum | int | Head block number | +| last_irreversible_blocknum | int | block number of the last irreversible block | + +### Transaction + + +### ActionTrace + +| Field | Datatype | Description | +| -------------- | ----------------- | ----------------------------------------------------------------- | +| tx_id | string | Transaction ID | +| blocknum | int | Block number where this action trace (and transaction) belongs to | +| blocktimestamp | time | Block timestamp | +| receipt | ActionReceipt | Action receipt | +| receiver | string | Receiver account | +| contract | string | Contract account | +| action | string | What action was executed on the contract | +| data | any | Contract specific data (decoded using the contracts abi) | +| authorization | PermissionLevel[] | Authorization | + +### ActionReceipt + +| Field | Datatype | Description | +| --------------- | --------------------- | ------------------ | +| receiver | string | Actor account name | +| act_digest | string | Action digest | +| global_sequence | int | Global sequence | +| recv_sequence | int | Receive sequence | +| auth_sequence | AccountAuthSequence[] | Auth sequence | +| code_sequence | int | Code sequence | +| abi_sequence | int | ABI sequence | + +### PermisssionLevel + +| Field | Datatype | Description | +| ---------- | -------- | -------------------------------- | +| actor | string | Actor account name | +| permission | string | Permission (for example: active) | + +### AccountAuthSequence + +| Field | Datatype | Description | +| -------- | -------- | ------------ | +| account | string | Account name | +| sequence | int | Sequence | \ No newline at end of file diff --git a/docs/api/redis-channels.md b/docs/api/redis-channels.md new file mode 100644 index 0000000..34c70c0 --- /dev/null +++ b/docs/api/redis-channels.md @@ -0,0 +1,38 @@ +# Redis channels + +This document describes the redis channels used by thalos to deliver messages. + +## Namespace + +First. all channels have a namespace attached to them. this is done to prevent other application to clash with the keys. + +The namespace have the following format: `::` + +* `prefix` is per default `ship` but can be configured to be something else. +* `chain_id` is the chain's id and is used to separate transactions if multiple chains are setup in the same redis database. + +## Transactions + +All transactions are posted to the following channel: + +`::transactions` + +## Actions + +there is 4 types of channels for actions. + +The channel where all actions are posted is: + +`::actions` + +Channel where only specific actions are posted: + +`::actions/name/` + +Channel where only actions on a specific `` is posted: + +`::actions/contract/` + +Channel where only `` on a specific `` is posted: + +`::actions/contract//name/` \ No newline at end of file diff --git a/docs/architecture/benchmark.md b/docs/architecture/benchmark.md new file mode 100644 index 0000000..e0a28be --- /dev/null +++ b/docs/architecture/benchmark.md @@ -0,0 +1,71 @@ +# Benchmark + +Thalos demonstrates impressive speed, and we have solid data to support this claim. + +We conducted two distinct types of benchmark tests: + +* **Live Benchmark**: Thalos was thoroughly benchmarked against streaming data from the current head block. This benchmark provides a highly realistic evaluation, although it operates at a slightly slower pace due to real-time processing limitations. Notably, the potential bottleneck arises from the fact that a new block is generated only once every 0.5 seconds. + +* **Replay Benchmark**: Thalos was operated in replay mode, utilizing data from a previous block. +This mode allows for higher throughput as it eliminates real-time constraints since historical blocks have already been generated. +Therefore, Thalos does not have to wait 0.5 second for the next block. + +In addition to the aforementioned test types, it is important to assess the impact of multiple clients on performance. Therefore, we categorize the results as `NxHardware`, where `N` represents the number of clients and `Hardware` signifies the hardware configuration used. For example, the designation `10xlow` indicates 10 clients using low-end hardware. + +All tests were diligently conducted on the WAX Mainnet. + +## Hardware + +The following hardware was used. + +1. **Low-end**: Raspberry Pi 3 Model B Rev 1.2 +2. **Mid-end**: Intel(R) Xeon(R) W-2125 CPU 4-Core (8 threads) @ 4.0GHz +3. **High-end**: 2x Intel(R) Xeon(R) Gold 6128 CPU 6-cores (12 threads) @ 3.4GHz + +Please note that during the tests conducted on mid and high-end hardware, additional services that consume resources were present. +This was due to the unavailability of idle servers for testing purposes. +Consequently, it is important to consider that the performance on these hardware configurations could potentially be even better than the results obtained. + +## Live + +![Live Data msg per sec](./live.png) + +::: details +\* Redis discards messages for clients because they cannot be processed in time. resulting in dataloss. +::: + + +Raw data: + +| 10xhigh | 100xhigh | 10xmid | 100xmid | 10xlow | 100xlow* | +| ----------------- | ----------------- | ----------------- | ----------------- | ------------------ | ------------------ | +| 531.9520324320212 | 517.2177668044619 | 549.1276634032015 | 553.6179173960732 | 432.66369389719085 | 17.004179093675067 | + +These results are quite interesting. High and mid-end hardware are about equal even for 100 clients. And the low-end hardware is not so far of. capable of handling atleast 10 clients. + +Note that one block contains alot of transactions and actions resulting in alot more then one redis message per block. therefore even if there is just 2 blocks per second. There is alot more redis messages sent out. + +## Replay + +![Replay Data msg per sec](./replay.png) + +::: details +\* Redis discards messages for clients because they cannot be processed in time. resulting in dataloss. +::: + + +Raw data: + +| 10xhigh | 100xhigh* | 10xmid | 100xmid* | 10xlow* | 100xlow* | +| ----------------- | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| 3853.401198489492 | 1614.2395356540624 | 4002.5386670846724 | 1297.8602672923382 | 211.21962626224587 | 0 | + +The benchmarking of 100 clients on low-end hardware was intentionally excluded. The system's responsiveness was severely compromised during the test with 100 clients using live data, and running the same test on 100 clients with replay data would not make it better. +it is just as 10xlow, not usable. + +## Conclusion + +By looking at the live data graphs they process roughly the same amount of messages per second. That is because the bottleneck is the blockchain +itself. If we look at the replay data, redis clients can't keep up as number of clients increases. however, it is still pretty fast. consider that all 10x clients performs roughly equal. + +Also the fact that the benchmark tests fetchees **all** messages. That is pretty unrealistic as applications should in 99% of the cases only care about actions on a subset of contracts. Only case where you would want all actions is if you are building some sort of blockexplorer. \ No newline at end of file diff --git a/docs/architecture/index.md b/docs/architecture/index.md new file mode 100644 index 0000000..ff4b6eb --- /dev/null +++ b/docs/architecture/index.md @@ -0,0 +1,43 @@ +# Architecture + +Below is the diagram of how Thalos processes messages from a SHIP Node + +![overview](./overview.jpg) + +## Decoding Binary Format + +When leveraging the Antelope State History plugin (SHIP), developers have the capability to stream blockchain data via a WebSocket connection. +Nevertheless, the process of decoding the binary format and managing the WebSocket connection can prove to be laborious and time-intensive. +Thalos alleviates these challenges by assuming the responsibility of decoding the binary messages on behalf of developers. +It seamlessly transforms the data received from the SHIP node into plain JSON format (and can be adapted to other prevalent formats if desired). +JSON, being widely supported, has many implementations across various programming languages. + +## Contract ABIs + +Thalos simplifies the decoding of contract-specific data by maintaining an internal cache of contract ABIs. This cache, which is stored in Redis, allows for efficient retrieval of contract information. There are two ways in which the cache can be populated: + +1. **API Node**: Thalos can query the contract ABI through an API node, populating the cache with the retrieved information. +2. **SHIP Node Messages**: Thalos keeps track of updates from the SHIP node, and when a contract is updated, it automatically updates its internal cache with the latest ABI information. + +## Redis - PubSub vs Stream + +Thalos utilizes Redis's publish/subscribe model known as Pub/Sub, which offers the following advantages: + +1. **Decoupled communication**: Pub/Sub enables loose coupling between publishers and subscribers. Publishers are unaware of the subscribers, and subscribers can join or leave independently, without affecting the publishing process. + +2. **Scalability**: Redis Pub/Sub is designed to handle high message throughput and efficiently distribute messages to a large number of subscribers. It can handle a high volume of messages without compromising performance. + +3. **Simple implementation**: Redis's Pub/Sub mechanism is easy to implement, involving basic operations such as subscribing to channels, publishing messages, and receiving messages. This simplicity facilitates development and integration with other systems. + +4. **Asynchronous communication**: Pub/Sub operates asynchronously, allowing publishers to send messages without waiting for subscribers to receive them. This decoupling is advantageous in scenarios where immediate response or synchronization is not necessary. + +However, these advantages can also be considered drawbacks in certain situations. Pub/Sub may encounter issues with message persistence: + +- **Message loss**: If clients disconnect and reconnect, they may miss messages published during their absence. Similarly, if a client cannot process messages quickly enough, it may not receive all messages. + +- **Immediate message consumption**: Pub/Sub requires subscribers to consume messages immediately upon publication. If a client is unable to read a message promptly, it is discarded. + +In contrast, Streams in Redis provide built-in message persistence. Messages are stored as entries in the stream and can be consumed at any time, even if they were published before the subscriber connected. +This feature addresses the drawbacks of immediate message consumption and message loss associated with Pub/Sub. + +Currently, Streams are not implemented in Thalos. However, there are plans to consider implementing Streams in the future, based on the demand for such functionality. It's important to note that Streams introduce additional complexity to the client implementation. \ No newline at end of file diff --git a/docs/architecture/live.png b/docs/architecture/live.png new file mode 100644 index 0000000000000000000000000000000000000000..d718046a5196d3b8d07ba20d14e4505b54038b01 GIT binary patch literal 19961 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

dc)`Yqi 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 /dev/null +``` + +Next, install the package. + +#### For bash shell + +```shell +sudo apt-add-repository -y "deb [arch=amd64] https://apt.eossweden.org/main `lsb_release -cs` stable" +sudo apt-get install thalos +``` + +#### For fish shell + +```shell +sudo apt-add-repository -y "deb [arch=amd64] https://apt.eossweden.org/main "(lsb_release -cs)" stable" +sudo apt-get install thalos +``` + +### Manual installation + +Alternatively, you can manually install the package by downloading the .deb file from the [latest](https://github.com/eosswedenorg/thalos/releases/latest) release. + +```shell +curl https://github.com/eosswedenorg/thalos/releases/download//thalos__amd64.deb +sudo apt-get install ./thalos__amd64.deb +``` + +## 2. Configuration + +The configuration file is located at `/etc/thalos/config.yml` and contains an example configuration with extensive documentation. + +See [Configuration](/docs/configuration) for more information + +## 3. Starting the Server via systemd + +```shell +sudo systemctl enable thalos-server +sudo systemctl start thalos-server +``` + +After executing these commands, the server should be up and running. You can check the logs at `/var/log/thalos.log` (unless specified otherwise in the configuration), or by running `sudo systemctl status thalos-server`. + +### Starting Manually + +If desired, Thalos can also be started manually for quick configuration testing or in cases where running systemd is not preferable: + +```shell +/usr/bin/thalos-server --config /etc/thalos/thalos.yml +``` diff --git a/docs/installation/index.md b/docs/installation/index.md new file mode 100644 index 0000000..aa29eb1 --- /dev/null +++ b/docs/installation/index.md @@ -0,0 +1,53 @@ +--- +next: + text: Configuration + link: /docs/configuration +--- + + +# Installation + +There are several ways to install thalos, via package manager, downloading a pre-built binary or building directly from source. + +## Package Managers + +* [Debian/Ubuntu based (apt)](/docs/installation/debian) + +## Manually + +### Bundled binaries + +You can get the latest archive package [here](https://github.com/eosswedenorg/thalos/releases/latest) + +Simply download using your webbrowser or via curl: + +```shell +curl -Ls https://github.com/eosswedenorg/thalos/releases/download//thalos-server--linux-amd64.tar.gz | tar -z --one-top-level=thalos -xvf - +``` + +::: info +Using curl command above, the files are extracted into the `thalos` subdirectory of the current directory where the command is run. +::: + +### Compiling from source + +You will need golang version `1.18` or later to compile the source. + +#### Compile using make + +```shell +make +``` + +or using go directly if you dont have make installed. + +```shell +go build -o build/thalos-server cmd/main/main.go +``` + +#### Install + +After building the binary you can install it along with basic config file and start/stop scripts using `install.sh` + +```shell +./install.sh /path/to/your/directory/of/choice diff --git a/index.md b/index.md new file mode 100644 index 0000000..4704201 --- /dev/null +++ b/index.md @@ -0,0 +1,13 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: "Thalos" + #text: "" + tagline: An application that makes it easy for users to stream blockchain data from an Antelope SHIP node. + actions: + - theme: brand + text: Get started + link: /docs/installation/ +--- diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..d940e9d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1265 @@ +{ + "name": "thalos-docs", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "vitepress": "^1.0.0-beta.3" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", + "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", + "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", + "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", + "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "dev": true, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/cache-browser-local-storage": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.18.0.tgz", + "integrity": "sha512-rUAs49NLlO8LVLgGzM4cLkw8NJLKguQLgvFmBEe3DyzlinoqxzQMHfKZs6TSq4LZfw/z8qHvRo8NcTAAUJQLcw==", + "dev": true, + "dependencies": { + "@algolia/cache-common": "4.18.0" + } + }, + "node_modules/@algolia/cache-common": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.18.0.tgz", + "integrity": "sha512-BmxsicMR4doGbeEXQu8yqiGmiyvpNvejYJtQ7rvzttEAMxOPoWEHrWyzBQw4x7LrBY9pMrgv4ZlUaF8PGzewHg==", + "dev": true + }, + "node_modules/@algolia/cache-in-memory": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.18.0.tgz", + "integrity": "sha512-evD4dA1nd5HbFdufBxLqlJoob7E2ozlqJZuV3YlirNx5Na4q1LckIuzjNYZs2ddLzuTc/Xd5O3Ibf7OwPskHxw==", + "dev": true, + "dependencies": { + "@algolia/cache-common": "4.18.0" + } + }, + "node_modules/@algolia/client-account": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.18.0.tgz", + "integrity": "sha512-XsDnlROr3+Z1yjxBJjUMfMazi1V155kVdte6496atvBgOEtwCzTs3A+qdhfsAnGUvaYfBrBkL0ThnhMIBCGcew==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.18.0", + "@algolia/client-search": "4.18.0", + "@algolia/transporter": "4.18.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.18.0.tgz", + "integrity": "sha512-chEUSN4ReqU7uRQ1C8kDm0EiPE+eJeAXiWcBwLhEynfNuTfawN9P93rSZktj7gmExz0C8XmkbBU19IQ05wCNrQ==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.18.0", + "@algolia/client-search": "4.18.0", + "@algolia/requester-common": "4.18.0", + "@algolia/transporter": "4.18.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.18.0.tgz", + "integrity": "sha512-7N+soJFP4wn8tjTr3MSUT/U+4xVXbz4jmeRfWfVAzdAbxLAQbHa0o/POSdTvQ8/02DjCLelloZ1bb4ZFVKg7Wg==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.18.0", + "@algolia/transporter": "4.18.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.18.0.tgz", + "integrity": "sha512-+PeCjODbxtamHcPl+couXMeHEefpUpr7IHftj4Y4Nia1hj8gGq4VlIcqhToAw8YjLeCTfOR7r7xtj3pJcYdP8A==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.18.0", + "@algolia/requester-common": "4.18.0", + "@algolia/transporter": "4.18.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.18.0.tgz", + "integrity": "sha512-F9xzQXTjm6UuZtnsLIew6KSraXQ0AzS/Ee+OD+mQbtcA/K1sg89tqb8TkwjtiYZ0oij13u3EapB3gPZwm+1Y6g==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.18.0", + "@algolia/requester-common": "4.18.0", + "@algolia/transporter": "4.18.0" + } + }, + "node_modules/@algolia/logger-common": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.18.0.tgz", + "integrity": "sha512-46etYgSlkoKepkMSyaoriSn2JDgcrpc/nkOgou/lm0y17GuMl9oYZxwKKTSviLKI5Irk9nSKGwnBTQYwXOYdRg==", + "dev": true + }, + "node_modules/@algolia/logger-console": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.18.0.tgz", + "integrity": "sha512-3P3VUYMl9CyJbi/UU1uUNlf6Z8N2ltW3Oqhq/nR7vH0CjWv32YROq3iGWGxB2xt3aXobdUPXs6P0tHSKRmNA6g==", + "dev": true, + "dependencies": { + "@algolia/logger-common": "4.18.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.18.0.tgz", + "integrity": "sha512-/AcWHOBub2U4TE/bPi4Gz1XfuLK6/7dj4HJG+Z2SfQoS1RjNLshZclU3OoKIkFp8D2NC7+BNsPvr9cPLyW8nyQ==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.18.0" + } + }, + "node_modules/@algolia/requester-common": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.18.0.tgz", + "integrity": "sha512-xlT8R1qYNRBCi1IYLsx7uhftzdfsLPDGudeQs+xvYB4sQ3ya7+ppolB/8m/a4F2gCkEO6oxpp5AGemM7kD27jA==", + "dev": true + }, + "node_modules/@algolia/requester-node-http": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.18.0.tgz", + "integrity": "sha512-TGfwj9aeTVgOUhn5XrqBhwUhUUDnGIKlI0kCBMdR58XfXcfdwomka+CPIgThRbfYw04oQr31A6/95ZH2QVJ9UQ==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.18.0" + } + }, + "node_modules/@algolia/transporter": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.18.0.tgz", + "integrity": "sha512-xbw3YRUGtXQNG1geYFEDDuFLZt4Z8YNKbamHPkzr3rWc6qp4/BqEeXcI2u/P/oMq2yxtXgMxrCxOPA8lyIe5jw==", + "dev": true, + "dependencies": { + "@algolia/cache-common": "4.18.0", + "@algolia/logger-common": "4.18.0", + "@algolia/requester-common": "4.18.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@docsearch/css": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.1.tgz", + "integrity": "sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA==", + "dev": true + }, + "node_modules/@docsearch/js": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.5.1.tgz", + "integrity": "sha512-EXi8de5njxgP6TV3N9ytnGRLG9zmBNTEZjR4VzwPcpPLbZxxTLG2gaFyJyKiFVQxHW/DPlMrDJA3qoRRGEkgZw==", + "dev": true, + "dependencies": { + "@docsearch/react": "3.5.1", + "preact": "^10.0.0" + } + }, + "node_modules/@docsearch/react": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.1.tgz", + "integrity": "sha512-t5mEODdLzZq4PTFAm/dvqcvZFdPDMdfPE5rJS5SC8OUq9mPzxEy6b+9THIqNM9P0ocCb4UC5jqBrxKclnuIbzQ==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-core": "1.9.3", + "@algolia/autocomplete-preset-algolia": "1.9.3", + "@docsearch/css": "3.5.1", + "algoliasearch": "^4.0.0" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", + "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==", + "dev": true + }, + "node_modules/@vitejs/plugin-vue": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz", + "integrity": "sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", + "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.21.3", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", + "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", + "dev": true, + "dependencies": { + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", + "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-ssr": "3.3.4", + "@vue/reactivity-transform": "3.3.4", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.0", + "postcss": "^8.1.10", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", + "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz", + "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==", + "dev": true + }, + "node_modules/@vue/reactivity": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", + "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", + "dev": true, + "dependencies": { + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", + "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.0" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", + "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", + "dev": true, + "dependencies": { + "@vue/reactivity": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", + "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", + "dev": true, + "dependencies": { + "@vue/runtime-core": "3.3.4", + "@vue/shared": "3.3.4", + "csstype": "^3.1.1" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", + "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", + "dev": true, + "dependencies": { + "@vue/compiler-ssr": "3.3.4", + "@vue/shared": "3.3.4" + }, + "peerDependencies": { + "vue": "3.3.4" + } + }, + "node_modules/@vue/shared": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", + "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==", + "dev": true + }, + "node_modules/@vueuse/core": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.2.1.tgz", + "integrity": "sha512-c441bfMbkAwTNwVRHQ0zdYZNETK//P84rC01aP2Uy/aRFCiie9NE/k9KdIXbno0eDYP5NPUuWv0aA/I4Unr/7w==", + "dev": true, + "dependencies": { + "@types/web-bluetooth": "^0.0.17", + "@vueuse/metadata": "10.2.1", + "@vueuse/shared": "10.2.1", + "vue-demi": ">=0.14.5" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz", + "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/integrations": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.2.1.tgz", + "integrity": "sha512-FDP5lni+z9FjHE9H3xuvwSjoRV9U8jmDvJpmHPCBjUgPGYRynwb60eHWXCFJXLUtb4gSIHy0e+iaEbrKdalCkQ==", + "dev": true, + "dependencies": { + "@vueuse/core": "10.2.1", + "@vueuse/shared": "10.2.1", + "vue-demi": ">=0.14.5" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "*", + "axios": "*", + "change-case": "*", + "drauu": "*", + "focus-trap": "*", + "fuse.js": "*", + "idb-keyval": "*", + "jwt-decode": "*", + "nprogress": "*", + "qrcode": "*", + "sortablejs": "*", + "universal-cookie": "*" + }, + "peerDependenciesMeta": { + "async-validator": { + "optional": true + }, + "axios": { + "optional": true + }, + "change-case": { + "optional": true + }, + "drauu": { + "optional": true + }, + "focus-trap": { + "optional": true + }, + "fuse.js": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "jwt-decode": { + "optional": true + }, + "nprogress": { + "optional": true + }, + "qrcode": { + "optional": true + }, + "sortablejs": { + "optional": true + }, + "universal-cookie": { + "optional": true + } + } + }, + "node_modules/@vueuse/integrations/node_modules/vue-demi": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz", + "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.2.1.tgz", + "integrity": "sha512-3Gt68mY/i6bQvFqx7cuGBzrCCQu17OBaGWS5JdwISpMsHnMKKjC2FeB5OAfMcCQ0oINfADP3i9A4PPRo0peHdQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.2.1.tgz", + "integrity": "sha512-QWHq2bSuGptkcxx4f4M/fBYC3Y8d3M2UYyLsyzoPgEoVzJURQ0oJeWXu79OiLlBb8gTKkqe4mO85T/sf39mmiw==", + "dev": true, + "dependencies": { + "vue-demi": ">=0.14.5" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz", + "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/algoliasearch": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.18.0.tgz", + "integrity": "sha512-pCuVxC1SVcpc08ENH32T4sLKSyzoU7TkRIDBMwSLfIiW+fq4znOmWDkAygHZ6pRcO9I1UJdqlfgnV7TRj+MXrA==", + "dev": true, + "dependencies": { + "@algolia/cache-browser-local-storage": "4.18.0", + "@algolia/cache-common": "4.18.0", + "@algolia/cache-in-memory": "4.18.0", + "@algolia/client-account": "4.18.0", + "@algolia/client-analytics": "4.18.0", + "@algolia/client-common": "4.18.0", + "@algolia/client-personalization": "4.18.0", + "@algolia/client-search": "4.18.0", + "@algolia/logger-common": "4.18.0", + "@algolia/logger-console": "4.18.0", + "@algolia/requester-browser-xhr": "4.18.0", + "@algolia/requester-common": "4.18.0", + "@algolia/requester-node-http": "4.18.0", + "@algolia/transporter": "4.18.0" + } + }, + "node_modules/ansi-sequence-parser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz", + "integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==", + "dev": true + }, + "node_modules/body-scroll-lock": { + "version": "4.0.0-beta.0", + "resolved": "https://registry.npmjs.org/body-scroll-lock/-/body-scroll-lock-4.0.0-beta.0.tgz", + "integrity": "sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/focus-trap": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.4.3.tgz", + "integrity": "sha512-BgSSbK4GPnS2VbtZ50VtOv1Sti6DIkj3+LkVjiWMNjLeAp1SH1UlLx3ULu/DCu4vq5R4/uvTm+zrvsMsuYmGLg==", + "dev": true, + "dependencies": { + "tabbable": "^6.1.2" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", + "dev": true + }, + "node_modules/minisearch": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-6.1.0.tgz", + "integrity": "sha512-PNxA/X8pWk+TiqPbsoIYH0GQ5Di7m6326/lwU/S4mlo4wGQddIcf/V//1f9TB0V4j59b57b+HZxt8h3iMROGvg==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/preact": { + "version": "10.15.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.15.1.tgz", + "integrity": "sha512-qs2ansoQEwzNiV5eAcRT1p1EC/dmEzaATVDJNiB3g2sRDWdA7b7MurXdJjB2+/WQktGWZwxvDrnuRFbWuIr64g==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/rollup": { + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.0.tgz", + "integrity": "sha512-YzJH0eunH2hr3knvF3i6IkLO/jTjAEwU4HoMUbQl4//Tnl3ou0e7P5SjxdDr8HQJdeUJShlbEHXrrnEHy1l7Yg==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/search-insights": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.6.0.tgz", + "integrity": "sha512-vU2/fJ+h/Mkm/DJOe+EaM5cafJv/1rRTZpGJTuFPf/Q5LjzgMDsqPdSaZsAe+GAWHHsfsu+rQSAn6c8IGtBEVw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8.16.0" + } + }, + "node_modules/shiki": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.3.tgz", + "integrity": "sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==", + "dev": true, + "dependencies": { + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "dev": true + }, + "node_modules/vite": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", + "dev": true, + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitepress": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.0.0-beta.3.tgz", + "integrity": "sha512-GR5Pvr/o343NN1M4Na1shhDYZRrQbjmLq7WE0lla0H8iDPAsHE8agTHLWfu3FWx+3q2KA29sv16+0O9RQKGjlA==", + "dev": true, + "dependencies": { + "@docsearch/css": "^3.5.0", + "@docsearch/js": "^3.5.0", + "@vitejs/plugin-vue": "^4.2.3", + "@vue/devtools-api": "^6.5.0", + "@vueuse/core": "^10.1.2", + "@vueuse/integrations": "^10.1.2", + "body-scroll-lock": "4.0.0-beta.0", + "focus-trap": "^7.4.3", + "mark.js": "8.11.1", + "minisearch": "^6.1.0", + "shiki": "^0.14.2", + "vite": "^4.3.9", + "vue": "^3.3.4" + }, + "bin": { + "vitepress": "bin/vitepress.js" + } + }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true + }, + "node_modules/vue": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", + "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-sfc": "3.3.4", + "@vue/runtime-dom": "3.3.4", + "@vue/server-renderer": "3.3.4", + "@vue/shared": "3.3.4" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..a841859 --- /dev/null +++ b/package.json @@ -0,0 +1,10 @@ +{ + "devDependencies": { + "vitepress": "^1.0.0-beta.3" + }, + "scripts": { + "docs:dev": "vitepress dev", + "docs:build": "vitepress build", + "docs:preview": "vitepress preview" + } +} \ No newline at end of file diff --git a/public/icons/redis.svg b/public/icons/redis.svg new file mode 100644 index 0000000..ed31220 --- /dev/null +++ b/public/icons/redis.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file