diff --git a/'.turbo'/0887dd989cb0df92-meta.json b/'.turbo'/0887dd989cb0df92-meta.json deleted file mode 100644 index 0abb21ba7..000000000 --- a/'.turbo'/0887dd989cb0df92-meta.json +++ /dev/null @@ -1 +0,0 @@ -{"hash":"0887dd989cb0df92","duration":43270} \ No newline at end of file diff --git a/'.turbo'/0887dd989cb0df92.tar.zst b/'.turbo'/0887dd989cb0df92.tar.zst deleted file mode 100644 index 876d1d00f..000000000 Binary files a/'.turbo'/0887dd989cb0df92.tar.zst and /dev/null differ diff --git a/'.turbo'/560fb9e86b65f150-meta.json b/'.turbo'/560fb9e86b65f150-meta.json deleted file mode 100644 index ccc17f6be..000000000 --- a/'.turbo'/560fb9e86b65f150-meta.json +++ /dev/null @@ -1 +0,0 @@ -{"hash":"560fb9e86b65f150","duration":45208} \ No newline at end of file diff --git a/'.turbo'/560fb9e86b65f150.tar.zst b/'.turbo'/560fb9e86b65f150.tar.zst deleted file mode 100644 index a5ff44234..000000000 Binary files a/'.turbo'/560fb9e86b65f150.tar.zst and /dev/null differ diff --git a/'.turbo'/5de5b3be5565a1d4-meta.json b/'.turbo'/5de5b3be5565a1d4-meta.json deleted file mode 100644 index e0932d865..000000000 --- a/'.turbo'/5de5b3be5565a1d4-meta.json +++ /dev/null @@ -1 +0,0 @@ -{"hash":"5de5b3be5565a1d4","duration":44301} \ No newline at end of file diff --git a/'.turbo'/5de5b3be5565a1d4.tar.zst b/'.turbo'/5de5b3be5565a1d4.tar.zst deleted file mode 100644 index a477f4935..000000000 Binary files a/'.turbo'/5de5b3be5565a1d4.tar.zst and /dev/null differ diff --git a/'.turbo'/6df68d36259bce9e-meta.json b/'.turbo'/6df68d36259bce9e-meta.json deleted file mode 100644 index 97a76401a..000000000 --- a/'.turbo'/6df68d36259bce9e-meta.json +++ /dev/null @@ -1 +0,0 @@ -{"hash":"6df68d36259bce9e","duration":48636} \ No newline at end of file diff --git a/'.turbo'/6df68d36259bce9e.tar.zst b/'.turbo'/6df68d36259bce9e.tar.zst deleted file mode 100644 index 32203c1ef..000000000 Binary files a/'.turbo'/6df68d36259bce9e.tar.zst and /dev/null differ diff --git a/'.turbo'/6e55f2172ff48f6f-meta.json b/'.turbo'/6e55f2172ff48f6f-meta.json deleted file mode 100644 index b848bb68f..000000000 --- a/'.turbo'/6e55f2172ff48f6f-meta.json +++ /dev/null @@ -1 +0,0 @@ -{"hash":"6e55f2172ff48f6f","duration":53816} \ No newline at end of file diff --git a/'.turbo'/6e55f2172ff48f6f.tar.zst b/'.turbo'/6e55f2172ff48f6f.tar.zst deleted file mode 100644 index 590e9fc5d..000000000 Binary files a/'.turbo'/6e55f2172ff48f6f.tar.zst and /dev/null differ diff --git a/'.turbo'/87c54e168150e584-meta.json b/'.turbo'/87c54e168150e584-meta.json deleted file mode 100644 index 6cc9d4cf6..000000000 --- a/'.turbo'/87c54e168150e584-meta.json +++ /dev/null @@ -1 +0,0 @@ -{"hash":"87c54e168150e584","duration":45136} \ No newline at end of file diff --git a/'.turbo'/87c54e168150e584.tar.zst b/'.turbo'/87c54e168150e584.tar.zst deleted file mode 100644 index 28045f0a7..000000000 Binary files a/'.turbo'/87c54e168150e584.tar.zst and /dev/null differ diff --git a/'.turbo'/8ec1ba9b0fa0ad92-meta.json b/'.turbo'/8ec1ba9b0fa0ad92-meta.json deleted file mode 100644 index 49e6c00cc..000000000 --- a/'.turbo'/8ec1ba9b0fa0ad92-meta.json +++ /dev/null @@ -1 +0,0 @@ -{"hash":"8ec1ba9b0fa0ad92","duration":47460} \ No newline at end of file diff --git a/'.turbo'/8ec1ba9b0fa0ad92.tar.zst b/'.turbo'/8ec1ba9b0fa0ad92.tar.zst deleted file mode 100644 index 17aa4fdbb..000000000 Binary files a/'.turbo'/8ec1ba9b0fa0ad92.tar.zst and /dev/null differ diff --git a/'.turbo'/928fdb17552f72c8-meta.json b/'.turbo'/928fdb17552f72c8-meta.json deleted file mode 100644 index e916ab45c..000000000 --- a/'.turbo'/928fdb17552f72c8-meta.json +++ /dev/null @@ -1 +0,0 @@ -{"hash":"928fdb17552f72c8","duration":53821} \ No newline at end of file diff --git a/'.turbo'/928fdb17552f72c8.tar.zst b/'.turbo'/928fdb17552f72c8.tar.zst deleted file mode 100644 index b40d6d9ff..000000000 Binary files a/'.turbo'/928fdb17552f72c8.tar.zst and /dev/null differ diff --git a/'.turbo'/bf4fc849fd54c438-meta.json b/'.turbo'/bf4fc849fd54c438-meta.json deleted file mode 100644 index fd33a9efb..000000000 --- a/'.turbo'/bf4fc849fd54c438-meta.json +++ /dev/null @@ -1 +0,0 @@ -{"hash":"bf4fc849fd54c438","duration":54932} \ No newline at end of file diff --git a/'.turbo'/bf4fc849fd54c438.tar.zst b/'.turbo'/bf4fc849fd54c438.tar.zst deleted file mode 100644 index db99be3dd..000000000 Binary files a/'.turbo'/bf4fc849fd54c438.tar.zst and /dev/null differ diff --git a/'.turbo'/c1c2543d8c410791-meta.json b/'.turbo'/c1c2543d8c410791-meta.json deleted file mode 100644 index fde63cd1e..000000000 --- a/'.turbo'/c1c2543d8c410791-meta.json +++ /dev/null @@ -1 +0,0 @@ -{"hash":"c1c2543d8c410791","duration":56038} \ No newline at end of file diff --git a/'.turbo'/c1c2543d8c410791.tar.zst b/'.turbo'/c1c2543d8c410791.tar.zst deleted file mode 100644 index e9773a717..000000000 Binary files a/'.turbo'/c1c2543d8c410791.tar.zst and /dev/null differ diff --git a/'.turbo'/c57e3a1fe2240051-meta.json b/'.turbo'/c57e3a1fe2240051-meta.json deleted file mode 100644 index 18ebb690d..000000000 --- a/'.turbo'/c57e3a1fe2240051-meta.json +++ /dev/null @@ -1 +0,0 @@ -{"hash":"c57e3a1fe2240051","duration":8425} \ No newline at end of file diff --git a/'.turbo'/c57e3a1fe2240051.tar.zst b/'.turbo'/c57e3a1fe2240051.tar.zst deleted file mode 100644 index ca2c63d65..000000000 Binary files a/'.turbo'/c57e3a1fe2240051.tar.zst and /dev/null differ diff --git a/'.turbo'/dda3b3af35eb510f-meta.json b/'.turbo'/dda3b3af35eb510f-meta.json deleted file mode 100644 index f9869f7fe..000000000 --- a/'.turbo'/dda3b3af35eb510f-meta.json +++ /dev/null @@ -1 +0,0 @@ -{"hash":"dda3b3af35eb510f","duration":10523} \ No newline at end of file diff --git a/'.turbo'/dda3b3af35eb510f.tar.zst b/'.turbo'/dda3b3af35eb510f.tar.zst deleted file mode 100644 index f6ca565c0..000000000 Binary files a/'.turbo'/dda3b3af35eb510f.tar.zst and /dev/null differ diff --git a/'.turbo'/eb9eb96f6e1ed9be-meta.json b/'.turbo'/eb9eb96f6e1ed9be-meta.json deleted file mode 100644 index dd4925314..000000000 --- a/'.turbo'/eb9eb96f6e1ed9be-meta.json +++ /dev/null @@ -1 +0,0 @@ -{"hash":"eb9eb96f6e1ed9be","duration":12686} \ No newline at end of file diff --git a/'.turbo'/eb9eb96f6e1ed9be.tar.zst b/'.turbo'/eb9eb96f6e1ed9be.tar.zst deleted file mode 100644 index d355dec8a..000000000 Binary files a/'.turbo'/eb9eb96f6e1ed9be.tar.zst and /dev/null differ diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile deleted file mode 100644 index 5efd057af..000000000 --- a/.devcontainer/Dockerfile +++ /dev/null @@ -1,8 +0,0 @@ -FROM mcr.microsoft.com/vscode/devcontainers/typescript-node:1-16 - -# Install additional OS packages -RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ - && apt-get -y install --no-install-recommends fontconfig redis-server - -# Install NPM packages -RUN su node -c "npm install -g pm2 git-cz pnpm" \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index 7970c288a..000000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "Statsify", - "build": { - "dockerfile": "Dockerfile" - }, - "customizations": { - "vscode": { - "extensions": [ - "dbaeumer.vscode-eslint", - "esbenp.prettier-vscode", - "vivaxy.vscode-conventional-commits", - "mikestead.dotenv", - "ms-azuretools.vscode-docker", - "lokalise.i18n-ally", - "gruntfuggly.todo-tree" - ] - } - }, - "runArgs": [ - "--privileged" - ], - "containerEnv": { - "USE_POLLING": "true" - }, - "remoteUser": "node", - "postCreateCommand": "git submodule update --init && pnpm install && pnpm run build", - "postStartCommand": "sudo /etc/init.d/redis-server start && git config core.autocrlf true && pnpm scripts api-key --nonInteractiveKeyCreation", - "features": { - "ghcr.io/devcontainers/features/git:1": {}, - "ghcr.io/devcontainers/features/github-cli:1": {} - } -} \ No newline at end of file diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index c87483316..749e96246 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -6,7 +6,7 @@ ## Guidelines ### General Concepts -* Code should follow our ESLint rules as closely as possible (`pnpm lint`) +* Code should follow our linting rules as closely as possible (`pnpm lint`) * Code should attempt to be TypeScript type safe * Code should attempt to be consistent, fast, scalable, and efficient diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fc4411879..e78a738b6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,7 +2,7 @@ name: CI on: push: branches: - - main + - main pull_request: permissions: @@ -14,26 +14,31 @@ jobs: name: CI runs-on: ubuntu-latest env: - TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} - TURBO_TEAM: ${{ secrets.TURBO_TEAM }} + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: ${{ secrets.TURBO_TEAM }} + TURBO_SCM_BASE: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || github.event.before }} + TURBO_TELEMETRY_DISABLED: 1 steps: - name: Checkout repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + fetch-depth: 0 + filter: blob:none - name: Setup pnpm uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4 - - name: Install node.js v22 + - name: Install node.js v24 uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 with: - node-version: 22.6.0 + node-version: 24.7.0 - name: Install wasm-pack run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh - name: Turbo cache id: turbo-cache - uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 with: path: .turbo key: turbo-${{ github.job }}-${{ github.ref_name }}-${{ github.sha }} @@ -41,16 +46,16 @@ jobs: turbo-${{ github.job }}-${{ github.ref_name }}- - name: Install dependencies - run: pnpm install + run: pnpm install --frozen-lockfile - name: Lint - run: pnpm lint + run: pnpm lint:ci --affected - name: Typecheck - run: pnpm test:types + run: pnpm typecheck --affected - name: Build run: pnpm build - name: Test - run: pnpm test:coverage \ No newline at end of file + run: pnpm test:coverage --changed=$TURBO_SCM_BASE diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index cce68dd2b..5f1c46b50 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -16,7 +16,7 @@ jobs: environment: production steps: - name: Checkout repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 with: token: ${{ secrets.REPO_PAT }} submodules: recursive diff --git a/.gitignore b/.gitignore index 9c83ea758..d9bad3af3 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ config.json dist node_modules .turbo +'.turbo' package-lock.json out .yarn/install-state.gz @@ -14,6 +15,8 @@ out *.tar.gz *.7z *.rar +.DS_Store +**/.DS_Store .swc .next . @@ -24,6 +27,5 @@ apps/support-bot/commands.json Cargo.lock /target /data -compose.dev.yml *.node .env diff --git a/.oxfmtrc.jsonc b/.oxfmtrc.jsonc new file mode 100644 index 000000000..bc1ae6358 --- /dev/null +++ b/.oxfmtrc.jsonc @@ -0,0 +1,4 @@ +{ + "$schema": "./node_modules/oxfmt/configuration_schema.json", + "printWidth": 80, +} diff --git a/.oxlintrc.jsonc b/.oxlintrc.jsonc new file mode 100644 index 000000000..dfbc9d08c --- /dev/null +++ b/.oxlintrc.jsonc @@ -0,0 +1,183 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": [ + "eslint", + "typescript", + "unicorn", + "oxc", + "import", + "node", + "promise", + "vitest", + ], + "jsPlugins": [ + { "name": "license-header", "specifier": "eslint-plugin-license-header" }, + ], + "rules": { + // Oxc + "oxc/no-this-in-exported-function": "error", + "oxc/misrefactored-assign-op": "error", + "oxc/approx-constant": "error", + "oxc/no-accumulating-spread": "error", + "oxc/branches-sharing-code": "error", + + // Type Aware Rules + "typescript/no-unnecessary-boolean-literal-compare": "error", + "typescript/no-unnecessary-template-expression": "error", + "typescript/no-unnecessary-type-arguments": "error", + "typescript/no-unnecessary-type-conversion": "error", + "typescript/no-unnecessary-type-assertion": "error", + "typescript/non-nullable-type-assertion-style": "error", + "typescript/prefer-optional-chain": "error", + "typescript/no-unnecessary-condition": "error", + "typescript/no-confusing-void-expression": "error", + "typescript/no-deprecated": "error", + "typescript/no-misused-promises": "error", + "typescript/only-throw-error": "error", + "typescript/prefer-includes": "error", + "typescript/prefer-nullish-coalescing": "error", + "typescript/prefer-promise-reject-errors": "error", + "typescript/related-getter-setter-pairs": "error", + "typescript/require-await": "error", + "typescript/restrict-plus-operands": "error", + "typescript/switch-exhaustiveness-check": "error", + + "typescript/no-unnecessary-type-constraint": "error", + "typescript/no-extraneous-class": ["error", { "allowWithDecorator": true }], + "typescript/no-confusing-non-null-assertion": "error", + "typescript/no-non-null-asserted-nullish-coalescing": "error", + "typescript/no-import-type-side-effects": "error", + "typescript/no-empty-object-type": "error", + "typescript/no-dynamic-delete": "error", + "typescript/ban-ts-comment": [ + "error", + { + "ts-expect-error": "allow-with-description", + "ts-ignore": true, + "ts-nocheck": true, + "ts-check": true, + "minimumDescriptionLength": 3, + }, + ], + "typescript/no-unsafe-function-type": "error", + + // Eslint + "no-unneeded-ternary": "error", + "no-unmodified-loop-condition": "error", + "no-unexpected-multiline": "error", + "no-underscore-dangle": "error", + "no-extra-bind": "error", + "no-extend-native": "error", + "no-var": "error", + "no-proto": "error", + "no-param-reassign": "warn", + "no-empty": "error", + "no-useless-call": "error", + "no-await-in-loop": "error", + "no-useless-assignment": "error", + "no-array-constructor": "error", + "no-case-declarations": "error", + "no-constructor-return": "error", + "no-else-return": "error", + "no-fallthrough": "error", + "no-lonely-if": "error", + "no-promise-executor-return": "error", + "no-prototype-builtins": "error", + "no-useless-return": "error", + "no-warning-comments": "warn", + "no-unused-vars": [ + "error", + { "fix": { "imports": "safe-fix", "variables": "safe-fix" } }, + ], + "eqeqeq": "error", + "class-methods-use-this": "warn", + "symbol-description": "error", + + // Unicorn + "unicorn/prefer-add-event-listener": "error", + "unicorn/no-instanceof-builtins": "error", + "unicorn/no-accessor-recursion": "error", + "unicorn/consistent-function-scoping": "error", + "unicorn/prefer-number-properties": "error", + "unicorn/prefer-node-protocol": "error", + "unicorn/prefer-modern-math-apis": "error", + "unicorn/no-useless-error-capture-stack-trace": "error", + "unicorn/no-magic-array-flat-depth": "error", + "unicorn/no-unnecessary-slice-end": "error", + "unicorn/no-array-for-each": "error", + "unicorn/no-anonymous-default-export": "error", + "unicorn/no-abusive-eslint-disable": "error", + "unicorn/prefer-array-flat-map": "error", + "unicorn/prefer-array-find": "error", + "unicorn/no-useless-iterator-to-array": "error", + "unicorn/consistent-assert": "error", + "unicorn/consistent-empty-array-spread": "error", + "unicorn/explicit-length-check": "error", + "unicorn/new-for-builtins": "error", + "unicorn/no-hex-escape": "error", + "unicorn/no-immediate-mutation": "error", + "unicorn/no-lonely-if": "error", + "unicorn/no-negation-in-equality-check": "error", + "unicorn/no-new-buffer": "error", + "unicorn/no-object-as-default-parameter": "error", + "unicorn/no-typeof-undefined": "error", + "unicorn/no-unnecessary-array-splice-count": "error", + "unicorn/no-unreadable-iife": "error", + "unicorn/no-useless-promise-resolve-reject": "error", + "unicorn/prefer-array-flat": "error", + "unicorn/prefer-array-some": "error", + "unicorn/prefer-blob-reading-methods": "error", + "unicorn/prefer-code-point": "error", + "unicorn/prefer-dom-node-dataset": "error", + "unicorn/prefer-dom-node-append": "error", + "unicorn/prefer-dom-node-remove": "error", + "unicorn/prefer-event-target": "error", + "unicorn/prefer-import-meta-properties": "error", + "unicorn/prefer-math-trunc": "error", + "unicorn/prefer-native-coercion-functions": "error", + "unicorn/prefer-query-selector": "error", + "unicorn/prefer-regexp-test": "error", + "unicorn/prefer-string-replace-all": "error", + "unicorn/prefer-string-slice": "error", + "unicorn/prefer-top-level-await": "error", + "unicorn/prefer-type-error": "error", + "unicorn/require-number-to-fixed-digits-argument": "error", + + // Import + "import/no-self-import": "error", + "import/no-named-as-default": "error", + "import/no-empty-named-blocks": "error", + "import/no-absolute-path": "error", + "import/no-cycle": "error", + + // Promise + "promise/no-promise-in-callback": "error", + "promise/no-multiple-resolved": "error", + "promise/always-return": "error", + "promise/no-new-statics": "error", + + // Node + "node/no-path-concat": "error", + "node/handle-callback-err": "error", + + // Vitest + "vitest/no-disabled-tests": "error", + "vitest/no-conditional-tests": "error", + "vitest/no-conditional-expect": "error", + "vitest/expect-expect": "error", + + // License Header + "license-header/header": [ + "error", + [ + "/**", + " * Copyright (c) Statsify", + " *", + " * This source code is licensed under the GNU GPL v3 license found in the", + " * LICENSE file in the root directory of this source tree.", + " * https://github.com/Statsify/statsify/blob/main/LICENSE", + " */", + ], + ], + }, +} diff --git a/.vscode/settings.json b/.vscode/settings.json index cfb9504fe..2a1f89365 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,10 +1,8 @@ { - "editor.defaultFormatter": "dbaeumer.vscode-eslint", + "editor.defaultFormatter": "oxc.oxc-vscode", "editor.tabSize": 2, "editor.formatOnSave": true, - "editor.codeActionsOnSave": [ - "source.fixAll.eslint" - ], + "editor.codeActionsOnSave": ["source.fixAll.oxc"], "typescript.tsdk": "node_modules/typescript/lib", "files.exclude": { // "**/dist/**": true, @@ -13,28 +11,20 @@ "**/.pnpm-store/**": true }, "[js][ts][tsx]": { - "editor.defaultFormatter": "dbaeumer.vscode-eslint" + "editor.defaultFormatter": "oxc.oxc-vscode" }, "[handlebars][json][jsonc][css][scss]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "oxc.oxc-vscode" }, - "i18n-ally.localesPaths": [ - "locales" - ], + "i18n-ally.localesPaths": ["locales"], "i18n-ally.sourceLanguage": "en-US", "i18n-ally.displayLanguage": "en-US", - "i18n-ally.ignoredLocales": [ - "en" - ], + "i18n-ally.ignoredLocales": ["en"], "i18n-ally.keystyle": "nested", "todo-tree.tree.scanMode": "workspace only", "testing.automaticallyOpenPeekView": "never", "[rust]": { "editor.defaultFormatter": "rust-lang.rust-analyzer" }, - "tailwindCSS.classAttributes": [ - "className", - "containerClass", - "contentClass" - ] -} \ No newline at end of file + "tailwindCSS.classAttributes": ["className", "containerClass", "contentClass"] +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json index f4de247c4..71045f20a 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -4,9 +4,7 @@ { "type": "shell", "command": "pnpm", - "args": [ - "build" - ], + "args": ["build"], "label": "build", "group": "build", "presentation": { @@ -23,9 +21,7 @@ { "type": "shell", "command": "pnpm", - "args": [ - "build:watch" - ], + "args": ["build:watch"], "label": "build:watch", "presentation": { "echo": true, @@ -42,37 +38,25 @@ { "type": "shell", "command": "pnpm", - "args": [ - "test" - ], + "args": ["test"], "label": "test", "group": "test", - "dependsOn": [ - "build" - ], + "dependsOn": ["build"], "detail": "Tests monorepo using turbo" }, { "type": "shell", "command": "pnpm", - "args": [ - "test:types" - ], - "label": "test:types", - "dependsOn": [ - "build" - ] + "args": ["typecheck"], + "label": "typecheck", + "dependsOn": ["build"] }, { "type": "shell", "command": "pnpm", - "args": [ - "test:coverage" - ], + "args": ["test:coverage"], "label": "test:coverage", - "dependsOn": [ - "build" - ], + "dependsOn": ["build"] } ] -} \ No newline at end of file +} diff --git a/README.md b/README.md index 59846f0db..d1982a2aa 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ $ pnpm lint $ pnpm test # Type Testing -$ pnpm test:types +$ pnpm typecheck ``` ## 💁 Contributing diff --git a/apps/api/eslint.config.js b/apps/api/eslint.config.js deleted file mode 100644 index 3325f85ed..000000000 --- a/apps/api/eslint.config.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Copyright (c) Statsify - * - * This source code is licensed under the GNU GPL v3 license found in the - * LICENSE file in the root directory of this source tree. - * https://github.com/Statsify/statsify/blob/main/LICENSE - */ - -import { defineConfig } from "../../eslint.config.js"; - -export default defineConfig({ tsconfigDirName: import.meta.dirname }); diff --git a/apps/api/package.json b/apps/api/package.json index 122cae83f..81d7ec0c9 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -7,8 +7,9 @@ "scripts": { "start": "node --enable-source-maps .", "build": "swc src --config-file ../../.swcrc --out-dir dist --strip-leading-paths", - "test:types": "tsc --noEmit", - "lint": "eslint" + "typecheck": "tsgo --noEmit", + "lint": "oxlint", + "lint:ci": "oxlint --format=github" }, "dependencies": { "@fastify/static": "^8.2.0", @@ -27,7 +28,7 @@ "@statsify/schemas": "workspace:^", "@statsify/skin-renderer": "workspace:^", "@statsify/util": "workspace:^", - "@swc/helpers": "^0.5.12", + "@swc/helpers": "^0.5.23", "@typegoose/typegoose": "^12.6.0", "class-transformer": "0.5.1", "class-validator": "^0.14.1", @@ -38,11 +39,11 @@ "mongoose": "^8.5.2", "reflect-metadata": "^0.2.2", "rxjs": "^7.8.1", - "skia-canvas": "https://github.com/samizdatco/skia-canvas/releases/download/v0.9.30/skia-canvas-v0.9.30-linux-x64-glibc.tar.gz", + "skia-canvas": "3.0.8", "toad-scheduler": "^3.0.1" }, "devDependencies": { - "@nestjs/testing": "^11.1.6", + "@nestjs/testing": "^11.1.24", "@types/luxon": "^3.4.2" }, "imports": { @@ -99,4 +100,4 @@ "default": "./dist/redis/index.js" } } -} \ No newline at end of file +} diff --git a/apps/api/src/auth/auth.guard.ts b/apps/api/src/auth/auth.guard.ts index c85dbddb2..4581e2af5 100644 --- a/apps/api/src/auth/auth.guard.ts +++ b/apps/api/src/auth/auth.guard.ts @@ -35,7 +35,7 @@ export class AuthGuard implements CanActivate { const weight = this.reflector.get("auth-weight", handler); const role = this.reflector.get("auth-role", handler); - if (!weight || role == undefined) return true; + if (!weight || role === undefined) return true; const req = context.switchToHttp().getRequest(); diff --git a/apps/api/src/dtos/guild-leaderboard.dto.ts b/apps/api/src/dtos/guild-leaderboard.dto.ts index bdb8e5b5c..483977c3a 100644 --- a/apps/api/src/dtos/guild-leaderboard.dto.ts +++ b/apps/api/src/dtos/guild-leaderboard.dto.ts @@ -7,7 +7,7 @@ */ import { ApiProperty } from "@nestjs/swagger"; -import { Guild, LeaderboardScanner } from "@statsify/schemas"; +import { Guild, getLeaderboardFields } from "@statsify/schemas"; import { IsEnum, IsInt, @@ -19,7 +19,7 @@ import { } from "class-validator"; import { Transform } from "class-transformer"; -const fields = LeaderboardScanner.getLeaderboardFields(Guild).map(([key]) => key); +const fields = getLeaderboardFields(Guild).map(([key]) => key); export class GuildLeaderboardDto { @IsEnum(fields) diff --git a/apps/api/src/dtos/guild-rankings.dto.ts b/apps/api/src/dtos/guild-rankings.dto.ts index bc287b5f8..bb3b8f798 100644 --- a/apps/api/src/dtos/guild-rankings.dto.ts +++ b/apps/api/src/dtos/guild-rankings.dto.ts @@ -7,10 +7,10 @@ */ import { ApiProperty } from "@nestjs/swagger"; -import { Guild, LeaderboardScanner } from "@statsify/schemas"; +import { Guild, getLeaderboardFields } from "@statsify/schemas"; import { IsEnum, IsString, MaxLength, MinLength } from "class-validator"; -const fields = LeaderboardScanner.getLeaderboardFields(Guild).map(([key]) => key); +const fields = getLeaderboardFields(Guild).map(([key]) => key); export class GuildRankingDto { @ApiProperty({ enum: fields, type: [String] }) diff --git a/apps/api/src/dtos/player-leaderboard.dto.ts b/apps/api/src/dtos/player-leaderboard.dto.ts index 8b8706757..0e39b70ed 100644 --- a/apps/api/src/dtos/player-leaderboard.dto.ts +++ b/apps/api/src/dtos/player-leaderboard.dto.ts @@ -8,11 +8,11 @@ import { ApiProperty, PartialType } from "@nestjs/swagger"; import { IsEnum, IsInt, IsOptional, Min } from "class-validator"; -import { LeaderboardScanner, Player } from "@statsify/schemas"; +import { Player, getLeaderboardFields } from "@statsify/schemas"; import { PlayerDto } from "./player.dto.js"; import { Transform } from "class-transformer"; -const fields = LeaderboardScanner.getLeaderboardFields(Player).map(([key]) => key); +const fields = getLeaderboardFields(Player).map(([key]) => key); export class PlayerLeaderboardDto extends PartialType(PlayerDto) { @IsEnum(fields) diff --git a/apps/api/src/dtos/player-rankings.dto.ts b/apps/api/src/dtos/player-rankings.dto.ts index 71058292d..8f29c9010 100644 --- a/apps/api/src/dtos/player-rankings.dto.ts +++ b/apps/api/src/dtos/player-rankings.dto.ts @@ -8,10 +8,10 @@ import { ApiProperty } from "@nestjs/swagger"; import { IsEnum } from "class-validator"; -import { LeaderboardScanner, Player } from "@statsify/schemas"; +import { Player, getLeaderboardFields } from "@statsify/schemas"; import { UuidDto } from "./uuid.dto.js"; -const fields = LeaderboardScanner.getLeaderboardFields(Player).map(([key]) => key); +const fields = getLeaderboardFields(Player).map(([key]) => key); export class PlayerRankingsDto extends UuidDto { @ApiProperty({ enum: fields, type: [String] }) diff --git a/apps/api/src/guild/guild.service.ts b/apps/api/src/guild/guild.service.ts index a13129c3d..e81e74686 100644 --- a/apps/api/src/guild/guild.service.ts +++ b/apps/api/src/guild/guild.service.ts @@ -39,7 +39,6 @@ export class GuildService { type: GuildQuery, cache: CacheLevel ): Promise { - // eslint-disable-next-line prefer-const let [cachedGuild, tag, displayName] = await this.getCachedGuild(inputtedTag, type); if (cachedGuild && this.hypixelService.shouldCache(cachedGuild.expiresAt, cache)) { @@ -94,16 +93,12 @@ export class GuildService { }; // Add all the days to the guild total exp history - Object.entries(combinedExpHistory) - .sort() - .toReversed() - .slice(0, 30) - .forEach(([day, exp], index) => { - member.expHistory[index] = exp; - member.expHistoryDays[index] = day; - guildExpHistory[day] = guildExpHistory[day] ? guildExpHistory[day] + exp : exp; - member.monthly += exp; - }); + for (const [index, [day, exp]] of Object.entries(combinedExpHistory).toSorted().toReversed().slice(0, 30).entries()) { + member.expHistory[index] = exp; + member.expHistoryDays[index] = day; + guildExpHistory[day] = guildExpHistory[day] ? guildExpHistory[day] + exp : exp; + member.monthly += exp; + } guild.questParticipation = guild.questParticipation + member.questParticipation; @@ -118,30 +113,26 @@ export class GuildService { .exec(); // Get scaled gexp - Object.entries(guildExpHistory) - .sort() - .toReversed() - .slice(0, 30) - .forEach(([day, exp], index) => { - const scaled = this.scaleGexp(exp); - - guild.expHistory[index] = exp; - guild.expHistoryDays[index] = day; - guild.scaledExpHistory[index] = scaled; - - if (index === 0) { - guild.daily = exp; - guild.scaledDaily = scaled; - } - - if (index < 7) { - guild.weekly += exp; - guild.scaledWeekly += scaled; - } - - guild.monthly += exp; - guild.scaledMonthly += scaled; - }); + for (const [index, [day, exp]] of Object.entries(guildExpHistory).toSorted().toReversed().slice(0, 30).entries()) { + const scaled = this.scaleGexp(exp); + + guild.expHistory[index] = exp; + guild.expHistoryDays[index] = day; + guild.scaledExpHistory[index] = scaled; + + if (index === 0) { + guild.daily = exp; + guild.scaledDaily = scaled; + } + + if (index < 7) { + guild.weekly += exp; + guild.scaledWeekly += scaled; + } + + guild.monthly += exp; + guild.scaledMonthly += scaled; + } // Cache guilds responses for 10 minutes guild.expiresAt = Date.now() + 600_000; diff --git a/apps/api/src/hypixel/hypixel.service.ts b/apps/api/src/hypixel/hypixel.service.ts index ce7398c04..426ad3e22 100644 --- a/apps/api/src/hypixel/hypixel.service.ts +++ b/apps/api/src/hypixel/hypixel.service.ts @@ -32,7 +32,7 @@ export class HypixelService { public shouldCache(expirey: number, cache: CacheLevel): boolean { return ( cache !== CacheLevel.LIVE && - (cache == CacheLevel.CACHE_ONLY || Date.now() < expirey) + (cache === CacheLevel.CACHE_ONLY || Date.now() < expirey) ); } diff --git a/apps/api/src/index.ts b/apps/api/src/index.ts index 2451ba57c..648d33c1a 100644 --- a/apps/api/src/index.ts +++ b/apps/api/src/index.ts @@ -18,11 +18,10 @@ import { SentryInterceptor } from "./sentry/index.js"; import { Severity, setGlobalOptions } from "@typegoose/typegoose"; import { ValidationPipe } from "@nestjs/common"; import { config } from "@statsify/util"; -import { dirname, join } from "node:path"; -import { fileURLToPath } from "node:url"; +import { join } from "node:path"; import { mkdir } from "node:fs/promises"; -const __dirname = dirname(fileURLToPath(import.meta.url)); +const directory = import.meta.dirname; const logger = new Logger("api"); const handleError = logger.error.bind(logger); @@ -91,7 +90,7 @@ const redoc = new DocumentBuilder() // Fastify template renderer for Redoc app.setViewEngine({ engine: { handlebars }, - templates: join(__dirname, "..", "views"), + templates: join(directory, "..", "views"), }); const document = SwaggerModule.createDocument(app, redoc); diff --git a/apps/api/src/leaderboards/leaderboard.service.ts b/apps/api/src/leaderboards/leaderboard.service.ts index fd054864b..58a15af98 100644 --- a/apps/api/src/leaderboards/leaderboard.service.ts +++ b/apps/api/src/leaderboards/leaderboard.service.ts @@ -11,7 +11,7 @@ import { Constructor, Flatten } from "@statsify/util"; import { DateTime } from "luxon"; import { InjectRedis } from "#redis"; import { Injectable, InternalServerErrorException } from "@nestjs/common"; -import { LeaderboardEnabledMetadata, LeaderboardScanner } from "@statsify/schemas"; +import { type LeaderboardEnabledMetadata, getLeaderboardField, getLeaderboardFields } from "@statsify/schemas"; import { LeaderboardQuery } from "@statsify/api-client"; import { Redis } from "ioredis"; @@ -37,7 +37,7 @@ export abstract class LeaderboardService { idField: keyof T, remove = false ) { - const fields = LeaderboardScanner.getLeaderboardFields(constructor); + const fields = getLeaderboardFields(constructor); const transaction = Sentry.getCurrentHub().getScope()?.getTransaction(); const child = transaction?.startChild({ @@ -88,7 +88,7 @@ export abstract class LeaderboardService { sort, name, hidden, - } = LeaderboardScanner.getLeaderboardField( + } = getLeaderboardField( constructor, field ) as LeaderboardEnabledMetadata; @@ -128,11 +128,11 @@ export abstract class LeaderboardService { ); const additionalFieldMetadata = additionalFields.map((k) => - LeaderboardScanner.getLeaderboardField(constructor, k, false) + getLeaderboardField(constructor, k, false) ); const extraDisplayMetadata = extraDisplay ? - LeaderboardScanner.getLeaderboardField(constructor, extraDisplay, false) : + getLeaderboardField(constructor, extraDisplay, false) : undefined; const additionalStats = await this.getAdditionalStats( @@ -206,8 +206,8 @@ export abstract class LeaderboardService { const leaderboardFields: LeaderboardEnabledMetadata[] = []; - fields.forEach((field) => { - const metadata = LeaderboardScanner.getLeaderboardField(constructor, field); + for (const field of fields) { + const metadata = getLeaderboardField(constructor, field); leaderboardFields.push(metadata); const key = `${constructorName}.${field}`; @@ -219,7 +219,7 @@ export abstract class LeaderboardService { } else { pipeline.zrevrank(key, id); } - }); + } const responses = await pipeline.exec(); diff --git a/apps/api/src/player/player.controller.ts b/apps/api/src/player/player.controller.ts index 1d47e9524..552b8c0df 100644 --- a/apps/api/src/player/player.controller.ts +++ b/apps/api/src/player/player.controller.ts @@ -15,7 +15,12 @@ import { } from "@nestjs/swagger"; import { Auth, AuthRole } from "#auth"; import { Body, Controller, Delete, Get, Post, Query } from "@nestjs/common"; -import { CachedPlayerDto, PlayerDto, PlayerGroupDto, UpdatePlayerDto } from "#dtos"; +import { + CachedPlayerDto, + PlayerDto, + PlayerGroupDto, + UpdatePlayerDto, +} from "#dtos"; import { DeletePlayerResponse, ErrorResponse, @@ -72,7 +77,7 @@ export class PlayerController { const deleted = await this.playerService.delete(player); return { - success: !!deleted, + success: deleted, }; } diff --git a/apps/api/src/player/player.service.ts b/apps/api/src/player/player.service.ts index d2ee45b35..0d5ad6218 100644 --- a/apps/api/src/player/player.service.ts +++ b/apps/api/src/player/player.service.ts @@ -6,21 +6,27 @@ * https://github.com/Statsify/statsify/blob/main/LICENSE */ -import { type APIData, type Circular, type Flatten, flatten } from "@statsify/util"; import { - CacheLevel, - StatusNotFoundException, -} from "@statsify/api-client"; + type APIData, + type Circular, + type Flatten, + flatten, +} from "@statsify/util"; +import { CacheLevel, StatusNotFoundException } from "@statsify/api-client"; import { HypixelService } from "#hypixel"; -import { Inject, Injectable, NotFoundException, forwardRef } from "@nestjs/common"; -import { InjectModel } from "@m8a/nestjs-typegoose"; import { - Player, - deserialize, - serialize, -} from "@statsify/schemas"; + Inject, + Injectable, + NotFoundException, + forwardRef, +} from "@nestjs/common"; +import { InjectModel } from "@m8a/nestjs-typegoose"; +import { Player, deserialize, serialize } from "@statsify/schemas"; import { PlayerLeaderboardService } from "./leaderboards/player-leaderboard.service.js"; -import { PlayerSearchService, RedisPlayer } from "./search/player-search.service.js"; +import { + PlayerSearchService, + RedisPlayer, +} from "./search/player-search.service.js"; import type { ReturnModelType } from "@typegoose/typegoose"; type PlayerModel = ReturnModelType; @@ -55,7 +61,9 @@ export class PlayerService { return deserialize(Player, mongoPlayer); } - const player = await this.hypixelService.getPlayer(mongoPlayer?.uuid ?? tag); + const player = await this.hypixelService.getPlayer( + mongoPlayer?.uuid ?? tag + ); if (player) { player.expiresAt = Date.now() + 120_000; @@ -137,13 +145,20 @@ export class PlayerService { public async delete(tag: string) { const player = await this.findMongoDocument(tag, {}); - if (!player) return null; + if (!player) return false; await Promise.all([ this.playerModel.deleteOne({ uuid: player.uuid }).exec(), this.playerSearchService.delete(player.username), - this.playerLeaderboardService.addLeaderboards(Player, player, "uuid", true), + this.playerLeaderboardService.addLeaderboards( + Player, + player, + "uuid", + true + ), ]); + + return true; } public async saveOne(player: Player, registerAutocomplete: boolean) { @@ -155,7 +170,12 @@ export class PlayerService { this.playerModel .replaceOne({ uuid: player.uuid }, serializedPlayer, { upsert: true }) .exec(), - this.playerLeaderboardService.addLeaderboards(Player, flatPlayer, "uuid", false), + this.playerLeaderboardService.addLeaderboards( + Player, + flatPlayer, + "uuid", + false + ), ]; if (registerAutocomplete) diff --git a/apps/api/src/skin/skin.service.ts b/apps/api/src/skin/skin.service.ts index b96b85cd3..36ef51cd1 100644 --- a/apps/api/src/skin/skin.service.ts +++ b/apps/api/src/skin/skin.service.ts @@ -7,7 +7,7 @@ */ import { HttpService } from "@nestjs/axios"; -import { type Image } from "skia-canvas"; +import type { Image } from "skia-canvas"; import { InjectModel } from "@m8a/nestjs-typegoose"; import { Injectable, InternalServerErrorException } from "@nestjs/common"; import { PlayerNotFoundException } from "@statsify/api-client"; diff --git a/apps/api/src/user/user.service.ts b/apps/api/src/user/user.service.ts index f5d8cbe02..aca63eb5e 100644 --- a/apps/api/src/user/user.service.ts +++ b/apps/api/src/user/user.service.ts @@ -25,12 +25,12 @@ export class UserService { ) {} public get(idOrUuid: string): Promise { - const [tag, type] = this.parseTag(idOrUuid); + const [tag, type] = parseTag(idOrUuid); return this.userModel.findOne().where(type).equals(tag).lean().exec(); } public update(idOrUuid: string, user: Partial): Promise { - const [tag, type] = this.parseTag(idOrUuid); + const [tag, type] = parseTag(idOrUuid); return this.userModel .findOneAndUpdate({ [type]: tag }, { $set: flatten(user) }) @@ -39,7 +39,7 @@ export class UserService { } public async getBadge(idOrUuid: string): Promise { - const [tag, type] = this.parseTag(idOrUuid); + const [tag, type] = parseTag(idOrUuid); const user = await this.userModel.findOne().where(type).equals(tag).lean().exec(); if (!user) throw new NotFoundException("user"); @@ -47,7 +47,7 @@ export class UserService { let badgePath: string | undefined = undefined; if (user.hasBadge && User.isGold(user)) { - badgePath = this.getBadgePath(user.id); + badgePath = getBadgePath(user.id); } else if (user.tier) { badgePath = getLogoPath(user); } else if (user.uuid) { @@ -60,7 +60,7 @@ export class UserService { } public async updateBadge(idOrUuid: string, badge: Buffer): Promise { - const [tag, type] = this.parseTag(idOrUuid); + const [tag, type] = parseTag(idOrUuid); const user = await this.userModel.findOne().where(type).equals(tag).lean().exec(); if (!user) throw new NotFoundException("user"); @@ -72,11 +72,11 @@ export class UserService { .lean() .exec(); - await writeFile(this.getBadgePath(user.id), badge); + await writeFile(getBadgePath(user.id), badge); } public async deleteBadge(idOrUuid: string): Promise { - const [tag, type] = this.parseTag(idOrUuid); + const [tag, type] = parseTag(idOrUuid); const user = await this.userModel .findOneAndUpdate({ hasBadge: false }) @@ -87,13 +87,16 @@ export class UserService { if (!user) throw new NotFoundException("user"); - await rm(this.getBadgePath(user.id)); + await rm(getBadgePath(user.id)); } - public async verifyUser(uuidOrCode: string, id: string): Promise { + public async verifyUser( + uuidOrCode: string, + id: string, + ): Promise { const uuid = uuidOrCode.length >= 32 ? - uuidOrCode.replace(/-/g, "") : + uuidOrCode.replaceAll("-", "") : await this.getUuidFromCode(uuidOrCode); // Unverify anyone previously linked to this UUID @@ -116,13 +119,13 @@ export class UserService { } public async unverifyUser(idOrUuid: string): Promise { - const [tag, type] = this.parseTag(idOrUuid); + const [tag, type] = parseTag(idOrUuid); const user = await this.userModel .findOneAndUpdate( { [type]: tag }, { $unset: { uuid: "" }, unverifiedAt: Date.now() }, - { new: true } + { new: true }, ) .lean() .exec(); @@ -142,15 +145,13 @@ export class UserService { return verifyCode.uuid; } +} - private parseTag(tag: string): [tag: string, type: string] { - tag = tag.replaceAll("-", ""); - const type = tag.length >= 32 ? "uuid" : "id"; +const parseTag = (tag: string): [tag: string, type: string] => { + const normalizedTag = tag.replaceAll("-", ""); + const type = normalizedTag.length >= 32 ? "uuid" : "id"; - return [tag, type]; - } + return [normalizedTag, type]; +}; - private getBadgePath(id: string) { - return `${mediaRoute}/badges/${id}.png`; - } -} +const getBadgePath = (id: string) => `${mediaRoute}/badges/${id}.png`; diff --git a/apps/api/tsconfig.json b/apps/api/tsconfig.json index f1e6b476d..dd3fcc5f4 100644 --- a/apps/api/tsconfig.json +++ b/apps/api/tsconfig.json @@ -1,7 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": [ - "src", - "eslint.config.js" - ] + "include": ["src"] } \ No newline at end of file diff --git a/apps/discord-bot/eslint.config.js b/apps/discord-bot/eslint.config.js deleted file mode 100644 index 3325f85ed..000000000 --- a/apps/discord-bot/eslint.config.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Copyright (c) Statsify - * - * This source code is licensed under the GNU GPL v3 license found in the - * LICENSE file in the root directory of this source tree. - * https://github.com/Statsify/statsify/blob/main/LICENSE - */ - -import { defineConfig } from "../../eslint.config.js"; - -export default defineConfig({ tsconfigDirName: import.meta.dirname }); diff --git a/apps/discord-bot/package.json b/apps/discord-bot/package.json index e81f21f5b..7fb74f2e5 100644 --- a/apps/discord-bot/package.json +++ b/apps/discord-bot/package.json @@ -7,8 +7,9 @@ "scripts": { "start": "node --enable-source-maps .", "build": "swc src --out-dir dist --strip-leading-paths", - "test:types": "tsc --noEmit", - "lint": "eslint" + "typecheck": "tsgo --noEmit", + "lint": "oxlint", + "lint:ci": "oxlint --format=github" }, "dependencies": { "@sentry/node": "^7.118.0", @@ -20,7 +21,7 @@ "@statsify/rendering": "workspace:^", "@statsify/schemas": "workspace:^", "@statsify/util": "workspace:^", - "@swc/helpers": "^0.5.12", + "@swc/helpers": "^0.5.23", "@typegoose/typegoose": "^12.6.0", "axios": "1.11.0", "discord-api-types": "^0.38.22", @@ -28,7 +29,7 @@ "luxon": "^3.5.0", "mongoose": "^8.5.2", "reflect-metadata": "^0.2.2", - "skia-canvas": "https://github.com/samizdatco/skia-canvas/releases/download/v0.9.30/skia-canvas-v0.9.30-linux-x64-glibc.tar.gz", + "skia-canvas": "3.0.8", "tiny-discord": "https://github.com/timotejroiko/tiny-discord.git#f6d020085ea88e33ebaf6ce323930deffe74fb0d", "typedi": "^0.10.0" }, @@ -61,4 +62,4 @@ "default": "./dist/lib/*.js" } } -} \ No newline at end of file +} diff --git a/apps/discord-bot/src/commands/arcade/modes/dropper.tsx b/apps/discord-bot/src/commands/arcade/modes/dropper.tsx index db404d1c4..4e06ca84b 100644 --- a/apps/discord-bot/src/commands/arcade/modes/dropper.tsx +++ b/apps/discord-bot/src/commands/arcade/modes/dropper.tsx @@ -6,7 +6,7 @@ * https://github.com/Statsify/statsify/blob/main/LICENSE */ -import { type ArcadeModes, type Dropper, DropperMaps, MetadataScanner, type SubModeForMode } from "@statsify/schemas"; +import { type ArcadeModes, type Dropper, DropperMaps, type SubModeForMode, scanMetadata } from "@statsify/schemas"; import { Historical, If, Table } from "#components"; import { arrayGroup, formatRaceTime, formatTime } from "@statsify/util"; import type { LocalizeFunction } from "@statsify/discord"; @@ -46,7 +46,7 @@ export const DropperTable = ({ stats, submode, t, time }: DropperTableProps) => }; // This will return the leaderboard names for each dropper map, we only want the map names -const DROPPER_MAPS = MetadataScanner.scan(DropperMaps) +const DROPPER_MAPS = scanMetadata(DropperMaps) .filter(([key]) => key.endsWith(".bestTime")) .map(([key, metadata]) => [ key.replace(".bestTime", ""), @@ -54,9 +54,9 @@ const DROPPER_MAPS = MetadataScanner.scan(DropperMaps) ] as [keyof DropperMaps, string]) .sort(([a], [b]) => a.localeCompare(b)); -const HARD_DROPPER_MAP_GROUPS = arrayGroup(DROPPER_MAPS.filter(([_, name]) => name.startsWith("§c")), 4); -const MEDIUM_DROPPER_MAP_GROUPS = arrayGroup(DROPPER_MAPS.filter(([_, name]) => name.startsWith("§e")), 4); -const EASY_DROPPER_MAP_GROUPS = arrayGroup(DROPPER_MAPS.filter(([_, name]) => name.startsWith("§a")), 4); +const HARD_DROPPER_MAP_GROUPS = arrayGroup(DROPPER_MAPS.filter(([, name]) => name.startsWith("§c")), 4); +const MEDIUM_DROPPER_MAP_GROUPS = arrayGroup(DROPPER_MAPS.filter(([, name]) => name.startsWith("§e")), 4); +const EASY_DROPPER_MAP_GROUPS = arrayGroup(DROPPER_MAPS.filter(([, name]) => name.startsWith("§a")), 4); interface DropperMapsTableProps { dropper: Dropper; diff --git a/apps/discord-bot/src/commands/base.hypixel-command.ts b/apps/discord-bot/src/commands/base.hypixel-command.ts index 5020e4ba6..3d32a4f2e 100644 --- a/apps/discord-bot/src/commands/base.hypixel-command.ts +++ b/apps/discord-bot/src/commands/base.hypixel-command.ts @@ -13,7 +13,7 @@ import { LocalizationString, LocalizeFunction, Page, - PaginateService, + paginate, PlayerArgument, SubPage, } from "@statsify/discord"; @@ -62,11 +62,9 @@ export interface BaseHypixelCommand { }) export abstract class BaseHypixelCommand { protected readonly apiService: ApiService; - protected readonly paginateService: PaginateService; public constructor(protected readonly modes: GameModes) { this.apiService = Container.get(ApiService); - this.paginateService = Container.get(PaginateService); } public async run(context: CommandContext) { @@ -159,7 +157,7 @@ export abstract class BaseHypixelCommand { - const { total: _, ...challengesByGame } = challenges; + const { total, ...challengesByGame } = challenges; + void total; const entries: [GameId, any][] = Object.entries(challengesByGame) .sort((a, b) => (b[1]?.total ?? 0) - (a[1]?.total ?? 0)) @@ -72,27 +73,27 @@ interface GameTableProps { } const METADATA: Record["api"], "overall">, MetadataEntry[]> = { - ARCADE: MetadataScanner.scan(ArcadeChallenges), - ARENA_BRAWL: MetadataScanner.scan(ArenaBrawlChallenges), - BEDWARS: MetadataScanner.scan(BedWarsChallenges), - BLITZSG: MetadataScanner.scan(BlitzSGChallenges), - BUILD_BATTLE: MetadataScanner.scan(BuildBattleChallenges), - COPS_AND_CRIMS: MetadataScanner.scan(CopsAndCrimsChallenges), - DUELS: MetadataScanner.scan(DuelsChallenges), - MEGAWALLS: MetadataScanner.scan(MegaWallsChallenges), - MURDER_MYSTERY: MetadataScanner.scan(MurderMysteryChallenges), - PAINTBALL: MetadataScanner.scan(PaintballChallenges), - QUAKE: MetadataScanner.scan(QuakeChallenges), - SKYWARS: MetadataScanner.scan(SkyWarsChallenges), - SMASH_HEROES: MetadataScanner.scan(SmashHeroesChallenges), - SPEED_UHC: MetadataScanner.scan(SpeedUHCChallenges), - TNT_GAMES: MetadataScanner.scan(TNTGamesChallenges), - TURBO_KART_RACERS: MetadataScanner.scan(TurboKartRacersChallenges), - UHC: MetadataScanner.scan(UHCChallenges), - VAMPIREZ: MetadataScanner.scan(VampireZChallenges), - WALLS: MetadataScanner.scan(WallsChallenges), - WARLORDS: MetadataScanner.scan(WarlordsChallenges), - WOOLGAMES: MetadataScanner.scan(WoolGamesChallenges), + ARCADE: scanMetadata(ArcadeChallenges), + ARENA_BRAWL: scanMetadata(ArenaBrawlChallenges), + BEDWARS: scanMetadata(BedWarsChallenges), + BLITZSG: scanMetadata(BlitzSGChallenges), + BUILD_BATTLE: scanMetadata(BuildBattleChallenges), + COPS_AND_CRIMS: scanMetadata(CopsAndCrimsChallenges), + DUELS: scanMetadata(DuelsChallenges), + MEGAWALLS: scanMetadata(MegaWallsChallenges), + MURDER_MYSTERY: scanMetadata(MurderMysteryChallenges), + PAINTBALL: scanMetadata(PaintballChallenges), + QUAKE: scanMetadata(QuakeChallenges), + SKYWARS: scanMetadata(SkyWarsChallenges), + SMASH_HEROES: scanMetadata(SmashHeroesChallenges), + SPEED_UHC: scanMetadata(SpeedUHCChallenges), + TNT_GAMES: scanMetadata(TNTGamesChallenges), + TURBO_KART_RACERS: scanMetadata(TurboKartRacersChallenges), + UHC: scanMetadata(UHCChallenges), + VAMPIREZ: scanMetadata(VampireZChallenges), + WALLS: scanMetadata(WallsChallenges), + WARLORDS: scanMetadata(WarlordsChallenges), + WOOLGAMES: scanMetadata(WoolGamesChallenges), }; const GameTable = ({ gameChallenges, mode, t }: GameTableProps) => { @@ -106,7 +107,7 @@ const GameTable = ({ gameChallenges, mode, t }: GameTableProps) => { .filter(([k]) => k !== "total") .sort((a, b) => b[1] - a[1]) .map(([challenge, completions]) => { - const [_, field] = metadata.find(([k]) => k === challenge)!; + const [, field] = metadata.find(([k]) => k === challenge)!; const realName = field.leaderboard?.name ?? prettify(challenge); return [realName, t(completions)]; diff --git a/apps/discord-bot/src/commands/config/theme.command.tsx b/apps/discord-bot/src/commands/config/theme.command.tsx index b82730f68..59043bf3e 100644 --- a/apps/discord-bot/src/commands/config/theme.command.tsx +++ b/apps/discord-bot/src/commands/config/theme.command.tsx @@ -129,7 +129,7 @@ export class ThemeCommand { public message(context: CommandContext) { const message = convertColorCodes( context.option("message") - ).replace(/§\^\d\^/g, ""); + ).replaceAll(/§\^\d\^/g, ""); const length = removeFormatting(message).length; diff --git a/apps/discord-bot/src/commands/duels/duels.profile.tsx b/apps/discord-bot/src/commands/duels/duels.profile.tsx index d45cfdd5a..5fd44b4f2 100644 --- a/apps/discord-bot/src/commands/duels/duels.profile.tsx +++ b/apps/discord-bot/src/commands/duels/duels.profile.tsx @@ -53,6 +53,12 @@ export const DuelsProfile = ({ sidebar.push([t("stats.shotsFired"), t(stats.overall.shotsFired), "§6"]); } + if ("shotsHit" in stats) { + sidebar.push([t("stats.shotsHit"), t(stats.shotsHit), "§c"]); + } else if ("overall" in stats && "shotsHit" in stats.overall) { + sidebar.push([t("stats.shotsHit"), t(stats.overall.shotsHit), "§c"]); + } + if ("headshots" in stats) sidebar.push([t("stats.headshots"), t(stats.headshots), "§3"]); diff --git a/apps/discord-bot/src/commands/events/events.command.tsx b/apps/discord-bot/src/commands/events/events.command.tsx index 6f388cccc..a8af305f0 100644 --- a/apps/discord-bot/src/commands/events/events.command.tsx +++ b/apps/discord-bot/src/commands/events/events.command.tsx @@ -10,7 +10,7 @@ import { ApiService, Command, CommandContext, - PaginateService, + scrollingPagination, PlayerArgument, } from "@statsify/discord"; import { EVENT_TYPES, GENERAL_MODES } from "@statsify/schemas"; @@ -23,10 +23,7 @@ import { render } from "@statsify/rendering"; @Command({ description: (t) => t("commands.events"), args: [PlayerArgument] }) export class EventsCommand { - public constructor( - private readonly apiService: ApiService, - private readonly paginateService: PaginateService - ) {} + public constructor(private readonly apiService: ApiService) {} public async run(context: CommandContext) { const user = context.getUser(); @@ -40,7 +37,7 @@ export class EventsCommand { this.apiService.getUserBadge(player.uuid), ]); - return this.paginateService.scrollingPagination( + return scrollingPagination( context, arrayGroup(EVENT_TYPES, 4).map((events) => async () => { const background = await getBackground( diff --git a/apps/discord-bot/src/commands/gamecounts.command.ts b/apps/discord-bot/src/commands/gamecounts.command.ts index e6dc06ab0..d72a13965 100644 --- a/apps/discord-bot/src/commands/gamecounts.command.ts +++ b/apps/discord-bot/src/commands/gamecounts.command.ts @@ -12,7 +12,7 @@ import { CommandContext, EmbedBuilder, Page, - PaginateService, + paginate, } from "@statsify/discord"; import { FormattedGame, GameId, GamePlayers } from "@statsify/schemas"; import { STATUS_COLORS } from "@statsify/logger"; @@ -23,10 +23,7 @@ import { removeFormatting } from "@statsify/util"; description: (t) => t("commands.game-counts"), }) export class GameCountsCommand { - public constructor( - private readonly apiService: ApiService, - private readonly paginateService: PaginateService - ) {} + public constructor(private readonly apiService: ApiService) {} public async run(context: CommandContext) { const t = context.t(); @@ -87,7 +84,7 @@ export class GameCountsCommand { ...subGameGenerators, ]; - return this.paginateService.paginate(context, pages); + return paginate(context, pages); } private formatGameCount(name: string, count: string, emoji?: string) { diff --git a/apps/discord-bot/src/commands/gtbhelper/gtbhelpber.command.tsx b/apps/discord-bot/src/commands/gtbhelper/gtbhelpber.command.tsx index 5c1fe41ca..0a4a08d2b 100644 --- a/apps/discord-bot/src/commands/gtbhelper/gtbhelpber.command.tsx +++ b/apps/discord-bot/src/commands/gtbhelper/gtbhelpber.command.tsx @@ -18,7 +18,7 @@ export class GTBHelperCommand { const hint = context.option("hint"); const words = findSolutions(hint); - if (!words.length) { + if (words.length === 0) { throw new ErrorMessage( (t) => t("errors.noGTBSolutions.title"), (t) => t("errors.noGTBSolutions.description") @@ -31,9 +31,9 @@ export class GTBHelperCommand { const groups = arrayGroup(words, Math.ceil(words.length / 3)); - groups.forEach((solutions) => - embed.field("\u200b", solutions.map((s) => `\`•\` ${s}`).join("\n"), true) - ); + for (const solutions of groups) { + embed.field("\u200b", solutions.map((s) => `\`•\` ${s}`).join("\n"), true); + } return { embeds: [embed] }; } diff --git a/apps/discord-bot/src/commands/guild/guild-list.profile.tsx b/apps/discord-bot/src/commands/guild/guild-list.profile.tsx index 3e8574ceb..011812b8d 100644 --- a/apps/discord-bot/src/commands/guild/guild-list.profile.tsx +++ b/apps/discord-bot/src/commands/guild/guild-list.profile.tsx @@ -39,10 +39,10 @@ export const GuildListProfile = ({ // Hypixel does not always return all the ranks in `guild.ranks` so a special rank map is needed const rankMap: Record = {}; - guild.members.forEach((member) => { + for (const member of guild.members) { rankMap[member.rank] = rankMap[member.rank] ?? []; rankMap[member.rank].push(member.displayName ?? "ERROR"); - }); + } // A map of the all the ranks in the guild const guildRankMap = guild.ranks.reduce((acc, rank) => { diff --git a/apps/discord-bot/src/commands/guild/guild-top.subcommand.tsx b/apps/discord-bot/src/commands/guild/guild-top.subcommand.tsx index 7f11d5231..0a6056772 100644 --- a/apps/discord-bot/src/commands/guild/guild-top.subcommand.tsx +++ b/apps/discord-bot/src/commands/guild/guild-top.subcommand.tsx @@ -80,14 +80,14 @@ export class GuildTopSubCommand extends GuildLeaderboardSubCommand { const dropdown = new SelectMenuBuilder(); - modes.forEach(([key, title], index) => + for (const [index, [key, title]] of modes.entries()) { dropdown.option( new SelectMenuOptionBuilder() .label(title) .value(`${key}`) .default(index === 0) - ) - ); + ); + } const components = [new ActionRowBuilder().component(dropdown)]; @@ -146,7 +146,7 @@ export class GuildTopSubCommand extends GuildLeaderboardSubCommand { dropdown.getCustomId(), changePage((interaction) => { const value = interaction.getData().values[0] as GuildTopKey; - return { modeIndex: modes.findIndex((m) => m[0] == value) }; + return { modeIndex: modes.findIndex((m) => m[0] === value) }; }) ); diff --git a/apps/discord-bot/src/commands/guild/guild.command.tsx b/apps/discord-bot/src/commands/guild/guild.command.tsx index 119fd19c0..fa6b39fed 100644 --- a/apps/discord-bot/src/commands/guild/guild.command.tsx +++ b/apps/discord-bot/src/commands/guild/guild.command.tsx @@ -13,7 +13,7 @@ import { ErrorMessage, GuildArgument, IMessage, - PaginateService, + paginate, PlayerArgument, SubCommand, } from "@statsify/discord"; @@ -29,10 +29,7 @@ import { render } from "@statsify/rendering"; @Command({ description: (t) => t("commands.guild") }) export class GuildCommand extends GuildTopSubCommand { - public constructor( - protected readonly apiService: ApiService, - private readonly paginateService: PaginateService - ) { + public constructor(protected readonly apiService: ApiService,) { super(apiService); } @@ -69,7 +66,7 @@ export class GuildCommand extends GuildTopSubCommand { gameIcons, }; - return this.paginateService.paginate(context, [ + return paginate(context, [ { label: "Overall", generator: () => diff --git a/apps/discord-bot/src/commands/historical/session.command.tsx b/apps/discord-bot/src/commands/historical/session.command.tsx index c4e23aaaa..9d69cbd76 100644 --- a/apps/discord-bot/src/commands/historical/session.command.tsx +++ b/apps/discord-bot/src/commands/historical/session.command.tsx @@ -44,7 +44,7 @@ import { CommandContext, EmbedBuilder, Page, - PaginateService, + paginate, PlayerArgument, SubCommand, SubPage, @@ -88,10 +88,7 @@ import type { HistoricalTimeData } from "#components"; @Command({ description: "session stats" }) export class SessionCommand { - public constructor( - private readonly apiService: ApiService, - private readonly paginateService: PaginateService - ) {} + public constructor(private readonly apiService: ApiService) {} @SubCommand({ description: (t) => t("commands.session-arcade"), args: [PlayerArgument] }) public arcade(context: CommandContext) { @@ -478,6 +475,6 @@ export class SessionCommand { }; }); - return this.paginateService.paginate(context, pages); + return paginate(context, pages); } } diff --git a/apps/discord-bot/src/commands/leaderboards/guild-leaderboard.argument.ts b/apps/discord-bot/src/commands/leaderboards/guild-leaderboard.argument.ts index 4ad5179ae..bdcf57ed7 100644 --- a/apps/discord-bot/src/commands/leaderboards/guild-leaderboard.argument.ts +++ b/apps/discord-bot/src/commands/leaderboards/guild-leaderboard.argument.ts @@ -12,10 +12,10 @@ import { ApplicationCommandOptionType, } from "discord-api-types/v10"; import { AbstractArgument, CommandContext, LocalizationString } from "@statsify/discord"; -import { Guild, LeaderboardScanner } from "@statsify/schemas"; +import { Guild, getLeaderboardFields } from "@statsify/schemas"; import { removeFormatting } from "@statsify/util"; -const list = LeaderboardScanner.getLeaderboardFields(Guild).map( +const list = getLeaderboardFields(Guild).map( ([key, { leaderboard }]) => ({ value: key, name: removeFormatting(leaderboard.name), diff --git a/apps/discord-bot/src/commands/leaderboards/guild-leaderboard.subcommand.ts b/apps/discord-bot/src/commands/leaderboards/guild-leaderboard.subcommand.ts index 8feccd180..b45f58c4e 100644 --- a/apps/discord-bot/src/commands/leaderboards/guild-leaderboard.subcommand.ts +++ b/apps/discord-bot/src/commands/leaderboards/guild-leaderboard.subcommand.ts @@ -25,7 +25,7 @@ export class GuildLeaderboardSubCommand extends BaseLeaderboardCommand { public async leaderboard(context: CommandContext) { const leaderboard = context.option("leaderboard"); - const field = leaderboard.replace(/ /g, "."); + const field = leaderboard.replaceAll(' ', "."); const background = await getBackground("hypixel", "overall"); return this.createLeaderboard({ diff --git a/apps/discord-bot/src/commands/leaderboards/player-leaderboard.argument.ts b/apps/discord-bot/src/commands/leaderboards/player-leaderboard.argument.ts index a6c2e730e..789608b36 100644 --- a/apps/discord-bot/src/commands/leaderboards/player-leaderboard.argument.ts +++ b/apps/discord-bot/src/commands/leaderboards/player-leaderboard.argument.ts @@ -14,9 +14,9 @@ import { import { AbstractArgument, CommandContext, LocalizationString } from "@statsify/discord"; import { ClassMetadata, - LeaderboardScanner, METADATA_KEY, PlayerStats, + getLeaderboardFields, } from "@statsify/schemas"; import { removeFormatting } from "@statsify/util"; @@ -34,13 +34,14 @@ const FUSE_OPTIONS = { }; const fields = entries.reduce((acc, [prefix, value]) => { - const list = LeaderboardScanner.getLeaderboardFields(value.type.type).map( + const list = getLeaderboardFields(value.type.type).map( ([key, { leaderboard }]) => ({ value: key, name: removeFormatting(leaderboard.name) }) ); const fuse = new Fuse(list, FUSE_OPTIONS); + acc[prefix as keyof PlayerStats] = [fuse, list]; - return { ...acc, [prefix]: [fuse, list] }; + return acc; }, {} as Record, APIApplicationCommandOptionChoice[]]>); export class PlayerLeaderboardArgument extends AbstractArgument { diff --git a/apps/discord-bot/src/commands/minecraft/cape.command.ts b/apps/discord-bot/src/commands/minecraft/cape.command.ts index 52204e542..501e9ca71 100644 --- a/apps/discord-bot/src/commands/minecraft/cape.command.ts +++ b/apps/discord-bot/src/commands/minecraft/cape.command.ts @@ -12,7 +12,7 @@ import { CommandContext, ErrorMessage, MojangPlayerArgument, - PaginateService, + paginate } from "@statsify/discord"; import { Image, loadImage } from "skia-canvas"; import { createCanvas } from "@statsify/rendering"; @@ -20,10 +20,7 @@ import type { Skin } from "@statsify/schemas"; @Command({ description: (t) => t("commands.cape"), args: [MojangPlayerArgument] }) export class CapeCommand { - public constructor( - private readonly apiService: ApiService, - private readonly paginateService: PaginateService - ) {} + public constructor(private readonly apiService: ApiService) {} public async run(context: CommandContext) { const user = context.getUser(); @@ -45,13 +42,13 @@ export class CapeCommand { generator: () => this.renderCape(c.image as Image), })); - if (!pages.length) + if (pages.length === 0) return new ErrorMessage( (t) => t("errors.noCape.title"), (t) => t("errors.noCape.description", { username: player.username }) ); - return this.paginateService.paginate(context, pages); + return paginate(context, pages); } private async getOptifineCape(username: string) { diff --git a/apps/discord-bot/src/commands/minecraft/colors.command.ts b/apps/discord-bot/src/commands/minecraft/colors.command.ts index c7fdb6836..c8bf5de6a 100644 --- a/apps/discord-bot/src/commands/minecraft/colors.command.ts +++ b/apps/discord-bot/src/commands/minecraft/colors.command.ts @@ -21,11 +21,11 @@ export class ColorsCommand { "embeds.colors.shadowHex" )}**\n`; - minecraftColors.forEach((color) => { + for (const color of minecraftColors) { desc += `${t(`emojis:colors.${[color.code.slice(1)]}`)} \`${color.code}\` • \`${ color.hex }\` • \`${mcShadow(color.hex)}\`\n`; - }); + } desc += "\n"; desc += `${t("emojis:colors.k")} \`§k\` • ${t("embeds.colors.obfuscated")}\n`; diff --git a/apps/discord-bot/src/commands/minecraft/server/server.argument.ts b/apps/discord-bot/src/commands/minecraft/server/server.argument.ts index 62ad196b9..7aec94027 100644 --- a/apps/discord-bot/src/commands/minecraft/server/server.argument.ts +++ b/apps/discord-bot/src/commands/minecraft/server/server.argument.ts @@ -38,6 +38,8 @@ export class ServerArgument extends AbstractArgument { threshold: 0.3, ignoreLocation: true, }); + + return undefined; }); } diff --git a/apps/discord-bot/src/commands/minecraft/server/server.command.tsx b/apps/discord-bot/src/commands/minecraft/server/server.command.tsx index e33ef3743..af4fca612 100644 --- a/apps/discord-bot/src/commands/minecraft/server/server.command.tsx +++ b/apps/discord-bot/src/commands/minecraft/server/server.command.tsx @@ -30,6 +30,7 @@ export class ServerCommand { getServerMappings().then((mappings) => { this.mappings = mappings; + return undefined; }); } diff --git a/apps/discord-bot/src/commands/minecraft/server/server.profile.tsx b/apps/discord-bot/src/commands/minecraft/server/server.profile.tsx index 525bd366f..92d4a1756 100644 --- a/apps/discord-bot/src/commands/minecraft/server/server.profile.tsx +++ b/apps/discord-bot/src/commands/minecraft/server/server.profile.tsx @@ -49,7 +49,7 @@ export const ServerProfile = ({ >
- {server.motd.raw.map((m) => m.replace(/\s{2,}/g, "")).join("\n")} + {server.motd.raw.map((m) => m.replaceAll(/\s{2,}/g, "")).join("\n")}
diff --git a/apps/discord-bot/src/commands/quests/quests.command.tsx b/apps/discord-bot/src/commands/quests/quests.command.tsx index 9dc277bc1..3d640798d 100644 --- a/apps/discord-bot/src/commands/quests/quests.command.tsx +++ b/apps/discord-bot/src/commands/quests/quests.command.tsx @@ -11,7 +11,7 @@ import { Command, CommandContext, Page, - PaginateService, + paginate, PlayerArgument, SubCommand, } from "@statsify/discord"; @@ -26,10 +26,7 @@ import { render } from "@statsify/rendering"; export class QuestsCommand { private readonly modes = QUEST_MODES; - public constructor( - private readonly apiService: ApiService, - private readonly paginateService: PaginateService - ) {} + public constructor(private readonly apiService: ApiService) {} @SubCommand({ description: (t) => t("commands.quests-overall"), @@ -85,7 +82,7 @@ export class QuestsCommand { let modes = this.modes.getModes(); // Currently only SkyWars has a monthly quest so it is useless to show other modes - if (time == QuestTime.Monthly) { + if (time === QuestTime.Monthly) { // Filter for objects with more than 1 field (the total field) modes = modes.filter((mode) => mode.api === "overall" || Object.entries(quests.monthly[mode.api]).length > 1); } @@ -115,6 +112,6 @@ export class QuestsCommand { }, })); - return this.paginateService.paginate(context, pages); + return paginate(context, pages); } } diff --git a/apps/discord-bot/src/commands/quests/quests.profile.tsx b/apps/discord-bot/src/commands/quests/quests.profile.tsx index a94762f72..bd41d8a3c 100644 --- a/apps/discord-bot/src/commands/quests/quests.profile.tsx +++ b/apps/discord-bot/src/commands/quests/quests.profile.tsx @@ -16,13 +16,13 @@ import { GameQuests, GenericQuestInstance, METADATA_KEY, - MetadataScanner, OverallQuests, QuestModes, QuestTime, User, UserPalette, WeeklyQuests, + scanMetadata, } from "@statsify/schemas"; import { Container, @@ -49,7 +49,7 @@ function getQuestMetadata(constructor: Constructor) { const metadata = entries.map(([key, data]) => [ key, - Object.fromEntries(MetadataScanner.scan(data.type.type)), + Object.fromEntries(scanMetadata(data.type.type)), ]); return Object.fromEntries(metadata); @@ -91,7 +91,7 @@ const NormalTable = ({ quests, t, gameIcons, colorPalette, time }: NormalTablePr const entries: GameEntry[] = questEntries // Require more than just a total field - .filter(([_, q]) => Object.keys(q).length > 1) + .filter(([, q]) => Object.keys(q).length > 1) .map(([k, v]) => [k, v, Object.keys(v).length - 1] as const) .sort((a, b) => ratio(b[1]?.total ?? 0, b[2]) - ratio(a[1]?.total ?? 0, a[2])) .map(([k, v, total]) => { diff --git a/apps/discord-bot/src/commands/rankings/rankings.command.tsx b/apps/discord-bot/src/commands/rankings/rankings.command.tsx index 2aa88ac6f..15966236e 100644 --- a/apps/discord-bot/src/commands/rankings/rankings.command.tsx +++ b/apps/discord-bot/src/commands/rankings/rankings.command.tsx @@ -17,7 +17,6 @@ import { DUELS_MODES, GENERAL_MODES, GameModes, - LeaderboardScanner, MEGAWALLS_MODES, MURDER_MYSTERY_MODES, PAINTBALL_MODES, @@ -38,6 +37,7 @@ import { WALLS_MODES, WARLORDS_MODES, WOOLGAMES_MODES, + getLeaderboardFields, } from "@statsify/schemas"; import { ApiService, @@ -46,7 +46,7 @@ import { Command, CommandContext, ErrorMessage, - PaginateService, + scrollingPagination, PlayerArgument, SubCommand, type SubCommandOptions, @@ -60,7 +60,7 @@ import { getBackground, getLogo } from "@statsify/assets"; import { getTheme } from "#themes"; import { render } from "@statsify/rendering"; -const fields = LeaderboardScanner.getLeaderboardFields(Player).map(([key]) => key); +const fields = getLeaderboardFields(Player).map(([key]) => key); const choices = games.map((g) => [g.name, g.key] as Choice); choices.unshift(["All", "all"]); @@ -77,10 +77,7 @@ const options: Partial = { preview: "rankings.png", }) export class RankingsCommand { - public constructor( - private readonly apiService: ApiService, - private readonly paginateService: PaginateService - ) {} + public constructor(private readonly apiService: ApiService) {} @SubCommand({ ...options, @@ -322,7 +319,7 @@ export class RankingsCommand { const rankings = await this.apiService.getPlayerRankings(filteredFields, player.uuid); - if (!rankings.length) + if (rankings.length === 0) throw new ErrorMessage( (t) => t("errors.noRankings.title"), (t) => @@ -347,7 +344,7 @@ export class RankingsCommand { games.find((g) => g.key === game)?.formatted : undefined; - return this.paginateService.scrollingPagination( + return scrollingPagination( context, groups.map( (group) => () => diff --git a/apps/discord-bot/src/commands/ratios/ratios.command.tsx b/apps/discord-bot/src/commands/ratios/ratios.command.tsx index bdd522891..854c04db9 100644 --- a/apps/discord-bot/src/commands/ratios/ratios.command.tsx +++ b/apps/discord-bot/src/commands/ratios/ratios.command.tsx @@ -39,7 +39,7 @@ import { Command, CommandContext, Page, - PaginateService, + paginate, PlayerArgument, SubCommand, } from "@statsify/discord"; @@ -59,10 +59,7 @@ const args = [PlayerArgument]; @Command({ description: (t) => t("commands.ratios") }) export class RatiosCommand { - public constructor( - private readonly apiService: ApiService, - private readonly paginateService: PaginateService - ) {} + public constructor(private readonly apiService: ApiService) {} @SubCommand({ description: (t) => t("commands.ratios-arcade"), args }) public arcade(context: CommandContext) { @@ -244,11 +241,11 @@ export class RatiosCommand { }, })); - return this.paginateService.paginate(context, pages); + return paginate(context, pages); } private getModeStats(game: PlayerStats[keyof PlayerStats], mode: GameModeWithSubModes) { - if (mode.submodes.length !== 0) { + if (mode.submodes.length > 0) { let stats = game[mode.api as keyof typeof game]; stats = stats[mode.submodes[0].api as keyof typeof game]; return mode.submodes[0].api === "overall" ? stats || game : stats; @@ -289,7 +286,7 @@ export class RatiosCommand { return numeratorType === Number && denominatorType === Number; }); - if (!ratios.length) continue; + if (ratios.length === 0) continue; ratioModes.push([mode, ratios]); } diff --git a/apps/discord-bot/src/components/Header/Header.tsx b/apps/discord-bot/src/components/Header/Header.tsx index cf07c8570..86e14b43c 100644 --- a/apps/discord-bot/src/components/Header/Header.tsx +++ b/apps/discord-bot/src/components/Header/Header.tsx @@ -53,7 +53,7 @@ export const Header = (props: HeaderProps) => { const sidebar = "sidebar" in props && - props.sidebar.length && + props.sidebar.length > 0 && (props.time === "LIVE" ? true : props.historicalSidebar) ? : <>; diff --git a/apps/discord-bot/src/components/List.tsx b/apps/discord-bot/src/components/List.tsx index 947132ff1..a20b4adc3 100644 --- a/apps/discord-bot/src/components/List.tsx +++ b/apps/discord-bot/src/components/List.tsx @@ -16,14 +16,14 @@ export const List = ({ width = "100%", items }: ListProps) => { const remainingColumns: number[] = []; for (const [i, item] of items.entries()) { - (item as unknown as JSX.Element[]).forEach((child, index) => { + for (const [index, child] of (item as unknown as JSX.Element[]).entries()) { if (i === 0 && child.x.size === "remaining") remainingColumns.push(index); child.x.size = "100%"; if (columns[index]) columns[index].push(child); else columns[index] = [child]; - }); + } } return ( diff --git a/apps/discord-bot/src/index.ts b/apps/discord-bot/src/index.ts index d899f2006..7bfbafbb6 100644 --- a/apps/discord-bot/src/index.ts +++ b/apps/discord-bot/src/index.ts @@ -8,17 +8,16 @@ import * as Sentry from "@sentry/node"; import { CommandListener } from "#lib/command.listener"; -import { CommandLoader, CommandPoster, I18nLoaderService } from "@statsify/discord"; +import { CommandPoster, I18nLoaderService, loadCommands } from "@statsify/discord"; import { Container } from "typedi"; import { FontLoaderService } from "#services"; import { InteractionServer, RestClient, WebsocketShard } from "tiny-discord"; import { Logger } from "@statsify/logger"; import { VerifyCommand } from "#commands/verify.command"; import { config } from "@statsify/util"; -import { dirname, join } from "node:path"; -import { fileURLToPath } from "node:url"; +import { join } from "node:path"; -const __dirname = dirname(fileURLToPath(import.meta.url)); +const directory = import.meta.dirname; const logger = new Logger("discord-bot"); const handleError = logger.error.bind(logger); @@ -45,7 +44,7 @@ await Promise.all( const rest = new RestClient({ token: await config("discordBot.token"), timeout: 60 * 1000 }); Container.set(RestClient, rest); -const commands = await CommandLoader.load(join(__dirname, "./commands")); +const commands = await loadCommands(join(directory, "./commands")); const poster = Container.get(CommandPoster); diff --git a/apps/discord-bot/src/lib/command.listener.ts b/apps/discord-bot/src/lib/command.listener.ts index b75a71e1a..d42bbf4f6 100644 --- a/apps/discord-bot/src/lib/command.listener.ts +++ b/apps/discord-bot/src/lib/command.listener.ts @@ -127,8 +127,7 @@ export class CommandListener extends AbstractCommandListener { const newCooldown = now + command.cooldown * 1000 * reduction; if (!cooldownForCommand) { - const cooldownForCommand = new Map(); - cooldownForCommand.set(userId, newCooldown); + const cooldownForCommand = new Map([[userId, newCooldown]]); this.cooldowns.set(command.name, cooldownForCommand); return; @@ -168,7 +167,7 @@ export class CommandListener extends AbstractCommandListener { (t) => !t.disabled?.includes(commandName) && !t.uneligible?.(user) ); - if (!useableTips.length) return undefined; + if (useableTips.length === 0) return undefined; const tip = useableTips[Math.floor(Math.random() * useableTips.length)]; return tip.message; diff --git a/apps/discord-bot/src/lib/convert-color-codes.ts b/apps/discord-bot/src/lib/convert-color-codes.ts index 46cc58f35..42cc5ec74 100644 --- a/apps/discord-bot/src/lib/convert-color-codes.ts +++ b/apps/discord-bot/src/lib/convert-color-codes.ts @@ -8,6 +8,6 @@ export const convertColorCodes = (content: string) => content .replaceAll(String.raw`\&`, "󰀀") - .replace(/&\S/g, (m) => m.replace("&", "§")) + .replaceAll(/&\S/g, (m) => m.replace("&", "§")) .replaceAll("󰀀", "&"); diff --git a/apps/discord-bot/tsconfig.json b/apps/discord-bot/tsconfig.json index 10c536c56..558014558 100644 --- a/apps/discord-bot/tsconfig.json +++ b/apps/discord-bot/tsconfig.json @@ -1,11 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "jsx": "preserve", - "baseUrl": "./src", + "jsx": "preserve" }, - "include": [ - "src", - "eslint.config.js" - ] -} \ No newline at end of file + "include": ["src"] +} diff --git a/apps/scripts/eslint.config.js b/apps/scripts/eslint.config.js deleted file mode 100644 index 8e6c07b81..000000000 --- a/apps/scripts/eslint.config.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Copyright (c) Statsify - * - * This source code is licensed under the GNU GPL v3 license found in the - * LICENSE file in the root directory of this source tree. - * https://github.com/Statsify/statsify/blob/main/LICENSE - */ - -import globals from "globals"; -import { defineConfig } from "../../eslint.config.js"; - -export default [ - { languageOptions: { globals: globals.node } }, - ...defineConfig({ tsconfigDirName: import.meta.dirname }), -]; diff --git a/apps/scripts/package.json b/apps/scripts/package.json index d883f2577..8315ef054 100644 --- a/apps/scripts/package.json +++ b/apps/scripts/package.json @@ -4,7 +4,8 @@ "private": true, "type": "module", "scripts": { - "lint": "eslint", + "lint": "oxlint", + "lint:ci": "oxlint --format=github", "api-key": "node src/api-key.js", "delete-sessions": "node src/delete-sessions.js", "limit-redis": "node src/limit-redis.js", @@ -20,19 +21,17 @@ "@statsify/rendering": "workspace:^", "@statsify/schemas": "workspace:^", "@statsify/util": "workspace:^", - "@swc/core": "^1.13.5", - "@swc/helpers": "^0.5.12", + "@swc/helpers": "^0.5.23", "chalk": "^5.6.0", "discord-bot": "workspace:^", "inquirer": "^10.1.8", "ioredis": "^5.7.0", - "skia-canvas": "https://github.com/samizdatco/skia-canvas/releases/download/v0.9.30/skia-canvas-v0.9.30-linux-x64-glibc.tar.gz", + "skia-canvas": "3.0.8", "tiny-discord": "https://github.com/timotejroiko/tiny-discord.git#f6d020085ea88e33ebaf6ce323930deffe74fb0d", "toad-scheduler": "^3.0.1", "zod": "^4.1.5" }, "devDependencies": { - "@types/inquirer": "^9.0.7", - "globals": "^16.3.0" + "@types/inquirer": "^9.0.7" } -} \ No newline at end of file +} diff --git a/apps/scripts/src/api-key.js b/apps/scripts/src/api-key.js index 12f6ae367..e9bf2f39c 100644 --- a/apps/scripts/src/api-key.js +++ b/apps/scripts/src/api-key.js @@ -50,9 +50,9 @@ const getKeys = async () => { const pipeline = redis.pipeline(); - keys.forEach((key) => { + for (const key of keys) { pipeline.hgetall(key); - }); + } const keyValues = await pipeline.exec(); @@ -104,7 +104,7 @@ const keyManager = async () => { const availableMethods = ["create"]; - if ((await getKeyNames()).length) availableMethods.push("delete", "edit", "list"); + if ((await getKeyNames()).length > 0) availableMethods.push("delete", "edit", "list"); const { method } = await inquirer.prompt([ { @@ -194,6 +194,7 @@ const deleteKey = async () => { let currentKey = activeKeys[key]; if (currentKey.name === deletedKey) { + // oxlint-disable-next-line no-await-in-loop await redis.del(`key:${key}`); inquirerLogger( "Deleted Key!", @@ -263,4 +264,4 @@ const editKey = async () => { await redis.hset(`key:${currentHash}`, field, Object.values(newValue)[0]); }; -keyManager(); +await keyManager(); diff --git a/apps/scripts/src/limit-redis.js b/apps/scripts/src/limit-redis.js index ffe35f1df..6919d3212 100644 --- a/apps/scripts/src/limit-redis.js +++ b/apps/scripts/src/limit-redis.js @@ -8,7 +8,7 @@ import Redis from "ioredis"; import { CurrentHistoricalType } from "@statsify/api-client"; -import { Guild, MetadataScanner, Player } from "@statsify/schemas"; +import { Guild, scanMetadata, Player } from "@statsify/schemas"; import { Logger } from "@statsify/logger"; import { SimpleIntervalJob, Task } from "toad-scheduler"; @@ -16,19 +16,20 @@ const logger = new Logger("Redis Limiter"); const redis = new Redis(process.env.REDIS_URL); const runLimit = async (constructors, prefixes) => { - constructors.forEach(async (constructor, i) => { + for (const [i, constructor] of constructors.entries()) { const oldLeaderboardPipeline = redis.pipeline(); const limitLeaderboardPipeline = redis.pipeline(); const name = constructor.name.toLowerCase(); - const fields = MetadataScanner.scan(constructor); + const fields = scanMetadata(constructor); - fields.forEach(([key, value]) => { + for (const [key, value] of fields) { const path = prefixes ? `${prefixes[i]}:${name}.${key}` : `${name}.${key}`; if (!value.leaderboard.enabled || (prefixes ? !value.historical.enabled : false)) oldLeaderboardPipeline.del(path); - }); + } + // oxlint-disable-next-line no-await-in-loop await oldLeaderboardPipeline.exec(); const leaderboards = prefixes ? @@ -37,11 +38,11 @@ const runLimit = async (constructors, prefixes) => { let memberCount = 0; - leaderboards.forEach(([key, value]) => { + for (const [key, value] of leaderboards) { const path = `${name}.${key}`; const { sort } = value.leaderboard; let { limit } = value.leaderboard; - if (limit === Number.POSITIVE_INFINITY) return; + if (limit === Number.POSITIVE_INFINITY) continue; // Reduce historical leaderboard max size if (prefixes) limit = Math.floor(limit / 10); @@ -53,8 +54,9 @@ const runLimit = async (constructors, prefixes) => { } else { limitLeaderboardPipeline.zremrangebyrank(path, limit, -1); } - }); + } + // oxlint-disable-next-line no-await-in-loop await limitLeaderboardPipeline.exec(); logger.log(`Limited ${leaderboards.length} ${name} leaderboards`); @@ -63,8 +65,8 @@ const runLimit = async (constructors, prefixes) => { prefixes ? prefixes[i].toLowerCase() : "lifetime" } ${name} leaderboards` ); - }); -}; + } +} const limit = async () => { await Promise.all([ diff --git a/apps/scripts/src/purge.js b/apps/scripts/src/purge.js index c95bd6e4e..caa6bfa4d 100644 --- a/apps/scripts/src/purge.js +++ b/apps/scripts/src/purge.js @@ -9,13 +9,11 @@ import inquirer from "inquirer"; import { ROOT, fetchWorkspaces, inquirerConfirmation, inquirerLogger } from "./utils.js"; import { exec as _exec } from "node:child_process"; -import { dirname, join, resolve } from "node:path"; -import { fileURLToPath } from "node:url"; +import { join, resolve } from "node:path"; import { promisify } from "node:util"; import { rm } from "node:fs/promises"; -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); +const dirname = import.meta.dirname; /** * @@ -25,7 +23,7 @@ const exec = (script) => promisify(_exec)(script, { shell: true, stdio: "inherit", - cwd: resolve(__dirname, "../../../"), + cwd: resolve(dirname, "../../../"), }); const workspaces = [ @@ -124,4 +122,4 @@ const purge = async () => { process.exit(0); }; -purge(); +await purge(); diff --git a/apps/scripts/src/rank-emojis.js b/apps/scripts/src/rank-emojis.js index 79b8707b4..5147fc6c7 100644 --- a/apps/scripts/src/rank-emojis.js +++ b/apps/scripts/src/rank-emojis.js @@ -79,14 +79,12 @@ const drawRank = async (formatted) => { renderer.fillText(textCtx, nodes, 0, 0); const imageCount = Math.ceil(width / SIZE); - const images = []; - - for (let x = 0; x < imageCount; x++) { + const images = await Promise.all(Array.from({ length: imageCount }).map((_, x) => { const canvas = createCanvas(SIZE, SIZE); const ctx = canvas.getContext("2d"); ctx.drawImage(textCanvas, SIZE * x, 0, SIZE, SIZE, 0, 0, SIZE, SIZE); - images.push(await canvas.toDataURL("png")); - } + return canvas.toDataURL("png"); + })); return images; }; @@ -116,7 +114,7 @@ const drawColorChanger = async (rank, prefixIndex) => { )), ]; - Object.entries(sharedImages).forEach(([index, image]) => { + for (const [index, image] of Object.entries(sharedImages).entries()) { emojis.push({ buffer: image, rank, @@ -124,9 +122,9 @@ const drawColorChanger = async (rank, prefixIndex) => { index, name: `${prefixIndex}${index}`, }); - }); + } - coloredEmojis.forEach(async (images, index) => { + for (const [index, images] of coloredEmojis) { const color = minecraftColors[index]; for (const [i, image] of images.entries()) { @@ -140,7 +138,7 @@ const drawColorChanger = async (rank, prefixIndex) => { name: `${prefixIndex}${color.code[1]}${i}`, }); } - }); + } }; /** @@ -151,9 +149,9 @@ const drawColorChanger = async (rank, prefixIndex) => { const drawNonColorChanger = async (rank, prefixIndex) => { const images = await drawRank(rankMap[rank]()); - images.forEach((image, index) => { + for (const [index, image] of images.entries()) { emojis.push({ buffer: image, rank, index, name: `${prefixIndex}${index}` }); - }); + } }; // Create all the emojis @@ -175,13 +173,16 @@ const json = {}; const client = new RestClient({ token }); +// For ratelimiting purposes it is better to run these requests serially for (let i = 0; i < serverCount; i++) { + // oxlint-disable-next-line no-await-in-loop const guild = await client .post("/guilds", { name: `Statsify Ranks ${i + 1}` }) .then((res) => res.body.json); const channel = guild.system_channel_id; + // oxlint-disable-next-line no-await-in-loop const invite = await client .post(`/channels/${channel}/invites`, { type: 1 }) .then((res) => res.body.json); @@ -194,6 +195,7 @@ for (let i = 0; i < serverCount; i++) { const emoji = emojis[index]; + // oxlint-disable-next-line no-await-in-loop const emojiResolved = await client .post(`/guilds/${guild.id}/emojis`, { name: emoji.name, @@ -217,12 +219,12 @@ for (let i = 0; i < serverCount; i++) { } } -RANKS.filter((rank) => !COLOR_CHANGERS.includes(rank)).forEach((rank) => { +for (const rank of RANKS.filter((rank) => !COLOR_CHANGERS.includes(rank))) { json[rank] = json[rank].join(""); -}); +} -COLOR_CHANGERS.forEach((rank) => { - minecraftColors.forEach((color) => { +for (const rank of COLOR_CHANGERS) { + for (const color of minecraftColors) { const body = { ...json[rank]["SHARED"], ...json[rank][color.id], @@ -233,10 +235,10 @@ COLOR_CHANGERS.forEach((rank) => { .map((key) => body[key]) .filter(Boolean) .join(""); - }); + } - // eslint-disable-next-line @typescript-eslint/no-dynamic-delete + // oxlint-disable-next-line no-dynamic-delete delete json[rank]; -}); +} writeFileSync("../discord-bot/emojis.json", JSON.stringify(json, null, 2)); diff --git a/apps/scripts/src/timestamp.js b/apps/scripts/src/timestamp.js index 7c337d73c..f0c419016 100644 --- a/apps/scripts/src/timestamp.js +++ b/apps/scripts/src/timestamp.js @@ -70,25 +70,28 @@ const setTimestamps = async (collectionName) => { const bulkOperations = []; - players.forEach((pm) => { - const nextReset = getNextResetTime(pm.resetMinute, collectionName); - const lastReset = getLastResetTime(pm.resetMinute, collectionName); + for (const player of players) { + const nextReset = getNextResetTime(player.resetMinute, collectionName); + const lastReset = getLastResetTime(player.resetMinute, collectionName); bulkOperations.push({ updateOne: { - filter: { _id: pm._id }, + // mongodb object id's have a leading underscore + // oxlint-disable-next-line no-underscore-dangle + filter: { _id: player._id }, update: { $set: { nextReset, lastReset } }, }, }); - }); + } - if (!bulkOperations.length) + if (bulkOperations.length === 0) return console.log(`No players to update for ${collectionName}.`); - collection.bulkWrite(bulkOperations).then((res) => { - console.log( - `Updated ${res.modifiedCount}/${players.length} players for ${collectionName}.` - ); - }); + + const repsonse = await collection.bulkWrite(bulkOperations); + + console.log( + `Updated ${repsonse.modifiedCount}/${players.length} players for ${collectionName}.` + ); }; await setTimestamps("daily"); diff --git a/apps/scripts/src/validate-commands.js b/apps/scripts/src/validate-commands.js index 21ff23bc1..19d7c097c 100644 --- a/apps/scripts/src/validate-commands.js +++ b/apps/scripts/src/validate-commands.js @@ -52,20 +52,22 @@ const commandSchema = z.object({ type: z.optional(toEnum(1, 2, 3)), }); -Object.entries(commands.commands).forEach(([commandName, command]) => { +for (const [commandName, command] of Object.entries(commands.commands)) { try { commandSchema.parse(command); } catch (e) { console.error(e); console.log(command); - e.errors.forEach((e) => { - console.error(e.message); - console.error(`${command.name}.${e.path.join(".")}`); - }); + + for (const error of e.errors) { + console.error(error.message); + console.error(`${command.name}.${error.path.join(".")}`); + } + console.error(`Command "${commandName}" is invalid.`); process.exit(1); } -}); +} const commandChars = {}; diff --git a/apps/scripts/tsconfig.json b/apps/scripts/tsconfig.json index f1e6b476d..dd3fcc5f4 100644 --- a/apps/scripts/tsconfig.json +++ b/apps/scripts/tsconfig.json @@ -1,7 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": [ - "src", - "eslint.config.js" - ] + "include": ["src"] } \ No newline at end of file diff --git a/apps/site/.oxlintrc.jsonc b/apps/site/.oxlintrc.jsonc new file mode 100644 index 000000000..6d2bfedd8 --- /dev/null +++ b/apps/site/.oxlintrc.jsonc @@ -0,0 +1,72 @@ +{ + "$schema": "../../node_modules/oxlint/configuration_schema.json", + "extends": ["../../.oxlintrc.jsonc"], + "plugins": [ + "eslint", + "typescript", + "unicorn", + "oxc", + "import", + "node", + "promise", + "vitest", + "react", + "react-perf", + "jsx-a11y", + "nextjs", + ], + "rules": { + // React + "react/no-unstable-nested-components": "error", + "react/jsx-no-script-url": "error", + "react/jsx-no-comment-textnodes": "error", + "react/iframe-missing-sandbox": "error", + "react/no-unknown-property": "error", + "react/no-clone-element": "error", + "react/button-has-type": "error", + "react/no-object-type-as-default-prop": "error", + "react/jsx-no-constructed-context-values": "error", + "react/void-dom-elements-no-children": "error", + "react/no-children-prop": "error", + "react/jsx-key": "error", + "react/exhaustive-deps": "error", + "react/jsx-no-target-blank": "error", + "react/checked-requires-onchange-or-readonly": "error", + "react/jsx-no-useless-fragment": "error", + "react/no-unescaped-entities": "error", + "react/rules-of-hooks": "error", + + // Jsx A11y + "jsx-a11y/anchor-ambiguous-text": "error", + "jsx-a11y/tabindex-no-positive": "error", + "jsx-a11y/scope": "error", + "jsx-a11y/role-supports-aria-props": "error", + "jsx-a11y/role-has-required-aria-props": "error", + "jsx-a11y/no-static-element-interactions": "error", + "jsx-a11y/no-redundant-roles": "error", + "jsx-a11y/no-noninteractive-element-to-interactive-role": "error", + "jsx-a11y/no-noninteractive-element-interactions": "error", + "jsx-a11y/no-interactive-element-to-noninteractive-role": "error", + "jsx-a11y/no-autofocus": "error", + "jsx-a11y/no-aria-hidden-on-focusable": "error", + "jsx-a11y/mouse-events-have-key-events": "error", + "jsx-a11y/lang": "error", + "jsx-a11y/interactive-supports-focus": "error", + "jsx-a11y/img-redundant-alt": "error", + "jsx-a11y/iframe-has-title": "error", + "jsx-a11y/html-has-lang": "error", + "jsx-a11y/control-has-associated-label": "error", + "jsx-a11y/click-events-have-key-events": "error", + "jsx-a11y/autocomplete-valid": "error", + "jsx-a11y/aria-proptypes": "error", + "jsx-a11y/aria-props": "error", + "jsx-a11y/aria-activedescendant-has-tabindex": "error", + "jsx-a11y/anchor-has-content": "error", + "jsx-a11y/no-noninteractive-tabindex": "error", + "jsx-a11y/alt-text": "error", + + // Next Js + "nextjs/no-styled-jsx-in-document": "error", + "nextjs/no-html-link-for-pages": "error", + }, +} diff --git a/apps/site/app/(home)/session-animation.tsx b/apps/site/app/(home)/session-animation.tsx index cca8a1ba7..225290517 100644 --- a/apps/site/app/(home)/session-animation.tsx +++ b/apps/site/app/(home)/session-animation.tsx @@ -44,18 +44,18 @@ export function SessionAnimation() { ]); return () => controls.cancel(); - } else { - const controls = animate([ - ...typingRefs.current.map( - (ref) => [ref, { y: 10, opacity: 0 }, { duration: 0 }] satisfies ObjectSegmentWithTransition + } + + const controls = animate([ + ...typingRefs.current.map( + (ref) => [ref, { y: 10, opacity: 0 }, { duration: 0 }] satisfies ObjectSegmentWithTransition ), [profileRef.current, { opacity: 0, y: 20, filter: "blur(5px)" }, { duration: 0 }], [searchRef.current, { opacity: 1 }, { duration: 0 }], [daysBack, 0, { duration: 0 }], ]); - return () => controls.cancel(); - } + return () => controls.cancel(); }, [inView, animate, daysBack]); return ( diff --git a/apps/site/app/api/skin/head/route.ts b/apps/site/app/api/skin/head/route.ts index 8d3725cc6..a36dfc350 100644 --- a/apps/site/app/api/skin/head/route.ts +++ b/apps/site/app/api/skin/head/route.ts @@ -6,7 +6,7 @@ * https://github.com/Statsify/statsify/blob/main/LICENSE */ -import { type NextRequest } from "next/server"; +import type { NextRequest } from "next/server"; import { env } from "~/app/env"; export async function GET( diff --git a/apps/site/app/api/skin/render/route.ts b/apps/site/app/api/skin/render/route.ts index 51046ca49..2d24a9f05 100644 --- a/apps/site/app/api/skin/render/route.ts +++ b/apps/site/app/api/skin/render/route.ts @@ -6,7 +6,7 @@ * https://github.com/Statsify/statsify/blob/main/LICENSE */ -import { type NextRequest } from "next/server"; +import type { NextRequest } from "next/server"; import { env } from "~/app/env"; export async function GET( diff --git a/apps/site/app/players/[slug]/context.tsx b/apps/site/app/players/[slug]/context.tsx index 522cff124..b86eeb06d 100644 --- a/apps/site/app/players/[slug]/context.tsx +++ b/apps/site/app/players/[slug]/context.tsx @@ -8,29 +8,32 @@ "use client"; -import { type ReactNode, createContext, use } from "react"; +import { type ReactNode, createContext, use, useMemo } from "react"; import type { Player } from "@statsify/schemas"; const PlayerContext = createContext<{ player: Player | undefined }>({ player: undefined, }); -export const PlayerProvider = ({ player, children }: { +export const PlayerProvider = ({ + player, + children, +}: { player: Player; children: ReactNode; -}) => ( - - {children} - -); +}) => { + const value = useMemo(() => ({ player }), [player]); + return {children}; +}; export function usePlayer() { const { player } = use(PlayerContext); if (!player) { - throw new Error("Either usePlayer isn't being used in a PlayerContext or the player doesn't exist"); + throw new Error( + "Either usePlayer isn't being used in a PlayerContext or the player doesn't exist", + ); } return player; } - diff --git a/apps/site/app/players/[slug]/general/bingo/bingo.tsx b/apps/site/app/players/[slug]/general/bingo/bingo.tsx index a42c2c3c7..f9f663b99 100644 --- a/apps/site/app/players/[slug]/general/bingo/bingo.tsx +++ b/apps/site/app/players/[slug]/general/bingo/bingo.tsx @@ -84,8 +84,8 @@ function completetionColor(completion: number) { function CategoryOverview({ category, icon }: { category: Category; icon: StaticImport }) { const player = usePlayer(); - const [_, setCategory] = useUrlState("category", CategorySchema, "casual"); - const [__, setDifficulty] = useUrlState("difficulty", DifficultySchema, "easy"); + const [, setCategory] = useUrlState("category", CategorySchema, "casual"); + const [, setDifficulty] = useUrlState("difficulty", DifficultySchema, "easy"); const easyBingo = player.stats.general.bingo.easy[category]; const hardBingo = player.stats.general.bingo.hard[category]; @@ -107,7 +107,8 @@ function CategoryOverview({ category, icon }: { category: Category; icon: Static

{FormattedCategories[category]} Bingo Cards

-

{ setCategory(category); @@ -117,8 +118,9 @@ function CategoryOverview({ category, icon }: { category: Category; icon: Static Easy:{" "} {easyCompletion} /16 completed -

-

+

); diff --git a/apps/site/app/players/search.tsx b/apps/site/app/players/search.tsx index 96b25b7ad..64383e338 100644 --- a/apps/site/app/players/search.tsx +++ b/apps/site/app/players/search.tsx @@ -90,31 +90,6 @@ export function Search({ console.log(`Redirecting to ${playerUrl(query)}`); router.push(playerUrl(query)); }} - onKeyDown={(event) => { - if (event.key === "Enter") { - ref.current?.requestSubmit(); - } - - if (suggestions.isPending || suggestions.isError) return; - - switch (event.key) { - case "Escape": - setSelected(undefined); - break; - - case "ArrowDown": { - const newSelected = ((selected ?? -1) + 1) % suggestions.data.length; - onSelectionChange(newSelected); - break; - } - - case "ArrowUp": { - const newSelected = selected ? selected - 1 : suggestions.data.length - 1; - onSelectionChange(newSelected); - break; - } - } - }} >
@@ -127,10 +102,36 @@ export function Search({ setQuery(event.target.value); setInput(event.target.value); }} + onKeyDown={(event) => { + if (event.key === "Enter") { + ref.current?.requestSubmit(); + } + + if (suggestions.isPending || suggestions.isError) return; + + switch (event.key) { + case "Escape": + setSelected(undefined); + break; + + case "ArrowDown": { + const newSelected = ((selected ?? -1) + 1) % suggestions.data.length; + onSelectionChange(newSelected); + break; + } + + case "ArrowUp": { + const newSelected = selected ? selected - 1 : suggestions.data.length - 1; + onSelectionChange(newSelected); + break; + } + } + }} spellCheck={false} autoComplete="off" disabled={disabled} onFocus={() => setFocused(true)} + aria-label="Search players" />
{/* Crossfade between oldBackground and currentBackground */} - {oldBackground.current && oldBackground.current != background && ( + {oldBackground.current && oldBackground.current !== background && ( = BoxOnlyPro keyof BoxOnlyProps >; +const DEFAULT_BORDER_RADIUS_PROP: BoxBorderRadius = {}; + export function Box({ - borderRadius: partialBorderRadius = {}, + borderRadius: partialBorderRadius = DEFAULT_BORDER_RADIUS_PROP, shadow = 8, className, variant = "default", diff --git a/apps/site/components/ui/carousel.tsx b/apps/site/components/ui/carousel.tsx index b76d7161b..c2d670f4e 100644 --- a/apps/site/components/ui/carousel.tsx +++ b/apps/site/components/ui/carousel.tsx @@ -116,6 +116,8 @@ export function Carousel({ children, className }: { children: ReactNode; classNa {cards.map((_, index) => ( ); } diff --git a/apps/site/components/ui/minecraft-text.tsx b/apps/site/components/ui/minecraft-text.tsx index f7d59bc13..82f364cc5 100644 --- a/apps/site/components/ui/minecraft-text.tsx +++ b/apps/site/components/ui/minecraft-text.tsx @@ -68,7 +68,7 @@ export function MinecraftText({ children, className }: { children: string | stri } } - if (!text.length) return undefined; + if (text.length === 0) return undefined; return {text}; }).filter((element) => element !== undefined); diff --git a/apps/site/components/ui/tabs.tsx b/apps/site/components/ui/tabs.tsx index f4be6eae8..02468ee8c 100644 --- a/apps/site/components/ui/tabs.tsx +++ b/apps/site/components/ui/tabs.tsx @@ -9,7 +9,7 @@ "use client"; import { Box } from "~/components/ui/box"; -import { type ComponentProps, createContext, use, useState } from "react"; +import { type ComponentProps, createContext, use, useState, useMemo, useCallback } from "react"; import { SkeletonBox } from "./skeleton-box"; import { cn } from "~/lib/util"; @@ -41,15 +41,17 @@ export function Tabs({ }: TabsProps) { const [internalTab, setInternalTab] = useState(defaultTab as T); - function onTabChange(tab: T) { + const onTabChange = useCallback((tab: T) => { setInternalTab(tab); externalOnTabChange?.(tab); - } + }, [externalOnTabChange]); const tab = externalTab ?? internalTab; + const value = useMemo(() => ({ tab, onTabChange: onTabChange as (tab: string | number) => void }), [tab, onTabChange]); + return ( - void }}> +
(ref: RefObject) { const [size, setSize] = useState({ width: 0, height: 0 }); // This must check for window since ResizeObserver only exists on the web - // eslint-disable-next-line unicorn/prefer-global-this const observer = useMemo(() => typeof window !== "undefined" && window.ResizeObserver ? new ResizeObserver((entries) => setSize(entries[0].contentRect)) : undefined, []); useEffect(() => { diff --git a/apps/site/package.json b/apps/site/package.json index 9f20e87c8..c70cfefcc 100644 --- a/apps/site/package.json +++ b/apps/site/package.json @@ -6,7 +6,8 @@ "dev": "next dev --turbopack -p 5000", "build": "next build", "start": "next start", - "lint": "eslint" + "lint": "oxlint", + "lint:ci": "oxlint --format=github" }, "dependencies": { "@radix-ui/react-popover": "^1.1.15", @@ -20,21 +21,18 @@ "next": "^16.0.7", "react": "^19.2.1", "react-dom": "^19.2.1", - "tailwind-merge": "^3.4.0", + "tailwind-merge": "^3.6.0", "zod": "^4.1.5" }, "devDependencies": { - "@eslint/eslintrc": "^3.2.0", "@statsify/api-client": "workspace:^", - "@tailwindcss/postcss": "4.1.17", - "@types/node": "^24.3.0", - "@types/react": "^19.2.7", + "@tailwindcss/postcss": "4.3.0", + "@types/node": "^25.9.1", + "@types/react": "^19.2.16", "@types/react-dom": "^19.2.3", - "eslint": "^9.19.0", - "eslint-config-next": "15.5.2", "mongoose": "^8.18.0", - "postcss": "^8.5.3", - "tailwindcss": "^4.1.17", - "typescript": "^5.7.3" + "postcss": "^8.5.15", + "tailwindcss": "^4.3.0", + "typescript": "^6.0.3" } -} \ No newline at end of file +} diff --git a/apps/support-bot/package.json b/apps/support-bot/package.json index 5f953fc9a..dab026189 100644 --- a/apps/support-bot/package.json +++ b/apps/support-bot/package.json @@ -7,8 +7,9 @@ "scripts": { "start": "node --enable-source-maps .", "build": "swc src --out-dir dist --strip-leading-paths", - "test:types": "tsc --noEmit", - "lint": "eslint" + "typecheck": "tsgo --noEmit", + "lint": "oxlint", + "lint:ci": "oxlint --format=github" }, "dependencies": { "@sentry/node": "^7.118.0", @@ -19,14 +20,14 @@ "@statsify/rendering": "workspace:^", "@statsify/schemas": "workspace:^", "@statsify/util": "workspace:^", - "@swc/helpers": "^0.5.12", + "@swc/helpers": "^0.5.23", "@typegoose/typegoose": "^12.6.0", "axios": "1.11.0", "discord-api-types": "^0.38.22", "luxon": "^3.5.0", "mongoose": "^8.5.2", "reflect-metadata": "^0.2.2", - "skia-canvas": "https://github.com/samizdatco/skia-canvas/releases/download/v0.9.30/skia-canvas-v0.9.30-linux-x64-glibc.tar.gz", + "skia-canvas": "3.0.8", "tiny-discord": "https://github.com/timotejroiko/tiny-discord.git#f6d020085ea88e33ebaf6ce323930deffe74fb0d", "toad-scheduler": "^3.0.1", "typedi": "^0.10.0" @@ -48,4 +49,4 @@ "default": "./dist/lib/index.js" } } -} \ No newline at end of file +} diff --git a/apps/support-bot/src/commands/commands.command.ts b/apps/support-bot/src/commands/commands.command.ts index f63534aac..c532e7457 100644 --- a/apps/support-bot/src/commands/commands.command.ts +++ b/apps/support-bot/src/commands/commands.command.ts @@ -12,7 +12,7 @@ import { CommandContext, EmbedBuilder, ErrorMessage, - PaginateService, + scrollingPagination, TextArgument, } from "@statsify/discord"; import { STATUS_COLORS } from "@statsify/logger"; @@ -28,10 +28,7 @@ const COMMANDS_PER_PAGE = 25; userCommand: false, }) export class CommandsCommand { - public constructor( - private readonly apiService: ApiService, - private readonly paginateService: PaginateService - ) {} + public constructor(private readonly apiService: ApiService) {} public async run(context: CommandContext) { const commands = await this.apiService.getCommandUsage(); @@ -44,7 +41,7 @@ export class CommandsCommand { const commandList = Object.entries(commands).sort((a, b) => b[1] - a[1]); const groups = arrayGroup(commandList, COMMANDS_PER_PAGE); - return this.paginateService.scrollingPagination( + return scrollingPagination( context, groups.map( (group, index) => () => diff --git a/apps/support-bot/src/events/guild-member-add.event.tsx b/apps/support-bot/src/events/guild-member-add.event.tsx index e3c9db69a..7113a42ac 100644 --- a/apps/support-bot/src/events/guild-member-add.event.tsx +++ b/apps/support-bot/src/events/guild-member-add.event.tsx @@ -70,7 +70,7 @@ export class GuildMemberAddEventListener extends AbstractEventListener { - const avatar = member.user?.avatar ?? member.avatar; - - if (avatar) - return loadImage( - `https://cdn.discordapp.com/avatars/${member.user!.id}/${avatar}.png?size=96` - ); - - return loadImage( - `https://cdn.discordapp.com/embed/avatars/${ - Number(member.user!.discriminator) % 5 - }.png?size=96` - ); - } - private async sendVerifiedMessage(member: APIGuildMember): Promise { await this.roleService.addRole(GUILD_ID, member.user!.id, MEMBER_ROLE); await this.apiService.updateUser(member.user!.id, { serverMember: true }); const embed = new EmbedBuilder() - .description(`<@${member.user!.id}> ${this.randomJoinMessage()}`) + .description(`<@${member.user!.id}> ${randomJoinMessage()}`) .image("attachment://welcome.png") .color(STATUS_COLORS.info); @@ -127,14 +112,27 @@ export class GuildMemberAddEventListener extends AbstractEventListener ${this.randomJoinMessage()}`) + .description(`<@${member.user!.id}> ${randomJoinMessage()}`) .image("attachment://welcome.png") .color(STATUS_COLORS.info); return { embeds: [embed] }; } +} - private randomJoinMessage() { - return JOIN_MESSAGES[Math.floor(Math.random() * JOIN_MESSAGES.length)]; - } +function getDiscordAvatar(member: APIGuildMember): Promise { + const avatar = member.user?.avatar ?? member.avatar; + + if (avatar) + return loadImage( + `https://cdn.discordapp.com/avatars/${member.user!.id}/${avatar}.png?size=96` + ); + + return loadImage( + `https://cdn.discordapp.com/embed/avatars/${ + Number(member.user!.discriminator) % 5 + }.png?size=96` + ); } + +const randomJoinMessage = () => JOIN_MESSAGES[Math.floor(Math.random() * JOIN_MESSAGES.length)]; \ No newline at end of file diff --git a/apps/support-bot/src/events/guild-member-update.event.ts b/apps/support-bot/src/events/guild-member-update.event.ts index f4c396568..35a5128bf 100644 --- a/apps/support-bot/src/events/guild-member-update.event.ts +++ b/apps/support-bot/src/events/guild-member-update.event.ts @@ -123,11 +123,11 @@ export class GuildMemberUpdateEventListener extends AbstractEventListener { + for (const user of users) { if (user.tier in this.tiers) this.tiers[user.tier as PremiumTier].add(user.id); if (user.patreon) this.patreons.add(user.id); if (user.serverBooster) this.serverBoosters.add(user.id); - }); + } } private findTier(memberId: string) { diff --git a/apps/support-bot/src/index.ts b/apps/support-bot/src/index.ts index 0e080f671..59a2f43e9 100644 --- a/apps/support-bot/src/index.ts +++ b/apps/support-bot/src/index.ts @@ -9,10 +9,10 @@ import * as Sentry from "@sentry/node"; import { CommandListener } from "#lib"; import { - CommandLoader, CommandPoster, - EventLoader, I18nLoaderService, + loadCommands, + loadEvents, } from "@statsify/discord"; import { Container } from "typedi"; import { @@ -25,12 +25,11 @@ import { GatewayIntentBits } from "discord-api-types/v10"; import { Logger } from "@statsify/logger"; import { RestClient, WebsocketShard } from "tiny-discord"; import { config } from "@statsify/util"; -import { dirname, join } from "node:path"; -import { fileURLToPath } from "node:url"; +import { join } from "node:path"; import { setGlobalOptions } from "@typegoose/typegoose"; import "reflect-metadata"; -const __dirname = dirname(fileURLToPath(import.meta.url)); +const directory = import.meta.dirname; const logger = new Logger("support-bot"); const handleError = logger.error.bind(logger); @@ -61,10 +60,12 @@ await Promise.all( ) ); -const commands = await CommandLoader.load(join(__dirname, "./commands")); +const commands = await loadCommands(join(directory, "./commands")); const tags = await Container.get(TagService).fetch(); -tags.forEach((tag) => commands.set(tag.name, tag)); +for (const tag of tags) { + commands.set(tag.name, tag); +} const poster = Container.get(CommandPoster); @@ -83,7 +84,7 @@ const websocket = new WebsocketShard({ GatewayIntentBits.MessageContent, }); -await EventLoader.load(websocket, join(__dirname, "./events")); +await loadEvents(websocket, join(directory, "./events")); const listener = CommandListener.create(websocket, rest, commands); Container.get(TicketService).init(); diff --git a/apps/support-bot/src/services/mongo-loader.service.ts b/apps/support-bot/src/services/mongo-loader.service.ts index dbcc1f250..028bbfde5 100644 --- a/apps/support-bot/src/services/mongo-loader.service.ts +++ b/apps/support-bot/src/services/mongo-loader.service.ts @@ -19,9 +19,9 @@ export class MongoLoaderService { const models = [Ticket, Tag, User]; - models.forEach((modelClass) => { + for (const modelClass of models) { const model = getModelForClass(modelClass, { existingConnection: connection }); Container.set(modelClass, model); - }); + } } } diff --git a/apps/support-bot/src/services/ticket.service.ts b/apps/support-bot/src/services/ticket.service.ts index 7f74f27d9..519656503 100644 --- a/apps/support-bot/src/services/ticket.service.ts +++ b/apps/support-bot/src/services/ticket.service.ts @@ -88,7 +88,7 @@ export class TicketService { // Add hooks for all tickets in the database since they may have been created before the bot was started const tickets = await this.ticketModel.find().select({ channel: true }).lean().exec(); - tickets.forEach((ticket) => { + for (const ticket of tickets) { listener.addHook(ticket.channel, (interaction) => this.close(interaction.getChannelId()!, "channel", interaction.getUserId()) ); @@ -97,7 +97,7 @@ export class TicketService { this.copyUsernameButtonId(ticket.channel), this.copyUsername.bind(this) ); - }); + } } public async create(guildId: string, user: APIUser, username: string, issue: string) { @@ -202,12 +202,11 @@ export class TicketService { listener.removeHook(this.copyUsernameButtonId(ticket.channel)); // A list of people who talked in the ticket - const participants: Set = new Set(); - participants.add(`<@${ticket.owner}>`); + const participants: Set = new Set(`<@${ticket.owner}>`); const logs: string[] = []; - messages.forEach((m) => { + for (const m of messages) { if (!m.author.bot) participants.add(`<@${m.author.id}>`); const message = [ @@ -216,7 +215,7 @@ export class TicketService { ].join("\n"); logs.push(message); - }); + } const embed = new EmbedBuilder() .title("Ticket Resolved") diff --git a/apps/support-bot/tsconfig.json b/apps/support-bot/tsconfig.json index 1522cd368..042ff5467 100644 --- a/apps/support-bot/tsconfig.json +++ b/apps/support-bot/tsconfig.json @@ -3,8 +3,5 @@ "compilerOptions": { "jsx": "preserve", }, - "include": [ - "src", - "eslint.config.js" - ] + "include": ["src"] } \ No newline at end of file diff --git a/apps/verify-server/eslint.config.js b/apps/verify-server/eslint.config.js deleted file mode 100644 index 3325f85ed..000000000 --- a/apps/verify-server/eslint.config.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Copyright (c) Statsify - * - * This source code is licensed under the GNU GPL v3 license found in the - * LICENSE file in the root directory of this source tree. - * https://github.com/Statsify/statsify/blob/main/LICENSE - */ - -import { defineConfig } from "../../eslint.config.js"; - -export default defineConfig({ tsconfigDirName: import.meta.dirname }); diff --git a/apps/verify-server/package.json b/apps/verify-server/package.json index 208f341e8..5503fdbc0 100644 --- a/apps/verify-server/package.json +++ b/apps/verify-server/package.json @@ -7,8 +7,9 @@ "scripts": { "start": "node --enable-source-maps .", "build": "swc src --config-file ../../.swcrc --out-dir dist --strip-leading-paths", - "test:types": "tsc --noEmit", - "lint": "eslint" + "typecheck": "tsgo --noEmit", + "lint": "oxlint", + "lint:ci": "oxlint --format=github" }, "dependencies": { "@sentry/node": "^7.118.0", @@ -16,9 +17,9 @@ "@statsify/logger": "workspace:^", "@statsify/schemas": "workspace:^", "@statsify/util": "workspace:^", - "@swc/helpers": "^0.5.12", + "@swc/helpers": "^0.5.23", "@typegoose/typegoose": "^12.6.0", "minecraft-protocol": "^1.61.0", "mongoose": "^8.5.2" } -} \ No newline at end of file +} diff --git a/apps/verify-server/src/generate-code.ts b/apps/verify-server/src/generate-code.ts index 31dacf1f8..9ddc95c0e 100644 --- a/apps/verify-server/src/generate-code.ts +++ b/apps/verify-server/src/generate-code.ts @@ -9,14 +9,16 @@ import type { ReturnModelType } from "@typegoose/typegoose"; import type { VerifyCode } from "@statsify/schemas"; -const createCode = () => Math.floor(Math.random() * (9999 - 1000 + 1) + 1000).toString(); +const createCode = () => + Math.floor(Math.random() * (9999 - 1000 + 1) + 1000).toString(); export const generateCode = async ( - verifyCodesModel: ReturnModelType + verifyCodesModel: ReturnModelType, ) => { let code = createCode(); - // Make sure the code is unique + // Make sure the code is unique by serially checking if each generated code already exists + // oxlint-disable-next-line no-await-in-loop while (await verifyCodesModel.exists({ code }).lean().exec()) { code = createCode(); } diff --git a/apps/verify-server/tsconfig.json b/apps/verify-server/tsconfig.json index f1e6b476d..dd3fcc5f4 100644 --- a/apps/verify-server/tsconfig.json +++ b/apps/verify-server/tsconfig.json @@ -1,7 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": [ - "src", - "eslint.config.js" - ] + "include": ["src"] } \ No newline at end of file diff --git a/assets/private b/assets/private index 1ed6d877f..38a97e46e 160000 --- a/assets/private +++ b/assets/private @@ -1 +1 @@ -Subproject commit 1ed6d877fe5cc3bc80ade9d7654752edc8ba0a3e +Subproject commit 38a97e46ee32b939b0f617bfd66a8833c7c6e619 diff --git a/assets/public b/assets/public index 25cf23500..cf87904f4 160000 --- a/assets/public +++ b/assets/public @@ -1 +1 @@ -Subproject commit 25cf2350076387df9e8a37388ae48f4a931e9966 +Subproject commit cf87904f476e88e8bb31fa47f4dc2a569628ddbd diff --git a/compose.dev.yml b/compose.dev.yml new file mode 100644 index 000000000..f17507185 --- /dev/null +++ b/compose.dev.yml @@ -0,0 +1,21 @@ +services: + redis: + image: docker.io/redis/redis-stack:latest + restart: unless-stopped + ports: + - "127.0.0.1:8001:8001" + - "127.0.0.1:6379:6379" + volumes: + - "./data/redis:/data" + environment: + REDIS_ARGS: "--requirepass statsify" + mongodb: + image: mongo:latest + restart: unless-stopped + ports: + - "27017:27017" + environment: + MONGO_INITDB_ROOT_USERNAME: statsify + MONGO_INITDB_ROOT_PASSWORD: statsify + volumes: + - "./data/mongodb:/data/db" diff --git a/config.schema.js b/config.schema.js index e4f31c328..4317d8ae2 100644 --- a/config.schema.js +++ b/config.schema.js @@ -11,8 +11,8 @@ */ export default { database: { - mongoUri: "", - redisUrl: "", + mongoUri: "mongodb://statsify:statsify@localhost:27017/statsify?authSource=admin", + redisUrl: "redis://:statsify@localhost:6379", }, hypixelApi: { key: "", diff --git a/eslint.config.js b/eslint.config.js deleted file mode 100644 index 4ea4ffe24..000000000 --- a/eslint.config.js +++ /dev/null @@ -1,235 +0,0 @@ -/** - * Copyright (c) Statsify - * - * This source code is licensed under the GNU GPL v3 license found in the - * LICENSE file in the root directory of this source tree. - * https://github.com/Statsify/statsify/blob/main/LICENSE - */ - -import eslint from "@eslint/js"; -import licenseHeader from "eslint-plugin-license-header"; -import sortImports from "@j4cobi/eslint-plugin-sort-imports"; -import stylistic from "@stylistic/eslint-plugin"; -import tseslint from "typescript-eslint"; -import unusedImports from "eslint-plugin-unused-imports"; -import unicorn from "eslint-plugin-unicorn"; -import { join } from "node:path"; - -/** - * - * @param {{ tsconfigDirName: string }} config - * @returns workspace eslint config - */ -export function defineConfig({ tsconfigDirName }) { - return tseslint.config( - { ignores: ["dist", "node_modules", ".next", "pkg"] }, - eslint.configs.recommended, - ...tseslint.configs.strict, - { - languageOptions: { - parserOptions: { - project: [join(tsconfigDirName, "./tsconfig.json")], - tsconfigDirName - } - }, - rules: { - "@typescript-eslint/ban-ts-comment": [ - "error", - { - "minimumDescriptionLength": 3, - "ts-check": true, - "ts-expect-error": "allow-with-description", - "ts-ignore": "allow-with-description", - "ts-nocheck": true, - }, - ], - "@typescript-eslint/default-param-last": "error", - "@typescript-eslint/explicit-member-accessibility": "error", - "@typescript-eslint/member-ordering": [ - "error", - { - default: [ - "signature", - "public-instance-field", - "protected-instance-field", - "private-instance-field", - "instance-field", - "public-static-field", - "protected-static-field", - "private-static-field", - "static-field", - "public-constructor", - "protected-constructor", - "private-constructor", - "constructor", - "public-instance-method", - "protected-instance-method", - "private-instance-method", - "instance-method", - "public-static-method", - "protected-static-method", - "private-static-method", - "static-method", - ], - }, - ], - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-unsafe-declaration-merging": "off", - "@typescript-eslint/no-unsafe-argument": "off", - "@typescript-eslint/no-unsafe-assignment": "off", - "@typescript-eslint/no-unsafe-call": "off", - "@typescript-eslint/no-unsafe-return": "off", - "@typescript-eslint/no-unused-vars": "off", - "@typescript-eslint/no-extraneous-class": "off" - } - }, - unicorn.configs["flat/recommended"], - { - rules: { - "unicorn/better-regex": "off", - "unicorn/catch-error-name": "off", - "unicorn/consistent-destructuring": "off", - "unicorn/escape-case": "off", - "unicorn/explicit-length-check": "off", - "unicorn/filename-case": "off", - "unicorn/import-style": [ - "error", - { - styles: { - "node:path": { - named: true, - default: false, - }, - }, - }, - ], - "unicorn/no-array-callback-reference": "off", - "unicorn/no-array-for-each": "off", - "unicorn/no-array-reduce": "off", - "unicorn/no-await-expression-member": "off", - "unicorn/no-null": "off", - "unicorn/no-object-as-default": "off", - "unicorn/no-process-exit": "off", - "unicorn/no-static-only-class": "off", - "unicorn/no-useless-switch-case": "off", - "unicorn/no-useless-undefined": "off", - "unicorn/number-literal-case": "off", - "unicorn/numeric-separators-style": [ - "error", - { - onlyIfContainsSeparator: true, - number: { - minimumDigits: 5, - groupLength: 3, - onlyIfContainsSeparator: false, - }, - }, - ], - "unicorn/prefer-at": "error", - "unicorn/prefer-string-replace-all": "off", - "unicorn/prevent-abbreviations": "off", - "unicorn/relative-url-style": ["error", "always"], - "unicorn/switch-case-braces": ["error", "avoid"], - "unused-imports/no-unused-imports": "error", - "unused-imports/no-unused-vars": [ - "error", - { - vars: "all", - varsIgnorePattern: "^_", - args: "after-used", - argsIgnorePattern: "^_", - }, - ], - } - }, - stylistic.configs.customize({ - jsx: true, - semi: true, - quotes: "double", - quoteProps: "consistent-as-needed", - braceStyle: "1tbs", - arrowParens: "always", - }), - { - rules: { - "@stylistic/no-extra-semi": "error", - "@stylistic/no-floating-decimal": "error", - "@stylistic/quote-props": ["error", "consistent-as-needed"], - "@stylistic/no-multiple-empty-lines": ["error", { max: 1, maxEOF: 1 }], - "@stylistic/comma-dangle": [ - "error", - { - arrays: "always-multiline", - objects: "always-multiline", - imports: "always-multiline", - exports: "always-multiline", - functions: "never", - }, - ], - "@stylistic/generator-star-spacing": ["error", { before: false, after: true }], - "@stylistic/indent": ["error", 2, { SwitchCase: 1 }], - "@stylistic/max-len": [ - "error", - { - code: 120, - tabWidth: 2, - ignoreComments: true, - ignoreTrailingComments: true, - ignoreUrls: true, - ignoreStrings: true, - ignoreTemplateLiterals: true, - ignoreRegExpLiterals: true, - }, - ], - "@stylistic/type-generic-spacing": "error", - "@stylistic/yield-star-spacing": ["error", { before: false, after: true }], - "@stylistic/jsx-one-expression-per-line": "off", - "@stylistic/operator-linebreak": ["error", "after"] - } - }, - { - plugins: { - "license-header": licenseHeader, - "sort-imports": sortImports, - "unused-imports": unusedImports, - }, - rules: { - "arrow-body-style": ["error", "as-needed"], - "license-header/header": [ - "error", - [ - "/**", - " * Copyright (c) Statsify", - " *", - " * This source code is licensed under the GNU GPL v3 license found in the", - " * LICENSE file in the root directory of this source tree.", - " * https://github.com/Statsify/statsify/blob/main/LICENSE", - " */", - ], - ], - "import/no-anonymous-default-export": "off", - "no-constant-binary-expression": "error", - "no-constructor-return": "error", - "no-duplicate-imports": "error", - "no-lonely-if": "error", - "object-shorthand": ["error", "always"], - "one-var": ["error", "never"], - "prefer-template": "error", - "sort-imports/sort-imports": [ - "error", - { - ignoreCase: false, - ignoreMemberSort: false, - memberSyntaxSortOrder: [ - "all", - "single", - "multiple", - "none", - ], - }, - ] - } - } - ); -} \ No newline at end of file diff --git a/locales/en-US/default.json b/locales/en-US/default.json index b66f3e884..ebb1b3d33 100644 --- a/locales/en-US/default.json +++ b/locales/en-US/default.json @@ -748,6 +748,7 @@ "seekerWins": "Seeker Wins", "shotAccuracy": "Shot Accuracy", "shotsFired": "Shots Fired", + "shotsHit": "Shots Hit", "silver": "Silver", "silverTrophies": "Silver Trophies", "slumberTickets": "Slumber Tickets", diff --git a/package.json b/package.json index 4b886a783..11b347740 100644 --- a/package.json +++ b/package.json @@ -9,15 +9,15 @@ "url": "git+https://github.com/Statsify/statsify.git" }, "scripts": { - "build": "turbo run build --filter=!site --parallel --cache-dir='.turbo'", + "build": "turbo run build --filter=!site", "build:watch": "turbo watch build --filter=!site", - "test:types": "turbo run test:types --cache-dir='.turbo'", + "typecheck": "turbo run typecheck", "test": "vitest", "test:ui": "vitest --ui", "test:coverage": "vitest run --coverage", - "lint": "turbo run lint --parallel --cache-dir='.turbo'", - "pre-commit": "pnpm lint && pnpm test:types && pnpm test:coverage && git add .", - "commit": "pnpm pre-commit && git cz", + "lint": "turbo run lint", + "lint:ci": "turbo run lint:ci", + "fmt": "turbo run fmt", "api": "pnpm --filter api", "discord-bot": "pnpm --filter discord-bot", "support-bot": "pnpm --filter support-bot", @@ -26,46 +26,23 @@ "verify-server": "pnpm --filter verify-server" }, "packageManager": "pnpm@10.15.0", - "pnpm": { - "overrides": { - "skia-canvas": "3.0.8" - } - }, "devDependencies": { - "@commitlint/cli": "^19.6.1", - "@commitlint/config-conventional": "^19.6.0", - "@eslint/js": "^9.19.0", "@j4cobi/eslint-plugin-sort-imports": "^1.0.2", - "@napi-rs/cli": "^3.1.5", + "@napi-rs/cli": "^3.7.0", "@rollup/pluginutils": "^5.1.0", - "@stylistic/eslint-plugin": "^5.2.3", - "@swc/cli": "^0.7.8", - "@swc/core": "1.13.5", - "@types/eslint__js": "^9.14.0", - "@types/node": "^24.3.0", - "@vitest/coverage-v8": "^3.0.4", - "@vitest/ui": "^3.0.4", - "commitizen": "^4.3.1", - "cz-conventional-changelog": "^3.3.0", - "eslint": "^9.19.0", - "eslint-plugin-license-header": "^0.8.0", - "eslint-plugin-unicorn": "^60.0.0", - "eslint-plugin-unused-imports": "^4.1.4", + "@swc/cli": "^0.8.1", + "@swc/core": "1.15.40", + "@types/node": "^25.9.1", + "@typescript/native-preview": "7.0.0-dev.20260601.1", + "@vitest/coverage-v8": "^4.1.8", + "@vitest/ui": "^4.1.8", + "eslint-plugin-license-header": "^0.9.0", + "oxfmt": "^0.53.0", + "oxlint": "^1.68.0", "pm2": "^6.0.8", - "turbo": "^2.4.0", - "typescript": "^5.7.3", - "typescript-eslint": "^8.22.0", - "unplugin": "^2.1.2", - "vitest": "^3.0.4" - }, - "commitlint": { - "extends": [ - "@commitlint/config-conventional" - ] - }, - "config": { - "commitizen": { - "path": "./node_modules/cz-conventional-changelog" - } + "turbo": "^2.9.16", + "typescript": "^6.0.3", + "unplugin": "^3.0.0", + "vitest": "^4.1.8" } -} \ No newline at end of file +} diff --git a/packages/api-client/eslint.config.js b/packages/api-client/eslint.config.js deleted file mode 100644 index 3325f85ed..000000000 --- a/packages/api-client/eslint.config.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Copyright (c) Statsify - * - * This source code is licensed under the GNU GPL v3 license found in the - * LICENSE file in the root directory of this source tree. - * https://github.com/Statsify/statsify/blob/main/LICENSE - */ - -import { defineConfig } from "../../eslint.config.js"; - -export default defineConfig({ tsconfigDirName: import.meta.dirname }); diff --git a/packages/api-client/package.json b/packages/api-client/package.json index 791a0f748..d911fa1fb 100644 --- a/packages/api-client/package.json +++ b/packages/api-client/package.json @@ -6,8 +6,9 @@ "type": "module", "scripts": { "build": "swc src --config-file ../../.swcrc --out-dir dist --strip-leading-paths", - "test:types": "tsc --noEmit", - "lint": "eslint" + "typecheck": "tsgo --noEmit", + "lint": "oxlint", + "lint:ci": "oxlint --format=github" }, "dependencies": { "@nestjs/common": "^11.1.6", @@ -16,7 +17,7 @@ "@statsify/rendering": "workspace:^", "@statsify/schemas": "workspace:^", "@statsify/util": "workspace:^", - "@swc/helpers": "^0.5.12", + "@swc/helpers": "^0.5.23", "axios": "^1.11.0" }, "imports": { @@ -29,4 +30,4 @@ "default": "./dist/responses/index.js" } } -} \ No newline at end of file +} diff --git a/packages/api-client/src/api.service.ts b/packages/api-client/src/api.service.ts index b2d1d7677..f43108367 100644 --- a/packages/api-client/src/api.service.ts +++ b/packages/api-client/src/api.service.ts @@ -7,7 +7,7 @@ */ import * as Sentry from "@sentry/node"; -import Axios, { AxiosInstance, AxiosRequestHeaders, Method, ResponseType } from "axios"; +import axios, { AxiosInstance, AxiosRequestHeaders, Method, ResponseType } from "axios"; import { CacheLevel, GuildQuery, @@ -55,7 +55,7 @@ export class ApiService { private axios: AxiosInstance; public constructor(private apiRoute: string, private apiKey: string) { - this.axios = Axios.create({ + this.axios = axios.create({ baseURL: this.apiRoute, headers: { "x-api-key": this.apiKey, diff --git a/packages/api-client/tsconfig.json b/packages/api-client/tsconfig.json index f1e6b476d..dd3fcc5f4 100644 --- a/packages/api-client/tsconfig.json +++ b/packages/api-client/tsconfig.json @@ -1,7 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": [ - "src", - "eslint.config.js" - ] + "include": ["src"] } \ No newline at end of file diff --git a/packages/assets/eslint.config.js b/packages/assets/eslint.config.js deleted file mode 100644 index 3325f85ed..000000000 --- a/packages/assets/eslint.config.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Copyright (c) Statsify - * - * This source code is licensed under the GNU GPL v3 license found in the - * LICENSE file in the root directory of this source tree. - * https://github.com/Statsify/statsify/blob/main/LICENSE - */ - -import { defineConfig } from "../../eslint.config.js"; - -export default defineConfig({ tsconfigDirName: import.meta.dirname }); diff --git a/packages/assets/package.json b/packages/assets/package.json index e68ff387f..9956e5ed3 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -6,14 +6,15 @@ "type": "module", "scripts": { "build": "swc src --config-file ../../.swcrc --out-dir dist --strip-leading-paths", - "test:types": "tsc --noEmit", - "lint": "eslint" + "typecheck": "tsgo --noEmit", + "lint": "oxlint", + "lint:ci": "oxlint --format=github" }, "dependencies": { "@statsify/logger": "workspace:^", "@statsify/schemas": "workspace:^", - "@swc/helpers": "^0.5.12", + "@swc/helpers": "^0.5.23", "axios": "1.11.0", - "skia-canvas": "https://github.com/samizdatco/skia-canvas/releases/download/v0.9.30/skia-canvas-v0.9.30-linux-x64-glibc.tar.gz" + "skia-canvas": "3.0.8" } -} \ No newline at end of file +} diff --git a/packages/assets/src/index.ts b/packages/assets/src/index.ts index dae04fd37..6f4d43896 100644 --- a/packages/assets/src/index.ts +++ b/packages/assets/src/index.ts @@ -30,8 +30,8 @@ const getImage = (path: string) => loadImage(getAssetPath(path)); * @returns the full path to the texture */ export const getMinecraftTexturePath = (texturePath: string, pack = "default") => { - if (!hasPrivateAssets) pack = "default"; - return join(getAssetPath(`minecraft-textures/${pack}/assets/minecraft/`), texturePath); + const effectivePack = !hasPrivateAssets ? "default" : pack; + return join(getAssetPath(`minecraft-textures/${effectivePack}/assets/minecraft/`), texturePath); }; export const getAllGameIcons = async () => { diff --git a/packages/assets/tsconfig.json b/packages/assets/tsconfig.json index f1e6b476d..dd3fcc5f4 100644 --- a/packages/assets/tsconfig.json +++ b/packages/assets/tsconfig.json @@ -1,7 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": [ - "src", - "eslint.config.js" - ] + "include": ["src"] } \ No newline at end of file diff --git a/packages/discord/eslint.config.js b/packages/discord/eslint.config.js deleted file mode 100644 index 3325f85ed..000000000 --- a/packages/discord/eslint.config.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Copyright (c) Statsify - * - * This source code is licensed under the GNU GPL v3 license found in the - * LICENSE file in the root directory of this source tree. - * https://github.com/Statsify/statsify/blob/main/LICENSE - */ - -import { defineConfig } from "../../eslint.config.js"; - -export default defineConfig({ tsconfigDirName: import.meta.dirname }); diff --git a/packages/discord/package.json b/packages/discord/package.json index 2e4cb9919..eae37fb57 100644 --- a/packages/discord/package.json +++ b/packages/discord/package.json @@ -6,8 +6,9 @@ "type": "module", "scripts": { "build": "swc src --config-file ../../.swcrc --out-dir dist --strip-leading-paths", - "test:types": "tsc --noEmit", - "lint": "eslint" + "typecheck": "tsgo --noEmit", + "lint": "oxlint", + "lint:ci": "oxlint --format=github" }, "dependencies": { "@sentry/node": "^7.118.0", @@ -16,13 +17,13 @@ "@statsify/logger": "workspace:^", "@statsify/schemas": "workspace:^", "@statsify/util": "workspace:^", - "@swc/helpers": "^0.5.12", + "@swc/helpers": "^0.5.23", "axios": "^1.11.0", "discord-api-types": "^0.38.22", "i18next": "^21.10.0", "i18next-fs-backend": "^2.3.2", "reflect-metadata": "^0.2.2", - "skia-canvas": "https://github.com/samizdatco/skia-canvas/releases/download/v0.9.30/skia-canvas-v0.9.30-linux-x64-glibc.tar.gz", + "skia-canvas": "3.0.8", "tiny-discord": "https://github.com/timotejroiko/tiny-discord.git#f6d020085ea88e33ebaf6ce323930deffe74fb0d", "typedi": "^0.10.0" }, @@ -59,4 +60,4 @@ "default": "./dist/util/*.js" } } -} \ No newline at end of file +} diff --git a/packages/discord/src/arguments/player.argument.ts b/packages/discord/src/arguments/player.argument.ts index 281c6d663..89aa0bab0 100644 --- a/packages/discord/src/arguments/player.argument.ts +++ b/packages/discord/src/arguments/player.argument.ts @@ -41,7 +41,7 @@ export class PlayerArgument extends AbstractArgument { let results = players.map((p) => ({ name: p, value: p })); - if (query && (!players.length || !players.some((p) => p.toLowerCase() === query))) { + if (query && (players.length === 0 || !players.some((p) => p.toLowerCase() === query))) { results = results.slice(0, 24); results.push(searched); } diff --git a/packages/discord/src/command/abstract-command.listener.ts b/packages/discord/src/command/abstract-command.listener.ts index 64a460791..90527fdb1 100644 --- a/packages/discord/src/command/abstract-command.listener.ts +++ b/packages/discord/src/command/abstract-command.listener.ts @@ -98,7 +98,7 @@ export abstract class AbstractCommandListener { data: any, name = command.name ): [command: CommandResolvable, data: any, name: string] { - if (!data.options || !data.options.length) return [command, data, name]; + if (!data.options || data.options.length === 0) return [command, data, name]; const firstOption = data.options[0]; @@ -132,7 +132,9 @@ export abstract class AbstractCommandListener { const transaction = Sentry.getCurrentHub().getScope()?.getTransaction(); try { - preconditions.forEach((precondition) => precondition()); + for (const precondition of preconditions) { + precondition(); + } const response = await command.execute(context); @@ -285,7 +287,6 @@ export abstract class AbstractCommandListener { this.logger.error(err); }); - // @ts-ignore Discord supports sending a blank object as a response client.on("interaction", async (event) => { const interaction = new Interaction(this.rest, event.interaction, this.applicationId); const response = await this.onInteraction(interaction); diff --git a/packages/discord/src/command/command.builder.ts b/packages/discord/src/command/command.builder.ts index 8dcbe9e13..b54d4ab84 100644 --- a/packages/discord/src/command/command.builder.ts +++ b/packages/discord/src/command/command.builder.ts @@ -9,58 +9,62 @@ import { ApplicationIntegrationType } from "discord-api-types/v9"; import { CommandResolvable } from "./command.resolvable.js"; import { InteractionContextType } from "discord-api-types/v10"; -import type { CommandMetadata, SubCommandMetadata } from "./command.interface.js"; +import type { + CommandMetadata, + SubCommandMetadata, +} from "./command.interface.js"; import type { Constructor } from "@statsify/util"; -export class CommandBuilder { - public static scan(target: T, constructor: Constructor) { - const commandMetadata = Reflect.getMetadata( - "statsify:command", - constructor - ) as CommandMetadata; - - if (!commandMetadata) { - throw new Error(`Command metadata not found on ${constructor.name}`); - } - - const commandResolvable = new CommandResolvable(commandMetadata, target); +export function scanCommands( + target: T, + constructor: Constructor, +) { + const commandMetadata = Reflect.getMetadata( + "statsify:command", + constructor, + ) as CommandMetadata; + + if (!commandMetadata) { + throw new Error(`Command metadata not found on ${constructor.name}`); + } - const subcommandMetadata = Reflect.getMetadata( - "statsify:subcommand", - target - ) as Record; + const commandResolvable = new CommandResolvable(commandMetadata, target); - if (!subcommandMetadata) return commandResolvable; + const subcommandMetadata = Reflect.getMetadata( + "statsify:subcommand", + target, + ) as Record; - const groups: Record = {}; + if (!subcommandMetadata) return commandResolvable; - for (const subcommand of Object.values(subcommandMetadata)) { - const subcommandResolvable = new CommandResolvable(subcommand, target); + const groups: Record = {}; - let addSubCommandTo: CommandResolvable = commandResolvable; + for (const subcommand of Object.values(subcommandMetadata)) { + const subcommandResolvable = new CommandResolvable(subcommand, target); - if (subcommand.group && subcommand.group in groups) { - addSubCommandTo = groups[subcommand.group]; - } else if (subcommand.group) { - const options = { - name: subcommand.group, - methodName: "run", - description: "group", - }; + let addSubCommandTo: CommandResolvable = commandResolvable; - addSubCommandTo = new CommandResolvable(options, target); - groups[options.name] = addSubCommandTo; - } + if (subcommand.group && subcommand.group in groups) { + addSubCommandTo = groups[subcommand.group]; + } else if (subcommand.group) { + const options = { + name: subcommand.group, + methodName: "run", + description: "group", + }; - addSubCommandTo.addCommand(subcommandResolvable.asSubCommand()); + addSubCommandTo = new CommandResolvable(options, target); + groups[options.name] = addSubCommandTo; } - for (const group of Object.values(groups)) { - commandResolvable.addCommand(group.asSubCommandGroup()); - } + addSubCommandTo.addCommand(subcommandResolvable.asSubCommand()); + } - return commandResolvable; + for (const group of Object.values(groups)) { + commandResolvable.addCommand(group.asSubCommandGroup()); } + + return commandResolvable; } if (import.meta.vitest) { @@ -68,14 +72,17 @@ if (import.meta.vitest) { const { Command } = await import("./command.decorator.js"); const { SubCommand } = await import("./subcommand.decorator.js"); - const { AbstractArgument } = await import("../arguments/abstract.argument.js"); + const { AbstractArgument } = + await import("../arguments/abstract.argument.js"); - const { ApplicationCommandOptionType, ApplicationCommandType } = await import( - "discord-api-types/v10" - ); + const { ApplicationCommandOptionType, ApplicationCommandType } = + await import("discord-api-types/v10"); - suite("CommandBuilder", () => { - const integration_types = [ApplicationIntegrationType.GuildInstall, ApplicationIntegrationType.UserInstall]; + suite("Command Builder", () => { + const integration_types = [ + ApplicationIntegrationType.GuildInstall, + ApplicationIntegrationType.UserInstall, + ]; const contexts = [ InteractionContextType.Guild, @@ -87,7 +94,7 @@ if (import.meta.vitest) { @Command({ description: "test" }) class TestCommand {} - expect(CommandBuilder.scan(new TestCommand(), TestCommand).toJSON()).toEqual({ + expect(scanCommands(new TestCommand(), TestCommand).toJSON()).toEqual({ name: "test", description: "test", description_localizations: {}, @@ -107,7 +114,7 @@ if (import.meta.vitest) { } } - expect(CommandBuilder.scan(new TestCommand(), TestCommand).toJSON()).toEqual({ + expect(scanCommands(new TestCommand(), TestCommand).toJSON()).toEqual({ name: "test", description: "test", description_localizations: {}, @@ -147,7 +154,7 @@ if (import.meta.vitest) { } } - expect(CommandBuilder.scan(new TestCommand(), TestCommand).toJSON()).toEqual({ + expect(scanCommands(new TestCommand(), TestCommand).toJSON()).toEqual({ name: "test", description: "test", type: ApplicationCommandType.ChatInput, @@ -217,7 +224,7 @@ if (import.meta.vitest) { @Command({ description: "test", args: [Arg] }) class TestCommand {} - expect(CommandBuilder.scan(new TestCommand(), TestCommand).toJSON()).toEqual({ + expect(scanCommands(new TestCommand(), TestCommand).toJSON()).toEqual({ name: "test", description: "test", description_localizations: {}, diff --git a/packages/discord/src/command/command.loader.ts b/packages/discord/src/command/command.loader.ts index e644107df..ab06a5671 100644 --- a/packages/discord/src/command/command.loader.ts +++ b/packages/discord/src/command/command.loader.ts @@ -6,72 +6,72 @@ * https://github.com/Statsify/statsify/blob/main/LICENSE */ -import { CommandBuilder } from "./command.builder.js"; import { Container } from "typedi"; import { Logger } from "@statsify/logger"; import { readdir } from "node:fs/promises"; import { statSync } from "node:fs"; +import { join } from "node:path"; import type { CommandResolvable } from "./command.resolvable.js"; +import { scanCommands } from "./command.builder.js"; +import { pathToFileURL } from "node:url"; -export class CommandLoader { - private static readonly logger = new Logger("CommandLoader"); +const logger = new Logger("CommandLoader"); - public static async load(dir: string) { - const commands = new Map(); - const files = await this.getCommandFiles(dir); +export async function loadCommands(dir: string) { + const files = await getCommandFileUrls(dir); + const commands = await Promise.all(files.map(importCommand)); - for (const file of files) { - const imports = await this.importCommand(file); - - for (const command of imports) { - if (!command) continue; - commands.set(command.name, command); - } - } - - return commands; - } + return new Map( + commands + .flat() + .filter((command) => command !== undefined) + .map((command) => [command.name, command] as const), + ); +} - private static async importCommand(file: string) { - const command = await import(file); +async function importCommand(file: string) { + const command = await import(file); - return Object.keys(command) - .filter((key) => key !== "default") - .filter((key) => { - const value = command[key]; - // try to filter out function exports since classes will not have a writeable prototype. - return typeof value === "function" && !(Object.getOwnPropertyDescriptor(value, "prototype")?.writable); - }) - .map((key) => { - try { - const constructor = command[key]; - const instance = Container.get(constructor); + return Object.keys(command) + .filter((key) => key !== "default") + .filter((key) => { + const value = command[key]; + // try to filter out function exports since classes will not have a writeable prototype. + return ( + typeof value === "function" && + !Object.getOwnPropertyDescriptor(value, "prototype")?.writable + ); + }) + .map((key) => { + try { + const constructor = command[key]; + const instance = Container.get(constructor); - return CommandBuilder.scan(instance, constructor); - } catch (err) { - this.logger.error(`Failed to load command in ${file} with import ${key}`); - this.logger.error(err); - } - }); - } + return scanCommands(instance, constructor); + } catch (err) { + logger.error(`Failed to load command in ${file} with import ${key}`); + logger.error(err); + return undefined; + } + }); +} - private static async getCommandFiles(dir: string): Promise { - const toLoad: string[] = []; +async function getCommandFileUrls(dir: string): Promise { + const toLoad: string[] = []; - const files = await readdir(dir); + const files = await readdir(dir); - await Promise.all( - files.map(async (file) => { - const path = `${dir}/${file}`; + await Promise.all( + files.map(async (file) => { + const path = join(dir, file); - if (statSync(path).isDirectory()) { - toLoad.push(...(await this.getCommandFiles(path))); - } else if (file.endsWith(".command.js")) { - toLoad.push(path); - } - }) - ); + if (statSync(path).isDirectory()) { + toLoad.push(...(await getCommandFileUrls(path))); + } else if (file.endsWith(".command.js")) { + toLoad.push(pathToFileURL(path).href); + } + }), + ); - return toLoad; - } + return toLoad; } diff --git a/packages/discord/src/event/event.loader.ts b/packages/discord/src/event/event.loader.ts index 830bf1752..d765d3b86 100644 --- a/packages/discord/src/event/event.loader.ts +++ b/packages/discord/src/event/event.loader.ts @@ -13,61 +13,58 @@ import { Logger } from "@statsify/logger"; import { WebsocketShard } from "tiny-discord"; import { readdir } from "node:fs/promises"; import { statSync } from "node:fs"; +import { pathToFileURL } from "node:url"; -export class EventLoader { - private static readonly logger = new Logger("EventLoader"); +const logger = new Logger("EventLoader"); - public static async load(websocket: WebsocketShard, dir: string) { - const events = new Map>(); - const files = await this.getEventFiles(dir); +export async function loadEvents(websocket: WebsocketShard, dir: string) { + const files = await getEventFileUrls(dir); + const events = await Promise.all(files.map(importEvent)); + const eventsMap = new Map>(events.flat().map((event) => [event.event, event])); - for (const file of files) { - const imports = await this.importEvent(file); - for (const event of imports) events.set(event.event, event); - } - - websocket.on("event", (event) => { - const listener = events.get(event.t as GatewayDispatchEvents); - if (listener) listener.onEvent(event.d); - }); - } + websocket.on("event", (event) => { + const listener = eventsMap.get(event.t as GatewayDispatchEvents); + if (listener) listener.onEvent(event.d); + }); +} - private static async importEvent(file: string): Promise[]> { - const event = await import(file); +async function importEvent( + file: string, +): Promise[]> { + const event = await import(file); - return Object.keys(event) - .filter((key) => key !== "default") - .map((key) => { - try { - const constructor = event[key]; - const instance = Container.get>(constructor); - return instance; - } catch (err) { - this.logger.error(`Failed to load event in ${file} with import ${key}`); - this.logger.error(err); - return null; - } - }) - .filter(Boolean) as AbstractEventListener[]; - } + return Object.keys(event) + .filter((key) => key !== "default") + .map((key) => { + try { + const constructor = event[key]; + const instance = Container.get>(constructor); + return instance; + } catch (err) { + logger.error(`Failed to load event in ${file} with import ${key}`); + logger.error(err); + return null; + } + }) + .filter(Boolean) as AbstractEventListener[]; +} - private static async getEventFiles(dir: string): Promise { - const toLoad: string[] = []; +async function getEventFileUrls(dir: string): Promise { + const toLoad: string[] = []; - const files = await readdir(dir); + const files = await readdir(dir); - await Promise.all( - files.map(async (file) => { - const path = `${dir}/${file}`; + await Promise.all( + files.map(async (file) => { + const path = `${dir}/${file}`; - if (statSync(path).isDirectory()) { - toLoad.push(...(await this.getEventFiles(path))); - } else if (file.endsWith(".event.js")) { - toLoad.push(path); - } - }) - ); + if (statSync(path).isDirectory()) { + toLoad.push(...(await getEventFileUrls(path))); + } else if (file.endsWith(".event.js")) { + toLoad.push(pathToFileURL(file).href); + } + }), + ); - return toLoad; - } + return toLoad; } diff --git a/packages/discord/src/messages/components/parse-emoji.ts b/packages/discord/src/messages/components/parse-emoji.ts index f68cc3802..0c7a2b37b 100644 --- a/packages/discord/src/messages/components/parse-emoji.ts +++ b/packages/discord/src/messages/components/parse-emoji.ts @@ -15,7 +15,7 @@ export function parseEmoji( ): APIMessageComponentEmoji { const emoji = translateField(locale, emote); const animated = emoji.startsWith("/g, ""); + const name = emoji.replaceAll(/<:|/g, ""); const id = name.split(":")[1]; return { name: name.replace(id, ""), animated, id }; diff --git a/packages/discord/src/messages/embed.ts b/packages/discord/src/messages/embed.ts index 4894bace8..3de82c248 100644 --- a/packages/discord/src/messages/embed.ts +++ b/packages/discord/src/messages/embed.ts @@ -73,7 +73,9 @@ export class EmbedBuilder { } public fields(...fields: Field[]): this { - fields.forEach((field) => this.field(...field)); + for (const field of fields) { + this.field(...field); + } return this; } diff --git a/packages/discord/src/services/api.service.ts b/packages/discord/src/services/api.service.ts index 5aaef0a1d..bc0fd6c5a 100644 --- a/packages/discord/src/services/api.service.ts +++ b/packages/discord/src/services/api.service.ts @@ -128,14 +128,21 @@ export class ApiService extends StatsifyApiService { let input: string; let playerType: PlayerTag; - if (!type) { - if (!tag || this.isDiscordId(tag)) type = GuildQuery.PLAYER; - else if (GUILD_ID_REGEX.test(tag)) type = GuildQuery.ID; - else if (tag.includes(" ") || tag.length > 16) type = GuildQuery.NAME; - else type = GuildQuery.NAME; + let resolvedType: GuildQuery; + + if (type) { + resolvedType = type; + } else if (!tag || this.isDiscordId(tag)) { + resolvedType = GuildQuery.PLAYER; + } else if (GUILD_ID_REGEX.test(tag)) { + resolvedType = GuildQuery.ID; + } else if (tag.includes(" ") || tag.length > 16) { + resolvedType = GuildQuery.NAME; + } else { + resolvedType = GuildQuery.NAME; } - if (type === GuildQuery.PLAYER) { + if (resolvedType === GuildQuery.PLAYER) { const [formattedTag, type] = this.parseTag(tag); playerType = type; input = await this.resolveTag(formattedTag, type, user); @@ -143,7 +150,7 @@ export class ApiService extends StatsifyApiService { input = tag; } - return super.getGuild(input, type).catch((err) => { + return super.getGuild(input, resolvedType).catch((err) => { if (!err.response || !err.response.data) throw this.unknownError(); const error = err.response.data as GuildNotFoundException | PlayerNotFoundException; @@ -226,9 +233,9 @@ export class ApiService extends StatsifyApiService { } public emojiDisplayName(t: LocalizeFunction, displayName: string, space = true) { - displayName = displayName.replaceAll("_", String.raw`\_`); + const escapedDisplayName = displayName.replaceAll("_", String.raw`\_`); - const [rank, name] = displayName.replace(/\[|\]/g, "").split(" "); + const [rank, name] = escapedDisplayName.replaceAll(/\[|\]/g, "").split(" "); // They don't have a rank if (!name) return removeFormatting(displayName); @@ -260,7 +267,7 @@ export class ApiService extends StatsifyApiService { if (length >= 32 && length <= 36) return [tag.replaceAll("-", ""), "uuid"]; if (length <= 16) return [tag, "username"]; - if (this.isDiscordId(tag)) return [tag.replace(/<@|!|>/g, ""), "discordId"]; + if (this.isDiscordId(tag)) return [tag.replaceAll(/<@|!|>/g, ""), "discordId"]; throw new ErrorMessage("errors.invalidSearch"); } diff --git a/packages/discord/src/services/i18n-loader.service.ts b/packages/discord/src/services/i18n-loader.service.ts index c73d6863a..f576166b3 100644 --- a/packages/discord/src/services/i18n-loader.service.ts +++ b/packages/discord/src/services/i18n-loader.service.ts @@ -1,70 +1,70 @@ -/** - * Copyright (c) Statsify - * - * This source code is licensed under the GNU GPL v3 license found in the - * LICENSE file in the root directory of this source tree. - * https://github.com/Statsify/statsify/blob/main/LICENSE - */ - -import Backend from "i18next-fs-backend"; -import i18next from "i18next"; -import { Service } from "typedi"; -import { abbreviationNumber } from "@statsify/util"; -import { readdir } from "node:fs/promises"; - -const DEFAULT_LANGUAGE = "en-US"; - -@Service() -export class I18nLoaderService { - private languages: string[] = []; - private namespaces: string[] = []; - - public async init() { - this.languages = await readdir("../../locales"); - this.namespaces = (await readdir(`../../locales/${DEFAULT_LANGUAGE}/`)).map((p) => - p.replace(".json", "") - ); - - await i18next.use(Backend).init({ - backend: { - loadPath: "../../locales/{{lng}}/{{ns}}.json", - }, - debug: false, - fallbackLng: DEFAULT_LANGUAGE, - lng: DEFAULT_LANGUAGE, - supportedLngs: this.languages, - ns: this.namespaces, - load: "all", - preload: this.languages, - initImmediate: false, - defaultNS: "default", - interpolation: { - format: this.format, - escapeValue: false, - }, - }); - } - - private format(value: any, format?: string | undefined, lng?: string): string { - switch (format) { - case "number": { - const hasDecimals = value >= 1_000_000 || !Number.isInteger(+value); - const digits = hasDecimals ? 2 : 0; - - const formatOptions = { - maximumFractionDigits: digits, - minimumFractionDigits: digits, - }; - - if ((value as number) >= 1_000_000) { - const [number, suffix] = abbreviationNumber(value); - return `${Intl.NumberFormat(lng, formatOptions).format(number)}${suffix}`; - } - - return Intl.NumberFormat(lng, formatOptions).format(value as number); - } - } - - return value; - } -} +/** + * Copyright (c) Statsify + * + * This source code is licensed under the GNU GPL v3 license found in the + * LICENSE file in the root directory of this source tree. + * https://github.com/Statsify/statsify/blob/main/LICENSE + */ + +import Backend from "i18next-fs-backend"; +import i18next from "i18next"; +import { Service } from "typedi"; +import { abbreviationNumber } from "@statsify/util"; +import { readdir } from "node:fs/promises"; + +const DEFAULT_LANGUAGE = "en-US"; + +@Service() +export class I18nLoaderService { + private languages: string[] = []; + private namespaces: string[] = []; + + public async init() { + this.languages = await readdir("../../locales"); + this.namespaces = (await readdir(`../../locales/${DEFAULT_LANGUAGE}/`)).map((p) => + p.replace(".json", "") + ); + + await i18next.use(Backend).init({ + backend: { + loadPath: "../../locales/{{lng}}/{{ns}}.json", + }, + debug: false, + fallbackLng: DEFAULT_LANGUAGE, + lng: DEFAULT_LANGUAGE, + supportedLngs: this.languages, + ns: this.namespaces, + load: "all", + preload: this.languages, + initImmediate: false, + defaultNS: "default", + interpolation: { + format, + escapeValue: false, + }, + }); + } +} + +function format(value: any, format?: string | undefined, lng?: string): string { + switch (format) { + case "number": { + const hasDecimals = value >= 1_000_000 || !Number.isInteger(+value); + const digits = hasDecimals ? 2 : 0; + + const formatOptions = { + maximumFractionDigits: digits, + minimumFractionDigits: digits, + }; + + if ((value as number) >= 1_000_000) { + const [number, suffix] = abbreviationNumber(value); + return `${Intl.NumberFormat(lng, formatOptions).format(number)}${suffix}`; + } + + return Intl.NumberFormat(lng, formatOptions).format(value as number); + } + } + + return value; +} \ No newline at end of file diff --git a/packages/discord/src/services/member.service.ts b/packages/discord/src/services/member.service.ts index c00d4d51a..5575fa6d5 100644 --- a/packages/discord/src/services/member.service.ts +++ b/packages/discord/src/services/member.service.ts @@ -15,10 +15,7 @@ export class MemberService { public constructor(private readonly rest: RestClient) {} public async addRole(guildId: string, userId: string, roleId: string) { - const response = await this.rest.put( - `/guilds/${guildId}/members/${userId}/roles/${roleId}`, undefined - ); - + const response = await this.rest.put(`/guilds/${guildId}/members/${userId}/roles/${roleId}`, {}); return parseDiscordResponse(response); } diff --git a/packages/discord/src/services/paginate.service.ts b/packages/discord/src/services/paginate.service.ts index d53215e53..ac7295d12 100644 --- a/packages/discord/src/services/paginate.service.ts +++ b/packages/discord/src/services/paginate.service.ts @@ -1,300 +1,367 @@ -/** - * Copyright (c) Statsify - * - * This source code is licensed under the GNU GPL v3 license found in the - * LICENSE file in the root directory of this source tree. - * https://github.com/Statsify/statsify/blob/main/LICENSE - */ - -import { ButtonStyle } from "discord-api-types/v10"; -import { Canvas } from "skia-canvas"; -import { Service } from "typedi"; - -import { - ActionRowBuilder, - ButtonBuilder, - EmbedBuilder, - type IMessage, - type LocalizationString, - type LocalizeFunction, - Message, - SelectMenuBuilder, - SelectMenuOptionBuilder, -} from "#messages"; -import { Interaction } from "#interaction"; -import type { AbstractCommandListener, CommandContext, InteractionHook } from "#command"; - -type PaginateInteractionContent = IMessage | Message | EmbedBuilder | Canvas; - -type PaginateInteractionContentGenerator = ( - t: LocalizeFunction -) => PaginateInteractionContent | Promise; - -export type Page = PageInput & ({ subPages: SubPage[] } | { generator: PaginateInteractionContentGenerator }); -export type SubPage = PageInput & { generator: PaginateInteractionContentGenerator }; - -interface PageInput { - label: LocalizationString; - emoji?: LocalizationString | false; -} - -type PageId = `${number}|${number}`; - -@Service() -export class PaginateService { - /** - * - * @param context The context of the command - * @param pages The array of pages to paginate against - * @param timeout When to stop the pagination (ms), defaults to 300000 - */ - public async paginate(context: CommandContext, pages: Page[], timeout = 300_000) { - const cache = new Map(); - const t = context.t(); - - const getMessage = async (index: number, subIndex: number) => { - const pageId: PageId = `${index}|${subIndex}`; - if (cache.has(pageId)) return cache.get(pageId)!; - - const page = pages[index]; - let content: PaginateInteractionContent; - - if ("subPages" in page) { - const subPage = page.subPages[subIndex]; - content = await subPage.generator(t); - } else { - content = await page.generator(t); - } - - const message = await this.toMessage(content); - cache.set(pageId, message); - - return message; - }; - - // If there is only one page with no sub pages, return the message immediately without pagination - if (pages.length === 1 && "generator" in pages[0]) return getMessage(0, 0); - - const userId = context.getInteraction().getUserId(); - const listener = context.getListener(); - - let currentIndex = 0; - let currentSubIndex = 0; - - const mainController = new PageController(pages, currentIndex); - - const page = pages[currentIndex]; - let subController = "subPages" in page && page.subPages.length > 1 ? new PageController(page.subPages, currentSubIndex) : undefined; - - mainController.register(listener, (interaction, index) => handler(interaction, index, 0)); - subController?.register(listener, (interaction, subIndex) => handler(interaction, currentIndex, subIndex)); - - async function handler(interaction: Interaction, index: number, subIndex: number) { - interaction.setLocale(t.locale); - - // Send an ephemeral preview if the user is not the one who initiated the interaction - if (interaction.getUserId() !== userId) { - const message = await getMessage(index, subIndex); - return interaction.sendFollowup({ ...message, components: [], ephemeral: true }); - } - - if (index !== currentIndex) { - subController?.unregister(listener); - mainController.switchPage(index); - - currentIndex = index; - currentSubIndex = 0; - - if ("subPages" in pages[index] && pages[index].subPages.length > 1) { - subController = new PageController(pages[index].subPages, currentSubIndex); - subController.register(listener, (interaction, subIndex) => handler(interaction, currentIndex, subIndex)); - } else { - subController = undefined; - } - } else if (subIndex !== currentSubIndex) { - subController?.switchPage(subIndex); - currentSubIndex = subIndex; - } - - const message = await getMessage(index, subIndex); - - message.components = [mainController.getActionRow(), subController?.getActionRow()] - .filter((row) => row !== undefined); - - return context.reply(message); - } - - function onTimeout() { - mainController.unregister(listener); - subController?.unregister(listener); - cache.clear(); - return context.reply({ components: [] }); - } - - setTimeout(onTimeout, timeout); - - const message = await getMessage(currentIndex, currentSubIndex); - message.components = [mainController.getActionRow(), subController?.getActionRow()] - .filter((row) => row !== undefined); - - return message; - } - - /** - * - * @param context The context of the command - * @param pages The array of pages to paginate against - * @param forwardButton The button to use for forward pagination - * @param backwardButton The button to use for back pagination - * @param invertButtons Whether to invert the buttons (backward becomes forward, forward becomes backward) - * @param startingIndex The starting page - * @param timeout When to stop the pagination (ms), defaults to 300000 - */ - public async scrollingPagination( - context: CommandContext, - pages: PaginateInteractionContentGenerator[], - forwardButton?: ButtonBuilder, - backwardButton?: ButtonBuilder, - invertButtons = false, - startingIndex = 0, - timeout = 300_000 - ) { - const currentIndex = startingIndex; - const cache = new Map(); - const t = context.t(); - - const getMessage = async (index: number) => { - if (cache.has(index)) return cache.get(index)!; - - const content = await pages[index](t); - const message = await this.toMessage(content); - cache.set(index, message); - - return message; - }; - - if (pages.length === 1) return getMessage(currentIndex); - - const userId = context.getInteraction().getUserId(); - - const controller = [ - backwardButton ?? new ButtonBuilder().emoji(t("emojis:backward")), - forwardButton ?? new ButtonBuilder().emoji(t("emojis:forward")), - ]; - - if (invertButtons) controller.reverse(); - - const listener = context.getListener(); - - controller.forEach((component, i) => { - listener.addHook(component.getCustomId(), async (interaction) => { - interaction.setLocale(t.locale); - - let page: number; - - if (i === 0) { - // Backwards - page = startingIndex == 0 ? pages.length - 1 : startingIndex - 1; - } else { - // Forwards - page = startingIndex == pages.length - 1 ? 0 : startingIndex + 1; - } - - const message = await getMessage(page); - - if (interaction.getUserId() === userId) { - startingIndex = page; - message.components = [new ActionRowBuilder(controller)]; - return context.reply(message); - } - - return interaction.sendFollowup({ ...message, components: [], ephemeral: true }); - }); - }); - - function onTimeout() { - controller.forEach((component) => listener.removeHook(component.getCustomId())); - context.reply({ components: [] }); - cache.clear(); - } - - setTimeout(onTimeout, timeout); - - const message = await getMessage(startingIndex); - message.components = [new ActionRowBuilder(controller)]; - - return message; - } - - private async toMessage(content: PaginateInteractionContent): Promise { - if (content instanceof Message) return content; - if (content instanceof EmbedBuilder) return new Message({ embeds: [content] }); - if (content instanceof Canvas) return new Message({ - files: [{ name: "image.png", data: await content.toBuffer("png"), type: "image/png" }], - attachments: [], - }); - - return new Message(content); - } -} - -class PageController { - #menu: SelectMenuBuilder | ButtonBuilder[]; - - public constructor(pages: PageInput[], selected: number) { - if (pages.length > 5) { - const menu = new SelectMenuBuilder(); - - pages.forEach((page, index) => { - const option = new SelectMenuOptionBuilder().label(page.label).value(`${index}`); - if (page.emoji) option.emoji(page.emoji); - menu.option(option); - }); - - menu.activeOption(selected); - this.#menu = menu; - } else { - this.#menu = pages.map((page, index) => { - const button = new ButtonBuilder().label(page.label).style(ButtonStyle.Secondary); - if (page.emoji) button.emoji(page.emoji); - if (index === selected) button.style(ButtonStyle.Primary); - return button; - }); - } - } - - public switchPage(index: number) { - if (this.#menu instanceof SelectMenuBuilder) { - this.#menu.activeOption(index); - return; - } - - this.#menu.forEach((button, i) => button.style(i === index ? ButtonStyle.Primary : ButtonStyle.Secondary)); - } - - public getActionRow(): ActionRowBuilder { - if (this.#menu instanceof SelectMenuBuilder) return new ActionRowBuilder([this.#menu]); - return new ActionRowBuilder(this.#menu); - } - - public register( - listener: AbstractCommandListener, - handler: (interaction: Interaction, index: number) => ReturnType - ) { - if (this.#menu instanceof SelectMenuBuilder) { - return listener.addHook(this.#menu.getCustomId(), (interaction) => { - const index = Number(interaction.getData().values[0]); - return handler(interaction, index); - }); - } - - this.#menu.forEach((button, index) => { - listener.addHook(button.getCustomId(), (interaction) => handler(interaction, index)); - }); - } - - public unregister(listener: AbstractCommandListener) { - if (this.#menu instanceof SelectMenuBuilder) listener.removeHook(this.#menu.getCustomId()); - else this.#menu.forEach((button) => listener.removeHook(button.getCustomId())); - } -} +/** + * Copyright (c) Statsify + * + * This source code is licensed under the GNU GPL v3 license found in the + * LICENSE file in the root directory of this source tree. + * https://github.com/Statsify/statsify/blob/main/LICENSE + */ + +import { ButtonStyle } from "discord-api-types/v10"; +import { Canvas } from "skia-canvas"; + +import { + ActionRowBuilder, + ButtonBuilder, + EmbedBuilder, + type IMessage, + type LocalizationString, + type LocalizeFunction, + Message, + SelectMenuBuilder, + SelectMenuOptionBuilder, +} from "#messages"; +import { Interaction } from "#interaction"; +import type { + AbstractCommandListener, + CommandContext, + InteractionHook, +} from "#command"; + +type PaginateInteractionContent = IMessage | Message | EmbedBuilder | Canvas; + +type PaginateInteractionContentGenerator = ( + t: LocalizeFunction, +) => PaginateInteractionContent | Promise; + +export type Page = PageInput & + ( + | { subPages: SubPage[] } + | { generator: PaginateInteractionContentGenerator } + ); +export type SubPage = PageInput & { + generator: PaginateInteractionContentGenerator; +}; + +interface PageInput { + label: LocalizationString; + emoji?: LocalizationString | false; +} + +type PageId = `${number}|${number}`; + +/** + * + * @param context The context of the command + * @param pages The array of pages to paginate against + * @param timeout When to stop the pagination (ms), defaults to 300000 + */ +export async function paginate( + context: CommandContext, + pages: Page[], + timeout = 300_000, +) { + const cache = new Map(); + const t = context.t(); + + const getMessage = async (index: number, subIndex: number) => { + const pageId: PageId = `${index}|${subIndex}`; + if (cache.has(pageId)) return cache.get(pageId)!; + + const page = pages[index]; + let content: PaginateInteractionContent; + + if ("subPages" in page) { + const subPage = page.subPages[subIndex]; + content = await subPage.generator(t); + } else { + content = await page.generator(t); + } + + const message = await contentToMessage(content); + cache.set(pageId, message); + + return message; + }; + + // If there is only one page with no sub pages, return the message immediately without pagination + if (pages.length === 1 && "generator" in pages[0]) return getMessage(0, 0); + + const userId = context.getInteraction().getUserId(); + const listener = context.getListener(); + + let currentIndex = 0; + let currentSubIndex = 0; + + const mainController = new PageController(pages, currentIndex); + + const page = pages[currentIndex]; + let subController = + "subPages" in page && page.subPages.length > 1 + ? new PageController(page.subPages, currentSubIndex) + : undefined; + + mainController.register(listener, (interaction, index) => + handler(interaction, index, 0), + ); + subController?.register(listener, (interaction, subIndex) => + handler(interaction, currentIndex, subIndex), + ); + + async function handler( + interaction: Interaction, + index: number, + subIndex: number, + ) { + interaction.setLocale(t.locale); + + // Send an ephemeral preview if the user is not the one who initiated the interaction + if (interaction.getUserId() !== userId) { + const message = await getMessage(index, subIndex); + return interaction.sendFollowup({ + ...message, + components: [], + ephemeral: true, + }); + } + + if (index !== currentIndex) { + subController?.unregister(listener); + mainController.switchPage(index); + + currentIndex = index; + currentSubIndex = 0; + + if ("subPages" in pages[index] && pages[index].subPages.length > 1) { + subController = new PageController( + pages[index].subPages, + currentSubIndex, + ); + subController.register(listener, (interaction, subIndex) => + handler(interaction, currentIndex, subIndex), + ); + } else { + subController = undefined; + } + } else if (subIndex !== currentSubIndex) { + subController?.switchPage(subIndex); + currentSubIndex = subIndex; + } + + const message = await getMessage(index, subIndex); + + message.components = [ + mainController.getActionRow(), + subController?.getActionRow(), + ].filter((row) => row !== undefined); + + return context.reply(message); + } + + function onTimeout() { + mainController.unregister(listener); + subController?.unregister(listener); + cache.clear(); + return context.reply({ components: [] }); + } + + setTimeout(onTimeout, timeout); + + const message = await getMessage(currentIndex, currentSubIndex); + message.components = [ + mainController.getActionRow(), + subController?.getActionRow(), + ].filter((row) => row !== undefined); + + return message; +} + +/** + * + * @param context The context of the command + * @param pages The array of pages to paginate against + * @param forwardButton The button to use for forward pagination + * @param backwardButton The button to use for back pagination + * @param invertButtons Whether to invert the buttons (backward becomes forward, forward becomes backward) + * @param startingIndex The starting page + * @param timeout When to stop the pagination (ms), defaults to 300000 + */ +export async function scrollingPagination( + context: CommandContext, + pages: PaginateInteractionContentGenerator[], + forwardButton?: ButtonBuilder, + backwardButton?: ButtonBuilder, + invertButtons = false, + startingIndex = 0, + timeout = 300_000, +) { + let currentIndex = startingIndex; + const cache = new Map(); + const t = context.t(); + + const getMessage = async (index: number) => { + if (cache.has(index)) return cache.get(index)!; + + const content = await pages[index](t); + const message = await contentToMessage(content); + cache.set(index, message); + + return message; + }; + + if (pages.length === 1) return getMessage(currentIndex); + + const userId = context.getInteraction().getUserId(); + + const controller = [ + backwardButton ?? new ButtonBuilder().emoji(t("emojis:backward")), + forwardButton ?? new ButtonBuilder().emoji(t("emojis:forward")), + ]; + + if (invertButtons) controller.reverse(); + + const listener = context.getListener(); + + for (const [index, component] of controller.entries()) { + listener.addHook(component.getCustomId(), async (interaction) => { + interaction.setLocale(t.locale); + + let page: number; + + if (index === 0) { + // Backwards + page = currentIndex === 0 ? pages.length - 1 : currentIndex - 1; + } else { + // Forwards + page = currentIndex === pages.length - 1 ? 0 : currentIndex + 1; + } + + const message = await getMessage(page); + + if (interaction.getUserId() === userId) { + currentIndex = page; + message.components = [new ActionRowBuilder(controller)]; + return context.reply(message); + } + + return interaction.sendFollowup({ + ...message, + components: [], + ephemeral: true, + }); + }); + } + + function onTimeout() { + for (const component of controller) { + listener.removeHook(component.getCustomId()); + } + context.reply({ components: [] }); + cache.clear(); + } + + setTimeout(onTimeout, timeout); + + const message = await getMessage(currentIndex); + message.components = [new ActionRowBuilder(controller)]; + + return message; +} + +async function contentToMessage( + content: PaginateInteractionContent, +): Promise { + if (content instanceof Message) return content; + if (content instanceof EmbedBuilder) + return new Message({ embeds: [content] }); + if (content instanceof Canvas) + return new Message({ + files: [ + { + name: "image.png", + data: await content.toBuffer("png"), + type: "image/png", + }, + ], + attachments: [], + }); + + return new Message(content); +} + +class PageController { + #menu: SelectMenuBuilder | ButtonBuilder[]; + + public constructor(pages: PageInput[], selected: number) { + if (pages.length > 5) { + const menu = new SelectMenuBuilder(); + + for (const [index, page] of pages.entries()) { + const option = new SelectMenuOptionBuilder() + .label(page.label) + .value(`${index}`); + if (page.emoji) option.emoji(page.emoji); + menu.option(option); + } + + menu.activeOption(selected); + this.#menu = menu; + } else { + this.#menu = pages.map((page, index) => { + const button = new ButtonBuilder() + .label(page.label) + .style(ButtonStyle.Secondary); + if (page.emoji) button.emoji(page.emoji); + if (index === selected) button.style(ButtonStyle.Primary); + return button; + }); + } + } + + public switchPage(index: number) { + if (this.#menu instanceof SelectMenuBuilder) { + this.#menu.activeOption(index); + return; + } + + for (const [i, button] of this.#menu.entries()) { + button.style(i === index ? ButtonStyle.Primary : ButtonStyle.Secondary); + } + } + + public getActionRow(): ActionRowBuilder { + if (this.#menu instanceof SelectMenuBuilder) + return new ActionRowBuilder([this.#menu]); + return new ActionRowBuilder(this.#menu); + } + + public register( + listener: AbstractCommandListener, + handler: ( + interaction: Interaction, + index: number, + ) => ReturnType, + ) { + if (this.#menu instanceof SelectMenuBuilder) { + return listener.addHook(this.#menu.getCustomId(), (interaction) => { + const index = Number(interaction.getData().values[0]); + return handler(interaction, index); + }); + } + + for (const [index, button] of this.#menu.entries()) { + listener.addHook(button.getCustomId(), (interaction) => + handler(interaction, index), + ); + } + } + + public unregister(listener: AbstractCommandListener) { + if (this.#menu instanceof SelectMenuBuilder) { + listener.removeHook(this.#menu.getCustomId()); + } else { + for (const button of this.#menu) { + listener.removeHook(button.getCustomId()); + } + } + } +} diff --git a/packages/discord/src/util/error.message.ts b/packages/discord/src/util/error.message.ts index 2858d0744..09c64741f 100644 --- a/packages/discord/src/util/error.message.ts +++ b/packages/discord/src/util/error.message.ts @@ -31,7 +31,7 @@ export class ErrorMessage extends Message { public constructor( title: LocalizationString, description: LocalizationString, - options?: ErrorMessageOptions + options?: ErrorMessageOptions, ); public constructor( titleOrKey: LocalizationString, @@ -41,7 +41,7 @@ export class ErrorMessage extends Message { thumbnail, buttons = [], color = STATUS_COLORS.error, - }: ErrorMessageOptions = {} + }: ErrorMessageOptions = {}, ) { const embed = new EmbedBuilder().color(color); @@ -59,16 +59,15 @@ export class ErrorMessage extends Message { if (image) { data.files = [image]; - embed.image(`attachment://${data.files[0].name}`); } else if (thumbnail) { data.files = [thumbnail]; - embed.thumbnail(`attachment://${data.files[0].name}`); } else { const errorIcon = readFileSync(getLogoPath("error", 52)); data.files = [{ name: "error.png", data: errorIcon, type: "image/png" }]; - embed.thumbnail(`attachment://${data.files[0].name}`); } + embed.thumbnail(`attachment://${data.files[0].name}`); + super(data); } } diff --git a/packages/discord/src/util/parse-discord-error.ts b/packages/discord/src/util/parse-discord-error.ts index 86f89bf46..2b5c1cce4 100644 --- a/packages/discord/src/util/parse-discord-error.ts +++ b/packages/discord/src/util/parse-discord-error.ts @@ -12,10 +12,9 @@ import type { RestClient } from "tiny-discord"; export const parseDiscordResponse = (response: RestClient.RequestResult): T => { if (response.headers["content-type"] !== "application/json") return noop(); - // @ts-ignore tiny-discord doesn't have a proper types yet + // @ts-expect-error tiny-discord doesn't have a proper types yet if (response.status >= 200 && response.status < 300) return response.body.json as T; - // @ts-ignore tiny-discord doesn't have a proper types yet const body = response.body.json as Record; let message = body.message; @@ -30,7 +29,7 @@ export const parseDiscordResponse = (response: RestClient.RequestResult): T = export const parseDiscordError = (error: any = {}, errorKey = ""): string => { if (typeof error.message === "string") - return `${errorKey.length ? `${errorKey} - ${error.code}` : `${error.code}`}: ${ + return `${errorKey.length > 0 ? `${errorKey} - ${error.code}` : `${error.code}`}: ${ error.message }`.trim(); @@ -47,8 +46,13 @@ export const parseDiscordError = (error: any = {}, errorKey = ""): string => { } if (typeof value === "string") message += value; - else if ("_errors" in value) - for (const error of value._errors) message += parseDiscordError(error, nextKey); + else if ("_errors" in value) { + // Discord's api uses dangling underscores when reporting errors + // oxlint-disable-next-line no-underscore-dangle + for (const error of value._errors) { + message += parseDiscordError(error, nextKey); + } + } else message += parseDiscordError(value, nextKey); } diff --git a/packages/discord/tsconfig.json b/packages/discord/tsconfig.json index b1633af34..08154a472 100644 --- a/packages/discord/tsconfig.json +++ b/packages/discord/tsconfig.json @@ -2,7 +2,6 @@ "extends": "../../tsconfig.base.json", "include": [ "src", - "eslint.config.js", "vitest.config.ts" ] } \ No newline at end of file diff --git a/packages/logger/eslint.config.js b/packages/logger/eslint.config.js deleted file mode 100644 index 3325f85ed..000000000 --- a/packages/logger/eslint.config.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Copyright (c) Statsify - * - * This source code is licensed under the GNU GPL v3 license found in the - * LICENSE file in the root directory of this source tree. - * https://github.com/Statsify/statsify/blob/main/LICENSE - */ - -import { defineConfig } from "../../eslint.config.js"; - -export default defineConfig({ tsconfigDirName: import.meta.dirname }); diff --git a/packages/logger/package.json b/packages/logger/package.json index c15f89f7c..f40ff474e 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -6,13 +6,14 @@ "type": "module", "scripts": { "build": "swc src --config-file ../../.swcrc --out-dir dist --strip-leading-paths", - "test:types": "tsc --noEmit", - "lint": "eslint" + "typecheck": "tsgo --noEmit", + "lint": "oxlint", + "lint:ci": "oxlint --format=github" }, "dependencies": { "@sentry/node": "^7.118.0", "@statsify/util": "workspace:^", - "@swc/helpers": "^0.5.12", + "@swc/helpers": "^0.5.23", "chalk": "5.6.0", "luxon": "^3.5.0" }, @@ -20,4 +21,4 @@ "@nestjs/common": "^11.1.6", "@types/luxon": "^3.4.2" } -} \ No newline at end of file +} diff --git a/packages/logger/src/index.ts b/packages/logger/src/index.ts index 1d9975ed6..d2f715e65 100644 --- a/packages/logger/src/index.ts +++ b/packages/logger/src/index.ts @@ -23,6 +23,15 @@ export const STATUS_COLORS = { fatal: 0x81181A, } as const; +const ColorByLogLevel: Record = { + debug: STATUS_COLORS.debug, + warn: STATUS_COLORS.warn, + error: STATUS_COLORS.error, + verbose: STATUS_COLORS.info, + log: STATUS_COLORS.success, + fatal: STATUS_COLORS.fatal, +}; + const isProduction = await config("environment") === "prod"; /** @@ -59,7 +68,7 @@ export class Logger implements LoggerService { ...optionalParameters, ]); - this.printMessage(messages, context, "log"); + Logger.printMessage(messages, context, "log"); } public error(message: any, context?: string): void; @@ -69,20 +78,22 @@ export class Logger implements LoggerService { return; } + let normalizedMessage = message; + if (message instanceof Error) { const transaction = Sentry.getCurrentHub().getScope()?.getTransaction(); transaction?.setStatus("internal_error"); Sentry.captureException(message); - message = message.stack; + normalizedMessage = message.stack; } const { messages, context } = this.getContextAndMessages([ - message, + normalizedMessage, ...optionalParameters, ]); - this.printMessage(messages, context, "error", "stderr", "📉"); + Logger.printMessage(messages, context, "error", "stderr", "📉"); } public warn(message: any, context?: string): void; @@ -97,7 +108,7 @@ export class Logger implements LoggerService { ...optionalParameters, ]); - this.printMessage(messages, context, "warn"); + Logger.printMessage(messages, context, "warn"); } public debug(message: any, context?: string): void; @@ -112,7 +123,7 @@ export class Logger implements LoggerService { ...optionalParameters, ]); - this.printMessage(messages, context, "debug"); + Logger.printMessage(messages, context, "debug"); } public verbose(message: any, context?: string): void; @@ -127,7 +138,7 @@ export class Logger implements LoggerService { ...optionalParameters, ]); - this.printMessage(messages, context, "verbose"); + Logger.printMessage(messages, context, "verbose"); } public fatal(message: any, context?: string): void; @@ -137,20 +148,22 @@ export class Logger implements LoggerService { return; } + let normalizedMessage = message; + if (message instanceof Error) { const transaction = Sentry.getCurrentHub().getScope()?.getTransaction(); transaction?.setStatus("internal_error"); Sentry.captureException(message); - message = message.stack; + normalizedMessage = message.stack; } const { messages, context } = this.getContextAndMessages([ - message, + normalizedMessage, ...optionalParameters, ]); - this.printMessage(messages, context, "fatal", "stderr", "📉"); + Logger.printMessage(messages, context, "fatal", "stderr", "📉"); } public setLogLevels(levels: LogLevel[]) { @@ -187,29 +200,7 @@ export class Logger implements LoggerService { return { messages, context: this.context }; } - private getColorByLogLevel(logLevel: LogLevel) { - switch (logLevel) { - case "debug": - return STATUS_COLORS.debug; - - case "warn": - return STATUS_COLORS.warn; - - case "error": - return STATUS_COLORS.error; - - case "verbose": - return STATUS_COLORS.info; - - case "log": - return STATUS_COLORS.success; - - case "fatal": - return STATUS_COLORS.fatal; - } - } - - private getTimeStamp() { + private static getTimeStamp() { if (isProduction) return DateTime.now().toFormat("h:mma"); const now = Date.now(); @@ -225,18 +216,18 @@ export class Logger implements LoggerService { return diff; } - private printMessage( + private static printMessage( messages: unknown[], context = "Default", logLevel: LogLevel = "log", writeStreamType: "stdout" | "stderr" = "stdout", icon = "📈" ) { - const color = this.getColorByLogLevel(logLevel); + const color = ColorByLogLevel[logLevel]; for (const message of messages) { const output = typeof message === "object" ? JSON.stringify(message) : message; - const timeStamp = this.getTimeStamp(); + const timeStamp = Logger.getTimeStamp(); const computedMessage = `${chalk.bold(`${icon}`)} ${chalk.hex(color.toString(16))( context @@ -247,6 +238,8 @@ export class Logger implements LoggerService { } } + + if (import.meta.vitest) { const { suite, it, expect, vi } = import.meta.vitest; diff --git a/packages/logger/tsconfig.json b/packages/logger/tsconfig.json index b1633af34..08154a472 100644 --- a/packages/logger/tsconfig.json +++ b/packages/logger/tsconfig.json @@ -2,7 +2,6 @@ "extends": "../../tsconfig.base.json", "include": [ "src", - "eslint.config.js", "vitest.config.ts" ] } \ No newline at end of file diff --git a/packages/math/eslint.config.js b/packages/math/eslint.config.js deleted file mode 100644 index 3325f85ed..000000000 --- a/packages/math/eslint.config.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Copyright (c) Statsify - * - * This source code is licensed under the GNU GPL v3 license found in the - * LICENSE file in the root directory of this source tree. - * https://github.com/Statsify/statsify/blob/main/LICENSE - */ - -import { defineConfig } from "../../eslint.config.js"; - -export default defineConfig({ tsconfigDirName: import.meta.dirname }); diff --git a/packages/math/package.json b/packages/math/package.json index b7e1ae322..7f4d1b280 100644 --- a/packages/math/package.json +++ b/packages/math/package.json @@ -6,11 +6,12 @@ "type": "module", "scripts": { "build": "swc src --config-file ../../.swcrc --out-dir dist --strip-leading-paths", - "test:types": "tsc --noEmit", - "lint": "eslint" + "typecheck": "tsgo --noEmit", + "lint": "oxlint", + "lint:ci": "oxlint --format=github" }, "dependencies": { "@statsify/util": "workspace:^", - "@swc/helpers": "^0.5.12" + "@swc/helpers": "^0.5.23" } -} \ No newline at end of file +} diff --git a/packages/math/src/index.ts b/packages/math/src/index.ts index 6a7dac212..1dbf1fa83 100644 --- a/packages/math/src/index.ts +++ b/packages/math/src/index.ts @@ -33,9 +33,9 @@ export const ratio = (n1 = 0, n2 = 0, multiply = 1) => { return roundTo(result * multiply); } else if (n1 === 0 && n2 === 0) { return 0; - } else { - return roundTo(n1 * multiply) || 0; } + return roundTo(n1 * multiply) || 0; + }; export const add = (...args: number[]): number => diff --git a/packages/math/tsconfig.json b/packages/math/tsconfig.json index b1633af34..08154a472 100644 --- a/packages/math/tsconfig.json +++ b/packages/math/tsconfig.json @@ -2,7 +2,6 @@ "extends": "../../tsconfig.base.json", "include": [ "src", - "eslint.config.js", "vitest.config.ts" ] } \ No newline at end of file diff --git a/packages/rendering/eslint.config.js b/packages/rendering/eslint.config.js deleted file mode 100644 index 3325f85ed..000000000 --- a/packages/rendering/eslint.config.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Copyright (c) Statsify - * - * This source code is licensed under the GNU GPL v3 license found in the - * LICENSE file in the root directory of this source tree. - * https://github.com/Statsify/statsify/blob/main/LICENSE - */ - -import { defineConfig } from "../../eslint.config.js"; - -export default defineConfig({ tsconfigDirName: import.meta.dirname }); diff --git a/packages/rendering/package.json b/packages/rendering/package.json index 8acf09b38..1a56658c8 100644 --- a/packages/rendering/package.json +++ b/packages/rendering/package.json @@ -15,16 +15,17 @@ }, "scripts": { "build": "swc src --out-dir dist --strip-leading-paths", - "test:types": "tsc --noEmit", - "lint": "eslint" + "typecheck": "tsgo --noEmit", + "lint": "oxlint", + "lint:ci": "oxlint --format=github" }, "dependencies": { "@sentry/node": "^7.118.0", "@statsify/assets": "workspace:^", "@statsify/util": "workspace:^", - "@swc/helpers": "^0.5.12", + "@swc/helpers": "^0.5.23", "axios": "1.11.0", - "skia-canvas": "https://github.com/samizdatco/skia-canvas/releases/download/v0.9.30/skia-canvas-v0.9.30-linux-x64-glibc.tar.gz", + "skia-canvas": "3.0.8", "typedi": "^0.10.0" }, "imports": { @@ -49,4 +50,4 @@ "default": "./dist/jsx/index.js" } } -} \ No newline at end of file +} diff --git a/packages/rendering/src/colors/index.ts b/packages/rendering/src/colors/index.ts index af00d401d..17f3681e8 100644 --- a/packages/rendering/src/colors/index.ts +++ b/packages/rendering/src/colors/index.ts @@ -44,7 +44,7 @@ export const parseColor = (color: string): RGBA => { .split(")")[0] .split(",") .map((o) => +o) as RGBA; - } else { - return [0, 0, 0, 0]; } + + return [0, 0, 0, 0]; }; diff --git a/packages/rendering/src/font/font-renderer.ts b/packages/rendering/src/font/font-renderer.ts index bd5d6d775..ab54eacb4 100644 --- a/packages/rendering/src/font/font-renderer.ts +++ b/packages/rendering/src/font/font-renderer.ts @@ -8,10 +8,10 @@ import _positions from "../../positions.json" with { type: "json" }; import _sizes from "../../sizes.json" with { type: "json" }; -import { - type Canvas, - type CanvasRenderingContext2D, - type ImageData, +import type { + Canvas, + CanvasRenderingContext2D, + ImageData, } from "skia-canvas"; import { type TextNode, type Token, tokens } from "./tokens.js"; import { createCanvas } from "../canvas.js"; @@ -47,11 +47,13 @@ export class FontRenderer { public async loadImages(fontPath: string) { const files = await readdir(fontPath); - const pictures = files.filter((file) => file.endsWith(".png")); - - for (const file of pictures) { + const pictures = await Promise.all(files.filter((file) => file.endsWith(".png")).map(async (file) => { const image = await loadImage(join(fontPath, file)); + const id = file.replace("unicode_page_", "").replace(".png", ""); + return [id, image] as const; + })); + for (const [id, image] of pictures) { const canvas = createCanvas(image.width, image.height); const ctx = canvas.getContext("2d"); @@ -62,15 +64,12 @@ export class FontRenderer { this.canvases.set(ctx, canvas); this.scales.set(ctx, image.width / 256); - this.images.set( - file.replace("unicode_page_", "").replace(".png", ""), - ctx - ); + this.images.set(id, ctx); } } public measureText(nodes: TextNode[]): { width: number; height: number } { - if (!nodes.length) return { width: 0, height: 0 }; + if (nodes.length === 0) return { width: 0, height: 0 }; let width = 0; let largestSize = nodes[0].size; @@ -143,7 +142,7 @@ export class FontRenderer { const nodes: TextNode[] = []; for (const part of parts) { - if (!part.length) continue; + if (part.length === 0) continue; let token: Token | null = null; let matches: RegExpMatchArray | null = null; @@ -168,9 +167,9 @@ export class FontRenderer { if (matches) text = text.slice(matches[0].length); - state = { ...state, ...effect }; + Object.assign(state, effect); - if (!text.length) continue; + if (text.length === 0) continue; const node: TextNode = { ...state, @@ -268,7 +267,7 @@ export class FontRenderer { bold: boolean ) { // Minecraft has weird spacing for the space - let gap = size * (width + (char == " " ? -2 : 2) * scale); + let gap = size * (width + (char === " " ? -2 : 2) * scale); if (bold) { gap += scale * size; diff --git a/packages/rendering/src/hooks/useGradient.ts b/packages/rendering/src/hooks/useGradient.ts index 3e6b377f2..09fb2f7bf 100644 --- a/packages/rendering/src/hooks/useGradient.ts +++ b/packages/rendering/src/hooks/useGradient.ts @@ -34,7 +34,9 @@ export function useGradient( ctx.createLinearGradient(x, y, x + width, y) : ctx.createLinearGradient(x, y, x, y + height); - colors.forEach(([offset, color]) => gradient.addColorStop(offset, color)); + for (const [offset, color] of colors) { + gradient.addColorStop(offset, color); + } return gradient; }; diff --git a/packages/rendering/src/index.ts b/packages/rendering/src/index.ts index 1d20f2e01..64b7c22cf 100644 --- a/packages/rendering/src/index.ts +++ b/packages/rendering/src/index.ts @@ -6,7 +6,6 @@ * https://github.com/Statsify/statsify/blob/main/LICENSE */ -/* eslint-disable @typescript-eslint/no-namespace */ export * from "./colors/index.js"; export * from "./canvas.js"; export * from "./font/index.js"; @@ -18,10 +17,8 @@ import type * as JSXInternal from "./jsx/index.js"; declare global { namespace JSX { - // @ts-ignore Typescript for the love of god won't let me override this interface type IntrinsicElements = JSXInternal.IntrinsicProps; - // @ts-ignore Typescript for the love of god won't let me override this interface type Element = JSXInternal.ElementNode; type Children = JSXInternal.Children; diff --git a/packages/rendering/src/intrinsics/Box.ts b/packages/rendering/src/intrinsics/Box.ts index e375c0994..d65393802 100644 --- a/packages/rendering/src/intrinsics/Box.ts +++ b/packages/rendering/src/intrinsics/Box.ts @@ -6,7 +6,7 @@ * https://github.com/Statsify/statsify/blob/main/LICENSE */ -import { type CanvasRenderingContext2D } from "skia-canvas"; +import type { CanvasRenderingContext2D } from "skia-canvas"; import type * as JSX from "#jsx"; import type { DeferredGradient } from "#hooks"; diff --git a/packages/rendering/src/jsx-runtime/convert.ts b/packages/rendering/src/jsx-runtime/convert.ts index efe2a58b0..1b5747906 100644 --- a/packages/rendering/src/jsx-runtime/convert.ts +++ b/packages/rendering/src/jsx-runtime/convert.ts @@ -156,7 +156,7 @@ export const elementToNode = ( let nodeOtherLength = 0; - node.children.forEach((child) => { + for (const child of node.children) { sideData = gatherSideData(child, side, sideData); if (typeof child[other].size === "string" && child[other].size !== "remaining") { @@ -170,7 +170,7 @@ export const elementToNode = ( const childOtherLength = getTotalSize(child[other]); if (childOtherLength > nodeOtherLength) nodeOtherLength = childOtherLength; } - }); + } node[other].minSize = nodeOtherLength; node[side].minSize = processSideData(sideData); diff --git a/packages/rendering/src/jsx/create-instructions.ts b/packages/rendering/src/jsx/create-instructions.ts index cdfb7c8dc..b5e268c1e 100644 --- a/packages/rendering/src/jsx/create-instructions.ts +++ b/packages/rendering/src/jsx/create-instructions.ts @@ -67,7 +67,7 @@ export const createInstructions = ( node.children[i] = createInstructions(child, child.component ?? component); } - if (!remaining.length) return node as Instruction; + if (remaining.length === 0) return node as Instruction; const remainingSideLength = remainingSide / remaining.length; diff --git a/packages/rendering/src/jsx/render.ts b/packages/rendering/src/jsx/render.ts index 2dea261d8..b1e3a1e1b 100644 --- a/packages/rendering/src/jsx/render.ts +++ b/packages/rendering/src/jsx/render.ts @@ -7,7 +7,7 @@ */ import * as Sentry from "@sentry/node"; -import { type Canvas, type CanvasRenderingContext2D } from "skia-canvas"; +import type { Canvas, CanvasRenderingContext2D } from "skia-canvas"; import { Container } from "typedi"; import { FontRenderer } from "#font"; import { IntrinsicRenders, intrinsicRenders } from "./instrinsics.js"; @@ -22,7 +22,7 @@ import type { Theme, } from "./types.js"; -const _render = ( +const renderRecursive = ( ctx: CanvasRenderingContext2D, context: ComputedThemeContext, intrinsicElements: IntrinsicRenders, @@ -81,7 +81,7 @@ const _render = ( applyDelta(getPositionalDelta(instruction, side), side); - instruction.children.forEach((child) => { + for (const child of instruction.children) { const size = getTotalSize(child[side]); switch (child.style.align) { @@ -92,12 +92,12 @@ const _render = ( const centerDelta = (instruction[oppositeSide].size - oppositeSize) / 2; applyDelta(centerDelta, oppositeSide); - _render(ctx, context, intrinsicElements, child, x, y); + renderRecursive(ctx, context, intrinsicElements, child, x, y); applyDelta(-centerDelta, oppositeSide); break; } case "left": - _render(ctx, context, intrinsicElements, child, x, y); + renderRecursive(ctx, context, intrinsicElements, child, x, y); break; case "right": { const oppositeSide = side === "x" ? "y" : "x"; @@ -108,14 +108,14 @@ const _render = ( child[oppositeSide].padding2); applyDelta(delta, oppositeSide); - _render(ctx, context, intrinsicElements, child, x, y); + renderRecursive(ctx, context, intrinsicElements, child, x, y); applyDelta(-delta, oppositeSide); break; } } applyDelta(size, side); - }); + } }; export function render(node: ElementNode, theme?: Theme): Canvas { @@ -151,7 +151,7 @@ export function render(node: ElementNode, theme?: Theme): Canvas { if (!context.renderer) context.renderer = Container.get(FontRenderer); - _render( + renderRecursive( ctx, context, { ...intrinsicRenders, ...theme?.elements }, diff --git a/packages/rendering/tsconfig.json b/packages/rendering/tsconfig.json index ffd6d6582..6e5689bdc 100644 --- a/packages/rendering/tsconfig.json +++ b/packages/rendering/tsconfig.json @@ -6,7 +6,6 @@ "include": [ "src", "tests", - "eslint.config.js", "vitest.config.ts" ] } \ No newline at end of file diff --git a/packages/schemas/eslint.config.js b/packages/schemas/eslint.config.js deleted file mode 100644 index 3325f85ed..000000000 --- a/packages/schemas/eslint.config.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Copyright (c) Statsify - * - * This source code is licensed under the GNU GPL v3 license found in the - * LICENSE file in the root directory of this source tree. - * https://github.com/Statsify/statsify/blob/main/LICENSE - */ - -import { defineConfig } from "../../eslint.config.js"; - -export default defineConfig({ tsconfigDirName: import.meta.dirname }); diff --git a/packages/schemas/package.json b/packages/schemas/package.json index 5aac15176..bf915c65a 100644 --- a/packages/schemas/package.json +++ b/packages/schemas/package.json @@ -6,15 +6,16 @@ "type": "module", "scripts": { "build": "swc src --config-file ../../.swcrc --out-dir dist --strip-leading-paths --copy-files", - "test:types": "tsc --noEmit", - "lint": "eslint" + "typecheck": "tsgo --noEmit", + "lint": "oxlint", + "lint:ci": "oxlint --format=github" }, "dependencies": { "@nestjs/swagger": "^11.2.0", "@statsify/logger": "workspace:^", "@statsify/math": "workspace:^", "@statsify/util": "workspace:^", - "@swc/helpers": "^0.5.12", + "@swc/helpers": "^0.5.23", "@typegoose/typegoose": "^12.6.0", "class-validator": "^0.14.1", "luxon": "^3.5.0" @@ -52,4 +53,4 @@ "default": "./dist/player/gamemodes/prefixes.js" } } -} \ No newline at end of file +} diff --git a/packages/schemas/src/game/game-modes.ts b/packages/schemas/src/game/game-modes.ts index e499b8486..ff214e21e 100644 --- a/packages/schemas/src/game/game-modes.ts +++ b/packages/schemas/src/game/game-modes.ts @@ -53,7 +53,7 @@ export class GameModes { this.hypixelModes = Object.fromEntries( modes .map((m) => { - if (typeof m.hypixel !== "string") return undefined; + if (typeof m.hypixel !== "string") return; const formatted = m.formatted ?? prettify((m as { api: string }).api); return [m.hypixel, formatted] as const; }).filter((entry) => entry !== undefined) diff --git a/packages/schemas/src/guild/index.ts b/packages/schemas/src/guild/index.ts index 4642a47db..33c427164 100644 --- a/packages/schemas/src/guild/index.ts +++ b/packages/schemas/src/guild/index.ts @@ -113,7 +113,8 @@ export class Guild { public cached?: boolean; public constructor(data: APIData = {}) { - this.id = data._id; + // oxlint-disable-next-line no-underscore-dangle + this.id = data._id; // Hypixel uses MongoDB which has object id fields that start with an underscore this.name = data.name; this.nameToLower = this.name?.toLowerCase(); this.description = data.description; diff --git a/packages/schemas/src/guild/member.ts b/packages/schemas/src/guild/member.ts index b736413d4..2664a8f5f 100644 --- a/packages/schemas/src/guild/member.ts +++ b/packages/schemas/src/guild/member.ts @@ -62,14 +62,12 @@ export class GuildMember { this.weekly = 0; this.monthly = 0; - Object.entries(data.expHistory as Record).forEach( - ([day, exp], index) => { + for (const [index, [day, exp]] of Object.entries(data.expHistory as Record).entries()) { this.expHistory[index] = exp; this.expHistoryDays[index] = day; if (index === 0) this.daily = exp; this.weekly += exp; - } - ); + } } public static isGuildMaster(member: GuildMember): boolean { diff --git a/packages/schemas/src/guild/util.ts b/packages/schemas/src/guild/util.ts index a885376e6..df31f70c5 100644 --- a/packages/schemas/src/guild/util.ts +++ b/packages/schemas/src/guild/util.ts @@ -22,9 +22,7 @@ export const getLevel = (exp: number) => { let level = 0; for (let i = 0; i <= 1000; i += 1) { - let need = 0; - - need = i >= REQUIRED_GEXP.length ? REQUIRED_GEXP.at(-1)! : REQUIRED_GEXP[i]; + const need = i >= REQUIRED_GEXP.length ? REQUIRED_GEXP.at(-1)! : REQUIRED_GEXP[i]; if (exp - need < 0) return { diff --git a/packages/schemas/src/metadata/deserialize.ts b/packages/schemas/src/metadata/deserialize.ts index 4ad72b48d..ef4ee5852 100644 --- a/packages/schemas/src/metadata/deserialize.ts +++ b/packages/schemas/src/metadata/deserialize.ts @@ -7,14 +7,17 @@ */ import { type Constructor, type Flatten, unflatten } from "@statsify/util"; -import { MetadataScanner } from "./metadata-scanner.js"; +import { scanMetadata } from "./metadata-scanner.js"; import { roundTo } from "@statsify/math"; import type { FieldMetadata } from "./metadata.interface.js"; -export const deserialize = (constructor: Constructor, instance: Flatten): T => { - const metadataEntries = MetadataScanner.scan(constructor) as [ +export const deserialize = ( + constructor: Constructor, + instance: Flatten, +): T => { + const metadataEntries = scanMetadata(constructor) as [ keyof Flatten, - FieldMetadata + FieldMetadata, ][]; const deserialized: Flatten = {} as Flatten; @@ -35,7 +38,9 @@ export const deserialize = (constructor: Constructor, instance: Flatten // If the value is numimercal round it to 2 digits of precision if (typeof deserialized[key] === "number") - deserialized[key] = roundTo(deserialized[key] as unknown as number) as any; + deserialized[key] = roundTo( + deserialized[key] as unknown as number, + ) as any; } // Unflatten the object to return the original type diff --git a/packages/schemas/src/metadata/field/get-leaderboard-metadata.ts b/packages/schemas/src/metadata/field/get-leaderboard-metadata.ts index b82181c49..4f10a81b1 100644 --- a/packages/schemas/src/metadata/field/get-leaderboard-metadata.ts +++ b/packages/schemas/src/metadata/field/get-leaderboard-metadata.ts @@ -13,7 +13,10 @@ import type { LeaderboardMetadata, TypeMetadata, } from "../metadata.interface.js"; -import type { HistoricalOptions, LeaderboardOptions } from "../field.options.js"; +import type { + HistoricalOptions, + LeaderboardOptions, +} from "../field.options.js"; const getLeaderboardName = (field: string) => { const ratioIndex = RATIOS.indexOf(field); @@ -55,9 +58,10 @@ export const getLeaderboardMetadata = ( typeMetadata: TypeMetadata, propertyKey: string, leaderboardOptions?: LeaderboardOptions, - historicalOptions?: HistoricalOptions + historicalOptions?: HistoricalOptions, ): { leaderboard: LeaderboardMetadata; historical: HistoricalMetadata } => { - const fieldName = leaderboardOptions?.fieldName ?? getLeaderboardName(propertyKey); + const fieldName = + leaderboardOptions?.fieldName ?? getLeaderboardName(propertyKey); const name = leaderboardOptions?.name ?? fieldName; const historicalFieldName = historicalOptions?.fieldName ?? fieldName; @@ -77,8 +81,6 @@ export const getLeaderboardMetadata = ( fieldName, name, }; - - historical = { ...leaderboard, fieldName: historicalFieldName, name: historicalName }; } else if (leaderboardOptions?.enabled === false) { leaderboard = { enabled: false, @@ -89,13 +91,6 @@ export const getLeaderboardMetadata = ( fieldName, name, }; - - historical = { - ...leaderboard, - ...historicalOptions, - fieldName: historicalFieldName, - name: historicalName, - }; } else { leaderboard = { enabled: true, @@ -107,17 +102,18 @@ export const getLeaderboardMetadata = ( additionalFields: leaderboardOptions?.additionalFields || [], extraDisplay: leaderboardOptions?.extraDisplay, formatter: leaderboardOptions?.formatter, - limit: leaderboardOptions?.limit ?? getDefaultLeaderboardLimit(propertyKey), + limit: + leaderboardOptions?.limit ?? getDefaultLeaderboardLimit(propertyKey), resetEvery: leaderboardOptions?.resetEvery, }; - - historical = { - ...leaderboard, - ...historicalOptions, - fieldName: historicalFieldName, - name: historicalName, - }; } + historical = { + ...leaderboard, + ...historicalOptions, + fieldName: historicalFieldName, + name: historicalName, + }; + return { leaderboard, historical }; }; diff --git a/packages/schemas/src/metadata/metadata-scanner.ts b/packages/schemas/src/metadata/metadata-scanner.ts index 070d47291..5a7d3ef1c 100644 --- a/packages/schemas/src/metadata/metadata-scanner.ts +++ b/packages/schemas/src/metadata/metadata-scanner.ts @@ -17,104 +17,109 @@ import type { Constructor } from "@statsify/util"; export type MetadataEntry = [string, FieldMetadata]; -export class MetadataScanner { - private static tokens: Map = new Map(); +const tokens = new Map(); - public static scan(target: Constructor) { - if (this.tokens.has(target)) return this.tokens.get(target)!; +export function scanMetadata(target: Constructor) { + if (tokens.has(target)) return tokens.get(target)!; - const metadata = this.getMetadataEntries(target); + const metadata = getMetadataEntries(target); - this.tokens.set(target, metadata); + tokens.set(target, metadata); - return metadata; - } - - private static getMetadataEntries( - constructor: Constructor, - base = "", - baseName = "" - ): MetadataEntry[] { - const classMetadata = Reflect.getMetadata( - METADATA_KEY, - constructor.prototype - ) as ClassMetadata; - - if (!classMetadata) return []; - - const entries = Object.entries(classMetadata); - const keys = Object.keys(classMetadata); - - const metadataEntries: MetadataEntry[] = []; - - entries.forEach(([key, value]) => { - const path = `${base ? `${base}.` : ""}${key}`; - const name = value.leaderboard.name ? - `${baseName ? `${baseName} ` : ""}${value.leaderboard.name}` : - baseName; - - const historicalName = value.historical.name ? - `${baseName ? `${baseName} ` : ""}${value.historical.name}` : - baseName; - - for (const ratio of LEADERBOARD_RATIO_KEYS) { - if (!ratio.includes(key)) continue; - - const remainingStats = ratio - .filter((r) => r !== key && keys.includes(r)) - .map((r) => `${base ? `${base}.` : ""}${r}`); - - if (!remainingStats.length) continue; - - value.leaderboard.additionalFields = remainingStats; - // TODO: Investigate if this is needed or if there is another way - // TODO: Does this break anything? - // ! This is needed for the ratios to work with sub modes - value.historical.additionalFields = remainingStats; - break; - } - - // Apply metadata to historical - if ( - !value.historical.additionalFields || - value.historical.additionalFields.length === 0 - ) - value.historical.additionalFields = value.leaderboard.additionalFields; + return metadata; +} - if (value.type.primitive || value.type.array) - return metadataEntries.push([ - path, - { - ...value, - leaderboard: { ...value.leaderboard, name }, - historical: { ...value.historical, name: historicalName }, - }, - ]); +function getMetadataEntries( + constructor: Constructor, + base = "", + baseName = "", +): MetadataEntry[] { + const classMetadata = Reflect.getMetadata( + METADATA_KEY, + constructor.prototype, + ) as ClassMetadata; + + if (!classMetadata) return []; + + const entries = Object.entries(classMetadata); + const keys = Object.keys(classMetadata); + + const metadataEntries: MetadataEntry[] = []; + + for (const [key, value] of entries) { + const path = `${base ? `${base}.` : ""}${key}`; + const name = value.leaderboard.name + ? `${baseName ? `${baseName} ` : ""}${value.leaderboard.name}` + : baseName; + + const historicalName = value.historical.name + ? `${baseName ? `${baseName} ` : ""}${value.historical.name}` + : baseName; + + for (const ratio of LEADERBOARD_RATIO_KEYS) { + if (!ratio.includes(key)) continue; + + const remainingStats = ratio + .filter((r) => r !== key && keys.includes(r)) + .map((r) => `${base ? `${base}.` : ""}${r}`); + + if (remainingStats.length === 0) continue; + + value.leaderboard.additionalFields = remainingStats; + // TODO: Investigate if this is needed or if there is another way + // TODO: Does this break anything? + // ! This is needed for the ratios to work with sub modes + value.historical.additionalFields = remainingStats; + break; + } + + // Apply metadata to historical + if ( + !value.historical.additionalFields || + value.historical.additionalFields.length === 0 + ) + value.historical.additionalFields = value.leaderboard.additionalFields; + + if (value.type.primitive || value.type.array) { + metadataEntries.push([ + path, + { + ...value, + leaderboard: { ...value.leaderboard, name }, + historical: { ...value.historical, name: historicalName }, + }, + ]); - // Carry the metadata down to the children - const subMetadataEntries = this.getMetadataEntries(value.type.type, path, name).map( - ([keyPath, metadata]) => { - if (!metadata.leaderboard.additionalFields?.length) - metadata.leaderboard.additionalFields = value.leaderboard.additionalFields; + continue; + } - if (!metadata.leaderboard.extraDisplay) - metadata.leaderboard.extraDisplay = value.leaderboard.extraDisplay; + // Carry the metadata down to the children + const subMetadataEntries = getMetadataEntries( + value.type.type, + path, + name, + ).map(([keyPath, metadata]) => { + if (!metadata.leaderboard.additionalFields?.length) + metadata.leaderboard.additionalFields = + value.leaderboard.additionalFields; - if (value.leaderboard.resetEvery && !metadata.leaderboard.resetEvery) - metadata.leaderboard.resetEvery = value.leaderboard.resetEvery; + if (!metadata.leaderboard.extraDisplay) + metadata.leaderboard.extraDisplay = value.leaderboard.extraDisplay; - if (!metadata.historical.additionalFields?.length) - metadata.historical.additionalFields = value.historical.additionalFields; + if (value.leaderboard.resetEvery && !metadata.leaderboard.resetEvery) + metadata.leaderboard.resetEvery = value.leaderboard.resetEvery; - return [keyPath, metadata] as MetadataEntry; - } - ); + if (!metadata.historical.additionalFields?.length) + metadata.historical.additionalFields = + value.historical.additionalFields; - metadataEntries.push(...subMetadataEntries); + return [keyPath, metadata] as MetadataEntry; }); - return metadataEntries; + metadataEntries.push(...subMetadataEntries); } + + return metadataEntries; } if (import.meta.vitest) { @@ -125,7 +130,9 @@ if (import.meta.vitest) { const stringMetadata = (name: string): FieldMetadata => { const lastIndexOfDot = name.lastIndexOf("."); - const fieldName = prettify(name.slice(Math.max(0, lastIndexOfDot === -1 ? 0 : lastIndexOfDot + 1))); + const fieldName = prettify( + name.slice(Math.max(0, lastIndexOfDot === -1 ? 0 : lastIndexOfDot + 1)), + ); return { leaderboard: { @@ -155,14 +162,14 @@ if (import.meta.vitest) { }; }; - suite("MetadataScanner", () => { + suite("Schema Metadata", () => { it("should read and write basic string metadata", () => { class Clazz { @Field() public fieldA: string; } - expect(MetadataScanner.scan(Clazz)).toEqual([ + expect(scanMetadata(Clazz)).toEqual([ ["fieldA", stringMetadata("fieldA")], ]); }); @@ -173,7 +180,7 @@ if (import.meta.vitest) { public fieldA: number; } - expect(MetadataScanner.scan(Clazz)).toEqual([ + expect(scanMetadata(Clazz)).toEqual([ [ "fieldA", { @@ -214,7 +221,7 @@ if (import.meta.vitest) { public fieldA: number; } - expect(MetadataScanner.scan(Clazz)).toEqual([ + expect(scanMetadata(Clazz)).toEqual([ [ "fieldA", { @@ -250,7 +257,7 @@ if (import.meta.vitest) { public fieldA: string[]; } - expect(MetadataScanner.scan(Clazz)).toEqual([ + expect(scanMetadata(Clazz)).toEqual([ [ "fieldA", { @@ -283,7 +290,7 @@ if (import.meta.vitest) { public fieldB: NestedClazz; } - expect(MetadataScanner.scan(Clazz)).toEqual([ + expect(scanMetadata(Clazz)).toEqual([ ["fieldA", stringMetadata("fieldA")], ["fieldB.fieldA", stringMetadata("fieldB.fieldA")], ["fieldB.fieldB.fieldA", stringMetadata("fieldB.fieldB.fieldA")], @@ -301,7 +308,7 @@ if (import.meta.vitest) { public fieldB: string; } - expect(MetadataScanner.scan(ChildClazz)).toEqual([ + expect(scanMetadata(ChildClazz)).toEqual([ ["fieldA", stringMetadata("fieldA")], ["fieldB", stringMetadata("fieldB")], ]); @@ -314,11 +321,13 @@ if (import.meta.vitest) { } class ParentClazz { - @Field({ leaderboard: { additionalFields: ["fieldA"], extraDisplay: "fieldA" } }) + @Field({ + leaderboard: { additionalFields: ["fieldA"], extraDisplay: "fieldA" }, + }) public fieldA: ChildClazz; } - const [[, { leaderboard }]] = MetadataScanner.scan(ParentClazz); + const [[, { leaderboard }]] = scanMetadata(ParentClazz); expect(leaderboard).toEqual({ enabled: true, diff --git a/packages/schemas/src/metadata/serialize.ts b/packages/schemas/src/metadata/serialize.ts index 71312d4a6..7f9416de2 100644 --- a/packages/schemas/src/metadata/serialize.ts +++ b/packages/schemas/src/metadata/serialize.ts @@ -6,17 +6,17 @@ * https://github.com/Statsify/statsify/blob/main/LICENSE */ -import { MetadataScanner } from "./metadata-scanner.js"; +import { scanMetadata } from "./metadata-scanner.js"; import type { Constructor, Flatten } from "@statsify/util"; import type { FieldMetadata } from "./metadata.interface.js"; export const serialize = ( constructor: Constructor, - instance: Flatten + instance: Flatten, ): Flatten => { - const metadataEntries = MetadataScanner.scan(constructor) as [ + const metadataEntries = scanMetadata(constructor) as [ keyof Flatten, - FieldMetadata + FieldMetadata, ][]; const serialized: Flatten = {} as Flatten; diff --git a/packages/schemas/src/player/gamemodes/duels/mode.ts b/packages/schemas/src/player/gamemodes/duels/mode.ts index 57cd014a0..305966015 100644 --- a/packages/schemas/src/player/gamemodes/duels/mode.ts +++ b/packages/schemas/src/player/gamemodes/duels/mode.ts @@ -37,7 +37,7 @@ export class BaseDuelsGameMode { this.wins = data[`${prefix}wins`]; this.losses = data[`${prefix}losses`]; - if (mode == "") { + if (mode === "") { this.winstreak = data.current_winstreak; this.bestWinstreak = data.best_overall_winstreak; } else { @@ -84,9 +84,13 @@ export class BowPVPBaseDuelsGameMode extends PVPBaseDuelsGameMode { @Field() public shotsFired: number; + @Field() + public shotsHit: number; + public constructor(data: APIData, mode: string) { super(data, mode); this.shotsFired = data[`${mode}_bow_shots`]; + this.shotsHit = data[`${mode}_bow_hits}`]; } } @@ -94,9 +98,13 @@ export class BowBaseDuelsGameMode extends PVPBaseDuelsGameMode { @Field() public shotsFired: number; + @Field() + public shotsHit: number; + public constructor(data: APIData, mode: string) { super(data, mode); this.shotsFired = data[`${mode}_bow_shots`]; + this.shotsHit = data[`${mode}_bow_hits}`]; } } @@ -156,7 +164,7 @@ export class BridgeDuels { this.fours, new BridgeDuelsMode(data, "bridge_2v2v2v2"), new BridgeDuelsMode(data, "bridge_3v3v3v3"), - new BridgeDuelsMode(data, "capture_threes") + new BridgeDuelsMode(data, "capture_threes"), ); this.overall.winstreak = data.current_bridge_winstreak; @@ -164,7 +172,12 @@ export class BridgeDuels { PVPBaseDuelsGameMode.applyRatios(this.overall); - const { titleFormatted, titleLevelFormatted, nextTitleLevelFormatted, progression } = getTitleAndProgression({ + const { + titleFormatted, + titleLevelFormatted, + nextTitleLevelFormatted, + progression, + } = getTitleAndProgression({ score: this.overall.wins, mode: "Bridge", data, @@ -200,7 +213,13 @@ export class MultiPVPDuelsGameMode { @Field() public doubles: BowPVPBaseDuelsGameMode; - public constructor(data: APIData, title: string, short: string, long: string, titleRequirement: TitleRequirement) { + public constructor( + data: APIData, + title: string, + short: string, + long: string, + titleRequirement: TitleRequirement, + ) { this.solo = new BowPVPBaseDuelsGameMode(data, `${short}_duel`); this.doubles = new BowPVPBaseDuelsGameMode(data, `${short}_doubles`); @@ -210,7 +229,12 @@ export class MultiPVPDuelsGameMode { this.overall.bestWinstreak = data[`best_${long}_winstreak`]; this.overall.winstreak = data[`current_${long}_winstreak`]; - const { titleFormatted, titleLevelFormatted, nextTitleLevelFormatted, progression } = getTitleAndProgression({ + const { + titleFormatted, + titleLevelFormatted, + nextTitleLevelFormatted, + progression, + } = getTitleAndProgression({ score: this.overall.wins, mode: title, data, @@ -237,10 +261,20 @@ export class SinglePVPDuelsGameMode extends PVPBaseDuelsGameMode { @Field() public progression: Progression; - public constructor(data: APIData, title: string, mode: string, titleRequirement: TitleRequirement) { + public constructor( + data: APIData, + title: string, + mode: string, + titleRequirement: TitleRequirement, + ) { super(data, mode); - const { titleFormatted, titleLevelFormatted, nextTitleLevelFormatted, progression } = getTitleAndProgression({ + const { + titleFormatted, + titleLevelFormatted, + nextTitleLevelFormatted, + progression, + } = getTitleAndProgression({ score: this.wins, mode: title, data, @@ -258,10 +292,19 @@ export class SingleBowPVPDuelsGameMode extends SinglePVPDuelsGameMode { @Field() public shotsFired: number; - public constructor(data: APIData, title: string, mode: string, titleRequirement: TitleRequirement) { + @Field() + public shotsHit: number; + + public constructor( + data: APIData, + title: string, + mode: string, + titleRequirement: TitleRequirement, + ) { super(data, title, mode, titleRequirement); mode = mode ? `${mode}_` : mode; this.shotsFired = data[`${mode}bow_shots`]; + this.shotsHit = data[`${mode}bow_hits}`]; } } @@ -278,10 +321,20 @@ export class SingleDuelsGameMode extends BaseDuelsGameMode { @Field() public progression: Progression; - public constructor(data: APIData, title: string, mode: string, titleRequirement: TitleRequirement) { + public constructor( + data: APIData, + title: string, + mode: string, + titleRequirement: TitleRequirement, + ) { super(data, mode); - const { titleFormatted, titleLevelFormatted, nextTitleLevelFormatted, progression } = getTitleAndProgression({ + const { + titleFormatted, + titleLevelFormatted, + nextTitleLevelFormatted, + progression, + } = getTitleAndProgression({ score: this.wins, mode: title, data, @@ -342,7 +395,12 @@ export class UHCDuels { this.fours = new BowPVPBaseDuelsGameMode(data, "uhc_four"); this.deathmatch = new BowPVPBaseDuelsGameMode(data, "uhc_meetup"); - this.overall = deepAdd(this.solo, this.doubles, this.fours, this.deathmatch); + this.overall = deepAdd( + this.solo, + this.doubles, + this.fours, + this.deathmatch, + ); this.overall.winstreak = data.current_uhc_winstreak; this.overall.bestWinstreak = data.best_uhc_winstreak; BowPVPBaseDuelsGameMode.applyRatios(this.overall); @@ -351,10 +409,15 @@ export class UHCDuels { data.uhc_duel_golden_apples_eaten, data.uhc_doubles_golden_apples_eaten, data.uhc_four_golden_apples_eaten, - data.uhc_meetu_golden_apples_eaten + data.uhc_meetu_golden_apples_eaten, ); - const { titleFormatted, titleLevelFormatted, nextTitleLevelFormatted, progression } = getTitleAndProgression({ + const { + titleFormatted, + titleLevelFormatted, + nextTitleLevelFormatted, + progression, + } = getTitleAndProgression({ score: this.overall.wins, mode: "UHC", data, @@ -375,8 +438,16 @@ export class SkyWarsDuels extends MultiPVPDuelsGameMode { public constructor(data: APIData) { super(data, "SkyWars", "sw", "skywars", "default"); - const kit = data.sw_duels_kit_new3 ?? data.sw_duels_kit_new2 ?? data.sw_duels_kit_new ?? "none"; - this.kit = kit.replace("kit_", "").replaceAll("ranked_", "").replaceAll("mega_", "").replaceAll("defending_team_", ""); + const kit = + data.sw_duels_kit_new3 ?? + data.sw_duels_kit_new2 ?? + data.sw_duels_kit_new ?? + "none"; + this.kit = kit + .replace("kit_", "") + .replaceAll("ranked_", "") + .replaceAll("mega_", "") + .replaceAll("defending_team_", ""); } } @@ -397,10 +468,14 @@ export class QuakeDuels extends SinglePVPDuelsGameMode { @Field() public shotsFired: number; + @Field() + public shotsHit: number; + public constructor(data: APIData) { super(data, "Quakecraft", "quake_duel", "default"); this.headshots = data.quake_duel_quake_headshots; this.shotsFired = data.quake_duel_quake_shots_taken; + this.shotsHit = data.quake_duel_quake_shots_hit; } } @@ -501,7 +576,12 @@ export class BedwarsDuels { this.rush = new PVPBaseDuelsGameMode(data, "bedwars_two_one_duels_rush"); this.overall = new BedWarsDuelsOverallMode(data); - const { titleFormatted, titleLevelFormatted, nextTitleLevelFormatted, progression } = getTitleAndProgression({ + const { + titleFormatted, + titleLevelFormatted, + nextTitleLevelFormatted, + progression, + } = getTitleAndProgression({ score: this.overall.wins, mode: "Bed Wars", data, @@ -562,7 +642,12 @@ export class SpleefDuels { this.bowSpleef = new BowSpleefDuelMode(data); this.overallWins = add(this.spleef.wins, this.bowSpleef.wins); - const { titleFormatted, titleLevelFormatted, nextTitleLevelFormatted, progression } = getTitleAndProgression({ + const { + titleFormatted, + titleLevelFormatted, + nextTitleLevelFormatted, + progression, + } = getTitleAndProgression({ score: this.overallWins, mode: "Spleef", data, @@ -604,7 +689,12 @@ export class MegaWallsDuels extends SinglePVPDuelsGameMode { PVPBaseDuelsGameMode.applyRatios(this); - const { titleFormatted, titleLevelFormatted, nextTitleLevelFormatted, progression } = getTitleAndProgression({ + const { + titleFormatted, + titleLevelFormatted, + nextTitleLevelFormatted, + progression, + } = getTitleAndProgression({ score: this.wins, mode: "Mega Walls", data, diff --git a/packages/schemas/src/player/gamemodes/murdermystery/index.ts b/packages/schemas/src/player/gamemodes/murdermystery/index.ts index f321ef0d0..7980274ee 100644 --- a/packages/schemas/src/player/gamemodes/murdermystery/index.ts +++ b/packages/schemas/src/player/gamemodes/murdermystery/index.ts @@ -87,9 +87,9 @@ const BRACKETS: Record string> = { }; const PREFIX_STAT: Record number | undefined> = { - random_cosmetic: () => undefined, - random_favorite_cosmetic: () => undefined, - prefixstat_none: () => undefined, + random_cosmetic: () => {}, + random_favorite_cosmetic: () => {}, + prefixstat_none: () => {}, prefixstat_classic_wins: (mm) => add(mm.classic.wins, mm.doubleUp.wins), prefixstat_infection_wins: (mm) => mm.infection.wins ?? 0, prefixstat_assassins_wins: (mm) => mm.assassins.wins ?? 0, diff --git a/packages/schemas/src/player/gamemodes/murdermystery/mode.ts b/packages/schemas/src/player/gamemodes/murdermystery/mode.ts index 547c120b5..3fe4ad413 100644 --- a/packages/schemas/src/player/gamemodes/murdermystery/mode.ts +++ b/packages/schemas/src/player/gamemodes/murdermystery/mode.ts @@ -234,7 +234,7 @@ export class MurderMysteryKnife { this.kind = data.active_knife_skin?.replace("knife_skin_", "") ?? "none"; if (this.kind === "random_cosmetic") { - let max: [string, number] | undefined = undefined; + let max; const knifes = Object.entries( data?.knifeSkinPrestiges?.xp ?? ({} as Record) diff --git a/packages/schemas/src/player/gamemodes/quests/util.ts b/packages/schemas/src/player/gamemodes/quests/util.ts index ddfdddd88..5468830f3 100644 --- a/packages/schemas/src/player/gamemodes/quests/util.ts +++ b/packages/schemas/src/player/gamemodes/quests/util.ts @@ -70,13 +70,13 @@ const processQuests = ( options: QuestOption[], fieldPrefix?: string ) => { - options.forEach((quest) => { + for (const quest of options) { const k = quest.propertyKey ?? quest.field; const field = fieldPrefix ? `${fieldPrefix}_${quest.field}` : quest.field; instance[k] = getQuestCountDuring(time, quests[field]); instance.total += instance[k] ?? 0; - }); + } }; const assignQuestMetadata = ( @@ -84,7 +84,7 @@ const assignQuestMetadata = ( time: QuestTime, options: QuestOption[] ) => { - options.forEach((quest) => { + for (const quest of options) { const hasOverall = quest.overall !== undefined; const canDisplayOverall = hasOverall && time === QuestTime.Overall; @@ -101,7 +101,7 @@ const assignQuestMetadata = ( }); decorator(constructor.prototype, quest.propertyKey ?? quest.field); - }); + } }; const questTotalFieldData = (game: FormattedGame, enabled = false) => ({ @@ -224,13 +224,13 @@ export function createQuestsInstance< [key: string]: Record; public constructor(data: APIData) { - modes.forEach(([game, quests]) => { + for (const [game, quests] of modes) { this[game] = new quests[time](data); - }); + } } } - modes.forEach(([gameName, quests]) => { + for (const [gameName, quests] of modes) { const GameModeClass = quests[time]; const decorator = Field({ @@ -240,7 +240,7 @@ export function createQuestsInstance< }); decorator(QuestInstance.prototype, gameName); - }); + } return QuestInstance as unknown as IQuestInstance; } diff --git a/packages/schemas/src/player/gamemodes/skywars/util.ts b/packages/schemas/src/player/gamemodes/skywars/util.ts index a56847c5b..7f122ce23 100644 --- a/packages/schemas/src/player/gamemodes/skywars/util.ts +++ b/packages/schemas/src/player/gamemodes/skywars/util.ts @@ -461,7 +461,7 @@ export function getFormattedLevel( selectedEmblem = selectedEmblem?.replace("emblem_", ""); let schemeKey: keyof typeof SCHEME_MAP; - let emblemKey: keyof typeof EMBLEM_MAP | undefined = undefined; + let emblemKey: keyof typeof EMBLEM_MAP; if (selectedScheme) { if (selectedScheme in SCHEME_MAP) { @@ -485,7 +485,7 @@ export function getFormattedLevel( emblemKey = "default"; } - const emblem = emblemKey ? EMBLEM_MAP[emblemKey] : undefined; + const emblem = EMBLEM_MAP[emblemKey]; const scheme = SCHEME_MAP[schemeKey]; return scheme(level, bold, underline, strikethrough, emblem); diff --git a/packages/schemas/src/player/gamemodes/woolgames/sheepwars.ts b/packages/schemas/src/player/gamemodes/woolgames/sheepwars.ts index 413a0f7dd..b95caf536 100644 --- a/packages/schemas/src/player/gamemodes/woolgames/sheepwars.ts +++ b/packages/schemas/src/player/gamemodes/woolgames/sheepwars.ts @@ -6,7 +6,7 @@ * https://github.com/Statsify/statsify/blob/main/LICENSE */ -import { type APIData } from "@statsify/util"; +import type { APIData } from "@statsify/util"; import { Field } from "#metadata"; import { ratio } from "@statsify/math"; diff --git a/packages/schemas/src/player/index.ts b/packages/schemas/src/player/index.ts index 28e39fc18..e1256f468 100644 --- a/packages/schemas/src/player/index.ts +++ b/packages/schemas/src/player/index.ts @@ -12,7 +12,12 @@ import { modelOptions as ModelOptions, Severity } from "@typegoose/typegoose"; import { PlayerSocials } from "./socials.js"; import { PlayerStats } from "./stats.js"; import { PlayerStatus } from "./status.js"; -import { PlayerUtil } from "./util.js"; +import { + getDisplayName, + getPlayerRank, + getPlusColor, + getRankColor, +} from "./util.js"; import type { APIData } from "@statsify/util"; @ModelOptions({ options: { allowMixed: Severity.ALLOW } }) @@ -34,7 +39,8 @@ export class Player { @Field({ docs: { - description: "The player's name with their rank color as seen in game lobbies", + description: + "The player's name with their rank color as seen in game lobbies", examples: ["§bj4cobi"], }, }) @@ -84,13 +90,13 @@ export class Player { this.username = data.displayname; this.usernameToLower = this.username?.toLowerCase(); - this.rank = PlayerUtil.getRank(data); - this.plusColor = PlayerUtil.getPlusColor(this.rank, data?.rankPlusColor); - this.prefixName = `${PlayerUtil.getRankColor(this.rank).toString()}${this.username}`; - this.displayName = PlayerUtil.getDisplayName( + this.rank = getPlayerRank(data); + this.plusColor = getPlusColor(this.rank, data?.rankPlusColor); + this.prefixName = `${getRankColor(this.rank).toString()}${this.username}`; + this.displayName = getDisplayName( this.username, this.rank, - this.plusColor.code + this.plusColor.code, ); this.socials = new PlayerSocials(data?.socialMedia?.links ?? {}); @@ -106,4 +112,4 @@ export * from "./gamemodes/index.js"; export * from "./socials.js"; export * from "./stats.js"; export * from "./status.js"; -export { rankMap } from "./util.js"; +export { RANK_MAP as rankMap } from "./util.js"; diff --git a/packages/schemas/src/player/status.ts b/packages/schemas/src/player/status.ts index b67c0dd58..663975432 100644 --- a/packages/schemas/src/player/status.ts +++ b/packages/schemas/src/player/status.ts @@ -25,12 +25,18 @@ function findLastAction(data: APIData): { action: string; time: number } { lastQuestStart = quest.active.started; } - if (quest.completions?.length && quest.completions.at(-1)?.time > lastQuestEnd) { + if ( + quest.completions?.length && + quest.completions.at(-1)?.time > lastQuestEnd + ) { lastQuestEnd = quest.completions.at(-1).time; } } - actions.push({ action: "QUEST_START", time: lastQuestStart }, { action: "QUEST_COMPLETED", time: lastQuestEnd }); + actions.push( + { action: "QUEST_START", time: lastQuestStart }, + { action: "QUEST_COMPLETED", time: lastQuestEnd }, + ); const allPets = data?.petStats ?? {}; @@ -42,7 +48,7 @@ function findLastAction(data: APIData): { action: string; time: number } { const thisPetTime = Math.max( pet?.THIRST?.timestamp ?? 0, pet?.EXERCISE?.timestamp ?? 0, - pet?.HUNGER?.timestamp ?? 0 + pet?.HUNGER?.timestamp ?? 0, ); if (thisPetTime > lastPetTime) { @@ -53,16 +59,19 @@ function findLastAction(data: APIData): { action: string; time: number } { // It really is not necessary to display which pet action was last done // Therefore just putting pet is explanation enough to the players last // known whereabouts. - actions.push({ action: "PET", time: lastPetTime }, { - action: "PET_JOURNEY", - time: data?.petJourneyTimestamp ?? 0, - }); + actions.push( + { action: "PET", time: lastPetTime }, + { + action: "PET_JOURNEY", + time: data?.petJourneyTimestamp ?? 0, + }, + ); if (data?.stats?.SkyWars) { // Lab modes are explained each first time any player enters the game // as well as when they click the book while in queue. const explains = Object.entries(data?.stats?.SkyWars).filter((e) => - e[0].endsWith("explained_last") + e[0].endsWith("explained_last"), ); if (explains.length > 0) { @@ -111,7 +120,7 @@ function findLastAction(data: APIData): { action: string; time: number } { { action: "PIT_TRADE", time: Math.max(...(pitProfile.trade_timestamps ?? [0])), - } + }, ); } @@ -133,14 +142,19 @@ function findLastAction(data: APIData): { action: string; time: number } { { action: "LOGOUT", time: data?.lastLogout ?? 0, - } + }, ); // This is good for tracking ap hunters who are playing games with very // little in the way of time stats in the game they are playing. if (data?.achievementRewardsNew) { - const rewardsArr: number[] = Object.values(data?.achievementRewardsNew ?? {}); - actions.push({ action: "ACHIEVEMENT_REWARD", time: Math.max(...rewardsArr) }); + const rewardsArr: number[] = Object.values( + data?.achievementRewardsNew ?? {}, + ); + actions.push({ + action: "ACHIEVEMENT_REWARD", + time: Math.max(...rewardsArr), + }); } // Many people who just wait in lobbies will be shown on this stat since they @@ -154,8 +168,13 @@ function findLastAction(data: APIData): { action: string; time: number } { if (data.stats) { const games = Object.values(data.stats); - const tourneyAds = games.map((g: any) => g.lastTourneyAd).filter((v) => !!v); - actions.push({ action: "TOURNAMENT_ADVERTISEMENT", time: Math.max(...tourneyAds) }); + const tourneyAds = games + .map((g: any) => g.lastTourneyAd) + .filter((v) => !!v); + actions.push({ + action: "TOURNAMENT_ADVERTISEMENT", + time: Math.max(...tourneyAds), + }); } // First login is used as a baseline due to it being literally the oldest timestamp @@ -198,6 +217,7 @@ export class PlayerStatus { public constructor(data: APIData) { // The first login provided by hypixel is not fully accurate for very old players, it is better to use the `_id` field + // oxlint-disable-next-line no-underscore-dangle this.firstLogin = Number.parseInt(data._id?.slice(0, 8) ?? 0, 16) * 1000; const lastAction = findLastAction(data); diff --git a/packages/schemas/src/player/util.ts b/packages/schemas/src/player/util.ts index 675ec8ae8..0ee5e9977 100644 --- a/packages/schemas/src/player/util.ts +++ b/packages/schemas/src/player/util.ts @@ -9,143 +9,143 @@ import { Color, type ColorCode, type ColorId } from "#color"; import type { APIData } from "@statsify/util"; -export const rankMap: Record string> = { +export const RANK_MAP: Record string> = { "MVP+": (plusColor) => `§b[MVP${plusColor}+§b]`, "MVP++": (plusColor) => `§6[MVP${plusColor}++§6]`, "bMVP++": (plusColor) => `§b[MVP${plusColor}++§b]`, - "MVP": () => "§b[MVP]", + MVP: () => "§b[MVP]", "VIP+": () => "§a[VIP§6+§a]", - "VIP": () => "§a[VIP]", - "YOUTUBE": () => "§c[§fYOUTUBE§c]", + VIP: () => "§a[VIP]", + YOUTUBE: () => "§c[§fYOUTUBE§c]", "PIG+++": () => "§d[PIG§b+++§d]", - "INNIT": () => "§d[INNIT]", - "GM": () => "§2[GM]", - "ADMIN": () => "§c[ADMIN]", - "OWNER": () => "§c[OWNER]", - "STAFF": () => "§c[§6ዞ§c]", - "MOJANG": () => "§6[MOJANG]", - "EVENTS": () => "§6[EVENTS]", - "DEFAULT": () => "§7", + INNIT: () => "§d[INNIT]", + GM: () => "§2[GM]", + ADMIN: () => "§c[ADMIN]", + OWNER: () => "§c[OWNER]", + STAFF: () => "§c[§6ዞ§c]", + MOJANG: () => "§6[MOJANG]", + EVENTS: () => "§6[EVENTS]", + DEFAULT: () => "§7", }; -/** - * A set of utility functions for getting things like `rank`, `displayName` and `plusColor` - */ -export class PlayerUtil { - public static getRank(data: APIData) { - let rank = "DEFAULT"; - - if (data.monthlyPackageRank || data.packageRank || data.newPackageRank) { - if (data.monthlyPackageRank === "SUPERSTAR") { - rank = data.monthlyPackageRank; - - if (data.monthlyRankColor && data.monthlyRankColor !== "GOLD") { - rank = "bMVP++"; - } - } else if (data.newPackageRank && data.newPackageRank !== "NONE") { - rank = data.newPackageRank; - } else if (data.packageRank && data.packageRank !== "NONE") { - rank = data.packageRank; - } - } +export function getPlayerRank(data: APIData) { + let rank = "DEFAULT"; - if (data.rank && data.rank !== "NORMAL") { - rank = data.rank; - } + if (data.monthlyPackageRank || data.packageRank || data.newPackageRank) { + if (data.monthlyPackageRank === "SUPERSTAR") { + rank = data.monthlyPackageRank; - if (data.prefix) { - rank = data.prefix.replace(/§.|\[|]/g, ""); + if (data.monthlyRankColor && data.monthlyRankColor !== "GOLD") { + rank = "bMVP++"; + } + } else if (data.newPackageRank && data.newPackageRank !== "NONE") { + rank = data.newPackageRank; + } else if (data.packageRank && data.packageRank !== "NONE") { + rank = data.packageRank; } + } - rank = this.replaceRank(rank); - - return rank.length === 0 ? "DEFAULT" : rank; + if (data.rank && data.rank !== "NORMAL") { + rank = data.rank; } - public static getPlusColor(rank: string, plusColor?: ColorId): Color { - const rankColorMap: Record = { - "MVP+": new Color("RED"), - "MVP++": new Color("RED"), - "bMVP++": new Color("RED"), - "MVP": new Color("AQUA"), - "VIP": new Color("GREEN"), - "VIP+": new Color("GOLD"), - "PIG+++": new Color("AQUA"), - }; + if (data.prefix) { + rank = data.prefix.replaceAll(/§.|\[|]/g, ""); + } - if (plusColor === undefined || rank === "PIG+++" || rank === "VIP") { - const rankColor: Color = rankColorMap[rank]; + rank = replaceRank(rank); - if (!rankColor) return new Color("GRAY"); + return rank.length === 0 ? "DEFAULT" : rank; +} - return rankColor; - } +const RANK_COLOR_MAP: Record = { + "MVP+": new Color("RED"), + "MVP++": new Color("RED"), + "bMVP++": new Color("RED"), + MVP: new Color("AQUA"), + VIP: new Color("GREEN"), + "VIP+": new Color("GOLD"), + "PIG+++": new Color("AQUA"), +}; - const rankColor = new Color(plusColor); +export function getPlusColor(rank: string, plusColor?: ColorId): Color { + if (plusColor === undefined || rank === "PIG+++" || rank === "VIP") { + const rankColor: Color = RANK_COLOR_MAP[rank]; if (!rankColor) return new Color("GRAY"); return rankColor; } - public static getRankColor(rank: string): Color { - switch (rank) { - case "STAFF": - case "YOUTUBE": - case "ADMIN": - case "OWNER": - case "SLOTH": - case "MCP": - case "MINISTER": - return new Color("RED"); - - case "PIG+++": - case "INNIT": - return new Color("LIGHT_PURPLE"); - - case "MOD": - case "GM": - return new Color("DARK_GREEN"); - - case "HELPER": - return new Color("BLUE"); - - case "BUILD TEAM": - return new Color("DARK_AQUA"); - - case "MVP++": - case "APPLE": - case "MOJANG": - case "EVENTS": - return new Color("GOLD"); - - case "MVP": - case "MVP+": - case "bMVP++": - return new Color("AQUA"); - - case "VIP": - case "VIP+": - return new Color("GREEN"); - - default: - return new Color("GRAY"); - } - } + const rankColor = new Color(plusColor); - public static getDisplayName(username: string, rank: string, plusColor: ColorCode) { - const colorRank = rankMap[rank](plusColor); - return `${colorRank}${colorRank === "§7" ? "" : " "}${username}`; - } + if (!rankColor) return new Color("GRAY"); + + return rankColor; +} - private static replaceRank(rank: string) { - return rank - .replace("SUPERSTAR", "MVP++") - .replace("VIP_PLUS", "VIP+") - .replace("MVP_PLUS", "MVP+") - .replace("MODERATOR", "MOD") - .replace("GAME_MASTER", "GM") - .replace("YOUTUBER", "YOUTUBE") - .replace("NONE", ""); +export function getRankColor(rank: string): Color { + switch (rank) { + case "STAFF": + case "YOUTUBE": + case "ADMIN": + case "OWNER": + case "SLOTH": + case "MCP": + case "MINISTER": + return new Color("RED"); + + case "PIG+++": + case "INNIT": + return new Color("LIGHT_PURPLE"); + + case "MOD": + case "GM": + return new Color("DARK_GREEN"); + + case "HELPER": + return new Color("BLUE"); + + case "BUILD TEAM": + return new Color("DARK_AQUA"); + + case "MVP++": + case "APPLE": + case "MOJANG": + case "EVENTS": + return new Color("GOLD"); + + case "MVP": + case "MVP+": + case "bMVP++": + return new Color("AQUA"); + + case "VIP": + case "VIP+": + return new Color("GREEN"); + + default: + return new Color("GRAY"); } } + +export function getDisplayName( + username: string, + rank: string, + plusColor: ColorCode, +) { + const rankFormatter = rank in RANK_MAP ? RANK_MAP[rank] : RANK_MAP.DEFAULT; + const coloredRank = rankFormatter(plusColor); + return `${coloredRank}${coloredRank === "§7" ? "" : " "}${username}`; +} + +function replaceRank(rank: string) { + return rank + .replace("SUPERSTAR", "MVP++") + .replace("VIP_PLUS", "VIP+") + .replace("MVP_PLUS", "MVP+") + .replace("MODERATOR", "MOD") + .replace("GAME_MASTER", "GM") + .replace("YOUTUBER", "YOUTUBE") + .replace("NONE", ""); +} diff --git a/packages/schemas/src/util/create-historical-player.ts b/packages/schemas/src/util/create-historical-player.ts index c7642e524..8601cb3b2 100644 --- a/packages/schemas/src/util/create-historical-player.ts +++ b/packages/schemas/src/util/create-historical-player.ts @@ -15,33 +15,41 @@ export function createHistoricalPlayer(oldOne: T, newOne: T): T { const keys = Object.keys({ ...oldOne, ...(newOne as any) }); - for (const _key of keys) { - const key = _key as keyof T; + for (const untypedKey of keys) { + const key = untypedKey as keyof T; const newOneType = typeof newOne[key]; if (typeof oldOne[key] === "number" || newOneType === "number") { - const ratioIndex = RATIOS.indexOf(_key); + const ratioIndex = RATIOS.indexOf(untypedKey); if (ratioIndex === -1) { merged[key] = sub( newOne[key] as unknown as number, - oldOne[key] as unknown as number + oldOne[key] as unknown as number, ) as unknown as T[keyof T]; } else { const numerator = sub( - newOne[RATIO_STATS[ratioIndex][0] as unknown as keyof T] as unknown as number, - oldOne[RATIO_STATS[ratioIndex][0] as unknown as keyof T] as unknown as number + newOne[ + RATIO_STATS[ratioIndex][0] as unknown as keyof T + ] as unknown as number, + oldOne[ + RATIO_STATS[ratioIndex][0] as unknown as keyof T + ] as unknown as number, ); const denominator = sub( - newOne[RATIO_STATS[ratioIndex][1] as unknown as keyof T] as unknown as number, - oldOne[RATIO_STATS[ratioIndex][1] as unknown as keyof T] as unknown as number + newOne[ + RATIO_STATS[ratioIndex][1] as unknown as keyof T + ] as unknown as number, + oldOne[ + RATIO_STATS[ratioIndex][1] as unknown as keyof T + ] as unknown as number, ); merged[key] = ratio( numerator, denominator, - RATIO_STATS[ratioIndex][4] ?? 1 + RATIO_STATS[ratioIndex][4] ?? 1, ) as unknown as T[keyof T]; } } else if (newOneType === "string") { @@ -52,7 +60,10 @@ export function createHistoricalPlayer(oldOne: T, newOne: T): T { continue; } - merged[key] = createHistoricalPlayer(oldOne[key] ?? {}, newOne[key] ?? {}) as unknown as T[keyof T]; + merged[key] = createHistoricalPlayer( + oldOne[key] ?? {}, + newOne[key] ?? {}, + ) as unknown as T[keyof T]; } } diff --git a/packages/schemas/src/util/historical-scanner.ts b/packages/schemas/src/util/historical-scanner.ts deleted file mode 100644 index 8cde98115..000000000 --- a/packages/schemas/src/util/historical-scanner.ts +++ /dev/null @@ -1,66 +0,0 @@ -/** - * Copyright (c) Statsify - * - * This source code is licensed under the GNU GPL v3 license found in the - * LICENSE file in the root directory of this source tree. - * https://github.com/Statsify/statsify/blob/main/LICENSE - */ - -import { - type HistoricalEnabledMetadata, - type HistoricalMetadata, - type MetadataEntry, - MetadataScanner, -} from "#metadata"; -import { parseAdditionalFields } from "./parse-fields.js"; -import type { Constructor } from "@statsify/util"; - -export class HistoricalScanner { - public static getHistoricalMetadata(constructor: Constructor) { - const metadata = MetadataScanner.scan(constructor); - - const fields = metadata.filter(([, { historical }]) => historical.enabled); - - return fields; - } - - public static getHistoricalFields(constructor: Constructor) { - return this.getHistoricalMetadata(constructor); - } - - public static getHistoricalField( - constructor: Constructor, - key: string, - leaderboardMustBeEnabled?: true - ): HistoricalEnabledMetadata; - public static getHistoricalField( - constructor: Constructor, - key: string, - leaderboardMustBeEnabled: false - ): HistoricalMetadata; - public static getHistoricalField( - constructor: Constructor, - key: string, - leaderboardMustBeEnabled = true - ): HistoricalMetadata { - const field: MetadataEntry | undefined = MetadataScanner.scan(constructor).find( - ([k]) => k === key - ); - if (!field) throw new Error(`${key} is not a field for ${constructor.name}`); - - const [, { historical }] = field; - - if (!historical.enabled && leaderboardMustBeEnabled) - throw new Error( - `${key} is not a historical leaderboard field for ${constructor.name}` - ); - - if (Array.isArray(historical.additionalFields)) { - historical.additionalFields = historical.additionalFields.map( - parseAdditionalFields.bind(this, key) - ); - } - - return historical; - } -} diff --git a/packages/schemas/src/util/index.ts b/packages/schemas/src/util/index.ts index 810c76679..87b5d83fc 100644 --- a/packages/schemas/src/util/index.ts +++ b/packages/schemas/src/util/index.ts @@ -8,4 +8,3 @@ export * from "./leaderboard-scanner.js"; export * from "./create-historical-player.js"; -export * from "./historical-scanner.js"; diff --git a/packages/schemas/src/util/leaderboard-scanner.ts b/packages/schemas/src/util/leaderboard-scanner.ts index 8dd402a05..4260ace0b 100644 --- a/packages/schemas/src/util/leaderboard-scanner.ts +++ b/packages/schemas/src/util/leaderboard-scanner.ts @@ -9,57 +9,60 @@ import { type LeaderboardEnabledMetadata, type LeaderboardMetadata, - MetadataScanner, + scanMetadata, } from "#metadata"; import { parseAdditionalFields } from "./parse-fields.js"; import type { Constructor } from "@statsify/util"; -export class LeaderboardScanner { - public static getLeaderboardFields(constructor: Constructor) { - const metadata = MetadataScanner.scan(constructor); +export function getLeaderboardFields(constructor: Constructor) { + const metadata = scanMetadata(constructor); - const fields = metadata.filter(([, { leaderboard }]) => leaderboard.enabled); + const fields = metadata.filter(([, { leaderboard }]) => leaderboard.enabled); - return fields; - } + return fields; +} - public static getLeaderboardField( - constructor: Constructor, - key: string, - leaderboardMustBeEnabled?: true - ): LeaderboardEnabledMetadata; - public static getLeaderboardField( - constructor: Constructor, - key: string, - leaderboardMustBeEnabled: false - ): LeaderboardMetadata; - public static getLeaderboardField( - constructor: Constructor, - key: string, - leaderboardMustBeEnabled = true - ): LeaderboardMetadata { - const metadata = MetadataScanner.scan(constructor); +export function getLeaderboardField( + constructor: Constructor, + key: string, + leaderboardMustBeEnabled?: true, +): LeaderboardEnabledMetadata; +export function getLeaderboardField( + constructor: Constructor, + key: string, + leaderboardMustBeEnabled: false, +): LeaderboardMetadata; +export function getLeaderboardField( + constructor: Constructor, + key: string, + leaderboardMustBeEnabled = true, +): LeaderboardMetadata { + const metadata = scanMetadata(constructor); - const field = metadata.find(([k]) => k === key); + const field = metadata.find(([k]) => k === key); - if (!field) throw new Error(`${key} is not a field for ${constructor.name}`); + if (!field) throw new Error(`${key} is not a field for ${constructor.name}`); - const [, { store, leaderboard }] = field; + const [, { store, leaderboard }] = field; - if (!leaderboard.enabled && leaderboardMustBeEnabled) - throw new Error(`${key} is not a leaderboard field for ${constructor.name}`); + if (!leaderboard.enabled && leaderboardMustBeEnabled) + throw new Error( + `${key} is not a leaderboard field for ${constructor.name}`, + ); - leaderboard.default = store.default; + leaderboard.default = store.default; - if (Array.isArray(leaderboard.additionalFields)) { - leaderboard.additionalFields = leaderboard.additionalFields.map( - parseAdditionalFields.bind(this, key) - ); - } + if (Array.isArray(leaderboard.additionalFields)) { + leaderboard.additionalFields = leaderboard.additionalFields.map( + parseAdditionalFields.bind(null, key), + ); + } - if (leaderboard.extraDisplay) - leaderboard.extraDisplay = parseAdditionalFields(key, leaderboard.extraDisplay); + if (leaderboard.extraDisplay) + leaderboard.extraDisplay = parseAdditionalFields( + key, + leaderboard.extraDisplay, + ); - return leaderboard; - } + return leaderboard; } diff --git a/packages/schemas/src/util/parse-fields.ts b/packages/schemas/src/util/parse-fields.ts index d4782b424..51e2e5b30 100644 --- a/packages/schemas/src/util/parse-fields.ts +++ b/packages/schemas/src/util/parse-fields.ts @@ -15,7 +15,7 @@ export function parseAdditionalFields(field: string, additionalKey: string) { const additionalFieldParts = additionalKey.split(".").slice(1); const ending = additionalFieldParts.pop(); - if (!additionalFieldParts.length) return [...fieldParts, ending].join("."); + if (additionalFieldParts.length === 0) return [...fieldParts, ending].join("."); const splitIndex = fieldParts.findIndex((part) => additionalFieldParts.includes(part)); diff --git a/packages/schemas/tsconfig.json b/packages/schemas/tsconfig.json index b1633af34..08154a472 100644 --- a/packages/schemas/tsconfig.json +++ b/packages/schemas/tsconfig.json @@ -2,7 +2,6 @@ "extends": "../../tsconfig.base.json", "include": [ "src", - "eslint.config.js", "vitest.config.ts" ] } \ No newline at end of file diff --git a/packages/skin-renderer/index.cjs b/packages/skin-renderer/index.cjs index 3ea3c1b6d..f404ee093 100644 --- a/packages/skin-renderer/index.cjs +++ b/packages/skin-renderer/index.cjs @@ -3,9 +3,6 @@ // @ts-nocheck /* auto-generated by NAPI-RS */ -const { createRequire } = require('node:module') -require = createRequire(__filename) - const { readFileSync } = require('node:fs') let nativeBinding = null const loadErrors = [] @@ -66,7 +63,7 @@ const isMuslFromChildProcess = () => { function requireNative() { if (process.env.NAPI_RS_NATIVE_LIBRARY_PATH) { try { - nativeBinding = require(process.env.NAPI_RS_NATIVE_LIBRARY_PATH); + return require(process.env.NAPI_RS_NATIVE_LIBRARY_PATH); } catch (err) { loadErrors.push(err) } @@ -108,7 +105,24 @@ function requireNative() { } } else if (process.platform === 'win32') { if (process.arch === 'x64') { + if (process.config?.variables?.shlib_suffix === 'dll.a' || process.config?.variables?.node_target_type === 'shared_library') { + try { + return require('./skin-renderer.win32-x64-gnu.node') + } catch (e) { + loadErrors.push(e) + } try { + const binding = require('@statsify/skin-renderer-win32-x64-gnu') + const bindingPackageVersion = require('@statsify/skin-renderer-win32-x64-gnu/package.json').version + if (bindingPackageVersion !== '0.0.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return binding + } catch (e) { + loadErrors.push(e) + } + } else { + try { return require('./skin-renderer.win32-x64-msvc.node') } catch (e) { loadErrors.push(e) @@ -123,6 +137,7 @@ function requireNative() { } catch (e) { loadErrors.push(e) } + } } else if (process.arch === 'ia32') { try { return require('./skin-renderer.win32-ia32-msvc.node') @@ -348,6 +363,40 @@ function requireNative() { loadErrors.push(e) } } + } else if (process.arch === 'loong64') { + if (isMusl()) { + try { + return require('./skin-renderer.linux-loong64-musl.node') + } catch (e) { + loadErrors.push(e) + } + try { + const binding = require('@statsify/skin-renderer-linux-loong64-musl') + const bindingPackageVersion = require('@statsify/skin-renderer-linux-loong64-musl/package.json').version + if (bindingPackageVersion !== '0.0.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return binding + } catch (e) { + loadErrors.push(e) + } + } else { + try { + return require('./skin-renderer.linux-loong64-gnu.node') + } catch (e) { + loadErrors.push(e) + } + try { + const binding = require('@statsify/skin-renderer-linux-loong64-gnu') + const bindingPackageVersion = require('@statsify/skin-renderer-linux-loong64-gnu/package.json').version + if (bindingPackageVersion !== '0.0.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return binding + } catch (e) { + loadErrors.push(e) + } + } } else if (process.arch === 'riscv64') { if (isMusl()) { try { @@ -476,23 +525,47 @@ function requireNative() { nativeBinding = requireNative() -if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) { +// NAPI_RS_FORCE_WASI is a tri-state flag: +// unset / any other value → native binding preferred, WASI is only a fallback +// 'true' → force WASI fallback even if native loaded +// 'error' → force WASI and throw if no WASI binding is found +// Treating any non-empty string as truthy (the historical behavior) meant +// NAPI_RS_FORCE_WASI=false, NAPI_RS_FORCE_WASI=0, etc. inadvertently triggered +// the WASI path, causing ENOENT for packages shipped without a .wasi.cjs file. +const forceWasi = + process.env.NAPI_RS_FORCE_WASI === 'true' || process.env.NAPI_RS_FORCE_WASI === 'error' + +if (!nativeBinding || forceWasi) { + let wasiBinding = null + let wasiBindingError = null try { - nativeBinding = require('./skin-renderer.wasi.cjs') + wasiBinding = require('./skin-renderer.wasi.cjs') + nativeBinding = wasiBinding } catch (err) { - if (process.env.NAPI_RS_FORCE_WASI) { - loadErrors.push(err) + if (forceWasi) { + wasiBindingError = err } } - if (!nativeBinding) { + if (!nativeBinding || forceWasi) { try { - nativeBinding = require('@statsify/skin-renderer-wasm32-wasi') + wasiBinding = require('@statsify/skin-renderer-wasm32-wasi') + nativeBinding = wasiBinding } catch (err) { - if (process.env.NAPI_RS_FORCE_WASI) { + if (forceWasi) { + if (!wasiBindingError) { + wasiBindingError = err + } else { + wasiBindingError.cause = err + } loadErrors.push(err) } } } + if (process.env.NAPI_RS_FORCE_WASI === 'error' && !wasiBinding) { + const error = new Error('WASI binding not found and NAPI_RS_FORCE_WASI is set to error') + error.cause = wasiBindingError + throw error + } } if (!nativeBinding) { @@ -501,7 +574,12 @@ if (!nativeBinding) { `Cannot find native binding. ` + `npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). ` + 'Please try `npm i` again after removing both package-lock.json and node_modules directory.', - { cause: loadErrors } + { + cause: loadErrors.reduce((err, cur) => { + cur.cause = err + return cur + }), + }, ) } throw new Error(`Failed to load native binding`) diff --git a/packages/skin-renderer/package.json b/packages/skin-renderer/package.json index 9368536c3..bc370d329 100644 --- a/packages/skin-renderer/package.json +++ b/packages/skin-renderer/package.json @@ -19,7 +19,8 @@ "build:napi:debug": "napi build --platform && mv index.js index.cjs", "build:wasm": "wasm-pack build --target web --release", "build:wasm:debug": "wasm-pack build --target web --dev", - "lint": "cargo fmt && cargo clippy --fix --allow-dirty" + "lint": "cargo fmt && cargo clippy --fix --allow-dirty", + "lint:ci": "cargo fmt && cargo clippy --fix --allow-dirty" }, "napi": { "binaryName": "skin-renderer", @@ -39,4 +40,4 @@ ] } } -} \ No newline at end of file +} diff --git a/packages/util/eslint.config.js b/packages/util/eslint.config.js deleted file mode 100644 index 3325f85ed..000000000 --- a/packages/util/eslint.config.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Copyright (c) Statsify - * - * This source code is licensed under the GNU GPL v3 license found in the - * LICENSE file in the root directory of this source tree. - * https://github.com/Statsify/statsify/blob/main/LICENSE - */ - -import { defineConfig } from "../../eslint.config.js"; - -export default defineConfig({ tsconfigDirName: import.meta.dirname }); diff --git a/packages/util/package.json b/packages/util/package.json index a14ebe2b3..96b6e641a 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,15 +1,17 @@ { "name": "@statsify/util", "version": "0.0.0", + "type": "module", "main": "dist/index.js", "types": "src/index.ts", - "type": "module", "scripts": { "build": "swc src --config-file ../../.swcrc --out-dir dist --strip-leading-paths", - "test:types": "tsc --noEmit", - "lint": "eslint" + "typecheck": "tsgo --noEmit", + "lint": "oxlint", + "lint:ci": "oxlint --format=github", + "fmt": "oxfmt" }, "dependencies": { - "@swc/helpers": "^0.5.12" + "@swc/helpers": "^0.5.23" } -} \ No newline at end of file +} diff --git a/packages/util/src/config.ts b/packages/util/src/config.ts index 4d968fcdb..b3c71297e 100644 --- a/packages/util/src/config.ts +++ b/packages/util/src/config.ts @@ -6,12 +6,12 @@ * https://github.com/Statsify/statsify/blob/main/LICENSE */ -import { dirname, join } from "node:path"; +import { join } from "node:path"; import { existsSync } from "node:fs"; -import { fileURLToPath } from "node:url"; import type { DeepFlatten } from "./flatten.js"; +import { pathToFileURL } from "node:url"; -const __dirname = dirname(fileURLToPath(import.meta.url)); +const directory = import.meta.dirname; export interface Config { database: { @@ -246,7 +246,12 @@ async function loadConfig(): Promise<{ default: Config }> { database: { mongoUri: "", redisUrl: "" }, hypixelApi: { key: "", timeout: 5000 }, api: { port: 3000, mediaRoot: "" }, - discordBot: { publicKey: "", token: "", applicationId: "", testingGuild: "" }, + discordBot: { + publicKey: "", + token: "", + applicationId: "", + testingGuild: "", + }, supportBot: { createTicketChannel: "", ticketLogsChannel: "", @@ -276,16 +281,18 @@ async function loadConfig(): Promise<{ default: Config }> { }; } - if (existsSync(join(__dirname, "../../../config.json"))) { - return import(join(__dirname, "../../../config.json")); - } else if (existsSync(join(__dirname, "../../../config.js"))) { - return import(join(__dirname, "../../../config.js")); - } else { - throw new Error("No config file detected!"); + for (const file of ["config.json", "config.js"]) { + const path = join(directory, "../../../", file); + + if (existsSync(path)) { + return import(pathToFileURL(path).href); + } } + + throw new Error("No config file detected!"); } -let cfg: Config | undefined = undefined; +let cfg: Config; export interface ConfigOptions { required?: boolean; @@ -294,12 +301,11 @@ export interface ConfigOptions { export const config = async ( key: T, - { required = true, default: defaultValue }: ConfigOptions = {} + { required = true, default: defaultValue }: ConfigOptions = {}, ): Promise => { // Don't load the config while testing if (process.env.VITEST) return defaultValue as FlatConfig[T]; - if (!cfg) - cfg = await loadConfig().then((c) => c.default); + if (!cfg) cfg = await loadConfig().then((c) => c.default); const value = (key as string).split(".").reduce((a: any, b) => a?.[b], cfg) || undefined; @@ -313,7 +319,7 @@ export const config = async ( throw new Error( `Missing required environment variable: ${key as string} | Add ${ key as string - } to your config` + } to your config`, ); } diff --git a/packages/util/src/flatten.ts b/packages/util/src/flatten.ts index 0b3d26003..9f296cfe1 100644 --- a/packages/util/src/flatten.ts +++ b/packages/util/src/flatten.ts @@ -44,10 +44,10 @@ export type DeepFlatten = { */ export const flatten = (data: T, prefix = "", dest: APIData = {}): Flatten => { if (isObject(data)) { - Object.keys(data ?? {}).forEach((key) => { + for (const key of Object.keys(data ?? {})) { const tmpPrefix = prefix.length > 0 ? `${prefix}.${key}` : prefix + key; flatten(data[key as keyof T], tmpPrefix, dest); - }); + } } else { dest[prefix] = data; } diff --git a/packages/util/src/types.ts b/packages/util/src/types.ts index c3265fb76..5911d64cf 100644 --- a/packages/util/src/types.ts +++ b/packages/util/src/types.ts @@ -10,7 +10,7 @@ export type APIData = Record; export type RemoveMethods = Pick< T, - // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type + // oxlint-disable-next-line no-unsafe-function-type { [Key in keyof T]: T[Key] extends Function ? never : Key }[keyof T] >; diff --git a/packages/util/src/unflatten.ts b/packages/util/src/unflatten.ts index 79271abda..98f650c45 100644 --- a/packages/util/src/unflatten.ts +++ b/packages/util/src/unflatten.ts @@ -20,9 +20,9 @@ export const unflatten = (instance: Flatten): T => { const result: APIData = {}; const obj = instance as APIData; - Object.keys(obj).forEach((k) => { - if (k.includes(".")) { - const path = k.split("."); + for (const key of Object.keys(obj)) { + if (key.includes(".")) { + const path = key.split("."); const x = path.pop(); const body = path.reduce((cur, p) => { @@ -30,11 +30,11 @@ export const unflatten = (instance: Flatten): T => { return cur[p]; }, result); - body[x ?? ""] = obj[k]; + body[x ?? ""] = obj[key]; } else { - result[k] = obj[k]; + result[key] = obj[key]; } - }); + } return result as T; }; diff --git a/packages/util/src/util.ts b/packages/util/src/util.ts index b217009e3..064aef4f3 100644 --- a/packages/util/src/util.ts +++ b/packages/util/src/util.ts @@ -86,28 +86,30 @@ export const romanNumeral = (num: number): string => { }; export const prettify = (s: string): string => { - if (/[a-z]/gi.test(s) && s === s.toUpperCase()) { - s = s.toLowerCase(); + let formatted = s; + + if (/[a-z]/gi.test(formatted) && formatted === formatted.toUpperCase()) { + formatted = formatted.toLowerCase(); } // Convert camelCase to Snake_Case (if applicable) if (!["_", " "].some((l) => s.includes(l))) { - s = - s.charAt(0).toLowerCase() + - s.slice(1).replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`); + formatted = + formatted.charAt(0).toLowerCase() + + formatted.slice(1).replaceAll(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`); } // Convert snake_case to Title Case - return s + return formatted .replaceAll("_", " ") - .replace( + .replaceAll( /\w\S*/g, (t) => t.charAt(0).toUpperCase() + t.slice(1).toLowerCase() ); }; export const removeFormatting = (s: string): string => - s.replace(/§#([A-Fa-f0-9]{6})|§./gm, ""); + s.replaceAll(/§#([A-Fa-f0-9]{6})|§./gm, ""); export interface FormatTimeOptions { /** diff --git a/packages/util/tsconfig.json b/packages/util/tsconfig.json index b1633af34..1da8cb9e2 100644 --- a/packages/util/tsconfig.json +++ b/packages/util/tsconfig.json @@ -1,8 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": [ - "src", - "eslint.config.js", - "vitest.config.ts" - ] -} \ No newline at end of file + "include": ["src", "vitest.config.ts"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e289028fb..03e8e2a0f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,88 +4,61 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -overrides: - skia-canvas: 3.0.8 - importers: .: devDependencies: - '@commitlint/cli': - specifier: ^19.6.1 - version: 19.8.1(@types/node@24.3.0)(typescript@5.9.2) - '@commitlint/config-conventional': - specifier: ^19.6.0 - version: 19.8.1 - '@eslint/js': - specifier: ^9.19.0 - version: 9.34.0 '@j4cobi/eslint-plugin-sort-imports': specifier: ^1.0.2 - version: 1.0.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + version: 1.0.2(eslint@9.34.0(jiti@2.7.0))(typescript@6.0.3) '@napi-rs/cli': - specifier: ^3.1.5 - version: 3.1.5(@emnapi/runtime@1.7.1)(@types/node@24.3.0) + specifier: ^3.7.0 + version: 3.7.0(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1)(@types/node@25.9.1) '@rollup/pluginutils': specifier: ^5.1.0 - version: 5.2.0(rollup@4.49.0) - '@stylistic/eslint-plugin': - specifier: ^5.2.3 - version: 5.2.3(eslint@9.34.0(jiti@2.6.1)) + version: 5.4.0(rollup@4.61.0) '@swc/cli': - specifier: ^0.7.8 - version: 0.7.8(@swc/core@1.13.5(@swc/helpers@0.5.17)) + specifier: ^0.8.1 + version: 0.8.1(@swc/core@1.15.40(@swc/helpers@0.5.23)) '@swc/core': - specifier: 1.13.5 - version: 1.13.5(@swc/helpers@0.5.17) - '@types/eslint__js': - specifier: ^9.14.0 - version: 9.14.0 + specifier: 1.15.40 + version: 1.15.40(@swc/helpers@0.5.23) '@types/node': - specifier: ^24.3.0 - version: 24.3.0 + specifier: ^25.9.1 + version: 25.9.1 + '@typescript/native-preview': + specifier: 7.0.0-dev.20260601.1 + version: 7.0.0-dev.20260601.1 '@vitest/coverage-v8': - specifier: ^3.0.4 - version: 3.2.4(vitest@3.2.4) + specifier: ^4.1.8 + version: 4.1.8(vitest@4.1.8) '@vitest/ui': - specifier: ^3.0.4 - version: 3.2.4(vitest@3.2.4) - commitizen: - specifier: ^4.3.1 - version: 4.3.1(@types/node@24.3.0)(typescript@5.9.2) - cz-conventional-changelog: - specifier: ^3.3.0 - version: 3.3.0(@types/node@24.3.0)(typescript@5.9.2) - eslint: - specifier: ^9.19.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^4.1.8 + version: 4.1.8(vitest@4.1.8) eslint-plugin-license-header: - specifier: ^0.8.0 - version: 0.8.0 - eslint-plugin-unicorn: - specifier: ^60.0.0 - version: 60.0.0(eslint@9.34.0(jiti@2.6.1)) - eslint-plugin-unused-imports: - specifier: ^4.1.4 - version: 4.2.0(@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1)) + specifier: ^0.9.0 + version: 0.9.0(eslint@9.34.0(jiti@2.7.0)) + oxfmt: + specifier: ^0.53.0 + version: 0.53.0 + oxlint: + specifier: ^1.68.0 + version: 1.68.0 pm2: specifier: ^6.0.8 version: 6.0.8 turbo: - specifier: ^2.4.0 - version: 2.5.6 + specifier: ^2.9.16 + version: 2.9.16 typescript: - specifier: ^5.7.3 - version: 5.9.2 - typescript-eslint: - specifier: ^8.22.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^6.0.3 + version: 6.0.3 unplugin: - specifier: ^2.1.2 - version: 2.3.8 + specifier: ^3.0.0 + version: 3.0.0 vitest: - specifier: ^3.0.4 - version: 3.2.4(@types/node@24.3.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(lightningcss@1.30.2) + specifier: ^4.1.8 + version: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(@vitest/ui@4.1.8)(vite@7.0.4(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)) apps/api: dependencies: @@ -138,8 +111,8 @@ importers: specifier: workspace:^ version: link:../../packages/util '@swc/helpers': - specifier: ^0.5.12 - version: 0.5.17 + specifier: ^0.5.23 + version: 0.5.23 '@typegoose/typegoose': specifier: ^12.6.0 version: 12.19.0(mongoose@8.18.0(socks@2.8.7)) @@ -178,8 +151,8 @@ importers: version: 3.1.0 devDependencies: '@nestjs/testing': - specifier: ^11.1.6 - version: 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2)) + specifier: ^11.1.24 + version: 11.1.24(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2)) '@types/luxon': specifier: ^3.4.2 version: 3.7.1 @@ -214,8 +187,8 @@ importers: specifier: workspace:^ version: link:../../packages/util '@swc/helpers': - specifier: ^0.5.12 - version: 0.5.17 + specifier: ^0.5.23 + version: 0.5.23 '@typegoose/typegoose': specifier: ^12.6.0 version: 12.19.0(mongoose@8.18.0(socks@2.8.7)) @@ -271,12 +244,9 @@ importers: '@statsify/util': specifier: workspace:^ version: link:../../packages/util - '@swc/core': - specifier: ^1.13.5 - version: 1.13.5(@swc/helpers@0.5.17) '@swc/helpers': - specifier: ^0.5.12 - version: 0.5.17 + specifier: ^0.5.23 + version: 0.5.23 chalk: specifier: ^5.6.0 version: 5.6.0 @@ -305,18 +275,15 @@ importers: '@types/inquirer': specifier: ^9.0.7 version: 9.0.9 - globals: - specifier: ^16.3.0 - version: 16.3.0 apps/site: dependencies: '@radix-ui/react-popover': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) '@radix-ui/react-slot': specifier: ^1.2.4 - version: 1.2.4(@types/react@19.2.7)(react@19.2.1) + version: 1.2.4(@types/react@19.2.16)(react@19.2.1) '@statsify/schemas': specifier: workspace:^ version: link:../../packages/schemas @@ -345,48 +312,39 @@ importers: specifier: ^19.2.1 version: 19.2.1(react@19.2.1) tailwind-merge: - specifier: ^3.4.0 - version: 3.4.0 + specifier: ^3.6.0 + version: 3.6.0 zod: specifier: ^4.1.5 version: 4.1.5 devDependencies: - '@eslint/eslintrc': - specifier: ^3.2.0 - version: 3.3.1 '@statsify/api-client': specifier: workspace:^ version: link:../../packages/api-client '@tailwindcss/postcss': - specifier: 4.1.17 - version: 4.1.17 + specifier: 4.3.0 + version: 4.3.0 '@types/node': - specifier: ^24.3.0 - version: 24.3.0 + specifier: ^25.9.1 + version: 25.9.1 '@types/react': - specifier: ^19.2.7 - version: 19.2.7 + specifier: ^19.2.16 + version: 19.2.16 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.7) - eslint: - specifier: ^9.19.0 - version: 9.34.0(jiti@2.6.1) - eslint-config-next: - specifier: 15.5.2 - version: 15.5.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + version: 19.2.3(@types/react@19.2.16) mongoose: specifier: ^8.18.0 version: 8.18.0(socks@2.8.7) postcss: - specifier: ^8.5.3 - version: 8.5.6 + specifier: ^8.5.15 + version: 8.5.15 tailwindcss: - specifier: ^4.1.17 - version: 4.1.17 + specifier: ^4.3.0 + version: 4.3.0 typescript: - specifier: ^5.7.3 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 apps/support-bot: dependencies: @@ -415,8 +373,8 @@ importers: specifier: workspace:^ version: link:../../packages/util '@swc/helpers': - specifier: ^0.5.12 - version: 0.5.17 + specifier: ^0.5.23 + version: 0.5.23 '@typegoose/typegoose': specifier: ^12.6.0 version: 12.19.0(mongoose@8.18.0(socks@2.8.7)) @@ -470,8 +428,8 @@ importers: specifier: workspace:^ version: link:../../packages/util '@swc/helpers': - specifier: ^0.5.12 - version: 0.5.17 + specifier: ^0.5.23 + version: 0.5.23 '@typegoose/typegoose': specifier: ^12.6.0 version: 12.19.0(mongoose@8.18.0(socks@2.8.7)) @@ -490,19 +448,6 @@ importers: stackblur-canvas: specifier: ^2.7.0 version: 2.7.0 - devDependencies: - '@commitlint/cli': - specifier: ^19.4.1 - version: 19.8.1(@types/node@24.3.0)(typescript@5.9.2) - '@commitlint/config-conventional': - specifier: ^19.4.1 - version: 19.8.1 - commitizen: - specifier: ^4.3.0 - version: 4.3.1(@types/node@24.3.0)(typescript@5.9.2) - cz-conventional-changelog: - specifier: ^3.3.0 - version: 3.3.0(@types/node@24.3.0)(typescript@5.9.2) assets/public: dependencies: @@ -534,8 +479,8 @@ importers: specifier: workspace:^ version: link:../util '@swc/helpers': - specifier: ^0.5.12 - version: 0.5.17 + specifier: ^0.5.23 + version: 0.5.23 axios: specifier: ^1.11.0 version: 1.11.0 @@ -549,8 +494,8 @@ importers: specifier: workspace:^ version: link:../schemas '@swc/helpers': - specifier: ^0.5.12 - version: 0.5.17 + specifier: ^0.5.23 + version: 0.5.23 axios: specifier: 1.11.0 version: 1.11.0 @@ -579,8 +524,8 @@ importers: specifier: workspace:^ version: link:../util '@swc/helpers': - specifier: ^0.5.12 - version: 0.5.17 + specifier: ^0.5.23 + version: 0.5.23 axios: specifier: ^1.11.0 version: 1.11.0 @@ -619,8 +564,8 @@ importers: specifier: workspace:^ version: link:../util '@swc/helpers': - specifier: ^0.5.12 - version: 0.5.17 + specifier: ^0.5.23 + version: 0.5.23 chalk: specifier: 5.6.0 version: 5.6.0 @@ -641,8 +586,8 @@ importers: specifier: workspace:^ version: link:../util '@swc/helpers': - specifier: ^0.5.12 - version: 0.5.17 + specifier: ^0.5.23 + version: 0.5.23 packages/rendering: dependencies: @@ -656,8 +601,8 @@ importers: specifier: workspace:^ version: link:../util '@swc/helpers': - specifier: ^0.5.12 - version: 0.5.17 + specifier: ^0.5.23 + version: 0.5.23 axios: specifier: 1.11.0 version: 1.11.0 @@ -683,8 +628,8 @@ importers: specifier: workspace:^ version: link:../util '@swc/helpers': - specifier: ^0.5.12 - version: 0.5.17 + specifier: ^0.5.23 + version: 0.5.23 '@typegoose/typegoose': specifier: ^12.6.0 version: 12.19.0(mongoose@8.18.0(socks@2.8.7)) @@ -701,11 +646,13 @@ importers: packages/skin-renderer: {} + packages/skin-renderer/pkg: {} + packages/util: dependencies: '@swc/helpers': - specifier: ^0.5.12 - version: 0.5.17 + specifier: ^0.5.23 + version: 0.5.23 packages: @@ -713,10 +660,6 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - '@azure/msal-common@14.16.0': resolution: {integrity: sha512-1KOZj9IpcDSwpNiQNjt0jDYZpQvNZay7QAEi/5DLubay40iGYtLzya/jbjRPLyOTZhEKyL1MzPuw2HqBCjceYA==} engines: {node: '>=0.8.0'} @@ -725,20 +668,16 @@ packages: resolution: {integrity: sha512-An7l1hEr0w1HMMh1LU+rtDtqL7/jw74ORlc9Wnh06v7TU/xpG39/Zdr1ZJu3QpjUfKJ+E0/OXMW8DRSWTlh7qQ==} engines: {node: '>=16'} - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.0': - resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} engines: {node: '>=6.0.0'} hasBin: true @@ -746,8 +685,8 @@ packages: resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.1': - resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@1.0.2': @@ -757,239 +696,170 @@ packages: '@borewit/text-codec@0.1.1': resolution: {integrity: sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==} - '@commitlint/cli@19.8.1': - resolution: {integrity: sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==} - engines: {node: '>=v18'} - hasBin: true - - '@commitlint/config-conventional@19.8.1': - resolution: {integrity: sha512-/AZHJL6F6B/G959CsMAzrPKKZjeEiAVifRyEwXxcT6qtqbPwGw+iQxmNS+Bu+i09OCtdNRW6pNpBvgPrtMr9EQ==} - engines: {node: '>=v18'} - - '@commitlint/config-validator@19.8.1': - resolution: {integrity: sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==} - engines: {node: '>=v18'} - - '@commitlint/ensure@19.8.1': - resolution: {integrity: sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==} - engines: {node: '>=v18'} - - '@commitlint/execute-rule@19.8.1': - resolution: {integrity: sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==} - engines: {node: '>=v18'} - - '@commitlint/format@19.8.1': - resolution: {integrity: sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==} - engines: {node: '>=v18'} - - '@commitlint/is-ignored@19.8.1': - resolution: {integrity: sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==} - engines: {node: '>=v18'} - - '@commitlint/lint@19.8.1': - resolution: {integrity: sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==} - engines: {node: '>=v18'} - - '@commitlint/load@19.8.1': - resolution: {integrity: sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==} - engines: {node: '>=v18'} - - '@commitlint/message@19.8.1': - resolution: {integrity: sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==} - engines: {node: '>=v18'} - - '@commitlint/parse@19.8.1': - resolution: {integrity: sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==} - engines: {node: '>=v18'} - - '@commitlint/read@19.8.1': - resolution: {integrity: sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==} - engines: {node: '>=v18'} - - '@commitlint/resolve-extends@19.8.1': - resolution: {integrity: sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==} - engines: {node: '>=v18'} - - '@commitlint/rules@19.8.1': - resolution: {integrity: sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==} - engines: {node: '>=v18'} - - '@commitlint/to-lines@19.8.1': - resolution: {integrity: sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==} - engines: {node: '>=v18'} - - '@commitlint/top-level@19.8.1': - resolution: {integrity: sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==} - engines: {node: '>=v18'} - - '@commitlint/types@19.8.1': - resolution: {integrity: sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==} - engines: {node: '>=v18'} + '@borewit/text-codec@0.2.2': + resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} '@emnapi/core@1.5.0': resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} - '@emnapi/runtime@1.5.0': - resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} - '@emnapi/runtime@1.7.1': resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - '@esbuild/aix-ppc64@0.25.6': - resolution: {integrity: sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==} + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.6': - resolution: {integrity: sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==} + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.6': - resolution: {integrity: sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==} + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.6': - resolution: {integrity: sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==} + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.6': - resolution: {integrity: sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==} + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.6': - resolution: {integrity: sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==} + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.6': - resolution: {integrity: sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==} + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.6': - resolution: {integrity: sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==} + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.6': - resolution: {integrity: sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==} + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.6': - resolution: {integrity: sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==} + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.6': - resolution: {integrity: sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==} + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.6': - resolution: {integrity: sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==} + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.6': - resolution: {integrity: sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==} + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.6': - resolution: {integrity: sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==} + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.6': - resolution: {integrity: sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==} + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.6': - resolution: {integrity: sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==} + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.6': - resolution: {integrity: sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==} + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.6': - resolution: {integrity: sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==} + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.6': - resolution: {integrity: sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==} + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.6': - resolution: {integrity: sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==} + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.6': - resolution: {integrity: sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==} + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.6': - resolution: {integrity: sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==} + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.6': - resolution: {integrity: sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==} + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.6': - resolution: {integrity: sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==} + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.6': - resolution: {integrity: sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==} + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.6': - resolution: {integrity: sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==} + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -1000,12 +870,18 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.21.0': - resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/config-helpers@0.3.1': @@ -1016,16 +892,16 @@ packages: resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + '@eslint/eslintrc@3.3.5': + resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/js@9.34.0': resolution: {integrity: sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/plugin-kit@0.3.5': @@ -1086,22 +962,22 @@ packages: '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - '@humanwhocodes/retry@0.4.3': resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} @@ -1243,13 +1119,17 @@ packages: cpu: [x64] os: [win32] + '@inquirer/ansi@2.0.7': + resolution: {integrity: sha512-3eTuUO1vH2cZm2ZKHeQxnOqlTi9EfZDGgIe3BL3I4u+rJHocr9Fz86M4fjYABPvFnQG/gGK551HqDiIcETwU6Q==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + '@inquirer/checkbox@2.5.0': resolution: {integrity: sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA==} engines: {node: '>=18'} - '@inquirer/checkbox@4.2.2': - resolution: {integrity: sha512-E+KExNurKcUJJdxmjglTl141EwxWyAHplvsYJQgSwXf8qiNWkTxTuCCqmhFEmbIXd4zLaGMfQFJ6WrZ7fSeV3g==} - engines: {node: '>=18'} + '@inquirer/checkbox@5.2.1': + resolution: {integrity: sha512-b6xmA/VlTe0ZgDQHDui+Nav470u7u49nRd8/iuhOcQPO9Ch7lGuogydhi2VOmNlZ+zXcM8IcPuNSwQcdJaF/kw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1260,18 +1140,18 @@ packages: resolution: {integrity: sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==} engines: {node: '>=18'} - '@inquirer/confirm@5.1.16': - resolution: {integrity: sha512-j1a5VstaK5KQy8Mu8cHmuQvN1Zc62TbLhjJxwHvKPPKEoowSF6h/0UdOpA9DNdWZ+9Inq73+puRq1df6OJ8Sag==} - engines: {node: '>=18'} + '@inquirer/confirm@6.1.1': + resolution: {integrity: sha512-eb8DBZcz/2qHWQda4rk2JiQk5h9QV/cVHi1yjt0f69WFZMRFn0sJTye3EAP8icut8UDMjQPsaH5KbcOogefrFQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/core@10.2.0': - resolution: {integrity: sha512-NyDSjPqhSvpZEMZrLCYUquWNl+XC/moEcVFqS55IEYIYsY0a1cUCevSqk7ctOlnm/RaSBU5psFryNlxcmGrjaA==} - engines: {node: '>=18'} + '@inquirer/core@11.2.1': + resolution: {integrity: sha512-Qd6GJT1yVyrZZCfN8W2qKF5ApmqryXRhRKCuip8h01x2w/esJQ2XIYc6f9abMIHgKQdBfFTSOdbHRLAhuM09UA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1286,9 +1166,9 @@ packages: resolution: {integrity: sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw==} engines: {node: '>=18'} - '@inquirer/editor@4.2.18': - resolution: {integrity: sha512-yeQN3AXjCm7+Hmq5L6Dm2wEDeBRdAZuyZ4I7tWSSanbxDzqM0KqzoDbKM7p4ebllAYdoQuPJS6N71/3L281i6w==} - engines: {node: '>=18'} + '@inquirer/editor@5.2.2': + resolution: {integrity: sha512-ZRVd/oD+sYsUd5zVm0NflqEzlqfYCyHNsqkHl2oWXEUHs12tCbcSFi+wVFEvD8+LGRaMUsVrE7qeo6lSG/S1Vg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1299,18 +1179,18 @@ packages: resolution: {integrity: sha512-qnJsUcOGCSG1e5DTOErmv2BPQqrtT6uzqn1vI/aYGiPKq+FgslGZmtdnXbhuI7IlT7OByDoEEqdnhUnVR2hhLw==} engines: {node: '>=18'} - '@inquirer/expand@4.0.18': - resolution: {integrity: sha512-xUjteYtavH7HwDMzq4Cn2X4Qsh5NozoDHCJTdoXg9HfZ4w3R6mxV1B9tL7DGJX2eq/zqtsFjhm0/RJIMGlh3ag==} - engines: {node: '>=18'} + '@inquirer/expand@5.1.1': + resolution: {integrity: sha512-YmQpenjbFSHAK3sOd44puHh3V1KXXr+JiNpUztoSQ4drLh2rTVzTap/YtlAVu/5xavifIlBfNEzJ/neZJ1a/1g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/external-editor@1.0.1': - resolution: {integrity: sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q==} - engines: {node: '>=18'} + '@inquirer/external-editor@3.0.3': + resolution: {integrity: sha512-6thf5I8q7lZwzGLAxPaaGEREEkZ3nyePPDQ1oyobblxmEE8mqTLguScP7pDjUTAibiyb4hfXl+qjUEJ+di/aNA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1321,13 +1201,17 @@ packages: resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==} engines: {node: '>=18'} + '@inquirer/figures@2.0.7': + resolution: {integrity: sha512-aJ8TBPOGB6f/2qziPfElISTCEd5XOYTFckA2SGjhNmiKzfK/u4ot3v0DUzGVdUnKjN10EqnnEPck36BkyfLnJw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + '@inquirer/input@2.3.0': resolution: {integrity: sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==} engines: {node: '>=18'} - '@inquirer/input@4.2.2': - resolution: {integrity: sha512-hqOvBZj/MhQCpHUuD3MVq18SSoDNHy7wEnQ8mtvs71K8OPZVXJinOzcvQna33dNYLYE4LkA9BlhAhK6MJcsVbw==} - engines: {node: '>=18'} + '@inquirer/input@5.1.2': + resolution: {integrity: sha512-9K/DDBSQpOyZSkt6sOVP9Vo0TR7atX2kuILsUu0x3wVcVbe97lJwIJKMLdMw25tDYuXl/qp6erT0Xs1rfmcfZg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1338,9 +1222,9 @@ packages: resolution: {integrity: sha512-ilUnia/GZUtfSZy3YEErXLJ2Sljo/mf9fiKc08n18DdwdmDbOzRcTv65H1jjDvlsAuvdFXf4Sa/aL7iw/NanVA==} engines: {node: '>=18'} - '@inquirer/number@3.0.18': - resolution: {integrity: sha512-7exgBm52WXZRczsydCVftozFTrrwbG5ySE0GqUd2zLNSBXyIucs2Wnm7ZKLe/aUu6NUg9dg7Q80QIHCdZJiY4A==} - engines: {node: '>=18'} + '@inquirer/number@4.1.1': + resolution: {integrity: sha512-XF4IXAbPnGPgw0wsbC/i2tPcyfdZgDpUlhsqU0SfT4IRIGWha6Xm9VRgN5yYxJq+jnyXlfXI/nQ3ulfk0iEICA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1351,9 +1235,9 @@ packages: resolution: {integrity: sha512-5otqIpgsPYIshqhgtEwSspBQE40etouR8VIxzpJkv9i0dVHIpyhiivbkH9/dGiMLdyamT54YRdGJLfl8TFnLHg==} engines: {node: '>=18'} - '@inquirer/password@4.0.18': - resolution: {integrity: sha512-zXvzAGxPQTNk/SbT3carAD4Iqi6A2JS2qtcqQjsL22uvD+JfQzUrDEtPjLL7PLn8zlSNyPdY02IiQjzoL9TStA==} - engines: {node: '>=18'} + '@inquirer/password@5.1.1': + resolution: {integrity: sha512-3XBfF7DAsp5qeDsvN5Rd1HmbNokVvEQoUM0QLrRcybC9nX96w3Pbmu7qUsb3IT3J3jBvs2+mTXaKHOUsgHMLzg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1364,9 +1248,9 @@ packages: resolution: {integrity: sha512-BHDeL0catgHdcHbSFFUddNzvx/imzJMft+tWDPwTm3hfu8/tApk1HrooNngB2Mb4qY+KaRWF+iZqoVUPeslEog==} engines: {node: '>=18'} - '@inquirer/prompts@7.8.4': - resolution: {integrity: sha512-MuxVZ1en1g5oGamXV3DWP89GEkdD54alcfhHd7InUW5BifAdKQEK9SLFa/5hlWbvuhMPlobF0WAx7Okq988Jxg==} - engines: {node: '>=18'} + '@inquirer/prompts@8.5.2': + resolution: {integrity: sha512-IYR/3C/paEVVQYQvdDlFZVjRCJVYHHON0XXMH91KO9GSxs0TdKYWlUdvfQl2EfAHDxUaN3IBffkE/BDTh5nJ6g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1377,9 +1261,9 @@ packages: resolution: {integrity: sha512-zzfNuINhFF7OLAtGHfhwOW2TlYJyli7lOUoJUXw/uyklcwalV6WRXBXtFIicN8rTRK1XTiPWB4UY+YuW8dsnLQ==} engines: {node: '>=18'} - '@inquirer/rawlist@4.1.6': - resolution: {integrity: sha512-KOZqa3QNr3f0pMnufzL7K+nweFFCCBs6LCXZzXDrVGTyssjLeudn5ySktZYv1XiSqobyHRYYK0c6QsOxJEhXKA==} - engines: {node: '>=18'} + '@inquirer/rawlist@5.3.1': + resolution: {integrity: sha512-QqdTqQddL3qPX/PPrjobpsO25NZ4dWXgTLenrR445L2ptLEYE6Z+PD5c5CNDJNx4ugRgELAIpSIJxZaO2jJ2Og==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1390,9 +1274,9 @@ packages: resolution: {integrity: sha512-h+/5LSj51dx7hp5xOn4QFnUaKeARwUCLs6mIhtkJ0JYPBLmEYjdHSYh7I6GrLg9LwpJ3xeX0FZgAG1q0QdCpVQ==} engines: {node: '>=18'} - '@inquirer/search@3.1.1': - resolution: {integrity: sha512-TkMUY+A2p2EYVY3GCTItYGvqT6LiLzHBnqsU1rJbrpXUijFfM6zvUx0R4civofVwFCmJZcKqOVwwWAjplKkhxA==} - engines: {node: '>=18'} + '@inquirer/search@4.2.1': + resolution: {integrity: sha512-xJj8QWKRSrfKoBIITLZK61dD3zwo0Rz11fgDImku30/Oe81zMdIdGgrLY2h6RkJ+KZ/GhNYIRMKnH/62qBTA5g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1403,9 +1287,9 @@ packages: resolution: {integrity: sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==} engines: {node: '>=18'} - '@inquirer/select@4.3.2': - resolution: {integrity: sha512-nwous24r31M+WyDEHV+qckXkepvihxhnyIaod2MG7eCE6G0Zm/HUF6jgN8GXgf4U7AU6SLseKdanY195cwvU6w==} - engines: {node: '>=18'} + '@inquirer/select@5.2.1': + resolution: {integrity: sha512-FlDndEUww8m7BfukO2nJa25vhD+H5jxxCv4oGioKqzyWz3nPHhhw4LKdYRSlXuAx7DsdWia7iyaBPKKS95Evfw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1420,9 +1304,9 @@ packages: resolution: {integrity: sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==} engines: {node: '>=18'} - '@inquirer/type@3.0.8': - resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==} - engines: {node: '>=18'} + '@inquirer/type@4.0.7': + resolution: {integrity: sha512-t28inv14nMQ1PhKpsJPY+kEs/c00qzeCOS2gTNRyTjG5d6qsVA2fItxW4hkvGZ5lvanGLdtCzVIx5dwdRpN1+g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1444,16 +1328,9 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - '@j4cobi/eslint-plugin-sort-imports@1.0.2': resolution: {integrity: sha512-0bTHYIohk2RnWW8+FQoE06s/80aF1iPxP62JiS2+9chUFrs9D7+p0niFtNctcZGRPo5aOKG9q/ypPlT8OWcwyg==} - '@jridgewell/gen-mapping@0.3.12': - resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -1464,18 +1341,18 @@ packages: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.5.4': - resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} - '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.29': - resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} - '@jridgewell/trace-mapping@0.3.30': resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@keyv/serialize@1.1.1': + resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} + '@lukeed/csprng@1.1.0': resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} engines: {node: '>=8'} @@ -1499,18 +1376,15 @@ packages: '@mongodb-js/saslprep@1.3.0': resolution: {integrity: sha512-zlayKCsIjYb7/IdfqxorK5+xUMyi4vOKcFy10wKJYc63NSdKI8mNME+uJqfatkPmOSMMUiojrL58IePKBm3gvQ==} - '@napi-rs/cli@3.1.5': - resolution: {integrity: sha512-Wn6ZPw27qJiEWglGjkaAa70AHuLtyPya6FvjINYJ5U20uvbRhoB0Ta2+bFTAFfUb9R+wvuFvog9JQdy65OmFAQ==} + '@napi-rs/cli@3.7.0': + resolution: {integrity: sha512-3d3+rmxlOIV/G1zPWeX4PCxuYnhcCQM2BvY9rtimC8RO0dFR9gtYP+Grov+WoduZtfWRj5N1XvytWeRxxCk5zw==} engines: {node: '>= 16'} hasBin: true peerDependencies: - '@emnapi/runtime': ^1.1.0 - emnapi: ^1.1.0 + '@emnapi/runtime': ^1.7.1 peerDependenciesMeta: '@emnapi/runtime': optional: true - emnapi: - optional: true '@napi-rs/cross-toolchain@1.0.3': resolution: {integrity: sha512-ENPfLe4937bsKVTDA6zdABx4pq9w0tHqRrJHyaGxgaPq03a2Bd1unD5XSKjXJjebsABJ+MjAv1A2OvCgK9yehg==} @@ -1857,11 +1731,11 @@ packages: resolution: {integrity: sha512-7cmzIu+Vbupriudo7UudoMRH2OA3cTw67vva8MxeoAe5S7vPFI7z0vp0pMXiA25S8IUJefImQ90FeJjl8fjEaQ==} engines: {node: '>= 10'} - '@napi-rs/wasm-runtime@0.2.12': - resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - - '@napi-rs/wasm-runtime@1.0.3': - resolution: {integrity: sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q==} + '@napi-rs/wasm-runtime@1.1.4': + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 '@napi-rs/wasm-tools-android-arm-eabi@1.0.1': resolution: {integrity: sha512-lr07E/l571Gft5v4aA1dI8koJEmF1F0UigBbsqg9OWNzg80H3lDPO+auv85y3T/NHE3GirDk7x/D3sLO57vayw==} @@ -2025,8 +1899,8 @@ packages: class-validator: optional: true - '@nestjs/testing@11.1.6': - resolution: {integrity: sha512-srYzzDNxGvVCe1j0SpTS9/ix75PKt6Sn6iMaH1rpJ6nj2g8vwNrhK0CoJJXvpCYgrnI+2WES2pprYnq8rAMYHA==} + '@nestjs/testing@11.1.24': + resolution: {integrity: sha512-+4M4UAnhtprBQN0J2uI6IP0wDqhy9aH8XCMu5SO8oCi0oB04YXA4a4PAEkxmsPn7gHW4dj1u4GFteNQOWgvTJw==} peerDependencies: '@nestjs/common': ^11.0.0 '@nestjs/core': ^11.0.0 @@ -2041,9 +1915,6 @@ packages: '@next/env@16.0.7': resolution: {integrity: sha512-gpaNgUh5nftFKRkRQGnVi5dpcYSKGcZZkQffZ172OrG/XkrnS7UBTQ648YY+8ME92cC4IojpI2LqTC8sTDhAaw==} - '@next/eslint-plugin-next@15.5.2': - resolution: {integrity: sha512-lkLrRVxcftuOsJNhWatf1P2hNVfh98k/omQHrCEPPriUypR6RcS13IvLdIrEvkm9AH2Nu2YpR5vLqBuy6twH3Q==} - '@next/swc-darwin-arm64@16.0.7': resolution: {integrity: sha512-LlDtCYOEj/rfSnEn/Idi+j1QKHxY9BJFmxx7108A6D8K0SB+bNgfYQATPk/4LqOl4C0Wo3LACg2ie6s7xqMpJg==} engines: {node: '>= 10'} @@ -2104,10 +1975,6 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nolyfill/is-core-module@1.0.39': - resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} - engines: {node: '>=12.4.0'} - '@nuxt/opencollective@0.4.1': resolution: {integrity: sha512-GXD3wy50qYbxCJ652bDrDzgMr3NFEkIS374+IgFQKkCvk9yiYcLvX2XDYr7UyQxf4wK0e+yqDYRubZ0DtOxnmQ==} engines: {node: ^14.18.0 || >=16.10.0, npm: '>=5.10.0'} @@ -2117,23 +1984,23 @@ packages: resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==} engines: {node: '>= 20'} - '@octokit/core@7.0.3': - resolution: {integrity: sha512-oNXsh2ywth5aowwIa7RKtawnkdH6LgU1ztfP9AIUCQCvzysB+WeU8o2kyyosDPwBZutPpjZDKPQGIzzrfTWweQ==} + '@octokit/core@7.0.6': + resolution: {integrity: sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==} engines: {node: '>= 20'} - '@octokit/endpoint@11.0.0': - resolution: {integrity: sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ==} + '@octokit/endpoint@11.0.3': + resolution: {integrity: sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag==} engines: {node: '>= 20'} - '@octokit/graphql@9.0.1': - resolution: {integrity: sha512-j1nQNU1ZxNFx2ZtKmL4sMrs4egy5h65OMDmSbVyuCzjOcwsHq6EaYjOTGXPQxgfiN8dJ4CriYHk6zF050WEULg==} + '@octokit/graphql@9.0.3': + resolution: {integrity: sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==} engines: {node: '>= 20'} - '@octokit/openapi-types@25.1.0': - resolution: {integrity: sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==} + '@octokit/openapi-types@27.0.0': + resolution: {integrity: sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==} - '@octokit/plugin-paginate-rest@13.1.1': - resolution: {integrity: sha512-q9iQGlZlxAVNRN2jDNskJW/Cafy7/XE52wjZ5TTvyhyOD904Cvx//DNyoO3J/MXJ0ve3rPoNWKEg5iZrisQSuw==} + '@octokit/plugin-paginate-rest@14.0.0': + resolution: {integrity: sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': '>=6' @@ -2144,30 +2011,254 @@ packages: peerDependencies: '@octokit/core': '>=6' - '@octokit/plugin-rest-endpoint-methods@16.0.0': - resolution: {integrity: sha512-kJVUQk6/dx/gRNLWUnAWKFs1kVPn5O5CYZyssyEoNYaFedqZxsfYs7DwI3d67hGz4qOwaJ1dpm07hOAD1BXx6g==} + '@octokit/plugin-rest-endpoint-methods@17.0.0': + resolution: {integrity: sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': '>=6' - '@octokit/request-error@7.0.0': - resolution: {integrity: sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg==} + '@octokit/request-error@7.1.0': + resolution: {integrity: sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==} engines: {node: '>= 20'} - '@octokit/request@10.0.3': - resolution: {integrity: sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA==} + '@octokit/request@10.0.10': + resolution: {integrity: sha512-KxNC2pTqqhszMNrf12ZRd4PonRgyJdsM4F/jySiddQK+DsRcfBtUvqn8t7UsyZhnRJHvX46OohDt5N3VqIWC2w==} engines: {node: '>= 20'} - '@octokit/rest@22.0.0': - resolution: {integrity: sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA==} + '@octokit/rest@22.0.1': + resolution: {integrity: sha512-Jzbhzl3CEexhnivb1iQ0KJ7s5vvjMWcmRtq5aUsKmKDrRW6z3r84ngmiFKFvpZjpiU/9/S6ITPFRpn5s/3uQJw==} engines: {node: '>= 20'} - '@octokit/types@14.1.0': - resolution: {integrity: sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==} + '@octokit/types@16.0.0': + resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} + '@oxfmt/binding-android-arm-eabi@0.53.0': + resolution: {integrity: sha512-XfVM8AmIovBTKXCt14Op5wbfcoM8418nttd+nhMgM3RAVaJg1MtJc73FyWfUt0oxLyBGVwfniNVUsbV/b3VmPg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxfmt/binding-android-arm64@0.53.0': + resolution: {integrity: sha512-btHDfXckwdf9zgyAVznfZkf+GVyB0I1m1hlvaOMRx2xoyz3hphfPX97s89J3wfCN8QBETLtk4lQUaeOkrMuQOg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxfmt/binding-darwin-arm64@0.53.0': + resolution: {integrity: sha512-k2RjMcSTkHjoOlsVGbL35JVzXL+oQco3GHPl/5kjebVF4oHNfE24In8F5isqBh9LBJucycWHKDXdGrCchdWcHQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxfmt/binding-darwin-x64@0.53.0': + resolution: {integrity: sha512-65jIBE2H1l5SSs16fmv6/7b6sAx/WpvnsgDhVWK9qSjNFDUro7MPQ6q5UhpY7kl46yltfR046iAnxy/Bzqbiew==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxfmt/binding-freebsd-x64@0.53.0': + resolution: {integrity: sha512-oYe1gkz7U49PCYrS9147d2fJZj8mDI4Di6AvlsU5fu9p+Tq8S7qqOMSZjUiVTLX8bXuSA9Lk/tIxuegVjkNYRA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxfmt/binding-linux-arm-gnueabihf@0.53.0': + resolution: {integrity: sha512-ailB2vLzGi629tymdAb2VYJyEHref7oqGxP+tRBrtRBxQrb6NV55JMT7xtGZ8uTeG2+Y9zojqW4LhJYxQnz9Pg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm-musleabihf@0.53.0': + resolution: {integrity: sha512-abh4mWBvOvD966sobqF7r103y2yYx7Rb4WGHLOS4+5igGqLbbPxS9aK5+45D6iUY7dWMsk3Muz9a8gUtufvqJA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm64-gnu@0.53.0': + resolution: {integrity: sha512-z73PvuhJ8qA+cDbaiqbtopHglA91U4+y5wn2sTJJrnpB957d5P33FEuyP3DQIFd7ofljmDmfVT4G0CVGHZaJWg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxfmt/binding-linux-arm64-musl@0.53.0': + resolution: {integrity: sha512-I6bhOTroqc3ThrwZ89l2k3ivKuELhdPLbAcJhRNyjWvlgwb0vjRgEnVL1XLx5Jud04/ypNRZBykAWrSk6l/D+g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxfmt/binding-linux-ppc64-gnu@0.53.0': + resolution: {integrity: sha512-w0p3JzB/PkkQjXALMJMqP9YfP3yq4w6zGsu5kezQmUnxRkN3b/Theg2l/nDgBsOcczxS3gL6Gam5XNAVrO6QJQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@oxfmt/binding-linux-riscv64-gnu@0.53.0': + resolution: {integrity: sha512-mzBhF6k1Yq1K/dqDmVe/AAafnlJfEpx7yfUiksyeWXJk5iSzZqBSxcsa02zIytYgQFRZ7h6WPZfwHg/DoOE1Kw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxfmt/binding-linux-riscv64-musl@0.53.0': + resolution: {integrity: sha512-AlFCpnRQhogQFzZXWbO6xB6/Udy745L+eQNmDPGg7G/OeWsYmJc4jZYfUN5pQg0reOPWSED2mOQqKZOJM1U8cA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxfmt/binding-linux-s390x-gnu@0.53.0': + resolution: {integrity: sha512-XD4ulY4f1DWbuuZXAqxhVn+gdPmrhnmojWtFN78ctVoupmS845fGhsUrk1HZXKQI+iymbaiz9vAjPsghHNQ7Ag==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@oxfmt/binding-linux-x64-gnu@0.53.0': + resolution: {integrity: sha512-xg8KWX0QnxmYWRe60CgHYWXI0ZOtBbqTsXvWiWrcl2XUHJ3fht2QerOk2iWvylzX3zNT2GpvBRxGoR4d3sxPRQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxfmt/binding-linux-x64-musl@0.53.0': + resolution: {integrity: sha512-MWExpYBGvl+pIvVB/gj/CcWlN2al8AizT7rUbtaYaWNoQkhWARM6W3qpgoCr72CYSN9PborzPmM5MIRe2BrNdA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxfmt/binding-openharmony-arm64@0.53.0': + resolution: {integrity: sha512-u4sajgO4nxgmJIgc/y2AqPhkdbOkQH8WugXpA1+pW0ESQhvGZ1oGq61Q4xMbJHJU1hFgtO18QNrcFYDPYH0gwQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxfmt/binding-win32-arm64-msvc@0.53.0': + resolution: {integrity: sha512-Yq9sOZoIOJ5xPjO0qOyHJS4CiPuTkB2en9auxZz7Ar2p5RaC7BzLyVVmAA7zz9/L9YnjjY1DwNxN+ivKXimN/A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxfmt/binding-win32-ia32-msvc@0.53.0': + resolution: {integrity: sha512-es1fVNZEkBqEcQtBpn19SYFgZF7FawlkCjkT/iImfEAus4gun8fBwB1E9hpV5LcR9B0DBNvRIXhW8BQk3JaE+Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxfmt/binding-win32-x64-msvc@0.53.0': + resolution: {integrity: sha512-QFmJs2bEu9AO4O6qsmEaZNGi6dFq8N+rT8EHAAnZIq/B9SeJDUbc4DzVxQ48MfDsL7D3sCZzo37zuTuspcURgg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxlint/binding-android-arm-eabi@1.68.0': + resolution: {integrity: sha512-wEdsIspexXLLMCPAEOcCuFLMt6aE3AzTuA/nQKLPRnoJ+EQTturmGheDkhHuuVHx0GbutjQ3JKmEn+Gz6Ag28Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxlint/binding-android-arm64@1.68.0': + resolution: {integrity: sha512-6aZRNNXQTsYtgaus8HTb9nuCcsrQTlKXGnktwvwW0n/SooRWNxNb3925grDkC63aEYZuCIyOVLV16IdYIoC2aQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxlint/binding-darwin-arm64@1.68.0': + resolution: {integrity: sha512-lVTbsE3kO4bLpZELgjRZuAJc8kP98wb83yMXWH8gaPaFZ+cM2IDeZto4ByoUAYj0Mxv2rvw+A1ssZequSepVSg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxlint/binding-darwin-x64@1.68.0': + resolution: {integrity: sha512-nCmw2XrmQskjBUh/sfP5yKs93V68LijQgjd1cuuZ/q4SCARngLYs60/qqyzuMsg8QQ9KArDI98hxs/RDGE4KRQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxlint/binding-freebsd-x64@1.68.0': + resolution: {integrity: sha512-TI4ovQJliYE9V6e06cEv+qEI9uj7Ao65fmif4er4HD+aouyYyh0P31q2jh3KtqsOHHcQqv2PZ61TjJFLpBDGWQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxlint/binding-linux-arm-gnueabihf@1.68.0': + resolution: {integrity: sha512-LcNnEi9g71Cmry5ZpLbKT+oVv+/zYG3hYVAbBBB5X85nOQZSk8l92CnDkxJMcxUg0NCnMCOFZuaVDlMyv4tYJw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm-musleabihf@1.68.0': + resolution: {integrity: sha512-OovHahL3FX4UaK+hgSf11llUx2vszqjSdQQ61Ck9InOEI/ptZoC4XSQJurITqItVvd53JSlmkLMeaNjM1PoQew==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm64-gnu@1.68.0': + resolution: {integrity: sha512-YbzTglnHLzzi9zv5or8Ztz5fykAoZE8W9iM42/bOrF4HBSB6rJTqdLQWuoP76EHQw9DuKl76K1QmFlG29sPJXQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxlint/binding-linux-arm64-musl@1.68.0': + resolution: {integrity: sha512-qVKtCZNic+OoNnOr/hCQAu22HSQzflI7Fsq/Blzkw02SnLuv163k3kfmrVpZjSBlUHgsRKj6WgQiw30d3SX02Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxlint/binding-linux-ppc64-gnu@1.68.0': + resolution: {integrity: sha512-zExyZ8ZOUuAyQ0y9jpTcyjKUz62YY9JhKPyVxzvjTpXzZ3ujdqiVwfPWDdnA1SsIOrxdtxHn7KErDHLWskFjXg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@oxlint/binding-linux-riscv64-gnu@1.68.0': + resolution: {integrity: sha512-6C4MPuwewyDavA7sxM14wzgRi5GGL68HPIxRCdVyS75U4MDbpFVYzKO9WNR6KLKTMPq2pcz3THwo1sK2uiqngw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxlint/binding-linux-riscv64-musl@1.68.0': + resolution: {integrity: sha512-bnZooVeHAcvA+dH0EDLgx+7HY/DRi6e0hFszg3P+OBatuUjV6EvfIyNIzWOusmqAVh4L6r21GGTZtiKE4iqM4Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxlint/binding-linux-s390x-gnu@1.68.0': + resolution: {integrity: sha512-dIqnZnJSmHCMOUpUcWQOiV14o3DDPVx1DSsMaSzvdhNjC1tB1iEPZbdiMSCIEYbkgbsYznHXWqFdKL8WUB3F8g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@oxlint/binding-linux-x64-gnu@1.68.0': + resolution: {integrity: sha512-zc9lEnfV/HreDTY6gdMlZe+irkwHSxQ4/B1pS9GyK7RVaA5LxhoZY/w6/o2vIwLLEYiXQ5ujGxOM1ZazeFAAIA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxlint/binding-linux-x64-musl@1.68.0': + resolution: {integrity: sha512-Dl5QEX0TCo/40Cdh1o1JdPS//+YiWqjC+Hrrya5OQmStZZr4svAFtdlqcpCrU9yq2Mo3vRVyO9B3h0dzD8s36Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxlint/binding-openharmony-arm64@1.68.0': + resolution: {integrity: sha512-/qy6dOvi4S3/LeXq0l5BT5pRKPYA7oj3uKwJOAZOr5HRLL+HK6jdBynvWuXIA2wwfE01RzNYmbBdM7vwYx00sA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxlint/binding-win32-arm64-msvc@1.68.0': + resolution: {integrity: sha512-fHNtVqPHSYE7UFDSLVFUjxQjnSVXxseNJmRW+XuP4pXXDwePdPda43NL7/BBCFTxHjycOc44JNDaOPtFDNui9A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxlint/binding-win32-ia32-msvc@1.68.0': + resolution: {integrity: sha512-NnKXr4Wgo4nps3erhrE0f8shBvBPZMHg72nDsvX0JyrRvsNiP3f1JNvbCKh+A6VFvpF7ZoJxu904P3cKMhvZnA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxlint/binding-win32-x64-msvc@1.68.0': + resolution: {integrity: sha512-zg5pA+84AlU6XHJ3ruiRxziO71QTrz8nLsk6u01JGS5+tL9/bnlakFiklFrcy4R1/V7ktWtaNitN3JZWmKnf6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] '@pm2/agent@2.1.1': resolution: {integrity: sha512-0V9ckHWd/HSC8BgAbZSoq8KXUG81X97nSkAxmhKDhmF8vanyaoc1YXwc2KVkbWz82Rg4gjd2n9qiT3i7bdvGrQ==} @@ -2413,8 +2504,8 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - '@rollup/pluginutils@5.2.0': - resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} + '@rollup/pluginutils@5.4.0': + resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -2422,215 +2513,137 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.45.1': - resolution: {integrity: sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm-eabi@4.49.0': - resolution: {integrity: sha512-rlKIeL854Ed0e09QGYFlmDNbka6I3EQFw7iZuugQjMb11KMpJCLPFL4ZPbMfaEhLADEL1yx0oujGkBQ7+qW3eA==} + '@rollup/rollup-android-arm-eabi@4.61.0': + resolution: {integrity: sha512-dnxczajOqt0gesZlN5pGQ1s1imQVrsmCw5G2Ci4oM+0WvNz3pyRnlWrT7McoZIb8VlFwCawdmbWRmxRn7HI+VQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.45.1': - resolution: {integrity: sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==} + '@rollup/rollup-android-arm64@4.61.0': + resolution: {integrity: sha512-Bp3JpGP00Vu3f238ivRrjf7z3xSzVPXqCmaJYA9t2c+c8vKYvOzmXF7LkkeUalTEGd6cZcSWe+PFIP3Vy48fRg==} cpu: [arm64] os: [android] - '@rollup/rollup-android-arm64@4.49.0': - resolution: {integrity: sha512-cqPpZdKUSQYRtLLr6R4X3sD4jCBO1zUmeo3qrWBCqYIeH8Q3KRL4F3V7XJ2Rm8/RJOQBZuqzQGWPjjvFUcYa/w==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.45.1': - resolution: {integrity: sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-arm64@4.49.0': - resolution: {integrity: sha512-99kMMSMQT7got6iYX3yyIiJfFndpojBmkHfTc1rIje8VbjhmqBXE+nb7ZZP3A5skLyujvT0eIUCUsxAe6NjWbw==} + '@rollup/rollup-darwin-arm64@4.61.0': + resolution: {integrity: sha512-zaYIpr670mUmmZ1tVzUFplbQbG7h3Gugx3L5FoqhsC2m/YnLlR1a7zVLmXNPy+iY1tFPEbNG+HHBXZGyId0G5w==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.45.1': - resolution: {integrity: sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.49.0': - resolution: {integrity: sha512-y8cXoD3wdWUDpjOLMKLx6l+NFz3NlkWKcBCBfttUn+VGSfgsQ5o/yDUGtzE9HvsodkP0+16N0P4Ty1VuhtRUGg==} + '@rollup/rollup-darwin-x64@4.61.0': + resolution: {integrity: sha512-+P49fvkv2dSoeevUW+lgZ/I2JHSsJCK1Lyjj7Cu6E4UHG4tS9XIefzIjo5qhgELjAclnen1rLzK2PMKJdo+Dyg==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.45.1': - resolution: {integrity: sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-arm64@4.49.0': - resolution: {integrity: sha512-3mY5Pr7qv4GS4ZvWoSP8zha8YoiqrU+e0ViPvB549jvliBbdNLrg2ywPGkgLC3cmvN8ya3za+Q2xVyT6z+vZqA==} + '@rollup/rollup-freebsd-arm64@4.61.0': + resolution: {integrity: sha512-l3FAAOyKJXH2ea6KNFN+MMgC/rnE94YGLXs2ehYqDcCoHt1DpvgWX75BhUJxN38XojP7Ul+4H8PRn7EdyqSDrw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.45.1': - resolution: {integrity: sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==} + '@rollup/rollup-freebsd-x64@4.61.0': + resolution: {integrity: sha512-VokPN3TSctKj65cyCNPaUh4vMFA8awxOot/0sp+4J7ZlNRKQEhXhawqPwajoi8H5ZFt61i0ugZJuTKXBjGJ17Q==} cpu: [x64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.49.0': - resolution: {integrity: sha512-C9KzzOAQU5gU4kG8DTk+tjdKjpWhVWd5uVkinCwwFub2m7cDYLOdtXoMrExfeBmeRy9kBQMkiyJ+HULyF1yj9w==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.45.1': - resolution: {integrity: sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-gnueabihf@4.49.0': - resolution: {integrity: sha512-OVSQgEZDVLnTbMq5NBs6xkmz3AADByCWI4RdKSFNlDsYXdFtlxS59J+w+LippJe8KcmeSSM3ba+GlsM9+WwC1w==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.45.1': - resolution: {integrity: sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==} + '@rollup/rollup-linux-arm-gnueabihf@4.61.0': + resolution: {integrity: sha512-DxH0P3wxm+Yzs/p3zrk9dw1rURu8p0Nv5+MRK/L7OtnLNg5rLZraSBFZ8iUXOd9f2BlhJyEpIZUH/emjq4UJ4g==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.49.0': - resolution: {integrity: sha512-ZnfSFA7fDUHNa4P3VwAcfaBLakCbYaxCk0jUnS3dTou9P95kwoOLAMlT3WmEJDBCSrOEFFV0Y1HXiwfLYJuLlA==} + '@rollup/rollup-linux-arm-musleabihf@4.61.0': + resolution: {integrity: sha512-T6ZvMNe84kAz6TBWHC7hGAoEtzP1LWYw/AqayGWEF6uISt3Abk/st06LqRD9THd7Xz3NxzurUpzAuEAUbZf+nw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.45.1': - resolution: {integrity: sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.49.0': - resolution: {integrity: sha512-Z81u+gfrobVK2iV7GqZCBfEB1y6+I61AH466lNK+xy1jfqFLiQ9Qv716WUM5fxFrYxwC7ziVdZRU9qvGHkYIJg==} + '@rollup/rollup-linux-arm64-gnu@4.61.0': + resolution: {integrity: sha512-q/4hzvQkDs8b4jIBab1pnLiiM0ayTZsN2amBFPDzuyZxjEd4wDwx0UJFYM3cOZzSf5Kw8fnWSprJzIBMkcR44Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.45.1': - resolution: {integrity: sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==} + '@rollup/rollup-linux-arm64-musl@4.61.0': + resolution: {integrity: sha512-vvYWX3akdEAY6km+9wAqFDnk6pQsbJKVnj7xawcvs/+fdlYBGp+U+Qq/lLfpIxYIZvZLHMAKD9HLdacSx/r3dw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.49.0': - resolution: {integrity: sha512-zoAwS0KCXSnTp9NH/h9aamBAIve0DXeYpll85shf9NJ0URjSTzzS+Z9evmolN+ICfD3v8skKUPyk2PO0uGdFqg==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-loongarch64-gnu@4.45.1': - resolution: {integrity: sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==} + '@rollup/rollup-linux-loong64-gnu@4.61.0': + resolution: {integrity: sha512-DePa5cqOxDP/Zp0VOXpeWaGew5iIv5DXp9NYbzkX5PFQyWVX9184WCTh3hvr/7lhXo8ZVlbFLkz8+o/q1dU6gA==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.49.0': - resolution: {integrity: sha512-2QyUyQQ1ZtwZGiq0nvODL+vLJBtciItC3/5cYN8ncDQcv5avrt2MbKt1XU/vFAJlLta5KujqyHdYtdag4YEjYQ==} + '@rollup/rollup-linux-loong64-musl@4.61.0': + resolution: {integrity: sha512-LV8aWMB8UChglMCEzs7RkN0GsH29RJaLLqwm9fCIjlqwxQTiWAqNcc7wjBkH31hV0PU/yVxGYvrYsgfea2qw6g==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.45.1': - resolution: {integrity: sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==} + '@rollup/rollup-linux-ppc64-gnu@4.61.0': + resolution: {integrity: sha512-QoNSnwQtaeNu5grdBbsL0tt1uyl5EnS8DA8Mr3nluMXbhdQNyhN+G4tBax7VCdxLKj8YJ0/4OO9Ho84jMnJtKA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.49.0': - resolution: {integrity: sha512-k9aEmOWt+mrMuD3skjVJSSxHckJp+SiFzFG+v8JLXbc/xi9hv2icSkR3U7uQzqy+/QbbYY7iNB9eDTwrELo14g==} + '@rollup/rollup-linux-ppc64-musl@4.61.0': + resolution: {integrity: sha512-/zZp5MKapIIApE8trN8qLGNSiRN9TUoaUZ1cmVu4XnVdd5LQLOXTtyi+vtfUbNnT3iyjzpPqYeKXmvJ+gJGYWw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.45.1': - resolution: {integrity: sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.49.0': - resolution: {integrity: sha512-rDKRFFIWJ/zJn6uk2IdYLc09Z7zkE5IFIOWqpuU0o6ZpHcdniAyWkwSUWE/Z25N/wNDmFHHMzin84qW7Wzkjsw==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-musl@4.45.1': - resolution: {integrity: sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==} + '@rollup/rollup-linux-riscv64-gnu@4.61.0': + resolution: {integrity: sha512-RbrzcD3aJ1k3UbtMRRBNwojdVVyXjuVAFTfn/xPa6EEl6GE9Sm/akPgFTb9aAC9pMKGJ6CtWxaGrqWcabH+ySg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.49.0': - resolution: {integrity: sha512-FkkhIY/hYFVnOzz1WeV3S9Bd1h0hda/gRqvZCMpHWDHdiIHn6pqsY3b5eSbvGccWHMQ1uUzgZTKS4oGpykf8Tw==} + '@rollup/rollup-linux-riscv64-musl@4.61.0': + resolution: {integrity: sha512-ZF+onDsBso8PJf1XaG9lB+O9RnBpKGnY6OrzC4CSHrtC1jb6jWLTKK4bRqdoCXHd22gyr2hiYmEAm8Wns/BOCw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.45.1': - resolution: {integrity: sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.49.0': - resolution: {integrity: sha512-gRf5c+A7QiOG3UwLyOOtyJMD31JJhMjBvpfhAitPAoqZFcOeK3Kc1Veg1z/trmt+2P6F/biT02fU19GGTS529A==} + '@rollup/rollup-linux-s390x-gnu@4.61.0': + resolution: {integrity: sha512-Atk0aSIk5Zx2Wuh9dgRQgLP0Koc8hOeYpbWryMXyk8G8/HmPkwPPkMqIIDhrXHHYqfUzSJA/I7IWSBv8xSmRBA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.45.1': - resolution: {integrity: sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==} + '@rollup/rollup-linux-x64-gnu@4.61.0': + resolution: {integrity: sha512-0uMOcf3eZ5K+K4cYHkdxShFMPlPXCOdfDFEFn9dNYAEEd2cVvmOfH7zFgRVoDgmtQ1m9k5q7qfrHzyMAubKYUA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.49.0': - resolution: {integrity: sha512-BR7+blScdLW1h/2hB/2oXM+dhTmpW3rQt1DeSiCP9mc2NMMkqVgjIN3DDsNpKmezffGC9R8XKVOLmBkRUcK/sA==} + '@rollup/rollup-linux-x64-musl@4.61.0': + resolution: {integrity: sha512-mvFtE4A/t/7hRJ7X8Ozmu8FsIkAUat2nzl12pgU337BRmq87AQUJztwHz2Zv5/tjo9/C95E66CK03SI/ToEDJw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.45.1': - resolution: {integrity: sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==} + '@rollup/rollup-openbsd-x64@4.61.0': + resolution: {integrity: sha512-z9b9+aTxvt8n2rNltMPvyaUfB8NJ+CVyOrGK/MdIKHx7B+lXmZpm/XbRsU7Rpf3fRqJ2uS6mBJiJveCtq8LHDg==} cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.49.0': - resolution: {integrity: sha512-hDMOAe+6nX3V5ei1I7Au3wcr9h3ktKzDvF2ne5ovX8RZiAHEtX1A5SNNk4zt1Qt77CmnbqT+upb/umzoPMWiPg==} - cpu: [x64] - os: [linux] + os: [openbsd] - '@rollup/rollup-win32-arm64-msvc@4.45.1': - resolution: {integrity: sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==} + '@rollup/rollup-openharmony-arm64@4.61.0': + resolution: {integrity: sha512-jXaXFqKMehsOc+g8R6oo33RRC6w07G9jDBxAE5eAKX7mOcCbZloYIPNhfG9Wl+P9O9IWHFO4OJgPi1Ml2qkt7w==} cpu: [arm64] - os: [win32] + os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.49.0': - resolution: {integrity: sha512-wkNRzfiIGaElC9kXUT+HLx17z7D0jl+9tGYRKwd8r7cUqTL7GYAvgUY++U2hK6Ar7z5Z6IRRoWC8kQxpmM7TDA==} + '@rollup/rollup-win32-arm64-msvc@4.61.0': + resolution: {integrity: sha512-OXNWVFocS2IA4+QplhTZZ2a+8hPZR7T8KuozsNmJKK8y7cp83StHvGksfHzPG3wczWTczyWHVQuqeiTUbjiyBg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.45.1': - resolution: {integrity: sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.49.0': - resolution: {integrity: sha512-gq5aW/SyNpjp71AAzroH37DtINDcX1Qw2iv9Chyz49ZgdOP3NV8QCyKZUrGsYX9Yyggj5soFiRCgsL3HwD8TdA==} + '@rollup/rollup-win32-ia32-msvc@4.61.0': + resolution: {integrity: sha512-AlAbNtBO637LxSldqV43z0FfXoGfl2TW1DgAg/bs7aQswFbDewz2SJm3BUhiGfbOVtW571xbc9p+REdxhyN/Eg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.45.1': - resolution: {integrity: sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==} + '@rollup/rollup-win32-x64-gnu@4.61.0': + resolution: {integrity: sha512-QRSrQXyJ1M4tjNXdR0/G/IgV6lzfQQJYBjlWIEYkY2Xs86DRl/iEpQ4blMDjJxSl7n19eDKKXMg0AmuBVYy8pQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.49.0': - resolution: {integrity: sha512-gEtqFbzmZLFk2xKh7g0Rlo8xzho8KrEFEkzvHbfUGkrgXOpZ4XagQ6n+wIZFNh1nTb8UD16J4nFSFKXYgnbdBg==} + '@rollup/rollup-win32-x64-msvc@4.61.0': + resolution: {integrity: sha512-tkuFxhvKO/HlGd0VsINF6vHSYH8AF8W0TcNxKDK6JZmrehngFj78pToc8iemtnvwilDjs2G/qSzYFhe9U8q+fw==} cpu: [x64] os: [win32] - '@rtsao/scc@1.1.0': - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - - '@rushstack/eslint-patch@1.12.0': - resolution: {integrity: sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw==} - '@scarf/scarf@1.4.0': resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + '@sentry-internal/tracing@7.120.4': resolution: {integrity: sha512-Fz5+4XCg3akeoFK+K7g+d7HqGMjmnLoY2eJlpONJmaeT9pXY7yfUyXKZMmMajdE2LxxKJgQ2YKvSCaGVamTjHw==} engines: {node: '>=8'} @@ -2655,89 +2668,102 @@ packages: resolution: {integrity: sha512-zCKpyDIWKHwtervNK2ZlaK8mMV7gVUijAgFeJStH+CU/imcdquizV3pFLlSQYRswG+Lbyd6CT/LGRh3IbtkCFw==} engines: {node: '>=8'} - '@sindresorhus/is@5.6.0': - resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} - engines: {node: '>=14.16'} + '@sindresorhus/is@7.2.0': + resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} + engines: {node: '>=18'} - '@stylistic/eslint-plugin@5.2.3': - resolution: {integrity: sha512-oY7GVkJGVMI5benlBDCaRrSC1qPasafyv5dOBLLv5MTilMGnErKhO6ziEfodDDIZbo5QxPUNW360VudJOFODMw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: '>=9.0.0' + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} - '@swc/cli@0.7.8': - resolution: {integrity: sha512-27Ov4rm0s2C6LLX+NDXfDVB69LGs8K94sXtFhgeUyQ4DBywZuCgTBu2loCNHRr8JhT9DeQvJM5j9FAu/THbo4w==} - engines: {node: '>= 16.14.0'} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@swc/cli@0.8.1': + resolution: {integrity: sha512-L+ACCGHCiS0VqHVep/INLVnvRvJ2XooQFLZq4L8snhxw1jsqz+XRcY313UsyPVturPPE1shW3jic7rt3qEQTSQ==} + engines: {node: '>= 20.19.0'} hasBin: true peerDependencies: '@swc/core': ^1.2.66 - chokidar: ^4.0.1 + chokidar: ^5.0.0 peerDependenciesMeta: chokidar: optional: true - '@swc/core-darwin-arm64@1.13.5': - resolution: {integrity: sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==} + '@swc/core-darwin-arm64@1.15.40': + resolution: {integrity: sha512-PaYyclfmQ++77D8ityYvmmVzHv9aG8ROwt2GfG6/ccloy4Hgf80qtOnzb9VYvPsUT7Ty1uhuDRhv3XYpf62qhQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.13.5': - resolution: {integrity: sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==} + '@swc/core-darwin-x64@1.15.40': + resolution: {integrity: sha512-HbbPzvfLBUXjIB1Ezks+//lNUjmLjfyd63XSwprJgrZaXYdm70kohXPJUWdqKZozolFxbPaO+xtBaiUp6BoueA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.13.5': - resolution: {integrity: sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==} + '@swc/core-linux-arm-gnueabihf@1.15.40': + resolution: {integrity: sha512-SlRZsCjOCPR2LvFs0Ri/Xrx/5o5TCt8vl4gW6mX1hEZOG0a625RxzRHpHdAQNGykmAN/7IeaFAJG+QnNmxlHcA==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.13.5': - resolution: {integrity: sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw==} + '@swc/core-linux-arm64-gnu@1.15.40': + resolution: {integrity: sha512-Q8byxJt2fh8CR3EUX6snBpy47AoBVm+In/+Z3rjDHMjC38ZvR9/gtUUNCT0tfrn4EdVsO8/QPi59nxrxvqxvBQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.13.5': - resolution: {integrity: sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==} + '@swc/core-linux-arm64-musl@1.15.40': + resolution: {integrity: sha512-4z0MgHU+7M0pZDqBN1El7mFXDI1SBwinfcUkAyA4v8QrhOIUOZltySt2aStQLZGrdXVXM4Y4ylfiTC04ED+MoQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.13.5': - resolution: {integrity: sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==} + '@swc/core-linux-ppc64-gnu@1.15.40': + resolution: {integrity: sha512-fLI4iUgeSZu0eRWUXwe6YzPFx9gHbFiPkl8Rp3mJfP8OpNR3nTQCGPvHdDh9xniW7mVvgMY4ni7A4VzqI1KrpA==} + engines: {node: '>=10'} + cpu: [ppc64] + os: [linux] + + '@swc/core-linux-s390x-gnu@1.15.40': + resolution: {integrity: sha512-YqeKMAb7d4nQSGMJQ454IlaCENpzcDqhvBE9+CPfdnYpnUXxd+BSrB6Xk0YjW8UyoEhUj4p6quATCxbsp6J3jg==} + engines: {node: '>=10'} + cpu: [s390x] + os: [linux] + + '@swc/core-linux-x64-gnu@1.15.40': + resolution: {integrity: sha512-7HOuS1iGcme/j/TuL1TfmmLGiMQrjv/GmjyZeydl00FKPtpGXEldwqfI56xgd1YzrzoB2svWjxbGGyQ0TEASxg==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.13.5': - resolution: {integrity: sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==} + '@swc/core-linux-x64-musl@1.15.40': + resolution: {integrity: sha512-h4kZYHc7dpc9P9u4brRJaS8Pl7tPVHAeiLSzw7T5RfIJgAoSdaCMKzI/2Uay9gFhaw8uyCDl0L5q37r0EpAfIA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.13.5': - resolution: {integrity: sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==} + '@swc/core-win32-arm64-msvc@1.15.40': + resolution: {integrity: sha512-+mQgKZXSj6mV38Zh05QaxSjUDmGP/R2JWlXZTDLSPkDzHU6p3GxN9eeSf5dfyDVU86946fmCvSzyl/ucImx8+A==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.13.5': - resolution: {integrity: sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==} + '@swc/core-win32-ia32-msvc@1.15.40': + resolution: {integrity: sha512-yvwdPLGd25mcj/mNatjNQ0lZujtQD6psH3v9PNmMb+fSzjbNG8KIDxjFWrcV+fsFVLOkyOmdJsFmX7NAFjVyPw==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.13.5': - resolution: {integrity: sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==} + '@swc/core-win32-x64-msvc@1.15.40': + resolution: {integrity: sha512-OXtKsLU1bVtInzzDEAY2sYiF/rl4tvAnLLLpuMp3HzAOQZ5A+i69AKDhA1YLQTaMAqO3vzyYNVAYVRMPtSYD4w==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.13.5': - resolution: {integrity: sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==} + '@swc/core@1.15.40': + resolution: {integrity: sha512-2kwzJikRvgtNAG7MwVZY2vEzZjTxKIq5jXOihuSV/8U+Hej8Va22t65aKnJZs3P+NwojZvR8Mf8kyM7O+V8sQg==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -2751,75 +2777,71 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@swc/helpers@0.5.17': - resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - - '@swc/types@0.1.24': - resolution: {integrity: sha512-tjTMh3V4vAORHtdTprLlfoMptu1WfTZG9Rsca6yOKyNYsRr+MUXutKmliB17orgSZk5DpnDxs8GUdd/qwYxOng==} + '@swc/helpers@0.5.23': + resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} - '@szmarczak/http-timer@5.0.1': - resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} - engines: {node: '>=14.16'} + '@swc/types@0.1.26': + resolution: {integrity: sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==} - '@tailwindcss/node@4.1.17': - resolution: {integrity: sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==} + '@tailwindcss/node@4.3.0': + resolution: {integrity: sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==} - '@tailwindcss/oxide-android-arm64@4.1.17': - resolution: {integrity: sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-android-arm64@4.3.0': + resolution: {integrity: sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==} + engines: {node: '>= 20'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.1.17': - resolution: {integrity: sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-darwin-arm64@4.3.0': + resolution: {integrity: sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==} + engines: {node: '>= 20'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.1.17': - resolution: {integrity: sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-darwin-x64@4.3.0': + resolution: {integrity: sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==} + engines: {node: '>= 20'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.1.17': - resolution: {integrity: sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-freebsd-x64@4.3.0': + resolution: {integrity: sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==} + engines: {node: '>= 20'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17': - resolution: {integrity: sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': + resolution: {integrity: sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==} + engines: {node: '>= 20'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.1.17': - resolution: {integrity: sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': + resolution: {integrity: sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==} + engines: {node: '>= 20'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.1.17': - resolution: {integrity: sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-linux-arm64-musl@4.3.0': + resolution: {integrity: sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==} + engines: {node: '>= 20'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.1.17': - resolution: {integrity: sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-linux-x64-gnu@4.3.0': + resolution: {integrity: sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==} + engines: {node: '>= 20'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.1.17': - resolution: {integrity: sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-linux-x64-musl@4.3.0': + resolution: {integrity: sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==} + engines: {node: '>= 20'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-wasm32-wasi@4.1.17': - resolution: {integrity: sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==} + '@tailwindcss/oxide-wasm32-wasi@4.3.0': + resolution: {integrity: sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -2830,24 +2852,24 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.1.17': - resolution: {integrity: sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': + resolution: {integrity: sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==} + engines: {node: '>= 20'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.1.17': - resolution: {integrity: sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-win32-x64-msvc@4.3.0': + resolution: {integrity: sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==} + engines: {node: '>= 20'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.1.17': - resolution: {integrity: sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==} - engines: {node: '>= 10'} + '@tailwindcss/oxide@4.3.0': + resolution: {integrity: sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==} + engines: {node: '>= 20'} - '@tailwindcss/postcss@4.1.17': - resolution: {integrity: sha512-+nKl9N9mN5uJ+M7dBOOCzINw94MPstNR/GtIhz1fpZysxL/4a+No64jCBD6CPN+bIHWFx3KWuu8XJRrj/572Dw==} + '@tailwindcss/postcss@4.3.0': + resolution: {integrity: sha512-Jm05Tjx+9yCLGv5qw1c+84Psds8MnyrEQYCB+FFk2lgGiUjlRqdxke4mVTuYrj2xnVZqKim2Apr5ySuQRYAw/w==} '@tanstack/query-core@5.90.12': resolution: {integrity: sha512-T1/8t5DhV/SisWjDnaiU2drl6ySvsHj1bHBCWNXd+/T+Hh1cf6JodyEYMd5sgwm+b/mETT4EV3H+zCVczCU5hg==} @@ -2861,14 +2883,48 @@ packages: resolution: {integrity: sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==} engines: {node: '>=18'} + '@tokenizer/inflate@0.4.1': + resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} + engines: {node: '>=18'} + '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - '@tybys/wasm-util@0.10.0': - resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} + '@turbo/darwin-64@2.9.16': + resolution: {integrity: sha512-jLjApWTSNd7JZ5JaLYfelW1ytnGQOvB7ivl+2RD1xQvJTbi8I9gBjzcga7tDZVPyaxpl10YTfJt3BrYXR18KDw==} + cpu: [x64] + os: [darwin] + + '@turbo/darwin-arm64@2.9.16': + resolution: {integrity: sha512-YPgrn+5HIGzrx0O2a631SV4MBQUe4W/DafMFUuBVgaU32PW9/OTT0ehviF0QSxTXuRJlHvW2eUTemddF5/spmw==} + cpu: [arm64] + os: [darwin] + + '@turbo/linux-64@2.9.16': + resolution: {integrity: sha512-vAEf1H6l26lTpl9FJ/peQo1NUB8RC0sbEJJz5mPcUhHA2bPDup2x3CZPgo/bH8S4cUcBLm4FN3UHd5iUO2RAew==} + cpu: [x64] + os: [linux] + + '@turbo/linux-arm64@2.9.16': + resolution: {integrity: sha512-xDBLR2PZg4BrQOchfG6svgpv5FCNJ2TOtT2psLdEJcdKo1BH+pnPs9Xj6pvUjgfkHbuvBOfeE4R6tvxMoQKDHQ==} + cpu: [arm64] + os: [linux] + + '@turbo/windows-64@2.9.16': + resolution: {integrity: sha512-NBAJnaUiGdgkSzQwUIdOvkCkcpTSu58G/sBGa0mvBtzfvFOOgrQwepKOOQ8cp6sWM6OcKDNFj2p1dsZA1OWjPg==} + cpu: [x64] + os: [win32] + + '@turbo/windows-arm64@2.9.16': + resolution: {integrity: sha512-Y7SJppD0Z8wjO3Ec0ZGd9KQ4Yv0BMnA8CIowj5Vp+OEVsosXDG2weK6/t1RRLfJmc2Ozrnd6y4DOgQys+mn3WQ==} + cpu: [arm64] + os: [win32] + + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} '@typegoose/typegoose@12.19.0': resolution: {integrity: sha512-rsHMd3M6Rj6YYw6ecZU6YtXjiBzCqO3zJtgrrVCau1bEp6na8sbMcqRy8kNbTRyA2QCBAGEvM7nXTM8hdxeEiQ==} @@ -2876,24 +2932,17 @@ packages: peerDependencies: mongoose: ~8.18.0 - '@types/chai@5.2.2': - resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} - - '@types/conventional-commits-parser@5.0.1': - resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - '@types/eslint__js@9.14.0': - resolution: {integrity: sha512-s0jepCjOJWB/GKcuba4jISaVpBudw3ClXJ3fUK4tugChUMQsp6kSwuA8Dcx6wFd/JsJqcY8n4rEpa5RTHs5ypA==} - deprecated: This is a stub types definition. @eslint/js provides its own type definitions, so you do not need this installed. + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - - '@types/http-cache-semantics@4.0.4': - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + '@types/http-cache-semantics@4.2.0': + resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==} '@types/i18next-fs-backend@1.2.0': resolution: {integrity: sha512-30XnjBF+SLndemvooRQRtcoD5xmF2nNNTa5RqE63+OWssaZOxN9r895ZvXUMbkk8YZr1Cy3scpQBZ6YXLH+jEg==} @@ -2905,9 +2954,6 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/luxon@3.7.1': resolution: {integrity: sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==} @@ -2917,19 +2963,19 @@ packages: '@types/node-rsa@1.1.4': resolution: {integrity: sha512-dB0ECel6JpMnq5ULvpUTunx3yNm8e/dIkv8Zu9p2c8me70xIRUUG3q+qXRwcSf9rN3oqamv4116iHy90dJGRpA==} - '@types/node@22.18.0': - resolution: {integrity: sha512-m5ObIqwsUp6BZzyiy4RdZpzWGub9bqLJMvZDD0QMXhxjqMHMENlj+SqF5QxoUwaQNFe+8kz8XM8ZQhqkQPTgMQ==} + '@types/node@22.19.19': + resolution: {integrity: sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==} - '@types/node@24.3.0': - resolution: {integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==} + '@types/node@25.9.1': + resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} '@types/react-dom@19.2.3': resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} peerDependencies: '@types/react': ^19.2.0 - '@types/react@19.2.7': - resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==} + '@types/react@19.2.16': + resolution: {integrity: sha512-esJiCAnl0kfpNdE69f3So4WJUXy95dLZydX0KwK46riIHDzHM7O9Vtf9xCHW0PXIqvgqNrswl522kA/5yx+F4w==} '@types/readable-stream@4.0.21': resolution: {integrity: sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==} @@ -2949,80 +2995,32 @@ packages: '@types/wrap-ansi@3.0.0': resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} - '@typescript-eslint/eslint-plugin@8.41.0': - resolution: {integrity: sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.41.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/parser@8.41.0': - resolution: {integrity: sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.37.0': resolution: {integrity: sha512-BIUXYsbkl5A1aJDdYJCBAo8rCEbAvdquQ8AnLb6z5Lp1u3x5PNgSSx9A/zqYc++Xnr/0DVpls8iQ2cJs/izTXA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/project-service@8.41.0': - resolution: {integrity: sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.37.0': resolution: {integrity: sha512-0vGq0yiU1gbjKob2q691ybTg9JX6ShiVXAAfm2jGf3q0hdP6/BruaFjL/ManAR/lj05AvYCH+5bbVo0VtzmjOA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.41.0': - resolution: {integrity: sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.37.0': resolution: {integrity: sha512-1/YHvAVTimMM9mmlPvTec9NP4bobA1RkDbMydxG8omqwJJLEW/Iy2C4adsAESIXU3WGLXFHSZUU+C9EoFWl4Zg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/tsconfig-utils@8.41.0': - resolution: {integrity: sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/type-utils@8.41.0': - resolution: {integrity: sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.37.0': resolution: {integrity: sha512-ax0nv7PUF9NOVPs+lmQ7yIE7IQmAf8LGcXbMvHX5Gm+YJUYNAl340XkGnrimxZ0elXyoQJuN5sbg6C4evKA4SQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.41.0': - resolution: {integrity: sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.37.0': resolution: {integrity: sha512-zuWDMDuzMRbQOM+bHyU4/slw27bAUEcKSKKs3hcv2aNnc/tvE/h7w60dwVw8vnal2Pub6RT1T7BI8tFZ1fE+yg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/typescript-estree@8.41.0': - resolution: {integrity: sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.37.0': resolution: {integrity: sha512-TSFvkIW6gGjN2p6zbXo20FzCABbyUAuq6tBvNRGsKdsSQ6a7rnV6ADfZ7f4iI3lIiXc4F4WWvtUfDw9CJ9pO5A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3030,116 +3028,57 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.41.0': - resolution: {integrity: sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.37.0': resolution: {integrity: sha512-YzfhzcTnZVPiLfP/oeKtDp2evwvHLMe0LOy7oe+hb9KKIumLNohYS9Hgp1ifwpu42YWxhZE8yieggz6JpqO/1w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.41.0': - resolution: {integrity: sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} - cpu: [arm] - os: [android] - - '@unrs/resolver-binding-android-arm64@1.11.1': - resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} - cpu: [arm64] - os: [android] - - '@unrs/resolver-binding-darwin-arm64@1.11.1': - resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260601.1': + resolution: {integrity: sha512-d4PVG8gcotwb5eJiMK14GdFOXRCH3tx4nAJxBcwJ3ZxPJ8Se3eQ54NZMeuuulU9isMJgtVxusAgjI8Qkhg4xDg==} + engines: {node: '>=16.20.0'} cpu: [arm64] os: [darwin] - '@unrs/resolver-binding-darwin-x64@1.11.1': - resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260601.1': + resolution: {integrity: sha512-JJ34gLHbemqkRRuWshdWYL+WFXVYMmivRKD6qyHkhLGWmq3AmPaAsjNoscdaDRWU3GrQm1gI2hx8N+BpaJow7Q==} + engines: {node: '>=16.20.0'} cpu: [x64] os: [darwin] - '@unrs/resolver-binding-freebsd-x64@1.11.1': - resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} - cpu: [x64] - os: [freebsd] - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260601.1': + resolution: {integrity: sha512-Pr3/dVouvJ1So1buF6OZ5sUJ2Ij8BOX2vZXugJeoyeSgCjkhsZO4IJ3hW87aY3KpFrgJMLimKy2Ud1S3o9wPxQ==} + engines: {node: '>=16.20.0'} cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} - cpu: [ppc64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} - cpu: [s390x] - os: [linux] - - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} - cpu: [x64] + '@typescript/native-preview-linux-arm@7.0.0-dev.20260601.1': + resolution: {integrity: sha512-8jMjFrryB4hosxgKY6R1RJA9imUvxwk99AoRcfmy4xHZ7pLQ/QgAxElZaISOT8/gXQfVWppfI2Sj5YakgiAqyQ==} + engines: {node: '>=16.20.0'} + cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} + '@typescript/native-preview-linux-x64@7.0.0-dev.20260601.1': + resolution: {integrity: sha512-FJUXnaSz8OWZSQiX02Sd51pXQSpZEHvkChuM/UxTsJ1kfRCzx59jB5fmN3JLiRoUizJIa0rhxu/+YA+/c/euqw==} + engines: {node: '>=16.20.0'} cpu: [x64] os: [linux] - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260601.1': + resolution: {integrity: sha512-tzc4eMCpdu+rHKxNUzWclm107WoCIbbcYrDg5DU5/07Wk5QlXG6bXsaKILpXxA60tyseVLbRe4wv6Ww79X7EgA==} + engines: {node: '>=16.20.0'} cpu: [arm64] os: [win32] - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} - cpu: [ia32] - os: [win32] - - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} + '@typescript/native-preview-win32-x64@7.0.0-dev.20260601.1': + resolution: {integrity: sha512-H0YctU7f48BpxTaGTdK7f1UT5+1EY6pg7vMK9zBQXVhc8wSrCpQg4O/rf7kM8vyLUsC/pJpTE5OLUlxk+addCg==} + engines: {node: '>=16.20.0'} cpu: [x64] os: [win32] + '@typescript/native-preview@7.0.0-dev.20260601.1': + resolution: {integrity: sha512-IAoqEMiW2aw3m74TLQbNI1V235p9Sk8XhvvKTw2U5YAOfkPEFZaoYFvmoqWA/d2OLap1D3atyNbtD/dub7Jn9g==} + engines: {node: '>=16.20.0'} + hasBin: true + '@vercel/analytics@1.6.1': resolution: {integrity: sha512-oH9He/bEM+6oKlv3chWuOOcp8Y6fo6/PSro8hEkgCW3pu9/OiCXiUpRUogDh3Fs3LH2sosDrx8CxeOLBEE+afg==} peerDependencies: @@ -3189,48 +3128,48 @@ packages: vue-router: optional: true - '@vitest/coverage-v8@3.2.4': - resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==} + '@vitest/coverage-v8@4.1.8': + resolution: {integrity: sha512-lt3kovsyHwYe00wq4D1ti0Z974fWj4NLp6siqiyEufUpyFwK9Yhi7rBhac9JL5aA0zoMrJqc4vYPZRUnI7l7nw==} peerDependencies: - '@vitest/browser': 3.2.4 - vitest: 3.2.4 + '@vitest/browser': 4.1.8 + vitest: 4.1.8 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@3.2.4': - resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + '@vitest/expect@4.1.8': + resolution: {integrity: sha512-h3nDO677RDLEGlBxyQ5CW8RlMThSKSRLUePLOx09gNIWRL40edgA1GCZSZgf1W55MFAG6/Sw14KeaAnqv0NKdQ==} - '@vitest/mocker@3.2.4': - resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + '@vitest/mocker@4.1.8': + resolution: {integrity: sha512-LEiN/xe4OSIbKe9HQIp5OC24agGD9J5CnmMgsLohVVoOPWL9a2sBoR6VBx43jQZb7Kr1l4RCuyCJzcAa0+dojw==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@3.2.4': - resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + '@vitest/pretty-format@4.1.8': + resolution: {integrity: sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA==} - '@vitest/runner@3.2.4': - resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + '@vitest/runner@4.1.8': + resolution: {integrity: sha512-EmVxeBAfMJvycdjd6Hm+RbFBbA9fKvo0Kx37hNpBYoYeavH3RNsBXWDooR1mgD52dCrxIIuP7UotpfiwOikvcg==} - '@vitest/snapshot@3.2.4': - resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + '@vitest/snapshot@4.1.8': + resolution: {integrity: sha512-acfZboRmAIf05DEKcBQy33VXojFJjtUdLyo7oOmV9kebb2xdU01UknNiPuPZoJZQyO7DF0gZdTGTpeAzET9QPQ==} - '@vitest/spy@3.2.4': - resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + '@vitest/spy@4.1.8': + resolution: {integrity: sha512-6EevtBp6OZOPF7bmz36HrGMeP3txgVSrgebWxHOafDXGkhIzfXK14f8KF6MuFfgXXUeHxmpD3BQxkV00/3s5mA==} - '@vitest/ui@3.2.4': - resolution: {integrity: sha512-hGISOaP18plkzbWEcP/QvtRW1xDXF2+96HbEX6byqQhAUbiS5oH6/9JwW+QsQCIYON2bI6QZBF+2PvOmrRZ9wA==} + '@vitest/ui@4.1.8': + resolution: {integrity: sha512-RUS2ZU2TsduVrI+9c12uTNaKrNUTsm6yFt3fueEUB9iKvyC2UP83F+sqIz00HQIah4UOL1TMoDAki8K0NjGvsA==} peerDependencies: - vitest: 3.2.4 + vitest: 4.1.8 - '@vitest/utils@3.2.4': - resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@vitest/utils@4.1.8': + resolution: {integrity: sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==} '@xboxreplay/errors@0.1.0': resolution: {integrity: sha512-Tgz1d/OIPDWPeyOvuL5+aai5VCcqObhPnlI3skQuf80GVF3k1I0lPCnGC+8Cm5PV9aLBT5m8qPcJoIUQ2U4y9g==} @@ -3238,49 +3177,45 @@ packages: '@xboxreplay/xboxlive-auth@3.3.3': resolution: {integrity: sha512-j0AU8pW10LM8O68CTZ5QHnvOjSsnPICy0oQcP7zyM7eWkDQ/InkiQiirQKsPn1XRYDl4ccNu0WM582s3UKwcBg==} - '@xhmikosr/archive-type@7.1.0': - resolution: {integrity: sha512-xZEpnGplg1sNPyEgFh0zbHxqlw5dtYg6viplmWSxUj12+QjU9SKu3U/2G73a15pEjLaOqTefNSZ1fOPUOT4Xgg==} - engines: {node: '>=18'} - - '@xhmikosr/bin-check@7.1.0': - resolution: {integrity: sha512-y1O95J4mnl+6MpVmKfMYXec17hMEwE/yeCglFNdx+QvLLtP0yN4rSYcbkXnth+lElBuKKek2NbvOfOGPpUXCvw==} - engines: {node: '>=18'} + '@xhmikosr/archive-type@8.0.1': + resolution: {integrity: sha512-toXuiWChyfOpEiCPsIw6HGHaNji5LVkvB6EREL548vGWr+hGaehwxG4LzN20vm9aGFXwnA/Jty8yW2/SmV+1zQ==} + engines: {node: '>=20'} - '@xhmikosr/bin-wrapper@13.2.0': - resolution: {integrity: sha512-t9U9X0sDPRGDk5TGx4dv5xiOvniVJpXnfTuynVKwHgtib95NYEw4MkZdJqhoSiz820D9m0o6PCqOPMXz0N9fIw==} - engines: {node: '>=18'} + '@xhmikosr/bin-check@8.2.1': + resolution: {integrity: sha512-DNruLq+kalxcE7JeDxtqrN9kyWjLW8VqsQPLRTwD1t9ck/1rF4qBL0mX5Fe2/xLOMjo5wPb67BNX2kSAhzfLjA==} + engines: {node: '>=20'} - '@xhmikosr/decompress-tar@8.1.0': - resolution: {integrity: sha512-m0q8x6lwxenh1CrsTby0Jrjq4vzW/QU1OLhTHMQLEdHpmjR1lgahGz++seZI0bXF3XcZw3U3xHfqZSz+JPP2Gg==} - engines: {node: '>=18'} + '@xhmikosr/bin-wrapper@14.2.5': + resolution: {integrity: sha512-MXfD5mNdc9xQM4/I4O7uWSdQqeZPTYRQSfddUtfH9oUeVkDUTnX4HI2udTsvDEs7ptv2ywHE9UfxlMUs+79wFw==} + engines: {node: '>=20'} - '@xhmikosr/decompress-tarbz2@8.1.0': - resolution: {integrity: sha512-aCLfr3A/FWZnOu5eqnJfme1Z1aumai/WRw55pCvBP+hCGnTFrcpsuiaVN5zmWTR53a8umxncY2JuYsD42QQEbw==} - engines: {node: '>=18'} + '@xhmikosr/decompress-tar@9.0.1': + resolution: {integrity: sha512-4AkVR1SoqTxYY22IRRYKDeLirPIDGqMqYsqgjKYuwhgRcBb+yDP4t5Xph33UCzL/nahK/aADmlMEjTNstbX7kw==} + engines: {node: '>=20'} - '@xhmikosr/decompress-targz@8.1.0': - resolution: {integrity: sha512-fhClQ2wTmzxzdz2OhSQNo9ExefrAagw93qaG1YggoIz/QpI7atSRa7eOHv4JZkpHWs91XNn8Hry3CwUlBQhfPA==} - engines: {node: '>=18'} + '@xhmikosr/decompress-tarbz2@9.0.1': + resolution: {integrity: sha512-aFONnsbqEOuXudvK7V7wB8dcEAKR389oUYQfZhrQZA8OtogJpDjrUAvEH3Qlc9yFqTU6r5/svTEcRwtXhoIJbQ==} + engines: {node: '>=20'} - '@xhmikosr/decompress-unzip@7.1.0': - resolution: {integrity: sha512-oqTYAcObqTlg8owulxFTqiaJkfv2SHsxxxz9Wg4krJAHVzGWlZsU8tAB30R6ow+aHrfv4Kub6WQ8u04NWVPUpA==} - engines: {node: '>=18'} + '@xhmikosr/decompress-targz@9.0.1': + resolution: {integrity: sha512-1JXu2b6yrpm5EuBoOzMU57B4qrHXJKWQQ7LlMynNEiz85mEjDciO3ayf//GXaTLLCEKiHjWlU3q3THjgf7uODA==} + engines: {node: '>=20'} - '@xhmikosr/decompress@10.2.0': - resolution: {integrity: sha512-MmDBvu0+GmADyQWHolcZuIWffgfnuTo4xpr2I/Qw5Ox0gt+e1Be7oYqJM4te5ylL6mzlcoicnHVDvP27zft8tg==} - engines: {node: '>=18'} + '@xhmikosr/decompress-unzip@8.1.1': + resolution: {integrity: sha512-/B+Z0qJflGn5UEtmMZ2qeKeXwexOycxaibYhMOyLcRPJriXs4IkoSngVUVZXLYViu9TdHyFWynC6NB4EWBg8cg==} + engines: {node: '>=20'} - '@xhmikosr/downloader@15.2.0': - resolution: {integrity: sha512-lAqbig3uRGTt0sHNIM4vUG9HoM+mRl8K28WuYxyXLCUT6pyzl4Y4i0LZ3jMEsCYZ6zjPZbO9XkG91OSTd4si7g==} - engines: {node: '>=18'} + '@xhmikosr/decompress@11.1.3': + resolution: {integrity: sha512-NiyhJq6z7ERsYghcnXZUI6ooDXgZtoB+G9eUsYhfSM4VLp2rKx9UxhKI1NEf1PqosrNPxG3bnSsr2UBVbNurlg==} + engines: {node: '>=20'} - '@xhmikosr/os-filter-obj@3.0.0': - resolution: {integrity: sha512-siPY6BD5dQ2SZPl3I0OZBHL27ZqZvLEosObsZRQ1NUB8qcxegwt0T9eKtV96JMFQpIz1elhkzqOg4c/Ri6Dp9A==} - engines: {node: ^14.14.0 || >=16.0.0} + '@xhmikosr/downloader@16.1.3': + resolution: {integrity: sha512-jtQZZbO3xsRmDDeEz7m23ydgbW9YpVnOALNygmKNvjjuTuQwtcXGVJ9xWv4x7niElvziJrak+WUBmWYcFosolA==} + engines: {node: '>=20'} - JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true + '@xhmikosr/os-filter-obj@4.1.0': + resolution: {integrity: sha512-y5ArHvQ7BVule/+L9yE2nYMhceiJhgsqo58lOfnisQ7bg+Kjfmkgr7JBuVFiTkl+ErdShpp829QstZQyLugl8g==} + engines: {node: '>=20'} abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} @@ -3294,8 +3229,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} engines: {node: '>=0.4.0'} hasBin: true @@ -3317,6 +3252,9 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} @@ -3342,10 +3280,6 @@ packages: resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==} engines: {node: '>=12'} - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -3362,9 +3296,6 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - arch@3.0.0: - resolution: {integrity: sha512-AmIAC+Wtm2AU8lGfTtHsw0Y9Qtftx2YXEEtiBP10xFUtMOA+sHHx6OAddyL52mUKh1vsXQ6/w1mVDptZCyUt4Q==} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -3372,45 +3303,6 @@ packages: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} - aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} - - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} - - array-ify@1.0.0: - resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - - array-includes@3.1.9: - resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlastindex@1.2.6: - resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} - asn1@0.2.3: resolution: {integrity: sha512-6i37w/+EhlWlGUJff3T/Q8u1RGmP5wgbiwYnOnbOqvtrPxT63/sYFyP9RcpxtxGymtfA075IvmOnL7ycNOWl3w==} @@ -3418,19 +3310,12 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - ast-types@0.13.4: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} - ast-v8-to-istanbul@0.3.3: - resolution: {integrity: sha512-MuXMrSLVVoA6sYN/6Hke18vMzrT4TZNbZIj/hvh0fnYFpO+/kFXcLIaiPwXXWaQUPg4yJD8fj+lfJ7/1EBconw==} - - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} + ast-v8-to-istanbul@1.0.3: + resolution: {integrity: sha512-jCMQ6ZylLPudp0CDfBmQBZUsrh1/8psbmu9ibeVWKuHWD0YrH9YABwlKu5kVEFoT0GCQQW9Z/SxfuEbbkGQCRg==} async@2.6.4: resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} @@ -3441,43 +3326,37 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - atomic-sleep@1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - avvio@9.1.0: resolution: {integrity: sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==} - axe-core@4.10.3: - resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} - engines: {node: '>=4'} - axios@0.21.4: resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} axios@1.11.0: resolution: {integrity: sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==} - axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} - - b4a@1.6.7: - resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + b4a@1.8.1: + resolution: {integrity: sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==} + peerDependencies: + react-native-b4a: '*' + peerDependenciesMeta: + react-native-b4a: + optional: true balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - bare-events@2.6.1: - resolution: {integrity: sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g==} + bare-events@2.8.3: + resolution: {integrity: sha512-HdUm8EMQBLaJvGUdidNNbqpA1kYkwNcb+MYxkxCLAPJGQzlv9J0C24h8V65Z4c5GLd/JEALDvpFCQgpLJqc0zw==} + peerDependencies: + bare-abort-controller: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -3490,20 +3369,17 @@ packages: before-after-hook@4.0.0: resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} - bin-version-check@5.1.0: - resolution: {integrity: sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==} - engines: {node: '>=12'} - - bin-version@6.0.0: - resolution: {integrity: sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==} - engines: {node: '>=12'} - binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + binary-version-check@6.1.0: + resolution: {integrity: sha512-REKdLKmuViV2WrtWXvNSiPX04KbIjfUV3Cy8batUeOg+FtmowavzJorfFhWq95cVJzINnL/44ixP26TrdJZACA==} + engines: {node: '>=18'} + + binary-version@7.1.0: + resolution: {integrity: sha512-Iy//vPc3ANPNlIWd242Npqc8MK0a/i4kVcHDlDA6HNMv5zMxz4ulIFhOSYJVKw/8AbHdHy0CnGYEt1QqSXxPsw==} + engines: {node: '>=18'} blessed@0.1.81: resolution: {integrity: sha512-LoF5gae+hlmfORcG1M5+5XZi4LBmvlXTzwJWzUlPryN/SJdSflZvROM2TwkT0GMpq7oqT48NRd4GS7BiVBc5OQ==} @@ -3513,28 +3389,23 @@ packages: bodec@0.1.0: resolution: {integrity: sha512-Ylo+MAo5BDUq1KA3f3R/MFhh+g8cnHmo8bz3YPGhI1znrMaf77ol1sfvYJzsw3nTE+Y2GryfDxBaR+AqpAkEHQ==} - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + brace-expansion@1.1.15: + resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==} brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@2.1.1: + resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.25.3: - resolution: {integrity: sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - bson@6.10.4: resolution: {integrity: sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==} engines: {node: '>=16.20.1'} - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} @@ -3551,56 +3422,33 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - builtin-modules@5.0.0: - resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} - engines: {node: '>=18.20'} - - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} + byte-counter@0.1.0: + resolution: {integrity: sha512-jheRLVMeUKrDBjVw2O5+k4EvR4t9wtxHL+bo/LxfkxsVeuGMy3a5SEGgXdAFA4FSzTrU8rQXQIrsZ3oBq5a0pQ==} + engines: {node: '>=20'} cacheable-lookup@7.0.0: resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} engines: {node: '>=14.16'} - cacheable-request@10.2.14: - resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} - engines: {node: '>=14.16'} - - cachedir@2.3.0: - resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==} - engines: {node: '>=6'} + cacheable-request@13.0.19: + resolution: {integrity: sha512-SVXGH037+Mo1aIMO5B2UcleR43FGjFdN+M8JObSyEoQ2Mn4CODRWx28gN5jiTF0n5ItsgtIZfyargMNs8GX4kg==} + engines: {node: '>=18'} call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001737: - resolution: {integrity: sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==} - caniuse-lite@1.0.30001759: resolution: {integrity: sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==} - chai@5.2.1: - resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==} + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - chalk@3.0.0: resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} engines: {node: '>=8'} @@ -3613,56 +3461,29 @@ packages: resolution: {integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - change-case@5.4.4: - resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} - chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - chardet@2.1.0: - resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} + chardet@2.1.1: + resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} charm@0.1.2: resolution: {integrity: sha512-syedaZ9cPe7r3hoQA9twWYKu5AIyCswN5+szkmPBe9ccdLrj4bYaCnLVPTLd2kgVRc7+zoX4tyPgRnFKCj5YjQ==} - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} - chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - ci-info@4.3.0: - resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} - engines: {node: '>=8'} - class-transformer@0.5.1: resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} class-validator@0.14.2: resolution: {integrity: sha512-3kMVRF2io8N8pY1IFIXlho9r8IPUUIfHe2hYVtiebvAzU2XeQFXTv+XI4WX+TnXmtwXMDcjngcpkiPM0O9PvLw==} - clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} - - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - cli-tableau@2.0.1: resolution: {integrity: sha512-he+WTicka9cl0Fg/y+YyxcN6/bfQ/1O3QmgxRXDhABKqLzvoOSM4fMzp39uMyLBulAFuywD2N7UaoQE7WaADxQ==} engines: {node: '>=8.10.0'} - cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} - cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} @@ -3675,28 +3496,14 @@ packages: peerDependencies: typanion: '*' - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - cluster-key-slot@1.1.2: resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} engines: {node: '>=0.10.0'} - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -3721,14 +3528,6 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} - commitizen@4.3.1: - resolution: {integrity: sha512-gwAPAVTy/j5YcOOebcCRIijn+mSjWJC+IYKivTu6aG8Ei/scoXgfsMRnuAk6b0GRste2J4NGxVdMN3ZpfNaVaw==} - engines: {node: '>= 12'} - hasBin: true - - compare-func@2.0.0: - resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -3740,46 +3539,25 @@ packages: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} - conventional-changelog-angular@7.0.0: - resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} - engines: {node: '>=16'} + content-disposition@2.0.1: + resolution: {integrity: sha512-e+H0ZXHSWYrENhQzw1LPuP4oF5MzVKmDU6d3hxlvaPEYLLg62MxtQNPRx4SYSuYJSBUgnQIG4HIN2tEtNv7Dog==} + engines: {node: '>=18'} - conventional-changelog-conventionalcommits@7.0.2: - resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} - engines: {node: '>=16'} + content-type@2.0.0: + resolution: {integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==} + engines: {node: '>=18'} - conventional-commit-types@3.0.0: - resolution: {integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==} + convert-hrtime@5.0.0: + resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==} + engines: {node: '>=12'} - conventional-commits-parser@5.0.0: - resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} - engines: {node: '>=16'} - hasBin: true + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} cookie@1.0.2: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} - core-js-compat@3.45.1: - resolution: {integrity: sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==} - - cosmiconfig-typescript-loader@6.1.0: - resolution: {integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==} - engines: {node: '>=v18'} - peerDependencies: - '@types/node': '*' - cosmiconfig: '>=9' - typescript: '>=5' - - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - croner@4.1.97: resolution: {integrity: sha512-/f6gpQuxDaqXu+1kwQYSckUglPaOrHdbIlBAu0YuW8/Cdb45XwXYNUBXg3r/9Mo6n540Kn/smKcZWko5x99KrQ==} @@ -3797,33 +3575,10 @@ packages: culvert@0.1.2: resolution: {integrity: sha512-yi1x3EAWKjQTreYWeSd98431AV+IEE0qoDyOoaHJ7KJ21gv6HtBXHVLX74opVSGqcR8/AbjJBHAHpcOy2bj5Gg==} - cz-conventional-changelog@3.3.0: - resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} - engines: {node: '>= 10'} - - damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - - dargs@8.1.0: - resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} - engines: {node: '>=12'} - data-uri-to-buffer@6.0.2: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - date-fns@4.1.0: resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} @@ -3859,39 +3614,22 @@ packages: supports-color: optional: true - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - - dedent@0.7.0: - resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} + decompress-response@10.0.0: + resolution: {integrity: sha512-oj7KWToJuuxlPr7VV0vabvxEIiqNMo+q0NueIiL3XhtwC6FVOX7Hr1c0C4eD0bmf7Zr+S/dSf2xvkH3Ad6sU3Q==} + engines: {node: '>=20'} deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - - defaults@2.0.2: - resolution: {integrity: sha512-cuIw0PImdp76AOfgkjbW4VhQODRmNNcKR73vdCH5cLd/ifj7aamfoXvYgfGkEAjNJZ3ozMIy9Gu2LutUkGEPbA==} - engines: {node: '>=16'} - - defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - degenerator@5.0.1: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} @@ -3912,14 +3650,6 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - detect-file@1.0.0: - resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} - engines: {node: '>=0.10.0'} - - detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -3933,14 +3663,6 @@ packages: discord-api-types@0.38.22: resolution: {integrity: sha512-2gnYrgXN3yTlv2cKBISI/A8btZwsSZLwKpIQXeI1cS8a7W7wP3sFVQOm3mPuuinTD8jJCKGPGNH399zE7Un1kA==} - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} - dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -3951,8 +3673,13 @@ packages: ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - electron-to-chromium@1.5.209: - resolution: {integrity: sha512-Xoz0uMrim9ZETCQt8UgM5FxQF9+imA7PBpokoGcZloA1uw2LeHzTlip5cb5KOAsXZLjh/moN2vReN3ZjJmjI9A==} + emnapi@1.10.0: + resolution: {integrity: sha512-swoyZjupDvLoe/KC3HZ4SY1JUN+tviT6eOZ3Px28TZAYdBHtRIiMWWrIUUH+2/9CYY4fNTID1YhYZ+kdFHszHg==} + peerDependencies: + node-addon-api: '>= 6.1.0' + peerDependenciesMeta: + node-addon-api: + optional: true emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -3963,25 +3690,14 @@ packages: endian-toggle@0.0.0: resolution: {integrity: sha512-ShfqhXeHRE4TmggSlHXG8CMGIcsOsqDw/GcoPcosToE59Rm9e4aXaMhEQf2kPBsBRrKem1bbOAv5gOKnkliMFQ==} - enhanced-resolve@5.18.3: - resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} + enhanced-resolve@5.22.1: + resolution: {integrity: sha512-6QEuw3zoX1SJQc7b87aBXke/no+mG2bTBgw29gWMQonLmpEkWoCAVkl+M49e48AZlWzxiDzDZzYdp6kobcyLww==} engines: {node: '>=10.13.0'} enquirer@2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - - es-abstract@1.24.0: - resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} - engines: {node: '>= 0.4'} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -3990,12 +3706,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-iterator-helpers@1.2.1: - resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} - engines: {node: '>= 0.4'} - - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} @@ -4005,33 +3717,17 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es-shim-unscopables@1.1.0: - resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} - - es-toolkit@1.39.10: - resolution: {integrity: sha512-E0iGnTtbDhkeczB0T+mxmoVlT4YNweEKBLq7oaU4p11mecdsZpNWOglI4895Vh4usbQ+LsJiuLuI2L0Vdmfm2w==} + es-toolkit@1.47.0: + resolution: {integrity: sha512-n1GuoD0WEQZMBk5tttoZSqwgyLx01oqa5XsBmCHwPyNe1S9jPBEmtR2pSgp2kJuWE3ciFZ6yRHmY4pM4C3OOkw==} - esbuild@0.25.6: - resolution: {integrity: sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==} + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} engines: {node: '>=18'} hasBin: true - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -4041,97 +3737,10 @@ packages: engines: {node: '>=6.0'} hasBin: true - eslint-config-next@15.5.2: - resolution: {integrity: sha512-3hPZghsLupMxxZ2ggjIIrat/bPniM2yRpsVPVM40rp8ZMzKWOJp2CGWn7+EzoV2ddkUr5fxNfHpF+wU1hGt/3g==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-import-resolver-typescript@3.10.1: - resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - eslint-plugin-import-x: '*' - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true - - eslint-module-utils@2.12.1: - resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-import@2.32.0: - resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-jsx-a11y@6.10.2: - resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - - eslint-plugin-license-header@0.8.0: - resolution: {integrity: sha512-khTCz6G3JdoQfwrtY4XKl98KW4PpnWUKuFx8v+twIRhJADEyYglMDC0td8It75C1MZ88gcvMusWuUlJsos7gYg==} - - eslint-plugin-react-hooks@5.2.0: - resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - - eslint-plugin-react@7.37.5: - resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} - engines: {node: '>=4'} + eslint-plugin-license-header@0.9.0: + resolution: {integrity: sha512-Qd7cCljVC0h+uJjcIuYjpRFrdzwqBBDCi5U0ocr6Bt/5t3zuBkZSa1Igc4lBLEVBDoUUqIcok/UUNAAu6CtwmQ==} peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - - eslint-plugin-unicorn@60.0.0: - resolution: {integrity: sha512-QUzTefvP8stfSXsqKQ+vBQSEsXIlAiCduS/V1Em+FKgL9c21U/IIm20/e3MFy1jyCf14tHAhqC1sX8OTy6VUCg==} - engines: {node: ^20.10.0 || >=21.0.0} - peerDependencies: - eslint: '>=9.29.0' - - eslint-plugin-unused-imports@4.2.0: - resolution: {integrity: sha512-hLbJ2/wnjKq4kGA9AUaExVFIbNzyxYdVo49QZmKCnhk5pc9wcYRbfgLHvWJ8tnsdcseGhoUAddm9gn/lt+d74w==} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 - eslint: ^9.0.0 || ^8.0.0 - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true + eslint: ^9 || ^10 eslint-scope@8.4.0: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} @@ -4164,8 +3773,8 @@ packages: engines: {node: '>=4'} hasBin: true - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -4196,20 +3805,23 @@ packages: eventemitter2@6.4.9: resolution: {integrity: sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==} + events-universal@1.0.1: + resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} + events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} - expand-tilde@2.0.2: - resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} - engines: {node: '>=0.10.0'} + execa@9.6.1: + resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} + engines: {node: ^18.19.0 || >=20.5.0} - expect-type@1.2.2: - resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} ext-list@2.2.2: @@ -4227,9 +3839,6 @@ packages: extrareqp2@1.0.0: resolution: {integrity: sha512-Gum0g1QYb6wpPJCVypWP3bbIuaibcFiJcpuPM10YSXp/tzqi84x9PJageob+eN4xVRIOto4wjSGNLyMD54D2xA==} - fast-content-type-parse@3.0.0: - resolution: {integrity: sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==} - fast-decode-uri-component@1.0.1: resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} @@ -4239,10 +3848,6 @@ packages: fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} - fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -4269,9 +3874,18 @@ packages: fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} + + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} + fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-wrap-ansi@0.2.2: + resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} + fastify-plugin@5.0.1: resolution: {integrity: sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ==} @@ -4287,8 +3901,9 @@ packages: fclone@1.0.11: resolution: {integrity: sha512-GDqVQezKzRABdeqflsgMr7ktzgF9CyS+p2oe0jJqUY6izSSbhPIQJDpoU4PtGcD7VPM9xh/dVrTu6z1nwgmEGw==} - fdir@6.4.6: - resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -4298,29 +3913,32 @@ packages: fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} - figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} + fflate@0.8.3: + resolution: {integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==} + + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} - file-type@20.5.0: - resolution: {integrity: sha512-BfHZtG/l9iMm4Ecianu7P8HRD2tBHLtjXinm4X62XBOYzi7CYA7jyqfJzOvXHqzVrVPYqBo2/GvbARMaaJkKVg==} - engines: {node: '>=18'} - file-type@21.0.0: resolution: {integrity: sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==} engines: {node: '>=20'} - filename-reserved-regex@3.0.0: - resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + file-type@21.3.4: + resolution: {integrity: sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==} + engines: {node: '>=20'} - filenamify@6.0.0: - resolution: {integrity: sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ==} - engines: {node: '>=16'} + filename-reserved-regex@4.0.0: + resolution: {integrity: sha512-9ZT504KxEQDamsOogZImAWGEN24R1uFAxU3ZS4AZqn2ooidmN68Olh7n4/RcA4lLatZztjA0ZSuxeLHVoCc8JA==} + engines: {node: '>=20'} + + filenamify@7.0.1: + resolution: {integrity: sha512-9b4rfnaX2MkJCgp27wypV6DAMvj4WMOSgJ+TdcpJIO84Dql+Cv6iJjdG4XDTLubOWkfNiBv3joO59sau/TXw+Q==} + engines: {node: '>=20'} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -4330,38 +3948,20 @@ packages: resolution: {integrity: sha512-eRoFWQw+Yv2tuYlK2pjFS2jGXSxSppAs3hSQjfxVKxM5amECzIgYYc1FEI8ZmhSh/Ig+FrKEz43NLRKJjYCZVg==} engines: {node: '>=20'} - find-node-modules@2.1.3: - resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==} - - find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - - find-up-simple@1.0.1: - resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} - engines: {node: '>=18'} - find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - find-up@7.0.0: - resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + find-versions@6.0.0: + resolution: {integrity: sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==} engines: {node: '>=18'} - find-versions@5.1.0: - resolution: {integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==} - engines: {node: '>=12'} - - findup-sync@4.0.0: - resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==} - engines: {node: '>= 8'} - flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} follow-redirects@1.15.11: resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} @@ -4372,17 +3972,13 @@ packages: debug: optional: true - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - form-data-encoder@2.1.4: - resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} - engines: {node: '>= 14.17'} + form-data-encoder@4.1.0: + resolution: {integrity: sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw==} + engines: {node: '>= 18'} form-data@4.0.4: resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} @@ -4402,13 +3998,6 @@ packages: react-dom: optional: true - fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -4417,21 +4006,14 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + function-timeout@1.0.2: + resolution: {integrity: sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==} + engines: {node: '>=18'} fuse.js@7.1.0: resolution: {integrity: sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==} engines: {node: '>=10'} - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -4444,16 +4026,13 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} - get-tsconfig@4.10.1: - resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} get-uri@6.0.5: resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} @@ -4467,12 +4046,6 @@ packages: js-git: optional: true - git-raw-commits@4.0.0: - resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} - engines: {node: '>=16'} - deprecated: This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead. - hasBin: true - git-sha1@0.1.2: resolution: {integrity: sha512-2e/nZezdVlyCopOCYHeW0onkbZg7xP1Ad6pndPy1rCygeRykefUS6r7oA5cJRGEFvseiaz5a/qUHFVX1dd6Isg==} @@ -4484,83 +4057,36 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - hasBin: true - glob@11.0.3: resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==} engines: {node: 20 || >=22} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - - global-directory@4.0.1: - resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} - engines: {node: '>=18'} - - global-modules@1.0.0: - resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} - engines: {node: '>=0.10.0'} - - global-prefix@1.0.2: - resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} - engines: {node: '>=0.10.0'} - globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@16.3.0: - resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} - engines: {node: '>=18'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} - got@13.0.0: - resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==} - engines: {node: '>=16'} + got@14.6.6: + resolution: {integrity: sha512-QLV1qeYSo5l13mQzWgP/y0LbMr5Plr5fJilgAIwgnwseproEbtNym8xpLsDzeZ6MWXgNE6kdWGBjdh3zT/Qerg==} + engines: {node: '>=20'} graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} hasBin: true - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -4573,10 +4099,6 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - homedir-polyfill@1.0.3: - resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} - engines: {node: '>=0.10.0'} - html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -4599,9 +4121,13 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} i18next-fs-backend@2.6.0: resolution: {integrity: sha512-3ZlhNoF9yxnM8pa8bWp5120/Ob6t4lVl1l/tbLmkml/ei3ud8IWySCHt2lrY5xWRlSU5D9IV2sm5bEbGuTqwTw==} @@ -4613,8 +4139,8 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} ieee754@1.2.1: @@ -4624,10 +4150,6 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} - engines: {node: '>= 4'} - immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} @@ -4635,46 +4157,23 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} - import-meta-resolve@4.1.0: - resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} - imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - indent-string@5.0.0: - resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} - engines: {node: '>=12'} - - inflight@1.0.6: - resolution: {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. - inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - ini@4.1.1: - resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - inquirer@10.2.2: resolution: {integrity: sha512-tyao/4Vo36XnUItZ7DnUXX4f1jVao2mSrleV/5IPtW/XAEA26hRVsbc68nuTEKWcr5vMP/1mVoT2O7u8H4v1Vg==} engines: {node: '>=18'} - inquirer@8.2.5: - resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} - engines: {node: '>=12.0.0'} - inspect-with-kind@1.0.5: resolution: {integrity: sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==} - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - ioredis@5.7.0: resolution: {integrity: sha512-NUcA93i1lukyXU+riqEyPtSEkyFq8tX90uL659J+qpCZ3rEdViB/APC58oAhIh3+bJln2hzdlZbBZsGNrlsR8g==} engines: {node: '>=12.22.0'} @@ -4687,40 +4186,10 @@ packages: resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} engines: {node: '>= 10'} - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - - is-builtin-module@5.0.0: - resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==} - engines: {node: '>=18.20'} - - is-bun-module@2.0.0: - resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - is-class@0.0.9: resolution: {integrity: sha512-kUfRnejcRC9YLgblxoJ76dp9gZ3vMKTrDS5I6z2UVMOsHHSImNKCJocjQTkZr38PwiSZ9LVklaHEENaVYeFTXg==} @@ -4728,191 +4197,94 @@ packages: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} - engines: {node: '>= 0.4'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} + isexe@4.0.0: + resolution: {integrity: sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==} + engines: {node: '>=20'} - is-text-path@2.0.0: - resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} - is-utf8@0.2.1: - resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} + engines: {node: '>=8'} - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} + iterare@1.2.1: + resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} + engines: {node: '>=6'} - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} + jackspeak@4.1.1: + resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} + engines: {node: 20 || >=22} - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - - istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} - - istanbul-lib-source-maps@5.0.6: - resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} - engines: {node: '>=10'} - - istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} - engines: {node: '>=8'} - - iterare@1.2.1: - resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} - engines: {node: '>=6'} - - iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jackspeak@4.1.1: - resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} - engines: {node: 20 || >=22} - - jiti@2.5.1: - resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} - hasBin: true - - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true js-git@0.7.8: resolution: {integrity: sha512-+E5ZH/HeRnoc/LW0AmAyhU+mNcWBzAKE+30+IDMLSLbbK+Tdt02AdkOKq9u15rlJsDEGFqtgckc8ZM59LhhiUA==} - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-tokens@10.0.0: + resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} + js-yaml@4.2.0: + resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} hasBin: true json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-schema-ref-resolver@2.0.1: resolution: {integrity: sha512-HG0SIB9X4J8bwbxCbnd5FfPEbcXAJYTi1pBJeP/QPON+w8ovSME8iRG+ElHNxZNX2Qh6eYn1GdzJFS4cDFfx0Q==} @@ -4928,25 +4300,13 @@ packages: json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - - jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} + json-with-bigint@3.5.8: + resolution: {integrity: sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw==} jsonwebtoken@9.0.2: resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} engines: {node: '>=12', npm: '>=6'} - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - jwa@1.4.2: resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} @@ -4960,17 +4320,13 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@5.6.0: + resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==} + kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - language-subtag-registry@0.3.23: - resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} - - language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} - levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -4984,79 +4340,76 @@ packages: light-my-request@6.6.0: resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==} - lightningcss-android-arm64@1.30.2: - resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] - lightningcss-darwin-arm64@1.30.2: - resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.30.2: - resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.30.2: - resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.30.2: - resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.30.2: - resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-arm64-musl@1.30.2: - resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-x64-gnu@1.30.2: - resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-linux-x64-musl@1.30.2: - resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-win32-arm64-msvc@1.30.2: - resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.30.2: - resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.30.2: - resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} engines: {node: '>= 12.0.0'} - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - load-esm@1.0.2: resolution: {integrity: sha512-nVAvWk/jeyrWyXEAs84mpQCYccxRqgKY4OznLuJhJCa0XsPSfdOIr2zvBZEj3IHEHbX97jjscKRRV539bW0Gpw==} engines: {node: '>=13.2.0'} @@ -5068,13 +4421,6 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} @@ -5099,65 +4445,26 @@ packages: lodash.isstring@4.0.1: resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - - lodash.map@4.6.0: - resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} - lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.mergewith@4.6.2: - resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} - lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} lodash.reduce@4.6.0: resolution: {integrity: sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==} - lodash.snakecase@4.1.1: - resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - - lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - - lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - - lodash.upperfirst@4.3.1: - resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} - lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - loglevel@1.9.2: resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} engines: {node: '>= 0.6.0'} - longest@2.0.1: - resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==} - engines: {node: '>=0.10.0'} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - loupe@3.1.4: - resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==} - lowercase-keys@3.0.0: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.1.0: resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} engines: {node: 20 || >=22} @@ -5177,14 +4484,15 @@ packages: macaddress@0.5.3: resolution: {integrity: sha512-vGBKTA+jwM4KgjGZ+S/8/Mkj9rWzePyGY6jManXPGhiWu63RYwW8dKPyk5koP+8qNVhPhHgFa1y/MJ4wrjsNrg==} - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magicast@0.3.5: - resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + magicast@0.5.3: + resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==} + + make-asynchronous@1.1.0: + resolution: {integrity: sha512-ayF7iT+44LXdxJLTrTd3TLQpFDDvPCBxXxbv+pMUSuHA5Q8zyAfwkRP6aHHwNVFBUFWtxAHqwNJxF8vMZLAbVg==} + engines: {node: '>=18'} make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} @@ -5197,10 +4505,6 @@ packages: memory-pager@1.5.0: resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} - meow@12.1.1: - resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} - engines: {node: '>=16.10'} - merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -5208,9 +4512,6 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - merge@2.1.1: - resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} - micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -5232,22 +4533,14 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} mimic-response@4.0.0: resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - minecraft-data@3.93.0: resolution: {integrity: sha512-AaQ+mdcHb58uDqcoK380lRh83r3IpkGREdLi577BI51t2kru+mTVDO4IFDJzDm3e9N8C7T4KQ1qWl0id98KbtA==} @@ -5262,15 +4555,16 @@ packages: resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} engines: {node: 20 || >=22} - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minimist@1.2.7: - resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} + engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -5369,18 +4663,18 @@ packages: resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} + mute-stream@3.0.0: + resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} + engines: {node: ^20.17.0 || >=22.9.0} nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - napi-postinstall@0.3.3: - resolution: {integrity: sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true natural-compare@1.4.0: @@ -5433,9 +4727,6 @@ packages: encoding: optional: true - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - node-rsa@0.4.2: resolution: {integrity: sha512-Bvso6Zi9LY4otIZefYrscsUpo2mUpiAVIEmSZV2q41sP8tHZoert3Yu6zv4f/RXJqMNZQKCtnhDugIuCma23YA==} @@ -5443,92 +4734,82 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - normalize-url@8.0.2: - resolution: {integrity: sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw==} + normalize-url@8.1.1: + resolution: {integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==} engines: {node: '>=14.16'} - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - object.entries@1.1.9: - resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} - object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} on-exit-leak-free@2.1.2: resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} engines: {node: '>=14.0.0'} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} + oxfmt@0.53.0: + resolution: {integrity: sha512-9cB5glS3Ip6NMuZ+6NYTao9FCWkDhRtPYCtR3QBu/NxHoFbgzzTvi41N4jxz/GqGfuLKspui1qb/LlSu2IbMcw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + svelte: ^5.0.0 + vite-plus: '*' + peerDependenciesMeta: + svelte: + optional: true + vite-plus: + optional: true + + oxlint@1.68.0: + resolution: {integrity: sha512-dXcbq+xsmLrMy6T8d0euf3IYUfLmjHIE11pOxiUSi5LHkFZaYPv568R6sEjcavVpUxoaQe66UBuK4HEi74NxpA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + oxlint-tsgolint: '>=0.22.1' + vite-plus: '*' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + vite-plus: + optional: true - p-cancelable@3.0.0: - resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} - engines: {node: '>=12.20'} + p-cancelable@4.0.1: + resolution: {integrity: sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==} + engines: {node: '>=14.16'} + + p-event@6.0.1: + resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} + engines: {node: '>=16.17'} p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} pac-proxy-agent@7.2.0: resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} @@ -5551,37 +4832,25 @@ packages: parenthesis@3.1.8: resolution: {integrity: sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==} - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - parse-passwd@1.0.0: - resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} - engines: {node: '>=0.10.0'} + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - path-scurry@2.0.0: resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} engines: {node: 20 || >=22} @@ -5593,22 +4862,18 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.1: - resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} - engines: {node: '>= 14.16'} - pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} pidusage@2.0.21: @@ -5632,10 +4897,6 @@ packages: piscina@4.9.2: resolution: {integrity: sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ==} - pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - pm2-axon-rpc@0.7.1: resolution: {integrity: sha512-FbLvW60w+vEyvMjP/xom2UPhUN/2bVpdtLfKJeYM3gwzYhoTEEChCOICfFzxkxuoEleOlnpjie+n1nue91bDQw==} engines: {node: '>=5'} @@ -5659,22 +4920,22 @@ packages: engines: {node: '>=16.0.0'} hasBin: true - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + pretty-ms@9.3.0: + resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} + engines: {node: '>=18'} + prismarine-auth@2.7.0: resolution: {integrity: sha512-L8wTF6sdtnN6hViPNy+Nx39a8iQBwR5iO92AWCiym5cSXp/92pmnuwnTdcmNDWyqq6zY4hbibVGYhgLA1Ox8sQ==} @@ -5715,9 +4976,6 @@ packages: promptly@2.2.0: resolution: {integrity: sha512-aC9j+BZsRSSzEsXBNBwDnAxujdx19HycZoKgRgzWnS8eOHg1asuf9heuLprfbe739zY3IdUQx+Egv6Jn135WHA==} - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - protodef-validator@1.4.0: resolution: {integrity: sha512-2y2coBolqCEuk5Kc3QwO7ThR+/7TZiOit4FrpAgl+vFMvq8w76nDhh09z08e2NQOdrgPLsN2yzXsvRvtADgUZQ==} hasBin: true @@ -5759,9 +5017,6 @@ packages: peerDependencies: react: ^19.2.1 - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -5800,10 +5055,6 @@ packages: resolution: {integrity: sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==} engines: {node: '>=0.8'} - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - readable-stream@4.7.0: resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5827,26 +5078,6 @@ packages: reflect-metadata@0.2.2: resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - - regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true - - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} - - regjsparser@0.12.0: - resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} - hasBin: true - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -5862,37 +5093,18 @@ packages: resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - resolve-dir@1.0.1: - resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} - engines: {node: '>=0.10.0'} - resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.10: resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} engines: {node: '>= 0.4'} hasBin: true - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - - responselike@3.0.0: - resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} - engines: {node: '>=14.16'} - - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + responselike@4.0.2: + resolution: {integrity: sha512-cGk8IbWEAnaCpdAt1BHzJ3Ahz5ewDJa0KseTsE3qIRMJ3C698W8psM7byCeWVpd/Ha7FUYzuRVzXoKoM6nRUbA==} + engines: {node: '>=20'} ret@0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} @@ -5909,20 +5121,11 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@4.45.1: - resolution: {integrity: sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - rollup@4.49.0: - resolution: {integrity: sha512-3IVq0cGJ6H7fKXXEdVt+RcYvRCt8beYY9K1760wGQwSAHZcS9eot1zDG5axUbcp/kWRi5zKIIDX8MoKv/TzvZA==} + rollup@4.61.0: + resolution: {integrity: sha512-T9mWdbWfQtp0B5lv/HX+wrhYsmXRlcWnXXmJbXqKJhlRaoS6KMhq0gpyzW4UJfclcxrEdLnTgjT2NjruLONu0g==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - run-async@3.0.0: resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} engines: {node: '>=0.12.0'} @@ -5936,21 +5139,9 @@ packages: rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} - safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - safe-regex2@5.0.0: resolution: {integrity: sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw==} @@ -5982,10 +5173,6 @@ packages: resolution: {integrity: sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==} engines: {node: '>=12'} - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} @@ -6001,21 +5188,14 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.1: + resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==} + engines: {node: '>=10'} + hasBin: true + set-cookie-parser@2.7.1: resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -6034,22 +5214,6 @@ packages: shimmer@1.2.1: resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - sift@17.1.3: resolution: {integrity: sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==} @@ -6063,8 +5227,8 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - sirv@3.0.1: - resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} engines: {node: '>=18'} skia-canvas@3.0.8: @@ -6122,9 +5286,6 @@ packages: sprintf-js@1.1.2: resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==} - stable-hash@0.0.5: - resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} - stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -6139,15 +5300,11 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - std-env@3.9.0: - resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} - stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} - - streamx@2.22.1: - resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} + streamx@2.26.0: + resolution: {integrity: sha512-VvNG1K72Po/xwJzxZFnZ++Tbrv4lwSptsbkFuzXCJAYZvCK5nnxsvXU6ajqkv7chyiI1Y0YXq2Jh8Iy8Y7NF/A==} string-split-by@1.0.0: resolution: {integrity: sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==} @@ -6160,29 +5317,6 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string.prototype.includes@2.0.1: - resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} - engines: {node: '>= 0.4'} - - string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - engines: {node: '>= 0.4'} - - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -6194,36 +5328,29 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - - strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - strip-dirs@3.0.0: resolution: {integrity: sha512-I0sdgcFTfKQlUPZyAqPJmSG3HLO9rWDFnxonnIbskYNM3DwFOeTNB5KzVq3dA1GdRAc/25b5Y7UO2TQfKWw4aQ==} - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - - strip-indent@4.0.0: - resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strip-literal@3.0.0: - resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} - strtok3@10.3.4: resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==} engines: {node: '>=18'} + strtok3@10.3.5: + resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} + engines: {node: '>=18'} + styled-jsx@5.1.6: resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} engines: {node: '>= 12.0.0'} @@ -6237,9 +5364,9 @@ packages: babel-plugin-macros: optional: true - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + super-regex@1.1.0: + resolution: {integrity: sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==} + engines: {node: '>=18'} supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} @@ -6252,35 +5379,31 @@ packages: swagger-ui-dist@5.21.0: resolution: {integrity: sha512-E0K3AB6HvQd8yQNSMR7eE5bk+323AUxjtCz/4ZNKiahOlPhPJxqn3UPIGs00cyY/dhrTDJ61L7C/a8u6zhGrZg==} + system-architecture@1.0.0: + resolution: {integrity: sha512-0OJWD12D7XX3KUg1DYkMaTTjSTo2k/mhIYI3HlBlceXSMcJhW/1qO735fPKS5prcyjvn57Ub151vvASYXpQrEw==} + engines: {node: '>=18'} + systeminformation@5.27.8: resolution: {integrity: sha512-d3Z0gaQO1MlUxzDUKsmXz5y4TOBCMZ8IyijzaYOykV3AcNOTQ7mT+tpndUOXYNSxzLK3la8G32xiUFvZ0/s6PA==} engines: {node: '>=8.0.0'} os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] hasBin: true - tailwind-merge@3.4.0: - resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==} + tailwind-merge@3.6.0: + resolution: {integrity: sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==} - tailwindcss@4.1.17: - resolution: {integrity: sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==} + tailwindcss@4.3.0: + resolution: {integrity: sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==} - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - test-exclude@7.0.1: - resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} - engines: {node: '>=18'} - - text-decoder@1.2.3: - resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} - - text-extensions@2.4.0: - resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} - engines: {node: '>=8'} + text-decoder@1.2.7: + resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} thread-stream@3.1.0: resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} @@ -6288,6 +5411,10 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + time-span@5.1.0: + resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==} + engines: {node: '>=12'} + tiny-discord@https://codeload.github.com/timotejroiko/tiny-discord/tar.gz/f6d020085ea88e33ebaf6ce323930deffe74fb0d: resolution: {tarball: https://codeload.github.com/timotejroiko/tiny-discord/tar.gz/f6d020085ea88e33ebaf6ce323930deffe74fb0d} version: 0.0.1 @@ -6295,26 +5422,20 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - - tinyexec@1.0.1: - resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} + engines: {node: '>=18'} - tinyglobby@0.2.14: - resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} - tinypool@1.1.1: - resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} - engines: {node: ^18.0.0 || >=20.0.0} + tinypool@2.1.0: + resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} + engines: {node: ^20.0.0 || >=22.0.0} - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} - - tinyspy@4.0.3: - resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} tmp@0.0.33: @@ -6340,6 +5461,10 @@ packages: resolution: {integrity: sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==} engines: {node: '>=14.16'} + token-types@6.1.2: + resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} + engines: {node: '>=14.16'} + totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -6357,47 +5482,14 @@ packages: peerDependencies: typescript: '>=4.8.4' - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tslib@1.9.3: resolution: {integrity: sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==} tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - turbo-darwin-64@2.5.6: - resolution: {integrity: sha512-3C1xEdo4aFwMJAPvtlPqz1Sw/+cddWIOmsalHFMrsqqydcptwBfu26WW2cDm3u93bUzMbBJ8k3zNKFqxJ9ei2A==} - cpu: [x64] - os: [darwin] - - turbo-darwin-arm64@2.5.6: - resolution: {integrity: sha512-LyiG+rD7JhMfYwLqB6k3LZQtYn8CQQUePbpA8mF/hMLPAekXdJo1g0bUPw8RZLwQXUIU/3BU7tXENvhSGz5DPA==} - cpu: [arm64] - os: [darwin] - - turbo-linux-64@2.5.6: - resolution: {integrity: sha512-GOcUTT0xiT/pSnHL4YD6Yr3HreUhU8pUcGqcI2ksIF9b2/r/kRHwGFcsHgpG3+vtZF/kwsP0MV8FTlTObxsYIA==} - cpu: [x64] - os: [linux] - - turbo-linux-arm64@2.5.6: - resolution: {integrity: sha512-10Tm15bruJEA3m0V7iZcnQBpObGBcOgUcO+sY7/2vk1bweW34LMhkWi8svjV9iDF68+KJDThnYDlYE/bc7/zzQ==} - cpu: [arm64] - os: [linux] - - turbo-windows-64@2.5.6: - resolution: {integrity: sha512-FyRsVpgaj76It0ludwZsNN40ytHN+17E4PFJyeliBEbxrGTc5BexlXVpufB7XlAaoaZVxbS6KT8RofLfDRyEPg==} - cpu: [x64] - os: [win32] - - turbo-windows-arm64@2.5.6: - resolution: {integrity: sha512-j/tWu8cMeQ7HPpKri6jvKtyXg9K1gRyhdK4tKrrchH8GNHscPX/F71zax58yYtLRWTiK04zNzPcUJuoS0+v/+Q==} - cpu: [arm64] - os: [win32] - - turbo@2.5.6: - resolution: {integrity: sha512-gxToHmi9oTBNB05UjUsrWf0OyN5ZXtD0apOarC1KIx232Vp3WimRNy3810QzeNSgyD5rsaIDXlxlbnOzlouo+w==} + turbo@2.9.16: + resolution: {integrity: sha512-NqgRQy6j6dPYcdSdv0q1g9QsZg7SWg87RERM8otw/1AtKU2yTFVClOM7cbwKzOonZr/Ek1blTBucw64L9H0Bwg==} hasBin: true tv4@1.3.0: @@ -6418,34 +5510,15 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} typedi@0.10.0: resolution: {integrity: sha512-v3UJF8xm68BBj6AF4oQML3ikrfK2c9EmZUyLOfShpJuItAqVBHWP/KtpGinkSsIiP6EZyyb6Z3NXyW9dgS9X1w==} - typescript-eslint@8.41.0: - resolution: {integrity: sha512-n66rzs5OBXW3SFSnZHr2T685q1i4ODm2nulFJhMZBotaTavsS8TrI3d7bDlRSs9yWo7HmyWrN9qDu14Qv7Y0Dw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - typescript@5.9.2: - resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true @@ -6462,42 +5535,25 @@ packages: resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} engines: {node: '>=18'} - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@7.10.0: - resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} universal-user-agent@7.0.3: resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - - unplugin@2.3.8: - resolution: {integrity: sha512-lkaSIlxceytPyt9yfb1h7L9jDFqwMqvUZeGsKB7Z8QrvAO3xZv2S+xMQQYzxk0AGJHcQhbcvhKEstrMy99jnuQ==} - engines: {node: '>=18.12.0'} - - unrs-resolver@1.11.1: - resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} - - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + unplugin@3.0.0: + resolution: {integrity: sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==} + engines: {node: ^20.19.0 || >=22.12.0} uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -6522,25 +5578,18 @@ packages: '@types/react': optional: true - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid-1345@1.0.2: resolution: {integrity: sha512-bA5zYZui+3nwAc0s3VdGQGBfbVsJLVX7Np7ch2aqcEWFi5lsAEcmO3+lx3djM1npgpZI8KY2FITZ2uYTnYUYyw==} uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true validator@13.15.15: resolution: {integrity: sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==} engines: {node: '>= 0.10'} - vite-node@3.2.4: - resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - vite@7.0.4: resolution: {integrity: sha512-SkaSguuS7nnmV7mfJ8l81JGBFV7Gvzp8IzgE8A8t23+AxuNX61Q5H1Tpz5efduSN7NHC8nQXD3sKQKZAu5mNEA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -6581,26 +5630,39 @@ packages: yaml: optional: true - vitest@3.2.4: - resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vitest@4.1.8: + resolution: {integrity: sha512-flY6ScbCIt9HThs+C5HS7jvGOB560DJtk/Z15IQROTA6zEy49Nh8T/dofWTQL+n3vswqn87sbJNiuqw1SDp5Ig==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.4 - '@vitest/ui': 3.2.4 + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.8 + '@vitest/browser-preview': 4.1.8 + '@vitest/browser-webdriverio': 4.1.8 + '@vitest/coverage-istanbul': 4.1.8 + '@vitest/coverage-v8': 4.1.8 + '@vitest/ui': 4.1.8 happy-dom: '*' jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true - '@types/debug': + '@opentelemetry/api': optional: true '@types/node': optional: true - '@vitest/browser': + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': optional: true '@vitest/ui': optional: true @@ -6613,8 +5675,8 @@ packages: resolution: {integrity: sha512-sfAcO2yeSU0CSPFI/DmZp3FsFE9T+8913nv1xWBOyzODv13fwkn6Vl7HqxGpkr9F608M+8SuFId3s+BlZqfXww==} engines: {node: '>=4.0'} - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-worker@1.5.0: + resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==} webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -6633,26 +5695,6 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.19: - resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} - engines: {node: '>= 0.4'} - - which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -6682,9 +5724,6 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} @@ -6697,23 +5736,11 @@ packages: utf-8-validate: optional: true - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yauzl@3.2.0: - resolution: {integrity: sha512-Ow9nuGZE+qp1u4JIPvg+uCiUr7xGQWdff7JQSk5VGYTAZMDe2q8lxJ10ygv10qmSj031Ty/6FNJpLO4o1Sgc+w==} + yauzl@3.3.2: + resolution: {integrity: sha512-Md9ankxxN23wncAN8s7+Tn3Co52zLUPMtnrLAbVCnfG5d2tKBFfmygYSgXlqFgXObtzIgqkx7aNgDBpso9+4qA==} engines: {node: '>=12'} yggdrasil@1.7.0: @@ -6723,14 +5750,14 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.2.1: - resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} - engines: {node: '>=12.20'} - yoctocolors-cjs@2.1.3: resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + zod@4.1.5: resolution: {integrity: sha512-rcUUZqlLJgBC33IT3PNMgsCq6TzLQEG/Ei/KTCU0PedSWRMAXoOUN+4t/0H+Q8bdnLPdqUYnvboJT0bn/229qg==} @@ -6738,11 +5765,6 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 - '@azure/msal-common@14.16.0': {} '@azure/msal-node@2.16.2': @@ -6751,140 +5773,26 @@ snapshots: jsonwebtoken: 9.0.2 uuid: 8.3.2 - '@babel/code-frame@7.27.1': - dependencies: - '@babel/helper-validator-identifier': 7.27.1 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-string-parser@7.29.7': {} - '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-identifier@7.29.7': {} - '@babel/parser@7.28.0': + '@babel/parser@7.29.7': dependencies: - '@babel/types': 7.28.1 + '@babel/types': 7.29.7 '@babel/runtime@7.27.6': {} - '@babel/types@7.28.1': + '@babel/types@7.29.7': dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 '@bcoe/v8-coverage@1.0.2': {} '@borewit/text-codec@0.1.1': {} - '@commitlint/cli@19.8.1(@types/node@24.3.0)(typescript@5.9.2)': - dependencies: - '@commitlint/format': 19.8.1 - '@commitlint/lint': 19.8.1 - '@commitlint/load': 19.8.1(@types/node@24.3.0)(typescript@5.9.2) - '@commitlint/read': 19.8.1 - '@commitlint/types': 19.8.1 - tinyexec: 1.0.1 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - typescript - - '@commitlint/config-conventional@19.8.1': - dependencies: - '@commitlint/types': 19.8.1 - conventional-changelog-conventionalcommits: 7.0.2 - - '@commitlint/config-validator@19.8.1': - dependencies: - '@commitlint/types': 19.8.1 - ajv: 8.17.1 - - '@commitlint/ensure@19.8.1': - dependencies: - '@commitlint/types': 19.8.1 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - lodash.snakecase: 4.1.1 - lodash.startcase: 4.4.0 - lodash.upperfirst: 4.3.1 - - '@commitlint/execute-rule@19.8.1': {} - - '@commitlint/format@19.8.1': - dependencies: - '@commitlint/types': 19.8.1 - chalk: 5.6.0 - - '@commitlint/is-ignored@19.8.1': - dependencies: - '@commitlint/types': 19.8.1 - semver: 7.7.2 - - '@commitlint/lint@19.8.1': - dependencies: - '@commitlint/is-ignored': 19.8.1 - '@commitlint/parse': 19.8.1 - '@commitlint/rules': 19.8.1 - '@commitlint/types': 19.8.1 - - '@commitlint/load@19.8.1(@types/node@24.3.0)(typescript@5.9.2)': - dependencies: - '@commitlint/config-validator': 19.8.1 - '@commitlint/execute-rule': 19.8.1 - '@commitlint/resolve-extends': 19.8.1 - '@commitlint/types': 19.8.1 - chalk: 5.6.0 - cosmiconfig: 9.0.0(typescript@5.9.2) - cosmiconfig-typescript-loader: 6.1.0(@types/node@24.3.0)(cosmiconfig@9.0.0(typescript@5.9.2))(typescript@5.9.2) - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - lodash.uniq: 4.5.0 - transitivePeerDependencies: - - '@types/node' - - typescript - - '@commitlint/message@19.8.1': {} - - '@commitlint/parse@19.8.1': - dependencies: - '@commitlint/types': 19.8.1 - conventional-changelog-angular: 7.0.0 - conventional-commits-parser: 5.0.0 - - '@commitlint/read@19.8.1': - dependencies: - '@commitlint/top-level': 19.8.1 - '@commitlint/types': 19.8.1 - git-raw-commits: 4.0.0 - minimist: 1.2.8 - tinyexec: 1.0.1 - - '@commitlint/resolve-extends@19.8.1': - dependencies: - '@commitlint/config-validator': 19.8.1 - '@commitlint/types': 19.8.1 - global-directory: 4.0.1 - import-meta-resolve: 4.1.0 - lodash.mergewith: 4.6.2 - resolve-from: 5.0.0 - - '@commitlint/rules@19.8.1': - dependencies: - '@commitlint/ensure': 19.8.1 - '@commitlint/message': 19.8.1 - '@commitlint/to-lines': 19.8.1 - '@commitlint/types': 19.8.1 - - '@commitlint/to-lines@19.8.1': {} - - '@commitlint/top-level@19.8.1': - dependencies: - find-up: 7.0.0 - - '@commitlint/types@19.8.1': - dependencies: - '@types/conventional-commits-parser': 5.0.1 - chalk: 5.6.0 + '@borewit/text-codec@0.2.2': {} '@emnapi/core@1.5.0': dependencies: @@ -6892,11 +5800,6 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.5.0': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.7.1': dependencies: tslib: 2.8.1 @@ -6907,96 +5810,101 @@ snapshots: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.25.6': + '@esbuild/aix-ppc64@0.25.12': optional: true - '@esbuild/android-arm64@0.25.6': + '@esbuild/android-arm64@0.25.12': optional: true - '@esbuild/android-arm@0.25.6': + '@esbuild/android-arm@0.25.12': optional: true - '@esbuild/android-x64@0.25.6': + '@esbuild/android-x64@0.25.12': optional: true - '@esbuild/darwin-arm64@0.25.6': + '@esbuild/darwin-arm64@0.25.12': optional: true - '@esbuild/darwin-x64@0.25.6': + '@esbuild/darwin-x64@0.25.12': optional: true - '@esbuild/freebsd-arm64@0.25.6': + '@esbuild/freebsd-arm64@0.25.12': optional: true - '@esbuild/freebsd-x64@0.25.6': + '@esbuild/freebsd-x64@0.25.12': optional: true - '@esbuild/linux-arm64@0.25.6': + '@esbuild/linux-arm64@0.25.12': optional: true - '@esbuild/linux-arm@0.25.6': + '@esbuild/linux-arm@0.25.12': optional: true - '@esbuild/linux-ia32@0.25.6': + '@esbuild/linux-ia32@0.25.12': optional: true - '@esbuild/linux-loong64@0.25.6': + '@esbuild/linux-loong64@0.25.12': optional: true - '@esbuild/linux-mips64el@0.25.6': + '@esbuild/linux-mips64el@0.25.12': optional: true - '@esbuild/linux-ppc64@0.25.6': + '@esbuild/linux-ppc64@0.25.12': optional: true - '@esbuild/linux-riscv64@0.25.6': + '@esbuild/linux-riscv64@0.25.12': optional: true - '@esbuild/linux-s390x@0.25.6': + '@esbuild/linux-s390x@0.25.12': optional: true - '@esbuild/linux-x64@0.25.6': + '@esbuild/linux-x64@0.25.12': optional: true - '@esbuild/netbsd-arm64@0.25.6': + '@esbuild/netbsd-arm64@0.25.12': optional: true - '@esbuild/netbsd-x64@0.25.6': + '@esbuild/netbsd-x64@0.25.12': optional: true - '@esbuild/openbsd-arm64@0.25.6': + '@esbuild/openbsd-arm64@0.25.12': optional: true - '@esbuild/openbsd-x64@0.25.6': + '@esbuild/openbsd-x64@0.25.12': optional: true - '@esbuild/openharmony-arm64@0.25.6': + '@esbuild/openharmony-arm64@0.25.12': optional: true - '@esbuild/sunos-x64@0.25.6': + '@esbuild/sunos-x64@0.25.12': optional: true - '@esbuild/win32-arm64@0.25.6': + '@esbuild/win32-arm64@0.25.12': optional: true - '@esbuild/win32-ia32@0.25.6': + '@esbuild/win32-ia32@0.25.12': optional: true - '@esbuild/win32-x64@0.25.6': + '@esbuild/win32-x64@0.25.12': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.34.0(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.7.0(eslint@9.34.0(jiti@2.7.0))': + dependencies: + eslint: 9.34.0(jiti@2.7.0) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/eslint-utils@4.9.1(eslint@9.34.0(jiti@2.7.0))': dependencies: - eslint: 9.34.0(jiti@2.6.1) + eslint: 9.34.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.1': {} + '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.21.0': + '@eslint/config-array@0.21.2': dependencies: - '@eslint/object-schema': 2.1.6 - debug: 4.4.1 - minimatch: 3.1.2 + '@eslint/object-schema': 2.1.7 + debug: 4.4.3 + minimatch: 3.1.5 transitivePeerDependencies: - supports-color @@ -7006,23 +5914,23 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.1': + '@eslint/eslintrc@3.3.5': dependencies: - ajv: 6.12.6 - debug: 4.4.1 + ajv: 6.15.0 + debug: 4.4.3 espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 + js-yaml: 4.2.0 + minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color '@eslint/js@9.34.0': {} - '@eslint/object-schema@2.1.6': {} + '@eslint/object-schema@2.1.7': {} '@eslint/plugin-kit@0.3.5': dependencies: @@ -7110,16 +6018,19 @@ snapshots: '@floating-ui/utils@0.2.10': {} - '@humanfs/core@0.19.1': {} + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 - '@humanfs/node@0.16.6': + '@humanfs/node@0.16.8': dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 - '@humanwhocodes/module-importer@1.0.1': {} + '@humanfs/types@0.15.0': {} - '@humanwhocodes/retry@0.3.1': {} + '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/retry@0.4.3': {} @@ -7220,6 +6131,8 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true + '@inquirer/ansi@2.0.7': {} + '@inquirer/checkbox@2.5.0': dependencies: '@inquirer/core': 9.2.1 @@ -7228,47 +6141,45 @@ snapshots: ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.3 - '@inquirer/checkbox@4.2.2(@types/node@24.3.0)': + '@inquirer/checkbox@5.2.1(@types/node@25.9.1)': dependencies: - '@inquirer/core': 10.2.0(@types/node@24.3.0) - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@24.3.0) - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.3 + '@inquirer/ansi': 2.0.7 + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/figures': 2.0.7 + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 '@inquirer/confirm@3.2.0': dependencies: '@inquirer/core': 9.2.1 '@inquirer/type': 1.5.5 - '@inquirer/confirm@5.1.16(@types/node@24.3.0)': + '@inquirer/confirm@6.1.1(@types/node@25.9.1)': dependencies: - '@inquirer/core': 10.2.0(@types/node@24.3.0) - '@inquirer/type': 3.0.8(@types/node@24.3.0) + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 - '@inquirer/core@10.2.0(@types/node@24.3.0)': + '@inquirer/core@11.2.1(@types/node@25.9.1)': dependencies: - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@24.3.0) - ansi-escapes: 4.3.2 + '@inquirer/ansi': 2.0.7 + '@inquirer/figures': 2.0.7 + '@inquirer/type': 4.0.7(@types/node@25.9.1) cli-width: 4.1.0 - mute-stream: 2.0.0 + fast-wrap-ansi: 0.2.2 + mute-stream: 3.0.0 signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 '@inquirer/core@9.2.1': dependencies: '@inquirer/figures': 1.0.13 '@inquirer/type': 2.0.0 '@types/mute-stream': 0.0.4 - '@types/node': 22.18.0 + '@types/node': 22.19.19 '@types/wrap-ansi': 3.0.0 ansi-escapes: 4.3.2 cli-width: 4.1.0 @@ -7284,13 +6195,13 @@ snapshots: '@inquirer/type': 1.5.5 external-editor: 3.1.0 - '@inquirer/editor@4.2.18(@types/node@24.3.0)': + '@inquirer/editor@5.2.2(@types/node@25.9.1)': dependencies: - '@inquirer/core': 10.2.0(@types/node@24.3.0) - '@inquirer/external-editor': 1.0.1(@types/node@24.3.0) - '@inquirer/type': 3.0.8(@types/node@24.3.0) + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/external-editor': 3.0.3(@types/node@25.9.1) + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 '@inquirer/expand@2.3.0': dependencies: @@ -7298,46 +6209,47 @@ snapshots: '@inquirer/type': 1.5.5 yoctocolors-cjs: 2.1.3 - '@inquirer/expand@4.0.18(@types/node@24.3.0)': + '@inquirer/expand@5.1.1(@types/node@25.9.1)': dependencies: - '@inquirer/core': 10.2.0(@types/node@24.3.0) - '@inquirer/type': 3.0.8(@types/node@24.3.0) - yoctocolors-cjs: 2.1.3 + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 - '@inquirer/external-editor@1.0.1(@types/node@24.3.0)': + '@inquirer/external-editor@3.0.3(@types/node@25.9.1)': dependencies: - chardet: 2.1.0 - iconv-lite: 0.6.3 + chardet: 2.1.1 + iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 '@inquirer/figures@1.0.13': {} + '@inquirer/figures@2.0.7': {} + '@inquirer/input@2.3.0': dependencies: '@inquirer/core': 9.2.1 '@inquirer/type': 1.5.5 - '@inquirer/input@4.2.2(@types/node@24.3.0)': + '@inquirer/input@5.1.2(@types/node@25.9.1)': dependencies: - '@inquirer/core': 10.2.0(@types/node@24.3.0) - '@inquirer/type': 3.0.8(@types/node@24.3.0) + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 '@inquirer/number@1.1.0': dependencies: '@inquirer/core': 9.2.1 '@inquirer/type': 1.5.5 - '@inquirer/number@3.0.18(@types/node@24.3.0)': + '@inquirer/number@4.1.1(@types/node@25.9.1)': dependencies: - '@inquirer/core': 10.2.0(@types/node@24.3.0) - '@inquirer/type': 3.0.8(@types/node@24.3.0) + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 '@inquirer/password@2.2.0': dependencies: @@ -7345,13 +6257,13 @@ snapshots: '@inquirer/type': 1.5.5 ansi-escapes: 4.3.2 - '@inquirer/password@4.0.18(@types/node@24.3.0)': + '@inquirer/password@5.1.1(@types/node@25.9.1)': dependencies: - '@inquirer/core': 10.2.0(@types/node@24.3.0) - '@inquirer/type': 3.0.8(@types/node@24.3.0) - ansi-escapes: 4.3.2 + '@inquirer/ansi': 2.0.7 + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 '@inquirer/prompts@5.5.0': dependencies: @@ -7366,20 +6278,20 @@ snapshots: '@inquirer/search': 1.1.0 '@inquirer/select': 2.5.0 - '@inquirer/prompts@7.8.4(@types/node@24.3.0)': - dependencies: - '@inquirer/checkbox': 4.2.2(@types/node@24.3.0) - '@inquirer/confirm': 5.1.16(@types/node@24.3.0) - '@inquirer/editor': 4.2.18(@types/node@24.3.0) - '@inquirer/expand': 4.0.18(@types/node@24.3.0) - '@inquirer/input': 4.2.2(@types/node@24.3.0) - '@inquirer/number': 3.0.18(@types/node@24.3.0) - '@inquirer/password': 4.0.18(@types/node@24.3.0) - '@inquirer/rawlist': 4.1.6(@types/node@24.3.0) - '@inquirer/search': 3.1.1(@types/node@24.3.0) - '@inquirer/select': 4.3.2(@types/node@24.3.0) + '@inquirer/prompts@8.5.2(@types/node@25.9.1)': + dependencies: + '@inquirer/checkbox': 5.2.1(@types/node@25.9.1) + '@inquirer/confirm': 6.1.1(@types/node@25.9.1) + '@inquirer/editor': 5.2.2(@types/node@25.9.1) + '@inquirer/expand': 5.1.1(@types/node@25.9.1) + '@inquirer/input': 5.1.2(@types/node@25.9.1) + '@inquirer/number': 4.1.1(@types/node@25.9.1) + '@inquirer/password': 5.1.1(@types/node@25.9.1) + '@inquirer/rawlist': 5.3.1(@types/node@25.9.1) + '@inquirer/search': 4.2.1(@types/node@25.9.1) + '@inquirer/select': 5.2.1(@types/node@25.9.1) optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 '@inquirer/rawlist@2.3.0': dependencies: @@ -7387,13 +6299,12 @@ snapshots: '@inquirer/type': 1.5.5 yoctocolors-cjs: 2.1.3 - '@inquirer/rawlist@4.1.6(@types/node@24.3.0)': + '@inquirer/rawlist@5.3.1(@types/node@25.9.1)': dependencies: - '@inquirer/core': 10.2.0(@types/node@24.3.0) - '@inquirer/type': 3.0.8(@types/node@24.3.0) - yoctocolors-cjs: 2.1.3 + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 '@inquirer/search@1.1.0': dependencies: @@ -7402,14 +6313,13 @@ snapshots: '@inquirer/type': 1.5.5 yoctocolors-cjs: 2.1.3 - '@inquirer/search@3.1.1(@types/node@24.3.0)': + '@inquirer/search@4.2.1(@types/node@25.9.1)': dependencies: - '@inquirer/core': 10.2.0(@types/node@24.3.0) - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@24.3.0) - yoctocolors-cjs: 2.1.3 + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/figures': 2.0.7 + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 '@inquirer/select@2.5.0': dependencies: @@ -7419,15 +6329,14 @@ snapshots: ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.3 - '@inquirer/select@4.3.2(@types/node@24.3.0)': + '@inquirer/select@5.2.1(@types/node@25.9.1)': dependencies: - '@inquirer/core': 10.2.0(@types/node@24.3.0) - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@24.3.0) - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.3 + '@inquirer/ansi': 2.0.7 + '@inquirer/core': 11.2.1(@types/node@25.9.1) + '@inquirer/figures': 2.0.7 + '@inquirer/type': 4.0.7(@types/node@25.9.1) optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 '@inquirer/type@1.5.5': dependencies: @@ -7437,9 +6346,9 @@ snapshots: dependencies: mute-stream: 1.0.0 - '@inquirer/type@3.0.8(@types/node@24.3.0)': + '@inquirer/type@4.0.7(@types/node@25.9.1)': optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 '@ioredis/commands@1.3.1': {} @@ -7458,21 +6367,14 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@istanbuljs/schema@0.1.3': {} - - '@j4cobi/eslint-plugin-sort-imports@1.0.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': + '@j4cobi/eslint-plugin-sort-imports@1.0.2(eslint@9.34.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@typescript-eslint/utils': 8.37.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.37.0(eslint@9.34.0(jiti@2.7.0))(typescript@6.0.3) transitivePeerDependencies: - eslint - supports-color - typescript - '@jridgewell/gen-mapping@0.3.12': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 - '@jridgewell/trace-mapping': 0.3.29 - '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -7481,24 +6383,24 @@ snapshots: '@jridgewell/remapping@2.3.5': dependencies: '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/sourcemap-codec@1.5.4': {} - '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.29': + '@jridgewell/trace-mapping@0.3.30': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping@0.3.30': + '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@keyv/serialize@1.1.1': {} + '@lukeed/csprng@1.1.0': {} '@lukeed/ms@2.0.2': {} @@ -7517,23 +6419,24 @@ snapshots: dependencies: sparse-bitfield: 3.0.3 - '@napi-rs/cli@3.1.5(@emnapi/runtime@1.7.1)(@types/node@24.3.0)': + '@napi-rs/cli@3.7.0(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1)(@types/node@25.9.1)': dependencies: - '@inquirer/prompts': 7.8.4(@types/node@24.3.0) - '@napi-rs/cross-toolchain': 1.0.3 - '@napi-rs/wasm-tools': 1.0.1 - '@octokit/rest': 22.0.0 + '@inquirer/prompts': 8.5.2(@types/node@25.9.1) + '@napi-rs/cross-toolchain': 1.0.3(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1) + '@napi-rs/wasm-tools': 1.0.1(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1) + '@octokit/rest': 22.0.1 clipanion: 4.0.0-rc.4(typanion@3.14.0) colorette: 2.0.20 - debug: 4.4.1 - es-toolkit: 1.39.10 - find-up: 7.0.0 - js-yaml: 4.1.0 - semver: 7.7.2 + emnapi: 1.10.0 + es-toolkit: 1.47.0 + js-yaml: 4.1.1 + obug: 2.1.1 + semver: 7.8.1 typanion: 3.14.0 optionalDependencies: '@emnapi/runtime': 1.7.1 transitivePeerDependencies: + - '@emnapi/core' - '@napi-rs/cross-toolchain-arm64-target-aarch64' - '@napi-rs/cross-toolchain-arm64-target-armv7' - '@napi-rs/cross-toolchain-arm64-target-ppc64le' @@ -7545,14 +6448,17 @@ snapshots: - '@napi-rs/cross-toolchain-x64-target-s390x' - '@napi-rs/cross-toolchain-x64-target-x86_64' - '@types/node' + - node-addon-api - supports-color - '@napi-rs/cross-toolchain@1.0.3': + '@napi-rs/cross-toolchain@1.0.3(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1)': dependencies: - '@napi-rs/lzma': 1.4.5 - '@napi-rs/tar': 1.1.0 - debug: 4.4.1 + '@napi-rs/lzma': 1.4.5(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1) + '@napi-rs/tar': 1.1.0(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1) + debug: 4.4.3 transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' - supports-color '@napi-rs/lzma-android-arm-eabi@1.4.5': @@ -7594,9 +6500,12 @@ snapshots: '@napi-rs/lzma-linux-x64-musl@1.4.5': optional: true - '@napi-rs/lzma-wasm32-wasi@1.4.5': + '@napi-rs/lzma-wasm32-wasi@1.4.5(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1)': dependencies: - '@napi-rs/wasm-runtime': 1.0.3 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' optional: true '@napi-rs/lzma-win32-arm64-msvc@1.4.5': @@ -7608,7 +6517,7 @@ snapshots: '@napi-rs/lzma-win32-x64-msvc@1.4.5': optional: true - '@napi-rs/lzma@1.4.5': + '@napi-rs/lzma@1.4.5(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1)': optionalDependencies: '@napi-rs/lzma-android-arm-eabi': 1.4.5 '@napi-rs/lzma-android-arm64': 1.4.5 @@ -7623,10 +6532,13 @@ snapshots: '@napi-rs/lzma-linux-s390x-gnu': 1.4.5 '@napi-rs/lzma-linux-x64-gnu': 1.4.5 '@napi-rs/lzma-linux-x64-musl': 1.4.5 - '@napi-rs/lzma-wasm32-wasi': 1.4.5 + '@napi-rs/lzma-wasm32-wasi': 1.4.5(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1) '@napi-rs/lzma-win32-arm64-msvc': 1.4.5 '@napi-rs/lzma-win32-ia32-msvc': 1.4.5 '@napi-rs/lzma-win32-x64-msvc': 1.4.5 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' '@napi-rs/nice-android-arm-eabi@1.1.1': optional: true @@ -7736,9 +6648,12 @@ snapshots: '@napi-rs/tar-linux-x64-musl@1.1.0': optional: true - '@napi-rs/tar-wasm32-wasi@1.1.0': + '@napi-rs/tar-wasm32-wasi@1.1.0(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1)': dependencies: - '@napi-rs/wasm-runtime': 1.0.3 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' optional: true '@napi-rs/tar-win32-arm64-msvc@1.1.0': @@ -7750,7 +6665,7 @@ snapshots: '@napi-rs/tar-win32-x64-msvc@1.1.0': optional: true - '@napi-rs/tar@1.1.0': + '@napi-rs/tar@1.1.0(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1)': optionalDependencies: '@napi-rs/tar-android-arm-eabi': 1.1.0 '@napi-rs/tar-android-arm64': 1.1.0 @@ -7764,23 +6679,19 @@ snapshots: '@napi-rs/tar-linux-s390x-gnu': 1.1.0 '@napi-rs/tar-linux-x64-gnu': 1.1.0 '@napi-rs/tar-linux-x64-musl': 1.1.0 - '@napi-rs/tar-wasm32-wasi': 1.1.0 + '@napi-rs/tar-wasm32-wasi': 1.1.0(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1) '@napi-rs/tar-win32-arm64-msvc': 1.1.0 '@napi-rs/tar-win32-ia32-msvc': 1.1.0 '@napi-rs/tar-win32-x64-msvc': 1.1.0 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' - '@napi-rs/wasm-runtime@0.2.12': - dependencies: - '@emnapi/core': 1.5.0 - '@emnapi/runtime': 1.5.0 - '@tybys/wasm-util': 0.10.0 - optional: true - - '@napi-rs/wasm-runtime@1.0.3': + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1)': dependencies: '@emnapi/core': 1.5.0 - '@emnapi/runtime': 1.5.0 - '@tybys/wasm-util': 0.10.0 + '@emnapi/runtime': 1.7.1 + '@tybys/wasm-util': 0.10.2 optional: true '@napi-rs/wasm-tools-android-arm-eabi@1.0.1': @@ -7810,9 +6721,12 @@ snapshots: '@napi-rs/wasm-tools-linux-x64-musl@1.0.1': optional: true - '@napi-rs/wasm-tools-wasm32-wasi@1.0.1': + '@napi-rs/wasm-tools-wasm32-wasi@1.0.1(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1)': dependencies: - '@napi-rs/wasm-runtime': 1.0.3 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' optional: true '@napi-rs/wasm-tools-win32-arm64-msvc@1.0.1': @@ -7824,7 +6738,7 @@ snapshots: '@napi-rs/wasm-tools-win32-x64-msvc@1.0.1': optional: true - '@napi-rs/wasm-tools@1.0.1': + '@napi-rs/wasm-tools@1.0.1(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1)': optionalDependencies: '@napi-rs/wasm-tools-android-arm-eabi': 1.0.1 '@napi-rs/wasm-tools-android-arm64': 1.0.1 @@ -7835,10 +6749,13 @@ snapshots: '@napi-rs/wasm-tools-linux-arm64-musl': 1.0.1 '@napi-rs/wasm-tools-linux-x64-gnu': 1.0.1 '@napi-rs/wasm-tools-linux-x64-musl': 1.0.1 - '@napi-rs/wasm-tools-wasm32-wasi': 1.0.1 + '@napi-rs/wasm-tools-wasm32-wasi': 1.0.1(@emnapi/core@1.5.0)(@emnapi/runtime@1.7.1) '@napi-rs/wasm-tools-win32-arm64-msvc': 1.0.1 '@napi-rs/wasm-tools-win32-ia32-msvc': 1.0.1 '@napi-rs/wasm-tools-win32-x64-msvc': 1.0.1 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' '@nestjs/axios@4.0.1(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(axios@1.11.0)(rxjs@7.8.2)': dependencies: @@ -7913,7 +6830,7 @@ snapshots: class-transformer: 0.5.1 class-validator: 0.14.2 - '@nestjs/testing@11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))': + '@nestjs/testing@11.1.24(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))': dependencies: '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2) @@ -7921,10 +6838,6 @@ snapshots: '@next/env@16.0.7': {} - '@next/eslint-plugin-next@15.5.2': - dependencies: - fast-glob: 3.3.1 - '@next/swc-darwin-arm64@16.0.7': optional: true @@ -7961,75 +6874,185 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 - '@nolyfill/is-core-module@1.0.39': {} - '@nuxt/opencollective@0.4.1': dependencies: consola: 3.4.2 '@octokit/auth-token@6.0.0': {} - '@octokit/core@7.0.3': + '@octokit/core@7.0.6': dependencies: '@octokit/auth-token': 6.0.0 - '@octokit/graphql': 9.0.1 - '@octokit/request': 10.0.3 - '@octokit/request-error': 7.0.0 - '@octokit/types': 14.1.0 + '@octokit/graphql': 9.0.3 + '@octokit/request': 10.0.10 + '@octokit/request-error': 7.1.0 + '@octokit/types': 16.0.0 before-after-hook: 4.0.0 universal-user-agent: 7.0.3 - '@octokit/endpoint@11.0.0': + '@octokit/endpoint@11.0.3': dependencies: - '@octokit/types': 14.1.0 + '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 - '@octokit/graphql@9.0.1': + '@octokit/graphql@9.0.3': dependencies: - '@octokit/request': 10.0.3 - '@octokit/types': 14.1.0 + '@octokit/request': 10.0.10 + '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 - '@octokit/openapi-types@25.1.0': {} + '@octokit/openapi-types@27.0.0': {} - '@octokit/plugin-paginate-rest@13.1.1(@octokit/core@7.0.3)': + '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.6)': dependencies: - '@octokit/core': 7.0.3 - '@octokit/types': 14.1.0 + '@octokit/core': 7.0.6 + '@octokit/types': 16.0.0 - '@octokit/plugin-request-log@6.0.0(@octokit/core@7.0.3)': + '@octokit/plugin-request-log@6.0.0(@octokit/core@7.0.6)': dependencies: - '@octokit/core': 7.0.3 + '@octokit/core': 7.0.6 - '@octokit/plugin-rest-endpoint-methods@16.0.0(@octokit/core@7.0.3)': + '@octokit/plugin-rest-endpoint-methods@17.0.0(@octokit/core@7.0.6)': dependencies: - '@octokit/core': 7.0.3 - '@octokit/types': 14.1.0 + '@octokit/core': 7.0.6 + '@octokit/types': 16.0.0 - '@octokit/request-error@7.0.0': + '@octokit/request-error@7.1.0': dependencies: - '@octokit/types': 14.1.0 + '@octokit/types': 16.0.0 - '@octokit/request@10.0.3': + '@octokit/request@10.0.10': dependencies: - '@octokit/endpoint': 11.0.0 - '@octokit/request-error': 7.0.0 - '@octokit/types': 14.1.0 - fast-content-type-parse: 3.0.0 + '@octokit/endpoint': 11.0.3 + '@octokit/request-error': 7.1.0 + '@octokit/types': 16.0.0 + content-type: 2.0.0 + json-with-bigint: 3.5.8 universal-user-agent: 7.0.3 - '@octokit/rest@22.0.0': + '@octokit/rest@22.0.1': dependencies: - '@octokit/core': 7.0.3 - '@octokit/plugin-paginate-rest': 13.1.1(@octokit/core@7.0.3) - '@octokit/plugin-request-log': 6.0.0(@octokit/core@7.0.3) - '@octokit/plugin-rest-endpoint-methods': 16.0.0(@octokit/core@7.0.3) + '@octokit/core': 7.0.6 + '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.6) + '@octokit/plugin-request-log': 6.0.0(@octokit/core@7.0.6) + '@octokit/plugin-rest-endpoint-methods': 17.0.0(@octokit/core@7.0.6) - '@octokit/types@14.1.0': + '@octokit/types@16.0.0': dependencies: - '@octokit/openapi-types': 25.1.0 + '@octokit/openapi-types': 27.0.0 + + '@oxfmt/binding-android-arm-eabi@0.53.0': + optional: true + + '@oxfmt/binding-android-arm64@0.53.0': + optional: true + + '@oxfmt/binding-darwin-arm64@0.53.0': + optional: true + + '@oxfmt/binding-darwin-x64@0.53.0': + optional: true + + '@oxfmt/binding-freebsd-x64@0.53.0': + optional: true + + '@oxfmt/binding-linux-arm-gnueabihf@0.53.0': + optional: true + + '@oxfmt/binding-linux-arm-musleabihf@0.53.0': + optional: true + + '@oxfmt/binding-linux-arm64-gnu@0.53.0': + optional: true - '@pkgjs/parseargs@0.11.0': + '@oxfmt/binding-linux-arm64-musl@0.53.0': + optional: true + + '@oxfmt/binding-linux-ppc64-gnu@0.53.0': + optional: true + + '@oxfmt/binding-linux-riscv64-gnu@0.53.0': + optional: true + + '@oxfmt/binding-linux-riscv64-musl@0.53.0': + optional: true + + '@oxfmt/binding-linux-s390x-gnu@0.53.0': + optional: true + + '@oxfmt/binding-linux-x64-gnu@0.53.0': + optional: true + + '@oxfmt/binding-linux-x64-musl@0.53.0': + optional: true + + '@oxfmt/binding-openharmony-arm64@0.53.0': + optional: true + + '@oxfmt/binding-win32-arm64-msvc@0.53.0': + optional: true + + '@oxfmt/binding-win32-ia32-msvc@0.53.0': + optional: true + + '@oxfmt/binding-win32-x64-msvc@0.53.0': + optional: true + + '@oxlint/binding-android-arm-eabi@1.68.0': + optional: true + + '@oxlint/binding-android-arm64@1.68.0': + optional: true + + '@oxlint/binding-darwin-arm64@1.68.0': + optional: true + + '@oxlint/binding-darwin-x64@1.68.0': + optional: true + + '@oxlint/binding-freebsd-x64@1.68.0': + optional: true + + '@oxlint/binding-linux-arm-gnueabihf@1.68.0': + optional: true + + '@oxlint/binding-linux-arm-musleabihf@1.68.0': + optional: true + + '@oxlint/binding-linux-arm64-gnu@1.68.0': + optional: true + + '@oxlint/binding-linux-arm64-musl@1.68.0': + optional: true + + '@oxlint/binding-linux-ppc64-gnu@1.68.0': + optional: true + + '@oxlint/binding-linux-riscv64-gnu@1.68.0': + optional: true + + '@oxlint/binding-linux-riscv64-musl@1.68.0': + optional: true + + '@oxlint/binding-linux-s390x-gnu@1.68.0': + optional: true + + '@oxlint/binding-linux-x64-gnu@1.68.0': + optional: true + + '@oxlint/binding-linux-x64-musl@1.68.0': + optional: true + + '@oxlint/binding-openharmony-arm64@1.68.0': + optional: true + + '@oxlint/binding-win32-arm64-msvc@1.68.0': + optional: true + + '@oxlint/binding-win32-ia32-msvc@1.68.0': + optional: true + + '@oxlint/binding-win32-x64-msvc@1.68.0': optional: true '@pm2/agent@2.1.1': @@ -8078,7 +7101,7 @@ snapshots: '@pm2/pm2-version-check@1.0.4': dependencies: - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -8086,331 +7109,284 @@ snapshots: '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) react: 19.2.1 react-dom: 19.2.1(react@19.2.1) optionalDependencies: - '@types/react': 19.2.7 - '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@types/react': 19.2.16 + '@types/react-dom': 19.2.3(@types/react@19.2.16) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.7)(react@19.2.1)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.16)(react@19.2.1)': dependencies: react: 19.2.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.16 - '@radix-ui/react-context@1.1.2(@types/react@19.2.7)(react@19.2.1)': + '@radix-ui/react-context@1.1.2(@types/react@19.2.16)(react@19.2.1)': dependencies: react: 19.2.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.16 - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.2.1) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.7)(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.16)(react@19.2.1) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.16)(react@19.2.1) react: 19.2.1 react-dom: 19.2.1(react@19.2.1) optionalDependencies: - '@types/react': 19.2.7 - '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@types/react': 19.2.16 + '@types/react-dom': 19.2.3(@types/react@19.2.16) - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.7)(react@19.2.1)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.16)(react@19.2.1)': dependencies: react: 19.2.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.16 - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.16)(react@19.2.1) react: 19.2.1 react-dom: 19.2.1(react@19.2.1) optionalDependencies: - '@types/react': 19.2.7 - '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@types/react': 19.2.16 + '@types/react-dom': 19.2.3(@types/react@19.2.16) - '@radix-ui/react-id@1.1.1(@types/react@19.2.7)(react@19.2.1)': + '@radix-ui/react-id@1.1.1(@types/react@19.2.16)(react@19.2.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.16)(react@19.2.1) react: 19.2.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.16 - '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.7)(react@19.2.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.2.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.7)(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.16)(react@19.2.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.16)(react@19.2.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.16)(react@19.2.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.16)(react@19.2.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.16)(react@19.2.1) aria-hidden: 1.2.6 react: 19.2.1 react-dom: 19.2.1(react@19.2.1) - react-remove-scroll: 2.7.1(@types/react@19.2.7)(react@19.2.1) + react-remove-scroll: 2.7.1(@types/react@19.2.16)(react@19.2.1) optionalDependencies: - '@types/react': 19.2.7 - '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@types/react': 19.2.16 + '@types/react-dom': 19.2.3(@types/react@19.2.16) - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': dependencies: '@floating-ui/react-dom': 2.1.6(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.2.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.1) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.7)(react@19.2.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.7)(react@19.2.1) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.16)(react@19.2.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.16)(react@19.2.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.16)(react@19.2.1) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.16)(react@19.2.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.16)(react@19.2.1) '@radix-ui/rect': 1.1.1 react: 19.2.1 react-dom: 19.2.1(react@19.2.1) optionalDependencies: - '@types/react': 19.2.7 - '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@types/react': 19.2.16 + '@types/react-dom': 19.2.3(@types/react@19.2.16) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.16)(react@19.2.1) react: 19.2.1 react-dom: 19.2.1(react@19.2.1) optionalDependencies: - '@types/react': 19.2.7 - '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@types/react': 19.2.16 + '@types/react-dom': 19.2.3(@types/react@19.2.16) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.16)(react@19.2.1) react: 19.2.1 react-dom: 19.2.1(react@19.2.1) optionalDependencies: - '@types/react': 19.2.7 - '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@types/react': 19.2.16 + '@types/react-dom': 19.2.3(@types/react@19.2.16) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.7)(react@19.2.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.16)(react@19.2.1) react: 19.2.1 react-dom: 19.2.1(react@19.2.1) optionalDependencies: - '@types/react': 19.2.7 - '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@types/react': 19.2.16 + '@types/react-dom': 19.2.3(@types/react@19.2.16) - '@radix-ui/react-slot@1.2.3(@types/react@19.2.7)(react@19.2.1)': + '@radix-ui/react-slot@1.2.3(@types/react@19.2.16)(react@19.2.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.1) react: 19.2.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.16 - '@radix-ui/react-slot@1.2.4(@types/react@19.2.7)(react@19.2.1)': + '@radix-ui/react-slot@1.2.4(@types/react@19.2.16)(react@19.2.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.1) react: 19.2.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.16 - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.7)(react@19.2.1)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.16)(react@19.2.1)': dependencies: react: 19.2.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.16 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.7)(react@19.2.1)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.16)(react@19.2.1)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.7)(react@19.2.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.1) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.16)(react@19.2.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.16)(react@19.2.1) react: 19.2.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.16 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.7)(react@19.2.1)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.16)(react@19.2.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.16)(react@19.2.1) react: 19.2.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.16 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.7)(react@19.2.1)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.16)(react@19.2.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.2.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.16)(react@19.2.1) react: 19.2.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.16 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.7)(react@19.2.1)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.16)(react@19.2.1)': dependencies: react: 19.2.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.16 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.7)(react@19.2.1)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.16)(react@19.2.1)': dependencies: '@radix-ui/rect': 1.1.1 react: 19.2.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.16 - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.7)(react@19.2.1)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.16)(react@19.2.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.16)(react@19.2.1) react: 19.2.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.16 '@radix-ui/rect@1.1.1': {} - '@rollup/pluginutils@5.2.0(rollup@4.49.0)': + '@rollup/pluginutils@5.4.0(rollup@4.61.0)': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 estree-walker: 2.0.2 - picomatch: 4.0.3 + picomatch: 4.0.4 optionalDependencies: - rollup: 4.49.0 - - '@rollup/rollup-android-arm-eabi@4.45.1': - optional: true + rollup: 4.61.0 - '@rollup/rollup-android-arm-eabi@4.49.0': + '@rollup/rollup-android-arm-eabi@4.61.0': optional: true - '@rollup/rollup-android-arm64@4.45.1': + '@rollup/rollup-android-arm64@4.61.0': optional: true - '@rollup/rollup-android-arm64@4.49.0': + '@rollup/rollup-darwin-arm64@4.61.0': optional: true - '@rollup/rollup-darwin-arm64@4.45.1': + '@rollup/rollup-darwin-x64@4.61.0': optional: true - '@rollup/rollup-darwin-arm64@4.49.0': + '@rollup/rollup-freebsd-arm64@4.61.0': optional: true - '@rollup/rollup-darwin-x64@4.45.1': + '@rollup/rollup-freebsd-x64@4.61.0': optional: true - '@rollup/rollup-darwin-x64@4.49.0': + '@rollup/rollup-linux-arm-gnueabihf@4.61.0': optional: true - '@rollup/rollup-freebsd-arm64@4.45.1': + '@rollup/rollup-linux-arm-musleabihf@4.61.0': optional: true - '@rollup/rollup-freebsd-arm64@4.49.0': + '@rollup/rollup-linux-arm64-gnu@4.61.0': optional: true - '@rollup/rollup-freebsd-x64@4.45.1': + '@rollup/rollup-linux-arm64-musl@4.61.0': optional: true - '@rollup/rollup-freebsd-x64@4.49.0': + '@rollup/rollup-linux-loong64-gnu@4.61.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.45.1': + '@rollup/rollup-linux-loong64-musl@4.61.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.49.0': + '@rollup/rollup-linux-ppc64-gnu@4.61.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.45.1': + '@rollup/rollup-linux-ppc64-musl@4.61.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.49.0': + '@rollup/rollup-linux-riscv64-gnu@4.61.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.45.1': + '@rollup/rollup-linux-riscv64-musl@4.61.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.49.0': + '@rollup/rollup-linux-s390x-gnu@4.61.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.45.1': + '@rollup/rollup-linux-x64-gnu@4.61.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.49.0': + '@rollup/rollup-linux-x64-musl@4.61.0': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.45.1': + '@rollup/rollup-openbsd-x64@4.61.0': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.49.0': + '@rollup/rollup-openharmony-arm64@4.61.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.45.1': + '@rollup/rollup-win32-arm64-msvc@4.61.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.49.0': + '@rollup/rollup-win32-ia32-msvc@4.61.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.45.1': + '@rollup/rollup-win32-x64-gnu@4.61.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.49.0': + '@rollup/rollup-win32-x64-msvc@4.61.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.45.1': - optional: true + '@scarf/scarf@1.4.0': {} - '@rollup/rollup-linux-riscv64-musl@4.49.0': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.45.1': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.49.0': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.45.1': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.49.0': - optional: true - - '@rollup/rollup-linux-x64-musl@4.45.1': - optional: true - - '@rollup/rollup-linux-x64-musl@4.49.0': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.45.1': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.49.0': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.45.1': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.49.0': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.45.1': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.49.0': - optional: true - - '@rtsao/scc@1.1.0': {} - - '@rushstack/eslint-patch@1.12.0': {} - - '@scarf/scarf@1.4.0': {} + '@sec-ant/readable-stream@0.4.1': {} '@sentry-internal/tracing@7.120.4': dependencies: @@ -8444,79 +7420,83 @@ snapshots: dependencies: '@sentry/types': 7.120.4 - '@sindresorhus/is@5.6.0': {} + '@sindresorhus/is@7.2.0': {} - '@stylistic/eslint-plugin@5.2.3(eslint@9.34.0(jiti@2.6.1))': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.6.1)) - '@typescript-eslint/types': 8.41.0 - eslint: 9.34.0(jiti@2.6.1) - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - estraverse: 5.3.0 - picomatch: 4.0.3 + '@sindresorhus/merge-streams@4.0.0': {} + + '@standard-schema/spec@1.1.0': {} - '@swc/cli@0.7.8(@swc/core@1.13.5(@swc/helpers@0.5.17))': + '@swc/cli@0.8.1(@swc/core@1.15.40(@swc/helpers@0.5.23))': dependencies: - '@swc/core': 1.13.5(@swc/helpers@0.5.17) + '@swc/core': 1.15.40(@swc/helpers@0.5.23) '@swc/counter': 0.1.3 - '@xhmikosr/bin-wrapper': 13.2.0 + '@xhmikosr/bin-wrapper': 14.2.5 commander: 8.3.0 - minimatch: 9.0.5 + minimatch: 9.0.9 piscina: 4.9.2 - semver: 7.7.2 + semver: 7.8.1 slash: 3.0.0 source-map: 0.7.6 - tinyglobby: 0.2.14 + tinyglobby: 0.2.17 transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a - supports-color - '@swc/core-darwin-arm64@1.13.5': + '@swc/core-darwin-arm64@1.15.40': + optional: true + + '@swc/core-darwin-x64@1.15.40': optional: true - '@swc/core-darwin-x64@1.13.5': + '@swc/core-linux-arm-gnueabihf@1.15.40': optional: true - '@swc/core-linux-arm-gnueabihf@1.13.5': + '@swc/core-linux-arm64-gnu@1.15.40': optional: true - '@swc/core-linux-arm64-gnu@1.13.5': + '@swc/core-linux-arm64-musl@1.15.40': optional: true - '@swc/core-linux-arm64-musl@1.13.5': + '@swc/core-linux-ppc64-gnu@1.15.40': optional: true - '@swc/core-linux-x64-gnu@1.13.5': + '@swc/core-linux-s390x-gnu@1.15.40': optional: true - '@swc/core-linux-x64-musl@1.13.5': + '@swc/core-linux-x64-gnu@1.15.40': optional: true - '@swc/core-win32-arm64-msvc@1.13.5': + '@swc/core-linux-x64-musl@1.15.40': optional: true - '@swc/core-win32-ia32-msvc@1.13.5': + '@swc/core-win32-arm64-msvc@1.15.40': optional: true - '@swc/core-win32-x64-msvc@1.13.5': + '@swc/core-win32-ia32-msvc@1.15.40': optional: true - '@swc/core@1.13.5(@swc/helpers@0.5.17)': + '@swc/core-win32-x64-msvc@1.15.40': + optional: true + + '@swc/core@1.15.40(@swc/helpers@0.5.23)': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.24 + '@swc/types': 0.1.26 optionalDependencies: - '@swc/core-darwin-arm64': 1.13.5 - '@swc/core-darwin-x64': 1.13.5 - '@swc/core-linux-arm-gnueabihf': 1.13.5 - '@swc/core-linux-arm64-gnu': 1.13.5 - '@swc/core-linux-arm64-musl': 1.13.5 - '@swc/core-linux-x64-gnu': 1.13.5 - '@swc/core-linux-x64-musl': 1.13.5 - '@swc/core-win32-arm64-msvc': 1.13.5 - '@swc/core-win32-ia32-msvc': 1.13.5 - '@swc/core-win32-x64-msvc': 1.13.5 - '@swc/helpers': 0.5.17 + '@swc/core-darwin-arm64': 1.15.40 + '@swc/core-darwin-x64': 1.15.40 + '@swc/core-linux-arm-gnueabihf': 1.15.40 + '@swc/core-linux-arm64-gnu': 1.15.40 + '@swc/core-linux-arm64-musl': 1.15.40 + '@swc/core-linux-ppc64-gnu': 1.15.40 + '@swc/core-linux-s390x-gnu': 1.15.40 + '@swc/core-linux-x64-gnu': 1.15.40 + '@swc/core-linux-x64-musl': 1.15.40 + '@swc/core-win32-arm64-msvc': 1.15.40 + '@swc/core-win32-ia32-msvc': 1.15.40 + '@swc/core-win32-x64-msvc': 1.15.40 + '@swc/helpers': 0.5.23 '@swc/counter@0.1.3': {} @@ -8524,86 +7504,82 @@ snapshots: dependencies: tslib: 2.8.1 - '@swc/helpers@0.5.17': + '@swc/helpers@0.5.23': dependencies: tslib: 2.8.1 - '@swc/types@0.1.24': + '@swc/types@0.1.26': dependencies: '@swc/counter': 0.1.3 - '@szmarczak/http-timer@5.0.1': - dependencies: - defer-to-connect: 2.0.1 - - '@tailwindcss/node@4.1.17': + '@tailwindcss/node@4.3.0': dependencies: '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.18.3 - jiti: 2.6.1 - lightningcss: 1.30.2 + enhanced-resolve: 5.22.1 + jiti: 2.7.0 + lightningcss: 1.32.0 magic-string: 0.30.21 source-map-js: 1.2.1 - tailwindcss: 4.1.17 + tailwindcss: 4.3.0 - '@tailwindcss/oxide-android-arm64@4.1.17': + '@tailwindcss/oxide-android-arm64@4.3.0': optional: true - '@tailwindcss/oxide-darwin-arm64@4.1.17': + '@tailwindcss/oxide-darwin-arm64@4.3.0': optional: true - '@tailwindcss/oxide-darwin-x64@4.1.17': + '@tailwindcss/oxide-darwin-x64@4.3.0': optional: true - '@tailwindcss/oxide-freebsd-x64@4.1.17': + '@tailwindcss/oxide-freebsd-x64@4.3.0': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.1.17': + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.1.17': + '@tailwindcss/oxide-linux-arm64-musl@4.3.0': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.1.17': + '@tailwindcss/oxide-linux-x64-gnu@4.3.0': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.1.17': + '@tailwindcss/oxide-linux-x64-musl@4.3.0': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.1.17': + '@tailwindcss/oxide-wasm32-wasi@4.3.0': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.1.17': + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.1.17': + '@tailwindcss/oxide-win32-x64-msvc@4.3.0': optional: true - '@tailwindcss/oxide@4.1.17': + '@tailwindcss/oxide@4.3.0': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.17 - '@tailwindcss/oxide-darwin-arm64': 4.1.17 - '@tailwindcss/oxide-darwin-x64': 4.1.17 - '@tailwindcss/oxide-freebsd-x64': 4.1.17 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.17 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.17 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.17 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.17 - '@tailwindcss/oxide-linux-x64-musl': 4.1.17 - '@tailwindcss/oxide-wasm32-wasi': 4.1.17 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.17 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.17 - - '@tailwindcss/postcss@4.1.17': + '@tailwindcss/oxide-android-arm64': 4.3.0 + '@tailwindcss/oxide-darwin-arm64': 4.3.0 + '@tailwindcss/oxide-darwin-x64': 4.3.0 + '@tailwindcss/oxide-freebsd-x64': 4.3.0 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.0 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.0 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.0 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.0 + '@tailwindcss/oxide-linux-x64-musl': 4.3.0 + '@tailwindcss/oxide-wasm32-wasi': 4.3.0 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.0 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.0 + + '@tailwindcss/postcss@4.3.0': dependencies: '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.1.17 - '@tailwindcss/oxide': 4.1.17 - postcss: 8.5.6 - tailwindcss: 4.1.17 + '@tailwindcss/node': 4.3.0 + '@tailwindcss/oxide': 4.3.0 + postcss: 8.5.15 + tailwindcss: 4.3.0 '@tanstack/query-core@5.90.12': {} @@ -8614,17 +7590,42 @@ snapshots: '@tokenizer/inflate@0.2.7': dependencies: - debug: 4.4.1 + debug: 4.4.3 fflate: 0.8.2 token-types: 6.1.1 transitivePeerDependencies: - supports-color + '@tokenizer/inflate@0.4.1': + dependencies: + debug: 4.4.3 + token-types: 6.1.2 + transitivePeerDependencies: + - supports-color + '@tokenizer/token@0.3.0': {} '@tootallnate/quickjs-emscripten@0.23.0': {} - '@tybys/wasm-util@0.10.0': + '@turbo/darwin-64@2.9.16': + optional: true + + '@turbo/darwin-arm64@2.9.16': + optional: true + + '@turbo/linux-64@2.9.16': + optional: true + + '@turbo/linux-arm64@2.9.16': + optional: true + + '@turbo/windows-64@2.9.16': + optional: true + + '@turbo/windows-arm64@2.9.16': + optional: true + + '@tybys/wasm-util@0.10.2': dependencies: tslib: 2.8.1 optional: true @@ -8638,23 +7639,16 @@ snapshots: semver: 7.7.2 tslib: 2.8.1 - '@types/chai@5.2.2': + '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 - - '@types/conventional-commits-parser@5.0.1': - dependencies: - '@types/node': 24.3.0 + assertion-error: 2.0.1 '@types/deep-eql@4.0.2': {} - '@types/eslint__js@9.14.0': - dependencies: - '@eslint/js': 9.34.0 - - '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} - '@types/http-cache-semantics@4.0.4': {} + '@types/http-cache-semantics@4.2.0': {} '@types/i18next-fs-backend@1.2.0': dependencies: @@ -8667,41 +7661,39 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/json5@0.0.29': {} - '@types/luxon@3.7.1': {} '@types/mute-stream@0.0.4': dependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 '@types/node-rsa@1.1.4': dependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 - '@types/node@22.18.0': + '@types/node@22.19.19': dependencies: undici-types: 6.21.0 - '@types/node@24.3.0': + '@types/node@25.9.1': dependencies: - undici-types: 7.10.0 + undici-types: 7.24.6 - '@types/react-dom@19.2.3(@types/react@19.2.7)': + '@types/react-dom@19.2.3(@types/react@19.2.16)': dependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.16 - '@types/react@19.2.7': + '@types/react@19.2.16': dependencies: csstype: 3.2.3 '@types/readable-stream@4.0.21': dependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 '@types/through@0.0.33': dependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 '@types/validator@13.15.2': {} @@ -8713,50 +7705,12 @@ snapshots: '@types/wrap-ansi@3.0.0': {} - '@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.41.0 - '@typescript-eslint/type-utils': 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.41.0 - eslint: 9.34.0(jiti@2.6.1) - graphemer: 1.4.0 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': - dependencies: - '@typescript-eslint/scope-manager': 8.41.0 - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.41.0 - debug: 4.4.1 - eslint: 9.34.0(jiti@2.6.1) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.37.0(typescript@5.9.2)': + '@typescript-eslint/project-service@8.37.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@6.0.3) '@typescript-eslint/types': 8.37.0 - debug: 4.4.1 - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.41.0(typescript@5.9.2)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.9.2) - '@typescript-eslint/types': 8.41.0 - debug: 4.4.1 - typescript: 5.9.2 + debug: 4.4.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -8765,86 +7719,36 @@ snapshots: '@typescript-eslint/types': 8.37.0 '@typescript-eslint/visitor-keys': 8.37.0 - '@typescript-eslint/scope-manager@8.41.0': - dependencies: - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/visitor-keys': 8.41.0 - - '@typescript-eslint/tsconfig-utils@8.37.0(typescript@5.9.2)': - dependencies: - typescript: 5.9.2 - - '@typescript-eslint/tsconfig-utils@8.41.0(typescript@5.9.2)': - dependencies: - typescript: 5.9.2 - - '@typescript-eslint/type-utils@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.37.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - debug: 4.4.1 - eslint: 9.34.0(jiti@2.6.1) - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color + typescript: 6.0.3 '@typescript-eslint/types@8.37.0': {} - '@typescript-eslint/types@8.41.0': {} - - '@typescript-eslint/typescript-estree@8.37.0(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.37.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.37.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.9.2) + '@typescript-eslint/project-service': 8.37.0(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@6.0.3) '@typescript-eslint/types': 8.37.0 '@typescript-eslint/visitor-keys': 8.37.0 - debug: 4.4.1 + debug: 4.4.3 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + ts-api-utils: 2.1.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.41.0(typescript@5.9.2)': + '@typescript-eslint/utils@8.37.0(eslint@9.34.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.41.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.9.2) - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/visitor-keys': 8.41.0 - debug: 4.4.1 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.37.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.7.0)) '@typescript-eslint/scope-manager': 8.37.0 '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.9.2) - eslint: 9.34.0(jiti@2.6.1) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.41.0 - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) - eslint: 9.34.0(jiti@2.6.1) - typescript: 5.9.2 + '@typescript-eslint/typescript-estree': 8.37.0(typescript@6.0.3) + eslint: 9.34.0(jiti@2.7.0) + typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -8853,69 +7757,36 @@ snapshots: '@typescript-eslint/types': 8.37.0 eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.41.0': - dependencies: - '@typescript-eslint/types': 8.41.0 - eslint-visitor-keys: 4.2.1 - - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - optional: true - - '@unrs/resolver-binding-android-arm64@1.11.1': - optional: true - - '@unrs/resolver-binding-darwin-arm64@1.11.1': - optional: true - - '@unrs/resolver-binding-darwin-x64@1.11.1': - optional: true - - '@unrs/resolver-binding-freebsd-x64@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260601.1': optional: true - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260601.1': optional: true - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260601.1': optional: true - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + '@typescript/native-preview-linux-arm@7.0.0-dev.20260601.1': optional: true - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + '@typescript/native-preview-linux-x64@7.0.0-dev.20260601.1': optional: true - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260601.1': optional: true - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + '@typescript/native-preview-win32-x64@7.0.0-dev.20260601.1': optional: true - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - dependencies: - '@napi-rs/wasm-runtime': 0.2.12 - optional: true - - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - optional: true - - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - optional: true - - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - optional: true + '@typescript/native-preview@7.0.0-dev.20260601.1': + optionalDependencies: + '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260601.1 + '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260601.1 + '@typescript/native-preview-linux-arm': 7.0.0-dev.20260601.1 + '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260601.1 + '@typescript/native-preview-linux-x64': 7.0.0-dev.20260601.1 + '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260601.1 + '@typescript/native-preview-win32-x64': 7.0.0-dev.20260601.1 '@vercel/analytics@1.6.1(next@16.0.7(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react@19.2.1)': optionalDependencies: @@ -8927,77 +7798,71 @@ snapshots: next: 16.0.7(react-dom@19.2.1(react@19.2.1))(react@19.2.1) react: 19.2.1 - '@vitest/coverage-v8@3.2.4(vitest@3.2.4)': + '@vitest/coverage-v8@4.1.8(vitest@4.1.8)': dependencies: - '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 - ast-v8-to-istanbul: 0.3.3 - debug: 4.4.1 + '@vitest/utils': 4.1.8 + ast-v8-to-istanbul: 1.0.3 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 - istanbul-reports: 3.1.7 - magic-string: 0.30.17 - magicast: 0.3.5 - std-env: 3.9.0 - test-exclude: 7.0.1 - tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/node@24.3.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(lightningcss@1.30.2) - transitivePeerDependencies: - - supports-color + istanbul-reports: 3.2.0 + magicast: 0.5.3 + obug: 2.1.1 + std-env: 4.1.0 + tinyrainbow: 3.1.0 + vitest: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(@vitest/ui@4.1.8)(vite@7.0.4(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)) - '@vitest/expect@3.2.4': + '@vitest/expect@4.1.8': dependencies: - '@types/chai': 5.2.2 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.2.1 - tinyrainbow: 2.0.0 + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.1.8 + '@vitest/utils': 4.1.8 + chai: 6.2.2 + tinyrainbow: 3.1.0 - '@vitest/mocker@3.2.4(vite@7.0.4(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2))': + '@vitest/mocker@4.1.8(vite@7.0.4(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0))': dependencies: - '@vitest/spy': 3.2.4 + '@vitest/spy': 4.1.8 estree-walker: 3.0.3 - magic-string: 0.30.17 + magic-string: 0.30.21 optionalDependencies: - vite: 7.0.4(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2) + vite: 7.0.4(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0) - '@vitest/pretty-format@3.2.4': + '@vitest/pretty-format@4.1.8': dependencies: - tinyrainbow: 2.0.0 + tinyrainbow: 3.1.0 - '@vitest/runner@3.2.4': + '@vitest/runner@4.1.8': dependencies: - '@vitest/utils': 3.2.4 + '@vitest/utils': 4.1.8 pathe: 2.0.3 - strip-literal: 3.0.0 - '@vitest/snapshot@3.2.4': + '@vitest/snapshot@4.1.8': dependencies: - '@vitest/pretty-format': 3.2.4 - magic-string: 0.30.17 + '@vitest/pretty-format': 4.1.8 + '@vitest/utils': 4.1.8 + magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@3.2.4': - dependencies: - tinyspy: 4.0.3 + '@vitest/spy@4.1.8': {} - '@vitest/ui@3.2.4(vitest@3.2.4)': + '@vitest/ui@4.1.8(vitest@4.1.8)': dependencies: - '@vitest/utils': 3.2.4 - fflate: 0.8.2 - flatted: 3.3.3 + '@vitest/utils': 4.1.8 + fflate: 0.8.3 + flatted: 3.4.2 pathe: 2.0.3 - sirv: 3.0.1 - tinyglobby: 0.2.14 - tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/node@24.3.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(lightningcss@1.30.2) + sirv: 3.0.2 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.0 + vitest: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(@vitest/ui@4.1.8)(vite@7.0.4(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)) - '@vitest/utils@3.2.4': + '@vitest/utils@4.1.8': dependencies: - '@vitest/pretty-format': 3.2.4 - loupe: 3.1.4 - tinyrainbow: 2.0.0 + '@vitest/pretty-format': 4.1.8 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 '@xboxreplay/errors@0.1.0': {} @@ -9008,93 +7873,99 @@ snapshots: transitivePeerDependencies: - debug - '@xhmikosr/archive-type@7.1.0': + '@xhmikosr/archive-type@8.0.1': dependencies: - file-type: 20.5.0 + file-type: 21.3.4 transitivePeerDependencies: - supports-color - '@xhmikosr/bin-check@7.1.0': + '@xhmikosr/bin-check@8.2.1': dependencies: - execa: 5.1.1 - isexe: 2.0.0 + execa: 9.6.1 + isexe: 4.0.0 - '@xhmikosr/bin-wrapper@13.2.0': + '@xhmikosr/bin-wrapper@14.2.5': dependencies: - '@xhmikosr/bin-check': 7.1.0 - '@xhmikosr/downloader': 15.2.0 - '@xhmikosr/os-filter-obj': 3.0.0 - bin-version-check: 5.1.0 + '@xhmikosr/bin-check': 8.2.1 + '@xhmikosr/downloader': 16.1.3 + '@xhmikosr/os-filter-obj': 4.1.0 + binary-version-check: 6.1.0 transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a - supports-color - '@xhmikosr/decompress-tar@8.1.0': + '@xhmikosr/decompress-tar@9.0.1': dependencies: - file-type: 20.5.0 - is-stream: 2.0.1 + file-type: 21.3.4 + is-stream: 4.0.1 tar-stream: 3.1.7 transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a - supports-color - '@xhmikosr/decompress-tarbz2@8.1.0': + '@xhmikosr/decompress-tarbz2@9.0.1': dependencies: - '@xhmikosr/decompress-tar': 8.1.0 - file-type: 20.5.0 - is-stream: 2.0.1 + '@xhmikosr/decompress-tar': 9.0.1 + file-type: 21.3.4 + is-stream: 4.0.1 seek-bzip: 2.0.0 unbzip2-stream: 1.4.3 transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a - supports-color - '@xhmikosr/decompress-targz@8.1.0': + '@xhmikosr/decompress-targz@9.0.1': dependencies: - '@xhmikosr/decompress-tar': 8.1.0 - file-type: 20.5.0 - is-stream: 2.0.1 + '@xhmikosr/decompress-tar': 9.0.1 + file-type: 21.3.4 + is-stream: 4.0.1 transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a - supports-color - '@xhmikosr/decompress-unzip@7.1.0': + '@xhmikosr/decompress-unzip@8.1.1': dependencies: - file-type: 20.5.0 - get-stream: 6.0.1 - yauzl: 3.2.0 + file-type: 21.3.4 + get-stream: 9.0.1 + yauzl: 3.3.2 transitivePeerDependencies: - supports-color - '@xhmikosr/decompress@10.2.0': + '@xhmikosr/decompress@11.1.3': dependencies: - '@xhmikosr/decompress-tar': 8.1.0 - '@xhmikosr/decompress-tarbz2': 8.1.0 - '@xhmikosr/decompress-targz': 8.1.0 - '@xhmikosr/decompress-unzip': 7.1.0 + '@xhmikosr/decompress-tar': 9.0.1 + '@xhmikosr/decompress-tarbz2': 9.0.1 + '@xhmikosr/decompress-targz': 9.0.1 + '@xhmikosr/decompress-unzip': 8.1.1 graceful-fs: 4.2.11 strip-dirs: 3.0.0 transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a - supports-color - '@xhmikosr/downloader@15.2.0': + '@xhmikosr/downloader@16.1.3': dependencies: - '@xhmikosr/archive-type': 7.1.0 - '@xhmikosr/decompress': 10.2.0 - content-disposition: 0.5.4 - defaults: 2.0.2 + '@xhmikosr/archive-type': 8.0.1 + '@xhmikosr/decompress': 11.1.3 + content-disposition: 2.0.1 ext-name: 5.0.0 - file-type: 20.5.0 - filenamify: 6.0.0 - get-stream: 6.0.1 - got: 13.0.0 + file-type: 21.3.4 + filenamify: 7.0.1 + get-stream: 9.0.1 + got: 14.6.6 transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a - supports-color - '@xhmikosr/os-filter-obj@3.0.0': - dependencies: - arch: 3.0.0 - - JSONStream@1.3.5: + '@xhmikosr/os-filter-obj@4.1.0': dependencies: - jsonparse: 1.3.1 - through: 2.3.8 + system-architecture: 1.0.0 abort-controller@3.0.0: dependencies: @@ -9102,11 +7973,11 @@ snapshots: abstract-logging@2.0.1: {} - acorn-jsx@5.3.2(acorn@8.15.0): + acorn-jsx@5.3.2(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 - acorn@8.15.0: {} + acorn@8.16.0: {} aes-js@3.1.2: {} @@ -9123,6 +7994,13 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 @@ -9146,10 +8024,6 @@ snapshots: ansi-regex@6.2.0: {} - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -9161,9 +8035,7 @@ snapshots: anymatch@3.1.3: dependencies: normalize-path: 3.0.0 - picomatch: 2.3.1 - - arch@3.0.0: {} + picomatch: 2.3.2 argparse@2.0.1: {} @@ -9171,94 +8043,19 @@ snapshots: dependencies: tslib: 2.8.1 - aria-query@5.3.2: {} - - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - - array-ify@1.0.0: {} - - array-includes@3.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - is-string: 1.1.1 - math-intrinsics: 1.1.0 - - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.1.0 - - array.prototype.findlastindex@1.2.6: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.1.0 - - array.prototype.flat@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-shim-unscopables: 1.1.0 - - array.prototype.flatmap@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-shim-unscopables: 1.1.0 - - array.prototype.tosorted@1.1.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-shim-unscopables: 1.1.0 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - asn1@0.2.3: {} assertion-error@2.0.1: {} - ast-types-flow@0.0.8: {} - ast-types@0.13.4: dependencies: tslib: 2.8.1 - ast-v8-to-istanbul@0.3.3: + ast-v8-to-istanbul@1.0.3: dependencies: - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 - js-tokens: 9.0.1 - - async-function@1.0.0: {} + js-tokens: 10.0.0 async@2.6.4: dependencies: @@ -9268,21 +8065,13 @@ snapshots: asynckit@0.4.0: {} - at-least-node@1.0.0: {} - atomic-sleep@1.0.0: {} - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - avvio@9.1.0: dependencies: '@fastify/error': 4.2.0 fastq: 1.19.1 - axe-core@4.10.3: {} - axios@0.21.4(debug@4.4.1): dependencies: follow-redirects: 1.15.11(debug@4.4.1) @@ -9291,20 +8080,17 @@ snapshots: axios@1.11.0: dependencies: - follow-redirects: 1.15.11(debug@4.4.1) + follow-redirects: 1.15.11 form-data: 4.0.4 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - axobject-query@4.1.0: {} - - b4a@1.6.7: {} + b4a@1.8.1: {} balanced-match@1.0.2: {} - bare-events@2.6.1: - optional: true + bare-events@2.8.3: {} base64-js@1.5.1: {} @@ -9312,30 +8098,24 @@ snapshots: before-after-hook@4.0.0: {} - bin-version-check@5.1.0: - dependencies: - bin-version: 6.0.0 - semver: 7.7.2 - semver-truncate: 3.0.0 + binary-extensions@2.3.0: {} - bin-version@6.0.0: + binary-version-check@6.1.0: dependencies: - execa: 5.1.1 - find-versions: 5.1.0 - - binary-extensions@2.3.0: {} + binary-version: 7.1.0 + semver: 7.8.1 + semver-truncate: 3.0.0 - bl@4.1.0: + binary-version@7.1.0: dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 + execa: 8.0.1 + find-versions: 6.0.0 blessed@0.1.81: {} bodec@0.1.0: {} - brace-expansion@1.1.12: + brace-expansion@1.1.15: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 @@ -9344,21 +8124,16 @@ snapshots: dependencies: balanced-match: 1.0.2 - braces@3.0.3: + brace-expansion@2.1.1: dependencies: - fill-range: 7.1.1 + balanced-match: 1.0.2 - browserslist@4.25.3: + braces@3.0.3: dependencies: - caniuse-lite: 1.0.30001737 - electron-to-chromium: 1.5.209 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.3) + fill-range: 7.1.1 bson@6.10.4: {} - buffer-crc32@0.2.13: {} - buffer-equal-constant-time@1.0.1: {} buffer-equal@1.0.1: {} @@ -9375,60 +8150,30 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - builtin-modules@5.0.0: {} - - cac@6.7.14: {} + byte-counter@0.1.0: {} cacheable-lookup@7.0.0: {} - cacheable-request@10.2.14: + cacheable-request@13.0.19: dependencies: - '@types/http-cache-semantics': 4.0.4 - get-stream: 6.0.1 + '@types/http-cache-semantics': 4.2.0 + get-stream: 9.0.1 http-cache-semantics: 4.2.0 - keyv: 4.5.4 + keyv: 5.6.0 mimic-response: 4.0.0 - normalize-url: 8.0.2 - responselike: 3.0.0 - - cachedir@2.3.0: {} + normalize-url: 8.1.1 + responselike: 4.0.2 call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - callsites@3.1.0: {} - caniuse-lite@1.0.30001737: {} - caniuse-lite@1.0.30001759: {} - chai@5.2.1: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.1.4 - pathval: 2.0.1 - - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 + chai@6.2.2: {} chalk@3.0.0: dependencies: @@ -9442,16 +8187,12 @@ snapshots: chalk@5.6.0: {} - change-case@5.4.4: {} - chardet@0.7.0: {} - chardet@2.1.0: {} + chardet@2.1.1: {} charm@0.1.2: {} - check-error@2.1.1: {} - chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -9464,8 +8205,6 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - ci-info@4.3.0: {} - class-transformer@0.5.1: {} class-validator@0.14.2: @@ -9474,22 +8213,10 @@ snapshots: libphonenumber-js: 1.12.10 validator: 13.15.15 - clean-regexp@1.0.0: - dependencies: - escape-string-regexp: 1.0.5 - - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - - cli-spinners@2.9.2: {} - cli-tableau@2.0.1: dependencies: chalk: 3.0.0 - cli-width@3.0.0: {} - cli-width@4.1.0: {} client-only@0.0.1: {} @@ -9498,26 +8225,12 @@ snapshots: dependencies: typanion: 3.14.0 - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - clone@1.0.4: {} - cluster-key-slot@1.1.2: {} - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} colorette@2.0.20: {} @@ -9534,31 +8247,6 @@ snapshots: commander@8.3.0: {} - commitizen@4.3.1(@types/node@24.3.0)(typescript@5.9.2): - dependencies: - cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0(@types/node@24.3.0)(typescript@5.9.2) - dedent: 0.7.0 - detect-indent: 6.1.0 - find-node-modules: 2.1.3 - find-root: 1.1.0 - fs-extra: 9.1.0 - glob: 7.2.3 - inquirer: 8.2.5 - is-utf8: 0.2.1 - lodash: 4.17.21 - minimist: 1.2.7 - strip-bom: 4.0.0 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - '@types/node' - - typescript - - compare-func@2.0.0: - dependencies: - array-ify: 1.0.0 - dot-prop: 5.3.0 - concat-map@0.0.1: {} consola@3.4.2: {} @@ -9567,45 +8255,16 @@ snapshots: dependencies: safe-buffer: 5.2.1 - conventional-changelog-angular@7.0.0: - dependencies: - compare-func: 2.0.0 + content-disposition@2.0.1: {} - conventional-changelog-conventionalcommits@7.0.2: - dependencies: - compare-func: 2.0.0 + content-type@2.0.0: {} - conventional-commit-types@3.0.0: {} + convert-hrtime@5.0.0: {} - conventional-commits-parser@5.0.0: - dependencies: - JSONStream: 1.3.5 - is-text-path: 2.0.0 - meow: 12.1.1 - split2: 4.2.0 + convert-source-map@2.0.0: {} cookie@1.0.2: {} - core-js-compat@3.45.1: - dependencies: - browserslist: 4.25.3 - - cosmiconfig-typescript-loader@6.1.0(@types/node@24.3.0)(cosmiconfig@9.0.0(typescript@5.9.2))(typescript@5.9.2): - dependencies: - '@types/node': 24.3.0 - cosmiconfig: 9.0.0(typescript@5.9.2) - jiti: 2.5.1 - typescript: 5.9.2 - - cosmiconfig@9.0.0(typescript@5.9.2): - dependencies: - env-paths: 2.2.1 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - parse-json: 5.2.0 - optionalDependencies: - typescript: 5.9.2 - croner@4.1.97: {} croner@8.1.2: {} @@ -9620,44 +8279,8 @@ snapshots: culvert@0.1.2: {} - cz-conventional-changelog@3.3.0(@types/node@24.3.0)(typescript@5.9.2): - dependencies: - chalk: 2.4.2 - commitizen: 4.3.1(@types/node@24.3.0)(typescript@5.9.2) - conventional-commit-types: 3.0.0 - lodash.map: 4.6.0 - longest: 2.0.1 - word-wrap: 1.2.5 - optionalDependencies: - '@commitlint/load': 19.8.1(@types/node@24.3.0)(typescript@5.9.2) - transitivePeerDependencies: - - '@types/node' - - typescript - - damerau-levenshtein@1.0.8: {} - - dargs@8.1.0: {} - data-uri-to-buffer@6.0.2: {} - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - date-fns@4.1.0: {} dayjs@1.11.15: {} @@ -9676,35 +8299,15 @@ snapshots: dependencies: ms: 2.1.3 - decompress-response@6.0.0: - dependencies: - mimic-response: 3.1.0 - - dedent@0.7.0: {} - - deep-eql@5.0.2: {} - - deep-is@0.1.4: {} - - defaults@1.0.4: + debug@4.4.3: dependencies: - clone: 1.0.4 - - defaults@2.0.2: {} - - defer-to-connect@2.0.1: {} + ms: 2.1.3 - define-data-property@1.1.4: + decompress-response@10.0.0: dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 + mimic-response: 4.0.0 - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 + deep-is@0.1.4: {} degenerator@5.0.1: dependencies: @@ -9720,10 +8323,6 @@ snapshots: dequal@2.0.3: {} - detect-file@1.0.0: {} - - detect-indent@6.1.0: {} - detect-libc@2.1.2: {} detect-node-es@1.1.0: {} @@ -9732,14 +8331,6 @@ snapshots: discord-api-types@0.38.22: {} - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - dot-prop@5.3.0: - dependencies: - is-obj: 2.0.0 - dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -9752,7 +8343,7 @@ snapshots: dependencies: safe-buffer: 5.2.1 - electron-to-chromium@1.5.209: {} + emnapi@1.10.0: {} emoji-regex@8.0.0: {} @@ -9760,330 +8351,79 @@ snapshots: endian-toggle@0.0.0: {} - enhanced-resolve@5.18.3: + enhanced-resolve@5.22.1: dependencies: graceful-fs: 4.2.11 - tapable: 2.3.0 + tapable: 2.3.3 enquirer@2.3.6: dependencies: ansi-colors: 4.1.3 - env-paths@2.2.1: {} - - error-ex@1.3.2: - dependencies: - is-arrayish: 0.2.1 - - es-abstract@1.24.0: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 - es-define-property@1.0.1: {} es-errors@1.3.0: {} - es-iterator-helpers@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-set-tostringtag: 2.1.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - iterator.prototype: 1.1.5 - safe-array-concat: 1.1.3 - - es-module-lexer@1.7.0: {} + es-module-lexer@2.1.0: {} es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-shim-unscopables@1.1.0: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - - es-toolkit@1.39.10: {} - - esbuild@0.25.6: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.6 - '@esbuild/android-arm': 0.25.6 - '@esbuild/android-arm64': 0.25.6 - '@esbuild/android-x64': 0.25.6 - '@esbuild/darwin-arm64': 0.25.6 - '@esbuild/darwin-x64': 0.25.6 - '@esbuild/freebsd-arm64': 0.25.6 - '@esbuild/freebsd-x64': 0.25.6 - '@esbuild/linux-arm': 0.25.6 - '@esbuild/linux-arm64': 0.25.6 - '@esbuild/linux-ia32': 0.25.6 - '@esbuild/linux-loong64': 0.25.6 - '@esbuild/linux-mips64el': 0.25.6 - '@esbuild/linux-ppc64': 0.25.6 - '@esbuild/linux-riscv64': 0.25.6 - '@esbuild/linux-s390x': 0.25.6 - '@esbuild/linux-x64': 0.25.6 - '@esbuild/netbsd-arm64': 0.25.6 - '@esbuild/netbsd-x64': 0.25.6 - '@esbuild/openbsd-arm64': 0.25.6 - '@esbuild/openbsd-x64': 0.25.6 - '@esbuild/openharmony-arm64': 0.25.6 - '@esbuild/sunos-x64': 0.25.6 - '@esbuild/win32-arm64': 0.25.6 - '@esbuild/win32-ia32': 0.25.6 - '@esbuild/win32-x64': 0.25.6 - - escalade@3.2.0: {} - - escape-html@1.0.3: {} - - escape-string-regexp@1.0.5: {} - - escape-string-regexp@4.0.0: {} - - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - - eslint-config-next@15.5.2(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2): - dependencies: - '@next/eslint-plugin-next': 15.5.2 - '@rushstack/eslint-patch': 1.12.0 - '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - eslint: 9.34.0(jiti@2.6.1) - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.6.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.34.0(jiti@2.6.1)) - eslint-plugin-react: 7.37.5(eslint@9.34.0(jiti@2.6.1)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.34.0(jiti@2.6.1)) - optionalDependencies: - typescript: 5.9.2 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - eslint-plugin-import-x - - supports-color - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.16.1 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.6.1)): - dependencies: - '@nolyfill/is-core-module': 1.0.39 - debug: 4.4.1 - eslint: 9.34.0(jiti@2.6.1) - get-tsconfig: 4.10.1 - is-bun-module: 2.0.0 - stable-hash: 0.0.5 - tinyglobby: 0.2.14 - unrs-resolver: 1.11.1 - optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.6.1)) - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.6.1)): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - eslint: 9.34.0(jiti@2.6.1) - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.6.1)) - transitivePeerDependencies: - - supports-color - - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.6.1)): - dependencies: - '@rtsao/scc': 1.1.0 - array-includes: 3.1.9 - array.prototype.findlastindex: 1.2.6 - array.prototype.flat: 1.3.3 - array.prototype.flatmap: 1.3.3 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 9.34.0(jiti@2.6.1) - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.6.1)) - hasown: 2.0.2 - is-core-module: 2.16.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.1 - semver: 6.3.1 - string.prototype.trimend: 1.0.9 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color + dependencies: + es-errors: 1.3.0 - eslint-plugin-jsx-a11y@6.10.2(eslint@9.34.0(jiti@2.6.1)): + es-set-tostringtag@2.1.0: dependencies: - aria-query: 5.3.2 - array-includes: 3.1.9 - array.prototype.flatmap: 1.3.3 - ast-types-flow: 0.0.8 - axe-core: 4.10.3 - axobject-query: 4.1.0 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - eslint: 9.34.0(jiti@2.6.1) + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - safe-regex-test: 1.1.0 - string.prototype.includes: 2.0.1 - eslint-plugin-license-header@0.8.0: - dependencies: - requireindex: 1.2.0 + es-toolkit@1.47.0: {} - eslint-plugin-react-hooks@5.2.0(eslint@9.34.0(jiti@2.6.1)): - dependencies: - eslint: 9.34.0(jiti@2.6.1) + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + + escape-html@1.0.3: {} + + escape-string-regexp@4.0.0: {} - eslint-plugin-react@7.37.5(eslint@9.34.0(jiti@2.6.1)): + escodegen@2.1.0: dependencies: - array-includes: 3.1.9 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.3 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.2.1 - eslint: 9.34.0(jiti@2.6.1) + esprima: 4.0.1 estraverse: 5.3.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.9 - object.fromentries: 2.0.8 - object.values: 1.2.1 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.12 - string.prototype.repeat: 1.0.0 - - eslint-plugin-unicorn@60.0.0(eslint@9.34.0(jiti@2.6.1)): - dependencies: - '@babel/helper-validator-identifier': 7.27.1 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.6.1)) - '@eslint/plugin-kit': 0.3.5 - change-case: 5.4.4 - ci-info: 4.3.0 - clean-regexp: 1.0.0 - core-js-compat: 3.45.1 - eslint: 9.34.0(jiti@2.6.1) - esquery: 1.6.0 - find-up-simple: 1.0.1 - globals: 16.3.0 - indent-string: 5.0.0 - is-builtin-module: 5.0.0 - jsesc: 3.1.0 - pluralize: 8.0.0 - regexp-tree: 0.1.27 - regjsparser: 0.12.0 - semver: 7.7.2 - strip-indent: 4.0.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 - eslint-plugin-unused-imports@4.2.0(@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1)): + eslint-plugin-license-header@0.9.0(eslint@9.34.0(jiti@2.7.0)): dependencies: - eslint: 9.34.0(jiti@2.6.1) - optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + eslint: 9.34.0(jiti@2.7.0) + requireindex: 1.2.0 eslint-scope@8.4.0: dependencies: @@ -10094,30 +8434,30 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.34.0(jiti@2.6.1): + eslint@9.34.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.6.1)) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.21.0 + '@eslint-community/eslint-utils': 4.9.1(eslint@9.34.0(jiti@2.7.0)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.2 '@eslint/config-helpers': 0.3.1 '@eslint/core': 0.15.2 - '@eslint/eslintrc': 3.3.1 + '@eslint/eslintrc': 3.3.5 '@eslint/js': 9.34.0 '@eslint/plugin-kit': 0.3.5 - '@humanfs/node': 0.16.6 + '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/json-schema': 7.0.15 - ajv: 6.12.6 + ajv: 6.15.0 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.1 + debug: 4.4.3 escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - esquery: 1.6.0 + esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 8.0.0 @@ -10128,23 +8468,23 @@ snapshots: is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 lodash.merge: 4.6.2 - minimatch: 3.1.2 + minimatch: 3.1.5 natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.6.1 + jiti: 2.7.0 transitivePeerDependencies: - supports-color espree@10.4.0: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 4.2.1 esprima@4.0.1: {} - esquery@1.6.0: + esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -10158,7 +8498,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esutils@2.0.3: {} @@ -10168,25 +8508,42 @@ snapshots: eventemitter2@6.4.9: {} + events-universal@1.0.1: + dependencies: + bare-events: 2.8.3 + transitivePeerDependencies: + - bare-abort-controller + events@3.3.0: {} - execa@5.1.1: + execa@8.0.1: dependencies: cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 - expand-tilde@2.0.2: + execa@9.6.1: dependencies: - homedir-polyfill: 1.0.3 + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.3.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.2 - expect-type@1.2.2: {} + expect-type@1.3.0: {} ext-list@2.2.2: dependencies: @@ -10209,22 +8566,12 @@ snapshots: transitivePeerDependencies: - debug - fast-content-type-parse@3.0.0: {} - fast-decode-uri-component@1.0.1: {} fast-deep-equal@3.1.3: {} fast-fifo@1.3.2: {} - fast-glob@3.3.1: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -10256,8 +8603,18 @@ snapshots: fast-safe-stringify@2.1.1: {} + fast-string-truncated-width@3.0.3: {} + + fast-string-width@3.0.2: + dependencies: + fast-string-truncated-width: 3.0.3 + fast-uri@3.1.0: {} + fast-wrap-ansi@0.2.2: + dependencies: + fast-string-width: 3.0.2 + fastify-plugin@5.0.1: {} fastify@5.4.0: @@ -10302,21 +8659,23 @@ snapshots: fclone@1.0.11: {} - fdir@6.4.6(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.4): optionalDependencies: - picomatch: 4.0.3 + picomatch: 4.0.4 fflate@0.8.2: {} - figures@3.2.0: + fflate@0.8.3: {} + + figures@6.1.0: dependencies: - escape-string-regexp: 1.0.5 + is-unicode-supported: 2.1.0 file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 - file-type@20.5.0: + file-type@21.0.0: dependencies: '@tokenizer/inflate': 0.2.7 strtok3: 10.3.4 @@ -10325,20 +8684,20 @@ snapshots: transitivePeerDependencies: - supports-color - file-type@21.0.0: + file-type@21.3.4: dependencies: - '@tokenizer/inflate': 0.2.7 - strtok3: 10.3.4 - token-types: 6.1.1 + '@tokenizer/inflate': 0.4.1 + strtok3: 10.3.5 + token-types: 6.1.2 uint8array-extras: 1.5.0 transitivePeerDependencies: - supports-color - filename-reserved-regex@3.0.0: {} + filename-reserved-regex@4.0.0: {} - filenamify@6.0.0: + filenamify@7.0.1: dependencies: - filename-reserved-regex: 3.0.0 + filename-reserved-regex: 4.0.0 fill-range@7.1.1: dependencies: @@ -10350,43 +8709,24 @@ snapshots: fast-querystring: 1.1.2 safe-regex2: 5.0.0 - find-node-modules@2.1.3: - dependencies: - findup-sync: 4.0.0 - merge: 2.1.1 - - find-root@1.1.0: {} - - find-up-simple@1.0.1: {} - find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - find-up@7.0.0: - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - unicorn-magic: 0.1.0 - - find-versions@5.1.0: + find-versions@6.0.0: dependencies: semver-regex: 4.0.5 - - findup-sync@4.0.0: - dependencies: - detect-file: 1.0.0 - is-glob: 4.0.3 - micromatch: 4.0.8 - resolve-dir: 1.0.1 + super-regex: 1.1.0 flat-cache@4.0.1: dependencies: - flatted: 3.3.3 + flatted: 3.4.2 keyv: 4.5.4 - flatted@3.3.3: {} + flatted@3.4.2: {} + + follow-redirects@1.15.11: {} follow-redirects@1.15.11(debug@4.3.7): optionalDependencies: @@ -10396,16 +8736,12 @@ snapshots: optionalDependencies: debug: 4.4.1 - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 - form-data-encoder@2.1.4: {} + form-data-encoder@4.1.0: {} form-data@4.0.4: dependencies: @@ -10424,35 +8760,15 @@ snapshots: react: 19.2.1 react-dom: 19.2.1(react@19.2.1) - fs-extra@9.1.0: - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - - fs.realpath@1.0.0: {} - fsevents@2.3.3: optional: true function-bind@1.1.2: {} - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 - - functions-have-names@1.2.3: {} + function-timeout@1.0.2: {} fuse.js@7.1.0: {} - get-caller-file@2.0.5: {} - get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -10473,23 +8789,18 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-stream@6.0.1: {} - - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 + get-stream@8.0.1: {} - get-tsconfig@4.10.1: + get-stream@9.0.1: dependencies: - resolve-pkg-maps: 1.0.0 + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 get-uri@6.0.5: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -10497,12 +8808,6 @@ snapshots: optionalDependencies: js-git: 0.7.8 - git-raw-commits@4.0.0: - dependencies: - dargs: 8.1.0 - meow: 12.1.1 - split2: 4.2.0 - git-sha1@0.1.2: {} glob-parent@5.1.2: @@ -10513,15 +8818,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.4.5: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - glob@11.0.3: dependencies: foreground-child: 3.3.1 @@ -10531,62 +8827,27 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 2.0.0 - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - global-directory@4.0.1: - dependencies: - ini: 4.1.1 - - global-modules@1.0.0: - dependencies: - global-prefix: 1.0.2 - is-windows: 1.0.2 - resolve-dir: 1.0.1 - - global-prefix@1.0.2: - dependencies: - expand-tilde: 2.0.2 - homedir-polyfill: 1.0.3 - ini: 1.3.8 - is-windows: 1.0.2 - which: 1.3.1 - globals@14.0.0: {} - globals@16.3.0: {} - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - gopd@1.2.0: {} - got@13.0.0: + got@14.6.6: dependencies: - '@sindresorhus/is': 5.6.0 - '@szmarczak/http-timer': 5.0.1 + '@sindresorhus/is': 7.2.0 + byte-counter: 0.1.0 cacheable-lookup: 7.0.0 - cacheable-request: 10.2.14 - decompress-response: 6.0.0 - form-data-encoder: 2.1.4 - get-stream: 6.0.1 + cacheable-request: 13.0.19 + decompress-response: 10.0.0 + form-data-encoder: 4.1.0 http2-wrapper: 2.2.1 + keyv: 5.6.0 lowercase-keys: 3.0.0 - p-cancelable: 3.0.0 - responselike: 3.0.0 + p-cancelable: 4.0.1 + responselike: 4.0.2 + type-fest: 4.41.0 graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - handlebars@4.7.8: dependencies: minimist: 1.2.8 @@ -10596,20 +8857,8 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 - has-bigints@1.1.0: {} - - has-flag@3.0.0: {} - has-flag@4.0.0: {} - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -10620,10 +8869,6 @@ snapshots: dependencies: function-bind: 1.1.2 - homedir-polyfill@1.0.3: - dependencies: - parse-passwd: 1.0.0 - html-escaper@2.0.2: {} http-cache-semantics@4.2.0: {} @@ -10639,7 +8884,7 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -10655,7 +8900,9 @@ snapshots: transitivePeerDependencies: - supports-color - human-signals@2.1.0: {} + human-signals@5.0.0: {} + + human-signals@8.0.1: {} i18next-fs-backend@2.6.0: {} @@ -10667,7 +8914,7 @@ snapshots: dependencies: safer-buffer: 2.1.2 - iconv-lite@0.6.3: + iconv-lite@0.7.2: dependencies: safer-buffer: 2.1.2 @@ -10675,8 +8922,6 @@ snapshots: ignore@5.3.2: {} - ignore@7.0.5: {} - immediate@3.0.6: {} import-fresh@3.3.1: @@ -10684,23 +8929,12 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - import-meta-resolve@4.1.0: {} - imurmurhash@0.1.4: {} - indent-string@5.0.0: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - inherits@2.0.4: {} ini@1.3.8: {} - ini@4.1.1: {} - inquirer@10.2.2: dependencies: '@inquirer/core': 9.2.1 @@ -10712,34 +8946,10 @@ snapshots: run-async: 3.0.0 rxjs: 7.8.2 - inquirer@8.2.5: - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-width: 3.0.0 - external-editor: 3.1.0 - figures: 3.2.0 - lodash: 4.17.21 - mute-stream: 0.0.8 - ora: 5.4.1 - run-async: 2.4.1 - rxjs: 7.8.2 - string-width: 4.2.3 - strip-ansi: 6.0.1 - through: 2.3.8 - wrap-ansi: 7.0.0 - inspect-with-kind@1.0.5: dependencies: kind-of: 6.0.3 - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 - ioredis@5.7.0: dependencies: '@ioredis/commands': 1.3.1 @@ -10758,153 +8968,40 @@ snapshots: ipaddr.js@2.2.0: {} - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-arrayish@0.2.1: {} - - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-builtin-module@5.0.0: - dependencies: - builtin-modules: 5.0.0 - - is-bun-module@2.0.0: - dependencies: - semver: 7.7.2 - - is-callable@1.2.7: {} - is-class@0.0.9: {} is-core-module@2.16.1: dependencies: hasown: 2.0.2 - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-extglob@2.1.1: {} - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - is-fullwidth-code-point@3.0.0: {} - is-generator-function@1.1.0: - dependencies: - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - is-interactive@1.0.0: {} - - is-map@2.0.3: {} - - is-negative-zero@2.0.3: {} - - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-number@7.0.0: {} - is-obj@2.0.0: {} - is-plain-obj@1.1.0: {} - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - - is-stream@2.0.1: {} - - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-text-path@2.0.0: - dependencies: - text-extensions: 2.4.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.19 - - is-unicode-supported@0.1.0: {} - - is-utf8@0.2.1: {} - - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 + is-plain-obj@4.1.0: {} - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 + is-stream@3.0.0: {} - is-windows@1.0.2: {} + is-stream@4.0.1: {} - isarray@2.0.5: {} + is-unicode-supported@2.1.0: {} isexe@2.0.0: {} + isexe@4.0.0: {} + istanbul-lib-coverage@3.2.2: {} istanbul-lib-report@3.0.1: @@ -10913,43 +9010,18 @@ snapshots: make-dir: 4.0.0 supports-color: 7.2.0 - istanbul-lib-source-maps@5.0.6: - dependencies: - '@jridgewell/trace-mapping': 0.3.29 - debug: 4.4.1 - istanbul-lib-coverage: 3.2.2 - transitivePeerDependencies: - - supports-color - - istanbul-reports@3.1.7: + istanbul-reports@3.2.0: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 iterare@1.2.1: {} - iterator.prototype@1.1.5: - dependencies: - define-data-property: 1.1.4 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - has-symbols: 1.1.0 - set-function-name: 2.0.2 - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - jackspeak@4.1.1: dependencies: '@isaacs/cliui': 8.0.2 - jiti@2.5.1: {} - - jiti@2.6.1: {} + jiti@2.7.0: {} js-git@0.7.8: dependencies: @@ -10958,22 +9030,22 @@ snapshots: git-sha1: 0.1.2 pako: 0.2.9 - js-tokens@4.0.0: {} - - js-tokens@9.0.1: {} + js-tokens@10.0.0: {} js-yaml@4.1.0: dependencies: argparse: 2.0.1 - jsesc@3.0.2: {} + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 - jsesc@3.1.0: {} + js-yaml@4.2.0: + dependencies: + argparse: 2.0.1 json-buffer@3.0.1: {} - json-parse-even-better-errors@2.3.1: {} - json-schema-ref-resolver@2.0.1: dependencies: dequal: 2.0.3 @@ -10987,17 +9059,7 @@ snapshots: json-stringify-safe@5.0.1: optional: true - json5@1.0.2: - dependencies: - minimist: 1.2.8 - - jsonfile@6.1.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - - jsonparse@1.3.1: {} + json-with-bigint@3.5.8: {} jsonwebtoken@9.0.2: dependencies: @@ -11012,13 +9074,6 @@ snapshots: ms: 2.1.3 semver: 7.7.2 - jsx-ast-utils@3.3.5: - dependencies: - array-includes: 3.1.9 - array.prototype.flat: 1.3.3 - object.assign: 4.1.7 - object.values: 1.2.1 - jwa@1.4.2: dependencies: buffer-equal-constant-time: 1.0.1 @@ -11036,13 +9091,11 @@ snapshots: dependencies: json-buffer: 3.0.1 - kind-of@6.0.3: {} - - language-subtag-registry@0.3.23: {} - - language-tags@1.0.9: + keyv@5.6.0: dependencies: - language-subtag-registry: 0.3.23 + '@keyv/serialize': 1.1.1 + + kind-of@6.0.3: {} levn@0.4.1: dependencies: @@ -11061,56 +9114,54 @@ snapshots: process-warning: 4.0.1 set-cookie-parser: 2.7.1 - lightningcss-android-arm64@1.30.2: + lightningcss-android-arm64@1.32.0: optional: true - lightningcss-darwin-arm64@1.30.2: + lightningcss-darwin-arm64@1.32.0: optional: true - lightningcss-darwin-x64@1.30.2: + lightningcss-darwin-x64@1.32.0: optional: true - lightningcss-freebsd-x64@1.30.2: + lightningcss-freebsd-x64@1.32.0: optional: true - lightningcss-linux-arm-gnueabihf@1.30.2: + lightningcss-linux-arm-gnueabihf@1.32.0: optional: true - lightningcss-linux-arm64-gnu@1.30.2: + lightningcss-linux-arm64-gnu@1.32.0: optional: true - lightningcss-linux-arm64-musl@1.30.2: + lightningcss-linux-arm64-musl@1.32.0: optional: true - lightningcss-linux-x64-gnu@1.30.2: + lightningcss-linux-x64-gnu@1.32.0: optional: true - lightningcss-linux-x64-musl@1.30.2: + lightningcss-linux-x64-musl@1.32.0: optional: true - lightningcss-win32-arm64-msvc@1.30.2: + lightningcss-win32-arm64-msvc@1.32.0: optional: true - lightningcss-win32-x64-msvc@1.30.2: + lightningcss-win32-x64-msvc@1.32.0: optional: true - lightningcss@1.30.2: + lightningcss@1.32.0: dependencies: detect-libc: 2.1.2 optionalDependencies: - lightningcss-android-arm64: 1.30.2 - lightningcss-darwin-arm64: 1.30.2 - lightningcss-darwin-x64: 1.30.2 - lightningcss-freebsd-x64: 1.30.2 - lightningcss-linux-arm-gnueabihf: 1.30.2 - lightningcss-linux-arm64-gnu: 1.30.2 - lightningcss-linux-arm64-musl: 1.30.2 - lightningcss-linux-x64-gnu: 1.30.2 - lightningcss-linux-x64-musl: 1.30.2 - lightningcss-win32-arm64-msvc: 1.30.2 - lightningcss-win32-x64-msvc: 1.30.2 - - lines-and-columns@1.2.4: {} + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 load-esm@1.0.2: {} @@ -11122,12 +9173,6 @@ snapshots: dependencies: p-locate: 5.0.0 - locate-path@7.2.0: - dependencies: - p-locate: 6.0.0 - - lodash.camelcase@4.3.0: {} - lodash.defaults@4.2.0: {} lodash.includes@4.3.0: {} @@ -11144,47 +9189,18 @@ snapshots: lodash.isstring@4.0.1: {} - lodash.kebabcase@4.1.1: {} - - lodash.map@4.6.0: {} - lodash.merge@4.6.2: {} - lodash.mergewith@4.6.2: {} - lodash.once@4.1.1: {} lodash.reduce@4.6.0: {} - lodash.snakecase@4.1.1: {} - - lodash.startcase@4.4.0: {} - - lodash.uniq@4.5.0: {} - - lodash.upperfirst@4.3.1: {} - - lodash@4.17.21: {} - - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - - loglevel@1.9.2: {} - - longest@2.0.1: {} - - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 + lodash@4.17.21: {} - loupe@3.1.4: {} + loglevel@1.9.2: {} lowercase-keys@3.0.0: {} - lru-cache@10.4.3: {} - lru-cache@11.1.0: {} lru-cache@6.0.0: @@ -11197,40 +9213,38 @@ snapshots: macaddress@0.5.3: {} - magic-string@0.30.17: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 - magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magicast@0.3.5: + magicast@0.5.3: dependencies: - '@babel/parser': 7.28.0 - '@babel/types': 7.28.1 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 source-map-js: 1.2.1 + make-asynchronous@1.1.0: + dependencies: + p-event: 6.0.1 + type-fest: 4.41.0 + web-worker: 1.5.0 + make-dir@4.0.0: dependencies: - semver: 7.7.2 + semver: 7.8.1 math-intrinsics@1.1.0: {} memory-pager@1.5.0: {} - meow@12.1.1: {} - merge-stream@2.0.0: {} merge2@1.4.1: {} - merge@2.1.1: {} - micromatch@4.0.8: dependencies: braces: 3.0.3 - picomatch: 2.3.1 + picomatch: 2.3.2 mime-db@1.52.0: {} @@ -11242,14 +9256,10 @@ snapshots: mime@3.0.0: {} - mimic-fn@2.1.0: {} - - mimic-response@3.1.0: {} + mimic-fn@4.0.0: {} mimic-response@4.0.0: {} - min-indent@1.0.1: {} - minecraft-data@3.93.0: {} minecraft-folder-path@1.2.0: {} @@ -11283,15 +9293,17 @@ snapshots: dependencies: '@isaacs/brace-expansion': 5.0.0 - minimatch@3.1.2: + minimatch@3.1.5: dependencies: - brace-expansion: 1.1.12 + brace-expansion: 1.1.15 minimatch@9.0.5: dependencies: brace-expansion: 2.0.2 - minimist@1.2.7: {} + minimatch@9.0.9: + dependencies: + brace-expansion: 2.1.1 minimist@1.2.8: {} @@ -11369,11 +9381,11 @@ snapshots: mute-stream@1.0.0: {} - mute-stream@2.0.0: {} + mute-stream@3.0.0: {} nanoid@3.3.11: {} - napi-postinstall@0.3.3: {} + nanoid@3.3.12: {} natural-compare@1.4.0: {} @@ -11423,71 +9435,30 @@ snapshots: dependencies: whatwg-url: 5.0.0 - node-releases@2.0.19: {} - node-rsa@0.4.2: dependencies: asn1: 0.2.3 normalize-path@3.0.0: {} - normalize-url@8.0.2: {} - - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - - object-assign@4.1.1: {} - - object-inspect@1.13.4: {} - - object-keys@1.1.1: {} - - object.assign@4.1.7: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - object.entries@1.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 + normalize-url@8.1.1: {} - object.fromentries@2.0.8: + npm-run-path@5.3.0: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 + path-key: 4.0.0 - object.groupby@1.0.3: + npm-run-path@6.0.0: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 + path-key: 4.0.0 + unicorn-magic: 0.3.0 - object.values@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 + obug@2.1.1: {} on-exit-leak-free@2.1.2: {} - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - onetime@5.1.2: + onetime@6.0.0: dependencies: - mimic-fn: 2.1.0 + mimic-fn: 4.0.0 optionator@0.9.4: dependencies: @@ -11498,49 +9469,75 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - ora@5.4.1: - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - os-tmpdir@1.0.2: {} - own-keys@1.0.1: + oxfmt@0.53.0: dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - - p-cancelable@3.0.0: {} + tinypool: 2.1.0 + optionalDependencies: + '@oxfmt/binding-android-arm-eabi': 0.53.0 + '@oxfmt/binding-android-arm64': 0.53.0 + '@oxfmt/binding-darwin-arm64': 0.53.0 + '@oxfmt/binding-darwin-x64': 0.53.0 + '@oxfmt/binding-freebsd-x64': 0.53.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.53.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.53.0 + '@oxfmt/binding-linux-arm64-gnu': 0.53.0 + '@oxfmt/binding-linux-arm64-musl': 0.53.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.53.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.53.0 + '@oxfmt/binding-linux-riscv64-musl': 0.53.0 + '@oxfmt/binding-linux-s390x-gnu': 0.53.0 + '@oxfmt/binding-linux-x64-gnu': 0.53.0 + '@oxfmt/binding-linux-x64-musl': 0.53.0 + '@oxfmt/binding-openharmony-arm64': 0.53.0 + '@oxfmt/binding-win32-arm64-msvc': 0.53.0 + '@oxfmt/binding-win32-ia32-msvc': 0.53.0 + '@oxfmt/binding-win32-x64-msvc': 0.53.0 + + oxlint@1.68.0: + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.68.0 + '@oxlint/binding-android-arm64': 1.68.0 + '@oxlint/binding-darwin-arm64': 1.68.0 + '@oxlint/binding-darwin-x64': 1.68.0 + '@oxlint/binding-freebsd-x64': 1.68.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.68.0 + '@oxlint/binding-linux-arm-musleabihf': 1.68.0 + '@oxlint/binding-linux-arm64-gnu': 1.68.0 + '@oxlint/binding-linux-arm64-musl': 1.68.0 + '@oxlint/binding-linux-ppc64-gnu': 1.68.0 + '@oxlint/binding-linux-riscv64-gnu': 1.68.0 + '@oxlint/binding-linux-riscv64-musl': 1.68.0 + '@oxlint/binding-linux-s390x-gnu': 1.68.0 + '@oxlint/binding-linux-x64-gnu': 1.68.0 + '@oxlint/binding-linux-x64-musl': 1.68.0 + '@oxlint/binding-openharmony-arm64': 1.68.0 + '@oxlint/binding-win32-arm64-msvc': 1.68.0 + '@oxlint/binding-win32-ia32-msvc': 1.68.0 + '@oxlint/binding-win32-x64-msvc': 1.68.0 + + p-cancelable@4.0.1: {} + + p-event@6.0.1: + dependencies: + p-timeout: 6.1.4 p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - p-limit@4.0.0: - dependencies: - yocto-queue: 1.2.1 - p-locate@5.0.0: dependencies: p-limit: 3.1.0 - p-locate@6.0.0: - dependencies: - p-limit: 4.0.0 + p-timeout@6.1.4: {} pac-proxy-agent@7.2.0: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.4 - debug: 4.4.1 + debug: 4.4.3 get-uri: 6.0.5 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -11564,29 +9561,15 @@ snapshots: parenthesis@3.1.8: {} - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.27.1 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - parse-passwd@1.0.0: {} + parse-ms@4.0.0: {} path-exists@4.0.0: {} - path-exists@5.0.0: {} - - path-is-absolute@1.0.1: {} - path-key@3.1.1: {} - path-parse@1.0.7: {} + path-key@4.0.0: {} - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 + path-parse@1.0.7: {} path-scurry@2.0.0: dependencies: @@ -11597,15 +9580,13 @@ snapshots: pathe@2.0.3: {} - pathval@2.0.1: {} - pend@1.2.0: {} picocolors@1.1.1: {} - picomatch@2.3.1: {} + picomatch@2.3.2: {} - picomatch@4.0.3: {} + picomatch@4.0.4: {} pidusage@2.0.21: dependencies: @@ -11640,8 +9621,6 @@ snapshots: optionalDependencies: '@napi-rs/nice': 1.1.1 - pluralize@8.0.0: {} - pm2-axon-rpc@0.7.1: dependencies: debug: 4.4.1 @@ -11715,22 +9694,24 @@ snapshots: - supports-color - utf-8-validate - possible-typed-array-names@1.1.0: {} - postcss@8.4.31: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.6: + postcss@8.5.15: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.12 picocolors: 1.1.1 source-map-js: 1.2.1 prelude-ls@1.2.1: {} + pretty-ms@9.3.0: + dependencies: + parse-ms: 4.0.0 + prismarine-auth@2.7.0: dependencies: '@azure/msal-node': 2.16.2 @@ -11794,12 +9775,6 @@ snapshots: dependencies: read: 1.0.7 - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - protodef-validator@1.4.0: dependencies: ajv: 6.12.6 @@ -11813,7 +9788,7 @@ snapshots: proxy-agent@6.4.0: dependencies: agent-base: 7.1.4 - debug: 4.4.1 + debug: 4.4.3 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 7.18.3 @@ -11845,34 +9820,32 @@ snapshots: react: 19.2.1 scheduler: 0.27.0 - react-is@16.13.1: {} - - react-remove-scroll-bar@2.3.8(@types/react@19.2.7)(react@19.2.1): + react-remove-scroll-bar@2.3.8(@types/react@19.2.16)(react@19.2.1): dependencies: react: 19.2.1 - react-style-singleton: 2.2.3(@types/react@19.2.7)(react@19.2.1) + react-style-singleton: 2.2.3(@types/react@19.2.16)(react@19.2.1) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.16 - react-remove-scroll@2.7.1(@types/react@19.2.7)(react@19.2.1): + react-remove-scroll@2.7.1(@types/react@19.2.16)(react@19.2.1): dependencies: react: 19.2.1 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.7)(react@19.2.1) - react-style-singleton: 2.2.3(@types/react@19.2.7)(react@19.2.1) + react-remove-scroll-bar: 2.3.8(@types/react@19.2.16)(react@19.2.1) + react-style-singleton: 2.2.3(@types/react@19.2.16)(react@19.2.1) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.7)(react@19.2.1) - use-sidecar: 1.1.3(@types/react@19.2.7)(react@19.2.1) + use-callback-ref: 1.3.3(@types/react@19.2.16)(react@19.2.1) + use-sidecar: 1.1.3(@types/react@19.2.16)(react@19.2.1) optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.16 - react-style-singleton@2.2.3(@types/react@19.2.7)(react@19.2.1): + react-style-singleton@2.2.3(@types/react@19.2.16)(react@19.2.1): dependencies: get-nonce: 1.0.1 react: 19.2.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.16 react@19.2.1: {} @@ -11880,12 +9853,6 @@ snapshots: dependencies: mute-stream: 0.0.8 - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - readable-stream@4.7.0: dependencies: abort-controller: 3.0.0 @@ -11896,7 +9863,7 @@ snapshots: readdirp@3.6.0: dependencies: - picomatch: 2.3.1 + picomatch: 2.3.2 real-require@0.2.0: {} @@ -11908,34 +9875,6 @@ snapshots: reflect-metadata@0.2.2: {} - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - regexp-tree@0.1.27: {} - - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 - - regjsparser@0.12.0: - dependencies: - jsesc: 3.0.2 - - require-directory@2.1.1: {} - require-from-string@2.0.2: {} require-in-the-middle@5.2.0: @@ -11950,38 +9889,18 @@ snapshots: resolve-alpn@1.2.1: {} - resolve-dir@1.0.1: - dependencies: - expand-tilde: 2.0.2 - global-modules: 1.0.0 - resolve-from@4.0.0: {} - resolve-from@5.0.0: {} - - resolve-pkg-maps@1.0.0: {} - resolve@1.22.10: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.5: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - responselike@3.0.0: + responselike@4.0.2: dependencies: lowercase-keys: 3.0.0 - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - ret@0.1.15: {} ret@0.5.0: {} @@ -11990,60 +9909,36 @@ snapshots: rfdc@1.4.1: {} - rollup@4.45.1: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.45.1 - '@rollup/rollup-android-arm64': 4.45.1 - '@rollup/rollup-darwin-arm64': 4.45.1 - '@rollup/rollup-darwin-x64': 4.45.1 - '@rollup/rollup-freebsd-arm64': 4.45.1 - '@rollup/rollup-freebsd-x64': 4.45.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.45.1 - '@rollup/rollup-linux-arm-musleabihf': 4.45.1 - '@rollup/rollup-linux-arm64-gnu': 4.45.1 - '@rollup/rollup-linux-arm64-musl': 4.45.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.45.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.45.1 - '@rollup/rollup-linux-riscv64-gnu': 4.45.1 - '@rollup/rollup-linux-riscv64-musl': 4.45.1 - '@rollup/rollup-linux-s390x-gnu': 4.45.1 - '@rollup/rollup-linux-x64-gnu': 4.45.1 - '@rollup/rollup-linux-x64-musl': 4.45.1 - '@rollup/rollup-win32-arm64-msvc': 4.45.1 - '@rollup/rollup-win32-ia32-msvc': 4.45.1 - '@rollup/rollup-win32-x64-msvc': 4.45.1 - fsevents: 2.3.3 - - rollup@4.49.0: + rollup@4.61.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.49.0 - '@rollup/rollup-android-arm64': 4.49.0 - '@rollup/rollup-darwin-arm64': 4.49.0 - '@rollup/rollup-darwin-x64': 4.49.0 - '@rollup/rollup-freebsd-arm64': 4.49.0 - '@rollup/rollup-freebsd-x64': 4.49.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.49.0 - '@rollup/rollup-linux-arm-musleabihf': 4.49.0 - '@rollup/rollup-linux-arm64-gnu': 4.49.0 - '@rollup/rollup-linux-arm64-musl': 4.49.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.49.0 - '@rollup/rollup-linux-ppc64-gnu': 4.49.0 - '@rollup/rollup-linux-riscv64-gnu': 4.49.0 - '@rollup/rollup-linux-riscv64-musl': 4.49.0 - '@rollup/rollup-linux-s390x-gnu': 4.49.0 - '@rollup/rollup-linux-x64-gnu': 4.49.0 - '@rollup/rollup-linux-x64-musl': 4.49.0 - '@rollup/rollup-win32-arm64-msvc': 4.49.0 - '@rollup/rollup-win32-ia32-msvc': 4.49.0 - '@rollup/rollup-win32-x64-msvc': 4.49.0 + '@rollup/rollup-android-arm-eabi': 4.61.0 + '@rollup/rollup-android-arm64': 4.61.0 + '@rollup/rollup-darwin-arm64': 4.61.0 + '@rollup/rollup-darwin-x64': 4.61.0 + '@rollup/rollup-freebsd-arm64': 4.61.0 + '@rollup/rollup-freebsd-x64': 4.61.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.61.0 + '@rollup/rollup-linux-arm-musleabihf': 4.61.0 + '@rollup/rollup-linux-arm64-gnu': 4.61.0 + '@rollup/rollup-linux-arm64-musl': 4.61.0 + '@rollup/rollup-linux-loong64-gnu': 4.61.0 + '@rollup/rollup-linux-loong64-musl': 4.61.0 + '@rollup/rollup-linux-ppc64-gnu': 4.61.0 + '@rollup/rollup-linux-ppc64-musl': 4.61.0 + '@rollup/rollup-linux-riscv64-gnu': 4.61.0 + '@rollup/rollup-linux-riscv64-musl': 4.61.0 + '@rollup/rollup-linux-s390x-gnu': 4.61.0 + '@rollup/rollup-linux-x64-gnu': 4.61.0 + '@rollup/rollup-linux-x64-musl': 4.61.0 + '@rollup/rollup-openbsd-x64': 4.61.0 + '@rollup/rollup-openharmony-arm64': 4.61.0 + '@rollup/rollup-win32-arm64-msvc': 4.61.0 + '@rollup/rollup-win32-ia32-msvc': 4.61.0 + '@rollup/rollup-win32-x64-gnu': 4.61.0 + '@rollup/rollup-win32-x64-msvc': 4.61.0 fsevents: 2.3.3 - optional: true - - run-async@2.4.1: {} run-async@3.0.0: {} @@ -12057,27 +9952,8 @@ snapshots: dependencies: tslib: 2.8.1 - safe-array-concat@1.1.3: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - safe-buffer@5.2.1: {} - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - safe-regex2@5.0.0: dependencies: ret: 0.5.0 @@ -12100,9 +9976,7 @@ snapshots: semver-truncate@3.0.0: dependencies: - semver: 7.7.2 - - semver@6.3.1: {} + semver: 7.8.1 semver@7.5.4: dependencies: @@ -12113,29 +9987,9 @@ snapshots: semver@7.7.3: optional: true - set-cookie-parser@2.7.1: {} - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 + semver@7.8.1: {} - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 + set-cookie-parser@2.7.1: {} setprototypeof@1.2.0: {} @@ -12179,34 +10033,6 @@ snapshots: shimmer@1.2.1: {} - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - sift@17.1.3: {} siginfo@2.0.0: {} @@ -12215,7 +10041,7 @@ snapshots: signal-exit@4.1.0: {} - sirv@3.0.1: + sirv@3.0.2: dependencies: '@polka/url': 1.0.0-next.29 mrmime: 2.0.1 @@ -12224,7 +10050,7 @@ snapshots: skia-canvas@3.0.8: dependencies: detect-libc: 2.1.2 - follow-redirects: 1.15.11(debug@4.4.1) + follow-redirects: 1.15.11 https-proxy-agent: 7.0.6 string-split-by: 1.0.0 transitivePeerDependencies: @@ -12238,7 +10064,7 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.4 - debug: 4.4.1 + debug: 4.4.3 socks: 2.8.7 transitivePeerDependencies: - supports-color @@ -12279,8 +10105,6 @@ snapshots: sprintf-js@1.1.2: {} - stable-hash@0.0.5: {} - stackback@0.0.2: {} stackblur-canvas@2.7.0: {} @@ -12289,19 +10113,16 @@ snapshots: statuses@2.0.1: {} - std-env@3.9.0: {} - - stop-iteration-iterator@1.1.0: - dependencies: - es-errors: 1.3.0 - internal-slot: 1.1.0 + std-env@4.1.0: {} - streamx@2.22.1: + streamx@2.26.0: dependencies: + events-universal: 1.0.1 fast-fifo: 1.3.2 - text-decoder: 1.2.3 - optionalDependencies: - bare-events: 2.6.1 + text-decoder: 1.2.7 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a string-split-by@1.0.0: dependencies: @@ -12319,56 +10140,6 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string.prototype.includes@2.0.1: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - - string.prototype.matchall@4.0.12: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.4 - set-function-name: 2.0.2 - side-channel: 1.1.0 - - string.prototype.repeat@1.0.0: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.24.0 - - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 @@ -12381,28 +10152,22 @@ snapshots: dependencies: ansi-regex: 6.2.0 - strip-bom@3.0.0: {} - - strip-bom@4.0.0: {} - strip-dirs@3.0.0: dependencies: inspect-with-kind: 1.0.5 is-plain-obj: 1.1.0 - strip-final-newline@2.0.0: {} + strip-final-newline@3.0.0: {} - strip-indent@4.0.0: - dependencies: - min-indent: 1.0.1 + strip-final-newline@4.0.0: {} strip-json-comments@3.1.1: {} - strip-literal@3.0.0: + strtok3@10.3.4: dependencies: - js-tokens: 9.0.1 + '@tokenizer/token': 0.3.0 - strtok3@10.3.4: + strtok3@10.3.5: dependencies: '@tokenizer/token': 0.3.0 @@ -12411,9 +10176,11 @@ snapshots: client-only: 0.0.1 react: 19.2.1 - supports-color@5.5.0: + super-regex@1.1.0: dependencies: - has-flag: 3.0.0 + function-timeout: 1.0.2 + make-asynchronous: 1.1.0 + time-span: 5.1.0 supports-color@7.2.0: dependencies: @@ -12425,32 +10192,31 @@ snapshots: dependencies: '@scarf/scarf': 1.4.0 + system-architecture@1.0.0: {} + systeminformation@5.27.8: optional: true - tailwind-merge@3.4.0: {} + tailwind-merge@3.6.0: {} - tailwindcss@4.1.17: {} + tailwindcss@4.3.0: {} - tapable@2.3.0: {} + tapable@2.3.3: {} tar-stream@3.1.7: dependencies: - b4a: 1.6.7 + b4a: 1.8.1 fast-fifo: 1.3.2 - streamx: 2.22.1 - - test-exclude@7.0.1: - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 10.4.5 - minimatch: 9.0.5 + streamx: 2.26.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a - text-decoder@1.2.3: + text-decoder@1.2.7: dependencies: - b4a: 1.6.7 - - text-extensions@2.4.0: {} + b4a: 1.8.1 + transitivePeerDependencies: + - react-native-b4a thread-stream@3.1.0: dependencies: @@ -12458,24 +10224,24 @@ snapshots: through@2.3.8: {} + time-span@5.1.0: + dependencies: + convert-hrtime: 5.0.0 + tiny-discord@https://codeload.github.com/timotejroiko/tiny-discord/tar.gz/f6d020085ea88e33ebaf6ce323930deffe74fb0d: {} tinybench@2.9.0: {} - tinyexec@0.3.2: {} - - tinyexec@1.0.1: {} + tinyexec@1.2.4: {} - tinyglobby@0.2.14: + tinyglobby@0.2.17: dependencies: - fdir: 6.4.6(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 - tinypool@1.1.1: {} + tinypool@2.1.0: {} - tinyrainbow@2.0.0: {} - - tinyspy@4.0.3: {} + tinyrainbow@3.1.0: {} tmp@0.0.33: dependencies: @@ -12499,6 +10265,12 @@ snapshots: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 + token-types@6.1.2: + dependencies: + '@borewit/text-codec': 0.2.2 + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + totalist@3.0.1: {} tr46@0.0.3: {} @@ -12507,47 +10279,22 @@ snapshots: dependencies: punycode: 2.3.1 - ts-api-utils@2.1.0(typescript@5.9.2): - dependencies: - typescript: 5.9.2 - - tsconfig-paths@3.15.0: + ts-api-utils@2.1.0(typescript@6.0.3): dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 + typescript: 6.0.3 tslib@1.9.3: {} tslib@2.8.1: {} - turbo-darwin-64@2.5.6: - optional: true - - turbo-darwin-arm64@2.5.6: - optional: true - - turbo-linux-64@2.5.6: - optional: true - - turbo-linux-arm64@2.5.6: - optional: true - - turbo-windows-64@2.5.6: - optional: true - - turbo-windows-arm64@2.5.6: - optional: true - - turbo@2.5.6: + turbo@2.9.16: optionalDependencies: - turbo-darwin-64: 2.5.6 - turbo-darwin-arm64: 2.5.6 - turbo-linux-64: 2.5.6 - turbo-linux-arm64: 2.5.6 - turbo-windows-64: 2.5.6 - turbo-windows-arm64: 2.5.6 + '@turbo/darwin-64': 2.9.16 + '@turbo/darwin-arm64': 2.9.16 + '@turbo/linux-64': 2.9.16 + '@turbo/linux-arm64': 2.9.16 + '@turbo/windows-64': 2.9.16 + '@turbo/windows-arm64': 2.9.16 tv4@1.3.0: {} @@ -12564,53 +10311,11 @@ snapshots: type-fest@0.21.3: {} - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.7: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 + type-fest@4.41.0: {} typedi@0.10.0: {} - typescript-eslint@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2): - dependencies: - '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - eslint: 9.34.0(jiti@2.6.1) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - typescript@5.9.2: {} + typescript@6.0.3: {} uglify-js@3.19.3: optional: true @@ -12621,13 +10326,6 @@ snapshots: uint8array-extras@1.5.0: {} - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - unbzip2-stream@1.4.3: dependencies: buffer: 5.7.1 @@ -12635,71 +10333,36 @@ snapshots: undici-types@6.21.0: {} - undici-types@7.10.0: {} + undici-types@7.24.6: {} - unicorn-magic@0.1.0: {} + unicorn-magic@0.3.0: {} universal-user-agent@7.0.3: {} - universalify@2.0.1: {} - - unplugin@2.3.8: + unplugin@3.0.0: dependencies: '@jridgewell/remapping': 2.3.5 - acorn: 8.15.0 - picomatch: 4.0.3 + picomatch: 4.0.4 webpack-virtual-modules: 0.6.2 - unrs-resolver@1.11.1: - dependencies: - napi-postinstall: 0.3.3 - optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.11.1 - '@unrs/resolver-binding-android-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-x64': 1.11.1 - '@unrs/resolver-binding-freebsd-x64': 1.11.1 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 - '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-musl': 1.11.1 - '@unrs/resolver-binding-wasm32-wasi': 1.11.1 - '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 - '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 - '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - - update-browserslist-db@1.1.3(browserslist@4.25.3): - dependencies: - browserslist: 4.25.3 - escalade: 3.2.0 - picocolors: 1.1.1 - uri-js@4.4.1: dependencies: punycode: 2.3.1 - use-callback-ref@1.3.3(@types/react@19.2.7)(react@19.2.1): + use-callback-ref@1.3.3(@types/react@19.2.16)(react@19.2.1): dependencies: react: 19.2.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.16 - use-sidecar@1.1.3(@types/react@19.2.7)(react@19.2.1): + use-sidecar@1.1.3(@types/react@19.2.16)(react@19.2.1): dependencies: detect-node-es: 1.1.0 react: 19.2.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.7 - - util-deprecate@1.0.2: {} + '@types/react': 19.2.16 uuid-1345@1.0.2: dependencies: @@ -12709,82 +10372,48 @@ snapshots: validator@13.15.15: {} - vite-node@3.2.4(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2): + vite@7.0.4(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0): dependencies: - cac: 6.7.14 - debug: 4.4.1 - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 7.0.4(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vite@7.0.4(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2): - dependencies: - esbuild: 0.25.6 - fdir: 6.4.6(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.45.1 - tinyglobby: 0.2.14 + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.15 + rollup: 4.61.0 + tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 fsevents: 2.3.3 - jiti: 2.6.1 - lightningcss: 1.30.2 - - vitest@3.2.4(@types/node@24.3.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(lightningcss@1.30.2): - dependencies: - '@types/chai': 5.2.2 - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.0.4(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)) - '@vitest/pretty-format': 3.2.4 - '@vitest/runner': 3.2.4 - '@vitest/snapshot': 3.2.4 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.2.1 - debug: 4.4.1 - expect-type: 1.2.2 - magic-string: 0.30.17 + jiti: 2.7.0 + lightningcss: 1.32.0 + + vitest@4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(@vitest/ui@4.1.8)(vite@7.0.4(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)): + dependencies: + '@vitest/expect': 4.1.8 + '@vitest/mocker': 4.1.8(vite@7.0.4(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)) + '@vitest/pretty-format': 4.1.8 + '@vitest/runner': 4.1.8 + '@vitest/snapshot': 4.1.8 + '@vitest/spy': 4.1.8 + '@vitest/utils': 4.1.8 + es-module-lexer: 2.1.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.9.0 + picomatch: 4.0.4 + std-env: 4.1.0 tinybench: 2.9.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.14 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 - vite: 7.0.4(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2) - vite-node: 3.2.4(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2) + tinyexec: 1.2.4 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.0 + vite: 7.0.4(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 24.3.0 - '@vitest/ui': 3.2.4(vitest@3.2.4) + '@types/node': 25.9.1 + '@vitest/coverage-v8': 4.1.8(vitest@4.1.8) + '@vitest/ui': 4.1.8(vitest@4.1.8) transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml vizion@2.2.1: dependencies: @@ -12793,9 +10422,7 @@ snapshots: ini: 1.3.8 js-git: 0.7.8 - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 + web-worker@1.5.0: {} webidl-conversions@3.0.1: {} @@ -12813,51 +10440,6 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.0 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.19 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-typed-array@1.1.19: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - - which@1.3.1: - dependencies: - isexe: 2.0.0 - which@2.0.2: dependencies: isexe: 2.0.0 @@ -12889,29 +10471,12 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 - wrappy@1.0.2: {} - ws@7.5.10: {} - y18n@5.0.8: {} - yallist@4.0.0: {} - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yauzl@3.2.0: + yauzl@3.3.2: dependencies: - buffer-crc32: 0.2.13 pend: 1.2.0 yggdrasil@1.7.0: @@ -12923,8 +10488,8 @@ snapshots: yocto-queue@0.1.0: {} - yocto-queue@1.2.1: {} - yoctocolors-cjs@2.1.3: {} + yoctocolors@2.1.2: {} + zod@4.1.5: {} diff --git a/renovate.json b/renovate.json index 078379310..2ce0da8c1 100644 --- a/renovate.json +++ b/renovate.json @@ -1,6 +1,10 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": ["config:base", "helpers:pinGitHubActionDigests", "group:allNonMajor"], + "extends": [ + "config:recommended", + "helpers:pinGitHubActionDigests", + "group:allNonMajor" + ], "labels": ["dependencies"], "schedule": ["before 12pm on Sunday"], "npm": { @@ -12,10 +16,6 @@ "automerge": true, "commitMessagePrefix": "chore(deps):" }, - { - "matchPackagePatterns": ["chalk", "@swc/cli", "@swc/core", "@swc/jest"], - "enabled": false - }, { "matchDepTypes": ["engines"], "enabled": false diff --git a/tsconfig.base.json b/tsconfig.base.json index 13e625fde..b8bec6417 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -11,16 +11,12 @@ "skipDefaultLibCheck": true, "skipLibCheck": true, "resolveJsonModule": true, - "downlevelIteration": true, "strictPropertyInitialization": false, "allowSyntheticDefaultImports": true, + "noImplicitReturns": true, "target": "esnext", "strict": true, - "types": [ - "vitest/importMeta" - ] + "types": ["vitest/importMeta"] }, - "exclude": [ - "node_modules" - ] -} \ No newline at end of file + "exclude": ["node_modules"] +} diff --git a/turbo.json b/turbo.json index bfbe61580..cf52f50df 100644 --- a/turbo.json +++ b/turbo.json @@ -1,54 +1,36 @@ { - "$schema": "https://turborepo.org/schema.json", - "globalDependencies": [ - "pnpm.lock", - "tsconfig.json", - ".swcrc", - "eslint.config.js" - ], - "ui": "tui", - "tasks": { - "build": { - "env": [ - "API_URL", - "API_KEY" - ], - "outputs": [ - "dist/**", - ".next/**", - "pkg/**" - ], - "dependsOn": [ - "^build" - ] - }, - "test:types": { - "outputs": [], - "dependsOn": [ - "^test:types" - ] - }, - "test": { - "outputs": [], - "dependsOn": [ - "build", - "^test" - ] - }, - "test:coverage": { - "outputs": [ - "coverage" - ], - "dependsOn": [ - "build", - "^test:coverage" - ] - }, - "lint": { - "outputs": [], - "dependsOn": [ - "^lint" - ] - } - } -} \ No newline at end of file + "$schema": "https://turborepo.org/schema.json", + "globalDependencies": ["pnpm.lock", "tsconfig.json", ".swcrc"], + "ui": "tui", + "tasks": { + "build": { + "env": ["API_URL", "API_KEY"], + "outputs": ["dist/**", ".next/**", "pkg/**"], + "dependsOn": ["^build"] + }, + "typecheck": { + "outputs": [], + "dependsOn": ["^typecheck"] + }, + "test": { + "outputs": [], + "dependsOn": ["build", "^test"] + }, + "test:coverage": { + "outputs": ["coverage"], + "dependsOn": ["build", "^test:coverage"] + }, + "lint": { + "outputs": [], + "dependsOn": [] + }, + "lint:ci": { + "outputs": [], + "dependsOn": [] + }, + "fmt": { + "outputs": [], + "dependsOn": [] + } + } +} diff --git a/vite.swc.ts b/vite.swc.ts index 41157741a..c1742417a 100644 --- a/vite.swc.ts +++ b/vite.swc.ts @@ -25,6 +25,8 @@ const resolveFile = (resolved: string, index = false) => { const file = index ? join(resolved, `index${ext}`) : `${resolved}${ext}`; if (existsSync(file)) return file; } + + return undefined; }; export const resolveId = async (importee: string, importer?: string) => { @@ -42,6 +44,8 @@ export const resolveId = async (importee: string, importer?: string) => { return resolved; } + + return undefined; }; export const swc = createUnplugin(({ minify, ...options }: SwcOptions = {}) => { diff --git a/apps/support-bot/eslint.config.js b/vitest.config.ts similarity index 57% rename from apps/support-bot/eslint.config.js rename to vitest.config.ts index 3325f85ed..3347734fb 100644 --- a/apps/support-bot/eslint.config.js +++ b/vitest.config.ts @@ -6,6 +6,10 @@ * https://github.com/Statsify/statsify/blob/main/LICENSE */ -import { defineConfig } from "../../eslint.config.js"; +import { defineConfig } from "vitest/config"; -export default defineConfig({ tsconfigDirName: import.meta.dirname }); +export default defineConfig({ + test: { + projects: ["./apps/*/vitest.config.ts", "./packages/*/vitest.config.ts"], + }, +}); diff --git a/vitest.workspace.ts b/vitest.workspace.ts deleted file mode 100644 index 68050b02c..000000000 --- a/vitest.workspace.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Copyright (c) Statsify - * - * This source code is licensed under the GNU GPL v3 license found in the - * LICENSE file in the root directory of this source tree. - * https://github.com/Statsify/statsify/blob/main/LICENSE - */ - -import { defineWorkspace } from "vitest/config"; - -export default defineWorkspace([ - "./apps/*/vitest.config.ts", - "./packages/*/vitest.config.ts", -]);