mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-21 10:47:04 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
423ad4e433 | ||
|
|
cf291c89a2 | ||
|
|
604e356736 | ||
|
|
00b721f34f | ||
|
|
95b105cb65 | ||
|
|
433ffba1e3 | ||
|
|
423a8b8088 | ||
|
|
d2d575bd72 | ||
|
|
2958124499 | ||
|
|
5addc55dd0 | ||
|
|
c78e58106a | ||
|
|
798f063712 | ||
|
|
ff99487b13 | ||
|
|
0c58515fd0 | ||
|
|
c39a59d321 | ||
|
|
3167e311c2 | ||
|
|
7b17d3f96e | ||
|
|
ac87a9d919 | ||
|
|
25ea608d81 | ||
|
|
ebe1fb891b | ||
|
|
931257d18d | ||
|
|
ae66fc92ef |
No files matched your search
@@ -0,0 +1,64 @@
|
|||||||
|
name: CD Docs
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Build
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
pages: write
|
||||||
|
id-token: write
|
||||||
|
|
||||||
|
environment:
|
||||||
|
name: github-pages
|
||||||
|
url: ${{ steps.deployment.outputs.page_url }}
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
node-version: [18.x]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Get code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Use node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
cache: 'npm'
|
||||||
|
|
||||||
|
- name: Install Yarn
|
||||||
|
run: npm install --location=global yarn
|
||||||
|
|
||||||
|
- name: Use node_modules cache
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: '**/node_modules'
|
||||||
|
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: yarn
|
||||||
|
|
||||||
|
- name: Build docs
|
||||||
|
run: yarn build:docs
|
||||||
|
|
||||||
|
- name: Configure pages
|
||||||
|
uses: actions/configure-pages@v2
|
||||||
|
|
||||||
|
- name: Upload pages artifact
|
||||||
|
uses: actions/upload-pages-artifact@v1
|
||||||
|
with:
|
||||||
|
path: docs/.vitepress/dist
|
||||||
|
|
||||||
|
- name: Deploy
|
||||||
|
id: deployment
|
||||||
|
uses: actions/deploy-pages@v1
|
||||||
|
|
||||||
|
- name: Archive build
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: dist
|
||||||
|
path: docs/.vitepress/dist
|
||||||
@@ -3,9 +3,6 @@ name: Host
|
|||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '0 */5 * * *'
|
- cron: '0 */5 * * *'
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- 'main'
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
@@ -34,5 +31,5 @@ jobs:
|
|||||||
curl -L -o dist.zip $DOWNLOAD_URL
|
curl -L -o dist.zip $DOWNLOAD_URL
|
||||||
unzip dist.zip
|
unzip dist.zip
|
||||||
|
|
||||||
- name: Run index.cjs
|
- name: Run bot
|
||||||
run: NODE_ENV=production DISCORD_TOKEN=${{ secrets.DISCORD_TOKEN }} WARGAMING_APPLICATION_ID=${{ secrets.WARGAMING_APPLICATION_ID }} node --enable-source-maps --trace-warnings bot.cjs
|
run: NODE_ENV=production DISCORD_TOKEN=${{ secrets.DISCORD_TOKEN }} WARGAMING_APPLICATION_ID=${{ secrets.WARGAMING_APPLICATION_ID }} node --enable-source-maps --trace-warnings bot.cjs
|
||||||
+3
-1
@@ -8,4 +8,6 @@ dist/
|
|||||||
yarn-error.log
|
yarn-error.log
|
||||||
dist.zip
|
dist.zip
|
||||||
commands.txt
|
commands.txt
|
||||||
/test.*
|
/test.*
|
||||||
|
/docs/.vitepress/dist
|
||||||
|
/docs/.vitepress/cache
|
||||||
Vendored
+2
@@ -6,6 +6,7 @@
|
|||||||
"blitzstars",
|
"blitzstars",
|
||||||
"cleandist",
|
"cleandist",
|
||||||
"customperiod",
|
"customperiod",
|
||||||
|
"Everytime",
|
||||||
"fuzzysort",
|
"fuzzysort",
|
||||||
"kranvagn",
|
"kranvagn",
|
||||||
"outfile",
|
"outfile",
|
||||||
@@ -28,6 +29,7 @@
|
|||||||
"Unicum",
|
"Unicum",
|
||||||
"Unregistering",
|
"Unregistering",
|
||||||
"vickers",
|
"vickers",
|
||||||
|
"vitepress",
|
||||||
"wargaming",
|
"wargaming",
|
||||||
"winrate"
|
"winrate"
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -0,0 +1,128 @@
|
|||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
We as members, contributors, and leaders pledge to make participation in our
|
||||||
|
community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||||
|
identity and expression, level of experience, education, socio-economic status,
|
||||||
|
nationality, personal appearance, race, religion, or sexual identity
|
||||||
|
and orientation.
|
||||||
|
|
||||||
|
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||||
|
diverse, inclusive, and healthy community.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to a positive environment for our
|
||||||
|
community include:
|
||||||
|
|
||||||
|
* Demonstrating empathy and kindness toward other people
|
||||||
|
* Being respectful of differing opinions, viewpoints, and experiences
|
||||||
|
* Giving and gracefully accepting constructive feedback
|
||||||
|
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||||
|
and learning from the experience
|
||||||
|
* Focusing on what is best not just for us as individuals, but for the
|
||||||
|
overall community
|
||||||
|
|
||||||
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery, and sexual attention or
|
||||||
|
advances of any kind
|
||||||
|
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or email
|
||||||
|
address, without their explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Enforcement Responsibilities
|
||||||
|
|
||||||
|
Community leaders are responsible for clarifying and enforcing our standards of
|
||||||
|
acceptable behavior and will take appropriate and fair corrective action in
|
||||||
|
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||||
|
or harmful.
|
||||||
|
|
||||||
|
Community leaders have the right and responsibility to remove, edit, or reject
|
||||||
|
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||||
|
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||||
|
decisions when appropriate.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies within all community spaces, and also applies when
|
||||||
|
an individual is officially representing the community in public spaces.
|
||||||
|
Examples of representing our community include using an official e-mail address,
|
||||||
|
posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported to the community leaders responsible for enforcement at
|
||||||
|
the [Official Discord Server](https://discord.gg/nDt7AjGJQH).
|
||||||
|
All complaints will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
|
All community leaders are obligated to respect the privacy and security of the
|
||||||
|
reporter of any incident.
|
||||||
|
|
||||||
|
## Enforcement Guidelines
|
||||||
|
|
||||||
|
Community leaders will follow these Community Impact Guidelines in determining
|
||||||
|
the consequences for any action they deem in violation of this Code of Conduct:
|
||||||
|
|
||||||
|
### 1. Correction
|
||||||
|
|
||||||
|
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||||
|
unprofessional or unwelcome in the community.
|
||||||
|
|
||||||
|
**Consequence**: A private, written warning from community leaders, providing
|
||||||
|
clarity around the nature of the violation and an explanation of why the
|
||||||
|
behavior was inappropriate. A public apology may be requested.
|
||||||
|
|
||||||
|
### 2. Warning
|
||||||
|
|
||||||
|
**Community Impact**: A violation through a single incident or series
|
||||||
|
of actions.
|
||||||
|
|
||||||
|
**Consequence**: A warning with consequences for continued behavior. No
|
||||||
|
interaction with the people involved, including unsolicited interaction with
|
||||||
|
those enforcing the Code of Conduct, for a specified period of time. This
|
||||||
|
includes avoiding interactions in community spaces as well as external channels
|
||||||
|
like social media. Violating these terms may lead to a temporary or
|
||||||
|
permanent ban.
|
||||||
|
|
||||||
|
### 3. Temporary Ban
|
||||||
|
|
||||||
|
**Community Impact**: A serious violation of community standards, including
|
||||||
|
sustained inappropriate behavior.
|
||||||
|
|
||||||
|
**Consequence**: A temporary ban from any sort of interaction or public
|
||||||
|
communication with the community for a specified period of time. No public or
|
||||||
|
private interaction with the people involved, including unsolicited interaction
|
||||||
|
with those enforcing the Code of Conduct, is allowed during this period.
|
||||||
|
Violating these terms may lead to a permanent ban.
|
||||||
|
|
||||||
|
### 4. Permanent Ban
|
||||||
|
|
||||||
|
**Community Impact**: Demonstrating a pattern of violation of community
|
||||||
|
standards, including sustained inappropriate behavior, harassment of an
|
||||||
|
individual, or aggression toward or disparagement of classes of individuals.
|
||||||
|
|
||||||
|
**Consequence**: A permanent ban from any sort of public interaction within
|
||||||
|
the community.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||||
|
version 2.0, available at
|
||||||
|
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||||
|
|
||||||
|
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||||
|
enforcement ladder](https://github.com/mozilla/diversity).
|
||||||
|
|
||||||
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see the FAQ at
|
||||||
|
https://www.contributor-covenant.org/faq. Translations are available at
|
||||||
|
https://www.contributor-covenant.org/translations.
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2023 TrèsAbhi
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
import { DefaultTheme, defineConfig } from 'vitepress';
|
||||||
|
import { getSidebar } from 'vitepress-plugin-auto-sidebar';
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
title: 'blitzkrieg',
|
||||||
|
description: '🎉 All-in-one Discord bot for everything World of Tanks Blitz',
|
||||||
|
base: '/blitzkrieg/',
|
||||||
|
|
||||||
|
themeConfig: {
|
||||||
|
nav: [
|
||||||
|
{ text: 'Home', link: '/' },
|
||||||
|
{ text: 'Examples', link: '/markdown-examples' },
|
||||||
|
],
|
||||||
|
|
||||||
|
sidebar: getSidebar({
|
||||||
|
collapsed: false,
|
||||||
|
contentDirs: ['guide', 'legal', 'changelogs'],
|
||||||
|
contentRoot: '/docs/',
|
||||||
|
}) as DefaultTheme.Sidebar,
|
||||||
|
|
||||||
|
socialLinks: [
|
||||||
|
{ icon: 'github', link: 'https://github.com/vuejs/vitepress' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
});
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// https://vitepress.dev/guide/custom-theme
|
||||||
|
import { h } from 'vue'
|
||||||
|
import Theme from 'vitepress/theme'
|
||||||
|
import './style.css'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
extends: Theme,
|
||||||
|
Layout: () => {
|
||||||
|
return h(Theme.Layout, null, {
|
||||||
|
// https://vitepress.dev/guide/extending-default-theme#layout-slots
|
||||||
|
})
|
||||||
|
},
|
||||||
|
enhanceApp({ app, router, siteData }) {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
/**
|
||||||
|
* Customize default theme styling by overriding CSS variables:
|
||||||
|
* https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Colors
|
||||||
|
* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--vp-c-brand: #646cff;
|
||||||
|
--vp-c-brand-light: #747bff;
|
||||||
|
--vp-c-brand-lighter: #9499ff;
|
||||||
|
--vp-c-brand-lightest: #bcc0ff;
|
||||||
|
--vp-c-brand-dark: #535bf2;
|
||||||
|
--vp-c-brand-darker: #454ce1;
|
||||||
|
--vp-c-brand-dimm: rgba(100, 108, 255, 0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Component: Button
|
||||||
|
* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--vp-button-brand-border: var(--vp-c-brand-light);
|
||||||
|
--vp-button-brand-text: var(--vp-c-white);
|
||||||
|
--vp-button-brand-bg: var(--vp-c-brand);
|
||||||
|
--vp-button-brand-hover-border: var(--vp-c-brand-light);
|
||||||
|
--vp-button-brand-hover-text: var(--vp-c-white);
|
||||||
|
--vp-button-brand-hover-bg: var(--vp-c-brand-light);
|
||||||
|
--vp-button-brand-active-border: var(--vp-c-brand-light);
|
||||||
|
--vp-button-brand-active-text: var(--vp-c-white);
|
||||||
|
--vp-button-brand-active-bg: var(--vp-button-brand-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Component: Home
|
||||||
|
* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--vp-home-hero-name-color: transparent;
|
||||||
|
--vp-home-hero-name-background: -webkit-linear-gradient(
|
||||||
|
120deg,
|
||||||
|
#bd34fe 30%,
|
||||||
|
#41d1ff
|
||||||
|
);
|
||||||
|
|
||||||
|
--vp-home-hero-image-background-image: linear-gradient(
|
||||||
|
-45deg,
|
||||||
|
#bd34fe 50%,
|
||||||
|
#47caff 50%
|
||||||
|
);
|
||||||
|
--vp-home-hero-image-filter: blur(40px);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 640px) {
|
||||||
|
:root {
|
||||||
|
--vp-home-hero-image-filter: blur(56px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 960px) {
|
||||||
|
:root {
|
||||||
|
--vp-home-hero-image-filter: blur(72px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Component: Custom Block
|
||||||
|
* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--vp-custom-block-tip-border: var(--vp-c-brand);
|
||||||
|
--vp-custom-block-tip-text: var(--vp-c-brand-darker);
|
||||||
|
--vp-custom-block-tip-bg: var(--vp-c-brand-dimm);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark {
|
||||||
|
--vp-custom-block-tip-border: var(--vp-c-brand);
|
||||||
|
--vp-custom-block-tip-text: var(--vp-c-brand-lightest);
|
||||||
|
--vp-custom-block-tip-bg: var(--vp-c-brand-dimm);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Component: Algolia
|
||||||
|
* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
.DocSearch {
|
||||||
|
--docsearch-primary-color: var(--vp-c-brand) !important;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
# Blitzkrieg 1.3.0
|
||||||
|
|
||||||
|
This release of Blitzkrieg focuses mainly on **performance**. Blitzkrieg now uses **Satori** and **resvg** under the hood to render images resulting in a solid **2x to 8x performance boost** depending on the situation.
|
||||||
|
|
||||||
|
This only applies to `/today` and /stats` as they're the only commands that render an image currently.
|
||||||
|
|
||||||
|
We're working further on **performance optimizations**. Our goal is to deliver a message within **3 seconds or less**. We're close and we'll get there!
|
||||||
|
|
||||||
|
**Thank you to ba·ka**, the creator of aftermath, for telling me about Satori!
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# Blitzkrieg 1.3.1
|
||||||
|
|
||||||
|
In this **minor update**, Blitzkrieg received several little **safety features** and **bug fixes**!
|
||||||
|
|
||||||
|
- The bot is now more verbose
|
||||||
|
- Every time you use a command, the bot will now store data on what parameters you provided and if any errors were caused
|
||||||
|
- This update also eliminates the redundant usage of truthy type checking after API calls
|
||||||
|
- _Hopefully_ the bot let you know why it won't respond to you
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# Blitzkrieg 1.3.2
|
||||||
|
|
||||||
|
From now on, I **won't be pinging** the Blitzkrieg role for minor updates. Anyway, this **minor update** includes an optimization for `/today`. The tank icons on the left were fetched every time someone used the command. The bot now caches those images allowing for an instantaneous load.
|
||||||
|
|
||||||
|
I noticed rendering times up to `3000ms` for rendering stats of about 10 tanks. Cached images should now be indifferent to this.
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# Blitzkrieg 1.3.3
|
||||||
|
|
||||||
|
This **minor update** fixes a few things :partying_face:
|
||||||
|
|
||||||
|
- Rating battles now no longer count in `/today`
|
||||||
|
- This resolves the issue where some tanks had `NaN` stats
|
||||||
|
- Stats with the value of `-Infinity` are now ommited
|
||||||
|
- Images are not longer cached in `dev` `env`
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
# Blitzkrieg 1.4.0
|
||||||
|
|
||||||
|
A **few features** :star: and a **few much needed fixes** :wrench:!
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
- Added an "today" row to `/today` which displays your overall statistics
|
||||||
|
- Gave `/tankstats` the new blitzkrieg look
|
||||||
|
- Also added "today", "60 days", and "career" stats
|
||||||
|
- Added a beta warning to generated images
|
||||||
|
- Updated the logo for match the new slate theme
|
||||||
|
- Canary versions now use the canary logo variant
|
||||||
|
- Added subtle polka dots to the background
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
- Rewrote `/stats` to precisely calculate stats on a per-tank basis
|
||||||
|
- This should stop the bot from hallucinating about stats
|
||||||
|
- This should also stop the bot from giving stats from like a week ago
|
||||||
|
- Also added "60 day" stats
|
||||||
|
- Tank autocomplete is now more human-tolerant just like username autocomplete
|
||||||
|
- Titlebar discriminators are now truncated on overflow
|
||||||
|
|
||||||
|
## Technical Changes
|
||||||
|
|
||||||
|
- The bot now uses `bepaint`, a library that I made that standardizes the color palette
|
||||||
|
- Also updated the logo to follow this
|
||||||
|
- Optimized how fonts are imported by fetching them all asynchronously
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# Blitzkrieg 1.4.1
|
||||||
|
|
||||||
|
A quick fix for the `/help` command not accepting the new theme colors.
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# Blitzkrieg 1.5.0
|
||||||
|
|
||||||
|
So so many **quality-of-life** changes and nasty **bug squashes**!
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
- Added WN8 to `/today`, `/stats`, and `/tankstats`
|
||||||
|
- Added average tier to `/stats` and `/tankstats`
|
||||||
|
- Average tier in `/tankstats` is simply the tier of the tank that you are looking up
|
||||||
|
- Added an indicator of WN8 ranging from "very bad" (gray) to "super unicum" (purple)
|
||||||
|
- Replaced ellipses with simple clipping
|
||||||
|
- Added a "large image" warning to `/today` if displaying `6` or more tanks
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
- Removed random 0 that'd show up in `/today` where there was no difference between career and today's stats
|
||||||
|
- Added stricter checks for username autocomplete via a new REGEX pattern
|
||||||
|
- Fixed wonky ellipses that'd cut off usernames, tank names, and clan names unnecessarily
|
||||||
|
- Fixed the delta indicator showing up in battle counts
|
||||||
|
|
||||||
|
## Technical Changes
|
||||||
|
|
||||||
|
- Optimized and cleaned up tankopedia cache
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# Blitzkrieg 1.5.1
|
||||||
|
|
||||||
|
An emergency patch that fixes failed image caching.
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# Blitzkrieg 1.5.2
|
||||||
|
|
||||||
|
Quite a few **bug fixes** with a **bunch more** on their way next update!
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
- Disabled image encoding as it seems to have broken in `1.5.0` and simply spams the console now
|
||||||
|
- `/stats` now ignores tanks that don't have any averages
|
||||||
|
- Tanks may not have averages registered in Blitz Stars because they are new or are in testing
|
||||||
|
- Take a look at \_34's testing tanks in the image below
|
||||||
|
- Fixed the "large image" prompt by simply removing the whole prompt
|
||||||
|
- _Kaboom? Yes Rico, kaboom._
|
||||||
|
- `/today` now displays `--` when there is no WN8 to display
|
||||||
|
- This is unlike `/stats` which just shows 0 (this will be fixed soon)
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# Blitzkrieg 1.5.3
|
||||||
|
|
||||||
|
Just a few more fixes that weren't that important so were deffered to this update.
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
- `/stats` now uses `--` just like `/today` when WN8 is not available
|
||||||
|
- Removed an unnecessary try/catch during the execution of a command
|
||||||
|
- Added error handling for an edge case where accounts with 0 battles were looked up
|
||||||
|
- This only applies to when `api/tanks/stats` is fetched; most other commands still need this fix
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# Blitzkrieg 1.5.4
|
||||||
|
|
||||||
|
A last batch of fixes before the next update!
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
- Career WN8 in the `/today` command now accumulates the WN8 for all tanks instead of just the ones shown
|
||||||
|
- WN8 and average tiers are now displayed in `/stats` in the `career` period
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
# Blitzkrieg 1.6.0
|
||||||
|
|
||||||
|
Spread the beauty! Spread the ease!
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Commands no longer require you to provide an username
|
||||||
|
- They are automatically inferred from your Discord nickname
|
||||||
|
- Re-implemented the `/eligible` command
|
||||||
|
- This command checks a player's eligibility for any of the Skilled clans
|
||||||
|
- This command is only available in the [Skilled](https://discord.gg/ZPvcEG7DS8) and [TresAbhi Discord](https://discord.gg/nDt7AjGJQH) servers
|
||||||
|
- Gave `/ownedtanks` and `/inactive` the new Blitzkrieg look
|
||||||
|
- Added "Powered by Wargaming" to commands where Blitz Stars is not utilized
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
- Removed image encoding all together
|
||||||
|
- As it turns out, encoding them in `base64` made rendering slower!
|
||||||
|
- Tank images in `/today` now don't make parent rows incorrectly taller
|
||||||
|
- Added a "No tanks found" when a player does not own tanks in a tier
|
||||||
|
|
||||||
|
## Technical Changes
|
||||||
|
|
||||||
|
- Added a mature error handling system
|
||||||
|
- Commands can now just `throw errorWithCause(...)` without caring about the error reporting to the user
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# Blitzkrieg 1.7.0
|
||||||
|
|
||||||
|
This is mostly a technical update to make migrating to cyclic.sh easier.
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
- The bot's new deferred caching approach allows the bot to start up almost `4x` as fast
|
||||||
|
|
||||||
|
## Technical Changes
|
||||||
|
|
||||||
|
- Made numerous caches non-blocking
|
||||||
|
- Removed an unnecessary root-blocking await where fonts are imported
|
||||||
|
- Further improved performance by deferring font imports until after the declaration
|
||||||
|
- Tank averages and tankopedia are now declared fully empty only to be populated after a deferred fetch
|
||||||
|
- Reordered error handler, client login, and client event listener registration orders
|
||||||
|
- Removed `vite` all together
|
||||||
|
- This reduces bundle sizes
|
||||||
|
- To do this, a more primitive way of importing commands is used
|
||||||
|
- Removed the redundant usage of `args` to get the Discord token and Wargaming Application ID on each use
|
||||||
|
- Added a build script using `esbuild`
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# Blitzkrieg 1.7.1
|
||||||
|
|
||||||
|
A hot fix to bring the bot back online with `vite-node`.
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# Blitzkrieg 1.7.2
|
||||||
|
|
||||||
|
A quick, tiny, cute bug fix
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
- Tanks now once again show up in `/tankstats`
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# Blitzkrieg 1.7.3 & 1.7.4
|
||||||
|
|
||||||
|
These minor updates fix compatibility issues with cyclic.
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# Blitzkrieg 1.7.5
|
||||||
|
|
||||||
|
This minor release aids the migration to build-based hosting.
|
||||||
|
|
||||||
|
## Technical Changes
|
||||||
|
|
||||||
|
- Removed `env` logging
|
||||||
|
- Fixed constant IDs and token naming conventions
|
||||||
|
- Moved `esbuild` to a `js` script
|
||||||
|
- Updated the workflow to use the latest binaries
|
||||||
|
- Added a `zip` command for `dist`
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# Blitzkrieg 1.7.6
|
||||||
|
|
||||||
|
Public service announcements and a few developer quality-of-life changes.
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
- Added a PSA system
|
||||||
|
- Lets me create announcements without having to release a new update every single time
|
||||||
|
- Added fixed choices for tank stats instead of typing in numbers like before
|
||||||
|
|
||||||
|
## Technical Changes
|
||||||
|
|
||||||
|
- Command executions now return a payload and the executor now fully handles the interaction replies
|
||||||
|
- The build script now skips certain steps to speed up building time when building in dev mode
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# Blitzkrieg 1.7.7
|
||||||
|
|
||||||
|
A tiny fix related to hosting.
|
||||||
|
|
||||||
|
## Technical Changes
|
||||||
|
|
||||||
|
- `index.cjs` is now run at root instead of `dist`
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
# Blitzkrieg 1.8.0
|
||||||
|
|
||||||
|
A slick new command and new potentials unlocked.
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
- Added `/ping`
|
||||||
|
- Allows you to see if the bot and Blitz are alive
|
||||||
|
- Added custom periods for `/stats`
|
||||||
|
- To do this, `/stats` received two sub command groups: `/stats player` and `/stats tank` (hence merging the two)
|
||||||
|
- All periods, including cusotm ones, now live as subcommands
|
||||||
|
- Added tier weights to `/stats`
|
||||||
|
- Added `/evolution`
|
||||||
|
- Shows your winrate and battles over a period
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
- `Infinity` and `NaN` values now show up as `--` in `/stats`
|
||||||
|
- WN8 shortcomings in `/eligible` now rounds to nearest integer
|
||||||
|
- Average tiers now, once again, show up in `/stats`
|
||||||
|
|
||||||
|
## Technical Changes
|
||||||
|
|
||||||
|
- Dev command names are implemented centrally in `interactionCreated`
|
||||||
|
- Abstracted the renderers of `/stats`, `/evolution`, and `/today`
|
||||||
|
- The bot now logs the number of server it's in on start up
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# Blitzkrieg 1.8.1
|
||||||
|
|
||||||
|
A tiny oversight fixed.
|
||||||
|
|
||||||
|
# Fixes
|
||||||
|
|
||||||
|
- The min and max dates now show up in `/evolution`
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# Blitzkrieg 1.9.0
|
||||||
|
|
||||||
|
The biggest, the baddest update yet!
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
- Spiced up `/stats` with a graphics update
|
||||||
|
- This command now only shows a few of the stats as most of them were pretty pointless
|
||||||
|
- Renamed the old `/stats` to `/statsfull`
|
||||||
|
- Added embeds for `/stats`
|
||||||
|
- This is a URL that can be visited to load a "naked" variant of the command that auto-refreshes with the latest data every `60` seconds meant to be used the streamers
|
||||||
|
- Added refresh buttons to a few commands
|
||||||
|
- This lets you reuse a command on the click of a button
|
||||||
|
- Fixed many readibility issues with `/evolution` thanks to @heldenklage
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
- Fixed several type issues for compatibility with `express`
|
||||||
|
|
||||||
|
## Technical Changes
|
||||||
|
|
||||||
|
- Added a seperate `server.ts` from `bot.ts`
|
||||||
|
- Split builds appropriately
|
||||||
|
- Added the ability for routes to respond with svg counterparts of commands
|
||||||
|
- Cached `tankopedia.json` and `tankaverages.json` at build time
|
||||||
|
- This may be reverted in a minor release i favor of `Promise<Tankopedia>`
|
||||||
|
- Organized files as it was important to seperate the server and the bot code
|
||||||
|
- Split `resolvePeriod` and `resolvePlayer` for command, button, and express counterparts
|
||||||
|
- Switched a few instances of `Number(...)` to `parseInt(...)` and `parseLong(...)`
|
||||||
|
- Disabled canary commands for the public
|
||||||
|
- Merged `poweredBy` footers
|
||||||
|
- `dist` now ships with a `package.json` for Cyclic
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# Blitzkrieg 1.9.1
|
||||||
|
|
||||||
|
Created a website for Blitzkrieg! Check it out: https://tresabhi.github.io/blitzkrieg/
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# Blitzkrieg 1.9.2
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
- Implemented `/blitzkrieg/` as the base path
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# Blitzkrieg 1.9.3
|
||||||
|
|
||||||
|
A few fixes before we tackle the next major release.
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
- `/stats`, `/evolution`, and `/statsfull` now properly handle unowned or unplayed tanks
|
||||||
|
|
||||||
|
## Technical Changes
|
||||||
|
|
||||||
|
- Added a `Command` suffix after all command exports
|
||||||
|
- Added a `Route` suffix after all route exports
|
||||||
|
- Moved `tankopedia` and `tankaverages` into a runtime cache
|
||||||
|
- But, this time, it's a promise so we get the best of both worlds
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# Installing Blitzkrieg
|
||||||
|
|
||||||
|
It's easy as 1, 2, 3!
|
||||||
|
|
||||||
|
## Step 1
|
||||||
|
|
||||||
|
Join a server that already has Blitzkrieg or [join our official Discord server](https://discord.gg/nDt7AjGJQH).
|
||||||
|
|
||||||
|
## Step 2
|
||||||
|
|
||||||
|
View the bot's profile and click "Add to Server".
|
||||||
|
|
||||||
|
<video src="https://i.imgur.com/Zq0P3m2.mp4" autoplay loop muted width=320 title="how to install"></video>
|
||||||
|
|
||||||
|
## Step 3
|
||||||
|
|
||||||
|
Review the permissions the bot is asking for and add it to your server!
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
# Permissions
|
||||||
|
|
||||||
|
The following Discord permissions are required by the bot to ensure full functionality:
|
||||||
|
|
||||||
|
- Attach files
|
||||||
|
- View channels
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
# https://vitepress.dev/reference/default-theme-home-page
|
||||||
|
layout: home
|
||||||
|
|
||||||
|
hero:
|
||||||
|
name: 'blitzkrieg'
|
||||||
|
text: Everything Blitz, right in Discord
|
||||||
|
tagline: All-in-one Discord bot for everything World of Tanks Blitz
|
||||||
|
image:
|
||||||
|
src: '/assets/images/hero.png'
|
||||||
|
alt: 'blitzkrieg'
|
||||||
|
actions:
|
||||||
|
- theme: brand
|
||||||
|
text: Add to Discord Server
|
||||||
|
link: guide/install
|
||||||
|
- theme: alt
|
||||||
|
text: Guide
|
||||||
|
link: /guide
|
||||||
|
|
||||||
|
features:
|
||||||
|
- title: Clean and Efficient UI
|
||||||
|
icon: 🚀
|
||||||
|
details: Blitzkrieg is where concise meets efficient. Get the information you need in the way you want.
|
||||||
|
- title: Endless Possibilities
|
||||||
|
icon: 🛠
|
||||||
|
details: With endless ways to customize the output, it's guaranteed that you'll always get the information you need.
|
||||||
|
- title: Easy to Use
|
||||||
|
icon: 💻
|
||||||
|
details: Leveraging Discord's, Blitz Stars', and Wargaming's powerful APIS, Blitzkrieg does all the hard work for you.
|
||||||
|
---
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# Blitzkrieg Privacy Policy
|
||||||
|
|
||||||
|
Blitzkrieg collects little to no data. Regardless, here is an exhaustive list of Blitzkrieg's data collection practices.
|
||||||
|
|
||||||
|
## Logs
|
||||||
|
|
||||||
|
All Blitzkrieg logs are available to the public as an effort for open source transparency. A history of all logs [can be found on GitHub](https://github.com/tresabhi/blitzkrieg/actions/workflows/host.yml). All logs expire automatically and are permanently deleted after 30 days. However, anyone may chose to save a local copy of the logs which is not tracked by GitHub.
|
||||||
|
|
||||||
|
## Commands
|
||||||
|
|
||||||
|
Everytime a command a command is used, the command name and parameters provided is logged. Any identifying information like manually provided in-game usernames are also recorded.
|
||||||
|
|
||||||
|
## Errors
|
||||||
|
|
||||||
|
Everytime an error occurs, a detailed stack trace, scope of the error, and the error message is logged both in the GitHub logs and in the public channel [#🔲︱blitzkrieg-logs](https://discord.com/channels/734786591205359697/880650462540476416) in [the official Discord server](https://discord.gg/nDt7AjGJQH).
|
||||||
|
|
||||||
|
## Databases
|
||||||
|
|
||||||
|
No databases are used by Blitzkrieg meaning that no data is collected outside of what has already been mentioned above. This is no permanent state.
|
||||||
|
|
||||||
|
## 3rd Party
|
||||||
|
|
||||||
|
The privacy policies of Discord, Wargaming, and Blitz Stars apply too since they are utilized by the bot.
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
# Blitzkrieg Terms of Service
|
||||||
|
|
||||||
|
## About
|
||||||
|
|
||||||
|
Blitzkrieg is a multi-function Discord bot that serves users with needs specific to the game World of Tanks Blitz.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Blitzkrieg is licensed under the MIT License.
|
||||||
|
|
||||||
|
## 3rd Party
|
||||||
|
|
||||||
|
The terms of services of Discord, Wargaming, and Blitz Stars apply too since they are utilized by the bot.
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 8.3 KiB |
+12
-7
@@ -1,19 +1,22 @@
|
|||||||
{
|
{
|
||||||
"name": "blitzkrieg",
|
"name": "blitzkrieg",
|
||||||
"version": "1.9.0",
|
"version": "1.9.3",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "src/index.ts",
|
"main": "src/server.ts",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build:bot": "node scripts/build --build=bot",
|
"build:bot": "node scripts/build --build=bot",
|
||||||
"build:server": "node scripts/build --build=server",
|
"build:server": "node scripts/build --build=server",
|
||||||
"build": "yarn lint && node scripts/build --build=all",
|
"build:docs": "vitepress build docs",
|
||||||
|
"build": "node scripts/build --build=all",
|
||||||
"dev:bot": "yarn build:bot --dev && yarn start:bot",
|
"dev:bot": "yarn build:bot --dev && yarn start:bot",
|
||||||
"dev:server": "yarn build:server --dev && yarn start:server",
|
"dev:server": "yarn build:server --dev && yarn start:server",
|
||||||
|
"dev:docs": "vitepress dev docs",
|
||||||
"start:bot": "node --enable-source-maps --trace-warnings dist/bot.cjs",
|
"start:bot": "node --enable-source-maps --trace-warnings dist/bot.cjs",
|
||||||
"start:server": "node --enable-source-maps --trace-warnings dist/server.cjs",
|
"start:server": "node --enable-source-maps --trace-warnings dist/server.cjs",
|
||||||
|
"host:docs": "vitepress preview docs",
|
||||||
"zip": "zip -r dist.zip dist",
|
"zip": "zip -r dist.zip dist",
|
||||||
"lint": "tsc"
|
"lint": "npx tsc"
|
||||||
},
|
},
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -21,13 +24,15 @@
|
|||||||
"@resvg/resvg-js": "^2.4.1",
|
"@resvg/resvg-js": "^2.4.1",
|
||||||
"bepaint": "^0.1.0-beta.3",
|
"bepaint": "^0.1.0-beta.3",
|
||||||
"discord.js": "^14.9.0",
|
"discord.js": "^14.9.0",
|
||||||
|
"esbuild": "^0.18.10",
|
||||||
"escape-html": "^1.0.3",
|
"escape-html": "^1.0.3",
|
||||||
"express": "^4.18.2",
|
"express": "^4.18.2",
|
||||||
"fuzzysort": "^2.0.4",
|
"fuzzysort": "^2.0.4",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"markdown-escape": "^2.0.0",
|
"markdown-escape": "^2.0.0",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"satori": "^0.9.1"
|
"satori": "^0.9.1",
|
||||||
|
"vitepress-plugin-auto-sidebar": "^1.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@total-typescript/ts-reset": "^0.4.2",
|
"@total-typescript/ts-reset": "^0.4.2",
|
||||||
@@ -37,7 +42,7 @@
|
|||||||
"@types/markdown-escape": "^1.1.0",
|
"@types/markdown-escape": "^1.1.0",
|
||||||
"@types/node": "^20.2.1",
|
"@types/node": "^20.2.1",
|
||||||
"@types/react": "^18.2.7",
|
"@types/react": "^18.2.7",
|
||||||
"esbuild": "^0.17.19",
|
"typescript": "^5.0.4",
|
||||||
"typescript": "^5.0.4"
|
"vitepress": "^1.0.0-beta.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
-24
@@ -1,5 +1,5 @@
|
|||||||
import { build } from 'esbuild';
|
import { build } from 'esbuild';
|
||||||
import { copyFile, mkdir, rm, writeFile } from 'fs/promises';
|
import { copyFile, mkdir, rm } from 'fs/promises';
|
||||||
import { argv } from 'process';
|
import { argv } from 'process';
|
||||||
|
|
||||||
const isProd = !argv.includes('--dev');
|
const isProd = !argv.includes('--dev');
|
||||||
@@ -17,29 +17,6 @@ if (isProd) {
|
|||||||
await mkdir('dist');
|
await mkdir('dist');
|
||||||
console.log('✅ Dist created');
|
console.log('✅ Dist created');
|
||||||
|
|
||||||
console.log('🟡 Caching tankopedia...');
|
|
||||||
fetch('https://www.blitzstars.com/bs-tankopedia.json')
|
|
||||||
.then((response) => response.text())
|
|
||||||
.then((tankopedia) => writeFile('./dist/tankopedia.json', tankopedia))
|
|
||||||
.then(() => console.log('✅ Tankopedia cached'));
|
|
||||||
|
|
||||||
console.log('🟡 Caching tank averages...');
|
|
||||||
fetch('https://www.blitzstars.com/api/tankaverages.json')
|
|
||||||
.then((response) => response.json())
|
|
||||||
.then((individualTankAverages) => {
|
|
||||||
const tankAverages = {};
|
|
||||||
|
|
||||||
individualTankAverages.forEach((individualTankAverage) => {
|
|
||||||
tankAverages[individualTankAverage.tank_id] = individualTankAverage;
|
|
||||||
});
|
|
||||||
|
|
||||||
return writeFile(
|
|
||||||
'./dist/tankaverages.json',
|
|
||||||
JSON.stringify(tankAverages),
|
|
||||||
);
|
|
||||||
})
|
|
||||||
.then(() => console.log('✅ Tank averages cached'));
|
|
||||||
|
|
||||||
console.log('🟡 Copying package.json...');
|
console.log('🟡 Copying package.json...');
|
||||||
copyFile('package.dist.json', 'dist/package.json').then(() =>
|
copyFile('package.dist.json', 'dist/package.json').then(() =>
|
||||||
console.log('✅ package.json copied'),
|
console.log('✅ package.json copied'),
|
||||||
|
|||||||
@@ -10,16 +10,16 @@ import { CommandRegistry } from '../events/interactionCreate/index.js';
|
|||||||
|
|
||||||
const executionStart = new Date().getTime();
|
const executionStart = new Date().getTime();
|
||||||
|
|
||||||
export default {
|
export const debugCommand: CommandRegistry = {
|
||||||
inProduction: true,
|
inProduction: true,
|
||||||
inDevelopment: false,
|
inDevelopment: true,
|
||||||
inPublic: true,
|
inPublic: true,
|
||||||
|
|
||||||
command: new SlashCommandBuilder()
|
command: new SlashCommandBuilder()
|
||||||
.setName('debug')
|
.setName('debug')
|
||||||
.setDescription('Debug information about the bot'),
|
.setDescription('Debug information about the bot'),
|
||||||
|
|
||||||
handler(interaction) {
|
async handler(interaction) {
|
||||||
const currentTime = new Date().getTime();
|
const currentTime = new Date().getTime();
|
||||||
const uptime = currentTime - executionStart;
|
const uptime = currentTime - executionStart;
|
||||||
|
|
||||||
@@ -37,9 +37,9 @@ export default {
|
|||||||
(uptime / 1000) % 60,
|
(uptime / 1000) % 60,
|
||||||
)}s ${Math.floor(uptime % 1000)}ms`,
|
)}s ${Math.floor(uptime % 1000)}ms`,
|
||||||
],
|
],
|
||||||
['Tankopedia cached', `${tankopedia !== undefined}`],
|
['Tankopedia cached', `${(await tankopedia) !== undefined}`],
|
||||||
['Tank averages cached', `${tankAverages !== undefined}`],
|
['Tank averages cached', `${(await tankAverages) !== undefined}`],
|
||||||
]),
|
]),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
} satisfies CommandRegistry;
|
};
|
||||||
+47
-31
@@ -15,6 +15,7 @@ import resolvePlayerFromCommand from '../core/discord/resolvePlayerFromCommand.j
|
|||||||
import { WARGAMING_APPLICATION_ID } from '../core/node/arguments.js';
|
import { WARGAMING_APPLICATION_ID } from '../core/node/arguments.js';
|
||||||
import { CommandRegistry } from '../events/interactionCreate/index.js';
|
import { CommandRegistry } from '../events/interactionCreate/index.js';
|
||||||
import { AccountInfo } from '../types/accountInfo.js';
|
import { AccountInfo } from '../types/accountInfo.js';
|
||||||
|
import { PossiblyPromise } from '../types/possiblyPromise.js';
|
||||||
|
|
||||||
export type SkilledClan = 'SKLLD' | 'SMRI';
|
export type SkilledClan = 'SKLLD' | 'SMRI';
|
||||||
|
|
||||||
@@ -23,9 +24,9 @@ export const SKILLED_CLANS: Record<SkilledClan, string> = {
|
|||||||
SMRI: 'Samurai',
|
SMRI: 'Samurai',
|
||||||
};
|
};
|
||||||
|
|
||||||
export default {
|
export const eligibleCommand: CommandRegistry = {
|
||||||
inProduction: true,
|
inProduction: true,
|
||||||
inDevelopment: false,
|
inDevelopment: true,
|
||||||
inPublic: false,
|
inPublic: false,
|
||||||
|
|
||||||
command: new SlashCommandBuilder()
|
command: new SlashCommandBuilder()
|
||||||
@@ -67,41 +68,56 @@ export default {
|
|||||||
const entries = Object.entries(tankStatsOverTime);
|
const entries = Object.entries(tankStatsOverTime);
|
||||||
const stats = sumStats(entries.map(([, stats]) => stats));
|
const stats = sumStats(entries.map(([, stats]) => stats));
|
||||||
const averageTier =
|
const averageTier =
|
||||||
entries.reduce((accumulator, [tankIdString, stats]) => {
|
(await entries.reduce<PossiblyPromise<number>>(
|
||||||
const tankId = parseInt(tankIdString);
|
async (accumulator, [tankIdString, stats]) => {
|
||||||
const tankTier = tankopedia[tankId].tier;
|
const tankId = parseInt(tankIdString);
|
||||||
|
const tankTier = (await tankopedia)[tankId].tier;
|
||||||
|
|
||||||
return accumulator + tankTier * stats.battles;
|
return (await accumulator) + tankTier * stats.battles;
|
||||||
}, 0) / stats.battles;
|
},
|
||||||
|
0,
|
||||||
|
)) / stats.battles;
|
||||||
const WN8 =
|
const WN8 =
|
||||||
entries.reduce((accumulator, [tankIdString, stats]) => {
|
(await entries.reduce<PossiblyPromise<number>>(
|
||||||
const tankId = parseInt(tankIdString);
|
async (accumulator, [tankIdString, stats]) => {
|
||||||
|
const tankId = parseInt(tankIdString);
|
||||||
|
|
||||||
// edge case where new tanks don't have averages
|
// edge case where new tanks don't have averages
|
||||||
if (tankAverages[tankId]) {
|
if ((await tankAverages)[tankId]) {
|
||||||
const tankWN8 = calculateWN8(tankAverages[tankId].all, stats);
|
const tankWN8 = calculateWN8(
|
||||||
|
(await tankAverages)[tankId].all,
|
||||||
|
stats,
|
||||||
|
);
|
||||||
|
|
||||||
if (isNaN(tankWN8)) return accumulator;
|
if (isNaN(tankWN8)) return accumulator;
|
||||||
return accumulator + tankWN8 * stats.battles;
|
return (await accumulator) + tankWN8 * stats.battles;
|
||||||
} else return accumulator;
|
} else return accumulator;
|
||||||
}, 0) / stats.battles;
|
},
|
||||||
|
0,
|
||||||
|
)) / stats.battles;
|
||||||
const tier10Damage =
|
const tier10Damage =
|
||||||
entries.reduce((accumulator, [tankIdString, stats]) => {
|
(await entries.reduce<PossiblyPromise<number>>(
|
||||||
const tankId = parseInt(tankIdString);
|
async (accumulator, [tankIdString, stats]) => {
|
||||||
|
const tankId = parseInt(tankIdString);
|
||||||
|
|
||||||
if (tankopedia[tankId]?.tier === 10) {
|
if ((await tankopedia)[tankId]?.tier === 10) {
|
||||||
const tankStats = tankStatsOverTime[tankId];
|
const tankStats = tankStatsOverTime[tankId];
|
||||||
return accumulator + tankStats.damage_dealt;
|
return (await accumulator) + tankStats.damage_dealt;
|
||||||
} else return accumulator;
|
} else return accumulator;
|
||||||
}, 0) /
|
},
|
||||||
entries.reduce((accumulator, [tankIdString, stats]) => {
|
0,
|
||||||
const tankId = parseInt(tankIdString);
|
)) /
|
||||||
|
(await entries.reduce<PossiblyPromise<number>>(
|
||||||
|
async (accumulator, [tankIdString, stats]) => {
|
||||||
|
const tankId = parseInt(tankIdString);
|
||||||
|
|
||||||
if (tankopedia[tankId]?.tier === 10) {
|
if ((await tankopedia)[tankId]?.tier === 10) {
|
||||||
const tankStats = tankStatsOverTime[tankId];
|
const tankStats = tankStatsOverTime[tankId];
|
||||||
return accumulator + tankStats.battles;
|
return (await accumulator) + tankStats.battles;
|
||||||
} else return accumulator;
|
} else return accumulator;
|
||||||
}, 0);
|
},
|
||||||
|
0,
|
||||||
|
));
|
||||||
|
|
||||||
if (stats.battles < 126) {
|
if (stats.battles < 126) {
|
||||||
problems.push(['Battles', `${stats.battles} (${stats.battles - 126})`]);
|
problems.push(['Battles', `${stats.battles} (${stats.battles - 126})`]);
|
||||||
@@ -169,4 +185,4 @@ export default {
|
|||||||
|
|
||||||
return (isEligible ? embedPositive : embedNegative)(title, body);
|
return (isEligible ? embedPositive : embedNegative)(title, body);
|
||||||
},
|
},
|
||||||
} satisfies CommandRegistry;
|
};
|
||||||
@@ -18,7 +18,7 @@ import evolution from '../renderers/evolution.js';
|
|||||||
import { StatType } from '../renderers/statsfull.js';
|
import { StatType } from '../renderers/statsfull.js';
|
||||||
import { AccountInfo } from '../types/accountInfo.js';
|
import { AccountInfo } from '../types/accountInfo.js';
|
||||||
|
|
||||||
export default {
|
export const evolutionCommand: CommandRegistry = {
|
||||||
inProduction: true,
|
inProduction: true,
|
||||||
inDevelopment: true,
|
inDevelopment: true,
|
||||||
inPublic: true,
|
inPublic: true,
|
||||||
@@ -36,7 +36,7 @@ export default {
|
|||||||
const player = await resolvePlayerFromCommand(interaction);
|
const player = await resolvePlayerFromCommand(interaction);
|
||||||
const period = resolvePeriodFromCommand(interaction);
|
const period = resolvePeriodFromCommand(interaction);
|
||||||
const tankIdRaw = interaction.options.getString('tank')!;
|
const tankIdRaw = interaction.options.getString('tank')!;
|
||||||
const tankId = commandGroup === 'tank' ? resolveTankId(tankIdRaw) : null;
|
const tankId = commandGroup === 'tank' ? await resolveTankId(tankIdRaw) : null;
|
||||||
const start = interaction.options.getInteger('start');
|
const start = interaction.options.getInteger('start');
|
||||||
const end = interaction.options.getInteger('end');
|
const end = interaction.options.getInteger('end');
|
||||||
const { nickname } = (
|
const { nickname } = (
|
||||||
@@ -83,4 +83,4 @@ export default {
|
|||||||
parseInt(url.searchParams.get('tankId')!),
|
parseInt(url.searchParams.get('tankId')!),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
} satisfies CommandRegistry;
|
};
|
||||||
@@ -8,9 +8,9 @@ import {
|
|||||||
publicCommands,
|
publicCommands,
|
||||||
} from '../events/interactionCreate/index.js';
|
} from '../events/interactionCreate/index.js';
|
||||||
|
|
||||||
export default {
|
export const helpCommand: CommandRegistry = {
|
||||||
inProduction: true,
|
inProduction: true,
|
||||||
inDevelopment: false,
|
inDevelopment: true,
|
||||||
inPublic: true,
|
inPublic: true,
|
||||||
|
|
||||||
command: new SlashCommandBuilder()
|
command: new SlashCommandBuilder()
|
||||||
@@ -33,4 +33,4 @@ export default {
|
|||||||
)}\n\n*I am a new bot; I may make mistakes and go offline unexpectedly from time to time.*`,
|
)}\n\n*I am a new bot; I may make mistakes and go offline unexpectedly from time to time.*`,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
} satisfies CommandRegistry;
|
};
|
||||||
@@ -16,9 +16,9 @@ import { ClanInfo } from '../types/clanInfo.js';
|
|||||||
|
|
||||||
const DEFAULT_THRESHOLD = 7;
|
const DEFAULT_THRESHOLD = 7;
|
||||||
|
|
||||||
export default {
|
export const inactiveCommand: CommandRegistry = {
|
||||||
inProduction: true,
|
inProduction: true,
|
||||||
inDevelopment: false,
|
inDevelopment: true,
|
||||||
inPublic: true,
|
inPublic: true,
|
||||||
|
|
||||||
command: new SlashCommandBuilder()
|
command: new SlashCommandBuilder()
|
||||||
@@ -85,4 +85,4 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
autocomplete: autocompleteClan,
|
autocomplete: autocompleteClan,
|
||||||
} satisfies CommandRegistry;
|
};
|
||||||
@@ -41,9 +41,9 @@ const COMP_TANKS = [
|
|||||||
6753, // type 71
|
6753, // type 71
|
||||||
];
|
];
|
||||||
|
|
||||||
export default {
|
export const ownedTanksCommand: CommandRegistry = {
|
||||||
inProduction: true,
|
inProduction: true,
|
||||||
inDevelopment: false,
|
inDevelopment: true,
|
||||||
inPublic: true,
|
inPublic: true,
|
||||||
|
|
||||||
command: new SlashCommandBuilder()
|
command: new SlashCommandBuilder()
|
||||||
@@ -77,9 +77,11 @@ export default {
|
|||||||
`https://api.wotblitz.${server}/wotb/account/info/?application_id=${WARGAMING_APPLICATION_ID}&account_id=${id}`,
|
`https://api.wotblitz.${server}/wotb/account/info/?application_id=${WARGAMING_APPLICATION_ID}&account_id=${id}`,
|
||||||
);
|
);
|
||||||
const tankStats = await getTankStats(server, id);
|
const tankStats = await getTankStats(server, id);
|
||||||
const tanks = tankStats
|
const tanks = (
|
||||||
.map((tankData) => tankopedia[tankData.tank_id])
|
await Promise.all(
|
||||||
.filter((tank) => tank?.tier === tier);
|
tankStats.map(async (tankData) => (await tankopedia)[tankData.tank_id]),
|
||||||
|
)
|
||||||
|
).filter((tank) => tank?.tier === tier);
|
||||||
const clanData = await getWargamingResponse<PlayerClanData>(
|
const clanData = await getWargamingResponse<PlayerClanData>(
|
||||||
`https://api.wotblitz.${server}/wotb/clans/accountinfo/?application_id=${WARGAMING_APPLICATION_ID}&account_id=${id}&extra=clan`,
|
`https://api.wotblitz.${server}/wotb/clans/accountinfo/?application_id=${WARGAMING_APPLICATION_ID}&account_id=${id}&extra=clan`,
|
||||||
);
|
);
|
||||||
@@ -121,4 +123,4 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
autocomplete: autocompleteUsername,
|
autocomplete: autocompleteUsername,
|
||||||
} satisfies CommandRegistry;
|
};
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
import { SlashCommandBuilder } from 'discord.js';
|
import { SlashCommandBuilder } from 'discord.js';
|
||||||
import { CommandRegistry } from '../events/interactionCreate/index.js';
|
import { CommandRegistry } from '../events/interactionCreate/index.js';
|
||||||
|
|
||||||
export default {
|
export const pingCommand: CommandRegistry<true> = {
|
||||||
inProduction: true,
|
inProduction: true,
|
||||||
inDevelopment: false,
|
inDevelopment: true,
|
||||||
inPublic: true,
|
inPublic: true,
|
||||||
handlesInteraction: true,
|
handlesInteraction: true,
|
||||||
|
|
||||||
@@ -30,4 +30,4 @@ export default {
|
|||||||
const executionTime = Date.now() - executionStart;
|
const executionTime = Date.now() - executionStart;
|
||||||
interaction.editReply(`Pong 🏓 - ${executionTime}ms`);
|
interaction.editReply(`Pong 🏓 - ${executionTime}ms`);
|
||||||
},
|
},
|
||||||
} satisfies CommandRegistry<true>;
|
};
|
||||||
@@ -16,9 +16,9 @@ import { AccountInfo } from '../types/accountInfo.js';
|
|||||||
|
|
||||||
type SortBy = 'name' | 'count';
|
type SortBy = 'name' | 'count';
|
||||||
|
|
||||||
export default {
|
export const playerAchievementsCommand: CommandRegistry = {
|
||||||
inProduction: true,
|
inProduction: true,
|
||||||
inDevelopment: false,
|
inDevelopment: true,
|
||||||
inPublic: true,
|
inPublic: true,
|
||||||
|
|
||||||
command: new SlashCommandBuilder()
|
command: new SlashCommandBuilder()
|
||||||
@@ -75,4 +75,4 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
autocomplete: autocompleteUsername,
|
autocomplete: autocompleteUsername,
|
||||||
} satisfies CommandRegistry;
|
};
|
||||||
@@ -10,9 +10,9 @@ import { WARGAMING_APPLICATION_ID } from '../core/node/arguments.js';
|
|||||||
import { CommandRegistry } from '../events/interactionCreate/index.js';
|
import { CommandRegistry } from '../events/interactionCreate/index.js';
|
||||||
import { AccountInfo } from '../types/accountInfo.js';
|
import { AccountInfo } from '../types/accountInfo.js';
|
||||||
|
|
||||||
export default {
|
export const playerInfoCommand: CommandRegistry = {
|
||||||
inProduction: true,
|
inProduction: true,
|
||||||
inDevelopment: false,
|
inDevelopment: true,
|
||||||
inPublic: true,
|
inPublic: true,
|
||||||
|
|
||||||
command: new SlashCommandBuilder()
|
command: new SlashCommandBuilder()
|
||||||
@@ -57,4 +57,4 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
autocomplete: autocompleteUsername,
|
autocomplete: autocompleteUsername,
|
||||||
} satisfies CommandRegistry;
|
};
|
||||||
@@ -9,9 +9,9 @@ import { WARGAMING_APPLICATION_ID } from '../core/node/arguments.js';
|
|||||||
import { CommandRegistry } from '../events/interactionCreate/index.js';
|
import { CommandRegistry } from '../events/interactionCreate/index.js';
|
||||||
import { ClanList } from '../types/clanList.js';
|
import { ClanList } from '../types/clanList.js';
|
||||||
|
|
||||||
export default {
|
export const searchClansCommand: CommandRegistry = {
|
||||||
inProduction: true,
|
inProduction: true,
|
||||||
inDevelopment: false,
|
inDevelopment: true,
|
||||||
inPublic: true,
|
inPublic: true,
|
||||||
|
|
||||||
command: new SlashCommandBuilder()
|
command: new SlashCommandBuilder()
|
||||||
@@ -44,4 +44,4 @@ export default {
|
|||||||
.join('\n')}\n\`\`\``,
|
.join('\n')}\n\`\`\``,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
} satisfies CommandRegistry;
|
};
|
||||||
@@ -10,9 +10,9 @@ import { WARGAMING_APPLICATION_ID } from '../core/node/arguments.js';
|
|||||||
import { CommandRegistry } from '../events/interactionCreate/index.js';
|
import { CommandRegistry } from '../events/interactionCreate/index.js';
|
||||||
import { AccountList } from '../types/accountList.js';
|
import { AccountList } from '../types/accountList.js';
|
||||||
|
|
||||||
export default {
|
export const searchPlayersCommand: CommandRegistry = {
|
||||||
inProduction: true,
|
inProduction: true,
|
||||||
inDevelopment: false,
|
inDevelopment: true,
|
||||||
inPublic: true,
|
inPublic: true,
|
||||||
|
|
||||||
command: new SlashCommandBuilder()
|
command: new SlashCommandBuilder()
|
||||||
@@ -52,4 +52,4 @@ export default {
|
|||||||
}\`\`\``,
|
}\`\`\``,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
} satisfies CommandRegistry;
|
};
|
||||||
@@ -6,9 +6,9 @@ import addTankChoices from '../core/discord/addTankChoices.js';
|
|||||||
import embedInfo from '../core/discord/embedInfo.js';
|
import embedInfo from '../core/discord/embedInfo.js';
|
||||||
import { CommandRegistry } from '../events/interactionCreate/index.js';
|
import { CommandRegistry } from '../events/interactionCreate/index.js';
|
||||||
|
|
||||||
export default {
|
export const searchTanksCommand: CommandRegistry = {
|
||||||
inProduction: true,
|
inProduction: true,
|
||||||
inDevelopment: false,
|
inDevelopment: true,
|
||||||
inPublic: true,
|
inPublic: true,
|
||||||
|
|
||||||
command: new SlashCommandBuilder()
|
command: new SlashCommandBuilder()
|
||||||
@@ -37,4 +37,4 @@ export default {
|
|||||||
: `\`\`\`\n${results.join('\n')}\n\`\`\``,
|
: `\`\`\`\n${results.join('\n')}\n\`\`\``,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
} satisfies CommandRegistry;
|
};
|
||||||
@@ -18,7 +18,7 @@ import stats from '../renderers/stats.js';
|
|||||||
import { StatType } from '../renderers/statsfull.js';
|
import { StatType } from '../renderers/statsfull.js';
|
||||||
import { AccountInfo } from '../types/accountInfo.js';
|
import { AccountInfo } from '../types/accountInfo.js';
|
||||||
|
|
||||||
export default {
|
export const statsCommand: CommandRegistry = {
|
||||||
inProduction: true,
|
inProduction: true,
|
||||||
inDevelopment: true,
|
inDevelopment: true,
|
||||||
inPublic: true,
|
inPublic: true,
|
||||||
@@ -36,7 +36,8 @@ export default {
|
|||||||
const player = await resolvePlayerFromCommand(interaction);
|
const player = await resolvePlayerFromCommand(interaction);
|
||||||
const period = resolvePeriodFromCommand(interaction);
|
const period = resolvePeriodFromCommand(interaction);
|
||||||
const tankIdRaw = interaction.options.getString('tank')!;
|
const tankIdRaw = interaction.options.getString('tank')!;
|
||||||
const tankId = commandGroup === 'tank' ? resolveTankId(tankIdRaw) : null;
|
const tankId =
|
||||||
|
commandGroup === 'tank' ? await resolveTankId(tankIdRaw) : null;
|
||||||
const start = interaction.options.getInteger('start');
|
const start = interaction.options.getInteger('start');
|
||||||
const end = interaction.options.getInteger('end');
|
const end = interaction.options.getInteger('end');
|
||||||
const path = interactionToURL(interaction, {
|
const path = interactionToURL(interaction, {
|
||||||
@@ -81,4 +82,4 @@ export default {
|
|||||||
parseInt(url.searchParams.get('tankId')!),
|
parseInt(url.searchParams.get('tankId')!),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
} satisfies CommandRegistry;
|
};
|
||||||
@@ -17,9 +17,9 @@ import { CommandRegistry } from '../events/interactionCreate/index.js';
|
|||||||
import statsfull, { StatType } from '../renderers/statsfull.js';
|
import statsfull, { StatType } from '../renderers/statsfull.js';
|
||||||
import { AccountInfo } from '../types/accountInfo.js';
|
import { AccountInfo } from '../types/accountInfo.js';
|
||||||
|
|
||||||
export default {
|
export const statsFullCommand: CommandRegistry = {
|
||||||
inProduction: true,
|
inProduction: true,
|
||||||
inDevelopment: false,
|
inDevelopment: true,
|
||||||
inPublic: true,
|
inPublic: true,
|
||||||
|
|
||||||
command: addStatTypeSubCommandGroups(
|
command: addStatTypeSubCommandGroups(
|
||||||
@@ -35,7 +35,8 @@ export default {
|
|||||||
const player = await resolvePlayerFromCommand(interaction);
|
const player = await resolvePlayerFromCommand(interaction);
|
||||||
const period = resolvePeriodFromCommand(interaction);
|
const period = resolvePeriodFromCommand(interaction);
|
||||||
const tankIdRaw = interaction.options.getString('tank')!;
|
const tankIdRaw = interaction.options.getString('tank')!;
|
||||||
const tankId = commandGroup === 'tank' ? resolveTankId(tankIdRaw) : null;
|
const tankId =
|
||||||
|
commandGroup === 'tank' ? await resolveTankId(tankIdRaw) : null;
|
||||||
const start = interaction.options.getInteger('start');
|
const start = interaction.options.getInteger('start');
|
||||||
const end = interaction.options.getInteger('end');
|
const end = interaction.options.getInteger('end');
|
||||||
const path = interactionToURL(interaction, {
|
const path = interactionToURL(interaction, {
|
||||||
@@ -80,4 +81,4 @@ export default {
|
|||||||
parseInt(url.searchParams.get('tankId')!),
|
parseInt(url.searchParams.get('tankId')!),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
} satisfies CommandRegistry;
|
};
|
||||||
@@ -12,9 +12,9 @@ import { CommandRegistry } from '../events/interactionCreate/index.js';
|
|||||||
import today from '../renderers/today.js';
|
import today from '../renderers/today.js';
|
||||||
import { AccountInfo } from '../types/accountInfo.js';
|
import { AccountInfo } from '../types/accountInfo.js';
|
||||||
|
|
||||||
export default {
|
export const todayCommand: CommandRegistry = {
|
||||||
inProduction: true,
|
inProduction: true,
|
||||||
inDevelopment: false,
|
inDevelopment: true,
|
||||||
inPublic: true,
|
inPublic: true,
|
||||||
|
|
||||||
command: new SlashCommandBuilder()
|
command: new SlashCommandBuilder()
|
||||||
@@ -49,4 +49,4 @@ export default {
|
|||||||
|
|
||||||
return await today(player);
|
return await today(player);
|
||||||
},
|
},
|
||||||
} satisfies CommandRegistry;
|
};
|
||||||
@@ -12,9 +12,9 @@ import { CommandRegistry } from '../events/interactionCreate/index.js';
|
|||||||
import { AccountInfo } from '../types/accountInfo.js';
|
import { AccountInfo } from '../types/accountInfo.js';
|
||||||
import { PlayerClanData } from '../types/playerClanData.js';
|
import { PlayerClanData } from '../types/playerClanData.js';
|
||||||
|
|
||||||
export default {
|
export const verifyCommand: CommandRegistry = {
|
||||||
inProduction: true,
|
inProduction: true,
|
||||||
inDevelopment: false,
|
inDevelopment: true,
|
||||||
inPublic: true,
|
inPublic: true,
|
||||||
|
|
||||||
command: new SlashCommandBuilder()
|
command: new SlashCommandBuilder()
|
||||||
@@ -80,4 +80,4 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
autocomplete: autocompleteUsername,
|
autocomplete: autocompleteUsername,
|
||||||
} satisfies CommandRegistry;
|
};
|
||||||
@@ -2,7 +2,7 @@ import { go } from 'fuzzysort';
|
|||||||
import throwError from '../node/throwError.js';
|
import throwError from '../node/throwError.js';
|
||||||
import { TANKS, tankopedia } from './tankopedia.js';
|
import { TANKS, tankopedia } from './tankopedia.js';
|
||||||
|
|
||||||
export default function resolveTankId(tank: string) {
|
export default async function resolveTankId(tank: string) {
|
||||||
const number = parseInt(tank);
|
const number = parseInt(tank);
|
||||||
|
|
||||||
if (Number.isNaN(number)) {
|
if (Number.isNaN(number)) {
|
||||||
@@ -17,7 +17,7 @@ export default function resolveTankId(tank: string) {
|
|||||||
return searchResult[0].obj.tank_id;
|
return searchResult[0].obj.tank_id;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (tankopedia[number]) {
|
if ((await tankopedia)[number]) {
|
||||||
return number;
|
return number;
|
||||||
} else {
|
} else {
|
||||||
throw throwError(
|
throw throwError(
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { tankopedia } from './tankopedia.js';
|
import { tankopedia } from './tankopedia.js';
|
||||||
|
|
||||||
export default function resolveTankName(tankId: number) {
|
export default async function resolveTankName(tankId: number) {
|
||||||
const tankopediaName = tankopedia[tankId].name;
|
const tankopediaName = (await tankopedia)[tankId].name;
|
||||||
return tankopediaName ? tankopediaName : `Unknown Tank ${tankId}`;
|
return tankopediaName ? tankopediaName : `Unknown Tank ${tankId}`;
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
import { readFileSync } from 'fs';
|
|
||||||
import { join } from 'path';
|
|
||||||
|
|
||||||
export type TankType = 'AT-SPG' | 'lightTank' | 'mediumTank' | 'heavyTank';
|
export type TankType = 'AT-SPG' | 'lightTank' | 'mediumTank' | 'heavyTank';
|
||||||
|
|
||||||
export interface TankopediaEntry {
|
export interface TankopediaEntry {
|
||||||
@@ -19,11 +16,13 @@ export interface Tankopedia {
|
|||||||
[id: number]: TankopediaEntry;
|
[id: number]: TankopediaEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const tankopedia = (
|
console.log('Caching tankopedia...');
|
||||||
JSON.parse(
|
export const tankopedia = fetch('https://www.blitzstars.com/bs-tankopedia.json')
|
||||||
readFileSync(join(__dirname, 'tankopedia.json')) as unknown as string,
|
.then((response) => response.json())
|
||||||
) as { data: Tankopedia }
|
.then((wrapperTankopedia) => {
|
||||||
).data;
|
console.log('Tankopedia cached');
|
||||||
|
return (wrapperTankopedia as { data: Tankopedia }).data;
|
||||||
|
});
|
||||||
const entries = Object.entries(tankopedia);
|
const entries = Object.entries(tankopedia);
|
||||||
export const TANK_IDS = entries.map(([, { tank_id }]) => tank_id as number);
|
export const TANK_IDS = entries.map(([, { tank_id }]) => tank_id as number);
|
||||||
export const TANKS = entries.map(([, entry]) => entry as TankopediaEntry);
|
export const TANKS = entries.map(([, entry]) => entry as TankopediaEntry);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { emptyAllStats } from './getTankStatsDiffed.js';
|
|||||||
import { tankAverages } from './tankAverages.js';
|
import { tankAverages } from './tankAverages.js';
|
||||||
|
|
||||||
console.log('Calculating player average...');
|
console.log('Calculating player average...');
|
||||||
export const playerAverage = Object.entries(tankAverages).reduce(
|
export const playerAverage = Object.entries(await tankAverages).reduce(
|
||||||
(accumulator, [, tankAverage]) => {
|
(accumulator, [, tankAverage]) => {
|
||||||
return sumStats([accumulator, tankAverage.all]);
|
return sumStats([accumulator, tankAverage.all]);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
import { readFileSync } from 'fs';
|
|
||||||
import { join } from 'path';
|
|
||||||
import { AllStats } from '../../types/accountInfo.js';
|
import { AllStats } from '../../types/accountInfo.js';
|
||||||
|
|
||||||
export interface SpecialStats {
|
export interface SpecialStats {
|
||||||
@@ -82,6 +80,22 @@ export interface IndividualTankAverage {
|
|||||||
|
|
||||||
export type TankAverages = Record<number, IndividualTankAverage>;
|
export type TankAverages = Record<number, IndividualTankAverage>;
|
||||||
|
|
||||||
export const tankAverages = JSON.parse(
|
console.log('Caching tank averages...');
|
||||||
readFileSync(join(__dirname, 'tankaverages.json')) as unknown as string,
|
export const tankAverages = fetch(
|
||||||
) as TankAverages;
|
'https://www.blitzstars.com/api/tankaverages.json',
|
||||||
|
)
|
||||||
|
.then((response) => response.json())
|
||||||
|
.then((individualTankAverages) => {
|
||||||
|
const partialTankAverages: TankAverages = {};
|
||||||
|
|
||||||
|
(individualTankAverages as IndividualTankAverage[]).forEach(
|
||||||
|
(individualTankAverage) => {
|
||||||
|
partialTankAverages[individualTankAverage.tank_id] =
|
||||||
|
individualTankAverage;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
console.log('Tank averages cached');
|
||||||
|
|
||||||
|
return partialTankAverages;
|
||||||
|
});
|
||||||
@@ -15,14 +15,16 @@ export default async function autocompleteTanks(
|
|||||||
|
|
||||||
await interaction.respond(
|
await interaction.respond(
|
||||||
focusedOption.value
|
focusedOption.value
|
||||||
? go(focusedOption.value, TANKS, { keys: ['name'], limit: 10 }).map(
|
? await Promise.all(
|
||||||
(item) =>
|
go(focusedOption.value, TANKS, { keys: ['name'], limit: 10 }).map(
|
||||||
({
|
async (item) =>
|
||||||
name: item.obj.name
|
({
|
||||||
? item.obj.name
|
name: item.obj.name
|
||||||
: resolveTankName(item.obj.tank_id),
|
? item.obj.name
|
||||||
value: `${item.obj.tank_id}`,
|
: await resolveTankName(item.obj.tank_id),
|
||||||
} satisfies ApplicationCommandOptionChoiceData<string>),
|
value: `${item.obj.tank_id}`,
|
||||||
|
} satisfies ApplicationCommandOptionChoiceData<string>),
|
||||||
|
),
|
||||||
)
|
)
|
||||||
: [],
|
: [],
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -13,22 +13,22 @@ import {
|
|||||||
SlashCommandSubcommandsOnlyBuilder,
|
SlashCommandSubcommandsOnlyBuilder,
|
||||||
} from 'discord.js';
|
} from 'discord.js';
|
||||||
import discord from '../../../discord.json' assert { type: 'json' };
|
import discord from '../../../discord.json' assert { type: 'json' };
|
||||||
import debug from '../../commands/debug.js';
|
import { debugCommand } from '../../commands/debug.js';
|
||||||
import eligible from '../../commands/eligible.js';
|
import { eligibleCommand } from '../../commands/eligible.js';
|
||||||
import evolution from '../../commands/evolution.js';
|
import { evolutionCommand } from '../../commands/evolution.js';
|
||||||
import help from '../../commands/help.js';
|
import { helpCommand } from '../../commands/help.js';
|
||||||
import inactive from '../../commands/inactive.js';
|
import { inactiveCommand } from '../../commands/inactive.js';
|
||||||
import ownedtanks from '../../commands/ownedtanks.js';
|
import { ownedTanksCommand } from '../../commands/ownedTanks.js';
|
||||||
import ping from '../../commands/ping.js';
|
import { pingCommand } from '../../commands/ping.js';
|
||||||
import playerachievements from '../../commands/playerachievements.js';
|
import { playerAchievementsCommand } from '../../commands/playerAchievements.js';
|
||||||
import playerinfo from '../../commands/playerinfo.js';
|
import { playerInfoCommand } from '../../commands/playerInfo.js';
|
||||||
import searchclans from '../../commands/searchclans.js';
|
import { searchClansCommand } from '../../commands/searchClans.js';
|
||||||
import searchplayers from '../../commands/searchplayers.js';
|
import { searchPlayersCommand } from '../../commands/searchPlayers.js';
|
||||||
import searchtanks from '../../commands/searchtanks.js';
|
import { searchTanksCommand } from '../../commands/searchTanks.js';
|
||||||
import stats from '../../commands/stats.js';
|
import { statsCommand } from '../../commands/stats.js';
|
||||||
import statsfull from '../../commands/statsfull.js';
|
import { statsFullCommand } from '../../commands/statsFull.js';
|
||||||
import today from '../../commands/today.js';
|
import { todayCommand } from '../../commands/today.js';
|
||||||
import verify from '../../commands/verify.js';
|
import { verifyCommand } from '../../commands/verify.js';
|
||||||
import { DISCORD_TOKEN } from '../../core/node/arguments.js';
|
import { DISCORD_TOKEN } from '../../core/node/arguments.js';
|
||||||
import getClientId from '../../core/node/getClientId.js';
|
import getClientId from '../../core/node/getClientId.js';
|
||||||
import isDev from '../../core/node/isDev.js';
|
import isDev from '../../core/node/isDev.js';
|
||||||
@@ -72,26 +72,25 @@ const rest = new REST().setToken(DISCORD_TOKEN);
|
|||||||
|
|
||||||
export const commands: Record<string, CommandRegistry> = (
|
export const commands: Record<string, CommandRegistry> = (
|
||||||
[
|
[
|
||||||
debug,
|
debugCommand,
|
||||||
eligible,
|
eligibleCommand,
|
||||||
help,
|
helpCommand,
|
||||||
inactive,
|
inactiveCommand,
|
||||||
ownedtanks,
|
ownedTanksCommand,
|
||||||
playerachievements,
|
playerAchievementsCommand,
|
||||||
playerinfo,
|
playerInfoCommand,
|
||||||
searchclans,
|
searchClansCommand,
|
||||||
searchplayers,
|
searchPlayersCommand,
|
||||||
searchtanks,
|
searchTanksCommand,
|
||||||
statsfull,
|
statsFullCommand,
|
||||||
today,
|
todayCommand,
|
||||||
verify,
|
verifyCommand,
|
||||||
ping,
|
pingCommand,
|
||||||
evolution,
|
evolutionCommand,
|
||||||
stats,
|
statsCommand,
|
||||||
] as CommandRegistry[]
|
] as CommandRegistry[]
|
||||||
).reduce((accumulator, registry) => {
|
).reduce((accumulator, registry) => {
|
||||||
if (isDev()) registry.command.setDefaultMemberPermissions(0);
|
if (isDev()) registry.command.setDefaultMemberPermissions(0);
|
||||||
|
|
||||||
return { ...accumulator, [registry.command.name]: registry };
|
return { ...accumulator, [registry.command.name]: registry };
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
|
|||||||
@@ -38,8 +38,8 @@ export default async function evolution<Type extends StatType>(
|
|||||||
? `https://wotblitz-gc.gcdn.co/icons/clanEmblems1x/clan-icon-v2-${clan.emblem_set_id}.png`
|
? `https://wotblitz-gc.gcdn.co/icons/clanEmblems1x/clan-icon-v2-${clan.emblem_set_id}.png`
|
||||||
: undefined;
|
: undefined;
|
||||||
} else {
|
} else {
|
||||||
nameDiscriminator = `(${resolveTankName(tankId!)})`;
|
nameDiscriminator = `(${await resolveTankName(tankId!)})`;
|
||||||
image = tankopedia[tankId!].images.normal;
|
image = (await tankopedia)[tankId!].images.normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
let histories: Histories;
|
let histories: Histories;
|
||||||
|
|||||||
+53
-43
@@ -22,6 +22,7 @@ import {
|
|||||||
SupplementaryStats,
|
SupplementaryStats,
|
||||||
} from '../types/accountInfo.js';
|
} from '../types/accountInfo.js';
|
||||||
import { PlayerClanData } from '../types/playerClanData.js';
|
import { PlayerClanData } from '../types/playerClanData.js';
|
||||||
|
import { PossiblyPromise } from '../types/possiblyPromise.js';
|
||||||
|
|
||||||
export type StatType = 'player' | 'tank';
|
export type StatType = 'player' | 'tank';
|
||||||
|
|
||||||
@@ -47,66 +48,73 @@ export default async function stats<Type extends StatType>(
|
|||||||
? `https://wotblitz-gc.gcdn.co/icons/clanEmblems1x/clan-icon-v2-${clan.emblem_set_id}.png`
|
? `https://wotblitz-gc.gcdn.co/icons/clanEmblems1x/clan-icon-v2-${clan.emblem_set_id}.png`
|
||||||
: undefined;
|
: undefined;
|
||||||
} else if (type === 'tank') {
|
} else if (type === 'tank') {
|
||||||
nameDiscriminator = `(${resolveTankName(tankId!)})`;
|
nameDiscriminator = `(${await resolveTankName(tankId!)})`;
|
||||||
image = tankopedia[tankId!].images.normal;
|
image = (await tankopedia)[tankId!].images.normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
const tankStats = await getTankStatsDiffed(server, id, start, end);
|
const tankStats = await getTankStatsDiffed(server, id, start, end);
|
||||||
let stats: AllStats;
|
let stats: AllStats | undefined;
|
||||||
let supplementaryStats: SupplementaryStats;
|
let supplementaryStats: SupplementaryStats;
|
||||||
let tierWeights: TierWeightsRecord;
|
let tierWeights: TierWeightsRecord;
|
||||||
|
|
||||||
if (type === 'player') {
|
if (type === 'player') {
|
||||||
const entries = Object.entries(tankStats);
|
const entries = Object.entries(tankStats);
|
||||||
stats = sumStats(entries.map(([, stats]) => stats));
|
stats = sumStats(entries.map(([, stats]) => stats));
|
||||||
const battlesOfTanksWithAverages = entries.reduce(
|
const battlesOfTanksWithAverages = await entries.reduce<
|
||||||
(accumulator, [tankIdString, stats]) => {
|
PossiblyPromise<number>
|
||||||
const tankId = parseInt(tankIdString);
|
>(async (accumulator, [tankIdString, stats]) => {
|
||||||
const tankAverage = tankAverages[tankId];
|
const tankId = parseInt(tankIdString);
|
||||||
|
const tankAverage = (await tankAverages)[tankId];
|
||||||
|
|
||||||
return tankAverage ? accumulator + stats.battles : accumulator;
|
return tankAverage ? (await accumulator) + stats.battles : accumulator;
|
||||||
},
|
}, 0);
|
||||||
0,
|
const battlesOfTanksWithTankopediaEntry = await entries.reduce<
|
||||||
);
|
PossiblyPromise<number>
|
||||||
const battlesOfTanksWithTankopediaEntry = entries.reduce(
|
>(async (accumulator, [tankIdString, stats]) => {
|
||||||
(accumulator, [tankIdString, stats]) => {
|
const tankId = parseInt(tankIdString);
|
||||||
const tankId = parseInt(tankIdString);
|
const tankopediaEntry = (await tankopedia)[tankId];
|
||||||
const tankopediaEntry = tankopedia[tankId];
|
|
||||||
|
|
||||||
return tankopediaEntry ? accumulator + stats.battles : accumulator;
|
return tankopediaEntry
|
||||||
},
|
? (await accumulator) + stats.battles
|
||||||
0,
|
: accumulator;
|
||||||
);
|
}, 0);
|
||||||
|
|
||||||
supplementaryStats = {
|
supplementaryStats = {
|
||||||
WN8:
|
WN8:
|
||||||
entries.reduce((accumulator, [tankIdString, stats]) => {
|
(await entries.reduce<PossiblyPromise<number>>(
|
||||||
const tankId = parseInt(tankIdString);
|
async (accumulator, [tankIdString, stats]) => {
|
||||||
const tankAverage = tankAverages[tankId];
|
const tankId = parseInt(tankIdString);
|
||||||
|
const tankAverage = (await tankAverages)[tankId];
|
||||||
|
|
||||||
return tankAverage
|
return tankAverage
|
||||||
? accumulator + calculateWN8(tankAverage.all, stats) * stats.battles
|
? (await accumulator) +
|
||||||
: accumulator;
|
calculateWN8(tankAverage.all, stats) * stats.battles
|
||||||
}, 0) / battlesOfTanksWithAverages,
|
: accumulator;
|
||||||
|
},
|
||||||
|
0,
|
||||||
|
)) / battlesOfTanksWithAverages,
|
||||||
tier:
|
tier:
|
||||||
entries.reduce((accumulator, [tankIdString, stats]) => {
|
(await entries.reduce<PossiblyPromise<number>>(
|
||||||
const tankId = parseInt(tankIdString);
|
async (accumulator, [tankIdString, stats]) => {
|
||||||
const tankopediaEntry = tankopedia[tankId];
|
const tankId = parseInt(tankIdString);
|
||||||
|
const tankopediaEntry = (await tankopedia)[tankId];
|
||||||
|
|
||||||
return tankopediaEntry
|
return tankopediaEntry
|
||||||
? accumulator + tankopediaEntry.tier * stats.battles
|
? (await accumulator) + tankopediaEntry.tier * stats.battles
|
||||||
: accumulator;
|
: accumulator;
|
||||||
}, 0) / battlesOfTanksWithTankopediaEntry,
|
},
|
||||||
|
0,
|
||||||
|
)) / battlesOfTanksWithTankopediaEntry,
|
||||||
};
|
};
|
||||||
tierWeights = entries.reduce<TierWeightsRecord>(
|
tierWeights = await entries.reduce<PossiblyPromise<TierWeightsRecord>>(
|
||||||
(accumulator, [tankIdString, stats]) => {
|
async (accumulator, [tankIdString, stats]) => {
|
||||||
const tankId = parseInt(tankIdString);
|
const tankId = parseInt(tankIdString);
|
||||||
const tier = tankopedia[tankId].tier as Tier;
|
const tier = (await tankopedia)[tankId].tier as Tier;
|
||||||
|
|
||||||
if (accumulator[tier]) {
|
if ((await accumulator)[tier]) {
|
||||||
accumulator[tier]! += stats.battles;
|
(await accumulator)[tier]! += stats.battles;
|
||||||
} else {
|
} else {
|
||||||
accumulator[tier] = stats.battles;
|
(await accumulator)[tier] = stats.battles;
|
||||||
}
|
}
|
||||||
|
|
||||||
return accumulator;
|
return accumulator;
|
||||||
@@ -117,8 +125,10 @@ export default async function stats<Type extends StatType>(
|
|||||||
stats = tankStats[tankId!];
|
stats = tankStats[tankId!];
|
||||||
|
|
||||||
supplementaryStats = {
|
supplementaryStats = {
|
||||||
WN8: calculateWN8(tankAverages[tankId!].all, tankStats[tankId!]),
|
WN8: stats
|
||||||
tier: tankopedia[tankId!].tier,
|
? calculateWN8((await tankAverages)[tankId!].all, tankStats[tankId!])
|
||||||
|
: undefined,
|
||||||
|
tier: (await tankopedia)[tankId!].tier,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,8 +164,8 @@ export default async function stats<Type extends StatType>(
|
|||||||
}`}
|
}`}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{stats.battles === 0 && <NoData type={NoDataType.BattlesInPeriod} />}
|
{!stats?.battles && <NoData type={NoDataType.BattlesInPeriod} />}
|
||||||
{stats.battles > 0 && overview}
|
{stats?.battles > 0 && overview}
|
||||||
|
|
||||||
<PoweredBy type={PoweredByType.BlitzStars} footer={footer} />
|
<PoweredBy type={PoweredByType.BlitzStars} footer={footer} />
|
||||||
</Wrapper>
|
</Wrapper>
|
||||||
|
|||||||
+48
-40
@@ -21,6 +21,7 @@ import {
|
|||||||
SupplementaryStats,
|
SupplementaryStats,
|
||||||
} from '../types/accountInfo.js';
|
} from '../types/accountInfo.js';
|
||||||
import { PlayerClanData } from '../types/playerClanData.js';
|
import { PlayerClanData } from '../types/playerClanData.js';
|
||||||
|
import { PossiblyPromise } from '../types/possiblyPromise.js';
|
||||||
|
|
||||||
export type StatType = 'player' | 'tank';
|
export type StatType = 'player' | 'tank';
|
||||||
|
|
||||||
@@ -45,8 +46,8 @@ export default async function statsfull<Type extends StatType>(
|
|||||||
? `https://wotblitz-gc.gcdn.co/icons/clanEmblems1x/clan-icon-v2-${clan.emblem_set_id}.png`
|
? `https://wotblitz-gc.gcdn.co/icons/clanEmblems1x/clan-icon-v2-${clan.emblem_set_id}.png`
|
||||||
: undefined;
|
: undefined;
|
||||||
} else if (type === 'tank') {
|
} else if (type === 'tank') {
|
||||||
nameDiscriminator = `(${resolveTankName(tankId!)})`;
|
nameDiscriminator = `(${await resolveTankName(tankId!)})`;
|
||||||
image = tankopedia[tankId!].images.normal;
|
image = (await tankopedia)[tankId!].images.normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
const tankStats = await getTankStatsDiffed(server, id, start, end);
|
const tankStats = await getTankStatsDiffed(server, id, start, end);
|
||||||
@@ -57,54 +58,61 @@ export default async function statsfull<Type extends StatType>(
|
|||||||
if (type === 'player') {
|
if (type === 'player') {
|
||||||
const entries = Object.entries(tankStats);
|
const entries = Object.entries(tankStats);
|
||||||
stats = sumStats(entries.map(([, stats]) => stats));
|
stats = sumStats(entries.map(([, stats]) => stats));
|
||||||
const battlesOfTanksWithAverages = entries.reduce(
|
const battlesOfTanksWithAverages = await entries.reduce<
|
||||||
(accumulator, [tankIdString, stats]) => {
|
PossiblyPromise<number>
|
||||||
const tankId = parseInt(tankIdString);
|
>(async (accumulator, [tankIdString, stats]) => {
|
||||||
const tankAverage = tankAverages[tankId];
|
const tankId = parseInt(tankIdString);
|
||||||
|
const tankAverage = (await tankAverages)[tankId];
|
||||||
|
|
||||||
return tankAverage ? accumulator + stats.battles : accumulator;
|
return tankAverage ? (await accumulator) + stats.battles : accumulator;
|
||||||
},
|
}, 0);
|
||||||
0,
|
const battlesOfTanksWithTankopediaEntry = await entries.reduce<
|
||||||
);
|
PossiblyPromise<number>
|
||||||
const battlesOfTanksWithTankopediaEntry = entries.reduce(
|
>(async (accumulator, [tankIdString, stats]) => {
|
||||||
(accumulator, [tankIdString, stats]) => {
|
const tankId = parseInt(tankIdString);
|
||||||
const tankId = parseInt(tankIdString);
|
const tankopediaEntry = (await tankopedia)[tankId];
|
||||||
const tankopediaEntry = tankopedia[tankId];
|
|
||||||
|
|
||||||
return tankopediaEntry ? accumulator + stats.battles : accumulator;
|
return tankopediaEntry
|
||||||
},
|
? (await accumulator) + stats.battles
|
||||||
0,
|
: accumulator;
|
||||||
);
|
}, 0);
|
||||||
|
|
||||||
supplementaryStats = {
|
supplementaryStats = {
|
||||||
WN8:
|
WN8:
|
||||||
entries.reduce((accumulator, [tankIdString, stats]) => {
|
(await entries.reduce<PossiblyPromise<number>>(
|
||||||
const tankId = parseInt(tankIdString);
|
async (accumulator, [tankIdString, stats]) => {
|
||||||
const tankAverage = tankAverages[tankId];
|
const tankId = parseInt(tankIdString);
|
||||||
|
const tankAverage = (await tankAverages)[tankId];
|
||||||
|
|
||||||
return tankAverage
|
return tankAverage
|
||||||
? accumulator + calculateWN8(tankAverage.all, stats) * stats.battles
|
? (await accumulator) +
|
||||||
: accumulator;
|
calculateWN8(tankAverage.all, stats) * stats.battles
|
||||||
}, 0) / battlesOfTanksWithAverages,
|
: accumulator;
|
||||||
|
},
|
||||||
|
0,
|
||||||
|
)) / battlesOfTanksWithAverages,
|
||||||
tier:
|
tier:
|
||||||
entries.reduce((accumulator, [tankIdString, stats]) => {
|
(await entries.reduce<PossiblyPromise<number>>(
|
||||||
const tankId = parseInt(tankIdString);
|
async (accumulator, [tankIdString, stats]) => {
|
||||||
const tankopediaEntry = tankopedia[tankId];
|
const tankId = parseInt(tankIdString);
|
||||||
|
const tankopediaEntry = (await tankopedia)[tankId];
|
||||||
|
|
||||||
return tankopediaEntry
|
return tankopediaEntry
|
||||||
? accumulator + tankopediaEntry.tier * stats.battles
|
? (await accumulator) + tankopediaEntry.tier * stats.battles
|
||||||
: accumulator;
|
: accumulator;
|
||||||
}, 0) / battlesOfTanksWithTankopediaEntry,
|
},
|
||||||
|
0,
|
||||||
|
)) / battlesOfTanksWithTankopediaEntry,
|
||||||
};
|
};
|
||||||
tierWeights = entries.reduce<TierWeightsRecord>(
|
tierWeights = await entries.reduce<PossiblyPromise<TierWeightsRecord>>(
|
||||||
(accumulator, [tankIdString, stats]) => {
|
async (accumulator, [tankIdString, stats]) => {
|
||||||
const tankId = parseInt(tankIdString);
|
const tankId = parseInt(tankIdString);
|
||||||
const tier = tankopedia[tankId].tier as Tier;
|
const tier = (await tankopedia)[tankId].tier as Tier;
|
||||||
|
|
||||||
if (accumulator[tier]) {
|
if ((await accumulator)[tier]) {
|
||||||
accumulator[tier]! += stats.battles;
|
(await accumulator)[tier]! += stats.battles;
|
||||||
} else {
|
} else {
|
||||||
accumulator[tier] = stats.battles;
|
(await accumulator)[tier] = stats.battles;
|
||||||
}
|
}
|
||||||
|
|
||||||
return accumulator;
|
return accumulator;
|
||||||
@@ -115,8 +123,8 @@ export default async function statsfull<Type extends StatType>(
|
|||||||
stats = tankStats[tankId!];
|
stats = tankStats[tankId!];
|
||||||
|
|
||||||
supplementaryStats = {
|
supplementaryStats = {
|
||||||
WN8: calculateWN8(tankAverages[tankId!].all, tankStats[tankId!]),
|
WN8: calculateWN8((await tankAverages)[tankId!].all, tankStats[tankId!]),
|
||||||
tier: tankopedia[tankId!].tier,
|
tier: (await tankopedia)[tankId!].tier,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+55
-51
@@ -18,6 +18,7 @@ import { ResolvedPlayer } from '../core/discord/resolvePlayerFromCommand.js';
|
|||||||
import { WARGAMING_APPLICATION_ID } from '../core/node/arguments.js';
|
import { WARGAMING_APPLICATION_ID } from '../core/node/arguments.js';
|
||||||
import { AccountInfo, AllStats } from '../types/accountInfo.js';
|
import { AccountInfo, AllStats } from '../types/accountInfo.js';
|
||||||
import { PlayerClanData } from '../types/playerClanData.js';
|
import { PlayerClanData } from '../types/playerClanData.js';
|
||||||
|
import { PossiblyPromise } from '../types/possiblyPromise.js';
|
||||||
|
|
||||||
export default async function today({ server, id }: ResolvedPlayer) {
|
export default async function today({ server, id }: ResolvedPlayer) {
|
||||||
const tankStatsOverTime = await getTankStatsDiffed(
|
const tankStatsOverTime = await getTankStatsDiffed(
|
||||||
@@ -52,33 +53,31 @@ export default async function today({ server, id }: ResolvedPlayer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const tankStatsOverTimeEntries = Object.entries(tankStatsOverTime);
|
const tankStatsOverTimeEntries = Object.entries(tankStatsOverTime);
|
||||||
const todayWN8s = tankStatsOverTimeEntries.reduce<Record<number, number>>(
|
const todayWN8s = await tankStatsOverTimeEntries.reduce<
|
||||||
(accumulator, [tankIdString, tankStats]) => {
|
PossiblyPromise<Record<number, number>>
|
||||||
const tankId = Number(tankIdString);
|
>(async (accumulator, [tankIdString, tankStats]) => {
|
||||||
|
const tankId = Number(tankIdString);
|
||||||
|
|
||||||
return tankId === 0 || tankAverages[tankId] === undefined
|
return tankId === 0 || (await tankAverages)[tankId] === undefined
|
||||||
? accumulator
|
? accumulator
|
||||||
: {
|
: {
|
||||||
...accumulator,
|
...accumulator,
|
||||||
[tankId]: calculateWN8(tankAverages[tankId].all, tankStats),
|
[tankId]: calculateWN8((await tankAverages)[tankId].all, tankStats),
|
||||||
};
|
};
|
||||||
},
|
}, {});
|
||||||
{},
|
const careerWN8s = await careerTankStatsRaw.reduce<
|
||||||
);
|
PossiblyPromise<Record<number, number>>
|
||||||
const careerWN8s = careerTankStatsRaw.reduce<Record<number, number>>(
|
>(async (accumulator, { tank_id }) => {
|
||||||
(accumulator, { tank_id }) => {
|
return tank_id === 0 || (await tankAverages)[tank_id] === undefined
|
||||||
return tank_id === 0 || tankAverages[tank_id] === undefined
|
? accumulator
|
||||||
? accumulator
|
: {
|
||||||
: {
|
...accumulator,
|
||||||
...accumulator,
|
[tank_id]: calculateWN8(
|
||||||
[tank_id]: calculateWN8(
|
(await tankAverages)[tank_id].all,
|
||||||
tankAverages[tank_id].all,
|
careerStats[tank_id],
|
||||||
careerStats[tank_id],
|
),
|
||||||
),
|
};
|
||||||
};
|
}, {});
|
||||||
},
|
|
||||||
{},
|
|
||||||
);
|
|
||||||
const todayWN8sEntries = Object.entries(todayWN8s);
|
const todayWN8sEntries = Object.entries(todayWN8s);
|
||||||
const careerWN8sEntries = Object.entries(careerWN8s);
|
const careerWN8sEntries = Object.entries(careerWN8s);
|
||||||
|
|
||||||
@@ -109,32 +108,37 @@ export default async function today({ server, id }: ResolvedPlayer) {
|
|||||||
0,
|
0,
|
||||||
);
|
);
|
||||||
|
|
||||||
const rows = tankStatsOverTimeEntries.map(([tankIdString, tankStats]) => {
|
const rows = await Promise.all(
|
||||||
const tankId = Number(tankIdString);
|
tankStatsOverTimeEntries.map(async ([tankIdString, tankStats]) => {
|
||||||
const career = careerStats[tankId];
|
const tankId = Number(tankIdString);
|
||||||
|
const career = careerStats[tankId];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Breakdown.Row
|
<Breakdown.Row
|
||||||
key={tankId}
|
key={tankId}
|
||||||
name={tankId === 0 ? 'Total' : resolveTankName(Number(tankIdString))}
|
name={
|
||||||
winrate={tankStats.wins / tankStats.battles}
|
tankId === 0 ? 'Total' : await resolveTankName(Number(tankIdString))
|
||||||
careerWinrate={career.wins / career.battles}
|
}
|
||||||
WN8={isNaN(todayWN8s[tankId]) ? undefined : todayWN8s[tankId]}
|
winrate={tankStats.wins / tankStats.battles}
|
||||||
careerWN8={isNaN(careerWN8s[tankId]) ? undefined : careerWN8s[tankId]}
|
careerWinrate={career.wins / career.battles}
|
||||||
damage={tankStats.damage_dealt / tankStats.battles}
|
WN8={isNaN(todayWN8s[tankId]) ? undefined : todayWN8s[tankId]}
|
||||||
careerDamage={career.damage_dealt / career.battles}
|
careerWN8={isNaN(careerWN8s[tankId]) ? undefined : careerWN8s[tankId]}
|
||||||
survival={tankStats.survived_battles / tankStats.battles}
|
damage={tankStats.damage_dealt / tankStats.battles}
|
||||||
careerSurvival={career.survived_battles / career.battles}
|
careerDamage={career.damage_dealt / career.battles}
|
||||||
battles={tankStats.battles}
|
survival={tankStats.survived_battles / tankStats.battles}
|
||||||
careerBattles={career.battles}
|
careerSurvival={career.survived_battles / career.battles}
|
||||||
icon={
|
battles={tankStats.battles}
|
||||||
tankId === 0
|
careerBattles={career.battles}
|
||||||
? undefined
|
icon={
|
||||||
: tankopedia[tankIdString as unknown as number].images.normal
|
tankId === 0
|
||||||
}
|
? undefined
|
||||||
/>
|
: (await tankopedia)[tankIdString as unknown as number].images
|
||||||
);
|
.normal
|
||||||
});
|
}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Wrapper>
|
<Wrapper>
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ import resolvePlayerFromRequest from '../core/express/resolvePlayerFromRequest.j
|
|||||||
import stats, { StatType } from '../renderers/stats.js';
|
import stats, { StatType } from '../renderers/stats.js';
|
||||||
import { RouteRegistry } from '../server.js';
|
import { RouteRegistry } from '../server.js';
|
||||||
|
|
||||||
export default {
|
export const statsRoute: RouteRegistry = {
|
||||||
route: '/stats/:type/:period',
|
route: '/stats/:type/:period',
|
||||||
inProduction: true,
|
inProduction: true,
|
||||||
inDevelopment: false,
|
inDevelopment: true,
|
||||||
|
|
||||||
async handler(req) {
|
async handler(req) {
|
||||||
const type = req.params.type as StatType;
|
const type = req.params.type as StatType;
|
||||||
@@ -21,4 +21,4 @@ export default {
|
|||||||
true,
|
true,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
} satisfies RouteRegistry;
|
};
|
||||||
+2
-2
@@ -3,7 +3,7 @@ import normalizeRouteReturnable from './core/express/normalizeRouteReturnable.js
|
|||||||
import withAutoRefresh from './core/express/withAutoRefresh.js';
|
import withAutoRefresh from './core/express/withAutoRefresh.js';
|
||||||
import isDev from './core/node/isDev.js';
|
import isDev from './core/node/isDev.js';
|
||||||
import { Registry } from './events/interactionCreate/index.js';
|
import { Registry } from './events/interactionCreate/index.js';
|
||||||
import stats from './routes/stats.js';
|
import { statsRoute } from './routes/stats.js';
|
||||||
|
|
||||||
export type RouteReturnable = JSX.Element | Promise<JSX.Element>;
|
export type RouteReturnable = JSX.Element | Promise<JSX.Element>;
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ export interface RouteRegistry<HandlesInteraction extends boolean = false>
|
|||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
||||||
([stats] as RouteRegistry[]).forEach((registry) => {
|
([statsRoute] as RouteRegistry[]).forEach((registry) => {
|
||||||
if (!(isDev() ? registry.inDevelopment : registry.inProduction)) return;
|
if (!(isDev() ? registry.inDevelopment : registry.inProduction)) return;
|
||||||
|
|
||||||
app.get(registry.route, async (req, res) => {
|
app.get(registry.route, async (req, res) => {
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
export type PossiblyPromise<Type> = Promise<Type> | Type;
|
||||||
@@ -2,6 +2,142 @@
|
|||||||
# yarn lockfile v1
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"@algolia/[email protected]":
|
||||||
|
version "1.9.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz#1d56482a768c33aae0868c8533049e02e8961be7"
|
||||||
|
integrity sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==
|
||||||
|
dependencies:
|
||||||
|
"@algolia/autocomplete-plugin-algolia-insights" "1.9.3"
|
||||||
|
"@algolia/autocomplete-shared" "1.9.3"
|
||||||
|
|
||||||
|
"@algolia/[email protected]":
|
||||||
|
version "1.9.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz#9b7f8641052c8ead6d66c1623d444cbe19dde587"
|
||||||
|
integrity sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==
|
||||||
|
dependencies:
|
||||||
|
"@algolia/autocomplete-shared" "1.9.3"
|
||||||
|
|
||||||
|
"@algolia/[email protected]":
|
||||||
|
version "1.9.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz#64cca4a4304cfcad2cf730e83067e0c1b2f485da"
|
||||||
|
integrity sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==
|
||||||
|
dependencies:
|
||||||
|
"@algolia/autocomplete-shared" "1.9.3"
|
||||||
|
|
||||||
|
"@algolia/[email protected]":
|
||||||
|
version "1.9.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz#2e22e830d36f0a9cf2c0ccd3c7f6d59435b77dfa"
|
||||||
|
integrity sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==
|
||||||
|
|
||||||
|
"@algolia/[email protected]":
|
||||||
|
version "4.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.18.0.tgz#7bc0c9d8d346ed01384f4cf0dfaf6ba29ad5c20c"
|
||||||
|
integrity sha512-rUAs49NLlO8LVLgGzM4cLkw8NJLKguQLgvFmBEe3DyzlinoqxzQMHfKZs6TSq4LZfw/z8qHvRo8NcTAAUJQLcw==
|
||||||
|
dependencies:
|
||||||
|
"@algolia/cache-common" "4.18.0"
|
||||||
|
|
||||||
|
"@algolia/[email protected]":
|
||||||
|
version "4.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.18.0.tgz#aac33afac53e191c595d14a4bb7e6d81aae4836f"
|
||||||
|
integrity sha512-BmxsicMR4doGbeEXQu8yqiGmiyvpNvejYJtQ7rvzttEAMxOPoWEHrWyzBQw4x7LrBY9pMrgv4ZlUaF8PGzewHg==
|
||||||
|
|
||||||
|
"@algolia/[email protected]":
|
||||||
|
version "4.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.18.0.tgz#9a40294c734819724a1b4e86afd5a7d4be9bcc2f"
|
||||||
|
integrity sha512-evD4dA1nd5HbFdufBxLqlJoob7E2ozlqJZuV3YlirNx5Na4q1LckIuzjNYZs2ddLzuTc/Xd5O3Ibf7OwPskHxw==
|
||||||
|
dependencies:
|
||||||
|
"@algolia/cache-common" "4.18.0"
|
||||||
|
|
||||||
|
"@algolia/[email protected]":
|
||||||
|
version "4.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.18.0.tgz#202d9e06b41e06e45cb919107bed0a65106883cc"
|
||||||
|
integrity sha512-XsDnlROr3+Z1yjxBJjUMfMazi1V155kVdte6496atvBgOEtwCzTs3A+qdhfsAnGUvaYfBrBkL0ThnhMIBCGcew==
|
||||||
|
dependencies:
|
||||||
|
"@algolia/client-common" "4.18.0"
|
||||||
|
"@algolia/client-search" "4.18.0"
|
||||||
|
"@algolia/transporter" "4.18.0"
|
||||||
|
|
||||||
|
"@algolia/[email protected]":
|
||||||
|
version "4.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.18.0.tgz#030b026bd9c13cb15437e35e4456bde25b0f1298"
|
||||||
|
integrity sha512-chEUSN4ReqU7uRQ1C8kDm0EiPE+eJeAXiWcBwLhEynfNuTfawN9P93rSZktj7gmExz0C8XmkbBU19IQ05wCNrQ==
|
||||||
|
dependencies:
|
||||||
|
"@algolia/client-common" "4.18.0"
|
||||||
|
"@algolia/client-search" "4.18.0"
|
||||||
|
"@algolia/requester-common" "4.18.0"
|
||||||
|
"@algolia/transporter" "4.18.0"
|
||||||
|
|
||||||
|
"@algolia/[email protected]":
|
||||||
|
version "4.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.18.0.tgz#e080c393e1becdd5f5f008815c57d3248d3a8483"
|
||||||
|
integrity sha512-7N+soJFP4wn8tjTr3MSUT/U+4xVXbz4jmeRfWfVAzdAbxLAQbHa0o/POSdTvQ8/02DjCLelloZ1bb4ZFVKg7Wg==
|
||||||
|
dependencies:
|
||||||
|
"@algolia/requester-common" "4.18.0"
|
||||||
|
"@algolia/transporter" "4.18.0"
|
||||||
|
|
||||||
|
"@algolia/[email protected]":
|
||||||
|
version "4.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.18.0.tgz#9042ce2773120158ad25e1dfb28d706cebb48dc2"
|
||||||
|
integrity sha512-+PeCjODbxtamHcPl+couXMeHEefpUpr7IHftj4Y4Nia1hj8gGq4VlIcqhToAw8YjLeCTfOR7r7xtj3pJcYdP8A==
|
||||||
|
dependencies:
|
||||||
|
"@algolia/client-common" "4.18.0"
|
||||||
|
"@algolia/requester-common" "4.18.0"
|
||||||
|
"@algolia/transporter" "4.18.0"
|
||||||
|
|
||||||
|
"@algolia/[email protected]":
|
||||||
|
version "4.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.18.0.tgz#83b37aacbe254fd7892154fe7a8f0395bd01c682"
|
||||||
|
integrity sha512-F9xzQXTjm6UuZtnsLIew6KSraXQ0AzS/Ee+OD+mQbtcA/K1sg89tqb8TkwjtiYZ0oij13u3EapB3gPZwm+1Y6g==
|
||||||
|
dependencies:
|
||||||
|
"@algolia/client-common" "4.18.0"
|
||||||
|
"@algolia/requester-common" "4.18.0"
|
||||||
|
"@algolia/transporter" "4.18.0"
|
||||||
|
|
||||||
|
"@algolia/[email protected]":
|
||||||
|
version "4.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.18.0.tgz#0e6a14e8b91fcb7861595169e1ca57cf219f8255"
|
||||||
|
integrity sha512-46etYgSlkoKepkMSyaoriSn2JDgcrpc/nkOgou/lm0y17GuMl9oYZxwKKTSviLKI5Irk9nSKGwnBTQYwXOYdRg==
|
||||||
|
|
||||||
|
"@algolia/[email protected]":
|
||||||
|
version "4.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.18.0.tgz#3636e4b3e2154ee2ee2db2e5be2857203c9f7047"
|
||||||
|
integrity sha512-3P3VUYMl9CyJbi/UU1uUNlf6Z8N2ltW3Oqhq/nR7vH0CjWv32YROq3iGWGxB2xt3aXobdUPXs6P0tHSKRmNA6g==
|
||||||
|
dependencies:
|
||||||
|
"@algolia/logger-common" "4.18.0"
|
||||||
|
|
||||||
|
"@algolia/[email protected]":
|
||||||
|
version "4.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.18.0.tgz#90ac575946e0ab196cdd87593b3fed563a32a9af"
|
||||||
|
integrity sha512-/AcWHOBub2U4TE/bPi4Gz1XfuLK6/7dj4HJG+Z2SfQoS1RjNLshZclU3OoKIkFp8D2NC7+BNsPvr9cPLyW8nyQ==
|
||||||
|
dependencies:
|
||||||
|
"@algolia/requester-common" "4.18.0"
|
||||||
|
|
||||||
|
"@algolia/[email protected]":
|
||||||
|
version "4.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.18.0.tgz#12984aa4b10679ffa863536ceeae33cdd0ee4d42"
|
||||||
|
integrity sha512-xlT8R1qYNRBCi1IYLsx7uhftzdfsLPDGudeQs+xvYB4sQ3ya7+ppolB/8m/a4F2gCkEO6oxpp5AGemM7kD27jA==
|
||||||
|
|
||||||
|
"@algolia/[email protected]":
|
||||||
|
version "4.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.18.0.tgz#8046b141c784cc7778bcf51e8a7888cce463754b"
|
||||||
|
integrity sha512-TGfwj9aeTVgOUhn5XrqBhwUhUUDnGIKlI0kCBMdR58XfXcfdwomka+CPIgThRbfYw04oQr31A6/95ZH2QVJ9UQ==
|
||||||
|
dependencies:
|
||||||
|
"@algolia/requester-common" "4.18.0"
|
||||||
|
|
||||||
|
"@algolia/[email protected]":
|
||||||
|
version "4.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.18.0.tgz#18de645c20fc5703196b2ad4fec55e98c315a1d8"
|
||||||
|
integrity sha512-xbw3YRUGtXQNG1geYFEDDuFLZt4Z8YNKbamHPkzr3rWc6qp4/BqEeXcI2u/P/oMq2yxtXgMxrCxOPA8lyIe5jw==
|
||||||
|
dependencies:
|
||||||
|
"@algolia/cache-common" "4.18.0"
|
||||||
|
"@algolia/logger-common" "4.18.0"
|
||||||
|
"@algolia/requester-common" "4.18.0"
|
||||||
|
|
||||||
|
"@babel/parser@^7.20.15", "@babel/parser@^7.21.3":
|
||||||
|
version "7.22.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea"
|
||||||
|
integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==
|
||||||
|
|
||||||
"@discordjs/builders@^1.6.3":
|
"@discordjs/builders@^1.6.3":
|
||||||
version "1.6.3"
|
version "1.6.3"
|
||||||
resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-1.6.3.tgz#994b4fe57e77b47096f74bb5a1f664870a930a43"
|
resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-1.6.3.tgz#994b4fe57e77b47096f74bb5a1f664870a930a43"
|
||||||
@@ -61,120 +197,258 @@
|
|||||||
tslib "^2.5.0"
|
tslib "^2.5.0"
|
||||||
ws "^8.13.0"
|
ws "^8.13.0"
|
||||||
|
|
||||||
|
"@docsearch/[email protected]", "@docsearch/css@^3.5.0":
|
||||||
|
version "3.5.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.5.1.tgz#4adf9884735bbfea621c3716e80ea97baa419b73"
|
||||||
|
integrity sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA==
|
||||||
|
|
||||||
|
"@docsearch/js@^3.5.0":
|
||||||
|
version "3.5.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@docsearch/js/-/js-3.5.1.tgz#6d8de3b4fcf7de94462c0e592e333efa9ebbbabd"
|
||||||
|
integrity sha512-EXi8de5njxgP6TV3N9ytnGRLG9zmBNTEZjR4VzwPcpPLbZxxTLG2gaFyJyKiFVQxHW/DPlMrDJA3qoRRGEkgZw==
|
||||||
|
dependencies:
|
||||||
|
"@docsearch/react" "3.5.1"
|
||||||
|
preact "^10.0.0"
|
||||||
|
|
||||||
|
"@docsearch/[email protected]":
|
||||||
|
version "3.5.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.5.1.tgz#35f4a75f948211d8bb6830d2147c575f96a85274"
|
||||||
|
integrity sha512-t5mEODdLzZq4PTFAm/dvqcvZFdPDMdfPE5rJS5SC8OUq9mPzxEy6b+9THIqNM9P0ocCb4UC5jqBrxKclnuIbzQ==
|
||||||
|
dependencies:
|
||||||
|
"@algolia/autocomplete-core" "1.9.3"
|
||||||
|
"@algolia/autocomplete-preset-algolia" "1.9.3"
|
||||||
|
"@docsearch/css" "3.5.1"
|
||||||
|
algoliasearch "^4.0.0"
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd"
|
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd"
|
||||||
integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==
|
integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.11.tgz#fa6f0cc7105367cb79cc0a8bf32bf50cb1673e45"
|
||||||
|
integrity sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d"
|
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d"
|
||||||
integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==
|
integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.11.tgz#ae84a410696c9f549a15be94eaececb860bacacb"
|
||||||
|
integrity sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1"
|
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1"
|
||||||
integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==
|
integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.11.tgz#0e58360bbc789ad0d68174d32ba20e678c2a16b6"
|
||||||
|
integrity sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276"
|
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276"
|
||||||
integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==
|
integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.11.tgz#fcdcd2ef76ca656540208afdd84f284072f0d1f9"
|
||||||
|
integrity sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb"
|
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb"
|
||||||
integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==
|
integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.11.tgz#c5ac602ec0504a8ff81e876bc8a9811e94d69d37"
|
||||||
|
integrity sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2"
|
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2"
|
||||||
integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==
|
integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.11.tgz#7012fb06ee3e6e0d5560664a65f3fefbcc46db2e"
|
||||||
|
integrity sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4"
|
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4"
|
||||||
integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==
|
integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.11.tgz#c5de1199f70e1f97d5c8fca51afa9bf9a2af5969"
|
||||||
|
integrity sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb"
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb"
|
||||||
integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==
|
integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.11.tgz#2a6d3a74e0b8b5f294e22b4515b29f76ebd42660"
|
||||||
|
integrity sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a"
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a"
|
||||||
integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==
|
integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.11.tgz#5175bd61b793b436e4aece6328aa0d9be07751e1"
|
||||||
|
integrity sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a"
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a"
|
||||||
integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==
|
integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.11.tgz#20ee6cfd65a398875f321a485e7b2278e5f6f67b"
|
||||||
|
integrity sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72"
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72"
|
||||||
integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==
|
integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.11.tgz#8e7b251dede75083bf44508dab5edce3f49d052b"
|
||||||
|
integrity sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289"
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289"
|
||||||
integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==
|
integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.11.tgz#a3125eb48538ac4932a9d05089b157f94e443165"
|
||||||
|
integrity sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7"
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7"
|
||||||
integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==
|
integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.11.tgz#842abadb7a0995bd539adee2be4d681b68279499"
|
||||||
|
integrity sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09"
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09"
|
||||||
integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==
|
integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.11.tgz#7ce6e6cee1c72d5b4d2f4f8b6fcccf4a9bea0e28"
|
||||||
|
integrity sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829"
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829"
|
||||||
integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==
|
integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.11.tgz#98fbc794363d02ded07d300df2e535650b297b96"
|
||||||
|
integrity sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4"
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4"
|
||||||
integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==
|
integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.11.tgz#f8458ec8cf74c8274e4cacd00744d8446cac52eb"
|
||||||
|
integrity sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462"
|
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462"
|
||||||
integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==
|
integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.11.tgz#a7b2f991b8293748a7be42eac1c4325faf0c7cca"
|
||||||
|
integrity sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691"
|
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691"
|
||||||
integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==
|
integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.11.tgz#3e50923de84c54008f834221130fd23646072b2f"
|
||||||
|
integrity sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273"
|
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273"
|
||||||
integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==
|
integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.11.tgz#ae47a550b0cd395de03606ecfba03cc96c7c19e2"
|
||||||
|
integrity sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f"
|
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f"
|
||||||
integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==
|
integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.11.tgz#05d364582b7862d7fbf4698ef43644f7346dcfcc"
|
||||||
|
integrity sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03"
|
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03"
|
||||||
integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==
|
integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.11.tgz#a3372095a4a1939da672156a3c104f8ce85ee616"
|
||||||
|
integrity sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==
|
||||||
|
|
||||||
"@esbuild/[email protected]":
|
"@esbuild/[email protected]":
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061"
|
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061"
|
||||||
integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==
|
integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==
|
||||||
|
|
||||||
|
"@esbuild/[email protected]":
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.11.tgz#6526c7e1b40d5b9f0a222c6b767c22f6fb97aa57"
|
||||||
|
integrity sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==
|
||||||
|
|
||||||
|
"@jridgewell/sourcemap-codec@^1.4.13":
|
||||||
|
version "1.4.15"
|
||||||
|
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
|
||||||
|
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
|
||||||
|
|
||||||
"@radix-ui/colors@^0.1.8":
|
"@radix-ui/colors@^0.1.8":
|
||||||
version "0.1.8"
|
version "0.1.9"
|
||||||
resolved "https://registry.yarnpkg.com/@radix-ui/colors/-/colors-0.1.8.tgz#b08c62536fc462a87632165fb28e9b18f9bd047e"
|
resolved "https://registry.yarnpkg.com/@radix-ui/colors/-/colors-0.1.9.tgz#aad732ecc4ce1018adcb3aedd3ce3c573c2256cc"
|
||||||
integrity sha512-jwRMXYwC0hUo0mv6wGpuw254Pd9p/R6Td5xsRpOmaWkUHlooNWqVcadgyzlRumMq3xfOTXwJReU0Jv+EIy4Jbw==
|
integrity sha512-Vxq944ErPJsdVepjEUhOLO9ApUVOocA63knc+V2TkJ09D/AVOjiMIgkca/7VoYgODcla0qbSIBjje0SMfZMbAw==
|
||||||
|
|
||||||
"@resvg/[email protected]":
|
"@resvg/[email protected]":
|
||||||
version "2.4.1"
|
version "2.4.1"
|
||||||
@@ -356,9 +630,9 @@
|
|||||||
integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==
|
integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==
|
||||||
|
|
||||||
"@types/node@*", "@types/node@^20.2.1":
|
"@types/node@*", "@types/node@^20.2.1":
|
||||||
version "20.3.0"
|
version "20.3.3"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.0.tgz#719498898d5defab83c3560f45d8498f58d11938"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.3.tgz#329842940042d2b280897150e023e604d11657d6"
|
||||||
integrity sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ==
|
integrity sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==
|
||||||
|
|
||||||
"@types/prop-types@*":
|
"@types/prop-types@*":
|
||||||
version "15.7.5"
|
version "15.7.5"
|
||||||
@@ -376,9 +650,9 @@
|
|||||||
integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
|
integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
|
||||||
|
|
||||||
"@types/react@^18.2.7":
|
"@types/react@^18.2.7":
|
||||||
version "18.2.11"
|
version "18.2.14"
|
||||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.11.tgz#168f7dbb421ed214fcf8c5fe8e587765a3e02fd1"
|
resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.14.tgz#fa7a6fecf1ce35ca94e74874f70c56ce88f7a127"
|
||||||
integrity sha512-+hsJr9hmwyDecSMQAmX7drgbDpyE+EgSF6t7+5QEBAn1tQK7kl1vWZ4iRf6SjQ8lk7dyEULxUmZOIpN0W5baZA==
|
integrity sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/prop-types" "*"
|
"@types/prop-types" "*"
|
||||||
"@types/scheduler" "*"
|
"@types/scheduler" "*"
|
||||||
@@ -406,6 +680,11 @@
|
|||||||
"@types/mime" "*"
|
"@types/mime" "*"
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
|
"@types/web-bluetooth@^0.0.17":
|
||||||
|
version "0.0.17"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz#5c9f3c617f64a9735d7b72a7cc671e166d900c40"
|
||||||
|
integrity sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==
|
||||||
|
|
||||||
"@types/ws@^8.5.4":
|
"@types/ws@^8.5.4":
|
||||||
version "8.5.5"
|
version "8.5.5"
|
||||||
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.5.tgz#af587964aa06682702ee6dcbc7be41a80e4b28eb"
|
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.5.tgz#af587964aa06682702ee6dcbc7be41a80e4b28eb"
|
||||||
@@ -413,11 +692,142 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
|
"@vitejs/plugin-vue@^4.2.3":
|
||||||
|
version "4.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz#ee0b6dfcc62fe65364e6395bf38fa2ba10bb44b6"
|
||||||
|
integrity sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==
|
||||||
|
|
||||||
"@vladfrangu/async_event_emitter@^2.2.1":
|
"@vladfrangu/async_event_emitter@^2.2.1":
|
||||||
version "2.2.2"
|
version "2.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz#84c5a3f8d648842cec5cc649b88df599af32ed88"
|
resolved "https://registry.yarnpkg.com/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz#84c5a3f8d648842cec5cc649b88df599af32ed88"
|
||||||
integrity sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==
|
integrity sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==
|
||||||
|
|
||||||
|
"@vue/[email protected]":
|
||||||
|
version "3.3.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.4.tgz#7fbf591c1c19e1acd28ffd284526e98b4f581128"
|
||||||
|
integrity sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==
|
||||||
|
dependencies:
|
||||||
|
"@babel/parser" "^7.21.3"
|
||||||
|
"@vue/shared" "3.3.4"
|
||||||
|
estree-walker "^2.0.2"
|
||||||
|
source-map-js "^1.0.2"
|
||||||
|
|
||||||
|
"@vue/[email protected]":
|
||||||
|
version "3.3.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz#f56e09b5f4d7dc350f981784de9713d823341151"
|
||||||
|
integrity sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==
|
||||||
|
dependencies:
|
||||||
|
"@vue/compiler-core" "3.3.4"
|
||||||
|
"@vue/shared" "3.3.4"
|
||||||
|
|
||||||
|
"@vue/[email protected]":
|
||||||
|
version "3.3.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz#b19d942c71938893535b46226d602720593001df"
|
||||||
|
integrity sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==
|
||||||
|
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"
|
||||||
|
|
||||||
|
"@vue/[email protected]":
|
||||||
|
version "3.3.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz#9d1379abffa4f2b0cd844174ceec4a9721138777"
|
||||||
|
integrity sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==
|
||||||
|
dependencies:
|
||||||
|
"@vue/compiler-dom" "3.3.4"
|
||||||
|
"@vue/shared" "3.3.4"
|
||||||
|
|
||||||
|
"@vue/devtools-api@^6.5.0":
|
||||||
|
version "6.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz#98b99425edee70b4c992692628fa1ea2c1e57d07"
|
||||||
|
integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==
|
||||||
|
|
||||||
|
"@vue/[email protected]":
|
||||||
|
version "3.3.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz#52908476e34d6a65c6c21cd2722d41ed8ae51929"
|
||||||
|
integrity sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==
|
||||||
|
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"
|
||||||
|
|
||||||
|
"@vue/[email protected]":
|
||||||
|
version "3.3.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.4.tgz#a27a29c6cd17faba5a0e99fbb86ee951653e2253"
|
||||||
|
integrity sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==
|
||||||
|
dependencies:
|
||||||
|
"@vue/shared" "3.3.4"
|
||||||
|
|
||||||
|
"@vue/[email protected]":
|
||||||
|
version "3.3.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.4.tgz#4bb33872bbb583721b340f3088888394195967d1"
|
||||||
|
integrity sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==
|
||||||
|
dependencies:
|
||||||
|
"@vue/reactivity" "3.3.4"
|
||||||
|
"@vue/shared" "3.3.4"
|
||||||
|
|
||||||
|
"@vue/[email protected]":
|
||||||
|
version "3.3.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz#992f2579d0ed6ce961f47bbe9bfe4b6791251566"
|
||||||
|
integrity sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==
|
||||||
|
dependencies:
|
||||||
|
"@vue/runtime-core" "3.3.4"
|
||||||
|
"@vue/shared" "3.3.4"
|
||||||
|
csstype "^3.1.1"
|
||||||
|
|
||||||
|
"@vue/[email protected]":
|
||||||
|
version "3.3.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.4.tgz#ea46594b795d1536f29bc592dd0f6655f7ea4c4c"
|
||||||
|
integrity sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==
|
||||||
|
dependencies:
|
||||||
|
"@vue/compiler-ssr" "3.3.4"
|
||||||
|
"@vue/shared" "3.3.4"
|
||||||
|
|
||||||
|
"@vue/[email protected]":
|
||||||
|
version "3.3.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.4.tgz#06e83c5027f464eef861c329be81454bc8b70780"
|
||||||
|
integrity sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==
|
||||||
|
|
||||||
|
"@vueuse/[email protected]", "@vueuse/core@^10.1.2":
|
||||||
|
version "10.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-10.2.1.tgz#a62b54cdaf1496138a9f8a7df7f9d644892b421f"
|
||||||
|
integrity sha512-c441bfMbkAwTNwVRHQ0zdYZNETK//P84rC01aP2Uy/aRFCiie9NE/k9KdIXbno0eDYP5NPUuWv0aA/I4Unr/7w==
|
||||||
|
dependencies:
|
||||||
|
"@types/web-bluetooth" "^0.0.17"
|
||||||
|
"@vueuse/metadata" "10.2.1"
|
||||||
|
"@vueuse/shared" "10.2.1"
|
||||||
|
vue-demi ">=0.14.5"
|
||||||
|
|
||||||
|
"@vueuse/integrations@^10.1.2":
|
||||||
|
version "10.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vueuse/integrations/-/integrations-10.2.1.tgz#abc44b35f909f6b5e1a66a2d69a257bb4b087536"
|
||||||
|
integrity sha512-FDP5lni+z9FjHE9H3xuvwSjoRV9U8jmDvJpmHPCBjUgPGYRynwb60eHWXCFJXLUtb4gSIHy0e+iaEbrKdalCkQ==
|
||||||
|
dependencies:
|
||||||
|
"@vueuse/core" "10.2.1"
|
||||||
|
"@vueuse/shared" "10.2.1"
|
||||||
|
vue-demi ">=0.14.5"
|
||||||
|
|
||||||
|
"@vueuse/[email protected]":
|
||||||
|
version "10.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-10.2.1.tgz#0865066def62ed97629c417ec79678d508d22934"
|
||||||
|
integrity sha512-3Gt68mY/i6bQvFqx7cuGBzrCCQu17OBaGWS5JdwISpMsHnMKKjC2FeB5OAfMcCQ0oINfADP3i9A4PPRo0peHdQ==
|
||||||
|
|
||||||
|
"@vueuse/[email protected]":
|
||||||
|
version "10.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-10.2.1.tgz#0fd0a5dd014b7713b7fe03347b30fad69bb15b30"
|
||||||
|
integrity sha512-QWHq2bSuGptkcxx4f4M/fBYC3Y8d3M2UYyLsyzoPgEoVzJURQ0oJeWXu79OiLlBb8gTKkqe4mO85T/sf39mmiw==
|
||||||
|
dependencies:
|
||||||
|
vue-demi ">=0.14.5"
|
||||||
|
|
||||||
accepts@~1.3.8:
|
accepts@~1.3.8:
|
||||||
version "1.3.8"
|
version "1.3.8"
|
||||||
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
|
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
|
||||||
@@ -426,6 +836,31 @@ accepts@~1.3.8:
|
|||||||
mime-types "~2.1.34"
|
mime-types "~2.1.34"
|
||||||
negotiator "0.6.3"
|
negotiator "0.6.3"
|
||||||
|
|
||||||
|
algoliasearch@^4.0.0:
|
||||||
|
version "4.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.18.0.tgz#1183ad0384a5b2c14f381c3a361da611acc8edb3"
|
||||||
|
integrity sha512-pCuVxC1SVcpc08ENH32T4sLKSyzoU7TkRIDBMwSLfIiW+fq4znOmWDkAygHZ6pRcO9I1UJdqlfgnV7TRj+MXrA==
|
||||||
|
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"
|
||||||
|
|
||||||
|
ansi-sequence-parser@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz#4d790f31236ac20366b23b3916b789e1bde39aed"
|
||||||
|
integrity sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==
|
||||||
|
|
||||||
[email protected]:
|
[email protected]:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
|
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
|
||||||
@@ -459,6 +894,11 @@ [email protected]:
|
|||||||
type-is "~1.6.18"
|
type-is "~1.6.18"
|
||||||
unpipe "1.0.0"
|
unpipe "1.0.0"
|
||||||
|
|
||||||
|
[email protected]:
|
||||||
|
version "4.0.0-beta.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/body-scroll-lock/-/body-scroll-lock-4.0.0-beta.0.tgz#4f78789d10e6388115c0460cd6d7d4dd2bbc4f7e"
|
||||||
|
integrity sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==
|
||||||
|
|
||||||
busboy@^1.6.0:
|
busboy@^1.6.0:
|
||||||
version "1.6.0"
|
version "1.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893"
|
resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893"
|
||||||
@@ -535,7 +975,7 @@ css-to-react-native@^3.0.0:
|
|||||||
css-color-keywords "^1.0.0"
|
css-color-keywords "^1.0.0"
|
||||||
postcss-value-parser "^4.0.2"
|
postcss-value-parser "^4.0.2"
|
||||||
|
|
||||||
csstype@^3.0.2:
|
csstype@^3.0.2, csstype@^3.1.1:
|
||||||
version "3.1.2"
|
version "3.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
|
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
|
||||||
integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
|
integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
|
||||||
@@ -558,9 +998,9 @@ [email protected]:
|
|||||||
integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
|
integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
|
||||||
|
|
||||||
discord-api-types@^0.37.41:
|
discord-api-types@^0.37.41:
|
||||||
version "0.37.43"
|
version "0.37.47"
|
||||||
resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.43.tgz#94ae2b949e3aa092f5e93b0f3cf8e6620583749c"
|
resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.47.tgz#d622d5f5629a71ca2cd534442ae2800844e1888d"
|
||||||
integrity sha512-bBhDWU3TF9KADxR/mHp1K4Bvu/LRtFQdGyBjADu4e66F3ZnD4kp12W/SJCttIaCcMXzPV3sfty6eDGRNRph51Q==
|
integrity sha512-rNif8IAv6duS2z47BMXq/V9kkrLfkAoiwpFY3sLxxbyKprk065zqf3HLTg4bEoxRSmi+Lhc7yqGDrG8C3j8GFA==
|
||||||
|
|
||||||
discord.js@^14.9.0:
|
discord.js@^14.9.0:
|
||||||
version "14.11.0"
|
version "14.11.0"
|
||||||
@@ -597,7 +1037,7 @@ encodeurl@~1.0.2:
|
|||||||
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
|
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
|
||||||
integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
|
integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
|
||||||
|
|
||||||
esbuild@^0.17.19:
|
esbuild@^0.17.5:
|
||||||
version "0.17.19"
|
version "0.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955"
|
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955"
|
||||||
integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==
|
integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==
|
||||||
@@ -625,11 +1065,44 @@ esbuild@^0.17.19:
|
|||||||
"@esbuild/win32-ia32" "0.17.19"
|
"@esbuild/win32-ia32" "0.17.19"
|
||||||
"@esbuild/win32-x64" "0.17.19"
|
"@esbuild/win32-x64" "0.17.19"
|
||||||
|
|
||||||
|
esbuild@^0.18.10:
|
||||||
|
version "0.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.11.tgz#cbf94dc3359d57f600a0dbf281df9b1d1b4a156e"
|
||||||
|
integrity sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==
|
||||||
|
optionalDependencies:
|
||||||
|
"@esbuild/android-arm" "0.18.11"
|
||||||
|
"@esbuild/android-arm64" "0.18.11"
|
||||||
|
"@esbuild/android-x64" "0.18.11"
|
||||||
|
"@esbuild/darwin-arm64" "0.18.11"
|
||||||
|
"@esbuild/darwin-x64" "0.18.11"
|
||||||
|
"@esbuild/freebsd-arm64" "0.18.11"
|
||||||
|
"@esbuild/freebsd-x64" "0.18.11"
|
||||||
|
"@esbuild/linux-arm" "0.18.11"
|
||||||
|
"@esbuild/linux-arm64" "0.18.11"
|
||||||
|
"@esbuild/linux-ia32" "0.18.11"
|
||||||
|
"@esbuild/linux-loong64" "0.18.11"
|
||||||
|
"@esbuild/linux-mips64el" "0.18.11"
|
||||||
|
"@esbuild/linux-ppc64" "0.18.11"
|
||||||
|
"@esbuild/linux-riscv64" "0.18.11"
|
||||||
|
"@esbuild/linux-s390x" "0.18.11"
|
||||||
|
"@esbuild/linux-x64" "0.18.11"
|
||||||
|
"@esbuild/netbsd-x64" "0.18.11"
|
||||||
|
"@esbuild/openbsd-x64" "0.18.11"
|
||||||
|
"@esbuild/sunos-x64" "0.18.11"
|
||||||
|
"@esbuild/win32-arm64" "0.18.11"
|
||||||
|
"@esbuild/win32-ia32" "0.18.11"
|
||||||
|
"@esbuild/win32-x64" "0.18.11"
|
||||||
|
|
||||||
escape-html@^1.0.3, escape-html@~1.0.3:
|
escape-html@^1.0.3, escape-html@~1.0.3:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
|
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
|
||||||
integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
|
integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
|
||||||
|
|
||||||
|
estree-walker@^2.0.2:
|
||||||
|
version "2.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
|
||||||
|
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
|
||||||
|
|
||||||
etag@~1.8.1:
|
etag@~1.8.1:
|
||||||
version "1.8.1"
|
version "1.8.1"
|
||||||
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
|
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
|
||||||
@@ -704,6 +1177,13 @@ [email protected]:
|
|||||||
statuses "2.0.1"
|
statuses "2.0.1"
|
||||||
unpipe "~1.0.0"
|
unpipe "~1.0.0"
|
||||||
|
|
||||||
|
focus-trap@^7.4.3:
|
||||||
|
version "7.4.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-7.4.3.tgz#a3dae73d44df359eb92bbf37b18e173e813b16c5"
|
||||||
|
integrity sha512-BgSSbK4GPnS2VbtZ50VtOv1Sti6DIkj3+LkVjiWMNjLeAp1SH1UlLx3ULu/DCu4vq5R4/uvTm+zrvsMsuYmGLg==
|
||||||
|
dependencies:
|
||||||
|
tabbable "^6.1.2"
|
||||||
|
|
||||||
[email protected]:
|
[email protected]:
|
||||||
version "0.2.0"
|
version "0.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
|
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
|
||||||
@@ -714,6 +1194,11 @@ [email protected]:
|
|||||||
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
|
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
|
||||||
integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
|
integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
|
||||||
|
|
||||||
|
fsevents@~2.3.2:
|
||||||
|
version "2.3.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
|
||||||
|
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
|
||||||
|
|
||||||
function-bind@^1.1.1:
|
function-bind@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
||||||
@@ -794,6 +1279,11 @@ [email protected]:
|
|||||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||||
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
||||||
|
|
||||||
|
jsonc-parser@^3.2.0:
|
||||||
|
version "3.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76"
|
||||||
|
integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==
|
||||||
|
|
||||||
linebreak@^1.1.0:
|
linebreak@^1.1.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/linebreak/-/linebreak-1.1.0.tgz#831cf378d98bced381d8ab118f852bd50d81e46b"
|
resolved "https://registry.yarnpkg.com/linebreak/-/linebreak-1.1.0.tgz#831cf378d98bced381d8ab118f852bd50d81e46b"
|
||||||
@@ -819,6 +1309,18 @@ loose-envify@^1.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
js-tokens "^3.0.0 || ^4.0.0"
|
js-tokens "^3.0.0 || ^4.0.0"
|
||||||
|
|
||||||
|
magic-string@^0.30.0:
|
||||||
|
version "0.30.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.0.tgz#fd58a4748c5c4547338a424e90fa5dd17f4de529"
|
||||||
|
integrity sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==
|
||||||
|
dependencies:
|
||||||
|
"@jridgewell/sourcemap-codec" "^1.4.13"
|
||||||
|
|
||||||
|
[email protected]:
|
||||||
|
version "8.11.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/mark.js/-/mark.js-8.11.1.tgz#180f1f9ebef8b0e638e4166ad52db879beb2ffc5"
|
||||||
|
integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==
|
||||||
|
|
||||||
markdown-escape@^2.0.0:
|
markdown-escape@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/markdown-escape/-/markdown-escape-2.0.0.tgz#44484d30d7845b91575c77fd8898f23a0a6f890c"
|
resolved "https://registry.yarnpkg.com/markdown-escape/-/markdown-escape-2.0.0.tgz#44484d30d7845b91575c77fd8898f23a0a6f890c"
|
||||||
@@ -856,6 +1358,11 @@ [email protected]:
|
|||||||
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
|
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
|
||||||
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
|
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
|
||||||
|
|
||||||
|
minisearch@^6.1.0:
|
||||||
|
version "6.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/minisearch/-/minisearch-6.1.0.tgz#6e74e743dbd0e88fa5ca52fef2391e0aa7055252"
|
||||||
|
integrity sha512-PNxA/X8pWk+TiqPbsoIYH0GQ5Di7m6326/lwU/S4mlo4wGQddIcf/V//1f9TB0V4j59b57b+HZxt8h3iMROGvg==
|
||||||
|
|
||||||
[email protected]:
|
[email protected]:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||||
@@ -866,6 +1373,11 @@ [email protected]:
|
|||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
|
||||||
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
||||||
|
|
||||||
|
nanoid@^3.3.6:
|
||||||
|
version "3.3.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
|
||||||
|
integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
|
||||||
|
|
||||||
[email protected]:
|
[email protected]:
|
||||||
version "0.6.3"
|
version "0.6.3"
|
||||||
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
|
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
|
||||||
@@ -911,11 +1423,30 @@ peek-readable@^5.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-5.0.0.tgz#7ead2aff25dc40458c60347ea76cfdfd63efdfec"
|
resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-5.0.0.tgz#7ead2aff25dc40458c60347ea76cfdfd63efdfec"
|
||||||
integrity sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==
|
integrity sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==
|
||||||
|
|
||||||
|
picocolors@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
|
||||||
|
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
|
||||||
|
|
||||||
postcss-value-parser@^4.0.2, postcss-value-parser@^4.2.0:
|
postcss-value-parser@^4.0.2, postcss-value-parser@^4.2.0:
|
||||||
version "4.2.0"
|
version "4.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
|
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
|
||||||
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
|
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
|
||||||
|
|
||||||
|
postcss@^8.1.10, postcss@^8.4.23:
|
||||||
|
version "8.4.24"
|
||||||
|
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df"
|
||||||
|
integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==
|
||||||
|
dependencies:
|
||||||
|
nanoid "^3.3.6"
|
||||||
|
picocolors "^1.0.0"
|
||||||
|
source-map-js "^1.0.2"
|
||||||
|
|
||||||
|
preact@^10.0.0:
|
||||||
|
version "10.15.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/preact/-/preact-10.15.1.tgz#a1de60c9fc0c79a522d969c65dcaddc5d994eede"
|
||||||
|
integrity sha512-qs2ansoQEwzNiV5eAcRT1p1EC/dmEzaATVDJNiB3g2sRDWdA7b7MurXdJjB2+/WQktGWZwxvDrnuRFbWuIr64g==
|
||||||
|
|
||||||
proxy-addr@~2.0.7:
|
proxy-addr@~2.0.7:
|
||||||
version "2.0.7"
|
version "2.0.7"
|
||||||
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
|
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
|
||||||
@@ -969,6 +1500,13 @@ readable-web-to-node-stream@^3.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
readable-stream "^3.6.0"
|
readable-stream "^3.6.0"
|
||||||
|
|
||||||
|
rollup@^3.21.0:
|
||||||
|
version "3.26.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.26.0.tgz#9f2e0316a4ca641911cefd8515c562a9124e6130"
|
||||||
|
integrity sha512-YzJH0eunH2hr3knvF3i6IkLO/jTjAEwU4HoMUbQl4//Tnl3ou0e7P5SjxdDr8HQJdeUJShlbEHXrrnEHy1l7Yg==
|
||||||
|
optionalDependencies:
|
||||||
|
fsevents "~2.3.2"
|
||||||
|
|
||||||
[email protected], safe-buffer@~5.2.0:
|
[email protected], safe-buffer@~5.2.0:
|
||||||
version "5.2.1"
|
version "5.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
||||||
@@ -1028,6 +1566,16 @@ [email protected]:
|
|||||||
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
|
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
|
||||||
integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
|
integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
|
||||||
|
|
||||||
|
shiki@^0.14.2:
|
||||||
|
version "0.14.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.3.tgz#d1a93c463942bdafb9866d74d619a4347d0bbf64"
|
||||||
|
integrity sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==
|
||||||
|
dependencies:
|
||||||
|
ansi-sequence-parser "^1.1.0"
|
||||||
|
jsonc-parser "^3.2.0"
|
||||||
|
vscode-oniguruma "^1.7.0"
|
||||||
|
vscode-textmate "^8.0.0"
|
||||||
|
|
||||||
side-channel@^1.0.4:
|
side-channel@^1.0.4:
|
||||||
version "1.0.4"
|
version "1.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
|
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
|
||||||
@@ -1037,6 +1585,11 @@ side-channel@^1.0.4:
|
|||||||
get-intrinsic "^1.0.2"
|
get-intrinsic "^1.0.2"
|
||||||
object-inspect "^1.9.0"
|
object-inspect "^1.9.0"
|
||||||
|
|
||||||
|
source-map-js@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
|
||||||
|
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
|
||||||
|
|
||||||
[email protected]:
|
[email protected]:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
|
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
|
||||||
@@ -1067,6 +1620,11 @@ strtok3@^7.0.0:
|
|||||||
"@tokenizer/token" "^0.3.0"
|
"@tokenizer/token" "^0.3.0"
|
||||||
peek-readable "^5.0.0"
|
peek-readable "^5.0.0"
|
||||||
|
|
||||||
|
tabbable@^6.1.2:
|
||||||
|
version "6.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
|
||||||
|
integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
|
||||||
|
|
||||||
tiny-inflate@^1.0.0:
|
tiny-inflate@^1.0.0:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4"
|
resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4"
|
||||||
@@ -1091,9 +1649,9 @@ ts-mixer@^6.0.3:
|
|||||||
integrity sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==
|
integrity sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==
|
||||||
|
|
||||||
tslib@^2.5.0:
|
tslib@^2.5.0:
|
||||||
version "2.5.3"
|
version "2.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913"
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3"
|
||||||
integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==
|
integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==
|
||||||
|
|
||||||
type-is@~1.6.18:
|
type-is@~1.6.18:
|
||||||
version "1.6.18"
|
version "1.6.18"
|
||||||
@@ -1104,9 +1662,9 @@ type-is@~1.6.18:
|
|||||||
mime-types "~2.1.24"
|
mime-types "~2.1.24"
|
||||||
|
|
||||||
typescript@^5.0.4:
|
typescript@^5.0.4:
|
||||||
version "5.1.3"
|
version "5.1.6"
|
||||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.3.tgz#8d84219244a6b40b6fb2b33cc1c062f715b9e826"
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274"
|
||||||
integrity sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==
|
integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==
|
||||||
|
|
||||||
undici@^5.22.0:
|
undici@^5.22.0:
|
||||||
version "5.22.1"
|
version "5.22.1"
|
||||||
@@ -1143,6 +1701,67 @@ vary@~1.1.2:
|
|||||||
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
||||||
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
|
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
|
||||||
|
|
||||||
|
vite@^4.3.9:
|
||||||
|
version "4.3.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.9.tgz#db896200c0b1aa13b37cdc35c9e99ee2fdd5f96d"
|
||||||
|
integrity sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==
|
||||||
|
dependencies:
|
||||||
|
esbuild "^0.17.5"
|
||||||
|
postcss "^8.4.23"
|
||||||
|
rollup "^3.21.0"
|
||||||
|
optionalDependencies:
|
||||||
|
fsevents "~2.3.2"
|
||||||
|
|
||||||
|
vitepress-plugin-auto-sidebar@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/vitepress-plugin-auto-sidebar/-/vitepress-plugin-auto-sidebar-1.1.0.tgz#d8131e31143e99b6e142cb7d23b9323a578a862b"
|
||||||
|
integrity sha512-LgkpjKVlNlQS54PFv5R/Y4+CHtHoXsJ3xgyVTKNi0sG1fXUmViKCg3Hnl9eo/SfNn894qsNRXoNneQmRBP2Lmw==
|
||||||
|
|
||||||
|
vitepress@^1.0.0-beta.3:
|
||||||
|
version "1.0.0-beta.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/vitepress/-/vitepress-1.0.0-beta.3.tgz#1c03bd3cff5193b888d202258d1dd0a60cfe52eb"
|
||||||
|
integrity sha512-GR5Pvr/o343NN1M4Na1shhDYZRrQbjmLq7WE0lla0H8iDPAsHE8agTHLWfu3FWx+3q2KA29sv16+0O9RQKGjlA==
|
||||||
|
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"
|
||||||
|
|
||||||
|
vscode-oniguruma@^1.7.0:
|
||||||
|
version "1.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b"
|
||||||
|
integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==
|
||||||
|
|
||||||
|
vscode-textmate@^8.0.0:
|
||||||
|
version "8.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d"
|
||||||
|
integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==
|
||||||
|
|
||||||
|
vue-demi@>=0.14.5:
|
||||||
|
version "0.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.5.tgz#676d0463d1a1266d5ab5cba932e043d8f5f2fbd9"
|
||||||
|
integrity sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==
|
||||||
|
|
||||||
|
vue@^3.3.4:
|
||||||
|
version "3.3.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.4.tgz#8ed945d3873667df1d0fcf3b2463ada028f88bd6"
|
||||||
|
integrity sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==
|
||||||
|
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"
|
||||||
|
|
||||||
ws@^8.13.0:
|
ws@^8.13.0:
|
||||||
version "8.13.0"
|
version "8.13.0"
|
||||||
resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0"
|
resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0"
|
||||||
|
|||||||
Reference in new issue
Block a user