diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..0038680 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,30 @@ +name: 🐞 Bug Report +description: Report a bug on Gravity Assist +labels: ["bug"] +title: "bug: " +body: + - type: textarea + attributes: + label: Describe the bug + description: A clear and concise description of the bug. + validations: + required: true + + - type: textarea + attributes: + label: Expected behavior + description: Describe what should have happened when you encountered the bug. + validations: + required: true + + - type: textarea + attributes: + label: Steps to reproduce + description: Please provide any reproduction steps that may need to be described. E.g. if the bug happens every other day except Tuesdays, make sure that's mentioned. + validations: + required: true + + - type: textarea + attributes: + label: Additional information + description: Please provide any additional information related to the bug. Screenshots, code snippets, and logs are useful. diff --git a/.github/ISSUE_TEMPLATE/new_feature.yml b/.github/ISSUE_TEMPLATE/new_feature.yml new file mode 100644 index 0000000..70a1b2e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/new_feature.yml @@ -0,0 +1,18 @@ +name: 🔥 New Feature +description: Add a new feature to Gravity Assist +labels: ["enhancement"] +title: "feature: " +body: + - type: textarea + attributes: + label: Description + description: A clear and concise description of what you want to do. + validations: + required: true + + - type: textarea + attributes: + label: Rationale + description: Why should this be added? + validations: + required: true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..407fcb2 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,56 @@ +name: CI + +on: + push: + branches: + - main + pull_request: + +jobs: + files: + name: Get changed files + runs-on: ubuntu-latest + outputs: + should_skip: ${{ steps.changed_files.outputs.only_changed == 'true' }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 100 + + - name: Get changed files + id: changed_files + uses: tj-actions/changed-files@v45.0.6 + with: + files: | + assets/** + public/** + .vscode/** + .github/** + !.github/workflows/ci.yml + **.md + + lint: + needs: files + timeout-minutes: 10 + runs-on: ubuntu-latest + name: Lint + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set Node.js version to 22 + uses: actions/setup-node@v4 + with: + node-version: 22 + + - name: Install dependencies + run: npm install + + - name: Build + run: npm run build + + - name: Lint + run: npm run lint diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml new file mode 100644 index 0000000..c368c7d --- /dev/null +++ b/.github/workflows/dependency-review.yml @@ -0,0 +1,21 @@ +name: "Dependency review" +on: + pull_request: + branches: + - main + +permissions: + contents: read + pull-requests: write + +jobs: + dependency-review: + runs-on: ubuntu-latest + steps: + - name: "Checkout repository" + uses: actions/checkout@v4 + + - name: "Dependency Review" + uses: actions/dependency-review-action@v4 + with: + comment-summary-in-pr: always diff --git a/.github/workflows/remove-active-label-on-close.yml b/.github/workflows/remove-active-label-on-close.yml new file mode 100644 index 0000000..844b461 --- /dev/null +++ b/.github/workflows/remove-active-label-on-close.yml @@ -0,0 +1,17 @@ +name: Remove Active Label on Closed Issues + +on: + issues: + types: [closed] + +jobs: + remove-active-label: + runs-on: ubuntu-latest + steps: + - name: Remove active label + uses: actions-cool/issues-helper@v3 + with: + actions: "remove-labels" + token: ${{ secrets.GITHUB_TOKEN }} + issue-number: ${{ github.event.issue.number }} + labels: "active" diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..b8c189f --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": true, + "tabWidth": 2, + "singleQuote": false, + "printWidth": 200, + "trailingComma": "none", + "plugins": ["prettier-plugin-tailwindcss"] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..13c4266 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "editor.codeActionsOnSave": { + "source.fixAll": "explicit" + }, + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "css.customData": [".vscode/tailwind.json"], + "[vue]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + } +} diff --git a/.vscode/tailwind.json b/.vscode/tailwind.json new file mode 100644 index 0000000..96a1f57 --- /dev/null +++ b/.vscode/tailwind.json @@ -0,0 +1,55 @@ +{ + "version": 1.1, + "atDirectives": [ + { + "name": "@tailwind", + "description": "Use the `@tailwind` directive to insert Tailwind's `base`, `components`, `utilities` and `screens` styles into your CSS.", + "references": [ + { + "name": "Tailwind Documentation", + "url": "https://tailwindcss.com/docs/functions-and-directives#tailwind" + } + ] + }, + { + "name": "@apply", + "description": "Use the `@apply` directive to inline any existing utility classes into your own custom CSS. This is useful when you find a common utility pattern in your HTML that you’d like to extract to a new component.", + "references": [ + { + "name": "Tailwind Documentation", + "url": "https://tailwindcss.com/docs/functions-and-directives#apply" + } + ] + }, + { + "name": "@responsive", + "description": "You can generate responsive variants of your own classes by wrapping their definitions in the `@responsive` directive:\n```css\n@responsive {\n .alert {\n background-color: #E53E3E;\n }\n}\n```\n", + "references": [ + { + "name": "Tailwind Documentation", + "url": "https://tailwindcss.com/docs/functions-and-directives#responsive" + } + ] + }, + { + "name": "@screen", + "description": "The `@screen` directive allows you to create media queries that reference your breakpoints by **name** instead of duplicating their values in your own CSS:\n```css\n@screen sm {\n /* ... */\n}\n```\n…gets transformed into this:\n```css\n@media (min-width: 640px) {\n /* ... */\n}\n```\n", + "references": [ + { + "name": "Tailwind Documentation", + "url": "https://tailwindcss.com/docs/functions-and-directives#screen" + } + ] + }, + { + "name": "@variants", + "description": "Generate `hover`, `focus`, `active` and other **variants** of your own utilities by wrapping their definitions in the `@variants` directive:\n```css\n@variants hover, focus {\n .btn-brand {\n background-color: #3182CE;\n }\n}\n```\n", + "references": [ + { + "name": "Tailwind Documentation", + "url": "https://tailwindcss.com/docs/functions-and-directives#variants" + } + ] + } + ] +} diff --git a/README.md b/README.md index 5206d46..1ded16b 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,51 @@ -# Gravity Assist +

+ + Gravity Assist + +

-Gravity Assist is a tool for Infinite Lagrange, a game by NetEase. +

+ Gravity Assist +

-Infinite Lagrange is a space-themed multiplayer RTS where players can build fleets and attack other players. +

+ Gravity Assist is a tool for Infinite Lagrange, a game by NetEase. +

+

+ Infinite Lagrange is a space-themed multiplayer RTS where players can build fleets and attack other players. +

-## Changelog +

+ + Gravity Assist + + · + + Changelog + · + + Contributors + +

-All changes can be found in the [full changelog](https://gravityassist.xyz/changelog). +## Ship Data + +Feel free to use my data, which can be found in the `/server/api/data/ships.ts` [file](https://github.com/DubNubz/gravity-assist/blob/main/server/api/data/ships.ts). + +Each ship follows the data structures in their [type declarations](https://github.com/DubNubz/gravity-assist/blob/main/utils/ships.ts) in `/utils/ships.ts`. + +## Project Setup + +1. Create a `.env` file in the root of the project + +```sh +NUXT_BASE64_SERVICE_ACCOUNT = '...' +NUXT_BASE_URL = ... +``` + +2. Install dependencies and run locally + +```sh +npm install +npm run dev +``` diff --git a/app.vue b/app.vue index 0278417..6b10d62 100644 --- a/app.vue +++ b/app.vue @@ -1,348 +1,169 @@ - - - diff --git a/assets/main.css b/assets/main.css index ff526e6..d3846f1 100644 --- a/assets/main.css +++ b/assets/main.css @@ -1,108 +1,42 @@ - -@import url('https://fonts.googleapis.com/css2?family=Kanit:wght@300&display=swap'); -@import url('https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300..900;1,300..900&display=swap'); -@import url('https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap'); +@tailwind base; +@tailwind components; +@tailwind utilities; :root { - --gold: rgb(255, 215, 0); - - --pastelRed: #ffaaaa; - --pastelOrange: #ffddaa; - --deepOrange: #ff9756; - --pastelYellow: #fbffaa; - --deepYellow: #ffe561; - --pastelGreen: #aaffaa; - --deepGreen: #56ff93; - --lightBlue: #6af1fd; - --cyan: #56ddff; - --pastelBlue: #aac8ff; - --normalText: #ccc9c6; - --darkGray: #878787; + --bg-color: #ffffff; +} - --h1: 4.5em; - --h2: 3em; - --h3: 1.95em; - --h4: 1.75em; - --p: 1.5em; - --standard: 0.7em; +.dark { + --bg-color: #0a0a0a; +} - --godly: linear-gradient(to bottom right, #ff0000, #ffbb00, #bbff00, #00ff4c, #00c3ff, #ff00ff); - --godlyText: linear-gradient(to right, #ff0000, #ffbb00, #bbff00, #00ff4c, #00c3ff, #ff00ff); +* { + font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !important; + @apply text-center text-black dark:text-white; } body { - font-family: 'Kanit', sans-serif; - min-height: 100vh; - font-size: var(--standard); - background-color: rgb(25, 25, 25); - margin: 0; - width: 100vw; - max-width: 100vw; - overflow-x: hidden; - display: flex; - justify-content: center; - color: white; - transition: all 0.5s; + background-color: var(--bg-color); + @apply m-0 hidden overflow-x-hidden p-0 transition duration-500; } -h1 {font-size: var(--h1)} -h2 {font-size: var(--h2)} -h3 {font-size: var(--h3)} -h4 {font-size: var(--h4)} -p {font-size: var(--p)} -#text {font-size: var(--standard)} - -::-webkit-scrollbar { - width: 0.75em; -} -::-webkit-scrollbar-track { - background-color: #17171c; -} -::-webkit-scrollbar-thumb { - background-color: #48005e; - border-radius: 1em; +button { + touch-action: manipulation; + @apply text-center text-black dark:text-white; } -button, a, input, textarea { - font-family: 'Kanit', sans-serif; - color: black; - border-color: black; - touch-action: manipulation; - text-decoration: none; +a { + @apply text-center text-black dark:text-white; } -@media screen and (max-width: 1000px) { - h1 {font-size: 3.5em} - h2 {font-size: 2.5em} - h3 {font-size: 1.5em} - h4 {font-size: 1.35em} - p {font-size: 1.25em} - #text {font-size: 0.5em} +.editor-bg { + background: radial-gradient(#1e232a, #080a0c); } -@media (hover: hover) and (pointer: fine) { - body:has(.contributorCard[color="red"]:hover) { - background-color: rgb(94, 39, 39); - } - body:has(.contributorCard[color="yellow"]:hover) { - background-color: rgb(60, 54, 25); - } - body:has(.contributorCard[color="green"]:hover) { - background-color: rgb(25, 60, 38); - } - body:has(.contributorCard[color="cyan"]:hover) { - background-color: rgb(25, 55, 60); - } - body:has(.contributorCard[color="pink"]:hover) { - background-color: rgb(75, 32, 75); - } +.fo-btn.fo-btn-circle.fo-btn-text { + @apply dark:hover:bg-neutral-700; } -@media (pointer: coarse) { - body { - font-family: "Rubik", sans-serif; - } - button, a, input, textarea { - font-family: "Rubik", sans-serif; - } -} \ No newline at end of file +.fo-skeleton { + @apply dark:bg-neutral-800; +} diff --git a/components/Blueprints/Card.vue b/components/Blueprints/Card.vue new file mode 100644 index 0000000..db259b5 --- /dev/null +++ b/components/Blueprints/Card.vue @@ -0,0 +1,249 @@ + + + + + diff --git a/components/Blueprints/Category.vue b/components/Blueprints/Category.vue new file mode 100644 index 0000000..f05f59c --- /dev/null +++ b/components/Blueprints/Category.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/components/Blueprints/Filter.vue b/components/Blueprints/Filter.vue new file mode 100644 index 0000000..72c9807 --- /dev/null +++ b/components/Blueprints/Filter.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/components/Blueprints/ModuleCard.vue b/components/Blueprints/ModuleCard.vue new file mode 100644 index 0000000..d13400d --- /dev/null +++ b/components/Blueprints/ModuleCard.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/components/Blueprints/Modules.vue b/components/Blueprints/Modules.vue new file mode 100644 index 0000000..895c2b9 --- /dev/null +++ b/components/Blueprints/Modules.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/components/Blueprints/Search.vue b/components/Blueprints/Search.vue new file mode 100644 index 0000000..6f73a2d --- /dev/null +++ b/components/Blueprints/Search.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/components/Blueprints/Settings.vue b/components/Blueprints/Settings.vue new file mode 100644 index 0000000..2c5bf20 --- /dev/null +++ b/components/Blueprints/Settings.vue @@ -0,0 +1,161 @@ + + + + + diff --git a/components/Blueprints/Sort.vue b/components/Blueprints/Sort.vue new file mode 100644 index 0000000..b93ec31 --- /dev/null +++ b/components/Blueprints/Sort.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/components/Blueprints/Toolbar.vue b/components/Blueprints/Toolbar.vue new file mode 100644 index 0000000..9258f01 --- /dev/null +++ b/components/Blueprints/Toolbar.vue @@ -0,0 +1,284 @@ + + + + + diff --git a/components/ColorCalculator.vue b/components/ColorCalculator.vue deleted file mode 100644 index 3e17cac..0000000 --- a/components/ColorCalculator.vue +++ /dev/null @@ -1,133 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/CompareShip.vue b/components/CompareShip.vue deleted file mode 100644 index 33a9434..0000000 --- a/components/CompareShip.vue +++ /dev/null @@ -1,351 +0,0 @@ - - - - - diff --git a/components/EditShip.vue b/components/EditShip.vue deleted file mode 100644 index 225d245..0000000 --- a/components/EditShip.vue +++ /dev/null @@ -1,618 +0,0 @@ - - - - - diff --git a/components/EquipmentBrowse.vue b/components/EquipmentBrowse.vue deleted file mode 100644 index 240af04..0000000 --- a/components/EquipmentBrowse.vue +++ /dev/null @@ -1,309 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/EquipmentCard.vue b/components/EquipmentCard.vue deleted file mode 100644 index ba56c43..0000000 --- a/components/EquipmentCard.vue +++ /dev/null @@ -1,162 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/Home/Carousel.vue b/components/Home/Carousel.vue new file mode 100644 index 0000000..ccce177 --- /dev/null +++ b/components/Home/Carousel.vue @@ -0,0 +1,99 @@ + + + + + diff --git a/components/Home/CarouselCard.vue b/components/Home/CarouselCard.vue new file mode 100644 index 0000000..8c26e28 --- /dev/null +++ b/components/Home/CarouselCard.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/components/Home/Changelog.vue b/components/Home/Changelog.vue new file mode 100644 index 0000000..2b08881 --- /dev/null +++ b/components/Home/Changelog.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/components/Home/ChangelogItem.vue b/components/Home/ChangelogItem.vue new file mode 100644 index 0000000..c393a0b --- /dev/null +++ b/components/Home/ChangelogItem.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/components/Home/Contact.vue b/components/Home/Contact.vue new file mode 100644 index 0000000..9c939db --- /dev/null +++ b/components/Home/Contact.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/components/Home/Contributors.vue b/components/Home/Contributors.vue new file mode 100644 index 0000000..2b0696b --- /dev/null +++ b/components/Home/Contributors.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/components/Home/ContributorsItem.vue b/components/Home/ContributorsItem.vue new file mode 100644 index 0000000..62e0b4c --- /dev/null +++ b/components/Home/ContributorsItem.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/components/Home/Footer.vue b/components/Home/Footer.vue new file mode 100644 index 0000000..883e16a --- /dev/null +++ b/components/Home/Footer.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/components/Home/Header.vue b/components/Home/Header.vue new file mode 100644 index 0000000..932c49b --- /dev/null +++ b/components/Home/Header.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/components/Home/Link.vue b/components/Home/Link.vue new file mode 100644 index 0000000..ecef346 --- /dev/null +++ b/components/Home/Link.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/components/Home/SideBar.vue b/components/Home/SideBar.vue new file mode 100644 index 0000000..df03cfa --- /dev/null +++ b/components/Home/SideBar.vue @@ -0,0 +1,185 @@ + + + + + diff --git a/components/LatestChange.vue b/components/LatestChange.vue deleted file mode 100644 index 6a5e039..0000000 --- a/components/LatestChange.vue +++ /dev/null @@ -1,91 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/Library/Hero.vue b/components/Library/Hero.vue new file mode 100644 index 0000000..c2b57a5 --- /dev/null +++ b/components/Library/Hero.vue @@ -0,0 +1,28 @@ + + + + + diff --git a/components/Library/ModCard.vue b/components/Library/ModCard.vue new file mode 100644 index 0000000..8697630 --- /dev/null +++ b/components/Library/ModCard.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/components/Library/ModCategory.vue b/components/Library/ModCategory.vue new file mode 100644 index 0000000..f2da677 --- /dev/null +++ b/components/Library/ModCategory.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/components/Library/Selection.vue b/components/Library/Selection.vue new file mode 100644 index 0000000..472b49d --- /dev/null +++ b/components/Library/Selection.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/components/Library/Showcase/BackButton.vue b/components/Library/Showcase/BackButton.vue new file mode 100644 index 0000000..1aae311 --- /dev/null +++ b/components/Library/Showcase/BackButton.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/components/Library/Showcase/Card/SubsystemCard.vue b/components/Library/Showcase/Card/SubsystemCard.vue new file mode 100644 index 0000000..75ccc51 --- /dev/null +++ b/components/Library/Showcase/Card/SubsystemCard.vue @@ -0,0 +1,160 @@ + + + + + diff --git a/components/Library/Showcase/Card/SubsystemCards.vue b/components/Library/Showcase/Card/SubsystemCards.vue new file mode 100644 index 0000000..8c9cb64 --- /dev/null +++ b/components/Library/Showcase/Card/SubsystemCards.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/components/Library/Showcase/Hero.vue b/components/Library/Showcase/Hero.vue new file mode 100644 index 0000000..ccefdf4 --- /dev/null +++ b/components/Library/Showcase/Hero.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/components/Library/Showcase/KnownHero.vue b/components/Library/Showcase/KnownHero.vue new file mode 100644 index 0000000..7b5f3db --- /dev/null +++ b/components/Library/Showcase/KnownHero.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/components/Library/Showcase/SourceBanner.vue b/components/Library/Showcase/SourceBanner.vue new file mode 100644 index 0000000..0511a27 --- /dev/null +++ b/components/Library/Showcase/SourceBanner.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/components/Library/Showcase/UnknownHero.vue b/components/Library/Showcase/UnknownHero.vue new file mode 100644 index 0000000..bd2a0cd --- /dev/null +++ b/components/Library/Showcase/UnknownHero.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/components/Mail/Buttons/Clear.vue b/components/Mail/Buttons/Clear.vue new file mode 100644 index 0000000..1340a33 --- /dev/null +++ b/components/Mail/Buttons/Clear.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/components/Mail/Buttons/Copy.vue b/components/Mail/Buttons/Copy.vue new file mode 100644 index 0000000..439c9d2 --- /dev/null +++ b/components/Mail/Buttons/Copy.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/components/Mail/Buttons/Save.vue b/components/Mail/Buttons/Save.vue new file mode 100644 index 0000000..7406d94 --- /dev/null +++ b/components/Mail/Buttons/Save.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/components/Mail/Buttons/Share.vue b/components/Mail/Buttons/Share.vue new file mode 100644 index 0000000..6ea32cc --- /dev/null +++ b/components/Mail/Buttons/Share.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/components/Mail/Editor.vue b/components/Mail/Editor.vue new file mode 100644 index 0000000..76fc840 --- /dev/null +++ b/components/Mail/Editor.vue @@ -0,0 +1,269 @@ + + + + + diff --git a/components/Mail/Quill.client.vue b/components/Mail/Quill.client.vue new file mode 100644 index 0000000..5efaf82 --- /dev/null +++ b/components/Mail/Quill.client.vue @@ -0,0 +1,234 @@ + + + + + + diff --git a/components/Mail/SavedItem.vue b/components/Mail/SavedItem.vue new file mode 100644 index 0000000..65f5dcd --- /dev/null +++ b/components/Mail/SavedItem.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/components/Mail/TemplateItem.vue b/components/Mail/TemplateItem.vue new file mode 100644 index 0000000..6cc5241 --- /dev/null +++ b/components/Mail/TemplateItem.vue @@ -0,0 +1,25 @@ + + + + + diff --git a/components/Mail/Templates.vue b/components/Mail/Templates.vue new file mode 100644 index 0000000..245472f --- /dev/null +++ b/components/Mail/Templates.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/components/ModBrowse.vue b/components/ModBrowse.vue deleted file mode 100644 index b4483e4..0000000 --- a/components/ModBrowse.vue +++ /dev/null @@ -1,156 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/ModCard.vue b/components/ModCard.vue deleted file mode 100644 index 33440ec..0000000 --- a/components/ModCard.vue +++ /dev/null @@ -1,177 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/ModSelect.vue b/components/ModSelect.vue deleted file mode 100644 index b1f38be..0000000 --- a/components/ModSelect.vue +++ /dev/null @@ -1,198 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/ModStats.vue b/components/ModStats.vue deleted file mode 100644 index 9a3eafa..0000000 --- a/components/ModStats.vue +++ /dev/null @@ -1,265 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/RaBrowse.vue b/components/RaBrowse.vue deleted file mode 100644 index b32b1c8..0000000 --- a/components/RaBrowse.vue +++ /dev/null @@ -1,223 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/RaSearch.vue b/components/RaSearch.vue deleted file mode 100644 index 3992ea4..0000000 --- a/components/RaSearch.vue +++ /dev/null @@ -1,196 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/Research/MobileSearch.vue b/components/Research/MobileSearch.vue new file mode 100644 index 0000000..f785dcd --- /dev/null +++ b/components/Research/MobileSearch.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/components/Research/PathBrowser.vue b/components/Research/PathBrowser.vue new file mode 100644 index 0000000..6bcabf1 --- /dev/null +++ b/components/Research/PathBrowser.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/components/Research/Search.vue b/components/Research/Search.vue new file mode 100644 index 0000000..946ec51 --- /dev/null +++ b/components/Research/Search.vue @@ -0,0 +1,205 @@ + + + + + diff --git a/components/Research/Selected.vue b/components/Research/Selected.vue new file mode 100644 index 0000000..61e475d --- /dev/null +++ b/components/Research/Selected.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/components/Research/Selection.vue b/components/Research/Selection.vue new file mode 100644 index 0000000..44ec8c7 --- /dev/null +++ b/components/Research/Selection.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/components/SampleText.vue b/components/SampleText.vue deleted file mode 100644 index 30ddfdf..0000000 --- a/components/SampleText.vue +++ /dev/null @@ -1,133 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/SideMenu.vue b/components/SideMenu.vue deleted file mode 100644 index 3d635ec..0000000 --- a/components/SideMenu.vue +++ /dev/null @@ -1,156 +0,0 @@ - - - - - \ No newline at end of file diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..db8fc15 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,120 @@ +import pluginVue from "eslint-plugin-vue"; +import vueParser from "vue-eslint-parser"; +import tseslint from "typescript-eslint"; +import globals from "globals"; + +/** @type {import('eslint').Linter.Config[]} */ +export default [ + { + ignores: ["**/.nuxt", "**/node_modules", "**/.output", "**/dist"] + }, + { + languageOptions: { + globals: { ...globals.browser, ...globals.node } + } + }, + ...tseslint.configs.strictTypeChecked, + ...tseslint.configs.stylisticTypeChecked, + ...pluginVue.configs["flat/recommended"], + { + name: "main", + languageOptions: { + parser: vueParser, + parserOptions: { + parser: tseslint.parser, + extraFileExtensions: [".vue"], + projectService: true, + tsconfigRootDir: import.meta.dirname + } + } + }, + { + rules: { + "array-callback-return": ["error", { allowImplicit: true }], + "no-template-curly-in-string": "error", + "no-unreachable-loop": "error", + "no-use-before-define": "error", + "block-scoped-var": "error", + camelcase: "error", + "default-case": "error", + "default-case-last": "error", + eqeqeq: "error", + "func-style": ["warn", "declaration"], + "max-depth": "error", + "no-console": ["error", { allow: ["warn", "error", "group", "groupEnd"] }], + "no-else-return": "error", + "no-empty-function": "error", + "no-lonely-if": "error", + "no-unneeded-ternary": "error", + "no-unused-expressions": "error", + "no-useless-computed-key": "error", + "no-useless-concat": "error", + "no-useless-return": "error", + "no-var": "error", + "operator-assignment": "error", + "prefer-arrow-callback": "error", + "prefer-const": "error", + "prefer-object-has-own": "error", + "prefer-object-spread": "error", + "prefer-template": "error", + yoda: "error", + + "@typescript-eslint/array-type": "error", + "default-param-last": "off", + "@typescript-eslint/default-param-last": "error", + "dot-notation": "off", + "@typescript-eslint/dot-notation": "error", + complexity: "off", + + "@typescript-eslint/no-confusing-void-expression": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-invalid-void-type": "off", + "@typescript-eslint/no-unnecessary-condition": "off", + "@typescript-eslint/no-unnecessary-type-assertion": "off", + "@typescript-eslint/no-unnecessary-type-parameters": "off", + "@typescript-eslint/no-unsafe-argument": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-return": "off", + "@typescript-eslint/restrict-template-expressions": "off", + "@typescript-eslint/consistent-type-definitions": "off", + + "vue/multi-word-component-names": "off", + "vue/block-lang": ["error", { script: { lang: "ts" } }], + "vue/block-order": ["error", { order: ["template", "script", "style"] }], + "vue/component-api-style": "error", + "vue/component-name-in-template-casing": "error", + "vue/custom-event-name-casing": "error", + "vue/define-emits-declaration": "error", + "vue/define-props-declaration": "error", + "vue/enforce-style-attribute": "error", + "vue/html-button-has-type": "error", + "vue/new-line-between-multi-line-property": "error", + "vue/no-static-inline-styles": "error", + "vue/no-template-target-blank": "error", + "vue/no-unused-emit-declarations": "error", + "vue/no-unused-properties": "error", + "vue/no-unused-refs": "error", + "vue/no-useless-mustaches": "error", + "vue/no-useless-v-bind": "error", + "vue/padding-line-between-blocks": "error", + "vue/prefer-use-template-ref": "error", + "vue/require-typed-object-prop": "error", + "vue/v-for-delimiter-style": "error", + "vue/dot-notation": "error", + "vue/camelcase": "error", + "vue/no-console": "error", + "vue/no-constant-condition": "error", + + "vue/html-self-closing": ["error", { html: { void: "always", normal: "never", component: "always" } }], + "vue/max-attributes-per-line": "off", + "vue/require-v-for-key": "off", + "vue/singleline-html-element-content-newline": "off", + "vue/multiline-html-element-content-newline": "off", + "vue/no-static-inline-styles": "off", + "vue/no-mutating-props": "off", + "vue/no-use-v-if-with-v-for": "off" + } + } +]; diff --git a/getImagePaths.ts b/getImagePaths.ts deleted file mode 100644 index e9307ba..0000000 --- a/getImagePaths.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { readdirSync, statSync, writeFileSync } from 'fs'; -import { join, extname, dirname } from 'path'; -import { fileURLToPath } from 'url'; - -// @ts-ignore -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); - -const publicDir = join(__dirname, 'public'); -const imageExtensions = ['.svg', '.png']; - -function getImagePaths(dir: string, fileList: string[] = []) { - const files = readdirSync(dir); - - files.forEach(file => { - const filePath = join(dir, file); - const stat = statSync(filePath); - - if (stat.isDirectory()) { - getImagePaths(filePath, fileList); - } else if (imageExtensions.includes(extname(file).toLowerCase())) { - const normalizedPath = filePath.replace(publicDir, '').replace(/\\/g, '/'); - fileList.push(normalizedPath); - } - }); - - return fileList; -} - -const imagePaths = getImagePaths(publicDir); -const outputPath = join(__dirname, 'imagePaths.json'); - -writeFileSync(outputPath, JSON.stringify(imagePaths, null, 2)); \ No newline at end of file diff --git a/imagePaths.json b/imagePaths.json deleted file mode 100644 index be43f75..0000000 --- a/imagePaths.json +++ /dev/null @@ -1,275 +0,0 @@ -[ - "/equipment/advancedMilitaryOperationCenter.png", - "/equipment/antoniosStandardPartsAssemblyFacility.png", - "/equipment/arbiterPlanningCenter.png", - "/equipment/armedOutpostControlCore.png", - "/equipment/autoRepairingArmor.png", - "/equipment/baseDefenseAndTrackingSystem.png", - "/equipment/basePlatformFireControlRadar.png", - "/equipment/battlecruiserAssemblyWorkshop.png", - "/equipment/bvrAircraftGuidanceDevice.png", - "/equipment/centralDistrictComponentIntegrationPlatform.png", - "/equipment/centralDistrictCoreModule.png", - "/equipment/combatMicrochipCenter.png", - "/equipment/cruiserExclusiveShipyard.png", - "/equipment/dawnStandardPartsAssemblyFacility.png", - "/equipment/industrialDistrictComponentIntegrationPlatform.png", - "/equipment/industrialDistrictCoreModule.png", - "/equipment/jupiterStandardPartsAssemblyFacility.png", - "/equipment/largeOutpostControlCore.png", - "/equipment/nomaStandardPartsAssemblyFacility.png", - "/equipment/portDistrictComponentIntegrationPlatform.png", - "/equipment/portDistrictCoreModule.png", - "/equipment/productionCoordinationController.png", - "/equipment/quickOutpostControlCore.png", - "/equipment/resourceMiningUAVSquadron.png", - "/equipment/tradeCommunicationRelayStation.png", - "/fleet/aircraft.svg", - "/fleet/command_point.svg", - "/fleet/cruise.svg", - "/fleet/flagship.svg", - "/fleet/health.svg", - "/fleet/modules.svg", - "/fleet/reinforcement.svg", - "/fleet/storage.svg", - "/fleet/techPoint.svg", - "/ships/ac721_a.png", - "/ships/ac721_b.png", - "/ships/ac721_d.png", - "/ships/aldabra_a.png", - "/ships/aldabra_b.png", - "/ships/at021_a.png", - "/ships/at021_b.png", - "/ships/at021_c.png", - "/ships/b192newland.png", - "/ships/br050_a.png", - "/ships/br050_b.png", - "/ships/br050_c.png", - "/ships/bullfrog.png", - "/ships/callisto_a.png", - "/ships/callisto_b.png", - "/ships/callisto_c.png", - "/ships/carilion_a.png", - "/ships/carilion_b.png", - "/ships/carilion_c.png", - "/ships/cas066_a.png", - "/ships/cas066_b.png", - "/ships/cas066_c.png", - "/ships/cas066_d.png", - "/ships/cellularDefender.png", - "/ships/ceres_a.png", - "/ships/ceres_b.png", - "/ships/ceres_c.png", - "/ships/chimera_a.png", - "/ships/chimera_b.png", - "/ships/chimera_c.png", - "/ships/conamaraChaos_a.png", - "/ships/conamaraChaos_b.png", - "/ships/constantineTheGreat.png", - "/ships/cv3000.png", - "/ships/cvii003.png", - "/ships/cvm011_a.png", - "/ships/cvm011_b.png", - "/ships/cvm011_c.png", - "/ships/cvt800.png", - "/ships/ediacaran.png", - "/ships/eris_a.png", - "/ships/eris_b.png", - "/ships/eris_c.png", - "/ships/eternalHeavens.png", - "/ships/eternalStorm.png", - "/ships/fg300_a.png", - "/ships/fg300_b.png", - "/ships/fg300_c.png", - "/ships/fsv830.png", - "/ships/guardian_a.png", - "/ships/guardian_b.png", - "/ships/guardian_c.png", - "/ships/haleBopp_a.png", - "/ships/haleBopp_b.png", - "/ships/hayreddinsLoyal.png", - "/ships/io_a.png", - "/ships/io_b.png", - "/ships/io_c.png", - "/ships/jaeger_a.png", - "/ships/jaeger_b.png", - "/ships/janbiyaAer410.png", - "/ships/kccpv_a.png", - "/ships/kccpv_b.png", - "/ships/kccpv_c.png", - "/ships/kccpv_d.png", - "/ships/lightCone_a.png", - "/ships/lightCone_b.png", - "/ships/lightCone_c.png", - "/ships/mareImbrium_a.png", - "/ships/mareImbrium_b.png", - "/ships/mareNubium_a.png", - "/ships/mareNubium_b.png", - "/ships/mareSerenitatis_a.png", - "/ships/mareSerenitatis_b.png", - "/ships/mareSerenitatis_c.png", - "/ships/mareTranquillitatis_a.png", - "/ships/mareTranquillitatis_b.png", - "/ships/mareTranquillitatis_c.png", - "/ships/marshalCrux.png", - "/ships/mistral.png", - "/ships/nebulaChaser_a.png", - "/ships/nebulaChaser_b.png", - "/ships/nomaM470_a.png", - "/ships/nomaM470_b.png", - "/ships/nomaM470_c.png", - "/ships/predator_a.png", - "/ships/predator_b.png", - "/ships/predator_c.png", - "/ships/quaoar_a.png", - "/ships/quaoar_b.png", - "/ships/ranger_a.png", - "/ships/ranger_b.png", - "/ships/redbeast713.png", - "/ships/reliat_a.png", - "/ships/reliat_b.png", - "/ships/reliat_c.png", - "/ships/ruby_a.png", - "/ships/ruby_b.png", - "/ships/ruby_c.png", - "/ships/sandrake.png", - "/ships/sc002.png", - "/ships/sc020.png", - "/ships/silentAssassin.png", - "/ships/slevy9.png", - "/ships/solarWhale.png", - "/ships/spearOfUranus.png", - "/ships/sporeA404.png", - "/ships/st59.png", - "/ships/stingray.png", - "/ships/strixA100.png", - "/ships/taurus_a.png", - "/ships/taurus_b.png", - "/ships/taurus_c.png", - "/ships/thunderboltStar.png", - "/ships/tundra_a.png", - "/ships/tundra_b.png", - "/ships/vitasA021.png", - "/ships/vitasB010.png", - "/ships/voidElfin.png", - "/ships/warspite.png", - "/ships/wingedHussar_a.png", - "/ships/wingedHussar_b.png", - "/ships/wingedHussar_c.png", - "/ships/xenostinger_a.png", - "/ships/xenostinger_b.png", - "/techBlueprints/aircraftLogisticsDevice.png", - "/techBlueprints/festivePlasmaUAVSquadron.png", - "/techBlueprints/hectorRemoteControlMiningUAV.png", - "/techBlueprints/highIntensityWarpStabilizer.png", - "/techBlueprints/highPowerBroadcastBeacon.png", - "/techBlueprints/militaryInformationConcealmentEquipment.png", - "/techBlueprints/operationCoordinationSatellite.png", - "/techBlueprints/prefabModuleTransporationUAV.png", - "/techBlueprints/privateerInfoRecognitionJammer.png", - "/techBlueprints/reconnaissanceSatellite.png", - "/techBlueprints/resourceRequestBeacon.png", - "/techBlueprints/spaceOperationPlanningCoordinator.png", - "/ui/alt/blackOpenBook.svg", - "/ui/alt/whiteChanges.svg", - "/ui/alt/whiteCredits.svg", - "/ui/alt/whiteDownArrow.svg", - "/ui/alt/whiteShare.svg", - "/ui/atom.svg", - "/ui/blueprint.svg", - "/ui/burger.svg", - "/ui/changes.svg", - "/ui/copy.svg", - "/ui/credits.svg", - "/ui/discord_icon.png", - "/ui/downArrow.svg", - "/ui/greenUp.svg", - "/ui/home.svg", - "/ui/leftArrow.svg", - "/ui/openBook.svg", - "/ui/paint.svg", - "/ui/plus.svg", - "/ui/radiant.svg", - "/ui/redDown.svg", - "/ui/rightArrow.svg", - "/ui/scale.svg", - "/ui/search.svg", - "/ui/share.svg", - "/ui/solarSystem.svg", - "/ui/wrench.svg", - "/ui/x.svg", - "/ui/yellowLine.svg", - "/weapons/icons/aircraft.png", - "/weapons/icons/armor.png", - "/weapons/icons/cannon.png", - "/weapons/icons/command.png", - "/weapons/icons/jamming.png", - "/weapons/icons/plus.svg", - "/weapons/icons/speed.png", - "/weapons/icons/storage.png", - "/weapons/icons/unknown.png", - "/weapons/stats/antiaircraft.svg", - "/weapons/stats/antiship.svg", - "/weapons/stats/armor.svg", - "/weapons/stats/cruise.svg", - "/weapons/stats/crystal.svg", - "/weapons/stats/deuterium.svg", - "/weapons/stats/energyShield.svg", - "/weapons/stats/hp.svg", - "/weapons/stats/metal.svg", - "/weapons/stats/repair.svg", - "/weapons/stats/siege.svg", - "/weapons/stats/storage.svg", - "/weapons/stats/time.svg", - "/weapons/types/alpha.svg", - "/weapons/types/damageType.svg", - "/weapons/types/lockon.svg", - "/weapons/types/target.svg", - "/weapons/upgrades/aircraftHitrate.svg", - "/weapons/upgrades/armor.svg", - "/weapons/upgrades/bigHitrate.svg", - "/weapons/upgrades/br050c_1.svg", - "/weapons/upgrades/commandRepair.svg", - "/weapons/upgrades/critDamage.svg", - "/weapons/upgrades/critDamage2.svg", - "/weapons/upgrades/directEvasion.svg", - "/weapons/upgrades/energyCooldown.svg", - "/weapons/upgrades/energyDamage.svg", - "/weapons/upgrades/energyHitrate.svg", - "/weapons/upgrades/energyShield.svg", - "/weapons/upgrades/generalEvasion.svg", - "/weapons/upgrades/genericCooldown.svg", - "/weapons/upgrades/genericCooldown2.svg", - "/weapons/upgrades/genericDamage.svg", - "/weapons/upgrades/hp.svg", - "/weapons/upgrades/jammingCooldown.svg", - "/weapons/upgrades/missileDamage.svg", - "/weapons/upgrades/missileEvasion.svg", - "/weapons/upgrades/missileHitrate.svg", - "/weapons/upgrades/missileTorpedoEvasion.svg", - "/weapons/upgrades/plasmaDamage.svg", - "/weapons/upgrades/railgunHitrate.svg", - "/weapons/upgrades/reciprocal.svg", - "/weapons/upgrades/reduceCritDamage.svg", - "/weapons/upgrades/siegeDamage.svg", - "/weapons/upgrades/smallHitrate.svg", - "/weapons/upgrades/strategies/at021a_1.svg", - "/weapons/upgrades/strategies/at021b_1.svg", - "/weapons/upgrades/strategies/br050a_1.svg", - "/weapons/upgrades/strategies/br050b_1.svg", - "/weapons/upgrades/strategies/bullfrog_1.svg", - "/weapons/upgrades/strategies/concentrateFire.svg", - "/weapons/upgrades/strategies/hayreddin_1.svg", - "/weapons/upgrades/strategies/heavyAmmo.svg", - "/weapons/upgrades/strategies/janbiya_1.svg", - "/weapons/upgrades/strategies/prioritizeFirepower.svg", - "/weapons/upgrades/strategies/prioritizeTargets.svg", - "/weapons/upgrades/strategies/sc020_1.svg", - "/weapons/upgrades/strategies/stingray_1.svg", - "/weapons/upgrades/strategies/strix_1.svg", - "/weapons/upgrades/systemHp.svg", - "/weapons/upgrades/targetReset.svg", - "/weapons/upgrades/targetSelectionTime.svg", - "/weapons/upgrades/targetSelectionTime2.svg", - "/weapons/upgrades/torpedoIntercept.svg" -] \ No newline at end of file diff --git a/layouts/default.vue b/layouts/default.vue new file mode 100644 index 0000000..9e05c6c --- /dev/null +++ b/layouts/default.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/layouts/mail-editor.vue b/layouts/mail-editor.vue new file mode 100644 index 0000000..c58d52a --- /dev/null +++ b/layouts/mail-editor.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/nuxt.config.ts b/nuxt.config.ts index c9d94e9..06440a2 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -1,33 +1,68 @@ // https://nuxt.com/docs/api/configuration/nuxt-config export default defineNuxtConfig({ + compatibilityDate: "2024-12-04", devtools: { enabled: true }, css: ["assets/main.css"], - modules: [ - "@pinia/nuxt" - ], + vite: { + css: { + preprocessorOptions: { + scss: { + api: "modern" + } + } + } + }, + modules: ["@pinia/nuxt", "@nuxtjs/tailwindcss", "@nuxt/test-utils/module", "@formkit/auto-animate/nuxt"], + postcss: { + plugins: { + tailwindcss: {}, + autoprefixer: {} + } + }, + runtimeConfig: { + base64ServiceAccount: "", + public: { + baseUrl: "" + } + }, app: { head: { title: "Gravity Assist", meta: [ - { charset: 'UTF-8' }, - { name: 'viewport', content: 'width=device-width, initial-scale=1.0' }, - { hid: 'description', name: 'description', content: 'Create colored text, search modules and research paths, design custom fleets, and more. Gravity Assist is an all-in-one tool for anything you may need in Infinite Lagrange.' }, - { name: 'keywords', content: 'space, infinite, lagrange, rts, game, tool, help, fleet, build, research, module, equipment, blueprint' } + { charset: "UTF-8" }, + { name: "viewport", content: "width=device-width, initial-scale=1.0" }, + { name: "mobile-web-app-capable", content: "yes" }, + { name: "author", content: "DubNubz" }, + { property: "og:title", content: "Gravity Assist" }, + { property: "og:site_name", content: "Gravity Assist" }, + { + name: "keywords", + content: "space, infinite, lagrange, rts, game, tool, help, fleet, build, research, module, equipment, blueprint, collection" + } + ], + link: [ + { rel: "icon", type: "image/svg+xml", href: "/logo/logo.svg" }, + { + rel: "stylesheet", + href: "https://cdn.jsdelivr.net/npm/quill@2.0.3/dist/quill.bubble.css" + } ], - link: [{ rel: "icon", type: "image/svg+xml", href: "/ui/radiant.svg" }], script: [ - { src: 'https://www.googletagmanager.com/gtag/js?id=G-41RFT8ZEZ8', async: true }, { - hid: 'gtag', + src: "https://www.googletagmanager.com/gtag/js?id=G-41RFT8ZEZ8", + async: true + }, + { + hid: "gtag", innerHTML: ` window.dataLayer = window.dataLayer || []; function gtag(){ dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', 'G-41RFT8ZEZ8'); `, - type: 'text/javascript' + type: "text/javascript" } ] } } -}) +}); diff --git a/package-lock.json b/package-lock.json index c613292..127b650 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,23 +7,49 @@ "name": "nuxt-app", "hasInstallScript": true, "dependencies": { - "@ckpack/vue-color": "^1.5.0", - "@nuxtjs/meta": "^3.0.0-beta.16", - "@pinia/nuxt": "^0.5.1", - "lodash": "^4.17.21", - "nuxt": "^3.11.2", - "pinia": "^2.1.7", - "sass": "^1.77.2", - "tinycolor": "^0.0.1", - "tinycolor2": "^1.6.0", - "vue": "^3.4.27", - "vue-router": "^4.3.2" + "@formkit/auto-animate": "^0.8.2", + "@pinia/nuxt": "^0.7.0", + "firebase-admin": "^13.0.1", + "flowbite": "^2.5.2", + "flyonui": "^1.1.0", + "nuxt": "^3.13.0", + "obscenity": "^0.4.1", + "pinia": "^2.2.6", + "quill": "^2.0.3", + "sass": "^1.82.0", + "vue": "latest", + "vue-router": "latest" }, "devDependencies": { - "@types/lodash": "^4.17.7", - "@types/tinycolor2": "^1.4.6", - "tsx": "^4.19.1", - "typescript": "^5.6.2" + "@eslint/js": "^9.19.0", + "@nuxt/test-utils": "^3.15.4", + "@nuxtjs/tailwindcss": "^6.12.2", + "@pinia/testing": "^0.1.7", + "@types/quill": "^2.0.14", + "@vue/test-utils": "^2.4.6", + "daisyui": "^4.12.14", + "eslint": "^9.19.0", + "eslint-plugin-vue": "^9.32.0", + "globals": "^15.14.0", + "happy-dom": "^16.7.2", + "prettier-plugin-tailwindcss": "^0.6.9", + "tailwindcss": "^3.4.16", + "typescript": "^5.7.3", + "typescript-eslint": "^8.21.0", + "vitest": "^3.0.4", + "vue-eslint-parser": "^9.4.3" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@ampproject/remapping": { @@ -38,122 +64,21 @@ "node": ">=6.0.0" } }, - "node_modules/@antfu/install-pkg": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-0.1.1.tgz", - "integrity": "sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==", - "peer": true, - "dependencies": { - "execa": "^5.1.1", - "find-up": "^5.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@antfu/install-pkg/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "peer": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/@antfu/install-pkg/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "peer": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/@antfu/install-pkg/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@antfu/install-pkg/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@antfu/install-pkg/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "peer": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@antfu/install-pkg/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "peer": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@antfu/install-pkg/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/@antfu/utils": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.8.tgz", - "integrity": "sha512-rWQkqXRESdjXtc+7NRfK9lASQjpXJu1ayp7qi1d23zZorY+wBHVLHHoVcMsEnkqEBWTFqbztO7/QdJFzyEcLTg==", + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz", + "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", "funding": { "url": "https://github.com/sponsors/antfu" } }, "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dependencies": { - "@babel/highlight": "^7.24.2", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -161,28 +86,28 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", - "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", - "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.24.5", - "@babel/helpers": "^7.24.5", - "@babel/parser": "^7.24.5", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.5", - "@babel/types": "^7.24.5", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -206,38 +131,39 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", - "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", + "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", "dependencies": { - "@babel/types": "^7.24.5", + "@babel/parser": "^7.26.5", + "@babel/types": "^7.26.5", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -254,18 +180,16 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz", - "integrity": "sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.24.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.24.5", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", "semver": "^6.3.1" }, "engines": { @@ -283,69 +207,38 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz", - "integrity": "sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", "dependencies": { - "@babel/types": "^7.24.5" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", - "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dependencies": { - "@babel/types": "^7.24.0" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", - "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.24.3", - "@babel/helper-simple-access": "^7.24.5", - "@babel/helper-split-export-declaration": "^7.24.5", - "@babel/helper-validator-identifier": "^7.24.5" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -355,32 +248,32 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", - "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", - "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5" + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -389,94 +282,61 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", - "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", - "dependencies": { - "@babel/types": "^7.24.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", - "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", - "dependencies": { - "@babel/types": "^7.24.5" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", - "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", - "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.5", - "@babel/types": "^7.24.5" + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", - "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", + "node_modules/@babel/parser": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", + "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/types": "^7.26.7" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", - "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -485,13 +345,13 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.1.tgz", - "integrity": "sha512-zPEvzFijn+hRvJuX2Vu3KbEBN39LN3f7tW3MQO2LsIs57B26KU+kUc82BdAktS1VCM6libzh45eKGI65lg0cpA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", + "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-decorators": "^7.24.1" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-decorators": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -501,11 +361,11 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.1.tgz", - "integrity": "sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", + "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -515,11 +375,11 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", - "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -540,11 +400,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", - "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -554,28 +414,11 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", - "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", - "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", - "peer": true, + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-simple-access": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -585,33 +428,15 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.5.tgz", - "integrity": "sha512-E0VWu/hk83BIFUWnsKZ4D81KXjN5L3MobvevOHErASk9IPwKHOkTgvqzvNo1yP/ePJWqqK2SpUR5z+KQbl6NVw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.7.tgz", + "integrity": "sha512-5cJurntg+AT+cgelGP9Bt788DKiAw9gIMSMU2NJrLAilnj0m8WZWUNZPSLOmadYsujHutpgElO+50foX+ib/Wg==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.5", - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/plugin-syntax-typescript": "^7.24.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz", - "integrity": "sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-syntax-jsx": "^7.24.1", - "@babel/plugin-transform-modules-commonjs": "^7.24.1", - "@babel/plugin-transform-typescript": "^7.24.1" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -621,39 +446,36 @@ } }, "node_modules/@babel/standalone": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.24.5.tgz", - "integrity": "sha512-Sl8oN9bGfRlNUA2jzfzoHEZxFBDliBlwi5mPVCAWKSlBNkXXJOHpu7SDOqjF6mRoTa6GNX/1kAWG3Tr+YQ3N7A==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.26.7.tgz", + "integrity": "sha512-Fvdo9Dd20GDUAREzYMIR2EFMKAJ+ccxstgQdb39XV/yvygHL4UPcqgTkiChPyltAe/b+zgq+vUPXeukEZ6aUeA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", - "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", - "dependencies": { - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.24.5", - "@babel/parser": "^7.24.5", - "@babel/types": "^7.24.5", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz", + "integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.7", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -661,38 +483,30 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/types": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", - "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", - "dependencies": { - "@babel/helper-string-parser": "^7.24.1", - "@babel/helper-validator-identifier": "^7.24.5", - "to-fast-properties": "^2.0.0" - }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "engines": { - "node": ">=6.9.0" + "node": ">=4" } }, - "node_modules/@ckpack/vue-color": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@ckpack/vue-color/-/vue-color-1.5.0.tgz", - "integrity": "sha512-dj1zXVyay2m4LdlLJCQSdIS2FYwUl77BZqyKmUXiehyqjCP0bGYnPcL38lrShzYUc2FdkYQX8ANZZjRahd4PQw==", + "node_modules/@babel/types": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", + "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", "dependencies": { - "@ctrl/tinycolor": "^3.6.0", - "material-colors": "^1.2.6" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { - "node": ">=12" - }, - "peerDependencies": { - "vue": "^3.2.0" + "node": ">=6.9.0" } }, "node_modules/@cloudflare/kv-asset-handler": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.2.tgz", - "integrity": "sha512-EeEjMobfuJrwoctj7FA1y1KEbM0+Q1xSjobIEyie9k4haVEBB7vkDvsasw1pM3rO39mL2akxIAzLMUAtrMHZhA==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.4.tgz", + "integrity": "sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==", "dependencies": { "mime": "^3.0.0" }, @@ -711,18 +525,10 @@ "node": ">=10.0.0" } }, - "node_modules/@ctrl/tinycolor": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", - "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", - "engines": { - "node": ">=10" - } - }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", "cpu": [ "ppc64" ], @@ -731,13 +537,13 @@ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", "cpu": [ "arm" ], @@ -746,13 +552,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", "cpu": [ "arm64" ], @@ -761,13 +567,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", "cpu": [ "x64" ], @@ -776,13 +582,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", "cpu": [ "arm64" ], @@ -791,13 +597,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", "cpu": [ "x64" ], @@ -806,13 +612,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", "cpu": [ "arm64" ], @@ -821,13 +627,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", "cpu": [ "x64" ], @@ -836,13 +642,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", "cpu": [ "arm" ], @@ -851,13 +657,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", "cpu": [ "arm64" ], @@ -866,13 +672,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", "cpu": [ "ia32" ], @@ -881,13 +687,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", "cpu": [ "loong64" ], @@ -896,13 +702,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", "cpu": [ "mips64el" ], @@ -911,13 +717,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", "cpu": [ "ppc64" ], @@ -926,13 +732,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", "cpu": [ "riscv64" ], @@ -941,13 +747,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", "cpu": [ "s390x" ], @@ -956,13 +762,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", "cpu": [ "x64" ], @@ -971,13 +777,28 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", "cpu": [ "x64" ], @@ -986,17 +807,16 @@ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", - "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "openbsd" @@ -1006,9 +826,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", "cpu": [ "x64" ], @@ -1017,13 +837,13 @@ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", "cpu": [ "x64" ], @@ -1032,13 +852,13 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", "cpu": [ "arm64" ], @@ -1047,13 +867,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", "cpu": [ "ia32" ], @@ -1062,13 +882,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", "cpu": [ "x64" ], @@ -1077,60 +897,421 @@ "win32" ], "engines": { - "node": ">=12" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "engines": { - "node": ">=14" + "node": ">=18" } }, - "node_modules/@floating-ui/core": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz", - "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==", - "peer": true, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "devOptional": true, "dependencies": { - "@floating-ui/utils": "^0.2.0" + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@floating-ui/dom": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.1.1.tgz", - "integrity": "sha512-TpIO93+DIujg3g7SykEAGZMDtbJRrmnYRCNYSjJlvIbGhBjRSNTLVbNeDQBrzy9qDgUbiWdc7KA0uZHZ2tJmiw==", - "peer": true, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "devOptional": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "devOptional": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", + "devOptional": true, "dependencies": { - "@floating-ui/core": "^1.1.0" + "@eslint/object-schema": "^2.1.5", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@floating-ui/utils": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", - "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==", - "peer": true + "node_modules/@eslint/core": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz", + "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==", + "devOptional": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } }, - "node_modules/@iconify/types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", - "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", - "peer": true - }, - "node_modules/@iconify/utils": { - "version": "2.1.23", - "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.1.23.tgz", - "integrity": "sha512-YGNbHKM5tyDvdWZ92y2mIkrfvm5Fvhe6WJSkWu7vvOFhMtYDP0casZpoRz0XEHZCrYsR4stdGT3cZ52yp5qZdQ==", - "peer": true, + "node_modules/@eslint/eslintrc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "devOptional": true, "dependencies": { - "@antfu/install-pkg": "^0.1.1", - "@antfu/utils": "^0.7.7", - "@iconify/types": "^2.0.0", - "debug": "^4.3.4", - "kolorist": "^1.8.0", - "local-pkg": "^0.5.0", - "mlly": "^1.6.1" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "devOptional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "devOptional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/js": { + "version": "9.19.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.19.0.tgz", + "integrity": "sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==", + "devOptional": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", + "devOptional": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz", + "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==", + "devOptional": true, + "dependencies": { + "@eslint/core": "^0.10.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.1.0.tgz", + "integrity": "sha512-yHmUtGwEbW6HsKpPqT140/L6GpHtquHogRLgtanJFep3UAfDkE0fQfC49U+F9irCAoJVlv3M7VSp4rrtO4LnfA==" + }, + "node_modules/@firebase/app-check-interop-types": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.3.tgz", + "integrity": "sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A==" + }, + "node_modules/@firebase/app-types": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.3.tgz", + "integrity": "sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==" + }, + "node_modules/@firebase/auth-interop-types": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.4.tgz", + "integrity": "sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==" + }, + "node_modules/@firebase/component": { + "version": "0.6.11", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.11.tgz", + "integrity": "sha512-eQbeCgPukLgsKD0Kw5wQgsMDX5LeoI1MIrziNDjmc6XDq5ZQnuUymANQgAb2wp1tSF9zDSXyxJmIUXaKgN58Ug==", + "dependencies": { + "@firebase/util": "1.10.2", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/database": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.10.tgz", + "integrity": "sha512-sWp2g92u7xT4BojGbTXZ80iaSIaL6GAL0pwvM0CO/hb0nHSnABAqsH7AhnWGsGvXuEvbPr7blZylPaR9J+GSuQ==", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.3", + "@firebase/auth-interop-types": "0.2.4", + "@firebase/component": "0.6.11", + "@firebase/logger": "0.4.4", + "@firebase/util": "1.10.2", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/database-compat": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.0.1.tgz", + "integrity": "sha512-IsFivOjdE1GrjTeKoBU/ZMenESKDXidFDzZzHBPQ/4P20ptGdrl3oLlWrV/QJqJ9lND4IidE3z4Xr5JyfUW1vg==", + "dependencies": { + "@firebase/component": "0.6.11", + "@firebase/database": "1.0.10", + "@firebase/database-types": "1.0.7", + "@firebase/logger": "0.4.4", + "@firebase/util": "1.10.2", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/database-types": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.7.tgz", + "integrity": "sha512-I7zcLfJXrM0WM+ksFmFdAMdlq/DFmpeMNa+/GNsLyFo5u/lX5zzkPzGe3srVWqaBQBY5KprylDGxOsP6ETfL0A==", + "dependencies": { + "@firebase/app-types": "0.9.3", + "@firebase/util": "1.10.2" + } + }, + "node_modules/@firebase/logger": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.4.tgz", + "integrity": "sha512-mH0PEh1zoXGnaR8gD1DeGeNZtWFKbnz9hDO91dIml3iou1gpOnLqXQ2dJfB71dj6dpmUjcQ6phY3ZZJbjErr9g==", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/util": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.2.tgz", + "integrity": "sha512-qnSHIoE9FK+HYnNhTI8q14evyqbc/vHRivfB4TgCIUOl4tosmKSQlp7ltymOlMP4xVIJTg5wrkfcZ60X4nUf7Q==", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@formkit/auto-animate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/@formkit/auto-animate/-/auto-animate-0.8.2.tgz", + "integrity": "sha512-SwPWfeRa5veb1hOIBMdzI+73te5puUBHmqqaF1Bu7FjvxlYSz/kJcZKSa9Cg60zL0uRNeJL2SbRxV6Jp6Q1nFQ==" + }, + "node_modules/@google-cloud/firestore": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-7.11.0.tgz", + "integrity": "sha512-88uZ+jLsp1aVMj7gh3EKYH1aulTAMFAp8sH/v5a9w8q8iqSG27RiWLoxSAFr/XocZ9hGiWH1kEnBw+zl3xAgNA==", + "optional": true, + "dependencies": { + "@opentelemetry/api": "^1.3.0", + "fast-deep-equal": "^3.1.1", + "functional-red-black-tree": "^1.0.1", + "google-gax": "^4.3.3", + "protobufjs": "^7.2.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/paginator": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.2.tgz", + "integrity": "sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg==", + "optional": true, + "dependencies": { + "arrify": "^2.0.0", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/projectify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz", + "integrity": "sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==", + "optional": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/promisify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.0.0.tgz", + "integrity": "sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@google-cloud/storage": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.14.0.tgz", + "integrity": "sha512-H41bPL2cMfSi4EEnFzKvg7XSb7T67ocSXrmF7MPjfgFB0L6CKGzfIYJheAZi1iqXjz6XaCT1OBf6HCG5vDBTOQ==", + "optional": true, + "dependencies": { + "@google-cloud/paginator": "^5.0.0", + "@google-cloud/projectify": "^4.0.0", + "@google-cloud/promisify": "^4.0.0", + "abort-controller": "^3.0.0", + "async-retry": "^1.3.3", + "duplexify": "^4.1.3", + "fast-xml-parser": "^4.4.1", + "gaxios": "^6.0.2", + "google-auth-library": "^9.6.3", + "html-entities": "^2.5.2", + "mime": "^3.0.0", + "p-limit": "^3.0.1", + "retry-request": "^7.0.0", + "teeny-request": "^9.0.0", + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@google-cloud/storage/node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@google-cloud/storage/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", + "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "optional": true, + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "devOptional": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "devOptional": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "devOptional": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "devOptional": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "devOptional": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@ioredis/commands": { @@ -1155,9 +1336,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "engines": { "node": ">=12" }, @@ -1266,9 +1447,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", @@ -1279,6 +1460,32 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "optional": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@koa/router": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@koa/router/-/router-12.0.2.tgz", + "integrity": "sha512-sYcHglGKTxGF+hQ6x67xDfkE9o+NhVlRHBqq6gLywaMc6CojK/5vFZByphdonKinYlMLkEkacm+HEse9HzwgTA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "http-errors": "^2.0.0", + "koa-compose": "^4.1.0", + "methods": "^1.1.2", + "path-to-regexp": "^6.3.0" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/@kwsites/file-exists": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", @@ -1312,11 +1519,11 @@ } }, "node_modules/@netlify/functions": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@netlify/functions/-/functions-2.7.0.tgz", - "integrity": "sha512-4pXC/fuj3eGQ86wbgPiM4zY8+AsNrdz6vcv6FEdUJnZW+LqF8IWjQcY3S0d1hLeLKODYOqq4CkrzGyCpce63Nw==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@netlify/functions/-/functions-2.8.2.tgz", + "integrity": "sha512-DeoAQh8LuNPvBE4qsKlezjKj0PyXDryOFJfJKo3Z1qZLKzQ21sT314KQKPVjfvw6knqijj+IO+0kHXy/TJiqNA==", "dependencies": { - "@netlify/serverless-functions-api": "1.18.1" + "@netlify/serverless-functions-api": "1.26.1" }, "engines": { "node": ">=14.0.0" @@ -1331,16 +1538,11 @@ } }, "node_modules/@netlify/serverless-functions-api": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-1.18.1.tgz", - "integrity": "sha512-DrSvivchuwsuQW03zbVPT3nxCQa5tn7m4aoPOsQKibuJXIuSbfxzCBxPLz0+LchU5ds7YyOaCc9872Y32ngYzg==", + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-1.26.1.tgz", + "integrity": "sha512-q3L9i3HoNfz0SGpTIS4zTcKBbRkxzCRpd169eyiTuk3IwcPC3/85mzLHranlKo2b+HYT0gu37YxGB45aD8A3Tw==", "dependencies": { "@netlify/node-cookies": "^0.1.0", - "@opentelemetry/core": "^1.23.0", - "@opentelemetry/otlp-transformer": "^0.50.0", - "@opentelemetry/resources": "^1.23.0", - "@opentelemetry/sdk-trace-base": "^1.23.0", - "@opentelemetry/semantic-conventions": "^1.23.0", "urlpattern-polyfill": "8.0.2" }, "engines": { @@ -1379,263 +1581,74 @@ "node": ">= 8" } }, - "node_modules/@npmcli/agent": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", - "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "node_modules/@nuxt/cli": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/@nuxt/cli/-/cli-3.21.1.tgz", + "integrity": "sha512-GFFHSEtNtf1s4anMKWFfKSbKiNvEwOKxfP3uls7anZ8GCVYrKthMMxeou4fZBcRhTAFbiLC7DytsKnjfmY2t9w==", "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" + "c12": "^2.0.1", + "chokidar": "^4.0.3", + "citty": "^0.1.6", + "clipboardy": "^4.0.0", + "consola": "^3.4.0", + "defu": "^6.1.4", + "fuse.js": "^7.0.0", + "giget": "^1.2.4", + "h3": "^1.14.0", + "httpxy": "^0.1.7", + "jiti": "^2.4.2", + "listhen": "^1.9.0", + "nypm": "^0.5.2", + "ofetch": "^1.4.1", + "ohash": "^1.1.4", + "pathe": "^2.0.2", + "perfect-debounce": "^1.0.0", + "pkg-types": "^1.3.1", + "scule": "^1.3.0", + "semver": "^7.6.3", + "std-env": "^3.8.0", + "tinyexec": "^0.3.2", + "ufo": "^1.5.4" }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dependencies": { - "debug": "^4.3.4" + "bin": { + "nuxi": "bin/nuxi.mjs", + "nuxi-ng": "bin/nuxi.mjs", + "nuxt": "bin/nuxi.mjs", + "nuxt-cli": "bin/nuxi.mjs" }, "engines": { - "node": ">= 14" + "node": "^16.10.0 || >=18.0.0" } }, - "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "node_modules/@nuxt/cli/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" + "readdirp": "^4.0.1" }, "engines": { - "node": ">= 14" + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "node_modules/@nuxt/cli/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + }, + "node_modules/@nuxt/cli/node_modules/readdirp": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.1.tgz", + "integrity": "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==", "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/@npmcli/fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.7.tgz", - "integrity": "sha512-WaOVvto604d5IpdCRV2KjQu8PzkfE96d50CQGKgywXh2GxXmDeUO5EWcBC4V57uFyrNqx83+MewuJh3WTR3xPA==", - "dependencies": { - "@npmcli/promise-spawn": "^7.0.0", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^9.0.0", - "proc-log": "^4.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", - "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/package-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.1.0.tgz", - "integrity": "sha512-1aL4TuVrLS9sf8quCLerU3H9J4vtCtgu8VauYozrmEyU57i/EdKleCnsQ7vpnABIH6c9mnTxcH5sFkO3BlV8wQ==", - "dependencies": { - "@npmcli/git": "^5.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^7.0.0", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "proc-log": "^4.0.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.3.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", - "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.11.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/package-json/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", - "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", - "dependencies": { - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/redact": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.0.tgz", - "integrity": "sha512-SEjCPAVHWYUIQR+Yn03kJmrJjZDtJLYpj300m3HV9OTRZNpC5YpbMsM3eTkECyT4aWj8lDr9WeY6TWefpubtYQ==", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz", - "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==", - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.0.0", - "@npmcli/promise-spawn": "^7.0.0", - "node-gyp": "^10.0.0", - "proc-log": "^4.0.0", - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, "node_modules/@nuxt/devalue": { @@ -1644,486 +1657,551 @@ "integrity": "sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==" }, "node_modules/@nuxt/devtools": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@nuxt/devtools/-/devtools-1.3.1.tgz", - "integrity": "sha512-SuiuqtlN6OMPn7hYqbydcJmRF/L86yxi8ApcjNVnMURYBPaAAN9egkEFpQ6AjzjX+UnaG1hU8FE0w6pWKSRp3A==", - "dependencies": { - "@antfu/utils": "^0.7.8", - "@nuxt/devtools-kit": "1.3.1", - "@nuxt/devtools-wizard": "1.3.1", - "@nuxt/kit": "^3.11.2", - "@vue/devtools-applet": "^7.1.3", - "@vue/devtools-core": "^7.1.3", - "@vue/devtools-kit": "^7.1.3", - "birpc": "^0.2.17", - "consola": "^3.2.3", - "cronstrue": "^2.50.0", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@nuxt/devtools/-/devtools-1.7.0.tgz", + "integrity": "sha512-uvnjt5Zowkz7tZmnks2cGreg1XZIiSyVzQ2MYiRXACodlXcwJ0dpUS3WTxu8BR562K+772oRdvKie9AQlyZUgg==", + "dependencies": { + "@antfu/utils": "^0.7.10", + "@nuxt/devtools-kit": "1.7.0", + "@nuxt/devtools-wizard": "1.7.0", + "@nuxt/kit": "^3.15.0", + "@vue/devtools-core": "7.6.8", + "@vue/devtools-kit": "7.6.8", + "birpc": "^0.2.19", + "consola": "^3.3.1", + "cronstrue": "^2.52.0", "destr": "^2.0.3", - "error-stack-parser-es": "^0.1.1", + "error-stack-parser-es": "^0.1.5", "execa": "^7.2.0", - "fast-glob": "^3.3.2", - "flatted": "^3.3.1", + "fast-npm-meta": "^0.2.2", + "flatted": "^3.3.2", "get-port-please": "^3.1.2", "hookable": "^5.5.3", - "image-meta": "^0.2.0", + "image-meta": "^0.2.1", "is-installed-globally": "^1.0.0", - "launch-editor": "^2.6.1", - "local-pkg": "^0.5.0", - "magicast": "^0.3.4", - "nypm": "^0.3.8", - "ohash": "^1.1.3", - "pacote": "^18.0.6", + "launch-editor": "^2.9.1", + "local-pkg": "^0.5.1", + "magicast": "^0.3.5", + "nypm": "^0.4.1", + "ohash": "^1.1.4", "pathe": "^1.1.2", "perfect-debounce": "^1.0.0", - "pkg-types": "^1.1.1", + "pkg-types": "^1.2.1", "rc9": "^2.1.2", "scule": "^1.3.0", - "semver": "^7.6.2", - "simple-git": "^3.24.0", - "sirv": "^2.0.4", - "unimport": "^3.7.1", - "vite-plugin-inspect": "^0.8.4", - "vite-plugin-vue-inspector": "^5.1.0", + "semver": "^7.6.3", + "simple-git": "^3.27.0", + "sirv": "^3.0.0", + "tinyglobby": "^0.2.10", + "unimport": "^3.14.5", + "vite-plugin-inspect": "~0.8.9", + "vite-plugin-vue-inspector": "^5.3.1", "which": "^3.0.1", - "ws": "^8.17.0" + "ws": "^8.18.0" }, "bin": { "devtools": "cli.mjs" }, "peerDependencies": { - "nuxt": "^3.9.0", "vite": "*" } }, "node_modules/@nuxt/devtools-kit": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-1.3.1.tgz", - "integrity": "sha512-YckEiiTef3dMckwLLUb+feKV0O8pS9s8ujw/FQ600oQbOCbq6hpWY5HQYxVYc3E41wu87lFiIZ1rnHjO3nM9sw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-1.7.0.tgz", + "integrity": "sha512-+NgZ2uP5BuneqvQbe7EdOEaFEDy8762c99pLABtn7/Ur0ExEsQJMP7pYjjoTfKubhBqecr5Vo9yHkPBj1eHulQ==", "dependencies": { - "@nuxt/kit": "^3.11.2", - "@nuxt/schema": "^3.11.2", + "@nuxt/kit": "^3.15.0", + "@nuxt/schema": "^3.15.0", "execa": "^7.2.0" }, "peerDependencies": { - "nuxt": "^3.9.0", "vite": "*" } }, "node_modules/@nuxt/devtools-wizard": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@nuxt/devtools-wizard/-/devtools-wizard-1.3.1.tgz", - "integrity": "sha512-t6qTp573s1NWoS1nqOqKRld6wFWDiMzoFojBG8GeqTwPi2NYbjyPbQobmvMGiihkWPudMpChhAhYwTTyCPFE7Q==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@nuxt/devtools-wizard/-/devtools-wizard-1.7.0.tgz", + "integrity": "sha512-86Gd92uEw0Dh2ErIYT9TMIrMOISE96fCRN4rxeryTvyiowQOsyrbkCeMNYrEehoRL+lohoyK6iDmFajadPNwWQ==", "dependencies": { - "consola": "^3.2.3", - "diff": "^5.2.0", + "consola": "^3.3.1", + "diff": "^7.0.0", "execa": "^7.2.0", "global-directory": "^4.0.1", - "magicast": "^0.3.4", + "magicast": "^0.3.5", "pathe": "^1.1.2", - "pkg-types": "^1.1.1", + "pkg-types": "^1.2.1", "prompts": "^2.4.2", "rc9": "^2.1.2", - "semver": "^7.6.2" + "semver": "^7.6.3" }, "bin": { "devtools-wizard": "cli.mjs" } }, - "node_modules/@nuxt/kit": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.11.2.tgz", - "integrity": "sha512-yiYKP0ZWMW7T3TCmsv4H8+jEsB/nFriRAR8bKoSqSV9bkVYWPE36sf7JDux30dQ91jSlQG6LQkB3vCHYTS2cIg==", + "node_modules/@nuxt/devtools/node_modules/nypm": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.4.1.tgz", + "integrity": "sha512-1b9mihliBh8UCcKtcGRu//G50iHpjxIQVUqkdhPT/SDVE7KdJKoHXLS0heuYTQCx95dFqiyUbXZB9r8ikn+93g==", "dependencies": { - "@nuxt/schema": "3.11.2", - "c12": "^1.10.0", + "citty": "^0.1.6", "consola": "^3.2.3", - "defu": "^6.1.4", - "globby": "^14.0.1", - "hash-sum": "^2.0.0", - "ignore": "^5.3.1", - "jiti": "^1.21.0", - "knitwork": "^1.1.0", - "mlly": "^1.6.1", "pathe": "^1.1.2", - "pkg-types": "^1.0.3", - "scule": "^1.3.0", - "semver": "^7.6.0", - "ufo": "^1.5.3", - "unctx": "^2.3.1", - "unimport": "^3.7.1", - "untyped": "^1.4.2" + "pkg-types": "^1.2.1", + "tinyexec": "^0.3.1", + "ufo": "^1.5.4" }, - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/@nuxt/schema": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.11.2.tgz", - "integrity": "sha512-Z0bx7N08itD5edtpkstImLctWMNvxTArsKXzS35ZuqyAyKBPcRjO1CU01slH0ahO30Gg9kbck3/RKNZPwfOjJg==", - "dependencies": { - "@nuxt/ui-templates": "^1.3.2", - "consola": "^3.2.3", - "defu": "^6.1.4", - "hookable": "^5.5.3", - "pathe": "^1.1.2", - "pkg-types": "^1.0.3", - "scule": "^1.3.0", - "std-env": "^3.7.0", - "ufo": "^1.5.3", - "unimport": "^3.7.1", - "untyped": "^1.4.2" + "bin": { + "nypm": "dist/cli.mjs" }, "engines": { - "node": "^14.18.0 || >=16.10.0" + "node": "^14.16.0 || >=16.10.0" } }, - "node_modules/@nuxt/telemetry": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/@nuxt/telemetry/-/telemetry-2.5.4.tgz", - "integrity": "sha512-KH6wxzsNys69daSO0xUv0LEBAfhwwjK1M+0Cdi1/vxmifCslMIY7lN11B4eywSfscbyVPAYJvANyc7XiVPImBQ==", - "dependencies": { - "@nuxt/kit": "^3.11.2", - "ci-info": "^4.0.0", - "consola": "^3.2.3", - "create-require": "^1.1.1", - "defu": "^6.1.4", - "destr": "^2.0.3", - "dotenv": "^16.4.5", - "git-url-parse": "^14.0.0", - "is-docker": "^3.0.0", - "jiti": "^1.21.0", - "mri": "^1.2.0", - "nanoid": "^5.0.7", - "ofetch": "^1.3.4", - "parse-git-config": "^3.0.0", - "pathe": "^1.1.2", - "rc9": "^2.1.2", - "std-env": "^3.7.0" + "node_modules/@nuxt/devtools/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" }, - "bin": { - "nuxt-telemetry": "bin/nuxt-telemetry.mjs" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@nuxt/ui-templates": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@nuxt/ui-templates/-/ui-templates-1.3.3.tgz", - "integrity": "sha512-3BG5doAREcD50dbKyXgmjD4b1GzY8CUy3T41jMhHZXNDdaNwOd31IBq+D6dV00OSrDVhzrTVj0IxsUsnMyHvIQ==" - }, - "node_modules/@nuxt/vite-builder": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/@nuxt/vite-builder/-/vite-builder-3.11.2.tgz", - "integrity": "sha512-eXTZsAAN4dPz4eA2UD5YU2kD/DqgfyQp1UYsIdCe6+PAVe1ifkUboBjbc0piR5+3qI/S/eqk3nzxRGbiYF7Ccg==", - "dependencies": { - "@nuxt/kit": "3.11.2", - "@rollup/plugin-replace": "^5.0.5", - "@vitejs/plugin-vue": "^5.0.4", - "@vitejs/plugin-vue-jsx": "^3.1.0", - "autoprefixer": "^10.4.19", - "clear": "^0.1.0", - "consola": "^3.2.3", - "cssnano": "^6.1.2", - "defu": "^6.1.4", - "esbuild": "^0.20.2", + "node_modules/@nuxt/devtools/node_modules/unimport": { + "version": "3.14.6", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.14.6.tgz", + "integrity": "sha512-CYvbDaTT04Rh8bmD8jz3WPmHYZRG/NnvYVzwD6V1YAlvvKROlAeNDUBhkBGzNav2RKaeuXvlWYaa1V4Lfi/O0g==", + "dependencies": { + "@rollup/pluginutils": "^5.1.4", + "acorn": "^8.14.0", "escape-string-regexp": "^5.0.0", "estree-walker": "^3.0.3", - "externality": "^1.0.2", - "fs-extra": "^11.2.0", - "get-port-please": "^3.1.2", - "h3": "^1.11.1", - "knitwork": "^1.1.0", - "magic-string": "^0.30.9", - "mlly": "^1.6.1", - "ohash": "^1.1.3", - "pathe": "^1.1.2", - "perfect-debounce": "^1.0.0", - "pkg-types": "^1.0.3", - "postcss": "^8.4.38", - "rollup-plugin-visualizer": "^5.12.0", - "std-env": "^3.7.0", - "strip-literal": "^2.1.0", - "ufo": "^1.5.3", - "unenv": "^1.9.0", - "unplugin": "^1.10.1", - "vite": "^5.2.8", - "vite-node": "^1.4.0", - "vite-plugin-checker": "^0.6.4", - "vue-bundle-renderer": "^2.0.0" - }, - "engines": { - "node": "^14.18.0 || >=16.10.0" - }, - "peerDependencies": { - "vue": "^3.3.4" + "fast-glob": "^3.3.3", + "local-pkg": "^1.0.0", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "pathe": "^2.0.1", + "picomatch": "^4.0.2", + "pkg-types": "^1.3.0", + "scule": "^1.3.0", + "strip-literal": "^2.1.1", + "unplugin": "^1.16.1" } }, - "node_modules/@nuxtjs/meta": { - "version": "3.0.0-beta.16", - "resolved": "https://registry.npmjs.org/@nuxtjs/meta/-/meta-3.0.0-beta.16.tgz", - "integrity": "sha512-BO/jxB6tas8ZvmSzGjwHntAJuSFj8UL7B7cu+emHXgBtq/lldy0wkQ6WGWEB9YgeCqv8zM/OCfEVooVcBtUHsA==", + "node_modules/@nuxt/devtools/node_modules/unimport/node_modules/local-pkg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.0.0.tgz", + "integrity": "sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==", "dependencies": { - "@nuxtjs/pwa-utils": "3.0.0-beta.16" - } - }, - "node_modules/@nuxtjs/pwa-utils": { - "version": "3.0.0-beta.16", - "resolved": "https://registry.npmjs.org/@nuxtjs/pwa-utils/-/pwa-utils-3.0.0-beta.16.tgz", - "integrity": "sha512-3sF8iAstLi/dbQ39S4Zdy/QsK5IArgJ2s/nuGxOTVuxz01m07VdMbJejzsdYbyz31mQP0w4IPFNYOCPZhcvVig==" - }, - "node_modules/@opentelemetry/api": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.8.0.tgz", - "integrity": "sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==", + "mlly": "^1.7.3", + "pkg-types": "^1.3.0" + }, "engines": { - "node": ">=8.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/@opentelemetry/api-logs": { - "version": "0.50.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.50.0.tgz", - "integrity": "sha512-JdZuKrhOYggqOpUljAq4WWNi5nB10PmgoF0y2CvedLGXd0kSawb/UBnWT8gg1ND3bHCNHStAIVT0ELlxJJRqrA==", + "node_modules/@nuxt/devtools/node_modules/unimport/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + }, + "node_modules/@nuxt/devtools/node_modules/unplugin": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", + "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", "dependencies": { - "@opentelemetry/api": "^1.0.0" + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" }, "engines": { - "node": ">=14" + "node": ">=14.0.0" } }, - "node_modules/@opentelemetry/core": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.24.1.tgz", - "integrity": "sha512-wMSGfsdmibI88K9wB498zXY04yThPexo8jvwNNlm542HZB7XrrMRBbAyKJqG8qDRJwIBdBrPMi4V9ZPW/sqrcg==", + "node_modules/@nuxt/kit": { + "version": "3.15.4", + "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.15.4.tgz", + "integrity": "sha512-dr7I7eZOoRLl4uxdxeL2dQsH0OrbEiVPIyBHnBpA4co24CBnoJoF+JINuP9l3PAM3IhUzc5JIVq3/YY3lEc3Hw==", "dependencies": { - "@opentelemetry/semantic-conventions": "1.24.1" + "c12": "^2.0.1", + "consola": "^3.4.0", + "defu": "^6.1.4", + "destr": "^2.0.3", + "globby": "^14.0.2", + "ignore": "^7.0.3", + "jiti": "^2.4.2", + "klona": "^2.0.6", + "knitwork": "^1.2.0", + "mlly": "^1.7.4", + "ohash": "^1.1.4", + "pathe": "^2.0.2", + "pkg-types": "^1.3.1", + "scule": "^1.3.0", + "semver": "^7.6.3", + "std-env": "^3.8.0", + "ufo": "^1.5.4", + "unctx": "^2.4.1", + "unimport": "^4.0.0", + "untyped": "^1.5.2" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "node": ">=18.12.0" } }, - "node_modules/@opentelemetry/otlp-transformer": { - "version": "0.50.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.50.0.tgz", - "integrity": "sha512-s0sl1Yfqd5q1Kjrf6DqXPWzErL+XHhrXOfejh4Vc/SMTNqC902xDsC8JQxbjuramWt/+hibfguIvi7Ns8VLolA==", + "node_modules/@nuxt/kit/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==" + }, + "node_modules/@nuxt/kit/node_modules/local-pkg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.0.0.tgz", + "integrity": "sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==", "dependencies": { - "@opentelemetry/api-logs": "0.50.0", - "@opentelemetry/core": "1.23.0", - "@opentelemetry/resources": "1.23.0", - "@opentelemetry/sdk-logs": "0.50.0", - "@opentelemetry/sdk-metrics": "1.23.0", - "@opentelemetry/sdk-trace-base": "1.23.0" + "mlly": "^1.7.3", + "pkg-types": "^1.3.0" }, "engines": { "node": ">=14" }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.9.0" + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/core": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.23.0.tgz", - "integrity": "sha512-hdQ/a9TMzMQF/BO8Cz1juA43/L5YGtCSiKoOHmrTEf7VMDAZgy8ucpWx3eQTnQ3gBloRcWtzvcrMZABC3PTSKQ==", - "dependencies": { - "@opentelemetry/semantic-conventions": "1.23.0" - }, + "node_modules/@nuxt/kit/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + }, + "node_modules/@nuxt/kit/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "engines": { - "node": ">=14" + "node": ">=12" }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/resources": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.23.0.tgz", - "integrity": "sha512-iPRLfVfcEQynYGo7e4Di+ti+YQTAY0h5mQEUJcHlU9JOqpb4x965O6PZ+wMcwYVY63G96KtdS86YCM1BF1vQZg==", + "node_modules/@nuxt/kit/node_modules/strip-literal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz", + "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", "dependencies": { - "@opentelemetry/core": "1.23.0", - "@opentelemetry/semantic-conventions": "1.23.0" - }, - "engines": { - "node": ">=14" + "js-tokens": "^9.0.1" }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.23.0.tgz", - "integrity": "sha512-PzBmZM8hBomUqvCddF/5Olyyviayka44O5nDWq673np3ctnvwMOvNrsUORZjKja1zJbwEuD9niAGbnVrz3jwRQ==", + "node_modules/@nuxt/kit/node_modules/unimport": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-4.0.0.tgz", + "integrity": "sha512-FH+yZ36YaVlh0ZjHesP20Q4uL+wL0EqTNxDZcUupsIn6WRYXZAbIYEMDLTaLBpkNVzFpqZXS+am51/HR3ANUNw==", "dependencies": { - "@opentelemetry/core": "1.23.0", - "@opentelemetry/resources": "1.23.0", - "@opentelemetry/semantic-conventions": "1.23.0" + "@rollup/pluginutils": "^5.1.4", + "acorn": "^8.14.0", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "fast-glob": "^3.3.3", + "local-pkg": "^1.0.0", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "pathe": "^2.0.2", + "picomatch": "^4.0.2", + "pkg-types": "^1.3.1", + "scule": "^1.3.0", + "strip-literal": "^3.0.0", + "unplugin": "^2.1.2" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "node": ">=18.12.0" } }, - "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.23.0.tgz", - "integrity": "sha512-MiqFvfOzfR31t8cc74CTP1OZfz7MbqpAnLCra8NqQoaHJX6ncIRTdYOQYBDQ2uFISDq0WY8Y9dDTWvsgzzBYRg==", + "node_modules/@nuxt/kit/node_modules/unplugin": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.1.2.tgz", + "integrity": "sha512-Q3LU0e4zxKfRko1wMV2HmP8lB9KWislY7hxXpxd+lGx0PRInE4vhMBVEZwpdVYHvtqzhSrzuIfErsob6bQfCzw==", + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, "engines": { - "node": ">=14" + "node": ">=18.12.0" } }, - "node_modules/@opentelemetry/resources": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.24.1.tgz", - "integrity": "sha512-cyv0MwAaPF7O86x5hk3NNgenMObeejZFLJJDVuSeSMIsknlsj3oOZzRv3qSzlwYomXsICfBeFFlxwHQte5mGXQ==", + "node_modules/@nuxt/schema": { + "version": "3.15.4", + "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.15.4.tgz", + "integrity": "sha512-pAYZb/3ocSC/db1EFd5y+otmgHqUkvfxfhd9EknDB5DygnJuOIQNuGJ7LMJM6S2c0DYgBIHOdEelLxKHOjwbgQ==", "dependencies": { - "@opentelemetry/core": "1.24.1", - "@opentelemetry/semantic-conventions": "1.24.1" + "consola": "^3.4.0", + "defu": "^6.1.4", + "pathe": "^2.0.2", + "std-env": "^3.8.0" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "node": "^14.18.0 || >=16.10.0" } }, - "node_modules/@opentelemetry/sdk-logs": { - "version": "0.50.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.50.0.tgz", - "integrity": "sha512-PeUEupBB29p9nlPNqXoa1PUWNLsZnxG0DCDj3sHqzae+8y76B/A5hvZjg03ulWdnvBLYpnJslqzylG9E0IL87g==", + "node_modules/@nuxt/schema/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + }, + "node_modules/@nuxt/telemetry": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@nuxt/telemetry/-/telemetry-2.6.4.tgz", + "integrity": "sha512-2Lgdn07Suraly5dSfVQ4ttBQBMtmjvCTGKGUHpc1UyH87HT9xCm3KLFO0UcVQ8+LNYCgoOaK7lq9qDJOfBfZ5A==", "dependencies": { - "@opentelemetry/core": "1.23.0", - "@opentelemetry/resources": "1.23.0" + "@nuxt/kit": "^3.15.1", + "citty": "^0.1.6", + "consola": "^3.3.1", + "destr": "^2.0.3", + "dotenv": "^16.4.7", + "git-url-parse": "^16.0.0", + "is-docker": "^3.0.0", + "ofetch": "^1.4.1", + "package-manager-detector": "^0.2.8", + "parse-git-config": "^3.0.0", + "pathe": "^2.0.0", + "rc9": "^2.1.2", + "std-env": "^3.8.0" }, - "engines": { - "node": ">=14" + "bin": { + "nuxt-telemetry": "bin/nuxt-telemetry.mjs" }, - "peerDependencies": { - "@opentelemetry/api": ">=1.4.0 <1.9.0", - "@opentelemetry/api-logs": ">=0.39.1" + "engines": { + "node": ">=18.20.5" } }, - "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/core": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.23.0.tgz", - "integrity": "sha512-hdQ/a9TMzMQF/BO8Cz1juA43/L5YGtCSiKoOHmrTEf7VMDAZgy8ucpWx3eQTnQ3gBloRcWtzvcrMZABC3PTSKQ==", + "node_modules/@nuxt/telemetry/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + }, + "node_modules/@nuxt/test-utils": { + "version": "3.15.4", + "resolved": "https://registry.npmjs.org/@nuxt/test-utils/-/test-utils-3.15.4.tgz", + "integrity": "sha512-R5eNXILsB5GCTMgoKdW3rN9rNBQCVBqxw4+tcujNplcivbJp7lQrRMHlbR9ijAJ1jEMkDNXdOQGbM1RnWvDuuQ==", + "dev": true, "dependencies": { - "@opentelemetry/semantic-conventions": "1.23.0" + "@nuxt/kit": "^3.15.1", + "@nuxt/schema": "^3.15.1", + "c12": "^2.0.1", + "consola": "^3.3.3", + "defu": "^6.1.4", + "destr": "^2.0.3", + "estree-walker": "^3.0.3", + "fake-indexeddb": "^6.0.0", + "get-port-please": "^3.1.2", + "h3": "^1.13.1", + "local-pkg": "^1.0.0", + "magic-string": "^0.30.17", + "node-fetch-native": "^1.6.4", + "ofetch": "^1.4.1", + "pathe": "^2.0.1", + "perfect-debounce": "^1.0.0", + "radix3": "^1.1.2", + "scule": "^1.3.0", + "std-env": "^3.8.0", + "tinyexec": "^0.3.2", + "ufo": "^1.5.4", + "unenv": "^1.10.0", + "unplugin": "^2.1.2", + "vite": "^6.0.7", + "vitest-environment-nuxt": "^1.0.1", + "vue": "^3.5.13" }, "engines": { - "node": ">=14" + "node": "^18.20.5 || ^20.9.0 || ^22.0.0 || >=23.0.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "@cucumber/cucumber": "^10.3.1 || ^11.0.0", + "@jest/globals": "^29.5.0", + "@playwright/test": "^1.43.1", + "@testing-library/vue": "^7.0.0 || ^8.0.1", + "@vue/test-utils": "^2.4.2", + "happy-dom": "^9.10.9 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", + "jsdom": "^22.0.0 || ^23.0.0 || ^24.0.0 || ^25.0.0 || ^26.0.0", + "playwright-core": "^1.43.1", + "vitest": "^0.34.6 || ^1.0.0 || ^2.0.0 || ^3.0.0-beta.3" + }, + "peerDependenciesMeta": { + "@cucumber/cucumber": { + "optional": true + }, + "@jest/globals": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "@testing-library/vue": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "@vue/test-utils": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "playwright-core": { + "optional": true + }, + "vitest": { + "optional": true + } } }, - "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.23.0.tgz", - "integrity": "sha512-iPRLfVfcEQynYGo7e4Di+ti+YQTAY0h5mQEUJcHlU9JOqpb4x965O6PZ+wMcwYVY63G96KtdS86YCM1BF1vQZg==", + "node_modules/@nuxt/test-utils/node_modules/local-pkg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.0.0.tgz", + "integrity": "sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==", + "dev": true, "dependencies": { - "@opentelemetry/core": "1.23.0", - "@opentelemetry/semantic-conventions": "1.23.0" + "mlly": "^1.7.3", + "pkg-types": "^1.3.0" }, "engines": { "node": ">=14" }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.23.0.tgz", - "integrity": "sha512-MiqFvfOzfR31t8cc74CTP1OZfz7MbqpAnLCra8NqQoaHJX6ncIRTdYOQYBDQ2uFISDq0WY8Y9dDTWvsgzzBYRg==", - "engines": { - "node": ">=14" - } + "node_modules/@nuxt/test-utils/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==", + "dev": true }, - "node_modules/@opentelemetry/sdk-metrics": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.23.0.tgz", - "integrity": "sha512-4OkvW6+wST4h6LFG23rXSTf6nmTf201h9dzq7bE0z5R9ESEVLERZz6WXwE7PSgg1gdjlaznm1jLJf8GttypFDg==", + "node_modules/@nuxt/test-utils/node_modules/unplugin": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.1.2.tgz", + "integrity": "sha512-Q3LU0e4zxKfRko1wMV2HmP8lB9KWislY7hxXpxd+lGx0PRInE4vhMBVEZwpdVYHvtqzhSrzuIfErsob6bQfCzw==", + "dev": true, "dependencies": { - "@opentelemetry/core": "1.23.0", - "@opentelemetry/resources": "1.23.0", - "lodash.merge": "^4.6.2" + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.9.0" + "node": ">=18.12.0" } }, - "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.23.0.tgz", - "integrity": "sha512-hdQ/a9TMzMQF/BO8Cz1juA43/L5YGtCSiKoOHmrTEf7VMDAZgy8ucpWx3eQTnQ3gBloRcWtzvcrMZABC3PTSKQ==", - "dependencies": { - "@opentelemetry/semantic-conventions": "1.23.0" + "node_modules/@nuxt/vite-builder": { + "version": "3.15.4", + "resolved": "https://registry.npmjs.org/@nuxt/vite-builder/-/vite-builder-3.15.4.tgz", + "integrity": "sha512-yBK6tWT973+ExKC3ciTWymZpjJ+enToOtYz574kXCyGO0PbSnuXdoJKTvrwXw1lK97PajCKxExlmwI/3oLOmMQ==", + "dependencies": { + "@nuxt/kit": "3.15.4", + "@rollup/plugin-replace": "^6.0.2", + "@vitejs/plugin-vue": "^5.2.1", + "@vitejs/plugin-vue-jsx": "^4.1.1", + "autoprefixer": "^10.4.20", + "consola": "^3.4.0", + "cssnano": "^7.0.6", + "defu": "^6.1.4", + "esbuild": "^0.24.2", + "escape-string-regexp": "^5.0.0", + "externality": "^1.0.2", + "get-port-please": "^3.1.2", + "h3": "^1.14.0", + "jiti": "^2.4.2", + "knitwork": "^1.2.0", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "ohash": "^1.1.4", + "pathe": "^2.0.2", + "perfect-debounce": "^1.0.0", + "pkg-types": "^1.3.1", + "postcss": "^8.5.1", + "rollup-plugin-visualizer": "^5.13.1", + "std-env": "^3.8.0", + "ufo": "^1.5.4", + "unenv": "^1.10.0", + "unplugin": "^2.1.2", + "vite": "^6.0.11", + "vite-node": "^3.0.4", + "vite-plugin-checker": "^0.8.0", + "vue-bundle-renderer": "^2.1.1" }, "engines": { - "node": ">=14" + "node": "^18.12.0 || ^20.9.0 || >=22.0.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "vue": "^3.3.4" } }, - "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.23.0.tgz", - "integrity": "sha512-iPRLfVfcEQynYGo7e4Di+ti+YQTAY0h5mQEUJcHlU9JOqpb4x965O6PZ+wMcwYVY63G96KtdS86YCM1BF1vQZg==", + "node_modules/@nuxt/vite-builder/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + }, + "node_modules/@nuxt/vite-builder/node_modules/unplugin": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.1.2.tgz", + "integrity": "sha512-Q3LU0e4zxKfRko1wMV2HmP8lB9KWislY7hxXpxd+lGx0PRInE4vhMBVEZwpdVYHvtqzhSrzuIfErsob6bQfCzw==", "dependencies": { - "@opentelemetry/core": "1.23.0", - "@opentelemetry/semantic-conventions": "1.23.0" + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" - } - }, - "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.23.0.tgz", - "integrity": "sha512-MiqFvfOzfR31t8cc74CTP1OZfz7MbqpAnLCra8NqQoaHJX6ncIRTdYOQYBDQ2uFISDq0WY8Y9dDTWvsgzzBYRg==", - "engines": { - "node": ">=14" + "node": ">=18.12.0" } }, - "node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.24.1.tgz", - "integrity": "sha512-zz+N423IcySgjihl2NfjBf0qw1RWe11XIAWVrTNOSSI6dtSPJiVom2zipFB2AEEtJWpv0Iz6DY6+TjnyTV5pWg==", + "node_modules/@nuxtjs/tailwindcss": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/@nuxtjs/tailwindcss/-/tailwindcss-6.12.2.tgz", + "integrity": "sha512-qPJiFH67CkTj/2kBGBzqXihOD1rQXMsbVS4vdQvfBxOBLPfGhU1yw7AATdhPl2BBjO2krjJLuZj39t7dnDYOwg==", + "dev": true, "dependencies": { - "@opentelemetry/core": "1.24.1", - "@opentelemetry/resources": "1.24.1", - "@opentelemetry/semantic-conventions": "1.24.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "@nuxt/kit": "^3.13.2", + "autoprefixer": "^10.4.20", + "consola": "^3.2.3", + "defu": "^6.1.4", + "h3": "^1.13.0", + "klona": "^2.0.6", + "pathe": "^1.1.2", + "postcss": "^8.4.47", + "postcss-nesting": "^13.0.0", + "tailwind-config-viewer": "^2.0.4", + "tailwindcss": "~3.4.13", + "ufo": "^1.5.4", + "unctx": "^2.3.1" } }, - "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.24.1.tgz", - "integrity": "sha512-VkliWlS4/+GHLLW7J/rVBA00uXus1SWvwFvcUDxDwmFxYfg/2VI6ekwdXS28cjI8Qz2ky2BzG8OUHo+WeYIWqw==", + "node_modules/@one-ini/wasm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", + "dev": true + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "optional": true, "engines": { - "node": ">=14" + "node": ">=8.0.0" } }, "node_modules/@parcel/watcher": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz", - "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.0.tgz", + "integrity": "sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==", + "hasInstallScript": true, "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", @@ -2138,24 +2216,25 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.4.1", - "@parcel/watcher-darwin-arm64": "2.4.1", - "@parcel/watcher-darwin-x64": "2.4.1", - "@parcel/watcher-freebsd-x64": "2.4.1", - "@parcel/watcher-linux-arm-glibc": "2.4.1", - "@parcel/watcher-linux-arm64-glibc": "2.4.1", - "@parcel/watcher-linux-arm64-musl": "2.4.1", - "@parcel/watcher-linux-x64-glibc": "2.4.1", - "@parcel/watcher-linux-x64-musl": "2.4.1", - "@parcel/watcher-win32-arm64": "2.4.1", - "@parcel/watcher-win32-ia32": "2.4.1", - "@parcel/watcher-win32-x64": "2.4.1" + "@parcel/watcher-android-arm64": "2.5.0", + "@parcel/watcher-darwin-arm64": "2.5.0", + "@parcel/watcher-darwin-x64": "2.5.0", + "@parcel/watcher-freebsd-x64": "2.5.0", + "@parcel/watcher-linux-arm-glibc": "2.5.0", + "@parcel/watcher-linux-arm-musl": "2.5.0", + "@parcel/watcher-linux-arm64-glibc": "2.5.0", + "@parcel/watcher-linux-arm64-musl": "2.5.0", + "@parcel/watcher-linux-x64-glibc": "2.5.0", + "@parcel/watcher-linux-x64-musl": "2.5.0", + "@parcel/watcher-win32-arm64": "2.5.0", + "@parcel/watcher-win32-ia32": "2.5.0", + "@parcel/watcher-win32-x64": "2.5.0" } }, "node_modules/@parcel/watcher-android-arm64": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz", - "integrity": "sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz", + "integrity": "sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==", "cpu": [ "arm64" ], @@ -2172,9 +2251,9 @@ } }, "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz", - "integrity": "sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz", + "integrity": "sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==", "cpu": [ "arm64" ], @@ -2191,9 +2270,9 @@ } }, "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz", - "integrity": "sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz", + "integrity": "sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==", "cpu": [ "x64" ], @@ -2210,9 +2289,9 @@ } }, "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz", - "integrity": "sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz", + "integrity": "sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==", "cpu": [ "x64" ], @@ -2229,9 +2308,28 @@ } }, "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz", - "integrity": "sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz", + "integrity": "sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz", + "integrity": "sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==", "cpu": [ "arm" ], @@ -2248,9 +2346,9 @@ } }, "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz", - "integrity": "sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz", + "integrity": "sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==", "cpu": [ "arm64" ], @@ -2267,9 +2365,9 @@ } }, "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz", - "integrity": "sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz", + "integrity": "sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==", "cpu": [ "arm64" ], @@ -2286,9 +2384,9 @@ } }, "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz", - "integrity": "sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz", + "integrity": "sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==", "cpu": [ "x64" ], @@ -2305,9 +2403,9 @@ } }, "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz", - "integrity": "sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz", + "integrity": "sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==", "cpu": [ "x64" ], @@ -2324,9 +2422,9 @@ } }, "node_modules/@parcel/watcher-wasm": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.4.1.tgz", - "integrity": "sha512-/ZR0RxqxU/xxDGzbzosMjh4W6NdYFMqq2nvo2b8SLi7rsl/4jkL8S5stIikorNkdR50oVDvqb/3JT05WM+CRRA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.5.0.tgz", + "integrity": "sha512-Z4ouuR8Pfggk1EYYbTaIoxc+Yv4o7cGQnH0Xy8+pQ+HbiW+ZnwhcD2LPf/prfq1nIWpAxjOkQ8uSMFWMtBLiVQ==", "bundleDependencies": [ "napi-wasm" ], @@ -2349,9 +2447,9 @@ "license": "MIT" }, "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz", - "integrity": "sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz", + "integrity": "sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==", "cpu": [ "arm64" ], @@ -2368,9 +2466,9 @@ } }, "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz", - "integrity": "sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz", + "integrity": "sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==", "cpu": [ "ia32" ], @@ -2387,9 +2485,9 @@ } }, "node_modules/@parcel/watcher-win32-x64": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz", - "integrity": "sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz", + "integrity": "sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==", "cpu": [ "x64" ], @@ -2417,17 +2515,32 @@ } }, "node_modules/@pinia/nuxt": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@pinia/nuxt/-/nuxt-0.5.1.tgz", - "integrity": "sha512-6wT6TqY81n+7/x3Yhf0yfaJVKkZU42AGqOR0T3+UvChcaOJhSma7OWPN64v+ptYlznat+fS1VTwNAcbi2lzHnw==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@pinia/nuxt/-/nuxt-0.7.0.tgz", + "integrity": "sha512-IAKRl7mQCrFKQtD8Z6EzOz5bQ/px0FdeyaB+70A3igkFzHzKVJVblLCjFwXPBC/IO0EwHuMRk/SMgwkUn82jwg==", "dependencies": { - "@nuxt/kit": "^3.5.0", - "pinia": ">=2.1.7" + "@nuxt/kit": "^3.9.0", + "pinia": "^2.2.6" }, "funding": { "url": "https://github.com/sponsors/posva" } }, + "node_modules/@pinia/testing": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@pinia/testing/-/testing-0.1.7.tgz", + "integrity": "sha512-xcDq6Ry/kNhZ5bsUMl7DeoFXwdume1NYzDggCiDUDKoPQ6Mo0eH9VU7bJvBtlurqe6byAntWoX5IhVFqWzRz/Q==", + "dev": true, + "dependencies": { + "vue-demi": "^0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "pinia": ">=2.2.6" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -2438,17 +2551,171 @@ } }, "node_modules/@polka/url": { - "version": "1.0.0-next.25", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", - "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==" + "version": "1.0.0-next.28", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", + "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==" }, - "node_modules/@rollup/plugin-alias": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-5.1.0.tgz", - "integrity": "sha512-lpA3RZ9PdIG7qqhEfv79tBffNaoDuukFDrmhLqg9ifv99u/ehn+lOg30x2zmhf8AQqQUZaMk/B9fZraQ6/acDQ==", + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "optional": true + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "optional": true + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "optional": true + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "optional": true + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "optional": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "optional": true + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "optional": true + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "optional": true + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "optional": true + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "optional": true + }, + "node_modules/@redocly/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==", "dependencies": { - "slash": "^4.0.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js-replace": "^1.0.1" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@redocly/config": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.17.1.tgz", + "integrity": "sha512-CEmvaJuG7pm2ylQg53emPmtgm4nW2nxBgwXzbVEHpGas/lGnMyN8Zlkgiz6rPw0unASg6VW3wlz27SOL5XFHYQ==" + }, + "node_modules/@redocly/openapi-core": { + "version": "1.25.15", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.25.15.tgz", + "integrity": "sha512-/dpr5zpGj2t1Bf7EIXEboRZm1hsJZBQfv3Q1pkivtdAEg3if2khv+b9gY68aquC6cM/2aQY2kMLy8LlY2tn+Og==", + "dependencies": { + "@redocly/ajv": "^8.11.2", + "@redocly/config": "^0.17.0", + "colorette": "^1.2.0", + "https-proxy-agent": "^7.0.4", + "js-levenshtein": "^1.1.6", + "js-yaml": "^4.1.0", + "lodash.isequal": "^4.5.0", + "minimatch": "^5.0.1", + "node-fetch": "^2.6.1", + "pluralize": "^8.0.0", + "yaml-ast-parser": "0.0.43" + }, + "engines": { + "node": ">=14.19.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@redocly/openapi-core/node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@redocly/openapi-core/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@redocly/openapi-core/node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@redocly/openapi-core/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rollup/plugin-alias": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-5.1.1.tgz", + "integrity": "sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==", "engines": { "node": ">=14.0.0" }, @@ -2461,31 +2728,21 @@ } } }, - "node_modules/@rollup/plugin-alias/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@rollup/plugin-commonjs": { - "version": "25.0.7", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz", - "integrity": "sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==", + "version": "28.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.1.tgz", + "integrity": "sha512-+tNWdlWKbpB3WgBN7ijjYkq9X5uhjmcvyjEght4NmH5fAU++zfQzAJ6wumLS+dNcvwEZhKx2Z+skY8m7v0wGSA==", "dependencies": { "@rollup/pluginutils": "^5.0.1", "commondir": "^1.0.1", "estree-walker": "^2.0.2", - "glob": "^8.0.3", + "fdir": "^6.2.0", "is-reference": "1.2.1", - "magic-string": "^0.30.3" + "magic-string": "^0.30.3", + "picomatch": "^4.0.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0 || 14 >= 14.17" }, "peerDependencies": { "rollup": "^2.68.0||^3.0.0||^4.0.0" @@ -2501,10 +2758,34 @@ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, - "node_modules/@rollup/plugin-inject": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", - "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==", + "node_modules/@rollup/plugin-commonjs/node_modules/fdir": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz", + "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/plugin-inject": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", + "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==", "dependencies": { "@rollup/pluginutils": "^5.0.1", "estree-walker": "^2.0.2", @@ -2547,14 +2828,13 @@ } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", - "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.0.tgz", + "integrity": "sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", "is-module": "^1.0.0", "resolve": "^1.22.1" }, @@ -2571,9 +2851,9 @@ } }, "node_modules/@rollup/plugin-replace": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.5.tgz", - "integrity": "sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-6.0.2.tgz", + "integrity": "sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==", "dependencies": { "@rollup/pluginutils": "^5.0.1", "magic-string": "^0.30.3" @@ -2612,13 +2892,13 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "picomatch": "^4.0.2" }, "engines": { "node": ">=14.0.0" @@ -2637,10 +2917,21 @@ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz", - "integrity": "sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.0.tgz", + "integrity": "sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==", "cpu": [ "arm" ], @@ -2650,9 +2941,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz", - "integrity": "sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.0.tgz", + "integrity": "sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==", "cpu": [ "arm64" ], @@ -2662,9 +2953,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz", - "integrity": "sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.0.tgz", + "integrity": "sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==", "cpu": [ "arm64" ], @@ -2674,9 +2965,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz", - "integrity": "sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.0.tgz", + "integrity": "sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==", "cpu": [ "x64" ], @@ -2685,10 +2976,34 @@ "darwin" ] }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.0.tgz", + "integrity": "sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.0.tgz", + "integrity": "sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz", - "integrity": "sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.0.tgz", + "integrity": "sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==", "cpu": [ "arm" ], @@ -2698,9 +3013,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz", - "integrity": "sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.0.tgz", + "integrity": "sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==", "cpu": [ "arm" ], @@ -2710,9 +3025,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz", - "integrity": "sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.0.tgz", + "integrity": "sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==", "cpu": [ "arm64" ], @@ -2722,9 +3037,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz", - "integrity": "sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.0.tgz", + "integrity": "sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==", "cpu": [ "arm64" ], @@ -2734,9 +3049,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz", - "integrity": "sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.0.tgz", + "integrity": "sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==", "cpu": [ "ppc64" ], @@ -2746,9 +3061,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz", - "integrity": "sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.0.tgz", + "integrity": "sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==", "cpu": [ "riscv64" ], @@ -2758,9 +3073,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz", - "integrity": "sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.0.tgz", + "integrity": "sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==", "cpu": [ "s390x" ], @@ -2770,9 +3085,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz", - "integrity": "sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.0.tgz", + "integrity": "sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==", "cpu": [ "x64" ], @@ -2782,9 +3097,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz", - "integrity": "sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.0.tgz", + "integrity": "sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==", "cpu": [ "x64" ], @@ -2794,9 +3109,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz", - "integrity": "sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.0.tgz", + "integrity": "sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==", "cpu": [ "arm64" ], @@ -2806,9 +3121,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz", - "integrity": "sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.0.tgz", + "integrity": "sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==", "cpu": [ "ia32" ], @@ -2818,9 +3133,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz", - "integrity": "sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.0.tgz", + "integrity": "sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==", "cpu": [ "x64" ], @@ -2829,79 +3144,6 @@ "win32" ] }, - "node_modules/@shikijs/core": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.5.2.tgz", - "integrity": "sha512-wSAOgaz48GmhILFElMCeQypSZmj6Ru6DttOOtl3KNkdJ17ApQuGNCfzpk4cClasVrnIu45++2DBwG4LNMQAfaA==" - }, - "node_modules/@sigstore/bundle": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", - "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", - "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", - "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/sign": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", - "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^13.0.1", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", - "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", - "tuf-js": "^2.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/verify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", - "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.1.0", - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, "node_modules/@sindresorhus/merge-streams": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", @@ -2913,6 +3155,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "optional": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -2921,632 +3172,633 @@ "node": ">=10.13.0" } }, - "node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", - "engines": { - "node": "^16.14.0 || >=18.0.0" + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" } }, - "node_modules/@tufjs/models": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", - "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", + "node_modules/@types/caseless": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", + "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==", + "optional": true + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" } }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" } }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" }, "node_modules/@types/http-proxy": { - "version": "1.17.14", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", - "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "version": "1.17.15", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", + "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/lodash": { - "version": "4.17.7", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz", - "integrity": "sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==", - "dev": true + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "devOptional": true }, - "node_modules/@types/node": { - "version": "20.12.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", - "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", + "node_modules/@types/jsonwebtoken": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz", + "integrity": "sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==", "dependencies": { - "undici-types": "~5.26.4" + "@types/node": "*" } }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==" + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", + "optional": true }, - "node_modules/@types/tinycolor2": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.6.tgz", - "integrity": "sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==", - "dev": true + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + }, + "node_modules/@types/node": { + "version": "22.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", + "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/parse-path": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/parse-path/-/parse-path-7.0.3.tgz", + "integrity": "sha512-LriObC2+KYZD3FzCrgWGv/qufdUy4eXrxcLgQMfYXgPbLIecKIsVBaQgUPmxSSLcjmYbDTQbMgr6qr6l/eb7Bg==" }, - "node_modules/@types/web-bluetooth": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", - "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" + "node_modules/@types/qs": { + "version": "6.9.17", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", + "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==" }, - "node_modules/@unhead/dom": { - "version": "1.9.10", - "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-1.9.10.tgz", - "integrity": "sha512-F4sBrmd8kG8MEqcVTGL0Y6tXbJMdWK724pznUzefpZTs1GaVypFikLluaLt4EnICcVhOBSe4TkGrc8N21IJJzQ==", + "node_modules/@types/quill": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@types/quill/-/quill-2.0.14.tgz", + "integrity": "sha512-zvoXCRnc2Dl8g+7/9VSAmRWPN6oH+MVhTPizmCR+GJCITplZ5VRVzMs4+a/nOE3yzNwEZqylJJrMB07bwbM1/g==", + "dev": true, "dependencies": { - "@unhead/schema": "1.9.10", - "@unhead/shared": "1.9.10" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" + "parchment": "^1.1.2", + "quill-delta": "^5.1.0" } }, - "node_modules/@unhead/schema": { - "version": "1.9.10", - "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.9.10.tgz", - "integrity": "sha512-3ROh0doKfA7cIcU0zmjYVvNOiJuxSOcjInL+7iOFIxQovEWr1PcDnrnbEWGJsXrLA8eqjrjmhuDqAr3JbMGsLg==", + "node_modules/@types/quill/node_modules/parchment": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz", + "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + }, + "node_modules/@types/request": { + "version": "2.48.12", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", + "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", + "optional": true, "dependencies": { - "hookable": "^5.5.3", - "zhead": "^2.2.4" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" } }, - "node_modules/@unhead/shared": { - "version": "1.9.10", - "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.9.10.tgz", - "integrity": "sha512-LBXxm/8ahY4FZ0FbWVaM1ANFO5QpPzvaYwjAQhgHANsrqFP2EqoGcOv1CfhdQbxg8vpGXkjI7m0r/8E9d3JoDA==", + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dependencies": { - "@unhead/schema": "1.9.10" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" + "@types/mime": "^1", + "@types/node": "*" } }, - "node_modules/@unhead/ssr": { - "version": "1.9.10", - "resolved": "https://registry.npmjs.org/@unhead/ssr/-/ssr-1.9.10.tgz", - "integrity": "sha512-4hy3uFrYGJd5h0jmCIC0vFBf5DDhbz+j6tkATTNIaLz5lR4ZdFT+ipwzR20GvnaOiGWiOhZF3yv9FTJQyX4jog==", + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dependencies": { - "@unhead/schema": "1.9.10", - "@unhead/shared": "1.9.10" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" } }, - "node_modules/@unhead/vue": { - "version": "1.9.10", - "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-1.9.10.tgz", - "integrity": "sha512-Zi65eTU5IIaqqXAVOVJ4fnwJRR751FZIFlzYOjIekf1eNkISy+A4xyz3NIEQWSlXCrOiDNgDhT0YgKUcx5FfHQ==", + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "optional": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.21.0.tgz", + "integrity": "sha512-eTH+UOR4I7WbdQnG4Z48ebIA6Bgi7WO8HvFEneeYBxG8qCOYgTOFPSg6ek9ITIDvGjDQzWHcoWHCDO2biByNzA==", + "dev": true, "dependencies": { - "@unhead/schema": "1.9.10", - "@unhead/shared": "1.9.10", - "hookable": "^5.5.3", - "unhead": "1.9.10" + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.21.0", + "@typescript-eslint/type-utils": "8.21.0", + "@typescript-eslint/utils": "8.21.0", + "@typescript-eslint/visitor-keys": "8.21.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/harlan-zw" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "vue": ">=2.7 || >=3" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, - "node_modules/@unocss/astro": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/astro/-/astro-0.60.3.tgz", - "integrity": "sha512-duFuyVhqYqQ15JZqx41UNgIxndqYRbOwDkJ7Y+R5N+u59a27vImz8B9eOFkHaZCFBWyH5jywkT8LVK1sfddFaw==", - "peer": true, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.21.0.tgz", + "integrity": "sha512-Wy+/sdEH9kI3w9civgACwabHbKl+qIOu0uFZ9IMKzX3Jpv9og0ZBJrZExGrPpFAY7rWsXuxs5e7CPPP17A4eYA==", + "dev": true, "dependencies": { - "@unocss/core": "0.60.3", - "@unocss/reset": "0.60.3", - "@unocss/vite": "0.60.3" + "@typescript-eslint/scope-manager": "8.21.0", + "@typescript-eslint/types": "8.21.0", + "@typescript-eslint/typescript-estree": "8.21.0", + "@typescript-eslint/visitor-keys": "8.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0" - }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, - "node_modules/@unocss/cli": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/cli/-/cli-0.60.3.tgz", - "integrity": "sha512-bN829zn6k4hrvDTLnUcI2uAJnSevHwlkOCaYxN/C+v11uGxIewk5Xum6Vm5kZ8JTpCR1jEu/i7wIBNde3XKN5g==", - "peer": true, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.21.0.tgz", + "integrity": "sha512-G3IBKz0/0IPfdeGRMbp+4rbjfSSdnGkXsM/pFZA8zM9t9klXDnB/YnKOBQ0GoPmoROa4bCq2NeHgJa5ydsQ4mA==", + "dev": true, "dependencies": { - "@ampproject/remapping": "^2.3.0", - "@rollup/pluginutils": "^5.1.0", - "@unocss/config": "0.60.3", - "@unocss/core": "0.60.3", - "@unocss/preset-uno": "0.60.3", - "cac": "^6.7.14", - "chokidar": "^3.6.0", - "colorette": "^2.0.20", - "consola": "^3.2.3", - "fast-glob": "^3.3.2", - "magic-string": "^0.30.10", - "pathe": "^1.1.2", - "perfect-debounce": "^1.0.0" - }, - "bin": { - "unocss": "bin/unocss.mjs" + "@typescript-eslint/types": "8.21.0", + "@typescript-eslint/visitor-keys": "8.21.0" }, "engines": { - "node": ">=14" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@unocss/config": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/config/-/config-0.60.3.tgz", - "integrity": "sha512-3RGD7h3bS4qZA/Khcqhn1EgLgyPc85FSz5rubdywHRdHlpY9sdmuGEJahvqSLMN4MmdYQDmqEIEAJjENrdgZeQ==", - "peer": true, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.21.0.tgz", + "integrity": "sha512-95OsL6J2BtzoBxHicoXHxgk3z+9P3BEcQTpBKriqiYzLKnM2DeSqs+sndMKdamU8FosiadQFT3D+BSL9EKnAJQ==", + "dev": true, "dependencies": { - "@unocss/core": "0.60.3", - "unconfig": "^0.3.13" + "@typescript-eslint/typescript-estree": "8.21.0", + "@typescript-eslint/utils": "8.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.0.0" }, "engines": { - "node": ">=14" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, - "node_modules/@unocss/core": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/core/-/core-0.60.3.tgz", - "integrity": "sha512-4bBX1pavDl2DSCozEII7bxYGT0IkyO7kKlUuCtooTePWyLjf2F7essdzHkJ00EpNR64kkebR9V0lqBMBo07VPw==", - "peer": true, + "node_modules/@typescript-eslint/types": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.21.0.tgz", + "integrity": "sha512-PAL6LUuQwotLW2a8VsySDBwYMm129vFm4tMVlylzdoTybTHaAi0oBp7Ac6LhSrHHOdLM3efH+nAR6hAWoMF89A==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, "funding": { - "url": "https://github.com/sponsors/antfu" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@unocss/extractor-arbitrary-variants": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/extractor-arbitrary-variants/-/extractor-arbitrary-variants-0.60.3.tgz", - "integrity": "sha512-PnwNwkeAHmbJbrf5XN0xQG1KT1VQEye8neYn5yz1MHnT8Cj2nqjrqoCRGLCLhpOUg3/MNj+bpiA7hGnFbXWaCQ==", - "peer": true, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.21.0.tgz", + "integrity": "sha512-x+aeKh/AjAArSauz0GiQZsjT8ciadNMHdkUSwBB9Z6PrKc/4knM4g3UfHml6oDJmKC88a6//cdxnO/+P2LkMcg==", + "dev": true, "dependencies": { - "@unocss/core": "0.60.3" + "@typescript-eslint/types": "8.21.0", + "@typescript-eslint/visitor-keys": "8.21.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" } }, - "node_modules/@unocss/inspector": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/inspector/-/inspector-0.60.3.tgz", - "integrity": "sha512-2cXAPA1yddB79mmpMXxPpSpizn4TskAsB7aSocbprOTYIU2Ff53gfkkijnLixrBvbG8xw91d9oPuI5Hm9GCyMQ==", - "peer": true, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { - "@unocss/core": "0.60.3", - "@unocss/rule-utils": "0.60.3", - "gzip-size": "^6.0.0", - "sirv": "^2.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "balanced-match": "^1.0.0" } }, - "node_modules/@unocss/inspector/node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "peer": true, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, "dependencies": { - "duplexer": "^0.1.2" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@unocss/postcss": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/postcss/-/postcss-0.60.3.tgz", - "integrity": "sha512-7jRsKgMz4wr3Rvnr/RpK/7g6o8bMrqjTb01imgHeaw7cmQsa9sH1HPCp+4lvHh2/QKKLwwRAC+fdnNmsf8JKjA==", - "peer": true, + "node_modules/@typescript-eslint/utils": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.21.0.tgz", + "integrity": "sha512-xcXBfcq0Kaxgj7dwejMbFyq7IOHgpNMtVuDveK7w3ZGwG9owKzhALVwKpTF2yrZmEwl9SWdetf3fxNzJQaVuxw==", + "dev": true, "dependencies": { - "@unocss/config": "0.60.3", - "@unocss/core": "0.60.3", - "@unocss/rule-utils": "0.60.3", - "css-tree": "^2.3.1", - "fast-glob": "^3.3.2", - "magic-string": "^0.30.10", - "postcss": "^8.4.38" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.21.0", + "@typescript-eslint/types": "8.21.0", + "@typescript-eslint/typescript-estree": "8.21.0" }, "engines": { - "node": ">=14" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "postcss": "^8.4.21" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, - "node_modules/@unocss/preset-attributify": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/preset-attributify/-/preset-attributify-0.60.3.tgz", - "integrity": "sha512-G/Lx9xq/tVKvjp/CcACyLU+p3mcrpgkMvy+Z3NSHfBAZAmbieBMFhwROxt5R8Bny66q3fYDtxxx+likpokpOAQ==", - "peer": true, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.21.0.tgz", + "integrity": "sha512-BkLMNpdV6prozk8LlyK/SOoWLmUFi+ZD+pcqti9ILCbVvHGk1ui1g4jJOc2WDLaeExz2qWwojxlPce5PljcT3w==", + "dev": true, "dependencies": { - "@unocss/core": "0.60.3" + "@typescript-eslint/types": "8.21.0", + "eslint-visitor-keys": "^4.2.0" }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/preset-icons": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/preset-icons/-/preset-icons-0.60.3.tgz", - "integrity": "sha512-L3Ecr36xC+Y8v5WMQcNsGoOzu0HpgNLh5RlC2abs8OyBDGn1k3UqdEFdrhRt3bXpln9b8JkstHO7ZwYPgr2/Cg==", - "peer": true, - "dependencies": { - "@iconify/utils": "^2.1.23", - "@unocss/core": "0.60.3", - "ofetch": "^1.3.4" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@unocss/preset-mini": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/preset-mini/-/preset-mini-0.60.3.tgz", - "integrity": "sha512-7en8KBX3lN1Y6eCprbzA1QVfyXZD03B+oAxFXH8QPv5jRIL8Lm8sbXqE+VTsSME/OVp4DnS6LdGtDAm9mvIOSw==", - "peer": true, + "node_modules/@unhead/dom": { + "version": "1.11.18", + "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-1.11.18.tgz", + "integrity": "sha512-zQuJUw/et9zYEV0SZWTDX23IgurwMaXycAuxt4L6OgNL0T4TWP3a0J/Vm3Q02hmdNo/cPKeVBrwBdnFUXjGU4w==", "dependencies": { - "@unocss/core": "0.60.3", - "@unocss/extractor-arbitrary-variants": "0.60.3", - "@unocss/rule-utils": "0.60.3" + "@unhead/schema": "1.11.18", + "@unhead/shared": "1.11.18" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://github.com/sponsors/harlan-zw" } }, - "node_modules/@unocss/preset-tagify": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/preset-tagify/-/preset-tagify-0.60.3.tgz", - "integrity": "sha512-pzD6bgtGuIk7M1n/JQiR6EpwnVvafSTHoM70Jhf+T8MSuatDb+KFJCn3VELV2v38aikcUY5cTf95jqHQdzOAhQ==", - "peer": true, + "node_modules/@unhead/schema": { + "version": "1.11.18", + "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.11.18.tgz", + "integrity": "sha512-a3TA/OJCRdfbFhcA3Hq24k1ZU1o9szicESrw8DZcGyQFacHnh84mVgnyqSkMnwgCmfN4kvjSiTBlLEHS6+wATw==", "dependencies": { - "@unocss/core": "0.60.3" + "hookable": "^5.5.3", + "zhead": "^2.2.4" }, "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/preset-typography": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/preset-typography/-/preset-typography-0.60.3.tgz", - "integrity": "sha512-cOXOnxkgH0ZiYg/oHBbabzXi1q6oTZWgQ4fqrVxGI2CD4oiWYaPU/wzKsx930D6uBSIlBVDX/cov2j0dPWjgJg==", - "peer": true, - "dependencies": { - "@unocss/core": "0.60.3", - "@unocss/preset-mini": "0.60.3" + "url": "https://github.com/sponsors/harlan-zw" } }, - "node_modules/@unocss/preset-uno": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/preset-uno/-/preset-uno-0.60.3.tgz", - "integrity": "sha512-PJSR78uaIRTsD9RFSQLwsrGAsjQoW5nWenU4n4GyZeskDsyQVgOcaKtvh+0aYjYdWBa1UvxeUL8Y+m29K4HnAA==", - "peer": true, + "node_modules/@unhead/shared": { + "version": "1.11.18", + "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.11.18.tgz", + "integrity": "sha512-OsupRQRxJqqnuKiL1Guqipjbl7MndD5DofvmGa3PFGu2qNPmOmH2mxGFjRBBgq2XxY1KalIHl/2I9HV6gbK8cw==", "dependencies": { - "@unocss/core": "0.60.3", - "@unocss/preset-mini": "0.60.3", - "@unocss/preset-wind": "0.60.3", - "@unocss/rule-utils": "0.60.3" + "@unhead/schema": "1.11.18", + "packrup": "^0.1.2" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://github.com/sponsors/harlan-zw" } }, - "node_modules/@unocss/preset-web-fonts": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/preset-web-fonts/-/preset-web-fonts-0.60.3.tgz", - "integrity": "sha512-uYHvnqgLDawG3o9oBbasPWbSZ93kzk2JQBcH6xmHh7xqYtRdHqVbUjVU1zIqSjXm19SxFriSrNTl4ct2+/pJIg==", - "peer": true, + "node_modules/@unhead/ssr": { + "version": "1.11.18", + "resolved": "https://registry.npmjs.org/@unhead/ssr/-/ssr-1.11.18.tgz", + "integrity": "sha512-uaHPz0RRAb18yKeCmHyHk5QKWRk/uHpOrqSbhRXTOhbrd3Ur3gGTVaAoyUoRYKGPU5B5/pyHh3TfLw0LkfrH1A==", "dependencies": { - "@unocss/core": "0.60.3", - "ofetch": "^1.3.4" + "@unhead/schema": "1.11.18", + "@unhead/shared": "1.11.18" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://github.com/sponsors/harlan-zw" } }, - "node_modules/@unocss/preset-wind": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/preset-wind/-/preset-wind-0.60.3.tgz", - "integrity": "sha512-q7yDJ/SyEkPmPBJvIeHd9Bt50LAu65q7WwKxJYfJkjfJvJUMj6DO8FgPnpeiwBeJh9897m2Ap6zoQ3JqBjPLHQ==", - "peer": true, + "node_modules/@unhead/vue": { + "version": "1.11.18", + "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-1.11.18.tgz", + "integrity": "sha512-Jfi7t/XNBnlcauP9UTH3VHBcS69G70ikFd2e5zdgULLDRWpOlLs1sSTH1V2juNptc93DOk9RQfC5jLWbLcivFw==", "dependencies": { - "@unocss/core": "0.60.3", - "@unocss/preset-mini": "0.60.3", - "@unocss/rule-utils": "0.60.3" + "@unhead/schema": "1.11.18", + "@unhead/shared": "1.11.18", + "hookable": "^5.5.3", + "unhead": "1.11.18" }, "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/reset": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/reset/-/reset-0.60.3.tgz", - "integrity": "sha512-EuC8gkh8L8WvPOcjS/KqprEJXIKcpBPm+ou5G9D6WgDmJ+TgQrri5oR+QUmOmEnueQkVL7bnkFkIKeg71SJLFA==", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "vue": ">=2.7 || >=3" } }, - "node_modules/@unocss/rule-utils": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/rule-utils/-/rule-utils-0.60.3.tgz", - "integrity": "sha512-I47/DcKQ2z12W80+Ffth0K6LzNvqcQPYRWk7KwVemVoEiGYamMV8/s+SbB26Fk9KUFjh+Ns/pGAo4iJZo0ueUQ==", - "peer": true, + "node_modules/@vercel/nft": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.27.7.tgz", + "integrity": "sha512-FG6H5YkP4bdw9Ll1qhmbxuE8KwW2E/g8fJpM183fWQLeVDGqzeywMIeJ9h2txdWZ03psgWMn6QymTxaDLmdwUg==", "dependencies": { - "@unocss/core": "^0.60.3", - "magic-string": "^0.30.10" + "@mapbox/node-pre-gyp": "^1.0.11", + "@rollup/pluginutils": "^5.1.3", + "acorn": "^8.6.0", + "acorn-import-attributes": "^1.9.5", + "async-sema": "^3.1.1", + "bindings": "^1.4.0", + "estree-walker": "2.0.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.8", + "node-gyp-build": "^4.2.2", + "resolve-from": "^5.0.0" }, - "engines": { - "node": ">=14" + "bin": { + "nft": "out/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "engines": { + "node": ">=16" } }, - "node_modules/@unocss/scope": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/scope/-/scope-0.60.3.tgz", - "integrity": "sha512-uDUcBkFe8nRwNiU4YQyrOCjY7/+qFJI/Qr0eouMPOSEsQ6uIXQEWjykqUBJg2fvm0S2vbfBGO9tO/wCDIk5O3w==", - "peer": true + "node_modules/@vercel/nft/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, - "node_modules/@unocss/transformer-attributify-jsx": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/transformer-attributify-jsx/-/transformer-attributify-jsx-0.60.3.tgz", - "integrity": "sha512-zcPu4tUm/1EnqcFpf6+XzUzfb2BzJBcfNMkFzl/5BSTMECEDgdj4QGBWxnTuSlSZs4digRABGtuAHUO7k1qfgA==", - "peer": true, - "dependencies": { - "@unocss/core": "0.60.3" + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", + "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==", + "engines": { + "node": "^18.0.0 || >=20.0.0" }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" } }, - "node_modules/@unocss/transformer-attributify-jsx-babel": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/transformer-attributify-jsx-babel/-/transformer-attributify-jsx-babel-0.60.3.tgz", - "integrity": "sha512-6WcEFPSaxscGR22dRUcNqY0ippC3/Q/LBVFVSCJh++hoIPVCZbxF505cPq/bOdF2bpNzj9yXW0OJt03nB505Hg==", - "peer": true, + "node_modules/@vitejs/plugin-vue-jsx": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-4.1.1.tgz", + "integrity": "sha512-uMJqv/7u1zz/9NbWAD3XdjaY20tKTf17XVfQ9zq4wY1BjsB/PjpJPMe2xiG39QpP4ZdhYNhm4Hvo66uJrykNLA==", "dependencies": { - "@babel/core": "^7.24.5", - "@babel/plugin-syntax-jsx": "^7.24.1", - "@babel/preset-typescript": "^7.24.1", - "@unocss/core": "0.60.3" + "@babel/core": "^7.26.0", + "@babel/plugin-transform-typescript": "^7.25.9", + "@vue/babel-plugin-jsx": "^1.2.5" }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/transformer-compile-class": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/transformer-compile-class/-/transformer-compile-class-0.60.3.tgz", - "integrity": "sha512-j6wiYgtNqMlrctaZUuN4S+vANW0DMb9wW3KbJ2XvB7lXftfY1bbZ3IKenAyFp0ZLdKs69B6irJbCbIS5OAKKXQ==", - "peer": true, - "dependencies": { - "@unocss/core": "0.60.3" + "engines": { + "node": "^18.0.0 || >=20.0.0" }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/transformer-directives": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/transformer-directives/-/transformer-directives-0.60.3.tgz", - "integrity": "sha512-JuFpxyB1yvS2YoiguO5+8Ou6k9yyojZCnnDYXXZqMGLp1KdLiDcAPZQyShoD5HLzPGHtAbQELUz9TcX3VMLEoQ==", - "peer": true, - "dependencies": { - "@unocss/core": "0.60.3", - "@unocss/rule-utils": "0.60.3", - "css-tree": "^2.3.1" + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.0.0" } }, - "node_modules/@unocss/transformer-variant-group": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/transformer-variant-group/-/transformer-variant-group-0.60.3.tgz", - "integrity": "sha512-jQg0+W49jA7Z+4mRQbZWZKV6aXJXQfAHRC3oo4C9vEyTXL2jb952K12XVcJhXnbLYpnUKwytR+vbshXMIHWZwA==", - "peer": true, + "node_modules/@vitest/expect": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.4.tgz", + "integrity": "sha512-Nm5kJmYw6P2BxhJPkO3eKKhGYKRsnqJqf+r0yOGRKpEP+bSCBDsjXgiu1/5QFrnPMEgzfC38ZEjvCFgaNBC0Eg==", + "dev": true, "dependencies": { - "@unocss/core": "0.60.3" + "@vitest/spy": "3.0.4", + "@vitest/utils": "3.0.4", + "chai": "^5.1.2", + "tinyrainbow": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://opencollective.com/vitest" } }, - "node_modules/@unocss/vite": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/@unocss/vite/-/vite-0.60.3.tgz", - "integrity": "sha512-I3EOR3g245IGDp3DS17AQAMwNQrh6L6kIlXG3+wt5IZ1zu1ahZmKA8/xxh6oo2TNdu4rI6nQbcLIRn+8eSyfQw==", - "peer": true, + "node_modules/@vitest/mocker": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.4.tgz", + "integrity": "sha512-gEef35vKafJlfQbnyOXZ0Gcr9IBUsMTyTLXsEQwuyYAerpHqvXhzdBnDFuHLpFqth3F7b6BaFr4qV/Cs1ULx5A==", + "dev": true, "dependencies": { - "@ampproject/remapping": "^2.3.0", - "@rollup/pluginutils": "^5.1.0", - "@unocss/config": "0.60.3", - "@unocss/core": "0.60.3", - "@unocss/inspector": "0.60.3", - "@unocss/scope": "0.60.3", - "@unocss/transformer-directives": "0.60.3", - "chokidar": "^3.6.0", - "fast-glob": "^3.3.2", - "magic-string": "^0.30.10" + "@vitest/spy": "3.0.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0" - } - }, - "node_modules/@vercel/nft": { - "version": "0.26.5", - "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.26.5.tgz", - "integrity": "sha512-NHxohEqad6Ra/r4lGknO52uc/GrWILXAMs1BB4401GTqww0fw1bAqzpG1XHuDO+dprg4GvsD9ZLLSsdo78p9hQ==", - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.5", - "@rollup/pluginutils": "^4.0.0", - "acorn": "^8.6.0", - "acorn-import-attributes": "^1.9.2", - "async-sema": "^3.1.1", - "bindings": "^1.4.0", - "estree-walker": "2.0.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.2", - "node-gyp-build": "^4.2.2", - "resolve-from": "^5.0.0" - }, - "bin": { - "nft": "out/cli.js" + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0" }, - "engines": { - "node": ">=16" + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } } }, - "node_modules/@vercel/nft/node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "node_modules/@vitest/pretty-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.4.tgz", + "integrity": "sha512-ts0fba+dEhK2aC9PFuZ9LTpULHpY/nd6jhAQ5IMU7Gaj7crPCTdCFfgvXxruRBLFS+MLraicCuFXxISEq8C93g==", + "dev": true, "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" + "tinyrainbow": "^2.0.0" }, - "engines": { - "node": ">= 8.0.0" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@vercel/nft/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@vitest/runner": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.4.tgz", + "integrity": "sha512-dKHzTQ7n9sExAcWH/0sh1elVgwc7OJ2lMOBrAm73J7AH6Pf9T12Zh3lNE1TETZaqrWFXtLlx3NVrLRb5hCK+iw==", + "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@vitest/utils": "3.0.4", + "pathe": "^2.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@vercel/nft/node_modules/estree-walker": { + "node_modules/@vitest/runner/node_modules/pathe": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==", + "dev": true }, - "node_modules/@vercel/nft/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/@vitest/snapshot": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.4.tgz", + "integrity": "sha512-+p5knMLwIk7lTQkM3NonZ9zBewzVp9EVkVpvNta0/PlFWpiqLaRcF4+33L1it3uRUCh0BGLOaXPPGEjNKfWb4w==", + "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" + "@vitest/pretty-format": "3.0.4", + "magic-string": "^0.30.17", + "pathe": "^2.0.2" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://opencollective.com/vitest" } }, - "node_modules/@vercel/nft/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } + "node_modules/@vitest/snapshot/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==", + "dev": true }, - "node_modules/@vitejs/plugin-vue": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz", - "integrity": "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==", - "engines": { - "node": "^18.0.0 || >=20.0.0" + "node_modules/@vitest/spy": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.4.tgz", + "integrity": "sha512-sXIMF0oauYyUy2hN49VFTYodzEAu744MmGcPR3ZBsPM20G+1/cSW/n1U+3Yu/zHxX2bIDe1oJASOkml+osTU6Q==", + "dev": true, + "dependencies": { + "tinyspy": "^3.0.2" }, - "peerDependencies": { - "vite": "^5.0.0", - "vue": "^3.2.25" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitejs/plugin-vue-jsx": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-3.1.0.tgz", - "integrity": "sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==", + "node_modules/@vitest/utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.4.tgz", + "integrity": "sha512-8BqC1ksYsHtbWH+DfpOAKrFw3jl3Uf9J7yeFh85Pz52IWuh1hBBtyfEbRNNZNjl8H8A5yMLH9/t+k7HIKzQcZQ==", + "dev": true, "dependencies": { - "@babel/core": "^7.23.3", - "@babel/plugin-transform-typescript": "^7.23.3", - "@vue/babel-plugin-jsx": "^1.1.5" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" + "@vitest/pretty-format": "3.0.4", + "loupe": "^3.1.2", + "tinyrainbow": "^2.0.0" }, - "peerDependencies": { - "vite": "^4.0.0 || ^5.0.0", - "vue": "^3.0.0" + "funding": { + "url": "https://opencollective.com/vitest" } }, "node_modules/@vue-macros/common": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-1.10.3.tgz", - "integrity": "sha512-YSgzcbXrRo8a/TF/YIguqEmTld1KA60VETKJG8iFuaAfj7j+Tbdin3cj7/cYbcCHORSq1v9IThgq7r8keH7LXQ==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-1.16.1.tgz", + "integrity": "sha512-Pn/AWMTjoMYuquepLZP813BIcq8DTZiNCoaceuNlvaYuOTd8DqBZWc5u0uOMQZMInwME1mdSmmBAcTluiV9Jtg==", "dependencies": { - "@babel/types": "^7.24.0", - "@rollup/pluginutils": "^5.1.0", - "@vue/compiler-sfc": "^3.4.25", - "ast-kit": "^0.12.1", - "local-pkg": "^0.5.0", - "magic-string-ast": "^0.5.0" + "@vue/compiler-sfc": "^3.5.13", + "ast-kit": "^1.4.0", + "local-pkg": "^1.0.0", + "magic-string-ast": "^0.7.0", + "pathe": "^2.0.2", + "picomatch": "^4.0.2" }, "engines": { "node": ">=16.14.0" @@ -3560,25 +3812,55 @@ } } }, + "node_modules/@vue-macros/common/node_modules/local-pkg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.0.0.tgz", + "integrity": "sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==", + "dependencies": { + "mlly": "^1.7.3", + "pkg-types": "^1.3.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vue-macros/common/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + }, + "node_modules/@vue-macros/common/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@vue/babel-helper-vue-transform-on": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.2.tgz", - "integrity": "sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.5.tgz", + "integrity": "sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==" }, "node_modules/@vue/babel-plugin-jsx": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.2.tgz", - "integrity": "sha512-nYTkZUVTu4nhP199UoORePsql0l+wj7v/oyQjtThUVhJl1U+6qHuoVhIvR3bf7eVKjbCK+Cs2AWd7mi9Mpz9rA==", - "dependencies": { - "@babel/helper-module-imports": "~7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9", - "@vue/babel-helper-vue-transform-on": "1.2.2", - "@vue/babel-plugin-resolve-type": "1.2.2", - "camelcase": "^6.3.0", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.5.tgz", + "integrity": "sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg==", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.6", + "@babel/types": "^7.25.6", + "@vue/babel-helper-vue-transform-on": "1.2.5", + "@vue/babel-plugin-resolve-type": "1.2.5", "html-tags": "^3.3.1", "svg-tags": "^1.0.0" }, @@ -3591,50 +3873,28 @@ } } }, - "node_modules/@vue/babel-plugin-jsx/node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@vue/babel-plugin-resolve-type": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.2.tgz", - "integrity": "sha512-EntyroPwNg5IPVdUJupqs0CFzuf6lUrVvCspmv2J1FITLeGnUCuoGNNk78dgCusxEiYj6RMkTJflGSxk5aIC4A==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.5.tgz", + "integrity": "sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg==", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/helper-module-imports": "~7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/parser": "^7.23.9", - "@vue/compiler-sfc": "^3.4.15" + "@babel/code-frame": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/parser": "^7.25.6", + "@vue/compiler-sfc": "^3.5.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@vue/babel-plugin-resolve-type/node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@vue/compiler-core": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz", - "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", "dependencies": { - "@babel/parser": "^7.24.4", - "@vue/shared": "3.4.27", + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" @@ -3646,27 +3906,27 @@ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, "node_modules/@vue/compiler-dom": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz", - "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", "dependencies": { - "@vue/compiler-core": "3.4.27", - "@vue/shared": "3.4.27" + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz", - "integrity": "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==", - "dependencies": { - "@babel/parser": "^7.24.4", - "@vue/compiler-core": "3.4.27", - "@vue/compiler-dom": "3.4.27", - "@vue/compiler-ssr": "3.4.27", - "@vue/shared": "3.4.27", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", "estree-walker": "^2.0.2", - "magic-string": "^0.30.10", - "postcss": "^8.4.38", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", "source-map-js": "^1.2.0" } }, @@ -3676,360 +3936,110 @@ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, "node_modules/@vue/compiler-ssr": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz", - "integrity": "sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", "dependencies": { - "@vue/compiler-dom": "3.4.27", - "@vue/shared": "3.4.27" + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/devtools-api": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.1.tgz", - "integrity": "sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==" - }, - "node_modules/@vue/devtools-applet": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-applet/-/devtools-applet-7.2.1.tgz", - "integrity": "sha512-WGFXgMaph+9aT6ApN0ZQEjjAEeVN/o6DuoXOI5lJzpvXGxRpVWonziNlIcXW9PG/xVuZVWAEST7CQpXs4kzmdg==", - "dependencies": { - "@vue/devtools-core": "^7.2.1", - "@vue/devtools-kit": "^7.2.1", - "@vue/devtools-shared": "^7.2.1", - "@vue/devtools-ui": "^7.2.1", - "lodash-es": "^4.17.21", - "perfect-debounce": "^1.0.0", - "shiki": "1.5.2", - "splitpanes": "^3.1.5", - "vue-virtual-scroller": "2.0.0-beta.8" - }, - "peerDependencies": { - "vue": "^3.0.0" - } + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" }, "node_modules/@vue/devtools-core": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-7.2.1.tgz", - "integrity": "sha512-OyWl455UnJIVgZ6lo5WQ79WbDMoXtSRwyNKp9WzCZ0HhuQywIk4qv59KtLRe75uVmtGBde4hXNaSyRm+x9bY6g==", + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-7.6.8.tgz", + "integrity": "sha512-8X4roysTwzQ94o7IobjVcOd1aZF5iunikrMrHPI2uUdigZCi2kFTQc7ffYiFiTNaLElCpjOhCnM7bo7aK1yU7A==", "dependencies": { - "@vue/devtools-kit": "^7.2.1", - "@vue/devtools-shared": "^7.2.1", + "@vue/devtools-kit": "^7.6.8", + "@vue/devtools-shared": "^7.6.8", "mitt": "^3.0.1", - "nanoid": "^3.3.4", + "nanoid": "^5.0.9", "pathe": "^1.1.2", - "vite-hot-client": "^0.2.3" - } - }, - "node_modules/@vue/devtools-core/node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" + "vite-hot-client": "^0.2.4" }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "peerDependencies": { + "vue": "^3.0.0" } }, "node_modules/@vue/devtools-kit": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.2.1.tgz", - "integrity": "sha512-Wak/fin1X0Q8LLIfCAHBrdaaB+R6IdpSXsDByPHbQ3BmkCP0/cIo/oEGp9i0U2+gEqD4L3V9RDjNf1S34DTzQQ==", + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.6.8.tgz", + "integrity": "sha512-JhJ8M3sPU+v0P2iZBF2DkdmR9L0dnT5RXJabJqX6o8KtFs3tebdvfoXV2Dm3BFuqeECuMJIfF1aCzSt+WQ4wrw==", "dependencies": { - "@vue/devtools-shared": "^7.2.1", + "@vue/devtools-shared": "^7.6.8", + "birpc": "^0.2.19", "hookable": "^5.5.3", "mitt": "^3.0.1", "perfect-debounce": "^1.0.0", - "speakingurl": "^14.0.1" - }, - "peerDependencies": { - "vue": "^3.0.0" + "speakingurl": "^14.0.1", + "superjson": "^2.2.1" } }, "node_modules/@vue/devtools-shared": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.2.1.tgz", - "integrity": "sha512-PCJF4UknJmOal68+X9XHyVeQ+idv0LFujkTOIW30+GaMJqwFVN9LkQKX4gLqn61KkGMdJTzQ1bt7EJag3TI6AA==", - "dependencies": { - "rfdc": "^1.3.1" - } - }, - "node_modules/@vue/devtools-ui": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-ui/-/devtools-ui-7.2.1.tgz", - "integrity": "sha512-3XwW6uTn5noXKN4T4T9rpFlQR0B050ebwUO+Y8HsWHv8XZ451xk+A89y00s1Zx7P2SRkDqeJgbi4kYSHnXkxbg==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.1.tgz", + "integrity": "sha512-BtgF7kHq4BHG23Lezc/3W2UhK2ga7a8ohAIAGJMBr4BkxUFzhqntQtCiuL1ijo2ztWnmusymkirgqUrXoQKumA==", "dependencies": { - "@vue/devtools-shared": "7.2.1", - "@vueuse/components": "^10.9.0", - "@vueuse/core": "^10.9.0", - "@vueuse/integrations": "^10.9.0", - "colord": "^2.9.3", - "focus-trap": "^7.5.4" - }, - "peerDependencies": { - "@unocss/reset": ">=0.50.0-0", - "floating-vue": ">=2.0.0-0", - "unocss": ">=0.50.0-0", - "vue": ">=3.0.0-0" + "rfdc": "^1.4.1" } }, "node_modules/@vue/reactivity": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.27.tgz", - "integrity": "sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", "dependencies": { - "@vue/shared": "3.4.27" + "@vue/shared": "3.5.13" } }, "node_modules/@vue/runtime-core": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.27.tgz", - "integrity": "sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", "dependencies": { - "@vue/reactivity": "3.4.27", - "@vue/shared": "3.4.27" + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/runtime-dom": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz", - "integrity": "sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", "dependencies": { - "@vue/runtime-core": "3.4.27", - "@vue/shared": "3.4.27", + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.27.tgz", - "integrity": "sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", "dependencies": { - "@vue/compiler-ssr": "3.4.27", - "@vue/shared": "3.4.27" + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" }, "peerDependencies": { - "vue": "3.4.27" + "vue": "3.5.13" } }, "node_modules/@vue/shared": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", - "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==" - }, - "node_modules/@vueuse/components": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/@vueuse/components/-/components-10.9.0.tgz", - "integrity": "sha512-BHQpA0yIi3y7zKa1gYD0FUzLLkcRTqVhP8smnvsCK6GFpd94Nziq1XVPD7YpFeho0k5BzbBiNZF7V/DpkJ967A==", - "dependencies": { - "@vueuse/core": "10.9.0", - "@vueuse/shared": "10.9.0", - "vue-demi": ">=0.14.7" - } - }, - "node_modules/@vueuse/components/node_modules/vue-demi": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", - "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/@vueuse/core": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.9.0.tgz", - "integrity": "sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==", - "dependencies": { - "@types/web-bluetooth": "^0.0.20", - "@vueuse/metadata": "10.9.0", - "@vueuse/shared": "10.9.0", - "vue-demi": ">=0.14.7" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/core/node_modules/vue-demi": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", - "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/@vueuse/integrations": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.9.0.tgz", - "integrity": "sha512-acK+A01AYdWSvL4BZmCoJAcyHJ6EqhmkQEXbQLwev1MY7NBnS+hcEMx/BzVoR9zKI+UqEPMD9u6PsyAuiTRT4Q==", - "dependencies": { - "@vueuse/core": "10.9.0", - "@vueuse/shared": "10.9.0", - "vue-demi": ">=0.14.7" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "async-validator": "*", - "axios": "*", - "change-case": "*", - "drauu": "*", - "focus-trap": "*", - "fuse.js": "*", - "idb-keyval": "*", - "jwt-decode": "*", - "nprogress": "*", - "qrcode": "*", - "sortablejs": "*", - "universal-cookie": "*" - }, - "peerDependenciesMeta": { - "async-validator": { - "optional": true - }, - "axios": { - "optional": true - }, - "change-case": { - "optional": true - }, - "drauu": { - "optional": true - }, - "focus-trap": { - "optional": true - }, - "fuse.js": { - "optional": true - }, - "idb-keyval": { - "optional": true - }, - "jwt-decode": { - "optional": true - }, - "nprogress": { - "optional": true - }, - "qrcode": { - "optional": true - }, - "sortablejs": { - "optional": true - }, - "universal-cookie": { - "optional": true - } - } - }, - "node_modules/@vueuse/integrations/node_modules/vue-demi": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", - "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/@vueuse/metadata": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.9.0.tgz", - "integrity": "sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.9.0.tgz", - "integrity": "sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==" + }, + "node_modules/@vue/test-utils": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.6.tgz", + "integrity": "sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==", + "dev": true, "dependencies": { - "vue-demi": ">=0.14.7" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared/node_modules/vue-demi": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", - "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } + "js-beautify": "^1.14.9", + "vue-component-type-helpers": "^2.0.0" } }, "node_modules/abbrev": { @@ -4048,10 +4058,23 @@ "node": ">=6.5" } }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "bin": { "acorn": "bin/acorn" }, @@ -4067,6 +4090,15 @@ "acorn": "^8" } }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "devOptional": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -4078,18 +4110,28 @@ "node": ">= 6.0.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "devOptional": true, "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "devOptional": true + }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -4132,16 +4174,25 @@ } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -4193,23 +4244,29 @@ "node": ">= 14" } }, + "node_modules/archiver-utils/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/archiver-utils/node_modules/glob": { - "version": "10.3.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", - "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.11.0" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -4226,9 +4283,9 @@ } }, "node_modules/archiver-utils/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4239,10 +4296,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/archiver-utils/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/are-we-there-yet": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -4264,62 +4330,102 @@ "node": ">= 6" } }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "node_modules/ast-kit": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-0.12.1.tgz", - "integrity": "sha512-O+33g7x6irsESUcd47KdfWUrS2F6aGp9KeVJFGj0YjIznfXpBxVGjA0w+y/1OKqX4mFOfmZ9Xpf1ixPT4n9xxw==", - "dependencies": { - "@babel/parser": "^7.23.9", - "pathe": "^1.1.2" - }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "optional": true, "engines": { - "node": ">=16.14.0" + "node": ">=8" } }, - "node_modules/ast-walker-scope": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.5.0.tgz", - "integrity": "sha512-NsyHMxBh4dmdEHjBo1/TBZvCKxffmZxRYhmclfu0PP6Aftre47jOHYaYaNqJcV0bxihxFXhDkzLHUwHc0ocd0Q==", + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/ast-kit": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-1.4.0.tgz", + "integrity": "sha512-BlGeOw73FDsX7z0eZE/wuuafxYoek2yzNJ6l6A1nsb4+z/p87TOPbHaWuN53kFKNuUXiCQa2M+xLF71IqQmRSw==", "dependencies": { - "@babel/parser": "^7.22.7", - "ast-kit": "^0.9.4" + "@babel/parser": "^7.26.5", + "pathe": "^2.0.2" }, "engines": { "node": ">=16.14.0" } }, - "node_modules/ast-walker-scope/node_modules/ast-kit": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-0.9.5.tgz", - "integrity": "sha512-kbL7ERlqjXubdDd+szuwdlQ1xUxEz9mCz1+m07ftNVStgwRb2RWw+U6oKo08PAvOishMxiqz1mlJyLl8yQx2Qg==", + "node_modules/ast-kit/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + }, + "node_modules/ast-walker-scope": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.6.2.tgz", + "integrity": "sha512-1UWOyC50xI3QZkRuDj6PqDtpm1oHWtYs+NQGwqL/2R11eN3Q81PHAHPM0SWW3BNQm53UDwS//Jv8L4CCVLM1bQ==", "dependencies": { - "@babel/parser": "^7.22.7", - "@rollup/pluginutils": "^5.0.2", - "pathe": "^1.1.1" + "@babel/parser": "^7.25.3", + "ast-kit": "^1.0.1" }, "engines": { "node": ">=16.14.0" } }, "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" + }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "optional": true, + "dependencies": { + "retry": "0.13.1" + } }, "node_modules/async-sema": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==" }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "optional": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/autoprefixer": { - "version": "10.4.19", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", - "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", "funding": [ { "type": "opencollective", @@ -4335,11 +4441,11 @@ } ], "dependencies": { - "browserslist": "^4.23.0", - "caniuse-lite": "^1.0.30001599", + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", + "picocolors": "^1.0.1", "postcss-value-parser": "^4.2.0" }, "bin": { @@ -4353,9 +4459,9 @@ } }, "node_modules/b4a": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", - "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==" + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==" }, "node_modules/balanced-match": { "version": "1.0.2", @@ -4363,9 +4469,9 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/bare-events": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz", - "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", + "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", "optional": true }, "node_modules/base64-js": { @@ -4387,6 +4493,14 @@ } ] }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -4407,9 +4521,9 @@ } }, "node_modules/birpc": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.17.tgz", - "integrity": "sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==", + "version": "0.2.19", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.19.tgz", + "integrity": "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==", "funding": { "url": "https://github.com/sponsors/antfu" } @@ -4420,28 +4534,29 @@ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "funding": [ { "type": "opencollective", @@ -4457,10 +4572,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -4500,22 +4615,16 @@ "node": ">=8.0.0" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/bundle-name": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", @@ -4531,106 +4640,94 @@ } }, "node_modules/c12": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/c12/-/c12-1.10.0.tgz", - "integrity": "sha512-0SsG7UDhoRWcuSvKWHaXmu5uNjDCDN3nkQLRL4Q42IlFy+ze58FcCoI3uPwINXinkz7ZinbhEgyzYFw9u9ZV8g==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/c12/-/c12-2.0.1.tgz", + "integrity": "sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A==", "dependencies": { - "chokidar": "^3.6.0", - "confbox": "^0.1.3", + "chokidar": "^4.0.1", + "confbox": "^0.1.7", "defu": "^6.1.4", "dotenv": "^16.4.5", - "giget": "^1.2.1", - "jiti": "^1.21.0", - "mlly": "^1.6.1", - "ohash": "^1.1.3", + "giget": "^1.2.3", + "jiti": "^2.3.0", + "mlly": "^1.7.1", + "ohash": "^1.1.4", "pathe": "^1.1.2", "perfect-debounce": "^1.0.0", - "pkg-types": "^1.0.3", - "rc9": "^2.1.1" - } - }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "engines": { - "node": ">=8" + "pkg-types": "^1.2.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.5" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } } }, - "node_modules/cacache": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.3.tgz", - "integrity": "sha512-qXCd4rh6I07cnDqh8V48/94Tc/WSfj+o3Gn6NZ0aZovS255bUx8O13uKxRFd2eWG0xgsco7+YItQNPaa5E85hg==", + "node_modules/c12/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "readdirp": "^4.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/cacache/node_modules/glob": { - "version": "10.3.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", - "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.11.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, + "node_modules/c12/node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", "engines": { - "node": ">=16 || 14 >=14.18" + "node": ">= 14.16.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "engines": { - "node": "14 || >=16.14" + "node": ">=8" } }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "node_modules/cache-content-type": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", + "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", + "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "mime-types": "^2.1.18", + "ylru": "^1.2.0" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 6.0.0" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "devOptional": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" } }, "node_modules/caniuse-api": { @@ -4645,9 +4742,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001620", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001620.tgz", - "integrity": "sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==", + "version": "1.0.30001686", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001686.tgz", + "integrity": "sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA==", "funding": [ { "type": "opencollective", @@ -4663,25 +4760,60 @@ } ] }, + "node_modules/chai": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", + "dev": true, + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=0.8.0" + "node": ">=8" + } + }, + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==" + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "engines": { + "node": ">= 16" } }, "node_modules/chokidar": { @@ -4715,20 +4847,6 @@ "node": ">=10" } }, - "node_modules/ci-info": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", - "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, "node_modules/citty": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", @@ -4737,22 +4855,6 @@ "consola": "^3.2.3" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/clear": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/clear/-/clear-0.1.0.tgz", - "integrity": "sha512-qMjRnoL+JDPJHeLePZJuao6+8orzHMGP04A8CdwCNsKhRbOnKRjefxONR7bwILT3MHecxKBjHkKL/tkZ8r4Uzw==", - "engines": { - "node": "*" - } - }, "node_modules/clipboardy": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-4.0.0.tgz", @@ -4842,18 +4944,31 @@ "node": ">=0.10.0" } }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/color-support": { "version": "1.1.3", @@ -4869,10 +4984,21 @@ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" }, "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "peer": true + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "optional": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } }, "node_modules/commander": { "version": "7.2.0", @@ -4887,6 +5013,11 @@ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, + "node_modules/compatx": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/compatx/-/compatx-0.1.8.tgz", + "integrity": "sha512-jcbsEAR81Bt5s1qOFymBufmCbXCXbk0Ql+K5ouj6gCyx2yHlu6AgmGIi9HxfKixpUDO5bCFJUHQ5uM6ecbTebw==" + }, "node_modules/compress-commons": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", @@ -4919,14 +5050,30 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/confbox": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", - "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==" + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==" + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/config-chain/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, "node_modules/consola": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", - "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.0.tgz", + "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==", "engines": { "node": "^14.18.0 || >=16.10.0" } @@ -4936,15 +5083,63 @@ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/cookie-es": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.1.0.tgz", - "integrity": "sha512-L2rLOcK0wzWSfSDA33YR+PUHDG10a8px7rUHKWbGLP4YfbsMed2KFUw5fczvDPbT98DDe3LEzviswl810apTEw==" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==" + }, + "node_modules/cookies": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", + "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", + "dev": true, + "dependencies": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } }, "node_modules/core-util-is": { "version": "1.0.3", @@ -4974,31 +5169,26 @@ "node": ">= 14" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, "node_modules/croner": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/croner/-/croner-8.0.2.tgz", - "integrity": "sha512-HgSdlSUX8mIgDTTiQpWUP4qY4IFRMsduPCYdca34Pelt8MVdxdaDOzreFtCscA6R+cRZd7UbD1CD3uyx6J3X1A==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/croner/-/croner-9.0.0.tgz", + "integrity": "sha512-onMB0OkDjkXunhdW9htFjEhqrD54+M94i6ackoUkjHKbRnXdyEyKRelp4nJ1kAz32+s27jP1FsebpJCVl0BsvA==", "engines": { "node": ">=18.0" } }, "node_modules/cronstrue": { - "version": "2.50.0", - "resolved": "https://registry.npmjs.org/cronstrue/-/cronstrue-2.50.0.tgz", - "integrity": "sha512-ULYhWIonJzlScCCQrPUG5uMXzXxSixty4djud9SS37DoNxDdkeRocxzHuAo4ImRBUK+mAuU5X9TSwEDccnnuPg==", + "version": "2.53.0", + "resolved": "https://registry.npmjs.org/cronstrue/-/cronstrue-2.53.0.tgz", + "integrity": "sha512-CkAcaI94xL8h6N7cGxgXfR5D7oV2yVtDzB9vMZP8tIgPyEv/oc/7nq9rlk7LMxvc3N+q6LKZmNLCVxJRpyEg8A==", "bin": { "cronstrue": "bin/cli.js" } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -5023,16 +5213,11 @@ } }, "node_modules/crossws": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.2.4.tgz", - "integrity": "sha512-DAxroI2uSOgUKLz00NX6A8U/8EE3SZHmIND+10jkVSaypvyt57J5JEOxAQOL6lQxyzi/wZbTIwssU1uy69h5Vg==", - "peerDependencies": { - "uWebSockets.js": "*" - }, - "peerDependenciesMeta": { - "uWebSockets.js": { - "optional": true - } + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.3.tgz", + "integrity": "sha512-/71DJT3xJlqSnBr83uGJesmVHSzZEvgxHt/fIKxBAAngqMHmnBWQNxCphVxxJ2XL3xleu5+hJD6IQ3TglBedcw==", + "dependencies": { + "uncrypto": "^0.1.3" } }, "node_modules/css-declaration-sorter": { @@ -5061,6 +5246,15 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/css-selector-tokenizer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz", + "integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==", + "dependencies": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, "node_modules/css-tree": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", @@ -5096,15 +5290,15 @@ } }, "node_modules/cssnano": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", - "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.6.tgz", + "integrity": "sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw==", "dependencies": { - "cssnano-preset-default": "^6.1.2", - "lilconfig": "^3.1.1" + "cssnano-preset-default": "^7.0.6", + "lilconfig": "^3.1.2" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "funding": { "type": "opencollective", @@ -5115,54 +5309,54 @@ } }, "node_modules/cssnano-preset-default": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", - "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.6.tgz", + "integrity": "sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ==", "dependencies": { - "browserslist": "^4.23.0", + "browserslist": "^4.23.3", "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^4.0.2", - "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.1.0", - "postcss-convert-values": "^6.1.0", - "postcss-discard-comments": "^6.0.2", - "postcss-discard-duplicates": "^6.0.3", - "postcss-discard-empty": "^6.0.3", - "postcss-discard-overridden": "^6.0.2", - "postcss-merge-longhand": "^6.0.5", - "postcss-merge-rules": "^6.1.1", - "postcss-minify-font-values": "^6.1.0", - "postcss-minify-gradients": "^6.0.3", - "postcss-minify-params": "^6.1.0", - "postcss-minify-selectors": "^6.0.4", - "postcss-normalize-charset": "^6.0.2", - "postcss-normalize-display-values": "^6.0.2", - "postcss-normalize-positions": "^6.0.2", - "postcss-normalize-repeat-style": "^6.0.2", - "postcss-normalize-string": "^6.0.2", - "postcss-normalize-timing-functions": "^6.0.2", - "postcss-normalize-unicode": "^6.1.0", - "postcss-normalize-url": "^6.0.2", - "postcss-normalize-whitespace": "^6.0.2", - "postcss-ordered-values": "^6.0.2", - "postcss-reduce-initial": "^6.1.0", - "postcss-reduce-transforms": "^6.0.2", - "postcss-svgo": "^6.0.3", - "postcss-unique-selectors": "^6.0.4" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" + "cssnano-utils": "^5.0.0", + "postcss-calc": "^10.0.2", + "postcss-colormin": "^7.0.2", + "postcss-convert-values": "^7.0.4", + "postcss-discard-comments": "^7.0.3", + "postcss-discard-duplicates": "^7.0.1", + "postcss-discard-empty": "^7.0.0", + "postcss-discard-overridden": "^7.0.0", + "postcss-merge-longhand": "^7.0.4", + "postcss-merge-rules": "^7.0.4", + "postcss-minify-font-values": "^7.0.0", + "postcss-minify-gradients": "^7.0.0", + "postcss-minify-params": "^7.0.2", + "postcss-minify-selectors": "^7.0.4", + "postcss-normalize-charset": "^7.0.0", + "postcss-normalize-display-values": "^7.0.0", + "postcss-normalize-positions": "^7.0.0", + "postcss-normalize-repeat-style": "^7.0.0", + "postcss-normalize-string": "^7.0.0", + "postcss-normalize-timing-functions": "^7.0.0", + "postcss-normalize-unicode": "^7.0.2", + "postcss-normalize-url": "^7.0.0", + "postcss-normalize-whitespace": "^7.0.0", + "postcss-ordered-values": "^7.0.1", + "postcss-reduce-initial": "^7.0.2", + "postcss-reduce-transforms": "^7.0.0", + "postcss-svgo": "^7.0.1", + "postcss-unique-selectors": "^7.0.3" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/cssnano-utils": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", + "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" @@ -5203,16 +5397,49 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, + "node_modules/culori": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/culori/-/culori-3.3.0.tgz", + "integrity": "sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/daisyui": { + "version": "4.12.14", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-4.12.14.tgz", + "integrity": "sha512-hA27cdBasdwd4/iEjn+aidoCrRroDuo3G5W9NDKaVCJI437Mm/3eSL/2u7MkZ0pt8a+TrYF3aT2pFVemTS3how==", + "dev": true, + "dependencies": { + "css-selector-tokenizer": "^0.8", + "culori": "^3", + "picocolors": "^1", + "postcss-js": "^4" + }, + "engines": { + "node": ">=16.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/daisyui" + } + }, "node_modules/db0": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/db0/-/db0-0.1.4.tgz", - "integrity": "sha512-Ft6eCwONYxlwLjBXSJxw0t0RYtA5gW9mq8JfBXn9TtC0nDPlqePAhpv9v4g9aONBi6JI1OXHTKKkUYGd+BOrCA==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/db0/-/db0-0.2.1.tgz", + "integrity": "sha512-BWSFmLaCkfyqbSEZBQINMVNjCVfrogi7GQ2RSy1tmtfK9OXlsup6lUMwLsqSD7FbAjD04eWFdXowSHHUp6SE/Q==", "peerDependencies": { - "@libsql/client": "^0.5.2", - "better-sqlite3": "^9.4.3", - "drizzle-orm": "^0.29.4" + "@electric-sql/pglite": "*", + "@libsql/client": "*", + "better-sqlite3": "*", + "drizzle-orm": "*", + "mysql2": "*" }, "peerDependenciesMeta": { + "@electric-sql/pglite": { + "optional": true + }, "@libsql/client": { "optional": true }, @@ -5221,15 +5448,18 @@ }, "drizzle-orm": { "optional": true + }, + "mysql2": { + "optional": true } } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -5240,6 +5470,27 @@ } } }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", + "dev": true + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "devOptional": true + }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", @@ -5287,6 +5538,15 @@ "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==" }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "optional": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -5331,18 +5591,30 @@ } }, "node_modules/devalue": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.3.tgz", - "integrity": "sha512-UH8EL6H2ifcY8TbD2QsxwCC/pr5xSwPvv85LrLXVihmHVC3T3YqTCIwnR5ak0yO1KYqlxrPVOA/JVZJYPy2ATg==" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", + "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true }, "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", "engines": { "node": ">=0.3.1" } }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -5382,9 +5654,9 @@ } }, "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -5395,23 +5667,23 @@ } }, "node_modules/dot-prop": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-8.0.2.tgz", - "integrity": "sha512-xaBe6ZT4DHPkg0k4Ytbvn5xoxgpG0jOS1dYxSOwAHPuNLjP3/OzN0gH55SrLqpx8cBfSaVt91lXYkApjb+nYdQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", + "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", "dependencies": { - "type-fest": "^3.8.0" + "type-fest": "^4.18.2" }, "engines": { - "node": ">=16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", "engines": { "node": ">=12" }, @@ -5424,10 +5696,95 @@ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "node_modules/duplexify": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", + "optional": true, + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + } + }, + "node_modules/duplexify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/editorconfig": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", + "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", + "dev": true, + "dependencies": { + "@one-ini/wasm": "0.1.1", + "commander": "^10.0.0", + "minimatch": "9.0.1", + "semver": "^7.5.3" + }, + "bin": { + "editorconfig": "bin/editorconfig" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/editorconfig/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/editorconfig/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/editorconfig/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/ee-first": { "version": "1.1.1", @@ -5435,9 +5792,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.775", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.775.tgz", - "integrity": "sha512-JpOfl1aNAiZ88wFzjPczTLwYIoPIsij8S9/XQH9lqMpiJOf23kxea68B8wje4f68t4rOIq4Bh+vP4I65njiJBw==" + "version": "1.5.68", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.68.tgz", + "integrity": "sha512-FgMdJlma0OzUYlbrtZ4AeXjKxKPk6KT8WOP8BjcqxWtlg8qyJQjRzPJzUtUn5GBg1oQ26hFs7HOOHJMYiJRnvQ==" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -5445,26 +5802,26 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "engines": { "node": ">= 0.8" } }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "optional": true, "dependencies": { - "iconv-lite": "^0.6.2" + "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", - "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", + "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -5484,68 +5841,67 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" - }, "node_modules/error-stack-parser-es": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-0.1.4.tgz", - "integrity": "sha512-l0uy0kAoo6toCgVOYaAayqtPa2a1L15efxUMEnQebKwLQX2X0OpS6wMMQdc4juJXmxd9i40DuaUHq+mjIya9TQ==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz", + "integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==", "funding": { "url": "https://github.com/sponsors/antfu" } }, + "node_modules/errx": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/errx/-/errx-0.1.0.tgz", + "integrity": "sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q==" + }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==" + }, "node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "engines": { "node": ">=6" } @@ -5566,6 +5922,225 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint": { + "version": "9.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.19.0.tgz", + "integrity": "sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==", + "devOptional": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.10.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.19.0", + "@eslint/plugin-kit": "^0.2.5", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.32.0.tgz", + "integrity": "sha512-b/Y05HYmnB/32wqVcjxjHZzNpwxj1onBOvqW89W+V+XNG1dRuaFbNd3vT9CLbr2LXjEoq+3vn8DanWf7XU22Ug==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "globals": "^13.24.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.3", + "vue-eslint-parser": "^9.4.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-vue/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "devOptional": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "devOptional": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "devOptional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "devOptional": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "devOptional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "devOptional": true, + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "devOptional": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "devOptional": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "devOptional": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", @@ -5574,6 +6149,15 @@ "@types/estree": "^1.0.0" } }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -5590,6 +6174,11 @@ "node": ">=6" } }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -5620,10 +6209,19 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" + "node_modules/expect-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "node_modules/externality": { "version": "1.0.2", @@ -5636,26 +6234,100 @@ "ufo": "^1.1.2" } }, + "node_modules/fake-indexeddb": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/fake-indexeddb/-/fake-indexeddb-6.0.0.tgz", + "integrity": "sha512-YEboHE5VfopUclOck7LncgIqskAqnv4q0EWbYCaxKKjAvO93c+TJIaBuGy8CBFdbg9nKdpN3AuPRwVBJ4k7NrQ==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/farmhash-modern": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/farmhash-modern/-/farmhash-modern-1.1.0.tgz", + "integrity": "sha512-6ypT4XfgqJk/F3Yuv4SX26I3doUjt0GTG4a+JgWxXQpxXzTBq8fPUeGHfcYMMDPHJHm3yPOSjaeBwBGAHWXCdA==", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==" + }, "node_modules/fast-fifo": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" } }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "devOptional": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "devOptional": true + }, + "node_modules/fast-npm-meta": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/fast-npm-meta/-/fast-npm-meta-0.2.2.tgz", + "integrity": "sha512-E+fdxeaOQGo/CMWc9f4uHFfgUPJRAu7N3uB8GBvB3SDPAIWJK4GKyYhkAGFq+GYrcbKNfQIz5VVQyJnDuPPCrg==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/fast-xml-parser": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.0.tgz", + "integrity": "sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "optional": true, + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" + }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -5664,15 +6336,38 @@ "reusify": "^1.0.4" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "devOptional": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -5684,7 +6379,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "peer": true, + "devOptional": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -5696,42 +6391,94 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" + "node_modules/firebase-admin": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-13.0.1.tgz", + "integrity": "sha512-sKQ/Yw8o/WdC9qTKvuLMBjTbdcBISIXW4+M9PXk0bNjxEbZf1Er7EVq47eRb5+bnKof10xlns6zAIbj4tmSexg==", + "dependencies": { + "@fastify/busboy": "^3.0.0", + "@firebase/database-compat": "^2.0.0", + "@firebase/database-types": "^1.0.6", + "@types/node": "^22.8.7", + "farmhash-modern": "^1.1.0", + "google-auth-library": "^9.14.2", + "jsonwebtoken": "^9.0.0", + "jwks-rsa": "^3.1.0", + "node-forge": "^1.3.1", + "uuid": "^11.0.2" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@google-cloud/firestore": "^7.10.0", + "@google-cloud/storage": "^7.14.0" + } }, - "node_modules/floating-vue": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/floating-vue/-/floating-vue-5.2.2.tgz", - "integrity": "sha512-afW+h2CFafo+7Y9Lvw/xsqjaQlKLdJV7h1fCHfcYQ1C4SVMlu7OAekqWgu5d4SgvkBVU0pVpLlVsrSTBURFRkg==", - "peer": true, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "devOptional": true, "dependencies": { - "@floating-ui/dom": "~1.1.1", - "vue-resize": "^2.0.0-alpha.1" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, - "peerDependencies": { - "@nuxt/kit": "^3.2.0", - "vue": "^3.2.0" - }, - "peerDependenciesMeta": { - "@nuxt/kit": { - "optional": true - } + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==" + }, + "node_modules/flowbite": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/flowbite/-/flowbite-2.5.2.tgz", + "integrity": "sha512-kwFD3n8/YW4EG8GlY3Od9IoKND97kitO+/ejISHSqpn3vw2i5K/+ZI8Jm2V+KC4fGdnfi0XZ+TzYqQb4Q1LshA==", + "dependencies": { + "@popperjs/core": "^2.9.3", + "flowbite-datepicker": "^1.3.0", + "mini-svg-data-uri": "^1.4.3" + } + }, + "node_modules/flowbite-datepicker": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flowbite-datepicker/-/flowbite-datepicker-1.3.0.tgz", + "integrity": "sha512-CLVqzuoE2vkUvWYK/lJ6GzT0be5dlTbH3uuhVwyB67+PjqJWABm2wv68xhBf5BqjpBxvTSQ3mrmLHpPJ2tvrSQ==", + "dependencies": { + "@rollup/plugin-node-resolve": "^15.2.3", + "flowbite": "^2.0.0" } }, - "node_modules/focus-trap": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz", - "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==", + "node_modules/flyonui": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/flyonui/-/flyonui-1.1.0.tgz", + "integrity": "sha512-2W7QBBNKITe5YJ6fUaMo0t0G1u8r1YxvaZBrhkdsIxr//JkUFiYSBXy9aqaY/Hva4bodNtz0DkpMjgp+iHgZvg==", "dependencies": { - "tabbable": "^6.2.0" + "@popperjs/core": "^2.11.2", + "css-selector-tokenizer": "^0.8", + "culori": "^4.0.1", + "picocolors": "^1", + "postcss-js": "^4" + }, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/flyonui/node_modules/culori": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/culori/-/culori-4.0.1.tgz", + "integrity": "sha512-LSnjA6HuIUOlkfKVbzi2OlToZE8OjFi667JWN9qNymXVXzGDmvuP60SSgC+e92sd7B7158f7Fy3Mb6rXS5EDPw==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -5754,6 +6501,21 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/form-data": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.2.tgz", + "integrity": "sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==", + "optional": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, "node_modules/fraction.js": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", @@ -5788,16 +6550,32 @@ } }, "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dependencies": { - "minipass": "^7.0.3" + "minipass": "^3.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -5824,10 +6602,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "optional": true + }, + "node_modules/fuse.js": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.0.0.tgz", + "integrity": "sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==", + "engines": { + "node": ">=10" + } + }, "node_modules/gauge": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -5843,6 +6636,79 @@ "node": ">=10" } }, + "node_modules/gaxios": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz", + "integrity": "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/gaxios/node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/gaxios/node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/gaxios/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gaxios/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/gcp-metadata": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz", + "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==", + "dependencies": { + "gaxios": "^6.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -5875,36 +6741,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-tsconfig": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", - "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", - "dev": true, - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, "node_modules/giget": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.3.tgz", - "integrity": "sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.4.tgz", + "integrity": "sha512-Wv+daGyispVoA31TrWAVR+aAdP7roubTPEM/8JzRnqXhLbdJH0T9eQyXVFF8fjk3WKTsctII6QcyxILYgNp2DA==", "dependencies": { "citty": "^0.1.6", - "consola": "^3.2.3", + "consola": "^3.4.0", "defu": "^6.1.4", - "node-fetch-native": "^1.6.3", - "nypm": "^0.3.8", - "ohash": "^1.1.3", - "pathe": "^1.1.2", - "tar": "^6.2.0" + "node-fetch-native": "^1.6.6", + "nypm": "^0.5.1", + "ohash": "^1.1.4", + "pathe": "^2.0.2", + "tar": "^6.2.1" }, "bin": { "giget": "dist/cli.mjs" } }, + "node_modules/giget/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + }, "node_modules/git-config-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/git-config-path/-/git-config-path-2.0.0.tgz", @@ -5914,35 +6773,37 @@ } }, "node_modules/git-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", - "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-8.0.0.tgz", + "integrity": "sha512-uBI8Zdt1OZlrYfGcSVroLJKgyNNXlgusYFzHk614lTasz35yg2PVpL1RMy0LOO2dcvF9msYW3pRfUSmafZNrjg==", "dependencies": { "is-ssh": "^1.4.0", - "parse-url": "^8.1.0" + "parse-url": "^9.2.0" } }, "node_modules/git-url-parse": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-14.0.0.tgz", - "integrity": "sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-16.0.0.tgz", + "integrity": "sha512-Y8iAF0AmCaqXc6a5GYgPQW9ESbncNLOL+CeQAJRhmWUOmnPkKpBYeWYp4mFd3LA5j53CdGDdslzX12yEBVHQQg==", "dependencies": { - "git-up": "^7.0.0" + "git-up": "^8.0.0" } }, "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=12" + "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -5974,17 +6835,21 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "15.14.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", + "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globby": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", - "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", "dependencies": { "@sindresorhus/merge-streams": "^2.1.0", "fast-glob": "^3.3.2", @@ -6000,11 +6865,102 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globby/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/google-auth-library": { + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.0.tgz", + "integrity": "sha512-7ccSEJFDFO7exFbO6NRyC+xH8/mZ1GZGG2xxx9iHxZWcjUjJpjWxIMw3cofAKcueZ6DATiukmmprD7yavQHOyQ==", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^6.1.1", + "gcp-metadata": "^6.1.0", + "gtoken": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/google-gax": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-4.4.1.tgz", + "integrity": "sha512-Phyp9fMfA00J3sZbJxbbB4jC55b7DBjE3F6poyL3wKMEBVKA79q6BGuHcTiM28yOzVql0NDbRL8MLLh8Iwk9Dg==", + "optional": true, + "dependencies": { + "@grpc/grpc-js": "^1.10.9", + "@grpc/proto-loader": "^0.7.13", + "@types/long": "^4.0.0", + "abort-controller": "^3.0.0", + "duplexify": "^4.0.0", + "google-auth-library": "^9.3.0", + "node-fetch": "^2.7.0", + "object-hash": "^3.0.0", + "proto3-json-serializer": "^2.0.2", + "protobufjs": "^7.3.2", + "retry-request": "^7.0.0", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/google-gax/node_modules/@grpc/grpc-js": { + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.12.4.tgz", + "integrity": "sha512-NBhrxEWnFh0FxeA0d//YP95lRFsSx2TNLEUQg4/W+5f/BMxcCjgOOIT24iD+ZB/tZw057j44DaIxja7w4XMrhg==", + "optional": true, + "dependencies": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/google-gax/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/gtoken": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz", + "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==", + "dependencies": { + "gaxios": "^6.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/gzip-size": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-7.0.0.tgz", @@ -6020,75 +6976,116 @@ } }, "node_modules/h3": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.11.1.tgz", - "integrity": "sha512-AbaH6IDnZN6nmbnJOH72y3c5Wwh9P97soSVdGSBbcDACRdkC0FEWf25pzx4f/NuOCK6quHmW18yF2Wx+G4Zi1A==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.14.0.tgz", + "integrity": "sha512-ao22eiONdgelqcnknw0iD645qW0s9NnrJHr5OBz4WOMdBdycfSas1EQf1wXRsm+PcB2Yoj43pjBPwqIpJQTeWg==", "dependencies": { - "cookie-es": "^1.0.0", - "crossws": "^0.2.2", + "cookie-es": "^1.2.2", + "crossws": "^0.3.2", "defu": "^6.1.4", "destr": "^2.0.3", - "iron-webcrypto": "^1.0.0", - "ohash": "^1.1.3", - "radix3": "^1.1.0", - "ufo": "^1.4.0", + "iron-webcrypto": "^1.2.1", + "ohash": "^1.1.4", + "radix3": "^1.1.2", + "ufo": "^1.5.4", "uncrypto": "^0.1.3", - "unenv": "^1.9.0" + "unenv": "^1.10.0" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/happy-dom": { + "version": "16.7.2", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-16.7.2.tgz", + "integrity": "sha512-zOzw0xyYlDaF/ylwbAsduYZZVRTd5u7IwlFkGbEathIeJMLp3vrN3cHm3RS7PZpD9gr/IO16bHEswcgNyWTsqw==", + "dev": true, + "dependencies": { + "webidl-conversions": "^7.0.0", + "whatwg-mimetype": "^3.0.0" + }, "engines": { - "node": ">=4" + "node": ">=18.0.0" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - }, - "node_modules/hash-sum": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", - "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==" - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, + "node_modules/happy-dom/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=12" } }, - "node_modules/hookable": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", - "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } }, - "node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, "dependencies": { - "lru-cache": "^10.0.1" + "has-symbols": "^1.0.3" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, "engines": { - "node": "14 || >=16.14" + "node": ">= 0.4" } }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "optional": true + }, "node_modules/html-tags": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", @@ -6100,10 +7097,52 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + "node_modules/http-assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", + "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", + "dev": true, + "dependencies": { + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-assert/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-assert/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-assert/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/http-errors": { "version": "2.0.0", @@ -6120,27 +7159,23 @@ "node": ">= 0.8" } }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "optional": true, "dependencies": { - "debug": "^4.3.4" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">= 14" + "node": ">= 6" } }, "node_modules/http-shutdown": { @@ -6165,9 +7200,9 @@ } }, "node_modules/httpxy": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/httpxy/-/httpxy-0.1.5.tgz", - "integrity": "sha512-hqLDO+rfststuyEUTWObQK6zHEEmZ/kaIP2/zclGGZn6X8h/ESTWg+WKecQ/e5k4nPswjzZD+q2VqZIbr15CoQ==" + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/httpxy/-/httpxy-0.1.7.tgz", + "integrity": "sha512-pXNx8gnANKAndgga5ahefxc++tJvNL87CXoRwxn1cJE2ZkWEojF3tNfQIEhZX/vfpt+wzeAzpUI4qkediX1MLQ==" }, "node_modules/human-signals": { "version": "4.3.1", @@ -6177,18 +7212,6 @@ "node": ">=14.18.0" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -6209,68 +7232,85 @@ ] }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", + "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", "engines": { "node": ">= 4" } }, - "node_modules/ignore-walk": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", - "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } + "node_modules/image-meta": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/image-meta/-/image-meta-0.2.1.tgz", + "integrity": "sha512-K6acvFaelNxx8wc2VjbIzXKDVB0Khs0QT35U6NkGfTdCmjLNcO2945m7RFNR9/RPVFm48hq7QPzK8uGH18HCGw==" + }, + "node_modules/immutable": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", + "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==" }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "devOptional": true, "dependencies": { - "brace-expansion": "^2.0.1" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/image-meta": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/image-meta/-/image-meta-0.2.0.tgz", - "integrity": "sha512-ZBGjl0ZMEMeOC3Ns0wUF/5UdUmr3qQhBSCniT0LxOgGGIRHiNFOkMtIHB7EOznRU47V2AxPgiVP+s+0/UCU0Hg==" + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "devOptional": true, + "engines": { + "node": ">=4" + } }, - "node_modules/immutable": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", - "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==" + "node_modules/impound": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/impound/-/impound-0.2.0.tgz", + "integrity": "sha512-gXgeSyp9Hf7qG2/PLKmywHXyQf2xFrw+mJGpoj9DsAB9L7/MIKn+DeEx98UryWXdmbv8wUUPdcQof6qXnZoCGg==", + "dependencies": { + "@rollup/pluginutils": "^5.1.2", + "mlly": "^1.7.2", + "pathe": "^1.1.2", + "unenv": "^1.10.0", + "unplugin": "^1.14.1" + } }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "devOptional": true, "engines": { "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/index-to-position": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-0.1.2.tgz", + "integrity": "sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==", "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -6290,9 +7330,9 @@ } }, "node_modules/ioredis": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.4.1.tgz", - "integrity": "sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.4.2.tgz", + "integrity": "sha512-0SZXGNGZ+WzISQ67QDyZ2x0+wVxjjUndtD8oSeik/4ajifeiRufed8fCb8QW8VMyi4MXcS+UO1k/0NGhvq1PAg==", "dependencies": { "@ioredis/commands": "^1.1.1", "cluster-key-slot": "^1.1.0", @@ -6312,18 +7352,6 @@ "url": "https://opencollective.com/ioredis" } }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, "node_modules/iron-webcrypto": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", @@ -6343,26 +7371,15 @@ "node": ">=8" } }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dependencies": { - "builtin-modules": "^3.3.0" + "hasown": "^2.0.2" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dependencies": { - "hasown": "^2.0.0" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6398,6 +7415,21 @@ "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -6441,11 +7473,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" - }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -6470,14 +7497,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-primitive": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", - "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-reference": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", @@ -6505,6 +7524,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, "node_modules/is-wsl": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", @@ -6544,15 +7574,12 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -6561,82 +7588,305 @@ } }, "node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", "bin": { - "jiti": "bin/jiti.js" + "jiti": "lib/jiti-cli.mjs" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "node_modules/jose": { + "version": "4.15.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", + "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", + "funding": { + "url": "https://github.com/sponsors/panva" + } }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/js-beautify": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz", + "integrity": "sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==", + "dev": true, "dependencies": { - "argparse": "^2.0.1" + "config-chain": "^1.1.13", + "editorconfig": "^1.0.4", + "glob": "^10.3.3", + "js-cookie": "^3.0.5", + "nopt": "^7.2.0" }, "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" + "css-beautify": "js/bin/css-beautify.js", + "html-beautify": "js/bin/html-beautify.js", + "js-beautify": "js/bin/js-beautify.js" }, "engines": { - "node": ">=4" + "node": ">=14" } }, - "node_modules/json-parse-even-better-errors": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", - "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "node_modules/js-beautify/node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" + "node_modules/js-beautify/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/js-beautify/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, "dependencies": { - "universalify": "^2.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "engines": [ - "node >= 0.2.0" - ] + "node_modules/js-beautify/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/js-beautify/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/js-beautify/node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "devOptional": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "devOptional": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jwks-rsa": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-3.1.0.tgz", + "integrity": "sha512-v7nqlfezb9YfHHzYII3ef2a2j1XnGeSE/bK3WfumaYCqONAIstJbrEGapz4kadScZzEt7zYCN7bucj8C0Mv/Rg==", + "dependencies": { + "@types/express": "^4.17.17", + "@types/jsonwebtoken": "^9.0.2", + "debug": "^4.3.4", + "jose": "^4.14.6", + "limiter": "^1.1.5", + "lru-memoizer": "^2.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keygrip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "dev": true, + "dependencies": { + "tsscmp": "1.0.6" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "devOptional": true, + "dependencies": { + "json-buffer": "3.0.1" + } }, "node_modules/kleur": { "version": "3.0.3", @@ -6655,9 +7905,175 @@ } }, "node_modules/knitwork": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/knitwork/-/knitwork-1.1.0.tgz", - "integrity": "sha512-oHnmiBUVHz1V+URE77PNot2lv3QiYU2zQf1JjOVkMt3YDKGbu8NAFr+c4mcNOhdsGrB/VpVbRwPwhiXrPhxQbw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/knitwork/-/knitwork-1.2.0.tgz", + "integrity": "sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg==" + }, + "node_modules/koa": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.15.3.tgz", + "integrity": "sha512-j/8tY9j5t+GVMLeioLaxweJiKUayFhlGqNTzf2ZGwL0ZCQijd2RLHK0SLW5Tsko8YyyqCZC2cojIb0/s62qTAg==", + "dev": true, + "dependencies": { + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.9.0", + "debug": "^4.3.2", + "delegates": "^1.0.0", + "depd": "^2.0.0", + "destroy": "^1.0.4", + "encodeurl": "^1.0.2", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.0", + "koa-convert": "^2.0.0", + "on-finished": "^2.3.0", + "only": "~0.0.2", + "parseurl": "^1.3.2", + "statuses": "^1.5.0", + "type-is": "^1.6.16", + "vary": "^1.1.2" + }, + "engines": { + "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" + } + }, + "node_modules/koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", + "dev": true + }, + "node_modules/koa-convert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", + "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", + "dev": true, + "dependencies": { + "co": "^4.6.0", + "koa-compose": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/koa-send": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", + "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "http-errors": "^1.7.3", + "resolve-path": "^1.4.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/koa-send/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa-send/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa-send/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa-static": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", + "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", + "dev": true, + "dependencies": { + "debug": "^3.1.0", + "koa-send": "^5.0.0" + }, + "engines": { + "node": ">= 7.6.0" + } + }, + "node_modules/koa-static/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/koa/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/koa/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa/node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/kolorist": { "version": "1.8.0", @@ -6665,9 +8081,9 @@ "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==" }, "node_modules/launch-editor": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", - "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", + "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", "dependencies": { "picocolors": "^1.0.0", "shell-quote": "^1.8.1" @@ -6711,53 +8127,319 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/lilconfig": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", - "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", - "engines": { - "node": ">=14" + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "devOptional": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, - "funding": { - "url": "https://github.com/sponsors/antonk52" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/listhen": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.7.2.tgz", - "integrity": "sha512-7/HamOm5YD9Wb7CFgAZkKgVPA96WwhcTQoqtm2VTZGVbVVn3IWKRBTgrU7cchA3Q8k9iCsG8Osoi9GX4JsGM9g==", + "node_modules/lightningcss": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.28.2.tgz", + "integrity": "sha512-ePLRrbt3fgjXI5VFZOLbvkLD5ZRuxGKm+wJ3ujCqBtL3NanDHPo/5zicR5uEKAPiIjBYF99BM4K4okvMznjkVA==", + "optional": true, + "peer": true, "dependencies": { - "@parcel/watcher": "^2.4.1", - "@parcel/watcher-wasm": "^2.4.1", - "citty": "^0.1.6", - "clipboardy": "^4.0.0", - "consola": "^3.2.3", - "crossws": "^0.2.0", - "defu": "^6.1.4", - "get-port-please": "^3.1.2", - "h3": "^1.10.2", - "http-shutdown": "^1.2.2", - "jiti": "^1.21.0", - "mlly": "^1.6.1", - "node-forge": "^1.3.1", - "pathe": "^1.1.2", - "std-env": "^3.7.0", - "ufo": "^1.4.0", - "untun": "^0.1.3", - "uqr": "^0.1.2" + "detect-libc": "^1.0.3" }, - "bin": { - "listen": "bin/listhen.mjs", - "listhen": "bin/listhen.mjs" + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.28.2", + "lightningcss-darwin-x64": "1.28.2", + "lightningcss-freebsd-x64": "1.28.2", + "lightningcss-linux-arm-gnueabihf": "1.28.2", + "lightningcss-linux-arm64-gnu": "1.28.2", + "lightningcss-linux-arm64-musl": "1.28.2", + "lightningcss-linux-x64-gnu": "1.28.2", + "lightningcss-linux-x64-musl": "1.28.2", + "lightningcss-win32-arm64-msvc": "1.28.2", + "lightningcss-win32-x64-msvc": "1.28.2" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.28.2.tgz", + "integrity": "sha512-/8cPSqZiusHSS+WQz0W4NuaqFjquys1x+NsdN/XOHb+idGHJSoJ7SoQTVl3DZuAgtPZwFZgRfb/vd1oi8uX6+g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.28.2.tgz", + "integrity": "sha512-R7sFrXlgKjvoEG8umpVt/yutjxOL0z8KWf0bfPT3cYMOW4470xu5qSHpFdIOpRWwl3FKNMUdbKtMUjYt0h2j4g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.28.2.tgz", + "integrity": "sha512-l2qrCT+x7crAY+lMIxtgvV10R8VurzHAoUZJaVFSlHrN8kRLTvEg9ObojIDIexqWJQvJcVVV3vfzsEynpiuvgA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.28.2.tgz", + "integrity": "sha512-DKMzpICBEKnL53X14rF7hFDu8KKALUJtcKdFUCW5YOlGSiwRSgVoRjM97wUm/E0NMPkzrTi/rxfvt7ruNK8meg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.28.2.tgz", + "integrity": "sha512-nhfjYkfymWZSxdtTNMWyhFk2ImUm0X7NAgJWFwnsYPOfmtWQEapzG/DXZTfEfMjSzERNUNJoQjPAbdqgB+sjiw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.28.2.tgz", + "integrity": "sha512-1SPG1ZTNnphWvAv8RVOymlZ8BDtAg69Hbo7n4QxARvkFVCJAt0cgjAw1Fox0WEhf4PwnyoOBaVH0Z5YNgzt4dA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.28.2.tgz", + "integrity": "sha512-ZhQy0FcO//INWUdo/iEdbefntTdpPVQ0XJwwtdbBuMQe+uxqZoytm9M+iqR9O5noWFaxK+nbS2iR/I80Q2Ofpg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.28.2.tgz", + "integrity": "sha512-alb/j1NMrgQmSFyzTbN1/pvMPM+gdDw7YBuQ5VSgcFDypN3Ah0BzC2dTZbzwzaMdUVDszX6zH5MzjfVN1oGuww==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.28.2.tgz", + "integrity": "sha512-WnwcjcBeAt0jGdjlgbT9ANf30pF0C/QMb1XnLnH272DQU8QXh+kmpi24R55wmWBwaTtNAETZ+m35ohyeMiNt+g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.28.2.tgz", + "integrity": "sha512-3piBifyT3avz22o6mDKywQC/OisH2yDK+caHWkiMsF82i3m5wDBadyCjlCQ5VNgzYkxrWZgiaxHDdd5uxsi0/A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "optional": true, + "peer": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/listhen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.9.0.tgz", + "integrity": "sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==", + "dependencies": { + "@parcel/watcher": "^2.4.1", + "@parcel/watcher-wasm": "^2.4.1", + "citty": "^0.1.6", + "clipboardy": "^4.0.0", + "consola": "^3.2.3", + "crossws": ">=0.2.0 <0.4.0", + "defu": "^6.1.4", + "get-port-please": "^3.1.2", + "h3": "^1.12.0", + "http-shutdown": "^1.2.2", + "jiti": "^2.1.2", + "mlly": "^1.7.1", + "node-forge": "^1.3.1", + "pathe": "^1.1.2", + "std-env": "^3.7.0", + "ufo": "^1.5.4", + "untun": "^0.1.3", + "uqr": "^0.1.2" + }, + "bin": { + "listen": "bin/listhen.mjs", + "listhen": "bin/listhen.mjs" } }, "node_modules/local-pkg": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", - "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz", + "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", "dependencies": { - "mlly": "^1.4.2", - "pkg-types": "^1.0.3" + "mlly": "^1.7.3", + "pkg-types": "^1.2.1" }, "engines": { "node": ">=14" @@ -6770,7 +8452,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "peer": true, + "devOptional": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -6791,16 +8473,62 @@ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "optional": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, "node_modules/lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, "node_modules/lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -6809,13 +8537,31 @@ "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "devOptional": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" }, + "node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", + "optional": true + }, + "node_modules/loupe": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", + "dev": true + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -6824,32 +8570,57 @@ "yallist": "^3.0.2" } }, + "node_modules/lru-memoizer": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.3.0.tgz", + "integrity": "sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug==", + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "lru-cache": "6.0.0" + } + }, + "node_modules/lru-memoizer/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lru-memoizer/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/magic-string": { - "version": "0.30.10", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", - "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/magic-string-ast": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/magic-string-ast/-/magic-string-ast-0.5.0.tgz", - "integrity": "sha512-mxjxZ5zoR4+ybulZ7Z5qdZUTdAfiKJ1Il80kN/I4jWsHTTqNKZ9KsBa3Jepo+3U09I04qiyC2+7MZD8v4rJOoA==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/magic-string-ast/-/magic-string-ast-0.7.0.tgz", + "integrity": "sha512-686fgAHaJY7wLTFEq7nnKqeQrhqmXB19d1HnqT35Ci7BN6hbAYLZUezTQ062uUHM7ggZEQlqJ94Ftls+KDXU8Q==", "dependencies": { - "magic-string": "^0.30.9" + "magic-string": "^0.30.17" }, "engines": { "node": ">=16.14.0" } }, "node_modules/magicast": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz", - "integrity": "sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", "dependencies": { - "@babel/parser": "^7.24.4", - "@babel/types": "^7.24.0", + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, @@ -6875,38 +8646,20 @@ "semver": "bin/semver.js" } }, - "node_modules/make-fetch-happen": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", - "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/material-colors": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", - "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" - }, "node_modules/mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -6920,12 +8673,21 @@ "node": ">= 8" } }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -6933,9 +8695,9 @@ } }, "node_modules/mime": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.3.tgz", - "integrity": "sha512-KgUb15Oorc0NEKPbvfa0wRU+PItIEZmiv+pyAO2i0oTIVTJhlzMclU7w4RXWQrSOVH5ax/p/CkIO7KI4OyFJTQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.4.tgz", + "integrity": "sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==", "funding": [ "https://github.com/sponsors/broofa" ], @@ -6946,169 +8708,74 @@ "node": ">=16" } }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/minipass": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", - "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-collect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dependencies": { - "minipass": "^3.0.0" - }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "devOptional": true, "engines": { - "node": ">= 8" + "node": ">= 0.6" } }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "devOptional": true, "dependencies": { - "yallist": "^4.0.0" + "mime-db": "1.52.0" }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/minipass-flush/node_modules/yallist": { + "node_modules/mimic-fn": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-json-stream/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "bin": { + "mini-svg-data-uri": "cli.js" } }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "yallist": "^4.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "engines": { "node": ">=8" } }, - "node_modules/minipass-sized/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", @@ -7154,23 +8821,20 @@ } }, "node_modules/mlly": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.0.tgz", - "integrity": "sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", + "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", "dependencies": { - "acorn": "^8.11.3", - "pathe": "^1.1.2", - "pkg-types": "^1.1.0", - "ufo": "^1.5.3" + "acorn": "^8.14.0", + "pathe": "^2.0.1", + "pkg-types": "^1.3.0", + "ufo": "^1.5.4" } }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "engines": { - "node": ">=4" - } + "node_modules/mlly/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" }, "node_modules/mrmime": { "version": "2.0.0", @@ -7181,14 +8845,25 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } }, "node_modules/nanoid": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.7.tgz", - "integrity": "sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.9.tgz", + "integrity": "sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==", "funding": [ { "type": "github", @@ -7202,85 +8877,98 @@ "node": "^18 || >=20" } }, + "node_modules/nanotar": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nanotar/-/nanotar-0.2.0.tgz", + "integrity": "sha512-9ca1h0Xjvo9bEkE4UOxgAzLV0jHKe6LMaxo37ND2DAhhAtd0j8pR1Wxz+/goMrZO8AEZTWCmyaOsFI/W5AdpCQ==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "devOptional": true + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/nitropack": { - "version": "2.9.6", - "resolved": "https://registry.npmjs.org/nitropack/-/nitropack-2.9.6.tgz", - "integrity": "sha512-HP2PE0dREcDIBVkL8Zm6eVyrDd10/GI9hTL00PHvjUM8I9Y/2cv73wRDmxNyInfrx/CJKHATb2U/pQrqpzJyXA==", - "dependencies": { - "@cloudflare/kv-asset-handler": "^0.3.1", - "@netlify/functions": "^2.6.0", - "@rollup/plugin-alias": "^5.1.0", - "@rollup/plugin-commonjs": "^25.0.7", + "version": "2.10.4", + "resolved": "https://registry.npmjs.org/nitropack/-/nitropack-2.10.4.tgz", + "integrity": "sha512-sJiG/MIQlZCVSw2cQrFG1H6mLeSqHlYfFerRjLKz69vUfdu0EL2l0WdOxlQbzJr3mMv/l4cOlCCLzVRzjzzF/g==", + "dependencies": { + "@cloudflare/kv-asset-handler": "^0.3.4", + "@netlify/functions": "^2.8.2", + "@rollup/plugin-alias": "^5.1.1", + "@rollup/plugin-commonjs": "^28.0.1", "@rollup/plugin-inject": "^5.0.5", "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^15.2.3", - "@rollup/plugin-replace": "^5.0.5", + "@rollup/plugin-node-resolve": "^15.3.0", + "@rollup/plugin-replace": "^6.0.1", "@rollup/plugin-terser": "^0.4.4", - "@rollup/pluginutils": "^5.1.0", - "@types/http-proxy": "^1.17.14", - "@vercel/nft": "^0.26.4", + "@rollup/pluginutils": "^5.1.3", + "@types/http-proxy": "^1.17.15", + "@vercel/nft": "^0.27.5", "archiver": "^7.0.1", - "c12": "^1.10.0", - "chalk": "^5.3.0", + "c12": "2.0.1", "chokidar": "^3.6.0", "citty": "^0.1.6", + "compatx": "^0.1.8", + "confbox": "^0.1.8", "consola": "^3.2.3", - "cookie-es": "^1.1.0", - "croner": "^8.0.1", - "crossws": "^0.2.4", - "db0": "^0.1.4", + "cookie-es": "^1.2.2", + "croner": "^9.0.0", + "crossws": "^0.3.1", + "db0": "^0.2.1", "defu": "^6.1.4", "destr": "^2.0.3", - "dot-prop": "^8.0.2", - "esbuild": "^0.20.2", + "dot-prop": "^9.0.0", + "esbuild": "^0.24.0", "escape-string-regexp": "^5.0.0", "etag": "^1.8.1", "fs-extra": "^11.2.0", - "globby": "^14.0.1", + "globby": "^14.0.2", "gzip-size": "^7.0.0", - "h3": "^1.11.1", + "h3": "^1.13.0", "hookable": "^5.5.3", "httpxy": "^0.1.5", - "ioredis": "^5.3.2", - "is-primitive": "^3.0.1", - "jiti": "^1.21.0", + "ioredis": "^5.4.1", + "jiti": "^2.4.0", "klona": "^2.0.6", "knitwork": "^1.1.0", - "listhen": "^1.7.2", - "magic-string": "^0.30.8", - "mime": "^4.0.1", - "mlly": "^1.6.1", - "mri": "^1.2.0", + "listhen": "^1.9.0", + "magic-string": "^0.30.12", + "magicast": "^0.3.5", + "mime": "^4.0.4", + "mlly": "^1.7.2", "node-fetch-native": "^1.6.4", - "ofetch": "^1.3.4", - "ohash": "^1.1.3", - "openapi-typescript": "^6.7.5", + "ofetch": "^1.4.1", + "ohash": "^1.1.4", + "openapi-typescript": "^7.4.2", "pathe": "^1.1.2", "perfect-debounce": "^1.0.0", - "pkg-types": "^1.0.3", + "pkg-types": "^1.2.1", "pretty-bytes": "^6.1.1", "radix3": "^1.1.2", - "rollup": "^4.13.2", + "rollup": "^4.24.3", "rollup-plugin-visualizer": "^5.12.0", "scule": "^1.3.0", - "semver": "^7.6.0", - "serve-placeholder": "^2.0.1", - "serve-static": "^1.15.0", + "semver": "^7.6.3", + "serve-placeholder": "^2.0.2", + "serve-static": "^1.16.2", "std-env": "^3.7.0", - "ufo": "^1.5.3", + "ufo": "^1.5.4", "uncrypto": "^0.1.3", "unctx": "^2.3.1", - "unenv": "^1.9.0", - "unimport": "^3.7.1", - "unstorage": "^1.10.2", + "unenv": "^1.10.0", + "unimport": "^3.13.1", + "unstorage": "^1.13.1", + "untyped": "^1.5.1", "unwasm": "^0.3.9" }, "bin": { @@ -7299,24 +8987,10 @@ } } }, - "node_modules/nitropack/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/node-addon-api": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz", - "integrity": "sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==", - "engines": { - "node": "^16 || ^18 || >= 20" - } + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==" }, "node_modules/node-fetch": { "version": "2.7.0", @@ -7338,9 +9012,9 @@ } }, "node_modules/node-fetch-native": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz", - "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==" + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.6.tgz", + "integrity": "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==" }, "node_modules/node-forge": { "version": "1.3.1", @@ -7350,291 +9024,81 @@ "node": ">= 6.13.0" } }, - "node_modules/node-gyp": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.1.0.tgz", - "integrity": "sha512-B4J5M1cABxPc5PwfjhbV5hoy2DP9p8lFXASnEN6hugXOa61416tnTZ29x9sSwAd0o99XNIcpvDDy1swAExsVKA==", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^4.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, "node_modules/node-gyp-build": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", - "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, - "node_modules/node-gyp/node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" }, - "node_modules/node-gyp/node_modules/glob": { - "version": "10.3.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", - "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.11.0" + "abbrev": "1" }, "bin": { - "glob": "dist/esm/bin.mjs" + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=6" } }, - "node_modules/node-gyp/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "engines": { - "node": ">=16" + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dependencies": { - "brace-expansion": "^2.0.1" + "path-key": "^4.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-gyp/node_modules/nopt": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", - "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", - "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/node-gyp/node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/node-gyp/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-package-data": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.1.tgz", - "integrity": "sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ==", - "dependencies": { - "hosted-git-info": "^7.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", - "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-install-checks": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", - "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-package-arg": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", - "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", - "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-packlist": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", - "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", - "dependencies": { - "ignore-walk": "^6.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.1.tgz", - "integrity": "sha512-Udm1f0l2nXb3wxDpKjfohwgdFUSV50UVwzEIpDXVsbDMXVIEF81a/i0UhuQbhrPMMmdiq3+YMFLFIRVLs3hxQw==", - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^11.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.0.1.tgz", - "integrity": "sha512-fLu9MTdZTlJAHUek/VLklE6EpIiP3VZpTiuN7OOMCt2Sd67NCpSEetMaxHHEZiZxllp8ZLsUpvbEszqTFEc+wA==", - "dependencies": { - "@npmcli/redact": "^2.0.0", - "make-fetch-happen": "^13.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^11.0.0", - "proc-log": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npmlog": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", "dependencies": { "are-we-there-yet": "^2.0.0", "console-control-strings": "^1.1.0", @@ -7653,95 +9117,86 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/nuxi": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/nuxi/-/nuxi-3.11.1.tgz", - "integrity": "sha512-AW71TpxRHNg8MplQVju9tEFvXPvX42e0wPYknutSStDuAjV99vWTWYed4jxr/grk2FtKAuv2KvdJxcn2W59qyg==", - "bin": { - "nuxi": "bin/nuxi.mjs", - "nuxi-ng": "bin/nuxi.mjs", - "nuxt": "bin/nuxi.mjs", - "nuxt-cli": "bin/nuxi.mjs" - }, - "engines": { - "node": "^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, "node_modules/nuxt": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/nuxt/-/nuxt-3.11.2.tgz", - "integrity": "sha512-Be1d4oyFo60pdF+diBolYDcfNemoMYM3R8PDjhnGrs/w3xJoDH1YMUVWHXXY8WhSmYZI7dyBehx/6kTfGFliVA==", + "version": "3.15.4", + "resolved": "https://registry.npmjs.org/nuxt/-/nuxt-3.15.4.tgz", + "integrity": "sha512-hSbZO4mR0uAMJtZPNTnCfiAtgleoOu28gvJcBNU7KQHgWnNXPjlWgwMczko2O4Tmnv9zIe/CQged+2HsPwl2ZA==", "dependencies": { + "@nuxt/cli": "^3.21.1", "@nuxt/devalue": "^2.0.2", - "@nuxt/devtools": "^1.1.5", - "@nuxt/kit": "3.11.2", - "@nuxt/schema": "3.11.2", - "@nuxt/telemetry": "^2.5.3", - "@nuxt/ui-templates": "^1.3.2", - "@nuxt/vite-builder": "3.11.2", - "@unhead/dom": "^1.9.4", - "@unhead/ssr": "^1.9.4", - "@unhead/vue": "^1.9.4", - "@vue/shared": "^3.4.21", - "acorn": "8.11.3", - "c12": "^1.10.0", - "chokidar": "^3.6.0", - "cookie-es": "^1.1.0", + "@nuxt/devtools": "^1.7.0", + "@nuxt/kit": "3.15.4", + "@nuxt/schema": "3.15.4", + "@nuxt/telemetry": "^2.6.4", + "@nuxt/vite-builder": "3.15.4", + "@unhead/dom": "^1.11.18", + "@unhead/shared": "^1.11.18", + "@unhead/ssr": "^1.11.18", + "@unhead/vue": "^1.11.18", + "@vue/shared": "^3.5.13", + "acorn": "8.14.0", + "c12": "^2.0.1", + "chokidar": "^4.0.3", + "compatx": "^0.1.8", + "consola": "^3.4.0", + "cookie-es": "^1.2.2", "defu": "^6.1.4", "destr": "^2.0.3", - "devalue": "^4.3.2", - "esbuild": "^0.20.2", + "devalue": "^5.1.1", + "errx": "^0.1.0", + "esbuild": "^0.24.2", "escape-string-regexp": "^5.0.0", "estree-walker": "^3.0.3", - "fs-extra": "^11.2.0", - "globby": "^14.0.1", - "h3": "^1.11.1", + "globby": "^14.0.2", + "h3": "^1.14.0", "hookable": "^5.5.3", - "jiti": "^1.21.0", + "ignore": "^7.0.3", + "impound": "^0.2.0", + "jiti": "^2.4.2", "klona": "^2.0.6", - "knitwork": "^1.1.0", - "magic-string": "^0.30.9", - "mlly": "^1.6.1", - "nitropack": "^2.9.6", - "nuxi": "^3.11.1", - "nypm": "^0.3.8", - "ofetch": "^1.3.4", - "ohash": "^1.1.3", - "pathe": "^1.1.2", + "knitwork": "^1.2.0", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "nanotar": "^0.2.0", + "nitropack": "^2.10.4", + "nypm": "^0.5.2", + "ofetch": "^1.4.1", + "ohash": "^1.1.4", + "pathe": "^2.0.2", "perfect-debounce": "^1.0.0", - "pkg-types": "^1.0.3", + "pkg-types": "^1.3.1", "radix3": "^1.1.2", "scule": "^1.3.0", - "std-env": "^3.7.0", - "strip-literal": "^2.1.0", - "ufo": "^1.5.3", + "semver": "^7.6.3", + "std-env": "^3.8.0", + "strip-literal": "^3.0.0", + "tinyglobby": "0.2.10", + "ufo": "^1.5.4", "ultrahtml": "^1.5.3", "uncrypto": "^0.1.3", - "unctx": "^2.3.1", - "unenv": "^1.9.0", - "unimport": "^3.7.1", - "unplugin": "^1.10.1", - "unplugin-vue-router": "^0.7.0", - "unstorage": "^1.10.2", - "untyped": "^1.4.2", - "vue": "^3.4.21", - "vue-bundle-renderer": "^2.0.0", + "unctx": "^2.4.1", + "unenv": "^1.10.0", + "unhead": "^1.11.18", + "unimport": "^4.0.0", + "unplugin": "^2.1.2", + "unplugin-vue-router": "^0.11.2", + "unstorage": "^1.14.4", + "untyped": "^1.5.2", + "vue": "^3.5.13", + "vue-bundle-renderer": "^2.1.1", "vue-devtools-stub": "^0.1.0", - "vue-router": "^4.3.0" + "vue-router": "^4.5.0" }, "bin": { "nuxi": "bin/nuxt.mjs", "nuxt": "bin/nuxt.mjs" }, "engines": { - "node": "^14.18.0 || >=16.10.0" + "node": "^18.20.5 || ^20.9.0 || >=22.0.0" }, "peerDependencies": { "@parcel/watcher": "^2.1.0", - "@types/node": "^14.18.0 || >=16.10.0" + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "peerDependenciesMeta": { "@parcel/watcher": { @@ -7752,76 +9207,139 @@ } } }, - "node_modules/nypm": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.8.tgz", - "integrity": "sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==", + "node_modules/nuxt/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dependencies": { - "citty": "^0.1.6", - "consola": "^3.2.3", - "execa": "^8.0.1", - "pathe": "^1.1.2", - "ufo": "^1.4.0" - }, - "bin": { - "nypm": "dist/cli.mjs" + "readdirp": "^4.0.1" }, "engines": { - "node": "^14.16.0 || >=16.10.0" + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/nypm/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "node_modules/nuxt/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==" + }, + "node_modules/nuxt/node_modules/local-pkg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.0.0.tgz", + "integrity": "sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" + "mlly": "^1.7.3", + "pkg-types": "^1.3.0" }, "engines": { - "node": ">=16.17" + "node": ">=14" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/nypm/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "node_modules/nuxt/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + }, + "node_modules/nuxt/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "engines": { - "node": ">=16" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/nypm/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "node_modules/nuxt/node_modules/readdirp": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.1.tgz", + "integrity": "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==", "engines": { - "node": ">=16.17.0" + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/nypm/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" + "node_modules/nuxt/node_modules/strip-literal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz", + "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", + "dependencies": { + "js-tokens": "^9.0.1" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/nuxt/node_modules/unimport": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-4.0.0.tgz", + "integrity": "sha512-FH+yZ36YaVlh0ZjHesP20Q4uL+wL0EqTNxDZcUupsIn6WRYXZAbIYEMDLTaLBpkNVzFpqZXS+am51/HR3ANUNw==", + "dependencies": { + "@rollup/pluginutils": "^5.1.4", + "acorn": "^8.14.0", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "fast-glob": "^3.3.3", + "local-pkg": "^1.0.0", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "pathe": "^2.0.2", + "picomatch": "^4.0.2", + "pkg-types": "^1.3.1", + "scule": "^1.3.0", + "strip-literal": "^3.0.0", + "unplugin": "^2.1.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/nuxt/node_modules/unplugin": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.1.2.tgz", + "integrity": "sha512-Q3LU0e4zxKfRko1wMV2HmP8lB9KWislY7hxXpxd+lGx0PRInE4vhMBVEZwpdVYHvtqzhSrzuIfErsob6bQfCzw==", + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/nypm": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.5.2.tgz", + "integrity": "sha512-AHzvnyUJYSrrphPhRWWZNcoZfArGNp3Vrc4pm/ZurO74tYNTgAPrEyBQEKy+qioqmWlPXwvMZCG2wOaHlPG0Pw==", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "pathe": "^2.0.2", + "pkg-types": "^1.3.1", + "tinyexec": "^0.3.2", + "ufo": "^1.5.4" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" } }, + "node_modules/nypm/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -7830,20 +9348,37 @@ "node": ">=0.10.0" } }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "devOptional": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/obscenity": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/obscenity/-/obscenity-0.4.1.tgz", + "integrity": "sha512-hzkBkFsoiOVB1tYCnC3dqh/Y/S+iis0hC6mqexVfg+LRCcVS7GLTcbW14+BuKMNDqPwNJsM7+tCVki7gWq73lw==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/ofetch": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.3.4.tgz", - "integrity": "sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", + "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", "dependencies": { "destr": "^2.0.3", - "node-fetch-native": "^1.6.3", - "ufo": "^1.5.3" + "node-fetch-native": "^1.6.4", + "ufo": "^1.5.4" } }, "node_modules/ohash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz", - "integrity": "sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz", + "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==" }, "node_modules/on-finished": { "version": "2.4.1", @@ -7878,6 +9413,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/only": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==", + "dev": true + }, "node_modules/open": { "version": "8.4.2", "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", @@ -7920,37 +9461,46 @@ } }, "node_modules/openapi-typescript": { - "version": "6.7.6", - "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-6.7.6.tgz", - "integrity": "sha512-c/hfooPx+RBIOPM09GSxABOZhYPblDoyaGhqBkD/59vtpN21jEuWKDlM0KYTvqJVlSYjKs0tBcIdeXKChlSPtw==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-7.4.4.tgz", + "integrity": "sha512-7j3nktnRzlQdlHnHsrcr6Gqz8f80/RhfA2I8s1clPI+jkY0hLNmnYVKBfuUEli5EEgK1B6M+ibdS5REasPlsUw==", "dependencies": { + "@redocly/openapi-core": "^1.25.9", "ansi-colors": "^4.1.3", - "fast-glob": "^3.3.2", - "js-yaml": "^4.1.0", + "change-case": "^5.4.4", + "parse-json": "^8.1.0", "supports-color": "^9.4.0", - "undici": "^5.28.4", "yargs-parser": "^21.1.1" }, "bin": { "openapi-typescript": "bin/cli.js" + }, + "peerDependencies": { + "typescript": "^5.x" } }, - "node_modules/openapi-typescript/node_modules/supports-color": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", - "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "devOptional": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">= 0.8.0" } }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "peer": true, + "devOptional": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -7965,7 +9515,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "peer": true, + "devOptional": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -7976,48 +9526,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, + "node_modules/package-manager-detector": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.8.tgz", + "integrity": "sha512-ts9KSdroZisdvKMWVAVCXiKqnqNfXz4+IbrBG8/BWx/TR5le+jfenvoBuIZ6UWM9nz47W7AbD9qYfAwfWMIwzA==" + }, + "node_modules/packrup": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/packrup/-/packrup-0.1.2.tgz", + "integrity": "sha512-ZcKU7zrr5GlonoS9cxxrb5HVswGnyj6jQvwFBa6p5VFw7G71VAHcUKL5wyZSU/ECtPM/9gacWxy2KFQKt1gMNA==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/harlan-zw" } }, - "node_modules/pacote": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz", - "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==", - "dependencies": { - "@npmcli/git": "^5.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/package-json": "^5.1.0", - "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^8.0.0", - "cacache": "^18.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^11.0.0", - "npm-packlist": "^8.0.0", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^17.0.0", - "proc-log": "^4.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^2.2.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" + "node_modules/parchment": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parchment/-/parchment-3.0.0.tgz", + "integrity": "sha512-HUrJFQ/StvgmXRcQ1ftY6VEZUq3jA2t9ncFN4F84J/vN0/FPpQF+8FKXb3l6fLces6q0uOHj6NJn+2xvZnxO6A==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "devOptional": true, + "dependencies": { + "callsites": "^3.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=6" } }, "node_modules/parse-git-config": { @@ -8037,6 +9578,22 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, + "node_modules/parse-json": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz", + "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "index-to-position": "^0.1.2", + "type-fest": "^4.7.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parse-path": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", @@ -8046,11 +9603,15 @@ } }, "node_modules/parse-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", - "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-9.2.0.tgz", + "integrity": "sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==", "dependencies": { + "@types/parse-path": "^7.0.0", "parse-path": "^7.0.0" + }, + "engines": { + "node": ">=14.13.0" } }, "node_modules/parseurl": { @@ -8065,7 +9626,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "peer": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -8107,12 +9668,15 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true }, "node_modules/path-type": { "version": "5.0.0", @@ -8130,15 +9694,24 @@ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, + "engines": { + "node": ">= 14.16" + } + }, "node_modules/perfect-debounce": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==" }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -8151,13 +9724,22 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pinia": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz", - "integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.2.8.tgz", + "integrity": "sha512-NRTYy2g+kju5tBRe0oNlriZIbMNvma8ZJrpHsp3qudyiMEA8jMmPPKQ2QMHg0Oc4BkUyQYWagACabrwriCK9HQ==", "dependencies": { - "@vue/devtools-api": "^6.5.0", - "vue-demi": ">=0.14.5" + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.10" }, "funding": { "url": "https://github.com/sponsors/posva" @@ -8165,7 +9747,7 @@ "peerDependencies": { "@vue/composition-api": "^1.4.0", "typescript": ">=4.4.4", - "vue": "^2.6.14 || ^3.3.0" + "vue": "^2.6.14 || ^3.5.11" }, "peerDependenciesMeta": { "@vue/composition-api": { @@ -8176,45 +9758,86 @@ } } }, - "node_modules/pinia/node_modules/vue-demi": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", - "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } + "node": ">= 6" } }, "node_modules/pkg-types": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.1.tgz", - "integrity": "sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", "dependencies": { - "confbox": "^0.1.7", - "mlly": "^1.7.0", - "pathe": "^1.1.2" + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/pkg-types/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dev": true, + "dependencies": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/portfinder/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", + "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", "funding": [ { "type": "opencollective", @@ -8230,369 +9853,564 @@ } ], "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.1.0.tgz", + "integrity": "sha512-uQ/LDGsf3mgsSUEXmAt3VsCSHR3aKqtEIkmB+4PhzYwRYOW5MZs/GhCCFpsOtJJkP6EC6uGipbrnaTjqaJZcJw==", "dependencies": { - "postcss-selector-parser": "^6.0.11", + "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12 || ^20.9 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.2" + "postcss": "^8.4.38" + } + }, + "node_modules/postcss-calc/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, "node_modules/postcss-colormin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.2.tgz", + "integrity": "sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==", "dependencies": { - "browserslist": "^4.23.0", + "browserslist": "^4.23.3", "caniuse-api": "^3.0.0", "colord": "^2.9.3", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-convert-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.4.tgz", + "integrity": "sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q==", "dependencies": { - "browserslist": "^4.23.0", + "browserslist": "^4.23.3", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-discard-comments": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.3.tgz", + "integrity": "sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA==", + "dependencies": { + "postcss-selector-parser": "^6.1.2" + }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-discard-duplicates": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz", + "integrity": "sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==", "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-discard-empty": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", + "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-discard-overridden": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz", + "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==", "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, - "node_modules/postcss-merge-longhand": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", - "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.1.1" + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">=14.0.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.0.0" } }, - "node_modules/postcss-merge-rules": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", - "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.2", - "postcss-selector-parser": "^6.0.16" + "camelcase-css": "^2.0.1" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.21" } }, - "node_modules/postcss-minify-font-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", - "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "postcss-value-parser": "^4.2.0" + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">= 14" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/postcss-minify-gradients": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", + "node_modules/postcss-merge-longhand": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.4.tgz", + "integrity": "sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A==", "dependencies": { - "colord": "^2.9.3", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" + "postcss-value-parser": "^4.2.0", + "stylehacks": "^7.0.4" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, - "node_modules/postcss-minify-params": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", + "node_modules/postcss-merge-rules": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.4.tgz", + "integrity": "sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg==", "dependencies": { - "browserslist": "^4.23.0", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^5.0.0", + "postcss-selector-parser": "^6.1.2" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, - "node_modules/postcss-minify-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", - "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", + "node_modules/postcss-minify-font-values": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz", + "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==", "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" + "postcss-value-parser": "^4.2.0" }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, - "node_modules/postcss-normalize-display-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", + "node_modules/postcss-minify-gradients": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz", + "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==", "dependencies": { + "colord": "^2.9.3", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, - "node_modules/postcss-normalize-positions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", + "node_modules/postcss-minify-params": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz", + "integrity": "sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==", "dependencies": { + "browserslist": "^4.23.3", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, - "node_modules/postcss-normalize-repeat-style": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", + "node_modules/postcss-minify-selectors": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.4.tgz", + "integrity": "sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA==", "dependencies": { - "postcss-value-parser": "^4.2.0" + "cssesc": "^3.0.0", + "postcss-selector-parser": "^6.1.2" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, - "node_modules/postcss-normalize-string": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "postcss-value-parser": "^4.2.0" + "postcss-selector-parser": "^6.1.1" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">=12.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.2.14" } }, - "node_modules/postcss-normalize-timing-functions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", + "node_modules/postcss-nesting": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", + "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { - "postcss-value-parser": "^4.2.0" + "@csstools/selector-resolve-nested": "^3.0.0", + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4" } }, - "node_modules/postcss-normalize-unicode": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" + "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", + "integrity": "sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz", + "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz", + "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz", + "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz", + "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-string": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz", + "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz", + "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz", + "integrity": "sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==", + "dependencies": { + "browserslist": "^4.23.3", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz", + "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-whitespace": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz", + "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-ordered-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz", + "integrity": "sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==", "dependencies": { - "cssnano-utils": "^4.0.2", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-reduce-initial": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz", + "integrity": "sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==", "dependencies": { - "browserslist": "^4.23.0", + "browserslist": "^4.23.3", "caniuse-api": "^3.0.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-reduce-transforms": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz", + "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-selector-parser": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", - "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -8602,29 +10420,29 @@ } }, "node_modules/postcss-svgo": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.1.tgz", + "integrity": "sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==", "dependencies": { "postcss-value-parser": "^4.2.0", - "svgo": "^3.2.0" + "svgo": "^3.3.2" }, "engines": { - "node": "^14 || ^16 || >= 18" + "node": "^18.12.0 || ^20.9.0 || >= 18" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-unique-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", - "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.3.tgz", + "integrity": "sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g==", "dependencies": { - "postcss-selector-parser": "^6.0.16" + "postcss-selector-parser": "^6.1.2" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" @@ -8636,15 +10454,16 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/postcss/node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -8652,6 +10471,109 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "devOptional": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", + "dev": true, + "peer": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-tailwindcss": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.9.tgz", + "integrity": "sha512-r0i3uhaZAXYP0At5xGfJH876W3HHGHDp+LCRUJrs57PBeQ6mYHMwr25KH8NPX44F2yGTvdnH7OqCshlQx183Eg==", + "dev": true, + "engines": { + "node": ">=14.21.3" + }, + "peerDependencies": { + "@ianvs/prettier-plugin-sort-imports": "*", + "@prettier/plugin-pug": "*", + "@shopify/prettier-plugin-liquid": "*", + "@trivago/prettier-plugin-sort-imports": "*", + "@zackad/prettier-plugin-twig-melody": "*", + "prettier": "^3.0", + "prettier-plugin-astro": "*", + "prettier-plugin-css-order": "*", + "prettier-plugin-import-sort": "*", + "prettier-plugin-jsdoc": "*", + "prettier-plugin-marko": "*", + "prettier-plugin-multiline-arrays": "*", + "prettier-plugin-organize-attributes": "*", + "prettier-plugin-organize-imports": "*", + "prettier-plugin-sort-imports": "*", + "prettier-plugin-style-order": "*", + "prettier-plugin-svelte": "*" + }, + "peerDependenciesMeta": { + "@ianvs/prettier-plugin-sort-imports": { + "optional": true + }, + "@prettier/plugin-pug": { + "optional": true + }, + "@shopify/prettier-plugin-liquid": { + "optional": true + }, + "@trivago/prettier-plugin-sort-imports": { + "optional": true + }, + "@zackad/prettier-plugin-twig-melody": { + "optional": true + }, + "prettier-plugin-astro": { + "optional": true + }, + "prettier-plugin-css-order": { + "optional": true + }, + "prettier-plugin-import-sort": { + "optional": true + }, + "prettier-plugin-jsdoc": { + "optional": true + }, + "prettier-plugin-marko": { + "optional": true + }, + "prettier-plugin-multiline-arrays": { + "optional": true + }, + "prettier-plugin-organize-attributes": { + "optional": true + }, + "prettier-plugin-organize-imports": { + "optional": true + }, + "prettier-plugin-sort-imports": { + "optional": true + }, + "prettier-plugin-style-order": { + "optional": true + }, + "prettier-plugin-svelte": { + "optional": true + } + } + }, "node_modules/pretty-bytes": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", @@ -8663,14 +10585,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -8684,23 +10598,6 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -8713,11 +10610,62 @@ "node": ">= 6" } }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, + "node_modules/proto3-json-serializer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-2.0.2.tgz", + "integrity": "sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==", + "optional": true, + "dependencies": { + "protobufjs": "^7.2.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/protobufjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", + "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/protocols": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==" }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "devOptional": true, + "engines": { + "node": ">=6" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -8742,6 +10690,33 @@ "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" }, + "node_modules/quill": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/quill/-/quill-2.0.3.tgz", + "integrity": "sha512-xEYQBqfYx/sfb33VJiKnSJp8ehloavImQ2A6564GAbqG55PGw1dAWUn1MUbQB62t0azawUS2CZZhWCjO8gRvTw==", + "dependencies": { + "eventemitter3": "^5.0.1", + "lodash-es": "^4.17.21", + "parchment": "^3.0.0", + "quill-delta": "^5.1.0" + }, + "engines": { + "npm": ">=8.2.3" + } + }, + "node_modules/quill-delta": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-5.1.0.tgz", + "integrity": "sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==", + "dependencies": { + "fast-diff": "^1.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.isequal": "^4.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, "node_modules/radix3": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", @@ -8772,6 +10747,15 @@ "destr": "^2.0.3" } }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, "node_modules/readable-stream": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", @@ -8795,6 +10779,25 @@ "minimatch": "^5.1.0" } }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -8825,10 +10828,35 @@ "node": ">=4" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "node_modules/replace-in-file": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-6.3.5.tgz", + "integrity": "sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "glob": "^7.2.0", + "yargs": "^17.2.1" + }, + "bin": { + "replace-in-file": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "engines": { "node": ">=0.10.0" } @@ -8857,23 +10885,87 @@ "node": ">=8" } }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "node_modules/resolve-path": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", + "integrity": "sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==", "dev": true, - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + "dependencies": { + "http-errors": "~1.6.2", + "path-is-absolute": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/resolve-path/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/resolve-path/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/resolve-path/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/resolve-path/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/resolve-path/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" } }, "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "optional": true, "engines": { "node": ">= 4" } }, + "node_modules/retry-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-7.0.2.tgz", + "integrity": "sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==", + "optional": true, + "dependencies": { + "@types/request": "^2.48.8", + "extend": "^3.0.2", + "teeny-request": "^9.0.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -8884,14 +10976,15 @@ } }, "node_modules/rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dependencies": { "glob": "^7.1.3" }, @@ -8902,51 +10995,12 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/rollup": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz", - "integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.28.0.tgz", + "integrity": "sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==", "dependencies": { - "@types/estree": "1.0.5" + "@types/estree": "1.0.6" }, "bin": { "rollup": "dist/bin/rollup" @@ -8956,32 +11010,34 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.17.2", - "@rollup/rollup-android-arm64": "4.17.2", - "@rollup/rollup-darwin-arm64": "4.17.2", - "@rollup/rollup-darwin-x64": "4.17.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.17.2", - "@rollup/rollup-linux-arm-musleabihf": "4.17.2", - "@rollup/rollup-linux-arm64-gnu": "4.17.2", - "@rollup/rollup-linux-arm64-musl": "4.17.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.17.2", - "@rollup/rollup-linux-riscv64-gnu": "4.17.2", - "@rollup/rollup-linux-s390x-gnu": "4.17.2", - "@rollup/rollup-linux-x64-gnu": "4.17.2", - "@rollup/rollup-linux-x64-musl": "4.17.2", - "@rollup/rollup-win32-arm64-msvc": "4.17.2", - "@rollup/rollup-win32-ia32-msvc": "4.17.2", - "@rollup/rollup-win32-x64-msvc": "4.17.2", + "@rollup/rollup-android-arm-eabi": "4.28.0", + "@rollup/rollup-android-arm64": "4.28.0", + "@rollup/rollup-darwin-arm64": "4.28.0", + "@rollup/rollup-darwin-x64": "4.28.0", + "@rollup/rollup-freebsd-arm64": "4.28.0", + "@rollup/rollup-freebsd-x64": "4.28.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.28.0", + "@rollup/rollup-linux-arm-musleabihf": "4.28.0", + "@rollup/rollup-linux-arm64-gnu": "4.28.0", + "@rollup/rollup-linux-arm64-musl": "4.28.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.28.0", + "@rollup/rollup-linux-riscv64-gnu": "4.28.0", + "@rollup/rollup-linux-s390x-gnu": "4.28.0", + "@rollup/rollup-linux-x64-gnu": "4.28.0", + "@rollup/rollup-linux-x64-musl": "4.28.0", + "@rollup/rollup-win32-arm64-msvc": "4.28.0", + "@rollup/rollup-win32-ia32-msvc": "4.28.0", + "@rollup/rollup-win32-x64-msvc": "4.28.0", "fsevents": "~2.3.2" } }, "node_modules/rollup-plugin-visualizer": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz", - "integrity": "sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.14.0.tgz", + "integrity": "sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==", "dependencies": { "open": "^8.4.0", - "picomatch": "^2.3.1", + "picomatch": "^4.0.2", "source-map": "^0.7.4", "yargs": "^17.5.1" }, @@ -8989,17 +11045,32 @@ "rollup-plugin-visualizer": "dist/bin/cli.js" }, "engines": { - "node": ">=14" + "node": ">=18" }, "peerDependencies": { + "rolldown": "1.x", "rollup": "2.x || 3.x || 4.x" }, "peerDependenciesMeta": { + "rolldown": { + "optional": true + }, "rollup": { "optional": true } } }, + "node_modules/rollup-plugin-visualizer/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/run-applescript": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", @@ -9052,19 +11123,13 @@ } ] }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "optional": true - }, "node_modules/sass": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.2.tgz", - "integrity": "sha512-eb4GZt1C3avsX3heBNlrc7I09nyT00IUuo4eFhAbeXWU2fvA7oXI53SxODVAA+zgZCk9aunAZgO+losjR3fAwA==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.82.0.tgz", + "integrity": "sha512-j4GMCTa8elGyN9A7x7bEglx0VgSpNUG4W4wNedQ33wSMdnkqQCT8HTwOaVSV4e6yQovcu/3Oc4coJP/l0xhL2Q==", "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", + "chokidar": "^4.0.0", + "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { @@ -9072,6 +11137,35 @@ }, "engines": { "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sass/node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, "node_modules/scule": { @@ -9080,9 +11174,9 @@ "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==" }, "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -9091,9 +11185,9 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -9126,6 +11220,14 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/send/node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -9137,11 +11239,6 @@ "node": ">=4" } }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -9151,22 +11248,22 @@ } }, "node_modules/serve-placeholder": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/serve-placeholder/-/serve-placeholder-2.0.1.tgz", - "integrity": "sha512-rUzLlXk4uPFnbEaIz3SW8VISTxMuONas88nYWjAWaM2W9VDbt9tyFOr3lq8RhVOFrT3XISoBw8vni5una8qMnQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/serve-placeholder/-/serve-placeholder-2.0.2.tgz", + "integrity": "sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==", "dependencies": { - "defu": "^6.0.0" + "defu": "^6.1.4" } }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" @@ -9202,50 +11299,35 @@ } }, "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shiki": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.5.2.tgz", - "integrity": "sha512-fpPbuSaatinmdGijE7VYUD3hxLozR3ZZ+iAx8Iy2X6REmJGyF5hQl94SgmiUNTospq346nXUVZx0035dyGvIVw==", - "dependencies": { - "@shikijs/core": "1.5.2" - } + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, - "node_modules/sigstore": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", - "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^2.3.2", - "@sigstore/tuf": "^2.3.4", - "@sigstore/verify": "^1.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, "node_modules/simple-git": { - "version": "3.24.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.24.0.tgz", - "integrity": "sha512-QqAKee9Twv+3k8IFOFfPB2hnk6as6Y6ACUpwCtQvRYBAes23Wv3SZlHVobAzqcE8gfsisCvPw3HGW3HYM+VYYw==", + "version": "3.27.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.27.0.tgz", + "integrity": "sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==", "dependencies": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", - "debug": "^4.3.4" + "debug": "^4.3.5" }, "funding": { "type": "github", @@ -9253,16 +11335,16 @@ } }, "node_modules/sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.0.tgz", + "integrity": "sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==", "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" }, "engines": { - "node": ">= 10" + "node": ">=18" } }, "node_modules/sisteransi": { @@ -9281,57 +11363,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, "node_modules/smob": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==" }, - "node_modules/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz", - "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==", - "dependencies": { - "agent-base": "^7.1.1", - "debug": "^4.3.4", - "socks": "^2.7.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", @@ -9341,9 +11377,9 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "engines": { "node": ">=0.10.0" } @@ -9365,34 +11401,6 @@ "node": ">=0.10.0" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", - "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==" - }, "node_modules/speakingurl": { "version": "14.0.1", "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", @@ -9401,29 +11409,11 @@ "node": ">=0.10.0" } }, - "node_modules/splitpanes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/splitpanes/-/splitpanes-3.1.5.tgz", - "integrity": "sha512-r3Mq2ITFQ5a2VXLOy4/Sb2Ptp7OfEO8YIbhVJqJXoFc9hc5nTXXkCvtVDjIGbvC0vdE7tse+xTM9BMjsszP6bw==", - "funding": { - "url": "https://github.com/sponsors/antoniandre" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" - }, - "node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true }, "node_modules/standard-as-callback": { "version": "2.1.0", @@ -9439,17 +11429,33 @@ } }, "node_modules/std-env": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", - "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==" + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", + "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==" + }, + "node_modules/stream-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "optional": true, + "dependencies": { + "stubs": "^3.0.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "optional": true }, "node_modules/streamx": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz", - "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==", + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.0.tgz", + "integrity": "sha512-Qz6MsDZXJ6ur9u+b+4xCG18TluU7PGlRfXVAAjNiGsFrBUt/ioyLkxbFaKJygoPs+/kW4VyBj0bSj89Qu0IGyg==", "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" }, "optionalDependencies": { "bare-events": "^2.2.0" @@ -9524,54 +11530,173 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "devOptional": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/strip-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.0.tgz", - "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.1.tgz", + "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==", "dependencies": { - "js-tokens": "^9.0.0" + "js-tokens": "^9.0.1" }, "funding": { "url": "https://github.com/sponsors/antfu" } }, "node_modules/strip-literal/node_modules/js-tokens": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.0.tgz", - "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==" + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==" + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "optional": true + }, + "node_modules/stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==", + "optional": true }, "node_modules/stylehacks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", - "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.4.tgz", + "integrity": "sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww==", "dependencies": { - "browserslist": "^4.23.0", - "postcss-selector-parser": "^6.0.16" + "browserslist": "^4.23.3", + "postcss-selector-parser": "^6.1.2" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" }, "engines": { - "node": ">=4" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/supports-color": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9617,10 +11742,156 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tabbable": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" + "node_modules/tailwind-config-viewer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/tailwind-config-viewer/-/tailwind-config-viewer-2.0.4.tgz", + "integrity": "sha512-icvcmdMmt9dphvas8wL40qttrHwAnW3QEN4ExJ2zICjwRsPj7gowd1cOceaWG3IfTuM/cTNGQcx+bsjMtmV+cw==", + "dev": true, + "dependencies": { + "@koa/router": "^12.0.1", + "commander": "^6.0.0", + "fs-extra": "^9.0.1", + "koa": "^2.14.2", + "koa-static": "^5.0.0", + "open": "^7.0.4", + "portfinder": "^1.0.26", + "replace-in-file": "^6.1.0" + }, + "bin": { + "tailwind-config-viewer": "cli/index.js", + "tailwindcss-config-viewer": "cli/index.js" + }, + "engines": { + "node": ">=13" + }, + "peerDependencies": { + "tailwindcss": "1 || 2 || 2.0.1-compat || 3" + } + }, + "node_modules/tailwind-config-viewer/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tailwind-config-viewer/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tailwind-config-viewer/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tailwind-config-viewer/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tailwind-config-viewer/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.16", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.16.tgz", + "integrity": "sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tailwindcss/node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } }, "node_modules/tapable": { "version": "2.2.1", @@ -9656,41 +11927,40 @@ "streamx": "^2.15.0" } }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/teeny-request": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-9.0.0.tgz", + "integrity": "sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==", + "optional": true, "dependencies": { - "yallist": "^4.0.0" + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.9", + "stream-events": "^1.0.5", + "uuid": "^9.0.0" }, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "engines": { - "node": ">=8" + "node_modules/teeny-request/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/terser": { "version": "5.31.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", @@ -9713,519 +11983,215 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + "node_modules/text-decoder": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.1.tgz", + "integrity": "sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==" }, - "node_modules/tinycolor": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tinycolor/-/tinycolor-0.0.1.tgz", - "integrity": "sha512-+CorETse1kl98xg0WAzii8DTT4ABF4R3nquhrkIbVGcw1T8JYs5Gfx9xEfGINPUZGDj9C4BmOtuKeaTtuuRolg==", - "engines": { - "node": ">=0.4.0" + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" } }, - "node_modules/tinycolor2": { + "node_modules/thenify-all": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", - "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, "dependencies": { - "is-number": "^7.0.0" + "thenify": ">= 3.1.0 < 4" }, "engines": { - "node": ">=8.0" + "node": ">=0.8" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "engines": { - "node": ">=6" - } + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==" }, - "node_modules/tsx": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.1.tgz", - "integrity": "sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==", - "dev": true, + "node_modules/tinyglobby": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.10.tgz", + "integrity": "sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==", "dependencies": { - "esbuild": "~0.23.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" + "fdir": "^6.4.2", + "picomatch": "^4.0.2" }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", - "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/android-arm": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", - "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/android-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", - "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/android-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", - "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", - "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/darwin-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", - "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", - "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", - "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-arm": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", - "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", - "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-ia32": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", - "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-loong64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", - "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", - "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=12.0.0" } }, - "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", - "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz", + "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", - "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "engines": { - "node": ">=18" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/tsx/node_modules/@esbuild/linux-s390x": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", - "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", - "cpu": [ - "s390x" - ], + "node_modules/tinypool": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": "^18.0.0 || >=20.0.0" } }, - "node_modules/tsx/node_modules/@esbuild/linux-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", - "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", - "cpu": [ - "x64" - ], + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=14.0.0" } }, - "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", - "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", - "cpu": [ - "x64" - ], + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], "engines": { - "node": ">=18" + "node": ">=14.0.0" } }, - "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", - "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, "engines": { - "node": ">=18" + "node": ">=8.0" } }, - "node_modules/tsx/node_modules/@esbuild/sunos-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", - "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "engines": { - "node": ">=18" + "node": ">=0.6" } }, - "node_modules/tsx/node_modules/@esbuild/win32-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", - "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/tsx/node_modules/@esbuild/win32-ia32": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", - "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", - "cpu": [ - "ia32" - ], + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/ts-api-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", + "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", "dev": true, - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=18" + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" } }, - "node_modules/tsx/node_modules/@esbuild/win32-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", - "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", - "cpu": [ - "x64" - ], + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", "dev": true, - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=18" + "node": ">=0.6.x" } }, - "node_modules/tsx/node_modules/esbuild": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", - "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.23.1", - "@esbuild/android-arm": "0.23.1", - "@esbuild/android-arm64": "0.23.1", - "@esbuild/android-x64": "0.23.1", - "@esbuild/darwin-arm64": "0.23.1", - "@esbuild/darwin-x64": "0.23.1", - "@esbuild/freebsd-arm64": "0.23.1", - "@esbuild/freebsd-x64": "0.23.1", - "@esbuild/linux-arm": "0.23.1", - "@esbuild/linux-arm64": "0.23.1", - "@esbuild/linux-ia32": "0.23.1", - "@esbuild/linux-loong64": "0.23.1", - "@esbuild/linux-mips64el": "0.23.1", - "@esbuild/linux-ppc64": "0.23.1", - "@esbuild/linux-riscv64": "0.23.1", - "@esbuild/linux-s390x": "0.23.1", - "@esbuild/linux-x64": "0.23.1", - "@esbuild/netbsd-x64": "0.23.1", - "@esbuild/openbsd-arm64": "0.23.1", - "@esbuild/openbsd-x64": "0.23.1", - "@esbuild/sunos-x64": "0.23.1", - "@esbuild/win32-arm64": "0.23.1", - "@esbuild/win32-ia32": "0.23.1", - "@esbuild/win32-x64": "0.23.1" - } - }, - "node_modules/tuf-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", - "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "devOptional": true, "dependencies": { - "@tufjs/models": "2.0.1", - "debug": "^4.3.4", - "make-fetch-happen": "^13.0.1" + "prelude-ls": "^1.2.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 0.8.0" } }, "node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.0.tgz", + "integrity": "sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==", "engines": { - "node": ">=14.16" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/typescript": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", - "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", - "devOptional": true, + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -10234,72 +12200,81 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.21.0.tgz", + "integrity": "sha512-txEKYY4XMKwPXxNkN8+AxAdX6iIJAPiJbHE/FpQccs/sxw8Lf26kqwC3cn0xkHlW8kEbLhkhCsjWuMveaY9Rxw==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.21.0", + "@typescript-eslint/parser": "8.21.0", + "@typescript-eslint/utils": "8.21.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, "node_modules/ufo": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", - "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==" + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==" }, "node_modules/ultrahtml": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.5.3.tgz", "integrity": "sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==" }, - "node_modules/unconfig": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/unconfig/-/unconfig-0.3.13.tgz", - "integrity": "sha512-N9Ph5NC4+sqtcOjPfHrRcHekBCadCXWTBzp2VYYbySOHW0PfD9XLCeXshTXjkPYwLrBr9AtSeU0CZmkYECJhng==", - "peer": true, - "dependencies": { - "@antfu/utils": "^0.7.7", - "defu": "^6.1.4", - "jiti": "^1.21.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/uncrypto": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==" }, "node_modules/unctx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unctx/-/unctx-2.3.1.tgz", - "integrity": "sha512-PhKke8ZYauiqh3FEMVNm7ljvzQiph0Mt3GBRve03IJm7ukfaON2OBK795tLwhbyfzknuRRkW0+Ze+CQUmzOZ+A==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/unctx/-/unctx-2.4.1.tgz", + "integrity": "sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg==", "dependencies": { - "acorn": "^8.8.2", + "acorn": "^8.14.0", "estree-walker": "^3.0.3", - "magic-string": "^0.30.0", - "unplugin": "^1.3.1" + "magic-string": "^0.30.17", + "unplugin": "^2.1.0" } }, - "node_modules/undici": { - "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "node_modules/unctx/node_modules/unplugin": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.1.2.tgz", + "integrity": "sha512-Q3LU0e4zxKfRko1wMV2HmP8lB9KWislY7hxXpxd+lGx0PRInE4vhMBVEZwpdVYHvtqzhSrzuIfErsob6bQfCzw==", "dependencies": { - "@fastify/busboy": "^2.0.0" + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" }, "engines": { - "node": ">=14.0" + "node": ">=18.12.0" } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" }, "node_modules/unenv": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/unenv/-/unenv-1.9.0.tgz", - "integrity": "sha512-QKnFNznRxmbOF1hDgzpqrlIf6NC5sbZ2OJ+5Wl3OX8uM+LUJXbj4TXvLJCtwbPTmbMHCLIz6JLKNinNsMShK9g==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-1.10.0.tgz", + "integrity": "sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==", "dependencies": { "consola": "^3.2.3", - "defu": "^6.1.3", + "defu": "^6.1.4", "mime": "^3.0.0", - "node-fetch-native": "^1.6.1", - "pathe": "^1.1.1" + "node-fetch-native": "^1.6.4", + "pathe": "^1.1.2" } }, "node_modules/unenv/node_modules/mime": { @@ -10314,13 +12289,13 @@ } }, "node_modules/unhead": { - "version": "1.9.10", - "resolved": "https://registry.npmjs.org/unhead/-/unhead-1.9.10.tgz", - "integrity": "sha512-Y3w+j1x1YFig2YuE+W2sER+SciRR7MQktYRHNqvZJ0iUNCCJTS8Z/SdSMUEeuFV28daXeASlR3fy7Ry3O2indg==", + "version": "1.11.18", + "resolved": "https://registry.npmjs.org/unhead/-/unhead-1.11.18.tgz", + "integrity": "sha512-TWgGUoZMpYe2yJwY6jZ0/9kpQT18ygr2h5lI6cUXdfD9UzDc0ytM9jGaleSYkj9guJWXkk7izYBnzJvxl8mRvQ==", "dependencies": { - "@unhead/dom": "1.9.10", - "@unhead/schema": "1.9.10", - "@unhead/shared": "1.9.10", + "@unhead/dom": "1.11.18", + "@unhead/schema": "1.11.18", + "@unhead/shared": "1.11.18", "hookable": "^5.5.3" }, "funding": { @@ -10339,56 +12314,35 @@ } }, "node_modules/unimport": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.7.1.tgz", - "integrity": "sha512-V9HpXYfsZye5bPPYUgs0Otn3ODS1mDUciaBlXljI4C2fTwfFpvFZRywmlOu943puN9sncxROMZhsZCjNXEpzEQ==", + "version": "3.14.3", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.14.3.tgz", + "integrity": "sha512-yEJps4GW7jBdoQlxEV0ElBCJsJmH8FdZtk4oog0y++8hgLh0dGnDpE4oaTc0Lfx4N5rRJiGFUWHrBqC8CyUBmQ==", "dependencies": { - "@rollup/pluginutils": "^5.1.0", - "acorn": "^8.11.2", + "@rollup/pluginutils": "^5.1.3", + "acorn": "^8.14.0", "escape-string-regexp": "^5.0.0", "estree-walker": "^3.0.3", - "fast-glob": "^3.3.2", - "local-pkg": "^0.5.0", - "magic-string": "^0.30.5", - "mlly": "^1.4.2", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "scule": "^1.1.1", - "strip-literal": "^1.3.0", - "unplugin": "^1.5.1" - } - }, - "node_modules/unimport/node_modules/strip-literal": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", - "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", - "dependencies": { - "acorn": "^8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "local-pkg": "^0.5.1", + "magic-string": "^0.30.14", + "mlly": "^1.7.3", + "pathe": "^1.1.2", + "picomatch": "^4.0.2", + "pkg-types": "^1.2.1", + "scule": "^1.3.0", + "strip-literal": "^2.1.1", + "tinyglobby": "^0.2.10", + "unplugin": "^1.16.0" } }, - "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dependencies": { - "unique-slug": "^4.0.0" - }, + "node_modules/unimport/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dependencies": { - "imurmurhash": "^0.1.4" + "node": ">=12" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/universalify": { @@ -10399,87 +12353,40 @@ "node": ">= 10.0.0" } }, - "node_modules/unocss": { - "version": "0.60.3", - "resolved": "https://registry.npmjs.org/unocss/-/unocss-0.60.3.tgz", - "integrity": "sha512-pUBbpgGRKCa6oB/LrGEFBWP2/2E1ZOY8XO7aVJKo2x10rqLS8tGykn1VoBUgbGJsv/8W8tskTVz+RFbCyKP+kA==", - "peer": true, - "dependencies": { - "@unocss/astro": "0.60.3", - "@unocss/cli": "0.60.3", - "@unocss/core": "0.60.3", - "@unocss/extractor-arbitrary-variants": "0.60.3", - "@unocss/postcss": "0.60.3", - "@unocss/preset-attributify": "0.60.3", - "@unocss/preset-icons": "0.60.3", - "@unocss/preset-mini": "0.60.3", - "@unocss/preset-tagify": "0.60.3", - "@unocss/preset-typography": "0.60.3", - "@unocss/preset-uno": "0.60.3", - "@unocss/preset-web-fonts": "0.60.3", - "@unocss/preset-wind": "0.60.3", - "@unocss/reset": "0.60.3", - "@unocss/transformer-attributify-jsx": "0.60.3", - "@unocss/transformer-attributify-jsx-babel": "0.60.3", - "@unocss/transformer-compile-class": "0.60.3", - "@unocss/transformer-directives": "0.60.3", - "@unocss/transformer-variant-group": "0.60.3", - "@unocss/vite": "0.60.3" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@unocss/webpack": "0.60.3", - "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0" - }, - "peerDependenciesMeta": { - "@unocss/webpack": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, "node_modules/unplugin": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.10.1.tgz", - "integrity": "sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.0.tgz", + "integrity": "sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ==", "dependencies": { - "acorn": "^8.11.3", - "chokidar": "^3.6.0", - "webpack-sources": "^3.2.3", - "webpack-virtual-modules": "^0.6.1" + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/unplugin-vue-router": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/unplugin-vue-router/-/unplugin-vue-router-0.7.0.tgz", - "integrity": "sha512-ddRreGq0t5vlSB7OMy4e4cfU1w2AwBQCwmvW3oP/0IHQiokzbx4hd3TpwBu3eIAFVuhX2cwNQwp1U32UybTVCw==", - "dependencies": { - "@babel/types": "^7.22.19", - "@rollup/pluginutils": "^5.0.4", - "@vue-macros/common": "^1.8.0", - "ast-walker-scope": "^0.5.0", - "chokidar": "^3.5.3", - "fast-glob": "^3.3.1", + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/unplugin-vue-router/-/unplugin-vue-router-0.11.2.tgz", + "integrity": "sha512-X8BbQ3BNnMqaCYeMj80jtz5jC4AB0jcpdmECIYey9qKm6jy/upaPZ/WzfuT+iTGRiQAY4WemHueXxuzH127oOg==", + "dependencies": { + "@babel/types": "^7.26.5", + "@rollup/pluginutils": "^5.1.4", + "@vue-macros/common": "^1.16.1", + "ast-walker-scope": "^0.6.2", + "chokidar": "^3.6.0", + "fast-glob": "^3.3.3", "json5": "^2.2.3", - "local-pkg": "^0.4.3", - "mlly": "^1.4.2", - "pathe": "^1.1.1", - "scule": "^1.0.0", - "unplugin": "^1.5.0", - "yaml": "^2.3.2" + "local-pkg": "^1.0.0", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "pathe": "^2.0.2", + "scule": "^1.3.0", + "unplugin": "2.1.2", + "yaml": "^2.7.0" }, "peerDependencies": { - "vue-router": "^4.1.0" + "vue-router": "^4.4.0" }, "peerDependenciesMeta": { "vue-router": { @@ -10488,9 +12395,13 @@ } }, "node_modules/unplugin-vue-router/node_modules/local-pkg": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.0.0.tgz", + "integrity": "sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==", + "dependencies": { + "mlly": "^1.7.3", + "pkg-types": "^1.3.0" + }, "engines": { "node": ">=14" }, @@ -10498,36 +12409,56 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/unplugin-vue-router/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + }, + "node_modules/unplugin-vue-router/node_modules/unplugin": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.1.2.tgz", + "integrity": "sha512-Q3LU0e4zxKfRko1wMV2HmP8lB9KWislY7hxXpxd+lGx0PRInE4vhMBVEZwpdVYHvtqzhSrzuIfErsob6bQfCzw==", + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, "node_modules/unstorage": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.10.2.tgz", - "integrity": "sha512-cULBcwDqrS8UhlIysUJs2Dk0Mmt8h7B0E6mtR+relW9nZvsf/u4SkAYyNliPiPW7XtFNb5u3IUMkxGxFTTRTgQ==", + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.14.4.tgz", + "integrity": "sha512-1SYeamwuYeQJtJ/USE1x4l17LkmQBzg7deBJ+U9qOBoHo15d1cDxG4jM31zKRgF7pG0kirZy4wVMX6WL6Zoscg==", "dependencies": { "anymatch": "^3.1.3", "chokidar": "^3.6.0", "destr": "^2.0.3", - "h3": "^1.11.1", - "listhen": "^1.7.2", - "lru-cache": "^10.2.0", - "mri": "^1.2.0", - "node-fetch-native": "^1.6.2", - "ofetch": "^1.3.3", - "ufo": "^1.4.0" + "h3": "^1.13.0", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.4", + "ofetch": "^1.4.1", + "ufo": "^1.5.4" }, "peerDependencies": { - "@azure/app-configuration": "^1.5.0", - "@azure/cosmos": "^4.0.0", - "@azure/data-tables": "^13.2.2", - "@azure/identity": "^4.0.1", - "@azure/keyvault-secrets": "^4.8.0", - "@azure/storage-blob": "^12.17.0", - "@capacitor/preferences": "^5.0.7", - "@netlify/blobs": "^6.5.0 || ^7.0.0", - "@planetscale/database": "^1.16.0", - "@upstash/redis": "^1.28.4", + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.5.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3", + "@deno/kv": ">=0.8.4", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.0", "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", "idb-keyval": "^6.2.1", - "ioredis": "^5.3.2" + "ioredis": "^5.4.2", + "uploadthing": "^7.4.1" }, "peerDependenciesMeta": { "@azure/app-configuration": { @@ -10551,6 +12482,9 @@ "@capacitor/preferences": { "optional": true }, + "@deno/kv": { + "optional": true + }, "@netlify/blobs": { "optional": true }, @@ -10560,24 +12494,33 @@ "@upstash/redis": { "optional": true }, + "@vercel/blob": { + "optional": true + }, "@vercel/kv": { "optional": true }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, "idb-keyval": { "optional": true }, "ioredis": { "optional": true + }, + "uploadthing": { + "optional": true } } }, "node_modules/unstorage/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "node_modules/untun": { "version": "0.1.3", @@ -10593,17 +12536,18 @@ } }, "node_modules/untyped": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/untyped/-/untyped-1.4.2.tgz", - "integrity": "sha512-nC5q0DnPEPVURPhfPQLahhSTnemVtPzdx7ofiRxXpOB2SYnb3MfdU3DVGyJdS8Lx+tBWeAePO8BfU/3EgksM7Q==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/untyped/-/untyped-1.5.2.tgz", + "integrity": "sha512-eL/8PlhLcMmlMDtNPKhyyz9kEBDS3Uk4yMu/ewlkT2WFbtzScjHWPJLdQLmaGPUKjXzwe9MumOtOgc4Fro96Kg==", "dependencies": { - "@babel/core": "^7.23.7", - "@babel/standalone": "^7.23.8", - "@babel/types": "^7.23.6", + "@babel/core": "^7.26.0", + "@babel/standalone": "^7.26.4", + "@babel/types": "^7.26.3", + "citty": "^0.1.6", "defu": "^6.1.4", - "jiti": "^1.21.0", - "mri": "^1.2.0", - "scule": "^1.2.0" + "jiti": "^2.4.1", + "knitwork": "^1.2.0", + "scule": "^1.3.0" }, "bin": { "untyped": "dist/cli.mjs" @@ -10623,9 +12567,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", - "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "funding": [ { "type": "opencollective", @@ -10641,8 +12585,8 @@ } ], "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -10656,6 +12600,20 @@ "resolved": "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz", "integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==" }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "devOptional": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js-replace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uri-js-replace/-/uri-js-replace-1.0.1.tgz", + "integrity": "sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==" + }, "node_modules/urlpattern-polyfill": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz", @@ -10666,37 +12624,41 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "node_modules/uuid": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz", + "integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/esm/bin/uuid" } }, - "node_modules/validate-npm-package-name": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 0.8" } }, "node_modules/vite": { - "version": "5.2.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", - "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==", + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.11.tgz", + "integrity": "sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==", "dependencies": { - "esbuild": "^0.20.1", - "postcss": "^8.4.38", - "rollup": "^4.13.0" + "esbuild": "^0.24.2", + "postcss": "^8.4.49", + "rollup": "^4.23.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -10705,18 +12667,25 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", + "sass-embedded": "*", "stylus": "*", "sugarss": "*", - "terser": "^5.4.0" + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, + "jiti": { + "optional": true + }, "less": { "optional": true }, @@ -10726,6 +12695,9 @@ "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, @@ -10734,45 +12706,56 @@ }, "terser": { "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true } } }, "node_modules/vite-hot-client": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-0.2.3.tgz", - "integrity": "sha512-rOGAV7rUlUHX89fP2p2v0A2WWvV3QMX2UYq0fRqsWSvFvev4atHWqjwGoKaZT1VTKyLGk533ecu3eyd0o59CAg==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-0.2.4.tgz", + "integrity": "sha512-a1nzURqO7DDmnXqabFOliz908FRmIppkBKsJthS8rbe8hBEXwEwe4C3Pp33Z1JoFCYfVL4kTOMLKk0ZZxREIeA==", "funding": { "url": "https://github.com/sponsors/antfu" }, "peerDependencies": { - "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0" + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0" } }, "node_modules/vite-node": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.0.tgz", - "integrity": "sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.4.tgz", + "integrity": "sha512-7JZKEzcYV2Nx3u6rlvN8qdo3QV7Fxyt6hx+CCKz9fbWxdX5IvUOmTWEAxMrWxaiSf7CKGLJQ5rFu8prb/jBjOA==", "dependencies": { "cac": "^6.7.14", - "debug": "^4.3.4", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "vite": "^5.0.0" + "debug": "^4.4.0", + "es-module-lexer": "^1.6.0", + "pathe": "^2.0.2", + "vite": "^5.0.0 || ^6.0.0" }, "bin": { "vite-node": "vite-node.mjs" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, + "node_modules/vite-node/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + }, "node_modules/vite-plugin-checker": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.6.4.tgz", - "integrity": "sha512-2zKHH5oxr+ye43nReRbC2fny1nyARwhxdm0uNYp/ERy4YvU9iZpNOsueoi/luXw5gnpqRSvjcEPxXbS153O2wA==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.8.0.tgz", + "integrity": "sha512-UA5uzOGm97UvZRTdZHiQVYFnd86AVn8EVaD4L3PoVzxH+IZSfaAw14WGFwX9QS23UW3lV/5bVKZn6l0w+q9P0g==", "dependencies": { "@babel/code-frame": "^7.12.13", "ansi-escapes": "^4.3.0", @@ -10782,7 +12765,6 @@ "fast-glob": "^3.2.7", "fs-extra": "^11.1.0", "npm-run-path": "^4.0.1", - "semver": "^7.5.0", "strip-ansi": "^6.0.0", "tiny-invariant": "^1.1.0", "vscode-languageclient": "^7.0.0", @@ -10794,6 +12776,7 @@ "node": ">=14.16" }, "peerDependencies": { + "@biomejs/biome": ">=1.7", "eslint": ">=7", "meow": "^9.0.0", "optionator": "^0.9.1", @@ -10802,9 +12785,12 @@ "vite": ">=2.0.0", "vls": "*", "vti": "*", - "vue-tsc": ">=1.3.9" + "vue-tsc": "~2.1.6" }, "peerDependenciesMeta": { + "@biomejs/biome": { + "optional": true + }, "eslint": { "optional": true }, @@ -10827,54 +12813,9 @@ "optional": true }, "vue-tsc": { - "optional": true - } - } - }, - "node_modules/vite-plugin-checker/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/vite-plugin-checker/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/vite-plugin-checker/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/vite-plugin-checker/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "optional": true + } + } }, "node_modules/vite-plugin-checker/node_modules/commander": { "version": "8.3.0", @@ -10884,14 +12825,6 @@ "node": ">= 12" } }, - "node_modules/vite-plugin-checker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/vite-plugin-checker/node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -10903,31 +12836,20 @@ "node": ">=8" } }, - "node_modules/vite-plugin-checker/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/vite-plugin-inspect": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.8.4.tgz", - "integrity": "sha512-G0N3rjfw+AiiwnGw50KlObIHYWfulVwaCBUBLh2xTW9G1eM9ocE5olXkEYUbwyTmX+azM8duubi+9w5awdCz+g==", - "dependencies": { - "@antfu/utils": "^0.7.7", - "@rollup/pluginutils": "^5.1.0", - "debug": "^4.3.4", - "error-stack-parser-es": "^0.1.1", + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.8.9.tgz", + "integrity": "sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==", + "dependencies": { + "@antfu/utils": "^0.7.10", + "@rollup/pluginutils": "^5.1.3", + "debug": "^4.3.7", + "error-stack-parser-es": "^0.1.5", "fs-extra": "^11.2.0", "open": "^10.1.0", "perfect-debounce": "^1.0.0", - "picocolors": "^1.0.0", - "sirv": "^2.0.4" + "picocolors": "^1.1.1", + "sirv": "^3.0.0" }, "engines": { "node": ">=14" @@ -10936,7 +12858,7 @@ "url": "https://github.com/sponsors/antfu" }, "peerDependencies": { - "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0" + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1" }, "peerDependenciesMeta": { "@nuxt/kit": { @@ -10973,9 +12895,9 @@ } }, "node_modules/vite-plugin-vue-inspector": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.1.0.tgz", - "integrity": "sha512-yIw9dvBz9nQW7DPfbJtUVW6JTnt67hqTPRnTwT2CZWMqDvISyQHRjgKl32nlMh1DRH+92533Sv6t59pWMLUCWA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.1.tgz", + "integrity": "sha512-cBk172kZKTdvGpJuzCCLg8lJ909wopwsu3Ve9FsL1XsnLBiRT9U3MePcqrgGHgCX2ZgkqZmAGR8taxw+TV6s7A==", "dependencies": { "@babel/core": "^7.23.0", "@babel/plugin-proposal-decorators": "^7.23.0", @@ -10988,9 +12910,93 @@ "magic-string": "^0.30.4" }, "peerDependencies": { - "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0" + "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0" + } + }, + "node_modules/vitest": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.4.tgz", + "integrity": "sha512-6XG8oTKy2gnJIFTHP6LD7ExFeNLxiTkK3CfMvT7IfR8IN+BYICCf0lXUQmX7i7JoxUP8QmeP4mTnWXgflu4yjw==", + "dev": true, + "dependencies": { + "@vitest/expect": "3.0.4", + "@vitest/mocker": "3.0.4", + "@vitest/pretty-format": "^3.0.4", + "@vitest/runner": "3.0.4", + "@vitest/snapshot": "3.0.4", + "@vitest/spy": "3.0.4", + "@vitest/utils": "3.0.4", + "chai": "^5.1.2", + "debug": "^4.4.0", + "expect-type": "^1.1.0", + "magic-string": "^0.30.17", + "pathe": "^2.0.2", + "std-env": "^3.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinypool": "^1.0.2", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0", + "vite-node": "3.0.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.0.4", + "@vitest/ui": "3.0.4", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } } }, + "node_modules/vitest-environment-nuxt": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vitest-environment-nuxt/-/vitest-environment-nuxt-1.0.1.tgz", + "integrity": "sha512-eBCwtIQriXW5/M49FjqNKfnlJYlG2LWMSNFsRVKomc8CaMqmhQPBS5LZ9DlgYL9T8xIVsiA6RZn2lk7vxov3Ow==", + "dev": true, + "dependencies": { + "@nuxt/test-utils": ">=3.13.1" + } + }, + "node_modules/vitest/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==", + "dev": true + }, "node_modules/vscode-jsonrpc": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", @@ -11012,26 +13018,6 @@ "vscode": "^1.52.0" } }, - "node_modules/vscode-languageclient/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/vscode-languageclient/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/vscode-languageserver": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", @@ -11053,9 +13039,9 @@ } }, "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", - "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==" + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==" }, "node_modules/vscode-languageserver-types": { "version": "3.16.0", @@ -11068,15 +13054,15 @@ "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==" }, "node_modules/vue": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.27.tgz", - "integrity": "sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", "dependencies": { - "@vue/compiler-dom": "3.4.27", - "@vue/compiler-sfc": "3.4.27", - "@vue/runtime-dom": "3.4.27", - "@vue/server-renderer": "3.4.27", - "@vue/shared": "3.4.27" + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" }, "peerDependencies": { "typescript": "*" @@ -11088,11 +13074,42 @@ } }, "node_modules/vue-bundle-renderer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vue-bundle-renderer/-/vue-bundle-renderer-2.1.0.tgz", - "integrity": "sha512-uZ+5ZJdZ/b43gMblWtcpikY6spJd0nERaM/1RtgioXNfWFbjKlUwrS8HlrddN6T2xtptmOouWclxLUkpgcVX3Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/vue-bundle-renderer/-/vue-bundle-renderer-2.1.1.tgz", + "integrity": "sha512-+qALLI5cQncuetYOXp4yScwYvqh8c6SMXee3B+M7oTZxOgtESP0l4j/fXdEJoZ+EdMxkGWIj+aSEyjXkOdmd7g==", "dependencies": { - "ufo": "^1.5.3" + "ufo": "^1.5.4" + } + }, + "node_modules/vue-component-type-helpers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.2.0.tgz", + "integrity": "sha512-cYrAnv2me7bPDcg9kIcGwjJiSB6Qyi08+jLDo9yuvoFQjzHiPTzML7RnkJB1+3P6KMsX/KbCD4QE3Tv/knEllw==", + "dev": true + }, + "node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } } }, "node_modules/vue-devtools-stub": { @@ -11100,71 +13117,128 @@ "resolved": "https://registry.npmjs.org/vue-devtools-stub/-/vue-devtools-stub-0.1.0.tgz", "integrity": "sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==" }, - "node_modules/vue-observe-visibility": { - "version": "2.0.0-alpha.1", - "resolved": "https://registry.npmjs.org/vue-observe-visibility/-/vue-observe-visibility-2.0.0-alpha.1.tgz", - "integrity": "sha512-flFbp/gs9pZniXR6fans8smv1kDScJ8RS7rEpMjhVabiKeq7Qz3D9+eGsypncjfIyyU84saU88XZ0zjbD6Gq/g==", + "node_modules/vue-eslint-parser": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, "peerDependencies": { - "vue": "^3.0.0" + "eslint": ">=6.0.0" } }, - "node_modules/vue-resize": { - "version": "2.0.0-alpha.1", - "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-2.0.0-alpha.1.tgz", - "integrity": "sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==", - "peerDependencies": { - "vue": "^3.0.0" + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/vue-router": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.3.2.tgz", - "integrity": "sha512-hKQJ1vDAZ5LVkKEnHhmm1f9pMiWIBNGF5AwU67PdH7TyXCj/a4hTccuUuYCAMgJK6rO/NVYtQIEN3yL8CECa7Q==", - "dependencies": { - "@vue/devtools-api": "^6.5.1" + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/posva" + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, - "peerDependencies": { - "vue": "^3.2.0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/vue-virtual-scroller": { - "version": "2.0.0-beta.8", - "resolved": "https://registry.npmjs.org/vue-virtual-scroller/-/vue-virtual-scroller-2.0.0-beta.8.tgz", - "integrity": "sha512-b8/f5NQ5nIEBRTNi6GcPItE4s7kxNHw2AIHLtDp+2QvqdTjVN0FgONwX9cr53jWRgnu+HRLPaWDOR2JPI5MTfQ==", + "node_modules/vue-router": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.0.tgz", + "integrity": "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==", "dependencies": { - "mitt": "^2.1.0", - "vue-observe-visibility": "^2.0.0-alpha.1", - "vue-resize": "^2.0.0-alpha.1" + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" }, "peerDependencies": { "vue": "^3.2.0" } }, - "node_modules/vue-virtual-scroller/node_modules/mitt": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-2.1.0.tgz", - "integrity": "sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg==" - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==" + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, "engines": { - "node": ">=10.13.0" + "node": ">=0.8.0" } }, - "node_modules/webpack-virtual-modules": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz", - "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==" + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } }, "node_modules/whatwg-url": { "version": "5.0.0", @@ -11189,6 +13263,22 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -11197,6 +13287,15 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -11230,75 +13329,15 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", - "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "engines": { "node": ">=10.0.0" }, @@ -11315,6 +13354,15 @@ } } }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -11329,9 +13377,9 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yaml": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", - "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", "bin": { "yaml": "bin.mjs" }, @@ -11339,6 +13387,11 @@ "node": ">= 14" } }, + "node_modules/yaml-ast-parser": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==" + }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", @@ -11364,11 +13417,20 @@ "node": ">=12" } }, + "node_modules/ylru": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.4.0.tgz", + "integrity": "sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "peer": true, + "devOptional": true, "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index 72c7f57..a43cdae 100644 --- a/package.json +++ b/package.json @@ -3,29 +3,48 @@ "private": true, "type": "module", "scripts": { - "generate-image-paths": "npx tsx getImagePaths.ts", - "build": "npm run generate-image-paths && nuxt build", - "dev": "npm run generate-image-paths && nuxt dev", + "build": "nuxt build", + "dev": "nuxt dev", + "test": "vitest", + "lint": "eslint", "generate": "nuxt generate", "preview": "nuxt preview", "postinstall": "nuxt prepare" }, "dependencies": { - "@ckpack/vue-color": "^1.5.0", - "@nuxtjs/meta": "^3.0.0-beta.16", - "@pinia/nuxt": "^0.5.1", - "lodash": "^4.17.21", - "nuxt": "^3.11.2", - "pinia": "^2.1.7", - "sass": "^1.77.2", - "tinycolor": "^0.0.1", - "tinycolor2": "^1.6.0", - "vue": "^3.4.27", - "vue-router": "^4.3.2" + "@formkit/auto-animate": "^0.8.2", + "@pinia/nuxt": "^0.7.0", + "firebase-admin": "^13.0.1", + "flowbite": "^2.5.2", + "flyonui": "^1.1.0", + "nuxt": "^3.13.0", + "obscenity": "^0.4.1", + "pinia": "^2.2.6", + "quill": "^2.0.3", + "sass": "^1.82.0", + "vue": "latest", + "vue-router": "latest" }, "devDependencies": { - "@types/lodash": "^4.17.7", - "@types/tinycolor2": "^1.4.6", - "typescript": "^5.6.2" + "@eslint/js": "^9.19.0", + "@nuxt/test-utils": "^3.15.4", + "@nuxtjs/tailwindcss": "^6.12.2", + "@pinia/testing": "^0.1.7", + "@types/quill": "^2.0.14", + "@vue/test-utils": "^2.4.6", + "daisyui": "^4.12.14", + "eslint": "^9.19.0", + "eslint-plugin-vue": "^9.32.0", + "globals": "^15.14.0", + "happy-dom": "^16.7.2", + "prettier-plugin-tailwindcss": "^0.6.9", + "tailwindcss": "^3.4.16", + "typescript": "^5.7.3", + "typescript-eslint": "^8.21.0", + "vitest": "^3.0.4", + "vue-eslint-parser": "^9.4.3" + }, + "overrides": { + "vue": "latest" } } diff --git a/pages/Changelog.vue b/pages/Changelog.vue deleted file mode 100644 index cabc72b..0000000 --- a/pages/Changelog.vue +++ /dev/null @@ -1,82 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/Contributors.vue b/pages/Contributors.vue deleted file mode 100644 index 0813797..0000000 --- a/pages/Contributors.vue +++ /dev/null @@ -1,163 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/[...error].vue b/pages/[...error].vue index ad86e74..ee87729 100644 --- a/pages/[...error].vue +++ b/pages/[...error].vue @@ -1,93 +1,25 @@ - \ No newline at end of file + diff --git a/pages/all-ships.vue b/pages/all-ships.vue new file mode 100644 index 0000000..3c70b6d --- /dev/null +++ b/pages/all-ships.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/pages/home.vue b/pages/home.vue index 80cb9ef..1366746 100644 --- a/pages/home.vue +++ b/pages/home.vue @@ -1,189 +1,94 @@ - + diff --git a/pages/index.vue b/pages/index.vue index 83e42a6..bd69724 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -1,184 +1,11 @@ - \ No newline at end of file + diff --git a/pages/modules/blueprint-tracker.vue b/pages/modules/blueprint-tracker.vue new file mode 100644 index 0000000..1bb08ec --- /dev/null +++ b/pages/modules/blueprint-tracker.vue @@ -0,0 +1,238 @@ + + + + + diff --git a/pages/modules/color-generator.vue b/pages/modules/color-generator.vue deleted file mode 100644 index 568b17d..0000000 --- a/pages/modules/color-generator.vue +++ /dev/null @@ -1,783 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/modules/equipment-encyclopedia.vue b/pages/modules/equipment-encyclopedia.vue deleted file mode 100644 index c5ec96d..0000000 --- a/pages/modules/equipment-encyclopedia.vue +++ /dev/null @@ -1,187 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/modules/fleet-builder.vue b/pages/modules/fleet-builder.vue deleted file mode 100644 index 4bba315..0000000 --- a/pages/modules/fleet-builder.vue +++ /dev/null @@ -1,25 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/modules/mail-editor/edit.vue b/pages/modules/mail-editor/edit.vue new file mode 100644 index 0000000..5241f5e --- /dev/null +++ b/pages/modules/mail-editor/edit.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/pages/modules/mail-editor/index.vue b/pages/modules/mail-editor/index.vue new file mode 100644 index 0000000..d6e1baa --- /dev/null +++ b/pages/modules/mail-editor/index.vue @@ -0,0 +1,15 @@ + + + + + diff --git a/pages/modules/mail-editor/saved.vue b/pages/modules/mail-editor/saved.vue new file mode 100644 index 0000000..0a9407a --- /dev/null +++ b/pages/modules/mail-editor/saved.vue @@ -0,0 +1,124 @@ + + + + + diff --git a/pages/modules/module-library.vue b/pages/modules/module-library.vue index 4c7f500..db09151 100644 --- a/pages/modules/module-library.vue +++ b/pages/modules/module-library.vue @@ -1,310 +1,104 @@ - \ No newline at end of file + diff --git a/pages/modules/research-agreement-helper.vue b/pages/modules/research-agreement-helper.vue index 8f06006..7eb9e8a 100644 --- a/pages/modules/research-agreement-helper.vue +++ b/pages/modules/research-agreement-helper.vue @@ -1,387 +1,182 @@ - - \ No newline at end of file + diff --git a/pages/modules/ship-comparison.vue b/pages/modules/ship-comparison.vue deleted file mode 100644 index 2dee86b..0000000 --- a/pages/modules/ship-comparison.vue +++ /dev/null @@ -1,359 +0,0 @@ - - - - - \ No newline at end of file diff --git a/public/carousel/bpTracker.png b/public/carousel/bpTracker.png new file mode 100644 index 0000000..d03578f Binary files /dev/null and b/public/carousel/bpTracker.png differ diff --git a/public/carousel/mailEditor.png b/public/carousel/mailEditor.png new file mode 100644 index 0000000..3ebffbd Binary files /dev/null and b/public/carousel/mailEditor.png differ diff --git a/public/carousel/moduleLibrary.png b/public/carousel/moduleLibrary.png new file mode 100644 index 0000000..2b0970f Binary files /dev/null and b/public/carousel/moduleLibrary.png differ diff --git a/public/carousel/researchAgreement.png b/public/carousel/researchAgreement.png new file mode 100644 index 0000000..447ecf9 Binary files /dev/null and b/public/carousel/researchAgreement.png differ diff --git a/public/logo/discord.svg b/public/logo/discord.svg new file mode 100644 index 0000000..665dd03 --- /dev/null +++ b/public/logo/discord.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/logo/github.svg b/public/logo/github.svg new file mode 100644 index 0000000..06087bf --- /dev/null +++ b/public/logo/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/logo/gravityAssist.svg b/public/logo/gravityAssist.svg new file mode 100644 index 0000000..13dd9a3 --- /dev/null +++ b/public/logo/gravityAssist.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/logo/logo.png b/public/logo/logo.png new file mode 100644 index 0000000..7c900ba Binary files /dev/null and b/public/logo/logo.png differ diff --git a/public/logo/logo.svg b/public/logo/logo.svg new file mode 100644 index 0000000..93b6e06 --- /dev/null +++ b/public/logo/logo.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/ships/b192newland.png b/public/ships/b192_newland_a.png similarity index 100% rename from public/ships/b192newland.png rename to public/ships/b192_newland_a.png diff --git a/public/ships/sc020.png b/public/ships/balancer_anderson_sc020_a.png similarity index 100% rename from public/ships/sc020.png rename to public/ships/balancer_anderson_sc020_a.png diff --git a/public/ships/bullfrog.png b/public/ships/bullfrog_a.png similarity index 100% rename from public/ships/bullfrog.png rename to public/ships/bullfrog_a.png diff --git a/public/ships/cellularDefender.png b/public/ships/cellular_defender_a.png similarity index 100% rename from public/ships/cellularDefender.png rename to public/ships/cellular_defender_a.png diff --git a/public/ships/classes/auxiliary ship.svg b/public/ships/classes/auxiliary ship.svg new file mode 100644 index 0000000..191ec93 --- /dev/null +++ b/public/ships/classes/auxiliary ship.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/ships/classes/battlecruiser.svg b/public/ships/classes/battlecruiser.svg new file mode 100644 index 0000000..3aea000 --- /dev/null +++ b/public/ships/classes/battlecruiser.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/ships/classes/battleship.svg b/public/ships/classes/battleship.svg new file mode 100644 index 0000000..d9cd75b --- /dev/null +++ b/public/ships/classes/battleship.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/ships/classes/carrier.svg b/public/ships/classes/carrier.svg new file mode 100644 index 0000000..f035338 --- /dev/null +++ b/public/ships/classes/carrier.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/ships/classes/corvette.svg b/public/ships/classes/corvette.svg new file mode 100644 index 0000000..8a9eba6 --- /dev/null +++ b/public/ships/classes/corvette.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/ships/classes/cruiser.svg b/public/ships/classes/cruiser.svg new file mode 100644 index 0000000..5e753b3 --- /dev/null +++ b/public/ships/classes/cruiser.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/ships/classes/destroyer.svg b/public/ships/classes/destroyer.svg new file mode 100644 index 0000000..02ddd91 --- /dev/null +++ b/public/ships/classes/destroyer.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/ships/classes/fighter.svg b/public/ships/classes/fighter.svg new file mode 100644 index 0000000..a2cd05a --- /dev/null +++ b/public/ships/classes/fighter.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/ships/classes/frigate.svg b/public/ships/classes/frigate.svg new file mode 100644 index 0000000..2e50aca --- /dev/null +++ b/public/ships/classes/frigate.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/ships/classes/landing ship.svg b/public/ships/classes/landing ship.svg new file mode 100644 index 0000000..733323b --- /dev/null +++ b/public/ships/classes/landing ship.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/ships/conamaraChaos_a.png b/public/ships/conamara_chaos_a.png similarity index 100% rename from public/ships/conamaraChaos_a.png rename to public/ships/conamara_chaos_a.png diff --git a/public/ships/conamaraChaos_b.png b/public/ships/conamara_chaos_b.png similarity index 100% rename from public/ships/conamaraChaos_b.png rename to public/ships/conamara_chaos_b.png diff --git a/public/ships/constantineTheGreat.png b/public/ships/constantine_the_great_a.png similarity index 100% rename from public/ships/constantineTheGreat.png rename to public/ships/constantine_the_great_a.png diff --git a/public/ships/cv3000.png b/public/ships/cv3000_a.png similarity index 100% rename from public/ships/cv3000.png rename to public/ships/cv3000_a.png diff --git a/public/ships/cvii003.png b/public/ships/cvii003_a.png similarity index 100% rename from public/ships/cvii003.png rename to public/ships/cvii003_a.png diff --git a/public/ships/cvt800.png b/public/ships/cvt800_a.png similarity index 100% rename from public/ships/cvt800.png rename to public/ships/cvt800_a.png diff --git a/public/ships/ediacaran.png b/public/ships/ediacaran_a.png similarity index 100% rename from public/ships/ediacaran.png rename to public/ships/ediacaran_a.png diff --git a/public/ships/eris_a.png b/public/ships/eris_i_a.png similarity index 100% rename from public/ships/eris_a.png rename to public/ships/eris_i_a.png diff --git a/public/ships/eris_b.png b/public/ships/eris_i_b.png similarity index 100% rename from public/ships/eris_b.png rename to public/ships/eris_i_b.png diff --git a/public/ships/eris_c.png b/public/ships/eris_i_c.png similarity index 100% rename from public/ships/eris_c.png rename to public/ships/eris_i_c.png diff --git a/public/ships/eternalHeavens.png b/public/ships/eternal_heavens_a.png similarity index 100% rename from public/ships/eternalHeavens.png rename to public/ships/eternal_heavens_a.png diff --git a/public/ships/eternalStorm.png b/public/ships/eternal_storm_a.png similarity index 100% rename from public/ships/eternalStorm.png rename to public/ships/eternal_storm_a.png diff --git a/public/ships/fsv830.png b/public/ships/fsv830_a.png similarity index 100% rename from public/ships/fsv830.png rename to public/ships/fsv830_a.png diff --git a/public/ships/hayreddinsLoyal.png b/public/ships/hayreddins_loyal_a.png similarity index 100% rename from public/ships/hayreddinsLoyal.png rename to public/ships/hayreddins_loyal_a.png diff --git a/public/ships/inostrancevia_a.png b/public/ships/inostrancevia_a.png new file mode 100644 index 0000000..7961372 Binary files /dev/null and b/public/ships/inostrancevia_a.png differ diff --git a/public/ships/inostrancevia_b.png b/public/ships/inostrancevia_b.png new file mode 100644 index 0000000..85a8706 Binary files /dev/null and b/public/ships/inostrancevia_b.png differ diff --git a/public/ships/inostrancevia_c.png b/public/ships/inostrancevia_c.png new file mode 100644 index 0000000..2150109 Binary files /dev/null and b/public/ships/inostrancevia_c.png differ diff --git a/public/ships/janbiyaAer410.png b/public/ships/janbiya_aer410_a.png similarity index 100% rename from public/ships/janbiyaAer410.png rename to public/ships/janbiya_aer410_a.png diff --git a/public/ships/kccpv_a.png b/public/ships/kccpv20_a.png similarity index 100% rename from public/ships/kccpv_a.png rename to public/ships/kccpv20_a.png diff --git a/public/ships/kccpv_b.png b/public/ships/kccpv20_b.png similarity index 100% rename from public/ships/kccpv_b.png rename to public/ships/kccpv20_b.png diff --git a/public/ships/kccpv_c.png b/public/ships/kccpv20_c.png similarity index 100% rename from public/ships/kccpv_c.png rename to public/ships/kccpv20_c.png diff --git a/public/ships/kccpv_d.png b/public/ships/kccpv20_d.png similarity index 100% rename from public/ships/kccpv_d.png rename to public/ships/kccpv20_d.png diff --git a/public/ships/lightCone_a.png b/public/ships/light_cone_a.png similarity index 100% rename from public/ships/lightCone_a.png rename to public/ships/light_cone_a.png diff --git a/public/ships/lightCone_b.png b/public/ships/light_cone_b.png similarity index 100% rename from public/ships/lightCone_b.png rename to public/ships/light_cone_b.png diff --git a/public/ships/lightCone_c.png b/public/ships/light_cone_c.png similarity index 100% rename from public/ships/lightCone_c.png rename to public/ships/light_cone_c.png diff --git a/public/ships/mareImbrium_a.png b/public/ships/mare_imbrium_a.png similarity index 100% rename from public/ships/mareImbrium_a.png rename to public/ships/mare_imbrium_a.png diff --git a/public/ships/mareImbrium_b.png b/public/ships/mare_imbrium_b.png similarity index 100% rename from public/ships/mareImbrium_b.png rename to public/ships/mare_imbrium_b.png diff --git a/public/ships/mareNubium_a.png b/public/ships/mare_nubium_a.png similarity index 100% rename from public/ships/mareNubium_a.png rename to public/ships/mare_nubium_a.png diff --git a/public/ships/mareNubium_b.png b/public/ships/mare_nubium_b.png similarity index 100% rename from public/ships/mareNubium_b.png rename to public/ships/mare_nubium_b.png diff --git a/public/ships/mareSerenitatis_a.png b/public/ships/mare_serenitatis_a.png similarity index 100% rename from public/ships/mareSerenitatis_a.png rename to public/ships/mare_serenitatis_a.png diff --git a/public/ships/mareSerenitatis_b.png b/public/ships/mare_serenitatis_b.png similarity index 100% rename from public/ships/mareSerenitatis_b.png rename to public/ships/mare_serenitatis_b.png diff --git a/public/ships/mareSerenitatis_c.png b/public/ships/mare_serenitatis_c.png similarity index 100% rename from public/ships/mareSerenitatis_c.png rename to public/ships/mare_serenitatis_c.png diff --git a/public/ships/mareTranquillitatis_a.png b/public/ships/mare_tranquillitatis_a.png similarity index 100% rename from public/ships/mareTranquillitatis_a.png rename to public/ships/mare_tranquillitatis_a.png diff --git a/public/ships/mareTranquillitatis_b.png b/public/ships/mare_tranquillitatis_b.png similarity index 100% rename from public/ships/mareTranquillitatis_b.png rename to public/ships/mare_tranquillitatis_b.png diff --git a/public/ships/mareTranquillitatis_c.png b/public/ships/mare_tranquillitatis_c.png similarity index 100% rename from public/ships/mareTranquillitatis_c.png rename to public/ships/mare_tranquillitatis_c.png diff --git a/public/ships/marshalCrux.png b/public/ships/marshal_crux_a.png similarity index 100% rename from public/ships/marshalCrux.png rename to public/ships/marshal_crux_a.png diff --git a/public/ships/mistral.png b/public/ships/mistral_a.png similarity index 100% rename from public/ships/mistral.png rename to public/ships/mistral_a.png diff --git a/public/ships/nebulaChaser_a.png b/public/ships/nebula_chaser_a.png similarity index 100% rename from public/ships/nebulaChaser_a.png rename to public/ships/nebula_chaser_a.png diff --git a/public/ships/nebulaChaser_b.png b/public/ships/nebula_chaser_b.png similarity index 100% rename from public/ships/nebulaChaser_b.png rename to public/ships/nebula_chaser_b.png diff --git a/public/ships/nomaM470_a.png b/public/ships/noma_m470_a.png similarity index 100% rename from public/ships/nomaM470_a.png rename to public/ships/noma_m470_a.png diff --git a/public/ships/nomaM470_b.png b/public/ships/noma_m470_b.png similarity index 100% rename from public/ships/nomaM470_b.png rename to public/ships/noma_m470_b.png diff --git a/public/ships/nomaM470_c.png b/public/ships/noma_m470_c.png similarity index 100% rename from public/ships/nomaM470_c.png rename to public/ships/noma_m470_c.png diff --git a/public/ships/redbeast713.png b/public/ships/redbeast_713_a.png similarity index 100% rename from public/ships/redbeast713.png rename to public/ships/redbeast_713_a.png diff --git a/public/ships/sandrake.png b/public/ships/sandrake_a.png similarity index 100% rename from public/ships/sandrake.png rename to public/ships/sandrake_a.png diff --git a/public/ships/sc002.png b/public/ships/sc002_a.png similarity index 100% rename from public/ships/sc002.png rename to public/ships/sc002_a.png diff --git a/public/ships/shield_of_plutus_a.png b/public/ships/shield_of_plutus_a.png new file mode 100644 index 0000000..9e2ab53 Binary files /dev/null and b/public/ships/shield_of_plutus_a.png differ diff --git a/public/ships/silentAssassin.png b/public/ships/silent_assassin_a.png similarity index 100% rename from public/ships/silentAssassin.png rename to public/ships/silent_assassin_a.png diff --git a/public/ships/slevy9.png b/public/ships/slevy_9_a.png similarity index 100% rename from public/ships/slevy9.png rename to public/ships/slevy_9_a.png diff --git a/public/ships/solarWhale.png b/public/ships/solar_whale_a.png similarity index 100% rename from public/ships/solarWhale.png rename to public/ships/solar_whale_a.png diff --git a/public/ships/spearOfUranus.png b/public/ships/spear_of_uranus_a.png similarity index 100% rename from public/ships/spearOfUranus.png rename to public/ships/spear_of_uranus_a.png diff --git a/public/ships/sporeA404.png b/public/ships/spore_a404_a.png similarity index 100% rename from public/ships/sporeA404.png rename to public/ships/spore_a404_a.png diff --git a/public/ships/st59.png b/public/ships/st59_a.png similarity index 100% rename from public/ships/st59.png rename to public/ships/st59_a.png diff --git a/public/ships/stingray.png b/public/ships/stingray_a.png similarity index 100% rename from public/ships/stingray.png rename to public/ships/stingray_a.png diff --git a/public/ships/strixA100.png b/public/ships/strix_a100_a.png similarity index 100% rename from public/ships/strixA100.png rename to public/ships/strix_a100_a.png diff --git a/public/ships/tempel_i_a.png b/public/ships/tempel_i_a.png new file mode 100644 index 0000000..17f5a16 Binary files /dev/null and b/public/ships/tempel_i_a.png differ diff --git a/public/ships/tempel_i_b.png b/public/ships/tempel_i_b.png new file mode 100644 index 0000000..6de38f0 Binary files /dev/null and b/public/ships/tempel_i_b.png differ diff --git a/public/ships/thunderboltStar.png b/public/ships/thunderbolt_star_a.png similarity index 100% rename from public/ships/thunderboltStar.png rename to public/ships/thunderbolt_star_a.png diff --git a/public/ships/vitasA021.png b/public/ships/vitas_a021_a.png similarity index 100% rename from public/ships/vitasA021.png rename to public/ships/vitas_a021_a.png diff --git a/public/ships/vitasB010.png b/public/ships/vitas_b010_a.png similarity index 100% rename from public/ships/vitasB010.png rename to public/ships/vitas_b010_a.png diff --git a/public/ships/voidElfin.png b/public/ships/void_elfin_a.png similarity index 100% rename from public/ships/voidElfin.png rename to public/ships/void_elfin_a.png diff --git a/public/ships/warspite.png b/public/ships/warspite_a.png similarity index 100% rename from public/ships/warspite.png rename to public/ships/warspite_a.png diff --git a/public/ships/wingedHussar_a.png b/public/ships/winged_hussar_a.png similarity index 100% rename from public/ships/wingedHussar_a.png rename to public/ships/winged_hussar_a.png diff --git a/public/ships/wingedHussar_b.png b/public/ships/winged_hussar_b.png similarity index 100% rename from public/ships/wingedHussar_b.png rename to public/ships/winged_hussar_b.png diff --git a/public/ships/wingedHussar_c.png b/public/ships/winged_hussar_c.png similarity index 100% rename from public/ships/wingedHussar_c.png rename to public/ships/winged_hussar_c.png diff --git a/public/ui/alt/blackOpenBook.svg b/public/ui/alt/blackOpenBook.svg deleted file mode 100644 index 58b7a86..0000000 --- a/public/ui/alt/blackOpenBook.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/public/ui/alt/whiteChanges.svg b/public/ui/alt/whiteChanges.svg deleted file mode 100644 index e41ec96..0000000 --- a/public/ui/alt/whiteChanges.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/public/ui/alt/whiteCredits.svg b/public/ui/alt/whiteCredits.svg deleted file mode 100644 index 8cb2920..0000000 --- a/public/ui/alt/whiteCredits.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/public/ui/alt/whiteDownArrow.svg b/public/ui/alt/whiteDownArrow.svg deleted file mode 100644 index 3b3ea43..0000000 --- a/public/ui/alt/whiteDownArrow.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/public/ui/alt/whiteShare.svg b/public/ui/alt/whiteShare.svg deleted file mode 100644 index a3da202..0000000 --- a/public/ui/alt/whiteShare.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/public/ui/arrowLeft.svg b/public/ui/arrowLeft.svg new file mode 100644 index 0000000..07e781c --- /dev/null +++ b/public/ui/arrowLeft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/arrowRight.svg b/public/ui/arrowRight.svg new file mode 100644 index 0000000..46278f5 --- /dev/null +++ b/public/ui/arrowRight.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/atom.svg b/public/ui/atom.svg deleted file mode 100644 index 1892407..0000000 --- a/public/ui/atom.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/public/ui/blueprint.svg b/public/ui/blueprint.svg deleted file mode 100644 index 2579ee7..0000000 --- a/public/ui/blueprint.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/public/ui/bpTracker.svg b/public/ui/bpTracker.svg new file mode 100644 index 0000000..6d9a5e5 --- /dev/null +++ b/public/ui/bpTracker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/bugFix.svg b/public/ui/bugFix.svg new file mode 100644 index 0000000..59c05ab --- /dev/null +++ b/public/ui/bugFix.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/burger.svg b/public/ui/burger.svg deleted file mode 100644 index 7145194..0000000 --- a/public/ui/burger.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/public/ui/changes.svg b/public/ui/changes.svg deleted file mode 100644 index 726109b..0000000 --- a/public/ui/changes.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/public/ui/checkmarkCircle.svg b/public/ui/checkmarkCircle.svg new file mode 100644 index 0000000..6e3b480 --- /dev/null +++ b/public/ui/checkmarkCircle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/close.svg b/public/ui/close.svg new file mode 100644 index 0000000..5d783ae --- /dev/null +++ b/public/ui/close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/colorGenerator.svg b/public/ui/colorGenerator.svg new file mode 100644 index 0000000..cd70bbe --- /dev/null +++ b/public/ui/colorGenerator.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/contact.svg b/public/ui/contact.svg new file mode 100644 index 0000000..fbd920c --- /dev/null +++ b/public/ui/contact.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/contributors.svg b/public/ui/contributors.svg new file mode 100644 index 0000000..c7c8996 --- /dev/null +++ b/public/ui/contributors.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/copy.svg b/public/ui/copy.svg index cd8410d..ef3cb11 100644 --- a/public/ui/copy.svg +++ b/public/ui/copy.svg @@ -1,2 +1 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/public/ui/credits.svg b/public/ui/credits.svg deleted file mode 100644 index b1a7736..0000000 --- a/public/ui/credits.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/public/ui/discord_icon.png b/public/ui/discord_icon.png deleted file mode 100644 index 916e1fc..0000000 Binary files a/public/ui/discord_icon.png and /dev/null differ diff --git a/public/ui/downArrow.svg b/public/ui/downArrow.svg deleted file mode 100644 index cd6daa9..0000000 --- a/public/ui/downArrow.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/public/ui/filter.svg b/public/ui/filter.svg new file mode 100644 index 0000000..98bbe3c --- /dev/null +++ b/public/ui/filter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/fleetBuilder.svg b/public/ui/fleetBuilder.svg new file mode 100644 index 0000000..d1b0ec1 --- /dev/null +++ b/public/ui/fleetBuilder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/greenUp.svg b/public/ui/greenUp.svg deleted file mode 100644 index 31fb892..0000000 --- a/public/ui/greenUp.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/public/ui/home.svg b/public/ui/home.svg index b71ca04..203d09c 100644 --- a/public/ui/home.svg +++ b/public/ui/home.svg @@ -1,12 +1 @@ - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/ui/hourglass.svg b/public/ui/hourglass.svg new file mode 100644 index 0000000..d4c06b3 --- /dev/null +++ b/public/ui/hourglass.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/info.svg b/public/ui/info.svg new file mode 100644 index 0000000..9914150 --- /dev/null +++ b/public/ui/info.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/key.svg b/public/ui/key.svg new file mode 100644 index 0000000..65aa885 --- /dev/null +++ b/public/ui/key.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/leftArrow.svg b/public/ui/leftArrow.svg deleted file mode 100644 index da03a8a..0000000 --- a/public/ui/leftArrow.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/public/ui/link.svg b/public/ui/link.svg new file mode 100644 index 0000000..cf5fb88 --- /dev/null +++ b/public/ui/link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/load.svg b/public/ui/load.svg new file mode 100644 index 0000000..51508da --- /dev/null +++ b/public/ui/load.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/lock.svg b/public/ui/lock.svg new file mode 100644 index 0000000..3bfb76e --- /dev/null +++ b/public/ui/lock.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/ui/mailEditor.svg b/public/ui/mailEditor.svg new file mode 100644 index 0000000..586956f --- /dev/null +++ b/public/ui/mailEditor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/majorRelease.svg b/public/ui/majorRelease.svg new file mode 100644 index 0000000..5d63116 --- /dev/null +++ b/public/ui/majorRelease.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/menu.svg b/public/ui/menu.svg new file mode 100644 index 0000000..0012c74 --- /dev/null +++ b/public/ui/menu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/minorRelease.svg b/public/ui/minorRelease.svg new file mode 100644 index 0000000..ffcbb4c --- /dev/null +++ b/public/ui/minorRelease.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/moduleLibrary.svg b/public/ui/moduleLibrary.svg new file mode 100644 index 0000000..01c5125 --- /dev/null +++ b/public/ui/moduleLibrary.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/moon.svg b/public/ui/moon.svg new file mode 100644 index 0000000..d97084d --- /dev/null +++ b/public/ui/moon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/openBook.svg b/public/ui/openBook.svg deleted file mode 100644 index ef08933..0000000 --- a/public/ui/openBook.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/public/ui/paint.svg b/public/ui/paint.svg deleted file mode 100644 index f325a62..0000000 --- a/public/ui/paint.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/public/ui/pencil.svg b/public/ui/pencil.svg new file mode 100644 index 0000000..eae0ca2 --- /dev/null +++ b/public/ui/pencil.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/person.svg b/public/ui/person.svg new file mode 100644 index 0000000..e324de8 --- /dev/null +++ b/public/ui/person.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/plus.svg b/public/ui/plus.svg deleted file mode 100644 index a7a2b0e..0000000 --- a/public/ui/plus.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/public/ui/plusCircle.svg b/public/ui/plusCircle.svg new file mode 100644 index 0000000..6ec8c38 --- /dev/null +++ b/public/ui/plusCircle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/question.svg b/public/ui/question.svg new file mode 100644 index 0000000..2b1c970 --- /dev/null +++ b/public/ui/question.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/radiant.svg b/public/ui/radiant.svg deleted file mode 100644 index c1a511e..0000000 --- a/public/ui/radiant.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/public/ui/redDown.svg b/public/ui/redDown.svg deleted file mode 100644 index 62959f4..0000000 --- a/public/ui/redDown.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/public/ui/researchAgreement.svg b/public/ui/researchAgreement.svg new file mode 100644 index 0000000..2f95bec --- /dev/null +++ b/public/ui/researchAgreement.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/rightArrow.svg b/public/ui/rightArrow.svg deleted file mode 100644 index db73c05..0000000 --- a/public/ui/rightArrow.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/public/ui/save.svg b/public/ui/save.svg new file mode 100644 index 0000000..9af1dc8 --- /dev/null +++ b/public/ui/save.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/saved.svg b/public/ui/saved.svg new file mode 100644 index 0000000..a69daa9 --- /dev/null +++ b/public/ui/saved.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/scale.svg b/public/ui/scale.svg deleted file mode 100644 index 4fb0e50..0000000 --- a/public/ui/scale.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/public/ui/search.svg b/public/ui/search.svg index 10632d0..1469f9f 100644 --- a/public/ui/search.svg +++ b/public/ui/search.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/ui/settings.svg b/public/ui/settings.svg new file mode 100644 index 0000000..f9b86a8 --- /dev/null +++ b/public/ui/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/share.svg b/public/ui/share.svg index b16cd2a..145df42 100644 --- a/public/ui/share.svg +++ b/public/ui/share.svg @@ -1,5 +1 @@ - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/ui/solarSystem.svg b/public/ui/solarSystem.svg deleted file mode 100644 index d15d366..0000000 --- a/public/ui/solarSystem.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/public/ui/sort.svg b/public/ui/sort.svg new file mode 100644 index 0000000..20c9c2e --- /dev/null +++ b/public/ui/sort.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/sun.svg b/public/ui/sun.svg new file mode 100644 index 0000000..0796ec6 --- /dev/null +++ b/public/ui/sun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/trash.svg b/public/ui/trash.svg new file mode 100644 index 0000000..6cb4d46 --- /dev/null +++ b/public/ui/trash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/trophy.svg b/public/ui/trophy.svg new file mode 100644 index 0000000..d30d129 --- /dev/null +++ b/public/ui/trophy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/ui/underline.svg b/public/ui/underline.svg new file mode 100644 index 0000000..04bb471 --- /dev/null +++ b/public/ui/underline.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/ui/wrench.svg b/public/ui/wrench.svg deleted file mode 100644 index c38d506..0000000 --- a/public/ui/wrench.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/public/ui/x.svg b/public/ui/x.svg deleted file mode 100644 index 90b813c..0000000 --- a/public/ui/x.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/public/ui/yellowLine.svg b/public/ui/yellowLine.svg deleted file mode 100644 index bc46f12..0000000 --- a/public/ui/yellowLine.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/public/weapons/stats/antiair.svg b/public/weapons/stats/antiair.svg new file mode 100644 index 0000000..35e31e1 --- /dev/null +++ b/public/weapons/stats/antiair.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/public/weapons/stats/antiaircraft.svg b/public/weapons/stats/antiaircraft.svg deleted file mode 100644 index 34b76f9..0000000 --- a/public/weapons/stats/antiaircraft.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/public/weapons/stats/antiship.svg b/public/weapons/stats/antiship.svg index 395c745..671cb73 100644 --- a/public/weapons/stats/antiship.svg +++ b/public/weapons/stats/antiship.svg @@ -1,6 +1,14 @@ - - - - + + + + + + + + + + + + diff --git a/public/weapons/stats/armor.svg b/public/weapons/stats/armor.svg index f53f535..90c33f6 100644 --- a/public/weapons/stats/armor.svg +++ b/public/weapons/stats/armor.svg @@ -1,7 +1,7 @@ - - - - - + + + + + diff --git a/public/weapons/stats/energyShield.svg b/public/weapons/stats/energyShield.svg index bfa6900..44fb622 100644 --- a/public/weapons/stats/energyShield.svg +++ b/public/weapons/stats/energyShield.svg @@ -1,10 +1,10 @@ - - - - - - - - + + + + + + + + diff --git a/public/weapons/stats/extraHp.svg b/public/weapons/stats/extraHp.svg new file mode 100644 index 0000000..c4512a4 --- /dev/null +++ b/public/weapons/stats/extraHp.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/weapons/stats/hp.svg b/public/weapons/stats/hp.svg deleted file mode 100644 index ce015ca..0000000 --- a/public/weapons/stats/hp.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/public/weapons/stats/hpRecovery.svg b/public/weapons/stats/hpRecovery.svg new file mode 100644 index 0000000..48f7172 --- /dev/null +++ b/public/weapons/stats/hpRecovery.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/weapons/stats/repair.svg b/public/weapons/stats/repair.svg deleted file mode 100644 index bb40ad1..0000000 --- a/public/weapons/stats/repair.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/public/weapons/stats/siege.svg b/public/weapons/stats/siege.svg index e3d0e5d..06394fa 100644 --- a/public/weapons/stats/siege.svg +++ b/public/weapons/stats/siege.svg @@ -1,6 +1,13 @@ - - - - + + + + + + + + + + + diff --git a/public/weapons/types/alpha.svg b/public/weapons/types/alpha.svg index a56787d..33573dc 100644 --- a/public/weapons/types/alpha.svg +++ b/public/weapons/types/alpha.svg @@ -1,6 +1,5 @@ - - - - + + + diff --git a/public/weapons/types/attacksPerRound.svg b/public/weapons/types/attacksPerRound.svg new file mode 100644 index 0000000..9b6f709 --- /dev/null +++ b/public/weapons/types/attacksPerRound.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/weapons/types/damageType.svg b/public/weapons/types/damageType.svg index 5738c82..a52eb50 100644 --- a/public/weapons/types/damageType.svg +++ b/public/weapons/types/damageType.svg @@ -1,6 +1,13 @@ - - - - + + + + + + + + + + + diff --git a/public/weapons/types/duration.svg b/public/weapons/types/duration.svg new file mode 100644 index 0000000..ed221ad --- /dev/null +++ b/public/weapons/types/duration.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/weapons/types/hpRecovery.svg b/public/weapons/types/hpRecovery.svg new file mode 100644 index 0000000..48f7172 --- /dev/null +++ b/public/weapons/types/hpRecovery.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/weapons/types/lockon.svg b/public/weapons/types/lockon.svg deleted file mode 100644 index 338a663..0000000 --- a/public/weapons/types/lockon.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/public/weapons/types/lockonEfficiency.svg b/public/weapons/types/lockonEfficiency.svg new file mode 100644 index 0000000..ff48213 --- /dev/null +++ b/public/weapons/types/lockonEfficiency.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/public/weapons/types/lockonTime.svg b/public/weapons/types/lockonTime.svg new file mode 100644 index 0000000..e42e931 --- /dev/null +++ b/public/weapons/types/lockonTime.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/weapons/types/operationCount.svg b/public/weapons/types/operationCount.svg new file mode 100644 index 0000000..20649aa --- /dev/null +++ b/public/weapons/types/operationCount.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/weapons/types/target.svg b/public/weapons/types/target.svg index 10569af..df4a4e8 100644 --- a/public/weapons/types/target.svg +++ b/public/weapons/types/target.svg @@ -1,5 +1,9 @@ - - - + + + + + + + diff --git a/server/api/createUser.ts b/server/api/createUser.ts new file mode 100644 index 0000000..e9885bf --- /dev/null +++ b/server/api/createUser.ts @@ -0,0 +1,45 @@ +import { getRandomCharacters } from "~/utils/functions"; +import { origins } from "~/utils/general"; +import { UserData } from "~/utils/types"; +import admin from "firebase-admin"; + +// probably dont need crypto or hashing for uid and access token, whos tryna hack someones blueprints 💀💀 +async function generateUid() { + const db = admin.firestore(); + const uid = getRandomCharacters(12, "numeric"); + + const docData = await db.collection("users").doc(uid).get(); + if (docData.exists) return await generateUid(); + + return uid; +} + +export default defineEventHandler(async () => { + const config = useRuntimeConfig(); + const db = admin.firestore(); + + let data: UserData | null = null; + + try { + const uid = await generateUid(); + const accessToken = getRandomCharacters(50); + + data = { + uid, + accessToken, + createdAt: new Date().toISOString().slice(0, 10), + lastLoggedIn: new Date().toISOString().slice(0, 10), + savedMails: [], + blueprints: [], + bpLastSaved: null, + origin: origins[config.public.baseUrl] ?? "U" + }; + + await db.collection("users").doc(uid).create(data); + } catch (error) { + console.error(error); + return { success: false, error: error instanceof Error ? error.message : "Something went wrong. Try again later.", content: null }; + } + + return { success: true, error: null, content: data }; +}); diff --git a/server/api/data/ships.ts b/server/api/data/ships.ts new file mode 100644 index 0000000..60c44bf --- /dev/null +++ b/server/api/data/ships.ts @@ -0,0 +1,9073 @@ +import { AllShip } from "~/utils/ships"; + +export default defineEventHandler(() => { + const difficulty: Readonly> = { + "Jupiter Industry": 3.5, + "NOMA Shipping": 3.5, + Antonios: 4, + "Dawn Accord": 2.5, + "Outstanding Firepower": 5.5, + "Sustained Combat": 5, + "Strategy & Support": 5.5, + "Fighter & Corvette": 6, + "Projectile Weapon": 4.5, + "Direct-Fire Weapon": 4 + }; + + const data: readonly AllShip[] = [ + { + id: 0, + name: "AT021", + title: "Pulse Attacker", + img: "/ships/at021_a.png", + type: "Fighter", + fighterType: "Medium", + variant: "A", + variantName: "Pulse Cannon Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Fighter & Corvette"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Front", + commandPoints: 1, + serviceLimit: 15, + fightersPerSquadron: 3 + }, + { + id: 1, + name: "AT021", + title: "Tactical Attacker", + img: "/ships/at021_b.png", + type: "Fighter", + fighterType: "Medium", + variant: "B", + variantName: "Interference Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Sustained Combat", "Strategy & Support", "Fighter & Corvette"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Front", + commandPoints: 1, + serviceLimit: 15, + fightersPerSquadron: 3 + }, + { + id: 2, + name: "AT021", + title: "Heavy Attacker", + img: "/ships/at021_c.png", + type: "Fighter", + fighterType: "Medium", + variant: "C", + variantName: "Multi-Role Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Outstanding Firepower", "Fighter & Corvette"], + scope: "Projectile Weapon", + weight: 10, + row: "Front", + commandPoints: 1, + serviceLimit: 15, + fightersPerSquadron: 3 + }, + { + id: 3, + name: "B192 Newland", + title: "Heavy Attacker", + img: "/ships/b192_newland_a.png", + type: "Fighter", + fighterType: "Medium", + variant: "A", + variantName: "Multi-Role Type", + hasVariants: false, + manufacturer: "Jupiter Industry", + direction: ["Strategy & Support", "Fighter & Corvette"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Front", + commandPoints: 1, + serviceLimit: 10, + fightersPerSquadron: 3 + }, + { + id: 4, + name: "BR050", + title: "Standard Bomber", + img: "/ships/br050_a.png", + type: "Fighter", + fighterType: "Large", + variant: "A", + variantName: "Anti-Ship Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Outstanding Firepower", "Fighter & Corvette"], + scope: "Projectile Weapon", + weight: 10, + row: "Front", + commandPoints: 1, + serviceLimit: 10, + fightersPerSquadron: 2 + }, + { + id: 5, + name: "BR050", + title: "Multi-Role Bomber", + img: "/ships/br050_b.png", + type: "Fighter", + fighterType: "Large", + variant: "B", + variantName: "Defense Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Sustained Combat", "Fighter & Corvette"], + scope: "Projectile Weapon", + weight: 10, + row: "Front", + commandPoints: 1, + serviceLimit: 10, + fightersPerSquadron: 2 + }, + { + id: 6, + name: "BR050", + title: "Torpedo Bomber", + img: "/ships/br050_c.png", + type: "Fighter", + fighterType: "Large", + variant: "C", + variantName: "Torpedo Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Outstanding Firepower", "Fighter & Corvette"], + scope: "Projectile Weapon", + weight: 5, + row: "Front", + commandPoints: 1, + serviceLimit: 10, + fightersPerSquadron: 2 + }, + { + id: 7, + name: "Balancer Anderson SC020", + title: "Scout", + img: "/ships/balancer_anderson_sc020_a.png", + type: "Fighter", + fighterType: "Small", + variant: "A", + variantName: "Interference Type", + hasVariants: false, + manufacturer: "Antonios", + direction: ["Sustained Combat", "Fighter & Corvette"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Front", + commandPoints: 1, + serviceLimit: 10, + fightersPerSquadron: 5 + }, + { + id: 8, + name: "Bullfrog", + title: "Dual-Purpose Bomber", + img: "/ships/bullfrog_a.png", + type: "Fighter", + fighterType: "Large", + variant: "A", + variantName: "Siege Type", + hasVariants: false, + manufacturer: "NOMA Shipping", + direction: ["Outstanding Firepower", "Fighter & Corvette"], + scope: "Projectile Weapon", + weight: 10, + row: "Front", + commandPoints: 1, + serviceLimit: 10, + fightersPerSquadron: 2 + }, + { + id: 9, + name: "Hayreddin's Loyal", + title: "Pulsar Fighter", + img: "/ships/hayreddins_loyal_a.png", + type: "Fighter", + fighterType: "Medium", + variant: "A", + variantName: "Special Type", + hasVariants: false, + manufacturer: "Empty", + direction: ["Outstanding Firepower", "Sustained Combat", "Fighter & Corvette"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Front", + commandPoints: 1, + serviceLimit: 8, + fightersPerSquadron: 3 + }, + { + id: 10, + name: "Janbiya Aer410", + title: "Assault Attacker", + img: "/ships/janbiya_aer410_a.png", + type: "Fighter", + fighterType: "Medium", + variant: "A", + variantName: "Anti-Ship Type", + hasVariants: false, + manufacturer: "Jupiter Industry", + direction: ["Strategy & Support", "Fighter & Corvette"], + scope: "Projectile Weapon", + weight: 10, + row: "Front", + commandPoints: 1, + serviceLimit: 10, + fightersPerSquadron: 3 + }, + { + id: 11, + name: "Mistral", + title: "Combat Attacker", + img: "/ships/mistral_a.png", + type: "Fighter", + fighterType: "Medium", + variant: "A", + variantName: "Anti-Aircraft Type", + hasVariants: false, + manufacturer: "Antonios", + direction: ["Fighter & Corvette"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Front", + commandPoints: 1, + serviceLimit: 10, + fightersPerSquadron: 4 + }, + { + id: 12, + name: "SC002", + title: "Quantum Scout", + img: "/ships/sc002_a.png", + type: "Fighter", + fighterType: "Small", + variant: "A", + variantName: "Generic Type", + hasVariants: false, + manufacturer: "Dawn Accord", + direction: ["Sustained Combat", "Strategy & Support", "Fighter & Corvette"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Front", + commandPoints: 1, + serviceLimit: 15, + fightersPerSquadron: 5 + }, + { + id: 13, + name: "Sandrake", + title: "Atmospheric Interceptor", + img: "/ships/sandrake_a.png", + type: "Fighter", + fighterType: "Small", + variant: "A", + variantName: "Dual-Purpose Type", + hasVariants: false, + manufacturer: "NOMA Shipping", + direction: ["Strategy & Support", "Fighter & Corvette"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Front", + commandPoints: 1, + serviceLimit: 10, + fightersPerSquadron: 5 + }, + { + id: 14, + name: "Spore A404", + title: "Light Fighter", + img: "/ships/spore_a404_a.png", + type: "Fighter", + fighterType: "Small", + variant: "A", + variantName: "Anti-Aircraft Type", + hasVariants: false, + manufacturer: "Jupiter Industry", + direction: ["Strategy & Support", "Fighter & Corvette"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Front", + commandPoints: 1, + serviceLimit: 10, + fightersPerSquadron: 5 + }, + { + id: 15, + name: "Stingray", + title: "Torpedo Bomber", + img: "/ships/stingray_a.png", + type: "Fighter", + fighterType: "Large", + variant: "A", + variantName: "Stealth Type", + hasVariants: false, + manufacturer: "Jupiter Industry", + direction: ["Outstanding Firepower", "Sustained Combat", "Fighter & Corvette"], + scope: "Projectile Weapon", + weight: 10, + row: "Front", + commandPoints: 1, + serviceLimit: 10, + fightersPerSquadron: 2 + }, + { + id: 16, + name: "Strix A100", + title: "Joint Attacker", + img: "/ships/strix_a100_a.png", + type: "Fighter", + fighterType: "Medium", + variant: "A", + variantName: "Anti-Ship Type", + hasVariants: false, + manufacturer: "NOMA Shipping", + direction: ["Fighter & Corvette"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Front", + commandPoints: 1, + serviceLimit: 10, + fightersPerSquadron: 3 + }, + { + id: 17, + name: "Vitas A021", + title: "Heavy Attacker", + img: "/ships/vitas_a021_a.png", + type: "Fighter", + fighterType: "Medium", + variant: "A", + variantName: "Anti-Ship Type", + hasVariants: false, + manufacturer: "Antonios", + direction: ["Outstanding Firepower", "Fighter & Corvette"], + scope: "Projectile Weapon", + weight: 10, + row: "Front", + commandPoints: 1, + serviceLimit: 10, + fightersPerSquadron: 3 + }, + { + id: 18, + name: "Vitas B010", + title: "Bomber", + img: "/ships/vitas_b010_a.png", + type: "Fighter", + fighterType: "Large", + variant: "A", + variantName: "Anti-Ship Type", + hasVariants: false, + manufacturer: "Antonios", + direction: ["Outstanding Firepower", "Sustained Combat", "Fighter & Corvette"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Front", + commandPoints: 1, + serviceLimit: 10, + fightersPerSquadron: 2 + }, + { + id: 19, + name: "CV-II003", + title: "Light Corvette", + img: "/ships/cvii003_a.png", + type: "Corvette", + variant: "A", + variantName: "Multi-Role Type", + hasVariants: false, + manufacturer: "Dawn Accord", + direction: ["Strategy & Support", "Fighter & Corvette"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Front", + commandPoints: 2, + serviceLimit: 15 + }, + { + id: 20, + name: "CV-M011", + title: "Heavy Missile Corvette", + img: "/ships/cvm011_a.png", + type: "Corvette", + variant: "A", + variantName: "Missile Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Outstanding Firepower", "Sustained Combat", "Strategy & Support", "Fighter & Corvette"], + scope: "Projectile Weapon", + weight: 10, + row: "Front", + commandPoints: 2, + serviceLimit: 15 + }, + { + id: 21, + name: "CV-M011", + title: "Heavy Cannon Corvette", + img: "/ships/cvm011_b.png", + type: "Corvette", + variant: "B", + variantName: "Cannon Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Fighter & Corvette"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Front", + commandPoints: 2, + serviceLimit: 15 + }, + { + id: 22, + name: "CV-M011", + title: "High-Speed Missile Corvette", + img: "/ships/cvm011_c.png", + type: "Corvette", + variant: "C", + variantName: "High-Speed Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Fighter & Corvette"], + scope: "Projectile Weapon", + weight: 5, + row: "Front", + commandPoints: 2, + serviceLimit: 15 + }, + { + id: 23, + name: "CV-T800", + title: "Pulsar Corvette", + img: "/ships/cvt800_a.png", + type: "Corvette", + variant: "A", + variantName: "Anti-Aircraft Type", + hasVariants: false, + manufacturer: "Dawn Accord", + direction: ["Outstanding Firepower", "Strategy & Support", "Fighter & Corvette"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Front", + commandPoints: 2, + serviceLimit: 15 + }, + { + id: 24, + name: "Cellular Defender", + title: "Heavy Torpedo Corvette", + img: "/ships/cellular_defender_a.png", + type: "Corvette", + variant: "A", + variantName: "Multi-Role Type", + hasVariants: false, + manufacturer: "Antonios", + direction: ["Outstanding Firepower", "Fighter & Corvette"], + scope: "Projectile Weapon", + weight: 5, + row: "Front", + commandPoints: 2, + serviceLimit: 10 + }, + { + id: 25, + name: "Nebula Chaser", + title: "Heavy Corvette", + img: "/ships/nebula_chaser_a.png", + type: "Corvette", + variant: "A", + variantName: "Ballistic Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Outstanding Firepower", "Fighter & Corvette"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Front", + commandPoints: 2, + serviceLimit: 10 + }, + { + id: 26, + name: "Nebula Chaser", + title: "Pulsar Corvette", + img: "/ships/nebula_chaser_b.png", + type: "Corvette", + variant: "B", + variantName: "Pulse Cannon Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Outstanding Firepower", "Fighter & Corvette"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Front", + commandPoints: 2, + serviceLimit: 10 + }, + { + id: 27, + name: "RedBeast 7-13", + title: "Missile Corvette", + img: "/ships/redbeast_713_a.png", + type: "Corvette", + variant: "A", + variantName: "Offensive Type", + hasVariants: false, + manufacturer: "NOMA Shipping", + direction: ["Sustained Combat", "Strategy & Support", "Fighter & Corvette"], + scope: "Projectile Weapon", + weight: 10, + row: "Front", + commandPoints: 2, + serviceLimit: 10 + }, + { + id: 28, + name: "S-Levy 9", + title: "Heavy Torpedo Escort Corvette", + img: "/ships/slevy_9_a.png", + type: "Corvette", + variant: "A", + variantName: "Anti-Ship Type", + hasVariants: false, + manufacturer: "Jupiter Industry", + direction: ["Outstanding Firepower", "Sustained Combat", "Fighter & Corvette"], + scope: "Projectile Weapon", + weight: 5, + row: "Front", + commandPoints: 2, + serviceLimit: 10 + }, + { + id: 29, + name: "Hale-Bopp", + title: "System Support Corvette", + img: "/ships/halebopp_a.png", + type: "Corvette", + variant: "A", + variantName: "Multi-Role Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Strategy & Support", "Fighter & Corvette"], + scope: "Empty", + weight: 5, + row: "Front", + commandPoints: 2, + serviceLimit: 10 + }, + { + id: 30, + name: "Hale-Bopp", + title: "Repair Support Corvette", + img: "/ships/halebopp_b.png", + type: "Corvette", + variant: "B", + variantName: "Dock Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Strategy & Support", "Fighter & Corvette"], + scope: "Empty", + weight: 5, + row: "Front", + commandPoints: 2, + serviceLimit: 10 + }, + { + id: 31, + name: "Silent Assassin", + title: "Armored Corvette", + img: "/ships/silent_assassin_a.png", + type: "Corvette", + variant: "A", + variantName: "High-Speed Type", + hasVariants: false, + manufacturer: "NOMA Shipping", + direction: ["Fighter & Corvette"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Front", + commandPoints: 2, + serviceLimit: 10 + }, + { + id: 32, + name: "Tempel I", + title: "Information Corvette", + img: "/ships/tempel_i_a.png", + type: "Corvette", + variant: "A", + variantName: "Interference Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Strategy & Support", "Fighter & Corvette"], + scope: "Empty", + weight: 10, + row: "Front", + commandPoints: 2, + serviceLimit: 10 + }, + { + id: 33, + name: "Tempel I", + title: "Alert Corvette", + img: "/ships/tempel_i_b.png", + type: "Corvette", + variant: "B", + variantName: "Alert Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Strategy & Support", "Fighter & Corvette"], + scope: "Empty", + weight: 5, + row: "Front", + commandPoints: 2, + serviceLimit: 10 + }, + { + id: 34, + name: "Void Elfin", + title: "Stealth Missile Corvette", + img: "/ships/void_elfin_a.png", + type: "Corvette", + variant: "A", + variantName: "Offensive Type", + hasVariants: false, + manufacturer: "Antonios", + direction: ["Outstanding Firepower", "Sustained Combat", "Fighter & Corvette"], + scope: "Projectile Weapon", + weight: 10, + row: "Front", + commandPoints: 2, + serviceLimit: 10 + }, + { + id: 35, + name: "Carilion", + title: "Recon Frigate", + img: "/ships/carilion_a.png", + type: "Frigate", + variant: "A", + variantName: "Recon Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Sustained Combat", "Strategy & Support"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Front", + commandPoints: 4, + serviceLimit: 10 + }, + { + id: 36, + name: "Carilion", + title: "Heavy Cannon Frigate", + img: "/ships/carilion_b.png", + type: "Frigate", + variant: "B", + variantName: "Heavy Cannon Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Strategy & Support"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Front", + commandPoints: 5, + serviceLimit: 10 + }, + { + id: 37, + name: "Carilion", + title: "Special Frigate", + img: "/ships/carilion_c.png", + type: "Frigate", + variant: "C", + variantName: "Special Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Sustained Combat"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Front", + commandPoints: 5, + serviceLimit: 10 + }, + { + id: 38, + name: "FG300", + title: "Multi-Role Frigate", + img: "/ships/fg300_a.png", + type: "Frigate", + variant: "A", + variantName: "Multi-Role Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Strategy & Support"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Middle", + commandPoints: 3, + serviceLimit: 15 + }, + { + id: 39, + name: "FG300", + title: "Armored Frigate", + img: "/ships/fg300_b.png", + type: "Frigate", + variant: "B", + variantName: "Armored Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Sustained Combat"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Front", + commandPoints: 3, + serviceLimit: 15 + }, + { + id: 40, + name: "FG300", + title: "Recon Frigate", + img: "/ships/fg300_c.png", + type: "Frigate", + variant: "C", + variantName: "Recon Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Strategy & Support"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Middle", + commandPoints: 3, + serviceLimit: 15 + }, + { + id: 41, + name: "Inostrancevia", + title: "Defensive Frigate", + img: "/ships/inostrancevia_a.png", + type: "Frigate", + variant: "A", + variantName: "Defense Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Empty"], + scope: "Empty", + weight: 5, + row: "Front", + commandPoints: 6, + serviceLimit: 10 + }, + { + id: 42, + name: "Inostrancevia", + title: "Assault Frigate", + img: "/ships/inostrancevia_b.png", + type: "Frigate", + variant: "B", + variantName: "Offensive Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Outstanding Firepower"], + scope: "Empty", + weight: 5, + row: "Front", + commandPoints: 6, + serviceLimit: 10 + }, + { + id: 43, + name: "Inostrancevia", + title: "Onslaught Frigate", + img: "/ships/inostrancevia_c.png", + type: "Frigate", + variant: "C", + variantName: "Special Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Outstanding Firepower"], + scope: "Empty", + weight: 5, + row: "Front", + commandPoints: 8, + serviceLimit: 10 + }, + { + id: 44, + name: "Mare Imbrium", + title: "Assault Frigate", + img: "/ships/mare_imbrium_a.png", + type: "Frigate", + variant: "A", + variantName: "Railgun Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Outstanding Firepower"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Front", + commandPoints: 5, + serviceLimit: 10 + }, + { + id: 45, + name: "Mare Imbrium", + title: "Experimental Pulse Cannon Frigate", + img: "/ships/mare_imbrium_b.png", + type: "Frigate", + variant: "B", + variantName: "Pulse Cannon Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Outstanding Firepower"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Middle", + commandPoints: 8, + serviceLimit: 10 + }, + { + id: 46, + name: "Mare Nubium", + title: "Light Landing Ship", + img: "/ships/mare_nubium_a.png", + type: "Frigate", + variant: "A", + variantName: "Assault Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Outstanding Firepower"], + scope: "Empty", + weight: 10, + row: "Back", + commandPoints: 4, + serviceLimit: 10 + }, + { + id: 47, + name: "Mare Nubium", + title: "Anti-Aircraft Frigate", + img: "/ships/mare_nubium_b.png", + type: "Frigate", + variant: "B", + variantName: "Anti-Aircraft Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Empty"], + scope: "Empty", + weight: 10, + row: "Middle", + commandPoints: 4, + serviceLimit: 10 + }, + { + id: 48, + name: "Mare Serenitatis", + title: "Heavy Frigate", + img: "/ships/mare_serenitatis_a.png", + type: "Frigate", + variant: "A", + variantName: "Anti-Ship Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Outstanding Firepower", "Sustained Combat"], + scope: "Projectile Weapon", + weight: 10, + row: "Back", + commandPoints: 5, + serviceLimit: 10 + }, + { + id: 49, + name: "Mare Serenitatis", + title: "Missile Frigate", + img: "/ships/mare_serenitatis_b.png", + type: "Frigate", + variant: "B", + variantName: "Missile Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Sustained Combat"], + scope: "Projectile Weapon", + weight: 10, + row: "Back", + commandPoints: 5, + serviceLimit: 10 + }, + { + id: 50, + name: "Mare Serenitatis", + title: "Anti-Aircraft Frigate", + img: "/ships/mare_serenitatis_c.png", + type: "Frigate", + variant: "C", + variantName: "Anti-Aircraft Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Sustained Combat"], + scope: "Projectile Weapon", + weight: 10, + row: "Back", + commandPoints: 5, + serviceLimit: 10 + }, + { + id: 51, + name: "Mare Tranquillitatis", + title: "Missile Frigate", + img: "/ships/mare_tranquillitatis_a.png", + type: "Frigate", + variant: "A", + variantName: "Integrated Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Strategy & Support"], + scope: "Projectile Weapon", + weight: 10, + row: "Middle", + commandPoints: 4, + serviceLimit: 10 + }, + { + id: 52, + name: "Mare Tranquillitatis", + title: "Pulse Cannon Frigate", + img: "/ships/mare_tranquillitatis_b.png", + type: "Frigate", + variant: "B", + variantName: "Pulse Cannon Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Empty"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Middle", + commandPoints: 4, + serviceLimit: 10 + }, + { + id: 53, + name: "Mare Tranquillitatis", + title: "Interceptor Frigate", + img: "/ships/mare_tranquillitatis_c.png", + type: "Frigate", + variant: "C", + variantName: "Anti-Aircraft Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Strategy & Support"], + scope: "Projectile Weapon", + weight: 10, + row: "Middle", + commandPoints: 4, + serviceLimit: 10 + }, + { + id: 54, + name: "NOMA M470", + title: "Heavy Landing Ship", + img: "/ships/noma_m470_a.png", + type: "Frigate", + variant: "A", + variantName: "Siege Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Outstanding Firepower"], + scope: "Empty", + weight: 10, + row: "Back", + commandPoints: 6, + serviceLimit: 10 + }, + { + id: 55, + name: "NOMA M470", + title: "Support Frigate", + img: "/ships/noma_m470_b.png", + type: "Frigate", + variant: "B", + variantName: "Support Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Strategy & Support"], + scope: "Empty", + weight: 10, + row: "Back", + commandPoints: 6, + serviceLimit: 10 + }, + { + id: 56, + name: "NOMA M470", + title: "Anti-Aircraft Frigate", + img: "/ships/noma_m470_c.png", + type: "Frigate", + variant: "C", + variantName: "Anti-Aircraft Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Strategy & Support"], + scope: "Empty", + weight: 10, + row: "Back", + commandPoints: 6, + serviceLimit: 10 + }, + { + id: 57, + name: "Reliat", + title: "Rapid Torpedo Frigate", + img: "/ships/reliat_a.png", + type: "Frigate", + variant: "A", + variantName: "Anti-Ship Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Outstanding Firepower"], + scope: "Projectile Weapon", + weight: 10, + row: "Middle", + commandPoints: 4, + serviceLimit: 10 + }, + { + id: 58, + name: "Reliat", + title: "Tactical Torpedo Frigate", + img: "/ships/reliat_b.png", + type: "Frigate", + variant: "B", + variantName: "Torpedo Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Outstanding Firepower"], + scope: "Projectile Weapon", + weight: 10, + row: "Middle", + commandPoints: 4, + serviceLimit: 10 + }, + { + id: 59, + name: "Reliat", + title: "Stealth Frigate", + img: "/ships/reliat_c.png", + type: "Frigate", + variant: "C", + variantName: "Stealth Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Outstanding Firepower", "Sustained Combat"], + scope: "Projectile Weapon", + weight: 10, + row: "Middle", + commandPoints: 4, + serviceLimit: 10 + }, + { + id: 60, + name: "Ruby", + title: "Heavy Railgun Frigate", + img: "/ships/ruby_a.png", + type: "Frigate", + variant: "A", + variantName: "Railgun Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Outstanding Firepower"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Middle", + commandPoints: 5, + serviceLimit: 10 + }, + { + id: 61, + name: "Ruby", + title: "Experimental Ion Cannon Frigate", + img: "/ships/ruby_b.png", + type: "Frigate", + variant: "B", + variantName: "Ion Cannon Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Outstanding Firepower"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Middle", + commandPoints: 8, + serviceLimit: 10 + }, + { + id: 62, + name: "Ruby", + title: "Defensive Frigate", + img: "/ships/ruby_c.png", + type: "Frigate", + variant: "C", + variantName: "Defensive Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Sustained Combat"], + scope: "Projectile Weapon", + weight: 5, + row: "Front", + commandPoints: 5, + serviceLimit: 10 + }, + { + id: 63, + name: "XenoStinger", + title: "Tactical Frigate", + img: "/ships/xenostinger_a.png", + type: "Frigate", + variant: "A", + variantName: "Special Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Outstanding Firepower"], + scope: "Empty", + weight: 5, + row: "Back", + commandPoints: 8, + serviceLimit: 10 + }, + { + id: 64, + name: "XenoStinger", + title: "Defensive Frigate", + img: "/ships/xenostinger_b.png", + type: "Frigate", + variant: "B", + variantName: "Anti-Aircraft Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Strategy & Support"], + scope: "Empty", + weight: 5, + row: "Back", + commandPoints: 6, + serviceLimit: 10 + }, + { + id: 65, + name: "AC721", + title: "Heavy Logistics Destroyer", + img: "/ships/ac721_a.png", + type: "Destroyer", + variant: "A", + variantName: "Generic Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Strategy & Support"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Middle", + commandPoints: 8, + serviceLimit: 15 + }, + { + id: 66, + name: "AC721", + title: "Heavy Missile Destroyer", + img: "/ships/ac721_b.png", + type: "Destroyer", + variant: "B", + variantName: "Missile Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Strategy & Support"], + scope: "Projectile Weapon", + weight: 10, + row: "Back", + commandPoints: 8, + serviceLimit: 15 + }, + { + id: 67, + name: "AC721", + title: "Heavy Dual-Purpose Assault Ship", + img: "/ships/ac721_d.png", + type: "Destroyer", + variant: "D", + variantName: "Aircraft Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Strategy & Support"], + scope: "Empty", + weight: 10, + row: "Back", + commandPoints: 12, + serviceLimit: 15, + corvetteCapacity: 2 + }, + { + id: 68, + name: "Aldabra", + title: "Heavy Cannon Destroyer", + img: "/ships/aldabra_a.png", + type: "Destroyer", + variant: "A", + variantName: "Generic Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Outstanding Firepower", "Sustained Combat"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Front", + commandPoints: 8, + serviceLimit: 10 + }, + { + id: 69, + name: "Aldabra", + title: "Heavy Assault Destroyer", + img: "/ships/aldabra_b.png", + type: "Destroyer", + variant: "B", + variantName: "Armored Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Outstanding Firepower", "Sustained Combat"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Front", + commandPoints: 8, + serviceLimit: 10 + }, + { + id: 70, + name: "Ceres", + title: "Aircraft Destroyer", + img: "/ships/ceres_a.png", + type: "Destroyer", + variant: "A", + variantName: "Aircraft Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Strategy & Support"], + scope: "Empty", + weight: 10, + row: "Back", + commandPoints: 8, + serviceLimit: 10, + mediumFighterCapacity: 2 + }, + { + id: 71, + name: "Ceres", + title: "Support Destroyer", + img: "/ships/ceres_b.png", + type: "Destroyer", + variant: "B", + variantName: "Support Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Strategy & Support"], + scope: "Empty", + weight: 10, + row: "Back", + commandPoints: 8, + serviceLimit: 10 + }, + { + id: 72, + name: "Ceres", + title: "Tactical Destroyer", + img: "/ships/ceres_c.png", + type: "Destroyer", + variant: "C", + variantName: "Tactical Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Strategy & Support"], + scope: "Empty", + weight: 10, + row: "Back", + commandPoints: 8, + serviceLimit: 10 + }, + { + id: 73, + name: "Eris I", + title: "Maneuver Assault Destroyer", + img: "/ships/eris_i_a.png", + type: "Destroyer", + variant: "A", + variantName: "Cannon Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Strategy & Support"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Front", + commandPoints: 7, + serviceLimit: 10 + }, + { + id: 74, + name: "Eris I", + title: "Heavy Cannon Destroyer", + img: "/ships/eris_i_b.png", + type: "Destroyer", + variant: "B", + variantName: "Heavy Cannon Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Outstanding Firepower", "Sustained Combat"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Front", + commandPoints: 9, + serviceLimit: 10 + }, + { + id: 75, + name: "Eris I", + title: "Armored Destroyer", + img: "/ships/eris_i_c.png", + type: "Destroyer", + variant: "C", + variantName: "Armored Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Sustained Combat"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Front", + commandPoints: 7, + serviceLimit: 10 + }, + { + id: 76, + name: "Guardian", + title: "Support Destroyer", + img: "/ships/guardian_a.png", + type: "Destroyer", + variant: "A", + variantName: "Support Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Empty"], + scope: "Projectile Weapon", + weight: 5, + row: "Middle", + commandPoints: 9, + serviceLimit: 10 + }, + { + id: 77, + name: "Guardian", + title: "Dual-Purpose Assault Ship", + img: "/ships/guardian_b.png", + type: "Destroyer", + variant: "B", + variantName: "Dual-Purpose Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Strategy & Support"], + scope: "Projectile Weapon", + weight: 5, + row: "Back", + commandPoints: 14, + serviceLimit: 10, + corvetteCapacity: 2 + }, + { + id: 78, + name: "Guardian", + title: "Experimental Pulse Assault Ship", + img: "/ships/guardian_c.png", + type: "Destroyer", + variant: "C", + variantName: "Pulse Cannon Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Outstanding Firepower", "Sustained Combat"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Front", + commandPoints: 9, + serviceLimit: 10 + }, + { + id: 79, + name: "Quaoar", + title: "Railgun Destroyer", + img: "/ships/quaoar_a.png", + type: "Destroyer", + variant: "A", + variantName: "Railgun Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Outstanding Firepower"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Middle", + commandPoints: 6, + serviceLimit: 10 + }, + { + id: 80, + name: "Quaoar", + title: "Torpedo Destroyer", + img: "/ships/quaoar_b.png", + type: "Destroyer", + variant: "B", + variantName: "Torpedo Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Outstanding Firepower"], + scope: "Projectile Weapon", + weight: 10, + row: "Middle", + commandPoints: 6, + serviceLimit: 10 + }, + { + id: 81, + name: "Taurus", + title: "Pulse Cannon Destroyer", + img: "/ships/taurus_a.png", + type: "Destroyer", + variant: "A", + variantName: "Offensive Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Outstanding Firepower", "Sustained Combat"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Front", + commandPoints: 11, + serviceLimit: 10 + }, + { + id: 82, + name: "Taurus", + title: "Assault Destroyer", + img: "/ships/taurus_b.png", + type: "Destroyer", + variant: "B", + variantName: "Assault Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Outstanding Firepower", "Sustained Combat"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Front", + commandPoints: 11, + serviceLimit: 10 + }, + { + id: 83, + name: "Taurus", + title: "Defensive Destroyer", + img: "/ships/taurus_c.png", + type: "Destroyer", + variant: "C", + variantName: "Defensive Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Sustained Combat", "Strategy & Support"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Front", + commandPoints: 8, + serviceLimit: 10 + }, + { + id: 84, + name: "Tundra", + title: "Tactical Destroyer", + img: "/ships/tundra_a.png", + type: "Destroyer", + variant: "A", + variantName: "Support Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Strategy & Support"], + scope: "Empty", + weight: 10, + row: "Back", + commandPoints: 9, + serviceLimit: 10 + }, + { + id: 85, + name: "Tundra", + title: "Aircraft Destroyer", + img: "/ships/tundra_b.png", + type: "Destroyer", + variant: "B", + variantName: "Aircraft Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Strategy & Support"], + scope: "Empty", + weight: 10, + row: "Back", + commandPoints: 9, + serviceLimit: 10, + mediumFighterCapacity: 2 + }, + { + id: 86, + name: "Winged Hussar", + title: "Light Missile Destroyer", + img: "/ships/winged_hussar_a.png", + type: "Destroyer", + variant: "A", + variantName: "Anti-Ship Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Outstanding Firepower"], + scope: "Projectile Weapon", + weight: 10, + row: "Middle", + commandPoints: 6, + serviceLimit: 10 + }, + { + id: 87, + name: "Winged Hussar", + title: "Integrated Missile Destroyer", + img: "/ships/winged_hussar_b.png", + type: "Destroyer", + variant: "B", + variantName: "Integrated Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Outstanding Firepower"], + scope: "Projectile Weapon", + weight: 10, + row: "Back", + commandPoints: 6, + serviceLimit: 10 + }, + { + id: 88, + name: "Winged Hussar", + title: "Area-Denial Anti-Aircraft Destroyer", + img: "/ships/winged_hussar_c.png", + type: "Destroyer", + variant: "C", + variantName: "Anti-Aircraft Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Sustained Combat", "Strategy & Support"], + scope: "Projectile Weapon", + weight: 10, + row: "Front", + commandPoints: 6, + serviceLimit: 10 + }, + { + id: 89, + name: "CAS066", + title: "Generic Cruiser", + img: "/ships/cas066_a.png", + type: "Cruiser", + variant: "A", + variantName: "Integrated Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Outstanding Firepower", "Sustained Combat"], + scope: "Projectile Weapon", + weight: 10, + row: "Front", + commandPoints: 18, + serviceLimit: 12 + }, + { + id: 90, + name: "CAS066", + title: "Artillery Cruiser", + img: "/ships/cas066_b.png", + type: "Cruiser", + variant: "B", + variantName: "Artillery Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Outstanding Firepower"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Middle", + commandPoints: 18, + serviceLimit: 12 + }, + { + id: 91, + name: "CAS066", + title: "Aircraft Cruiser", + img: "/ships/cas066_c.png", + type: "Cruiser", + variant: "C", + variantName: "Aircraft Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Empty"], + scope: "Empty", + weight: 10, + row: "Middle", + commandPoints: 18, + serviceLimit: 12, + corvetteCapacity: 2 + }, + { + id: 92, + name: "CAS066", + title: "Auxiliary Cruiser", + img: "/ships/cas066_d.png", + type: "Cruiser", + variant: "D", + variantName: "Support Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Strategy & Support"], + scope: "Empty", + weight: 10, + row: "Middle", + commandPoints: 18, + serviceLimit: 12 + }, + { + id: 93, + name: "Callisto", + title: "Cluster Torpedo Raid Ship", + img: "/ships/callisto_a.png", + type: "Cruiser", + variant: "A", + variantName: "Torpedo Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Outstanding Firepower"], + scope: "Projectile Weapon", + weight: 2, + row: "Back", + commandPoints: 20, + serviceLimit: 8 + }, + { + id: 94, + name: "Callisto", + title: "Heavy Torpedo Raid Ship", + img: "/ships/callisto_b.png", + type: "Cruiser", + variant: "B", + variantName: "Anti-Ship Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Outstanding Firepower"], + scope: "Projectile Weapon", + weight: 2, + row: "Back", + commandPoints: 20, + serviceLimit: 8 + }, + { + id: 95, + name: "Callisto", + title: "Heavy UAV Cruiser", + img: "/ships/callisto_c.png", + type: "Cruiser", + variant: "C", + variantName: "Support Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Empty"], + scope: "Projectile Weapon", + weight: 2, + row: "Back", + commandPoints: 20, + serviceLimit: 8 + }, + { + id: 96, + name: "Chimera", + title: "Heavy Cruiser", + img: "/ships/chimera_a.png", + type: "Cruiser", + variant: "A", + variantName: "Ballistic Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Outstanding Firepower", "Sustained Combat"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Front", + commandPoints: 18, + serviceLimit: 8 + }, + { + id: 97, + name: "Chimera", + title: "Cannon Cruiser", + img: "/ships/chimera_b.png", + type: "Cruiser", + variant: "B", + variantName: "Heavy Cannon Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Outstanding Firepower", "Sustained Combat"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Front", + commandPoints: 20, + serviceLimit: 8 + }, + { + id: 98, + name: "Chimera", + title: "Defensive Cruiser", + img: "/ships/chimera_c.png", + type: "Cruiser", + variant: "C", + variantName: "Defensive Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Sustained Combat"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Middle", + commandPoints: 20, + serviceLimit: 8 + }, + { + id: 99, + name: "Conamara Chaos", + title: "Railgun Cruiser", + img: "/ships/conamara_chaos_a.png", + type: "Cruiser", + variant: "A", + variantName: "Railgun Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Strategy & Support"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Back", + commandPoints: 20, + serviceLimit: 8 + }, + { + id: 100, + name: "Conamara Chaos", + title: "High-Speed Plasma Cruiser", + img: "/ships/conamara_chaos_b.png", + type: "Cruiser", + variant: "B", + variantName: "Plasma Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Outstanding Firepower"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Back", + commandPoints: 20, + serviceLimit: 8 + }, + { + id: 101, + name: "Io", + title: "Assault Ion Cannon Cruiser", + img: "/ships/io_a.png", + type: "Cruiser", + variant: "A", + variantName: "Ion Cannon Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Outstanding Firepower", "Sustained Combat"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Front", + commandPoints: 18, + serviceLimit: 8 + }, + { + id: 102, + name: "Io", + title: "High-Speed Ion Cannon Cruiser", + img: "/ships/io_b.png", + type: "Cruiser", + variant: "B", + variantName: "Anti-Ship Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Outstanding Firepower", "Sustained Combat"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Front", + commandPoints: 18, + serviceLimit: 8 + }, + { + id: 103, + name: "Io", + title: "Siege Ion Cannon Cruiser", + img: "/ships/io_c.png", + type: "Cruiser", + variant: "C", + variantName: "Siege Type", + hasVariants: true, + manufacturer: "Jupiter Industry", + direction: ["Outstanding Firepower", "Sustained Combat"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Front", + commandPoints: 18, + serviceLimit: 8 + }, + { + id: 104, + name: "Jaeger", + title: "Heavy Aircraft Cruiser", + img: "/ships/jaeger_a.png", + type: "Cruiser", + variant: "A", + variantName: "Support Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Strategy & Support"], + scope: "Empty", + weight: 5, + row: "Back", + commandPoints: 20, + serviceLimit: 8, + corvetteCapacity: 4 + }, + { + id: 105, + name: "Jaeger", + title: "Heavy Cannon Cruiser", + img: "/ships/jaeger_b.png", + type: "Cruiser", + variant: "B", + variantName: "Anti-Ship Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Strategy & Support"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Back", + commandPoints: 18, + serviceLimit: 8 + }, + { + id: 106, + name: "KCCPV2.0", + title: "Light Attack Cruiser", + img: "/ships/kccpv20_a.png", + type: "Cruiser", + variant: "A", + variantName: "Integrated Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Outstanding Firepower", "Strategy & Support"], + scope: "Projectile Weapon", + weight: 10, + row: "Back", + commandPoints: 16, + serviceLimit: 12 + }, + { + id: 107, + name: "KCCPV2.0", + title: "Light Pulse Attack Cruiser", + img: "/ships/kccpv20_b.png", + type: "Cruiser", + variant: "B", + variantName: "Pulse Cannon Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Outstanding Firepower"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Middle", + commandPoints: 16, + serviceLimit: 12 + }, + { + id: 108, + name: "KCCPV2.0", + title: "Light Railgun Cruiser", + img: "/ships/kccpv20_c.png", + type: "Cruiser", + variant: "C", + variantName: "Railgun Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Empty"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Middle", + commandPoints: 16, + serviceLimit: 12 + }, + { + id: 109, + name: "KCCPV2.0", + title: "Light Aircraft Cruiser", + img: "/ships/kccpv20_d.png", + type: "Cruiser", + variant: "D", + variantName: "Aircraft Type", + hasVariants: true, + manufacturer: "Dawn Accord", + direction: ["Empty"], + scope: "Empty", + weight: 10, + row: "Back", + commandPoints: 16, + serviceLimit: 12, + largeFighterCapacity: 2 + }, + { + id: 110, + name: "Light Cone", + title: "Multi-Role Missile Cruiser Cruiser", + img: "/ships/light_cone_a.png", + type: "Cruiser", + variant: "A", + variantName: "Generic Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Empty"], + scope: "Projectile Weapon", + weight: 5, + row: "Middle", + commandPoints: 20, + serviceLimit: 8 + }, + { + id: 111, + name: "Light Cone", + title: "Area-Denial Anti-Aircraft Cruiser", + img: "/ships/light_cone_b.png", + type: "Cruiser", + variant: "B", + variantName: "Anti-Aircraft Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Strategy & Support"], + scope: "Projectile Weapon", + weight: 5, + row: "Middle", + commandPoints: 20, + serviceLimit: 8 + }, + { + id: 112, + name: "Light Cone", + title: "Offensive Missile Cruiser", + img: "/ships/light_cone_c.png", + type: "Cruiser", + variant: "C", + variantName: "Assault Type", + hasVariants: true, + manufacturer: "NOMA Shipping", + direction: ["Outstanding Firepower"], + scope: "Projectile Weapon", + weight: 5, + row: "Middle", + commandPoints: 20, + serviceLimit: 8 + }, + { + id: 113, + name: "Ranger", + title: "Comprehensive Warfare Cruiser", + img: "/ships/ranger_a.png", + type: "Cruiser", + variant: "A", + variantName: "Integrated Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Outstanding Firepower"], + scope: "Direct-Fire Weapon", + weight: 10, + row: "Back", + commandPoints: 18, + serviceLimit: 8 + }, + { + id: 114, + name: "Ranger", + title: "Heavy Ion Cannon Cruiser", + img: "/ships/ranger_b.png", + type: "Cruiser", + variant: "B", + variantName: "Ion Cannon Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Outstanding Firepower"], + scope: "Direct-Fire Weapon", + weight: 2, + row: "Back", + commandPoints: 18, + serviceLimit: 8 + }, + { + id: 115, + name: "Predator", + title: "Aircraft Cruiser", + img: "/ships/predator_a.png", + type: "Cruiser", + variant: "A", + variantName: "Generic Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Strategy & Support"], + scope: "Empty", + weight: 10, + row: "Back", + commandPoints: 18, + serviceLimit: 8, + largeFighterCapacity: 4 + }, + { + id: 116, + name: "Predator", + title: "Tactical Aircraft Cruiser", + img: "/ships/predator_b.png", + type: "Cruiser", + variant: "B", + variantName: "Tactical Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Strategy & Support"], + scope: "Empty", + weight: 10, + row: "Back", + commandPoints: 18, + serviceLimit: 8, + largeFighterCapacity: 4 + }, + { + id: 117, + name: "Predator", + title: "Anti-Aircraft Cruiser", + img: "/ships/predator_c.png", + type: "Cruiser", + variant: "C", + variantName: "Anti-Aircraft Type", + hasVariants: true, + manufacturer: "Antonios", + direction: ["Strategy & Support"], + scope: "Empty", + weight: 10, + row: "Back", + commandPoints: 18, + serviceLimit: 8, + largeFighterCapacity: 4 + }, + { + id: 118, + name: "Constantine the Great", + title: "Multi-Role Battlecruiser", + img: "/ships/constantine_the_great_a.png", + type: "Battlecruiser", + variant: "A", + variantName: "Super Type", + hasVariants: false, + manufacturer: "Antonios", + direction: ["Outstanding Firepower"], + scope: "Direct-Fire Weapon", + weight: 2, + row: "Middle", + commandPoints: 35, + serviceLimit: 6, + modules: [ + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "M1", + name: `"Gamma Storm" Ion Attack System`, + default: true, + sourcedFrom: null, + stats: { + type: "weapon", + antiship: 9000, + antiair: null, + siege: 1890, + hp: 19800 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `CI-2x700T "Helium Flash"`, + name: `Dual-Gun Super-Heavy Ion Turret`, + damageType: "Energy", + target: "Large Ship", + lockonEfficiency: null, + alpha: 400, + attributes: null, + stats: { + damageFrequency: 3, + cooldown: 10, + lockOnTime: 6, + duration: 6, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"] + ], + damage: 9000 + }, + siege: { + position: 2, + damage: 1890 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "M2", + name: `"Gamma Storm" Projectile Attack System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: 19885, + antiair: null, + siege: 1478, + hp: 19800 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `CI-2x600T "Gamma Storm"`, + name: `Energy Torpedo Launching System`, + damageType: "Energy", + target: "Large Ship", + alpha: 1740, + lockonEfficiency: 10, + attributes: ["Crit"], + stats: { + attacksPerRound: [2, 1], + cooldown: 10.5, + lockOnTime: 6, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ], + damage: 19885 + }, + siege: { + position: 2, + damage: 1478 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A1", + name: `"Gamma Storm" Projectile Weapon System`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 23717, + antiair: null, + siege: 1920, + hp: 19800 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `CM-8x608A "Gamma Storm"`, + name: `Generic Missile Launching System`, + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 850, + attributes: null, + stats: { + duration: 8, + attacksPerRound: [1, 8], + cooldown: 26, + lockOnTime: 6, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ], + damage: 23717 + }, + siege: { + position: 2, + damage: 1920 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A2", + name: `"Gamma Storm" Projectile Weapon System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: 29393, + antiair: 1163, + siege: 2287, + hp: 19800 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `CM-8x608 "Gamma Storm"`, + name: `Pulse-Energy Missile Launching System`, + damageType: "Energy", + target: "Large Ship", + lockonEfficiency: null, + alpha: 700, + attributes: null, + stats: { + duration: 12, + attacksPerRound: [1, 8], + cooldown: 25, + lockOnTime: 6, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ], + damage: 19978 + }, + siege: { + position: 2, + damage: 1997 + } + } + } + }, + { + type: "weapon", + count: 2, + title: "CM-12x550", + name: `Dodeca-Fire Anti-Ship Missile System`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: 10, + alpha: 350, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + duration: 12, + attacksPerRound: [1, 12], + cooldown: 40, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Battleship"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ], + damage: 9415 + }, + antiair: { + position: 2, + priorities: [ + [3, "Corvette"], + [4, "Fighter"] + ], + damage: 1163 + }, + siege: { + position: 3, + damage: 290 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "B1", + name: `Generic Battery System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: 10628, + antiair: 270, + siege: 1461, + hp: 19800 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `CG-1350`, + name: `350mm Dual-Cannon Anti-Ship Battery`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: null, + alpha: 250, + attributes: null, + stats: { + attacksPerRound: [2, 1], + cooldown: 7, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ], + damage: 8228 + }, + siege: { + position: 2, + damage: 1371 + } + } + } + }, + { + type: "weapon", + count: 4, + title: `CG-1160B`, + name: `Generic Cannon`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: null, + alpha: 50, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + attacksPerRound: [1, 1], + cooldown: 4, + lockOnTime: 3, + targetPriority: { + antiship: { + position: 2, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ], + damage: 2400 + }, + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 270 + }, + siege: { + position: 3, + damage: 90 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "B2", + name: `Pulse Anti-Aircraft System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: 3465, + antiair: 1365, + siege: null, + hp: 19800 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `CP-3x220`, + name: `Triple-Fire Anti-Aircraft Pulse`, + damageType: "Energy", + target: "Aircraft", + lockonEfficiency: 60, + alpha: 40, + attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"], + stats: { + attacksPerRound: [3, 1], + cooldown: 4, + lockOnTime: 3, + targetPriority: { + antiship: { + position: 2, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ], + damage: 3465 + }, + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 950 + } + } + } + }, + { + type: "weapon", + count: 4, + title: `CP-120`, + name: `Anti-Missile Pulse Array`, + damageType: "Energy", + target: "Aircraft", + lockonEfficiency: 60, + alpha: 40, + attributes: ["Interception Capability", "Anti-Aircraft Counterattack"], + stats: { + attacksPerRound: [1, 1], + cooldown: 2, + lockOnTime: 3, + targetPriority: { + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 415 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "B3", + name: `Anti-Aircraft Missile System`, + sourcedFrom: ["Windserpent", "The Enlightened"], + stats: { + type: "weapon", + antiship: 2400, + antiair: 1548, + siege: null, + hp: 19800 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `MK2-CM-4x200B "Storm"`, + name: `Missile Launcher Nest`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: 60, + alpha: 35, + attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Cycle", "Anti-Aircraft Support"], + stats: { + duration: 2, + attacksPerRound: [1, 4], + cooldown: 6, + lockOnTime: 3, + targetPriority: { + antiship: { + position: 2, + damage: 1500, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ] + }, + antiair: { + position: 1, + damage: 1080, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ] + } + } + } + }, + { + type: "weapon", + count: 2, + title: `CM-2x188B`, + name: `Missile Launcher Array`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: 60, + alpha: 25, + attributes: ["Interception Capability", "Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"], + stats: { + attacksPerRound: [1, 1], + cooldown: 2, + lockOnTime: 3, + targetPriority: { + antiship: { + position: 2, + damage: 900, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ] + }, + antiair: { + position: 1, + damage: 468, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ] + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/jamming.png", + system: "C1", + name: `Additional Energy System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 15750 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `RIT-650`, + name: `Energy Compression Device`, + attributes: ["Increase Energy Weapon Damage"] + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "C2", + name: `Aircraft Module`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 18000 + }, + subsystems: [ + { + type: "hanger", + count: 2, + title: `CBF-200`, + name: `Medium Hanger`, + hanger: "Medium Fighter", + capacity: 1, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "C3", + name: `Recon UAV System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 18000 + }, + subsystems: [ + { + type: "hanger", + count: 3, + title: "CIT-1", + name: `Fire-Control Spotter UAV Hanger`, + hanger: "Spotter UAV", + capacity: 3, + attributes: ["Ship Calibration Support"], + stats: { + duration: 30, + operationCount: [1, 1], + cooldown: 10, + lockOnTime: 3, + targetPriority: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Auxiliary Ship"], + [1, "Battlecruiser"], + [1, "Cruiser"] + ] + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "D1", + name: `Short-Range Anti-Aircraft System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: null, + antiair: 792, + siege: null, + hp: 19800 + }, + subsystems: [ + { + type: "weapon", + count: 4, + title: `CM-2x45B`, + name: `Short-Range Anti-Aircraft Missile`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: 60, + alpha: 35, + attributes: ["Anti-Aircraft Critical Strike", "Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"], + stats: { + duration: 1, + attacksPerRound: [1, 2], + cooldown: 2, + lockOnTime: 3, + targetPriority: { + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 792 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/armor.png", + system: "D2", + name: `Targeted Protection System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 18000 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: "ASM-220", + name: `Critical-System Reinforced Armor`, + attributes: ["Reduce System Crit Damage Taken"] + } + ] + }, + { + type: "known", + img: "/weapons/icons/storage.png", + system: "D3", + name: `Damage Control System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hpRecovery: 4800, + hp: 15750 + }, + subsystems: [ + { + type: "misc", + count: 4, + title: "AST-50", + name: `Damage Monitoring System`, + attributes: null + } + ] + } + ] + }, + { + id: 119, + name: "Eternal Storm", + title: "Attack Battlecruiser", + img: "/ships/eternal_storm_a.png", + type: "Battlecruiser", + variant: "A", + variantName: "Super Type", + hasVariants: false, + manufacturer: "Jupiter Industry", + direction: ["Outstanding Firepower"], + scope: "Direct-Fire Weapon", + weight: 2, + row: "Middle", + commandPoints: 32, + serviceLimit: 6, + modules: [ + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "M1", + name: `"Viggen" Ion Generation System`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 20000, + antiair: null, + siege: 4200, + hp: 18000 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `AI-900A "Viggen"`, + name: `Ion Cannon`, + damageType: "Energy", + target: "Large Ship", + lockonEfficiency: null, + alpha: 1200, + attributes: null, + stats: { + duration: 8, + cooldown: 10, + damageFrequency: 5, + lockOnTime: 6, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ], + damage: 20000 + }, + siege: { + position: 2, + damage: 4200 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "M2", + name: `Experimental Plasma Caster`, + sourcedFrom: ["Windserpent", "Sector"], + stats: { + type: "weapon", + antiship: 23538, + antiair: 2824, + siege: 4236, + hp: 18000 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `AIM-850T`, + name: `Plasma Caster`, + damageType: "Energy", + target: "Large Ship", + lockonEfficiency: 10, + alpha: 850, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + duration: 20, + attacksPerRound: [1, 6], + cooldown: 6, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"], + [3, "Destroyer"], + [3, "Frigate"] + ], + damage: 23538 + }, + antiair: { + position: 2, + priorities: [ + [4, "Corvette"], + [5, "Fighter"] + ], + damage: 2824 + }, + siege: { + position: 3, + damage: 4236 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A1", + name: `"Eternal Polaris" Mk II Projectile Launching System`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 12240, + antiair: 396, + siege: 1539, + hp: 18000 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `MK3-AT-800A "Supernova-White"`, + name: `Anti-Ship Torpedo`, + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 1600, + attributes: null, + stats: { + attacksPerRound: [1, 1], + cooldown: 20, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [1, "Auxiliary Ship"] + ], + damage: 9540 + }, + siege: { + position: 2, + damage: 1440 + } + } + } + }, + { + type: "weapon", + count: 2, + title: `MK2-AM-8x300B "Eternal Polaris K"`, + name: `Cluster Missile`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: 10, + alpha: 55, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + attacksPerRound: [4, 1], + cooldown: 8, + lockOnTime: 4, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"] + ], + damage: 2700 + }, + antiair: { + position: 2, + priorities: [ + [2, "Corvette"], + [3, "Fighter"] + ], + damage: 396 + }, + siege: { + position: 3, + damage: 99 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A2", + name: `"Eternal Polaris" Mk II Projectile Launching System`, + sourcedFrom: ["Windserpent", "Sector"], + stats: { + type: "weapon", + antiship: 11900, + antiair: null, + siege: 10440, + hp: 18000 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `MK3-AT-750C "Supernova-White"`, + name: `Siege Torpedo Launcher Array`, + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 1200, + attributes: null, + stats: { + duration: 6, + attacksPerRound: [1, 3], + cooldown: 30, + lockOnTime: 4, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ], + damage: 11900 + }, + siege: { + position: 2, + damage: 10440 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A3", + name: `"Eternal Polaris" Mk II Projectile Launching System TEST`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: 12300, + antiair: 396, + siege: 1440, + hp: 18000 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `MK4-AT-1-800AT "Supernova-White"`, + name: `Energy Torpedo`, + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 1600, + attributes: null, + stats: { + attacksPerRound: [1, 1], + cooldown: 20, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [1, "Auxiliary Ship"] + ], + damage: 9600 + }, + siege: { + position: 2, + damage: 1440 + } + } + } + }, + { + type: "weapon", + count: 2, + title: `MK2-AM-16x150B "Eternal Polaris K"`, + name: `Anti-Aircraft Missile Array`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: 60, + alpha: 40, + attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"], + stats: { + duration: 8, + attacksPerRound: [1, 16], + cooldown: 25, + lockOnTime: 4, + targetPriority: { + antiship: { + position: 2, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ], + damage: 2700 + }, + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 396 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "B1", + name: `Generic Cannon Platform`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: 6000, + antiair: 405, + siege: 1110, + hp: 18000 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `AG-2580`, + name: `Dual-Cannon Heavy Battery`, + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 350, + attributes: null, + stats: { + attacksPerRound: [2, 1], + cooldown: 8, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ], + damage: 5100 + }, + siege: { + position: 2, + damage: 1050 + } + } + } + }, + { + type: "weapon", + count: 2, + title: `AG-1120B`, + name: `Rapid-Fire Cannon`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: null, + alpha: 35, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + attacksPerRound: [1, 1], + cooldown: 4, + lockOnTime: 3, + targetPriority: { + antiship: { + position: 2, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ], + damage: 900 + }, + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 405 + }, + siege: { + position: 3, + damage: 60 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "B2", + name: `Generic Close-In Weapon System`, + sourcedFrom: ["Windserpent", "Sector"], + stats: { + type: "weapon", + antiship: 900, + antiair: 405, + siege: 90, + hp: 18000 + }, + subsystems: [ + { + type: "weapon", + count: 4, + title: `AG-1105B`, + name: `Generic Cannon`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: null, + alpha: 25, + attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"], + stats: { + attacksPerRound: [1, 1], + cooldown: 4, + lockOnTime: 3, + targetPriority: { + antiship: { + position: 2, + damage: 900, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ] + }, + antiair: { + position: 1, + damage: 405, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ] + }, + siege: { + position: 3, + damage: 90 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "C1", + name: `NT UAV Anti-Aircraft System`, + sourcedFrom: ["Windserpent", "Sector"], + stats: { + type: "weapon", + antiship: null, + antiair: 3888, + siege: null, + hp: 20250 + }, + subsystems: [ + { + type: "hanger", + count: 3, + title: `NT-1`, + name: `Anti-Aircraft UAV Rack`, + hanger: "Area-Denial Anti-Aircraft UAV", + capacity: 3, + damageType: "Projectile", + alpha: 15, + target: "Aircraft", + lockonEfficiency: null, + attributes: null, + stats: { + attacksPerRound: [1, 1], + cooldown: 2, + lockOnTime: 2, + targetPriority: { + antiair: { + position: 1, + priorities: [ + [1, "Fighter"], + [2, "Corvette"] + ], + damage: 3888 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "C2", + name: `"Thunderstorm" UAV Shield System`, + sourcedFrom: null, + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 20250 + }, + subsystems: [ + { + type: "hanger", + count: 2, + title: `SNT-1`, + name: `Shielded UAV Rack`, + hanger: "Shield UAV", + capacity: 2, + attributes: [`Ship Shielding Support`], + stats: { + duration: 30, + operationCount: [1, 1], + cooldown: 15, + lockOnTime: 3, + targetPriority: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Auxiliary Ship"], + [1, "Battlecruiser"], + [1, "Cruiser"] + ] + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/jamming.png", + system: "C3", + name: `Energy Compensation Armor System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 16200 + }, + subsystems: [ + { + type: "misc", + count: 2, + title: `RIR-220`, + name: `Experimental Energy Compensation Armor`, + attributes: ["Energy Damage Reduction", "Physical Damage Reduction", "Crit Damage Reduction"] + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "D1", + name: `Ion Turret System`, + sourcedFrom: ["Windserpent", "Sector"], + stats: { + type: "weapon", + antiship: 6857, + antiair: null, + siege: 1028, + hp: 18000 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `AI-450A`, + name: `Experimental Ion Turret`, + damageType: "Energy", + target: "Large Ship", + lockonEfficiency: null, + alpha: 800, + attributes: null, + stats: { + duration: 3, + cooldown: 4, + damageFrequency: 1, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + damage: 6857, + priorities: [ + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"] + ] + }, + siege: { + position: 2, + damage: 1028 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "D2", + name: `Pulse Turret System`, + sourcedFrom: ["Windserpent", "Sector"], + stats: { + type: "weapon", + antiship: null, + antiair: 432, + siege: null, + hp: 18000 + }, + subsystems: [ + { + type: "weapon", + count: 4, + title: `AP-130B`, + name: `Rapid-Fire Near-Defense Pulse Cannon`, + damageType: "Energy", + target: "Aircraft", + lockonEfficiency: 60, + alpha: 40, + attributes: ["Interception Capability", "Anti-Aircraft Counterattack"], + stats: { + attacksPerRound: [1, 1], + cooldown: 2, + lockOnTime: 3, + targetPriority: { + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 432 + } + } + } + } + ] + } + ] + }, + { + id: 130, + name: "Shield of Plutus", + title: "Defensive Battlecruiser", + img: "/ships/shield_of_plutus_a.png", + type: "Battlecruiser", + variant: "A", + variantName: "Super Type", + hasVariants: false, + manufacturer: "NOMA Shipping", + direction: ["Outstanding Firepower", "Sustained Combat"], + scope: "Direct-Fire Weapon", + weight: 2, + row: "Middle", + commandPoints: 35, + serviceLimit: 6, + modules: [ + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "M1", + name: `Integrated Weapon System`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 15108, + antiair: 384, + siege: 1851, + hp: 23400 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `AM-4x800C`, + name: `Anti-Ship Missile Array`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: null, + alpha: 450, + attributes: null, + stats: { + duration: 5, + attacksPerRound: [1, 4], + cooldown: 30, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ], + damage: 12068 + }, + siege: { + position: 2, + damage: 1851 + } + } + } + }, + { + type: "weapon", + count: 1, + title: `MK3-BG-2100 "Fortress"`, + name: `Generic Cannon`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: null, + alpha: 200, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + duration: 5, + attacksPerRound: [1, 2], + cooldown: 10, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"] + ], + damage: 3040 + }, + antiair: { + position: 2, + priorities: [ + [2, "Corvette"], + [3, "Fighter"] + ], + damage: 384 + } + } + } + } + ] + }, + { + unknown: true, + type: "unknown", + img: "/weapons/icons/unknown.png", + system: "M2" + }, + { + unknown: true, + type: "unknown", + img: "/weapons/icons/unknown.png", + system: "M3" + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "A1", + name: `"Fortress" Defense System`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 4800, + antiair: null, + siege: null, + hp: 23400 + }, + subsystems: [ + { + type: "hanger", + count: 2, + title: `CIT-A`, + name: "Guard UAV Hanger", + hanger: "Military UAV", + capacity: 2, + damageType: "Energy", + target: "Small Ship", + lockonEfficiency: null, + alpha: 100, + attributes: null, + stats: { + duration: 4, + attacksPerRound: [2, 4], + cooldown: 16, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"] + ], + damage: 4800 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "A2", + name: `"Fortress" Area Fire-Control System A`, + sourcedFrom: null, + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 23900 + }, + subsystems: [ + { + type: "hanger", + count: 2, + title: `CIT-B`, + name: `Fire-Control Spotter UAV Hanger`, + hanger: "Spotter UAV", + capacity: 2, + attributes: ["Damage Resistance"], + stats: { + duration: 30, + operationCount: [1, 1], + cooldown: 10, + lockOnTime: 3, + targetPriority: [ + [1, "Battlecruiser"], + [1, "Carrier"], + [1, "Auxiliary Ship"], + [1, "Battlecruiser"], + [1, "Cruiser"] + ] + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "A3", + name: `"Fortress" Area Fire-Control System B`, + sourcedFrom: null, + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 24900 + }, + subsystems: [ + { + type: "hanger", + count: 2, + title: `CIT-C`, + name: `Fire-Control Spotter UAV Hanger`, + hanger: "Spotter UAV", + capacity: 3, + attributes: ["Damage Resistance II"], + stats: { + duration: 30, + operationCount: [1, 1], + cooldown: 10, + lockOnTime: 3, + targetPriority: [ + [1, "Battlecruiser"], + [1, "Carrier"], + [1, "Auxiliary Ship"], + [1, "Battlecruiser"], + [1, "Cruiser"] + ] + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "B1", + name: `Heavy Projectile Weapon System`, + sourcedFrom: null, + stats: { + type: "weapon", + antiship: 13320, + antiair: null, + siege: 1215, + hp: 24950 + }, + subsystems: [ + { + type: "weapon", + count: 3, + title: `BM-4x1800`, + name: `Anti-Ship Missile Array`, + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 750, + attributes: ["Crit", "Evasive Counterattack"], + stats: { + duration: 10, + attacksPerRound: [1, 4], + cooldown: 30, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battlecruiser"], + [1, "Carrier"], + [1, "Auxiliary Ship"], + [1, "Battlecruiser"], + [1, "Cruiser"] + ], + damage: 13320 + }, + siege: { + position: 2, + damage: 1215 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/storage.png", + system: "B2", + name: `Comprehensive Maintenance System`, + sourcedFrom: null, + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hpRecovery: 8100, + hp: 20800 + }, + subsystems: [ + { + type: "hanger", + count: 2, + title: `CRT-3`, + name: `Engineering UAV Maintenance Pod`, + hanger: "Repair UAV", + capacity: 3, + repair: 8100, + attributes: null + } + ] + }, + { + unknown: true, + type: "unknown", + img: "/weapons/icons/unknown.png", + system: "B3" + }, + { + unknown: true, + type: "unknown", + img: "/weapons/icons/unknown.png", + system: "C1" + }, + { + unknown: true, + type: "unknown", + img: "/weapons/icons/unknown.png", + system: "C2" + }, + { + unknown: true, + type: "unknown", + img: "/weapons/icons/unknown.png", + system: "C3" + } + ] + }, + { + id: 120, + name: "Spear of Uranus", + title: "Heavy Battlecruiser", + img: "/ships/spear_of_uranus_a.png", + type: "Battlecruiser", + variant: "A", + variantName: "Super Type", + hasVariants: false, + manufacturer: "NOMA Shipping", + direction: ["Outstanding Firepower", "Sustained Combat"], + scope: "Direct-Fire Weapon", + weight: 2, + row: "Front", + commandPoints: 35, + serviceLimit: 6, + modules: [ + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "M1", + name: `Bow Railgun System`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 12950, + antiair: null, + siege: 11310, + hp: 19800 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `BR-1950C "Ruby"`, + name: `Bow-Mounted Siege Railgun`, + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 2600, + attributes: null, + stats: { + attacksPerRound: [1, 1], + cooldown: 12, + lockOnTime: 7, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battleship"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ], + damage: 12950 + }, + siege: { + position: 2, + damage: 11310 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "M2", + name: `Ion Turret System`, + sourcedFrom: ["Windserpent", "Sector"], + stats: { + type: "weapon", + antiship: 12857, + antiair: null, + siege: 1800, + hp: 19800 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `BI-850`, + name: `Dual-Fire Heavy Ion Turret`, + damageType: "Energy", + target: "Large Ship", + lockonEfficiency: null, + alpha: 750, + attributes: null, + stats: { + duration: 6, + cooldown: 10.5, + damageFrequency: 3, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"] + ], + damage: 12857 + }, + siege: { + position: 2, + damage: 1800 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A1", + name: `"Fortress" Battery System A`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 15700, + antiair: 816, + siege: 3075, + hp: 19800 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `BG-1850`, + name: `Heavy Cannon`, + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 950, + attributes: null, + stats: { + attacksPerRound: [1, 1], + cooldown: 12, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ], + damage: 9400 + }, + siege: { + position: 2, + damage: 2755 + } + } + } + }, + { + type: "weapon", + count: 3, + title: `BG-2240`, + name: `Anti-Ship Cannon`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: 10, + alpha: 100, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + attacksPerRound: [2, 1], + cooldown: 9, + lockOnTime: 4, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Battleship"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ], + damage: 3600 + }, + antiair: { + position: 2, + priorities: [ + [3, "Corvette"], + [4, "Fighter"] + ], + damage: 420 + }, + siege: { + position: 3, + damage: 320 + } + } + } + }, + { + type: "weapon", + count: 4, + title: `BG-340B`, + name: `Anti-Aircraft Cannon`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: 45, + alpha: 10, + attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"], + stats: { + duration: 3, + attacksPerRound: [1, 3], + cooldown: 3, + lockOnTime: 2, + targetPriority: { + antiship: { + position: 2, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ], + damage: 2700 + }, + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 396 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A2", + name: `"Fortress" Battery System B`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: 18566, + antiair: 396, + siege: 2880, + hp: 19800 + }, + subsystems: [ + { + type: "weapon", + count: 4, + title: `BG-1950`, + name: `Heavy Cannon`, + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 1200, + attributes: null, + stats: { + attacksPerRound: [1, 1], + cooldown: 18, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ], + damage: 15866 + }, + siege: { + position: 2, + damage: 2880 + } + } + } + }, + { + type: "weapon", + count: 4, + title: `BG-340B`, + name: `Anti-Aircraft Cannon`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: 45, + alpha: 10, + attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"], + stats: { + duration: 3, + attacksPerRound: [1, 3], + cooldown: 3, + lockOnTime: 2, + targetPriority: { + antiship: { + position: 2, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ], + damage: 2700 + }, + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 396 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A3", + name: `"Fortress" Battery System F`, + sourcedFrom: ["Windserpent", "Sector"], + stats: { + type: "weapon", + antiship: 17220, + antiair: 1026, + siege: 1800, + hp: 19800 + }, + subsystems: [ + { + type: "weapon", + count: 6, + title: `BG-2350`, + name: `Anti-Ship Cannon`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: 10, + alpha: 200, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + attacksPerRound: [2, 1], + cooldown: 8, + lockOnTime: 4, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Battleship"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ], + damage: 17100 + }, + antiair: { + position: 2, + priorities: [ + [3, "Corvette"], + [4, "Fighter"] + ], + damage: 810 + }, + siege: { + position: 3, + damage: 1800 + } + } + } + }, + { + type: "weapon", + count: 4, + title: `BG-340B`, + name: `Anti-Aircraft Cannon`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: 45, + alpha: 10, + attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"], + stats: { + duration: 3, + attacksPerRound: [1, 3], + cooldown: 3, + lockOnTime: 2, + targetPriority: { + antiship: { + position: 2, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ], + damage: 120 + }, + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 216 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "B1", + name: `"Minecart" Projectile Launching Array`, + sourcedFrom: ["Windserpent", "Sector"], + stats: { + type: "weapon", + antiship: 5940, + antiair: 680, + siege: 259, + hp: 19800 + }, + subsystems: [ + { + type: "weapon", + count: 3, + title: `BM-12x250`, + name: `Generic Missile Launching Array`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: null, + alpha: 120, + attributes: ["Interception Capability", "Anti-Aircraft Counterattack"], + stats: { + duration: 12, + attacksPerRound: [1, 12], + cooldown: 28, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 2, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ], + damage: 5940 + }, + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 680 + }, + siege: { + position: 3, + damage: 259 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "B2", + name: `Corvette Dock`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 23850 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CBC-2300`, + name: `Corvette Mounting Dock`, + hanger: "Corvette", + capacity: 3, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/storage.png", + system: "B3", + name: `Integrated Damage Control System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hpRecovery: 5454, + hp: 19800 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CRT-3`, + name: `Engineering UAV Maintenance Pod`, + hanger: "Repair UAV", + capacity: 2, + repair: 5454, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/jamming.png", + system: "C1", + name: `Distributed Weapon Control System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 18000 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `XI-1200`, + name: "Distributed Fire Control Radar", + attributes: ["Increase Hit Rate"] + } + ] + }, + { + type: "known", + img: "/weapons/icons/armor.png", + system: "C2", + name: `Additional Armor System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: 0, + extraHP: 32484, + energyShield: 0, + hp: 27000 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `ASX-150`, + name: "Energized Nano Armor", + attributes: ["Additional HP Auto-Repair"] + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "C3", + name: `Anti-Missile System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: null, + antiair: 324, + siege: null, + hp: 19800 + }, + subsystems: [ + { + type: "weapon", + count: 3, + title: `BG-625C`, + name: `Area Anti-Missile Cannon`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: null, + alpha: 10, + attributes: ["Interception Capability (Fleet)", "Anti-Aircraft Special Ammo", "Anti-Aircraft Support"], + stats: { + duration: 3, + attacksPerRound: [1, 6], + cooldown: 4, + lockOnTime: 2, + targetPriority: { + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 324 + } + } + } + } + ] + } + ] + }, + { + id: 121, + name: "ST59", + title: "Defensive Battlecruiser", + img: "/ships/st59_a.png", + type: "Battlecruiser", + variant: "A", + variantName: "Super Type", + hasVariants: false, + manufacturer: "Dawn Accord", + direction: ["Sustained Combat", "Strategy & Support"], + scope: "Direct-Fire Weapon", + weight: 5, + row: "Middle", + commandPoints: 28, + serviceLimit: 6, + modules: [ + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "M1", + name: "Assault Railgun System", + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 10350, + antiair: null, + siege: 3360, + hp: 15750 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `SR-2600`, + name: `Heavy Railgun`, + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 735, + attributes: null, + stats: { + attacksPerRound: [2, 1], + cooldown: 16, + lockOnTime: 8, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ], + damage: 10350 + }, + siege: { + position: 2, + damage: 3360 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "M2", + name: `Bow Mounted Battery System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: 11400, + antiair: null, + siege: 960, + hp: 15750 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `SG-2400`, + name: `Dual-Cannon Rapid-Fire Battery`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: null, + alpha: 200, + attributes: null, + stats: { + attacksPerRound: [2, 2], + cooldown: 6, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ], + damage: 11400 + }, + siege: { + position: 2, + damage: 960 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "M3", + name: `Assault Torpedo System`, + sourcedFrom: ["Windserpent", "OZY"], + stats: { + type: "weapon", + antiship: 11200, + antiair: null, + siege: 2266, + hp: 15750 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `ST-2600`, + name: `Heavy Torpedo Launcher`, + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 850, + attributes: ["Crit"], + stats: { + duration: 2, + attacksPerRound: [1, 2], + cooldown: 16, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + damage: 11200, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ] + }, + siege: { + position: 2, + damage: 2266 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A1", + name: `Large Cannon Platform`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 7875, + antiair: 216, + siege: 1206, + hp: 15750 + }, + subsystems: [ + { + type: "weapon", + count: 3, + title: `MK4-SG-2580 "Thunderbolt"`, + name: `Dual-Cannon Heavy Battery`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: null, + alpha: 280, + attributes: null, + stats: { + attacksPerRound: [2, 1], + cooldown: 16, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ], + damage: 6075 + }, + siege: { + position: 2, + damage: 1134 + } + } + } + }, + { + type: "weapon", + count: 4, + title: `SG-1120`, + name: `Generic Cannon`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: null, + alpha: 40, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + attacksPerRound: [1, 1], + cooldown: 4, + lockOnTime: 3, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"] + ], + damage: 1800 + }, + antiair: { + position: 2, + priorities: [ + [2, "Corvette"], + [3, "Fighter"] + ], + damage: 216 + }, + siege: { + position: 3, + damage: 72 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A2", + name: `Railgun Turret Array`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: 9900, + antiair: null, + siege: 1923, + hp: 15750 + }, + subsystems: [ + { + type: "weapon", + count: 3, + title: `SR-1425`, + name: `Railgun Turret`, + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 450, + attributes: null, + stats: { + attacksPerRound: [1, 1], + cooldown: 8, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Destroyer"], + [2, "Frigate"] + ], + damage: 9900 + }, + siege: { + position: 2, + damage: 1923 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A3", + name: `Pulse Turret Array`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: 7500, + antiair: 787, + siege: 1200, + hp: 15750 + }, + subsystems: [ + { + type: "weapon", + count: 3, + title: `SP-430`, + name: `Pulse Turret`, + damageType: "Energy", + target: "Small Ship", + lockonEfficiency: 10, + alpha: 250, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + attacksPerRound: [1, 1], + cooldown: 6, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Battleship"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ], + damage: 7500 + }, + antiair: { + position: 2, + priorities: [ + [3, "Corvette"], + [4, "Fighter"] + ], + damage: 787 + }, + siege: { + position: 3, + damage: 1200 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "B1", + name: `Integrated Projectile Weapon Platform`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: 8188, + antiair: null, + siege: 1185, + hp: 15750 + }, + subsystems: [ + { + type: "weapon", + count: 4, + title: `K-ST-12-255A`, + name: `3x4 Cluster Torpedo Launching System`, + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 300, + attributes: null, + stats: { + attacksPerRound: [1, 4], + cooldown: 30, + lockOnTime: 4, + duration: 4, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"] + ], + damage: 8188 + }, + siege: { + position: 2, + damage: 1185 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "B2", + name: `Aircraft System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 15300 + }, + subsystems: [ + { + type: "hanger", + count: 2, + title: `CBF-305`, + name: "Medium Hanger", + hanger: "Medium Fighter", + capacity: 2, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "B3", + name: `Area Fire-Control System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 15300 + }, + subsystems: [ + { + type: "hanger", + count: 2, + title: `CIT-1`, + name: `Fire-Control Spotter UAV Hanger`, + hanger: "Spotter UAV", + capacity: 3, + attributes: ["Ship Calibration Support"], + stats: { + targetPriority: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Auxiliary Ship"], + [1, "Battlecruiser"], + [1, "Cruiser"] + ], + duration: 30, + operationCount: [1, 1], + cooldown: 10, + lockOnTime: 3 + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/armor.png", + system: "C1", + name: `Additional Armor System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: 0, + extraHP: 27302, + energyShield: 0, + hp: 15750 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `ASX-100`, + name: "Additional Armor", + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/armor.png", + system: "C2", + name: `EM Armor System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: 0, + extraHP: 0, + energyShield: 20, + hp: 15750 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `AEX-120`, + name: "EM Armor", + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/armor.png", + system: "C3", + name: "Heavy Defensive Armor System", + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: 250, + extraHP: 0, + energyShield: 0, + hp: 15750 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `ASX-130`, + name: "Additional Armor", + attributes: ["Reduce Evasion", "Reduce Hit Rate"] + } + ] + } + ] + }, + { + id: 122, + name: "Thunderbolt Star", + title: "Multi-Role Arsenal Ship", + img: "/ships/thunderbolt_star_a.png", + type: "Battlecruiser", + variant: "A", + variantName: "Super Type", + hasVariants: false, + manufacturer: "Empty", + direction: ["Outstanding Firepower", "Strategy & Support"], + scope: "Direct-Fire Weapon", + weight: 2, + row: "Middle", + commandPoints: 35, + serviceLimit: 6, + modules: [ + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "M1", + name: `"Thunderbolt" Bow-Mounted Weapon System`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 27225, + antiair: null, + siege: 5744, + hp: 23400 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `HR-1850`, + name: `Long-Rail Railgun`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: null, + alpha: 2127, + attributes: null, + stats: { + duration: 14, + attacksPerRound: [1, 6], + cooldown: 14, + lockOnTime: 10, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Battleship"], + [2, "Carrier"], + [2, "Battlecruiser"] + ], + damage: 27225 + }, + siege: { + position: 2, + damage: 5744 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "M2", + name: `"Thunderbolt" Bow-Mounted Projectile Weapon System`, + sourcedFrom: ["Thalleous"], + stats: { + type: "weapon", + antiship: 27168, + antiair: null, + siege: 5705, + hp: 23400 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `HT-1-850`, + name: "High Energy Torpedo Launcher", + damageType: "Energy", + target: "Large Ship", + lockonEfficiency: null, + alpha: 2070, + attributes: ["Crit"], + stats: { + duration: 16, + attacksPerRound: [1, 7], + cooldown: 16, + lockOnTime: 15, + targetPriority: { + antiship: { + position: 1, + damage: 27168, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ] + }, + siege: { + position: 2, + damage: 5705 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "M3", + name: `"Thunderbolt Star" Bow-Mounted High-Energy Weapon System`, + sourcedFrom: ["Thalleous"], + stats: { + type: "weapon", + antiship: 33120, + antiair: null, + siege: 3312, + hp: 23400 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `HT-1250T`, + name: `Experimental Super High-Energy Ion Cannon`, + damageType: "Energy", + target: "Large Ship", + lockonEfficiency: null, + alpha: 2760, + attributes: null, + stats: { + duration: 10, + cooldown: 20, + damageFrequency: 6, + lockOnTime: 15, + targetPriority: { + antiship: { + position: 1, + damage: 33120, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ] + }, + siege: { + position: 2, + damage: 3312 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A1", + name: `Rapid-Fire Anti-Ship Weapon System`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 12636, + antiair: 1266, + siege: 1407, + hp: 23400 + }, + subsystems: [ + { + type: "weapon", + count: 4, + title: `HG-1220`, + name: "Rapid-Fire Artillery Array", + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: null, + alpha: 97, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + duration: 18, + attacksPerRound: [1, 18], + cooldown: 12, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"] + ], + damage: 12636 + }, + antiair: { + position: 2, + priorities: [ + [2, "Corvette"], + [3, "Fighter"] + ], + damage: 1266 + }, + siege: { + position: 3, + damage: 1407 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A2", + name: `Medium Anti-Ship Weapon System`, + sourcedFrom: null, + stats: { + type: "weapon", + antiship: 14184, + antiair: null, + siege: 1490, + hp: 23400 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `HG-2280`, + name: "Dual-Cannon Stationary Heavy Battery", + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: null, + alpha: 207, + attributes: null, + stats: { + duration: 18, + attacksPerRound: [2, 9], + cooldown: 12, + lockOnTime: 10, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ], + damage: 14184 + }, + siege: { + position: 2, + damage: 1490 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "B1", + name: "Active Anti-Aircraft System", + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 3375, + antiair: 465, + siege: null, + hp: 23400 + }, + subsystems: [ + { + type: "weapon", + count: 4, + title: `HM-4x60B`, + name: "Mid-Range Anti-Aircraft Missile Array", + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: 60, + alpha: 28, + attributes: ["Anti-Aircraft Support"], + stats: { + duration: 16, + attacksPerRound: [4, 6], + cooldown: 16, + lockOnTime: 4, + targetPriority: { + antiship: { + position: 2, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ], + damage: 3375 + }, + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 465 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "B2", + name: "Range Interception System", + sourcedFrom: null, + stats: { + type: "weapon", + antiship: null, + antiair: 345, + siege: null, + hp: 23400 + }, + subsystems: [ + { + type: "weapon", + count: 4, + title: `HP-100B`, + name: "Anti-Aircraft Pulse Array", + damageType: "Energy", + target: "Aircraft", + lockonEfficiency: 60, + alpha: 28, + attributes: ["Interception Capability", "Anti-Aircraft Support"], + stats: { + duration: 15, + attacksPerRound: [1, 15], + cooldown: 12, + lockOnTime: 2, + targetPriority: { + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 345 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/jamming.png", + system: "C1", + name: "Weapon Coordination Center", + sourcedFrom: null, + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 23400 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `HNI-260`, + name: "Weapon Activation Device", + attributes: ["Oscillatory Excitation"] + } + ] + }, + { + type: "known", + img: "/weapons/icons/jamming.png", + system: "C2", + name: "Fire-Control Calibration System", + sourcedFrom: null, + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 23400 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `HNA-240`, + name: "Real-Time Target Callibration Module", + attributes: ["Collaborative Calibration"] + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "D1", + name: "Accurate Projectile Weapon System", + sourcedFrom: null, + stats: { + type: "weapon", + antiship: 9140, + antiair: 1164, + siege: 970, + hp: 23400 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `HM-1x220A`, + name: "Mid-Range Anti-Ship Missile", + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: 10, + alpha: 172, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + duration: 16, + attacksPerRound: [1, 15], + cooldown: 16, + lockOnTime: 7, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Battleship"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ], + damage: 9140 + }, + antiair: { + position: 2, + priorities: [ + [3, "Corvette"], + [4, "Fighter"] + ], + damage: 1164 + }, + siege: { + position: 3, + damage: 970 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "D2", + name: "Large Projectile Weapon System", + sourcedFrom: null, + stats: { + type: "weapon", + antiship: 9776, + antiair: null, + siege: 2086, + hp: 23400 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `HT-1-450`, + name: "Large Torpedo Launcher", + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 631, + attributes: ["Crit"], + stats: { + duration: 15, + attacksPerRound: [1, 8], + cooldown: 15, + lockOnTime: 10, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ], + damage: 9776 + }, + siege: { + position: 2, + damage: 2086 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "E1", + name: "Multi-Target Weapon System", + sourcedFrom: ["Thalleous"], + stats: { + type: "weapon", + antiship: 6990, + antiair: 910, + siege: 759, + hp: 23400 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `HG-1220A`, + name: "Multi-Target Anti-Ship Battery", + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: null, + alpha: 126, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + duration: 20, + attacksPerRound: [1, 15], + cooldown: 10, + lockOnTime: 4, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"] + ], + damage: 6990 + }, + antiair: { + position: 2, + priorities: [ + [2, "Corvette"], + [3, "Fighter"] + ], + damage: 910 + }, + siege: { + position: 3, + damage: 759 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "E2", + name: "Multi-Target Anti-Aircraft System", + sourcedFrom: ["Thalleous"], + stats: { + type: "weapon", + antiship: null, + antiair: 633, + siege: null, + hp: 23400 + }, + subsystems: [ + { + type: "weapon", + count: 3, + title: `HG-1120B`, + name: "Multi-Target Anti-Aircraft Turret", + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: 60, + alpha: 40, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + duration: 18, + attacksPerRound: [1, 25], + cooldown: 12, + lockOnTime: 2, + targetPriority: { + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 633 + } + } + } + } + ] + } + ] + }, + { + id: 123, + name: "Ediacaran", + title: "Heavy Firepower Auxiliary Ship", + img: "/ships/ediacaran_a.png", + type: "Auxiliary Ship", + variant: "A", + variantName: "Super Type", + hasVariants: false, + manufacturer: "NOMA Shipping", + direction: ["Outstanding Firepower", "Strategy & Support"], + scope: "Empty", + weight: 2, + row: "Middle", + commandPoints: 40, + serviceLimit: 2, + modules: [ + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "M1", + name: "Fortress Bow-Mounted Heavy Cannon System", + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 11057, + antiair: 394, + siege: 1756, + hp: 18900 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `"Fortress" MK4-BG-2560`, + name: `Dual-Cannon Heavy Bow Battery`, + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 650, + attributes: null, + stats: { + duration: 8, + attacksPerRound: [2, 2], + cooldown: 11, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ], + damage: 8084 + }, + siege: { + position: 2, + damage: 1231 + } + } + } + }, + { + type: "weapon", + count: 2, + title: `BG-1260`, + name: `Anti-Ship Turret`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: 10, + alpha: 105, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + duration: 15, + attacksPerRound: [2, 3], + cooldown: 8, + lockOnTime: 8, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Battleship"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ], + damage: 2973 + }, + antiair: { + position: 2, + priorities: [ + [3, "Corvette"], + [4, "Fighter"] + ], + damage: 394 + }, + siege: { + position: 3, + damage: 525 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "M2", + name: `Fortress Assault Railgun System`, + sourcedFrom: null, + stats: { + type: "weapon", + antiship: 11519, + antiair: 800, + siege: 3150, + hp: 18900 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `"Fortress" MK4-BG-1850A`, + name: `Bow-Mounted Assault Heavy Railgun`, + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 2250, + attributes: ["Crit"], + stats: { + attacksPerRound: [1, 1], + cooldown: 12, + lockOnTime: 15, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ], + damage: 11200 + }, + siege: { + position: 2, + damage: 3150 + } + } + } + }, + { + type: "weapon", + count: 2, + title: `BM-2x280B`, + name: `Anti-Aircraft Missile Launcher Array`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: 45, + alpha: 25, + attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"], + stats: { + duration: 5, + attacksPerRound: [1, 4], + cooldown: 4, + lockOnTime: 3, + targetPriority: { + antiship: { + position: 2, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ], + damage: 319 + }, + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 800 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/jamming.png", + system: "A1", + name: "Frigates Production System", + sourcedFrom: null, + default: true, + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 18800 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `MF-2500`, + name: "Frigates Independent Production Facility", + attributes: ["Self-holding Capability"] + }, + { + type: "misc", + count: 1, + title: `BMP-60`, + name: "Production Line Modification Module", + attributes: ["Increase Production Speed"] + } + ] + }, + { + type: "known", + img: "/weapons/icons/jamming.png", + system: "A2", + name: "Corvette Production System", + sourcedFrom: null, + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 19800 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `MC-2500`, + name: "Corvette Independent Production Facility", + attributes: null + }, + { + type: "misc", + count: 1, + title: `BMP-60`, + name: "Production Line Modification Module", + attributes: ["Increase Production Speed"] + } + ] + }, + { + type: "known", + img: "/weapons/icons/jamming.png", + system: "A3", + name: "Destroyer Production System", + sourcedFrom: null, + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 18800 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `MD-2500`, + name: "Destroyer Independent Production Facility", + attributes: ["Self-holding Capability"] + }, + { + type: "misc", + count: 1, + title: `BMP-60`, + name: "Production Line Modification Module", + attributes: ["Increase Production Speed"] + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "B1", + name: `"Tundra" Interceptor UAV System`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: null, + antiair: 4608, + siege: null, + hp: 19350 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CAT/R-6`, + name: `Area-Denial Anti-Aircraft UAV Pod`, + hanger: "Area-Denial Anti-Aircraft UAV", + capacity: 4, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: null, + alpha: 15, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + attacksPerRound: [4, 1], + cooldown: 3.5, + lockOnTime: 7, + targetPriority: { + antiair: { + position: 1, + priorities: [ + [1, "Fighter"], + [2, "Corvette"] + ], + damage: 4608 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "B2", + name: `"Hummingbird" Firepower Recon UAV System`, + sourcedFrom: ["Somnambulist"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 19350 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CFT-6`, + name: "Firepower Recon UAV Pod", + hanger: "Recon UAV", + capacity: 4, + attributes: ["Firepower Recon Support"], + stats: { + duration: 30, + operationCount: [1, 1], + cooldown: 1, + lockOnTime: 0, + targetPriority: [ + [1, "Carrier"], + [1, "Auxiliary Ship"], + [1, "Battlecruiser"], + [1, "Cruiser"] + ] + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "B3", + name: `"Colossus" Guard UAV System`, + sourcedFrom: ["Sector"], + stats: { + type: "weapon", + antiship: 7340, + antiair: null, + siege: 732, + hp: 19350 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CFV-2`, + name: "Guard UAV Platform", + hanger: "Guard UAV", + capacity: 4, + attributes: null, + damageType: "Energy", + target: "Small Ship", + lockonEfficiency: null, + alpha: 65, + stats: { + duration: 6, + attacksPerRound: [1, 8], + cooldown: 11, + lockOnTime: 8, + targetPriority: { + antiship: { + position: 1, + damage: 7340, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"] + ] + }, + siege: { + position: 2, + damage: 732 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "C1", + name: `Aircraft Loading System`, + sourcedFrom: ["Toir"], + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 19350 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CBF-200`, + name: "Large Aircraft Hanger", + hanger: "Large Fighter", + capacity: 2, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "C2", + name: `Corvette Dock`, + sourcedFrom: ["Spy Shark"], + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 19350 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CBC-2000`, + name: "Corvette Dock", + hanger: "Corvette", + capacity: 3, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/armor.png", + system: "D1", + name: `Heavy Additional Armor System`, + sourcedFrom: null, + stats: { + type: "armor", + armor: 80, + extraHP: 30069, + energyShield: 0, + hp: 18000 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `ASX-90`, + name: "Heavy Additional Armor", + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/storage.png", + system: "D2", + name: `Nano Automated Maintenance System`, + sourcedFrom: ["Toir"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hpRecovery: 5169, + hp: 18000 + }, + subsystems: [ + { + type: "hanger", + capacity: 2, + hanger: "Repair UAV", + count: 1, + title: `BST-300`, + name: `Nano Repair System`, + repair: 5169, + attributes: null + } + ] + } + ] + }, + { + id: 124, + name: "FSV830", + title: "Fast Tactical Auxiliary Ship", + img: "/ships/fsv830_a.png", + type: "Auxiliary Ship", + variant: "A", + variantName: "Super Type", + hasVariants: false, + manufacturer: "Dawn Accord", + direction: ["Sustained Combat", "Strategy & Support"], + scope: "Empty", + weight: 5, + row: "Back", + commandPoints: 40, + serviceLimit: 2, + modules: [ + { + type: "known", + img: "/weapons/icons/jamming.png", + system: "A1", + name: "Frigates Production System", + sourcedFrom: null, + default: true, + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 21500 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `XE-1250AM`, + name: "Frigates Independent Production Facility", + attributes: ["Self-holding Capability"] + } + ] + }, + { + type: "known", + img: "/weapons/icons/jamming.png", + system: "A2", + name: "Corvette Production System", + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 21500 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `XE-1250AG`, + name: "Corvette Independent Build Facility", + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/jamming.png", + system: "A3", + name: "Fighter Production System", + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 21500 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `MFG-1500`, + name: "Fighter Independent Production Facility", + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/jamming.png", + system: "B1", + name: "Warning and Control System", + sourcedFrom: null, + default: true, + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 22000 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `XE-1250AW`, + name: "Situational Awareness System", + attributes: ["Back-Row Torpedo Hit Evasion", "Back-Row Missile Hit Evasion"] + }, + { + type: "misc", + count: 1, + title: `XC-4500`, + name: "Bridge", + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/jamming.png", + system: "B2", + name: "Coordinate Command System", + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 22000 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `XCE-1250AI`, + name: "Assisted Lock-On Radar", + attributes: [`Increase Back-Row Missile Hit Rate`, `Increase Back-Row Torpedo Hit Rate`] + }, + { + type: "misc", + count: 1, + title: `XC-4500`, + name: "Bridge", + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/jamming.png", + system: "B3", + name: "Camoflage System", + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 22000 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `XS-1250AC`, + name: "Field Signal Disguise Module", + attributes: [`Ship Disguise`] + }, + { + type: "misc", + count: 1, + title: `XC-4500`, + name: "Bridge", + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/jamming.png", + system: "C1", + name: "Engineering Maintenance System", + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 22000 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `BSR-200`, + name: "Quick Repair Device", + attributes: ["Increase Repair Speed"] + } + ] + }, + { + type: "known", + img: "/weapons/icons/storage.png", + system: "C2", + name: "Strategic Resource Storage System", + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + storage: 60000, + hp: 22000 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `W-500`, + name: "Loading Platform", + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "D1", + name: "Aircraft System", + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 21500 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CBF-255`, + name: "Medium Hanger", + hanger: "Medium Fighter", + capacity: 2, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/storage.png", + system: "D2", + name: "Repair UAV System", + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hpRecovery: 5454, + hp: 21500 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CRT-3`, + name: "Engineering UAV Maintenance Pod", + hanger: "Repair UAV", + capacity: 2, + repair: 5454, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "E1", + name: "Area-Defense System", + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: null, + antiair: 882, + siege: null, + hp: 22000 + }, + subsystems: [ + { + type: "weapon", + count: 3, + title: `SM-4x40B`, + name: "Anti-Arcraft Missile Silo", + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: 45, + alpha: 35, + attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Support"], + stats: { + duration: 4, + attacksPerRound: [1, 4], + cooldown: 5, + lockOnTime: 3, + targetPriority: { + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 882 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "E2", + name: "Corvette Dock", + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 21500 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CBC-2000`, + name: "Corvette Dock", + hanger: "Corvette", + capacity: 3, + attributes: null + } + ] + } + ] + }, + { + id: 125, + name: "CV3000", + title: "High-Speed Carrier", + img: "/ships/cv3000_a.png", + type: "Carrier", + variant: "A", + variantName: "Super Type", + hasVariants: false, + manufacturer: "Dawn Accord", + direction: ["Strategy & Support"], + scope: "Empty", + weight: 2, + row: "Back", + commandPoints: 40, + serviceLimit: 5, + modules: [ + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "M1", + name: "Integrated Aircraft Hanger", + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 23850 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CFB-605`, + name: "Large Aircraft Hanger", + hanger: "Large Fighter", + capacity: 5, + attributes: null + }, + { + type: "hanger", + count: 1, + title: `CBC-2100`, + name: "Corvette Dock", + hanger: "Corvette", + capacity: 3, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "M2", + name: "Integrated Aircraft System", + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 23850 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CFB-605`, + name: "Large Aircraft Hanger", + hanger: "Large Fighter", + capacity: 5, + attributes: null + }, + { + type: "hanger", + count: 1, + title: `CIT-5`, + name: "Field Support UAV Hanger", + hanger: "Tactical UAV", + capacity: 5, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: null, + alpha: 27, + attributes: ["Attack Against Systems"], + stats: { + duration: 20, + attacksPerRound: [1, 5], + cooldown: 10, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Cruiser"] + ], + damage: 2250 + }, + siege: { + position: 2, + damage: 150 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "M3", + name: "Large Aircraft System", + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 23850 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CFB-605`, + name: "Large Aircraft Hanger", + hanger: "Large Fighter", + capacity: 5, + attributes: null + }, + { + type: "hanger", + count: 1, + title: `CFB-400`, + name: "Aircraft Hanger", + hanger: "Large Fighter", + capacity: 3, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A1", + name: `"Dragoon" Battery System`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 6500, + antiair: 297, + siege: 619, + hp: 25200 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `MK4-C/SG-3480A "Dragoon"`, + name: `Triple-Cannon Heavy Battery`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: null, + alpha: 200, + attributes: null, + stats: { + attacksPerRound: [3, 1], + cooldown: 9, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ], + damage: 3800 + }, + siege: { + position: 2, + damage: 520 + } + } + } + }, + { + type: "weapon", + count: 4, + title: `C/SG-190B "Dragoon"`, + name: `Generic Rapid-Fire Cannon`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: null, + alpha: 55, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + attacksPerRound: [1, 1], + cooldown: 4, + lockOnTime: 6, + targetPriority: { + antiship: { + position: 2, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ], + damage: 2700 + }, + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 297 + }, + siege: { + position: 3, + damage: 99 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A2", + name: `Anti-Aircraft Missile Platform`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: 2700, + antiair: 354, + siege: null, + hp: 25200 + }, + subsystems: [ + { + type: "weapon", + count: 3, + title: `Bm-12x180T`, + name: `Missile Defense System`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: 60, + alpha: 52, + attributes: ["Interception Capability", "Anti-Aircraft Support"], + stats: { + duration: 12, + attacksPerRound: [1, 12], + cooldown: 20, + lockOnTime: 3, + targetPriority: { + antiship: { + position: 2, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ], + damage: 2700 + }, + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 354 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "B1", + name: `Missile Defense System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: 1200, + antiair: 210, + siege: 70, + hp: 25200 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `MK3-SM-6x400B/C "Starfire"`, + name: `Missile Launcher Array`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: null, + alpha: 70, + attributes: ["Interception Capability", "Anti-Aircraft Counterattack"], + stats: { + duration: 6, + attacksPerRound: [1, 6], + cooldown: 12, + lockOnTime: 8, + targetPriority: { + antiship: { + position: 2, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ], + damage: 1200 + }, + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 210 + }, + siege: { + position: 3, + damage: 70 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "B2", + name: `Corvette Loading System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 23850 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CBC-2100`, + name: "Corvette Dock", + hanger: "Corvette", + capacity: 3, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "B3", + name: `Info UAV Support Platform`, + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 23850 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CITA-2`, + name: "Field Support UAV Pod", + hanger: "Info UAV", + capacity: 3, + attributes: ["Ship Calibration Support"], + stats: { + targetPriority: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Auxiliary Ship"], + [1, "Battlecruiser"], + [1, "Cruiser"] + ], + duration: 30, + operationCount: [1, 1], + cooldown: 10, + lockOnTime: 3 + } + } + ] + } + ] + }, + { + id: 126, + name: "Eternal Heavens", + title: "UAV Carrier", + img: "/ships/eternal_heavens_a.png", + type: "Carrier", + variant: "A", + variantName: "Super Type", + hasVariants: false, + manufacturer: "Jupiter Industry", + direction: ["Outstanding Firepower"], + scope: "Empty", + weight: 2, + row: "Back", + commandPoints: 40, + serviceLimit: 5, + modules: [ + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "M1", + name: "Collaborative Hanger I", + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 7752, + antiair: 2658, + siege: 774, + hp: 24500 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CBF-280`, + name: "Medium Fighter Hanger", + hanger: "Medium Fighter", + capacity: 3, + attributes: null + }, + { + type: "hanger", + count: 3, + title: `"Decomposer"`, + name: "Cooperative Offensive UAV Platform", + hanger: "Cooperative Offensive UAV", + capacity: 3, + damageType: "Energy", + target: "Aircraft", + lockonEfficiency: null, + alpha: 140, + attributes: ["UAV Cooperation", "Anti-Aircraft Lightweight Ammo"], + stats: { + duration: 4, + attacksPerRound: [1, 4], + cooldown: 9, + lockOnTime: 8, + targetPriority: { + antiship: { + position: 2, + damage: 7752, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ] + }, + antiair: { + position: 1, + damage: 2658, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ] + }, + siege: { + position: 3, + damage: 774 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "M2", + name: "Collaborative Hanger II", + sourcedFrom: null, + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 24500 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CBF-280`, + name: "Medium Fighter Hanger", + hanger: "Medium Fighter", + capacity: 3, + attributes: null + }, + { + type: "hanger", + count: 3, + title: `"Laminar"`, + name: "Cooperative Offensive UAV Platform", + hanger: "Cooperative Offensive UAV", + capacity: 3, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: null, + alpha: 40, + attributes: ["UAV Cooperation", "Anti-Aircraft Special Ammo"] + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "M3", + name: "Collaborative Hanger III", + sourcedFrom: ["OZY"], + stats: { + type: "weapon", + antiship: null, + antiair: 5940, + siege: null, + hp: 24500 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CBF-280`, + name: "Medium Fighter Hanger", + hanger: "Medium Fighter", + capacity: 3, + attributes: null + }, + { + type: "hanger", + count: 3, + title: `"Vortex"`, + name: "Cooperative Offensive UAV Platform", + hanger: "Cooperative Offensive UAV", + capacity: 3, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: null, + alpha: 20, + attributes: ["UAV Aerial Cover Support", "Anti-Aircraft Counterattack"], + stats: { + duration: 4, + attacksPerRound: [4, 3], + cooldown: 8, + lockOnTime: 5, + targetPriority: { + antiair: { + position: 1, + damage: 5940, + priorities: [ + [1, "Fighter"], + [2, "Corvette"] + ] + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A1", + name: `Integrated Battery System`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 10250, + antiair: 472, + siege: 3815, + hp: 26000 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `AG-3400A`, + name: `Triple-Fire Heavy Turret`, + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 320, + attributes: null, + stats: { + duration: 6, + attacksPerRound: [3, 1], + cooldown: 12, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + damage: 6200, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ] + }, + siege: { + position: 2, + damage: 2240 + } + } + } + }, + { + type: "weapon", + count: 3, + title: `AG-2208A`, + name: `Dual-Cannon Anti-Ship Battery`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: 10, + alpha: 100, + attributes: null, + stats: { + duration: 2, + attacksPerRound: [2, 1], + cooldown: 6, + lockOnTime: 4, + targetPriority: { + antiship: { + position: 1, + damage: 4050, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"] + ] + }, + antiair: { + position: 2, + damage: 472, + priorities: [ + [2, "Corvette"], + [3, "Fighter"] + ] + }, + siege: { + position: 3, + damage: 1575 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A2", + name: `Experimental Ion Cannon System`, + sourcedFrom: ["LunatiCorp"], + stats: { + type: "weapon", + antiship: 8857, + antiair: 252, + siege: 828, + hp: 26000 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `AI-450T`, + name: `Experimental Ion Turret`, + damageType: "Energy", + target: "Large Ship", + lockonEfficiency: null, + alpha: 400, + attributes: null, + stats: { + duration: 3, + cooldown: 4, + damageFrequency: 1, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + damage: 6857, + priorities: [ + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"] + ] + }, + siege: { + position: 2, + damage: 548 + } + } + } + }, + { + type: "weapon", + count: 4, + title: `AG-290`, + name: `Generic Dual-Cannon Battery`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: 45, + alpha: 35, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + duration: 2, + attacksPerRound: [1, 2], + cooldown: 4, + lockOnTime: 4, + targetPriority: { + antiship: { + position: 2, + damage: 2000, + priorities: [ + [3, "Destroyer"], + [3, "Frigate"] + ] + }, + antiair: { + position: 1, + damage: 252, + priorities: [ + [1, "Corvette"], + [2, "Fighter"] + ] + }, + siege: { + position: 3, + damage: 280 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A3", + name: `Pulse Anti-Aircraft System`, + sourcedFrom: ["Ultix"], + stats: { + type: "weapon", + antiship: 3600, + antiair: 1370, + siege: null, + hp: 26000 + }, + subsystems: [ + { + type: "weapon", + count: 3, + title: `AP-2x180`, + name: "Dual-Fire Pulse Cannon", + damageType: "Energy", + target: "Aircraft", + lockonEfficiency: 45, + alpha: 40, + attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"] + }, + { + type: "weapon", + count: 3, + title: `AP-140B`, + name: "Rapid-Fire Anti-Aircraft Pulse Cannon", + damageType: "Energy", + target: "Aircraft", + lockonEfficiency: 45, + alpha: 20, + attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"] + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "B1", + name: `Anti-Ship Projectile Launching System`, + sourcedFrom: ["Spy Shark"], + stats: { + type: "weapon", + antiship: 5640, + antiair: null, + siege: 882, + hp: 26000 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `AM-2x450`, + name: `Dual-Fire Anti-Ship Missile Launcher`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: null, + alpha: 350, + attributes: null, + stats: { + duration: 4, + attacksPerRound: [2, 1], + cooldown: 16, + lockOnTime: 6, + targetPriority: { + antiship: { + position: 1, + damage: 4080, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ] + }, + siege: { + position: 2, + damage: 630 + } + } + } + }, + { + type: "weapon", + count: 4, + title: `AM-250`, + name: `Light Missile Launcher`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: null, + alpha: 140, + attributes: null, + stats: { + duration: 2, + attacksPerRound: [1, 1], + cooldown: 8, + lockOnTime: 4, + targetPriority: { + antiship: { + position: 1, + damage: 1560, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"] + ] + }, + siege: { + position: 2, + damage: 252 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "B2", + name: `Anti-Missile Defense System`, + sourcedFrom: ["Somnambulist", "Sector"], + stats: { + type: "weapon", + antiship: 1104, + antiair: 257, + siege: 225, + hp: 26000 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `AM-3x250`, + name: `Triple-Fire Anti-Ship Missile Launcher`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: null, + alpha: 145, + attributes: null, + stats: { + duration: 6, + attacksPerRound: [3, 1], + cooldown: 16, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + damage: 1104, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ] + }, + siege: { + position: 2, + damage: 225 + } + } + } + }, + { + type: "weapon", + count: 2, + title: `AM-12x100C`, + name: `Interception Missile Launcher Array`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: 60, + alpha: 35, + attributes: ["Interception Capability", "Anti-Aircraft Counterattack"], + stats: { + duration: 12, + attacksPerRound: [2, 12], + cooldown: 35, + lockOnTime: 4, + targetPriority: { + antiair: { + position: 1, + damage: 257, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ] + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "B3", + name: `Anti-Aircraft Missile Platform`, + sourcedFrom: null, + stats: { + type: "weapon", + antiship: 1527, + antiair: 811, + siege: null, + hp: 26000 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `AM-4x180`, + name: `Quadruple-Fire Multi-Role Missile Launcher`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: 60, + alpha: 45, + attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"] + }, + { + type: "weapon", + count: 2, + title: `AM-2x100B`, + name: `Dual-Fire Light Anti-Aircraft Missile Launcher`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: 75, + alpha: 80, + attributes: ["Anti-Aircraft Counterattack"] + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "C1", + name: "Auxiliary Aircraft Hanger", + sourcedFrom: ["Spy Shark"], + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 24500 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CFB-580`, + name: "Large Fighter Hangar", + hanger: "Large Fighter", + capacity: 4, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "C2", + name: "Auxiliary Corvette Dockyard", + sourcedFrom: ["Spy Shark"], + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 24500 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CBC-3000`, + name: "Corvette Dock", + hanger: "Corvette", + capacity: 4, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/storage.png", + system: "C3", + name: "Support Repair UAV System", + sourcedFrom: null, + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hpRecovery: 8181, + hp: 24500 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CRT-6`, + name: "Engineering UAV Maintenance Platform", + hanger: "Repair UAV", + capacity: 3, + repair: 8181, + attributes: null + } + ] + } + ] + }, + { + id: 127, + name: "Marshal Crux", + title: "Carrier", + img: "/ships/marshal_crux_a.png", + type: "Carrier", + variant: "A", + variantName: "Super Type", + hasVariants: false, + manufacturer: "Antonios", + direction: ["Outstanding Firepower", "Strategy & Support"], + scope: "Direct-Fire Weapon", + weight: 2, + row: "Back", + commandPoints: 40, + serviceLimit: 5, + modules: [ + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "M1", + name: `"White Flashing" Integrated Armory`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 16080, + antiair: 691, + siege: 1908, + hp: 28800 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `CI-600T`, + name: `Heavy Ion Turret`, + damageType: "Energy", + target: "Large Ship", + lockonEfficiency: null, + alpha: 450, + attributes: null, + stats: { + duration: 8, + damageFrequency: 8, + cooldown: 12, + lockOnTime: 8, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battlecruiser"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ], + damage: 10800 + }, + siege: { + position: 2, + damage: 1620 + } + } + } + }, + { + type: "weapon", + count: 2, + title: `CG-2220`, + name: `Generic Dual-Cannon Battery`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: 10, + alpha: 120, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + attacksPerRound: [2, 1], + cooldown: 5, + lockOnTime: 4, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Battleship"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ], + damage: 5280 + }, + antiair: { + position: 2, + priorities: [ + [3, "Corvette"], + [4, "Fighter"] + ], + damage: 691 + }, + siege: { + position: 3, + damage: 288 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "M2", + name: `"White Flashing" Integrated Armory`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: 13628, + antiair: 162, + siege: 2275, + hp: 28800 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `CR-1650`, + name: `Railgun`, + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 1000, + attributes: null, + stats: { + duration: 6, + attacksPerRound: [1, 3], + cooldown: 8, + lockOnTime: 4, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Destroyer"], + [2, "Frigate"] + ], + damage: 12728 + }, + siege: { + position: 3, + damage: 2185 + } + } + } + }, + { + type: "weapon", + count: 6, + title: `CG-1105B`, + name: `Generic Cannon`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: null, + alpha: 20, + attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"], + stats: { + attacksPerRound: [1, 1], + cooldown: 4, + lockOnTime: 3, + targetPriority: { + antiship: { + position: 2, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ], + damage: 900 + }, + antiair: { + position: 1, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ], + damage: 162 + }, + siege: { + position: 3, + damage: 90 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "A1", + name: `Integrated Aircraft Hanger`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 25200 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CFB-700`, + name: "Large Aircraft Hanger", + hanger: "Large Fighter", + capacity: 6, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "A2", + name: `Corvette Dock`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 25200 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CBC-3200`, + name: "Corvette Dock", + hanger: "Corvette", + capacity: 6, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/jamming.png", + system: "B1", + name: `Additional Energy System`, + sourcedFrom: null, + default: true, + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 27000 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `RET-200`, + name: "Energy Amplification Device", + attributes: ["Increase Aircraft Damage"] + } + ] + }, + { + type: "known", + img: "/weapons/icons/jamming.png", + system: "B2", + name: `Fire-Control Auxiliary Calibration System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 27000 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `XGC-200`, + name: "Precision Guidance System", + attributes: ["Increase Aircraft Hit Rate"] + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "C1", + name: `Additional Aircraft System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 25200 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CBF-200`, + name: "Medium Hanger", + hanger: "Medium Fighter", + capacity: 4, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "C2", + name: `Missile Defense System`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: 5200, + antiair: 504, + siege: 392, + hp: 28800 + }, + subsystems: [ + { + type: "weapon", + count: 4, + title: `MK2-CM-4x250A "Storm"`, + name: `Missile Launcher Nest`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: 10, + alpha: 140, + attributes: ["Anti-Aircraft Support"], + stats: { + duration: 4, + attacksPerRound: [1, 4], + cooldown: 20, + lockOnTime: 4, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Battleship"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ], + damage: 5200 + }, + antiair: { + position: 2, + priorities: [ + [2, "Corvette"], + [3, "Fighter"] + ], + damage: 504 + }, + siege: { + position: 3, + damage: 392 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "C3", + name: `Recon UAV System`, + sourcedFrom: ["kitty7hell", "Draconia19"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 25200 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: "CIT-3", + name: `Fire-Control Spotter UAV Hanger`, + hanger: "Spotter UAV", + capacity: 3, + attributes: ["Ship Calibration Support"], + stats: { + duration: 30, + operationCount: [1, 1], + cooldown: 10, + lockOnTime: 3, + targetPriority: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Auxiliary Ship"], + [1, "Battlecruiser"], + [1, "Cruiser"] + ] + } + } + ] + } + ] + }, + { + id: 128, + name: "Solar Whale", + title: "Armed Tactical Carrier", + img: "/ships/solar_whale_a.png", + type: "Carrier", + variant: "A", + variantName: "Super Type", + hasVariants: false, + manufacturer: "NOMA Shipping", + direction: ["Strategy & Support"], + scope: "Empty", + weight: 2, + row: "Middle", + commandPoints: 55, + serviceLimit: 5, + modules: [ + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "M1", + name: "Corvette Dock", + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 24750 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CBC-3200`, + name: "Corvette Dock", + hanger: "Corvette", + capacity: 6, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "M2", + name: "Large Aircraft System", + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 24750 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CFB-1200`, + name: "Large Aircraft Hanger", + hanger: "Large Fighter", + capacity: 8, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A1", + name: `Integrated Armory`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 9648, + antiair: 589, + siege: 959, + hp: 27000 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `BG-2450A`, + name: `Dual-Cannon Heavy Battery`, + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 320, + attributes: null, + stats: { + attacksPerRound: [2, 1], + cooldown: 15, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ], + damage: 4960 + }, + siege: { + position: 2, + damage: 665 + } + } + } + }, + { + type: "weapon", + count: 2, + title: `MK3-BM-8x320 "Lightning Field"`, + name: `Dodeca-Fire Anti-Ship Missile System`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: 10, + alpha: 220, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + duration: 8, + attacksPerRound: [1, 8], + cooldown: 35, + lockOnTime: 4, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Battleship"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ], + damage: 4688 + }, + antiair: { + position: 2, + priorities: [ + [3, "Corvette"], + [4, "Fighter"] + ], + damage: 589 + }, + siege: { + position: 3, + damage: 294 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A2", + name: `Projectile Weapon Platform`, + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: 8749, + antiair: 589, + siege: 648, + hp: 27000 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `MK5-BM-16x180 "Lightning Field"`, + name: `Anti-Ship Missile Array`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: null, + alpha: 120, + attributes: null, + stats: { + duration: 12, + attacksPerRound: [1, 16], + cooldown: 40, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"] + ], + damage: 4061 + }, + siege: { + position: 2, + damage: 354 + } + } + } + }, + { + type: "weapon", + count: 2, + title: `MK3-BM-8x320 "Lightning Field"`, + name: `Dodeca-Fire Anti-Ship Missile System`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: 10, + alpha: 220, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + duration: 8, + attacksPerRound: [1, 8], + cooldown: 35, + lockOnTime: 4, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Battleship"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ], + damage: 4688 + }, + antiair: { + position: 2, + priorities: [ + [3, "Corvette"], + [4, "Fighter"] + ], + damage: 589 + }, + siege: { + position: 3, + damage: 294 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A3", + name: `Integrated Cannon Platform`, + sourcedFrom: ["Windserpent", "Sector"], + stats: { + type: "weapon", + antiship: 8888, + antiair: 1021, + siege: 588, + hp: 27000 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `MK3-BM-8x320 "Lightning Field"`, + name: `Dodeca-Fire Anti-Ship Missile System`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: 10, + alpha: 220, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + duration: 8, + attacksPerRound: [1, 8], + cooldown: 35, + lockOnTime: 4, + targetPriority: { + antiship: { + position: 1, + damage: 4688, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Battleship"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ] + }, + antiair: { + position: 2, + damage: 589, + priorities: [ + [3, "Corvette"], + [4, "Fighter"] + ] + }, + siege: { + position: 3, + damage: 252 + } + } + } + }, + { + type: "weapon", + count: 2, + title: `BG-2180`, + name: `Anti-Ship Cannon`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: null, + alpha: 80, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + attacksPerRound: [2, 1], + cooldown: 8, + lockOnTime: 4, + targetPriority: { + antiship: { + position: 2, + damage: 4200, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ] + }, + antiair: { + position: 1, + damage: 432, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ] + }, + siege: { + position: 3, + damage: 336 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/jamming.png", + system: "B1", + name: "Ship Maintenance System", + sourcedFrom: null, + default: true, + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 25200 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `BSY-5000`, + name: "Large Docking Jetty", + attributes: ["Aircraft Recovery"] + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "B2", + name: "Corvette Loading Platform", + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 24750 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CBC-2000`, + name: "Corvette Dock", + hanger: "Corvette", + capacity: 3, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "C1", + name: "Aircraft Hanger", + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: null, + hp: 24750 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CFB-600`, + name: "Aircraft Hanger", + hanger: "Large Fighter", + capacity: 5, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "C2", + name: "Siege UAV System", + sourcedFrom: ["Windserpent"], + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: 6048, + hp: 24750 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CST-6`, + name: "Siege UAV Pod", + hanger: "Siege UAV", + capacity: 4, + damageType: "Energy", + target: "Building", + lockonEfficiency: null, + alpha: 630, + attributes: null, + stats: { + duration: 10, + attacksPerRound: [1, 1], + cooldown: 15, + lockOnTime: 8, + targetPriority: { + siege: { + position: 1, + damage: 6048 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "C3", + name: "Anti-Aircraft Missile Platform", + sourcedFrom: ["Windserpent", "The Enlightened"], + stats: { + type: "weapon", + antiship: 2618, + antiair: 1178, + siege: null, + hp: 27000 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `BM-12x180T`, + name: "Missile Defense System", + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: 60, + alpha: 50, + attributes: ["Interception Capability", "Anti-Aircraft Special Ammo", "Anti-Aircraft Support"], + stats: { + duration: 6, + attacksPerRound: [1, 12], + cooldown: 5, + lockOnTime: 3, + targetPriority: { + antiship: { + position: 2, + damage: 2618, + priorities: [ + [4, "Destroyer"], + [4, "Frigate"] + ] + }, + antiair: { + position: 1, + damage: 1178, + priorities: [ + [1, "Corvette"], + [2, "Fighter"], + [3, "Landing Ship"] + ] + } + } + } + } + ] + } + ] + }, + { + id: 129, + name: "Warspite", + title: "Assault Battleship", + img: "/ships/warspite_a.png", + type: "Battleship", + variant: "A", + variantName: "Super Type", + hasVariants: false, + manufacturer: "Empty", + direction: ["Empty"], + scope: "Empty", + weight: 0, + row: "Middle", + commandPoints: 45, + serviceLimit: 3, + modules: [ + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "M1", + name: `Bow-Mounted Ion Cannon System`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 21000, + antiair: null, + siege: 7350, + hp: 27900 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `FI-800`, + name: `Heavy Ion Cannon`, + damageType: "Energy", + target: "Large Ship", + lockonEfficiency: null, + alpha: 1050, + attributes: null, + stats: { + duration: 3, + damageFrequency: 3, + cooldown: 6, + lockOnTime: 12, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Battleship"], + [1, "Carrier"], + [1, "Battlecruiser"], + [1, "Cruiser"], + [2, "Auxiliary Ship"] + ], + damage: 21000 + }, + siege: { + position: 2, + damage: 7350 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "M2", + name: `Bow-Mounted High-Energy Bombardment System`, + sourcedFrom: ["WarpPrime"], + stats: { + type: "weapon", + antiship: 21272, + antiair: null, + siege: 2127, + hp: 27900 + }, + subsystems: [ + { + type: "weapon", + count: 1, + title: `FM-1x575`, + name: `Heavy High-Energy Bomber`, + damageType: "Energy", + target: "Large Ship", + lockonEfficiency: null, + alpha: 780, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A1", + name: `Anti-Ship Torpedo System`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 8280, + antiair: null, + siege: 3150, + hp: 27900 + }, + subsystems: [ + { + type: "weapon", + count: 4, + title: `FT-4x160`, + name: `Missile Silo`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: null, + alpha: 125, + attributes: ["Crit"], + stats: { + duration: 20, + attacksPerRound: [4, 3], + cooldown: 20, + lockOnTime: 7, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ], + damage: 8280 + }, + siege: { + position: 2, + damage: 3150 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "A2", + name: `Projectile Weapon System`, + sourcedFrom: ["WarpPrime"], + stats: { + type: "weapon", + antiship: 10000, + antiair: 2775, + siege: 3850, + hp: 27900 + }, + subsystems: [ + { + type: "weapon", + count: 6, + title: `FM-1x205`, + name: `Missile Silo`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: 60, + alpha: 110, + attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"] + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "B1", + name: `Siege Armed System`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 6200, + antiair: null, + siege: 4480, + hp: 27900 + }, + subsystems: [ + { + type: "weapon", + count: 4, + title: `FT-1-365C`, + name: `Siege Torpedo`, + damageType: "Projectile", + target: "Building", + lockonEfficiency: null, + alpha: 320, + attributes: ["Crit"], + stats: { + duration: 18, + attacksPerRound: [1, 3], + cooldown: 18, + lockOnTime: 7, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Auxiliary Ship"], + [1, "Battlecruiser"], + [2, "Carrier"], + [2, "Cruiser"] + ], + damage: 6200 + }, + siege: { + position: 2, + damage: 4480 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/aircraft.png", + system: "B2", + name: "Siege UAV System", + sourcedFrom: ["WarpPrime"], + stats: { + type: "weapon", + antiship: null, + antiair: null, + siege: 6048, + hp: 27900 + }, + subsystems: [ + { + type: "hanger", + count: 1, + title: `CST-6`, + name: "Siege UAV Pod", + hanger: "Siege UAV", + capacity: 4, + damageType: "Energy", + target: "Building", + lockonEfficiency: null, + alpha: 630, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "C1", + name: `Experimental Ion Cannon System`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 9176, + antiair: null, + siege: 3211, + hp: 27900 + }, + subsystems: [ + { + type: "weapon", + count: 4, + title: `FI-400T`, + name: `Experimental Ion Turret`, + damageType: "Energy", + target: "Small Ship", + lockonEfficiency: null, + alpha: 260, + attributes: null, + stats: { + duration: 12, + damageFrequency: 5, + cooldown: 22, + lockOnTime: 7, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ], + damage: 9176 + }, + siege: { + position: 2, + damage: 3211 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "C2", + name: `Ion Turret System`, + sourcedFrom: ["WarpPrime"], + stats: { + type: "weapon", + antiship: 10400, + antiair: null, + siege: 7280, + hp: 27900 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `FI-550`, + name: `Siege Ion Turret`, + damageType: "Energy", + target: "Large Ship", + lockonEfficiency: null, + alpha: 520, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "D1", + name: `Medium Anti-Ship Missile`, + sourcedFrom: null, + default: true, + stats: { + type: "weapon", + antiship: 9000, + antiair: 1530, + siege: 3569, + hp: 27900 + }, + subsystems: [ + { + type: "weapon", + count: 4, + title: `FM-3x180`, + name: `Missile Vertical Launcher`, + damageType: "Projectile", + target: "Small Ship", + lockonEfficiency: 10, + alpha: 85, + attributes: ["Anti-Aircraft Counterattack"], + stats: { + duration: 12, + attacksPerRound: [3, 4], + cooldown: 12, + lockOnTime: 5, + targetPriority: { + antiship: { + position: 1, + priorities: [ + [1, "Destroyer"], + [1, "Frigate"], + [2, "Battleship"], + [2, "Carrier"], + [2, "Battlecruiser"], + [2, "Cruiser"] + ], + damage: 9000 + }, + antiair: { + position: 2, + priorities: [ + [3, "Corvette"], + [4, "Fighter"] + ], + damage: 1530 + }, + siege: { + position: 3, + damage: 3569 + } + } + } + } + ] + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "D2", + name: `Large Anti-Ship Missile`, + sourcedFrom: ["WarpPrime"], + stats: { + type: "weapon", + antiship: 11100, + antiair: null, + siege: 3990, + hp: 27900 + }, + subsystems: [ + { + type: "weapon", + count: 2, + title: `FM-1x450`, + name: `Missile Launcher`, + damageType: "Projectile", + target: "Large Ship", + lockonEfficiency: null, + alpha: 380, + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/armor.png", + system: "E1", + name: `Standard Sacrum Chu Imperium Armor System`, + sourcedFrom: null, + default: true, + stats: { + type: "armor", + extraHP: 284970, + armor: 270, + energyShield: 5, + hp: 27900 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `SC-100`, + name: `Ship Core`, + attributes: null + }, + { + type: "misc", + count: 1, + title: "AC-111", + name: "Sacrum Chu Imperium Super-Heavy Armor", + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/armor.png", + system: "E2", + name: `Armor System`, + sourcedFrom: ["WarpPrime"], + stats: { + type: "armor", + extraHP: 284970, + armor: 300, + energyShield: 10, + hp: 27900 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `SC-100`, + name: `Ship Core`, + attributes: null + }, + { + type: "misc", + count: 1, + title: "AC-150", + name: "Generic Super-Heavy Armor", + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/speed.png", + system: "F1", + name: `Standard Sacrum Chu Imperium Propulsion System`, + sourcedFrom: null, + default: true, + stats: { + type: "propulsion", + cruise: 220, + warp: 1100, + hp: 30650 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `EN-111`, + name: `Sacrum Chu Imperium Vector Engine`, + attributes: null + }, + { + type: "misc", + count: 1, + title: "EC-111", + name: "Sacrum Chu Imperium Warp Drive", + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/speed.png", + system: "F2", + name: `Propulsion System`, + sourcedFrom: ["WarpPrime"], + stats: { + type: "propulsion", + cruise: 250, + warp: 1250, + hp: 27900 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `EN-600`, + name: `Generic Vector Engine`, + attributes: null + }, + { + type: "misc", + count: 1, + title: "EC-600", + name: "Generic Warp Drive", + attributes: null + } + ] + }, + { + type: "known", + img: "/weapons/icons/jamming.png", + system: "G1", + name: `Ion Enhancement Device`, + sourcedFrom: ["WarpPrime"], + stats: { + type: "armor", + armor: null, + extraHP: null, + energyShield: null, + hp: 27900 + }, + subsystems: [ + { + type: "misc", + count: 1, + title: `RII-600`, + name: "Ion Energy Acceleration Device", + attributes: ["Increase Ion Damage"] + } + ] + }, + { + type: "unknown", + img: "/weapons/icons/unknown.png", + system: "G2", + unknown: true + }, + { + type: "known", + img: "/weapons/icons/cannon.png", + system: "H1", + name: `Short-Range Anti-Aircraft System`, + sourcedFrom: ["WarpPrime"], + stats: { + type: "weapon", + antiship: null, + antiair: 5717, + siege: null, + hp: 28400 + }, + subsystems: [ + { + type: "weapon", + count: 6, + title: `FM-2x90B`, + name: `Missile Vertical Launcher`, + damageType: "Projectile", + target: "Aircraft", + lockonEfficiency: 60, + alpha: 50, + attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft High-Speed Strike", "Anti-Aircraft Counterattack"] + } + ] + }, + { + type: "unknown", + img: "/weapons/icons/unknown.png", + system: "H2", + unknown: true + } + ] + } + ]; + + return { data, difficulty }; +}); diff --git a/server/api/deleteBlueprint.ts b/server/api/deleteBlueprint.ts new file mode 100644 index 0000000..aa29e96 --- /dev/null +++ b/server/api/deleteBlueprint.ts @@ -0,0 +1,38 @@ +import { MinifiedUserData } from "~/utils/types"; +import admin from "firebase-admin"; + +interface Body { + uid: string; + accessToken: string; + accountIndex: number; +} + +export default defineEventHandler(async (event) => { + const body = (await readBody(event)) as Body; + const db = admin.firestore(); + + let newBlueprints: Record[]>[] | null = null; + + try { + const docData = await db.collection("users").doc(body.uid).get(); + const userData = docData.data() as MinifiedUserData | undefined; + + if (!userData) throw new Error("User not found."); + if (userData.uid !== body.uid || userData.accessToken !== body.accessToken) throw new Error("Invalid credentials."); + + const existingBlueprints = userData.blueprints as Record[]>[]; + existingBlueprints.splice(body.accountIndex, 1); + + newBlueprints = existingBlueprints; + + await db + .collection("users") + .doc(body.uid) + .update({ blueprints: existingBlueprints, bpLastSaved: new Date().toISOString().slice(0, 10) }); + } catch (error) { + console.error(error); + return { success: false, error: error instanceof Error ? error.message : "Something went wrong. Try again later.", newBlueprints: null }; + } + + return { success: true, error: null, newBlueprints }; +}); diff --git a/server/api/deleteMail.ts b/server/api/deleteMail.ts new file mode 100644 index 0000000..85724d6 --- /dev/null +++ b/server/api/deleteMail.ts @@ -0,0 +1,36 @@ +import { SaveTemplate, UserData } from "~/utils/types"; +import admin from "firebase-admin"; + +interface Body { + uid: string; + accessToken: string; + mailId: string; +} + +export default defineEventHandler(async (event) => { + const body = (await readBody(event)) as Body; + const db = admin.firestore(); + + let outcomeMails: SaveTemplate[] | null = null; + + try { + const docData = await db.collection("users").doc(body.uid).get(); + const userData = docData.data() as UserData | undefined; + + if (!userData) throw new Error("User not found."); + if (userData.uid !== body.uid || userData.accessToken !== body.accessToken) throw new Error("Invalid credentials."); + + const savedMails = userData.savedMails; + const mailIndex = savedMails.findIndex((mail) => mail.id === body.mailId); + if (mailIndex === -1) throw new Error("Mail not found."); + + savedMails.splice(mailIndex, 1); + outcomeMails = savedMails; + await db.collection("users").doc(body.uid).update({ savedMails }); + } catch (error) { + console.error(error); + return { success: false, error: error instanceof Error ? error.message : "Something went wrong. Try again later.", content: null }; + } + + return { success: true, error: null, content: outcomeMails }; +}); diff --git a/server/api/equipment.ts b/server/api/equipment.ts deleted file mode 100644 index dcccb67..0000000 --- a/server/api/equipment.ts +++ /dev/null @@ -1,348 +0,0 @@ -import { Equipment, TechnicalBlueprint } from "~/utils/equipmentData"; - -export default defineEventHandler((event) => { - const equipmentData: (Equipment | TechnicalBlueprint)[] = [{ - displayImg: "/equipment/advancedMilitaryOperationCenter.png", - type: "Equipment", - displayName: "Advanced Military Operation Center", - effectName: "Operation Quantity Expansion", - effectDescription: ["Increases the number of usable operations by ", "X", "."], - loadWeight: 6, - class: "Information" - }, { - displayImg: "/techBlueprints/aircraftLogisticsDevice.png", - type: "Technical Blueprint", - displayName: "Aircraft Logistics Device", - effectName: "Reinforcement Aircraft", - effectDescription: ["Makes a delivery to your own fleets, reinforcing up to ", "X [Aircraft/Corvette]", " squadron(s)."], - deliveryTarget: "Single", - itemMass: "Heavy", - activeService: 5, - productionInterval: "2 days", - class: "Supply" - }, { - displayImg: "/equipment/antoniosStandardPartsAssemblyFacility.png", - type: "Equipment", - displayName: "Antonios Standard Parts Assembly Facility", - effectName: "Ship Production Process Optimization", - effectDescription: ["Reduces resource consumption by ", "X%", " when building Antonios Consortium ships in the Base."], - loadWeight: 6, - class: "Logistics" - }, { - displayImg: "/techBlueprints/hectorRemoteControlMiningUAV.png", - type: "Technical Blueprint", - displayName: "Hector Remote-Control Mining UAV", - effectName: "Remote Mining", - effectDescription: ["Makes a delivery to any of your operations and mines a resource node inside the operation once, collecting ", "X", " resources."], - deliveryTarget: "Range", - itemMass: "Heavy", - activeService: 5, - productionInterval: "2 days", - class: "Supply" - }, { - displayImg: "/techBlueprints/highIntensityWarpStabilizer.png", - type: "Technical Blueprint", - displayName: "High-Intensity Warp Stabilizer", - effectName: "Warp Sharing", - effectDescription: ["This can be launched anywhere within your activated Operation Area to generate a temporary Warping Stability Zone in the operation the target belong to. Friendly ships can warp drive to this operation at the speed of ", - "X%", ". The warp stabilizing effect lasts for ", "X hours", "."], - deliveryTarget: "Range", - itemMass: "Light", - activeService: 2, - productionInterval: "2 days", - class: "Strategy" - }, { - displayImg: "/equipment/arbiterPlanningCenter.png", - type: "Equipment", - displayName: "Arbiter Planning Center", - effectName: "Strategic Reserves", - effectDescription: ["Increases the storage limit of Action Points by ", "X", "."], - loadWeight: 7, - class: "Information" - }, { - displayImg: "/techBlueprints/highPowerBroadcastBeacon.png", - type: "Technical Blueprint", - displayName: "High Power Broadcast Beacon", - effectName: "Star System Broadcast", - effectDescription: ["Allows information to be broadcast in the airspace within, ", "X Gm", " for ", "X hours", " after this is launched to an activated Operation."], - deliveryTarget: "Range", - itemMass: "Light", - activeService: 5, - productionInterval: "2 days", - class: "Communicate" - }, { - displayImg: "/equipment/armedOutpostControlCore.png", - type: "Equipment", - displayName: "Armed Outpost Control Core", - effectName: "Outpost Weaponization Plan", - effectDescription: ["Unlocks the construction of Armed Outposts. Number of outposts that can be built: ", "X", "."], - loadWeight: 6, - class: "Engineering" - }, { - displayImg: "/equipment/autoRepairingArmor.png", - type: "Equipment", - displayName: "Auto-repairing Armor", - effectName: "Base Maintenance and Upgrades", - effectDescription: ["Increases the HP Recovery speed of the Base by ", "X%", "."], - loadWeight: 5, - class: "Engage" - }, { - displayImg: "/techBlueprints/militaryInformationConcealmentEquipment.png", - type: "Technical Blueprint", - displayName: "Military Information Concealment Equipment", - effectName: "Vision Obscuration", - effectDescription: ["Generates a temporary information and communication barrier with a radius of ", "X Gm", " at the activated operation. Up to ", "X", - " fleet(s) of the same Squad/Community members in the barrier airspace will not be exposed to the direct vision of the opposing fleet for ", "X hours", "."], - deliveryTarget: "Range", - itemMass: "Light", - activeService: 2, - productionInterval: "2 days", - class: "Strategy" - }, { - displayImg: "/equipment/bvrAircraftGuidanceDevice.png", - type: "Equipment", - displayName: "BVR Aircraft Guidance Device", - effectName: "Base Strategic Strike", - effectDescription: ["The Base can execute Strategic Strike ", "[I or II]", - " to command the Aircraft Defense Fleet in the base to launch a strategic strike on the targets within a ", "X°", - " fan-shaped area with a ", "X Gm", " radius."], - loadWeight: 7, - class: "Engage" - }, { - displayImg: "/equipment/baseDefenseAndTrackingSystem.png", - type: "Equipment", - displayName: "Base Defense & Tracking System", - effectName: "Base Defense: Multi-Target Counterattack", - effectDescription: ["When defending the Base, all deployed Flagships in the Defense Fleet gain the flagship skill: Multi-Target Counterattack - When multiple fleets attack the fleet simultaneously, it launches a counterattack against ", - "X", " sub-target fleet(s) with a counterattack efficiency of ", "X%", "."], - loadWeight: 6, - class: "Engage" - }, { - displayImg: "/equipment/basePlatformFireControlRadar.png", - type: "Equipment", - displayName: "Base Platform Fire Control Radar", - effectName: "Base Defense: Aggressive Loss", - effectDescription: ["When defending the base, all Flagships in the Defense Fleet gain the flagship skill: Agressive Loss - All fleet launch a focused and coordinated strike that prioritizes attacking ", - "X", " target(s) within range of the selectable target."], - loadWeight: 6, - class: "Engage" - }, { - displayImg: "/techBlueprints/operationCoordinationSatellite.png", - type: "Technical Blueprint", - displayName: "Operation Coordination Satellite", - effectName: "Operation Expansion", - effectDescription: ["Expands the scope of your activated Fleet Operation Area by ", "X%", " for ", "X hours", "."], - deliveryTarget: "Range", - itemMass: "Light", - activeService: 2, - productionInterval: "2 days", - class: "Strategy" - }, { - displayImg: "/techBlueprints/festivePlasmaUAVSquadron.png", - type: "Technical Blueprint", - displayName: "Plasma UAV Squadron", - effectName: "Festival Fireworks", - effectDescription: ["Performs plasma UAV shows in the airspace around your buildings this is launched to for ", "X hours", "."], - deliveryTarget: "Single", - itemMass: "Light", - activeService: 2, - productionInterval: "2 days", - class: "Communicate" - }, { - displayImg: "/equipment/battlecruiserAssemblyWorkshop.png", - type: "Equipment", - displayName: "Battlecruiser Assembly Workshop", - effectName: "Battlecruiser Special Assembly Process", - effectDescription: ["Reduces the building time by ", "X%", " when building Battlecruisers in the Base."], - loadWeight: 6, - class: "Efficiency" - }, { - displayImg: "/equipment/centralDistrictComponentIntegrationPlatform.png", - type: "Equipment", - displayName: "Central District Component Integration Platform", - effectName: "Modular Integration", - effectDescription: ["Increases the construction speed of Central District facilities by ", "X%", "."], - loadWeight: 6, - class: "Efficiency" - }, { - displayImg: "/equipment/centralDistrictCoreModule.png", - type: "Equipment", - displayName: "Central District Core Module", - effectName: "Facility Protection Construction Engineering", - effectDescription: ["Reduces resource consumption by ", "X%", " when building and upgrading facilities in the Base Central District."], - loadWeight: 6, - class: "Logistics" - }, { - displayImg: "/techBlueprints/prefabModuleTransporationUAV.png", - type: "Technical Blueprint", - displayName: "Prefab Module Transportation UAV", - effectName: "Prefab Module Delivery", - effectDescription: ["Makes a delivery to your own fleets, delivering up to ", "X", " Prefab Module(s) from the Base."], - deliveryTarget: "Single", - itemMass: "Heavy", - activeService: 5, - productionInterval: "2 days", - class: "Supply" - }, { - displayImg: "/equipment/combatMicrochipCenter.png", - type: "Equipment", - displayName: "Combat Microchip Center", - effectName: "Combat Microchip Output", - effectDescription: ["Produces 1 Combat Microchip ", "(S/M/L)", " at the Base every ", "X hours", ", up to ", "X", "."], - loadWeight: 6, - class: "Information" - }, { - displayImg: "/equipment/cruiserExclusiveShipyard.png", - type: "Equipment", - displayName: "Cruiser Exclusive Shipyard", - effectName: "Cruiser Special Assembly Process", - effectDescription: ["Installs a dedicated shipyard that produces dedicated Company Cruisers with a production speed of ", "X%", "."], - loadWeight: 6, - class: "Efficiency" - }, { - displayImg: "/techBlueprints/privateerInfoRecognitionJammer.png", - type: "Technical Blueprint", - displayName: "Privateer Info Recognition Jammer", - effectName: "Fleet Recognition Jammer", - effectDescription: ["Can be used on a friendly fleet to change its Expanse Livery to the Privateer fleet version for ", "X hours", "."], - deliveryTarget: "Single", - itemMass: "Light", - activeService: 2, - productionInterval: "2 days", - class: "Command" - }, { - displayImg: "/equipment/industrialDistrictComponentIntegrationPlatform.png", - type: "Equipment", - displayName: "Industrial District Component Integration Platform", - effectName: "Modular Integration", - effectDescription: ["Increases the construction speed of Industrial District facilities by ", "X%", "."], - loadWeight: 6, - class: "Efficiency" - }, { - displayImg: "/equipment/industrialDistrictCoreModule.png", - type: "Equipment", - displayName: "Industrial District Core Module", - effectName: "Facility Protection Construction Engineering", - effectDescription: ["Reduces resource consumption by ", "X%", " when building and upgrading facilities in the Base Industrial District."], - loadWeight: 6, - class: "Logistics" - }, { - displayImg: "/equipment/jupiterStandardPartsAssemblyFacility.png", - type: "Equipment", - displayName: "Jupiter Industries Standard Parts Assembly Facility", - effectName: "Ship Production Process Optimization", - effectDescription: ["Reduces resource consumption by ", "X%", " when building Jupiter Industries ships in the Base."], - loadWeight: 6, - class: "Logistics" - }, { - displayImg: "/equipment/largeOutpostControlCore.png", - type: "Equipment", - displayName: "Large Outpost Control Core", - effectName: "Outpost Region Control Plan", - effectDescription: ["Unlocks the construction of ", "X", " Large Outpost(s) (Operation Area 2x2)."], - loadWeight: 6, - class: "Engineering" - }, { - displayImg: "/techBlueprints/reconnaissanceSatellite.png", - type: "Technical Blueprint", - displayName: "Reconnaissance Satellite", - effectName: "Battlefield Reconnaissance", - effectDescription: ["Makes a delivery to the operation, immediately conducting reconnaissance on up to ", "X", - " non-friendly fleet(s) in the operation receiving the delivery, and generating corresponding reconnaissance battle reports. The chance of the reconnaissance being detected is ", - "X%", "."], - deliveryTarget: "Range", - itemMass: "Light", - activeService: 2, - productionInterval: "2 days", - class: "Command" - }, { - displayImg: "/equipment/nomaStandardPartsAssemblyFacility.png", - type: "Equipment", - displayName: "NOMA Standard Parts Assembly Facility", - effectName: "Ship Production Process Optimization", - effectDescription: ["Reduces resource consumption by ", "X%", " when building NOMA Shipping Group ships in the Base."], - loadWeight: 6, - class: "Logistics" - }, { - displayImg: "/techBlueprints/resourceRequestBeacon.png", - type: "Technical Blueprint", - displayName: "Resource Request Beacon", - effectName: "Resource Supply", - effectDescription: ["Requests a rather small amount of random resource packs from a Neutral or Ally-controlled Space Station."], - deliveryTarget: "Single", - itemMass: "Heavy", - activeService: 5, - productionInterval: "2 days", - class: "Supply" - }, { - displayImg: "/equipment/portDistrictComponentIntegrationPlatform.png", - type: "Equipment", - displayName: "Port District Component Integration Platform", - effectName: "Modular Integration", - effectDescription: ["Increases the construction speed of Port District facilities by ", "X%", "."], - loadWeight: 6, - class: "Efficiency" - }, { - displayImg: "/equipment/portDistrictCoreModule.png", - type: "Equipment", - displayName: "Port District Core Module", - effectName: "Facility Protection Construction Engineering", - effectDescription: ["Reduces resource consumption by ", "X%", " when building and upgrading facilities in the Base Port District."], - loadWeight: 6, - class: "Logistics" - }, { - displayImg: "/equipment/quickOutpostControlCore.png", - type: "Equipment", - displayName: "Quick Outpost Control Core", - effectName: "Outpost Coordinating Production Engineering", - effectDescription: ["Unlock the construction of Quick Outposts. Number of outposts of this type that can be built: ", "X", "."], - loadWeight: 6, - class: "Engineering" - }, { - displayImg: "/techBlueprints/spaceOperationPlanningCoordinator.png", - type: "Technical Blueprint", - displayName: "Space Operation Planning Coordinator", - effectName: "Strategic Planning", - effectDescription: ["Reduces the Action Points consumed by the next ", "X", " delivery operation(s) of fleets by ", "X", " for ", "X hours", "."], - deliveryTarget: "Range", - itemMass: "Light", - activeService: 2, - productionInterval: "2 days", - class: "Command" - }, { - displayImg: "/equipment/resourceMiningUAVSquadron.png", - type: "Equipment", - displayName: "Resource Mining UAV Squadron", - effectName: "Interstellar Space Dust Fixation Technology", - effectDescription: ["Increases the ", "[Metal/Crytal/Deuterium]", " yield by ", "X%", " when the Base is in a Scattered Asteroid Belt."], - loadWeight: 6, - class: "Engineering" - }, { - displayImg: "/equipment/dawnStandardPartsAssemblyFacility.png", - type: "Equipment", - displayName: "SPL Dawn Standardized Module Assembly Facility", - effectName: "Ship Production Process Optimization", - effectDescription: ["Reduces resource consumption by ", "X%", " when building Dawn Accord Organization ships in the Base."], - loadWeight: 6, - class: "Logistics" - }, { - displayImg: "/equipment/productionCoordinationController.png", - type: "Equipment", - displayName: "Ship Production Coordination Controller", - effectName: "Shipyard Queue Coordination Technology", - effectDescription: ["Increases the production queue limit of the Base shipyard by ", "X", - ", which can be allocated to build ships of ", "[a Manufacturing Company]", "."], - loadWeight: 5, - class: "Efficiency" - }, { - displayImg: "/equipment/tradeCommunicationRelayStation.png", - type: "Equipment", - displayName: "Trade Communication Relay Station", - effectName: "Commissioned Production", - effectDescription: ["Allows commissioned galactic factions to produce ", "[Fighters/Frigates/Cruisers]", - " with a production time reduction of ", "X%", " and a production interval of ", "X hours", "."], - loadWeight: 6, - class: "Information" - }]; - return equipmentData; -}); \ No newline at end of file diff --git a/server/api/getAlert.ts b/server/api/getAlert.ts new file mode 100644 index 0000000..09d9b34 --- /dev/null +++ b/server/api/getAlert.ts @@ -0,0 +1,20 @@ +import { Alert } from "~/utils/types"; +import admin from "firebase-admin"; + +export default defineEventHandler(async () => { + const db = admin.firestore(); + + let returnData: Alert | null = null; + + try { + const querySnapshot = await db.collection("alerts").orderBy("date", "desc").limit(1).get(); + if (querySnapshot.empty) throw new Error("No alerts found."); + + returnData = querySnapshot.docs[0].data() as Alert; + } catch (error) { + console.error(error); + return { success: false, error: error instanceof Error ? error.message : "Something went wrong. Try again later.", content: null }; + } + + return { success: true, error: null, content: returnData }; +}); diff --git a/server/api/getBlueprints.ts b/server/api/getBlueprints.ts new file mode 100644 index 0000000..6aebdaf --- /dev/null +++ b/server/api/getBlueprints.ts @@ -0,0 +1,36 @@ +import { getObjectKey, getObjectValue } from "~/utils/functions"; +import admin from "firebase-admin"; + +interface Body { + uid: string; + accountIndex: number; +} + +export default defineEventHandler(async (event) => { + const body = (await readBody(event)) as Body; + const db = admin.firestore(); + + let blueprints: (string | number)[][] = []; + let lastSaved: string | null = null; + let accountName: string | null = null; + + try { + const docData = await db.collection("users").doc(body.uid).get(); + const userData = docData.data(); + + if (!userData) throw new Error("User not found."); + + if (!userData.bpLastSaved || userData.blueprints[body.accountIndex] === undefined || (getObjectValue(userData.blueprints[body.accountIndex]) as Record[]).length === 0) + throw new Error("No blueprints found."); + + accountName = getObjectKey(userData.blueprints[body.accountIndex]); + const ships = getObjectValue(userData.blueprints[body.accountIndex]) as Record[]; + blueprints = ships.map((ship) => [Number(getObjectKey(ship)), getObjectValue(ship)].flat()); + lastSaved = userData.bpLastSaved; + } catch (error) { + console.error(error); + return { success: false, error: error instanceof Error ? error.message : "Something went wrong. Try again later.", content: null, lastSaved: null, accountName: null }; + } + + return { success: true, error: null, content: blueprints, lastSaved, accountName }; +}); diff --git a/server/api/getMail.ts b/server/api/getMail.ts new file mode 100644 index 0000000..fcf709e --- /dev/null +++ b/server/api/getMail.ts @@ -0,0 +1,33 @@ +import { SaveTemplate, TruncatedOp, UserData } from "~/utils/types"; +import { untruncateOps } from "~/utils/functions"; +import admin from "firebase-admin"; + +interface Body { + uid: string; + mailId: string; +} + +export default defineEventHandler(async (event) => { + const body = (await readBody(event)) as Body; + const db = admin.firestore(); + + let mail: SaveTemplate | null = null; + + try { + const docData = await db.collection("users").doc(body.uid).get(); + const userData = docData.data() as UserData | undefined; + + if (!userData) throw new Error("User not found."); + + const foundMail = userData.savedMails.find((mail) => mail.id === body.mailId); + if (!foundMail) throw new Error("Mail not found."); + + foundMail.ops = untruncateOps(foundMail.ops as TruncatedOp[]); + mail = foundMail; + } catch (error) { + console.error(error); + return { success: false, error: error instanceof Error ? error.message : "Something went wrong. Try again later.", content: null }; + } + + return { success: true, error: null, content: mail }; +}); diff --git a/server/api/getUser.ts b/server/api/getUser.ts new file mode 100644 index 0000000..53ae00d --- /dev/null +++ b/server/api/getUser.ts @@ -0,0 +1,38 @@ +import { TruncatedOp, UserData } from "~/utils/types"; +import { untruncateOps } from "~/utils/functions"; +import { origins } from "~/utils/general"; +import admin from "firebase-admin"; + +interface Body { + uid: string; + accessToken: string; + updateOrigin: boolean; +} + +export default defineEventHandler(async (event) => { + const config = useRuntimeConfig(); + const body = (await readBody(event)) as Body; + const db = admin.firestore(); + + let returnData: UserData | null = null; + + try { + const docData = await db.collection("users").doc(body.uid).get(); + const userData = docData.data() as UserData | undefined; + + if (!userData) throw new Error("User not found."); + if (userData.uid !== body.uid || userData.accessToken !== body.accessToken) throw new Error("Invalid credentials."); + + userData.lastLoggedIn = new Date().toISOString().slice(0, 10); + if (body.updateOrigin) userData.origin = origins[config.public.baseUrl] ?? "U"; + await db.collection("users").doc(body.uid).update(userData); + + userData.savedMails.forEach((mail) => (mail.ops = untruncateOps(mail.ops as TruncatedOp[]))); + returnData = userData; + } catch (error) { + console.error(error); + return { success: false, error: error instanceof Error ? error.message : "Something went wrong. Try again later.", content: null }; + } + + return { success: true, error: null, content: returnData }; +}); diff --git a/server/api/saveBlueprints.ts b/server/api/saveBlueprints.ts new file mode 100644 index 0000000..1841676 --- /dev/null +++ b/server/api/saveBlueprints.ts @@ -0,0 +1,60 @@ +import { BlueprintAllShip } from "~/utils/blueprints"; +import { getObjectValue } from "~/utils/functions"; +import { MinifiedUserData } from "~/utils/types"; +import admin from "firebase-admin"; + +interface Body { + uid: string; + accessToken: string; + blueprints: BlueprintAllShip[] | null; + accountIndex: number; + accountName: string; +} + +export default defineEventHandler(async (event) => { + const body = (await readBody(event)) as Body; + const db = admin.firestore(); + + let newBlueprints: Record[]>[] | null = null; + + try { + if (body.accountIndex > 9) throw new Error("You can only have 10 saved accounts at the moment. Sorry!"); + const docData = await db.collection("users").doc(body.uid).get(); + const userData = docData.data() as MinifiedUserData | undefined; + + if (!userData) throw new Error("User not found."); + if (userData.uid !== body.uid || userData.accessToken !== body.accessToken) throw new Error("Invalid credentials."); + + const existingBlueprints = userData.blueprints as Record[]>[]; + if (!body.blueprints && !existingBlueprints[body.accountIndex]) throw new Error("Account not saved."); + + const blueprints = !body.blueprints + ? null + : (body.blueprints + .map((ship) => { + // @ts-expect-error Importing `BlueprintAllShip` doesnt get all parameters for some reason + if (!ship.unlocked) return { [ship.id]: [] }; + // @ts-expect-error Importing `BlueprintAllShip` doesnt get all parameters for some reason + if (!("modules" in ship)) return { [ship.id]: [ship.variant, ship.techPoints] }; + // @ts-expect-error Importing `BlueprintAllShip` doesnt get all parameters for some reason + return { [ship.id]: [ship.variant, ship.techPoints, ship.modules.filter((mod) => mod.unlocked).map((mod) => mod.system)].flat() }; + }) + .filter((obj) => getObjectValue(obj).length > 0) as Record[]); + + existingBlueprints[body.accountIndex] = { + [body.accountName]: blueprints ? blueprints : getObjectValue(existingBlueprints[body.accountIndex]) + }; + + newBlueprints = existingBlueprints; + + await db + .collection("users") + .doc(body.uid) + .update({ blueprints: existingBlueprints, bpLastSaved: new Date().toISOString().slice(0, 10) }); + } catch (error) { + console.error(error); + return { success: false, error: error instanceof Error ? error.message : "Something went wrong. Try again later.", newBlueprints: null }; + } + + return { success: true, error: null, newBlueprints }; +}); diff --git a/server/api/saveMail.ts b/server/api/saveMail.ts new file mode 100644 index 0000000..b86bc6a --- /dev/null +++ b/server/api/saveMail.ts @@ -0,0 +1,59 @@ +import { getRandomCharacters, truncateOps, untruncateOps } from "~/utils/functions"; +import { SaveTemplate, TruncatedOp, UserData } from "~/utils/types"; +import admin from "firebase-admin"; + +interface Body { + uid: string; + accessToken: string; + template: SaveTemplate; +} + +export default defineEventHandler(async (event) => { + const body = (await readBody(event)) as Body; + const db = admin.firestore(); + + let newMail: SaveTemplate | null = null; + let outcomeMails: SaveTemplate[] | null = null; + + try { + const docData = await db.collection("users").doc(body.uid).get(); + const userData = docData.data() as UserData | undefined; + + if (!userData) throw new Error("User not found."); + if (userData.uid !== body.uid || userData.accessToken !== body.accessToken) throw new Error("Invalid credentials."); + + const template = body.template; + if (!template.ops.every((op) => "insert" in op)) throw new Error("Invalid ops."); + if (template.name.length > 50) throw new Error("Names can only be 50 characters long."); + + const savedMails = userData.savedMails; + if (savedMails.length >= 30) throw new Error("You can only have 30 saved mails. Try deleting some."); + + const namespaceCollision = savedMails.findIndex((mail) => mail.name === template.name); + const isSame = namespaceCollision !== -1; + + const id = isSame ? savedMails[namespaceCollision].id : getRandomCharacters(10); + template.id = id; + template.createdAt = isSame ? savedMails[namespaceCollision].createdAt : new Date().toISOString().slice(0, 10); + template.lastSaved = new Date().toISOString().slice(0, 10); + + if (isSame) savedMails.splice(namespaceCollision, 1); + + const savedMailsCopy = JSON.parse(JSON.stringify(savedMails)) as SaveTemplate[]; + savedMailsCopy.forEach((mail) => (mail.ops = untruncateOps(mail.ops as TruncatedOp[]))); + newMail = JSON.parse(JSON.stringify(template)) as SaveTemplate; + savedMailsCopy.unshift(newMail); + outcomeMails = savedMailsCopy; + + // Condense for storage saving + template.ops = truncateOps(template.ops); + savedMails.unshift(template); + + await db.collection("users").doc(body.uid).update({ savedMails }); + } catch (error) { + console.error(error); + return { success: false, error: error instanceof Error ? error.message : "Something went wrong. Try again later.", content: null, outcomeMails: null }; + } + + return { success: true, error: null, content: newMail, outcomeMails }; +}); diff --git a/server/api/ships.ts b/server/api/ships.ts deleted file mode 100644 index aca9f72..0000000 --- a/server/api/ships.ts +++ /dev/null @@ -1,12295 +0,0 @@ -import { Ship } from "~/utils/shipData"; - -export default defineEventHandler((event) => { - const data: Ship[] = [{ - name: "AT021", - title: "Pulse Attacker", - img: "/ships/at021_a.png", - type: "Fighter", - fighter_type: "Medium", - variant: "A", - variant_name: "Pulse Cannon Type", - manufacturer: "Dawn Accord", - direction: ["Fighter & Corvette"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Front", - cp: 1, - maxInFleet: 15, - aircraftPerSquadron: 3, - production: { - metal: 5600, - crystal: 450, - deuterium: 240, - timeSeconds: 810, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Pulse Cannon System`, - main: true, - maxUpgradeSlots: 5, - baseAntiship: 494, - baseAntiair: 296, - baseSiege: 14, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Delayed Attack", - img: "/weapons/upgrades/strategies/at021a_1.svg", - strategy: true, - description: ["After the battle begins, extend the lock-on time of the first 2 rounds of attacks by ", "40%", " and increases the Hit Rate of the main weapon by ", "40%", "."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 15 - }, { - name: "Enhance Recharge Power", - img: "/weapons/upgrades/energyDamage.svg", - description: ["Increases all pulse cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Enhance Pulse Focus", - img: "/weapons/upgrades/energyDamage.svg", - description: ["Increases all pulse cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Firing Assistance Enhancement", - img: "/weapons/upgrades/smallHitrate.svg", - description: ["Increases weapon system Hit Rate against frigates/destroyers by ", "3%"], - maxTiers: 5, - affectedStat: "smallHitrate", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }, { - name: "Large Target Correction", - img: "/weapons/upgrades/bigHitrate.svg", - description: ["Increases weapon system Hit Rate against cruisers and higher-class ships by ", "3%"], - maxTiers: 5, - affectedStat: "bigHitrate", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }, { - name: "Charging Device Enhancement", - img: "/weapons/upgrades/energyCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Pipeline Cooling Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }] - }, { - type: "energy", - name: `Airborne Energy System`, - maxUpgradeSlots: 2, - baseDmgBuff: 1.15, - systemAdjustment: null, - img: "/weapons/icons/jamming.png", - upgrades: [{ - name: "Energy Core Output Increase", - img: "/weapons/upgrades/energyHitrate.svg", - description: ["Increases main pulse cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Energy Core Output Increase", - img: "/weapons/upgrades/energyHitrate.svg", - description: ["Increases main pulse cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Energy Storage", - img: "/weapons/upgrades/energyCooldown.svg", - description: ["Increases the main pulse cannon's Duration by ", "40%", " and Rounds Per Cycle by ", "1", "."], - maxTiers: 2, - affectedStat: "damage", - percentBuffPerTier: 1.188259, - tpPerTier: 10 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 2, - systemAdjustment: "hp", - baseHp: 4920, - baseArmor: 2, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Aero Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: [1, 1, 1, 1, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 3, - systemAdjustment: null, - baseCruise: 3000, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "1.6%"], - maxTiers: 5, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.016, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "AT021", - title: "Tactical Attacker", - img: "/ships/at021_b.png", - type: "Fighter", - fighter_type: "Medium", - variant: "B", - variant_name: "Interference Type", - manufacturer: "Dawn Accord", - direction: ["Sustained Combat", "Strategy & Support", "Fighter & Corvette"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Front", - cp: 1, - maxInFleet: 15, - aircraftPerSquadron: 3, - production: { - metal: 5520, - crystal: 430, - deuterium: 230, - timeSeconds: 770, - storage: 0 - }, - systems: [{ - type: "jamming", - name: "Electronic Jamming System", - main: true, - maxUpgradeSlots: 7, - systemAdjustment: "jamming", - img: "/weapons/icons/jamming.png", - upgrades: [{ - name: "Failure Adjustment", - strategy: true, - img: "/weapons/upgrades/strategies/at021b_1.svg", - description: ["Interferes again and increases the inbound time by ", "35%", " when failing to interfere."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 14 - }, { - name: "Jamming Enhancement", - img: "/weapons/upgrades/jammingCooldown.svg", - description: ["Increases jamming duration by ", "6%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Jamming Equipment Enhancement", - img: "/weapons/upgrades/jammingCooldown.svg", - description: ["Increases jamming duration by ", "6%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Quick Repair", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }, { - name: "Weapon Heatsink Efficiency", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }, { - name: "Fast Target Lock", - img: "/weapons/upgrades/targetSelectionTime2.svg", - description: ["Reduces the target-selection time of the weapon system by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Interference Cover", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Reduces the chances of being hit by direct-fire weapons by ", "30%", " but reduces the interference effect duration by ", "50%", "."], - maxTiers: 1, - affectedStat: "directEvasion", - percentBuffPerTier: 1.3, - tpPerTier: 9 - }, { - name: "Disperse Interference", - img: "/weapons/upgrades/railgunHitrate.svg", - description: ["Prioritizes unjammed targets"], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 9 - }, { - name: "Electronic Cover", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Reduces the effect Lock-On Efficiency of anti-aircraft weapons has on you and the aircraft within the same carrier by ", "10%", " (effects of the same type cannot stack)"], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 14 - }] - }, { - type: "weapon", - name: "Airborne Weapon System", - maxUpgradeSlots: 4, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - baseAntiship: 281, - baseAntiair: 225, - baseSiege: 32, - upgrades: [{ - name: "Barrel Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon Damage by ", "10%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.1, - tpPerTier: 3 - }, { - name: "Ammo Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon Damage by ", "10%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.1, - tpPerTier: 3 - }, { - name: "Ammo-Loader Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "15%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.15, - tpPerTier: 3 - }, { - name: "Barrel Heatsink Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "15%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.15, - tpPerTier: 3 - }, { - name: "Firing Assistance Enhancement", - img: "/weapons/upgrades/smallHitrate.svg", - description: ["Increases weapon system Hit Rate against frigates/destroyers by ", "15%"], - maxTiers: 1, - affectedStat: "smallHitrate", - percentBuffPerTier: 1.15, - tpPerTier: 3 - }, { - name: "Fast Target Analysis Enhancement", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "15%"], - maxTiers: 1, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.15, - tpPerTier: 3 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 2, - img: "/weapons/icons/armor.png", - systemAdjustment: "hp", - baseHp: 4920, - baseArmor: 0, - baseEnergyShield: 0, - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Aero Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: [1, 1, 1, 1, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 3, - systemAdjustment: null, - img: "/weapons/icons/speed.png", - baseCruise: 3000, - baseWarp: 0, - baseEvasion: 1.1, - upgrades: [{ - name: "Aerial Mobility Enhancement", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "1.6%"], - maxTiers: 5, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.016, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Dynamic Thrust Enhancement", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "1.6%"], - maxTiers: 5, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.016, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Missile Evasion Enhancement", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chance of being hit by missiles by ", "3%"], - maxTiers: 5, - affectedStat: "missileEvasion", - percentBuffPerTier: 1.03, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - img: "/weapons/icons/command.png", - systemAdjustment: null, - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increase the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "AT021", - title: "Heavy Attacker", - img: "/ships/at021_c.png", - type: "Fighter", - fighter_type: "Medium", - variant: "C", - variant_name: "Multi-Role Type", - manufacturer: "Dawn Accord", - direction: ["Outstanding Firepower", "Fighter & Corvette"], - scope: "Projectile Weapon", - weight: 10, - row: "Front", - cp: 1, - maxInFleet: 15, - aircraftPerSquadron: 3, - production: { - metal: 6100, - crystal: 480, - deuterium: 170, - timeSeconds: 710, - storage: 0 - }, - systems: [{ - type: "weapon", - name: "Precision Strike System", - img: "/weapons/icons/cannon.png", - main: true, - maxUpgradeSlots: 5, - systemAdjustment: "weaponDamage", - baseAntiship: 540, - baseAntiair: 0, - baseSiege: 57, - upgrades: [{ - name: "Multi-Target Strategy", - img: "/weapons/upgrades/strategies/prioritizeTargets.svg", - strategy: true, - description: ["Attacks every 2 rounds, with the main weapon now attacking ", "2", " targets. Increases weapon damage by ", "75%", " and reduces Hit Rate against the target's loading system by ", "10%", "."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 15 - }, { - name: "Warhead Modification", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Rearmament Enhancement", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Explosive Ammo Enhancement", - img: "/weapons/upgrades/critDamage.svg", - description: ["Increases weapon system Crit Damage by ", "8%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Guidance Signal Enhancement", - img: "/weapons/upgrades/missileHitrate.svg", - description: ["Increases all missile Hit Rate by ", "2%", " and torpedo Hit Rate by ", "2%"], - maxTiers: 5, - affectedStat: "generalHitrate", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Sustained Output Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Increases the weapon system's Duration by ", "50%", " and Rounds Per Cycle by ", "3", "."], - maxTiers: 2, - affectedStat: "damage", - percentBuffPerTier: 1.2, - tpPerTier: 10 - }, { - name: "Fast Rearmament", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Quick Repair", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }] - }, { - type: "weapon", - name: "Airborne Guiding System", - img: "/weapons/icons/cannon.png", - maxUpgradeSlots: 3, - systemAdjustment: "weaponDamage", - baseAntiship: 582, - baseAntiair: 0, - baseSiege: 72, - upgrades: [{ - name: "Warhead Modification", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Rearmament Enhancement", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Large Target Correction", - img: "/weapons/upgrades/bigHitrate.svg", - description: ["Increases weapon system Hit Rate against cruisers and higher-class ships by ", "3%"], - maxTiers: 5, - affectedStat: "bigHitrate", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }, { - name: "Large Target Correction", - img: "/weapons/upgrades/bigHitrate.svg", - description: ["Increases weapon system Hit Rate against cruisers and higher-class ships by ", "3%"], - maxTiers: 5, - affectedStat: "bigHitrate", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }, { - name: "Fast Rearmament", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Quick Repair", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 2, - img: "/weapons/icons/armor.png", - systemAdjustment: "hp", - baseHp: 4920, - baseArmor: 0, - baseEnergyShield: 0, - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Aero Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: [1, 1, 1, 1, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 3, - systemAdjustment: null, - img: "/weapons/icons/speed.png", - baseCruise: 3000, - baseWarp: 0, - baseEvasion: 1.1, - upgrades: [{ - name: "Dynamic Thrust Enhancement", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "1.6%"], - maxTiers: 5, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.016, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Missile Evasion Enhancement", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chance of being hit by missiles by ", "3%"], - maxTiers: 5, - affectedStat: "missileEvasion", - percentBuffPerTier: 1.03, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - img: "/weapons/icons/command.png", - systemAdjustment: null, - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increase the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "B192 Newland", - title: "Heavy Attacker", - img: "/ships/b192newland.png", - type: "Fighter", - fighter_type: "Medium", - variant: "A", - variant_name: "Multi-Role Type", - manufacturer: "Jupiter Industry", - direction: ["Strategy & Support", "Fighter & Corvette"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Front", - cp: 1, - maxInFleet: 10, - aircraftPerSquadron: 3, - production: { - metal: 7300, - crystal: 660, - deuterium: 290, - timeSeconds: 1060, - storage: 0 - }, - systems: [{ - type: 'weapon', - name: "Assault Cannon System", - img: "/weapons/icons/cannon.png", - main: true, - maxUpgradeSlots: 6, - systemAdjustment: "weaponDamage", - baseAntiship: 428, - baseAntiair: 0, - baseSiege: 90, - upgrades: [{ - name: "Precision Strike", - img: "/weapons/upgrades/strategies/heavyAmmo.svg", - description: ["Prioritizes attacks on super capital ships and increases the Extra Damage against the target's systems by ", "60%", " every ", "40", "s for ", "40", "s."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 15 - }, { - name: "Barrel Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Ammo Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Ammo Loader Enhancement", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Reduces Attack Interval by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }, { - name: "Barrel Heatsink Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Reduces Attack Interval by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }, { - name: "Fast Target Lock", - img: "/weapons/upgrades/targetSelectionTime2.svg", - description: ["Reduces the target-selection time of the weapon system by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Firing Assistance Enhancement", - img: "/weapons/upgrades/smallHitrate.svg", - description: ["Increases weapon system Hit Rate against frigates/destroyers by ", "3%"], - maxTiers: 5, - affectedStat: "smallHitrate", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }, { - name: "Quick Repair", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }, { - name: "Fast Rearmament", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }] - }, { - type: 'weapon', - name: "Anti-Aircraft Missile System", - img: "/weapons/icons/cannon.png", - maxUpgradeSlots: 4, - systemAdjustment: "weaponDamage", - baseAntiship: 0, - baseAntiair: 360, - baseSiege: 0, - upgrades: [{ - name: "Warhead Modification", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo Damage by ", "10%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.1, - tpPerTier: 3 - }, { - name: "Aircraft Weakpoint Detection", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Damage against aerial targets by ", "20%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.2, - tpPerTier: 3 - }, { - name: "Guidance Signal Enhancement", - img: "/weapons/upgrades/missileHitrate.svg", - description: ["Increases all missile Hit Rate by ", "10%", " and torpedo Hit Rate by ", "10%"], - maxTiers: 1, - affectedStat: "generalHitrate", - percentBuffPerTier: 1.1, - tpPerTier: 3 - }, { - name: "Loading Mechanism Upgrade", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "15%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.15, - tpPerTier: 3 - }, { - name: "Anti-Aircraft Radar Enhancement", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "15%"], - maxTiers: 1, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.15, - tpPerTier: 3 - }, { - name: "Fast Target Analysis Enhancement", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "15%"], - maxTiers: 1, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.15, - tpPerTier: 3 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 3, - img: "/weapons/icons/armor.png", - systemAdjustment: "hp", - baseHp: 4680, - baseArmor: 0, - baseEnergyShield: 0, - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Welding Tech Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Additional Armor Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: [1, 1, 1, 1, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 3, - systemAdjustment: null, - img: "/weapons/icons/speed.png", - baseCruise: 3000, - baseWarp: 0, - baseEvasion: 1.1, - upgrades: [{ - name: "Dynamic Thrust Enhancement", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - img: "/weapons/icons/command.png", - systemAdjustment: null, - upgrades: [{ - name: "Target Reset", - img: "/weapons/upgrades/targetReset.svg", - description: ["This ship's primary weapon prioritizes its attack on super capital ships."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 5 - }, { - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increase the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "BR050", - title: "Standard Bomber", - img: "/ships/br050_a.png", - type: "Fighter", - fighter_type: "Large", - variant: "A", - variant_name: "Anti-Ship Type", - manufacturer: "Dawn Accord", - direction: ["Outstanding Firepower", "Fighter & Corvette"], - scope: "Projectile Weapon", - weight: 10, - row: "Front", - cp: 1, - maxInFleet: 10, - aircraftPerSquadron: 2, - production: { - metal: 6640, - crystal: 620, - deuterium: 190, - timeSeconds: 830, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Airborne Bombardment System`, - main: true, - maxUpgradeSlots: 7, - baseAntiship: 1885, - baseAntiair: 0, - baseSiege: 675, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "High-Speed Torpedo", - img: "/weapons/upgrades/strategies/br050a_1.svg", - strategy: true, - description: ["Every ", "3", " round(s), the system's torpedo launchers are reloaded with high-speed torpedoes, reducing the chance of being intercepted by ", "40%", " and increasing the damage against systems by ", "35%", " upon hitting."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 15 - }, { - name: "Warhead Modification", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Rearmament Enhancement", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Siege Ammo Enhancement", - img: "/weapons/upgrades/siegeDamage.svg", - description: ["Increases weapon system Siege Damage by ", "6%"], - maxTiers: 5, - affectedStat: "siegeDamage", - percentBuffPerTier: 1.06, - tpPerTier: 2 - }, { - name: "City Weak Point Identification", - img: "/weapons/upgrades/siegeDamage.svg", - description: ["Increases weapon system Siege Damage by ", "6%"], - maxTiers: 5, - affectedStat: "siegeDamage", - percentBuffPerTier: 1.06, - tpPerTier: 2 - }, { - name: "Guidance Signal Enhancement", - img: "/weapons/upgrades/missileHitrate.svg", - description: ["Increases all missile Hit Rate by ", "2%", " and torpedo Hit Rate by ", "2%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Loading Mechanism Upgrade", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Ammo-Transport Acceleration", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Sympathetic Detonation", - img: "/weapons/upgrades/critDamage.svg", - description: ["The system's weapons have a ", "6%", " chance to deal an additional ", "10%", " Crit Damage"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Ammo Stealth Processing", - img: "/weapons/upgrades/torpedoIntercept.svg", - description: ["Reduces the chance of all torpedoes being intercepted by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 4, - systemAdjustment: "hp", - baseHp: 5040, - baseArmor: 2, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Welding Tech Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Additional Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Armor Rigidity Enhancement", - img: "/weapons/upgrades/armor.svg", - description: ["Increases Physical Resistance by ", "1"], - maxTiers: 3, - affectedStat: "armor", - percentBuffPerTier: 1, - tpPerTier: [1, 2, 2] - }, { - name: "Armor Hardening Process", - img: "/weapons/upgrades/armor.svg", - description: ["Increases Physical Resistance by ", "1"], - maxTiers: 3, - affectedStat: "armor", - percentBuffPerTier: 1, - tpPerTier: [1, 2, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 3, - systemAdjustment: null, - baseCruise: 2800, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.2, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }, { - name: "Target Reset", - img: "/weapons/upgrades/targetReset.svg", - description: ["This ship's primary weapon prioritizes its attack on small capital ships."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 5 - }, { - name: "Target Tracing Enhancement", - img: "/weapons/upgrades/targetSelectionTime2.svg", - description: ["Reduces the target-selection time of all aircraft's weapons by ", "3%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "BR050", - title: "Multi-Role Bomber", - img: "/ships/br050_b.png", - type: "Fighter", - fighter_type: "Large", - variant: "B", - variant_name: "Defense Type", - manufacturer: "Dawn Accord", - direction: ["Sustained Combat", "Fighter & Corvette"], - scope: "Projectile Weapon", - weight: 10, - row: "Front", - cp: 1, - maxInFleet: 10, - aircraftPerSquadron: 2, - production: { - metal: 6180, - crystal: 590, - deuterium: 230, - timeSeconds: 890, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Airborne Bombardment System`, - main: true, - maxUpgradeSlots: 6, - baseAntiship: 1257, - baseAntiair: 0, - baseSiege: 450, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Warhead Modification", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Rearmament Enhancement", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Siege Ammo Enhancement", - img: "/weapons/upgrades/siegeDamage.svg", - description: ["Increases weapon system Siege Damage by ", "6%"], - maxTiers: 5, - affectedStat: "siegeDamage", - percentBuffPerTier: 1.06, - tpPerTier: 2 - }, { - name: "City Weak Point Identification", - img: "/weapons/upgrades/siegeDamage.svg", - description: ["Increases weapon system Siege Damage by ", "6%"], - maxTiers: 5, - affectedStat: "siegeDamage", - percentBuffPerTier: 1.06, - tpPerTier: 2 - }, { - name: "Guidance Signal Enhancement", - img: "/weapons/upgrades/missileHitrate.svg", - description: ["Increases all missile Hit Rate by ", "2%", " and torpedo Hit Rate by ", "2%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Loading Mechanism Upgrade", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Ammo-Transport Acceleration", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Sympathetic Detonation", - img: "/weapons/upgrades/critDamage.svg", - description: ["The system's weapons have a ", "6%", " chance to deal an additional ", "10%", " Crit Damage"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Ammo Stealth Processing", - img: "/weapons/upgrades/torpedoIntercept.svg", - description: ["Reduces the chance of all torpedoes being intercepted by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }] - }, { - type: "misc", - name: "Electronic Defense System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/jamming.png", - baseEvasion: 1.25, - upgrades: [{ - name: "Enhanced Interference", - strategy: true, - img: "/weapons/upgrades/strategies/br050b_1.svg", - description: ["For the first ", "60", "s of battle, further reduces the hit rate of attacks from enemy aircraft against you by ", "50%", "."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 15 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 4, - systemAdjustment: "hp", - baseHp: 5040, - baseArmor: 0, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Welding Tech Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Additional Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Armor Rigidity Enhancement", - img: "/weapons/upgrades/armor.svg", - description: ["Increases Physical Resistance by ", "1"], - maxTiers: 3, - affectedStat: "armor", - percentBuffPerTier: 1, - tpPerTier: [1, 2, 2] - }, { - name: "Armor Hardening Process", - img: "/weapons/upgrades/armor.svg", - description: ["Increases Physical Resistance by ", "1"], - maxTiers: 3, - affectedStat: "armor", - percentBuffPerTier: 1, - tpPerTier: [1, 2, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 3, - systemAdjustment: null, - baseCruise: 2800, - baseWarp: 0, - baseEvasion: 1.1, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.2, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }, { - name: "Target Reset", - img: "/weapons/upgrades/targetReset.svg", - description: ["This ship's primary weapon prioritizes its attack on small capital ships."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 5 - }, { - name: "Target Tracing Enhancement", - img: "/weapons/upgrades/targetSelectionTime2.svg", - description: ["Reduces the target-selection time of all aircraft's weapons by ", "3%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "BR050", - title: "Torpedo Bomber", - img: "/ships/br050_c.png", - type: "Fighter", - fighter_type: "Large", - variant: "C", - variant_name: "Torpedo Type", - manufacturer: "Dawn Accord", - direction: ["Outstanding Firepower", "Fighter & Corvette"], - scope: "Projectile Weapon", - weight: 5, - row: "Front", - cp: 1, - maxInFleet: 10, - aircraftPerSquadron: 2, - production: { - metal: 7200, - crystal: 800, - deuterium: 280, - timeSeconds: 1120, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Experimental Special Torpedo Launching System`, - main: true, - maxUpgradeSlots: 7, - baseAntiship: 321, - baseAntiair: 0, - baseSiege: 127, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Warhead Modification", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Rearmament Enhancement", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Siege Ammo Enhancement", - img: "/weapons/upgrades/siegeDamage.svg", - description: ["Increases weapon system Siege Damage by ", "6%"], - maxTiers: 5, - affectedStat: "siegeDamage", - percentBuffPerTier: 1.06, - tpPerTier: 2 - }, { - name: "City Weak Point Identification", - img: "/weapons/upgrades/siegeDamage.svg", - description: ["Increases weapon system Siege Damage by ", "6%"], - maxTiers: 5, - affectedStat: "siegeDamage", - percentBuffPerTier: 1.06, - tpPerTier: 2 - }, { - name: "Guidance Signal Enhancement", - img: "/weapons/upgrades/missileHitrate.svg", - description: ["Increases all missile Hit Rate by ", "2%", " and torpedo Hit Rate by ", "2%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Loading Mechanism Upgrade", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Ammo-Transport Acceleration", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Ammo-Loader Enhancement", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Redues Attack Interval by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Ammo Stealth Processing", - img: "/weapons/upgrades/torpedoIntercept.svg", - description: ["Reduces the chance of all torpedoes being intercepted by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Special Torpedo Launching", - img: "/weapons/upgrades/br050c_1.svg", - description: ["Load the torpedo launcher with armor-melting torpedoes, granting ", "15%", "chance to inflict the ", "Armor Melting", " status on the target upon hitting. ", "Armor Melting", ": Suffer ", "80", " point(s) of special damage for ", "60", "s. This effect can exist up to ", "10", " layer(s). If the target is a building, then the damage is reduced by 75%."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 10 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 4, - systemAdjustment: "hp", - baseHp: 5040, - baseArmor: 0, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Welding Tech Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Additional Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Armor Rigidity Enhancement", - img: "/weapons/upgrades/armor.svg", - description: ["Increases Physical Resistance by ", "1"], - maxTiers: 3, - affectedStat: "armor", - percentBuffPerTier: 1, - tpPerTier: [1, 2, 2] - }, { - name: "Armor Hardening Process", - img: "/weapons/upgrades/armor.svg", - description: ["Increases Physical Resistance by ", "1"], - maxTiers: 3, - affectedStat: "armor", - percentBuffPerTier: 1, - tpPerTier: [1, 2, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 3, - systemAdjustment: null, - baseCruise: 2800, - baseWarp: 0, - baseEvasion: 1.1, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.2, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }, { - name: "Target Reset", - img: "/weapons/upgrades/targetReset.svg", - description: ["This ship's primary weapon prioritizes its attack on small capital ships."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 5 - }, { - name: "Target Tracing Enhancement", - img: "/weapons/upgrades/targetSelectionTime2.svg", - description: ["Reduces the target-selection time of all aircraft's weapons by ", "3%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "Balancer Anderson SC020", - title: "Scout", - img: "/ships/sc020.png", - type: "Fighter", - fighter_type: "Small", - variant: "A", - variant_name: "Interference Type", - manufacturer: "Antonios", - direction: ["Sustained Combat", "Fighter & Corvette"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Front", - cp: 1, - maxInFleet: 10, - aircraftPerSquadron: 5, - production: { - metal: 6030, - crystal: 400, - deuterium: 160, - timeSeconds: 630, - storage: 0 - }, - systems: [{ - type: "jamming", - name: "Airborne Jamming System", - main: true, - maxUpgradeSlots: 7, - systemAdjustment: "jamming", - img: "/weapons/icons/jamming.png", - upgrades: [{ - name: "Dodge Damage", - strategy: true, - img: "/weapons/upgrades/strategies/sc020_1.svg", - description: ["When attacked by enemy aircraft, it gives up its target and retreats to its carrier for ", "40", "s. Cooldown: ", "20", "s"], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 14 - }, { - name: "Jamming Enhancement", - img: "/weapons/upgrades/jammingCooldown.svg", - description: ["Increases jamming duration by ", "6%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Jamming Equipment Enhancement", - img: "/weapons/upgrades/jammingCooldown.svg", - description: ["Increases jamming duration by ", "6%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Weapon Cooling Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }, { - name: "Weapon Heatsink Efficiency", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }, { - name: "Fast Target Lock", - img: "/weapons/upgrades/targetSelectionTime2.svg", - description: ["Reduces the target-selection time of the weapon system by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Guidance Detection Jamming", - img: "/weapons/upgrades/missileEvasion.svg", - description: ["Reduces the chance of being hit by guided weapons by ", "4%"], - maxTiers: 5, - affectedStat: "missileEvasion", - percentBuffPerTier: 1.04, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Counter-Attack Info Gathering", - img: "/weapons/upgrades/directEvasion.svg", - description: ["Reduces the chances of being hit by direct-fire weapons by ", "3%"], - maxTiers: 5, - affectedStat: "directEvasion", - percentBuffPerTier: 1.03, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Electronic Cover", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Reduces the effect Lock-On Efficiency of anti-aircraft weapons has on you and the aircraft within the same carrier by ", "10%", " (effects of the same type cannot stack)"], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 14 - }] - }, { - type: "weapon", - name: `Airborne Cannon System`, - maxUpgradeSlots: 4, - baseAntiship: 30, - baseAntiair: 172, - baseSiege: 0, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Barrel Enhancement", - img: "/weapons/upgrades/strategies/genericDamage.svg", - description: ["Increases all cannon Damage by ", "10%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.1, - tpPerTier: 2 - }, { - name: "Ammo Enhancement", - img: "/weapons/upgrades/strategies/genericDamage.svg", - description: ["Increases all cannon Damage by ", "10%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.1, - tpPerTier: 2 - }, { - name: "Ammo-Loader Enhancement", - img: "/weapons/upgrades/strategies/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "15%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.15, - tpPerTier: 2 - }, { - name: "Barrel Heatsink Enhancement", - img: "/weapons/upgrades/strategies/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "15%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.15, - tpPerTier: 2 - }, { - name: "Anti-Aircraft Radar Enhancement", - img: "/weapons/upgrades/strategies/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "15%"], - maxTiers: 1, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.15, - tpPerTier: 2 - }, { - name: "Fast Target Analysis Enhancement", - img: "/weapons/upgrades/strategies/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "15%"], - maxTiers: 1, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.15, - tpPerTier: 2 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 3, - systemAdjustment: "hp", - baseHp: 3450, - baseArmor: 0, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Welding Tech Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Armor Energy Coating", - img: "/weapons/upgrades/energyShield.svg", - description: ["Increases Energy Resistance by ", "2%"], - maxTiers: 5, - affectedStat: "energyShield", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Low-Reflective Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by direct-fire weapons by ", "3%"], - maxTiers: 5, - affectedStat: "directEvasion", - percentBuffPerTier: 1.03, - tpPerTier: [1, 1, 1, 1, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 50000, - systemAdjustment: null, - baseCruise: 2800, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Aerial Mobility Enhancement", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Dynamic Thrust Enhancement", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Emergency Evasion System Enhancement", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Nozzle Masking Process", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chance of being hit by missiles by ", "3.7%"], - maxTiers: 4, - affectedStat: "missileEvasion", - percentBuffPerTier: 1.037, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "8%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: [2, 2, 2, 3, 3] - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "Bullfrog", - title: "Dual-Purpose Bomber", - img: "/ships/bullfrog.png", - type: "Fighter", - fighter_type: "Large", - variant: "A", - variant_name: "Siege Type", - manufacturer: "NOMA Shipping", - direction: ["Outstanding Firepower", "Fighter & Corvette"], - scope: "Projectile Weapon", - weight: 10, - row: "Front", - cp: 1, - maxInFleet: 10, - aircraftPerSquadron: 2, - production: { - metal: 7130, - crystal: 500, - deuterium: 190, - timeSeconds: 770, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Airborne Bombardment System`, - main: true, - maxUpgradeSlots: 7, - baseAntiship: 960, - baseAntiair: 0, - baseSiege: 440, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Concentrated Attacks", - img: "/weapons/upgrades/strategies/bullfrog_1.svg", - strategy: true, - description: ["Prioritizes attacks on super capital ships, increases Rounds Per Cycle by ", "2", ", Attack Duration by ", "30%", ", and Cooldown by ", "30%", " every ", "30", "s for ", "40", "s."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 15 - }, { - name: "Warhead Modification", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Rearmament Enhancement", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Siege Ammo Enhancement", - img: "/weapons/upgrades/siegeDamage.svg", - description: ["Increases weapon system Siege Damage by ", "6%"], - maxTiers: 5, - affectedStat: "siegeDamage", - percentBuffPerTier: 1.06, - tpPerTier: 2 - }, { - name: "City Weak Point Identification", - img: "/weapons/upgrades/siegeDamage.svg", - description: ["Increases weapon system Siege Damage by ", "6%"], - maxTiers: 5, - affectedStat: "siegeDamage", - percentBuffPerTier: 1.06, - tpPerTier: 2 - }, { - name: "Guidance Signal Enhancement", - img: "/weapons/upgrades/missileHitrate.svg", - description: ["Increases all missile Hit Rate by ", "2%", " and torpedo Hit Rate by ", "2%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Loading Mechanism Upgrade", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Ammo-Transport Acceleration", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Explosive Ammo Enhancement", - img: "/weapons/upgrades/critDamage.svg", - description: ["Increases weapon system Crit Damage by ", "8%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Ammo Stealth Processing", - img: "/weapons/upgrades/torpedoIntercept.svg", - description: ["Reduces the chance of all torpedoes being intercepted by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 4, - systemAdjustment: "hp", - baseHp: 4740, - baseArmor: 0, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Welding Tech Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Additional Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Armor Rigidity Enhancement", - img: "/weapons/upgrades/armor.svg", - description: ["Increases Physical Resistance by ", "1"], - maxTiers: 3, - affectedStat: "armor", - percentBuffPerTier: 1, - tpPerTier: [1, 2, 2] - }, { - name: "Armor Hardening Process", - img: "/weapons/upgrades/armor.svg", - description: ["Increases Physical Resistance by ", "1"], - maxTiers: 3, - affectedStat: "armor", - percentBuffPerTier: 1, - tpPerTier: [1, 2, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 50000, - systemAdjustment: null, - baseCruise: 3000, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "Target Reset", - img: "/weapons/upgrades/targetReset.svg", - description: ["This ship's primary weapon prioritizes its attack on small capital ships."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 5 - }, { - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "Hayreddin's Loyal", - title: "Pulsar Fighter", - img: "/ships/hayreddinsLoyal.png", - type: "Fighter", - fighter_type: "Medium", - variant: "A", - variant_name: "Special Type", - manufacturer: "Empty", - direction: ["Outstanding Firepower", "Sustained Combat", "Fighter & Corvette"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Front", - cp: 1, - maxInFleet: 8, - aircraftPerSquadron: 3, - production: { - metal: 9760, - crystal: 900, - deuterium: 490, - timeSeconds: 1590, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `"Starchaser" Charged Pulse Cannon System`, - main: true, - maxUpgradeSlots: 7, - baseAntiship: 1538, - baseAntiair: 738, - baseSiege: 507, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Charged Phase Strike", - img: "/weapons/upgrades/strategies/hayreddin_1.svg", - strategy: true, - description: ["The Charged Pulse weapon's damage increases by 12% for every 2 consecutive rounds it attacks the same target, up to 24%. THis bonus is reset after switching targets."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 18 - }, { - name: "Enhance Recharge Power", - img: "/weapons/upgrades/energyDamage.svg", - description: ["Increases all pulse cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Enhance Pulse Focus", - img: "/weapons/upgrades/energyDamage.svg", - description: ["Increases all pulse cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Enhance Pulse Focus", - img: "/weapons/upgrades/energyDamage.svg", - description: ["Increases all pulse cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Energy Control System Enhancement", - img: "/weapons/upgrades/energyHitrate.svg", - description: ["Increases all pulse cannon Hit Rate by ", "2%"], - maxTiers: 5, - affectedStat: "generalHitrate", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Weapon Heatsink Efficiency", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }, { - name: "Rapid Firing", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Reduces the weapon system's Firing Duration by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Rapid Firing", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Reduces the weapon system's Firing Duration by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Sympathetic Detonation", - img: "/weapons/upgrades/critDamage.svg", - description: ["The system's weapons have a ", "6%", " chance to deal an additional ", "10%", " Crit Damage"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 3, - systemAdjustment: "hp", - baseHp: 6480, - baseArmor: 3, - baseEnergyShield: 1.05, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Welding Tech Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Low-Reflection Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by direct-fire weapons by ", "3%"], - maxTiers: 5, - affectedStat: "directEvasion", - percentBuffPerTier: 1.03, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Aircraft Stealth Coating", - img: "/weapons/upgrades/reduceCritDamage.svg", - description: ["Increases enemy weapon lock-on time by ", "8%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 2, 2, 2, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 3, - systemAdjustment: null, - baseCruise: 3000, - baseWarp: 0, - baseEvasion: 1.25, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "1.6%"], - maxTiers: 5, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.016, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Aerial Mobility Enhancement", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "1.6%"], - maxTiers: 5, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.016, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Missile Evasion Enhancement", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chance of being hit by missiles by ", "3%"], - maxTiers: 5, - affectedStat: "missileEvasion", - percentBuffPerTier: 1.03, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 2, 2, 2, 2] - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "Janbiya Aer410", - title: "Assault Attacker", - img: "/ships/janbiyaAer410.png", - type: "Fighter", - fighter_type: "Medium", - variant: "A", - variant_name: "Anti-Ship Type", - manufacturer: "Jupiter Industry", - direction: ["Strategy & Support", "Fighter & Corvette"], - scope: "Projectile Weapon", - weight: 10, - row: "Front", - cp: 1, - maxInFleet: 10, - aircraftPerSquadron: 3, - production: { - metal: 6070, - crystal: 480, - deuterium: 200, - timeSeconds: 770, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Gun/Missile Attack System`, - main: true, - maxUpgradeSlots: 7, - baseAntiship: 472, - baseAntiair: 396, - baseSiege: 82, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Precision Strike", - img: "/weapons/upgrades/strategies/janbiya_1.svg", - strategy: true, - description: ["The system's primary weapon has a ", "15%", " chance to deal an additional ", "170%", " Crit Damage to the enemy target every ", "35", "s for ", "35", "s."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 15 - }, { - name: "Warhead Modification", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Rearmament Enhancement", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Barrel Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Guidance Signal Enhancement", - img: "/weapons/upgrades/missileHitrate.svg", - description: ["Increases all missile Hit Rate by ", "2%", " and torpedo Hit Rate by ", "2%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Loading Mechanism Upgrade", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Ammo-Transport Acceleration", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Reactive Explosive Warhead", - img: "/weapons/upgrades/critDamage.svg", - description: ["The system's weapons have a ", "6%", " chance to deal an additional ", "10%", " Crit Damage"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Explosive Ammo Enhancement", - img: "/weapons/upgrades/critDamage.svg", - description: ["Increases weapon system Crit Damage by ", "8%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Ammo Flexibility", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Reduces the chance of all missiles being intercepted by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 2, - systemAdjustment: "hp", - baseHp: 4050, - baseArmor: 0, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Welding Tech Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Additional Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 4, - systemAdjustment: null, - baseCruise: 3500, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Aircraft Charging Stance", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases the Hit Rate of the aircraft's weapons by ", "3.7%"], - maxTiers: 4, - affectedStat: "generalHitrate", - percentBuffPerTier: 1.037, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "Target Reset", - img: "/weapons/upgrades/targetReset.svg", - description: ["This ship's primary weapon prioritizes its attack on super capital ships."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 5 - }, { - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "Mistral", - title: "Combat Attacker", - img: "/ships/mistral.png", - type: "Fighter", - fighter_type: "Medium", - variant: "A", - variant_name: "Anti-Aircraft Type", - manufacturer: "Antonios", - direction: ["Fighter & Corvette"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Front", - cp: 1, - maxInFleet: 10, - aircraftPerSquadron: 4, - production: { - metal: 7520, - crystal: 650, - deuterium: 220, - timeSeconds: 930, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Airborne Weapon System`, - main: true, - maxUpgradeSlots: 7, - baseAntiship: 58, - baseAntiair: 558, - baseSiege: 0, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Pursue Targets", - img: "/weapons/upgrades/strategies/prioritizeTargets.svg", - strategy: true, - description: ["When the target's HP falls below ", "20%", ", it increases attack chances in a single round by ", "1", " and reduces Attack Interval by ", "40%", "."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 14 - }, { - name: "Barrel Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Ammo Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Fire Control Computer Enhancement", - img: "/weapons/upgrades/energyHitrate.svg", - description: ["Increases all cannon Hit Rate by ", "2%"], - maxTiers: 5, - affectedStat: "generalHitrate", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Ammo-Loader Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Barrel Heatsink Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Explosive Ammo Enhancement", - img: "/weapons/upgrades/critDamage.svg", - description: ["Increases weapon system Crit Damage by ", "8%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Weak Point Detection Enhancement", - img: "/weapons/upgrades/critDamage2.svg", - description: ["Increases weapon system Crit Damage by ", "8%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Aiming Speed Enhancement", - img: "/weapons/upgrades/targetSelectionTime2.svg", - description: ["Reduces the target-selection time of the weapon system by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Focus on Aerial Targets", - img: "/weapons/upgrades/targetReset.svg", - description: ["Prioritizes fighters and interceptors"], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 10 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 2, - systemAdjustment: "hp", - baseHp: 5400, - baseArmor: 0, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Welding Tech Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Additional Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 4, - systemAdjustment: null, - baseCruise: 3100, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Aircraft Charging Stance", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases the Hit Rate of the aircraft's weapons by ", "3.7%"], - maxTiers: 4, - affectedStat: "generalHitrate", - percentBuffPerTier: 1.037, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "Target Reset", - img: "/weapons/upgrades/targetReset.svg", - description: ["This ship's prmary weapon prioritizes its attack on super capital ships."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 5 - }, { - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "SC002", - title: "Quantum Scout", - img: "/ships/sc002.png", - type: "Fighter", - fighter_type: "Small", - variant: "A", - variant_name: "Generic Type", - manufacturer: "Dawn Accord", - direction: ["Sustained Combat", "Strategy & Support", "Fighter & Corvette"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Front", - cp: 1, - maxInFleet: 15, - aircraftPerSquadron: 5, - production: { - metal: 4160, - crystal: 300, - deuterium: 140, - timeSeconds: 510, - storage: 0 - }, - systems: [{ - type: "jamming", - name: "Electronic Recon System", - main: true, - maxUpgradeSlots: 7, - systemAdjustment: "jamming", - img: "/weapons/icons/jamming.png", - upgrades: [{ - name: "Dodge Damage", - strategy: true, - img: "/weapons/upgrades/strategies/sc020_1.svg", - description: ["When attacked by enemy aircraft, it gives up its target and retreats to its carrier for ", "40", "s. Cooldown: ", "20", "s"], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 14 - }, { - name: "Jamming Enhancement", - img: "/weapons/upgrades/jammingCooldown.svg", - description: ["Increases jamming duration by ", "6%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Jamming Equipment Enhancement", - img: "/weapons/upgrades/jammingCooldown.svg", - description: ["Increases jamming duration by ", "6%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Weapon Cooling Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }, { - name: "Weapon Heatsink Efficiency", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }, { - name: "Fast Target Lock", - img: "/weapons/upgrades/targetSelectionTime2.svg", - description: ["Reduces the target-selection time of the weapon system by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Guidance Detection Jamming", - img: "/weapons/upgrades/missileEvasion.svg", - description: ["Reduces the chance of being hit by guided weapons by ", "4%"], - maxTiers: 5, - affectedStat: "missileEvasion", - percentBuffPerTier: 1.04, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Counter-Attack Info Gathering", - img: "/weapons/upgrades/directEvasion.svg", - description: ["Reduces the chances of being hit by direct-fire weapons by ", "3%"], - maxTiers: 5, - affectedStat: "directEvasion", - percentBuffPerTier: 1.03, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Electronic Cover", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Reduces the effect Lock-On Efficiency of anti-aircraft weapons has on you and the aircraft within the same carrier by ", "15%", " (effects of the same type cannot stack)"], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 14 - }] - }, { - type: "weapon", - name: `Airborne Cannon System`, - maxUpgradeSlots: 4, - baseAntiship: 140, - baseAntiair: 140, - baseSiege: 0, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Barrel Enhancement", - img: "/weapons/upgrades/strategies/genericDamage.svg", - description: ["Increases all cannon Damage by ", "10%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.1, - tpPerTier: 2 - }, { - name: "Ammo Enhancement", - img: "/weapons/upgrades/strategies/genericDamage.svg", - description: ["Increases all cannon Damage by ", "10%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.1, - tpPerTier: 2 - }, { - name: "Ammo-Loader Enhancement", - img: "/weapons/upgrades/strategies/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "15%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.15, - tpPerTier: 2 - }, { - name: "Barrel Heatsink Enhancement", - img: "/weapons/upgrades/strategies/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "15%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.15, - tpPerTier: 2 - }, { - name: "Anti-Aircraft Radar Enhancement", - img: "/weapons/upgrades/strategies/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "15%"], - maxTiers: 1, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.15, - tpPerTier: 2 - }, { - name: "Fast Target Analysis Enhancement", - img: "/weapons/upgrades/strategies/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "15%"], - maxTiers: 1, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.15, - tpPerTier: 2 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 3, - systemAdjustment: "hp", - baseHp: 2850, - baseArmor: 0, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Welding Tech Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Armor Energy Coating", - img: "/weapons/upgrades/energyShield.svg", - description: ["Increases Energy Resistance by ", "2%"], - maxTiers: 5, - affectedStat: "energyShield", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Low-Reflective Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by direct-fire weapons by ", "3%"], - maxTiers: 5, - affectedStat: "directEvasion", - percentBuffPerTier: 1.03, - tpPerTier: [1, 1, 1, 1, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 3, - systemAdjustment: null, - baseCruise: 2800, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Aerial Mobility Enhancement", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Dynamic Thrust Enhancement", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Emergency Evasion System Enhancement", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Nozzle Masking Process", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chance of being hit by missiles by ", "3.7%"], - maxTiers: 4, - affectedStat: "missileEvasion", - percentBuffPerTier: 1.037, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "8%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: [2, 2, 2, 3, 3] - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "Sandrake", - title: "Atmospheric Interceptor", - img: "/ships/sandrake.png", - type: "Fighter", - fighter_type: "Small", - variant: "A", - variant_name: "Dual-Purpose Type", - manufacturer: "NOMA Shipping", - direction: ["Strategy & Support", "Fighter & Corvette"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Front", - cp: 1, - maxInFleet: 10, - aircraftPerSquadron: 5, - production: { - metal: 4990, - crystal: 440, - deuterium: 140, - timeSeconds: 610, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Offensive AA Cannon System`, - main: true, - maxUpgradeSlots: 7, - baseAntiship: 24, - baseAntiair: 537, - baseSiege: 0, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Pursue Targets", - img: "/weapons/upgrades/strategies/prioritizeTargets.svg", - strategy: true, - description: ["When the target's HP falls below ", "20%", ", it increases attack chances in a single round by ", "1", " and reduces Attack Interval by ", "40%", "."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 13 - }, { - name: "Barrel Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Ammo Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Anti-Aircraft Ammo Enhancement", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Damage against aerial targets by ", "4%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.04, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Ammo-Loader Enhancement", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Reduces Attack Interval by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Barrel Heatsink Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Reduces Attack Interval by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Fast Target Lock", - img: "/weapons/upgrades/targetSelectionTime2.svg", - description: ["Reduces the target-selection time of the weapon system by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Anti-Aircraft Radar Enhancement", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "3%"], - maxTiers: 5, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.03, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Quick Repair", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }, { - name: "Fast Rearmament", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 4, - systemAdjustment: "hp", - baseHp: 4200, - baseArmor: 0, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Welding Tech Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Additional Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Anti-Detection Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: 1 - }, { - name: "Critical-system Armor Enhancement", - img: "/weapons/upgrades/systemHp.svg", - description: ["RIncreases main system HP by ", "4%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 4, - systemAdjustment: null, - baseCruise: 2800, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Aerial Mobility Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Missile Evasion Enhancement", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chance of being hit by missiles by ", "3.7%"], - maxTiers: 4, - affectedStat: "missileEvasion", - percentBuffPerTier: 1.037, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "8%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: [2, 2, 2, 3, 3] - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "Spore A404", - title: "Light Fighter", - img: "/ships/sporeA404.png", - type: "Fighter", - fighter_type: "Small", - variant: "A", - variant_name: "Anti-Aircraft Type", - manufacturer: "Jupiter Industry", - direction: ["Strategy & Support", "Fighter & Corvette"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Front", - cp: 1, - maxInFleet: 10, - aircraftPerSquadron: 5, - production: { - metal: 4640, - crystal: 310, - deuterium: 120, - timeSeconds: 480, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Airborne Combat System`, - main: true, - maxUpgradeSlots: 7, - baseAntiship: 27, - baseAntiair: 398, - baseSiege: 0, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Pursue Targets", - img: "/weapons/upgrades/strategies/prioritizeTargets.svg", - strategy: true, - description: ["When the target's HP falls below ", "20%", ", it increases attack chances in a single round by ", "1", " and reduces Attack Interval by ", "40%", "."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 14 - }, { - name: "Barrel Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Ammo Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Ammo-Loader Enhancement", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Reduces Attack Interval by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Barrel Heatsink Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Reduces Attack Interval by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Fast Target Lock", - img: "/weapons/upgrades/targetSelectionTime2.svg", - description: ["Reduces the target-selection time of the weapon system by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Anti-Aircraft Radar Enhancement", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "3%"], - maxTiers: 5, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.03, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Quick Repair", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Fast Rearmament", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Focus on Aerial Targets", - img: "/weapons/upgrades/targetReset.svg", - description: ["Prioritizes fighters and interceptors"], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 9 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 3, - systemAdjustment: "hp", - baseHp: 5400, - baseArmor: 0, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Welding Tech Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Additional Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: 1 - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 4, - systemAdjustment: null, - baseCruise: 3100, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Aerial Mobility Enhancement", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Missile Evasion Enhancement", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chance of being hit by missiles by ", "3.7%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "8%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: [2, 2, 2, 3, 3] - }, { - name: "Stealth Maneuvers", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["When the aircraft is returning to the carrier, there is a 30% chance of ignoring the enemy anti-aircraft weapon's pre-targeting effect"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 12 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "Target Reset", - img: "/weapons/upgrades/targetReset.svg", - description: ["This ship's prmary weapon prioritizes its attack on super capital ships."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 5 - }, { - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "Stingray", - title: "Torpedo Bomber", - img: "/ships/stingray.png", - type: "Fighter", - fighter_type: "Large", - variant: "A", - variant_name: "Stealth Type", - manufacturer: "Jupiter Industry", - direction: ["Outstanding Firepower", "Sustained Combat", "Fighter & Corvette"], - scope: "Projectile Weapon", - weight: 10, - row: "Front", - cp: 1, - maxInFleet: 10, - aircraftPerSquadron: 2, - production: { - metal: 5360, - crystal: 730, - deuterium: 260, - timeSeconds: 990, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Airborne Bombardment System`, - main: true, - maxUpgradeSlots: 7, - baseAntiship: 1560, - baseAntiair: 0, - baseSiege: 496, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Stealth Attacks", - img: "/weapons/upgrades/strategies/stingray_1.svg", - strategy: true, - description: ["Triggers Camouflage, increasing Evasion by ", "90%", " and increasing Hit Rate by ", "30%", " every ", "90", "s for ", "30", "s."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 14 - }, { - name: "Warhead Modification", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Rearmament Enhancement", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Siege Ammo Enhancement", - img: "/weapons/upgrades/siegeDamage.svg", - description: ["Increases weapon system Siege Damage by ", "6%"], - maxTiers: 5, - affectedStat: "siegeDamage", - percentBuffPerTier: 1.06, - tpPerTier: 2 - }, { - name: "City Weak Point Identification", - img: "/weapons/upgrades/siegeDamage.svg", - description: ["Increases weapon system Siege Damage by ", "6%"], - maxTiers: 5, - affectedStat: "siegeDamage", - percentBuffPerTier: 1.06, - tpPerTier: 2 - }, { - name: "Guidance Signal Enhancement", - img: "/weapons/upgrades/missileHitrate.svg", - description: ["Increases all missile Hit Rate by ", "2%", " and torpedo Hit Rate by ", "2%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Loading Mechanism Upgrade", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Ammo-Transport Acceleration", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Sympathetic Detonation", - img: "/weapons/upgrades/critDamage.svg", - description: ["The system's weapons have a ", "6%", " chance to deal an additional ", "10%", " Crit Damage"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Ammo Stealth Processing", - img: "/weapons/upgrades/torpedoIntercept.svg", - description: ["Reduces the chance of all torpedoes being intercepted by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 4, - systemAdjustment: "hp", - baseHp: 5200, - baseArmor: 0, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Welding Tech Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Additional Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Armor Energy Coating", - img: "/weapons/upgrades/energyShield.svg", - description: ["Increases Energy Resistance by ", "2%"], - maxTiers: 5, - affectedStat: "energyShield", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Identify Interference Coating", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Reduces the effect Lock-On Efficiency of anti-aircraft weapons has on you by ", "20%", " (Becomes ineffective after getting hit by the enemy)"], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 6 - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 3, - systemAdjustment: null, - baseCruise: 3200, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.2, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "8%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: [2, 2, 2, 3, 3] - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "Target Reset", - img: "/weapons/upgrades/targetReset.svg", - description: ["This ship's primary weapon prioritizes its attack on small capital ships."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 5 - }, { - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "Strix A100", - title: "Joint Attacker", - img: "/ships/strixA100.png", - type: "Fighter", - fighter_type: "Medium", - variant: "A", - variant_name: "Anti-Ship Type", - manufacturer: "NOMA Shipping", - direction: ["Fighter & Corvette"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Front", - cp: 1, - maxInFleet: 10, - aircraftPerSquadron: 3, - production: { - metal: 7460, - crystal: 480, - deuterium: 200, - timeSeconds: 780, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Charged Pulse Cannon System`, - main: true, - maxUpgradeSlots: 6, - baseAntiship: 663, - baseAntiair: 459, - baseSiege: 132, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/strategies/heavyAmmo.svg", - strategy: true, - description: ["Prioritizes attacks on frigates and destroyers, reduces Attack Duration by ", "50%", ", and increases Cooldown by ", "70%", " every ", "45", "s for ", "35", "s."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 15 - }, { - name: "Enhance Recharge Power", - img: "/weapons/upgrades/energyDamage.svg", - description: ["Increases all pulse cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Enhance Pulse Focus", - img: "/weapons/upgrades/energyDamage.svg", - description: ["Increases all pulse cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Fast Target Analysis Enhancement", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "3%"], - maxTiers: 5, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }, { - name: "Energy Control System Enhancement", - img: "/weapons/upgrades/energyHitrate.svg", - description: ["Increases all pulse cannon Hit Rate by ", "2%"], - maxTiers: 5, - affectedStat: "generalHitrate", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Charging Device Enhancement", - img: "/weapons/upgrades/energyCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Sympathetic Detonation", - img: "/weapons/upgrades/critDamage.svg", - description: ["The system's weapons have a ", "6%", " chance to deal an additional ", "10%", " Crit Damage"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Explosive Ammo Enhancement", - img: "/weapons/upgrades/critDamage.svg", - description: ["Increases weapon system Crit Damage by ", "8%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Weapon Heatsink Efficiency", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 3, - systemAdjustment: "hp", - baseHp: 4920, - baseArmor: 0, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Welding Tech Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Additional Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: [1, 1, 1, 1, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 5, - systemAdjustment: null, - baseCruise: 2800, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Close Combat Assault", - strategy: true, - img: "/weapons/upgrades/strategies/strix_1.svg", - description: ["When flying to attack the front-row target, there is a 30% chance of ignoring the enemy anti-aircraft weapon's pre-targeting effect"], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 15 - }, { - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Aircraft Charging Stance", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases the Hit Rate of the aircraft's weapons by ", "3.7%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "Target Reset", - img: "/weapons/upgrades/targetReset.svg", - description: ["This ship's primary weapon prioritizes its attack on super capital ships."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }, { - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "Vitas A021", - title: "Heavy Attacker", - img: "/ships/vitasA021.png", - type: "Fighter", - fighter_type: "Medium", - variant: "A", - variant_name: "Anti-Ship Type", - manufacturer: "Antonios", - direction: ["Outstanding Firepower", "Fighter & Corvette"], - scope: "Projectile Weapon", - weight: 10, - row: "Front", - cp: 1, - maxInFleet: 10, - aircraftPerSquadron: 3, - production: { - metal: 8960, - crystal: 890, - deuterium: 320, - timeSeconds: 1290, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Precision Strike System`, - main: true, - maxUpgradeSlots: 6, - baseAntiship: 851, - baseAntiair: 0, - baseSiege: 190, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Precision Strike", - img: "/weapons/upgrades/strategies/heavyAmmo.svg", - strategy: true, - description: ["Prioritizes attacks on super capital ships and increases the Extra Damage against the target's suste,s by ", "60%", " every ", "30", "s for ", "30", "s."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 15 - }, { - name: "Warhead Modification", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Rearmament Enhancement", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Guidance Signal Enhancement", - img: "/weapons/upgrades/missileHitrate.svg", - description: ["Increases all missile Hit Rate by ", "2%", " and torpedo Hit Rate by ", "2%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Loading Mechanism Upgrade", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Ammo-Transport Acceleration", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Explosive Ammo Enhancement", - img: "/weapons/upgrades/critDamage.svg", - description: ["Increases weapon system Crit Damage by ", "8%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Weak Point Detection Enhancement", - img: "/weapons/upgrades/critDamage2.svg", - description: ["Increases weapon system Crit Damage by ", "8%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Ammo Flexibility", - img: "/weapons/upgrades/torpedoIntercept.svg", - description: ["Reduces the chance of all torpedoes being intercepted by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }] - }, { - type: "weapon", - name: `Counter Cannon System`, - main: true, - maxUpgradeSlots: 4, - baseAntiship: 20, - baseAntiair: 180, - baseSiege: 0, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Barrel Enhancement", - img: "/weapons/upgrades/strategies/genericDamage.svg", - description: ["Increases all cannon Damage by ", "10%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.1, - tpPerTier: 2 - }, { - name: "Ammo Enhancement", - img: "/weapons/upgrades/strategies/genericDamage.svg", - description: ["Increases all cannon Damage by ", "10%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.1, - tpPerTier: 2 - }, { - name: "Ammo-Loader Enhancement", - img: "/weapons/upgrades/strategies/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "15%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.15, - tpPerTier: 2 - }, { - name: "Barrel Heatsink Enhancement", - img: "/weapons/upgrades/strategies/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "15%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.15, - tpPerTier: 2 - }, { - name: "Anti-Aircraft Radar Enhancement", - img: "/weapons/upgrades/strategies/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "15%"], - maxTiers: 1, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.15, - tpPerTier: 2 - }, { - name: "Fast Target Analysis Enhancement", - img: "/weapons/upgrades/strategies/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "15%"], - maxTiers: 1, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.15, - tpPerTier: 2 - }] - }, { - type: "armor", - name: "Composite Armor System", - maxUpgradeSlots: 3, - systemAdjustment: "hp", - baseHp: 5370, - baseArmor: 3, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Welding Tech Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Additional Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: [1, 1, 1, 1, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 3, - systemAdjustment: null, - baseCruise: 3300, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "Target Reset", - img: "/weapons/upgrades/targetReset.svg", - description: ["This ship's primary weapon prioritizes its attack on small capital ships."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }, { - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "Vitas-B010", - title: "Bomber", - img: "/ships/vitasB010.png", - type: "Fighter", - fighter_type: "Large", - variant: "A", - variant_name: "Anti-Ship Type", - manufacturer: "Antonios", - direction: ["Outstanding Firepower", "Sustained Combat", "Fighter & Corvette"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Front", - cp: 1, - maxInFleet: 10, - aircraftPerSquadron: 2, - production: { - metal: 9260, - crystal: 880, - deuterium: 270, - timeSeconds: 1180, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Plasma Bombardment System`, - main: true, - maxUpgradeSlots: 7, - baseAntiship: 2294, - baseAntiair: 0, - baseSiege: 848, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Active Maneuvers", - img: "/weapons/upgrades/strategies/strix_1.svg", - strategy: true, - description: ["When attacked by enemy aircraft, increases Evasion by ", "30%", ". Cooldown: ", "30", "s."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 15 - }, { - name: "Plasma Generation Enhancement", - img: "/weapons/upgrades/plasmaDamage.svg", - description: ["Increases all plasma weapon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Plasma Capacity Enhancement", - img: "/weapons/upgrades/plasmaDamage.svg", - description: ["Increases all plasma weapon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Siege Ammo Enhancement", - img: "/weapons/upgrades/siegeDamage.svg", - description: ["Increases weapon system Siege Damage by ", "6%"], - maxTiers: 5, - affectedStat: "siegeDamage", - percentBuffPerTier: 1.06, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "City Weak Point Identification", - img: "/weapons/upgrades/siegeDamage.svg", - description: ["Increases weapon system Siege Damage by ", "6%"], - maxTiers: 5, - affectedStat: "siegeDamage", - percentBuffPerTier: 1.06, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Fast Target Lock", - img: "/weapons/upgrades/targetSelectionTime2.svg", - description: ["Reduces the target-selection time of the weapon system by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Loading Mechanism Upgrade", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Ammo-Transport Acceleration", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 1 - }, { - name: "Sympathetic Detonation", - img: "/weapons/upgrades/critDamage.svg", - description: ["The system's weapons have a ", "6%", " chance to deal an additional ", "10%", " Crit Damage"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 2, 2, 2, 2] - }, { - name: "Large Target Correction", - img: "/weapons/upgrades/bigHitrate.svg", - description: ["Increases weapon system Hit Rate against cruisers and higher-class ships by ", "3%"], - maxTiers: 5, - affectedStat: "bigHitrate", - percentBuffPerTier: 1.03, - tpPerTier: [1, 2, 2, 2, 2] - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 5, - systemAdjustment: "hp", - baseHp: 5860, - baseArmor: 10, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Welding Tech Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Additional Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Thruster Masking", - img: "/weapons/upgrades/reduceCritDamage.svg", - description: ["Increases enemy weapon lock-on time by ", "8%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Aircraft Stealth Coating", - img: "/weapons/upgrades/reduceCritDamage.svg", - description: ["Increases enemy weapon lock-on time by ", "8%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Identify Interference Coating", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Reduces the effect Lock-On Efficiency of anti-aircraft weapons has on you by ", "20%", " (Becomes ineffective after getting hit by the enemy)"], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 6 - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 50000, - systemAdjustment: null, - baseCruise: 3000, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "CV-II003", - title: "Light Corvette", - img: "/ships/cvii003.png", - type: "Corvette", - variant: "A", - variant_name: "Multi-Role Type", - manufacturer: "Dawn Accord", - direction: ["Strategy & Support", "Fighter & Corvette"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Front", - cp: 2, - maxInFleet: 15, - production: { - metal: 4270, - crystal: 270, - deuterium: 60, - timeSeconds: 440, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Rapid-Fire Battery System`, - main: true, - maxUpgradeSlots: 6, - baseAntiship: 1880, - baseAntiair: 144, - baseSiege: 418, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Prioritize Firepower", - img: "/weapons/upgrades/strategies/prioritizeFirepower.svg", - strategy: true, - description: ["Reduces the primary weapon's Cooldown by ", "80%", " and turns off other weapons in the system every ", "90", "s for ", "15", "s."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 15 - }, { - name: "Barrel Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Ammo Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Ammo-Loader Enhancement", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Reduces Attack Interval by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }, { - name: "Barrel Heatsink Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Reduces Attack Interval by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }, { - name: "Fast Targeet Lock", - img: "/weapons/upgrades/targetSelectionTime2.svg", - description: ["Reduces the target-selection time of the weapon system by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Anti-Aircraft Radar Enhancement", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "3%"], - maxTiers: 5, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }, { - name: "Quick Repair", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }, { - name: "Fast Rearmament", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 3, - systemAdjustment: "hp", - baseHp: 4900, - baseArmor: 2, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Welding Tech Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Additional Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: [1, 1, 1, 1, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 3, - systemAdjustment: null, - baseCruise: 2500, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Aerial Mobility Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Missile Evasion Enhancement", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chance of being hit by missiles by ", "3.7%"], - maxTiers: 4, - affectedStat: "missileEvasion", - percentBuffPerTier: 1.037, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 0, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [] - }] - }, { - name: "CV-M011", - title: "Heavy Missile Corvette", - img: "/ships/cvm011_a.png", - type: "Corvette", - variant: "A", - variant_name: "Missile Type", - manufacturer: "Dawn Accord", - direction: ["Outstanding Firepower", "Sustained Combat", "Strategy & Support", "Fighter & Corvette"], - scope: "Projectile Weapon", - weight: 10, - row: "Front", - cp: 2, - maxInFleet: 15, - production: { - metal: 5320, - crystal: 410, - deuterium: 70, - timeSeconds: 600, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Assault Missile System`, - main: true, - maxUpgradeSlots: 6, - baseAntiship: 2100, - baseAntiair: 0, - baseSiege: 240, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Warhead Modification", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Rearmament Enhancement", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Guidance Signal Enhancement", - img: "/weapons/upgrades/missileHitrate.svg", - description: ["Increases all missile Hit Rate by ", "2%", " and torpedo Hit Rate by ", "2%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Loading Mechanism Upgrade", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }, { - name: "Ammo-Transport Acceleration", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }, { - name: "Reactive Explosive Warhead", - img: "/weapons/upgrades/critDamage.svg", - description: ["The system's weapons have a ", "6%", " chance to deal an additional ", "10%", " Crit Damage"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Explosive Ammo Enhancement", - img: "/weapons/upgrades/critDamage.svg", - description: ["Increases weapon system Crit Damage by ", "8%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Weak Point Detection Enhancement", - img: "/weapons/upgrades/critDamage2.svg", - description: ["Increases weapon system Crit Damage by ", "8%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Ammo Flexibility", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases weapon system Crit Damage by ", "8%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }] - }, { - type: "weapon", - name: `Anti-Aircraft Battery System`, - main: true, - maxUpgradeSlots: 5, - baseAntiship: 87, - baseAntiair: 837, - baseSiege: 0, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Anti-Aircraft Measures", - img: "/weapons/upgrades/heavyAmmo.svg", - strategy: true, - description: ["When attacked by enemy aircraft, it decreases weapon system Cooldown by ", "80%", " for ", "15", "s. Cooldown: ", "30", "s."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 6 - }, { - name: "Barrel Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon Damage by ", "10%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.1, - tpPerTier: 3 - }, { - name: "Anti-Aircraft Ammo Enhancement", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Damage against aerial targets by ", "20%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.2, - tpPerTier: 3 - }, { - name: "Ammo-Loader Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "15%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.15, - tpPerTier: 3 - }, { - name: "Barrel Heatsink Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "15%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.15, - tpPerTier: 3 - }, { - name: "Anti-Aircraft Radar Enhancement", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "15%"], - maxTiers: 1, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.15, - tpPerTier: 3 - }, { - name: "Fast Target Analysis Enhancement", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "15%"], - maxTiers: 1, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.15, - tpPerTier: 3 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 3, - systemAdjustment: "hp", - baseHp: 7500, - baseArmor: 2, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Welding Tech Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Additional Armor Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: 1 - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 2, - systemAdjustment: null, - baseCruise: 2500, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 0, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [] - }] - }, { - name: "CV-M011", - title: "Heavy Cannon Corvette", - img: "/ships/cvm011_b.png", - type: "Corvette", - variant: "B", - variant_name: "Cannon Type", - manufacturer: "Dawn Accord", - direction: ["Fighter & Corvette"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Front", - cp: 2, - maxInFleet: 15, - production: { - metal: 4590, - crystal: 320, - deuterium: 60, - timeSeconds: 490, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Cannon Attack System`, - main: true, - maxUpgradeSlots: 4, - baseAntiship: 2228, - baseAntiair: 0, - baseSiege: 282, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Barrel Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: [2, 2, 2, 3, 3] - }, { - name: "Ammo Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: [2, 2, 2, 3, 3] - }, { - name: "Ammo-Loader Enhancement", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Reduces Attack Interval by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: [2, 2, 2, 3, 3] - }, { - name: "Barrel Heatsink Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Reduces Attack Interval by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: [2, 2, 2, 3, 3] - }, { - name: "Firing Assistance Enhancement", - img: "/weapons/upgrades/smallHitrate.svg", - description: ["Increases weapon system Hit Rate against frigates/destroyers by ", "3%"], - maxTiers: 5, - affectedStat: "smallHitrate", - percentBuffPerTier: 1.03, - tpPerTier: [2, 2, 2, 3, 3] - }, { - name: "Aiming Mechanism Enhancement", - img: "/weapons/upgrades/smallHitrate.svg", - description: ["Increases weapon system Hit Rate against frigates/destroyers by ", "3%"], - maxTiers: 5, - affectedStat: "smallHitrate", - percentBuffPerTier: 1.03, - tpPerTier: [2, 2, 2, 3, 3] - }] - }, { - type: "weapon", - name: `Anti-Aircraft Battery System`, - main: true, - maxUpgradeSlots: 5, - baseAntiship: 87, - baseAntiair: 837, - baseSiege: 0, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Anti-Aircraft Measures", - img: "/weapons/upgrades/heavyAmmo.svg", - strategy: true, - description: ["When attacked by enemy aircraft, it decreases weapon system Cooldown by ", "80%", " for ", "15", "s. Cooldown: ", "30", "s."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 6 - }, { - name: "Barrel Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon Damage by ", "10%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.1, - tpPerTier: 3 - }, { - name: "Anti-Aircraft Ammo Enhancement", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Damage against aerial targets by ", "20%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.2, - tpPerTier: 3 - }, { - name: "Ammo-Loader Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "15%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.15, - tpPerTier: 3 - }, { - name: "Barrel Heatsink Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "15%"], - maxTiers: 1, - affectedStat: "damage", - percentBuffPerTier: 1.15, - tpPerTier: 3 - }, { - name: "Anti-Aircraft Radar Enhancement", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "15%"], - maxTiers: 1, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.15, - tpPerTier: 3 - }, { - name: "Fast Target Analysis Enhancement", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "15%"], - maxTiers: 1, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.15, - tpPerTier: 3 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 3, - systemAdjustment: "hp", - baseHp: 7500, - baseArmor: 2, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Welding Tech Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Additional Armor Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: 1 - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 2, - systemAdjustment: null, - baseCruise: 2500, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 0, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [] - }] - }, { - name: "CV-M011", - title: "High-Speed Missile Corvette", - img: "/ships/cvm011_c.png", - type: "Corvette", - variant: "C", - variant_name: "High-Speed Type", - manufacturer: "Dawn Accord", - direction: ["Fighter & Corvette"], - scope: "Projectile Weapon", - weight: 5, - row: "Front", - cp: 2, - maxInFleet: 15, - production: { - metal: 5260, - crystal: 410, - deuterium: 70, - timeSeconds: 600, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Precision Guidance System`, - main: true, - maxUpgradeSlots: 6, - baseAntiship: 1100, - baseAntiair: 624, - baseSiege: 130, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Steady Firing", - strategy: true, - img: "/weapons/upgrades/strategies/concentrateFire.svg", - description: ["After every ", "4", " round(s) of attacks of the main weapon in the system, increases the Rounds Per Cycle by ", "1", " for the next round of attack."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 15 - }, { - name: "Rearmament Enhancement", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Armor-Penetration Enhancement", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Anti-Aircraft Radar Enhancement", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "15%"], - maxTiers: 5, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }, { - name: "Guidance Signal Enhancement", - img: "/weapons/upgrades/missileHitrate.svg", - description: ["Increases all missile Hit Rate by ", "2%", " and torpedo Hit Rate by ", "2%"], - maxTiers: 5, - affectedStat: "generalHitrate", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Loading Mechanism Upgrade", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "15%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }, { - name: "Ammo-Transport Acceleration", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "15%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: 2 - }, { - name: "High-Explosive Warhead", - img: "/weapons/upgrades/commandRepair.svg", - description: ["The system's weapons have a ", "6%", " chance to deal an additional ", "10%", " Crit Damage when attacking an aircraft"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Reactive Explosive Warhead", - img: "/weapons/upgrades/critDamage.svg", - description: ["The weapon system will cause an additional ", "8%", " Crit Damage when attacking aircraft"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }] - }, { - type: "weapon", - name: `Counter Cannon System`, - main: true, - maxUpgradeSlots: 5, - baseAntiship: 106, - baseAntiair: 384, - baseSiege: 0, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Barrel Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Ammo Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Anti-Aircraft Radar Enhancement", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "3%"], - maxTiers: 5, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.03, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Fast Target Analysis Enhancement", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "3%"], - maxTiers: 5, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.03, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Ammo-Loader Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Barrel Heatsink Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Ammo-Loader Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Reduces Attack Interval by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: [1, 1, 1, 1, 2] - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 3, - systemAdjustment: "hp", - baseHp: 7500, - baseArmor: 2, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Welding Tech Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Additional Armor Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: 1 - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 2, - systemAdjustment: null, - baseCruise: 2500, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 0, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [] - }] - }, { - name: "CV-T800", - title: "Pulsar Corvette", - img: "/ships/cvt800.png", - type: "Corvette", - variant: "A", - variant_name: "Anti-Aircraft Type", - manufacturer: "Dawn Accord", - direction: ["Outstanding Firepower", "Strategy & Support", "Fighter & Corvette"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Front", - cp: 2, - maxInFleet: 15, - production: { - metal: 4800, - crystal: 280, - deuterium: 60, - timeSeconds: 310, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Airborne Weapon System`, - main: true, - maxUpgradeSlots: 6, - baseAntiship: 2400, - baseAntiair: 1920, - baseSiege: 48, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Rapid-Fire", - img: "/weapons/upgrades/strategies/prioritizeFirepower.svg", - strategy: true, - description: ["Reduces the primary weapon's Firing Duration and Cooldown by ", "80%", " every ", "60", "s for ", "15", "s. Cooldown: ", "10", "s."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 18 - }, { - name: "Enhance Recharge Power", - img: "/weapons/upgrades/energyDamage.svg", - description: ["Increases all pulse cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: [2, 2, 2, 3, 3] - }, { - name: "Enhance Pulse Focus", - img: "/weapons/upgrades/energyDamage.svg", - description: ["Increases all pulse cannon Damage by ", "2%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.02, - tpPerTier: [2, 2, 2, 3, 3] - }, { - name: "Charging Device Enhancement", - img: "/weapons/upgrades/energyCooldown.svg", - description: ["Decreases weapon ssytem Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: [2, 2, 2, 3, 3] - }, { - name: "Pipeline Cooling Enhancement", - img: "/weapons/upgrades/energyCooldown.svg", - description: ["Decreases weapon ssytem Cooldown by ", "3%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.03, - tpPerTier: [2, 2, 2, 3, 3] - }, { - name: "Energy Control System Enhancement", - img: "/weapons/upgrades/energyHitrate.svg", - description: ["Increases all pulse cannon Hit Rate by ", "2%"], - maxTiers: 5, - affectedStat: "generalHitrate", - percentBuffPerTier: 1.02, - tpPerTier: [2, 2, 2, 3, 3] - }, { - name: "Aiming Spped Enhancement", - img: "/weapons/upgrades/targetSelectionTime2.svg", - description: ["Reduces the target-selection time of the weapon system by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [2, 2, 2, 3, 3] - }, { - name: "Fast Target Lock", - img: "/weapons/upgrades/targetSelectionTime2.svg", - description: ["Reduces the target-selection time of the weapon system by ", "6%"], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [2, 2, 2, 3, 3] - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 3, - systemAdjustment: "hp", - baseHp: 7500, - baseArmor: 2, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Welding Tech Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Additional Armor Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: 1 - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 2, - systemAdjustment: null, - baseCruise: 2500, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 0, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [] - }] - }, { - name: "Cellular Defender", - title: "Heavy Torpedo Corvette", - img: "/ships/cellularDefender.png", - type: "Corvette", - variant: "A", - variant_name: "Multi-Role Type", - manufacturer: "Antonios", - direction: ["Outstanding Firepower", "Fighter & Corvette"], - scope: "Projectile Weapon", - weight: 5, - row: "Front", - cp: 2, - maxInFleet: 10, - production: { - metal: 7910, - crystal: 560, - deuterium: 110, - timeSeconds: 890, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Torpedo Attack System`, - main: true, - maxUpgradeSlots: 6, - baseAntiship: 4080, - baseAntiair: 0, - baseSiege: 1469, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Warhead Modification", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo damage by ", "2.5%"], - maxTiers: 4, - affectedStat: "damage", - percentBuffPerTier: 1.025, - tpPerTier: [1, 2, 2, 2] - }, { - name: "Rearmament Enhancement", - img: "/weapons/upgrades/missileDamage.svg", - description: ["Increases all missile/torpedo damage by ", "2.5%"], - maxTiers: 4, - affectedStat: "damage", - percentBuffPerTier: 1.025, - tpPerTier: [1, 2, 2, 2] - }, { - name: "Guidance Signal Enhancement", - img: "/weapons/upgrades/missileHitrate.svg", - description: ["Increases all missile Hit Rate by ", "2%", " and torpedo Hit Rate by ", "2%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 2, 2, 2] - }, { - name: "Loading Mechanism Upgrade", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3.7%"], - maxTiers: 4, - affectedStat: "damage", - percentBuffPerTier: 1.037, - tpPerTier: [1, 2, 2, 2] - }, { - name: "Ammo-Transport Acceleration", - img: "/weapons/upgrades/genericCooldown2.svg", - description: ["Decreases weapon system Cooldown by ", "3.7%"], - maxTiers: 4, - affectedStat: "damage", - percentBuffPerTier: 1.037, - tpPerTier: [1, 2, 2, 2] - }, { - name: "Sympathetic Detonation", - img: "/weapons/upgrades/critDamage.svg", - description: ["The system's weapons have a ", "7.5%", " chance to deal an additional ", "12.5%", " Crit Damage"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 2, 2, 2] - }, { - name: "Weak Point Detection Enhancement", - img: "/weapons/upgrades/critDamage2.svg", - description: ["Increases weapon system Crit Damage by ", "10%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 2, 2, 2] - }, { - name: "Large Target Correction", - img: "/weapons/upgrades/bigHitrate.svg", - description: ["Increases weapon system Hit Rate against cruisers and higher-class ships by ", "3.7%"], - maxTiers: 4, - affectedStat: "bigHitrate", - percentBuffPerTier: 1.037, - tpPerTier: [1, 2, 2, 2] - }, { - name: "Ammo Stealth Processing", - img: "/weapons/upgrades/torpedoIntercept.svg", - description: ["Reduces the chance of all torpedoes being intercepted by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: [1, 2, 2, 2] - }] - }, { - type: "weapon", - name: "Rapid-Fire Battery System", - maxUpgradeSlots: 5, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - baseAntiship: 660, - baseAntiair: 1159, - baseSiege: 187, - upgrades: [{ - name: "Anti-Aircraft Measures", - strategy: true, - img: "/weapons/upgrades/strategies/heavyAmmo.svg", - description: ["When attacked by enemy aircraft, it decreases weapon system Cooldown by ", "80%", " for ", "15", "s. Cooldown: ", "30", "s."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 10 - }, { - name: "Barrel Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon Damage by ", "2.5%"], - maxTiers: 4, - affectedStat: "damage", - percentBuffPerTier: 1.025, - tpPerTier: [1, 2, 2, 2] - }, { - name: "Ammo Enhancement", - img: "/weapons/upgrades/genericDamage.svg", - description: ["Increases all cannon Damage by ", "2.5%"], - maxTiers: 4, - affectedStat: "damage", - percentBuffPerTier: 1.025, - tpPerTier: [1, 2, 2, 2] - }, { - name: "Ammo-Loader Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "3.7%"], - maxTiers: 4, - affectedStat: "damage", - percentBuffPerTier: 1.037, - tpPerTier: [1, 2, 2, 2] - }, { - name: "Barrel Heatsink Enhancement", - img: "/weapons/upgrades/genericCooldown.svg", - description: ["Decreases weapon system Cooldown by ", "3.7%"], - maxTiers: 4, - affectedStat: "damage", - percentBuffPerTier: 1.037, - tpPerTier: [1, 2, 2, 2] - }, { - name: "Anti-Aircraft Radar Enhancement", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "3.7%"], - maxTiers: 4, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.037, - tpPerTier: [1, 2, 2, 2] - }, { - name: "Fast Target Analysis Enhancement", - img: "/weapons/upgrades/aircraftHitrate.svg", - description: ["Increases weapon system Hit Rate against fighters/corvettes by ", "3.7%"], - maxTiers: 4, - affectedStat: "aircraftHitrate", - percentBuffPerTier: 1.037, - tpPerTier: [1, 2, 2, 2] - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 3, - systemAdjustment: "hp", - baseHp: 6650, - baseArmor: 2, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Welding Tech Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Additional Armor Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 1, 1, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: 1 - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 2, - systemAdjustment: null, - baseCruise: 2500, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 0, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [] - }] - }, { - name: "Nebula Chaser", - title: "Heavy Corvette", - img: "/ships/nebulaChaser_a.png", - type: "Corvette", - variant: "A", - variant_name: "Ballistic Type", - manufacturer: "Antonios", - direction: ["Outstanding Firepower", "Fighter & Corvette"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Front", - cp: 2, - maxInFleet: 10, - production: { - metal: 6470, - crystal: 530, - deuterium: 90, - timeSeconds: 710, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Airborne Weapon System`, - main: true, - maxUpgradeSlots: 6, - baseAntiship: 1920, - baseAntiair: 115, - baseSiege: 336, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Prioritize Targets", - img: "/weapons/upgrades/strategies/prioritizeTargets.svg", - strategy: true, - description: ["When the enemy fleet includes carriers, it prioritizes attacks on these targets."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 12 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 50000, - systemAdjustment: "hp", - baseHp: 50000, - baseArmor: 50000, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Aero Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: [1, 1, 1, 1, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 50000, - systemAdjustment: null, - baseCruise: 3000, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "Nebula Chaser", - title: "Pulsar Corvette", - img: "/ships/nebulaChaser_b.png", - type: "Corvette", - variant: "B", - variant_name: "Pulse Cannon Type", - manufacturer: "Antonios", - direction: ["Outstanding Firepower", "Fighter & Corvette"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Front", - cp: 2, - maxInFleet: 10, - production: { - metal: 50000, - crystal: 50000, - deuterium: 50000, - timeSeconds: 50000, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `PlaceholderPlaceholder`, - main: true, - maxUpgradeSlots: 50000, - baseAntiship: 50000, - baseAntiair: 50000, - baseSiege: 50000, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/strategies/PlaceholderPlaceholder.svg", - strategy: true, - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 50000, - systemAdjustment: "hp", - baseHp: 50000, - baseArmor: 50000, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Aero Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: [1, 1, 1, 1, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 50000, - systemAdjustment: null, - baseCruise: 3000, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "RedBeast 7-13", - title: "Missile Corvette", - img: "/ships/redbeast713.png", - type: "Corvette", - variant: "A", - variant_name: "Offensive Type", - manufacturer: "NOMA Shipping", - direction: ["Sustained Combat", "Strategy & Support", "Fighter & Corvette"], - scope: "Projectile Weapon", - weight: 10, - row: "Front", - cp: 2, - maxInFleet: 10, - production: { - metal: 50000, - crystal: 50000, - deuterium: 50000, - timeSeconds: 50000, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `PlaceholderPlaceholder`, - main: true, - maxUpgradeSlots: 50000, - baseAntiship: 50000, - baseAntiair: 50000, - baseSiege: 50000, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/strategies/PlaceholderPlaceholder.svg", - strategy: true, - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 50000, - systemAdjustment: "hp", - baseHp: 50000, - baseArmor: 50000, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Aero Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: [1, 1, 1, 1, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 50000, - systemAdjustment: null, - baseCruise: 3000, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "S-Levy 9", - title: "Heavy Torpedo Escort Corvette", - img: "/ships/slevy9.png", - type: "Corvette", - variant: "A", - variant_name: "Anti-Ship Type", - manufacturer: "Jupiter Industry", - direction: ["Outstanding Firepower", "Sustained Combat", "Fighter & Corvette"], - scope: "Projectile Weapon", - weight: 5, - row: "Front", - cp: 2, - maxInFleet: 10, - production: { - metal: 50000, - crystal: 50000, - deuterium: 50000, - timeSeconds: 50000, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `PlaceholderPlaceholder`, - main: true, - maxUpgradeSlots: 50000, - baseAntiship: 50000, - baseAntiair: 50000, - baseSiege: 50000, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/strategies/PlaceholderPlaceholder.svg", - strategy: true, - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 50000, - systemAdjustment: "hp", - baseHp: 50000, - baseArmor: 50000, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Aero Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: [1, 1, 1, 1, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 50000, - systemAdjustment: null, - baseCruise: 3000, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "Hale-Bopp", - title: "System Support Corvette", - img: "/ships/haleBopp_a.png", - type: "Corvette", - variant: "A", - variant_name: "Multi-Role Type", - manufacturer: "Jupiter Industry", - direction: ["Strategy & Support", "Fighter & Corvette"], - scope: "Empty", - weight: 5, - row: "Front", - cp: 2, - maxInFleet: 10, - production: { - metal: 3840, - crystal: 220, - deuterium: 160, - timeSeconds: 710, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `Emergency Maintenance System`, - main: true, - maxUpgradeSlots: 7, - baseAntiship: 0, - baseAntiair: 0, - baseSiege: 0, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Prioritize Targets", - img: "/weapons/upgrades/strategies/prioritizeTargets.svg", - strategy: true, - description: ["When the enemy fleet includes carriers, it prioritizes attacks on these targets."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 12 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 50000, - systemAdjustment: "hp", - baseHp: 50000, - baseArmor: 50000, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Aero Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: [1, 1, 1, 1, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 50000, - systemAdjustment: null, - baseCruise: 3000, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "Hale-Bopp", - title: "Repair Support Corvette", - img: "/ships/haleBopp_b.png", - type: "Corvette", - variant: "B", - variant_name: "Dock Type", - manufacturer: "Jupiter Industry", - direction: ["Strategy & Support", "Fighter & Corvette"], - scope: "Empty", - weight: 5, - row: "Front", - cp: 2, - maxInFleet: 10, - production: { - metal: 3970, - crystal: 230, - deuterium: 170, - timeSeconds: 740, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `"Overclock" Maintenance System`, - main: true, - maxUpgradeSlots: 7, - baseAntiship: 0, - baseAntiair: 0, - baseSiege: 0, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "Prioritize Targets", - img: "/weapons/upgrades/strategies/prioritizeTargets.svg", - strategy: true, - description: ["When the enemy fleet includes carriers, it prioritizes attacks on these targets."], - maxTiers: 1, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 12 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 50000, - systemAdjustment: "hp", - baseHp: 50000, - baseArmor: 50000, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Aero Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: [1, 1, 1, 1, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 50000, - systemAdjustment: null, - baseCruise: 3000, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "Silent Assassin", - title: "Armored Corvette", - img: "/ships/silentAssassin.png", - type: "Corvette", - variant: "A", - variant_name: "High-Speed Type", - manufacturer: "NOMA Shipping", - direction: ["Fighter & Corvette"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Front", - cp: 2, - maxInFleet: 10, - production: { - metal: 50000, - crystal: 50000, - deuterium: 50000, - timeSeconds: 50000, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `PlaceholderPlaceholder`, - main: true, - maxUpgradeSlots: 50000, - baseAntiship: 50000, - baseAntiair: 50000, - baseSiege: 50000, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/strategies/PlaceholderPlaceholder.svg", - strategy: true, - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 50000, - systemAdjustment: "hp", - baseHp: 50000, - baseArmor: 50000, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Aero Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: [1, 1, 1, 1, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 50000, - systemAdjustment: null, - baseCruise: 3000, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "Void Elfin", - title: "Stealth Missile Corvette", - img: "/ships/voidElfin.png", - type: "Corvette", - variant: "A", - variant_name: "Offensive Type", - manufacturer: "Antonios", - direction: ["Outstanding Firepower", "Sustained Combat", "Fighter & Corvette"], - scope: "Projectile Weapon", - weight: 10, - row: "Front", - cp: 2, - maxInFleet: 10, - production: { - metal: 50000, - crystal: 50000, - deuterium: 50000, - timeSeconds: 50000, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `PlaceholderPlaceholder`, - main: true, - maxUpgradeSlots: 50000, - baseAntiship: 50000, - baseAntiair: 50000, - baseSiege: 50000, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/strategies/PlaceholderPlaceholder.svg", - strategy: true, - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 50000, - systemAdjustment: "hp", - baseHp: 50000, - baseArmor: 50000, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Aero Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: [1, 1, 1, 1, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 50000, - systemAdjustment: null, - baseCruise: 3000, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "Carilion", - title: "Recon Frigate", - img: "/ships/carilion_a.png", - type: "Frigate", - variant: "A", - variant_name: "Recon Type", - manufacturer: "Antonios", - direction: ["Sustained Combat", "Strategy & Support"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Front", - cp: 4, - maxInFleet: 10, - production: { - metal: 50000, - crystal: 50000, - deuterium: 50000, - timeSeconds: 50000, - storage: 0 - }, - systems: [{ - type: "weapon", - name: `PlaceholderPlaceholder`, - main: true, - maxUpgradeSlots: 50000, - baseAntiship: 50000, - baseAntiair: 50000, - baseSiege: 50000, - systemAdjustment: "weaponDamage", - img: "/weapons/icons/cannon.png", - upgrades: [{ - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/strategies/PlaceholderPlaceholder.svg", - strategy: true, - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }, { - name: "PlaceholderPlaceholder", - img: "/weapons/upgrades/PlaceholderPlaceholder.svg", - description: ["PlaceholderPlaceholder"], - maxTiers: 50000, - affectedStat: "PlaceholderPlaceholder", - percentBuffPerTier: 50000, - tpPerTier: 50000 - }] - }, { - type: "armor", - name: "Armor System", - maxUpgradeSlots: 50000, - systemAdjustment: "hp", - baseHp: 50000, - baseArmor: 50000, - baseEnergyShield: 0, - img: "/weapons/icons/armor.png", - upgrades: [{ - name: "Aircraft Armor Enhancement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Aero Reinforcement", - img: "/weapons/upgrades/hp.svg", - description: ["Increases ship HP by ", "2%"], - maxTiers: 5, - affectedStat: "hp", - percentBuffPerTier: 1.02, - tpPerTier: [1, 1, 2, 2, 2] - }, { - name: "Short-range Stealth Coating", - img: "/weapons/upgrades/missileTorpedoEvasion.svg", - description: ["Reduces the chances of being hit by missiles and torpedoes by ", "3%", " and ", "5%", " respectively"], - maxTiers: 5, - affectedStat: ["missileEvasion", "torpedoEvasion"], - percentBuffPerTier: [1.03, 1.05], - tpPerTier: [1, 1, 1, 1, 2] - }] - }, { - type: "propulsion", - name: "Propulsion System", - maxUpgradeSlots: 50000, - systemAdjustment: null, - baseCruise: 3000, - baseWarp: 0, - img: "/weapons/icons/speed.png", - upgrades: [{ - name: "Dynamic Thrust Adjustment", - img: "/weapons/upgrades/generalEvasion.svg", - description: ["Increases ship Evasion by ", "2%"], - maxTiers: 4, - affectedStat: "generalEvasion", - percentBuffPerTier: 1.02, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Intensified Combustion Enhancement", - img: "/weapons/upgrades/targetSelectionTime.svg", - description: ["Reduces the target-selection time of the aircraft's primary weapon by ", "7.5%"], - maxTiers: 4, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 2 - }, { - name: "Flight Maneuver Improvement", - img: "/weapons/upgrades/reciprocal.svg", - description: ["Reduces the flight time of reciprocal aircraft by ", "6%"], - maxTiers: 5, - affectedStat: "damage", - percentBuffPerTier: 1.01417, - tpPerTier: 2 - }] - }, { - type: "command", - name: "Command System", - maxUpgradeSlots: 1, - systemAdjustment: null, - img: "/weapons/icons/command.png", - upgrades: [{ - name: "System Automated Maintenance Enhancement", - img: "/weapons/upgrades/commandRepair.svg", - description: ["Increases the automated maintenance efficiency of the system by ", "5%", "."], - maxTiers: 5, - affectedStat: null, - percentBuffPerTier: null, - tpPerTier: 1 - }] - }] - }, { - name: "Carilion", - title: "Heavy Cannon Frigate", - img: "/ships/carilion_b.png", - type: "Frigate", - variant: "B", - variant_name: "Heavy Cannon Type", - manufacturer: "Antonios", - direction: ["Strategy & Support"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Front", - cp: 5, - maxInFleet: 10 - }, { - name: "Carilion", - title: "Special Frigate", - img: "/ships/carilion_c.png", - type: "Frigate", - variant: "C", - variant_name: "Special Type", - manufacturer: "Antonios", - direction: ["Sustained Combat"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Front", - cp: 5, - maxInFleet: 10 - }, { - name: "FG300", - title: "Multi-Role Frigate", - img: "/ships/fg300_a.png", - type: "Frigate", - variant: "A", - variant_name: "Multi-Role Type", - manufacturer: "Dawn Accord", - direction: ["Strategy & Support"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Middle", - cp: 3, - maxInFleet: 15 - }, { - name: "FG300", - title: "Armored Frigate", - img: "/ships/fg300_b.png", - type: "Frigate", - variant: "B", - variant_name: "Armored Type", - manufacturer: "Dawn Accord", - direction: ["Sustained Combat"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Front", - cp: 3, - maxInFleet: 15 - }, { - name: "FG300", - title: "Recon Frigate", - img: "/ships/fg300_c.png", - type: "Frigate", - variant: "C", - variant_name: "Recon Type", - manufacturer: "Dawn Accord", - direction: ["Strategy & Support"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Middle", - cp: 3, - maxInFleet: 15 - }, { - name: "Mare Imbrium", - title: "Assault Frigate", - img: "/ships/mareImbrium_a.png", - type: "Frigate", - variant: "A", - variant_name: "Railgun Type", - manufacturer: "Jupiter Industry", - direction: ["Outstanding Firepower"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Front", - cp: 5, - maxInFleet: 10 - }, { - name: "Mare Imbrium", - title: "Experimental Pulse Cannon Frigate", - img: "/ships/mareImbrium_b.png", - type: "Frigate", - variant: "B", - variant_name: "Pulse Cannon Type", - manufacturer: "Jupiter Industry", - direction: ["Outstanding Firepower"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Middle", - cp: 8, - maxInFleet: 10 - }, { - name: "Mare Nubium", - title: "Light Landing Ship", - img: "/ships/mareNubium_a.png", - type: "Frigate", - variant: "A", - variant_name: "Assault Type", - manufacturer: "Jupiter Industry", - direction: ["Outstanding Firepower"], - scope: "Empty", - weight: 10, - row: "Back", - cp: 4, - maxInFleet: 10 - }, { - name: "Mare Nubium", - title: "Anti-Aircraft Frigate", - img: "/ships/mareNubium_b.png", - type: "Frigate", - variant: "B", - variant_name: "Anti-Aircraft Type", - manufacturer: "Jupiter Industry", - direction: ["Empty"], - scope: "Empty", - weight: 10, - row: "Middle", - cp: 4, - maxInFleet: 10 - }, { - name: "Mare Serenitatis", - title: "Heavy Frigate", - img: "/ships/mareSerenitatis_a.png", - type: "Frigate", - variant: "A", - variant_name: "Anti-Ship Type", - manufacturer: "Jupiter Industry", - direction: ["Outstanding Firepower", "Sustained Combat"], - scope: "Projectile Weapon", - weight: 10, - row: "Back", - cp: 5, - maxInFleet: 10 - }, { - name: "Mare Serenitatis", - title: "Missile Frigate", - img: "/ships/mareSerenitatis_b.png", - type: "Frigate", - variant: "B", - variant_name: "Missile Type", - manufacturer: "Jupiter Industry", - direction: ["Sustained Combat"], - scope: "Projectile Weapon", - weight: 10, - row: "Back", - cp: 5, - maxInFleet: 10 - }, { - name: "Mare Serenitatis", - title: "Anti-Aircraft Frigate", - img: "/ships/mareSerenitatis_c.png", - type: "Frigate", - variant: "C", - variant_name: "Anti-Aircraft Type", - manufacturer: "Jupiter Industry", - direction: ["Sustained Combat"], - scope: "Projectile Weapon", - weight: 10, - row: "Back", - cp: 5, - maxInFleet: 10 - }, { - name: "Mare Tranquillitatis", - title: "Missile Frigate", - img: "/ships/mareTranquillitatis_a.png", - type: "Frigate", - variant: "A", - variant_name: "Integrated Type", - manufacturer: "Jupiter Industry", - direction: ["Strategy & Support"], - scope: "Projectile Weapon", - weight: 10, - row: "Middle", - cp: 4, - maxInFleet: 10 - }, { - name: "Mare Tranquillitatis", - title: "Pulse Cannon Frigate", - img: "/ships/mareTranquillitatis_b.png", - type: "Frigate", - variant: "B", - variant_name: "Pulse Cannon Type", - manufacturer: "Jupiter Industry", - direction: ["Empty"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Middle", - cp: 4, - maxInFleet: 10 - }, { - name: "Mare Tranquillitatis", - title: "Interceptor Frigate", - img: "/ships/mareTranquillitatis_c.png", - type: "Frigate", - variant: "C", - variant_name: "Anti-Aircraft Type", - manufacturer: "Jupiter Industry", - direction: ["Strategy & Support"], - scope: "Projectile Weapon", - weight: 10, - row: "Middle", - cp: 4, - maxInFleet: 10 - }, { - name: "NOMA M470", - title: "Heavy Landing Ship", - img: "/ships/nomaM470_a.png", - type: "Frigate", - variant: "A", - variant_name: "Siege Type", - manufacturer: "NOMA Shipping", - direction: ["Outstanding Firepower"], - scope: "Empty", - weight: 10, - row: "Back", - cp: 6, - maxInFleet: 10 - }, { - name: "NOMA M470", - title: "Support Frigate", - img: "/ships/nomaM470_b.png", - type: "Frigate", - variant: "B", - variant_name: "Support Type", - manufacturer: "NOMA Shipping", - direction: ["Strategy & Support"], - scope: "Empty", - weight: 10, - row: "Back", - cp: 6, - maxInFleet: 10 - }, { - name: "NOMA M470", - title: "Anti-Aircraft Frigate", - img: "/ships/nomaM470_c.png", - type: "Frigate", - variant: "C", - variant_name: "Anti-Aircraft Type", - manufacturer: "NOMA Shipping", - direction: ["Strategy & Support"], - scope: "Empty", - weight: 10, - row: "Back", - cp: 6, - maxInFleet: 10 - }, { - name: "Reliat", - title: "Rapid Torpedo Frigate", - img: "/ships/reliat_a.png", - type: "Frigate", - variant: "A", - variant_name: "Anti-Ship Type", - manufacturer: "Antonios", - direction: ["Outstanding Firepower"], - scope: "Projectile Weapon", - weight: 10, - row: "Middle", - cp: 4, - maxInFleet: 10 - }, { - name: "Reliat", - title: "Tactical Torpedo Frigate", - img: "/ships/reliat_b.png", - type: "Frigate", - variant: "B", - variant_name: "Torpedo Type", - manufacturer: "Antonios", - direction: ["Outstanding Firepower"], - scope: "Projectile Weapon", - weight: 10, - row: "Middle", - cp: 4, - maxInFleet: 10 - }, { - name: "Reliat", - title: "Stealth Frigate", - img: "/ships/reliat_c.png", - type: "Frigate", - variant: "C", - variant_name: "Stealth Type", - manufacturer: "Antonios", - direction: ["Outstanding Firepower", "Sustained Combat"], - scope: "Projectile Weapon", - weight: 10, - row: "Middle", - cp: 4, - maxInFleet: 10 - }, { - name: "Ruby", - title: "Heavy Railgun Frigate", - img: "/ships/ruby_a.png", - type: "Frigate", - variant: "A", - variant_name: "Railgun Type", - manufacturer: "NOMA Shipping", - direction: ["Outstanding Firepower"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Middle", - cp: 5, - maxInFleet: 10 - }, { - name: "Ruby", - title: "Experimental Ion Cannon Frigate", - img: "/ships/ruby_b.png", - type: "Frigate", - variant: "B", - variant_name: "Ion Cannon Type", - manufacturer: "NOMA Shipping", - direction: ["Outstanding Firepower"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Middle", - cp: 8, - maxInFleet: 10 - }, { - name: "Ruby", - title: "Defensive Frigate", - img: "/ships/ruby_c.png", - type: "Frigate", - variant: "C", - variant_name: "Defensive Type", - manufacturer: "NOMA Shipping", - direction: ["Sustained Combat"], - scope: "Projectile Weapon", - weight: 5, - row: "Front", - cp: 5, - maxInFleet: 10 - }, { - name: "XenoStinger", - title: "Tactical Frigate", - img: "/ships/xenostinger_a.png", - type: "Frigate", - variant: "A", - variant_name: "Special Type", - manufacturer: "NOMA Shipping", - direction: ["Outstanding Firepower"], - scope: "Empty", - weight: 5, - row: "Back", - cp: 8, - maxInFleet: 10 - }, { - name: "XenoStinger", - title: "Defensive Frigate", - img: "/ships/xenostinger_b.png", - type: "Frigate", - variant: "B", - variant_name: "Anti-Aircraft Type", - manufacturer: "NOMA Shipping", - direction: ["Strategy & Support"], - scope: "Empty", - weight: 5, - row: "Back", - cp: 6, - maxInFleet: 10 - }, { - name: "AC721", - title: "Heavy Logistics Destroyer", - img: "/ships/ac721_a.png", - type: "Destroyer", - variant: "A", - variant_name: "Generic Type", - manufacturer: "Dawn Accord", - direction: ["Strategy & Support"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Middle", - cp: 8, - maxInFleet: 15 - }, { - name: "AC721", - title: "Heavy Missile Destroyer", - img: "/ships/ac721_b.png", - type: "Destroyer", - variant: "B", - variant_name: "Missile Type", - manufacturer: "Dawn Accord", - direction: ["Strategy & Support"], - scope: "Projectile Weapon", - weight: 10, - row: "Back", - cp: 8, - maxInFleet: 15 - }, { - name: "AC721", - title: "Heavy Dual-Purpose Assault Ship", - img: "/ships/ac721_d.png", - type: "Destroyer", - variant: "D", - variant_name: "Aircraft Type", - manufacturer: "Dawn Accord", - direction: ["Strategy & Support"], - scope: "Empty", - weight: 10, - row: "Back", - cp: 12, - maxInFleet: 15, - corvettes_held: 2 - }, { - name: "Aldabra", - title: "Heavy Cannon Destroyer", - img: "/ships/aldabra_a.png", - type: "Destroyer", - variant: "A", - variant_name: "Generic Type", - manufacturer: "NOMA Shipping", - direction: ["Outstanding Firepower", "Sustained Combat"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Front", - cp: 8, - maxInFleet: 10 - }, { - name: "Aldabra", - title: "Heavy Assault Destroyer", - img: "/ships/aldabra_b.png", - type: "Destroyer", - variant: "B", - variant_name: "Armored Type", - manufacturer: "NOMA Shipping", - direction: ["Outstanding Firepower", "Sustained Combat"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Front", - cp: 8, - maxInFleet: 10 - }, { - name: "Ceres", - title: "Aircraft Destroyer", - img: "/ships/ceres_a.png", - type: "Destroyer", - variant: "A", - variant_name: "Aircraft Type", - manufacturer: "Jupiter Industry", - direction: ["Strategy & Support"], - scope: "Empty", - weight: 10, - row: "Back", - cp: 8, - maxInFleet: 10, - medium_fighters_held: 2 - }, { - name: "Ceres", - title: "Support Destroyer", - img: "/ships/ceres_b.png", - type: "Destroyer", - variant: "B", - variant_name: "Support Type", - manufacturer: "Jupiter Industry", - direction: ["Strategy & Support"], - scope: "Empty", - weight: 10, - row: "Back", - cp: 8, - maxInFleet: 10 - }, { - name: "Ceres", - title: "Tactical Destroyer", - img: "/ships/ceres_c.png", - type: "Destroyer", - variant: "C", - variant_name: "Tactical Type", - manufacturer: "Jupiter Industry", - direction: ["Strategy & Support"], - scope: "Empty", - weight: 10, - row: "Back", - cp: 8, - maxInFleet: 10 - }, { - name: "Eris I", - title: "Maneuver Assault Destroyer", - img: "/ships/eris_a.png", - type: "Destroyer", - variant: "A", - variant_name: "Cannon Type", - manufacturer: "Jupiter Industry", - direction: ["Strategy & Support"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Front", - cp: 7, - maxInFleet: 10 - }, { - name: "Eris I", - title: "Heavy Cannon Destroyer", - img: "/ships/eris_b.png", - type: "Destroyer", - variant: "B", - variant_name: "Heavy Cannon Type", - manufacturer: "Jupiter Industry", - direction: ["Outstanding Firepower", "Sustained Combat"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Front", - cp: 9, - maxInFleet: 10 - }, { - name: "Eris I", - title: "Armored Destroyer", - img: "/ships/eris_c.png", - type: "Destroyer", - variant: "C", - variant_name: "Armored Type", - manufacturer: "Jupiter Industry", - direction: ["Sustained Combat"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Front", - cp: 7, - maxInFleet: 10 - }, { - name: "Guardian", - title: "Support Destroyer", - img: "/ships/guardian_a.png", - type: "Destroyer", - variant: "A", - variant_name: "Support Type", - manufacturer: "Antonios", - direction: ["Empty"], - scope: "Projectile Weapon", - weight: 5, - row: "Middle", - cp: 9, - maxInFleet: 10 - }, { - name: "Guardian", - title: "Dual-Purpose Assault Ship", - img: "/ships/guardian_b.png", - type: "Destroyer", - variant: "B", - variant_name: "Dual-Purpose Type", - manufacturer: "Antonios", - direction: ["Strategy & Support"], - scope: "Projectile Weapon", - weight: 5, - row: "Back", - cp: 14, - maxInFleet: 10, - corvettes_held: 2 - }, { - name: "Guardian", - title: "Experimental Pulse Assault Ship", - img: "/ships/guardian_c.png", - type: "Destroyer", - variant: "C", - variant_name: "Pulse Cannon Type", - manufacturer: "Antonios", - direction: ["Outstanding Firepower", "Sustained Combat"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Front", - cp: 9, - maxInFleet: 10 - }, { - name: "Quaoar", - title: "Railgun Destroyer", - img: "/ships/quaoar_a.png", - type: "Destroyer", - variant: "A", - variant_name: "Railgun Type", - manufacturer: "Jupiter Industry", - direction: ["Outstanding Firepower"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Middle", - cp: 6, - maxInFleet: 10 - }, { - name: "Quaoar", - title: "Torpedo Destroyer", - img: "/ships/quaoar_b.png", - type: "Destroyer", - variant: "B", - variant_name: "Torpedo Type", - manufacturer: "Jupiter Industry", - direction: ["Outstanding Firepower"], - scope: "Projectile Weapon", - weight: 10, - row: "Middle", - cp: 6, - maxInFleet: 10 - }, { - name: "Taurus", - title: "Pulse Cannon Destroyer", - img: "/ships/taurus_a.png", - type: "Destroyer", - variant: "A", - variant_name: "Offensive Type", - manufacturer: "NOMA Shipping", - direction: ["Outstanding Firepower", "Sustained Combat"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Front", - cp: 11, - maxInFleet: 10 - }, { - name: "Taurus", - title: "Assault Destroyer", - img: "/ships/taurus_b.png", - type: "Destroyer", - variant: "B", - variant_name: "Assault Type", - manufacturer: "NOMA Shipping", - direction: ["Outstanding Firepower", "Sustained Combat"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Front", - cp: 11, - maxInFleet: 10 - }, { - name: "Taurus", - title: "Defensive Destroyer", - img: "/ships/taurus_c.png", - type: "Destroyer", - variant: "C", - variant_name: "Defensive Type", - manufacturer: "NOMA Shipping", - direction: ["Sustained Combat", "Strategy & Support"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Front", - cp: 8, - maxInFleet: 10 - }, { - name: "Tundra", - title: "Tactical Destroyer", - img: "/ships/tundra_a.png", - type: "Destroyer", - variant: "A", - variant_name: "Support Type", - manufacturer: "NOMA Shipping", - direction: ["Strategy & Support"], - scope: "Empty", - weight: 10, - row: "Back", - cp: 9, - maxInFleet: 10 - }, { - name: "Tundra", - title: "Aircraft Destroyer", - img: "/ships/tundra_b.png", - type: "Destroyer", - variant: "B", - variant_name: "Aircraft Type", - manufacturer: "NOMA Shipping", - direction: ["Strategy & Support"], - scope: "Empty", - weight: 10, - row: "Back", - cp: 9, - maxInFleet: 10, - medium_fighters_held: 2 - }, { - name: "Winged Hussar", - title: "Light Missile Destroyer", - img: "/ships/wingedHussar_a.png", - type: "Destroyer", - variant: "A", - variant_name: "Anti-Ship Type", - manufacturer: "Antonios", - direction: ["Outstanding Firepower"], - scope: "Projectile Weapon", - weight: 10, - row: "Middle", - cp: 6, - maxInFleet: 10 - }, { - name: "Winged Hussar", - title: "Integrated Missile Destroyer", - img: "/ships/wingedHussar_b.png", - type: "Destroyer", - variant: "B", - variant_name: "Integrated Type", - manufacturer: "Antonios", - direction: ["Outstanding Firepower"], - scope: "Projectile Weapon", - weight: 10, - row: "Back", - cp: 6, - maxInFleet: 10 - }, { - name: "Winged Hussar", - title: "Area-Denial Anti-Aircraft Destroyer", - img: "/ships/wingedHussar_c.png", - type: "Destroyer", - variant: "C", - variant_name: "Anti-Aircraft Type", - manufacturer: "Antonios", - direction: ["Sustained Combat", "Strategy & Support"], - scope: "Projectile Weapon", - weight: 10, - row: "Front", - cp: 6, - maxInFleet: 10 - }, { - name: "CAS066", - title: "Generic Cruiser", - img: "/ships/cas066_a.png", - type: "Cruiser", - variant: "A", - variant_name: "Integrated Type", - manufacturer: "Dawn Accord", - direction: ["Outstanding Firepower", "Sustained Combat"], - scope: "Projectile Weapon", - weight: 10, - row: "Front", - cp: 18, - maxInFleet: 12 - }, { - name: "CAS066", - title: "Artillery Cruiser", - img: "/ships/cas066_b.png", - type: "Cruiser", - variant: "B", - variant_name: "Artillery Type", - manufacturer: "Dawn Accord", - direction: ["Outstanding Firepower"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Middle", - cp: 18, - maxInFleet: 12 - }, { - name: "CAS066", - title: "Aircraft Cruiser", - img: "/ships/cas066_c.png", - type: "Cruiser", - variant: "C", - variant_name: "Aircraft Type", - manufacturer: "Dawn Accord", - direction: ["Empty"], - scope: "Empty", - weight: 10, - row: "Middle", - cp: 18, - maxInFleet: 12, - corvettes_held: 2 - }, { - name: "CAS066", - title: "Auxiliary Cruiser", - img: "/ships/cas066_d.png", - type: "Cruiser", - variant: "D", - variant_name: "Support Type", - manufacturer: "Dawn Accord", - direction: ["Strategy & Support"], - scope: "Empty", - weight: 10, - row: "Middle", - cp: 18, - maxInFleet: 12 - }, { - name: "Callisto", - title: "Cluster Torpedo Raid Ship", - img: "/ships/callisto_a.png", - type: "Cruiser", - variant: "A", - variant_name: "Torpedo Type", - manufacturer: "Jupiter Industry", - direction: ["Outstanding Firepower"], - scope: "Projectile Weapon", - weight: 2, - row: "Back", - cp: 20, - maxInFleet: 8 - }, { - name: "Callisto", - title: "Heavy Torpedo Raid Ship", - img: "/ships/callisto_b.png", - type: "Cruiser", - variant: "B", - variant_name: "Anti-Ship Type", - manufacturer: "Jupiter Industry", - direction: ["Outstanding Firepower"], - scope: "Projectile Weapon", - weight: 2, - row: "Back", - cp: 20, - maxInFleet: 8 - }, { - name: "Callisto", - title: "Heavy UAV Cruiser", - img: "/ships/callisto_c.png", - type: "Cruiser", - variant: "C", - variant_name: "Support Type", - manufacturer: "Jupiter Industry", - direction: ["Empty"], - scope: "Projectile Weapon", - weight: 2, - row: "Back", - cp: 20, - maxInFleet: 8 - }, { - name: "Chimera", - title: "Heavy Cruiser", - img: "/ships/chimera_a.png", - type: "Cruiser", - variant: "A", - variant_name: "Ballistic Type", - manufacturer: "NOMA Shipping", - direction: ["Outstanding Firepower", "Sustained Combat"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Front", - cp: 18, - maxInFleet: 8 - }, { - name: "Chimera", - title: "Cannon Cruiser", - img: "/ships/chimera_b.png", - type: "Cruiser", - variant: "B", - variant_name: "Heavy Cannon Type", - manufacturer: "NOMA Shipping", - direction: ["Outstanding Firepower", "Sustained Combat"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Front", - cp: 20, - maxInFleet: 8 - }, { - name: "Chimera", - title: "Defensive Cruiser", - img: "/ships/chimera_c.png", - type: "Cruiser", - variant: "C", - variant_name: "Defensive Type", - manufacturer: "NOMA Shipping", - direction: ["Sustained Combat"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Middle", - cp: 20, - maxInFleet: 8 - }, { - name: "Conamara Chaos", - title: "Railgun Cruiser", - img: "/ships/conamaraChaos_a.png", - type: "Cruiser", - variant: "A", - variant_name: "Railgun Type", - manufacturer: "Jupiter Industry", - direction: ["Strategy & Support"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Back", - cp: 20, - maxInFleet: 8 - }, { - name: "Conamara Chaos", - title: "High-Speed Plasma Cruiser", - img: "/ships/conamaraChaos_b.png", - type: "Cruiser", - variant: "B", - variant_name: "Plasma Type", - manufacturer: "Jupiter Industry", - direction: ["Outstanding Firepower"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Back", - cp: 20, - maxInFleet: 8 - }, { - name: "Io", - title: "Assault Ion Cannon Cruiser", - img: "/ships/io_a.png", - type: "Cruiser", - variant: "A", - variant_name: "Ion Cannon Type", - manufacturer: "Jupiter Industry", - direction: ["Outstanding Firepower", "Sustained Combat"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Front", - cp: 18, - maxInFleet: 8 - }, { - name: "Io", - title: "High-Speed Ion Cannon Cruiser", - img: "/ships/io_b.png", - type: "Cruiser", - variant: "B", - variant_name: "Anti-Ship Type", - manufacturer: "Jupiter Industry", - direction: ["Outstanding Firepower", "Sustained Combat"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Front", - cp: 18, - maxInFleet: 8 - }, { - name: "Io", - title: "Siege Ion Cannon Cruiser", - img: "/ships/io_c.png", - type: "Cruiser", - variant: "C", - variant_name: "Siege Type", - manufacturer: "Jupiter Industry", - direction: ["Outstanding Firepower", "Sustained Combat"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Front", - cp: 18, - maxInFleet: 8 - }, { - name: "Jaeger", - title: "Heavy Aircraft Cruiser", - img: "/ships/jaeger_a.png", - type: "Cruiser", - variant: "A", - variant_name: "Support Type", - manufacturer: "Antonios", - direction: ["Strategy & Support"], - scope: "Empty", - weight: 5, - row: "Back", - cp: 20, - maxInFleet: 8, - corvettes_held: 4 - }, { - name: "Jaeger", - title: "Heavy Cannon Cruiser", - img: "/ships/jaeger_b.png", - type: "Cruiser", - variant: "B", - variant_name: "Anti-Ship Type", - manufacturer: "Antonios", - direction: ["Strategy & Support"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Back", - cp: 18, - maxInFleet: 8 - }, { - name: "KCCPV2.0", - title: "Light Attack Cruiser", - img: "/ships/kccpv_a.png", - type: "Cruiser", - variant: "A", - variant_name: "Integrated Type", - manufacturer: "Dawn Accord", - direction: ["Outstanding Firepower", "Strategy & Support"], - scope: "Projectile Weapon", - weight: 10, - row: "Back", - cp: 16, - maxInFleet: 12 - }, { - name: "KCCPV2.0", - title: "Light Pulse Attack Cruiser", - img: "/ships/kccpv_b.png", - type: "Cruiser", - variant: "B", - variant_name: "Pulse Cannon Type", - manufacturer: "Dawn Accord", - direction: ["Outstanding Firepower"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Middle", - cp: 16, - maxInFleet: 12 - }, { - name: "KCCPV2.0", - title: "Light Railgun Cruiser", - img: "/ships/kccpv_c.png", - type: "Cruiser", - variant: "C", - variant_name: "Railgun Type", - manufacturer: "Dawn Accord", - direction: ["Empty"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Middle", - cp: 16, - maxInFleet: 12 - }, { - name: "KCCPV2.0", - title: "Light Aircraft Cruiser", - img: "/ships/kccpv_d.png", - type: "Cruiser", - variant: "D", - variant_name: "Aircraft Type", - manufacturer: "Dawn Accord", - direction: ["Empty"], - scope: "Empty", - weight: 10, - row: "Back", - cp: 16, - maxInFleet: 12, - large_fighters_held: 2 - }, { - name: "Light Cone", - title: "Multi-Role Missile Cruiser Cruiser", - img: "/ships/lightCone_a.png", - type: "Cruiser", - variant: "A", - variant_name: "Generic Type", - manufacturer: "NOMA Shipping", - direction: ["Empty"], - scope: "Projectile Weapon", - weight: 5, - row: "Middle", - cp: 20, - maxInFleet: 8 - }, { - name: "Light Cone", - title: "Area-Denial Anti-Aircraft Cruiser", - img: "/ships/lightCone_b.png", - type: "Cruiser", - variant: "B", - variant_name: "Anti-Aircraft Type", - manufacturer: "NOMA Shipping", - direction: ["Strategy & Support"], - scope: "Projectile Weapon", - weight: 5, - row: "Middle", - cp: 20, - maxInFleet: 8 - }, { - name: "Light Cone", - title: "Offensive Missile Cruiser", - img: "/ships/lightCone_c.png", - type: "Cruiser", - variant: "C", - variant_name: "Assault Type", - manufacturer: "NOMA Shipping", - direction: ["Outstanding Firepower"], - scope: "Projectile Weapon", - weight: 5, - row: "Middle", - cp: 20, - maxInFleet: 8 - }, { - name: "Ranger", - title: "Comprehensive Warfare Cruiser", - img: "/ships/ranger_a.png", - type: "Cruiser", - variant: "A", - variant_name: "Integrated Type", - manufacturer: "Antonios", - direction: ["Outstanding Firepower"], - scope: "Direct-Fire Weapon", - weight: 10, - row: "Back", - cp: 18, - maxInFleet: 8 - }, { - name: "Ranger", - title: "Heavy Ion Cannon Cruiser", - img: "/ships/ranger_b.png", - type: "Cruiser", - variant: "B", - variant_name: "Ion Cannon Type", - manufacturer: "Antonios", - direction: ["Outstanding Firepower"], - scope: "Direct-Fire Weapon", - weight: 2, - row: "Back", - cp: 18, - maxInFleet: 8 - }, { - name: "Predator", - title: "Aircraft Cruiser", - img: "/ships/predator_a.png", - type: "Cruiser", - variant: "A", - variant_name: "Generic Type", - manufacturer: "Antonios", - direction: ["Strategy & Support"], - scope: "Empty", - weight: 10, - row: "Back", - cp: 18, - maxInFleet: 8, - large_fighters_held: 4 - }, { - name: "Predator", - title: "Tactical Aircraft Cruiser", - img: "/ships/predator_b.png", - type: "Cruiser", - variant: "B", - variant_name: "Tactical Type", - manufacturer: "Antonios", - direction: ["Strategy & Support"], - scope: "Empty", - weight: 10, - row: "Back", - cp: 18, - maxInFleet: 8, - large_fighters_held: 4 - }, { - name: "Predator", - title: "Anti-Aircraft Cruiser", - img: "/ships/predator_c.png", - type: "Cruiser", - variant: "C", - variant_name: "Anti-Aircraft Type", - manufacturer: "Antonios", - direction: ["Strategy & Support"], - scope: "Empty", - weight: 10, - row: "Back", - cp: 18, - maxInFleet: 8, - large_fighters_held: 4 - }, { - name: "Constantine the Great", - title: "Multi-Role Battlecruiser", - img: "/ships/constantineTheGreat.png", - type: "Battlecruiser", - variant: "A", - variant_name: "Super Type", - manufacturer: "Antonios", - direction: ["Outstanding Firepower"], - scope: "Direct-Fire Weapon", - weight: 2, - row: "Middle", - cp: 35, - maxInFleet: 6, - modules: [{ - type: "known", - img: "/weapons/icons/cannon.png", - system: "M1", - name: `"Gamma Storm" Ion Attack System`, - stats: { - type: "weapon", - antiship: 11917, - antiair: 0, - siege: 2502, - hp: 19800 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `CI-2x700T "Helium Flash"`, - name: `Dual-Gun Super-Heavy Ion Turret`, - damageType: "Energy", - target: "Large Ship", - lockonEfficiency: null, - alpha: 400, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "M2", - name: `"Gamma Storm" Projectile Attack System`, - stats: { - type: "weapon", - antiship: 19885, - antiair: 0, - siege: 2784, - hp: 19800 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `CI-2x600T "Gamma Storm"`, - name: `Energy Torpedo Launching System`, - damageType: "Energy", - target: "Large Ship", - alpha: 1740, - lockonEfficiency: 10, - attributes: ["Crit"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A1", - name: `"Gamma Storm" Projectile Weapon System`, - stats: { - type: "weapon", - antiship: 24917, - antiair: 0, - siege: 2016, - hp: 19800 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `CM-8x608A "Gamma Storm"`, - name: `Generic Missile Launching System`, - damageType: "Projectile", - target: "Large Ship", - lockonEfficiency: null, - alpha: 850, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A2", - name: `"Gamma Storm" Projectile Weapon System`, - stats: { - type: "weapon", - antiship: 40666, - antiair: 1643, - siege: 3138, - hp: 19800 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `CM-8x608 "Gamma Storm"`, - name: `Pulse Energy Missile Launching System`, - damageType: "Energy", - target: "Large Ship", - lockonEfficiency: null, - alpha: 945, - attributes: null - }, { - type: "weapon", - count: 2, - title: "CM-12x550", - name: `Dodeca-Fire Anti-Ship Missile System`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: 10, - alpha: 437, - attributes: ["Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "B1", - name: `Generic Battery System`, - stats: { - type: "weapon", - antiship: 10628, - antiair: 270, - siege: 1461, - hp: 19800 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `CG-1350`, - name: `350mm Dual-Cannon Anti-Ship Battery`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: null, - alpha: 250, - attributes: null - }, { - type: "weapon", - count: 4, - title: `CG-1160B`, - name: `Generic Cannon`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: null, - alpha: 50, - attributes: ["Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "B2", - name: `Pulse Anti-Aircraft System`, - stats: { - type: "weapon", - antiship: 5175, - antiair: 2040, - siege: 0, - hp: 19800 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `CP-3x220`, - name: `Triple-Fire Anti-Aircraft Pulse`, - damageType: "Energy", - target: "Aircraft", - lockonEfficiency: 60, - alpha: 40, - attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"] - }, { - type: "weapon", - count: 4, - title: `CP-120`, - name: `Anti-Missile Pulse Array`, - damageType: "Energy", - target: "Aircraft", - lockonEfficiency: 60, - alpha: 40, - attributes: ["Interception Capability", "Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "B3", - name: `Anti-Aircraft Missile System`, - stats: { - type: "weapon", - antiship: 2400, - antiair: 1548, - siege: 0, - hp: 19800 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `MK2-CM-4x200B "Storm"`, - name: `Missile Launcher Nest`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: 60, - alpha: 35, - attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Cycle", "Anti-Aircraft Support"] - }, { - type: "weapon", - count: 2, - title: `CM-2x188B`, - name: `Missile Launcher Array`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: 60, - alpha: 25, - attributes: ["Interception Capability", "Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/jamming.png", - system: "C1", - name: `Additional Energy System`, - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 15750 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `RIT-650`, - name: `Energy Compression Device`, - attributes: ["Increase Energy Weapon Damage"] - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "C2", - name: `Aircraft Module`, - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 18000 - }, - subsystems: [{ - type: "hanger", - count: 2, - title: `CBF-200`, - name: `Medium Hanger`, - hanger: "Medium Fighter", - capacity: 1, - attributes: null - }, { - type: "misc", - count: 1, - title: `XAC-2000`, - name: `Aviation Bridge`, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "C3", - name: `Recon UAV System`, - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 18000 - }, - subsystems: [{ - type: "hanger", - count: 3, - title: "CIT-1", - name: `Fire-Control Spotter UAV Hanger`, - hanger: "Spotter UAV", - capacity: 3, - attributes: ["Ship Calibration Support"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "D1", - name: `Short-Range Anti-Aircraft System`, - stats: { - type: "weapon", - antiship: 0, - antiair: 1011, - siege: 0, - hp: 19800 - }, - subsystems: [{ - type: "weapon", - count: 4, - title: `CM-2x45B`, - name: `Short-Range Anti-Aircraft Missile`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: 60, - alpha: 40, - attributes: ["Anti-Aircraft Critical Strike", "Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/armor.png", - system: "D2", - name: `Targeted Protection System`, - stats: { - type: "armor", - armor: null, - extraHP: null, - energyShield: null, - hp: 18000 - }, - subsystems: [{ - type: "misc", - count: 1, - title: "ASM-220", - name: `Critical-System Reinforced Armor`, - attributes: ["Reduce System Crit Damage Taken"] - }] - }, { - type: "known", - img: "/weapons/icons/storage.png", - system: "D3", - name: `Damage Control System`, - stats: { - type: "armor", - armor: null, - extraHP: null, - energyShield: null, - hpRecovery: 4800, - hp: 15750 - }, - subsystems: [{ - type: "misc", - count: 4, - title: "AST-50", - name: `Damage Monitoring System`, - attributes: null - }] - }] - }, { - name: "Eternal Storm", - title: "Attack Battlecruiser", - img: "/ships/eternalStorm.png", - type: "Battlecruiser", - variant: "A", - variant_name: "Super Type", - manufacturer: "Jupiter Industry", - direction: ["Outstanding Firepower"], - scope: "Direct-Fire Weapon", - weight: 2, - row: "Middle", - cp: 32, - maxInFleet: 6, - modules: [{ - type: "known", - img: "/weapons/icons/cannon.png", - system: "M1", - name: `"Viggen" Ion Generation System`, - stats: { - type: "weapon", - antiship: 16000, - antiair: 0, - siege: 3360, - hp: 18000 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `AI-900A "Viggen"`, - name: `Ion Cannon`, - damageType: "Energy", - target: "Large Ship", - lockonEfficiency: null, - alpha: 1200, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "M2", - name: `Experimental Plasma Caster`, - stats: { - type: "weapon", - antiship: 15692, - antiair: 1883, - siege: 2824, - hp: 18000 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `AIM-850T`, - name: `Plasma Caster`, - damageType: "Energy", - target: "Large Ship", - lockonEfficiency: 10, - alpha: 850, - attributes: ["Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A1", - name: `"Eternal Polaris" Mk II Projectile Launching System`, - stats: { - type: "weapon", - antiship: 12240, - antiair: 396, - siege: 1539, - hp: 18000 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `MK3-AT-800A "Supernova-White"`, - name: `Anti-Ship Torpedo`, - damageType: "Projectile", - target: "Large Ship", - lockonEfficiency: null, - alpha: 1600, - attributes: null - }, { - type: "weapon", - count: 2, - title: `MK2-AM-8x300B "Eternal Polaris K"`, - name: `Cluster Missile`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: 10, - alpha: 55, - attributes: ["Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A2", - name: `"Eternal Polaris" Mk II Projectile Launching System`, - stats: { - type: "weapon", - antiship: 11900, - antiair: 0, - siege: 10440, - hp: 18000 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `MK3-AT-750C "Supernova-White"`, - name: `Siege Torpedo Launcher Array`, - damageType: "Projectile", - target: "Large Ship", - lockonEfficiency: null, - alpha: 1200, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A3", - name: `"Eternal Polaris" Mk II Projectile Launching System TEST`, - stats: { - type: "weapon", - antiship: 11345, - antiair: 593, - siege: 1440, - hp: 18000 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `MK4-AT-1-800AT "Supernova-White"`, - name: `Energy Torpedo`, - damageType: "Projectile", - target: "Large Ship", - lockonEfficiency: null, - alpha: 1600, - attributes: null - }, { - type: "weapon", - count: 2, - title: `MK2-AM-16x150B "Eternal Polaris K"`, - name: `Anti-Aircraft Missile Array`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: 60, - alpha: 40, - attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "B1", - name: `Generic Cannon Platform`, - stats: { - type: "weapon", - antiship: 5850, - antiair: 126, - siege: 1113, - hp: 18000 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `AG-2580`, - name: `Dual-Cannon Heavy Battery`, - damageType: "Projectile", - target: "Large Ship", - lockonEfficiency: null, - alpha: 350, - attributes: null - }, { - type: "weapon", - count: 2, - title: `AG-1120B`, - name: `Rapid-Fire Cannon`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: null, - alpha: 35, - attributes: ["Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "B2", - name: `Generic Close-In Weapon System`, - stats: { - type: "weapon", - antiship: 900, - antiair: 405, - siege: 60, - hp: 18000 - }, - subsystems: [{ - type: "weapon", - count: 4, - title: `AG-1105B`, - name: `Generic Cannon`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: null, - alpha: 25, - attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "C1", - name: `NT UAV Anti-Aircraft System`, - stats: { - type: "weapon", - antiship: 0, - antiair: 3888, - siege: 0, - hp: 20250 - }, - subsystems: [{ - type: "hanger", - count: 3, - title: `NT-1`, - name: `Anti-Aircraft UAV Rack`, - hanger: "Area-Denial Anti-Aircraft UAV", - capacity: 3, - attributes: null, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: null, - alpha: 15, - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "C2", - name: `"Thunderstorm" UAV Shield System`, - stats: { - type: "armor", - armor: null, - extraHP: null, - energyShield: null, - hp: 20250 - }, - subsystems: [{ - type: "hanger", - count: 2, - title: `SNT-1`, - name: `Shielded UAV Rack`, - hanger: "Shield UAV", - capacity: 2, - attributes: [`Ship Shielding Support`] - }] - }, { - type: "known", - img: "/weapons/icons/jamming.png", - system: "C3", - name: `Energy Compensation Armor System`, - stats: { - type: "armor", - armor: null, - extraHP: null, - energyShield: null, - hp: 16200 - }, - subsystems: [{ - type: "misc", - count: 2, - title: `RIR-220`, - name: `Experimental Energy Compensation Armor`, - attributes: ["Energy Damage Reduction", "Physical Damage Reduction", "Crit Damage Reduction"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "D1", - name: `Ion Turret System`, - stats: { - type: "weapon", - antiship: 6857, - antiair: 0, - siege: 1028, - hp: 18000 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `AI-450A`, - name: `Experimental Ion Turret`, - damageType: "Energy", - target: "Large Ship", - lockonEfficiency: null, - alpha: 800, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "D2", - name: `Pulse Turret System`, - stats: { - type: "weapon", - antiship: 0, - antiair: 432, - siege: 0, - hp: 18000 - }, - subsystems: [{ - type: "weapon", - count: 4, - title: `AP-130B`, - name: `Rapid-Fire Near-Defense Pulse Cannon`, - damageType: "Energy", - target: "Aircraft", - lockonEfficiency: 60, - alpha: 40, - attributes: ["Interception Capability", "Anti-Aircraft Counterattack"] - }] - }] - }, { - name: "Spear of Uranus", - title: "Heavy Battlecruiser", - img: "/ships/spearOfUranus.png", - type: "Battlecruiser", - variant: "A", - variant_name: "Super Type", - manufacturer: "NOMA Shipping", - direction: ["Outstanding Firepower", "Sustained Combat"], - scope: "Direct-Fire Weapon", - weight: 2, - row: "Front", - cp: 35, - maxInFleet: 6, - modules: [{ - type: "known", - img: "/weapons/icons/cannon.png", - system: "M1", - name: `Bow Railgun System`, - stats: { - type: "weapon", - antiship: 12950, - antiair: 0, - siege: 11310, - hp: 19800 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `BR-1950C "Ruby"`, - name: `Bow-Mounted Siege Railgun`, - damageType: "Projectile", - target: "Large Ship", - lockonEfficiency: null, - alpha: 2600, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "M2", - name: `Ion Turret System`, - stats: { - type: "weapon", - antiship: 12857, - antiair: 0, - siege: 1800, - hp: 19800 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `BI-850`, - name: `Dual-Fire Heavy Ion Turret`, - damageType: "Energy", - target: "Large Ship", - lockonEfficiency: null, - alpha: 750, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A1", - name: `"Fortress" Battery System A`, - stats: { - type: "weapon", - antiship: 13120, - antiair: 636, - siege: 3075, - hp: 19800 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `BG-1850`, - name: `Heavy Cannon`, - damageType: "Projectile", - target: "Large Ship", - lockonEfficiency: null, - alpha: 950, - attributes: null - }, { - type: "weapon", - count: 3, - title: `BG-2240`, - name: `Anti-Ship Cannon`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: 10, - alpha: 100, - attributes: ["Anti-Aircraft Counterattack"] - }, { - type: "weapon", - count: 4, - title: `BG-340B`, - name: `Anti-Aircraft Cannon`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: 45, - alpha: 10, - attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A2", - name: `"Fortress" Battery System B`, - stats: { - type: "weapon", - antiship: 15986, - antiair: 216, - siege: 2880, - hp: 19800 - }, - subsystems: [{ - type: "weapon", - count: 4, - title: `BG-1950`, - name: `Heavy Cannon`, - damageType: "Projectile", - target: "Large Ship", - lockonEfficiency: null, - alpha: 1200, - attributes: null - }, { - type: "weapon", - count: 4, - title: `BG-340B`, - name: `Anti-Aircraft Cannon`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: 45, - alpha: 10, - attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A3", - name: `"Fortress" Battery System F`, - stats: { - type: "weapon", - antiship: 17220, - antiair: 1026, - siege: 1800, - hp: 19800 - }, - subsystems: [{ - type: "weapon", - count: 6, - title: `BG-2350`, - name: `Anti-Ship Cannon`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: 10, - alpha: 200, - attributes: ["Anti-Aircraft Counterattack"] - }, { - type: "weapon", - count: 4, - title: `BG-340B`, - name: `Anti-Aircraft Cannon`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: 45, - alpha: 10, - attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "B1", - name: `"Minecart" Projectile Launching Array`, - stats: { - type: "weapon", - antiship: 5940, - antiair: 680, - siege: 259, - hp: 19800 - }, - subsystems: [{ - type: "weapon", - count: 3, - title: `BM-12x250`, - name: `Generic Missile Launching Array`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: null, - alpha: 120, - attributes: ["Interception Capability", "Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "B2", - name: `Corvette Dock`, - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 23850 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CBC-2300`, - name: `Corvette Mounting Dock`, - hanger: "Corvette", - capacity: 3, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/storage.png", - system: "B3", - name: `Integrated Damage Control System`, - stats: { - type: "armor", - armor: null, - extraHP: null, - energyShield: null, - hpRecovery: 5454, - hp: 19800 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CRT-3`, - name: `Engineering UAV Maintenance Pod`, - hanger: "Repair UAV", - capacity: 2, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/jamming.png", - system: "C1", - name: `Distributed Weapon Control System`, - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 18000 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `XI-1200`, - name: "Distributed Fire Control Radar", - attributes: ["Increase Hit Rate"] - }] - }, { - type: "known", - img: "/weapons/icons/armor.png", - system: "C2", - name: `Additional Armor System`, - stats: { - type: "armor", - armor: 0, - extraHP: 32484, - energyShield: 0, - hp: 27000 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `ASX-150`, - name: "Energized Nano Armor", - attributes: ["Additional HP Auto-Repair"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "C3", - name: `Anti-Missile System`, - stats: { - type: "weapon", - antiship: 0, - antiair: 410, - siege: 0, - hp: 19800 - }, - subsystems: [{ - type: "weapon", - count: 3, - title: `BG-625C`, - name: `Area Anti-Missile Cannon`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: null, - alpha: 10, - attributes: ["Interception Capability (Fleet)", "Anti-Aircraft Special Ammo", "Anti-Aircraft Support"] - }] - }] - }, { - name: "ST59", - title: "Defensive Battlecruiser", - img: "/ships/st59.png", - type: "Battlecruiser", - variant: "A", - variant_name: "Super Type", - manufacturer: "Dawn Accord", - direction: ["Sustained Combat", "Strategy & Support"], - scope: "Direct-Fire Weapon", - weight: 5, - row: "Middle", - cp: 28, - maxInFleet: 6, - modules: [{ - type: "known", - img: "/weapons/icons/cannon.png", - system: "M1", - name: "Assault Railgun System", - stats: { - type: "weapon", - antiship: 10875, - antiair: 0, - siege: 3528, - hp: 15750 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `SR-2600`, - name: `Heavy Railgun`, - damageType: "Projectile", - target: "Large Ship", - lockonEfficiency: null, - alpha: 735, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "M2", - name: `Bow Mounted Battery System`, - stats: { - type: "weapon", - antiship: 11400, - antiair: 0, - siege: 960, - hp: 15750 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `SG-2400`, - name: `Dual-Cannon Rapid-Fire Battery`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: null, - alpha: 200, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "M3", - name: `Assault Torpedo System`, - stats: { - type: "weapon", - antiship: 11200, - antiair: 0, - siege: 2266, - hp: 15750 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `ST-2600`, - name: `Heavy Torpedo Launcher`, - damageType: "Projectile", - target: "Large Ship", - lockonEfficiency: null, - alpha: 850, - attributes: ["Crit"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A1", - name: `Large Cannon Platform`, - stats: { - type: "weapon", - antiship: 7875, - antiair: 216, - siege: 1206, - hp: 15750 - }, - subsystems: [{ - type: "weapon", - count: 3, - title: `MK4-SG-2580 "Thunderbolt"`, - name: `Dual-Cannon Heavy Battery`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: null, - alpha: 280, - attributes: null - }, { - type: "weapon", - count: 4, - title: `SG-1120`, - name: `Generic Cannon`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: null, - alpha: 40, - attributes: ["Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A2", - name: `Railgun Turret Array`, - stats: { - type: "weapon", - antiship: 9900, - antiair: 0, - siege: 1923, - hp: 15750 - }, - subsystems: [{ - type: "weapon", - count: 3, - title: `SR-1425`, - name: `Railgun Turret`, - damageType: "Projectile", - target: "Large Ship", - lockonEfficiency: null, - alpha: 450, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A3", - name: `Pulse Turret Array`, - stats: { - type: "weapon", - antiship: 7500, - antiair: 787, - siege: 1200, - hp: 15750 - }, - subsystems: [{ - type: "weapon", - count: 3, - title: `SP-430`, - name: `Pulse Turret`, - damageType: "Energy", - target: "Small Ship", - lockonEfficiency: 10, - alpha: 250, - attributes: ["Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "B1", - name: `Integrated Projectile Weapon Platform`, - stats: { - type: "weapon", - antiship: 8188, - antiair: 0, - siege: 1185, - hp: 15750 - }, - subsystems: [{ - type: "weapon", - count: 4, - title: `K-ST-12-255A`, - name: `3x4 Cluster Torpedo Launching System`, - damageType: "Projectile", - target: "Large Ship", - lockonEfficiency: null, - alpha: 300, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "B2", - name: `Aircraft System`, - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 15300 - }, - subsystems: [{ - type: "hanger", - count: 2, - title: `CBF-305`, - name: "Medium Hanger", - hanger: "Medium Fighter", - capacity: 2, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "B3", - name: `Area Fire-Control System`, - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 15300 - }, - subsystems: [{ - type: "hanger", - count: 2, - title: `CIT-1`, - name: `Fire-Control Spotter UAV Hanger`, - hanger: "Spotter UAV", - capacity: 3, - attributes: ["Ship Calibration Support"] - }] - }, { - type: "known", - img: "/weapons/icons/armor.png", - system: "C1", - name: `Additional Armor System`, - stats: { - type: "armor", - armor: 0, - extraHP: 27302, - energyShield: 0, - hp: 15750 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `ASX-100`, - name: "Additional Armor", - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/armor.png", - system: "C2", - name: `EM Armor System`, - stats: { - type: "armor", - armor: 0, - extraHP: 0, - energyShield: 20, - hp: 15750 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `AEX-120`, - name: "EM Armor", - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/armor.png", - system: "C3", - name: "Heavy Defensive Armor System", - stats: { - type: "armor", - armor: 250, - extraHP: 0, - energyShield: 0, - hp: 15750 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `ASX-130`, - name: "Additional Armor", - attributes: ["Reduce Evasion", "Reduce Hit Rate"] - }] - }] - }, { - name: "Thunderbolt Star", - title: "Multi-Role Arsenal Ship", - img: "/ships/thunderboltStar.png", - type: "Battlecruiser", - variant: "A", - variant_name: "Super Type", - manufacturer: "Empty", - direction: ["Outstanding Firepower", "Strategy & Support"], - scope: "Direct-Fire Weapon", - weight: 2, - row: "Middle", - cp: 35, - maxInFleet: 6, - modules: [{ - type: "known", - img: "/weapons/icons/cannon.png", - system: "M1", - name: `"Thunderbolt" Bow-Mounted Weapon System`, - stats: { - type: "weapon", - antiship: 40628, - antiair: 0, - siege: 8562, - hp: 23400 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `HR-1850`, - name: `Long-Rail Railgun`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: null, - alpha: 2775, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "M2", - name: `"Thunderbolt" Bow-Mounted Projectile Weapon System`, - stats: { - type: "weapon", - antiship: 27168, - antiair: 0, - siege: 5705, - hp: 23400 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `HT-1-850`, - name: "High Energy Torpedo Launcher", - damageType: "Energy", - target: "Large Ship", - lockonEfficiency: null, - alpha: 2070, - attributes: ["Crit"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "M3", - name: `"Thunderbolt Star" Bow-Mounted High-Energy Weapon System`, - stats: { - type: "weapon", - antiship: 33120, - antiair: 0, - siege: 3312, - hp: 23400 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `HT-1250T`, - name: `Experimental Super High-Energy Ion Cannon`, - damageType: "Energy", - target: "Large Ship", - lockonEfficiency: null, - alpha: 2760, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A1", - name: `Rapid-Fire Anti-Ship Weapon System`, - stats: { - type: "weapon", - antiship: 12636, - antiair: 1266, - siege: 1407, - hp: 23400 - }, - subsystems: [{ - type: "weapon", - count: 4, - title: `HG-1220`, - name: "Rapid-Fire Artillery Array", - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: null, - alpha: 97, - attributes: ["Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A2", - name: `Medium Anti-Ship Weapon System`, - stats: { - type: "weapon", - antiship: 14184, - antiair: 0, - siege: 1490, - hp: 23400 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `HG-2280`, - name: "Dual-Cannon Stationary Heavy Battery", - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: null, - alpha: 207, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "B1", - name: "Active Anti-Aircraft System", - stats: { - type: "weapon", - antiship: 3375, - antiair: 465, - siege: 0, - hp: 23400 - }, - subsystems: [{ - type: "weapon", - count: 4, - title: `HM-4x60B`, - name: "Mid-Range Anti-Aircraft Missile Array", - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: 60, - alpha: 28, - attributes: ["Anti-Aircraft Support"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "B2", - name: "Range Interception System", - stats: { - type: "weapon", - antiship: 0, - antiair: 345, - siege: 0, - hp: 23400 - }, - subsystems: [{ - type: "weapon", - count: 4, - title: `HP-100B`, - name: "Anti-Aircraft Pulse Array", - damageType: "Energy", - target: "Aircraft", - lockonEfficiency: 60, - alpha: 28, - attributes: ["Interception Capability", "Anti-Aircraft Support"] - }] - }, { - type: "known", - img: "/weapons/icons/jamming.png", - system: "C1", - name: "Weapon Coordination Center", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 23400 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `HNI-260`, - name: "Weapon Activation Device", - attributes: ["Oscillatory Excitation"] - }] - }, { - type: "known", - img: "/weapons/icons/jamming.png", - system: "C2", - name: "Fire-Control Calibration System", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 23400 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `HNA-240`, - name: "Real-Time Target Callibration Module", - attributes: ["Collaborative Calibration"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "D1", - name: "Accurate Projectile Weapon System", - stats: { - type: "weapon", - antiship: 9140, - antiair: 1164, - siege: 970, - hp: 23400 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `HM-1x220A`, - name: "Mid-Range Anti-Ship Missile", - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: 10, - alpha: 172, - attributes: ["Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "D2", - name: "Large Projectile Weapon System", - stats: { - type: "weapon", - antiship: 9948, - antiair: 0, - siege: 2112, - hp: 23400 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `HT-1-450`, - name: "Large Torpedo Launcher", - damageType: "Projectile", - target: "Large Ship", - lockonEfficiency: null, - alpha: 631, - attributes: ["Crit"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "E1", - name: "Multi-Target Weapon System", - stats: { - type: "weapon", - antiship: 6990, - antiair: 910, - siege: 759, - hp: 23400 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `HG-1220A`, - name: "Multi-Target Anti-Ship Battery", - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: null, - alpha: 126, - attributes: ["Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "E2", - name: "Multi-Target Anti-Aircraft System", - stats: { - type: "weapon", - antiship: 0, - antiair: 633, - siege: 0, - hp: 23400 - }, - subsystems: [{ - type: "weapon", - count: 3, - title: `HG-1120B`, - name: "Multi-Target Anti-Aircraft Turret", - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: 60, - alpha: 40, - attributes: ["Anti-Aircraft Counterattack"] - }] - }] - }, { - name: "Ediacaran", - title: "Heavy Firepower Auxiliary Ship", - img: "/ships/ediacaran.png", - type: "Auxiliary Ship", - variant: "A", - variant_name: "Super Type", - manufacturer: "NOMA Shipping", - direction: ["Outstanding Firepower", "Strategy & Support"], - scope: "Empty", - weight: 2, - row: "Middle", - cp: 40, - maxInFleet: 2, - modules: [{ - type: "known", - img: "/weapons/icons/cannon.png", - system: "M1", - name: "Fortress Bow-Mounted Heavy Cannon System", - stats: { - type: "weapon", - antiship: 11057, - antiair: 394, - siege: 1756, - hp: 18900 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `"Fortress" MK4-BG-2560`, - name: `Dual-Cannon Heavy Bow Battery`, - damageType: "Projectile", - target: "Large Ship", - lockonEfficiency: null, - alpha: 650, - attributes: null - }, { - type: "weapon", - count: 2, - title: `BG-1260`, - name: `Anti-Ship Turret`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: 10, - alpha: 105, - attributes: ["Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "M2", - name: `Fortress Assault Railgun System`, - stats: { - type: "weapon", - antiship: 12000, - antiair: 319, - siege: 3150, - hp: 18900 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `"Fortress" MK4-BG-1850A`, - name: `Bow-Mounted Assault Heavy Railgun`, - damageType: "Projectile", - target: "Large Ship", - lockonEfficiency: null, - alpha: 2250, - attributes: ["Crit"] - }, { - type: "weapon", - count: 2, - title: `BM-2x280B`, - name: `Anti-Aircraft Missile Launcher Array`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: 45, - alpha: 25, - attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/jamming.png", - system: "A1", - name: "Frigates Production System", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 18800 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `MF-2500`, - name: "Frigates Independent Production Facility", - attributes: ["Self-holding Capability"] - }, { - type: "misc", - count: 1, - title: `BMP-60`, - name: "Production Line Modification Module", - attributes: ["Increase Production Speed"] - }] - }, { - type: "known", - img: "/weapons/icons/jamming.png", - system: "A2", - name: "Corvette Production System", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 19800 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `MC-2500`, - name: "Corvette Independent Production Facility", - attributes: null - }, { - type: "misc", - count: 1, - title: `BMP-60`, - name: "Production Line Modification Module", - attributes: ["Increase Production Speed"] - }] - }, { - type: "known", - img: "/weapons/icons/jamming.png", - system: "A3", - name: "Destroyer Production System", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 18800 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `MD-2500`, - name: "Destroyer Independent Production Facility", - attributes: ["Self-holding Capability"] - }, { - type: "misc", - count: 1, - title: `BMP-60`, - name: "Production Line Modification Module", - attributes: ["Increase Production Speed"] - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "B1", - name: `"Tundra" Interceptor UAV System`, - stats: { - type: "weapon", - antiship: 0, - antiair: 4608, - siege: 0, - hp: 19350 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CAT/R-6`, - name: `Area-Denial Anti-Aircraft UAV Pod`, - hanger: "Area-Denial Anti-Aircraft UAV", - capacity: 4, - attributes: ["Anti-Aircraft Counterattack"], - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: null, - alpha: 15 - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "B2", - name: `"Hummingbird" Firepower Recon UAV System`, - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 19350 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CFT-6`, - name: "Firepower Recon UAV Pod", - hanger: "Recon UAV", - capacity: 4, - attributes: ["Firepower Recon Support"] - }] - }, { - type: "unknown", - img: "/weapons/icons/unknown.png", - system: "B3", - unknown: true - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "C1", - name: `Aircraft Loading System`, - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 19350 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CBF-200`, - name: "Large Aircraft Hanger", - hanger: "Large Fighter", - capacity: 2, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "C2", - name: `Corvette Dock`, - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 19350 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CBC-2000`, - name: "Corvette Dock", - hanger: "Corvette", - capacity: 3, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/armor.png", - system: "D1", - name: `Heavy Additional Armor System`, - stats: { - type: "armor", - armor: 80, - extraHP: 30069, - energyShield: 0, - hp: 18000 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `ASX-90`, - name: "Heavy Additional Armor", - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/storage.png", - system: "D2", - name: `Nano Automated Maintenance System`, - stats: { - type: "armor", - armor: null, - extraHP: null, - energyShield: null, - hpRecovery: 5169, - hp: 18000 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `BST-300`, - name: `Nano Repair System`, - attributes: null - }] - }] - }, { - name: "FSV830", - title: "Fast Tactical Auxiliary Ship", - img: "/ships/fsv830.png", - type: "Auxiliary Ship", - variant: "A", - variant_name: "Super Type", - manufacturer: "Dawn Accord", - direction: ["Sustained Combat", "Strategy & Support"], - scope: "Empty", - weight: 5, - row: "Back", - cp: 40, - maxInFleet: 2, - modules: [{ - type: "known", - img: "/weapons/icons/jamming.png", - system: "A1", - name: "Frigates Production System", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 21500 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `XE-1250AM`, - name: "Frigates Independent Production Facility", - attributes: ["Self-holding Capability"] - }] - }, { - type: "known", - img: "/weapons/icons/jamming.png", - system: "A2", - name: "Corvette Production System", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 21500 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `XE-1250AG`, - name: "Corvette Independent Build Facility", - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/jamming.png", - system: "A3", - name: "Fighter Production System", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 21500 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `MFG-1500`, - name: "Fighter Independent Production Facility", - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/jamming.png", - system: "B1", - name: "Warning and Control System", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 22000 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `XE-1250AW`, - name: "Situational Awareness System", - attributes: ["Back-Row Torpedo Hit Evasion", "Back-Row Missile Hit Evasion"] - }, { - type: "misc", - count: 1, - title: `XC-4500`, - name: "Bridge", - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/jamming.png", - system: "B2", - name: "Coordinate Command System", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 22000 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `XCE-1250AI`, - name: "Assisted Lock-On Radar", - attributes: [`Increase Back-Row Missile Hit Rate`, `Increase Back-Row Torpedo Hit Rate`] - }, { - type: "misc", - count: 1, - title: `XC-4500`, - name: "Bridge", - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/jamming.png", - system: "B3", - name: "Camoflage System", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 22000 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `XS-1250AC`, - name: "Field Signal Disguise Module", - attributes: [`Ship Disguise`] - }, { - type: "misc", - count: 1, - title: `XC-4500`, - name: "Bridge", - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/jamming.png", - system: "C1", - name: "Engineering Maintenance System", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 22000 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `BSR-200`, - name: "Quick Repair Device", - attributes: ["Increase Repair Speed"] - }] - }, { - type: "known", - img: "/weapons/icons/storage.png", - system: "C2", - name: "Strategic Resource Storage System", - stats: { - type: "armor", - armor: null, - extraHP: null, - energyShield: null, - storage: 60000, - hp: 22000 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `W-500`, - name: "Loading Platform", - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "D1", - name: "Aircraft System", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 21500 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CBF-255`, - name: "Medium Hanger", - hanger: "Medium Fighter", - capacity: 2, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/storage.png", - system: "D2", - name: "Repair UAV System", - stats: { - type: "armor", - armor: null, - extraHP: null, - energyShield: null, - hpRecovery: 5454, - hp: 21500 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CRT-3`, - name: "Engineering UAV Maintenance Pod", - hanger: "Repair UAV", - capacity: 2, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "E1", - name: "Area-Defense System", - stats: { - type: "weapon", - antiship: 0, - antiair: 882, - siege: 0, - hp: 22000 - }, - subsystems: [{ - type: "weapon", - count: 3, - title: `SM-4x40B`, - name: "Anti-Arcraft Missile Silo", - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: 45, - alpha: 35, - attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Support"] - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "E2", - name: "Corvette Dock", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 21500 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CBC-2000`, - name: "Corvette Dock", - hanger: "Corvette", - capacity: 3, - attributes: null - }] - }] - }, { - name: "CV3000", - title: "High-Speed Carrier", - img: "/ships/cv3000.png", - type: "Carrier", - variant: "A", - variant_name: "Super Type", - manufacturer: "Dawn Accord", - direction: ["Strategy & Support"], - scope: "Empty", - weight: 2, - row: "Back", - cp: 40, - maxInFleet: 5, - modules: [{ - type: "known", - img: "/weapons/icons/aircraft.png", - system: "M1", - name: "Integrated Aircraft Hanger", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 23850 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CFB-605`, - name: "Large Aircraft Hanger", - hanger: "Large Fighter", - capacity: 5, - attributes: null - }, { - type: "hanger", - count: 1, - title: `CBC-2100`, - name: "Corvette Dock", - hanger: "Corvette", - capacity: 3, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "M2", - name: "Integrated Aircraft System", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 23850 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CFB-605`, - name: "Large Aircraft Hanger", - hanger: "Large Fighter", - capacity: 5, - attributes: null - }, { - type: "hanger", - count: 1, - title: `CIT-5`, - name: "Field Support UAV Hanger", - hanger: "Tactical UAV", - capacity: 5, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: null, - alpha: 27, - attributes: ["Attack Against Systems"] - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "M3", - name: "Large Aircraft System", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 23850 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CFB-605`, - name: "Large Aircraft Hanger", - hanger: "Large Fighter", - capacity: 5, - attributes: null - }, { - type: "hanger", - count: 1, - title: `CFB-400`, - name: "Aircraft Hanger", - hanger: "Large Fighter", - capacity: 3, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A1", - name: `"Dragoon" Battery System`, - stats: { - type: "weapon", - antiship: 6500, - antiair: 297, - siege: 619, - hp: 25200 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `MK4-C/SG-3480A "Dragoon"`, - name: `Triple-Cannon Heavy Battery`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: null, - alpha: 200, - attributes: null - }, { - type: "weapon", - count: 4, - title: `C/SG-190B "Dragoon"`, - name: `Generic Rapid-Fire Cannon`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: null, - alpha: 55, - attributes: ["Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A2", - name: `Anti-Aircraft Missile Platform`, - stats: { - type: "weapon", - antiship: 2868, - antiair: 372, - siege: 0, - hp: 25200 - }, - subsystems: [{ - type: "weapon", - count: 3, - title: `Bm-12x180T`, - name: `Missile Defense System`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: 60, - alpha: 52, - attributes: ["Interception Capability", "Anti-Aircraft Support"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "B1", - name: `Missile Defense System`, - stats: { - type: "weapon", - antiship: 1200, - antiair: 210, - siege: 70, - hp: 25200 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `MK3-SM-6x400B/C "Starfire"`, - name: `Missile Launcher Array`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: null, - alpha: 70, - attributes: ["Interception Capability", "Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "B2", - name: `Corvette Loading System`, - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 23850 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CBC-2100`, - name: "Corvette Dock", - hanger: "Corvette", - capacity: 3, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "B3", - name: `Info UAV Support Platform`, - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 23850 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CITA-2`, - name: "Field Support UAV Pod", - hanger: "Info UAV", - capacity: 3, - attributes: ["Ship Calibration Support"] - }] - }] - }, { - name: "Eternal Heavens", - title: "UAV Carrier", - img: "/ships/eternalHeavens.png", - type: "Carrier", - variant: "A", - variant_name: "Super Type", - manufacturer: "Jupiter Industry", - direction: ["Outstanding Firepower"], - scope: "Empty", - weight: 2, - row: "Back", - cp: 40, - maxInFleet: 5, - modules: [{ - type: "known", - img: "/weapons/icons/aircraft.png", - system: "M1", - name: "Collaborative Hanger I", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 24500 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CBF-280`, - name: "Medium Fighter Hanger", - hanger: "Medium Fighter", - capacity: 3, - attributes: null - }, { - type: "hanger", - count: 3, - title: `"Decomposer"`, - name: "Cooperative Offensive UAV Platform", - hanger: "Cooperative Offensive UAV", - capacity: 3, - damageType: "Energy", - target: "Aircraft", - lockonEfficiency: null, - alpha: 140, - attributes: ["UAV Cooperation", "Anti-Aircraft Lightweight Ammo"] - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "M2", - name: "Collaborative Hanger II", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 24500 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CBF-280`, - name: "Medium Fighter Hanger", - hanger: "Medium Fighter", - capacity: 3, - attributes: null - }, { - type: "hanger", - count: 3, - title: `"Laminar"`, - name: "Cooperative Offensive UAV Platform", - hanger: "Cooperative Offensive UAV", - capacity: 3, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: null, - alpha: 40, - attributes: ["UAV Cooperation", "Anti-Aircraft Special Ammo"] - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "M3", - name: "Collaborative Hanger III", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 24500 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CBF-280`, - name: "Medium Fighter Hanger", - hanger: "Medium Fighter", - capacity: 3, - attributes: null - }, { - type: "hanger", - count: 3, - title: `"Vortex"`, - name: "Cooperative Offensive UAV Platform", - hanger: "Cooperative Offensive UAV", - capacity: 3, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: null, - alpha: 20, - attributes: ["UAV Aerial Cover Support", "Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A1", - name: `Integrated Battery System`, - stats: { - type: "weapon", - antiship: 10250, - antiair: 472, - siege: 3815, - hp: 26000 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `AG-3400A`, - name: `Triple-Fire Heavy Turret`, - damageType: "Projectile", - target: "Large Ship", - lockonEfficiency: null, - alpha: 320, - attributes: null - }, { - type: "weapon", - count: 3, - title: `AG-2208A`, - name: `Dual-Cannon Anti-Ship Battery`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: 10, - alpha: 100, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A2", - name: `Experimental Ion Cannon System`, - stats: { - type: "weapon", - antiship: 8857, - antiair: 252, - siege: 828, - hp: 26000 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `AI-450T`, - name: `Experimental Ion Turret`, - damageType: "Energy", - target: "Large Ship", - lockonEfficiency: null, - alpha: 400, - attributes: null - }, { - type: "weapon", - count: 4, - title: `AG-290`, - name: `Generic Dual-Cannon Battery`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: 45, - alpha: 35, - attributes: ["Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A3", - name: `Pulse Anti-Aircraft System`, - stats: { - type: "weapon", - antiship: 3600, - antiair: 1370, - siege: 0, - hp: 26000 - }, - subsystems: [{ - type: "weapon", - count: 3, - title: `AP-2x180`, - name: "Dual-Fire Pulse Cannon", - damageType: "Energy", - target: "Aircraft", - lockonEfficiency: 45, - alpha: 40, - attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"] - }, { - type: "weapon", - count: 3, - title: `AP-140B`, - name: "Rapid-Fire Anti-Aircraft Pulse Cannon", - damageType: "Energy", - target: "Aircraft", - lockonEfficiency: 45, - alpha: 20, - attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "B1", - name: `Anti-Ship Projectile Launching System`, - stats: { - type: "weapon", - antiship: 5640, - antiair: 0, - siege: 882, - hp: 26000 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `AM-2x450`, - name: `Dual-Fire Anti-Ship Missile Launcher`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: null, - alpha: 350, - attributes: null - }, { - type: "weapon", - count: 4, - title: `AM-250`, - name: `Light Missile Launcher`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: null, - alpha: 140, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "B2", - name: `Anti-Missile Defense System`, - stats: { - type: "weapon", - antiship: 1104, - antiair: 257, - siege: 225, - hp: 26000 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `AM-3x250`, - name: `Triple-Fire Anti-Ship Missile Launcher`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: null, - alpha: 145, - attributes: null - }, { - type: "weapon", - count: 2, - title: `AM-12x100C`, - name: `Interception Missile Launcher Array`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: 60, - alpha: 35, - attributes: ["Interception Capability", "Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "B3", - name: `Anti-Aircraft Missile Platform`, - stats: { - type: "weapon", - antiship: 1527, - antiair: 811, - siege: 0, - hp: 26000 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `AM-4x180`, - name: `Quadruple-Fire Multi-Role Missile Launcher`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: 60, - alpha: 45, - attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"] - }, { - type: "weapon", - count: 2, - title: `AM-2x100B`, - name: `Dual-Fire Light Anti-Aircraft Missile Launcher`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: 75, - alpha: 80, - attributes: ["Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "C1", - name: "Auxiliary Aircraft Hanger", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 24500 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CFB-580`, - name: "Large Fighter Hangar", - hanger: "Large Fighter", - capacity: 4, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "C2", - name: "Auxiliary Corvette Dockyard", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 24500 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CBC-3000`, - name: "Corvette Dock", - hanger: "Corvette", - capacity: 4, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/storage.png", - system: "C3", - name: "Support Repair UAV System", - stats: { - type: "armor", - armor: null, - extraHP: null, - energyShield: null, - hpRecovery: 8181, - hp: 24500 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CRT-6`, - name: "Engineering UAV Maintenance Platform", - hanger: "Repair UAV", - capacity: 3, - attributes: null - }] - }] - }, { - name: "Marshal Crux", - title: "Carrier", - img: "/ships/marshalCrux.png", - type: "Carrier", - variant: "A", - variant_name: "Super Type", - manufacturer: "Antonios", - direction: ["Outstanding Firepower", "Strategy & Support"], - scope: "Direct-Fire Weapon", - weight: 2, - row: "Back", - cp: 40, - maxInFleet: 5, - modules: [{ - type: "known", - img: "/weapons/icons/cannon.png", - system: "M1", - name: `"White Flashing" Integrated Armory`, - stats: { - type: "weapon", - antiship: 16080, - antiair: 691, - siege: 1908, - hp: 28800 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `CI-600T`, - name: `Heavy Ion Turret`, - damageType: "Energy", - target: "Large Ship", - lockonEfficiency: null, - alpha: 450, - attributes: null - }, { - type: "weapon", - count: 2, - title: `CG-2220`, - name: `Generic Dual-Cannon Battery`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: 10, - alpha: 120, - attributes: ["Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "M2", - name: `"White Flashing" Integrated Armory`, - stats: { - type: "weapon", - antiship: 13628, - antiair: 162, - siege: 2275, - hp: 28800 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `CR-1650`, - name: `Railgun`, - damageType: "Projectile", - target: "Large Ship", - lockonEfficiency: null, - alpha: 1000, - attributes: null - }, { - type: "weapon", - count: 6, - title: `CG-1105B`, - name: `Generic Cannon`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: null, - alpha: 20, - attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "A1", - name: `Integrated Aircraft Hanger`, - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 25200 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CFB-700`, - name: "Large Aircraft Hanger", - hanger: "Large Fighter", - capacity: 6, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "A2", - name: `Corvette Dock`, - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 25200 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CBC-3200`, - name: "Corvette Dock", - hanger: "Corvette", - capacity: 6, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/jamming.png", - system: "B1", - name: `Additional Energy System`, - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 27000 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `RET-200`, - name: "Energy Amplification Device", - attributes: ["Increase Aircraft Damage"] - }] - }, { - type: "known", - img: "/weapons/icons/jamming.png", - system: "B2", - name: `Fire-Control Auxiliary Calibration System`, - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 27000 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `XGC-200`, - name: "Precision Guidance System", - attributes: ["Increase Aircraft Hit Rate"] - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "C1", - name: `Additional Aircraft System`, - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 25200 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CBF-200`, - name: "Medium Hanger", - hanger: "Medium Fighter", - capacity: 4, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "C2", - name: `Missile Defense System`, - stats: { - type: "weapon", - antiship: 5200, - antiair: 504, - siege: 392, - hp: 28800 - }, - subsystems: [{ - type: "weapon", - count: 4, - title: `MK2-CM-4x250A "Storm"`, - name: `Missile Launcher Nest`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: 10, - alpha: 140, - attributes: ["Anti-Aircraft Support"] - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "C3", - name: `Recon UAV System`, - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 25200 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: "CIT-3", - name: `Fire-Control Spotter UAV Hanger`, - hanger: "Spotter UAV", - capacity: 3, - attributes: ["Ship Calibration Support"] - }] - }] - }, { - name: "Solar Whale", - title: "Armed Tactical Carrier", - img: "/ships/solarWhale.png", - type: "Carrier", - variant: "A", - variant_name: "Super Type", - manufacturer: "NOMA Shipping", - direction: ["Strategy & Support"], - scope: "Empty", - weight: 2, - row: "Middle", - cp: 55, - maxInFleet: 5, - modules: [{ - type: "known", - img: "/weapons/icons/aircraft.png", - system: "M1", - name: "Corvette Dock", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 24750 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CBC-3200`, - name: "Corvette Dock", - hanger: "Corvette", - capacity: 6, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "M2", - name: "Large Aircraft System", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 24750 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CFB-1200`, - name: "Large Aircraft Hanger", - hanger: "Large Fighter", - capacity: 8, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A1", - name: `Integrated Armory`, - stats: { - type: "weapon", - antiship: 9648, - antiair: 589, - siege: 959, - hp: 27000 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `BG-2450A`, - name: `Dual-Cannon Heavy Battery`, - damageType: "Projectile", - target: "Large Ship", - lockonEfficiency: null, - alpha: 320, - attributes: null - }, { - type: "weapon", - count: 2, - title: `MK3-BM-8x320 "Lightning Field"`, - name: `Dodeca-Fire Anti-Ship Missile System`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: 10, - alpha: 220, - attributes: ["Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A2", - name: `Projectile Weapon Platform`, - stats: { - type: "weapon", - antiship: 8749, - antiair: 589, - siege: 648, - hp: 27000 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `MK5-BM-16x180 "Lightning Field"`, - name: `Anti-Ship Missile Array`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: null, - alpha: 120, - attributes: null - }, { - type: "weapon", - count: 2, - title: `MK3-BM-8x320 "Lightning Field"`, - name: `Dodeca-Fire Anti-Ship Missile System`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: 10, - alpha: 220, - attributes: ["Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A3", - name: `Integrated Cannon Platform`, - stats: { - type: "weapon", - antiship: 8888, - antiair: 1021, - siege: 630, - hp: 27000 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `MK3-BM-8x320 "Lightning Field"`, - name: `Dodeca-Fire Anti-Ship Missile System`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: 10, - alpha: 220, - attributes: ["Anti-Aircraft Counterattack"] - }, { - type: "weapon", - count: 2, - title: `BG-2180`, - name: `Anti-Ship Cannon`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: null, - alpha: 80, - attributes: ["Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/jamming.png", - system: "B1", - name: "Ship Maintenance System", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 25200 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `BSY-5000`, - name: "Large Docking Jetty", - attributes: ["Aircraft Recovery"] - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "B2", - name: "Corvette Loading Platform", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 24750 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CBC-2000`, - name: "Corvette Dock", - hanger: "Corvette", - capacity: 3, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "C1", - name: "Aircraft Hanger", - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 24750 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CFB-600`, - name: "Aircraft Hanger", - hanger: "Large Fighter", - capacity: 5, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "C2", - name: "Siege UAV System", - stats: { - type: "weapon", - antiship: 0, - antiair: 0, - siege: 6652, - hp: 24750 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CST-6`, - name: "Siege UAV Pod", - hanger: "Siege UAV", - capacity: 4, - damageType: "Energy", - target: "Building", - lockonEfficiency: null, - alpha: 720, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "C3", - name: "Anti-Aircraft Missile Platform", - stats: { - type: "weapon", - antiship: 2618, - antiair: 1178, - siege: 0, - hp: 27000 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `BM-12x180T`, - name: "Missile Defense System", - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: 60, - alpha: 50, - attributes: ["Interception Capability", "Anti-Aircraft Special Ammo", "Anti-Aircraft Support"] - }] - }] - }, { - name: "Warspite", - title: "Assault Battleship", - img: "/ships/warspite.png", - type: "Battleship", - variant: "A", - variant_name: "Super", - manufacturer: "Empty", - direction: ["Empty"], - scope: "Empty", - weight: 0, - row: "Middle", - cp: 45, - maxInFleet: 3, - modules: [{ - type: "known", - img: "/weapons/icons/cannon.png", - system: "M1", - name: `Bow-Mounted Ion Cannon System`, - stats: { - type: "weapon", - antiship: 21000, - antiair: 0, - siege: 7350, - hp: 27900 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `FI-800`, - name: `Heavy Ion Cannon`, - damageType: "Energy", - target: "Large Ship", - lockonEfficiency: null, - alpha: 1050, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "M2", - name: `Bow-Mounted High-Energy Bombardment System`, - stats: { - type: "weapon", - antiship: 21272, - antiair: 0, - siege: 2127, - hp: 27900 - }, - subsystems: [{ - type: "weapon", - count: 1, - title: `FM-1x575`, - name: `Heavy High-Energy Bomber`, - damageType: "Energy", - target: "Large Ship", - lockonEfficiency: null, - alpha: 780, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A1", - name: `Anti-Ship Torpedo System`, - stats: { - type: "weapon", - antiship: 8280, - antiair: 0, - siege: 3150, - hp: 27900 - }, - subsystems: [{ - type: "weapon", - count: 4, - title: `FT-4x160`, - name: `Missile Silo`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: null, - alpha: 125, - attributes: ["Crit"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "A2", - name: `Projectile Weapon System`, - stats: { - type: "weapon", - antiship: 10000, - antiair: 2775, - siege: 3850, - hp: 27900 - }, - subsystems: [{ - type: "weapon", - count: 6, - title: `FM-1x205`, - name: `Missile Silo`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: 60, - alpha: 110, - attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "B1", - name: `Siege Armed System`, - stats: { - type: "weapon", - antiship: 6200, - antiair: 0, - siege: 4480, - hp: 27900 - }, - subsystems: [{ - type: "weapon", - count: 4, - title: `FT-1-365C`, - name: `Siege Torpedo`, - damageType: "Projectile", - target: "Building", - lockonEfficiency: null, - alpha: 320, - attributes: ["Crit"] - }] - }, { - type: "known", - img: "/weapons/icons/aircraft.png", - system: "B2", - name: "Siege UAV System", - stats: { - type: "weapon", - antiship: 0, - antiair: 0, - siege: 6048, - hp: 27900 - }, - subsystems: [{ - type: "hanger", - count: 1, - title: `CST-6`, - name: "Siege UAV Pod", - hanger: "Siege UAV", - capacity: 4, - damageType: "Energy", - target: "Building", - lockonEfficiency: null, - alpha: 630, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "C1", - name: `Experimental Ion Cannon System`, - stats: { - type: "weapon", - antiship: 9176, - antiair: 0, - siege: 3211, - hp: 27900 - }, - subsystems: [{ - type: "weapon", - count: 4, - title: `FI-400T`, - name: `Experimental Ion Turret`, - damageType: "Energy", - target: "Small Ship", - lockonEfficiency: null, - alpha: 260, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "C2", - name: `Ion Turret System`, - stats: { - type: "weapon", - antiship: 10400, - antiair: 0, - siege: 7280, - hp: 27900 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `FI-550`, - name: `Siege Ion Turret`, - damageType: "Energy", - target: "Large Ship", - lockonEfficiency: null, - alpha: 520, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "D1", - name: `Medium Anti-Ship Missile`, - stats: { - type: "weapon", - antiship: 9000, - antiair: 1530, - siege: 3569, - hp: 27900 - }, - subsystems: [{ - type: "weapon", - count: 4, - title: `FM-3x180`, - name: `Missile Vertical Launcher`, - damageType: "Projectile", - target: "Small Ship", - lockonEfficiency: 10, - alpha: 85, - attributes: ["Anti-Aircraft Counterattack"] - }] - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "D2", - name: `Large Anti-Ship Missile`, - stats: { - type: "weapon", - antiship: 11100, - antiair: 0, - siege: 3990, - hp: 27900 - }, - subsystems: [{ - type: "weapon", - count: 2, - title: `FM-1x450`, - name: `Missile Launcher`, - damageType: "Projectile", - target: "Large Ship", - lockonEfficiency: null, - alpha: 380, - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/armor.png", - system: "E1", - name: `Standard Sacrum Chu Imperium Armor System`, - stats: { - type: "armor", - extraHP: 284970, - armor: 270, - energyShield: 5, - hp: 27900 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `SC-100`, - name: `Ship Core`, - attributes: null - }, { - type: "misc", - count: 1, - title: "AC-111", - name: "Sacrum Chu Imperium Super-Heavy Armor", - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/armor.png", - system: "E2", - name: `Armor System`, - stats: { - type: "armor", - extraHP: 284970, - armor: 300, - energyShield: 10, - hp: 27900 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `SC-100`, - name: `Ship Core`, - attributes: null - }, { - type: "misc", - count: 1, - title: "AC-150", - name: "Generic Super-Heavy Armor", - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/speed.png", - system: "F1", - name: `Standard Sacrum Chu Imperium Propulsion System`, - stats: { - type: "propulsion", - cruise: 220, - warp: 1100, - hp: 30650 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `EN-111`, - name: `Sacrum Chu Imperium Vector Engine`, - attributes: null - }, { - type: "misc", - count: 1, - title: "EC-111", - name: "Sacrum Chu Imperium Warp Drive", - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/speed.png", - system: "F2", - name: `Propulsion System`, - stats: { - type: "propulsion", - cruise: 250, - warp: 1250, - hp: 27900 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `EN-600`, - name: `Generic Vector Engine`, - attributes: null - }, { - type: "misc", - count: 1, - title: "EC-600", - name: "Generic Warp Drive", - attributes: null - }] - }, { - type: "known", - img: "/weapons/icons/jamming.png", - system: "G1", - name: `Ion Enhancement Device`, - stats: { - type: "weapon", - antiship: null, - antiair: null, - siege: null, - hp: 27900 - }, - subsystems: [{ - type: "misc", - count: 1, - title: `RII-600`, - name: "Ion Energy Acceleration Device", - attributes: ["Increase Ion Damage"] // increases ion cannon damage by 25% - }] - }, { - type: "unknown", - img: "/weapons/icons/unknown.png", - system: "G2", - unknown: true - }, { - type: "known", - img: "/weapons/icons/cannon.png", - system: "H1", - name: `Short-Range Anti-Aircraft System`, - stats: { - type: "weapon", - antiship: 0, - antiair: 5717, - siege: 0, - hp: 28400 - }, - subsystems: [{ - type: "weapon", - count: 6, - title: `FM-2x90B`, - name: `Missile Vertical Launcher`, - damageType: "Projectile", - target: "Aircraft", - lockonEfficiency: 60, - alpha: 50, - attributes: ["Anti-Aircraft Special Ammo", "Anti-Aircraft High-Speed Strike", "Anti-Aircraft Counterattack"] - }] - }, { - type: "unknown", - img: "/weapons/icons/unknown.png", - system: "H2", - unknown: true - }] - } - ]; - return data; -}) diff --git a/server/middleware/init.ts b/server/middleware/init.ts new file mode 100644 index 0000000..c2dc734 --- /dev/null +++ b/server/middleware/init.ts @@ -0,0 +1,12 @@ +import admin from "firebase-admin"; + +export default defineEventHandler(() => { + const config = useRuntimeConfig(); + const decodedServiceAccount = Buffer.from(config.base64ServiceAccount, "base64").toString("utf-8"); + const credentials = JSON.parse(decodedServiceAccount); + + if (!admin.apps.length) + admin.initializeApp({ + credential: admin.credential.cert(credentials) + }); +}); diff --git a/stores/colorGeneratorStore.ts b/stores/colorGeneratorStore.ts deleted file mode 100644 index 67d0b85..0000000 --- a/stores/colorGeneratorStore.ts +++ /dev/null @@ -1,12 +0,0 @@ - -export const colorGeneratorStore = defineStore("colorGenerator", () => { - const inputText = ref(""); - const outputText = ref ([]); - - const color1 = ref("#f957ff"); - const color2 = ref("#ffc94d"); - const intensity = ref(15); - const compression = ref(2); - - return { inputText, outputText, color1, color2, intensity, compression } -}); diff --git a/stores/equipmentStore.ts b/stores/equipmentStore.ts deleted file mode 100644 index 5ec61c7..0000000 --- a/stores/equipmentStore.ts +++ /dev/null @@ -1,8 +0,0 @@ - -export const equipmentStore = defineStore("equipment", () => { - const filter = ref<"Equipment" | "Blueprints" | null>(null); - const current = ref(); - const search = ref(""); - - return { filter, current, search } -}); diff --git a/stores/modLibraryStore.ts b/stores/modLibraryStore.ts deleted file mode 100644 index d340be3..0000000 --- a/stores/modLibraryStore.ts +++ /dev/null @@ -1,8 +0,0 @@ - -export const modLibraryStore = defineStore("modLibrary", () => { - const ship = ref(); - const category = ref("M"); - const mod = ref(1); - - return { ship, category, mod } -}); diff --git a/stores/raHelperStore.ts b/stores/raHelperStore.ts deleted file mode 100644 index b67932a..0000000 --- a/stores/raHelperStore.ts +++ /dev/null @@ -1,11 +0,0 @@ - -export const raHelperStore = defineStore("raHelper", () => { - const manufacturer = ref("Jupiter Industry"); - const direction = ref("Outstanding Firepower"); - const scope = ref("Projectile Weapon"); - const ship = ref(); - const variant = ref<"A" | "B" | "C" | "D">("A"); - const search = ref(""); - - return { manufacturer, direction, scope, ship, variant, search } -}); diff --git a/stores/shipComparisonStore.ts b/stores/shipComparisonStore.ts deleted file mode 100644 index 56897b1..0000000 --- a/stores/shipComparisonStore.ts +++ /dev/null @@ -1,7 +0,0 @@ - -export const shipComparisonStore = defineStore("shipComparison", () => { - const ship1 = ref (); - const ship2 = ref (); - - return { ship1, ship2 } -}); diff --git a/stores/shipDataStore.ts b/stores/shipDataStore.ts deleted file mode 100644 index 33f1738..0000000 --- a/stores/shipDataStore.ts +++ /dev/null @@ -1,7 +0,0 @@ - -export const shipDataStore = defineStore("shipData", () => { - const shipData = ref(); - const equipmentData = ref<(Equipment | TechnicalBlueprint)[]>(); - - return { shipData, equipmentData } -}); diff --git a/stores/user.ts b/stores/user.ts new file mode 100644 index 0000000..0aee5f0 --- /dev/null +++ b/stores/user.ts @@ -0,0 +1,64 @@ +export const useUserStore = defineStore("userStore", () => { + const isDarkMode = ref(false); + const alert = ref(); + const user = ref(); + const shipData = ref(); + const shipDifficulties = ref>(); + + // blueprint tracker + const blueprintsAutosave = ref(); + const hasUnsavedChanges = ref(false); + + async function getUser(createUserIfFail = true) { + const uid = localStorage.getItem("uid"); + const accessToken = localStorage.getItem("token"); + + if (uid && accessToken) { + const { success, error, content } = await $fetch("/api/getUser", { method: "POST", body: { uid, accessToken, updateOrigin: false } }); + if (!success && error !== "User not found.") return console.error(error); + if (success && content) { + user.value = content; + localStorage.setItem("uid", content.uid); + localStorage.setItem("token", content.accessToken); + return; + } + } + + if (!createUserIfFail) return; + + const { success, error, content } = await $fetch("/api/createUser"); + if (!success && error) return console.error(error); + if (success && content) { + user.value = content; + localStorage.setItem("uid", content.uid); + localStorage.setItem("token", content.accessToken); + } + } + + async function fetchShipData() { + const { data, difficulty } = await $fetch("/api/data/ships"); + shipData.value = data; + shipDifficulties.value = difficulty; + } + + async function fetchLatestAlert() { + const { success, error, content } = await $fetch("/api/getAlert"); + if (!success && error) return console.error(error); + + if (success && content) { + alert.value = content; + + const latestClosedAlert = localStorage.getItem("alert"); + if (!latestClosedAlert) return (alert.value.show = true); + alert.value.show = latestClosedAlert !== alert.value.id; + } + } + + function init(createUserIfFail = true) { + void getUser(createUserIfFail); + void fetchLatestAlert(); + void fetchShipData(); + } + + return { isDarkMode, alert, user, shipData, shipDifficulties, blueprintsAutosave, hasUnsavedChanges, getUser, init }; +}); diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..0949685 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,32 @@ +import daisyUI from "daisyui"; +import flowbite from "flowbite/plugin"; +import flyonUI from "flyonui"; + +/** @type {import('tailwindcss').Config} */ +export default { + content: ["./app.vue", "./error.vue", "./pages/**/*.{vue,js,ts,jsx,tsx}", "./components/**/*.{vue,js,ts,jsx,tsx}", "./layouts/**/*.{vue,js,ts,jsx,tsx}", "./node_modules/flowbite/**/*.js"], + theme: { + colors: { + body: "var(--bg-color)" + }, + extend: { + screens: { + lg: "1025px" + } + } + }, + plugins: [daisyUI, flowbite, flyonUI], + daisyui: { + prefix: "du-", + logs: false + }, + flyonui: { + prefix: "fo-", + logs: false + }, + darkMode: "selector", + future: { + // mobile support for hover until tailwind v4 is out and this is default behavior + hoverOnlyWhenSupported: true + } +}; diff --git a/tests/api/ships.test.ts b/tests/api/ships.test.ts new file mode 100644 index 0000000..45f1319 --- /dev/null +++ b/tests/api/ships.test.ts @@ -0,0 +1,68 @@ +import { describe, test, expect } from "vitest"; +import { setup, $fetch } from "@nuxt/test-utils"; + +describe("Ship Data Tests", async () => { + await setup({ server: true, setupTimeout: 180000 }); + + test("Super capital ship module subsystem stats should add up to overall module stats", async () => { + const response = await $fetch("/api/data/ships"); + const data = response.data.filter((ship) => "modules" in ship).flatMap((ship) => ship.modules.map((mod) => [ship.name, mod])) as [string, AllModule][]; + + const invalidSubsystems: [string, string, string, string][] = []; + for (const [ship, mod] of data) { + if (mod.type === "unknown") continue; + if (!("antiship" in mod.stats) || !("antiair" in mod.stats) || !("siege" in mod.stats)) continue; + if (mod.subsystems.every((subsystem) => !("stats" in subsystem))) continue; + + const stats = ["antiship", "antiair", "siege"] as (keyof typeof mod.stats)[]; + for (const stat of stats) { + if (mod.stats[stat] === null || mod.subsystems.some((subsystem) => "stats" in subsystem && !(stat in subsystem.stats.targetPriority))) continue; + const overallStat = mod.stats[stat]; + + const subsystemStat = mod.subsystems.reduce((acc, curr) => { + if (!("stats" in curr)) return acc; + if (Array.isArray(curr.stats.targetPriority)) return acc; + + const currentTargetPriority = curr.stats.targetPriority[stat as keyof typeof curr.stats.targetPriority]; + if (!currentTargetPriority) return acc; + + return acc + currentTargetPriority.damage; + }, 0); + + if (overallStat !== subsystemStat) invalidSubsystems.push([ship, stat, mod.system, mod.name]); + } + } + + expect(invalidSubsystems).toMatchObject([]); + }); + + test("Super capital ship module sources should be in credits", async () => { + const response = await $fetch("/api/data/ships"); + const data = response.data.filter((ship) => "modules" in ship).flatMap((ship) => ship.modules.map((mod) => [ship.name, mod])) as [string, AllModule][]; + + const missingCredits: [string, string, string, string][] = []; + for (const [ship, mod] of data) { + if (mod.type === "unknown" || !mod.sourcedFrom) continue; + + for (const source of mod.sourcedFrom) { + if (!credits.find((person) => person.name === source)) missingCredits.push([ship, mod.system, mod.name, source]); + } + } + + expect(missingCredits).toMatchObject([]); + }); + + test("Ship image paths should follow naming scehema", async () => { + const response = await $fetch("/api/data/ships"); + const data = response.data; + + const wrongImages: [string, string, string, string][] = []; + for (const ship of data) { + const expectedPath = `/ships/${shipNameToImage(ship.name)}_${ship.variant.toLowerCase()}.png`; + const actualPath = ship.img; + if (actualPath !== expectedPath) wrongImages.push([ship.name, ship.variant, actualPath, expectedPath]); + } + + expect(wrongImages).toMatchObject([]); + }); +}); diff --git a/tests/changelog.test.ts b/tests/changelog.test.ts new file mode 100644 index 0000000..31ad9ea --- /dev/null +++ b/tests/changelog.test.ts @@ -0,0 +1,20 @@ +import { describe, test, expect } from "vitest"; + +describe("Changelog Tests", () => { + test("Versions should be unique", () => { + const versions = changelog.map((version) => version.version); + const uniqueVersions = new Set(versions); + + expect(uniqueVersions.size).toBe(versions.length); + }); + + test("Version release dates should be in YYYY-MM-DD format", () => { + const regex = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/; + const releaseDates = changelog.map((version) => version.release); + + for (const release of releaseDates) { + expect(regex.test(release)).toBe(true); + expect(new Date(release).toISOString().slice(0, 10)).toBe(release); + } + }); +}); diff --git a/tests/credits.test.ts b/tests/credits.test.ts new file mode 100644 index 0000000..ea4e621 --- /dev/null +++ b/tests/credits.test.ts @@ -0,0 +1,20 @@ +import { describe, test, expect } from "vitest"; + +describe("Credits Tests", () => { + test("People should only have 1 credit object", () => { + const list = credits.map((person) => person.name); + const uniqueList = new Set(list); + + expect(uniqueList.size).toBe(list.length); + }); + + test("Dates should be in YYYY-MM-DD format", () => { + const regex = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/; + const dates = credits.map((person) => person.dateAdded); + + for (const date of dates) { + expect(regex.test(date)).toBe(true); + expect(new Date(date).toISOString().slice(0, 10)).toBe(date); + } + }); +}); diff --git a/utils/blueprints.ts b/utils/blueprints.ts new file mode 100644 index 0000000..ed24e29 --- /dev/null +++ b/utils/blueprints.ts @@ -0,0 +1,70 @@ +export interface BlueprintFighter extends Fighter { + unlocked: boolean; + techPoints: number; + mirrorTechPoints: boolean; +} + +export interface BlueprintCorvette extends Corvette { + unlocked: boolean; + techPoints: number; + mirrorTechPoints: boolean; +} + +export interface BlueprintCapitalShip extends CapitalShip { + unlocked: boolean; + techPoints: number; + mirrorTechPoints: boolean; +} + +export interface BlueprintMediumFighterCapitalShip extends MediumFighterCapitalShip { + unlocked: boolean; + techPoints: number; + mirrorTechPoints: boolean; +} + +export interface BlueprintLargeFighterCapitalShip extends LargeFighterCapitalShip { + unlocked: boolean; + techPoints: number; + mirrorTechPoints: boolean; +} + +export interface BlueprintCorvetteCapitalShip extends CorvetteCapitalShip { + unlocked: boolean; + techPoints: number; + mirrorTechPoints: boolean; +} + +export interface BlueprintUnknownModule extends UnknownModule { + unlocked: boolean; +} + +export interface BlueprintWeaponModule extends WeaponModule { + unlocked: boolean; +} + +export interface BlueprintPropulsionModule extends PropulsionModule { + unlocked: boolean; +} + +export interface BlueprintMiscModule extends MiscModule { + unlocked: boolean; +} + +export interface BlueprintSuperCapitalShip extends SuperCapitalShip { + unlocked: boolean; + techPoints: number; + mirrorTechPoints: boolean; + modules: (BlueprintUnknownModule | BlueprintWeaponModule | BlueprintPropulsionModule | BlueprintMiscModule)[]; +} + +export type BlueprintAllShip = + | BlueprintFighter + | BlueprintCorvette + | BlueprintCapitalShip + | BlueprintMediumFighterCapitalShip + | BlueprintLargeFighterCapitalShip + | BlueprintCorvetteCapitalShip + | BlueprintSuperCapitalShip; + +export type ShipSorter = (shipA: BlueprintAllShip, shipB: BlueprintAllShip) => number; +export type ShipFilter = (ship: BlueprintAllShip) => boolean; diff --git a/utils/changelog.ts b/utils/changelog.ts index f925cc3..84d0dfc 100644 --- a/utils/changelog.ts +++ b/utils/changelog.ts @@ -1,247 +1,401 @@ - export type Changelog = { - type: "release" | "minor release" | "bugfix"; - version: string; - release: string; - notes: string[]; -} + type: "release" | "minor release" | "bugfix"; + /** Excludes any flavor, such as a leading v + * @example "0.1.0" + */ + version: string; + /** YYYY-MM-DD */ + release: string; + notes: string[]; +}; -export const changelog: Changelog[] = [{ +export const changelog: readonly Changelog[] = [ + { type: "release", version: "0.1.0", - release: "January 13, 2024", + release: "2024-01-13", notes: ["Initial release"] -}, { + }, + { type: "release", version: "0.2.0", - release: "January 14, 2024", - notes: ["Added header and footer", "Added fade when changing theme", "Added light mode colors", - "Optimized font sizes for mobile users", "Made theme button bigger", - "Fixed character counter in Color Generator", "Added Research Agreement Helper"] -}, { + release: "2024-01-14", + notes: [ + "Added header and footer", + "Added fade when changing theme", + "Added light mode colors", + "Optimized font sizes for mobile users", + "Made theme button bigger", + "Fixed character counter in Color Generator", + "Added Research Agreement Helper" + ] + }, + { type: "release", version: "0.3.0", - release: "January 15, 2024", - notes: ["Added Changelog", "Removed theme button image", "Moved theme button to header buttons", - "Added active and hover effects to header buttons"] -}, { + release: "2024-01-15", + notes: ["Added Changelog", "Removed theme button image", "Moved theme button to header buttons", "Added active and hover effects to header buttons"] + }, + { type: "release", version: "0.3.1", - release: "January 16, 2024", - notes: ["Changed the information displayed in Research Agreement Helper", "Version number in footer is now dynamic", - "Optimized how information is displayed in Research Agreement Helper for mobile users", "Added images to Research Agreement Helper"] -}, { + release: "2024-01-16", + notes: [ + "Changed the information displayed in Research Agreement Helper", + "Version number in footer is now dynamic", + "Optimized how information is displayed in Research Agreement Helper for mobile users", + "Added images to Research Agreement Helper" + ] + }, + { type: "bugfix", version: "0.3.2", - release: "January 16, 2024", + release: "2024-01-16", notes: ["Optimized Research Agreement Helper for mobile users further"] -}, { + }, + { type: "release", version: "0.3.3", - release: "January 17, 2024", - notes: ["Changed how Color Generator operates", "Color Generator is now based on text-based markers rather than highlighting text", - "Removed the Underline option in Color Generator", "Changed tutorial text of Color Generator to match the other changes", - "Fixed the character counters in Color Generator"] -}, { + release: "2024-01-17", + notes: [ + "Changed how Color Generator operates", + "Color Generator is now based on text-based markers rather than highlighting text", + "Removed the Underline option in Color Generator", + "Changed tutorial text of Color Generator to match the other changes", + "Fixed the character counters in Color Generator" + ] + }, + { type: "bugfix", version: "0.3.4", - release: "January 20, 2024", + release: "2024-01-20", notes: ["Fixed a bug where Color Generator output not updating when a color marker was placed in the input"] -}, { + }, + { type: "release", version: "0.4.0", - release: "January 28, 2024", - notes: ["Added Module Library", "Fixed ST59 and Spear of Uranus being misplaced in the Research Agreement Helper ship order", - "Changed the size of active buttons to better fit mobile devices"] -}, { + release: "2024-01-28", + notes: ["Added Module Library", "Fixed ST59 and Spear of Uranus being misplaced in the Research Agreement Helper ship order", "Changed the size of active buttons to better fit mobile devices"] + }, + { type: "release", version: "0.4.1", - release: "January 29, 2024", - notes: ["Renamed Changelog to Home", "Changed Research Agreement Helper and Module Library to save progress if you switch Gravity Assist tools", - "Significantly changed the display of data in Module Library", "Changed Gravity Assist to default to displaying Home on load", - "Added alternative Navigation Bar buttons to the Home Page", "Fixed some module data"] -}, { + release: "2024-01-29", + notes: [ + "Renamed Changelog to Home", + "Changed Research Agreement Helper and Module Library to save progress if you switch Gravity Assist tools", + "Significantly changed the display of data in Module Library", + "Changed Gravity Assist to default to displaying Home on load", + "Added alternative Navigation Bar buttons to the Home Page", + "Fixed some module data" + ] + }, + { type: "release", version: "0.4.2", - release: "January 30, 2024", - notes: ["Added a search by ship feature for Research Agreement Helper", "Optimized Module Library buttons for mobile devices", - "Removed the Theme button", "Fixed wrong results for Hayreddin's Loyal and Thunderbolt Star in Research Agreement Helper"] -}, { + release: "2024-01-30", + notes: [ + "Added a search by ship feature for Research Agreement Helper", + "Optimized Module Library buttons for mobile devices", + "Removed the Theme button", + "Fixed wrong results for Hayreddin's Loyal and Thunderbolt Star in Research Agreement Helper" + ] + }, + { type: "release", version: "1.0.0", - release: "February 17, 2024", - notes: ["Reworked all of Color Generator", "Reworked display of Research Agreement Helper", "Added Color Generator gradients", - "Color Generator now allows for copy to clipboard", "Improved the RA Finder algorithm", "Changed display of information in Research Agreement Helper", - "Changed display of information in Module Library", "Changed display of information in Changelog", "Changed display of header buttons", - "Optimized every display for mobile users", "Changed display of information in Module Library for desktop users", - "Gravity Assist tool links are now routed", "Added Eternal Heavens to Research Agreement Helper and Module Library", - "Disabled double-click to zoom on buttons for mobile users"] -}, { + release: "2024-02-17", + notes: [ + "Reworked all of Color Generator", + "Reworked display of Research Agreement Helper", + "Added Color Generator gradients", + "Color Generator now allows for copy to clipboard", + "Improved the RA Finder algorithm", + "Changed display of information in Research Agreement Helper", + "Changed display of information in Module Library", + "Changed display of information in Changelog", + "Changed display of header buttons", + "Optimized every display for mobile users", + "Changed display of information in Module Library for desktop users", + "Gravity Assist tool links are now routed", + "Added Eternal Heavens to Research Agreement Helper and Module Library", + "Disabled double-click to zoom on buttons for mobile users" + ] + }, + { type: "bugfix", version: "1.0.1", - release: "February 18, 2024", - notes: ["Added an animation for copying text in Color Generator", "Fixed the Color Generator character counter not working above 1,000 characters", - "Fixed a bug where the Color Generator reverse button wouldn't work on Chrome for iOS", "Fixed a bug where RA Finder algorithm wouldn't work", - "Optimized display of information for mobile users in Mod Library"] -}, { + release: "2024-02-18", + notes: [ + "Added an animation for copying text in Color Generator", + "Fixed the Color Generator character counter not working above 1,000 characters", + "Fixed a bug where the Color Generator reverse button wouldn't work on Chrome for iOS", + "Fixed a bug where RA Finder algorithm wouldn't work", + "Optimized display of information for mobile users in Mod Library" + ] + }, + { type: "release", version: "1.0.2", - release: "February 19, 2024", - notes: ["Added a time estimate for research agreement paths in RA Helper", "Added animations to popup windows in Color Generator and RA Helper", - "Replaced Mod Library and RA Helper ship images with higher quality ones", "Fixed AT021-B and AT021-C appearing under the wrong filters in RA Helper"] -}, { + release: "2024-02-19", + notes: [ + "Added a time estimate for research agreement paths in RA Helper", + "Added animations to popup windows in Color Generator and RA Helper", + "Replaced Mod Library and RA Helper ship images with higher quality ones", + "Fixed AT021-B and AT021-C appearing under the wrong filters in RA Helper" + ] + }, + { type: "release", version: "1.1.0", - release: "February 20, 2024", + release: "2024-02-20", notes: ["Added Equipment Encyclopedia", "Added a color compression option in Color Generator to create longer text", "Edited home tab text"] -}, { + }, + { type: "release", version: "1.1.1", - release: "February 21, 2024", - notes: ["Color Generator character counters now update automatically after switching compression", - "Added more images to Equipment Encyclopedia", "Added 2 new colors to Color Generator", "Made red buttons more vibrant", - "Added a credits button to Home page", "Optimized the detail cards in Equipment Encyclopedia for mobile users", - "Fixed some data in Equipment Encylcopedia", "Added missing technical blueprints to Equipment Encyclopedia", "Full changelog is now a window"] -}, { + release: "2024-02-21", + notes: [ + "Color Generator character counters now update automatically after switching compression", + "Added more images to Equipment Encyclopedia", + "Added 2 new colors to Color Generator", + "Made red buttons more vibrant", + "Added a credits button to Home page", + "Optimized the detail cards in Equipment Encyclopedia for mobile users", + "Fixed some data in Equipment Encylcopedia", + "Added missing technical blueprints to Equipment Encyclopedia", + "Full changelog is now a window" + ] + }, + { type: "minor release", version: "1.1.2", - release: "February 22, 2024", + release: "2024-02-22", notes: ["Finished adding all images to Eqquipment Encyclopedia", "Changed the display of information in the changelog"] -}, { + }, + { type: "bugfix", version: "1.1.3", - release: "February 25, 2024", + release: "2024-02-25", notes: ["Optimized display of information in Equipment Encyclopedia further for mobile users"] -}, { + }, + { type: "release", version: "1.1.4", - release: "February 29, 2024", + release: "2024-02-29", notes: ["Added 3 new colors to Color Generator: Rainbow, Blue/Pink, and Red/Dark"] -}, { + }, + { type: "release", version: "1.1.5", - release: "March 1, 2024", - notes: ["Reworked the display of colors when choosing a color in Color Generator", "Changed Blue/Purple to Purple/Purple in Color Generator", - "Added 5 new colors to Color Generator: Red/Orange, Blue/Orange, Purple/Mint, Green/Green, and Sunset", "Colors are now separated into categories"] -}, { + release: "2024-03-01", + notes: [ + "Reworked the display of colors when choosing a color in Color Generator", + "Changed Blue/Purple to Purple/Purple in Color Generator", + "Added 5 new colors to Color Generator: Red/Orange, Blue/Orange, Purple/Mint, Green/Green, and Sunset", + "Colors are now separated into categories" + ] + }, + { type: "minor release", version: "1.1.5.1", - release: "March 1, 2024", + release: "2024-03-01", notes: ["Revamped the color pallete of Blue/Purple in Color Generator"] -}, { + }, + { type: "release", version: "1.1.6", - release: "March 2, 2024", + release: "2024-03-02", notes: ["Added the ability to share links for Gravity Assist page options", "Added Eternal Heavens A2 to Module Library"] -}, { + }, + { type: "release", version: "1.2.0", - release: "March 8, 2024", - notes: ["Added Fleet Builder", "Damage and armor bar representations in Module Library now animate dynamically", - "Some images in Module Library are now high quality SVG files", "Research Agreement Helper now displays minutes if there is a remainder", - "Gravity Assist icon is now a high quality SVG", "Clarified the share buttons", "Added onscreen animations when clicking share buttons"] -}, { + release: "2024-03-08", + notes: [ + "Added Fleet Builder", + "Damage and armor bar representations in Module Library now animate dynamically", + "Some images in Module Library are now high quality SVG files", + "Research Agreement Helper now displays minutes if there is a remainder", + "Gravity Assist icon is now a high quality SVG", + "Clarified the share buttons", + "Added onscreen animations when clicking share buttons" + ] + }, + { type: "bugfix", version: "1.2.1", - release: "March 24, 2024", - notes: ["Added Eternal Heavens B1 module", "Fixed flagship choices not changing after removing a flagship ship in Fleet Builder", - "Edited credits"] -}, { + release: "2024-03-24", + notes: ["Added Eternal Heavens B1 module", "Fixed flagship choices not changing after removing a flagship ship in Fleet Builder", "Edited credits"] + }, + { type: "release", version: "1.2.2", - release: "April 7, 2024", - notes: ["Changed copy text and share link buttons to icons", "Added instructions to RA Helper ship search text when no ship is selected", - "Revamped the color palettes of Blue/Purple and Sunset in Color Generator", "Added 2 new colors to Color Generator: Pink/Green and Orange/Orange", - "Fixed the display of information in Equipment Encyclopedia for mobile users (for real this time)", "Optimized home menu buttons and added icons", - "Condensed some credits for better readability", "Added random fun facts to the home page", "Optimized display of information in Module Library", - "Changed the name of \"Credits\" to \"Contributors\"", "Fixed the close button on the credits screen being too small for mobile users"] -}, { + release: "2024-04-07", + notes: [ + "Changed copy text and share link buttons to icons", + "Added instructions to RA Helper ship search text when no ship is selected", + "Revamped the color palettes of Blue/Purple and Sunset in Color Generator", + "Added 2 new colors to Color Generator: Pink/Green and Orange/Orange", + "Fixed the display of information in Equipment Encyclopedia for mobile users (for real this time)", + "Optimized home menu buttons and added icons", + "Condensed some credits for better readability", + "Added random fun facts to the home page", + "Optimized display of information in Module Library", + 'Changed the name of "Credits" to "Contributors"', + "Fixed the close button on the credits screen being too small for mobile users" + ] + }, + { type: "minor release", version: "1.2.3", - release: "April 11, 2024", + release: "2024-04-11", notes: ["Added some new home screen tips"] -}, { + }, + { type: "bugfix", version: "1.2.4", - release: "April 16, 2024", + release: "2024-04-16", notes: ["Edited module names for Spear of Uranus for A1, A2, and A3 to match the new ingame names."] -}, { + }, + { type: "minor release", version: "1.2.5", - release: "April 27, 2024", + release: "2024-04-27", notes: ["Added Ranger A and B to Research Agreement Helper", "Added Ediacaran D2 and Marshal Crux C3 to Module Library", "Edited Contributors list"] -}, { + }, + { type: "release", version: "1.2.6", - release: "May 16, 2024", + release: "2024-05-16", notes: ["Added Ediacaran A2, B2, and C1 to Module Library", "Made some major changes behind the scenes", "Removed Fleet Builder temporarily"] -}, { + }, + { type: "release", version: "1.3.0", - release: "May 27, 2024", - notes: ["You can now choose your own colors, intensity, and compression in Color Generator", "Completely reworked the design of the website", - "Loading speeds improved tremendously", "You can now zoom out and in to your heart's content", - "Buttons for navigating between pages is no longer in the header and instead in a new side bar", "Added better route navigation", - "You can now freely select ships in Module Library without scrolling through the list", "Changelog and Contributors are now their own pages", - "Some more images are now high-quality SVGs", "Even more major changes behind the scenes"] -}, { + release: "2024-05-27", + notes: [ + "You can now choose your own colors, intensity, and compression in Color Generator", + "Completely reworked the design of the website", + "Loading speeds improved tremendously", + "You can now zoom out and in to your heart's content", + "Buttons for navigating between pages is no longer in the header and instead in a new side bar", + "Added better route navigation", + "You can now freely select ships in Module Library without scrolling through the list", + "Changelog and Contributors are now their own pages", + "Some more images are now high-quality SVGs", + "Even more major changes behind the scenes" + ] + }, + { type: "minor release", version: "1.3.0.1", - release: "June 3, 2024", + release: "2024-06-03", notes: ["Added Eternal Heavens A3"] -}, { + }, + { type: "release", version: "1.3.1", - release: "June 17, 2024", - notes: ["Changed the primary font used on mobile devices", "Edited attribute descriptions of recently reworked attributes", - "Added variant names to ship cards in RA Helper", "Changed the way RA Helper cards are displayed on mobile devices", - "Fixed a bug where share links would not work in some cases", "Changed the contents of the root page", "Changed the display of the cards on the home page", - "Selecting a preset gradient in Color Generator will now close the dropdown", "Selecting an already selected equipment will now close the dropdown"] -}, { + release: "2024-06-17", + notes: [ + "Changed the primary font used on mobile devices", + "Edited attribute descriptions of recently reworked attributes", + "Added variant names to ship cards in RA Helper", + "Changed the way RA Helper cards are displayed on mobile devices", + "Fixed a bug where share links would not work in some cases", + "Changed the contents of the root page", + "Changed the display of the cards on the home page", + "Selecting a preset gradient in Color Generator will now close the dropdown", + "Selecting an already selected equipment will now close the dropdown" + ] + }, + { type: "minor release", version: "1.3.1.1", - release: "June 25, 2024", + release: "2024-06-25", notes: ["Added Eternal Heavens B2"] -}, { + }, + { type: "bugfix", version: "1.3.1.2", - release: "June 29, 2024", + release: "2024-06-29", notes: ["Fixed the latest changes card not showing previous changes"] -}, { + }, + { type: "minor release", version: "1.3.1.3", - release: "July 1, 2024", + release: "2024-07-01", notes: ["Added preloading for images in Module Library"] -}, { + }, + { type: "minor release", version: "1.3.1.4", - release: "July 6, 2024", + release: "2024-07-06", notes: ["Fixed Ediacaran C1 showing as B2", "Added Ediacaran B2"] -}, { + }, + { type: "release", version: "1.3.2", - release: "July 11, 2024", - notes: ["Added Eternal Heavens M2, M3, and C3", "Added UAV Cooperation attribute to Eternal Heavens M1", - "Fixed Eternal Heavens A3 displaying as an unknown module", "Clicking on ships in Module Library will now change the path"] -}, { + release: "2024-07-11", + notes: [ + "Added Eternal Heavens M2, M3, and C3", + "Added UAV Cooperation attribute to Eternal Heavens M1", + "Fixed Eternal Heavens A3 displaying as an unknown module", + "Clicking on ships in Module Library will now change the path" + ] + }, + { type: "release", version: "1.3.3", - release: "July 19, 2024", - notes: ["Decreased the default compression value from 3 to 2 in Color Generator", - "Selecting a color from the preset gradients or previous colors menu will no longer change your advanced settings", - "Changelog cards in the full changelog now match the changelog card on the home page for parity", - "Fixed numbers being not visible in Color Generator advanced option inputs"] -}, { + release: "2024-07-19", + notes: [ + "Decreased the default compression value from 3 to 2 in Color Generator", + "Selecting a color from the preset gradients or previous colors menu will no longer change your advanced settings", + "Changelog cards in the full changelog now match the changelog card on the home page for parity", + "Fixed numbers being not visible in Color Generator advanced option inputs" + ] + }, + { type: "release", version: "1.3.4", - release: "July 27, 2024", - notes: ["Made the side menu visible at all times for bigger screens", "Adjusted font size for all devices", "Added Warspite to Module Library", - "Removed the Contributors and Changelog button from the footer and moved them to the side menu"] -}, { + release: "2024-07-27", + notes: [ + "Made the side menu visible at all times for bigger screens", + "Adjusted font size for all devices", + "Added Warspite to Module Library", + "Removed the Contributors and Changelog button from the footer and moved them to the side menu" + ] + }, + { type: "release", version: "1.3.5", - release: "September 22, 2024", - notes: ["Added Hale-Bopp to RA Helper", "Added most Warspite modules to Module Library", "Added pre-loading for all images", - "Added an error page when trying to load a page that doesn't exist", "Fixed Module Library links not working", "Fixed share links not working", - "Fixed invalid url encoding on refresh", "Fixed the navigation menu closing even when not pressing on a button on mobile devices"] -}]; + release: "2024-09-22", + notes: [ + "Added Hale-Bopp to RA Helper", + "Added most Warspite modules to Module Library", + "Added pre-loading for all images", + "Added an error page when trying to load a page that doesn't exist", + "Fixed Module Library links not working", + "Fixed share links not working", + "Fixed invalid url encoding on refresh", + "Fixed the navigation menu closing even when not pressing on a button on mobile devices" + ] + }, + { + type: "release", + version: "2.0.0", + release: "2025-01-29", + notes: [ + "Redesigned entire site", + "Heavily optimized site networking", + "Added Blueprint Tracker", + "Added Mail Editor", + "Added Inostrancevia, Tempel I, and Shield of Plutus to RA Helper", + "Added Shield of Plutus to Module Library", + "Fixed RA Helper search function not properly finding optimal path", + "Removed Equipment Encyclopedia and Color Generator", + "Improved icons in Module Library", + "Added more information to Module Library" + ] + } +]; diff --git a/utils/credits.ts b/utils/credits.ts index 02d01b4..b9bef95 100644 --- a/utils/credits.ts +++ b/utils/credits.ts @@ -1,53 +1,104 @@ - export type Credit = { - name: string; - specific: string[]; - dateAdded: string; -} + name: string; + /** Notes for the credit */ + specific: string[]; + /** YYYY-MM-DD */ + dateAdded: string; +}; -export const credits: Credit[] = [{ +export const credits: readonly Credit[] = [ + { name: "Windserpent", - specific: ["All Constantine the Great modules", "All Eternal Storm modules", "All Spear of Uranus modules", "All ST59 modules", - "All FSV830 modules", "All CV3000 modules", "Most Marshal Crux modules", "All Solar Whale Modules"], - dateAdded: "November 28, 2023" -}, { + specific: [ + "All Constantine the Great modules", + "All Eternal Storm modules", + "All Spear of Uranus modules", + "All ST59 modules", + "All FSV830 modules", + "All CV3000 modules", + "Most Marshal Crux modules", + "All Solar Whale Modules" + ], + dateAdded: "2023-11-28" + }, + { name: "WarpPrime", - specific: ["Most Warspite modules", "Feature additions", "Bug fixes", "Maintenance"], - dateAdded: "September 19, 2024" -}, { + specific: ["Warspite M2, A2, B2, C2, D2, E2, F2", "Feature additions", "Bug fixes", "Maintenance"], + dateAdded: "2024-09-19" + }, + { + name: "Sector", + specific: ["Ediacaran B3", "Eternal Storm M2, A2, B2, C1, D1, D2", "Spear of Uranus M2, A3, B1", "Eternal Heavens B2", "Solar Whale A3"], + dateAdded: "2025-01-24" + }, + { name: "Toir", - specific: ["Ediacaran D2", "Ediacaran C1", "Module Library redesign feedback", "Bug reporting"], - dateAdded: "April 24, 2024" -}, { - name: "Somnambulist", - specific: ["Eternal Heavens B2", "Ediacaran B2"], - dateAdded: "June 25, 2024" -}, { + specific: ["Ediacaran D2, C1", "Module Library redesign feedback", "Bug reporting"], + dateAdded: "2024-04-24" + }, + { name: "Bullet", specific: ["Color Generator feedback", "Color suggestions"], - dateAdded: "November 17, 2023" -}, { + dateAdded: "2023-11-27" + }, + { name: "Black Rangers", specific: ["RA Helper and Module Library feedback", "Bug reports"], - dateAdded: "February 16, 2024" -}, { + dateAdded: "2024-02-16" + }, + { + name: "Somnambulist", + specific: ["Eternal Heavens B2", "Ediacaran B2"], + dateAdded: "2024-06-25" + }, + { + name: "OZY", + specific: ["ST59 M3", "Eternal Heavens M3"], + dateAdded: "2025-01-24" + }, + { + name: "The Enlightened", + specific: ["Constantine the Great B3", "Solar Whale C3"], + dateAdded: "2025-01-25" + }, + { + name: "Thalleous", + specific: ["Thunderbolt Star M2, M3, E1, E2"], + dateAdded: "2023-11-30" + }, + { + name: "Spy Shark", + specific: ["Eternal Heavens B1, C1, C2"], + dateAdded: "2024-03-13" + }, + { name: "LunatiCorp", specific: ["Eternal Heavens A2"], - dateAdded: "March 1, 2024" -}, { - name: "Spy Shark", - specific: ["Eternal Heavens B1", "Eternal Heavens C1", "Eternal Heavens C2"], - dateAdded: "March 13, 2024" -}, { + dateAdded: "2024-03-01" + }, + { name: "kitty7hell", specific: ["Marshal Crux C3"], - dateAdded: "April 27, 2024" -}, { + dateAdded: "2024-04-27" + }, + { name: "Ultix", specific: ["Eternal Heavens A3"], - dateAdded: "June 3, 2024" -}, { + dateAdded: "2024-06-03" + }, + { + name: "Draconia19", + specific: ["Marshal Crux C3"], + dateAdded: "2025-01-25" + }, + { name: "NullPointer", specific: ["Ship data"], - dateAdded: "January 14, 2024" -}]; + dateAdded: "2024-01-14" + }, + { + name: "MeshaLee Adams", + specific: ["o7"], + dateAdded: "2021-07-05" + } +]; diff --git a/utils/equipmentData.ts b/utils/equipmentData.ts deleted file mode 100644 index 0c04b96..0000000 --- a/utils/equipmentData.ts +++ /dev/null @@ -1,26 +0,0 @@ - -export type EquipmentClass = "Information" | "Logistics" | "Engineering" | "Engage" | "Efficiency"; -export type TechnicalBlueprintClass = "Strategy" | "Supply" | "Communicate" | "Command"; - -export type Equipment = { - displayImg: string; - type: "Equipment", - displayName: string; - effectName: string; - effectDescription: string[]; - loadWeight: number; - class: EquipmentClass; -} - -export type TechnicalBlueprint = { - displayImg: string; - type: "Technical Blueprint"; - displayName: string; - effectName: string; - effectDescription: string[]; - deliveryTarget: "Range" | "Single"; - itemMass: "Light" | "Heavy"; - activeService: number; - productionInterval: string; - class: TechnicalBlueprintClass; -} diff --git a/utils/facts.ts b/utils/facts.ts deleted file mode 100644 index 05480c3..0000000 --- a/utils/facts.ts +++ /dev/null @@ -1,44 +0,0 @@ - -export const facts: string[] = [ - "LightSide is very trustworthy!", - "One Solar Whale is as big as Central Park in NYC.", - "99% of gamblers quit before winning big. Keep buying boxes!", - "Base X20 Large Miners are worse than fully upgraded X10 Medium Miners", - "Servers typically last between 8-9 weeks.", - "The chat censor is very annoying.", - "Using multiple X20 Large Miners will not result in faster building.", - "Trojite cannot be stolen from cities they are deposited to.", - "The Radiation Zone in Data Recovery servers gradually expands after every cycle.", - "Pathing is very good and not flawed in any ways.", - "Reinforce a fleet and retreat those reinforcements before they reach their target to maximize battlepass points from AP spent.", - "The free side of the battlepass provides 3,000 proxima coins, 431,000 UECoins, and 19 Black Market boxes.", - "The paid side of the battlepass provides 6,000 proxima coins, 320,000 UECoins, and 20 Black Market boxes.", - "The paid battlepass gives the best value for your buck in the game.", - "Cities provide slightly more occupancy percentage than they say they do.", - "Miners assigned to an Advanced Mining Platform will update their Tech Point allocations after depositing at the AMP.", - "Fleets will only update their Tech Point allocations when inside the base or outpost/platform if deployed as a subfleet.", - "Outposts and Basic Mining Platforms take the least amount of time to build.", - "There is still extra time left in the server after the rating point timer.", - "Graveyards are square-ish in shape, do not have any level 3 or higher resource nodes, and can be found in any of the starter regions.", - "If you are a leader, 90% of this game is actually played on Discord.", - "Trying to sign an agreement in the hub is fun for the whole family!", - "Fleets can travel through the center of the sun, but cannot land inside the center of the sun.", - "Ships, including miners, can be permanently killed by using ships or aircraft with the \"Attack Against Systems: Propulsion System\" attribute.", - "Rallies are a bad idea.", - "The shop refreshes everyday at 00:00 UTC.", - "Some liveries are pretty cool.", - "Some liveries are atrocious, and if you buy them, you are a sociopath. Seek help.", - "Stop spelling \"Quaoar\" incorrectly. It has feelings too.", - "Relocating via an outpost will not stop or reset your peace shield timer.", - "Aircraft in the Aircraft Defense Fleet are invincible and cannot be killed by any means while defending the base.", - "Tech Point Restoration Items can only be bought twice per server. Use them wisely.", - "Solar Whales can hold up to 16 aircraft at a time!", - "In trojite servers, destroying a base will give you half of the base's stored trojite.", - "In trojite servers, having your base destroyed will reset your base's stored trojite to 0.", - "You can let your fleets escape a blockade around your base by deploying them as a subfleet to an outpost/platform somewhere else.", - "If you are located in a Scattered Asteroid Belt, you cannot send super capital ships out, but they will still defend your base.", - "Docking points inside a city will only give their benefits if the city is owned by your community.", - "Learn how to convert UTC to your timezone - it'll help with coordinating with others.", - "You can have multiple player identities linked to the same account!", - "All module data in Module Library is crowdsourced! If you'd like to contribute, reach out to me. Your help is greatly appreciated!" -]; diff --git a/utils/functions.ts b/utils/functions.ts index d4241fd..7206fc5 100644 --- a/utils/functions.ts +++ b/utils/functions.ts @@ -1,75 +1,133 @@ +import type { Op } from "quill"; -export function delay (ms: number) { - return new Promise((executor: any) => setTimeout(executor, ms)); +/** + * @warning Be sure to await this function in order to actually use the delay. + * @param ms - Number of milliseconds to delay. + * @example await delay(1000); // Wait for 1 second + */ +export function delay(ms: number): Promise { + return new Promise((executor: () => void) => setTimeout(executor, ms)); } -export function getRandomIntInclusive (min: number, max: number) { - const minCeiled: number = Math.ceil(min); - const maxFloored: number = Math.floor(max); +/** Returns a random integer between `min` and `max`, inclusive. */ +export function getRandomInt(min: number, max: number) { + const minCeiled = Math.ceil(min); + const maxFloored = Math.floor(max); return Math.floor(Math.random() * (maxFloored - minCeiled + 1) + minCeiled); } -export function getRandomItemFromArray (arr: T[]) { - return arr[getRandomIntInclusive(0, arr.length - 1)]; +/** Returns a random item from an array. */ +export function getRandomItem(array: T[] | string) { + return array[getRandomInt(0, array.length - 1)]; } -export function findObjectInArray > (array: T[], target: T) { - const find = array.find((obj) => Object.keys(obj).every((key) => target.hasOwnProperty(key) && obj[key] === target[key])); - if (find) return find; - else return false; -} - -export function compareObjectsSingle > (obj1: T | undefined, obj2: T | undefined) { - if (!obj1 || !obj2) return; +const dateOptions: Readonly>> = { + full: { dateStyle: "long", timeZone: "UTC" }, + numeric: { dateStyle: "short", timeZone: "UTC" } +}; +/** Returns a date string as a localized date string + * + * If `timeDiff` is true, returns "today," "yesterday," "{n}d ago," or a localized date string + * @param date YYYY-MM-DD + * @param options "full" | "numeric" = "full" + * @param timeDiff boolean = false + */ +export function formatDate(dateString: string, options: "full" | "numeric" = "full", timeDiff = false) { + const formatter = new Intl.DateTimeFormat(undefined, dateOptions[options]); + const date = new Date(dateString); - if (obj1 === obj2) { - return true; - } + const formattedDate = formatter.format(date); + if (!timeDiff) return formattedDate; - if (obj1 == null || obj2 == null || typeof obj1 !== 'object' || typeof obj2 !== 'object') { - return false; - } + const now = new Date(); + const diff = now.getTime() - date.getTime(); + const days = Math.floor(diff / (24 * 60 * 60 * 1000)); - let keys1 = Object.keys(obj1); - let keys2 = Object.keys(obj2); + if (days > 7) return formattedDate; + if (days > 1) return `${days}d ago`; + if (days > 0) return "yesterday"; + return "today"; +} - if (keys1.length !== keys2.length) { - return false; +const characterSets: Readonly> = { + numeric: "0123456789", + alphanumeric: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", + alphabetical: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" +}; +/** + * Returns a random string of characters from the given set with the given length. + * @example getRandomCharacters(10, "numeric"); // Returns a random 10-digit number + * @example getRandomCharacters(10, "alphanumeric"); // Returns a random alphanumeric string of length 10 + * @example getRandomCharacters(10, "alphabetical"); // Returns a random alphabetical string of length 10 + */ +export function getRandomCharacters(length: number, set: keyof typeof characterSets = "alphanumeric") { + let characters = ""; + for (let i = 0; i < length; i++) { + characters += getRandomItem(characterSets[set]); } + return characters; +} - for (let key of keys1) { - if (!keys2.includes(key) || !compareObjectsSingle(obj1[key], obj2[key])) { - return false; +/** + * Transforms an array of `Op` objects into a minified format. + * + * Each `Op` object is mapped to a new object containing: + * - `a.c`: the `color` attribute if it exists. + * - `i`: the `insert` value. + */ +export function truncateOps(ops: Op[]) { + return ops.map((op) => { + const newObj: Record> = {}; + + if (op.attributes?.color) { + newObj.a = {}; + newObj.a.c = op.attributes.color as string; } - } - return true; + newObj.i = op.insert as string; + + return newObj; + }); } -export function objectToArray > (obj: T) { - const entries: [keyof T, T[keyof T]][] = []; +/** + * Restores an array of `TruncatedOp` objects to their original `Op` format. + * + * Each `TruncatedOp` object is mapped to a new `Op` object containing: + * - `attributes.color`: the `a.c` value if it exists. + * - `insert`: the `i` value. + */ +export function untruncateOps(ops: TruncatedOp[]) { + return ops.map((op) => { + const newObj: Op = {}; - for (const key in obj) { - if (obj.hasOwnProperty(key)) { - entries.push([key, obj[key]]); + if (op.a?.c) { + newObj.attributes = {}; + newObj.attributes.color = op.a.c; } - } - return entries; + newObj.insert = op.i; + + return newObj; + }); } -export async function loopUntil (stopCondition: boolean, returnValue: T) { - let done = false; - let failsafe = 0; - while (!done || failsafe < 20) { - if (stopCondition) { - done = true; - console.log(returnValue) - return returnValue; - } else { - await delay(5); - failsafe++; - } - } - return returnValue; +/** + * Returns the key of the first entry in the given object. + * + * @param object the object to get the key from + * @param index the index of the key to return, defaults to 0 + */ +export function getObjectKey(object: T, index = 0) { + return Object.keys(object)[index]; +} + +/** + * Returns the value of the first entry in the given object. + * + * @param object the object to get the value from + * @param index the index of the value to return, defaults to 0 + */ +export function getObjectValue(object: T, index = 0) { + return Object.values(object)[index]; } diff --git a/utils/general.ts b/utils/general.ts new file mode 100644 index 0000000..8b5faa2 --- /dev/null +++ b/utils/general.ts @@ -0,0 +1,12 @@ +export const origins: Readonly> = { + "http://localhost:3000": "L", + "https://beta.gravityassist.xyz": "B", + "https://gravityassist.xyz": "P" +}; + +export function italicize(text: string): [string, boolean][] { + return text.split(/("[^"]*")/g).map((part) => { + if (part.startsWith('"') && part.endsWith('"')) return [part, true]; + return [part, false]; + }); +} diff --git a/utils/mailTemplates.ts b/utils/mailTemplates.ts new file mode 100644 index 0000000..d9c8f38 --- /dev/null +++ b/utils/mailTemplates.ts @@ -0,0 +1,87 @@ +import { Op } from "quill"; + +export const formattingColors = { + R: "#ff0000", + O: "#ffa500", + D: "#ffd700", + Y: "#ffff00", + G: "#00ff00", + B: "#0000ff", + U: "#ff00ff", + P: "#ffc0cb", + W: "#ffffff", + K: "#000000" +}; + +export const mailTemplates: Readonly> = { + "City Siege": [ + { attributes: { color: "#ffffff" }, insert: "Target: " }, + { attributes: { color: "#ffe1ad" }, insert: "Ligma " }, + { attributes: { color: "#278451", underline: true }, insert: "(6969,6969)" }, + { insert: "\n" }, + { attributes: { color: "#ffffff" }, insert: "Time: " }, + { attributes: { color: "#b3e5ff" }, insert: "12:08 " }, + { attributes: { color: "#ffffff" }, insert: "UTC" }, + { insert: "\n" }, + { attributes: { color: "#c7ffd2" }, insert: "Gathering location: " }, + { attributes: { color: "#278451", underline: true }, insert: "(6969,6969)" }, + { insert: "\n" }, + { attributes: { color: "#f8c7ff" }, insert: "Delegates: " }, + { attributes: { color: "#278451", underline: true }, insert: "(6969,6969)" }, + { insert: "\n\n" }, + { attributes: { color: "#ffffff" }, insert: "Send your fleets to the " }, + { attributes: { color: "#c7ffd2" }, insert: "gathering location " }, + { attributes: { color: "#278451", underline: true }, insert: "(6969,6969)" }, + { attributes: { color: "#c7ffd2" }, insert: " " }, + { attributes: { color: "#ffffff" }, insert: "by " }, + { attributes: { color: "#b3e5ff" }, insert: "12:08 " }, + { attributes: { color: "#ffffff" }, insert: "UTC." }, + { insert: "\n" }, + { attributes: { color: "#ffffff" }, insert: "We will do a ready check in chat at " }, + { attributes: { color: "#b3e5ff" }, insert: "12:09 " }, + { attributes: { color: "#ffffff" }, insert: "UTC, and move up to the " }, + { attributes: { color: "#ffff00" }, insert: "yellow markers " }, + { attributes: { color: "#ffffff" }, insert: "at " }, + { attributes: { color: "#b3e5ff" }, insert: "12:10 " }, + { attributes: { color: "#ffffff" }, insert: "UTC." }, + { insert: "\n\n" }, + { attributes: { color: "#ffffff" }, insert: "If you cannot manual, " }, + { attributes: { color: "#f8c7ff" }, insert: "delegate your fleets" }, + { attributes: { color: "#ffffff" }, insert: " to the org op at " }, + { attributes: { color: "#278451", underline: true }, insert: "(6969,6969)" }, + { attributes: { color: "#ffffff" }, insert: "." }, + { insert: "\n" } + ], + '"Visit Begging"': [ + { attributes: { color: "#ffffff" }, insert: "Hey everyone! Great job so far, it looks like we have " }, + { attributes: { color: "#fef162" }, insert: "very few " }, + { attributes: { color: "#ffffff" }, insert: "who have not logged into the server yet." }, + { insert: "\n" }, + { attributes: { color: "#ffffff" }, insert: "Now, " }, + { attributes: { color: "#66e0ff" }, insert: "it's time for visiting!" }, + { insert: "\n\n" }, + { attributes: { color: "#ff6666" }, insert: "Don't" }, + { attributes: { color: "#ffffff" }, insert: " spend your AP on destroying NPCs right now;" }, + { insert: "\n" }, + { attributes: { color: "#ffffff" }, insert: "Spend it " }, + { attributes: { color: "#84fe62" }, insert: "visiting everyone in the community." }, + { insert: "\n\n" }, + { attributes: { color: "#ffffff" }, insert: "You can easily visit using the " }, + { attributes: { color: "#fef162" }, insert: "quick visit" }, + { attributes: { color: "#ffffff" }, insert: " feature:" }, + { insert: "\n" }, + { attributes: { color: "#ffffff" }, insert: "Tap on " }, + { attributes: { color: "#fed7f9" }, insert: "squad" }, + { attributes: { color: "#ffffff" }, insert: " -> " }, + { attributes: { color: "#ff99f1" }, insert: "community" }, + { attributes: { color: "#ffffff" }, insert: " -> " }, + { attributes: { color: "#ff5ce9" }, insert: "view members" }, + { attributes: { color: "#ffffff" }, insert: " -> " }, + { attributes: { color: "#ff00dd" }, insert: "quick visit" }, + { insert: "\n" }, + { attributes: { color: "#ffffff" }, insert: "It'll take the hassle of searching for people off your back." }, + { insert: "\n\n\n" }, + { attributes: { color: "#ffd700" }, insert: "Please do your best to visit so we can unlock vision and warp ASAP!" }, + { insert: "\n" } + ] +}; diff --git a/utils/presetColors.ts b/utils/presetColors.ts deleted file mode 100644 index 3d03039..0000000 --- a/utils/presetColors.ts +++ /dev/null @@ -1,125 +0,0 @@ - -export type Color = { - color1: string; - color2: string; - intensity: number; - compression: number; -} - -export const presetColors: Color[] = [{ - color1: "#e32b2b", - color2: "#ff9b3c", - intensity: 15, - compression: 2 -}, { - color1: "#ff0f00", - color2: "#fff000", - intensity: 15, - compression: 2 -}, { - color1: "#3dcfff", - color2: "#ffbd2c", - intensity: 15, - compression: 2 -}, { - color1: "#85abff", - color2: "#fff47a", - intensity: 15, - compression: 2 -}, { - color1: "#00a1ff", - color2: "#00fe90", - intensity: 15, - compression: 2 -}, { - color1: "#8e2ff7", - color2: "#62debd", - intensity: 15, - compression: 2 -}, { - color1: "#d029fa", - color2: "#23c8f6", - intensity: 15, - compression: 2 -}, { - color1: "#fd81ff", - color2: "#00e092", - intensity: 15, - compression: 2 -}, { - color1: "#f957ff", - color2: "#ffc94d", - intensity: 15, - compression: 2 -}, { - color1: "#ff5b0f", - color2: "#fea881", - intensity: 15, - compression: 2 -}, { - color1: "#ffff00", - color2: "#ffc400", - intensity: 15, - compression: 2 -}, { - color1: "#a9ff38", - color2: "#29ffbf", - intensity: 15, - compression: 2 -}, { - color1: "#6bffff", - color2: "#6babff", - intensity: 15, - compression: 2 -}, { - color1: "#6ea3ff", - color2: "#d15eff", - intensity: 15, - compression: 2 -}, { - color1: "#dc6bff", - color2: "#ff6bd3", - intensity: 15, - compression: 2 -}, { - color1: "#ff0000", - color2: "#ffd1d1", - intensity: 15, - compression: 2 -}, { - color1: "#ffe600", - color2: "#fffad1", - intensity: 15, - compression: 2 -}, { - color1: "#05ff00", - color2: "#d2ffd1", - intensity: 15, - compression: 2 -}, { - color1: "#00b3ff", - color2: "#d1fffc", - intensity: 15, - compression: 2 -}, { - color1: "#eb00ff", - color2: "#fbd1ff", - intensity: 15, - compression: 2 -}, { - color1: "#dc0101", - color2: "#4c1010", - intensity: 15, - compression: 2 -}, { - color1: "#11dee5", - color2: "#ec67cf", - intensity: 15, - compression: 2 -}, { - color1: "#ffcf24", - color2: "#7f243f", - intensity: 15, - compression: 2 -}]; - diff --git a/utils/shipData.ts b/utils/shipData.ts deleted file mode 100644 index 0b76e3c..0000000 --- a/utils/shipData.ts +++ /dev/null @@ -1,500 +0,0 @@ - -export type ShipManufacturer = "Jupiter Industry" | "NOMA Shipping" | "Antonios" | "Dawn Accord" | "Empty"; - -export type ShipDirection = "Outstanding Firepower" | "Sustained Combat" | "Strategy & Support" | "Fighter & Corvette" | "Empty"; - -export type ShipScope = "Direct-Fire Weapon" | "Projectile Weapon" | "Empty"; - -export type Attribute = "Interception Capability" | "Interception Capability (Fleet)" | "Crit" | "Anti-Aircraft Counterattack" | -"Anti-Aircraft Support" | "Anti-Aircraft Special Ammo" | "Anti-Aircraft Lightweight Ammo" | "Anti-Aircraft Cycle" | -"Anti-Aircraft High-Speed Strike" | "Anti-Aircraft Critical Strike" | "Increase Energy Weapon Damage" | "Ship Calibration Support" | -"Reduce System Crit Damage Taken" | "Ship Shielding Support" | "Energy Damage Reduction" | "Physical Damage Reduction" | -"Crit Damage Reduction" | "Increase Hit Rate" | "Additional HP Auto-Repair" | "Reduce Evasion" | "Reduce Hit Rate" | -"Oscillatory Excitation" | "Collaborative Calibration" | "Self-holding Capability" | "Increase Production Speed" | -"Back-Row Torpedo Hit Evasion" | "Back-Row Missile Hit Evasion" | "Increase Back-Row Missile Hit Rate" | -"Increase Back-Row Torpedo Hit Rate" | "Ship Disguise" | "Increase Repair Speed" | "Increase Aircraft Damage" | -"Increase Aircraft Hit Rate" | "Aircraft Recovery" | "Attack Against Systems" | "Firepower Recon Support" | -"UAV Cooperation" | "UAV Aerial Cover Support"; - -export type Aircraft = "Small Fighter" | "Medium Fighter" | "Large Fighter" | "Corvette"; - -export type UAV = "Spotter UAV" | "Area-Denial Anti-Aircraft UAV" | "Shield UAV" | "Repair UAV" | "Tactical UAV" | "Info UAV" | -"Cooperative Offensive UAV" | "Siege UAV" | "Recon UAV"; - -export type Ship = { - /** Name of the ship, as shown ingame. - * @example "Conamara Chaos" - */ - name: string; - - /** Title of the ship, shown next to the name. - * @example "High-Speed Plasma Cruiser" - */ - title: string; - - /** Image of the ship, found in `/public/ships`. - * - * Format: `shipName_variant.png` - * @example "/ships/conamaraChaos_b.png" - */ - img: string; - - /** Class of the ship. */ - type: "Fighter" | "Corvette" | "Frigate" | "Destroyer" | "Cruiser" | "Battlecruiser" | "Auxiliary Ship" | "Carrier" | "Battleship"; - - /** If this ship is a fighter, the type of fighter. */ - fighter_type?: "Small" | "Medium" | "Large"; - - /** Variant of the ship. */ - variant: "A" | "B" | "C" | "D"; - - /** Name of the variant, shown next to the variant letter. - * @example "Plasma Type" - */ - variant_name: string; - - manufacturer: ShipManufacturer; - direction: ShipDirection[]; - scope: ShipScope; - weight: number; - row: "Front" | "Middle" | "Back"; - - /** Command Points. */ - cp: number; - - /** Active Service limit. */ - maxInFleet: number; - - /** If this ship is a fighter, the number of fighters per unit. */ - aircraftPerSquadron?: number; - - /** If this ship is a medium fighter carrier, the number of medium fighters held. */ - medium_fighters_held?: number; - - /** If this ship is a large fighter carrier, the number of large fighters held. */ - large_fighters_held?: number; - - /** If this ship is a corvette carrier, the number of corvettes held. */ - corvettes_held?: number; - - /** Production Info, shown after clicking the button at the top right of the Basic Stats box. */ - production: { - metal: number; - crystal: number; - deuterium: number; - /** Time to produce this ship, in seconds. */ - timeSeconds: number; - storage: number; - } - - /** Only found if this ship is a capital ship or aircraft. */ - systems?: ShipSystemAll[]; - - /** Only found if this ship is a super capital ship. */ - modules?: (Module | UnknownModule)[]; -} - -export type AffectedStats = "damage" | "hp" | "armor" | "energyShield" | "cruise" | "warp" | "aircraftHitrate" | "smallHitrate" | "bigHitrate" | "generalHitrate" | "missileEvasion" | "torpedoEvasion" | "directEvasion" | "generalEvasion" | "siegeDamage"; - -export type SystemUpgrade = { - /** Name of the upgrade. - * @example "Overdrive" - */ - name: string; - - /** Image of the upgrade's icon, found in `/public/weapons/upgrades`. - * - * If upgrade is a strategy, the image is found in `/public/weapons/upgrades/strategies`. - * @example "/weapons/upgrades/genericCooldown.png" - */ - img: string; - - /** Only found if this upgrade is a strategy. */ - strategy?: true; - - /** Description of the upgrade, separated into strings. - * - * - The first string of the array is the first section of the description, up until the first instance of a yellow character. This includes the space before the yellow character. - * - The second string of the array is/are the first yellow character(s). It should not contain any spaces and should only contain the yellow character(s). - * - The third string is the next section of the description, including the space after the previous yellow character(s). - * - And so on. - * - * @example ["Increases damage by ", "40%", " and Hit Rate by ", "25%", "."] - */ - description: string[]; - - /** The maximum number of tiers this upgrade has. */ - maxTiers: number; - - /** - If only one stat is affected by this upgrade, this property should be a string of the stat affected. - * - If more than one stat is affected by this upgrade, this property should be an array of strings of the stats affected. - * @example affectedStat: "damage" - * @example affectedStat: ["damage", "generalHitrate"] - */ - affectedStat: AffectedStats | AffectedStats[] | null; - - /** - If only one stat is affected by this upgrade. this property should be a number of the stat affected. - * - If more than one stat is affected by this upgrade, this property should be an array of numbers of the stats affected. - * - * If `affectedStat === "armor"`, this property should be a flat value. - * @example percentBuffPerTier: 1.02 - * @example percentBuffPerTier: [1.02, 1.15] - * @example affectedStat: "armor"; percentBuffPerTier: 6 - */ - percentBuffPerTier: number | number[] | null; - - /** - If the required number of tech points stays the same throughout all tiers of the upgrade, this property should be that number. - * - If the required number of tech points increases throughout the tiers of the upgrade, this property should be an array of numbers representing the number of tech points for each tier. - * - * The number of tech points for each tier can be inferred; if `maxTiers === 3` and the number of tech points to upgrade all tiers is `5`, the only possible arrangement of tech points is `[1, 2, 2]`. - * @example tpPerTier: 2 - * @example tpPerTier: [1, 1, 1, 1, 2] - */ - tpPerTier: number | number[]; - - /** This property should not be present in the default ship data. - * - * Represents the number of tiers upgraded by the user. - */ - tiersUpgraded?: number; - - /** This property should not be present in the default ship data. - * - * Represents the total number of tech points allocated to this upgrade by the user. - */ - tpAllocated?: number; -} - -export type ShipSystemAll = WeaponSystem | AircraftSystem | ArmorSystem | PropulsionSystem | EnergySystem | CommandSystem | JammingSystem | MiscSystem; - -interface ShipSystem { - /** Name of the system. - * @example "Bow-Mounted Plasma Caster" - */ - name: string; - - /** Only found if this system is the main system. */ - main?: true; - - /** The maximum number of upgrades this system has. */ - maxUpgradeSlots: number; - - /** The type of system adjustment available for this system. */ - systemAdjustment: "weaponDamage" | "hp" | "aircraftDamage" | "uavEffectiveness" | "jamming" | null; - - /** Array of all upgrades located in this system. */ - upgrades: SystemUpgrade[]; - - /** This property should not be present in the default ship data. - * - * Represents the total number of tech points allocated to this system by the user. - */ - tpAllocated?: number; -} - -export interface WeaponSystem extends ShipSystem { - type: "weapon"; - - /** Image of the system's icon, found in `/public/weapons/icons`. - * @example "/weapons/icons/cannon.png" - */ - img: "/weapons/icons/cannon.png"; - - /** Default Anti-Ship Fire value, found after clicking the system. - * - * - If the ship is a figher or corvette, the Anti-Ship Fire value is different if you click the system and if you don't click the system. - * - Use the value found after clicking the system. - * @readonly This property should not be modified. - */ - readonly baseAntiship: number; - - /** Default Air Defense value, found after clicking the system. - * - * - If the ship is a figher or corvette, the Air Defense value is different if you click the system and if you don't click the system. - * - Use the value found after clicking the system. - * @readonly This property should not be modified. - */ - readonly baseAntiair: number; - - /** Default Siege Fire value, found after clicking the system. - * - * - If the ship is a figher or corvette, the Siege Fire value is different if you click the system and if you don't click the system. - * - Use the value found after clicking the system. - * @readonly This property should not be modified. - */ - readonly baseSiege: number; - - /** This property should not be present in the default ship data. - * - * Represents the modified Anti-Ship Fire value, after system upgrades. - */ - modifiedAntiship?: number; - - /** This property should not be present in the default ship data. - * - * Represents the modified Air Defense value, after system upgrades. - */ - modifiedAntiair?: number; - - /** This property should not be present in the default ship data. - * - * Represents the modified Siege Fire value, after system upgrades. - */ - modifiedSiege?: number; -} - -export interface AircraftSystem extends ShipSystem { - type: "aircraft"; - img: "/weapons/icons/aircraft.png"; -} - -export interface ArmorSystem extends ShipSystem { - type: "armor"; - img: "/weapons/icons/armor.png"; - - /** Default HP value. - * @readonly This property should not be modified. - */ - readonly baseHp: number; - - /** Default Armor value. - * @readonly This property should not be modified. - */ - readonly baseArmor: number; - - /** Default Energy Shield value. - * @readonly This property should not be modified. - */ - readonly baseEnergyShield: number; - - /** This property should not be present in the default ship data. - * - * Represents the modified HP value, after system upgrades. - */ - modifiedHp?: number; - - /** This property should not be present in the default ship data. - * - * Represents the modified Armor value, after system upgrades. - */ - modifiedArmor?: number; - - /** This property should not be present in the default ship data. - * - * Represents the modified Energy Shield value, after system upgrades. - */ - modifiedEnergyShield?: number; -} - -export interface PropulsionSystem extends ShipSystem { - type: "propulsion"; - img: "/weapons/icons/speed.png"; - - /** Default Cruise Speed value. - * @readonly This property should not be modified. - */ - readonly baseCruise: number; - - /** Default Warp Speed value. - * @readonly This property should not be modified. - */ - readonly baseWarp: number; - - /** Only found if this system provides an evasion bonus. - * - * Represents the default Evasion value. - * @readonly This property should not be modified. */ - readonly baseEvasion?: number; - - /** This property should not be present in the default ship data. - * - * Represents the modified Crise Speed value, after system upgrades. - */ - modifiedCruise?: number; - - /** This property should not be present in the default ship data. - * - * Represents the modified Warp Speed value, after system upgrades. - */ - modifiedWarp?: number; - - /** This property should not be present in the default ship data. - * - * Represents the modified Evasion value, after system upgrades. - */ - modifiedEvasion?: number; -} - -export interface EnergySystem extends ShipSystem { - type: "energy"; - img: "/weapons/icons/jamming.png"; - - /** Only found if this system provides a damage bonus. - * - * Represents the default damage bonus. - * @example 1.15 - */ - baseDmgBuff?: number; -} - -export interface CommandSystem extends ShipSystem { - type: "command"; - img: "/weapons/icons/command.png"; -} - -export interface JammingSystem extends ShipSystem { - type: "jamming"; - img: "/weapons/icons/jamming.png"; -} - -export interface MiscSystem extends ShipSystem { - type: "misc"; - img: string; - readonly baseEvasion?: number; - modifiedEvasion?: number; -} - -export type Module = { - type: "known"; - img: string; - system: "M1" | "M2" | "M3" | "A1" | "A2" | "A3" | "B1" | "B2" | "B3" | "C1" | "C2" | "C3" | "D1" | "D2" | "D3" | "E1" | "E2" | "F1" | "F2" | "G1" | "G2" | "H1" | "H2"; - name: string; - stats: WeaponStats | ArmorStats | PropulsionStats; - subsystems: (WeaponSubsystem | AircraftHangerSubsystem | UavHangerSubsystem | MiscSubsystem)[]; -} - -export type UnknownModule = { - type: "unknown"; - img: string; - system: "M1" | "M2" | "M3" | "A1" | "A2" | "A3" | "B1" | "B2" | "B3" | "C1" | "C2" | "C3" | "D1" | "D2" | "D3" | "E1" | "E2" | "F1" | "F2" | "G1" | "G2" | "H1" | "H2"; - unknown: true; -} - -export type WeaponStats = { - type: "weapon"; - antiship: null | number; - antiair: null | number; - siege: null | number; - hp: number; -} - -export type ArmorStats = { - type: "armor"; - armor: null | number; - extraHP: null | number; - energyShield: null | number; - hpRecovery?: number; - storage?: number; - hp: number; -} - -export type PropulsionStats = { - type: "propulsion", - cruise: number; - warp: number; - hp: number; -} - -export type WeaponSubsystem = { - type: "weapon"; - count: number; - title: string; - name: string; - damageType: "Projectile" | "Energy"; - target: "Building" | "Aircraft" | "Small Ship" | "Large Ship"; - lockonEfficiency: null | number; - alpha: number; - attributes: null | Attribute[]; -} - -export type AircraftHangerSubsystem = { - type: "hanger"; - count: number; - title: string; - name: string; - hanger: Aircraft; - capacity: number; - attributes: null | Attribute[]; -} - -export type UavHangerSubsystem = { - type: "hanger"; - count: number; - title: string; - name: string; - hanger: UAV; - capacity: number; - attributes: null | Attribute[]; - damageType?: "Projectile" | "Energy"; - target?: "Building" | "Aircraft" | "Small Ship" | "Large Ship"; - lockonEfficiency?: null | number; - alpha?: number; - repair?: number; -} - -export type MiscSubsystem = { - type: "misc"; - count: number; - title: string; - name: string; - attributes: null | Attribute[]; -} - -export const attributes: Record = { - "Interception Capability": "Has a chance to intercept missiles or torpedoes that target friendly ship in the same row", - "Interception Capability (Fleet)": "Has a chance to intercept missiles or torpedoes that target any friendly ships in the fleet", - "Crit": "Has a chance to deal additional Crit damage to the target", - "Anti-Aircraft Counterattack": "When not under attack by aerial targets, it can strike at opposing air targets targetting same-row friendly ships. Can quickly counterattack aerial targets that strike this ship. During the counterattack, increases Hit Rate by an additional amount", - "Anti-Aircraft Support": "Can provide anti-aircraft support to all friendly ships", - "Anti-Aircraft Special Ammo": "Switches to Special Ammo when striking an aircraft target, increasing the Damage Per Hit by an additional amount", - "Anti-Aircraft Lightweight Ammo": "Switches to Lightweight Ammo to trade for mobility when striking an aircraft, reducing the Damage Per hit by an additional amount", - "Anti-Aircraft Cycle": "The weapon's operating efficiency is increased when striking an aircraft target, reducing the CD by an additional amount", - "Anti-Aircraft High-Speed Strike": "Utilizes the High-Speed Strike mode when striking an aircraft target, reducing the duration of the strikes by an additional amount", - "Ship Calibration Support": "Increase the Hit Rate of the target ship by 20%", - - "Anti-Aircraft Critical Strike": "Has a 25% chance to deal an additional 100% Crit Damage to aircraft", - "Increase Energy Weapon Damage": "Increases the damage of the ship's energy weapon by 10%", - "Reduce System Crit Damage Taken": "Reduces Crit Damage taken by all systems by 15%", - "Ship Shielding Support": "Initiate Shielding Support to the target and increase the Evasion of the target ship to energy weapons by 15%", - "Energy Damage Reduction": "Reduces the Damage taken from energy weapon attacks by 15%", - "Physical Damage Reduction": "Reduces the Damage taken from projectile weapon attacks by 15%", - "Crit Damage Reduction": "Reduces Crit Damage received by 30%", - "Increase Hit Rate": "Increases the Hit Rate of all weapons on the ship by 5%", - "Additional HP Auto-Repair": "Automatically repairs the damaged portion of additional HP after each battle", - "Reduce Evasion": "Reduce ship evasion by 10%", - "Reduce Hit Rate": "Reduces the Hit Rate of the primary weapon by 5%", - "Oscillatory Excitation": "Triggers one of the onboard weapons to initiate an extra shot every 6 seconds", - "Collaborative Calibration": "Calibrates the fire control of an onboard weapon once every 15s, increasing the Hit Rate by 30% for 15s", - "Self-holding Capability": "Provides self-held command points for the auxiliary ship", - "Increase Production Speed": "Increases Shipbuilding speed of the auxiliary ship", - "Back-Row Torpedo Hit Evasion": "+8% torpedo evasion to back-row ships in the fleet", - "Back-Row Missile Hit Evasion": "+8% missile evasion to back-row ships in the fleet", - "Increase Back-Row Torpedo Hit Rate": "Raise torpedo weapon Hit Rate of back-row ships in the fleet by 12%", - "Increase Back-Row Missile Hit Rate": "Raise missile weapon Hit Rate of back-row ships in the fleet by 12%", - "Ship Disguise": "When itself is selected as an attack target, it will be mislabeled as a carrier by the enemy", - "Increase Repair Speed": "When using the auxiliary ship to conduct repairs, increases the repair speed by 20%", - "Increase Aircraft Damage": "Increases primary weapon Damage of carried Antonios aircraft by 15%", - "Increase Aircraft Hit Rate": "Increases primary weapon Hit Rate of carried Antonios aircraft by 15%", - "Aircraft Recovery": "Aircraft returning to all hangers recover 10% HP", - "Attack Against Systems": "Has a chance to deal damage to the target's systems (Primary Weapon System: Low efficiency)", - "Firepower Recon Support": "Increases allies' primary weapon's Crit Chance by 30% and Crit Damage by 40%", - "UAV Cooperation": "Each aircraft in the same hanger comes with a UAV. Tthe UAV and the aircraft will attack the same target together.", - "UAV Aerial Cover Support": "Each aircraft in the same hanger comes with a UAV. The UAV provides anti-aircraft support and strikes back at enemy aircraft that attack the supporting aircraft." -} - -export const manufacturers: ShipManufacturer[] = ["Jupiter Industry", "NOMA Shipping", "Antonios", "Dawn Accord", "Empty"]; -export const directions: ShipDirection[] = ["Outstanding Firepower", "Sustained Combat", "Strategy & Support", "Fighter & Corvette", "Empty"]; -export const scopes: ShipScope[] = ["Projectile Weapon", "Direct-Fire Weapon", "Empty"]; - -export const difficulty = { - "Jupiter Industry": 3.5, - "NOMA Shipping": 3.5, - "Antonios": 4, - "Dawn Accord": 2.5, - "Outstanding Firepower": 5.5, - "Sustained Combat": 5, - "Strategy & Support": 5.5, - "Fighter & Corvette": 6, - "Projectile Weapon": 4.5, - "Direct-Fire Weapon": 4 -}; diff --git a/utils/ships.ts b/utils/ships.ts new file mode 100644 index 0000000..7024eef --- /dev/null +++ b/utils/ships.ts @@ -0,0 +1,350 @@ +export type ManufacturerOption = "Jupiter Industry" | "NOMA Shipping" | "Antonios" | "Dawn Accord" | "Empty"; +export type DirectionOption = "Outstanding Firepower" | "Sustained Combat" | "Strategy & Support" | "Fighter & Corvette" | "Empty"; +export type ScopeOption = "Direct-Fire Weapon" | "Projectile Weapon" | "Empty"; + +export const manufacturers: ManufacturerOption[] = ["Jupiter Industry", "Dawn Accord", "Antonios", "NOMA Shipping", "Empty"]; +export const directions: DirectionOption[] = ["Outstanding Firepower", "Sustained Combat", "Strategy & Support", "Fighter & Corvette", "Empty"]; +export const scopes: ScopeOption[] = ["Projectile Weapon", "Direct-Fire Weapon", "Empty"]; + +export interface Ship { + id: number; + /** Name of the ship, as shown ingame. + * @example "Conamara Chaos" + */ + name: string; + /** Title of the ship, shown next to the name. + * @example "High-Speed Plasma Cruiser" + */ + title: string; + /** Image of the ship, found in `/public/ships`. + * + * Format: `shipName_variant.png` + * @example "/ships/conamaraChaos_b.png" + */ + img: string; + variant: "A" | "B" | "C" | "D"; + /** Name of the variant, shown next to the variant letter. + * @example "Plasma Type" + */ + variantName: string; + /** Whether or not the ship has other variants. */ + hasVariants: boolean; + manufacturer: ManufacturerOption; + direction: DirectionOption[]; + scope: ScopeOption; + /** Weight of the ship's draw probability */ + weight: number; + row: "Front" | "Middle" | "Back"; + commandPoints: number; + serviceLimit: number; +} + +export interface Fighter extends Ship { + type: "Fighter"; + fighterType: "Small" | "Medium" | "Large"; + /** Number of fighters per unit. */ + fightersPerSquadron: number; +} + +export interface Corvette extends Ship { + type: "Corvette"; +} + +export interface CapitalShip extends Ship { + type: "Frigate" | "Destroyer" | "Cruiser"; +} + +export interface MediumFighterCapitalShip extends CapitalShip { + /** Number of medium fighters held. */ + mediumFighterCapacity: number; +} + +export interface LargeFighterCapitalShip extends CapitalShip { + /** Number of large fighters held. */ + largeFighterCapacity: number; +} + +export interface CorvetteCapitalShip extends CapitalShip { + /** Number of corvettes held. */ + corvetteCapacity: number; +} + +export const attributes = { + "Interception Capability": "Has a chance to intercept missiles or torpedoes that target friendly ship in the same row", + "Interception Capability (Fleet)": "Has a chance to intercept missiles or torpedoes that target any friendly ships in the fleet", + Crit: "Has a chance to deal additional Crit damage to the target", + "Anti-Aircraft Counterattack": + "When not under attack by aerial targets, it can strike at opposing air targets targetting same-row friendly ships. Can quickly counterattack aerial targets that strike this ship. During the counterattack, increases Hit Rate by an additional amount", + "Anti-Aircraft Support": "Can provide anti-aircraft support to all friendly ships", + "Anti-Aircraft Special Ammo": "Switches to Special Ammo when striking an aircraft target, increasing the Damage Per Hit by an additional amount", + "Anti-Aircraft Lightweight Ammo": "Switches to Lightweight Ammo to trade for mobility when striking an aircraft, reducing the Damage Per hit by an additional amount", + "Anti-Aircraft Cycle": "The weapon's operating efficiency is increased when striking an aircraft target, reducing the CD by an additional amount", + "Anti-Aircraft High-Speed Strike": "Utilizes the High-Speed Strike mode when striking an aircraft target, reducing the duration of the strikes by an additional amount", + "Ship Calibration Support": "Increase the Hit Rate of the target ship by 20%", + + "Anti-Aircraft Critical Strike": "Has a 25% chance to deal an additional 100% Crit Damage to aircraft", + "Increase Energy Weapon Damage": "Increases the damage of the ship's energy weapon by 10%", + "Reduce System Crit Damage Taken": "Reduces Crit Damage taken by all systems by 15%", + "Ship Shielding Support": "Initiate Shielding Support to the target and increase the Evasion of the target ship to energy weapons by 15%", + "Energy Damage Reduction": "Reduces the Damage taken from energy weapon attacks by 15%", + "Damage Resistance": "During the duration of the module operation, initiate Calibration Support to the target, redirecting some aircraft firepower from the locked target ship toward itself", + "Damage Resistance II": + "During the duration of the module operation, initiate Calibration Support to the target, redirecting some missile/torpedo firepower from the locked target ship toward itself", + "Evasive Counterattack": "When attacked, there is a chance to deal an additional counterattack on the target", + "Physical Damage Reduction": "Reduces the Damage taken from projectile weapon attacks by 15%", + "Crit Damage Reduction": "Reduces Crit Damage received by 30%", + "Increase Hit Rate": "Increases the Hit Rate of all weapons on the ship by 5%", + "Increase Ion Damage": "Increases the damage of the ship's ion weapon by 25%", + "Additional HP Auto-Repair": "Automatically repairs the damaged portion of additional HP after each battle", + "Reduce Evasion": "Reduce ship evasion by 10%", + "Reduce Hit Rate": "Reduces the Hit Rate of the primary weapon by 5%", + "Oscillatory Excitation": "Triggers one of the onboard weapons to initiate an extra shot every 6 seconds", + "Collaborative Calibration": "Calibrates the fire control of an onboard weapon once every 15s, increasing the Hit Rate by 30% for 15s", + "Self-holding Capability": "Provides self-held command points for the auxiliary ship", + "Increase Production Speed": "Increases Shipbuilding speed of the auxiliary ship", + "Back-Row Torpedo Hit Evasion": "+8% torpedo evasion to back-row ships in the fleet", + "Back-Row Missile Hit Evasion": "+8% missile evasion to back-row ships in the fleet", + "Increase Back-Row Torpedo Hit Rate": "Raise torpedo weapon Hit Rate of back-row ships in the fleet by 12%", + "Increase Back-Row Missile Hit Rate": "Raise missile weapon Hit Rate of back-row ships in the fleet by 12%", + "Ship Disguise": "When itself is selected as an attack target, it will be mislabeled as a carrier by the enemy", + "Increase Repair Speed": "When using the auxiliary ship to conduct repairs, increases the repair speed by 20%", + "Increase Aircraft Damage": "Increases primary weapon Damage of carried Antonios aircraft by 15%", + "Increase Aircraft Hit Rate": "Increases primary weapon Hit Rate of carried Antonios aircraft by 15%", + "Aircraft Recovery": "Aircraft returning to all hangers recover 10% HP", + "Attack Against Systems": "Has a chance to deal damage to the target's systems (Primary Weapon System: Low efficiency)", + "Firepower Recon Support": "Increases allies' primary weapon's Crit Chance by 30% and Crit Damage by 40%", + "UAV Cooperation": "Each aircraft in the same hanger comes with a UAV. Tthe UAV and the aircraft will attack the same target together.", + "UAV Aerial Cover Support": "Each aircraft in the same hanger comes with a UAV. The UAV provides anti-aircraft support and strikes back at enemy aircraft that attack the supporting aircraft." +}; + +interface Subsystem { + count: number; + title: string; + name: string; + attributes: (keyof typeof attributes)[] | null; +} + +interface SubsystemStats { + targetPriority: { + antiship?: { + /** If antiship appears above antiair, position = 0 + * + * If antiship appears below antiair, position = 1 + */ + position: number; + /** Antiship target priority represented as [order, type] + * @example "01 Corvette" = [1, "Corvette"] + * @example "02 Cruiser" = [2, "Cruiser"] + */ + priorities: [number, "Frigate" | "Destroyer" | "Cruiser" | "Battlecruiser" | "Auxiliary Ship" | "Carrier" | "Battleship"][]; + damage: number; + }; + antiair?: { + /** If antiship appears above antiair, position = 0 + * + * If antiship appears below antiair, position = 1 + */ + position: number; + /** Antiship target priority represented as [order, type] + * @example "01 Corvette" = [1, "Corvette"] + * @example "02 Cruiser" = [2, "Cruiser"] + */ + priorities: [number, "Fighter" | "Corvette" | "Landing Ship"][]; + damage: number; + }; + siege?: { + /** If antiship appears above antiair, position = 0 + * + * If antiship appears below antiair, position = 1 + */ + position: number; + damage: number; + }; + }; + /** Cooldown in seconds */ + cooldown: number; + /** Lock-on time in seconds */ + lockOnTime: number; +} + +interface ProjectileSubsystemStats extends SubsystemStats { + /** Attacks per round (A x B) represented as [A, B] + * @example "2 x 1" = [2, 1] + */ + attacksPerRound: [number, number]; + /** Duration in seconds */ + duration?: number; +} + +interface EnergySubsystemStats extends SubsystemStats { + /** Duration in seconds */ + duration: number; + damageFrequency: number; +} + +interface UavSubsystemStats { + /** Target priority represented as [order, type] + * @example "01 Corvette" = [1, "Corvette"] + * @example "02 Cruiser" = [2, "Cruiser"] + */ + targetPriority: [number, "Fighter" | "Corvette" | "Frigate" | "Destroyer" | "Cruiser" | "Battlecruiser" | "Auxiliary Ship" | "Carrier" | "Battleship"][]; + /** Duration in seconds */ + duration: number; + /** Cooldown in seconds */ + cooldown: number; + /** Lock-on time in seconds */ + lockOnTime: number; + /** Operation count (A x B) represented as [A, B] + * @example "2 x 1" = [2, 1] + */ + operationCount: [number, number]; +} + +export interface WeaponSubsystem extends Subsystem { + type: "weapon"; + damageType: "Projectile" | "Energy"; + target: "Building" | "Aircraft" | "Small Ship" | "Large Ship"; + /** Percentage represented as a number between 0 and 100 */ + lockonEfficiency: number | null; + /** Alpha damage (damage per hit) */ + alpha: number; + stats: ProjectileSubsystemStats | EnergySubsystemStats; +} + +export interface AircraftSubsystem extends Subsystem { + type: "hanger"; + hanger: "Small Fighter" | "Medium Fighter" | "Large Fighter" | "Corvette"; + capacity: number; +} + +export interface MiscSubsytem extends Subsystem { + type: "misc"; +} + +interface UAVSubsystem extends Subsystem { + type: "hanger"; + capacity: number; +} + +export interface AttackUAVSubsystem extends UAVSubsystem { + hanger: "Area-Denial Anti-Aircraft UAV" | "Cooperative Offensive UAV" | "Tactical UAV" | "Siege UAV" | "Military UAV" | "Guard UAV"; + damageType: "Projectile" | "Energy"; + target: "Building" | "Aircraft" | "Small Ship" | "Large Ship"; + /** Percentage represented as a number between 0 and 100 */ + lockonEfficiency: number | null; + /** Alpha damage (damage per hit) */ + alpha: number; + stats: ProjectileSubsystemStats | EnergySubsystemStats; +} + +export interface RepairUAVSubsystem extends UAVSubsystem { + hanger: "Repair UAV"; + repair: number; +} + +export interface MiscUAVSubsystem extends UAVSubsystem { + hanger: "Spotter UAV" | "Shield UAV" | "Info UAV" | "Recon UAV"; + stats: UavSubsystemStats; +} + +export type ModuleSystemName = "M1" | "M2" | "M3" | "A1" | "A2" | "A3" | "B1" | "B2" | "B3" | "C1" | "C2" | "C3" | "D1" | "D2" | "D3" | "E1" | "E2" | "F1" | "F2" | "G1" | "G2" | "H1" | "H2"; + +interface Module { + /** Image of the weapon type, found in `/public/weapons/icons`. */ + img: string; + system: ModuleSystemName; + /** Whether or not the module comes with the ship */ + default?: boolean; +} + +interface KnownModule extends Module { + type: "known"; + /** Array of names of people this module's stats were sourced from */ + sourcedFrom: string[] | null; +} + +export interface UnknownModule extends Module { + type: "unknown"; + unknown: true; +} + +export interface WeaponModule extends KnownModule { + name: string; + stats: { + type: "weapon"; + antiship: number | null; + antiair: number | null; + siege: number | null; + hp: number; + }; + subsystems: (WeaponSubsystem | AircraftSubsystem | AttackUAVSubsystem)[]; +} + +export interface PropulsionModule extends KnownModule { + name: string; + stats: { + type: "propulsion"; + cruise: number | null; + warp: number | null; + hp: number; + }; + subsystems: MiscSubsytem[]; +} + +export interface MiscModule extends KnownModule { + name: string; + stats: { + type: "armor"; + armor: number | null; + extraHP: number | null; + /** Percentage represented as a number between 0 and 100 */ + energyShield: number | null; + hpRecovery?: number; + storage?: number; + hp: number; + }; + subsystems: (MiscSubsytem | RepairUAVSubsystem | MiscUAVSubsystem)[]; +} + +export type AllModule = UnknownModule | WeaponModule | PropulsionModule | MiscModule; + +export interface SuperCapitalShip extends Ship { + type: "Battlecruiser" | "Auxiliary Ship" | "Carrier" | "Battleship"; + modules: AllModule[]; +} + +export type AllShip = Fighter | Corvette | CapitalShip | MediumFighterCapitalShip | LargeFighterCapitalShip | CorvetteCapitalShip | SuperCapitalShip; + +export function findShip(ships: AllShip[] | undefined, ship: AllShip | undefined, name?: string, variant?: string) { + if (ship) return ships?.find((s) => s.name.toLowerCase() === ship.name.toLowerCase() && s.variant.toLowerCase() === ship.variant.toLowerCase()); + return ships?.find((s) => s.name.toLowerCase() === name?.toLowerCase() && s.variant.toLowerCase() === variant?.toLowerCase()); +} + +export function findBestDirection(data: AllShip[], ship: AllShip) { + if (ship.direction.length === 1) { + return ship.direction[0]; + } + + let bestDirection: DirectionOption = "Empty"; + const allChances: number[] = []; + + for (const direction of ship.direction) { + const simulatedPath = data.filter((shipObj) => { + const manufacturerCheck = ship.manufacturer === "Empty" || shipObj.manufacturer === ship.manufacturer; + const directionCheck = direction === "Empty" || shipObj.direction.includes(direction); + const scopeCheck = ship.scope === "Empty" || shipObj.scope === ship.scope; + + return manufacturerCheck && directionCheck && scopeCheck; + }); + + const chance = (ship.weight / simulatedPath.reduce((acc, item) => acc + item.weight, 0)) * 100; + allChances.push(chance); + } + + bestDirection = ship.direction[allChances.indexOf(Math.max(...allChances))]; + return bestDirection; +} + +export function shipNameToImage(name: string) { + return name.toLowerCase().replaceAll("-", "").replaceAll("'", "").replaceAll(".", "").split(" ").join("_"); +} diff --git a/utils/types.ts b/utils/types.ts new file mode 100644 index 0000000..8451513 --- /dev/null +++ b/utils/types.ts @@ -0,0 +1,66 @@ +import type { Op } from "quill"; + +export type SaveTemplate = { + id: string; + name: string; + ops: Op[]; + /** YYYY-MM-DD */ + lastSaved: string; + /** YYYY-MM-DD */ + createdAt: string; +}; + +export type UserData = { + uid: string; + accessToken: string; + /** YYYY-MM-DD */ + createdAt: string; + /** YYYY-MM-DD */ + lastLoggedIn: string; + savedMails: SaveTemplate[]; + blueprints: Record[]>[]; + /** YYYY-MM-DD */ + bpLastSaved: string | null; + origin: string; +}; + +export type MinifiedSaveTemplate = { + id: string; + name: string; + ops: { + a?: { c: string }; + i: string; + }[]; + /** YYYY-MM-DD */ + lastSaved: string; + /** YYYY-MM-DD */ + createdAt: string; +}; + +export type MinifiedUserData = { + uid: string; + accessToken: string; + /** YYYY-MM-DD */ + createdAt: string; + /** YYYY-MM-DD */ + lastLoggedIn: string; + savedMails: MinifiedSaveTemplate[]; + blueprints: Record[]>[]; + /** YYYY-MM-DD */ + bpLastSaved: string | null; +}; + +export type Alert = { + id: string; + /** Whether to show the alert or not */ + show: boolean; + tag: string; + description: string; + /** YYYY-MM-DD */ + date: string; +}; + +export type TruncatedOp = { + a?: { c: string }; + i: string; +}; diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..0aba0ee --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,7 @@ +import { defineVitestConfig } from "@nuxt/test-utils/config"; + +export default defineVitestConfig({ + test: { + environment: "nuxt" + } +}); \ No newline at end of file