diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 053f62529..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,69 +0,0 @@ -module.exports = { - root: true, - parser: '@typescript-eslint/parser', // Specifies the ESLint parser - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', // Uses the recommended rules from the @typescript-eslint/eslint-plugin - 'plugin:jsx-a11y/recommended', - 'plugin:@next/next/recommended', - 'prettier', - ], - parserOptions: { - ecmaVersion: 6, - sourceType: 'module', - ecmaFeatures: { - jsx: true, - }, - }, - rules: { - '@typescript-eslint/no-explicit-any': 'warn', // disable the rule for now to replicate previous behavior - '@typescript-eslint/camelcase': 0, - '@typescript-eslint/no-use-before-define': 0, - 'jsx-a11y/no-noninteractive-tabindex': 0, - 'arrow-parens': 'off', - 'jsx-a11y/anchor-is-valid': 'off', - 'no-console': 1, - 'react-hooks/rules-of-hooks': 'error', - 'react-hooks/exhaustive-deps': 'warn', - '@typescript-eslint/explicit-function-return-type': 'off', - 'formatjs/no-offset': 'error', - 'no-unused-vars': 'off', - '@typescript-eslint/no-unused-vars': ['error'], - '@typescript-eslint/array-type': ['error', { default: 'array' }], - 'jsx-a11y/no-onchange': 'off', - '@typescript-eslint/consistent-type-imports': [ - 'error', - { - prefer: 'type-imports', - }, - ], - 'no-relative-import-paths/no-relative-import-paths': [ - 'error', - { allowSameFolder: true }, - ], - }, - overrides: [ - { - files: ['**/*.tsx'], - plugins: ['react'], - rules: { - 'react/prop-types': 'off', - 'react/self-closing-comp': 'error', - }, - }, - ], - plugins: ['jsx-a11y', 'react-hooks', 'formatjs', 'no-relative-import-paths'], - settings: { - react: { - pragma: 'React', - version: '16.8', - }, - }, - env: { - browser: true, - node: true, - jest: true, - es6: true, - }, - reportUnusedDisableDirectives: true, -}; diff --git a/.github/cliff.toml b/.github/cliff.toml index 42906bb96..d6ce95d5c 100644 --- a/.github/cliff.toml +++ b/.github/cliff.toml @@ -69,23 +69,19 @@ commit_preprocessors = [ { pattern = '.*\[ci skip\].*', replace = "" }, ] commit_parsers = [ - { message = "^feat", group = "🚀 Features" }, - { message = "^fix", group = "🐛 Bug Fixes" }, + { message = '.*\(helm\).*', skip = true }, + { message = '^chore\(release\): prepare for', skip = true }, + { message = '^chore\(deps.*\)', skip = true }, + { body = ".*security", group = "🛡️ Security" }, + { message = "^feat", group = "🚀 Features" }, + { message = "^fix", group = "🐛 Bug Fixes" }, { message = "^doc", group = "📖 Documentation" }, { message = "^perf", group = "⚡ Performance" }, - { message = "^refactor", group = "🚜 Refactor" }, - { message = "^style", group = "🎨 Styling" }, - { message = "^test", group = "🧪 Testing" }, - { message = "^chore\\(release\\): prepare for", skip = true }, - { message = "^chore\\(deps.*\\)", skip = true }, - { message = "^chore\\(pr\\)", skip = true }, - { message = "^chore\\(pull\\)", skip = true }, - { message = "^chore\\(git-sync\\)", skip = true }, - { message = "^chore|^ci", group = "⚙️ Miscellaneous Tasks" }, - { body = ".*security", group = "🛡️ Security" }, + { message = "^refactor", group = "🚜 Refactor" }, + { message = "^style", group = "🎨 Styling" }, + { message = "^test", group = "🧪 Testing" }, + { message = "^chore|^ci", group = "⚙️ Miscellaneous Tasks" }, { message = "^revert", group = "◀️ Revert" }, - { message = '.*\[skip ci\].*', skip = true }, - { message = '.*\[ci skip\].*', skip = true }, ] protect_breaking_commits = false tag_pattern = "v?[0-9]+\\.[0-9]+\\.[0-9]+.*" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 674b466b5..0927ef74c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -90,7 +90,7 @@ jobs: name: Lint & Test Build if: github.event_name == 'pull_request' runs-on: ubuntu-24.04 - container: node:22.22.0-alpine3.22@sha256:0c49915657c1c77c64c8af4d91d2f13fe96853bbd957993ed00dd592cbecc284 + container: node:22.22.1-alpine3.22@sha256:9f96f09f127f06feaff1e7faa4a34a3020cf5c1138c988782e59959641facabe steps: - name: Checkout uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 @@ -127,6 +127,51 @@ jobs: - name: Build run: pnpm build + unit-test: + name: Unit Tests + if: github.event_name == 'pull_request' + runs-on: ubuntu-24.04 + container: node:22.22.1-alpine3.22@sha256:9f96f09f127f06feaff1e7faa4a34a3020cf5c1138c988782e59959641facabe + permissions: + checks: write + steps: + - name: Checkout + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + persist-credentials: false + + - name: Pnpm Setup + uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0 + + - name: Get pnpm store directory + shell: sh + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - name: Setup pnpm cache + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + env: + CI: true + run: pnpm install + + - name: Run tests + env: + CI: true + run: pnpm test + + - name: Publish test report + uses: mikepenz/action-junit-report@49b2ca06f62aa7ef83ae6769a2179271e160d8e4 # v6.3.1 + if: success() || failure() # always run even if the previous step fails + with: + report_paths: 'report.xml' + build: name: Build (per-arch, native runners) if: github.ref == 'refs/heads/develop' @@ -154,7 +199,7 @@ jobs: uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0 - name: Warm cache (no push) — ${{ matrix.platform }} - uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 + uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6.19.2 with: context: . file: ./Dockerfile @@ -190,13 +235,13 @@ jobs: uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0 - name: Log in to Docker Hub - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_TOKEN }} - name: Log in to GitHub Container Registry - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 with: registry: ghcr.io username: ${{ github.repository_owner }} @@ -216,7 +261,7 @@ jobs: org.opencontainers.image.created=${{ steps.ts.outputs.TIMESTAMP }} - name: Build & Push (multi-arch, single tag) - uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 + uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6.19.2 with: context: . file: ./Dockerfile diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 60793a88f..92ff3a8e6 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -42,15 +42,15 @@ jobs: persist-credentials: false - name: Initialize CodeQL - uses: github/codeql-action/init@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10 + uses: github/codeql-action/init@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 with: languages: ${{ matrix.language }} queries: +security-and-quality - name: Autobuild - uses: github/codeql-action/autobuild@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10 + uses: github/codeql-action/autobuild@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10 + uses: github/codeql-action/analyze@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 with: category: '/language:${{ matrix.language }}' diff --git a/.github/workflows/create-tag.yml b/.github/workflows/create-tag.yml index e532d6be1..74636b69e 100644 --- a/.github/workflows/create-tag.yml +++ b/.github/workflows/create-tag.yml @@ -29,7 +29,7 @@ jobs: persist-credentials: false - name: Install git-cliff - uses: taiki-e/install-action@cede0bb282aae847dfa8aacca3a41c86d973d4d7 # v2.68.1 + uses: taiki-e/install-action@a37010ded18ff788be4440302bd6830b1ae50d8b # v2.68.25 with: tool: git-cliff @@ -78,7 +78,7 @@ jobs: - name: Commit updated files run: | git add package.json - git commit -m 'chore(release): prepare ${TAG_VERSION}' + git commit -m "chore(release): prepare ${TAG_VERSION}" git push - name: Create git tag diff --git a/.github/workflows/docs-link-check.yml b/.github/workflows/docs-link-check.yml index 19ea46ba1..0fea0caa1 100644 --- a/.github/workflows/docs-link-check.yml +++ b/.github/workflows/docs-link-check.yml @@ -42,7 +42,7 @@ jobs: persist-credentials: false - name: Run Lychee link checker - uses: lycheeverse/lychee-action@a8c4c7cb88f0c7386610c35eb25108e448569cb0 # v2.7.0 + uses: lycheeverse/lychee-action@8646ba30535128ac92d33dfc9133794bfdd9b411 # v2.8.0 with: fail: false args: >- diff --git a/.github/workflows/helm.yml b/.github/workflows/helm.yml index 21beb98e0..0da97f5b8 100644 --- a/.github/workflows/helm.yml +++ b/.github/workflows/helm.yml @@ -40,7 +40,7 @@ jobs: uses: oras-project/setup-oras@22ce207df3b08e061f537244349aac6ae1d214f6 # v1.2.4 - name: Login to GitHub Container Registry - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 with: registry: ghcr.io username: ${{ github.actor }} @@ -105,7 +105,7 @@ jobs: uses: oras-project/setup-oras@22ce207df3b08e061f537244349aac6ae1d214f6 # v1.2.4 - name: Install Cosign - uses: sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad # v4.0.0 + uses: sigstore/cosign-installer@ba7bc0a3fef59531c69a25acd34668d6d3fe6f22 # v4.1.0 - name: Downloads artifacts uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 @@ -114,7 +114,7 @@ jobs: path: .cr-release-packages/ - name: Login to GitHub Container Registry - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 with: registry: ghcr.io username: ${{ github.actor }} @@ -157,7 +157,7 @@ jobs: persist-credentials: false - name: Install Cosign - uses: sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad # v4.0.0 + uses: sigstore/cosign-installer@ba7bc0a3fef59531c69a25acd34668d6d3fe6f22 # v4.1.0 - name: Downloads artifacts uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 @@ -166,7 +166,7 @@ jobs: path: .cr-release-packages/ - name: Login to GitHub Container Registry - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 with: registry: ghcr.io username: ${{ github.actor }} diff --git a/.github/workflows/pr-validation.yml b/.github/workflows/pr-validation.yml new file mode 100644 index 000000000..588919d81 --- /dev/null +++ b/.github/workflows/pr-validation.yml @@ -0,0 +1,285 @@ +--- +# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json +name: "PR Validation" + +on: + pull_request_target: + types: + - opened + - reopened + - edited + - synchronize + +permissions: {} + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + semantic-title: + name: Validate PR Title + runs-on: ubuntu-24.04 + permissions: + contents: read + pull-requests: write + checks: write + issues: write + steps: + - uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1 + id: lint_pr_title + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 + if: always() && steps.lint_pr_title.outputs.error_message != null + env: + ERROR_MESSAGE: ${{ steps.lint_pr_title.outputs.error_message }} + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const message = process.env.ERROR_MESSAGE; + const prNumber = context.payload.pull_request.number; + + const body = [ + `### PR Title Validation Failed\n`, + message, + `\n---\n`, + `PR titles must follow [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/).`, + `*This check will re-run when you update your PR title.*`, + ].join('\n'); + + const allComments = await github.paginate( + github.rest.issues.listComments, + { + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + per_page: 100, + } + ); + + const botComment = allComments.find( + c => c.user.type === 'Bot' && c.body && c.body.includes('### PR Title Validation Failed') + ); + + if (botComment) { + await github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: botComment.id, + body, + }); + } else { + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + body, + }); + } + + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 + if: always() && steps.lint_pr_title.outputs.error_message == null + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const prNumber = context.payload.pull_request.number; + + const allComments = await github.paginate( + github.rest.issues.listComments, + { + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + per_page: 100, + } + ); + + const botComment = allComments.find( + c => c.user.type === 'Bot' && c.body && c.body.includes('### PR Title Validation Failed') + ); + + if (botComment) { + await github.rest.issues.deleteComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: botComment.id, + }); + } + + template-check: + name: Validate PR Template + if: github.event.action != 'synchronize' + runs-on: ubuntu-24.04 + permissions: + contents: read + issues: write + pull-requests: write + steps: + - name: Checkout + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + persist-credentials: false + + - name: Set up Node.js + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 + with: + node-version-file: 'package.json' + package-manager-cache: false + + - name: Skip bot PRs + id: bot-check + if: github.event.pull_request.user.type == 'Bot' + run: echo "skip=true" >> "$GITHUB_OUTPUT" + + - name: Write PR body to file + if: steps.bot-check.outputs.skip != 'true' + env: + PR_BODY: ${{ github.event.pull_request.body }} + run: printf '%s' "$PR_BODY" > /tmp/pr-body.txt + + - name: Run template check + if: steps.bot-check.outputs.skip != 'true' + id: check + env: + AUTHOR_ASSOCIATION: ${{ github.event.pull_request.author_association }} + run: | + set +e + ISSUES=$(node bin/check-pr-template.mjs /tmp/pr-body.txt) + EXIT_CODE=$? + echo "exit_code=$EXIT_CODE" >> "$GITHUB_OUTPUT" + { + echo 'issues<> "$GITHUB_OUTPUT" + exit 0 + + - name: Label and comment on failure + if: steps.bot-check.outputs.skip != 'true' && steps.check.outputs.exit_code != '0' + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 + env: + ISSUES_JSON: ${{ steps.check.outputs.issues }} + PR_AUTHOR: ${{ github.event.pull_request.user.login }} + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const issues = JSON.parse(process.env.ISSUES_JSON); + const author = process.env.PR_AUTHOR; + const prNumber = context.payload.pull_request.number; + const LABEL = 'blocked:template'; + + const issueList = issues.map(i => `- ${i}`).join('\n'); + + const commentBody = [ + `Hey @${author}, thanks for submitting this PR! However, it looks like the PR template hasn't been fully filled out.\n`, + `### Issues found:\n`, + issueList, + `\n---\n`, + `**Please update your PR description to follow the [PR template](https://github.com/${context.repo.owner}/${context.repo.repo}/blob/develop/.github/PULL_REQUEST_TEMPLATE.md).**`, + `Incomplete or missing PR descriptions may indicate insufficient review of the changes, and PRs that do not follow the template **may be closed without review**.`, + `See our [Contributing Guide](https://github.com/${context.repo.owner}/${context.repo.repo}/blob/develop/CONTRIBUTING.md) for more details.\n`, + `*This check will automatically re-run when you edit your PR description.*`, + ].join('\n'); + + const allComments = await github.paginate( + github.rest.issues.listComments, + { + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + per_page: 100, + } + ); + + const botComment = allComments.find( + c => c.user.type === 'Bot' && c.body && c.body.includes('### Issues found:') + ); + + if (botComment) { + await github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: botComment.id, + body: commentBody, + }); + } else { + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + body: commentBody, + }); + } + + try { + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + labels: [LABEL], + }); + } catch (e) { + try { + await github.rest.issues.createLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + name: LABEL, + color: 'B60205', + description: 'PR template not properly filled out', + }); + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + labels: [LABEL], + }); + } catch (e2) { + console.log('Could not create/add label:', e2.message); + } + } + + core.setFailed('PR template is not properly filled out.'); + + - name: Remove label on success + if: steps.bot-check.outputs.skip != 'true' && steps.check.outputs.exit_code == '0' + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const prNumber = context.payload.pull_request.number; + const LABEL = 'blocked:template'; + + try { + await github.rest.issues.removeLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + name: LABEL, + }); + } catch (e) { + console.log('Could not remove label', e.message); + } + + const allComments = await github.paginate( + github.rest.issues.listComments, + { + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + per_page: 100, + } + ); + + const botComment = allComments.find( + c => c.user.type === 'Bot' && c.body && c.body.includes('### Issues found:') + ); + + if (botComment) { + await github.rest.issues.deleteComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: botComment.id, + }); + } \ No newline at end of file diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index c8939f9f7..48f611b62 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -55,7 +55,7 @@ jobs: echo "Building preview version: ${VER}" - name: Warm cache (no push) — ${{ matrix.platform }} - uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 + uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6.19.2 with: context: . file: ./Dockerfile @@ -91,13 +91,13 @@ jobs: uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0 - name: Log in to Docker Hub - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_TOKEN }} - name: Log in to GitHub Container Registry - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 with: registry: ghcr.io username: ${{ github.repository_owner }} @@ -127,7 +127,7 @@ jobs: org.opencontainers.image.created=${{ steps.ts.outputs.TIMESTAMP }} - name: Build & Push (multi-arch, single tag) - uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 + uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6.19.2 with: context: . file: ./Dockerfile diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9bf72c7ec..4c7d10fd4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -34,7 +34,7 @@ jobs: - name: Generate changelog id: git-cliff - uses: orhun/git-cliff-action@e16f179f0be49ecdfe63753837f20b9531642772 # v4.7.0 + uses: orhun/git-cliff-action@c93ef52f3d0ddcdcc9bd5447d98d458a11cd4f72 # v4.7.1 with: config: .github/cliff.toml args: -vv --current @@ -88,7 +88,7 @@ jobs: uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0 - name: Warm cache [${{ matrix.platform }}] - uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 + uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6.19.2 with: context: . file: ./Dockerfile @@ -127,13 +127,13 @@ jobs: uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0 - name: Log in to Docker Hub - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_TOKEN }} - name: Log in to GitHub Container Registry - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 with: registry: ghcr.io username: ${{ github.repository_owner }} @@ -147,12 +147,14 @@ jobs: ${{ env.DOCKER_HUB }} ghcr.io/${{ github.repository }} tags: | - type=raw,value=${{ env.VERSION }} + type=semver,pattern={{raw}} + type=semver,pattern=v{{major}}.{{minor}} + type=semver,pattern=v{{major}} labels: | org.opencontainers.image.created=${{ steps.ts.outputs.TIMESTAMP }} - name: Build & Push (multi-arch) - uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 + uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6.19.2 with: context: . file: ./Dockerfile @@ -206,19 +208,19 @@ jobs: persist-credentials: false - name: Install Cosign - uses: sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad # v4.0.0 + uses: sigstore/cosign-installer@ba7bc0a3fef59531c69a25acd34668d6d3fe6f22 # v4.1.0 - name: Install Trivy uses: aquasecurity/setup-trivy@3fb12ec12f41e471780db15c232d5dd185dcb514 # v0.2.5 - name: Log in to Docker Hub - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_TOKEN }} - name: Log in to GitHub Container Registry - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 with: registry: ghcr.io username: ${{ github.repository_owner }} @@ -267,7 +269,7 @@ jobs: VERSION: ${{ github.ref_name }} steps: - name: Install Cosign - uses: sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad # v4.0.0 + uses: sigstore/cosign-installer@ba7bc0a3fef59531c69a25acd34668d6d3fe6f22 # v4.1.0 - name: Verify signatures run: | diff --git a/.github/workflows/semantic-pr.yml b/.github/workflows/semantic-pr.yml deleted file mode 100644 index 06546033e..000000000 --- a/.github/workflows/semantic-pr.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: "Semantic PR" - -on: - pull_request_target: - types: - - opened - - reopened - - edited - - synchronize - -permissions: {} - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - main: - name: Validate PR Title - runs-on: ubuntu-slim - permissions: - contents: read - pull-requests: read - checks: write - steps: - - uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 8e105733f..e78886dd1 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -21,7 +21,7 @@ jobs: issues: write pull-requests: write steps: - - uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v10.1.1 + - uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0 with: any-of-labels: "pending author's response" exempt-issue-labels: 'confirmed' diff --git a/.github/workflows/trivy-scan.yml b/.github/workflows/trivy-scan.yml index e65840d29..185c53071 100644 --- a/.github/workflows/trivy-scan.yml +++ b/.github/workflows/trivy-scan.yml @@ -48,7 +48,7 @@ jobs: trivy-${{ runner.os }}- - name: Run Trivy image scan - uses: aquasecurity/trivy-action@b6643a29fecd7f34b3597bc6acb0a98b03d33ff8 # 0.33.1 + uses: aquasecurity/trivy-action@57a97c7e7821a5776cebc9bb87c984fa69cba8f1 # 0.35.0 with: image-ref: ghcr.io/${{ github.repository }}:latest format: sarif @@ -56,6 +56,6 @@ jobs: ignore-unfixed: true - name: Upload SARIF to code scanning - uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10 + uses: github/codeql-action/upload-sarif@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 with: sarif_file: trivy.sarif diff --git a/.gitignore b/.gitignore index d294bc091..dc3bd55b6 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ # testing /coverage +lcov.info # next.js /.next/ diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 8dc1918fb..b20545471 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -16,6 +16,7 @@ "stylelint.vscode-stylelint", - "bradlc.vscode-tailwindcss" + "bradlc.vscode-tailwindcss", + "firsttris.vscode-jest-runner" ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index dbb4a2ccf..fec338ab5 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -23,5 +23,12 @@ "i18n-ally.localesPaths": [ "src/i18n/locale" ], - "yaml.format.singleQuote": true + "yaml.format.singleQuote": true, + "jestrunner.enableTestExplorer": true, + "jestrunner.defaultTestPatterns": [ + "server/**/*.{test,spec}.?(c|m)[jt]s?(x)", + ], + "jestrunner.nodeTestCommand": "pnpm test", + "jestrunner.changeDirectoryToWorkspaceRoot": true, + "jestrunner.projectPath": "." } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1d1581c7d..609c9d727 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,43 +10,104 @@ All help is welcome and greatly appreciated! If you would like to contribute to > This is an open-source project maintained by volunteers. > We do not have the resources to review pull requests that could have been avoided with proper human oversight. > While we have no issue with contributors using AI tools as an aid, it is your responsibility as a contributor to ensure that all submissions are carefully reviewed and meet our quality standards. -> Submissions that appear to be unreviewed AI output will be considered low-effort and may result in a ban. > -> If you are using **any kind of AI assistance** to contribute to Seerr, -> it must be disclosed in the pull request. +> **We expect AI-assisted development, not AI-driven development.** +> Use AI as a tool to help you write code. Do not let an AI agent +> autonomously generate an entire contribution and submit it on your behalf. +> We have been increasingly receiving low-effort, fully AI-generated PRs +> and will not tolerate them. Contributors who repeatedly submit unreviewed +> AI output may result in a ban. +> +> **Submissions that appear to be unreviewed AI output will be considered low-effort and may result in a ban.** Signs of unreviewed AI output include but are not limited to: +> +> - Blank or template-default PR descriptions +> - AI-generated PR descriptions that replace our template with their own structure (e.g., "Summary / What changed / Root cause / Test plan" instead of following the PR template; this is the default output format of tools like Claude Code and is an immediate indicator that the PR was not reviewed by a human) +> - Unchecked checklists or missing checklist entirely +> - Failing CI checks that would have been caught by running `pnpm build` +> - Code that does not match the described changes +> - Inability to answer questions about the submitted code +> +> **Read and follow the [Contributing Guide](CONTRIBUTING.md) before submitting.** +> If your AI tool generates its own PR description format, it is your +> responsibility to rewrite it to follow our template before submitting. +> An incomplete PR template tells maintainers that insufficient review has +> been performed on the submission, regardless of the actual code quality. +> We may close such PRs without review. +> +> If you are using **any kind of AI assistance** to contribute to Seerr, it must be disclosed in the pull request. + +### Disclosure Requirements If you are using any kind of AI assistance while contributing to Seerr, -**this must be disclosed in the pull request**, along with the extent to -which AI assistance was used (e.g. docs only vs. code generation). -If PR responses are being generated by an AI, disclose that as well. +**this must be disclosed in the pull request description**, along with +the extent to which AI assistance was used (e.g., docs only vs. code generation). +If PR responses (comments, review replies) are being generated by AI, +disclose that as well. + As a small exception, trivial tab-completion doesn't need to be disclosed, so long as it is limited to single keywords or short phrases. -An example disclosure: +Example disclosures: -> This PR was written primarily by Claude Code. - -Or a more detailed disclosure: - -> I consulted ChatGPT to understand the codebase but the solution +> **AI Disclosure:** This PR was written primarily by Claude Code. +> **AI Disclosure:** I consulted ChatGPT to understand the codebase but the solution > was fully authored manually by myself. +> **AI Disclosure:** None. -Failure to disclose this is first and foremost rude to the human operators -on the other end of the pull request, but it also makes it difficult to -determine how much scrutiny to apply to the contribution. +When using AI assistance, we expect contributors to: + +- **Understand the code** that is produced and be able to answer + questions about it. +- **Follow the contributing guide**. AI tools do not excuse you from + filling out the PR template, testing section, and checklist. +- **Run the build and tests** before submitting. + +Failure to disclose AI assistance is first and foremost disrespectful to the +human maintainers on the other end of the pull request, but it also makes it +difficult to determine how much scrutiny to apply to the contribution. In a perfect world, AI assistance would produce equal or higher quality -work than any human. That isn't the world we live in today, and in most cases -it's generating slop. I say this despite being a fan of and using them -successfully myself (with heavy supervision)! +work than any human. That is not the world we live in today, and in most cases +it is generating slop. When using AI assistance, we expect contributors to understand the code that is produced and be able to answer critical questions about it. It -isn't a maintainers job to review a PR so broken that it requires +is not a maintainer's job to review a PR so broken that it requires significant rework to be acceptable. Please be respectful to maintainers and disclose AI assistance. +### Expectations for AI-Assisted Contributions + +1. **PR descriptions and all comments must be your own words.** Do not paste + LLM output as your PR description, review response, or issue comment. + We want *your* understanding and explanation of the changes, not a + machine-generated summary. An exception is made for LLM-assisted + translation, however, note it explicitly if used. + +2. **Contributions must be concise and focused.** A PR that claims to fix one thing + but touches a bunch of unrelated code will be rejected. This is a + common side effect of broad AI prompts and makes review unnecessarily + difficult. + +3. **You must be able to handle review feedback yourself.** If you cannot discuss or + implement requested changes without round-tripping reviewer comments + through an AI, that tells us you don't understand the code you + submitted. We will close the PR. + +4. **Don't commit non-project files.** Editor configs, AI tool + directories, and other local tooling files do not belong in the + repository. Keep your commits clean. + +5. **Changes must be tested.** Build the project, run the tests, and + manually verify the functionality you modified. Don't just assume + CI will catch everything. + +6. **Final discretion lies with the reviewers.** If a PR cannot be + reasonably reviewed for any reason due to over-complexity, size, or poor + structure, it will be rejected. This applies equally to AI-assisted + and non-AI-assisted contributions. + ## Development ### Tools Required @@ -202,4 +263,4 @@ DB_TYPE="postgres" DB_USER=postgres DB_PASS=postgres pnpm migration:generate ser ## Attribution -This contribution guide was inspired by the [Next.js](https://github.com/vercel/next.js), [Radarr](https://github.com/Radarr/Radarr), and [Ghostty](https://github.com/ghostty-org/ghostty) contribution guides. +This contribution guide was inspired by the [Next.js](https://github.com/vercel/next.js), [Radarr](https://github.com/Radarr/Radarr), and [Ghostty](https://github.com/ghostty-org/ghostty) contribution guides. In addition, our AI policy draws from [Jellyfin's LLM policies](https://jellyfin.org/docs/general/contributing/llm-policies/). diff --git a/Dockerfile b/Dockerfile index 69264694b..0cf7b0f02 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:22.22.0-alpine3.22@sha256:0c49915657c1c77c64c8af4d91d2f13fe96853bbd957993ed00dd592cbecc284 AS base +FROM node:22.22.1-alpine3.22@sha256:9f96f09f127f06feaff1e7faa4a34a3020cf5c1138c988782e59959641facabe AS base ARG SOURCE_DATE_EPOCH ARG TARGETPLATFORM ENV TARGETPLATFORM=${TARGETPLATFORM:-linux/amd64} @@ -33,7 +33,7 @@ RUN pnpm build RUN rm -rf .next/cache -FROM node:22.22.0-alpine3.22@sha256:0c49915657c1c77c64c8af4d91d2f13fe96853bbd957993ed00dd592cbecc284 +FROM node:22.22.1-alpine3.22@sha256:9f96f09f127f06feaff1e7faa4a34a3020cf5c1138c988782e59959641facabe ARG SOURCE_DATE_EPOCH ARG COMMIT_TAG ENV NODE_ENV=production diff --git a/Dockerfile.local b/Dockerfile.local index 43089dc13..fffc7a371 100644 --- a/Dockerfile.local +++ b/Dockerfile.local @@ -1,4 +1,4 @@ -FROM node:22.22.0-alpine3.22@sha256:0c49915657c1c77c64c8af4d91d2f13fe96853bbd957993ed00dd592cbecc284 +FROM node:22.22.1-alpine3.22@sha256:9f96f09f127f06feaff1e7faa4a34a3020cf5c1138c988782e59959641facabe ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" diff --git a/bin/check-pr-template.mjs b/bin/check-pr-template.mjs new file mode 100644 index 000000000..a34bf2d07 --- /dev/null +++ b/bin/check-pr-template.mjs @@ -0,0 +1,92 @@ +#!/usr/bin/env node +/** + * Validate that a pull request body follows the PR template. + * + */ +import { readFileSync } from 'fs'; +import { resolve } from 'path'; + +const bodyFile = process.argv[2]; + +if (!bodyFile) { + console.error('body file path is required as an argument.'); + process.exit(2); +} + +const body = readFileSync(resolve(bodyFile), 'utf8'); +const issues = []; + +const MAINTAINER_ROLES = ['OWNER', 'MEMBER', 'COLLABORATOR']; +const isMaintainer = MAINTAINER_ROLES.includes( + process.env.AUTHOR_ASSOCIATION ?? '' +); + +const stripComments = (s) => { + let result = s; + let previous; + do { + previous = result; + result = result.replace(//g, ''); + } while (result !== previous); + return result; +}; + +const stripFixesPlaceholder = (s) => s.replace(/-\s*Fixes\s*`?#XXXX`?/gi, ''); + +const descriptionMatch = body.match(/## Description\s*\n([\s\S]*?)(?=\n## |$)/); +const descriptionContent = descriptionMatch + ? stripFixesPlaceholder(stripComments(descriptionMatch[1])).trim() + : ''; + +if (!descriptionContent) { + issues.push( + '**Description** section is empty or only contains placeholder text.' + ); +} + +const testingMatch = body.match( + /## How Has This Been Tested\?\s*\n([\s\S]*?)(?=\n## |$)/ +); +const testingContent = testingMatch + ? stripComments(testingMatch[1]).trim() + : ''; + +if (!testingContent) { + issues.push('**How Has This Been Tested?** section is empty.'); +} + +const checklistMatch = body.match(/## Checklist:\s*\n([\s\S]*?)$/); +const checklistContent = checklistMatch ? checklistMatch[1] : ''; + +const totalBoxes = (checklistContent.match(/- \[[ x]\]/gi) || []).length; +const checkedBoxes = (checklistContent.match(/- \[x\]/gi) || []).length; + +if (totalBoxes === 0) { + issues.push('**Checklist** section is missing or has been removed.'); +} else if (checkedBoxes === 0) { + issues.push( + 'No items in the **checklist** have been checked. Please review and check all applicable items.' + ); +} + +if ( + !/- \[x\] I have read and followed the contribution/i.test(checklistContent) +) { + issues.push('The **contribution guidelines** checkbox has not been checked.'); +} + +if ( + !isMaintainer && + !/- \[x\] Disclosed any use of AI/i.test(checklistContent) +) { + issues.push('The **AI disclosure** checkbox has not been checked.'); +} + +if (/-\s*Fixes\s*`?#XXXX`?/i.test(body)) { + issues.push( + 'The `Fixes #XXXX` placeholder has not been updated. Please link the relevant issue or remove it.' + ); +} + +console.log(JSON.stringify(issues)); +process.exit(issues.length > 0 ? 1 : 0); diff --git a/charts/seerr-chart/Chart.yaml b/charts/seerr-chart/Chart.yaml index 2b531ae12..6f667089f 100644 --- a/charts/seerr-chart/Chart.yaml +++ b/charts/seerr-chart/Chart.yaml @@ -3,9 +3,9 @@ kubeVersion: '>=1.23.0-0' name: seerr-chart description: Seerr helm chart for Kubernetes type: application -version: 3.2.0 +version: 3.4.2 # renovate: image=ghcr.io/seerr-team/seerr -appVersion: 'v3.0.1' +appVersion: 'v3.1.1' maintainers: - name: Seerr Team url: https://github.com/orgs/seerr-team/people diff --git a/charts/seerr-chart/README.md b/charts/seerr-chart/README.md index 9b0546ee4..02c8c2a1c 100644 --- a/charts/seerr-chart/README.md +++ b/charts/seerr-chart/README.md @@ -1,6 +1,6 @@ # seerr-chart -![Version: 3.2.0](https://img.shields.io/badge/Version-3.2.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v3.0.1](https://img.shields.io/badge/AppVersion-v3.0.1-informational?style=flat-square) +![Version: 3.4.2](https://img.shields.io/badge/Version-3.4.2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v3.1.1](https://img.shields.io/badge/AppVersion-v3.1.1-informational?style=flat-square) Seerr helm chart for Kubernetes @@ -44,12 +44,13 @@ If `replicaCount` value was used - remove it. Helm update should work fine after | Key | Type | Default | Description | |-----|------|---------|-------------| | affinity | object | `{}` | | -| config | object | `{"persistence":{"accessModes":["ReadWriteOnce"],"annotations":{},"existingClaim":"","name":"","size":"5Gi","volumeName":""}}` | Creating PVC to store configuration | +| config | object | `{"persistence":{"accessModes":["ReadWriteOnce"],"annotations":{},"existingClaim":"","name":"","size":"5Gi","subPath":"","volumeName":""}}` | Creating PVC to store configuration | | config.persistence.accessModes | list | `["ReadWriteOnce"]` | Access modes of persistent disk | | config.persistence.annotations | object | `{}` | Annotations for PVCs | | config.persistence.existingClaim | string | `""` | Specify an existing `PersistentVolumeClaim` to use. If this value is provided, the default PVC will not be created | | config.persistence.name | string | `""` | Config name | | config.persistence.size | string | `"5Gi"` | Size of persistent disk | +| config.persistence.subPath | string | `""` | Subpath of the pvc which should be mounted | | config.persistence.volumeName | string | `""` | Name of the permanent volume to reference in the claim. Can be used to bind to existing volumes. | | extraEnv | list | `[]` | Environment variables to add to the seerr pods | | extraEnvFrom | list | `[]` | Environment variables from secrets or configmaps to add to the seerr pods | @@ -73,8 +74,8 @@ If `replicaCount` value was used - remove it. Helm update should work fine after | podLabels | object | `{}` | | | podSecurityContext.fsGroup | int | `1000` | | | podSecurityContext.fsGroupChangePolicy | string | `"OnRootMismatch"` | | -| probes.livenessProbe | object | `{}` | Configure liveness probe | -| probes.readinessProbe | object | `{}` | Configure readiness probe | +| probes.livenessProbe | object | `{"initialDelaySeconds":20,"periodSeconds":15,"timeoutSeconds":3}` | Configure liveness probe | +| probes.readinessProbe | object | `{"initialDelaySeconds":60,"periodSeconds":15,"timeoutSeconds":3}` | Configure readiness probe | | probes.startupProbe | string | `nil` | Configure startup probe | | resources | object | `{}` | | | route.main.additionalRules | list | `[]` | | diff --git a/charts/seerr-chart/templates/statefulset.yaml b/charts/seerr-chart/templates/statefulset.yaml index ad45170ef..1888ea419 100644 --- a/charts/seerr-chart/templates/statefulset.yaml +++ b/charts/seerr-chart/templates/statefulset.yaml @@ -44,7 +44,7 @@ spec: protocol: TCP livenessProbe: httpGet: - path: / + path: /api/v1/settings/public port: http {{- if .Values.probes.livenessProbe.initialDelaySeconds }} initialDelaySeconds: {{ .Values.probes.livenessProbe.initialDelaySeconds }} @@ -63,7 +63,7 @@ spec: {{- end }} readinessProbe: httpGet: - path: / + path: /api/v1/settings/public port: http {{- if .Values.probes.readinessProbe.initialDelaySeconds }} initialDelaySeconds: {{ .Values.probes.readinessProbe.initialDelaySeconds }} @@ -97,6 +97,7 @@ spec: volumeMounts: - name: config mountPath: /app/config + subPath: {{ .Values.config.persistence.subPath }} {{- with .Values.volumeMounts }} {{- toYaml . | nindent 12 }} {{- end }} diff --git a/charts/seerr-chart/values.yaml b/charts/seerr-chart/values.yaml index 40378b6ac..41997ff2f 100644 --- a/charts/seerr-chart/values.yaml +++ b/charts/seerr-chart/values.yaml @@ -13,19 +13,19 @@ fullnameOverride: '' # Liveness / Readiness / Startup Probes probes: # -- Configure liveness probe - livenessProbe: {} - # initialDelaySeconds: 60 - # periodSeconds: 30 - # timeoutSeconds: 5 - # successThreshold: 1 - # failureThreshold: 5 + livenessProbe: + initialDelaySeconds: 20 + periodSeconds: 15 + timeoutSeconds: 3 + # successThreshold: 1 + # failureThreshold: 3 # -- Configure readiness probe - readinessProbe: {} - # initialDelaySeconds: 60 - # periodSeconds: 30 - # timeoutSeconds: 5 - # successThreshold: 1 - # failureThreshold: 5 + readinessProbe: + initialDelaySeconds: 60 + periodSeconds: 15 + timeoutSeconds: 3 + # successThreshold: 1 + # failureThreshold: 3 # -- Configure startup probe startupProbe: null # tcpSocket: @@ -88,6 +88,8 @@ config: volumeName: '' # -- Specify an existing `PersistentVolumeClaim` to use. If this value is provided, the default PVC will not be created existingClaim: '' + # -- Subpath of the pvc which should be mounted + subPath: '' ingress: enabled: false diff --git a/cypress/config/settings.cypress.json b/cypress/config/settings.cypress.json index 949351c37..f485424fc 100644 --- a/cypress/config/settings.cypress.json +++ b/cypress/config/settings.cypress.json @@ -1,5 +1,6 @@ { "clientId": "6919275e-142a-48d8-be6b-93594cbd4626", + "sessionSecret": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "vapidPrivate": "tmnslaO8ZWN6bNbSEv_rolPeBTlNxOwCCAHrM9oZz3M", "vapidPublic": "BK_EpP8NDm9waor2zn6_S28o3ZYv4kCkJOfYpO3pt3W6jnPmxrgTLANUBNbbyaNatPnSQ12De9CeqSYQrqWzHTs", "main": { diff --git a/cypress/e2e/user/user-list.cy.ts b/cypress/e2e/user/user-list.cy.ts index 82117023b..09b5d1814 100644 --- a/cypress/e2e/user/user-list.cy.ts +++ b/cypress/e2e/user/user-list.cy.ts @@ -36,7 +36,7 @@ describe('User List', () => { cy.get('#email').type(testUser.emailAddress); cy.get('#password').type(testUser.password); - cy.intercept('/api/v1/user?take=10&skip=0&sort=displayname').as('user'); + cy.intercept('/api/v1/user*').as('user'); cy.get('[data-testid=modal-ok-button]').click(); @@ -56,7 +56,7 @@ describe('User List', () => { cy.get('[data-testid=modal-title]').should('contain', `Delete User`); - cy.intercept('/api/v1/user?take=10&skip=0&sort=displayname').as('user'); + cy.intercept('/api/v1/user*').as('user'); cy.get('[data-testid=modal-ok-button]').should('contain', 'Delete').click(); @@ -67,4 +67,42 @@ describe('User List', () => { .contains(testUser.emailAddress) .should('not.exist'); }); + + it('sorts by column headers and updates request params and row order', () => { + cy.intercept('GET', '/api/v1/user?*').as('userListFetch'); + + cy.visit('/users'); + cy.wait('@userListFetch'); + + cy.get('[data-testid=column-header-displayname]').click(); + cy.wait('@userListFetch').then((interception) => { + const url = interception.request.url; + expect(url).to.include('sort=displayname'); + expect(url).to.include('sortDirection=asc'); + }); + + cy.get( + '[data-testid=user-list-row] [data-testid=user-list-username-link]' + ).then(($links) => { + const displayNames = $links + .toArray() + .map((el) => (el as HTMLElement).innerText.trim().toLowerCase()); + const sortedAsc = [...displayNames].sort((a, b) => a.localeCompare(b)); + expect(displayNames).to.deep.equal(sortedAsc); + }); + + cy.get('[data-testid=column-header-created]').click(); + + cy.window().then((win) => { + const rawSettings = win.localStorage.getItem('ul-filter-settings'); + expect( + rawSettings, + 'ul-filter-settings should be stored in localStorage' + ).to.be.a('string'); + + const settings = JSON.parse(rawSettings as string); + expect(settings.currentSort).to.equal('created'); + expect(settings.sortDirection).to.equal('asc'); + }); + }); }); diff --git a/docs/extending-seerr/reverse-proxy.mdx b/docs/extending-seerr/reverse-proxy.mdx index 6068adf21..d77733c43 100644 --- a/docs/extending-seerr/reverse-proxy.mdx +++ b/docs/extending-seerr/reverse-proxy.mdx @@ -293,7 +293,7 @@ This is a third-party documentation maintained by the community. We can't provid log global option httplog http-response set-header Strict-Transport-Security max-age=15552000 - option httpchk GET /api/v1/status + option httpchk GET /api/v1/settings/public timeout connect 30000 timeout server 30000 retries 3 diff --git a/docs/getting-started/buildfromsource.mdx b/docs/getting-started/buildfromsource.mdx index 3c28346ef..ab4e210e2 100644 --- a/docs/getting-started/buildfromsource.mdx +++ b/docs/getting-started/buildfromsource.mdx @@ -157,7 +157,7 @@ npm install -g pm2 ``` 2. Start seerr with PM2: ```bash -pm2 start dist/index.js --name seerr --node-args="--NODE_ENV=production" +NODE_ENV=production pm2 start dist/index.js --name seerr ``` 3. Save the process list: ```bash @@ -206,7 +206,7 @@ git checkout main 3. Install the dependencies: ```powershell npm install -g win-node-env -set CYPRESS_INSTALL_BINARY=0 && pnpm install --frozen-lockfile +$env:CYPRESS_INSTALL_BINARY = 0; pnpm install --frozen-lockfile ``` 4. Build the project: ```powershell @@ -230,7 +230,7 @@ You can now access Seerr by visiting `http://localhost:5055` in your web browser To run seerr as a bat script: 1. Create a file named `start-seerr.bat` in the seerr directory: -```bat +```batch @echo off set PORT=5055 set NODE_ENV=production @@ -275,7 +275,7 @@ npm install -g pm2 ``` 2. Start seerr with PM2: ```powershell -pm2 start dist/index.js --name seerr --node-args="--NODE_ENV=production" +$env:NODE_ENV = "production"; pm2 start dist/index.js --name seerr ``` 3. Save the process list: ```powershell diff --git a/docs/getting-started/docker.mdx b/docs/getting-started/docker.mdx index 0a959accd..b6a12ec29 100644 --- a/docs/getting-started/docker.mdx +++ b/docs/getting-started/docker.mdx @@ -18,6 +18,8 @@ Our Docker images are available with the following tags: - `latest`: Always points to the most recent stable release. - Version tags (e.g., `v3.0.0`): For specific stable versions. +- Major version aliases (e.g., `v3`): Alias for the latest stable release in the respective major version series. +- Minor version aliases (e.g., `v3.0`): Alias for the latest stable release in the respective minor version series. - `develop`: Rolling release/nightly builds for using the latest changes (use with caution). ::: @@ -61,7 +63,7 @@ docker run -d \ -p 5055:5055 \ -v /path/to/appdata/config:/app/config \ --restart unless-stopped \ - --health-cmd "wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status || exit 1" \ + --health-cmd "wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/settings/public || exit 1" \ --health-start-period 20s \ --health-timeout 3s \ --health-interval 15s \ @@ -116,7 +118,7 @@ services: volumes: - /path/to/appdata/config:/app/config healthcheck: - test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status || exit 1 + test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/settings/public || exit 1 start_period: 20s timeout: 3s interval: 15s @@ -163,41 +165,85 @@ docker volume create seerr-data or the Docker Desktop app: 1. Open the Docker Desktop app 2. Head to the Volumes tab -3. Click on the "New Volume" button near the top right +3. Click on the "Create a volume" in the center of the page. Or if you have other volumes already, click on the "Create" button on the top right of the page. 4. Enter a name for the volume (example: `seerr-data`) and hit "Create" Then, create and start the Seerr container: - -```bash -docker run -d \ - --name seerr \ - --init \ - -e LOG_LEVEL=debug \ - -e TZ=Asia/Tashkent \ - -e PORT=5055 \ - -p 5055:5055 \ - -v seerr-data:/app/config \ - --restart unless-stopped \ - --health-cmd "wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status || exit 1" \ - --health-start-period 20s \ - --health-timeout 3s \ - --health-interval 15s \ - --health-retries 3 \ + +```powershell +docker run -d ` + --name seerr ` + --init ` + -e LOG_LEVEL=debug ` + -e TZ=Asia/Tashkent ` + -e PORT=5055 ` + -p 5055:5055 ` + -v seerr-data:/app/config ` + --restart unless-stopped ` + --health-cmd "wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/settings/public || exit 1" ` + --health-start-period 20s ` + --health-timeout 3s ` + --health-interval 15s ` + --health-retries 3 ` ghcr.io/seerr-team/seerr:latest ``` The argument `-e PORT=5055` is optional. #### Updating: + +Stop and remove the existing container: +```powershell +docker stop seerr; docker rm seerr +``` Pull the latest image: -```bash -docker compose pull seerr +```powershell +docker pull ghcr.io/seerr-team/seerr:latest ``` -Then, restart all services defined in the Compose file: -```bash -docker compose up -d +Finally, run the container with the same parameters originally used to create the container: +```powershell +docker run -d ... ``` + + + + +```batch +docker run -d ^ + --name seerr ^ + --init ^ + -e LOG_LEVEL=debug ^ + -e TZ=Asia/Tashkent ^ + -e PORT=5055 ^ + -p 5055:5055 ^ + -v seerr-data:/app/config ^ + --restart unless-stopped ^ + --health-cmd "wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/settings/public || exit 1" ^ + --health-start-period 20s ^ + --health-timeout 3s ^ + --health-interval 15s ^ + --health-retries 3 ^ + ghcr.io/seerr-team/seerr:latest +``` + +The argument `-e PORT=5055` is optional. + +#### Updating: + +Stop and remove the existing container: +```batch +docker stop seerr && docker rm seerr +``` +Pull the latest image: +```batch +docker pull ghcr.io/seerr-team/seerr:latest +``` +Finally, run the container with the same parameters originally used to create the container: +```batch +docker run -d ... +``` + @@ -216,7 +262,7 @@ services: volumes: - seerr-data:/app/config healthcheck: - test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status || exit 1 + test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/settings/public || exit 1 start_period: 20s timeout: 3s interval: 15s diff --git a/docs/getting-started/nixpkg.mdx b/docs/getting-started/nixpkg.mdx new file mode 100644 index 000000000..43cee97cb --- /dev/null +++ b/docs/getting-started/nixpkg.mdx @@ -0,0 +1,96 @@ +--- +title: Nix Package Manager (Advanced) +description: Install Seerr using Nixpkgs +sidebar_position: 4 +--- + +import { SeerrVersion, NixpkgVersion } from '@site/src/components/SeerrVersion'; +import Admonition from '@theme/Admonition'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +# Nix Package Manager +:::warning +This method is not recommended for most users. It is intended for advanced users who are using NixOS distribution. +::: + +:::danger +The seerr service and package are available in the unstable channel only and will be officially included in the 26.05 release. +::: + +Refer to [NixOS documentation](https://search.nixos.org/options?channel=unstable&query=seerr) + + + +## Installation +To get up and running with seerr using Nix, you can add the following to your `configuration.nix`: +```nix +{ config, pkgs, ... }: +{ + services.seerr.enable = true; +} +``` + +After adding the configuration to your `configuration.nix`, you can run the following command to install seerr: +```bash +nixos-rebuild switch +``` +After rebuild is complete seerr should be running, verify that it is with the following command. +```bash +systemctl status seerr +``` +:::info +You can now access Seerr by visiting `http://localhost:5055` in your web browser. +::: diff --git a/docs/getting-started/third-parties/aur.mdx b/docs/getting-started/third-parties/aur.mdx index 740b5ece8..6c3731d6f 100644 --- a/docs/getting-started/third-parties/aur.mdx +++ b/docs/getting-started/third-parties/aur.mdx @@ -1,7 +1,7 @@ --- title: AUR (Advanced) description: Install Seerr using the Arch User Repository -sidebar_position: 2 +sidebar_position: 1 --- # AUR diff --git a/docs/getting-started/third-parties/nixpkg.mdx b/docs/getting-started/third-parties/nixpkg.mdx deleted file mode 100644 index 224e7ad9b..000000000 --- a/docs/getting-started/third-parties/nixpkg.mdx +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Nix Package Manager (Advanced) -description: Install Seerr using Nixpkgs -sidebar_position: 1 ---- - -import { SeerrVersion, NixpkgVersion } from '@site/src/components/SeerrVersion'; -import Admonition from '@theme/Admonition'; -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Nix Package Manager -:::danger -This method has not yet been updated for Seerr and is currently a work in progress. -You can follow the ongoing work on these pull requests: - - https://github.com/NixOS/nixpkgs/pull/450096 - - https://github.com/NixOS/nixpkgs/pull/450093 -::: - - diff --git a/docs/getting-started/third-parties/synology.mdx b/docs/getting-started/third-parties/synology.mdx index 6a5e6d2af..583f1676c 100644 --- a/docs/getting-started/third-parties/synology.mdx +++ b/docs/getting-started/third-parties/synology.mdx @@ -1,7 +1,7 @@ --- title: Synology (Advanced) description: Install Seerr on Synology NAS using SynoCommunity -sidebar_position: 5 +sidebar_position: 4 --- # Synology diff --git a/docs/getting-started/third-parties/truenas.mdx b/docs/getting-started/third-parties/truenas.mdx index aa03e7266..ecf9ce49f 100644 --- a/docs/getting-started/third-parties/truenas.mdx +++ b/docs/getting-started/third-parties/truenas.mdx @@ -1,7 +1,7 @@ --- title: TrueNAS (Advanced) description: Install Seerr using TrueNAS -sidebar_position: 4 +sidebar_position: 3 --- # TrueNAS :::warning diff --git a/docs/getting-started/third-parties/unraid.mdx b/docs/getting-started/third-parties/unraid.mdx index e07dcf367..8f2d573fc 100644 --- a/docs/getting-started/third-parties/unraid.mdx +++ b/docs/getting-started/third-parties/unraid.mdx @@ -1,7 +1,7 @@ --- title: Unraid (Advanced) description: Install Seerr using Unraid -sidebar_position: 3 +sidebar_position: 2 --- import Tabs from '@theme/Tabs'; diff --git a/docs/migration-guide.mdx b/docs/migration-guide.mdx index e99d95a2a..c15667ad0 100644 --- a/docs/migration-guide.mdx +++ b/docs/migration-guide.mdx @@ -39,6 +39,8 @@ Our Docker images are available with the following tags: - `latest`: Always points to the most recent stable release. - Version tags (e.g., `v3.0.0`): For specific stable versions. +- Major version aliases (e.g., `v3`): Alias for the latest stable release in the respective major version series. +- Minor version aliases (e.g., `v3.0`): Alias for the latest stable release in the respective minor version series. - `develop`: Rolling release/nightly builds for using the latest changes (use with caution). ::: @@ -53,6 +55,7 @@ Changes : Since the container now runs as the `node` user (UID 1000), you must ensure your config folder has the correct permissions. The `node` user must have read and write access to the `/app/config` directory. If you're migrating from a previous installation, you may need to update the ownership of your config folder: + ```bash docker run --rm -v /path/to/appdata/config:/data alpine chown -R 1000:1000 /data ``` @@ -81,7 +84,7 @@ Summary of changes : volumes: - /path/to/appdata/config:/app/config healthcheck: - test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status || exit 1 + test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/settings/public || exit 1 start_period: 20s timeout: 3s interval: 15s @@ -106,6 +109,7 @@ Summary of changes : ### Windows + Summary of changes : @@ -124,7 +128,7 @@ Summary of changes : volumes: - seerr-data:/app/config healthcheck: - test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status || exit 1 + test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/settings/public || exit 1 start_period: 20s timeout: 3s interval: 15s @@ -136,17 +140,32 @@ Summary of changes : external: true ``` - - ```bash {2-3,8,10} - docker run -d \ - --name seerr \ - --init \ - -e LOG_LEVEL=debug \ - -e TZ=Asia/Tashkent \ - -e PORT=5055 \ - -p 5055:5055 \ - -v seerr-data:/app/config \ - --restart unless-stopped \ + + ```powershell {2-3,8,10} + docker run -d ` + --name seerr ` + --init ` + -e LOG_LEVEL=debug ` + -e TZ=Asia/Tashkent ` + -e PORT=5055 ` + -p 5055:5055 ` + -v seerr-data:/app/config ` + --restart unless-stopped ` + ghcr.io/seerr-team/seerr:latest + ``` + + + + ```batch {2-3,8,10} + docker run -d ^ + --name seerr ^ + --init ^ + -e LOG_LEVEL=debug ^ + -e TZ=Asia/Tashkent ^ + -e PORT=5055 ^ + -p 5055:5055 ^ + -v seerr-data:/app/config ^ + --restart unless-stopped ^ ghcr.io/seerr-team/seerr:latest ``` @@ -199,16 +218,18 @@ Summary of changes : +## Nix + +Refer to [Seerr Documentation](/getting-started/nixpkg), all of our examples have been updated to reflect the below change. + +The seerr service and package are available in the unstable channel and will be officially included in the 26.05 release. + ## Third-party installation methods :::warning Third-party installation methods are maintained by the community. The Seerr team is not responsible for these packages. ::: -### Nix - -Waiting for https://github.com/NixOS/nixpkgs/pull/450096 and https://github.com/NixOS/nixpkgs/pull/450093 - ### AUR See https://aur.archlinux.org/packages/seerr @@ -277,4 +298,4 @@ Follow the [Unraid Installation Guide](/getting-started/third-parties/unraid#2-s Start the newly created Seerr container. Check the container logs to confirm the automatic migration completed successfully. **5. Remove the old app** -Once you have confirmed Seerr is working properly and your data has successfully migrated, you can safely **Remove** the old Overseerr (or Jellyseerr) container from Unraid. \ No newline at end of file +Once you have confirmed Seerr is working properly and your data has successfully migrated, you can safely **Remove** the old Overseerr (or Jellyseerr) container from Unraid. diff --git a/docs/using-seerr/advanced/self-signed-certificates.mdx b/docs/using-seerr/advanced/self-signed-certificates.mdx new file mode 100644 index 000000000..7ad8b22cf --- /dev/null +++ b/docs/using-seerr/advanced/self-signed-certificates.mdx @@ -0,0 +1,61 @@ +--- +id: self-signed-certificates +title: Self-Signed Certificates +sidebar_label: Self-Signed Certificates +description: How to configure Seerr to work with services that use self-signed SSL certificates. +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +# Self-Signed Certificates + +If your media server or services (Radarr, Sonarr, etc.) use self-signed SSL certificates, Seerr will reject the connection because it does not trust them by default. The fix is to add your CA certificate to Node.js. + +## Add Your CA Certificate + +The `NODE_EXTRA_CA_CERTS` environment variable tells Node.js to trust additional Certificate Authority (CA) certificates. This approach keeps certificate validation active while trusting your specific certificate. + +You will need to mount your certificate file (in PEM format) into the container and set the environment variable to point to it. + +:::note +These examples show only the certificate-related configuration. For a complete setup, see the [Getting Started](/getting-started) guide. +::: + + + + +```bash +docker run -d \ + --name seerr \ + -e NODE_EXTRA_CA_CERTS=/certs/my-ca.pem \ + -v /path/to/my-ca.pem:/certs/my-ca.pem:ro \ + -p 5055:5055 \ + ghcr.io/seerr-team/seerr:latest +``` + + + + +```yaml +services: + seerr: + image: ghcr.io/seerr-team/seerr:latest + environment: + - NODE_EXTRA_CA_CERTS=/certs/my-ca.pem + volumes: + - /path/to/my-ca.pem:/certs/my-ca.pem:ro + ports: + - 5055:5055 +``` + + + + +Replace `/path/to/my-ca.pem` with the actual path to your CA certificate on the host. The path after the colon (`/certs/my-ca.pem`) is where it will be available inside the container. + +:::tip +The certificate must be in PEM format. Open it in a text editor — if it starts with `-----BEGIN CERTIFICATE-----`, it is PEM. If it contains binary data, convert it with `openssl x509 -inform DER -in cert.cer -out cert.pem`. +::: + +For more details, see the [Node.js documentation on adding CA certificates](https://nodejs.org/en/learn/http/enterprise-network-configuration#adding-additional-ca-certificates). diff --git a/docs/using-seerr/notifications/ntfy.md b/docs/using-seerr/notifications/ntfy.md index 946dca781..72a3790f5 100644 --- a/docs/using-seerr/notifications/ntfy.md +++ b/docs/using-seerr/notifications/ntfy.md @@ -24,6 +24,10 @@ Set this to the username and password for your ntfy.sh server. Set this to the token for your ntfy.sh server. +### Priority (optional) + +Set the priority level for notifications. Options range from Minimum (1) to Urgent (5), with Default (3) being the standard level. Higher priority notifications may bypass Do Not Disturb settings on some devices. + :::info Please refer to the [ntfy.sh API documentation](https://docs.ntfy.sh/) for more details on configuring these notifications. ::: diff --git a/docs/using-seerr/notifications/webhook.md b/docs/using-seerr/notifications/webhook.md index eb99a5eef..f82afadc7 100644 --- a/docs/using-seerr/notifications/webhook.md +++ b/docs/using-seerr/notifications/webhook.md @@ -22,6 +22,17 @@ This is typically not needed. Please refer to your webhook provider's documentat This value will be sent as an `Authorization` HTTP header. +### Custom Headers (optional) + +You can add additional custom HTTP headers to be sent with each webhook request. This is useful for API keys, custom authentication schemes, or any other headers your webhook endpoint requires. + +- Click "Add Header" to add a new header +- Enter the header name and value + +:::warning +You cannot configure both the **Authorization Header** field and a custom `Authorization` header in Custom Headers at the same time. You must choose one method. +::: + ### JSON Payload Customize the JSON payload to suit your needs. Seerr provides several [template variables](#template-variables) for use in the payload, which will be replaced with the relevant data when the notifications are triggered. @@ -84,13 +95,15 @@ The `{{media}}` will be `null` if there is no relevant media object for the noti These following special variables are only included in media-related notifications, such as requests. -| Variable | Value | -| -------------------- | -------------------------------------------------------------------------------------------------------------- | -| `{{media_type}}` | The media type (`movie` or `tv`) | -| `{{media_tmdbid}}` | The media's TMDB ID | -| `{{media_tvdbid}}` | The media's TheTVDB ID | -| `{{media_status}}` | The media's availability status (`UNKNOWN`, `PENDING`, `PROCESSING`, `PARTIALLY_AVAILABLE`, or `AVAILABLE`) | -| `{{media_status4k}}` | The media's 4K availability status (`UNKNOWN`, `PENDING`, `PROCESSING`, `PARTIALLY_AVAILABLE`, or `AVAILABLE`) | +| Variable | Value | +| ------------------------------| -------------------------------------------------------------------------------------------------------------- | +| `{{media_type}}` | The media type (`movie` or `tv`) | +| `{{media_imdbid}}` | The media's IMDb ID | +| `{{media_tmdbid}}` | The media's TMDB ID | +| `{{media_tvdbid}}` | The media's TheTVDB ID | +| `{{media_status}}` | The media's availability status (`UNKNOWN`, `PENDING`, `PROCESSING`, `PARTIALLY_AVAILABLE`, or `AVAILABLE`) | +| `{{media_status4k}}` | The media's 4K availability status (`UNKNOWN`, `PENDING`, `PROCESSING`, `PARTIALLY_AVAILABLE`, or `AVAILABLE`) | +| `{{media_jellyfinMediaId}}` | The media's Jellyfin Media ID | #### Request @@ -104,6 +117,7 @@ The following special variables are only included in request-related notificatio | `{{requestedBy_username}}` | The requesting user's username | | `{{requestedBy_email}}` | The requesting user's email address | | `{{requestedBy_avatar}}` | The requesting user's avatar URL | +| `{{requestedBy_jellyfinUserId}}` | The requesting user's Jellyfin User ID | | `{{requestedBy_settings_discordId}}` | The requesting user's Discord ID (if set) | | `{{requestedBy_settings_telegramChatId}}` | The requesting user's Telegram Chat ID (if set) | diff --git a/docs/using-seerr/settings/dns-caching.md b/docs/using-seerr/settings/dns-caching.md deleted file mode 100644 index b83f7896b..000000000 --- a/docs/using-seerr/settings/dns-caching.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: DNS Caching -description: Configure DNS caching settings. -sidebar_position: 7 ---- - -# DNS Caching - -Seerr uses DNS caching to improve performance and reduce the number of DNS lookups required for external API calls. This can help speed up response times and reduce load on DNS servers, when something like a Pi-hole is used as a DNS resolver. - -## Configuration - -You can enable the DNS caching settings in the Network tab of the Seerr settings. The default values follow the standard DNS caching behavior. - -- **Force Minimum TTL**: Set a minimum time-to-live (TTL) in seconds for DNS cache entries. This ensures that frequently accessed DNS records are cached for a longer period, reducing the need for repeated lookups. Default is 0. -- **Force Maximum TTL**: Set a maximum time-to-live (TTL) in seconds for DNS cache entries. This prevents infrequently accessed DNS records from being cached indefinitely, allowing for more up-to-date information to be retrieved. Default is -1 (unlimited). diff --git a/docs/using-seerr/settings/general.md b/docs/using-seerr/settings/general.md index 18fd32765..65b337495 100644 --- a/docs/using-seerr/settings/general.md +++ b/docs/using-seerr/settings/general.md @@ -24,28 +24,6 @@ Set this to the externally-accessible URL of your Seerr instance. You must configure this setting in order to enable password reset and generation emails. -## Enable Proxy Support - -If you have Seerr behind a reverse proxy, enable this setting to allow Seerr to correctly register client IP addresses. For details, please see the [Express Documentation](https://expressjs.com/en/guide/behind-proxies.html). - -This setting is **disabled** by default. - -## Enable CSRF Protection - -:::warning -**This is an advanced setting.** Please only enable this setting if you are familiar with CSRF protection and how it works. -::: - -CSRF stands for [cross-site request forgery](https://en.wikipedia.org/wiki/Cross-site_request_forgery). When this setting is enabled, all external API access that alters Seerr application data is blocked. - -If you do not use Seerr integrations with third-party applications to add/modify/delete requests or users, you can consider enabling this setting to protect against malicious attacks. - -One caveat, however, is that HTTPS is required, meaning that once this setting is enabled, you will no longer be able to access your Seerr instance over _HTTP_ (including using an IP address and port number). - -If you enable this setting and find yourself unable to access Seerr, you can disable the setting by modifying `settings.json` in `/app/config`. - -This setting is **disabled** by default. - ## Enable Image Caching When enabled, Jellseerr will proxy and cache images from pre-configured sources (such as TMDB). This can use a significant amount of disk space. @@ -62,6 +40,15 @@ Set the default display language for Seerr. Users can override this setting in t These settings filter content shown on the "Discover" home page based on regional availability and original language, respectively. The Streaming Region filters the available streaming providers on the media page. Users can override these global settings by configuring these same options in their user settings. +## Blocklist Region and Blocklist Language + +These settings control the region and language used specifically for blocklist content scanning. The "Process Blocklisted Tags" job uses these settings to determine which content to scan for blocklisting, independent of the general Discover settings. + +- **Blocklist Region**: The region used for blocklist content scanning. Leave empty to scan all regions. +- **Blocklist Language**: The language used for blocklist content scanning. Leave empty to scan all languages. + +These settings are separate from the general "Discover Region" and "Discover Language" settings, allowing you to blocklist content from specific regions/languages regardless of what users see in their Discover pages. + ## Blocklist Content with Tags and Limit Content Blocklisted per Tag These settings blocklist any TV shows or movies that have one of the entered tags. The "Process Blocklisted Tags" job adds entries to the blocklist based on the configured blocklisted tags. If a blocklisted tag is removed, any media blocklisted under that tag will be removed from the blocklist when the "Process Blocklisted Tags" job runs. diff --git a/docs/using-seerr/settings/mediaserver.mdx b/docs/using-seerr/settings/mediaserver.mdx index 54c477028..e813d7da9 100644 --- a/docs/using-seerr/settings/mediaserver.mdx +++ b/docs/using-seerr/settings/mediaserver.mdx @@ -84,7 +84,7 @@ This value should be set to the port that your Jellyfin server listens on. The d #### Use SSL -Enable this setting to connect to Jellyfin via HTTPS rather than HTTP. Note that self-signed certificates are **not** officially supported. +Enable this setting to connect to Jellyfin via HTTPS rather than HTTP. Self-signed certificates are not trusted by default, but you can configure Seerr to accept them. See [Self-Signed Certificates](/using-seerr/advanced/self-signed-certificates) for details. #### External URL @@ -178,7 +178,7 @@ This value should be set to the port that your Emby server listens on. The defau #### Use SSL -Enable this setting to connect to Emby via HTTPS rather than HTTP. Note that self-signed certificates are **not** officially supported. +Enable this setting to connect to Emby via HTTPS rather than HTTP. Self-signed certificates are not trusted by default, but you can configure Seerr to accept them. See [Self-Signed Certificates](/using-seerr/advanced/self-signed-certificates) for details. #### External URL @@ -218,7 +218,7 @@ This value should be set to the port that your Plex server listens on. The defau #### Use SSL -Enable this setting to connect to Plex via HTTPS rather than HTTP. Note that self-signed certificates are _not_ supported. +Enable this setting to connect to Plex via HTTPS rather than HTTP. Self-signed certificates are not trusted by default, but you can configure Seerr to accept them. See [Self-Signed Certificates](/using-seerr/advanced/self-signed-certificates) for details. #### Web App URL (optional) diff --git a/docs/using-seerr/settings/network.md b/docs/using-seerr/settings/network.md new file mode 100644 index 000000000..69fbf09a4 --- /dev/null +++ b/docs/using-seerr/settings/network.md @@ -0,0 +1,60 @@ +--- +title: Network +description: Configure Network settings. +sidebar_position: 7 +--- + +# Network + +Network-related settings are available in the **Network** tab under **Settings**. These options control how Seerr communicates with external services + +## DNS Caching + +Seerr allows you to enable DNS caching if you are experiencing DNS-related issues. When enabled, it improves performance and reduces the number of DNS lookups required for external API calls. This can help speed up response times and reduce the load on DNS servers, especially when a local resolver like Pi-hole is used. + +### Configuration + +You can enable the DNS caching settings in the Network tab of the Seerr settings. The default values follow the standard DNS caching behavior. + +- **Force Minimum TTL**: Set a minimum time-to-live (TTL) in seconds for DNS cache entries. This ensures that frequently accessed DNS records are cached for a longer period, reducing the need for repeated lookups. Default is 0. +- **Force Maximum TTL**: Set a maximum time-to-live (TTL) in seconds for DNS cache entries. This prevents infrequently accessed DNS records from being cached indefinitely, allowing for more up-to-date information to be retrieved. Default is -1 (unlimited). + +## Force IPv4 resolution first + +Sometimes there are configuration issues with IPv6 that prevent the hostname resolution from working correctly. + +You can force resolution to prefer IPv4 by going to `Settings > Network`, enabling `Force IPv4 Resolution First`, and then restarting Seerr. + +## HTTP(S) Proxy + +If you can't change your DNS servers or force IPV4 resolution, you can use Seerr through a proxy. + +In some places (like China), the ISP blocks not only the DNS resolution but also the connection to the TMDB API. + +## Enable Proxy Support + +If you have Seerr behind a reverse proxy, enable this setting to allow Seerr to correctly register client IP addresses. For details, please see the [Express Documentation](https://expressjs.com/en/guide/behind-proxies.html). + +This setting is **disabled** by default. + +## Enable CSRF Protection + +:::warning +**This is an advanced setting.** Please only enable this setting if you are familiar with CSRF protection and how it works. +::: + +CSRF stands for [cross-site request forgery](https://en.wikipedia.org/wiki/Cross-site_request_forgery). When this setting is enabled, all external API access that alters Seerr application data is blocked. + +If you do not use Seerr integrations with third-party applications to add/modify/delete requests or users, you can consider enabling this setting to protect against malicious attacks. + +One caveat, however, is that HTTPS is required, meaning that once this setting is enabled, you will no longer be able to access your Seerr instance over _HTTP_ (including using an IP address and port number). + +If you enable this setting and find yourself unable to access Seerr, you can disable the setting by modifying `settings.json` in `/app/config`. + +This setting is **disabled** by default. + +## API Request Timeout + +The API Request Timeout setting defines the maximum time (in seconds) Seerr will wait for a response from external services, such as Radarr or Sonarr. The default value is 10 seconds, though it can be entirely disabled by setting it to 0. Please note that any changes to this value require restarting Seerr to take effect. + +Enforcing a timeout ensures the Seerr interface remains responsive and prevents infinite loading states when a connected service unexpectedly goes offline. Conversely, you may want to increase this value if you frequently experience failed requests due to your external services being slow to respond, which often happens when they are under heavy load or querying network-mounted storage. diff --git a/docs/using-seerr/settings/services.md b/docs/using-seerr/settings/services.md index 4dba58fac..a0786f606 100644 --- a/docs/using-seerr/settings/services.md +++ b/docs/using-seerr/settings/services.md @@ -44,7 +44,7 @@ This value should be set to the port that your Radarr/Sonarr server listens on. #### Use SSL -Enable this setting to connect to Radarr/Sonarr via HTTPS rather than HTTP. Note that self-signed certificates are _not_ supported. +Enable this setting to connect to Radarr/Sonarr via HTTPS rather than HTTP. Self-signed certificates are not trusted by default, but you can configure Seerr to accept them. See [Self-Signed Certificates](/using-seerr/advanced/self-signed-certificates) for details. #### API Key diff --git a/eslint.config.mts b/eslint.config.mts new file mode 100644 index 000000000..d5905d4ad --- /dev/null +++ b/eslint.config.mts @@ -0,0 +1,95 @@ +import js from '@eslint/js'; +import nextPlugin from '@next/eslint-plugin-next'; +import prettier from 'eslint-config-prettier'; +import formatjs from 'eslint-plugin-formatjs'; +import jsxA11y from 'eslint-plugin-jsx-a11y'; +import noRelativeImportPaths from 'eslint-plugin-no-relative-import-paths'; +import reactPlugin from 'eslint-plugin-react'; +import reactHooks from 'eslint-plugin-react-hooks'; +import { defineConfig, type Config } from 'eslint/config'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; + +type Plugin = NonNullable[string]; + +export default defineConfig( + // Global ignores + { + ignores: ['node_modules/**', '.next/**'], + }, + js.configs.recommended, + tseslint.configs.recommended, + jsxA11y.flatConfigs.recommended, + { + languageOptions: { + ecmaVersion: 2023, + sourceType: 'module', + parserOptions: { + ecmaFeatures: { jsx: true }, + }, + globals: { + ...globals.browser, + ...globals.node, + ...globals.jest, + }, + }, + settings: { + react: { + pragma: 'React', + version: '18.3', + }, + }, + plugins: { + react: reactPlugin, + 'react-hooks': reactHooks as Plugin, + formatjs, + 'no-relative-import-paths': noRelativeImportPaths, + '@next/next': nextPlugin, + }, + rules: { + ...nextPlugin.configs.recommended.rules, + + // TypeScript + '@typescript-eslint/no-explicit-any': 'warn', + '@typescript-eslint/no-use-before-define': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-unused-vars': 'error', + '@typescript-eslint/array-type': ['error', { default: 'array' }], + '@typescript-eslint/consistent-type-imports': [ + 'error', + { prefer: 'type-imports' }, + ], + + // React + 'react/prop-types': 'off', + 'react/self-closing-comp': 'error', + + // jsx-a11y + 'jsx-a11y/no-noninteractive-tabindex': 'off', + 'jsx-a11y/anchor-is-valid': 'off', + 'jsx-a11y/no-onchange': 'off', + + // React Hooks + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'warn', + + // General + 'arrow-parens': 'off', + 'no-console': 'warn', + 'no-unused-vars': 'off', + + // Plugins + 'formatjs/no-offset': 'error', + 'no-relative-import-paths/no-relative-import-paths': [ + 'error', + { allowSameFolder: true }, + ], + }, + }, + prettier, + { + linterOptions: { + reportUnusedDisableDirectives: true, + }, + } +); diff --git a/gen-docs/blog/2026-02-28-seerr-security-fix-release.md b/gen-docs/blog/2026-02-28-seerr-security-fix-release.md new file mode 100644 index 000000000..bfe5077ad --- /dev/null +++ b/gen-docs/blog/2026-02-28-seerr-security-fix-release.md @@ -0,0 +1,72 @@ +--- +title: "Seerr v3.1.0: Critical Security Release" +description: "Seerr v3.1.0 addresses three CVEs, including a high-priority vulnerability affecting Plex-configured instances. Upgrade immediately." +slug: seerr-3-1-0-security-release +authors: [seerr-team] +image: https://raw.githubusercontent.com/seerr-team/seerr/refs/heads/develop/gen-docs/static/img/logo_full.svg +hide_table_of_contents: false +--- + +We are releasing **Seerr v3.1.0**, a security-focused update that addresses three CVEs, including a high-priority vulnerability affecting instances configured with Plex Media Server. **We strongly recommend upgrading as soon as possible.** + +This release also includes a number of bug fixes and marks the end of our post-merger feature freeze. New features will be resuming in future updates. + + + +## Security Vulnerabilities + +This release patches three newly identified CVEs. If you are running a Plex-configured instance of Seerr, **one of these vulnerabilities is high priority and poses a significant risk**, please upgrade immediately. + +### [CVE-2026-27707](https://github.com/seerr-team/seerr/security/advisories/GHSA-rc4w-7m3r-c2f7) — Unauthenticated Account Registration via Jellyfin Endpoint (High) + +On instances configured to use Plex as the media server, an unauthenticated attacker could register an account by abusing the Jellyfin authentication endpoint. This could allow unauthorized users to gain access to your Seerr instance without valid Plex credentials. + +### [CVE-2026-27793](https://github.com/seerr-team/seerr/security/advisories/GHSA-f7xw-jcqr-57hp) — Broken Object-Level Authorization in User Profile Endpoint (Medium) + +A broken object-level authorization vulnerability in the user profile endpoint could allow an authenticated user to access another user's profile data, including third-party notification credentials such as webhook URLs, Telegram tokens, and similar sensitive configuration. + +### [CVE-2026-27792](https://github.com/seerr-team/seerr/security/advisories/GHSA-gx3h-3jg5-q65f) — Missing Authentication on Push Subscription Endpoints (Medium) + +The push subscription endpoints lacked proper authentication checks, allowing unauthenticated requests to interact with subscription management functionality. + +--- + +Please review the full security advisories linked above for technical details, impact assessment, and mitigation steps. + +## Bug Fixes + +Alongside the security patches, this release ships a number of bug fixes: + +- ***(helm)*** Add `"v"` as prefix for `appVersion` tag +- ***(jellyfin-scanner)*** Include unmatched seasons in processable seasons +- ***(link-account)*** Fix error-message override +- ***(plex-scanner)*** Add TVDb to TMDB fallback in Plex scanner +- ***(radarr)*** Trigger search for existing monitored movies without files +- ***(servarr)*** Increase default API timeout from 5000ms to 10000ms +- ***(sonarr)*** Use configured metadata provider for season filtering +- ***(watch-data)*** Use sentinel values to avoid invalid SQL syntax +- ***(watchlist-sync)*** Correct permission typo for TV auto requests +- Preserve blocklist on media deletion & optimise watchlist-sync + +## New Contributors + +Many thanks to those making their first contribution to Seerr in this release: + +* [@caillou](https://github.com/caillou) +* [@Kenshin9977](https://github.com/Kenshin9977) +* [@MagicLegend](https://github.com/MagicLegend) +* [@wiiaam](https://github.com/wiiaam) +* [@mjonkus](https://github.com/mjonkus) +* [@nova-api](https://github.com/nova-api) +* [@mreid-tt](https://github.com/mreid-tt) +* [@DataBitz](https://github.com/DataBitz) +* [@Hyperion2220](https://github.com/Hyperion2220) +* [@blassley](https://github.com/blassley) +* [@JanKleine](https://github.com/JanKleine) +* [@koiralasandesh](https://github.com/koiralasandesh) + +## What's Next + +Now that the post-merger feature freeze has ended, the team is resuming active feature development. Stay tuned to our blog for upcoming releases and in-depth looks at what we're building next. + +In the meantime, please upgrade to **v3.1.0** right away, especially if you are using a Plex Media Server configuration. See our [migration guide](https://docs.seerr.dev/migration-guide) if you need help upgrading from Overseerr/Jellyseerr. \ No newline at end of file diff --git a/gen-docs/docusaurus.config.ts b/gen-docs/docusaurus.config.ts index 94b7d8828..5177de038 100644 --- a/gen-docs/docusaurus.config.ts +++ b/gen-docs/docusaurus.config.ts @@ -133,7 +133,14 @@ const config: Config = { prism: { theme: prismThemes.shadesOfPurple, darkTheme: prismThemes.shadesOfPurple, - additionalLanguages: ['bash', 'powershell', 'yaml', 'nix', 'nginx'], + additionalLanguages: [ + 'bash', + 'powershell', + 'yaml', + 'nix', + 'nginx', + 'batch', + ], }, } satisfies Preset.ThemeConfig, }; diff --git a/gen-docs/src/components/SeerrVersion/index.tsx b/gen-docs/src/components/SeerrVersion/index.tsx index 753c9b0e7..683d5fc27 100644 --- a/gen-docs/src/components/SeerrVersion/index.tsx +++ b/gen-docs/src/components/SeerrVersion/index.tsx @@ -34,9 +34,9 @@ export const NixpkgVersion = () => { const fetchVersion = async () => { try { const unstableUrl = - 'https://raw.githubusercontent.com/NixOS/nixpkgs/refs/heads/nixos-unstable/pkgs/by-name/je/jellyseerr/package.nix'; + 'https://raw.githubusercontent.com/NixOS/nixpkgs/refs/heads/nixos-unstable/pkgs/by-name/se/seerr/package.nix'; const stableUrl = - 'https://raw.githubusercontent.com/NixOS/nixpkgs/refs/heads/nixos-25.05/pkgs/by-name/je/jellyseerr/package.nix'; + 'https://raw.githubusercontent.com/NixOS/nixpkgs/refs/heads/nixos-26.05/pkgs/by-name/se/seerr/package.nix'; const [unstableResponse, stableResponse] = await Promise.all([ fetch(unstableUrl), diff --git a/package.json b/package.json index e18a1fc38..2208df17c 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "build": "pnpm build:next && pnpm build:server", "lint": "eslint \"./server/**/*.{ts,tsx}\" \"./src/**/*.{ts,tsx}\" --cache", "lintfix": "eslint \"./server/**/*.{ts,tsx}\" \"./src/**/*.{ts,tsx}\" --fix", + "test": "node server/test/index.mts", "start": "NODE_ENV=production node dist/index.js", "i18n:extract": "ts-node --project server/tsconfig.json src/i18n/extractMessages.ts", "migration:generate": "ts-node -r tsconfig-paths/register --project server/tsconfig.json ./node_modules/typeorm/cli.js migration:generate -d server/datasource.ts", @@ -43,7 +44,7 @@ "@heroicons/react": "2.2.0", "@seerr-team/react-tailwindcss-datepicker": "^1.3.4", "@supercharge/request-ip": "1.2.0", - "@svgr/webpack": "6.5.1", + "@svgr/webpack": "8.1.0", "@tanem/react-nprogress": "5.0.56", "@types/ua-parser-js": "^0.7.36", "@types/wink-jaro-distance": "^2.0.2", @@ -117,6 +118,8 @@ "devDependencies": { "@commitlint/cli": "17.4.4", "@commitlint/config-conventional": "17.4.4", + "@eslint/js": "9.39.3", + "@next/eslint-plugin-next": "^16.1.6", "@tailwindcss/aspect-ratio": "^0.4.2", "@tailwindcss/forms": "^0.5.10", "@tailwindcss/typography": "^0.5.16", @@ -124,7 +127,8 @@ "@types/cookie-parser": "1.4.10", "@types/country-flag-icons": "1.2.2", "@types/csurf": "1.11.5", - "@types/email-templates": "8.0.4", + "@types/email-templates": "10.0.4", + "@types/eslint-plugin-jsx-a11y": "^6.10.1", "@types/express": "4.17.17", "@types/express-session": "1.18.2", "@types/lodash": "4.17.21", @@ -137,45 +141,48 @@ "@types/react-transition-group": "4.4.12", "@types/secure-random-password": "0.2.1", "@types/semver": "7.7.1", + "@types/supertest": "^6.0.3", "@types/swagger-ui-express": "4.1.8", "@types/validator": "^13.15.10", "@types/web-push": "3.6.4", "@types/xml2js": "0.4.14", "@types/yamljs": "0.2.31", "@types/yup": "0.29.14", - "@typescript-eslint/eslint-plugin": "7.18.0", - "@typescript-eslint/parser": "7.18.0", "autoprefixer": "^10.4.23", "baseline-browser-mapping": "^2.8.32", + "commander": "^14.0.3", "commitizen": "4.3.1", "copyfiles": "2.4.1", "cy-mobile-commands": "0.3.0", "cypress": "14.5.4", "cz-conventional-changelog": "3.3.0", - "eslint": "8.57.1", - "eslint-config-next": "^14.2.35", - "eslint-config-prettier": "8.6.0", - "eslint-plugin-formatjs": "4.9.0", + "eslint": "9.39.3", + "eslint-config-prettier": "10.1.8", + "eslint-plugin-formatjs": "6.2.0", "eslint-plugin-jsx-a11y": "6.10.2", "eslint-plugin-no-relative-import-paths": "1.6.1", "eslint-plugin-prettier": "4.2.1", "eslint-plugin-react": "7.37.5", - "eslint-plugin-react-hooks": "4.6.0", + "eslint-plugin-react-hooks": "7.0.1", + "globals": "^17.3.0", "husky": "8.0.3", + "jiti": "^2.6.1", "lint-staged": "13.1.2", "nodemon": "3.1.11", "postcss": "^8.5.6", "prettier": "3.8.1", "prettier-plugin-organize-imports": "4.3.0", "prettier-plugin-tailwindcss": "0.6.14", + "supertest": "^7.2.2", "tailwindcss": "3.4.19", "ts-node": "10.9.2", "tsc-alias": "1.8.16", "tsconfig-paths": "4.2.0", - "typescript": "5.4.5" + "typescript": "5.4.5", + "typescript-eslint": "^8.56.1" }, "engines": { - "node": "^22.0.0", + "node": "^22.19.0", "pnpm": "^10.0.0" }, "config": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7b8d8ef93..4e7dfe5b7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,7 +14,7 @@ importers: dependencies: '@dr.pogodin/csurf': specifier: ^1.16.6 - version: 1.16.6 + version: 1.16.9 '@fontsource-variable/inter': specifier: ^5.2.8 version: 5.2.8 @@ -38,13 +38,13 @@ importers: version: 2.2.0(react@18.3.1) '@seerr-team/react-tailwindcss-datepicker': specifier: ^1.3.4 - version: 1.3.4(dayjs@1.11.19)(react@18.3.1) + version: 1.3.4(dayjs@1.11.20)(react@18.3.1) '@supercharge/request-ip': specifier: 1.2.0 version: 1.2.0 '@svgr/webpack': - specifier: 6.5.1 - version: 6.5.1 + specifier: 8.1.0 + version: 8.1.0(typescript@5.4.5) '@tanem/react-nprogress': specifier: 5.0.56 version: 5.0.56(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -71,7 +71,7 @@ importers: version: 2.13.1 connect-typeorm: specifier: 1.1.4 - version: 1.1.4(typeorm@0.3.28(babel-plugin-macros@3.1.0)(pg@8.17.2)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5))) + version: 1.1.4(typeorm@0.3.28(babel-plugin-macros@3.1.0)(pg@8.17.2)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.4.5))) cookie-parser: specifier: 1.4.7 version: 1.4.7 @@ -89,10 +89,10 @@ importers: version: 2.29.3 dns-caching: specifier: ^0.2.7 - version: 0.2.7 + version: 0.2.9 email-templates: specifier: 12.0.3 - version: 12.0.3(@babel/core@7.28.6)(encoding@0.1.13)(handlebars@4.7.8)(mustache@4.2.0)(pug@3.0.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.7) + version: 12.0.3(@babel/core@7.29.0)(encoding@0.1.13)(mustache@4.2.0)(pug@3.0.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.8) express: specifier: 4.21.2 version: 4.21.2 @@ -107,7 +107,7 @@ importers: version: 1.18.2 formik: specifier: ^2.4.9 - version: 2.4.9(react@18.3.1) + version: 2.4.9(@types/react@18.3.28)(react@18.3.1) gravatar-url: specifier: 3.1.0 version: 3.1.0 @@ -125,7 +125,7 @@ importers: version: 3.0.0 next: specifier: ^14.2.35 - version: 14.2.35(@babel/core@7.28.6)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 14.2.35(@babel/core@7.29.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) node-cache: specifier: 5.1.2 version: 5.1.2 @@ -167,19 +167,19 @@ importers: version: 9.4.3(react@18.3.1) react-intl: specifier: ^6.6.8 - version: 6.6.8(react@18.3.1)(typescript@5.4.5) + version: 6.8.9(react@18.3.1)(typescript@5.4.5) react-markdown: specifier: 8.0.5 - version: 8.0.5(@types/react@18.3.27)(react@18.3.1) + version: 8.0.5(@types/react@18.3.28)(react@18.3.1) react-popper-tooltip: specifier: 4.4.2 version: 4.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-select: specifier: 5.10.2 - version: 5.10.2(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 5.10.2(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-spring: specifier: 9.7.1 - version: 9.7.1(@react-three/fiber@8.16.8(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1)(three@0.165.0))(konva@9.3.12)(react-dom@18.3.1(react@18.3.1))(react-konva@18.2.10(@types/react@18.3.27)(konva@9.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.74.2(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react-zdog@1.2.2)(react@18.3.1)(three@0.165.0)(zdog@1.1.3) + version: 9.7.1(@react-three/fiber@9.6.0(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react-native@0.85.1(@babel/core@7.29.0)(@types/react@18.3.28)(react@18.3.1))(react@18.3.1)(three@0.183.2))(konva@10.2.5)(react-dom@18.3.1(react@18.3.1))(react-konva@18.2.14(@types/react@18.3.28)(konva@10.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.85.1(@babel/core@7.29.0)(@types/react@18.3.28)(react@18.3.1))(react-zdog@1.2.2)(react@18.3.1)(three@0.183.2)(zdog@1.1.3) react-toast-notifications: specifier: 2.5.1 version: 2.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -203,7 +203,7 @@ importers: version: 7.7.3 sharp: specifier: ^0.33.4 - version: 0.33.4 + version: 0.33.5 sqlite3: specifier: 5.1.7 version: 5.1.7 @@ -215,19 +215,19 @@ importers: version: 2.3.8(react@18.3.1) tailwind-merge: specifier: ^2.6.0 - version: 2.6.0 + version: 2.6.1 typeorm: specifier: 0.3.28 - version: 0.3.28(babel-plugin-macros@3.1.0)(pg@8.17.2)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5)) + version: 0.3.28(babel-plugin-macros@3.1.0)(pg@8.17.2)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.4.5)) ua-parser-js: specifier: ^1.0.35 - version: 1.0.40 + version: 1.0.41 undici: specifier: ^7.18.2 - version: 7.18.2 + version: 7.25.0 validator: specifier: ^13.15.23 - version: 13.15.23 + version: 13.15.35 web-push: specifier: 3.6.7 version: 3.6.7 @@ -255,19 +255,25 @@ importers: devDependencies: '@commitlint/cli': specifier: 17.4.4 - version: 17.4.4(@swc/core@1.6.5(@swc/helpers@0.5.11)) + version: 17.4.4 '@commitlint/config-conventional': specifier: 17.4.4 version: 17.4.4 + '@eslint/js': + specifier: 9.39.3 + version: 9.39.3 + '@next/eslint-plugin-next': + specifier: ^16.1.6 + version: 16.2.3 '@tailwindcss/aspect-ratio': specifier: ^0.4.2 version: 0.4.2(tailwindcss@3.4.19(yaml@2.8.3)) '@tailwindcss/forms': specifier: ^0.5.10 - version: 0.5.10(tailwindcss@3.4.19(yaml@2.8.3)) + version: 0.5.11(tailwindcss@3.4.19(yaml@2.8.3)) '@tailwindcss/typography': specifier: ^0.5.16 - version: 0.5.16(tailwindcss@3.4.19(yaml@2.8.3)) + version: 0.5.19(tailwindcss@3.4.19(yaml@2.8.3)) '@types/bcrypt': specifier: 6.0.0 version: 6.0.0 @@ -281,8 +287,11 @@ importers: specifier: 1.11.5 version: 1.11.5 '@types/email-templates': - specifier: 8.0.4 - version: 8.0.4(encoding@0.1.13) + specifier: 10.0.4 + version: 10.0.4(encoding@0.1.13) + '@types/eslint-plugin-jsx-a11y': + specifier: ^6.10.1 + version: 6.10.1(jiti@2.6.1) '@types/express': specifier: 4.17.17 version: 4.17.17 @@ -303,22 +312,25 @@ importers: version: 2.1.8 '@types/nodemailer': specifier: '7' - version: 7.0.9 + version: 7.0.11 '@types/react': specifier: ^18.3.3 - version: 18.3.27 + version: 18.3.28 '@types/react-dom': specifier: ^18.3.0 - version: 18.3.0 + version: 18.3.7(@types/react@18.3.28) '@types/react-transition-group': specifier: 4.4.12 - version: 4.4.12(@types/react@18.3.27) + version: 4.4.12(@types/react@18.3.28) '@types/secure-random-password': specifier: 0.2.1 version: 0.2.1 '@types/semver': specifier: 7.7.1 version: 7.7.1 + '@types/supertest': + specifier: ^6.0.3 + version: 6.0.3 '@types/swagger-ui-express': specifier: 4.1.8 version: 4.1.8 @@ -337,18 +349,15 @@ importers: '@types/yup': specifier: 0.29.14 version: 0.29.14 - '@typescript-eslint/eslint-plugin': - specifier: 7.18.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/parser': - specifier: 7.18.0 - version: 7.18.0(eslint@8.57.1)(typescript@5.4.5) autoprefixer: specifier: ^10.4.23 - version: 10.4.23(postcss@8.5.6) + version: 10.5.0(postcss@8.5.10) baseline-browser-mapping: specifier: ^2.8.32 - version: 2.9.18 + version: 2.10.19 + commander: + specifier: ^14.0.3 + version: 14.0.3 commitizen: specifier: 4.3.1 version: 4.3.1(@types/node@22.10.5)(typescript@5.4.5) @@ -365,35 +374,38 @@ importers: specifier: 3.3.0 version: 3.3.0(@types/node@22.10.5)(typescript@5.4.5) eslint: - specifier: 8.57.1 - version: 8.57.1 - eslint-config-next: - specifier: ^14.2.35 - version: 14.2.35(eslint@8.57.1)(typescript@5.4.5) + specifier: 9.39.3 + version: 9.39.3(jiti@2.6.1) eslint-config-prettier: - specifier: 8.6.0 - version: 8.6.0(eslint@8.57.1) + specifier: 10.1.8 + version: 10.1.8(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-formatjs: - specifier: 4.9.0 - version: 4.9.0(eslint@8.57.1) + specifier: 6.2.0 + version: 6.2.0(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-jsx-a11y: specifier: 6.10.2 - version: 6.10.2(eslint@8.57.1) + version: 6.10.2(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-no-relative-import-paths: specifier: 1.6.1 version: 1.6.1 eslint-plugin-prettier: specifier: 4.2.1 - version: 4.2.1(eslint-config-prettier@8.6.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.8.1) + version: 4.2.1(eslint-config-prettier@10.1.8(eslint@9.39.3(jiti@2.6.1)))(eslint@9.39.3(jiti@2.6.1))(prettier@3.8.1) eslint-plugin-react: specifier: 7.37.5 - version: 7.37.5(eslint@8.57.1) + version: 7.37.5(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-react-hooks: - specifier: 4.6.0 - version: 4.6.0(eslint@8.57.1) + specifier: 7.0.1 + version: 7.0.1(eslint@9.39.3(jiti@2.6.1)) + globals: + specifier: ^17.3.0 + version: 17.5.0 husky: specifier: 8.0.3 version: 8.0.3 + jiti: + specifier: ^2.6.1 + version: 2.6.1 lint-staged: specifier: 13.1.2 version: 13.1.2(enquirer@2.4.1) @@ -402,7 +414,7 @@ importers: version: 3.1.11 postcss: specifier: ^8.5.6 - version: 8.5.6 + version: 8.5.10 prettier: specifier: 3.8.1 version: 3.8.1 @@ -412,12 +424,15 @@ importers: prettier-plugin-tailwindcss: specifier: 0.6.14 version: 0.6.14(prettier-plugin-organize-imports@4.3.0(prettier@3.8.1)(typescript@5.4.5))(prettier@3.8.1) + supertest: + specifier: ^7.2.2 + version: 7.2.2 tailwindcss: specifier: 3.4.19 version: 3.4.19(yaml@2.8.3) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5) + version: 10.9.2(@types/node@22.10.5)(typescript@5.4.5) tsc-alias: specifier: 1.8.16 version: 1.8.16 @@ -427,6 +442,9 @@ importers: typescript: specifier: 5.4.5 version: 5.4.5 + typescript-eslint: + specifier: ^8.56.1 + version: 8.58.2(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) packages: @@ -437,34 +455,18 @@ packages: '@apidevtools/json-schema-ref-parser@9.0.9': resolution: {integrity: sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==} - '@babel/code-frame@7.28.6': - resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==} - engines: {node: '>=6.9.0'} - '@babel/code-frame@7.29.0': resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.6': - resolution: {integrity: sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==} - engines: {node: '>=6.9.0'} - '@babel/compat-data@7.29.0': resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.6': - resolution: {integrity: sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==} - engines: {node: '>=6.9.0'} - '@babel/core@7.29.0': resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.6': - resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==} - engines: {node: '>=6.9.0'} - '@babel/generator@7.29.1': resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} engines: {node: '>=6.9.0'} @@ -473,10 +475,6 @@ packages: resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} engines: {node: '>=6.9.0'} - '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': - resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} - engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.28.6': resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} engines: {node: '>=6.9.0'} @@ -493,28 +491,15 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-define-polyfill-provider@0.6.6': - resolution: {integrity: sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-define-polyfill-provider@0.6.8': resolution: {integrity: sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-environment-visitor@7.24.7': - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-globals@7.28.0': resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} - '@babel/helper-hoist-variables@7.24.7': - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.28.5': resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} engines: {node: '>=6.9.0'} @@ -569,224 +554,69 @@ packages: resolution: {integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.6': - resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} - engines: {node: '>=6.9.0'} - '@babel/helpers@7.29.2': resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.6': - resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.29.2': resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7': - resolution: {integrity: sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==} + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': + resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7': - resolution: {integrity: sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==} + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': + resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7': - resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': + resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': + resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7': - resolution: {integrity: sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6': + resolution: {integrity: sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-proposal-async-generator-functions@7.20.7': - resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-proposal-class-properties@7.18.6': - resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-proposal-export-default-from@7.27.1': - resolution: {integrity: sha512-hjlsMBl1aJc5lp8MoCDEZCiYzlgdRAShOjAfRw6X+GlpLpUPU7c3XNLsKFZbQk/1cRzBlJ7CXg3xJAJMrFa1Uw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-proposal-logical-assignment-operators@7.20.7': - resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6': - resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-proposal-numeric-separator@7.18.6': - resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-proposal-object-rest-spread@7.20.7': - resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-proposal-optional-catch-binding@7.18.6': - resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-proposal-optional-chaining@7.21.0': - resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + '@babel/plugin-syntax-import-assertions@7.28.6': + resolution: {integrity: sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-dynamic-import@7.8.3': - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-export-default-from@7.28.6': - resolution: {integrity: sha512-Svlx1fjJFnNz0LZeUaybRukSxZI3KkpApUmIRzEdXC5k8ErTOz0OD0kNrICi5Vc3GlpP5ZCeRyRO+mfWTSz+iQ==} + '@babel/plugin-syntax-import-attributes@7.28.6': + resolution: {integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-export-namespace-from@7.8.3': - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-flow@7.28.6': - resolution: {integrity: sha512-D+OrJumc9McXNEBI/JmFnc/0uCM2/Y3PEBG3gfV3QIYkKv5pvnpzFrl1kYCrcHJP8nOeFB/SHi1IHz29pNGuew==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-assertions@7.24.7': - resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-attributes@7.24.7': - resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.28.6': resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.28.6': resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} engines: {node: '>=6.9.0'} @@ -805,8 +635,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.24.7': - resolution: {integrity: sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==} + '@babel/plugin-transform-async-generator-functions@7.29.0': + resolution: {integrity: sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -817,8 +647,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoped-functions@7.24.7': - resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} + '@babel/plugin-transform-block-scoped-functions@7.27.1': + resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -829,14 +659,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-properties@7.24.7': - resolution: {integrity: sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==} + '@babel/plugin-transform-class-properties@7.28.6': + resolution: {integrity: sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-static-block@7.24.7': - resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} + '@babel/plugin-transform-class-static-block@7.28.6': + resolution: {integrity: sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 @@ -859,44 +689,50 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dotall-regex@7.24.7': - resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} + '@babel/plugin-transform-dotall-regex@7.28.6': + resolution: {integrity: sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-keys@7.24.7': - resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} + '@babel/plugin-transform-duplicate-keys@7.27.1': + resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dynamic-import@7.24.7': - resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0': + resolution: {integrity: sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-dynamic-import@7.27.1': + resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.24.7': - resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} + '@babel/plugin-transform-explicit-resource-management@7.28.6': + resolution: {integrity: sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-export-namespace-from@7.24.7': - resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} + '@babel/plugin-transform-exponentiation-operator@7.28.6': + resolution: {integrity: sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-flow-strip-types@7.27.1': - resolution: {integrity: sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==} + '@babel/plugin-transform-export-namespace-from@7.27.1': + resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-for-of@7.24.7': - resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} + '@babel/plugin-transform-for-of@7.27.1': + resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -907,8 +743,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-json-strings@7.24.7': - resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} + '@babel/plugin-transform-json-strings@7.28.6': + resolution: {integrity: sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -919,20 +755,20 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.24.7': - resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} + '@babel/plugin-transform-logical-assignment-operators@7.28.6': + resolution: {integrity: sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-member-expression-literals@7.24.7': - resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} + '@babel/plugin-transform-member-expression-literals@7.27.1': + resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-amd@7.24.7': - resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} + '@babel/plugin-transform-modules-amd@7.27.1': + resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -943,68 +779,62 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.24.7': - resolution: {integrity: sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==} + '@babel/plugin-transform-modules-systemjs@7.29.0': + resolution: {integrity: sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-umd@7.24.7': - resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} + '@babel/plugin-transform-modules-umd@7.27.1': + resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1': - resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/plugin-transform-named-capturing-groups-regex@7.29.0': resolution: {integrity: sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-new-target@7.24.7': - resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} + '@babel/plugin-transform-new-target@7.27.1': + resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.24.7': - resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6': + resolution: {integrity: sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-numeric-separator@7.24.7': - resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} + '@babel/plugin-transform-numeric-separator@7.28.6': + resolution: {integrity: sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.24.7': - resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} + '@babel/plugin-transform-object-rest-spread@7.28.6': + resolution: {integrity: sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-super@7.24.7': - resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} + '@babel/plugin-transform-object-super@7.27.1': + resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-catch-binding@7.24.7': - resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} + '@babel/plugin-transform-optional-catch-binding@7.28.6': + resolution: {integrity: sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.24.7': - resolution: {integrity: sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==} + '@babel/plugin-transform-optional-chaining@7.28.6': + resolution: {integrity: sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1027,14 +857,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-property-literals@7.24.7': - resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} + '@babel/plugin-transform-property-literals@7.27.1': + resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-constant-elements@7.24.7': - resolution: {integrity: sha512-7LidzZfUXyfZ8/buRW6qIIHBY8wAZ1OrY9c/wTr8YhZ6vMPo+Uc/CVFLYY1spZrEQlD4w5u8wjqk5NQ3OVqQKA==} + '@babel/plugin-transform-react-constant-elements@7.27.1': + resolution: {integrity: sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1045,20 +875,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-development@7.24.7': - resolution: {integrity: sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-self@7.27.1': - resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-source@7.27.1': - resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + '@babel/plugin-transform-react-jsx-development@7.27.1': + resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1069,26 +887,26 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-pure-annotations@7.24.7': - resolution: {integrity: sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==} + '@babel/plugin-transform-react-pure-annotations@7.27.1': + resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.24.7': - resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} + '@babel/plugin-transform-regenerator@7.29.0': + resolution: {integrity: sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-reserved-words@7.24.7': - resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} + '@babel/plugin-transform-regexp-modifiers@7.28.6': + resolution: {integrity: sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.0.0 - '@babel/plugin-transform-runtime@7.29.0': - resolution: {integrity: sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==} + '@babel/plugin-transform-reserved-words@7.27.1': + resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1111,14 +929,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-template-literals@7.24.7': - resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} + '@babel/plugin-transform-template-literals@7.27.1': + resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typeof-symbol@7.24.7': - resolution: {integrity: sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==} + '@babel/plugin-transform-typeof-symbol@7.27.1': + resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1129,14 +947,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-escapes@7.24.7': - resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} + '@babel/plugin-transform-unicode-escapes@7.27.1': + resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-property-regex@7.24.7': - resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} + '@babel/plugin-transform-unicode-property-regex@7.28.6': + resolution: {integrity: sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1147,20 +965,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-sets-regex@7.24.7': - resolution: {integrity: sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==} + '@babel/plugin-transform-unicode-sets-regex@7.28.6': + resolution: {integrity: sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.24.7': - resolution: {integrity: sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/preset-flow@7.27.1': - resolution: {integrity: sha512-ez3a2it5Fn6P54W8QkbfIyyIbxlXvcxyWHHvno1Wg0Ej5eiJY5hBb8ExttoIOJJk7V2dZE6prP7iby5q2aQ0Lg==} + '@babel/preset-env@7.29.2': + resolution: {integrity: sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1170,8 +982,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/preset-react@7.24.7': - resolution: {integrity: sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==} + '@babel/preset-react@7.28.5': + resolution: {integrity: sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1182,16 +994,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/register@7.28.6': - resolution: {integrity: sha512-pgcbbEl/dWQYb6L6Yew6F94rdwygfuv+vJ/tXfwIOYAfPB6TNWpXUMEtEq3YuTeHRdvMIhvz13bkT9CNaS+wqA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/runtime@7.28.6': - resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} - engines: {node: '>=6.9.0'} - '@babel/runtime@7.29.2': resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} engines: {node: '>=6.9.0'} @@ -1200,18 +1002,10 @@ packages: resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.6': - resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.29.0': resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.6': - resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==} - engines: {node: '>=6.9.0'} - '@babel/types@7.29.0': resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} @@ -1233,8 +1027,8 @@ packages: resolution: {integrity: sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA==} engines: {node: '>=v14'} - '@commitlint/config-validator@19.0.3': - resolution: {integrity: sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==} + '@commitlint/config-validator@20.5.0': + resolution: {integrity: sha512-T/Uh6iJUzyx7j35GmHWdIiGRQB+ouZDk0pwAaYq4SXgB54KZhFdJ0vYmxiW6AMYICTIWuyMxDBl1jK74oFp/Gw==} engines: {node: '>=v18'} '@commitlint/ensure@17.8.1': @@ -1245,8 +1039,8 @@ packages: resolution: {integrity: sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ==} engines: {node: '>=v14'} - '@commitlint/execute-rule@19.0.0': - resolution: {integrity: sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==} + '@commitlint/execute-rule@20.0.0': + resolution: {integrity: sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==} engines: {node: '>=v18'} '@commitlint/format@17.8.1': @@ -1265,8 +1059,8 @@ packages: resolution: {integrity: sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA==} engines: {node: '>=v14'} - '@commitlint/load@19.2.0': - resolution: {integrity: sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==} + '@commitlint/load@20.5.0': + resolution: {integrity: sha512-sLhhYTL/KxeOTZjjabKDhwidGZan84XKK1+XFkwDYL/4883kIajcz/dZFAhBJmZPtL8+nBx6bnkzA95YxPeDPw==} engines: {node: '>=v18'} '@commitlint/message@17.8.1': @@ -1285,8 +1079,8 @@ packages: resolution: {integrity: sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q==} engines: {node: '>=v14'} - '@commitlint/resolve-extends@19.1.0': - resolution: {integrity: sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==} + '@commitlint/resolve-extends@20.5.0': + resolution: {integrity: sha512-3SHPWUW2v0tyspCTcfSsYml0gses92l6TlogwzvM2cbxDgmhSRc+fldDjvGkCXJrjSM87BBaWYTPWwwyASZRrg==} engines: {node: '>=v18'} '@commitlint/rules@17.8.1': @@ -1305,8 +1099,8 @@ packages: resolution: {integrity: sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==} engines: {node: '>=v14'} - '@commitlint/types@19.0.3': - resolution: {integrity: sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==} + '@commitlint/types@20.5.0': + resolution: {integrity: sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==} engines: {node: '>=v18'} '@cspotcode/source-map-support@0.8.1': @@ -1323,12 +1117,12 @@ packages: '@dabh/diagnostics@2.0.8': resolution: {integrity: sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==} - '@dr.pogodin/csurf@1.16.6': - resolution: {integrity: sha512-nUACXbE+oi3spzU0bEff2L1P2qUUuoc6ppynNqM/p7OSElSIiR3H9T4e4VIPRilUHXq6uT3C+cGfSOXt9rCU5w==} + '@dr.pogodin/csurf@1.16.9': + resolution: {integrity: sha512-JZkIAwXowBihTLKszBrsIwd2UFUwOfJkwCbFC+Q5tQJfq1CrLS5EnPCDeTRoqZpAoRXkJEjlnwHQb8Hq+uzfLg==} engines: {node: '>=20'} - '@emnapi/runtime@1.2.0': - resolution: {integrity: sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==} + '@emnapi/runtime@1.9.2': + resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} '@emotion/babel-plugin@11.13.5': resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} @@ -1416,22 +1210,42 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@floating-ui/core@1.7.3': - resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@floating-ui/dom@1.7.4': - resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} + '@eslint/eslintrc@3.3.5': + resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@floating-ui/utils@0.2.10': - resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@eslint/js@9.39.3': + resolution: {integrity: sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@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.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} + + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} + + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} '@fontsource-variable/inter@5.2.8': resolution: {integrity: sha512-kOfP2D+ykbcX/P3IFnokOhVRNoTozo5/JxhAIVYLpea/UBmCQ/YWPBfWIDuBImXX/15KH+eKh4xpEUyS2sQQGQ==} @@ -1439,36 +1253,48 @@ packages: '@formatjs/ecma402-abstract@1.14.3': resolution: {integrity: sha512-SlsbRC/RX+/zg4AApWIFNDdkLtFbkq3LNoZWXZCE/nHVKqoIJyaoQyge/I0Y38vLxowUn9KTtXgusLD91+orbg==} - '@formatjs/ecma402-abstract@2.0.0': - resolution: {integrity: sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==} + '@formatjs/ecma402-abstract@2.2.4': + resolution: {integrity: sha512-lFyiQDVvSbQOpU+WFd//ILolGj4UgA/qXrKeZxdV14uKiAUiPAtX6XAn7WBCRi7Mx6I7EybM9E5yYn4BIpZWYg==} '@formatjs/ecma402-abstract@2.3.6': resolution: {integrity: sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==} - '@formatjs/fast-memoize@2.2.0': - resolution: {integrity: sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==} + '@formatjs/ecma402-abstract@3.1.1': + resolution: {integrity: sha512-jhZbTwda+2tcNrs4kKvxrPLPjx8QsBCLCUgrrJ/S+G9YrGHWLhAyFMMBHJBnBoOwuLHd7L14FgYudviKaxkO2Q==} + + '@formatjs/fast-memoize@2.2.3': + resolution: {integrity: sha512-3jeJ+HyOfu8osl3GNSL4vVHUuWFXR03Iz9jjgI7RwjG6ysu/Ymdr0JRCPHfF5yGbTE6JCrd63EpvX1/WybYRbA==} '@formatjs/fast-memoize@2.2.7': resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==} - '@formatjs/icu-messageformat-parser@2.3.0': - resolution: {integrity: sha512-xqtlqYAbfJDF4b6e4O828LBNOWXrFcuYadqAbYORlDRwhyJ2bH+xpUBPldZbzRGUN2mxlZ4Ykhm7jvERtmI8NQ==} + '@formatjs/fast-memoize@3.1.0': + resolution: {integrity: sha512-b5mvSWCI+XVKiz5WhnBCY3RJ4ZwfjAidU0yVlKa3d3MSgKmH1hC3tBGEAtYyN5mqL7N0G5x0BOUYyO8CEupWgg==} - '@formatjs/icu-messageformat-parser@2.7.8': - resolution: {integrity: sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA==} + '@formatjs/icu-messageformat-parser@2.11.4': + resolution: {integrity: sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==} - '@formatjs/icu-skeleton-parser@1.3.18': - resolution: {integrity: sha512-ND1ZkZfmLPcHjAH1sVpkpQxA+QYfOX3py3SjKWMUVGDow18gZ0WPqz3F+pJLYQMpS2LnnQ5zYR2jPVYTbRwMpg==} + '@formatjs/icu-messageformat-parser@2.9.4': + resolution: {integrity: sha512-Tbvp5a9IWuxUcpWNIW6GlMQYEc4rwNHR259uUFoKWNN1jM9obf9Ul0e+7r7MvFOBNcN+13K7NuKCKqQiAn1QEg==} - '@formatjs/icu-skeleton-parser@1.8.2': - resolution: {integrity: sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q==} + '@formatjs/icu-messageformat-parser@3.5.1': + resolution: {integrity: sha512-sSDmSvmmoVQ92XqWb499KrIhv/vLisJU8ITFrx7T7NZHUmMY7EL9xgRowAosaljhqnj/5iufG24QrdzB6X3ItA==} - '@formatjs/intl-displaynames@6.6.8': - resolution: {integrity: sha512-Lgx6n5KxN16B3Pb05z3NLEBQkGoXnGjkTBNCZI+Cn17YjHJ3fhCeEJJUqRlIZmJdmaXQhjcQVDp6WIiNeRYT5g==} + '@formatjs/icu-skeleton-parser@1.8.16': + resolution: {integrity: sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==} + + '@formatjs/icu-skeleton-parser@1.8.8': + resolution: {integrity: sha512-vHwK3piXwamFcx5YQdCdJxUQ1WdTl6ANclt5xba5zLGDv5Bsur7qz8AD7BevaKxITwpgDeU0u8My3AIibW9ywA==} + + '@formatjs/icu-skeleton-parser@2.1.1': + resolution: {integrity: sha512-PSFABlcNefjI6yyk8f7nyX1DC7NHmq6WaCHZLySEXBrXuLOB2f935YsnzuPjlz+ibhb9yWTdPeVX1OVcj24w2Q==} '@formatjs/intl-displaynames@6.8.13': resolution: {integrity: sha512-VbY7BdYJX5eURVKLk2grndUQtnbCLNbcJId/Sb/PsX7fWXiqWvg7qt/mecVHRzqoSEoGCQToKDxzpJj8RC0s3g==} + '@formatjs/intl-displaynames@6.8.5': + resolution: {integrity: sha512-85b+GdAKCsleS6cqVxf/Aw/uBd+20EM0wDpgaxzHo3RIR3bxF4xCJqH/Grbzx8CXurTgDDZHPdPdwJC+May41w==} + '@formatjs/intl-enumerator@1.2.1': resolution: {integrity: sha512-hK54SSi3hwwWZd7zz9wjYo7AIOlovhHBoUYjQJ5sZXHSLdwAnxE2ck5VaTwWKr4X6Vryq5stmy+MQXA4nDT9jg==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. @@ -1476,8 +1302,8 @@ packages: '@formatjs/intl-getcanonicallocales@2.1.0': resolution: {integrity: sha512-gpPVLNSjNnwG4ctvSs7XiFQ/sIOyxcZrXukg1G226FUE+Cy6KMcAxo22zPZXhCTZt50b1FQZ/Zua5U/k9inb0Q==} - '@formatjs/intl-listformat@7.5.7': - resolution: {integrity: sha512-MG2TSChQJQT9f7Rlv+eXwUFiG24mKSzmF144PLb8m8OixyXqn4+YWU+5wZracZGCgVTVmx8viCf7IH3QXoiB2g==} + '@formatjs/intl-listformat@7.7.5': + resolution: {integrity: sha512-Wzes10SMNeYgnxYiKsda4rnHP3Q3II4XT2tZyOgnH5fWuHDtIkceuWlRQNsvrI3uiwP4hLqp2XdQTCsfkhXulg==} '@formatjs/intl-locale@3.1.1': resolution: {integrity: sha512-UshFvThVOloYsHagGe7m2mDifEbZaS9+a+x3Va8YKU3NxFDyNr8s5EQgYkZhZ2kTzWqBxeKB/qZE9VT6LR/lRg==} @@ -1485,12 +1311,15 @@ packages: '@formatjs/intl-localematcher@0.2.32': resolution: {integrity: sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ==} - '@formatjs/intl-localematcher@0.5.4': - resolution: {integrity: sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==} + '@formatjs/intl-localematcher@0.5.8': + resolution: {integrity: sha512-I+WDNWWJFZie+jkfkiK5Mp4hEDyRSEvmyfYadflOno/mmKJKcB17fEpEH0oJu/OWhhCJ8kJBDz2YMd/6cDl7Mg==} '@formatjs/intl-localematcher@0.6.2': resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==} + '@formatjs/intl-localematcher@0.8.1': + resolution: {integrity: sha512-xwEuwQFdtSq1UKtQnyTZWC+eHdv7Uygoa+H2k/9uzBVQjDyp9r20LNDNKedWXll7FssT3GRHvqsdJGYSUWqYFA==} + '@formatjs/intl-pluralrules@5.4.6': resolution: {integrity: sha512-2HlOq+c7KsSps829SJ3B5987coX5mzKx9NbPcNwQ07eq8FBHgB3HfMoxt5HvLsdk4oQwCjAEnocbtd+wVwZ2Kg==} @@ -1498,18 +1327,19 @@ packages: resolution: {integrity: sha512-j5C6NyfKevIxsfLK8KwO1C0vvP7k1+h4A9cFpc+cr6mEwCc1sPkr17dzh0Ke6k9U5pQccAQoXdcNBl3IYa4+ZQ==} deprecated: the package is rather renamed to @formatjs/ecma-abstract with some changes in functionality (primarily selectUnit is removed and we don't plan to make any further changes to this package - '@formatjs/intl@2.10.4': - resolution: {integrity: sha512-56483O+HVcL0c7VucAS2tyH020mt9XTozZO67cwtGg0a7KWDukS/FzW3OnvaHmTHDuYsoPIzO+ZHVfU6fT/bJw==} + '@formatjs/intl@2.10.15': + resolution: {integrity: sha512-i6+xVqT+6KCz7nBfk4ybMXmbKO36tKvbMKtgFz9KV+8idYFyFbfwKooYk8kGjyA5+T5f1kEPQM5IDLXucTAQ9g==} peerDependencies: typescript: ^4.7 || 5 peerDependenciesMeta: typescript: optional: true - '@formatjs/ts-transformer@3.12.0': - resolution: {integrity: sha512-/jEpXcqA6y/vdijgkxSoKGfkGR5VcClJeI8hnpJ2PBCHfrc4ywFMyoZqRAakKW3IJVttaDo7mGvBAIDxV1F4Qg==} + '@formatjs/ts-transformer@4.4.0': + resolution: {integrity: sha512-lFDp9Rbpxk5Dt8O1/I9VG5btqKbOkjT4snSa73HO1YTJ9KGeXPKA7aWVgHFXJVVq0KluhbZiCoPJVHC4ZREgxw==} + engines: {node: '>= 20.12.0'} peerDependencies: - ts-jest: '>=27' + ts-jest: ^29 peerDependenciesMeta: ts-jest: optional: true @@ -1523,12 +1353,6 @@ packages: '@hapi/hoek@11.0.7': resolution: {integrity: sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==} - '@hapi/hoek@9.3.0': - resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} - - '@hapi/topo@5.1.0': - resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} - '@headlessui/react@1.7.12': resolution: {integrity: sha512-FhSx5V+Qp0GvbTpaxyS+ymGDDNntCacClWsk/d8Upbr19g3AsPbjfPk4+m2CgJGcuCB5Dz7LpUIOAbvQTyjL2g==} engines: {node: '>=10'} @@ -1541,143 +1365,138 @@ packages: peerDependencies: react: '>= 16 || ^19.0.0-rc' - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} - '@img/sharp-darwin-arm64@0.33.4': - resolution: {integrity: sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.33.4': - resolution: {integrity: sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.0.2': - resolution: {integrity: sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==} - engines: {macos: '>=11', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.0.2': - resolution: {integrity: sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==} - engines: {macos: '>=10.13', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.0.2': - resolution: {integrity: sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==} - engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.0.2': - resolution: {integrity: sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==} - engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-s390x@1.0.2': - resolution: {integrity: sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==} - engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.0.2': - resolution: {integrity: sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==} - engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.0.2': - resolution: {integrity: sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==} - engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.0.2': - resolution: {integrity: sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==} - engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.33.4': - resolution: {integrity: sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.33.4': - resolution: {integrity: sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==} - engines: {glibc: '>=2.28', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - '@img/sharp-linux-s390x@0.33.4': - resolution: {integrity: sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==} - engines: {glibc: '>=2.31', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.33.4': - resolution: {integrity: sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.33.4': - resolution: {integrity: sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==} - engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.33.4': - resolution: {integrity: sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==} - engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.33.4': - resolution: {integrity: sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-ia32@0.33.4': - resolution: {integrity: sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.33.4': - resolution: {integrity: sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] - '@internationalized/date@3.10.0': - resolution: {integrity: sha512-oxDR/NTEJ1k+UFVQElaNIk65E/Z83HK1z1WI3lQyhTtnNg4R5oVXaPzK3jcpKG8UHKDVuDQHzn+wsxSz8RP3aw==} + '@internationalized/date@3.12.1': + resolution: {integrity: sha512-6IedsVWXyq4P9Tj+TxuU8WGWM70hYLl12nbYU8jkikVpa6WXapFazPUcHUMDMoWftIDE2ILDkFFte6W2nFCkRQ==} - '@internationalized/message@3.1.8': - resolution: {integrity: sha512-Rwk3j/TlYZhn3HQ6PyXUV0XP9Uv42jqZGNegt0BXlxjE6G3+LwHjbQZAGHhCnCPdaA6Tvd3ma/7QzLlLkJxAWA==} + '@internationalized/message@3.1.9': + resolution: {integrity: sha512-x03MSVTaB/4JHtW1VAYaY/2cCuBrHbWM6ZvlgpKdnSdW28tZbqpR673RJrVJyXWRw1bpgYN89Tz7ohX5tgNgPA==} - '@internationalized/number@3.6.5': - resolution: {integrity: sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==} + '@internationalized/number@3.6.6': + resolution: {integrity: sha512-iFgmQaXHE0vytNfpLZWOC2mEJCBRzcUxt53Xf/yCXG93lRvqas237i3r7X4RKMwO3txiyZD4mQjKAByFv6UGSQ==} - '@internationalized/string@3.2.7': - resolution: {integrity: sha512-D4OHBjrinH+PFZPvfCXvG28n2LSykWcJ7GIioQL+ok0LON15SdfoUssoHzzOUmVZLbRoREsQXVzA6r8JKsbP6A==} + '@internationalized/string@3.2.8': + resolution: {integrity: sha512-NdbMQUSfXLYIQol5VyMtinm9pZDciiMfN7RtmSuSB78io1hqwJ0naYfxyW6vgxWBkzWymQa/3uLDlbfmshtCaA==} '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -1687,26 +1506,10 @@ packages: resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} engines: {node: '>=12'} - '@jest/create-cache-key-function@29.7.0': - resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/environment@29.7.0': - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/fake-timers@29.7.0': - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/schemas@29.6.3': resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/types@26.6.2': - resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} - engines: {node: '>= 10.14.2'} - '@jest/types@29.6.3': resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -1915,8 +1718,8 @@ packages: '@next/env@14.2.35': resolution: {integrity: sha512-DuhvCtj4t9Gwrx80dmz2F4t/zKQ4ktN8WrMwOuVzkJfBilwAwGr6v16M5eI8yCuZ63H9TTuEU09Iu2HqkzFPVQ==} - '@next/eslint-plugin-next@14.2.35': - resolution: {integrity: sha512-Jw9A3ICz2183qSsqwi7fgq4SBPiNfmOLmTPXKvlnzstUwyvBrtySiY+8RXJweNAs9KThb1+bYhZh9XWcNOr2zQ==} + '@next/eslint-plugin-next@16.2.3': + resolution: {integrity: sha512-nE/b9mht28XJxjTwKs/yk7w4XTaU3t40UHVAky6cjiijdP/SEy3hGsnQMPxmXPTpC7W4/97okm6fngKnvCqVaA==} '@next/swc-darwin-arm64@14.2.33': resolution: {integrity: sha512-HqYnb6pxlsshoSTubdXKu15g3iivcbsMXg4bYpjL2iS/V6aQot+iyF4BUc2qA/J/n55YtvE4PHMKWBKGCF/+wA==} @@ -1972,6 +1775,10 @@ packages: cpu: [x64] os: [win32] + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2001,6 +1808,9 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This functionality has been moved to @npmcli/fs + '@paralleldrive/cuid2@2.3.1': + resolution: {integrity: sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -2008,573 +1818,369 @@ packages: '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - '@react-aria/breadcrumbs@3.5.29': - resolution: {integrity: sha512-rKS0dryllaZJqrr3f/EAf2liz8CBEfmL5XACj+Z1TAig6GIYe1QuA3BtkX0cV9OkMugXdX8e3cbA7nD10ORRqg==} + '@react-aria/breadcrumbs@3.6.0': + resolution: {integrity: sha512-JP7ljB15BJ+vQgD3AHseMPC4GFZD3fiZRytVTk9Lzks43Q2ZvcQEld5XUjItfbM10bKYWazw8xlyyXY/OZzsuw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/button@3.14.2': - resolution: {integrity: sha512-VbLIA+Kd6f/MDjd+TJBUg2+vNDw66pnvsj2E4RLomjI9dfBuN7d+Yo2UnsqKVyhePjCUZ6xxa2yDuD63IOSIYA==} + '@react-aria/button@3.15.0': + resolution: {integrity: sha512-p8KehQ+OmhvhYmsjkp4K/Yv0tufyEBOHu6woJlRYL6kq5m6GKY5MZp8pyO26FpSiOyjhnZe6wbTyvCifvaokwQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/calendar@3.9.2': - resolution: {integrity: sha512-uSLxLgOPRnEU4Jg59lAhUVA+uDx/55NBg4lpfsP2ynazyiJ5LCXmYceJi+VuOqMml7d9W0dB87OldOeLdIxYVA==} + '@react-aria/calendar@3.10.0': + resolution: {integrity: sha512-68Cqnp/3DcgsUmxVyhe510Hs2PfQFg+rmk2zqZMt6wwtUfsJai/OV09XU07SHEP2BmIa2RQNJ18OXzSTjPd2SA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/checkbox@3.16.2': - resolution: {integrity: sha512-29Mj9ZqXioJ0bcMnNGooHztnTau5pikZqX3qCRj5bYR3by/ZFFavYoMroh9F7s/MbFm/tsKX+Sf02lYFEdXRjA==} + '@react-aria/checkbox@3.17.0': + resolution: {integrity: sha512-UqB5CnYkwWhNIVSPwQngMyr7LT5ftSfkdYfDzhMAzzG3jpOwVk4yieKOsAIYP7pab7FqOObhJ/p+hHeU4/0Hlg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/color@3.1.2': - resolution: {integrity: sha512-jCC+Q7rAQGLQBkHjkPAeDuGYuMbc4neifjlNRiyZ9as1z4gg63H8MteoWYYk6K4vCKKxSixgt8MfI29XWMOWPQ==} + '@react-aria/color@3.2.0': + resolution: {integrity: sha512-Qw1TySxXnGlE4L7kzsi8v86U1yFs9FtonqsbySFzLPzsMV1Oar+rtkYHI5vwNSyNNF6TBJJikJNocS9Fi8xXwA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/combobox@3.14.0': - resolution: {integrity: sha512-z4ro0Hma//p4nL2IJx5iUa7NwxeXbzSoZ0se5uTYjG1rUUMszg+wqQh/AQoL+eiULn7rs18JY9wwNbVIkRNKWA==} + '@react-aria/combobox@3.16.0': + resolution: {integrity: sha512-yPPLduVUluCBuIFSZ+WgBMgl5oH7A5oQTemSpvf9ZmJ2oABIe+h6VQcwkEtMdokveHrdbmWIB9BL0E5jdDczAA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/datepicker@3.15.2': - resolution: {integrity: sha512-th078hyNqPf4P2K10su/y32zPDjs3lOYVdHvsL9/+5K1dnTvLHCK5vgUyLuyn8FchhF7cmHV49D+LZVv65PEpQ==} + '@react-aria/datepicker@3.17.0': + resolution: {integrity: sha512-+BVu08EqsLoevpyl0hhro8VknNY+RJ45tvy4w5Vip+VNtWNc8xmGx1Os0FrQ7QdKAlUbuBnpJYHICLBPQiLGnQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/dialog@3.5.31': - resolution: {integrity: sha512-inxQMyrzX0UBW9Mhraq0nZ4HjHdygQvllzloT1E/RlDd61lr3RbmJR6pLsrbKOTtSvDIBJpCso1xEdHCFNmA0Q==} + '@react-aria/dialog@3.6.0': + resolution: {integrity: sha512-FL7mInToLqYHCQExAj5fg1kpF5H4q0CvBs9GKZAo0HCWVv9pb5i4SiN1FXm5CJWU62UIhd7JysdW3Jl+TXtSng==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/disclosure@3.1.0': - resolution: {integrity: sha512-5996BeBpnj+yKXYysz+UuhFQxGFPvaZZ3zNBd052wz/i+TVFVGSqqYJ6cwZyO1AfBR8zOT0ZIiK4EC3ETwSvtQ==} + '@react-aria/disclosure@3.2.0': + resolution: {integrity: sha512-lWqFjIdVTYVh6YibrIBb2bn5B7eeIAXF0Ek8gkFwTFXbktbeV+b5/FskxC3ZR1gWZ5N9GR5i2yr8+/11vwFtPw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/dnd@3.11.3': - resolution: {integrity: sha512-MyTziciik1Owz3rqDghu0K3ZtTFvmj/R2ZsLDwbU9N4hKqGX/BKnrI8SytTn8RDqVv5LmA/GhApLngiupTAsXw==} + '@react-aria/dnd@3.12.0': + resolution: {integrity: sha512-FqAaxIMCgpq83UQhJRpSR+o3K4XQQYbJMKxhBWGL84Wn1p6m8QmWGvRKAiHeUoQXlY8R6KNxlMR/KjJvV8/lBA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/focus@3.21.2': - resolution: {integrity: sha512-JWaCR7wJVggj+ldmM/cb/DXFg47CXR55lznJhZBh4XVqJjMKwaOOqpT5vNN7kpC1wUpXicGNuDnJDN1S/+6dhQ==} + '@react-aria/focus@3.22.0': + resolution: {integrity: sha512-ZfDOVuVhqDsM9mkNji3QUZ/d40JhlVgXrDkrfXylM1035QCrcTHN7m2DpbE95sU2A8EQb4wikvt5jM6K/73BPg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/form@3.1.2': - resolution: {integrity: sha512-R3i7L7Ci61PqZQvOrnL9xJeWEbh28UkTVgkj72EvBBn39y4h7ReH++0stv7rRs8p5ozETSKezBbGfu4UsBewWw==} + '@react-aria/gridlist@3.15.0': + resolution: {integrity: sha512-Y54R04Awhpt7bKA+dco1nNppkd2x0Wm36Z55eAhGyC6xoKAfTtTQw36EbOeIQNRt7gxu4cM4q1dZTPF3hAeDeQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/grid@3.14.5': - resolution: {integrity: sha512-XHw6rgjlTqc85e3zjsWo3U0EVwjN5MOYtrolCKc/lc2ItNdcY3OlMhpsU9+6jHwg/U3VCSWkGvwAz9hg7krd8Q==} + '@react-aria/i18n@3.13.0': + resolution: {integrity: sha512-APjw4EwmvlnIyDxixSWfjHvOFFkW2rVTyKZ4l9FV0v7hOerh+FWLE6mF1XnnX3pgz3yARkKWwhSR9xYcRK6tpg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/gridlist@3.14.1': - resolution: {integrity: sha512-keS03Am07aOn7RuNaRsMOyh0jscyhDn95asCVy4lxhl9A9TFk1Jw0o2L6q6cWRj1gFiKeacj/otG5H8ZKQQ2Wg==} + '@react-aria/interactions@3.28.0': + resolution: {integrity: sha512-OXwdU1EWFdMxmr/K1CXNGJzmNlCClByb+PuCaqUyzBymHPCGVhawirLIon/CrIN5psh3AiWpHSh4H0WeJdVpng==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/i18n@3.12.13': - resolution: {integrity: sha512-YTM2BPg0v1RvmP8keHenJBmlx8FXUKsdYIEX7x6QWRd1hKlcDwphfjzvt0InX9wiLiPHsT5EoBTpuUk8SXc0Mg==} + '@react-aria/label@3.8.0': + resolution: {integrity: sha512-UKJwdFf4ZEamcyk0K16xQT9mdW5bgRqha90WESHY1DdJuFZTq5U0gudqP4J8HS+kMTdeFGDgFa0rsgwVfGz1pQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/interactions@3.25.6': - resolution: {integrity: sha512-5UgwZmohpixwNMVkMvn9K1ceJe6TzlRlAfuYoQDUuOkk62/JVJNDLAPKIf5YMRc7d2B0rmfgaZLMtbREb0Zvkw==} + '@react-aria/landmark@3.1.0': + resolution: {integrity: sha512-0218hm9M2IzMpWjW/Sq0+KVmYmH5H4jmfKraLBeeaKsgEHKr9V18EBFT+6DG5P77bB9gjab5AQvZQYwWmoLCeg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/label@3.7.22': - resolution: {integrity: sha512-jLquJeA5ZNqDT64UpTc9XJ7kQYltUlNcgxZ37/v4mHe0UZ7QohCKdKQhXHONb0h2jjNUpp2HOZI8J9++jOpzxA==} + '@react-aria/link@3.9.0': + resolution: {integrity: sha512-XffSkG7OVZmQDkgFgwGQ6YUE0hxn9rmMTBMz3V7zaJsrkSbsPwUJiXzXF2nFFUaaCCnEUsl+KBkvArZE3tKXYw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/landmark@3.0.7': - resolution: {integrity: sha512-t8c610b8hPLS6Vwv+rbuSyljZosI1s5+Tosfa0Fk4q7d+Ex6Yj7hLfUFy59GxZAufhUYfGX396fT0gPqAbU1tg==} + '@react-aria/listbox@3.16.0': + resolution: {integrity: sha512-Jv6aTJECRntBvG+0ZQtXniAtHEQjvEi2QSm35FxRcsB8kgv7TmcinUOSZuHe5r8RDY2djILwdrqmfy6ApX0MDA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/link@3.8.6': - resolution: {integrity: sha512-7F7UDJnwbU9IjfoAdl6f3Hho5/WB7rwcydUOjUux0p7YVWh/fTjIFjfAGyIir7MJhPapun1D0t97QQ3+8jXVcg==} + '@react-aria/menu@3.22.0': + resolution: {integrity: sha512-vsm0dclFfSahWCsaPjuzbaL/T4WzWNpj2hrnWBSpJFnoRyjxb8QSjdv5EG7dbHg+kMXsA9MnUKyfbM1v9ftpbA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/listbox@3.15.0': - resolution: {integrity: sha512-Ub1Wu79R9sgxM7h4HeEdjOgOKDHwduvYcnDqsSddGXgpkL8ADjsy2YUQ0hHY5VnzA4BxK36bLp4mzSna8Qvj1w==} + '@react-aria/meter@3.5.0': + resolution: {integrity: sha512-xObDC6t/lodbVRUTjCn+eQ7thYYSwYKaZRMw+AI9Qwd+AMVb7cEeZCk4+lxdoSMqIM3cvTDt+Hd0AVHbuis6Mg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/live-announcer@3.4.4': - resolution: {integrity: sha512-PTTBIjNRnrdJOIRTDGNifY2d//kA7GUAwRFJNOEwSNG4FW+Bq9awqLiflw0JkpyB0VNIwou6lqKPHZVLsGWOXA==} - - '@react-aria/menu@3.19.3': - resolution: {integrity: sha512-52fh8y8b2776R2VrfZPpUBJYC9oTP7XDy+zZuZTxPEd7Ywk0JNUl5F92y6ru22yPkS13sdhrNM/Op+V/KulmAg==} + '@react-aria/numberfield@3.13.0': + resolution: {integrity: sha512-AnDR1QIUW/ULiA9bwZjvriShms1zThCKdJSpXuF84XTP8QtDydK6Yo3jHXewW1M7ucgKBaP+48uWwi7jsqfU1w==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/meter@3.4.27': - resolution: {integrity: sha512-andOOdJkgRJF9vBi5VWRmFodK+GT+5X1lLeNUmb4qOX8/MVfX/RbK72LDeIhd7xC7rSCFHj3WvZ198rK4q0k3w==} + '@react-aria/overlays@3.32.0': + resolution: {integrity: sha512-H9meBB14/M0bDwk8gZl8Fu8bwZN2El9LDlk5cNkgAozbEiRuQvTFOeE3RoP6XI6bwEnSBvb0ovPmx3/kNyOehQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/numberfield@3.12.2': - resolution: {integrity: sha512-M2b+z0HIXiXpGAWOQkO2kpIjaLNUXJ5Q3/GMa3Fkr+B1piFX0VuOynYrtddKVrmXCe+r5t+XcGb0KS29uqv7nQ==} + '@react-aria/progress@3.5.0': + resolution: {integrity: sha512-7KwXde5/I84QMRDUo2JChpSnkErW4cD0oAltP1H40++u3/NpqsYDXgydg+hanOnzkCCgC1TzzWWT+WtxbNyIEg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/overlays@3.30.0': - resolution: {integrity: sha512-UpjqSjYZx5FAhceWCRVsW6fX1sEwya1fQ/TKkL53FAlLFR8QKuoKqFlmiL43YUFTcGK3UdEOy3cWTleLQwdSmQ==} + '@react-aria/radio@3.13.0': + resolution: {integrity: sha512-3aqUvX2xV9AAriddw/INm/l1rkMEVdxTRi8BovDnpGUuDmOetKLI2geojiwftmSsHDwqknFwqEH1g7MYFDPaTw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/progress@3.4.27': - resolution: {integrity: sha512-0OA1shs1575g1zmO8+rWozdbTnxThFFhOfuoL1m7UV5Dley6FHpueoKB1ECv7B+Qm4dQt6DoEqLg7wsbbQDhmg==} + '@react-aria/searchfield@3.9.0': + resolution: {integrity: sha512-B8oOFhwGDotb7enoQ0bmXjhVkx8BkzK/ZnMmr4aF2ezexSFpG/ELkWqJPlfwknCwoBgBzhmpIKZvkoxQHR/iIw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/radio@3.12.2': - resolution: {integrity: sha512-I11f6I90neCh56rT/6ieAs3XyDKvEfbj/QmbU5cX3p+SJpRRPN0vxQi5D1hkh0uxDpeClxygSr31NmZsd4sqfg==} + '@react-aria/select@3.18.0': + resolution: {integrity: sha512-a4jisr08t0TbN2WKqhrrn7fTjlvuuP+Apbw7489bmEAMAFADvZTixaE38XDy19rY2/pD0tfWAgf7fEKDQZfikQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/searchfield@3.8.9': - resolution: {integrity: sha512-Yt2pj8Wb5/XsUr2T0DQqFv+DlFpzzWIWnNr9cJATUcWV/xw6ok7YFEg9+7EHtBmsCQxFFJtock1QfZzBw6qLtQ==} + '@react-aria/selection@3.28.0': + resolution: {integrity: sha512-2rJl4qzBl5mUUgQVC41R/jX/s6JDvxKnFqDs5uF3gTXs6eI2H9tAEansIWWVDFQGhGQvvFgxw27mmOokpDOC2w==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/select@3.17.0': - resolution: {integrity: sha512-q5ZuyAn5jSOeI0Ys99951TaGcF4O7u1SSBVxPMwVVXOU8ZhToCNx+WG3n/JDYHEjqdo7sbsVRaPA7LkBzBGf5w==} + '@react-aria/separator@3.5.0': + resolution: {integrity: sha512-MZOTGISx4yN1sqpfCzU9Guqh848F2O+Z/CVFS3Fc2cz1DS1X6bVNDQBsRz4aOd8CgdyRLAeV9RwiGuR5tpCeCA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/selection@3.26.0': - resolution: {integrity: sha512-ZBH3EfWZ+RfhTj01dH8L17uT7iNbXWS8u77/fUpHgtrm0pwNVhx0TYVnLU1YpazQ/3WVpvWhmBB8sWwD1FlD/g==} + '@react-aria/slider@3.9.0': + resolution: {integrity: sha512-FdowBjuYOT1OfAo6iEBGoz/EFJ0paRt3Gk/om+NwBF98yeqjHB7qZAkucGIswpixDfMNLYhGoiwiGYIYerhCxw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/separator@3.4.13': - resolution: {integrity: sha512-0NlcrdBfQbcjWEXdHl3+uSY1272n2ljT1gWL2RIf6aQsQWTZ0gz0rTgRHy0MTXN+y+tICItUERJT4vmTLtIzVg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/slider@3.8.2': - resolution: {integrity: sha512-6KyUGaVzRE4xAz1LKHbNh1q5wzxe58pdTHFSnxNe6nk1SCoHw7NfI4h2s2m6LgJ0megFxsT0Ir8aHaFyyxmbgg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/spinbutton@3.6.19': - resolution: {integrity: sha512-xOIXegDpts9t3RSHdIN0iYQpdts0FZ3LbpYJIYVvdEHo9OpDS+ElnDzCGtwZLguvZlwc5s1LAKuKopDUsAEMkw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/ssr@3.9.10': - resolution: {integrity: sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==} + '@react-aria/ssr@3.10.0': + resolution: {integrity: sha512-mnelvACtfNWWKFCT1YHebxJRmfBmmANGwHQhCFPByMVTx1L8RumcaLxChYkE87g2KPuP5xX2il/oRn1DytW+qQ==} engines: {node: '>= 12'} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/switch@3.7.8': - resolution: {integrity: sha512-AfsUq1/YiuoprhcBUD9vDPyWaigAwctQNW1fMb8dROL+i/12B+Zekj8Ml+jbU69/kIVtfL0Jl7/0Bo9KK3X0xQ==} + '@react-aria/switch@3.8.0': + resolution: {integrity: sha512-sGfkuF2P9W6nkwRRHa73ivHbGCYHAfRXL3pZ8fYBOHAttwQKBgYqB+DTg9tD+FNLxB8Kr28nm9u6v6TGgTtWnA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/table@3.17.8': - resolution: {integrity: sha512-bXiZoxTMbsqUJsYDhHPzKc3jw0HFJ/xMsJ49a0f7mp5r9zACxNLeIU0wJ4Uvx37dnYOHKzGliG+rj5l4sph7MA==} + '@react-aria/table@3.18.0': + resolution: {integrity: sha512-1RCyVxWpckEa+LfAKMetO2k9t7xtwf6jgs4YOO884EhIndjzd1r86IYY4KuU3zWOQnqYCsv13px/duT6n+afjQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/tabs@3.10.8': - resolution: {integrity: sha512-sPPJyTyoAqsBh76JinBAxStOcbjZvyWFYKpJ9Uqw+XT0ObshAPPFSGeh8DiQemPs02RwJdrfARPMhyqiX8t59A==} + '@react-aria/tabs@3.12.0': + resolution: {integrity: sha512-gvilqw9P2bpqc/DQluVA9c01f50d3wyjPMn41KzQBRnJKcsih0KHB5ynSoRxfOXw7TOu5w2ydfTXwZgrseu8/A==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/tag@3.7.2': - resolution: {integrity: sha512-JV679P5r4DftbqyNBRt7Nw9mP7dxaKPfikjyQuvUoEOa06wBLbM/hU9RJUPRvqK+Un6lgBDAmXD9NNf4N2xpdw==} + '@react-aria/tag@3.9.0': + resolution: {integrity: sha512-EhX3pAqMo+N59Hzj6ERfMIw2kYUY+cguRsHwZKZ0K9gICIp100m8U5YJkOIxSxN1nBA9acpt/xZkNQWF/Tk4CA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/textfield@3.18.2': - resolution: {integrity: sha512-G+lM8VYSor6g9Yptc6hLZ6BF+0cq0pYol1z6wdQUQgJN8tg4HPtzq75lsZtlCSIznL3amgRAxJtd0dUrsAnvaQ==} + '@react-aria/textfield@3.19.0': + resolution: {integrity: sha512-P5Da8QFV/bCp3oCXQAqaTWhXNtx4vWEjvoqa49oG5TM1blodLjFrzNyiRM7TmQU0VLwiQPAQrqD4yaDLXZ0Nqg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/toast@3.0.8': - resolution: {integrity: sha512-rfJIms6AkMyQ7ZgKrMZgGfPwGcB/t1JoEwbc1PAmXcAvFI/hzF6YF7ZFDXiq38ucFsP9PnHmbXIzM9w4ccl18A==} + '@react-aria/toast@3.1.0': + resolution: {integrity: sha512-9IFz0VxiqWMtayARiddD6nVtu5UQWaPiMNXNsL2wxq480y3tjWxhx4/2iPNWYzza090hv0ch1uAN307OCyi8jg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/toggle@3.12.2': - resolution: {integrity: sha512-g25XLYqJuJpt0/YoYz2Rab8ax+hBfbssllcEFh0v0jiwfk2gwTWfRU9KAZUvxIqbV8Nm8EBmrYychDpDcvW1kw==} + '@react-aria/tooltip@3.10.0': + resolution: {integrity: sha512-7MSSMyVMxTNRe+TVSAS9IUzqWEB5A875Q+/9noaPbcbQJfFLT5VDD8rjCfgqtwz1kcUHXYIz1EEJDtsch5akBQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/toolbar@3.0.0-beta.21': - resolution: {integrity: sha512-yRCk/GD8g+BhdDgxd3I0a0c8Ni4Wyo6ERzfSoBkPkwQ4X2E2nkopmraM9D0fXw4UcIr4bnmvADzkHXtBN0XrBg==} + '@react-aria/tree@3.2.0': + resolution: {integrity: sha512-b6hA7nfZsIb0sod0KopOIlZrp5JMoDWT7DbkF4WAq5Uxt3bfU6cvBPm1qrOOG6mfEXuL3JLCpQGBRzqn6nmV4Q==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/tooltip@3.8.8': - resolution: {integrity: sha512-CmHUqtXtFWmG4AHMEr9hIVex+oscK6xcM2V47gq9ijNInxe3M6UBu/dBdkgGP/jYv9N7tzCAjTR8nNIHQXwvWw==} + '@react-aria/utils@3.34.0': + resolution: {integrity: sha512-ZM1ZXIqpwGTJjjL6o3JhlZkEaBpQdxuOCqLEvwEwooaj5GsYI3E9UfOl5vy3UW6bYiEEWl9pNBntrb9CR9kItQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/tree@3.1.4': - resolution: {integrity: sha512-6pbFeN0dAsCOrFGUKU39CNjft20zCAjLfMqfkRWisL+JkUHI2nq6odUJF5jJTsU1C+1951+3oFOmVxPX+K+akQ==} + '@react-aria/visually-hidden@3.9.0': + resolution: {integrity: sha512-OBSwuke98mVtd2po43VOT999rO9mpL7yaSehMuIylOT2wyY01Tut+ATpjavKbcZAust4eZFALVARYAS/0+GHyA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/utils@3.31.0': - resolution: {integrity: sha512-ABOzCsZrWzf78ysswmguJbx3McQUja7yeGj6/vZo4JVsZNlxAN+E9rs381ExBRI0KzVo6iBTeX5De8eMZPJXig==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@react-native/assets-registry@0.85.1': + resolution: {integrity: sha512-QODQ15teXThKaKdb7lnx4RifNUGnsGZ/NMKtkNBE89nJuK93+mPsb1ozp5xkGyLw7ZNVYO4Nkqsp4MsBOuAX8g==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-aria/visually-hidden@3.8.28': - resolution: {integrity: sha512-KRRjbVVob2CeBidF24dzufMxBveEUtUu7IM+hpdZKB+gxVROoh4XRLPv9SFmaH89Z7D9To3QoykVZoWD0lan6Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-native-community/cli-clean@13.6.8': - resolution: {integrity: sha512-B1uxlm1N4BQuWFvBL3yRl3LVvydjswsdbTi7tMrHMtSxfRio1p9HjcmDzlzKco09Y+8qBGgakm3jcMZGLbhXQQ==} - - '@react-native-community/cli-config@13.6.8': - resolution: {integrity: sha512-RabCkIsWdP4Ex/sf1uSP9qxc30utm+0uIJAjrZkNQynm7T4Lyqn/kT3LKm4yM6M0Qk61YxGguiaXF4601vAduw==} - - '@react-native-community/cli-debugger-ui@13.6.8': - resolution: {integrity: sha512-2cS+MX/Su6sVSjqpDftFOXbK7EuPg98xzsPkdPhkQnkZwvXqodK9CAMuDMbx3lBHHtrPrpMbBCpFmPN8iVOnlA==} - - '@react-native-community/cli-doctor@13.6.8': - resolution: {integrity: sha512-/3Vdy9J3hyiu0y3nd/CU3kBqPlTRxnLXg7V6jrA1jbTOlZAMyV9imEkrqEaGK0SMOyMhh9Pipf98Ozhk0Nl4QA==} - - '@react-native-community/cli-hermes@13.6.8': - resolution: {integrity: sha512-lZi/OBFuZUj5cLK94oEgtrtmxGoqeYVRcnHXl/R5c4put9PDl+qH2bEMlGZkFiw57ae3UZKr3TMk+1s4jh3FYQ==} - - '@react-native-community/cli-platform-android@13.6.8': - resolution: {integrity: sha512-vWrqeLRRTwp2kO33nbrAgbYn8HR2c2CpIfyVJY9Ckk7HGUSwDyxdcSu7YBvt2ShdfLZH0HctWFNXsgGrfg6BDw==} - - '@react-native-community/cli-platform-apple@13.6.8': - resolution: {integrity: sha512-1JPohnlXPqU44zns3ALEzIbH2cKRw6JtEDJERgLuEUbs2r2NeJgqDbKyZ7fTTO8o+pegDnn6+Rr7qGVVOuUzzg==} - - '@react-native-community/cli-platform-ios@13.6.8': - resolution: {integrity: sha512-/IIcIRM8qaoD7iZqsvtf6Qq1AwtChWYfB9sTn3mTiolZ5Zd5bXH37g+6liPfAICRkj2Ptq3iXmjrDVUQAxrOXw==} - - '@react-native-community/cli-server-api@13.6.8': - resolution: {integrity: sha512-Lx664oWTzpVfbKUTy+3GIX7e+Mt5Zn+zdkM4ehllNdik/lbB3tM9Nrg8PSvOfI+tTXs2w55+nIydLfH+0FqJVg==} - - '@react-native-community/cli-tools@13.6.8': - resolution: {integrity: sha512-1MYlae9EkbjC7DBYOGMH5xF9yDoeNYUKgEdDjL6WAUBoF2gtwiZPM6igLKi/+dhb5sCtC7fiLrLi0Oevdf+RmQ==} - - '@react-native-community/cli-types@13.6.8': - resolution: {integrity: sha512-C4mVByy0i+/NPuPhdMLBR7ubEVkjVS1VwoQu/BoG1crJFNE+167QXAzH01eFbXndsjZaMWmD4Gerx7TYc6lHfA==} - - '@react-native-community/cli@13.6.8': - resolution: {integrity: sha512-0lRdgLNaXixWY4BfFRl1J6Ao9Lapo2z+++iE7TD4GAbuxOWJSyFi+KUA8XNfSDyML4jFO02MZgyBPxAWdaminQ==} - engines: {node: '>=18'} - hasBin: true - - '@react-native/assets-registry@0.74.84': - resolution: {integrity: sha512-dzUhwyaX04QosWZ8zyaaNB/WYZIdeDN1lcpfQbqiOhZJShRH+FLTDVONE/dqlMQrP+EO7lDqF0RrlIt9lnOCQQ==} - engines: {node: '>=18'} - - '@react-native/babel-plugin-codegen@0.74.84': - resolution: {integrity: sha512-UR4uiii5szIJA84mSC6GJOfYKDq7/ThyetOQT62+BBcyGeHVtHlNLNRzgaMeLqIQaT8Fq4pccMI+7QqLOMXzdw==} - engines: {node: '>=18'} - - '@react-native/babel-preset@0.74.84': - resolution: {integrity: sha512-WUfu6Y4aGuVdocQZvx33BJiQWFH6kRCHYbZfBn2psgFrSRLgQWEQrDCxqPFObNAVSayM0rNhp2FvI5K/Eyeqlg==} - engines: {node: '>=18'} + '@react-native/codegen@0.85.1': + resolution: {integrity: sha512-Ge8F5VejnI7ng/NGObqBBovuLbItvmmZDFQ1Qwt/nBhHtk7l2tOffNMVNTta9Jt8TW0oXxVj6FG3hr6nx03JrQ==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} peerDependencies: '@babel/core': '*' - '@react-native/codegen@0.74.84': - resolution: {integrity: sha512-0hXlnu9i0o8v+gXKQi+x6T471L85kCDwW4WrJiYAeOheWrQdNNW6rC3g8+LL7HXAf7QcHGU/8/d57iYfdVK2BQ==} - engines: {node: '>=18'} + '@react-native/community-cli-plugin@0.85.1': + resolution: {integrity: sha512-vZtNEYv5qMYvbA9cTBMuZ3QkCqyJ7lDQgbxh4MpoZHZ0+62qjJpCXn9xzFM0Rm5ZG2hO8WDDxcFdI581BdASdg==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} peerDependencies: - '@babel/preset-env': ^7.1.6 + '@react-native-community/cli': '*' + '@react-native/metro-config': 0.85.1 + peerDependenciesMeta: + '@react-native-community/cli': + optional: true + '@react-native/metro-config': + optional: true - '@react-native/community-cli-plugin@0.74.84': - resolution: {integrity: sha512-GBKE+1sUh86fS2XXV46gMCNHMc1KetshMbYJ0AhDhldpaILZHqRBX50mdVsiYVvkzp4QjM0nmYqefuJ9NVwicQ==} - engines: {node: '>=18'} + '@react-native/debugger-frontend@0.85.1': + resolution: {integrity: sha512-GUC2ZEy+J/Goc4l243XeeY/8NdNXVXPXoRTc6Yy14OiDcy7Yk87VyrMARbp23wCbzhnrz0dnYB8rxJ+AJvMzCg==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/debugger-frontend@0.74.84': - resolution: {integrity: sha512-YUEA03UNFbiYzHpYxlcS2D9+3eNT5YLGkl5yRg3nOSN6KbCc/OttGnNZme+tuSOJwjMN/vcvtDKYkTqjJw8U0A==} - engines: {node: '>=18'} + '@react-native/debugger-shell@0.85.1': + resolution: {integrity: sha512-M/ogODh0uDFJ7xOlCc+v9nKUucUXGJwVOupl+zb3VT8tJnI2Cie/Fiv9NszAD/bzRQhJSrPZkJSAO6VW0XbWyA==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/dev-middleware@0.74.84': - resolution: {integrity: sha512-veYw/WmyrAOQHUiIeULzn2duJQnXDPiKq2jZ/lcmDo6jsLirpp+Q73lx09TYgy/oVoPRuV0nfmU3x9B6EV/7qQ==} - engines: {node: '>=18'} + '@react-native/dev-middleware@0.85.1': + resolution: {integrity: sha512-vJSIZP7yymZMnwOrdNjalVf8jqcAFtmi6zT3sC9MRMgJPGkDy05g8y5zgAkgTxpNtVsv+/q5pst8woYp7pgRkA==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/gradle-plugin@0.74.84': - resolution: {integrity: sha512-wYWC5WWXqzCCe4PDogz9pNc4xH5ZamahW5XGSbrrYJ5V3walZ+7z43V6iEBJkZbLjj9YBcSttkXYGr1Xh4veAg==} - engines: {node: '>=18'} + '@react-native/gradle-plugin@0.85.1': + resolution: {integrity: sha512-KeTntbnsH/NOdzZrSE8tgep+9jEMlEfklVDtgxnjjb5nDhhBD016judwyo9bsinZnuwXxmemXnOOqOfcEawxbg==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/js-polyfills@0.74.84': - resolution: {integrity: sha512-+PgxuUjBw9JVlz6m4ECsIJMLbDopnr4rpLmsG32hQaJrg0wMuvHtsgAY/J/aVCSG2GNUXexfjrnhc+O9yGOZXQ==} - engines: {node: '>=18'} + '@react-native/js-polyfills@0.85.1': + resolution: {integrity: sha512-VseQZAKnDbmpZThLWviDIJ0NmuSiwiHA6vc2HNJTTVqTy2mQR0+858y9kDdDBQPYe0HH8+W1mYui2i4eUWGh4g==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/metro-babel-transformer@0.74.84': - resolution: {integrity: sha512-YtVGq7jkgyUECv5yt4BOFbOXyW4ddUn8+dnwGGpJKdfhXYL5o5++AxNdE+2x+SZdkj3JUVekGKPwRabFECABaw==} - engines: {node: '>=18'} + '@react-native/normalize-colors@0.85.1': + resolution: {integrity: sha512-w+4ZZ2PvvtC0IODEmxizYOrHmeDgdzpM7CKhtTNWoNtDWZoi7/ZY3UmNntn9poPorUy5cwFbfYiP/8rJFEsFvQ==} + + '@react-native/virtualized-lists@0.85.1': + resolution: {integrity: sha512-RLpoATkxeTaYxna5dDLIxEtoStp9UL7ryHIIOmKnE9NQW3ggR+U9DWQPXQkOfRc7/kPYba4ynKA2fIISGysVTg==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} peerDependencies: - '@babel/core': '*' - - '@react-native/normalize-colors@0.74.84': - resolution: {integrity: sha512-Y5W6x8cC5RuakUcTVUFNAIhUZ/tYpuqHZlRBoAuakrTwVuoNHXfQki8lj1KsYU7rW6e3VWgdEx33AfOQpdNp6A==} - - '@react-native/virtualized-lists@0.74.84': - resolution: {integrity: sha512-XcV+qdqt2WihaY4iRm/M1FdSy+18lecU9mRXNmy9YK8g9Th/8XbNtmmKI0qWBx3KxyuXMH/zd0ps05YTrX16kw==} - engines: {node: '>=18'} - peerDependencies: - '@types/react': ^18.2.6 + '@types/react': ^19.2.0 react: '*' - react-native: '*' + react-native: 0.85.1 peerDependenciesMeta: '@types/react': optional: true - '@react-spring/animated@9.7.3': - resolution: {integrity: sha512-5CWeNJt9pNgyvuSzQH+uy2pvTg8Y4/OisoscZIR8/ZNLIOI+CatFBhGZpDGTF/OzdNFsAoGk3wiUYTwoJ0YIvw==} + '@react-spring/animated@9.7.5': + resolution: {integrity: sha512-Tqrwz7pIlsSDITzxoLS3n/v/YCUHQdOIKtOJf4yL6kYVSDTSmVK1LI1Q3M/uu2Sx4X3pIWF3xLUhlsA6SPNTNg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@react-spring/core@9.7.3': - resolution: {integrity: sha512-IqFdPVf3ZOC1Cx7+M0cXf4odNLxDC+n7IN3MDcVCTIOSBfqEcBebSv+vlY5AhM0zw05PDbjKrNmBpzv/AqpjnQ==} + '@react-spring/core@9.7.5': + resolution: {integrity: sha512-rmEqcxRcu7dWh7MnCcMXLvrf6/SDlSokLaLTxiPlAYi11nN3B5oiCUAblO72o+9z/87j2uzxa2Inm8UbLjXA+w==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@react-spring/konva@9.7.3': - resolution: {integrity: sha512-R9sY6SiPGYqz1383P5qppg5z57YfChVknOC1UxxaGxpw+WiZa8fZ4zmZobslrw+os3/+HAXZv8O+EvU/nQpf7g==} + '@react-spring/konva@9.7.5': + resolution: {integrity: sha512-BelrmyY6w0FGoNSEfSJltjQDUoW0Prxf+FzGjyLuLs+V9M9OM/aHnYqOlvQEfQsZx6C/ZiDOn5BZl8iH8SDf+Q==} peerDependencies: konva: '>=2.6' react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-konva: ^16.8.0 || ^16.8.7-0 || ^16.9.0-0 || ^16.10.1-0 || ^16.12.0-0 || ^16.13.0-0 || ^17.0.0-0 || ^17.0.1-0 || ^17.0.2-0 || ^18.0.0-0 - '@react-spring/native@9.7.3': - resolution: {integrity: sha512-4mpxX3FuEBCUT6ae2fjhxcJW6bhr2FBwFf274eXB7n+U30Gdg8Wo2qYwcUnmiAA0S3dvP8vLTazx3+CYWFShnA==} + '@react-spring/native@9.7.5': + resolution: {integrity: sha512-C1S500BNP1I05MftElyLv2nIqaWQ0MAByOAK/p4vuXcUK3XcjFaAJ385gVLgV2rgKfvkqRoz97PSwbh+ZCETEg==} peerDependencies: - react: ^16.8.0 || >=17.0.0 || >=18.0.0 + react: 16.8.0 || >=17.0.0 || >=18.0.0 react-native: '>=0.58' - '@react-spring/shared@9.7.3': - resolution: {integrity: sha512-NEopD+9S5xYyQ0pGtioacLhL2luflh6HACSSDUZOwLHoxA5eku1UPuqcJqjwSD6luKjjLfiLOspxo43FUHKKSA==} + '@react-spring/rafz@9.7.5': + resolution: {integrity: sha512-5ZenDQMC48wjUzPAm1EtwQ5Ot3bLIAwwqP2w2owG5KoNdNHpEJV263nGhCeKKmuA3vG2zLLOdu3or6kuDjA6Aw==} + + '@react-spring/shared@9.7.5': + resolution: {integrity: sha512-wdtoJrhUeeyD/PP/zo+np2s1Z820Ohr/BbuVYv+3dVLW7WctoiN7std8rISoYoHpUXtbkpesSKuPIw/6U1w1Pw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@react-spring/three@9.7.3': - resolution: {integrity: sha512-Q1p512CqUlmMK8UMBF/Rj79qndhOWq4XUTayxMP9S892jiXzWQuj+xC3Xvm59DP/D4JXusXpxxqfgoH+hmOktA==} + '@react-spring/three@9.7.5': + resolution: {integrity: sha512-RxIsCoQfUqOS3POmhVHa1wdWS0wyHAUway73uRLp3GAL5U2iYVNdnzQsep6M2NZ994BlW8TcKuMtQHUqOsy6WA==} peerDependencies: '@react-three/fiber': '>=6.0' react: ^16.8.0 || ^17.0.0 || ^18.0.0 three: '>=0.126' - '@react-spring/types@9.7.3': - resolution: {integrity: sha512-Kpx/fQ/ZFX31OtlqVEFfgaD1ACzul4NksrvIgYfIFq9JpDHFwQkMVZ10tbo0FU/grje4rcL4EIrjekl3kYwgWw==} + '@react-spring/types@9.7.5': + resolution: {integrity: sha512-HVj7LrZ4ReHWBimBvu2SKND3cDVUPWKLqRTmWe/fNY6o1owGOX0cAHbdPDTMelgBlVbrTKrre6lFkhqGZErK/g==} - '@react-spring/web@9.7.3': - resolution: {integrity: sha512-BXt6BpS9aJL/QdVqEIX9YoUy8CE6TJrU0mNCqSoxdXlIeNcEBWOfIyE6B14ENNsyQKS3wOWkiJfco0tCr/9tUg==} + '@react-spring/web@9.7.5': + resolution: {integrity: sha512-lmvqGwpe+CSttsWNZVr+Dg62adtKhauGwLyGE/RRyZ8AAMLgb9x3NDMA5RMElXo+IMyTkPp7nxTB8ZQlmhb6JQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@react-spring/zdog@9.7.3': - resolution: {integrity: sha512-L+yK/1PvNi9n8cldiJ309k4LdxcPkeWE0W18l1zrP1IBIyd5NB5EPA8DMsGr9gtNnnIujtEzZk+4JIOjT8u/tw==} + '@react-spring/zdog@9.7.5': + resolution: {integrity: sha512-VV7vmb52wGHgDA1ry6hv+QgxTs78fqjKEQnj+M8hiBg+dwOsTtqqM24ADtc4cMAhPW+eZhVps8ZNKtjt8ouHFA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 react-zdog: '>=1.0' zdog: '>=1.0' - '@react-stately/calendar@3.9.0': - resolution: {integrity: sha512-U5Nf2kx9gDhJRxdDUm5gjfyUlt/uUfOvM1vDW2UA62cA6+2k2cavMLc2wNlXOb/twFtl6p0joYKHG7T4xnEFkg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/checkbox@3.7.2': - resolution: {integrity: sha512-j1ycUVz5JmqhaL6mDZgDNZqBilOB8PBW096sDPFaTtuYreDx2HOd1igxiIvwlvPESZwsJP7FVM3mYnaoXtpKPA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/collections@3.12.8': - resolution: {integrity: sha512-AceJYLLXt1Y2XIcOPi6LEJSs4G/ubeYW3LqOCQbhfIgMaNqKfQMIfagDnPeJX9FVmPFSlgoCBxb1pTJW2vjCAQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/color@3.9.2': - resolution: {integrity: sha512-F+6Do8W3yu/4n7MpzZtbXwVukcLTFYYDIUtpoR+Jl52UmAr9Hf1CQgkyTI2azv1ZMzj1mVrTBhpBL0q27kFZig==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/combobox@3.12.0': - resolution: {integrity: sha512-A6q9R/7cEa/qoQsBkdslXWvD7ztNLLQ9AhBhVN9QvzrmrH5B4ymUwcTU8lWl22ykH7RRwfonLeLXJL4C+/L2oQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/datepicker@3.15.2': - resolution: {integrity: sha512-S5GL+W37chvV8knv9v0JRv0L6hKo732qqabCCHXzOpYxkLIkV4f/y3cHdEzFWzpZ0O0Gkg7WgeYo160xOdBKYg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/disclosure@3.0.8': - resolution: {integrity: sha512-/Ce/Z76y85eSBZiemfU/uEyXkBBa1RdfLRaKD13rnfUV7/nS3ae1VtNlsXgmwQjWv2pmAiSuEKYMbZfVL7q/lQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/dnd@3.7.1': - resolution: {integrity: sha512-O1JBJ4HI1rVNKuoa5NXiC5FCrCEkr9KVBoKNlTZU8/cnQselhbEsUfMglAakO2EuwIaM1tIXoNF5J/N5P+6lTA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/flags@3.1.2': - resolution: {integrity: sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg==} - - '@react-stately/form@3.2.2': - resolution: {integrity: sha512-soAheOd7oaTO6eNs6LXnfn0tTqvOoe3zN9FvtIhhrErKz9XPc5sUmh3QWwR45+zKbitOi1HOjfA/gifKhZcfWw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/grid@3.11.6': - resolution: {integrity: sha512-vWPAkzpeTIsrurHfMubzMuqEw7vKzFhIJeEK5sEcLunyr1rlADwTzeWrHNbPMl66NAIAi70Dr1yNq+kahQyvMA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/list@3.13.1': - resolution: {integrity: sha512-eHaoauh21twbcl0kkwULhVJ+CzYcy1jUjMikNVMHOQdhr4WIBdExf7PmSgKHKqsSPhpGg6IpTCY2dUX3RycjDg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/menu@3.9.8': - resolution: {integrity: sha512-bo0NOhofnTHLESiYfsSSw6gyXiPVJJ0UlN2igUXtJk5PmyhWjFzUzTzcnd7B028OB0si9w3LIWM3stqz5271Eg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/numberfield@3.10.2': - resolution: {integrity: sha512-jlKVFYaH3RX5KvQ7a+SAMQuPccZCzxLkeYkBE64u1Zvi7YhJ8hkTMHG/fmZMbk1rHlseE2wfBdk0Rlya3MvoNQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/overlays@3.6.20': - resolution: {integrity: sha512-YAIe+uI8GUXX8F/0Pzr53YeC5c/bjqbzDFlV8NKfdlCPa6+Jp4B/IlYVjIooBj9+94QvbQdjylegvYWK/iPwlg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/radio@3.11.2': - resolution: {integrity: sha512-UM7L6AW+k8edhSBUEPZAqiWNRNadfOKK7BrCXyBiG79zTz0zPcXRR+N+gzkDn7EMSawDeyK1SHYUuoSltTactg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/searchfield@3.5.16': - resolution: {integrity: sha512-MRfqT1lZ24r94GuFNcGJXsfijZoWjSMySCT60T6NXtbOzVPuAF3K+pL70Rayq/EWLJjS2NPHND11VTs0VdcE0Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/select@3.8.0': - resolution: {integrity: sha512-A721nlt0DSCDit0wKvhcrXFTG5Vv1qkEVkeKvobmETZy6piKvwh0aaN8iQno5AFuZaj1iOZeNjZ/20TsDJR/4A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/selection@3.20.6': - resolution: {integrity: sha512-a0bjuP2pJYPKEiedz2Us1W1aSz0iHRuyeQEdBOyL6Z6VUa6hIMq9H60kvseir2T85cOa4QggizuRV7mcO6bU5w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/slider@3.7.2': - resolution: {integrity: sha512-EVBHUdUYwj++XqAEiQg2fGi8Reccznba0uyQ3gPejF0pAc390Q/J5aqiTEDfiCM7uJ6WHxTM6lcCqHQBISk2dQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/table@3.15.1': - resolution: {integrity: sha512-MhMAgE/LgAzHcAn1P3p/nQErzJ6DiixSJ1AOt2JlnAKEb5YJg4ATKWCb2IjBLwywt9ZCzfm3KMUzkctZqAoxwA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/tabs@3.8.6': - resolution: {integrity: sha512-9RYxmgjVIxUpIsGKPIF7uRoHWOEz8muwaYiStCVeyiYBPmarvZoIYtTXcwSMN/vEs7heVN5uGCL6/bfdY4+WiA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/toast@3.1.2': - resolution: {integrity: sha512-HiInm7bck32khFBHZThTQaAF6e6/qm57F4mYRWdTq8IVeGDzpkbUYibnLxRhk0UZ5ybc6me+nqqPkG/lVmM42Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/toggle@3.9.2': - resolution: {integrity: sha512-dOxs9wrVXHUmA7lc8l+N9NbTJMAaXcYsnNGsMwfXIXQ3rdq+IjWGNYJ52UmNQyRYFcg0jrzRrU16TyGbNjOdNQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/tooltip@3.5.8': - resolution: {integrity: sha512-gkcUx2ROhCiGNAYd2BaTejakXUUNLPnnoJ5+V/mN480pN+OrO8/2V9pqb/IQmpqxLsso93zkM3A4wFHHLBBmPQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/tree@3.9.3': - resolution: {integrity: sha512-ZngG79nLFxE/GYmpwX6E/Rma2MMkzdoJPRI3iWk3dgqnGMMzpPnUp/cvjDsU3UHF7xDVusC5BT6pjWN0uxCIFQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/utils@3.10.8': - resolution: {integrity: sha512-SN3/h7SzRsusVQjQ4v10LaVsDc81jyyR0DD5HnsQitm/I5WDpaSr2nRHtyloPFU48jlql1XX/S04T2DLQM7Y3g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-three/fiber@8.16.8': - resolution: {integrity: sha512-Lc8fjATtvQEfSd8d5iKdbpHtRm/aPMeFj7jQvp6TNHfpo8IQTW3wwcE1ZMrGGoUH+w2mnyS+0MK1NLPLnuzGkQ==} + '@react-three/fiber@9.6.0': + resolution: {integrity: sha512-90abYK2q5/qDM+GACs9zRvc5KhEEpEWqWlHSd64zTPNxg+9wCJvTfyD9x2so7hlQhjRYO1Fa6flR3BC/kpTFkA==} peerDependencies: expo: '>=43.0' expo-asset: '>=8.4' expo-file-system: '>=11.0' expo-gl: '>=11.0' - react: '>=18.0' - react-dom: '>=18.0' - react-native: '>=0.64' - three: '>=0.133' + react: '>=19 <19.3' + react-dom: '>=19 <19.3' + react-native: '>=0.78' + three: '>=0.156' peerDependenciesMeta: expo: optional: true @@ -2589,142 +2195,13 @@ packages: react-native: optional: true - '@react-types/breadcrumbs@3.7.17': - resolution: {integrity: sha512-IhvVTcfli5o/UDlGACXxjlor2afGlMQA8pNR3faH0bBUay1Fmm3IWktVw9Xwmk+KraV2RTAg9e+E6p8DOQZfiw==} + '@react-types/shared@3.34.0': + resolution: {integrity: sha512-gp6xo/s2lX54AlTjOiqwDnxA7UW79BNvI9dB9pr3LZTzRKCd1ZA+ZbgKw/ReIiWuvvVw/8QFJpnqeeFyLocMcQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-types/button@3.14.1': - resolution: {integrity: sha512-D8C4IEwKB7zEtiWYVJ3WE/5HDcWlze9mLWQ5hfsBfpePyWCgO3bT/+wjb/7pJvcAocrkXo90QrMm85LcpBtrpg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/calendar@3.8.0': - resolution: {integrity: sha512-ZDZgfZgbz1ydWOFs1mH7QFfX3ioJrmb3Y/lkoubQE0HWXLZzyYNvhhKyFJRS1QJ40IofLSBHriwbQb/tsUnGlw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/checkbox@3.10.2': - resolution: {integrity: sha512-ktPkl6ZfIdGS1tIaGSU/2S5Agf2NvXI9qAgtdMDNva0oLyAZ4RLQb6WecPvofw1J7YKXu0VA5Mu7nlX+FM2weQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/color@3.1.2': - resolution: {integrity: sha512-NP0TAY3j4tlMztOp/bBfMlPwC9AQKTjSiTFmc2oQNkx5M4sl3QpPqFPosdt7jZ8M4nItvfCWZrlZGjST4SB83A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/combobox@3.13.9': - resolution: {integrity: sha512-G6GmLbzVkLW6VScxPAr/RtliEyPhBClfYaIllK1IZv+Z42SVnOpKzhnoe79BpmiFqy1AaC3+LjZX783mrsHCwA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/datepicker@3.13.2': - resolution: {integrity: sha512-+M6UZxJnejYY8kz0spbY/hP08QJ5rsZ3aNarRQQHc48xV2oelFLX5MhAqizfLEsvyfb0JYrhWoh4z1xZtAmYCg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/dialog@3.5.22': - resolution: {integrity: sha512-smSvzOcqKE196rWk0oqJDnz+ox5JM5+OT0PmmJXiUD4q7P5g32O6W5Bg7hMIFUI9clBtngo8kLaX2iMg+GqAzg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/grid@3.3.6': - resolution: {integrity: sha512-vIZJlYTii2n1We9nAugXwM2wpcpsC6JigJFBd6vGhStRdRWRoU4yv1Gc98Usbx0FQ/J7GLVIgeG8+1VMTKBdxw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/link@3.6.5': - resolution: {integrity: sha512-+I2s3XWBEvLrzts0GnNeA84mUkwo+a7kLUWoaJkW0TOBDG7my95HFYxF9WnqKye7NgpOkCqz4s3oW96xPdIniQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/listbox@3.7.4': - resolution: {integrity: sha512-p4YEpTl/VQGrqVE8GIfqTS5LkT5jtjDTbVeZgrkPnX/fiPhsfbTPiZ6g0FNap4+aOGJFGEEZUv2q4vx+rCORww==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/menu@3.10.5': - resolution: {integrity: sha512-HBTrKll2hm0VKJNM4ubIv1L9MNo8JuOnm2G3M+wXvb6EYIyDNxxJkhjsqsGpUXJdAOSkacHBDcNh2HsZABNX4A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/meter@3.4.13': - resolution: {integrity: sha512-EiarfbpHcvmeyXvXcr6XLaHkNHuGc4g7fBVEiDPwssFJKKfbUzqnnknDxPjyspqUVRcXC08CokS98J1jYobqDg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/numberfield@3.8.15': - resolution: {integrity: sha512-97r92D23GKCOjGIGMeW9nt+/KlfM3GeWH39Czcmd2/D5y3k6z4j0avbsfx2OttCtJszrnENjw3GraYGYI2KosQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/overlays@3.9.2': - resolution: {integrity: sha512-Q0cRPcBGzNGmC8dBuHyoPR7N3057KTS5g+vZfQ53k8WwmilXBtemFJPLsogJbspuewQ/QJ3o2HYsp2pne7/iNw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/progress@3.5.16': - resolution: {integrity: sha512-I9tSdCFfvQ7gHJtm90VAKgwdTWXQgVNvLRStEc0z9h+bXBxdvZb+QuiRPERChwFQ9VkK4p4rDqaFo69nDqWkpw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/radio@3.9.2': - resolution: {integrity: sha512-3UcJXu37JrTkRyP4GJPDBU7NmDTInrEdOe+bVzA1j4EegzdkJmLBkLg5cLDAbpiEHB+xIsvbJdx6dxeMuc+H3g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/searchfield@3.6.6': - resolution: {integrity: sha512-cl3itr/fk7wbIQc2Gz5Ie8aVeUmPjVX/mRGS5/EXlmzycAKNYTvqf2mlxwObLndtLISmt7IgNjRRhbUUDI8Ang==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/select@3.11.0': - resolution: {integrity: sha512-SzIsMFVPCbXE1Z1TLfpdfiwJ1xnIkcL1/CjGilmUKkNk5uT7rYX1xCJqWCjXI0vAU1xM4Qn+T3n8de4fw6HRBg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/shared@3.32.1': - resolution: {integrity: sha512-famxyD5emrGGpFuUlgOP6fVW2h/ZaF405G5KDi3zPHzyjAWys/8W6NAVJtNbkCkhedmvL0xOhvt8feGXyXaw5w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/slider@3.8.2': - resolution: {integrity: sha512-MQYZP76OEOYe7/yA2To+Dl0LNb0cKKnvh5JtvNvDnAvEprn1RuLiay8Oi/rTtXmc2KmBa4VdTcsXsmkbbkeN2Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/switch@3.5.15': - resolution: {integrity: sha512-r/ouGWQmIeHyYSP1e5luET+oiR7N7cLrAlWsrAfYRWHxqXOSNQloQnZJ3PLHrKFT02fsrQhx2rHaK2LfKeyN3A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/table@3.13.4': - resolution: {integrity: sha512-I/DYiZQl6aNbMmjk90J9SOhkzVDZvyA3Vn3wMWCiajkMNjvubFhTfda5DDf2SgFP5l0Yh6TGGH5XumRv9LqL5Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/tabs@3.3.19': - resolution: {integrity: sha512-fE+qI43yR5pAMpeqPxGqQq9jDHXEPqXskuxNHERMW0PYMdPyem2Cw6goc5F4qeZO3Hf6uPZgHkvJz2OAq7TbBw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/textfield@3.12.6': - resolution: {integrity: sha512-hpEVKE+M3uUkTjw2WrX1NrH/B3rqDJFUa+ViNK2eVranLY4ZwFqbqaYXSzHupOF3ecSjJJv2C103JrwFvx6TPQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/tooltip@3.4.21': - resolution: {integrity: sha512-ugGHOZU6WbOdeTdbjnaEc+Ms7/WhsUCg+T3PCOIeOT9FG02Ce189yJ/+hd7oqL/tVwIhEMYJIqSCgSELFox+QA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@rnx-kit/chromium-edge-launcher@1.0.0': - resolution: {integrity: sha512-lzD84av1ZQhYUS+jsGqJiCMaJO2dn9u+RTT9n9q6D3SaKVwWqv+7AoRKqBu19bkwyE+iFRl1ymr40QS90jVFYg==} - engines: {node: '>=14.15'} - - '@rushstack/eslint-patch@1.10.3': - resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==} + '@scarf/scarf@1.4.0': + resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} '@seerr-team/react-tailwindcss-datepicker@1.3.4': resolution: {integrity: sha512-KZrnl6WL1lvUnAG4RZIkReJ+E0vSpOtMEuatobMqiWAa5Y+Z3d0ZcOOJWHoeRNtF19sIzzBkuLyhFNFlNtXg3A==} @@ -2735,24 +2212,13 @@ packages: '@selderee/plugin-htmlparser2@0.11.0': resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} - '@sideway/address@4.1.5': - resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} - - '@sideway/formula@3.0.1': - resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} - - '@sideway/pinpoint@2.0.0': - resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + '@simple-libs/stream-utils@1.2.0': + resolution: {integrity: sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==} + engines: {node: '>=18'} '@sinclair/typebox@0.27.10': resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} - '@sinonjs/commons@3.0.1': - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - - '@sinonjs/fake-timers@10.3.0': - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@so-ric/colorspace@1.1.6': resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==} @@ -2762,9 +2228,9 @@ packages: '@supercharge/request-ip@1.2.0': resolution: {integrity: sha512-wlt6JW69MHqLY2M6Sm/jVyCojNRKq2CBvwH0Hbx24SFhDQQGkgEjeKxVutDxHSyrWixFaOSLXC27euzxijhyMQ==} - '@svgr/babel-plugin-add-jsx-attribute@6.5.1': - resolution: {integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==} - engines: {node: '>=10'} + '@svgr/babel-plugin-add-jsx-attribute@8.0.0': + resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} + engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2780,159 +2246,87 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1': - resolution: {integrity: sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==} - engines: {node: '>=10'} + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0': + resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} + engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 - '@svgr/babel-plugin-svg-dynamic-title@6.5.1': - resolution: {integrity: sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==} - engines: {node: '>=10'} + '@svgr/babel-plugin-svg-dynamic-title@8.0.0': + resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} + engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 - '@svgr/babel-plugin-svg-em-dimensions@6.5.1': - resolution: {integrity: sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==} - engines: {node: '>=10'} + '@svgr/babel-plugin-svg-em-dimensions@8.0.0': + resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} + engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 - '@svgr/babel-plugin-transform-react-native-svg@6.5.1': - resolution: {integrity: sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==} - engines: {node: '>=10'} + '@svgr/babel-plugin-transform-react-native-svg@8.1.0': + resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==} + engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 - '@svgr/babel-plugin-transform-svg-component@6.5.1': - resolution: {integrity: sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==} + '@svgr/babel-plugin-transform-svg-component@8.0.0': + resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==} engines: {node: '>=12'} peerDependencies: '@babel/core': ^7.0.0-0 - '@svgr/babel-preset@6.5.1': - resolution: {integrity: sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==} - engines: {node: '>=10'} + '@svgr/babel-preset@8.1.0': + resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==} + engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 - '@svgr/core@6.5.1': - resolution: {integrity: sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==} - engines: {node: '>=10'} + '@svgr/core@8.1.0': + resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==} + engines: {node: '>=14'} - '@svgr/hast-util-to-babel-ast@6.5.1': - resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==} - engines: {node: '>=10'} + '@svgr/hast-util-to-babel-ast@8.0.0': + resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} + engines: {node: '>=14'} - '@svgr/plugin-jsx@6.5.1': - resolution: {integrity: sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==} - engines: {node: '>=10'} - peerDependencies: - '@svgr/core': ^6.0.0 - - '@svgr/plugin-svgo@6.5.1': - resolution: {integrity: sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==} - engines: {node: '>=10'} + '@svgr/plugin-jsx@8.1.0': + resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==} + engines: {node: '>=14'} peerDependencies: '@svgr/core': '*' - '@svgr/webpack@6.5.1': - resolution: {integrity: sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==} - engines: {node: '>=10'} - - '@swc/core-darwin-arm64@1.6.5': - resolution: {integrity: sha512-RGQhMdni2v1/ANQ/2K+F+QYdzaucekYBewZcX1ogqJ8G5sbPaBdYdDN1qQ4kHLCIkPtGP6qC7c71qPEqL2RidQ==} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] - - '@swc/core-darwin-x64@1.6.5': - resolution: {integrity: sha512-/pSN0/Jtcbbb9+ovS9rKxR3qertpFAM3OEJr/+Dh/8yy7jK5G5EFPIrfsw/7Q5987ERPIJIH6BspK2CBB2tgcg==} - engines: {node: '>=10'} - cpu: [x64] - os: [darwin] - - '@swc/core-linux-arm-gnueabihf@1.6.5': - resolution: {integrity: sha512-B0g/dROCE747RRegs/jPHuKJgwXLracDhnqQa80kFdgWEMjlcb7OMCgs5OX86yJGRS4qcYbiMGD0Pp7Kbqn3yw==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux] - - '@swc/core-linux-arm64-gnu@1.6.5': - resolution: {integrity: sha512-W8meapgXTq8AOtSvDG4yKR8ant2WWD++yOjgzAleB5VAC+oC+aa8YJROGxj8HepurU8kurqzcialwoMeq5SZZQ==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-arm64-musl@1.6.5': - resolution: {integrity: sha512-jyCKqoX50Fg8rJUQqh4u5PqnE7nqYKXHjVH2WcYr114/MU21zlsI+YL6aOQU1XP8bJQ2gPQ1rnlnGJdEHiKS/w==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-x64-gnu@1.6.5': - resolution: {integrity: sha512-G6HmUn/RRIlXC0YYFfBz2qh6OZkHS/KUPkhoG4X9ADcgWXXjOFh6JrefwsYj8VBAJEnr5iewzjNfj+nztwHaeA==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-linux-x64-musl@1.6.5': - resolution: {integrity: sha512-AQpBjBnelQDSbeTJA50AXdS6+CP66LsXIMNTwhPSgUfE7Bx1ggZV11Fsi4Q5SGcs6a8Qw1cuYKN57ZfZC5QOuA==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-win32-arm64-msvc@1.6.5': - resolution: {integrity: sha512-MZTWM8kUwS30pVrtbzSGEXtek46aXNb/mT9D6rsS7NvOuv2w+qZhjR1rzf4LNbbn5f8VnR4Nac1WIOYZmfC5ng==} - engines: {node: '>=10'} - cpu: [arm64] - os: [win32] - - '@swc/core-win32-ia32-msvc@1.6.5': - resolution: {integrity: sha512-WZdu4gISAr3yOm1fVwKhhk6+MrP7kVX0KMP7+ZQFTN5zXQEiDSDunEJKVgjMVj3vlR+6mnAqa/L0V9Qa8+zKlQ==} - engines: {node: '>=10'} - cpu: [ia32] - os: [win32] - - '@swc/core-win32-x64-msvc@1.6.5': - resolution: {integrity: sha512-ezXgucnMTzlFIxQZw7ls/5r2hseFaRoDL04cuXUOs97E8r+nJSmFsRQm/ygH5jBeXNo59nyZCalrjJAjwfgACA==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - - '@swc/core@1.6.5': - resolution: {integrity: sha512-tyVvUK/HDOUUsK6/GmWvnqUtD9oDpPUA4f7f7JCOV8hXxtfjMtAZeBKf93yrB1XZet69TDR7EN0hFC6i4MF0Ig==} - engines: {node: '>=10'} + '@svgr/plugin-svgo@8.1.0': + resolution: {integrity: sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==} + engines: {node: '>=14'} peerDependencies: - '@swc/helpers': '*' - peerDependenciesMeta: - '@swc/helpers': - optional: true + '@svgr/core': '*' + + '@svgr/webpack@8.1.0': + resolution: {integrity: sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==} + engines: {node: '>=14'} '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/helpers@0.5.11': - resolution: {integrity: sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==} + '@swc/helpers@0.5.21': + resolution: {integrity: sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==} '@swc/helpers@0.5.5': resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} - '@swc/types@0.1.26': - resolution: {integrity: sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==} - '@tailwindcss/aspect-ratio@0.4.2': resolution: {integrity: sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==} peerDependencies: tailwindcss: '>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1' - '@tailwindcss/forms@0.5.10': - resolution: {integrity: sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==} + '@tailwindcss/forms@0.5.11': + resolution: {integrity: sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==} peerDependencies: tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1' - '@tailwindcss/typography@0.5.16': - resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==} + '@tailwindcss/typography@0.5.19': + resolution: {integrity: sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==} peerDependencies: tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' @@ -2950,12 +2344,8 @@ packages: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} - '@trysound/sax@0.2.0': - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + '@tsconfig/node10@1.0.12': + resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} '@tsconfig/node12@1.0.11': resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} @@ -2969,20 +2359,20 @@ packages: '@types/bcrypt@6.0.0': resolution: {integrity: sha512-/oJGukuH3D2+D+3H4JWLaAsJ/ji86dhRidzZ/Od7H/i8g+aCmvkeCc6Ni/f9uxGLSQVCRZkX2/lqEFG2BvWtlQ==} - '@types/body-parser@1.19.5': - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + '@types/body-parser@1.19.6': + resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - '@types/conventional-commits-parser@5.0.0': - resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==} - '@types/cookie-parser@1.4.10': resolution: {integrity: sha512-B4xqkqfZ8Wek+rCOeRxsjMS9OgvzebEzzLYw7NHYuvzb7IdxOkI0ZHGgeEBX4PUM7QGVvNSK60T3OvWj3YfBRg==} peerDependencies: '@types/express': '*' + '@types/cookiejar@2.1.5': + resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==} + '@types/country-flag-icons@1.2.2': resolution: {integrity: sha512-CefEn/J336TBDp7NX8JqzlDtCBOsm8M3r1Li0gEOt0HOMHF1XemNyrx9lSHjsafcb1yYWybU0N8ZAXuyCaND0w==} @@ -2992,20 +2382,23 @@ packages: '@types/debug@0.0.31': resolution: {integrity: sha512-LS1MCPaQKqspg7FvexuhmDbWUhE2yIJ+4AgVIyObfc06/UKZ8REgxGNjZc82wPLWmbeOm7S+gSsLgo75TanG4A==} - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} - '@types/email-templates@8.0.4': - resolution: {integrity: sha512-HYvVoyG8qS6PrimZZOS4wMrtQ9MelKEl0sOpi4zVpz2Ds74v+UvWckIFz3NyGyTwAR1okMbwJkApgR2GL/ALjg==} + '@types/email-templates@10.0.4': + resolution: {integrity: sha512-8O2bdGPO6RYgH2DrnFAcuV++s+8KNA5e2Erjl6UxgKRVsBH9zXu2YLrLyOBRMn2VyEYmzgF+6QQUslpVhj0y/g==} - '@types/eslint@8.56.10': - resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} + '@types/eslint-plugin-jsx-a11y@6.10.1': + resolution: {integrity: sha512-5RtuPVe0xz8BAhrkn2oww6Uw885atf962Q4fqZo48QdO3EQA7oCEDSXa6optgJ1ZMds3HD9ITK5bfm4AWuoXFQ==} - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/express-serve-static-core@4.19.5': - resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} + '@types/express-serve-static-core@4.19.8': + resolution: {integrity: sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==} + + '@types/express-serve-static-core@5.1.1': + resolution: {integrity: sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==} '@types/express-session@1.18.2': resolution: {integrity: sha512-k+I0BxwVXsnEU2hV77cCobC08kIsn4y44C3gC0b46uxZVMaXA04lSPgRLR/bSL2w0t0ShJiG8o4jPzRG/nscFg==} @@ -3016,14 +2409,16 @@ packages: '@types/hast@2.3.10': resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} - '@types/hoist-non-react-statics@3.3.5': - resolution: {integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==} + '@types/hoist-non-react-statics@3.3.7': + resolution: {integrity: sha512-PQTyIulDkIDro8P+IHbKCsw7U2xxBYflVzW/FgWdCAePD9xGSidgA76/GeJ6lBKoblyhf9pBY763gbrN+1dI8g==} + peerDependencies: + '@types/react': '*' '@types/html-to-text@9.0.4': resolution: {integrity: sha512-pUY3cKH/Nm2yYrEmDlPR1mR7yszjGx4DrwPjQ702C4/D5CwHuZTgZdIdwPkRbcuhs7BAh2L5rg3CL5cbRiGTCQ==} - '@types/http-errors@2.0.4': - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + '@types/http-errors@2.0.5': + resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -3037,20 +2432,14 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/json-stable-stringify@1.0.36': - resolution: {integrity: sha512-b7bq23s4fgBB76n34m2b3RBf6M369B0Z9uRR8aHTMd8kZISRkmDEpPD8hhpYvDFzr3bJCPES96cm3Q6qRNDbQw==} - - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/lodash@4.17.21': resolution: {integrity: sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==} '@types/mdast@3.0.15': resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} - '@types/mime@1.3.5': - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + '@types/methods@1.1.4': + resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} '@types/mime@3.0.4': resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} @@ -3061,32 +2450,26 @@ packages: '@types/minimist@1.2.5': resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - '@types/ms@0.7.34': - resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/multer@1.4.12': - resolution: {integrity: sha512-pQ2hoqvXiJt2FP9WQVLPRO+AmiIm/ZYkavPlIQnx282u4ZrVdztx0pkh3jjpQt0Kz+YI0YhSG264y08UJKoUQg==} - - '@types/node-forge@1.3.14': - resolution: {integrity: sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==} + '@types/multer@1.4.13': + resolution: {integrity: sha512-bhhdtPw7JqCiEfC9Jimx5LqX9BDIPJEh2q/fQ4bqbBPtyEZYr3cvF22NwG0DmPZNYA0CAf2CnqDB4KIGGpJcaw==} '@types/node-schedule@2.1.8': resolution: {integrity: sha512-k00g6Yj/oUg/CDC+MeLHUzu0+OFxWbIqrFfDiLi6OPKxTujvpv29mHGM8GtKr7B+9Vv92FcK/8mRqi1DK5f3hA==} - '@types/node@17.0.45': - resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - - '@types/node@18.19.130': - resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} - '@types/node@20.5.1': resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==} '@types/node@22.10.5': resolution: {integrity: sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==} - '@types/nodemailer@7.0.9': - resolution: {integrity: sha512-vI8oF1M+8JvQhsId0Pc38BdUP2evenIIys7c7p+9OZXSPOH5c1dyINP1jT8xQ2xPuBUXmIC87s+91IZMDjH8Ow==} + '@types/node@22.19.17': + resolution: {integrity: sha512-wGdMcf+vPYM6jikpS/qhg6WiqSV/OhG+jeeHT/KlVqxYfD40iYJf9/AE1uQxVWFvU7MipKRkRv8NSHiCGgPr8Q==} + + '@types/nodemailer@7.0.11': + resolution: {integrity: sha512-E+U4RzR2dKrx+u3N4DlsmLaDC6mMZOM/TPROxA0UAPiTgI0y4CEFBmZE+coGWTjakDriRsXG368lNk1u9Q0a2g==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -3094,23 +2477,22 @@ packages: '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - '@types/picomatch@2.3.3': - resolution: {integrity: sha512-Yll76ZHikRFCyz/pffKGjrCwe/le2CDwOP5F210KQo27kpRE46U2rDnzikNlVn6/ezH3Mhn46bJMTfeVTtcYMg==} + '@types/picomatch@4.0.3': + resolution: {integrity: sha512-iG0T6+nYJ9FAPmx9SsUlnwcq1ZVRuCXcVEvWnntoPlrOpwtSTKNDC9uVAxTsC3PUvJ+99n4RpAcNgBbHX3JSnQ==} '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} - '@types/qs@6.9.15': - resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} + '@types/qs@6.15.0': + resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - '@types/react-dom@18.3.0': - resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} - - '@types/react-reconciler@0.26.7': - resolution: {integrity: sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ==} + '@types/react-dom@18.3.7': + resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==} + peerDependencies: + '@types/react': ^18.0.0 '@types/react-reconciler@0.28.9': resolution: {integrity: sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg==} @@ -3122,9 +2504,6 @@ packages: peerDependencies: '@types/react': '*' - '@types/react@18.3.27': - resolution: {integrity: sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==} - '@types/react@18.3.28': resolution: {integrity: sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==} @@ -3134,11 +2513,11 @@ packages: '@types/semver@7.7.1': resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} - '@types/send@0.17.4': - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + '@types/send@1.2.1': + resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==} - '@types/serve-static@1.15.7': - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + '@types/serve-static@2.2.0': + resolution: {integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==} '@types/sinonjs__fake-timers@8.1.1': resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==} @@ -3146,8 +2525,11 @@ packages: '@types/sizzle@2.3.10': resolution: {integrity: sha512-TC0dmN0K8YcWEAEfiPi5gJP14eJe30TTGjkvek3iM/1NdHHsdCA/Td6GvNndMOo/iSnIsZ4HuuhrYPDAmbxzww==} - '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + '@types/superagent@8.1.9': + resolution: {integrity: sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==} + + '@types/supertest@6.0.3': + resolution: {integrity: sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==} '@types/swagger-ui-express@4.1.8': resolution: {integrity: sha512-AhZV8/EIreHFmBV5wAs0gzJUNq9JbbSXgJLQubCC0jtIo6prnI9MIRRxnU4MZX9RB9yXxF1V4R7jtLl/Wcj31g==} @@ -3158,8 +2540,8 @@ packages: '@types/ua-parser-js@0.7.39': resolution: {integrity: sha512-P/oDfpofrdtF5xw433SPALpdSchtJmY7nsJItf8h3KXqOslkbySh8zq4dSWXH2oTjRvJ5PczVEoCZPow6GicLg==} - '@types/unist@2.0.10': - resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} '@types/validator@13.15.10': resolution: {integrity: sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==} @@ -3182,9 +2564,6 @@ packages: '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - '@types/yargs@15.0.20': - resolution: {integrity: sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==} - '@types/yargs@17.0.35': resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} @@ -3194,142 +2573,70 @@ packages: '@types/yup@0.29.14': resolution: {integrity: sha512-Ynb/CjHhE/Xp/4bhHmQC4U1Ox+I2OpfRYF3dnNgQqn1cHa6LK3H1wJMNPT02tSVZA6FYuXE2ITORfbnb6zBCSA==} - '@typescript-eslint/eslint-plugin@7.18.0': - resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/eslint-plugin@8.54.0': - resolution: {integrity: sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==} + '@typescript-eslint/eslint-plugin@8.58.2': + resolution: {integrity: sha512-aC2qc5thQahutKjP+cl8cgN9DWe3ZUqVko30CMSZHnFEHyhOYoZSzkGtAI2mcwZ38xeImDucI4dnqsHiOYuuCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.54.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser': ^8.58.2 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@7.18.0': - resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/parser@8.54.0': - resolution: {integrity: sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==} + '@typescript-eslint/parser@8.58.2': + resolution: {integrity: sha512-/Zb/xaIDfxeJnvishjGdcR4jmr7S+bda8PKNhRGdljDM+elXhlvN0FyPSsMnLmJUrVG9aPO6dof80wjMawsASg==} 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' + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.54.0': - resolution: {integrity: sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==} + '@typescript-eslint/project-service@8.58.2': + resolution: {integrity: sha512-Cq6UfpZZk15+r87BkIh5rDpi38W4b+Sjnb8wQCPPDDweS/LRCFjCyViEbzHk5Ck3f2QDfgmlxqSa7S7clDtlfg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@7.18.0': - resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} - engines: {node: ^18.18.0 || >=20.0.0} - - '@typescript-eslint/scope-manager@8.54.0': - resolution: {integrity: sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==} + '@typescript-eslint/scope-manager@8.58.2': + resolution: {integrity: sha512-SgmyvDPexWETQek+qzZnrG6844IaO02UVyOLhI4wpo82dpZJY9+6YZCKAMFzXb7qhx37mFK1QcPQ18tud+vo6Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.54.0': - resolution: {integrity: sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==} + '@typescript-eslint/tsconfig-utils@8.58.2': + resolution: {integrity: sha512-3SR+RukipDvkkKp/d0jP0dyzuls3DbGmwDpVEc5wqk5f38KFThakqAAO0XMirWAE+kT00oTauTbzMFGPoAzB0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@7.18.0': - resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/type-utils@8.54.0': - resolution: {integrity: sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==} + '@typescript-eslint/type-utils@8.58.2': + resolution: {integrity: sha512-Z7EloNR/B389FvabdGeTo2XMs4W9TjtPiO9DAsmT0yom0bwlPyRjkJ1uCdW1DvrrrYP50AJZ9Xc3sByZA9+dcg==} 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' + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@5.45.0': - resolution: {integrity: sha512-QQij+u/vgskA66azc9dCmx+rev79PzX8uDHpsqSjEFtfF2gBUTRCpvYMh2gw2ghkJabNkPlSUCimsyBEQZd1DA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/types@7.18.0': - resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} - engines: {node: ^18.18.0 || >=20.0.0} - - '@typescript-eslint/types@8.54.0': - resolution: {integrity: sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==} + '@typescript-eslint/types@8.58.2': + resolution: {integrity: sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@5.45.0': - resolution: {integrity: sha512-maRhLGSzqUpFcZgXxg1qc/+H0bT36lHK4APhp0AEUVrpSwXiRAomm/JGjSG+kNUio5kAa3uekCYu/47cnGn5EQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/typescript-estree@7.18.0': - resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/typescript-estree@8.54.0': - resolution: {integrity: sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==} + '@typescript-eslint/typescript-estree@8.58.2': + resolution: {integrity: sha512-ELGuoofuhhoCvNbQjFFiobFcGgcDCEm0ThWdmO4Z0UzLqPXS3KFvnEZ+SHewwOYHjM09tkzOWXNTv9u6Gqtyuw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@7.18.0': - resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - - '@typescript-eslint/utils@8.54.0': - resolution: {integrity: sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==} + '@typescript-eslint/utils@8.58.2': + resolution: {integrity: sha512-QZfjHNEzPY8+l0+fIXMvuQ2sJlplB4zgDZvA+NmvZsZv3EQwOcc1DuIU1VJUTWZ/RKouBMhDyNaBMx4sWvrzRA==} 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' + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@5.45.0': - resolution: {integrity: sha512-jc6Eccbn2RtQPr1s7th6jJWQHBHI6GBVQkCHoJFQ5UreaKm59Vxw+ynQUPPY2u2Amquc+7tmEoC2G52ApsGNNg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/visitor-keys@7.18.0': - resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} - engines: {node: ^18.18.0 || >=20.0.0} - - '@typescript-eslint/visitor-keys@8.54.0': - resolution: {integrity: sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==} + '@typescript-eslint/visitor-keys@8.58.2': + resolution: {integrity: sha512-f1WO2Lx8a9t8DARmcWAUPJbu0G20bJlj8L4z72K00TMeJAoyLr/tHhI/pzYBLrR4dXWkcxO1cWYZEOX8DKHTqA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@unicode/unicode-17.0.0@1.6.16': + resolution: {integrity: sha512-advq5p36zZ+PDRUpDkWcHHR++R19kx0LYB5iG3bj0KB8mYVKg0ywS996e2bXeXxDb8XdOF7KTivcx7VkYie1pg==} + + '@zone-eu/mailsplit@5.4.8': + resolution: {integrity: sha512-eEyACj4JZ7sjzRvy26QhLgKEMWwQbsw1+QZnlLX+/gihcNH07lVPOcnwf5U6UAL7gkc//J3jVd76o/WS+taUiA==} JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} @@ -3346,6 +2653,10 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + ace-builds@1.43.4: resolution: {integrity: sha512-8hAxVfo2ImICd69BWlZwZlxe9rxDGDjuUhh+WeWgGDvfBCE+r3lkynkQvIovDz4jcMi8O7bsEaFygaDT+h9sBA==} @@ -3354,8 +2665,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.3: - resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} + acorn-walk@8.3.5: + resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} engines: {node: '>=0.4.0'} acorn@7.4.1: @@ -3363,11 +2674,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.16.0: resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} engines: {node: '>=0.4.0'} @@ -3377,8 +2683,8 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} - agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} agentkeepalive@4.6.0: @@ -3389,11 +2695,11 @@ packages: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} - ajv@8.16.0: - resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} alce@1.2.0: resolution: {integrity: sha512-XppPf2S42nO2WhvKzlwzlfcApcXHzjlod30pKmcWjRgLOtqoe5DMuqdiYoM6AgyXksc6A6pV4v1L/WW217e57w==} @@ -3410,19 +2716,12 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} - ansi-fragments@0.2.1: - resolution: {integrity: sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==} - - ansi-regex@4.1.1: - resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} - engines: {node: '>=6'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} ansi-styles@3.2.1: @@ -3437,8 +2736,8 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} ansis@4.2.0: @@ -3456,14 +2755,11 @@ packages: resolution: {integrity: sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==} engines: {node: '>= 6.0.0'} - appdirsjs@1.2.7: - resolution: {integrity: sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==} - append-field@1.0.0: resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} - aproba@2.0.0: - resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + aproba@2.1.0: + resolution: {integrity: sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==} arch@2.2.0: resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} @@ -3485,6 +2781,10 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + aria-query@5.3.2: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} @@ -3503,8 +2803,8 @@ packages: array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + array-includes@3.1.9: + resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} engines: {node: '>= 0.4'} array-union@2.1.0: @@ -3515,12 +2815,8 @@ packages: resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} engines: {node: '>= 0.4'} - array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} engines: {node: '>= 0.4'} array.prototype.flatmap@1.3.3: @@ -3562,20 +2858,13 @@ packages: ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - ast-types@0.15.2: - resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} - engines: {node: '>=4'} - - astral-regex@1.0.0: - resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==} - engines: {node: '>=4'} - astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} - async-limiter@1.0.1: - resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} @@ -3587,8 +2876,8 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - autoprefixer@10.4.23: - resolution: {integrity: sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==} + autoprefixer@10.5.0: + resolution: {integrity: sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -3604,8 +2893,8 @@ packages: aws4@1.13.2: resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} - axe-core@4.11.0: - resolution: {integrity: sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==} + axe-core@4.11.3: + resolution: {integrity: sha512-zBQouZixDTbo3jMGqHKyePxYxr1e5W8UdTmBQ7sNtaA9M2bE32daxxPLS/jojhKOHxQ7LWwPjfiwf/fhaJWzlg==} engines: {node: '>=4'} axios-rate-limit@1.9.0: @@ -3620,11 +2909,6 @@ packages: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} - babel-core@7.0.0-bridge.0: - resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - babel-plugin-emotion@10.2.2: resolution: {integrity: sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==} @@ -3635,28 +2919,13 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} - babel-plugin-polyfill-corejs2@0.4.15: - resolution: {integrity: sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-corejs2@0.4.17: resolution: {integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-corejs3@0.10.4: - resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-corejs3@0.13.0: - resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-regenerator@0.6.6: - resolution: {integrity: sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==} + babel-plugin-polyfill-corejs3@0.14.2: + resolution: {integrity: sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -3665,12 +2934,12 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-syntax-hermes-parser@0.33.3: + resolution: {integrity: sha512-/Z9xYdaJ1lC0pT9do6TqCqhOSLfZ5Ot8D5za1p+feEfWYupCOfGbhhEXN9r2ZgJtDNUNRw/Z+T2CvAGKBqtqWA==} + babel-plugin-syntax-jsx@6.18.0: resolution: {integrity: sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==} - babel-plugin-transform-flow-enums@0.0.2: - resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==} - babel-walk@3.0.0-canary-5: resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==} engines: {node: '>= 10.0.0'} @@ -3681,11 +2950,16 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.9.18: - resolution: {integrity: sha512-e23vBV1ZLfjb9apvfPk4rHVu2ry6RIr2Wfs+O324okSidrX7pTAnEJPCh/O5BtRlr7QtZI7ktOP3vsqr7Z5XoA==} + baseline-browser-mapping@2.10.19: + resolution: {integrity: sha512-qCkNLi2sfBOn8XhZQ0FXsT1Ki/Yo5P90hrkRamVFRS7/KV9hpfA4HkoWNU152+8w0zPjnxo5psx5NL3PSGgv5g==} + engines: {node: '>=6.0.0'} hasBin: true bcrypt-pbkdf@1.0.2: @@ -3714,8 +2988,8 @@ packages: blueimp-md5@2.19.0: resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} - bn.js@4.12.2: - resolution: {integrity: sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==} + bn.js@4.12.3: + resolution: {integrity: sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==} body-parser@1.20.3: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} @@ -3731,21 +3005,22 @@ packages: bowser@2.13.1: resolution: {integrity: sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==} - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - brace-expansion@1.1.14: resolution: {integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==} - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@2.1.0: + resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==} + + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + engines: {node: 18 || 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.28.1: - resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -3795,8 +3070,8 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + call-bind@1.0.9: + resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} engines: {node: '>= 0.4'} call-bound@1.0.4: @@ -3806,18 +3081,6 @@ packages: call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} - caller-callsite@2.0.0: - resolution: {integrity: sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==} - engines: {node: '>=4'} - - caller-path@2.0.0: - resolution: {integrity: sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==} - engines: {node: '>=4'} - - callsites@2.0.0: - resolution: {integrity: sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==} - engines: {node: '>=4'} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -3838,8 +3101,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001766: - resolution: {integrity: sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==} + caniuse-lite@1.0.30001788: + resolution: {integrity: sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -3856,10 +3119,6 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} @@ -3873,9 +3132,16 @@ packages: resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} engines: {node: '>= 0.8.0'} + cheerio-select@1.6.0: + resolution: {integrity: sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==} + cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + cheerio@1.0.0-rc.10: + resolution: {integrity: sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==} + engines: {node: '>= 6'} + cheerio@1.0.0-rc.12: resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} engines: {node: '>= 6'} @@ -3896,6 +3162,9 @@ packages: engines: {node: '>=12.13.0'} hasBin: true + chromium-edge-launcher@0.3.0: + resolution: {integrity: sha512-p03azHlGjtyRvFEee3cyvtsRYdniSkwjkzmM/KmVnqT5d7QkkwpJBhis/zCLMYdQMVJ5tt140TBNqqrZPaWeFA==} + ci-info@2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} @@ -3903,8 +3172,8 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - ci-info@4.3.1: - resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} engines: {node: '>=8'} classnames@2.5.1: @@ -3941,9 +3210,6 @@ packages: client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -3951,10 +3217,6 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} - clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} @@ -4007,9 +3269,6 @@ packages: resolution: {integrity: sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==} engines: {node: '>=18'} - colorette@1.4.0: - resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} - colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -4024,8 +3283,13 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - command-exists@1.2.9: - resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -4034,10 +3298,6 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - commander@6.2.1: resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} engines: {node: '>= 6'} @@ -4059,19 +3319,11 @@ packages: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} - compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - - compression@1.8.1: - resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} - engines: {node: '>= 0.8.0'} + component-emitter@1.3.1: + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} computed-style@0.1.4: resolution: {integrity: sha512-WpAmaKbMNmS3OProfHIdJiNleNJdgUrJfbKArXua28QF7+0CoZjlLn0lp6vlc+dl5r2/X9GQiQRQQU4BzSa69w==} @@ -4122,6 +3374,11 @@ packages: engines: {node: '>=14'} hasBin: true + conventional-commits-parser@6.4.0: + resolution: {integrity: sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==} + engines: {node: '>=18'} + hasBin: true + convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} @@ -4150,10 +3407,13 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - cookie@1.0.2: - resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} + cookiejar@2.1.4: + resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} + copy-to-clipboard@3.3.3: resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} @@ -4161,9 +3421,6 @@ packages: resolution: {integrity: sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==} hasBin: true - core-js-compat@3.48.0: - resolution: {integrity: sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==} - core-js-compat@3.49.0: resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} @@ -4182,17 +3439,13 @@ packages: ts-node: '>=10' typescript: '>=4' - cosmiconfig-typescript-loader@5.0.0: - resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} - engines: {node: '>=v16'} + cosmiconfig-typescript-loader@6.3.0: + resolution: {integrity: sha512-Akr82WH1Wfqatyiqpj8HDkO2o2KmJRu1FhKfSNJP3K4IdXwHfEyL7MOb62i1AGQVLtIQM+iCE9CGOtrfhR+mmA==} + engines: {node: '>=v18'} peerDependencies: '@types/node': '*' - cosmiconfig: '>=8.2' - typescript: '>=4' - - cosmiconfig@5.2.1: - resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==} - engines: {node: '>=4'} + cosmiconfig: '>=9' + typescript: '>=5' cosmiconfig@6.0.0: resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} @@ -4211,8 +3464,8 @@ packages: typescript: optional: true - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + cosmiconfig@9.0.1: + resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} engines: {node: '>=14'} peerDependencies: typescript: '>=4.9.5' @@ -4234,10 +3487,6 @@ packages: resolution: {integrity: sha512-iPoWUQbCwUmrBf1w9W+9YQs8FowWp/teC2XGz3zAmt0Aja+HWGjyjUkWASWcsdzxSuL0EIIdvlfGEVBljvTbSQ==} hasBin: true - cross-spawn@6.0.6: - resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} - engines: {node: '>=4.8'} - cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -4245,15 +3494,19 @@ packages: css-select@4.3.0: resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} - css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} - css-tree@1.1.3: - resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} - engines: {node: '>=8.0.0'} + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} cssesc@3.0.0: @@ -4261,9 +3514,9 @@ packages: engines: {node: '>=4'} hasBin: true - csso@4.2.0: - resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} - engines: {node: '>=8.0.0'} + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} csstype@2.6.21: resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==} @@ -4310,8 +3563,8 @@ packages: resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} engines: {node: '>=0.11'} - dayjs@1.11.19: - resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==} + dayjs@1.11.20: + resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} @@ -4349,8 +3602,8 @@ packages: decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} - decode-named-character-reference@1.0.2: - resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} @@ -4359,8 +3612,8 @@ packages: dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} - dedent@1.7.1: - resolution: {integrity: sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==} + dedent@1.7.2: + resolution: {integrity: sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -4400,9 +3653,6 @@ packages: delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - denodeify@1.2.1: - resolution: {integrity: sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==} - depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -4423,14 +3673,17 @@ packages: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} - detect-libc@2.0.3: - resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} + dezalgo@1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -4449,24 +3702,20 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - display-notification@2.0.0: - resolution: {integrity: sha512-TdmtlAcdqy1NU+j7zlkDdMnCL878zriLaBmoD9quOoq1ySSSGv03l0hXK5CvIFZlIfFI/hizqdQuW+Num7xuhw==} - engines: {node: '>=4'} + display-notification@3.0.0: + resolution: {integrity: sha512-/qAvqRy4zWP847zJc1GvXOc+AV1l9/ECKPA7APrLnqjur0o5liMM4bDJ/b1hnJo6Tyb5BfOHyyd4vn9lCh/NSg==} + engines: {node: '>=12'} dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dns-caching@0.2.7: - resolution: {integrity: sha512-48fgJWH9aUHPN+TOmbozx1hxX9YoCsEkZzR/wHKRFPFx0NZtmSgtZY3M0Vsl7x/fDcq3mCI3SMgyTKVgZZrogg==} + dns-caching@0.2.9: + resolution: {integrity: sha512-FSvmI/dC/HXYIyX2m7MvQt36Yut49GCw3hWaDqaTgLLmKyLs5lmv/jhmNKqWjSF2vRGTgFYL0G3mwcjLlKXj0w==} doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - doctypes@1.1.0: resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==} @@ -4497,8 +3746,11 @@ packages: domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - domutils@3.1.0: - resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} @@ -4524,16 +3776,13 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.279: - resolution: {integrity: sha512-0bblUU5UNdOt5G7XqGiJtpZMONma6WAfq9vsFmtn9x1+joAObr6x1chfqyxFSDCAFwFhCQDrqeAr6MYdpwJ9Hg==} + electron-to-chromium@1.5.337: + resolution: {integrity: sha512-15gKW9mRUNP9RdzhedJNypFUxtYWSXohFz2nTLzM272xbRXHws68kNDzyATG3qej+vUj/7Sn9hf5XTDh0XK6/w==} email-templates@12.0.3: resolution: {integrity: sha512-tCjkmZYakXkKfL3/qZJ7esCa04KP5zIpcuEjw9EPLQrLbTUUkX6w9MMc37zGj2nJvIpFBc1lUudHi5DkZqiNJQ==} engines: {node: '>=14'} - emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} - emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -4565,10 +3814,6 @@ packages: end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - enhanced-resolve@5.17.0: - resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} - engines: {node: '>=10.13.0'} - enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -4580,15 +3825,14 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} - envinfo@7.21.0: - resolution: {integrity: sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==} - engines: {node: '>=4'} - hasBin: true - err-code@2.0.3: resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} @@ -4598,12 +3842,8 @@ packages: error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - errorhandler@1.5.2: - resolution: {integrity: sha512-kNAL7hESndBCrWwS72QyV3IVOTrVmj9D062FV5BQswNL5zEdeRmz/WJFyh6Aj/plvvSOrzddkxW57HgkZcR9Fw==} - engines: {node: '>= 0.8'} - - es-abstract@1.24.0: - resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + es-abstract@1.24.2: + resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} engines: {node: '>= 0.4'} es-define-property@1.0.1: @@ -4614,8 +3854,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==} + es-iterator-helpers@1.3.2: + resolution: {integrity: sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw==} engines: {node: '>= 0.4'} es-object-atoms@1.1.1: @@ -4626,8 +3866,9 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + 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==} @@ -4644,82 +3885,28 @@ packages: escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - escape-string-applescript@1.0.0: - resolution: {integrity: sha512-4/hFwoYaC6TkpDn9A3pTC52zQPArFeXuIfhUtCGYdauTzXVP9H3BDr3oO/QzQehMpLDC7srvYgfwvImPFGfvBA==} - engines: {node: '>=0.10.0'} + escape-string-applescript@3.0.0: + resolution: {integrity: sha512-Wru0bY9XSICPNsy7KwbAZww9SLkoYjP9GtJkmnQOEqOy9U13KA0OJXoti7FaVMsiQ0mQfh916/xoByM6PqdW4g==} + engines: {node: '>=12'} escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-next@14.2.35: - resolution: {integrity: sha512-BpLsv01UisH193WyT/1lpHqq5iJ/Orfz9h/NOOlAmTUq4GY349PextQ62K4XpnaM9supeiEn3TaOTeQO07gURg==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - - eslint-config-prettier@8.6.0: - resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==} + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} hasBin: true peerDependencies: eslint: '>=7.0.0' - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-import-resolver-typescript@3.6.1: - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} + eslint-plugin-formatjs@6.2.0: + resolution: {integrity: sha512-JftP9glJrS4qdviqTyZ0Kk14hcHB8AJn2FP2W7dsMugOIHDgra30mTvGjRMohivDIaFXnPGCAOv/AYm55BMUBQ==} peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - - eslint-module-utils@2.8.1: - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - 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-formatjs@4.9.0: - resolution: {integrity: sha512-U3u8TI/Mogo3sunTHDh24mc3p1zWAz/VaYjSkGhuYcLmqfkqEr3BmGUNQ8NTDvZviYHNTkhjHWuXQnUkh81grQ==} - peerDependencies: - eslint: 7 || 8 - - eslint-plugin-import@2.29.1: - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + eslint: '9' eslint-plugin-jsx-a11y@6.10.2: resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} @@ -4741,11 +3928,11 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-react-hooks@4.6.0: - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} + eslint-plugin-react-hooks@7.0.1: + resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} + engines: {node: '>=18'} peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + 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==} @@ -4753,9 +3940,9 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} @@ -4765,26 +3952,29 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint@9.39.3: + resolution: {integrity: sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@1.2.5: resolution: {integrity: sha512-S9VbPDU0adFErpDai3qDkjq8+G05ONtKzcyNrPKg/ZKa+tf879nX2KexNU95b31UoTJjRLInNBHHHjFPoCd7lQ==} engines: {node: '>=0.4.0'} hasBin: true - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - esquery@1.7.0: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} @@ -4816,10 +4006,6 @@ packages: eventemitter2@6.4.7: resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==} - execa@0.10.0: - resolution: {integrity: sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==} - engines: {node: '>=4'} - execa@4.1.0: resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} engines: {node: '>=10'} @@ -4883,16 +4069,16 @@ packages: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} - extsprintf@1.4.1: - resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} - engines: {'0': node >=0.6.0} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + 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'} @@ -4907,12 +4093,19 @@ packages: resolution: {integrity: sha512-GwTgG9O4FVIdShhbVF3JxOgSBY2+ePGsu2V/UONgoCPzF9VY6ZdBMKsHKCYQHZwNk3qNouUolRDsgVxcVA5G1w==} engines: {node: '>=10.0'} - fast-xml-parser@4.5.6: - resolution: {integrity: sha512-Yd4vkROfJf8AuJrDIVMVmYfULKmIJszVsMv7Vo71aocsKgFxpdlpSHXSaInvyYfgw2PRuObQSW2GFpVMUjxu9A==} - hasBin: true + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + + fb-dotslash@0.5.8: + resolution: {integrity: sha512-XHYLKk9J4BupDxi9bSEhkfss0m+Vr9ChTrjhf9l2iw3jB5C7BnY4GVPoMcqbrTutsKJso6yj2nAB6BI/F2oZaA==} + engines: {node: '>=20'} + hasBin: true fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -4936,9 +4129,9 @@ packages: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} file-stream-rotator@0.6.1: resolution: {integrity: sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==} @@ -4958,20 +4151,12 @@ packages: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} - find-cache-dir@2.1.0: - resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} - engines: {node: '>=6'} - 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@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -4988,20 +4173,16 @@ packages: resolution: {integrity: sha512-5SM1+H2CcuJ3gGEwTiVo/+nd/hYpNj9Ch3iMDOQ58ndY+VGQ2QdvaUTkd3otjZvYnd/8LF/HkJ5cx7PBq0orCQ==} hasBin: true - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + 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==} flow-enums-runtime@0.0.6: resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} - flow-parser@0.309.0: - resolution: {integrity: sha512-poYRskeIXiHsE19Fb9sRE/CV7PYOq21j3lS5vKr27ujFBvSAhmCbbilAonJ0/u0Uai+Xgyq30/twHQeQc2Ngiw==} - engines: {node: '>=0.4.0'} - fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} @@ -5018,8 +4199,8 @@ packages: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} - foreground-child@3.2.1: - resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} forever-agent@0.6.1: @@ -5029,6 +4210,10 @@ packages: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} + formidable@3.5.4: + resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==} + engines: {node: '>=14.0.0'} + formik@2.4.9: resolution: {integrity: sha512-5nI94BMnlFDdQRBY4Sz39WkhxajZJ57Fzs8wVbtsQlm5ScKIR1QLYqv/ultBnobObtlUyxpxoLodpixrsf36Og==} peerDependencies: @@ -5048,14 +4233,10 @@ packages: fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + fs-extra@11.3.4: + resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==} engines: {node: '>=14.14'} - fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} - fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} @@ -5087,6 +4268,10 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This package is no longer supported. + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -5111,10 +4296,6 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-stream@3.0.0: - resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} - engines: {node: '>=4'} - get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -5127,8 +4308,8 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.13.0: - resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} + get-tsconfig@4.14.0: + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} getos@3.2.1: resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==} @@ -5139,6 +4320,7 @@ packages: git-raw-commits@2.0.11: resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} engines: {node: '>=10'} + deprecated: This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead. hasBin: true github-from-package@0.0.0: @@ -5152,23 +4334,19 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + 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: Glob versions prior to v9 are no longer supported + 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 glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} - deprecated: Glob versions prior to v9 are no longer supported + 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==} @@ -5190,9 +4368,13 @@ packages: resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} engines: {node: '>=0.10.0'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@17.5.0: + resolution: {integrity: sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g==} + engines: {node: '>=18'} globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} @@ -5209,24 +4391,17 @@ packages: 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==} - gravatar-url@3.1.0: resolution: {integrity: sha512-+lOs7Rz1A051OqdqE8Tm4lmeyVgkqH8c6ll5fv///ncdIaL+XnOFmKAB70ix1du/yj8c3EWKbP6OhKjihsBSfA==} engines: {node: '>=8'} - handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true - hard-rejection@2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + 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==} @@ -5269,21 +4444,26 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - hermes-estree@0.19.1: - resolution: {integrity: sha512-daLGV3Q2MKk8w4evNMKwS8zBE/rcpA800nu1Q5kM08IKijoSnPe9Uo1iIxzPKRkn95IxxsgBMPeYHt3VG4ej2g==} + hermes-compiler@250829098.0.10: + resolution: {integrity: sha512-TcRlZ0/TlyfJqquRFAWoyElVNnkdYRi/sEp4/Qy8/GYxjg8j2cS9D4MjuaQ+qimkmLN7AmO+44IznRf06mAr0w==} - hermes-estree@0.23.1: - resolution: {integrity: sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==} + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} - hermes-parser@0.19.1: - resolution: {integrity: sha512-Vp+bXzxYJWrpEuJ/vXxUsLnt0+y4q9zyi4zUlkLqD8FKv4LjIfOvP69R/9Lty3dCyKh0E2BU7Eypqr63/rKT/A==} + hermes-estree@0.33.3: + resolution: {integrity: sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg==} - hermes-parser@0.23.1: - resolution: {integrity: sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==} + hermes-estree@0.35.0: + resolution: {integrity: sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg==} - hermes-profile-transformer@0.0.6: - resolution: {integrity: sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==} - engines: {node: '>=8'} + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + + hermes-parser@0.33.3: + resolution: {integrity: sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA==} + + hermes-parser@0.35.0: + resolution: {integrity: sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA==} hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} @@ -5303,17 +4483,17 @@ packages: resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} engines: {node: '>=14'} - htmlparser2@4.1.0: - resolution: {integrity: sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==} - htmlparser2@5.0.1: resolution: {integrity: sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==} + htmlparser2@6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} - http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} @@ -5374,8 +4554,8 @@ packages: i18n-locales@0.0.5: resolution: {integrity: sha512-Kve1AHy6rqyfJHPy8MIvaKBKhHhHPXV+a/TgMkjp3UBhO3gfWR40ZQn8Xy7LI6g3FhmbvkFtv+GCZy6yvuyeHQ==} - i18n@0.15.1: - resolution: {integrity: sha512-yue187t8MqUPMHdKjiZGrX+L+xcUsDClGO0Cz4loaKUOK9WrGw5pgan4bv130utOwX7fHE9w2iUeHFalVQWkXA==} + i18n@0.15.3: + resolution: {integrity: sha512-tW/AA5R4lJZLnd60Agcd0PfXB1C2G7UqTrdNewuv/SIYdxcHkCE8w4Zx1SgCjJ+2BLuAAGIG/KXb/xNYF1lO5Q==} engines: {node: '>=10'} iconv-lite@0.4.24: @@ -5386,6 +4566,10 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -5405,16 +4589,12 @@ packages: engines: {node: '>=16.x'} hasBin: true - import-fresh@2.0.0: - resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==} - engines: {node: '>=4'} - import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} - import-meta-resolve@4.1.0: - resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} @@ -5456,14 +4636,17 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} - intl-messageformat@10.5.14: - resolution: {integrity: sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w==} + intl-messageformat@10.7.18: + resolution: {integrity: sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==} + + intl-messageformat@10.7.7: + resolution: {integrity: sha512-F134jIoeYMro/3I0h08D0Yt4N9o9pjddU/4IIxMMURqbAtI2wu70X8hvG1V48W49zXHXv3RKSF/po+0fDfsGjA==} invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + ip-address@10.1.0: + resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} ipaddr.js@1.9.1: @@ -5477,11 +4660,11 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-arrayish@0.3.4: + resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} - is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} engines: {node: '>= 0.4'} is-bigint@1.1.0: @@ -5516,10 +4699,6 @@ packages: resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} engines: {node: '>= 0.4'} - is-directory@0.3.1: - resolution: {integrity: sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==} - engines: {node: '>=0.10.0'} - is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} @@ -5536,10 +4715,6 @@ packages: resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} engines: {node: '>= 0.4'} - is-fullwidth-code-point@2.0.0: - resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} - engines: {node: '>=4'} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -5548,8 +4723,8 @@ packages: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} engines: {node: '>= 0.4'} is-glob@4.0.3: @@ -5599,10 +4774,6 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} - is-promise@2.2.2: resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} @@ -5618,10 +4789,6 @@ packages: resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} - is-stream@1.1.0: - resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} - engines: {node: '>=0.10.0'} - is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -5664,18 +4831,14 @@ packages: resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} engines: {node: '>= 0.4'} - is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + 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'} - is-wsl@1.1.0: - resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} - engines: {node: '>=4'} - is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} @@ -5692,10 +4855,6 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} @@ -5708,29 +4867,18 @@ packages: peerDependencies: react: '>=18.0' - jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} + its-fine@2.0.0: + resolution: {integrity: sha512-KLViCmWx94zOvpLwSlsx6yOCeMhZYaxrJV87Po5k/FoZzcPSahvK5qJ7fYhS61sZi5ikmh2S3Hz55A2l3U69ng==} + peerDependencies: + react: ^19.0.0 jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-get-type@29.6.3: resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-util@29.7.0: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5743,16 +4891,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jiti@1.21.6: - resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} - hasBin: true - jiti@1.21.7: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true - joi@17.13.3: - resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true js-stringify@1.0.2: resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==} @@ -5760,10 +4905,6 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.14.2: - resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} - hasBin: true - js-yaml@4.1.1: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true @@ -5771,21 +4912,9 @@ packages: jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - - jsc-android@250231.0.0: - resolution: {integrity: sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==} - jsc-safe-url@0.2.4: resolution: {integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==} - jscodeshift@0.14.0: - resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==} - hasBin: true - peerDependencies: - '@babel/preset-env': ^7.1.6 - jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -5794,9 +4923,6 @@ packages: json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -5817,27 +4943,20 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json-stable-stringify@1.1.1: - resolution: {integrity: sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==} + json-stable-stringify@1.3.0: + resolution: {integrity: sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==} engines: {node: '>= 0.4'} 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 - json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true - jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} jsonify@0.0.1: resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} @@ -5862,8 +4981,8 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - juice@7.0.0: - resolution: {integrity: sha512-AjKQX31KKN+uJs+zaf+GW8mBO/f/0NqSh2moTMyvwBY+4/lXIYTU8D8I2h6BAV3Xnz6GGsbalUyFqbYMe+Vh+Q==} + juice@8.1.0: + resolution: {integrity: sha512-FLzurJrx5Iv1e7CfBSZH68dC04EEvXvvVvPYB7Vx1WAuhCp1ZPIMtqxc+WTWxVkpTIC2Ach/GAv0rQbtGf6YMA==} engines: {node: '>=10.0.0'} hasBin: true @@ -5880,16 +4999,12 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - konva@9.3.12: - resolution: {integrity: sha512-IxX+ka+gVGm63APkB/taepMxpbUdjfLBUA1OIqx7nbH3126Df6eAuVWasH3qh3vg4ctRseops031sZO0b2O33A==} + konva@10.2.5: + resolution: {integrity: sha512-WwBoe/EBhFcv+seL1Wnp3OAOwOFjCY4nCCgpLRrzUzw1IX4lKf/lYhj2Z3qo9P9q2fA3h+OdGDlimSNqZJaY5A==} kuler@2.0.0: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} @@ -5919,8 +5034,11 @@ packages: libbase64@1.3.0: resolution: {integrity: sha512-GgOXd0Eo6phYgh0DJtjQ2tO8dc0IVINtZJeARPeiIJqge+HdsWSuaDTe8ztQ7j/cONByDZ3zeB325AHiv5O0dg==} - libmime@5.3.6: - resolution: {integrity: sha512-j9mBC7eiqi6fgBPAGvKCXJKJSIASanYF4EeA4iBzSG0HxQxmXnR3KbyWqTn4CwsKSebqCv2f5XZfAO6sKzgvwA==} + libmime@5.3.7: + resolution: {integrity: sha512-FlDb3Wtha8P01kTL3P9M+ZDNDWPKPmKHWaU/cG/lg5pfuAwdflVpZE+wm9m7pKmC5ww6s+zTxBKS1p6yl3KpSw==} + + libmime@5.3.8: + resolution: {integrity: sha512-ZrCY+Q66mPvasAfjsQ/IgahzoBvfE1VdtGRpo1hwRB1oK3wJKxhKA3GOcd2a6j7AH5eMFccxK9fBoCpRZTf8ng==} libqp@2.1.1: resolution: {integrity: sha512-0Wd+GPz1O134cP62YU2GTOPNA7Qgl09XwCqM5zpBv87ERCXdfDtyKXvV7c9U22yWJh44QZqBocFnXN11K96qow==} @@ -5969,10 +5087,6 @@ packages: enquirer: optional: true - locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -5981,15 +5095,12 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash-es@4.17.23: - resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==} + lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - lodash.castarray@4.4.0: - resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} - lodash.clonedeep@4.5.0: resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} @@ -6040,8 +5151,8 @@ packages: lodash.upperfirst@4.3.1: resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} - lodash.zipobject@4.1.3: - resolution: {integrity: sha512-A9SzX4hMKWS25MyalwcOnNoplyHbkNVsjidhTp8ru0Sj23wY9GWBKS8gAIGDSAqeWjIjvE4KBEl24XXAs+v4wQ==} + lodash.zipobject@4.18.0: + resolution: {integrity: sha512-crXabtkOHmlyg/VoiR0wzEjbl8b+owY2Z8wBhoyoGPya/9YkUsxpCe7UJkL+ZtQFBBQXnk08kz9W0iieQNeu9w==} lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -6061,10 +5172,6 @@ packages: resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} engines: {node: '>= 12.0.0'} - logkitty@0.7.1: - resolution: {integrity: sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==} - hasBin: true - long-timeout@0.1.1: resolution: {integrity: sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==} @@ -6076,11 +5183,14 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.2.1: - resolution: {integrity: sha512-r8LA6i4LP4EeWOhqBaZZjDWwehd1xUJPCJd9Sv300H0ZmcUER4+JPh7bqqZeqs1o5pgtgvXm+d9UGrB5zZGDiQ==} + lru-cache@11.3.5: + resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -6094,24 +5204,15 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - luxon@3.4.4: - resolution: {integrity: sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==} + luxon@3.7.2: + resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} engines: {node: '>=12'} - magic-string@0.29.0: - resolution: {integrity: sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q==} - engines: {node: '>=12'} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - mailparser@3.7.2: - resolution: {integrity: sha512-iI0p2TCcIodR1qGiRoDBBwboSSff50vQAWytM5JRggLfABa4hHYCf3YVujtuzV454xrOP352VsAPIzviqMTo4Q==} - - mailsplit@5.4.2: - resolution: {integrity: sha512-4cczG/3Iu3pyl8JgQ76dKkisurZTmxMrA4dj/e8d2jKYcFTZ7MxOzg1gTioTDMPuFXwTrVuN/gxhkrO7wLg7qA==} - deprecated: This package has been renamed to @zone-eu/mailsplit. Please update your dependencies. - - make-dir@2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} - engines: {node: '>=6'} + mailparser@3.9.8: + resolution: {integrity: sha512-7jSlFGXiianVnhnb6wdutJFloD34488nrHY7r6FNqwXAhZ7YiJDYrKKTxZJ0oSrXcAPHm8YoYnh97xyGtrBQ3w==} make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} @@ -6124,8 +5225,8 @@ packages: resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} engines: {node: '>= 10'} - make-plural@7.4.0: - resolution: {integrity: sha512-4/gC9KVNTV6pvYg2gFeQYTW3mWaoJt7WZE5vrp1KnQDgW92JtYZnzmZT81oj/dUTqAIu0ufI2x3dkgu3bB1tYg==} + make-plural@7.5.0: + resolution: {integrity: sha512-0booA+aVYyVFoR67JBHdfVk0U08HmrBH2FrtmBqBa+NldlqXv/G2Z9VQuQq6Wgp2jDWdybEWGfBkk1cq5264WA==} makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} @@ -6165,8 +5266,11 @@ packages: mdast-util-to-string@3.2.0: resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} - mdn-data@2.0.14: - resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} @@ -6185,6 +5289,10 @@ packages: mensch@0.3.4: resolution: {integrity: sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==} + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + meow@8.1.2: resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} engines: {node: '>=10'} @@ -6206,62 +5314,62 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} - metro-babel-transformer@0.80.12: - resolution: {integrity: sha512-YZziRs0MgA3pzCkkvOoQRXjIoVjvrpi/yRlJnObyIvMP6lFdtyG4nUGIwGY9VXnBvxmXD6mPY2e+NSw6JAyiRg==} - engines: {node: '>=18'} + metro-babel-transformer@0.84.3: + resolution: {integrity: sha512-svAA+yMLpeMiGcz/jKJs4oHpIGEx4nBqNEJ5AGj4CYIg1efvK+A0TjR6tgIuc6tKO5e8JmN/1lglpN2+f3/z/w==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - metro-cache-key@0.80.12: - resolution: {integrity: sha512-o4BspKnugg/pE45ei0LGHVuBJXwRgruW7oSFAeSZvBKA/sGr0UhOGY3uycOgWInnS3v5yTTfiBA9lHlNRhsvGA==} - engines: {node: '>=18'} + metro-cache-key@0.84.3: + resolution: {integrity: sha512-TnSL1Fdvrw+2glTdBSRmA5TL8l/i16ECjsrUdf3E5HncA+sNx8KcwDG8r+3ct1UhfYcusJypzZqTN55FZZcwGg==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - metro-cache@0.80.12: - resolution: {integrity: sha512-p5kNHh2KJ0pbQI/H7ZBPCEwkyNcSz7OUkslzsiIWBMPQGFJ/xArMwkV7I+GJcWh+b4m6zbLxE5fk6fqbVK1xGA==} - engines: {node: '>=18'} + metro-cache@0.84.3: + resolution: {integrity: sha512-0QElxwLaHqLZf+Xqio8QrjVbuXP/8sJfQBGSPiITlKDVXrVLefuzYVSH9Sj+QL6lrPj2gYZd/iwQh1yZuVKnLA==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - metro-config@0.80.12: - resolution: {integrity: sha512-4rwOWwrhm62LjB12ytiuR5NgK1ZBNr24/He8mqCsC+HXZ+ATbrewLNztzbAZHtFsrxP4D4GLTGgh96pCpYLSAQ==} - engines: {node: '>=18'} + metro-config@0.84.3: + resolution: {integrity: sha512-JmCzZWOETR+O22q8oPBWyQppx3roU9EbkbGzD8Gf1jukQ4b5T1fTzqqHruu6K4sTiNq5zVQySmKF6bp4kVARew==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - metro-core@0.80.12: - resolution: {integrity: sha512-QqdJ/yAK+IpPs2HU/h5v2pKEdANBagSsc6DRSjnwSyJsCoHlmyJKCaCJ7KhWGx+N4OHxh37hoA8fc2CuZbx0Fw==} - engines: {node: '>=18'} + metro-core@0.84.3: + resolution: {integrity: sha512-cc0pvAa80ai1nDmqqz0P59a+0ZqCZ/YHU/3jEekZL6spFnYDfX8iDLdn9FR6kX+67rmzKxHNrbrSRFLX2AYocw==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - metro-file-map@0.80.12: - resolution: {integrity: sha512-sYdemWSlk66bWzW2wp79kcPMzwuG32x1ZF3otI0QZTmrnTaaTiGyhE66P1z6KR4n2Eu5QXiABa6EWbAQv0r8bw==} - engines: {node: '>=18'} + metro-file-map@0.84.3: + resolution: {integrity: sha512-1cL4m4Jv1yRUt9RJExZQLfccscdlMNOcRG6LHLtmJhf3BG9j3MujPVc7CIpKYdFl+KUl+sdjge6oO3+meKCHQA==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - metro-minify-terser@0.80.12: - resolution: {integrity: sha512-muWzUw3y5k+9083ZoX9VaJLWEV2Jcgi+Oan0Mmb/fBNMPqP9xVDuy4pOMn/HOiGndgfh/MK7s4bsjkyLJKMnXQ==} - engines: {node: '>=18'} + metro-minify-terser@0.84.3: + resolution: {integrity: sha512-3ofrG2OQyJbO9RNhCfOcl8QU7EE2WrSsnN5dFkuZaJO5+4Imujr9bUXmspeNlXRsOVk0F/rVRbEFH98lFSCkBQ==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - metro-resolver@0.80.12: - resolution: {integrity: sha512-PR24gYRZnYHM3xT9pg6BdbrGbM/Cu1TcyIFBVlAk7qDAuHkUNQ1nMzWumWs+kwSvtd9eZGzHoucGJpTUEeLZAw==} - engines: {node: '>=18'} + metro-resolver@0.84.3: + resolution: {integrity: sha512-pjEzGDtoM8DTHAIPK/9u9ZxszEiuRohYUVImWvgbnB91V4gqYJpQcoEYUugf2NIm1lrX5HNu0OvNqWmPBnGYjA==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - metro-runtime@0.80.12: - resolution: {integrity: sha512-LIx7+92p5rpI0i6iB4S4GBvvLxStNt6fF0oPMaUd1Weku7jZdfkCZzmrtDD9CSQ6EPb0T9NUZoyXIxlBa3wOCw==} - engines: {node: '>=18'} + metro-runtime@0.84.3: + resolution: {integrity: sha512-o7HLRfMyVk9N2dUZ9VjQfB6xxUItL9Pi9WcqxURE7MEKOH6wbGt9/E92YdYLluTOtkzYAEVfdC6h6lcxqA+hMQ==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - metro-source-map@0.80.12: - resolution: {integrity: sha512-o+AXmE7hpvM8r8MKsx7TI21/eerYYy2DCDkWfoBkv+jNkl61khvDHlQn0cXZa6lrcNZiZkl9oHSMcwLLIrFmpw==} - engines: {node: '>=18'} + metro-source-map@0.84.3: + resolution: {integrity: sha512-jS48CeSzw78M8y6VE0f9uy3lVmfbOS677j2VCxnlmlYmnahcXuC6IhoN9K6LynNvos9517yUadcfgioju38xYQ==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - metro-symbolicate@0.80.12: - resolution: {integrity: sha512-/dIpNdHksXkGHZXARZpL7doUzHqSNxgQ8+kQGxwpJuHnDhGkENxB5PS2QBaTDdEcmyTMjS53CN1rl9n1gR6fmw==} - engines: {node: '>=18'} + metro-symbolicate@0.84.3: + resolution: {integrity: sha512-J9Tpo8NCycYrozRvBIUyOwGAu4xkawOsAppmTscFiaegK0WvuDGwIM53GbzVSnytCHjVAF0io5GQxpkrKTuc7g==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} hasBin: true - metro-transform-plugins@0.80.12: - resolution: {integrity: sha512-WQWp00AcZvXuQdbjQbx1LzFR31IInlkCDYJNRs6gtEtAyhwpMMlL2KcHmdY+wjDO9RPcliZ+Xl1riOuBecVlPA==} - engines: {node: '>=18'} + metro-transform-plugins@0.84.3: + resolution: {integrity: sha512-8S3baq2XhBaafHEH5Q8sJW6tmzsEJk80qKc3RU/nZV1MsnYq94RdjTUR6AyKjQd6Rfsk1BtBxhtiNnk7mgslCg==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - metro-transform-worker@0.80.12: - resolution: {integrity: sha512-KAPFN1y3eVqEbKLx1I8WOarHPqDMUa8WelWxaJCNKO/yHCP26zELeqTJvhsQup+8uwB6EYi/sp0b6TGoh6lOEA==} - engines: {node: '>=18'} + metro-transform-worker@0.84.3: + resolution: {integrity: sha512-Wjba7PyYktNRsHbPmkx2J2UX32rAzcDXjCu49zPHeF/viJlYJhwRaNePQcHaCRqQ+kmgQT4ThprsnJfDj71ZMA==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - metro@0.80.12: - resolution: {integrity: sha512-1UsH5FzJd9quUsD1qY+zUG4JY3jo3YEMxbMYH9jT6NK3j4iORhlwTK8fYTfAUBhDKjgLfKjAh7aoazNE23oIRA==} - engines: {node: '>=18'} + metro@0.84.3: + resolution: {integrity: sha512-1h3lbVrE6hGf1e/764HfhPGg/bGrWMJDDh7G2rc4gFYZboVuI40BlG/y+UhtbhQDNlO/csMvrcnK0YrTlHUVew==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} hasBin: true micromark-core-commonmark@1.1.0: @@ -6343,6 +5451,10 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} @@ -6381,22 +5493,19 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} minimatch@3.1.5: resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + minimatch@5.1.9: + resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} engines: {node: '>=10'} - minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} - engines: {node: '>=16 || 14 >=14.17'} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} minimist-options@4.1.0: @@ -6421,8 +5530,8 @@ packages: resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + minipass-flush@1.0.7: + resolution: {integrity: sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA==} engines: {node: '>= 8'} minipass-pipeline@1.2.4: @@ -6441,8 +5550,8 @@ packages: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} minizlib@2.1.2: @@ -6464,8 +5573,8 @@ packages: moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} - moo@0.5.2: - resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} + moo@0.5.3: + resolution: {integrity: sha512-m2fmM2dDm7GZQsY7KK2cme8agi+AAljILjQnof7p1ZMDe6dQ4bdnSMx0cPppudoeNv5hEFQirN6u+O4fDE0IWA==} mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} @@ -6477,8 +5586,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - multer@1.4.5-lts.1: - resolution: {integrity: sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==} + multer@1.4.5-lts.2: + resolution: {integrity: sha512-VzGiVigcG9zUAoCNU+xShztrlr1auZOlurXynNvO9GiWD1/mTBbUljOKY+qMeazBqXgRnjzeEgJI/wyjJUHg9A==} engines: {node: '>= 6.0.0'} deprecated: Multer 1.x is impacted by a number of vulnerabilities, which have been patched in 2.x. You should upgrade to the latest 2.x version. @@ -6493,9 +5602,9 @@ packages: mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - mylas@2.1.13: - resolution: {integrity: sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==} - engines: {node: '>=12.0.0'} + mylas@2.1.14: + resolution: {integrity: sha512-BzQguy9W9NJgoVn2mRWzbFrFWWztGCcng2QI9+41frfk+Athwgx3qhqhvStz7ExeUUu7Kzw427sNzHpEZNINog==} + engines: {node: '>=16.0.0'} mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -6522,8 +5631,9 @@ packages: resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} engines: {node: '>= 0.6'} - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} next@14.2.35: resolution: {integrity: sha512-KhYd2Hjt/O1/1aZVX3dCwGXM1QmOV4eNM2UTacK5gipDdPN/oHHK/4oVGy7X8GMfPMsUTUEmGlsy0EY1YGAkig==} @@ -6543,34 +5653,27 @@ packages: sass: optional: true - nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - nocache@3.0.4: - resolution: {integrity: sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==} - engines: {node: '>=12.0.0'} - - node-abi@3.74.0: - resolution: {integrity: sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==} + node-abi@3.89.0: + resolution: {integrity: sha512-6u9UwL0HlAl21+agMN3YAMXcKByMqwGx+pq+P76vii5f7hTPtKDp08/H9py6DY+cfDw7kQNTGEj/rly3IgbNQA==} engines: {node: '>=10'} - node-abort-controller@3.1.1: - resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} - node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-addon-api@8.5.0: - resolution: {integrity: sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==} + node-addon-api@8.7.0: + resolution: {integrity: sha512-9MdFxmkKaOYVTV+XVRG8ArDwwQ77XIgIPyKASB1k3JPq3M8fGQQQE3YpMOrKm6g//Ktx8ivZr8xo1Qmtqub+GA==} engines: {node: ^18 || ^20 || >= 21} node-cache@5.1.2: resolution: {integrity: sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==} engines: {node: '>= 8.0.0'} - node-dir@0.1.17: - resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} - engines: {node: '>= 0.10.5'} + node-exports-info@1.6.0: + resolution: {integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==} + engines: {node: '>= 0.4'} node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} @@ -6581,10 +5684,6 @@ packages: encoding: optional: true - node-forge@1.4.0: - resolution: {integrity: sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==} - engines: {node: '>= 6.13.0'} - node-gyp-build@4.8.4: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true @@ -6602,29 +5701,25 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-releases@2.0.27: - resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + node-releases@2.0.37: + resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} node-schedule@2.1.1: resolution: {integrity: sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==} engines: {node: '>=6'} - node-stream-zip@1.15.0: - resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} - engines: {node: '>=0.12.0'} - - nodemailer@6.10.0: - resolution: {integrity: sha512-SQ3wZCExjeSatLE/HBaXS5vqUOQk6GtBdIIKxiFdmm01mOQZX/POJkO3SUX1wDiYcwUOJwT23scFSC9fY2H8IA==} - engines: {node: '>=6.0.0'} - - nodemailer@6.9.16: - resolution: {integrity: sha512-psAuZdTIRN08HKVd/E8ObdV6NO7NTBY3KsC30F7M4H1OnmLCUNaS56FpYxyb26zWLSyYF9Ozch9KYHhHegsiOQ==} + nodemailer@6.10.1: + resolution: {integrity: sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA==} engines: {node: '>=6.0.0'} nodemailer@7.0.12: resolution: {integrity: sha512-H+rnK5bX2Pi/6ms3sN4/jRQvYSMltV6vqup/0SFOrxYYY/qoNvhXPlYq3e+Pm9RFJRwrMGbMIwi81M4dxpomhA==} engines: {node: '>=6.0.0'} + nodemailer@8.0.5: + resolution: {integrity: sha512-0PF8Yb1yZuQfQbq+5/pZJrtF6WQcjTd5/S4JOHs9PGFxuTqoB/icwuB44pOdURHJbRKX1PPoJZtY7R4VUoCC8w==} + engines: {node: '>=6.0.0'} + nodemon@3.1.11: resolution: {integrity: sha512-is96t8F/1//UHAjNPHpbsNY46ELPpftGUoSVNXwUfMk/qdjSylYrWSu1XavVTBOn526kFiOR733ATgNBCQyH0g==} engines: {node: '>=10'} @@ -6654,10 +5749,6 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - npm-run-path@2.0.2: - resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} - engines: {node: '>=4'} - npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -6677,9 +5768,9 @@ packages: nullthrows@1.1.1: resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} - ob1@0.80.12: - resolution: {integrity: sha512-VMArClVT6LkhUGpnuEoBuyjG9rzUyEzg4PDkav6wK1cLhOK02gPCYFxoiB4mqVnrMhDpIzJcrGNAMVi9P+hXrw==} - engines: {node: '>=18'} + ob1@0.84.3: + resolution: {integrity: sha512-J7554Ef8bzmKaDY365Afq6PF+qtdnY/d5PKUQFrsKlZHV/N3OGZewVrvDrQDyX5V5NJjTpcAKtlrFZcDr+HvpQ==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} @@ -6713,10 +5804,6 @@ packages: resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - object.values@1.2.1: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} @@ -6750,10 +5837,6 @@ packages: ono@7.1.3: resolution: {integrity: sha512-9jnfVriq7uJM4o5ganUY54ntUm+5EK21EGaQ5NWnkWg3zz5ywbbonlBguRcnmF1/HDiIe3zxNxXcO1YPBmPcQQ==} - open@6.4.0: - resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==} - engines: {node: '>=8'} - open@7.4.2: resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} engines: {node: '>=8'} @@ -6797,10 +5880,6 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -6832,10 +5911,6 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} - parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} - parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -6844,11 +5919,17 @@ packages: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} - parse5-htmlparser2-tree-adapter@7.0.0: - resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} + parse5-htmlparser2-tree-adapter@6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} - parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} parseley@0.12.1: resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} @@ -6857,10 +5938,6 @@ packages: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} - path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -6869,10 +5946,6 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -6910,20 +5983,20 @@ packages: pg-cloudflare@1.3.0: resolution: {integrity: sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==} - pg-connection-string@2.10.1: - resolution: {integrity: sha512-iNzslsoeSH2/gmDDKiyMqF64DATUCWj3YJ0wP14kqcsf2TUklwimd+66yYojKwZCA7h2yRNLGug71hCBA2a4sw==} + pg-connection-string@2.12.0: + resolution: {integrity: sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ==} pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} - pg-pool@3.11.0: - resolution: {integrity: sha512-MJYfvHwtGp870aeusDh+hg9apvOe2zmpZJpyt+BMtzUWlVqbhFmMK6bOBXLBUPd7iRtIF9fZplDc7KrPN3PN7w==} + pg-pool@3.13.0: + resolution: {integrity: sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA==} peerDependencies: pg: '>=8.0' - pg-protocol@1.11.0: - resolution: {integrity: sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g==} + pg-protocol@1.13.0: + resolution: {integrity: sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==} pg-types@2.2.0: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} @@ -6944,16 +6017,12 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - 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'} pidtree@0.6.0: @@ -6973,16 +6042,12 @@ packages: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} - pkg-dir@3.0.0: - resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} - engines: {node: '>=6'} - plimit-lit@1.6.1: resolution: {integrity: sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==} engines: {node: '>=12'} - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} postcss-import@15.1.0: @@ -6991,8 +6056,8 @@ packages: peerDependencies: postcss: ^8.0.0 - postcss-js@4.0.1: - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + postcss-js@4.1.0: + resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 @@ -7036,16 +6101,16 @@ packages: 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.10: + resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} engines: {node: ^10 || ^12 || >=14} postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} - postgres-bytea@1.0.0: - resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} + postgres-bytea@1.0.1: + resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==} engines: {node: '>=0.10.0'} postgres-date@1.0.7: @@ -7059,14 +6124,15 @@ packages: prebuild-install@7.1.3: resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} engines: {node: '>=10'} + deprecated: No longer maintained. Please contact the author of the relevant native addon; alternatives are available. hasBin: true prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + prettier-linter-helpers@1.0.1: + resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} engines: {node: '>=6.0.0'} prettier-plugin-organize-imports@4.3.0: @@ -7149,16 +6215,12 @@ packages: resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} engines: {node: '>=6'} - pretty-format@26.6.2: - resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==} - engines: {node: '>= 10'} - pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - preview-email@3.1.0: - resolution: {integrity: sha512-ZtV1YrwscEjlrUzYrTSs6Nwo49JM3pXLM4fFOBSC3wSni+bxaWlw9/Qgk75PZO8M7cX2EybmL2iwvaV3vkAttw==} + preview-email@3.1.3: + resolution: {integrity: sha512-M/R82S5iYDpNJIPcrtc3OToNbUATXmuV3b3bEcyOnTFzThjkChJqpoOwlm7AXvpEKZ9OFaglOsl/RxU5cnMC6g==} engines: {node: '>=14'} process-nextick-args@2.0.1: @@ -7186,10 +6248,6 @@ packages: promise@8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -7216,8 +6274,8 @@ packages: pug-attrs@3.0.0: resolution: {integrity: sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==} - pug-code-gen@3.0.3: - resolution: {integrity: sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==} + pug-code-gen@3.0.4: + resolution: {integrity: sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==} pug-error@2.1.0: resolution: {integrity: sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==} @@ -7249,8 +6307,8 @@ packages: pug@3.0.3: resolution: {integrity: sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==} - pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} @@ -7272,14 +6330,13 @@ packages: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} - qs@6.14.1: - resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} + qs@6.14.2: + resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} engines: {node: '>=0.6'} - querystring@0.2.1: - resolution: {integrity: sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==} - engines: {node: '>=0.4.x'} - deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + qs@6.15.1: + resolution: {integrity: sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==} + engines: {node: '>=0.6'} queue-lit@1.5.2: resolution: {integrity: sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==} @@ -7330,8 +6387,14 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-devtools-core@5.3.2: - resolution: {integrity: sha512-crr9HkVrDiJ0A4zot89oS0Cgv0Oa4OG1Em4jit3P3ZxZSKPMYyMjfwMqgcJna9o625g8oN87rBm8SWWrSTBZxg==} + react-aria@3.48.0: + resolution: {integrity: sha512-jQjd4rBEIMqecBaAKYJbVGK6EqIHLa5znVQ7jwFyK5vCyljoj6KhgtiahmcIPsG5vG5vEDLw+ba+bEWn6A2P4w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + react-devtools-core@6.1.5: + resolution: {integrity: sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==} react-dom@18.3.1: resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} @@ -7349,8 +6412,8 @@ packages: peerDependencies: react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react-intl@6.6.8: - resolution: {integrity: sha512-M0pkhzcgV31h++2901BiRXWl69hp2zPyLxRrSwRjd1ErXbNoubz/f4M6DrRTd4OiSUrT4ajRQzrmtS5plG4FtA==} + react-intl@6.8.9: + resolution: {integrity: sha512-TUfj5E7lyUDvz/GtovC9OMh441kBr08rtIbgh3p0R8iF3hVY+V2W9Am7rb8BpJ/29BH1utJOqOOhmvEVh3GfZg==} peerDependencies: react: ^16.6.0 || 17 || 18 typescript: ^4.7 || 5 @@ -7361,16 +6424,13 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-konva@18.2.10: - resolution: {integrity: sha512-ohcX1BJINL43m4ynjZ24MxFI1syjBdrXhqVxYVDw2rKgr3yuS0x/6m1Y2Z4sl4T/gKhfreBx8KHisd0XC6OT1g==} + react-konva@18.2.14: + resolution: {integrity: sha512-lBDe/5fTgquMdg1AHI0B16YZdAOvEhWMBWuo12ioyY0icdxcz9Cf12j86fsCJCHdnvjUOlZeC0f5q+siyHbD4Q==} peerDependencies: - konva: ^8.0.1 || ^7.2.5 || ^9.0.0 + konva: ^8.0.1 || ^7.2.5 || ^9.0.0 || ^10.0.0 react: '>=18.0.0' react-dom: '>=18.0.0' @@ -7380,14 +6440,17 @@ packages: '@types/react': '>=16' react: '>=16' - react-native@0.74.2: - resolution: {integrity: sha512-EBMBjPPL4/GjHMP4NqsZabT3gI5WU9cSmduABGAGrd8uIcmTZ5F2Ng9k6gFmRm7n8e8CULxDNu98ZpQfBjl7Bw==} - engines: {node: '>=18'} + react-native@0.85.1: + resolution: {integrity: sha512-1K2TIvu2M1C8gqkPevi/MuLan16mQvEdURiTlwHgrb6S2vvkDyik6TrkkXMlMMhz9hF5RT8wFyDUdlpGFlkpXg==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} hasBin: true peerDependencies: - '@types/react': ^18.2.6 - react: 18.2.0 + '@react-native/jest-preset': 0.85.1 + '@types/react': ^19.1.1 + react: ^19.2.3 peerDependenciesMeta: + '@react-native/jest-preset': + optional: true '@types/react': optional: true @@ -7404,12 +6467,6 @@ packages: react: ^16.8.0 || ^17 || ^18 react-dom: ^16.8.0 || ^17 || ^18 - react-reconciler@0.27.0: - resolution: {integrity: sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA==} - engines: {node: '>=0.10.0'} - peerDependencies: - react: ^18.0.0 - react-reconciler@0.29.2: resolution: {integrity: sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==} engines: {node: '>=0.10.0'} @@ -7426,17 +6483,17 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-shallow-renderer@16.15.0: - resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==} - peerDependencies: - react: ^16.0.0 || ^17.0.0 || ^18.0.0 - react-spring@9.7.1: resolution: {integrity: sha512-o2+r2DNQDVEuefiz33ZF76DPd/gLq3kbdObJmllGF2IUfv2W6x+ZP0gR97QYCSR4QLbmOl1mPKUBbI+FJdys2Q==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-stately@3.46.0: + resolution: {integrity: sha512-OdxhWvHgs2L4OJGIs7hnuTr5WjjMM6enhNEAMRqiekhF8+ITvA2LRwNftOZwcogaoCslGYq5S2VQTQwnm0GbCA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-toast-notifications@2.5.1: resolution: {integrity: sha512-eYuuiSPGLyuMHojRH2U7CbENvFHsvNia39pLM/s10KipIoNs14T7RIJk4aU2N+l++OsSgtJqnFObx9bpwLMU5A==} peerDependencies: @@ -7501,13 +6558,6 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - readline@1.3.0: - resolution: {integrity: sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==} - - recast@0.21.5: - resolution: {integrity: sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==} - engines: {node: '>= 4'} - redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -7532,9 +6582,6 @@ packages: regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} @@ -7546,8 +6593,8 @@ packages: regjsgen@0.8.0: resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} - regjsparser@0.13.0: - resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==} + regjsparser@0.13.1: + resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==} hasBin: true remark-parse@10.0.2: @@ -7567,9 +6614,6 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - resize-observer-polyfill@1.5.1: resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} @@ -7577,10 +6621,6 @@ packages: resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} engines: {node: '>=0.10.0'} - resolve-from@3.0.0: - resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} - engines: {node: '>=4'} - resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -7596,18 +6636,14 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} - engines: {node: '>= 0.4'} - hasBin: true - resolve@1.22.12: resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} engines: {node: '>= 0.4'} hasBin: true - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + resolve@2.0.0-next.6: + resolution: {integrity: sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==} + engines: {node: '>= 0.4'} hasBin: true restore-cursor@3.1.0: @@ -7618,18 +6654,13 @@ packages: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rimraf@2.6.3: - resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -7638,9 +6669,9 @@ packages: rndm@1.2.0: resolution: {integrity: sha512-fJhQQI5tLrQvYIYFpOnFinzv9dwmR7hRnUz1XqP3OJ1jIweTNOd6aTO4jwQSgcBSFUB+/KHJxuGneime+FdzOw==} - run-applescript@3.2.0: - resolution: {integrity: sha512-Ep0RsvAjnRcBX1p5vogbaBdAGu/8j/ewpvGqnQYunnLd9SM0vWcPJewPKNnWFggf0hF0pwIgwV5XK7qQ7UZ8Qg==} - engines: {node: '>=4'} + run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} @@ -7684,17 +6715,15 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sax@1.4.1: - resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - - scheduler@0.21.0: - resolution: {integrity: sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==} + sax@1.6.0: + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} + engines: {node: '>=11.0.0'} scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - scheduler@0.24.0-canary-efb381bbf-20230505: - resolution: {integrity: sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==} + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} secure-random-password@0.2.3: resolution: {integrity: sha512-2zpmr6pK3CZGIS9fgApFw00/tKEBVbJTqe4AZLrLNgahCK6ueIR5uMzvbERNibr8hkWneMcOqDcm4wpHWUxrYw==} @@ -7705,10 +6734,6 @@ packages: selderee@0.11.0: resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} - selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} - semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -7770,26 +6795,14 @@ packages: engines: {node: '>= 0.10'} hasBin: true - shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} - - sharp@0.33.4: - resolution: {integrity: sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==} - engines: {libvips: '>=8.15.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0} - - shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} - shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} @@ -7798,8 +6811,8 @@ packages: resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} engines: {node: '>= 0.4'} - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} engines: {node: '>= 0.4'} side-channel-map@1.0.1: @@ -7827,24 +6840,17 @@ packages: simple-get@4.0.1: resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + simple-swizzle@0.2.4: + resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} simple-update-notifier@2.0.0: resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} engines: {node: '>=10'} - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - slice-ansi@2.1.0: - resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==} - engines: {node: '>=6'} - slice-ansi@3.0.0: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} engines: {node: '>=8'} @@ -7864,6 +6870,9 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + socks-proxy-agent@6.2.1: resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} engines: {node: '>= 10'} @@ -7872,8 +6881,8 @@ packages: resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} engines: {node: '>= 10'} - socks@2.8.4: - resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} + socks@2.8.7: + resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} sorted-array-functions@1.3.0: @@ -7894,10 +6903,6 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.7.6: - resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} - engines: {node: '>= 12'} - space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} @@ -7910,8 +6915,8 @@ packages: spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - spdx-license-ids@3.0.18: - resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} + spdx-license-ids@3.0.23: + resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} split2@3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} @@ -7923,9 +6928,6 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - sql-highlight@6.1.0: resolution: {integrity: sha512-ed7OK4e9ywpE7pgRMkMQmZDPKSVdm0oX5IEtZiKnFucSF0zu6c80GZBe38UqHuVhTWJ9xsKgSMjCG2bml86KvA==} engines: {node: '>=14'} @@ -7946,17 +6948,9 @@ packages: resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - stable@0.1.8: - resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} - deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' - stack-trace@0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - stackframe@1.3.4: resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} @@ -8028,16 +7022,12 @@ packages: string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - strip-ansi@5.2.0: - resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} - engines: {node: '>=6'} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} strip-bom@3.0.0: @@ -8048,10 +7038,6 @@ packages: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} - strip-eof@1.0.0: - resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} - engines: {node: '>=0.10.0'} - strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} @@ -8072,9 +7058,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strnum@1.1.2: - resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} - style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} @@ -8099,9 +7082,13 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true - sudo-prompt@9.2.1: - resolution: {integrity: sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + superagent@10.3.0: + resolution: {integrity: sha512-B+4Ik7ROgVKrQsXTV0Jwp2u+PXYLSlqtDAhYnkkD+zn3yg8s/zjA2MeGayPoY/KICrbitwneDHrjSotxKL+0XQ==} + engines: {node: '>=14.18.0'} + + supertest@7.2.2: + resolution: {integrity: sha512-oK8WG9diS3DlhdUkcFn4tkNIiIbBx9lI2ClF8K+b2/m8Eyv47LSawxUzZQSNKUrVb2KsqeTDCcjAAVPYaSLVTA==} + engines: {node: '>=14.18.0'} supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} @@ -8127,13 +7114,13 @@ packages: svg-parser@2.0.4: resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} - svgo@2.8.0: - resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} - engines: {node: '>=10.13.0'} + svgo@3.3.3: + resolution: {integrity: sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==} + engines: {node: '>=14.0.0'} hasBin: true - swagger-ui-dist@5.17.14: - resolution: {integrity: sha512-CVbSfaLpstV65OnSjbXfVd6Sta3q3F7Cj/yYuvHMp1P90LztOLs6PfUnKEVAeiIVQt9u2SaPwv0LiH/OyMjHRw==} + swagger-ui-dist@5.32.4: + resolution: {integrity: sha512-0AADFFQNJzExEN49SrD/34Nn9cxNxVLiydYl2MBwSZFPVXNkVwC/EFAjoezGGqE8oDegiDC+p47t8lKObCinMQ==} swagger-ui-express@4.6.2: resolution: {integrity: sha512-MHIOaq9JrTTB3ygUJD+08PbjM5Tt/q7x80yz9VTFIatw8j5uIWKcr90S0h5NLMzFEDC6+eVprtoeA5MDZXCUKQ==} @@ -8146,18 +7133,14 @@ packages: peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - tailwind-merge@2.6.0: - resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} + tailwind-merge@2.6.1: + resolution: {integrity: sha512-Oo6tHdpZsGpkKG88HJ8RR1rg/RdnEkQEfMoEk2x1XRI3F1AxeU+ijRXpiVUF4UbLfcxxRGw6TbUINKYdWVsQTQ==} tailwindcss@3.4.19: resolution: {integrity: sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==} engines: {node: '>=14.0.0'} hasBin: true - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - tar-fs@2.1.4: resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} @@ -8168,15 +7151,7 @@ packages: tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} - deprecated: Old versions of tar 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 exhorbitant rates) by contacting i@izs.me - - temp-dir@2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} - - temp@0.8.4: - resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==} - engines: {node: '>=6.0.0'} + deprecated: Old versions of tar 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 terser@5.46.1: resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} @@ -8190,9 +7165,6 @@ packages: text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -8200,8 +7172,8 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - three@0.165.0: - resolution: {integrity: sha512-cc96IlVYGydeceu0e5xq70H8/yoVT/tXBxV/W8A/U6uOq7DXc4/s1Mkmnu6SqoYGhSRWWYFOhVwvq6V0VtbplA==} + three@0.183.2: + resolution: {integrity: sha512-di3BsL2FEQ1PA7Hcvn4fyJOlxRRgFYBpMTcyOgkwJIaDOdJMebEFPA+t98EvjuljDx4hNulAGwF6KIjtwI5jgQ==} throat@5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} @@ -8221,16 +7193,16 @@ packages: tiny-warning@1.0.3: resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} titleize@2.1.0: resolution: {integrity: sha512-m+apkYlfiQTKLW+sI4vqUkwMEzfgEUEYSqljx1voUE3Wz/z1ZsxyzSxvH2X8uKVrOp7QkByWt0rA6+gvhCKy6g==} engines: {node: '>=6'} - tlds@1.255.0: - resolution: {integrity: sha512-tcwMRIioTcF/FcxLev8MJWxCp+GUALRhFEqbDoZrnowmKSGqPrl5pqS+Sut2m8BgJ6S4FExCSSpGffZ0Tks6Aw==} + tlds@1.261.0: + resolution: {integrity: sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==} hasBin: true tldts-core@6.1.86: @@ -8301,14 +7273,8 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-api-utils@1.4.3: - resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' - - ts-api-utils@2.4.0: - resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -8335,19 +7301,10 @@ packages: engines: {node: '>=16.20.2'} hasBin: true - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tsconfig-paths@4.2.0: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - - tslib@2.4.0: - resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -8355,12 +7312,6 @@ packages: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} - tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} @@ -8371,18 +7322,10 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - type-fest@0.18.1: resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} engines: {node: '>=10'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -8477,28 +7420,30 @@ packages: typeorm-aurora-data-api-driver: optional: true - typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true + typescript-eslint@8.58.2: + resolution: {integrity: sha512-V8iSng9mRbdZjl54VJ9NKr6ZB+dW0J3TzRXRGcSbLIej9jV86ZRtlYeTKDR/QLxXykocJ5icNzbsl2+5TzIvcQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true - ua-parser-js@1.0.40: - resolution: {integrity: sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==} + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + ua-parser-js@1.0.41: + resolution: {integrity: sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==} hasBin: true uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - uglify-js@3.19.3: - resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} - engines: {node: '>=0.8.0'} - hasBin: true - uid-safe@2.1.5: resolution: {integrity: sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==} engines: {node: '>= 0.8'} @@ -8516,26 +7461,23 @@ packages: peerDependencies: underscore: 1.x - underscore@1.13.7: - resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==} - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + underscore@1.13.8: + resolution: {integrity: sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==} undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} - undici@7.18.2: - resolution: {integrity: sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + undici@7.25.0: + resolution: {integrity: sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==} engines: {node: '>=20.18.1'} - unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} - unicode-emoji-utils@1.2.0: - resolution: {integrity: sha512-djUB91p/6oYpgps4W5K/MAvM+UspoAANHSUW495BrxeLRoned3iNPEDQgrKx9LbLq93VhNz0NWvI61vcfrwYoA==} - unicode-match-property-ecmascript@2.0.0: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} @@ -8544,8 +7486,8 @@ packages: resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==} engines: {node: '>=4'} - unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + unicode-property-aliases-ecmascript@2.2.0: + resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==} engines: {node: '>=4'} unified@10.1.2: @@ -8583,10 +7525,6 @@ packages: unist-util-visit@4.1.2: resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} - universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -8656,8 +7594,8 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - validator@13.15.23: - resolution: {integrity: sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==} + validator@13.15.35: + resolution: {integrity: sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==} engines: {node: '>= 0.10'} vary@1.1.2: @@ -8695,10 +7633,6 @@ packages: engines: {node: '>= 16'} hasBin: true - web-resource-inliner@5.0.0: - resolution: {integrity: sha512-AIihwH+ZmdHfkJm7BjSXiEClVt4zUFqX4YlFAzjL13wLtDuUneSaFvDBTbdYRecs35SiU7iNKbMnN+++wVfb6A==} - engines: {node: '>=10.0.0'} - web-resource-inliner@6.0.1: resolution: {integrity: sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A==} engines: {node: '>=10.0.0'} @@ -8724,11 +7658,8 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} - which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - - which-typed-array@1.1.19: - resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + which-typed-array@1.1.20: + resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} engines: {node: '>= 0.4'} which@1.3.1: @@ -8768,9 +7699,6 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -8786,20 +7714,6 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@2.4.3: - resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} - - ws@6.2.3: - resolution: {integrity: sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} @@ -8824,9 +7738,6 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -8837,15 +7748,10 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + yaml@1.10.3: + resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} engines: {node: '>= 6'} - yaml@2.8.2: - resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} - engines: {node: '>= 14.6'} - hasBin: true - yaml@2.8.3: resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} engines: {node: '>= 14.6'} @@ -8855,10 +7761,6 @@ packages: resolution: {integrity: sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==} hasBin: true - yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -8867,10 +7769,6 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -8897,17 +7795,32 @@ packages: zdog@1.1.3: resolution: {integrity: sha512-raRj6r0gPzopFm5XWBJZr/NuV4EEnT4iE+U3dp5FV5pCb588Gmm3zLIp/j9yqqcMiHH8VNQlerLTgOqL7krh6w==} + zod-validation-error@4.0.2: + resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} - zustand@3.7.2: - resolution: {integrity: sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==} - engines: {node: '>=12.7.0'} + zustand@5.0.12: + resolution: {integrity: sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==} + engines: {node: '>=12.20.0'} peerDependencies: - react: '>=16.8' + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true react: optional: true + use-sync-external-store: + optional: true snapshots: @@ -8920,42 +7833,14 @@ snapshots: call-me-maybe: 1.0.2 js-yaml: 4.1.1 - '@babel/code-frame@7.28.6': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - '@babel/code-frame@7.29.0': dependencies: '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.6': {} - '@babel/compat-data@7.29.0': {} - '@babel/core@7.28.6': - dependencies: - '@babel/code-frame': 7.28.6 - '@babel/generator': 7.28.6 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) - '@babel/helpers': 7.28.6 - '@babel/parser': 7.28.6 - '@babel/template': 7.28.6 - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3(supports-color@5.5.0) - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/core@7.29.0': dependencies: '@babel/code-frame': 7.29.0 @@ -8976,14 +7861,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.28.6': - dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - '@babel/generator@7.29.1': dependencies: '@babel/parser': 7.29.2 @@ -8994,36 +7871,16 @@ snapshots: '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.6 - - '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': - dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 - transitivePeerDependencies: - - supports-color + '@babel/types': 7.29.0 '@babel/helper-compilation-targets@7.28.6': dependencies: - '@babel/compat-data': 7.28.6 + '@babel/compat-data': 7.29.0 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.28.1 + browserslist: 4.28.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.6) - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.6 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -9032,32 +7889,21 @@ snapshots: '@babel/helper-optimise-call-expression': 7.27.1 '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.28.6)': + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.28.6)': + '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - debug: 4.4.3(supports-color@5.5.0) - lodash.debounce: 4.0.8 - resolve: 1.22.11 - transitivePeerDependencies: - - supports-color - - '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 debug: 4.4.3(supports-color@5.5.0) @@ -9066,36 +7912,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-environment-visitor@7.24.7': - dependencies: - '@babel/types': 7.28.6 - '@babel/helper-globals@7.28.0': {} - '@babel/helper-hoist-variables@7.24.7': - dependencies: - '@babel/types': 7.28.6 - '@babel/helper-member-expression-to-functions@7.28.5': dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.28.6': dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -9104,31 +7933,22 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@babel/helper-plugin-utils@7.28.6': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.6)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.6 - '@babel/traverse': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/helper-replace-supers@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -9137,14 +7957,14 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -9157,210 +7977,67 @@ snapshots: '@babel/helper-wrap-function@7.28.6': dependencies: '@babel/template': 7.28.6 - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/helpers@7.28.6': - dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.28.6 - '@babel/helpers@7.29.2': dependencies: '@babel/template': 7.28.6 '@babel/types': 7.29.0 - '@babel/parser@7.28.6': - dependencies: - '@babel/types': 7.28.6 - '@babel/parser@7.29.2': dependencies: '@babel/types': 7.29.0 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.28.6) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.6) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-proposal-export-default-from@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.6) - - '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.6) - - '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.29.0)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.0) - - '@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.6) - - '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.28.6)': - dependencies: - '@babel/compat-data': 7.29.0 - '@babel/core': 7.28.6 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.6) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.6) - - '@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.6) - - '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.6) + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.29.0)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.6)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.6)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.0 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-export-default-from@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-flow@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-flow@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': @@ -9368,243 +8045,173 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.6)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-async-generator-functions@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-environment-visitor': 7.24.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.6) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.6) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.6) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.6) - '@babel/traverse': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/template': 7.28.6 - - '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.28.6) - - '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.28.6) - - '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-flow': 7.28.6(@babel/core@7.28.6) - - '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-flow': 7.28.6(@babel/core@7.29.0) + '@babel/template': 7.28.6 - '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.6) - - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.6) - - '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color @@ -9617,217 +8224,182 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.28.6)': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.6) - '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.6) - - '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.6) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.6) - - '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.6) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.6) + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-optional-chaining@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.6) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.6)': + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-constant-elements@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-react-constant-elements@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.28.6)': + '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx-development@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6) - '@babel/types': 7.28.6 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - regenerator-transform: 0.15.2 - - '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-runtime@7.29.0(@babel/core@7.28.6)': + '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.28.6) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.6) - babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.28.6) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-spread@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-spread@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-typeof-symbol@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.28.6) - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -9839,150 +8411,121 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.28.6)': + '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/preset-env@7.24.7(@babel/core@7.28.6)': + '@babel/preset-env@7.29.2(@babel/core@7.29.0)': dependencies: - '@babel/compat-data': 7.28.6 - '@babel/core': 7.28.6 + '@babel/compat-data': 7.29.0 + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.6) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.6) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.6) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.6) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.28.6) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.28.6) - '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.6) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.6) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.6) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.6) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.6) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.6) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.6) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.6) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.6) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.6) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.6) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-async-generator-functions': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.6) - '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-modules-systemjs': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.6) - '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-typeof-symbol': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.28.6) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.6) - babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.28.6) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.28.6) - babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.28.6) - core-js-compat: 3.48.0 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0) + '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.0) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-modules-systemjs': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.29.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0) + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.0) + babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-flow@7.27.1(@babel/core@7.29.0)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/types': 7.29.0 + esutils: 2.0.3 + + '@babel/preset-react@7.28.5(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.29.0) - - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/types': 7.28.6 - esutils: 2.0.3 - - '@babel/preset-react@7.24.7(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.6) - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-react-jsx-development': 7.24.7(@babel/core@7.28.6) - '@babel/plugin-transform-react-pure-annotations': 7.24.7(@babel/core@7.28.6) - transitivePeerDependencies: - - supports-color - - '@babel/preset-typescript@7.28.5(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.28.6) + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -9997,36 +8540,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/register@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - clone-deep: 4.0.1 - find-cache-dir: 2.1.0 - make-dir: 2.1.0 - pirates: 4.0.7 - source-map-support: 0.5.21 - - '@babel/runtime@7.28.6': {} - '@babel/runtime@7.29.2': {} '@babel/template@7.28.6': dependencies: - '@babel/code-frame': 7.28.6 - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 - - '@babel/traverse@7.28.6': - dependencies: - '@babel/code-frame': 7.28.6 - '@babel/generator': 7.28.6 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.6 - '@babel/template': 7.28.6 - '@babel/types': 7.28.6 - debug: 4.4.3(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 '@babel/traverse@7.29.0': dependencies: @@ -10040,11 +8560,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.28.6': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/types@7.29.0': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -10052,11 +8567,11 @@ snapshots: '@colors/colors@1.6.0': {} - '@commitlint/cli@17.4.4(@swc/core@1.6.5(@swc/helpers@0.5.11))': + '@commitlint/cli@17.4.4': dependencies: '@commitlint/format': 17.8.1 '@commitlint/lint': 17.8.1 - '@commitlint/load': 17.8.1(@swc/core@1.6.5(@swc/helpers@0.5.11)) + '@commitlint/load': 17.8.1 '@commitlint/read': 17.8.1 '@commitlint/types': 17.8.1 execa: 5.1.1 @@ -10075,12 +8590,12 @@ snapshots: '@commitlint/config-validator@17.8.1': dependencies: '@commitlint/types': 17.8.1 - ajv: 8.16.0 + ajv: 8.18.0 - '@commitlint/config-validator@19.0.3': + '@commitlint/config-validator@20.5.0': dependencies: - '@commitlint/types': 19.0.3 - ajv: 8.16.0 + '@commitlint/types': 20.5.0 + ajv: 8.18.0 optional: true '@commitlint/ensure@17.8.1': @@ -10094,7 +8609,7 @@ snapshots: '@commitlint/execute-rule@17.8.1': {} - '@commitlint/execute-rule@19.0.0': + '@commitlint/execute-rule@20.0.0': optional: true '@commitlint/format@17.8.1': @@ -10114,7 +8629,7 @@ snapshots: '@commitlint/rules': 17.8.1 '@commitlint/types': 17.8.1 - '@commitlint/load@17.8.1(@swc/core@1.6.5(@swc/helpers@0.5.11))': + '@commitlint/load@17.8.1': dependencies: '@commitlint/config-validator': 17.8.1 '@commitlint/execute-rule': 17.8.1 @@ -10123,29 +8638,28 @@ snapshots: '@types/node': 20.5.1 chalk: 4.1.2 cosmiconfig: 8.3.6(typescript@5.4.5) - cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.4.5))(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5))(typescript@5.4.5) + cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.4.5))(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.4.5))(typescript@5.4.5) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@20.5.1)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' - '@commitlint/load@19.2.0(@types/node@22.10.5)(typescript@5.4.5)': + '@commitlint/load@20.5.0(@types/node@22.10.5)(typescript@5.4.5)': dependencies: - '@commitlint/config-validator': 19.0.3 - '@commitlint/execute-rule': 19.0.0 - '@commitlint/resolve-extends': 19.1.0 - '@commitlint/types': 19.0.3 - chalk: 5.3.0 - cosmiconfig: 9.0.0(typescript@5.4.5) - cosmiconfig-typescript-loader: 5.0.0(@types/node@22.10.5)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5) - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - lodash.uniq: 4.5.0 + '@commitlint/config-validator': 20.5.0 + '@commitlint/execute-rule': 20.0.0 + '@commitlint/resolve-extends': 20.5.0 + '@commitlint/types': 20.5.0 + cosmiconfig: 9.0.1(typescript@5.4.5) + cosmiconfig-typescript-loader: 6.3.0(@types/node@22.10.5)(cosmiconfig@9.0.1(typescript@5.4.5))(typescript@5.4.5) + is-plain-obj: 4.1.0 + lodash.mergewith: 4.6.2 + picocolors: 1.1.1 transitivePeerDependencies: - '@types/node' - typescript @@ -10163,7 +8677,7 @@ snapshots: dependencies: '@commitlint/top-level': 17.8.1 '@commitlint/types': 17.8.1 - fs-extra: 11.2.0 + fs-extra: 11.3.4 git-raw-commits: 2.0.11 minimist: 1.2.8 @@ -10176,12 +8690,12 @@ snapshots: resolve-from: 5.0.0 resolve-global: 1.0.0 - '@commitlint/resolve-extends@19.1.0': + '@commitlint/resolve-extends@20.5.0': dependencies: - '@commitlint/config-validator': 19.0.3 - '@commitlint/types': 19.0.3 + '@commitlint/config-validator': 20.5.0 + '@commitlint/types': 20.5.0 global-directory: 4.0.1 - import-meta-resolve: 4.1.0 + import-meta-resolve: 4.2.0 lodash.mergewith: 4.6.2 resolve-from: 5.0.0 optional: true @@ -10204,10 +8718,10 @@ snapshots: dependencies: chalk: 4.1.2 - '@commitlint/types@19.0.3': + '@commitlint/types@20.5.0': dependencies: - '@types/conventional-commits-parser': 5.0.0 - chalk: 5.3.0 + conventional-commits-parser: 6.4.0 + picocolors: 1.1.1 optional: true '@cspotcode/source-map-support@0.8.1': @@ -10229,7 +8743,7 @@ snapshots: json-stringify-safe: 5.0.1 mime-types: 2.1.35 performance-now: 2.1.0 - qs: 6.14.1 + qs: 6.14.2 safe-buffer: 5.2.1 tough-cookie: 5.1.2 tunnel-agent: 0.6.0 @@ -10248,17 +8762,17 @@ snapshots: enabled: 2.0.0 kuler: 2.0.0 - '@dr.pogodin/csurf@1.16.6': + '@dr.pogodin/csurf@1.16.9': dependencies: - '@babel/runtime': 7.28.6 - cookie: 1.0.2 + '@babel/runtime': 7.29.2 + cookie: 1.1.1 cookie-signature: 1.2.2 http-errors: 2.0.1 rndm: 1.2.0 tsscmp: 1.0.6 uid-safe: 2.1.5 - '@emnapi/runtime@1.2.0': + '@emnapi/runtime@1.9.2': dependencies: tslib: 2.8.1 optional: true @@ -10266,7 +8780,7 @@ snapshots: '@emotion/babel-plugin@11.13.5': dependencies: '@babel/helper-module-imports': 7.28.6 - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 '@emotion/serialize': 1.3.3 @@ -10296,7 +8810,7 @@ snapshots: '@emotion/core@10.3.1(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@emotion/cache': 10.0.29 '@emotion/css': 10.0.27 '@emotion/serialize': 0.11.16 @@ -10322,9 +8836,9 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1)': + '@emotion/react@11.14.0(@types/react@18.3.28)(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 @@ -10334,7 +8848,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.27 + '@types/react': 18.3.28 transitivePeerDependencies: - supports-color @@ -10376,39 +8890,62 @@ snapshots: '@emotion/weak-memoize@0.4.0': {} - '@eslint-community/eslint-utils@4.9.1(eslint@8.57.1)': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.3(jiti@2.6.1))': dependencies: - eslint: 8.57.1 + eslint: 9.39.3(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/eslintrc@2.1.4': + '@eslint/config-array@0.21.2': dependencies: - ajv: 6.12.6 + '@eslint/object-schema': 2.1.7 debug: 4.4.3(supports-color@5.5.0) - espree: 9.6.1 - globals: 13.24.0 + minimatch: 3.1.5 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.5': + dependencies: + ajv: 6.14.0 + debug: 4.4.3(supports-color@5.5.0) + espree: 10.4.0 + globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 js-yaml: 4.1.1 - minimatch: 3.1.2 + minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/js@8.57.1': {} + '@eslint/js@9.39.3': {} - '@floating-ui/core@1.7.3': + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.1': dependencies: - '@floating-ui/utils': 0.2.10 + '@eslint/core': 0.17.0 + levn: 0.4.1 - '@floating-ui/dom@1.7.4': + '@floating-ui/core@1.7.5': dependencies: - '@floating-ui/core': 1.7.3 - '@floating-ui/utils': 0.2.10 + '@floating-ui/utils': 0.2.11 - '@floating-ui/utils@0.2.10': {} + '@floating-ui/dom@1.7.6': + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 + + '@floating-ui/utils@0.2.11': {} '@fontsource-variable/inter@5.2.8': {} @@ -10417,9 +8954,10 @@ snapshots: '@formatjs/intl-localematcher': 0.2.32 tslib: 2.8.1 - '@formatjs/ecma402-abstract@2.0.0': + '@formatjs/ecma402-abstract@2.2.4': dependencies: - '@formatjs/intl-localematcher': 0.5.4 + '@formatjs/fast-memoize': 2.2.3 + '@formatjs/intl-localematcher': 0.5.8 tslib: 2.8.1 '@formatjs/ecma402-abstract@2.3.6': @@ -10429,7 +8967,14 @@ snapshots: decimal.js: 10.6.0 tslib: 2.8.1 - '@formatjs/fast-memoize@2.2.0': + '@formatjs/ecma402-abstract@3.1.1': + dependencies: + '@formatjs/fast-memoize': 3.1.0 + '@formatjs/intl-localematcher': 0.8.1 + decimal.js: 10.6.0 + tslib: 2.8.1 + + '@formatjs/fast-memoize@2.2.3': dependencies: tslib: 2.8.1 @@ -10437,32 +8982,41 @@ snapshots: dependencies: tslib: 2.8.1 - '@formatjs/icu-messageformat-parser@2.3.0': + '@formatjs/fast-memoize@3.1.0': dependencies: - '@formatjs/ecma402-abstract': 1.14.3 - '@formatjs/icu-skeleton-parser': 1.3.18 tslib: 2.8.1 - '@formatjs/icu-messageformat-parser@2.7.8': + '@formatjs/icu-messageformat-parser@2.11.4': dependencies: - '@formatjs/ecma402-abstract': 2.0.0 - '@formatjs/icu-skeleton-parser': 1.8.2 + '@formatjs/ecma402-abstract': 2.3.6 + '@formatjs/icu-skeleton-parser': 1.8.16 tslib: 2.8.1 - '@formatjs/icu-skeleton-parser@1.3.18': + '@formatjs/icu-messageformat-parser@2.9.4': dependencies: - '@formatjs/ecma402-abstract': 1.14.3 + '@formatjs/ecma402-abstract': 2.2.4 + '@formatjs/icu-skeleton-parser': 1.8.8 tslib: 2.8.1 - '@formatjs/icu-skeleton-parser@1.8.2': + '@formatjs/icu-messageformat-parser@3.5.1': dependencies: - '@formatjs/ecma402-abstract': 2.0.0 + '@formatjs/ecma402-abstract': 3.1.1 + '@formatjs/icu-skeleton-parser': 2.1.1 tslib: 2.8.1 - '@formatjs/intl-displaynames@6.6.8': + '@formatjs/icu-skeleton-parser@1.8.16': dependencies: - '@formatjs/ecma402-abstract': 2.0.0 - '@formatjs/intl-localematcher': 0.5.4 + '@formatjs/ecma402-abstract': 2.3.6 + tslib: 2.8.1 + + '@formatjs/icu-skeleton-parser@1.8.8': + dependencies: + '@formatjs/ecma402-abstract': 2.2.4 + tslib: 2.8.1 + + '@formatjs/icu-skeleton-parser@2.1.1': + dependencies: + '@formatjs/ecma402-abstract': 3.1.1 tslib: 2.8.1 '@formatjs/intl-displaynames@6.8.13': @@ -10471,6 +9025,12 @@ snapshots: '@formatjs/intl-localematcher': 0.6.2 tslib: 2.8.1 + '@formatjs/intl-displaynames@6.8.5': + dependencies: + '@formatjs/ecma402-abstract': 2.2.4 + '@formatjs/intl-localematcher': 0.5.8 + tslib: 2.8.1 + '@formatjs/intl-enumerator@1.2.1': dependencies: tslib: 2.8.1 @@ -10479,10 +9039,10 @@ snapshots: dependencies: tslib: 2.8.1 - '@formatjs/intl-listformat@7.5.7': + '@formatjs/intl-listformat@7.7.5': dependencies: - '@formatjs/ecma402-abstract': 2.0.0 - '@formatjs/intl-localematcher': 0.5.4 + '@formatjs/ecma402-abstract': 2.2.4 + '@formatjs/intl-localematcher': 0.5.8 tslib: 2.8.1 '@formatjs/intl-locale@3.1.1': @@ -10496,7 +9056,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@formatjs/intl-localematcher@0.5.4': + '@formatjs/intl-localematcher@0.5.8': dependencies: tslib: 2.8.1 @@ -10504,6 +9064,11 @@ snapshots: dependencies: tslib: 2.8.1 + '@formatjs/intl-localematcher@0.8.1': + dependencies: + '@formatjs/fast-memoize': 3.1.0 + tslib: 2.8.1 + '@formatjs/intl-pluralrules@5.4.6': dependencies: '@formatjs/ecma402-abstract': 2.3.6 @@ -10515,27 +9080,25 @@ snapshots: dependencies: emojis-list: 3.0.0 - '@formatjs/intl@2.10.4(typescript@5.4.5)': + '@formatjs/intl@2.10.15(typescript@5.4.5)': dependencies: - '@formatjs/ecma402-abstract': 2.0.0 - '@formatjs/fast-memoize': 2.2.0 - '@formatjs/icu-messageformat-parser': 2.7.8 - '@formatjs/intl-displaynames': 6.6.8 - '@formatjs/intl-listformat': 7.5.7 - intl-messageformat: 10.5.14 + '@formatjs/ecma402-abstract': 2.2.4 + '@formatjs/fast-memoize': 2.2.3 + '@formatjs/icu-messageformat-parser': 2.9.4 + '@formatjs/intl-displaynames': 6.8.5 + '@formatjs/intl-listformat': 7.7.5 + intl-messageformat: 10.7.7 tslib: 2.8.1 optionalDependencies: typescript: 5.4.5 - '@formatjs/ts-transformer@3.12.0': + '@formatjs/ts-transformer@4.4.0': dependencies: - '@formatjs/icu-messageformat-parser': 2.3.0 - '@types/json-stable-stringify': 1.0.36 - '@types/node': 17.0.45 - chalk: 4.1.2 - json-stable-stringify: 1.1.1 + '@formatjs/icu-messageformat-parser': 3.5.1 + '@types/node': 22.19.17 + json-stable-stringify: 1.3.0 tslib: 2.8.1 - typescript: 4.9.5 + typescript: 5.9.3 '@gar/promisify@1.1.3': {} @@ -10545,12 +9108,6 @@ snapshots: '@hapi/hoek@11.0.7': {} - '@hapi/hoek@9.3.0': {} - - '@hapi/topo@5.1.0': - dependencies: - '@hapi/hoek': 9.3.0 - '@headlessui/react@1.7.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: client-only: 0.0.1 @@ -10561,153 +9118,124 @@ snapshots: dependencies: react: 18.3.1 - '@humanwhocodes/config-array@0.13.0': + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.3(supports-color@5.5.0) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/retry@0.4.3': {} - '@img/sharp-darwin-arm64@0.33.4': + '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.2 + '@img/sharp-libvips-darwin-arm64': 1.0.4 optional: true - '@img/sharp-darwin-x64@0.33.4': + '@img/sharp-darwin-x64@0.33.5': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.2 + '@img/sharp-libvips-darwin-x64': 1.0.4 optional: true - '@img/sharp-libvips-darwin-arm64@1.0.2': + '@img/sharp-libvips-darwin-arm64@1.0.4': optional: true - '@img/sharp-libvips-darwin-x64@1.0.2': + '@img/sharp-libvips-darwin-x64@1.0.4': optional: true - '@img/sharp-libvips-linux-arm64@1.0.2': + '@img/sharp-libvips-linux-arm64@1.0.4': optional: true - '@img/sharp-libvips-linux-arm@1.0.2': + '@img/sharp-libvips-linux-arm@1.0.5': optional: true - '@img/sharp-libvips-linux-s390x@1.0.2': + '@img/sharp-libvips-linux-s390x@1.0.4': optional: true - '@img/sharp-libvips-linux-x64@1.0.2': + '@img/sharp-libvips-linux-x64@1.0.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.0.2': + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.0.2': + '@img/sharp-libvips-linuxmusl-x64@1.0.4': optional: true - '@img/sharp-linux-arm64@0.33.4': + '@img/sharp-linux-arm64@0.33.5': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.2 + '@img/sharp-libvips-linux-arm64': 1.0.4 optional: true - '@img/sharp-linux-arm@0.33.4': + '@img/sharp-linux-arm@0.33.5': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.2 + '@img/sharp-libvips-linux-arm': 1.0.5 optional: true - '@img/sharp-linux-s390x@0.33.4': + '@img/sharp-linux-s390x@0.33.5': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.2 + '@img/sharp-libvips-linux-s390x': 1.0.4 optional: true - '@img/sharp-linux-x64@0.33.4': + '@img/sharp-linux-x64@0.33.5': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.2 + '@img/sharp-libvips-linux-x64': 1.0.4 optional: true - '@img/sharp-linuxmusl-arm64@0.33.4': + '@img/sharp-linuxmusl-arm64@0.33.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.2 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 optional: true - '@img/sharp-linuxmusl-x64@0.33.4': + '@img/sharp-linuxmusl-x64@0.33.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.2 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 optional: true - '@img/sharp-wasm32@0.33.4': + '@img/sharp-wasm32@0.33.5': dependencies: - '@emnapi/runtime': 1.2.0 + '@emnapi/runtime': 1.9.2 optional: true - '@img/sharp-win32-ia32@0.33.4': + '@img/sharp-win32-ia32@0.33.5': optional: true - '@img/sharp-win32-x64@0.33.4': + '@img/sharp-win32-x64@0.33.5': optional: true - '@internationalized/date@3.10.0': + '@internationalized/date@3.12.1': dependencies: - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 - '@internationalized/message@3.1.8': + '@internationalized/message@3.1.9': dependencies: - '@swc/helpers': 0.5.11 - intl-messageformat: 10.5.14 + '@swc/helpers': 0.5.21 + intl-messageformat: 10.7.18 - '@internationalized/number@3.6.5': + '@internationalized/number@3.6.6': dependencies: - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 - '@internationalized/string@3.2.7': + '@internationalized/string@3.2.8': dependencies: - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 + strip-ansi: 7.2.0 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 '@isaacs/ttlcache@1.4.1': {} - '@jest/create-cache-key-function@29.7.0': - dependencies: - '@jest/types': 29.6.3 - - '@jest/environment@29.7.0': - dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.10.5 - jest-mock: 29.7.0 - - '@jest/fake-timers@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.10.5 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 - '@jest/schemas@29.6.3': dependencies: '@sinclair/typebox': 0.27.10 - '@jest/types@26.6.2': - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 22.10.5 - '@types/yargs': 15.0.20 - chalk: 4.1.2 - '@jest/types@29.6.3': dependencies: '@jest/schemas': 29.6.3 @@ -10748,21 +9276,20 @@ snapshots: '@jsdevtools/ono@7.1.3': {} - '@ladjs/consolidate@1.0.4(@babel/core@7.28.6)(handlebars@4.7.8)(lodash@4.17.23)(mustache@4.2.0)(pug@3.0.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.7)': + '@ladjs/consolidate@1.0.4(@babel/core@7.29.0)(lodash@4.17.23)(mustache@4.2.0)(pug@3.0.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.8)': optionalDependencies: - '@babel/core': 7.28.6 - handlebars: 4.7.8 + '@babel/core': 7.29.0 lodash: 4.17.23 mustache: 4.2.0 pug: 3.0.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - underscore: 1.13.7 + underscore: 1.13.8 '@ladjs/country-language@0.2.1': dependencies: - underscore: 1.13.7 - underscore.deep: 0.5.3(underscore@1.13.7) + underscore: 1.13.8 + underscore.deep: 0.5.3(underscore@1.13.8) '@ladjs/country-language@1.0.3': {} @@ -10771,14 +9298,14 @@ snapshots: '@hapi/boom': 10.0.1 '@ladjs/country-language': 1.0.3 boolean: 3.2.0 - i18n: 0.15.1 + i18n: 0.15.3 i18n-locales: 0.0.5 lodash: 4.17.23 multimatch: 5.0.0 punycode: 2.3.1 - qs: 6.14.1 + qs: 6.15.1 titleize: 2.1.0 - tlds: 1.255.0 + tlds: 1.261.0 transitivePeerDependencies: - supports-color @@ -10788,7 +9315,7 @@ snapshots: '@messageformat/number-skeleton': 1.2.0 '@messageformat/parser': 5.1.1 '@messageformat/runtime': 3.0.2 - make-plural: 7.4.0 + make-plural: 7.5.0 safe-identifier: 0.4.2 '@messageformat/date-skeleton@1.1.0': {} @@ -10797,17 +9324,17 @@ snapshots: '@messageformat/parser@5.1.1': dependencies: - moo: 0.5.2 + moo: 0.5.3 '@messageformat/runtime@3.0.2': dependencies: - make-plural: 7.4.0 + make-plural: 7.5.0 '@next/env@14.2.35': {} - '@next/eslint-plugin-next@14.2.35': + '@next/eslint-plugin-next@16.2.3': dependencies: - glob: 10.3.10 + fast-glob: 3.3.1 '@next/swc-darwin-arm64@14.2.33': optional: true @@ -10836,6 +9363,8 @@ snapshots: '@next/swc-win32-x64-msvc@14.2.33': optional: true + '@noble/hashes@1.8.0': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -10846,7 +9375,7 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + fastq: 1.20.1 '@npmcli/fs@1.1.1': dependencies: @@ -10870,1362 +9399,479 @@ snapshots: mkdirp: 1.0.4 rimraf: 3.0.2 + '@paralleldrive/cuid2@2.3.1': + dependencies: + '@noble/hashes': 1.8.0 + '@pkgjs/parseargs@0.11.0': optional: true '@popperjs/core@2.11.8': {} - '@react-aria/breadcrumbs@3.5.29(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/breadcrumbs@3.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/link': 3.8.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/breadcrumbs': 3.7.17(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/button@3.14.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/button@3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/toolbar': 3.0.0-beta.21(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/toggle': 3.9.2(react@18.3.1) - '@react-types/button': 3.14.1(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/calendar@3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/calendar@3.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@internationalized/date': 3.10.0 - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/calendar': 3.9.0(react@18.3.1) - '@react-types/button': 3.14.1(react@18.3.1) - '@react-types/calendar': 3.8.0(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) + react-stately: 3.46.0(react@18.3.1) + + '@react-aria/checkbox@3.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@swc/helpers': 0.5.21 + react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/checkbox@3.16.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/color@3.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/form': 3.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.22(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/toggle': 3.12.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/checkbox': 3.7.2(react@18.3.1) - '@react-stately/form': 3.2.2(react@18.3.1) - '@react-stately/toggle': 3.9.2(react@18.3.1) - '@react-types/checkbox': 3.10.2(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/color@3.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/combobox@3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/numberfield': 3.12.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/slider': 3.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/spinbutton': 3.6.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/textfield': 3.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/visually-hidden': 3.8.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/color': 3.9.2(react@18.3.1) - '@react-stately/form': 3.2.2(react@18.3.1) - '@react-types/color': 3.1.2(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/combobox@3.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/datepicker@3.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/focus': 3.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/listbox': 3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/menu': 3.19.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/overlays': 3.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/textfield': 3.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/collections': 3.12.8(react@18.3.1) - '@react-stately/combobox': 3.12.0(react@18.3.1) - '@react-stately/form': 3.2.2(react@18.3.1) - '@react-types/button': 3.14.1(react@18.3.1) - '@react-types/combobox': 3.13.9(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) + react-stately: 3.46.0(react@18.3.1) + + '@react-aria/dialog@3.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@swc/helpers': 0.5.21 + react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/datepicker@3.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/disclosure@3.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@internationalized/date': 3.10.0 - '@internationalized/number': 3.6.5 - '@internationalized/string': 3.2.7 - '@react-aria/focus': 3.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/form': 3.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.22(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/spinbutton': 3.6.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/datepicker': 3.15.2(react@18.3.1) - '@react-stately/form': 3.2.2(react@18.3.1) - '@react-types/button': 3.14.1(react@18.3.1) - '@react-types/calendar': 3.8.0(react@18.3.1) - '@react-types/datepicker': 3.13.2(react@18.3.1) - '@react-types/dialog': 3.5.22(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/dialog@3.5.31(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/dnd@3.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/overlays': 3.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/dialog': 3.5.22(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@react-types/shared': 3.34.0(react@18.3.1) + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/disclosure@3.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/focus@3.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/ssr': 3.9.10(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/disclosure': 3.0.8(react@18.3.1) - '@react-types/button': 3.14.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/dnd@3.11.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/gridlist@3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@internationalized/string': 3.2.7 - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/overlays': 3.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/collections': 3.12.8(react@18.3.1) - '@react-stately/dnd': 3.7.1(react@18.3.1) - '@react-types/button': 3.14.1(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/focus@3.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/i18n@3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - clsx: 2.1.1 + '@internationalized/date': 3.12.1 + '@internationalized/message': 3.1.9 + '@internationalized/string': 3.2.8 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/form@3.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/interactions@3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/form': 3.2.2(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@react-types/shared': 3.34.0(react@18.3.1) + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/grid@3.14.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/label@3.8.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/focus': 3.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/selection': 3.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/collections': 3.12.8(react@18.3.1) - '@react-stately/grid': 3.11.6(react@18.3.1) - '@react-stately/selection': 3.20.6(react@18.3.1) - '@react-types/checkbox': 3.10.2(react@18.3.1) - '@react-types/grid': 3.3.6(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/gridlist@3.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/landmark@3.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/focus': 3.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/grid': 3.14.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/list': 3.13.1(react@18.3.1) - '@react-stately/tree': 3.9.3(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/i18n@3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/link@3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@internationalized/date': 3.10.0 - '@internationalized/message': 3.1.8 - '@internationalized/number': 3.6.5 - '@internationalized/string': 3.2.7 - '@react-aria/ssr': 3.9.10(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/interactions@3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/listbox@3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/ssr': 3.9.10(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/flags': 3.1.2 - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/label@3.7.22(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/menu@3.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/landmark@3.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/meter@3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - use-sync-external-store: 1.6.0(react@18.3.1) - - '@react-aria/link@3.8.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/link': 3.6.5(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/listbox@3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/numberfield@3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.22(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/collections': 3.12.8(react@18.3.1) - '@react-stately/list': 3.13.1(react@18.3.1) - '@react-types/listbox': 3.7.4(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/live-announcer@3.4.4': + '@react-aria/overlays@3.32.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@swc/helpers': 0.5.11 - - '@react-aria/menu@3.19.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/overlays': 3.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/collections': 3.12.8(react@18.3.1) - '@react-stately/menu': 3.9.8(react@18.3.1) - '@react-stately/selection': 3.20.6(react@18.3.1) - '@react-stately/tree': 3.9.3(react@18.3.1) - '@react-types/button': 3.14.1(react@18.3.1) - '@react-types/menu': 3.10.5(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/meter@3.4.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/progress@3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/progress': 3.4.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/meter': 3.4.13(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/numberfield@3.12.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/radio@3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/spinbutton': 3.6.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/textfield': 3.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/form': 3.2.2(react@18.3.1) - '@react-stately/numberfield': 3.10.2(react@18.3.1) - '@react-types/button': 3.14.1(react@18.3.1) - '@react-types/numberfield': 3.8.15(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@react-types/shared': 3.34.0(react@18.3.1) + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/overlays@3.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/searchfield@3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/focus': 3.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/ssr': 3.9.10(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/visually-hidden': 3.8.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/overlays': 3.6.20(react@18.3.1) - '@react-types/button': 3.14.1(react@18.3.1) - '@react-types/overlays': 3.9.2(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/progress@3.4.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/select@3.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.22(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/progress': 3.5.16(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/radio@3.12.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/selection@3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/focus': 3.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/form': 3.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.22(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/radio': 3.11.2(react@18.3.1) - '@react-types/radio': 3.9.2(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/searchfield@3.8.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/separator@3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/textfield': 3.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/searchfield': 3.5.16(react@18.3.1) - '@react-types/button': 3.14.1(react@18.3.1) - '@react-types/searchfield': 3.6.6(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/select@3.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/slider@3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/form': 3.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.22(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/listbox': 3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/menu': 3.19.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/visually-hidden': 3.8.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/select': 3.8.0(react@18.3.1) - '@react-types/button': 3.14.1(react@18.3.1) - '@react-types/select': 3.11.0(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@react-types/shared': 3.34.0(react@18.3.1) + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/selection@3.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/ssr@3.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/focus': 3.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/selection': 3.20.6(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/separator@3.4.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/switch@3.8.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/slider@3.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/table@3.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.22(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/slider': 3.7.2(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@react-types/slider': 3.8.2(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/spinbutton@3.6.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/tabs@3.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/button': 3.14.1(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@react-types/shared': 3.34.0(react@18.3.1) + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/ssr@3.9.10(react@18.3.1)': + '@react-aria/tag@3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-aria/switch@3.7.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/toggle': 3.12.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/toggle': 3.9.2(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@react-types/switch': 3.5.15(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/table@3.17.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/textfield@3.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/focus': 3.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/grid': 3.14.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/visually-hidden': 3.8.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/collections': 3.12.8(react@18.3.1) - '@react-stately/flags': 3.1.2 - '@react-stately/table': 3.15.1(react@18.3.1) - '@react-types/checkbox': 3.10.2(react@18.3.1) - '@react-types/grid': 3.3.6(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@react-types/table': 3.13.4(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/tabs@3.10.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/toast@3.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/focus': 3.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/tabs': 3.8.6(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@react-types/tabs': 3.3.19(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/tag@3.7.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/tooltip@3.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/gridlist': 3.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.22(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/list': 3.13.1(react@18.3.1) - '@react-types/button': 3.14.1(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) + react-stately: 3.46.0(react@18.3.1) + + '@react-aria/tree@3.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@swc/helpers': 0.5.21 + react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/textfield@3.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/utils@3.34.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/form': 3.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.22(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/form': 3.2.2(react@18.3.1) - '@react-stately/utils': 3.10.8(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@react-types/textfield': 3.12.6(react@18.3.1) - '@swc/helpers': 0.5.11 + '@swc/helpers': 0.5.21 react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) + react-stately: 3.46.0(react@18.3.1) + + '@react-aria/visually-hidden@3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@swc/helpers': 0.5.21 + react: 18.3.1 + react-aria: 3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: 18.3.1(react@18.3.1) - '@react-aria/toast@3.0.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/landmark': 3.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/toast': 3.1.2(react@18.3.1) - '@react-types/button': 3.14.1(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + '@react-native/assets-registry@0.85.1': {} - '@react-aria/toggle@3.12.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/toggle': 3.9.2(react@18.3.1) - '@react-types/checkbox': 3.10.2(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/toolbar@3.0.0-beta.21(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/tooltip@3.8.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/tooltip': 3.5.8(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@react-types/tooltip': 3.4.21(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/tree@3.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/gridlist': 3.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/tree': 3.9.3(react@18.3.1) - '@react-types/button': 3.14.1(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/utils@3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/ssr': 3.9.10(react@18.3.1) - '@react-stately/flags': 3.1.2 - '@react-stately/utils': 3.10.8(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - clsx: 2.1.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/visually-hidden@3.8.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-native-community/cli-clean@13.6.8(encoding@0.1.13)': - dependencies: - '@react-native-community/cli-tools': 13.6.8(encoding@0.1.13) - chalk: 4.1.2 - execa: 5.1.1 - fast-glob: 3.3.3 - transitivePeerDependencies: - - encoding - - '@react-native-community/cli-config@13.6.8(encoding@0.1.13)': - dependencies: - '@react-native-community/cli-tools': 13.6.8(encoding@0.1.13) - chalk: 4.1.2 - cosmiconfig: 5.2.1 - deepmerge: 4.3.1 - fast-glob: 3.3.3 - joi: 17.13.3 - transitivePeerDependencies: - - encoding - - '@react-native-community/cli-debugger-ui@13.6.8': - dependencies: - serve-static: 1.16.3 - transitivePeerDependencies: - - supports-color - - '@react-native-community/cli-doctor@13.6.8(encoding@0.1.13)': - dependencies: - '@react-native-community/cli-config': 13.6.8(encoding@0.1.13) - '@react-native-community/cli-platform-android': 13.6.8(encoding@0.1.13) - '@react-native-community/cli-platform-apple': 13.6.8(encoding@0.1.13) - '@react-native-community/cli-platform-ios': 13.6.8(encoding@0.1.13) - '@react-native-community/cli-tools': 13.6.8(encoding@0.1.13) - chalk: 4.1.2 - command-exists: 1.2.9 - deepmerge: 4.3.1 - envinfo: 7.21.0 - execa: 5.1.1 - hermes-profile-transformer: 0.0.6 - node-stream-zip: 1.15.0 - ora: 5.4.1 - semver: 7.7.3 - strip-ansi: 5.2.0 - wcwidth: 1.0.1 - yaml: 2.8.3 - transitivePeerDependencies: - - encoding - - '@react-native-community/cli-hermes@13.6.8(encoding@0.1.13)': - dependencies: - '@react-native-community/cli-platform-android': 13.6.8(encoding@0.1.13) - '@react-native-community/cli-tools': 13.6.8(encoding@0.1.13) - chalk: 4.1.2 - hermes-profile-transformer: 0.0.6 - transitivePeerDependencies: - - encoding - - '@react-native-community/cli-platform-android@13.6.8(encoding@0.1.13)': - dependencies: - '@react-native-community/cli-tools': 13.6.8(encoding@0.1.13) - chalk: 4.1.2 - execa: 5.1.1 - fast-glob: 3.3.3 - fast-xml-parser: 4.5.6 - logkitty: 0.7.1 - transitivePeerDependencies: - - encoding - - '@react-native-community/cli-platform-apple@13.6.8(encoding@0.1.13)': - dependencies: - '@react-native-community/cli-tools': 13.6.8(encoding@0.1.13) - chalk: 4.1.2 - execa: 5.1.1 - fast-glob: 3.3.3 - fast-xml-parser: 4.5.6 - ora: 5.4.1 - transitivePeerDependencies: - - encoding - - '@react-native-community/cli-platform-ios@13.6.8(encoding@0.1.13)': - dependencies: - '@react-native-community/cli-platform-apple': 13.6.8(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - '@react-native-community/cli-server-api@13.6.8(encoding@0.1.13)': - dependencies: - '@react-native-community/cli-debugger-ui': 13.6.8 - '@react-native-community/cli-tools': 13.6.8(encoding@0.1.13) - compression: 1.8.1 - connect: 3.7.0 - errorhandler: 1.5.2 - nocache: 3.0.4 - pretty-format: 26.6.2 - serve-static: 1.16.3 - ws: 6.2.3 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - - '@react-native-community/cli-tools@13.6.8(encoding@0.1.13)': - dependencies: - appdirsjs: 1.2.7 - chalk: 4.1.2 - execa: 5.1.1 - find-up: 5.0.0 - mime: 2.6.0 - node-fetch: 2.7.0(encoding@0.1.13) - open: 6.4.0 - ora: 5.4.1 - semver: 7.7.3 - shell-quote: 1.8.3 - sudo-prompt: 9.2.1 - transitivePeerDependencies: - - encoding - - '@react-native-community/cli-types@13.6.8': - dependencies: - joi: 17.13.3 - - '@react-native-community/cli@13.6.8(encoding@0.1.13)': - dependencies: - '@react-native-community/cli-clean': 13.6.8(encoding@0.1.13) - '@react-native-community/cli-config': 13.6.8(encoding@0.1.13) - '@react-native-community/cli-debugger-ui': 13.6.8 - '@react-native-community/cli-doctor': 13.6.8(encoding@0.1.13) - '@react-native-community/cli-hermes': 13.6.8(encoding@0.1.13) - '@react-native-community/cli-server-api': 13.6.8(encoding@0.1.13) - '@react-native-community/cli-tools': 13.6.8(encoding@0.1.13) - '@react-native-community/cli-types': 13.6.8 - chalk: 4.1.2 - commander: 9.5.0 - deepmerge: 4.3.1 - execa: 5.1.1 - find-up: 4.1.0 - fs-extra: 8.1.0 - graceful-fs: 4.2.11 - prompts: 2.4.2 - semver: 7.7.3 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - - '@react-native/assets-registry@0.74.84': {} - - '@react-native/babel-plugin-codegen@0.74.84(@babel/preset-env@7.24.7(@babel/core@7.28.6))': - dependencies: - '@react-native/codegen': 0.74.84(@babel/preset-env@7.24.7(@babel/core@7.28.6)) - transitivePeerDependencies: - - '@babel/preset-env' - - supports-color - - '@react-native/babel-preset@0.74.84(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))': - dependencies: - '@babel/core': 7.28.6 - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.28.6) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.28.6) - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.28.6) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.28.6) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.28.6) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.28.6) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.28.6) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.28.6) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.28.6) - '@babel/plugin-syntax-export-default-from': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-syntax-flow': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.6) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.6) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.6) - '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.28.6) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.6) - '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.6) - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.28.6) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.6) - '@babel/template': 7.28.6 - '@react-native/babel-plugin-codegen': 0.74.84(@babel/preset-env@7.24.7(@babel/core@7.28.6)) - babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.28.6) - react-refresh: 0.14.2 - transitivePeerDependencies: - - '@babel/preset-env' - - supports-color - - '@react-native/codegen@0.74.84(@babel/preset-env@7.24.7(@babel/core@7.28.6))': + '@react-native/codegen@0.85.1(@babel/core@7.29.0)': dependencies: + '@babel/core': 7.29.0 '@babel/parser': 7.29.2 - '@babel/preset-env': 7.24.7(@babel/core@7.28.6) - glob: 7.2.3 - hermes-parser: 0.19.1 + hermes-parser: 0.33.3 invariant: 2.2.4 - jscodeshift: 0.14.0(@babel/preset-env@7.24.7(@babel/core@7.28.6)) - mkdirp: 0.5.6 nullthrows: 1.1.1 - transitivePeerDependencies: - - supports-color + tinyglobby: 0.2.16 + yargs: 17.7.2 - '@react-native/community-cli-plugin@0.74.84(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))(encoding@0.1.13)': + '@react-native/community-cli-plugin@0.85.1': dependencies: - '@react-native-community/cli-server-api': 13.6.8(encoding@0.1.13) - '@react-native-community/cli-tools': 13.6.8(encoding@0.1.13) - '@react-native/dev-middleware': 0.74.84(encoding@0.1.13) - '@react-native/metro-babel-transformer': 0.74.84(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6)) - chalk: 4.1.2 - execa: 5.1.1 - metro: 0.80.12 - metro-config: 0.80.12 - metro-core: 0.80.12 - node-fetch: 2.7.0(encoding@0.1.13) - querystring: 0.2.1 - readline: 1.3.0 + '@react-native/dev-middleware': 0.85.1 + debug: 4.4.3(supports-color@5.5.0) + invariant: 2.2.4 + metro: 0.84.3 + metro-config: 0.84.3 + metro-core: 0.84.3 + semver: 7.7.3 transitivePeerDependencies: - - '@babel/core' - - '@babel/preset-env' - bufferutil - - encoding - supports-color - utf-8-validate - '@react-native/debugger-frontend@0.74.84': {} + '@react-native/debugger-frontend@0.85.1': {} - '@react-native/dev-middleware@0.74.84(encoding@0.1.13)': + '@react-native/debugger-shell@0.85.1': + dependencies: + cross-spawn: 7.0.6 + debug: 4.4.3(supports-color@5.5.0) + fb-dotslash: 0.5.8 + transitivePeerDependencies: + - supports-color + + '@react-native/dev-middleware@0.85.1': dependencies: '@isaacs/ttlcache': 1.4.1 - '@react-native/debugger-frontend': 0.74.84 - '@rnx-kit/chromium-edge-launcher': 1.0.0 + '@react-native/debugger-frontend': 0.85.1 + '@react-native/debugger-shell': 0.85.1 chrome-launcher: 0.15.2 + chromium-edge-launcher: 0.3.0 connect: 3.7.0 - debug: 2.6.9 - node-fetch: 2.7.0(encoding@0.1.13) + debug: 4.4.3(supports-color@5.5.0) + invariant: 2.2.4 nullthrows: 1.1.1 open: 7.4.2 - selfsigned: 2.4.1 serve-static: 1.16.3 - temp-dir: 2.0.0 - ws: 6.2.3 + ws: 7.5.10 transitivePeerDependencies: - bufferutil - - encoding - supports-color - utf-8-validate - '@react-native/gradle-plugin@0.74.84': {} + '@react-native/gradle-plugin@0.85.1': {} - '@react-native/js-polyfills@0.74.84': {} + '@react-native/js-polyfills@0.85.1': {} - '@react-native/metro-babel-transformer@0.74.84(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))': - dependencies: - '@babel/core': 7.28.6 - '@react-native/babel-preset': 0.74.84(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6)) - hermes-parser: 0.19.1 - nullthrows: 1.1.1 - transitivePeerDependencies: - - '@babel/preset-env' - - supports-color + '@react-native/normalize-colors@0.85.1': {} - '@react-native/normalize-colors@0.74.84': {} - - '@react-native/virtualized-lists@0.74.84(@types/react@18.3.27)(react-native@0.74.2(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1)': + '@react-native/virtualized-lists@0.85.1(@types/react@18.3.28)(react-native@0.85.1(@babel/core@7.29.0)(@types/react@18.3.28)(react@18.3.1))(react@18.3.1)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 18.3.1 - react-native: 0.74.2(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1) + react-native: 0.85.1(@babel/core@7.29.0)(@types/react@18.3.28)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.27 + '@types/react': 18.3.28 - '@react-spring/animated@9.7.3(react@18.3.1)': + '@react-spring/animated@9.7.5(react@18.3.1)': dependencies: - '@react-spring/shared': 9.7.3(react@18.3.1) - '@react-spring/types': 9.7.3 + '@react-spring/shared': 9.7.5(react@18.3.1) + '@react-spring/types': 9.7.5 react: 18.3.1 - '@react-spring/core@9.7.3(react@18.3.1)': + '@react-spring/core@9.7.5(react@18.3.1)': dependencies: - '@react-spring/animated': 9.7.3(react@18.3.1) - '@react-spring/shared': 9.7.3(react@18.3.1) - '@react-spring/types': 9.7.3 + '@react-spring/animated': 9.7.5(react@18.3.1) + '@react-spring/shared': 9.7.5(react@18.3.1) + '@react-spring/types': 9.7.5 react: 18.3.1 - '@react-spring/konva@9.7.3(konva@9.3.12)(react-konva@18.2.10(@types/react@18.3.27)(konva@9.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@react-spring/konva@9.7.5(konva@10.2.5)(react-konva@18.2.14(@types/react@18.3.28)(konva@10.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@react-spring/animated': 9.7.3(react@18.3.1) - '@react-spring/core': 9.7.3(react@18.3.1) - '@react-spring/shared': 9.7.3(react@18.3.1) - '@react-spring/types': 9.7.3 - konva: 9.3.12 + '@react-spring/animated': 9.7.5(react@18.3.1) + '@react-spring/core': 9.7.5(react@18.3.1) + '@react-spring/shared': 9.7.5(react@18.3.1) + '@react-spring/types': 9.7.5 + konva: 10.2.5 react: 18.3.1 - react-konva: 18.2.10(@types/react@18.3.27)(konva@9.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-konva: 18.2.14(@types/react@18.3.28)(konva@10.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-spring/native@9.7.3(react-native@0.74.2(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1)': + '@react-spring/native@9.7.5(react-native@0.85.1(@babel/core@7.29.0)(@types/react@18.3.28)(react@18.3.1))(react@18.3.1)': dependencies: - '@react-spring/animated': 9.7.3(react@18.3.1) - '@react-spring/core': 9.7.3(react@18.3.1) - '@react-spring/shared': 9.7.3(react@18.3.1) - '@react-spring/types': 9.7.3 + '@react-spring/animated': 9.7.5(react@18.3.1) + '@react-spring/core': 9.7.5(react@18.3.1) + '@react-spring/shared': 9.7.5(react@18.3.1) + '@react-spring/types': 9.7.5 react: 18.3.1 - react-native: 0.74.2(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1) + react-native: 0.85.1(@babel/core@7.29.0)(@types/react@18.3.28)(react@18.3.1) - '@react-spring/shared@9.7.3(react@18.3.1)': + '@react-spring/rafz@9.7.5': {} + + '@react-spring/shared@9.7.5(react@18.3.1)': dependencies: - '@react-spring/types': 9.7.3 + '@react-spring/rafz': 9.7.5 + '@react-spring/types': 9.7.5 react: 18.3.1 - '@react-spring/three@9.7.3(@react-three/fiber@8.16.8(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1)(three@0.165.0))(react@18.3.1)(three@0.165.0)': + '@react-spring/three@9.7.5(@react-three/fiber@9.6.0(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react-native@0.85.1(@babel/core@7.29.0)(@types/react@18.3.28)(react@18.3.1))(react@18.3.1)(three@0.183.2))(react@18.3.1)(three@0.183.2)': dependencies: - '@react-spring/animated': 9.7.3(react@18.3.1) - '@react-spring/core': 9.7.3(react@18.3.1) - '@react-spring/shared': 9.7.3(react@18.3.1) - '@react-spring/types': 9.7.3 - '@react-three/fiber': 8.16.8(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1)(three@0.165.0) + '@react-spring/animated': 9.7.5(react@18.3.1) + '@react-spring/core': 9.7.5(react@18.3.1) + '@react-spring/shared': 9.7.5(react@18.3.1) + '@react-spring/types': 9.7.5 + '@react-three/fiber': 9.6.0(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react-native@0.85.1(@babel/core@7.29.0)(@types/react@18.3.28)(react@18.3.1))(react@18.3.1)(three@0.183.2) react: 18.3.1 - three: 0.165.0 + three: 0.183.2 - '@react-spring/types@9.7.3': {} + '@react-spring/types@9.7.5': {} - '@react-spring/web@9.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-spring/web@9.7.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-spring/animated': 9.7.3(react@18.3.1) - '@react-spring/core': 9.7.3(react@18.3.1) - '@react-spring/shared': 9.7.3(react@18.3.1) - '@react-spring/types': 9.7.3 + '@react-spring/animated': 9.7.5(react@18.3.1) + '@react-spring/core': 9.7.5(react@18.3.1) + '@react-spring/shared': 9.7.5(react@18.3.1) + '@react-spring/types': 9.7.5 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@react-spring/zdog@9.7.3(react-dom@18.3.1(react@18.3.1))(react-zdog@1.2.2)(react@18.3.1)(zdog@1.1.3)': + '@react-spring/zdog@9.7.5(react-dom@18.3.1(react@18.3.1))(react-zdog@1.2.2)(react@18.3.1)(zdog@1.1.3)': dependencies: - '@react-spring/animated': 9.7.3(react@18.3.1) - '@react-spring/core': 9.7.3(react@18.3.1) - '@react-spring/shared': 9.7.3(react@18.3.1) - '@react-spring/types': 9.7.3 + '@react-spring/animated': 9.7.5(react@18.3.1) + '@react-spring/core': 9.7.5(react@18.3.1) + '@react-spring/shared': 9.7.5(react@18.3.1) + '@react-spring/types': 9.7.5 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-zdog: 1.2.2 zdog: 1.1.3 - '@react-stately/calendar@3.9.0(react@18.3.1)': - dependencies: - '@internationalized/date': 3.10.0 - '@react-stately/utils': 3.10.8(react@18.3.1) - '@react-types/calendar': 3.8.0(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/checkbox@3.7.2(react@18.3.1)': - dependencies: - '@react-stately/form': 3.2.2(react@18.3.1) - '@react-stately/utils': 3.10.8(react@18.3.1) - '@react-types/checkbox': 3.10.2(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/collections@3.12.8(react@18.3.1)': - dependencies: - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/color@3.9.2(react@18.3.1)': - dependencies: - '@internationalized/number': 3.6.5 - '@internationalized/string': 3.2.7 - '@react-stately/form': 3.2.2(react@18.3.1) - '@react-stately/numberfield': 3.10.2(react@18.3.1) - '@react-stately/slider': 3.7.2(react@18.3.1) - '@react-stately/utils': 3.10.8(react@18.3.1) - '@react-types/color': 3.1.2(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/combobox@3.12.0(react@18.3.1)': - dependencies: - '@react-stately/collections': 3.12.8(react@18.3.1) - '@react-stately/form': 3.2.2(react@18.3.1) - '@react-stately/list': 3.13.1(react@18.3.1) - '@react-stately/overlays': 3.6.20(react@18.3.1) - '@react-stately/utils': 3.10.8(react@18.3.1) - '@react-types/combobox': 3.13.9(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/datepicker@3.15.2(react@18.3.1)': - dependencies: - '@internationalized/date': 3.10.0 - '@internationalized/string': 3.2.7 - '@react-stately/form': 3.2.2(react@18.3.1) - '@react-stately/overlays': 3.6.20(react@18.3.1) - '@react-stately/utils': 3.10.8(react@18.3.1) - '@react-types/datepicker': 3.13.2(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/disclosure@3.0.8(react@18.3.1)': - dependencies: - '@react-stately/utils': 3.10.8(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/dnd@3.7.1(react@18.3.1)': - dependencies: - '@react-stately/selection': 3.20.6(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/flags@3.1.2': - dependencies: - '@swc/helpers': 0.5.11 - - '@react-stately/form@3.2.2(react@18.3.1)': - dependencies: - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/grid@3.11.6(react@18.3.1)': - dependencies: - '@react-stately/collections': 3.12.8(react@18.3.1) - '@react-stately/selection': 3.20.6(react@18.3.1) - '@react-types/grid': 3.3.6(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/list@3.13.1(react@18.3.1)': - dependencies: - '@react-stately/collections': 3.12.8(react@18.3.1) - '@react-stately/selection': 3.20.6(react@18.3.1) - '@react-stately/utils': 3.10.8(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/menu@3.9.8(react@18.3.1)': - dependencies: - '@react-stately/overlays': 3.6.20(react@18.3.1) - '@react-types/menu': 3.10.5(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/numberfield@3.10.2(react@18.3.1)': - dependencies: - '@internationalized/number': 3.6.5 - '@react-stately/form': 3.2.2(react@18.3.1) - '@react-stately/utils': 3.10.8(react@18.3.1) - '@react-types/numberfield': 3.8.15(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/overlays@3.6.20(react@18.3.1)': - dependencies: - '@react-stately/utils': 3.10.8(react@18.3.1) - '@react-types/overlays': 3.9.2(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/radio@3.11.2(react@18.3.1)': - dependencies: - '@react-stately/form': 3.2.2(react@18.3.1) - '@react-stately/utils': 3.10.8(react@18.3.1) - '@react-types/radio': 3.9.2(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/searchfield@3.5.16(react@18.3.1)': - dependencies: - '@react-stately/utils': 3.10.8(react@18.3.1) - '@react-types/searchfield': 3.6.6(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/select@3.8.0(react@18.3.1)': - dependencies: - '@react-stately/form': 3.2.2(react@18.3.1) - '@react-stately/list': 3.13.1(react@18.3.1) - '@react-stately/overlays': 3.6.20(react@18.3.1) - '@react-stately/utils': 3.10.8(react@18.3.1) - '@react-types/select': 3.11.0(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/selection@3.20.6(react@18.3.1)': - dependencies: - '@react-stately/collections': 3.12.8(react@18.3.1) - '@react-stately/utils': 3.10.8(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/slider@3.7.2(react@18.3.1)': - dependencies: - '@react-stately/utils': 3.10.8(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@react-types/slider': 3.8.2(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/table@3.15.1(react@18.3.1)': - dependencies: - '@react-stately/collections': 3.12.8(react@18.3.1) - '@react-stately/flags': 3.1.2 - '@react-stately/grid': 3.11.6(react@18.3.1) - '@react-stately/selection': 3.20.6(react@18.3.1) - '@react-stately/utils': 3.10.8(react@18.3.1) - '@react-types/grid': 3.3.6(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@react-types/table': 3.13.4(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/tabs@3.8.6(react@18.3.1)': - dependencies: - '@react-stately/list': 3.13.1(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@react-types/tabs': 3.3.19(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/toast@3.1.2(react@18.3.1)': - dependencies: - '@swc/helpers': 0.5.11 - react: 18.3.1 - use-sync-external-store: 1.6.0(react@18.3.1) - - '@react-stately/toggle@3.9.2(react@18.3.1)': - dependencies: - '@react-stately/utils': 3.10.8(react@18.3.1) - '@react-types/checkbox': 3.10.2(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/tooltip@3.5.8(react@18.3.1)': - dependencies: - '@react-stately/overlays': 3.6.20(react@18.3.1) - '@react-types/tooltip': 3.4.21(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/tree@3.9.3(react@18.3.1)': - dependencies: - '@react-stately/collections': 3.12.8(react@18.3.1) - '@react-stately/selection': 3.20.6(react@18.3.1) - '@react-stately/utils': 3.10.8(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-stately/utils@3.10.8(react@18.3.1)': - dependencies: - '@swc/helpers': 0.5.11 - react: 18.3.1 - - '@react-three/fiber@8.16.8(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1)(three@0.165.0)': + '@react-three/fiber@9.6.0(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react-native@0.85.1(@babel/core@7.29.0)(@types/react@18.3.28)(react@18.3.1))(react@18.3.1)(three@0.183.2)': dependencies: '@babel/runtime': 7.29.2 - '@types/react-reconciler': 0.26.7 '@types/webxr': 0.5.24 base64-js: 1.5.1 buffer: 6.0.3 - its-fine: 1.2.5(@types/react@18.3.27)(react@18.3.1) + its-fine: 2.0.0(@types/react@18.3.28)(react@18.3.1) react: 18.3.1 - react-reconciler: 0.27.0(react@18.3.1) react-use-measure: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - scheduler: 0.21.0 + scheduler: 0.27.0 suspend-react: 0.1.3(react@18.3.1) - three: 0.165.0 - zustand: 3.7.2(react@18.3.1) + three: 0.183.2 + use-sync-external-store: 1.6.0(react@18.3.1) + zustand: 5.0.12(@types/react@18.3.28)(react@18.3.1)(use-sync-external-store@1.6.0(react@18.3.1)) optionalDependencies: react-dom: 18.3.1(react@18.3.1) - react-native: 0.74.2(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1) + react-native: 0.85.1(@babel/core@7.29.0)(@types/react@18.3.28)(react@18.3.1) transitivePeerDependencies: - '@types/react' + - immer - '@react-types/breadcrumbs@3.7.17(react@18.3.1)': - dependencies: - '@react-types/link': 3.6.5(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/button@3.14.1(react@18.3.1)': - dependencies: - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/calendar@3.8.0(react@18.3.1)': - dependencies: - '@internationalized/date': 3.10.0 - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/checkbox@3.10.2(react@18.3.1)': - dependencies: - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/color@3.1.2(react@18.3.1)': - dependencies: - '@react-types/shared': 3.32.1(react@18.3.1) - '@react-types/slider': 3.8.2(react@18.3.1) - react: 18.3.1 - - '@react-types/combobox@3.13.9(react@18.3.1)': - dependencies: - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/datepicker@3.13.2(react@18.3.1)': - dependencies: - '@internationalized/date': 3.10.0 - '@react-types/calendar': 3.8.0(react@18.3.1) - '@react-types/overlays': 3.9.2(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/dialog@3.5.22(react@18.3.1)': - dependencies: - '@react-types/overlays': 3.9.2(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/grid@3.3.6(react@18.3.1)': - dependencies: - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/link@3.6.5(react@18.3.1)': - dependencies: - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/listbox@3.7.4(react@18.3.1)': - dependencies: - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/menu@3.10.5(react@18.3.1)': - dependencies: - '@react-types/overlays': 3.9.2(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/meter@3.4.13(react@18.3.1)': - dependencies: - '@react-types/progress': 3.5.16(react@18.3.1) - react: 18.3.1 - - '@react-types/numberfield@3.8.15(react@18.3.1)': - dependencies: - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/overlays@3.9.2(react@18.3.1)': - dependencies: - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/progress@3.5.16(react@18.3.1)': - dependencies: - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/radio@3.9.2(react@18.3.1)': - dependencies: - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/searchfield@3.6.6(react@18.3.1)': - dependencies: - '@react-types/shared': 3.32.1(react@18.3.1) - '@react-types/textfield': 3.12.6(react@18.3.1) - react: 18.3.1 - - '@react-types/select@3.11.0(react@18.3.1)': - dependencies: - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/shared@3.32.1(react@18.3.1)': + '@react-types/shared@3.34.0(react@18.3.1)': dependencies: react: 18.3.1 - '@react-types/slider@3.8.2(react@18.3.1)': - dependencies: - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 + '@scarf/scarf@1.4.0': {} - '@react-types/switch@3.5.15(react@18.3.1)': + '@seerr-team/react-tailwindcss-datepicker@1.3.4(dayjs@1.11.20)(react@18.3.1)': dependencies: - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/table@3.13.4(react@18.3.1)': - dependencies: - '@react-types/grid': 3.3.6(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/tabs@3.3.19(react@18.3.1)': - dependencies: - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/textfield@3.12.6(react@18.3.1)': - dependencies: - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@react-types/tooltip@3.4.21(react@18.3.1)': - dependencies: - '@react-types/overlays': 3.9.2(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) - react: 18.3.1 - - '@rnx-kit/chromium-edge-launcher@1.0.0': - dependencies: - '@types/node': 18.19.130 - escape-string-regexp: 4.0.0 - is-wsl: 2.2.0 - lighthouse-logger: 1.4.2 - mkdirp: 1.0.4 - rimraf: 3.0.2 - transitivePeerDependencies: - - supports-color - - '@rushstack/eslint-patch@1.10.3': {} - - '@seerr-team/react-tailwindcss-datepicker@1.3.4(dayjs@1.11.19)(react@18.3.1)': - dependencies: - dayjs: 1.11.19 + dayjs: 1.11.20 react: 18.3.1 '@selderee/plugin-htmlparser2@0.11.0': @@ -12233,24 +9879,11 @@ snapshots: domhandler: 5.0.3 selderee: 0.11.0 - '@sideway/address@4.1.5': - dependencies: - '@hapi/hoek': 9.3.0 - - '@sideway/formula@3.0.1': {} - - '@sideway/pinpoint@2.0.0': {} + '@simple-libs/stream-utils@1.2.0': + optional: true '@sinclair/typebox@0.27.10': {} - '@sinonjs/commons@3.0.1': - dependencies: - type-detect: 4.0.8 - - '@sinonjs/fake-timers@10.3.0': - dependencies: - '@sinonjs/commons': 3.0.1 - '@so-ric/colorspace@1.1.6': dependencies: color: 5.0.3 @@ -12260,146 +9893,102 @@ snapshots: '@supercharge/request-ip@1.2.0': {} - '@svgr/babel-plugin-add-jsx-attribute@6.5.1(@babel/core@7.28.6)': + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.28.6)': + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.28.6)': + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1(@babel/core@7.28.6)': + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-svg-dynamic-title@6.5.1(@babel/core@7.28.6)': + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-svg-em-dimensions@6.5.1(@babel/core@7.28.6)': + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-transform-react-native-svg@6.5.1(@babel/core@7.28.6)': + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-transform-svg-component@6.5.1(@babel/core@7.28.6)': + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-preset@6.5.1(@babel/core@7.28.6)': + '@svgr/babel-preset@8.1.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@svgr/babel-plugin-add-jsx-attribute': 6.5.1(@babel/core@7.28.6) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-replace-jsx-attribute-value': 6.5.1(@babel/core@7.28.6) - '@svgr/babel-plugin-svg-dynamic-title': 6.5.1(@babel/core@7.28.6) - '@svgr/babel-plugin-svg-em-dimensions': 6.5.1(@babel/core@7.28.6) - '@svgr/babel-plugin-transform-react-native-svg': 6.5.1(@babel/core@7.28.6) - '@svgr/babel-plugin-transform-svg-component': 6.5.1(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.0) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.0) - '@svgr/core@6.5.1': + '@svgr/core@8.1.0(typescript@5.4.5)': dependencies: - '@babel/core': 7.28.6 - '@svgr/babel-preset': 6.5.1(@babel/core@7.28.6) - '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1) + '@babel/core': 7.29.0 + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) camelcase: 6.3.0 - cosmiconfig: 7.1.0 + cosmiconfig: 8.3.6(typescript@5.4.5) + snake-case: 3.0.4 transitivePeerDependencies: - supports-color + - typescript - '@svgr/hast-util-to-babel-ast@6.5.1': + '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 entities: 4.5.0 - '@svgr/plugin-jsx@6.5.1(@svgr/core@6.5.1)': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.4.5))': dependencies: - '@babel/core': 7.28.6 - '@svgr/babel-preset': 6.5.1(@babel/core@7.28.6) - '@svgr/core': 6.5.1 - '@svgr/hast-util-to-babel-ast': 6.5.1 + '@babel/core': 7.29.0 + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) + '@svgr/core': 8.1.0(typescript@5.4.5) + '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: - supports-color - '@svgr/plugin-svgo@6.5.1(@svgr/core@6.5.1)': + '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.4.5))(typescript@5.4.5)': dependencies: - '@svgr/core': 6.5.1 - cosmiconfig: 7.1.0 + '@svgr/core': 8.1.0(typescript@5.4.5) + cosmiconfig: 8.3.6(typescript@5.4.5) deepmerge: 4.3.1 - svgo: 2.8.0 + svgo: 3.3.3 + transitivePeerDependencies: + - typescript - '@svgr/webpack@6.5.1': + '@svgr/webpack@8.1.0(typescript@5.4.5)': dependencies: - '@babel/core': 7.28.6 - '@babel/plugin-transform-react-constant-elements': 7.24.7(@babel/core@7.28.6) - '@babel/preset-env': 7.24.7(@babel/core@7.28.6) - '@babel/preset-react': 7.24.7(@babel/core@7.28.6) - '@babel/preset-typescript': 7.28.5(@babel/core@7.28.6) - '@svgr/core': 6.5.1 - '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1) - '@svgr/plugin-svgo': 6.5.1(@svgr/core@6.5.1) + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.29.0) + '@babel/preset-env': 7.29.2(@babel/core@7.29.0) + '@babel/preset-react': 7.28.5(@babel/core@7.29.0) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@svgr/core': 8.1.0(typescript@5.4.5) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.4.5)) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.4.5))(typescript@5.4.5) transitivePeerDependencies: - supports-color - - '@swc/core-darwin-arm64@1.6.5': - optional: true - - '@swc/core-darwin-x64@1.6.5': - optional: true - - '@swc/core-linux-arm-gnueabihf@1.6.5': - optional: true - - '@swc/core-linux-arm64-gnu@1.6.5': - optional: true - - '@swc/core-linux-arm64-musl@1.6.5': - optional: true - - '@swc/core-linux-x64-gnu@1.6.5': - optional: true - - '@swc/core-linux-x64-musl@1.6.5': - optional: true - - '@swc/core-win32-arm64-msvc@1.6.5': - optional: true - - '@swc/core-win32-ia32-msvc@1.6.5': - optional: true - - '@swc/core-win32-x64-msvc@1.6.5': - optional: true - - '@swc/core@1.6.5(@swc/helpers@0.5.11)': - dependencies: - '@swc/counter': 0.1.3 - '@swc/types': 0.1.26 - optionalDependencies: - '@swc/core-darwin-arm64': 1.6.5 - '@swc/core-darwin-x64': 1.6.5 - '@swc/core-linux-arm-gnueabihf': 1.6.5 - '@swc/core-linux-arm64-gnu': 1.6.5 - '@swc/core-linux-arm64-musl': 1.6.5 - '@swc/core-linux-x64-gnu': 1.6.5 - '@swc/core-linux-x64-musl': 1.6.5 - '@swc/core-win32-arm64-msvc': 1.6.5 - '@swc/core-win32-ia32-msvc': 1.6.5 - '@swc/core-win32-x64-msvc': 1.6.5 - '@swc/helpers': 0.5.11 - optional: true + - typescript '@swc/counter@0.1.3': {} - '@swc/helpers@0.5.11': + '@swc/helpers@0.5.21': dependencies: tslib: 2.8.1 @@ -12408,31 +9997,23 @@ snapshots: '@swc/counter': 0.1.3 tslib: 2.8.1 - '@swc/types@0.1.26': - dependencies: - '@swc/counter': 0.1.3 - optional: true - '@tailwindcss/aspect-ratio@0.4.2(tailwindcss@3.4.19(yaml@2.8.3))': dependencies: tailwindcss: 3.4.19(yaml@2.8.3) - '@tailwindcss/forms@0.5.10(tailwindcss@3.4.19(yaml@2.8.3))': + '@tailwindcss/forms@0.5.11(tailwindcss@3.4.19(yaml@2.8.3))': dependencies: mini-svg-data-uri: 1.4.4 tailwindcss: 3.4.19(yaml@2.8.3) - '@tailwindcss/typography@0.5.16(tailwindcss@3.4.19(yaml@2.8.3))': + '@tailwindcss/typography@0.5.19(tailwindcss@3.4.19(yaml@2.8.3))': dependencies: - lodash.castarray: 4.4.0 - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 tailwindcss: 3.4.19(yaml@2.8.3) '@tanem/react-nprogress@5.0.56(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 hoist-non-react-statics: 3.3.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -12442,9 +10023,7 @@ snapshots: '@tootallnate/once@2.0.0': {} - '@trysound/sax@0.2.0': {} - - '@tsconfig/node10@1.0.11': {} + '@tsconfig/node10@1.0.12': {} '@tsconfig/node12@1.0.11': {} @@ -12456,7 +10035,7 @@ snapshots: dependencies: '@types/node': 22.10.5 - '@types/body-parser@1.19.5': + '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 '@types/node': 22.10.5 @@ -12465,48 +10044,54 @@ snapshots: dependencies: '@types/node': 22.10.5 - '@types/conventional-commits-parser@5.0.0': - dependencies: - '@types/node': 22.10.5 - optional: true - '@types/cookie-parser@1.4.10(@types/express@4.17.17)': dependencies: '@types/express': 4.17.17 + '@types/cookiejar@2.1.5': {} + '@types/country-flag-icons@1.2.2': {} '@types/csurf@1.11.5': dependencies: - '@types/express-serve-static-core': 4.19.5 + '@types/express-serve-static-core': 5.1.1 '@types/debug@0.0.31': {} - '@types/debug@4.1.12': + '@types/debug@4.1.13': dependencies: - '@types/ms': 0.7.34 + '@types/ms': 2.1.0 - '@types/email-templates@8.0.4(encoding@0.1.13)': + '@types/email-templates@10.0.4(encoding@0.1.13)': dependencies: '@types/html-to-text': 9.0.4 - '@types/nodemailer': 7.0.9 - juice: 7.0.0(encoding@0.1.13) + '@types/nodemailer': 7.0.11 + juice: 8.1.0(encoding@0.1.13) transitivePeerDependencies: - encoding - '@types/eslint@8.56.10': + '@types/eslint-plugin-jsx-a11y@6.10.1(jiti@2.6.1)': dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 + eslint: 9.39.3(jiti@2.6.1) + transitivePeerDependencies: + - jiti + - supports-color - '@types/estree@1.0.5': {} + '@types/estree@1.0.8': {} - '@types/express-serve-static-core@4.19.5': + '@types/express-serve-static-core@4.19.8': dependencies: '@types/node': 22.10.5 - '@types/qs': 6.9.15 + '@types/qs': 6.15.0 '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 + '@types/send': 1.2.1 + + '@types/express-serve-static-core@5.1.1': + dependencies: + '@types/node': 22.10.5 + '@types/qs': 6.15.0 + '@types/range-parser': 1.2.7 + '@types/send': 1.2.1 '@types/express-session@1.18.2': dependencies: @@ -12514,23 +10099,23 @@ snapshots: '@types/express@4.17.17': dependencies: - '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.5 - '@types/qs': 6.9.15 - '@types/serve-static': 1.15.7 + '@types/body-parser': 1.19.6 + '@types/express-serve-static-core': 4.19.8 + '@types/qs': 6.15.0 + '@types/serve-static': 2.2.0 '@types/hast@2.3.10': dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 - '@types/hoist-non-react-statics@3.3.5': + '@types/hoist-non-react-statics@3.3.7(@types/react@18.3.28)': dependencies: - '@types/react': 18.3.27 + '@types/react': 18.3.28 hoist-non-react-statics: 3.3.2 '@types/html-to-text@9.0.4': {} - '@types/http-errors@2.0.4': {} + '@types/http-errors@2.0.5': {} '@types/istanbul-lib-coverage@2.0.6': {} @@ -12544,17 +10129,13 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/json-stable-stringify@1.0.36': {} - - '@types/json5@0.0.29': {} - '@types/lodash@4.17.21': {} '@types/mdast@3.0.15': dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 - '@types/mime@1.3.5': {} + '@types/methods@1.1.4': {} '@types/mime@3.0.4': {} @@ -12562,33 +10143,27 @@ snapshots: '@types/minimist@1.2.5': {} - '@types/ms@0.7.34': {} + '@types/ms@2.1.0': {} - '@types/multer@1.4.12': + '@types/multer@1.4.13': dependencies: '@types/express': 4.17.17 - '@types/node-forge@1.3.14': - dependencies: - '@types/node': 22.10.5 - '@types/node-schedule@2.1.8': dependencies: '@types/node': 22.10.5 - '@types/node@17.0.45': {} - - '@types/node@18.19.130': - dependencies: - undici-types: 5.26.5 - '@types/node@20.5.1': {} '@types/node@22.10.5': dependencies: undici-types: 6.20.0 - '@types/nodemailer@7.0.9': + '@types/node@22.19.17': + dependencies: + undici-types: 6.21.0 + + '@types/nodemailer@7.0.11': dependencies: '@types/node': 22.10.5 @@ -12596,34 +10171,25 @@ snapshots: '@types/parse-json@4.0.2': {} - '@types/picomatch@2.3.3': {} + '@types/picomatch@4.0.3': {} '@types/prop-types@15.7.15': {} - '@types/qs@6.9.15': {} + '@types/qs@6.15.0': {} '@types/range-parser@1.2.7': {} - '@types/react-dom@18.3.0': - dependencies: - '@types/react': 18.3.27 - - '@types/react-reconciler@0.26.7': + '@types/react-dom@18.3.7(@types/react@18.3.28)': dependencies: '@types/react': 18.3.28 - '@types/react-reconciler@0.28.9(@types/react@18.3.27)': + '@types/react-reconciler@0.28.9(@types/react@18.3.28)': dependencies: - '@types/react': 18.3.27 + '@types/react': 18.3.28 - '@types/react-transition-group@4.4.12(@types/react@18.3.27)': + '@types/react-transition-group@4.4.12(@types/react@18.3.28)': dependencies: - '@types/react': 18.3.27 - - '@types/react@18.3.27': - dependencies: - '@types/prop-types': 15.7.15 - csstype: 3.2.3 + '@types/react': 18.3.28 '@types/react@18.3.28': dependencies: @@ -12634,33 +10200,41 @@ snapshots: '@types/semver@7.7.1': {} - '@types/send@0.17.4': + '@types/send@1.2.1': dependencies: - '@types/mime': 1.3.5 '@types/node': 22.10.5 - '@types/serve-static@1.15.7': + '@types/serve-static@2.2.0': dependencies: - '@types/http-errors': 2.0.4 + '@types/http-errors': 2.0.5 '@types/node': 22.10.5 - '@types/send': 0.17.4 '@types/sinonjs__fake-timers@8.1.1': {} '@types/sizzle@2.3.10': {} - '@types/stack-utils@2.0.3': {} + '@types/superagent@8.1.9': + dependencies: + '@types/cookiejar': 2.1.5 + '@types/methods': 1.1.4 + '@types/node': 22.10.5 + form-data: 4.0.5 + + '@types/supertest@6.0.3': + dependencies: + '@types/methods': 1.1.4 + '@types/superagent': 8.1.9 '@types/swagger-ui-express@4.1.8': dependencies: '@types/express': 4.17.17 - '@types/serve-static': 1.15.7 + '@types/serve-static': 2.2.0 '@types/triple-beam@1.3.5': {} '@types/ua-parser-js@0.7.39': {} - '@types/unist@2.0.10': {} + '@types/unist@2.0.11': {} '@types/validator@13.15.10': {} @@ -12680,10 +10254,6 @@ snapshots: '@types/yargs-parser@21.0.3': {} - '@types/yargs@15.0.20': - dependencies: - '@types/yargs-parser': 21.0.3 - '@types/yargs@17.0.35': dependencies: '@types/yargs-parser': 21.0.3 @@ -12695,200 +10265,105 @@ snapshots: '@types/yup@0.29.14': {} - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@8.58.2(@typescript-eslint/parser@8.58.2(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.18.0 - eslint: 8.57.1 - graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare: 1.4.0 - ts-api-utils: 1.4.3(typescript@5.4.5) - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.54.0(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1)(typescript@5.4.5)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.54.0(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/type-utils': 8.54.0(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/utils': 8.54.0(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.54.0 - eslint: 8.57.1 + '@typescript-eslint/parser': 8.58.2(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.58.2 + '@typescript-eslint/type-utils': 8.58.2(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/utils': 8.58.2(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.58.2 + eslint: 9.39.3(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.4.5) + ts-api-utils: 2.5.0(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5)': + '@typescript-eslint/parser@8.58.2(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.18.0 + '@typescript-eslint/scope-manager': 8.58.2 + '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.58.2 debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 - optionalDependencies: + eslint: 9.39.3(jiti@2.6.1) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.54.0(eslint@8.57.1)(typescript@5.4.5)': + '@typescript-eslint/project-service@8.58.2(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.54.0 - debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.54.0(typescript@5.4.5)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.4.5) - '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/tsconfig-utils': 8.58.2(typescript@5.4.5) + '@typescript-eslint/types': 8.58.2 debug: 4.4.3(supports-color@5.5.0) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.18.0': + '@typescript-eslint/scope-manager@8.58.2': dependencies: - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/visitor-keys': 7.18.0 + '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/visitor-keys': 8.58.2 - '@typescript-eslint/scope-manager@8.54.0': - dependencies: - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/visitor-keys': 8.54.0 - - '@typescript-eslint/tsconfig-utils@8.54.0(typescript@5.4.5)': + '@typescript-eslint/tsconfig-utils@8.58.2(typescript@5.4.5)': dependencies: typescript: 5.4.5 - '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.4.5)': + '@typescript-eslint/type-utils@8.58.2(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5)': dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.4.5) + '@typescript-eslint/utils': 8.58.2(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 - ts-api-utils: 1.4.3(typescript@5.4.5) - optionalDependencies: + eslint: 9.39.3(jiti@2.6.1) + ts-api-utils: 2.5.0(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.54.0(eslint@8.57.1)(typescript@5.4.5)': + '@typescript-eslint/types@8.58.2': {} + + '@typescript-eslint/typescript-estree@8.58.2(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.4.5) - '@typescript-eslint/utils': 8.54.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/project-service': 8.58.2(typescript@5.4.5) + '@typescript-eslint/tsconfig-utils': 8.58.2(typescript@5.4.5) + '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/visitor-keys': 8.58.2 debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 - ts-api-utils: 2.4.0(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@5.45.0': {} - - '@typescript-eslint/types@7.18.0': {} - - '@typescript-eslint/types@8.54.0': {} - - '@typescript-eslint/typescript-estree@5.45.0(typescript@4.9.5)': - dependencies: - '@typescript-eslint/types': 5.45.0 - '@typescript-eslint/visitor-keys': 5.45.0 - debug: 4.4.3(supports-color@5.5.0) - globby: 11.1.0 - is-glob: 4.0.3 + minimatch: 10.2.5 semver: 7.7.3 - tsutils: 3.21.0(typescript@4.9.5) - optionalDependencies: - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@7.18.0(typescript@5.4.5)': - dependencies: - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.4.3(supports-color@5.5.0) - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.3 - ts-api-utils: 1.4.3(typescript@5.4.5) - optionalDependencies: + tinyglobby: 0.2.16 + ts-api-utils: 2.5.0(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.54.0(typescript@5.4.5)': + '@typescript-eslint/utils@8.58.2(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5)': dependencies: - '@typescript-eslint/project-service': 8.54.0(typescript@5.4.5) - '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.4.5) - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/visitor-keys': 8.54.0 - debug: 4.4.3(supports-color@5.5.0) - minimatch: 9.0.5 - semver: 7.7.3 - tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.4.5) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.58.2 + '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.4.5) + eslint: 9.39.3(jiti@2.6.1) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.4.5)': + '@typescript-eslint/visitor-keys@8.58.2': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) - eslint: 8.57.1 - transitivePeerDependencies: - - supports-color - - typescript + '@typescript-eslint/types': 8.58.2 + eslint-visitor-keys: 5.0.1 - '@typescript-eslint/utils@8.54.0(eslint@8.57.1)(typescript@5.4.5)': + '@unicode/unicode-17.0.0@1.6.16': {} + + '@zone-eu/mailsplit@5.4.8': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.4.5) - eslint: 8.57.1 - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@5.45.0': - dependencies: - '@typescript-eslint/types': 5.45.0 - eslint-visitor-keys: 3.4.3 - - '@typescript-eslint/visitor-keys@7.18.0': - dependencies: - '@typescript-eslint/types': 7.18.0 - eslint-visitor-keys: 3.4.3 - - '@typescript-eslint/visitor-keys@8.54.0': - dependencies: - '@typescript-eslint/types': 8.54.0 - eslint-visitor-keys: 4.2.1 - - '@ungap/structured-clone@1.3.0': {} + libbase64: 1.3.0 + libmime: 5.3.7 + libqp: 2.1.1 + optional: true JSONStream@1.3.5: dependencies: @@ -12906,20 +10381,23 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 + accepts@2.0.0: + dependencies: + mime-types: 3.0.2 + negotiator: 1.0.0 + ace-builds@1.43.4: {} - 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-walk@8.3.3: + acorn-walk@8.3.5: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 acorn@7.4.1: {} - acorn@8.15.0: {} - acorn@8.16.0: {} agent-base@6.0.2: @@ -12928,7 +10406,7 @@ snapshots: transitivePeerDependencies: - supports-color - agent-base@7.1.3: {} + agent-base@7.1.4: {} agentkeepalive@4.6.0: dependencies: @@ -12939,19 +10417,19 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 - ajv@6.12.6: + ajv@6.14.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.16.0: + ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 alce@1.2.0: dependencies: @@ -12967,17 +10445,9 @@ snapshots: dependencies: type-fest: 0.21.3 - ansi-fragments@0.2.1: - dependencies: - colorette: 1.4.0 - slice-ansi: 2.1.0 - strip-ansi: 5.2.0 - - ansi-regex@4.1.1: {} - ansi-regex@5.0.1: {} - ansi-regex@6.0.1: {} + ansi-regex@6.2.2: {} ansi-styles@3.2.1: dependencies: @@ -12989,7 +10459,7 @@ snapshots: ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} + ansi-styles@6.2.3: {} ansis@4.2.0: {} @@ -12998,15 +10468,13 @@ snapshots: anymatch@3.1.3: dependencies: normalize-path: 3.0.0 - picomatch: 2.3.1 + picomatch: 2.3.2 app-root-path@3.1.0: {} - appdirsjs@1.2.7: {} - append-field@1.0.0: {} - aproba@2.0.0: {} + aproba@2.1.0: {} arch@2.2.0: {} @@ -13025,6 +10493,10 @@ snapshots: argparse@2.0.1: {} + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + aria-query@5.3.2: {} array-buffer-byte-length@1.0.2: @@ -13038,63 +10510,56 @@ snapshots: array-ify@1.0.0: {} - array-includes@3.1.8: + array-includes@3.1.9: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 + call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.2 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 is-string: 1.1.1 + math-intrinsics: 1.1.0 array-union@2.1.0: {} array.prototype.findlast@1.2.5: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.2 es-errors: 1.3.0 es-object-atoms: 1.1.1 - es-shim-unscopables: 1.0.2 + es-shim-unscopables: 1.1.0 - array.prototype.findlastindex@1.2.5: + array.prototype.flat@1.3.3: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 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.0.2 - - array.prototype.flat@1.3.2: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-shim-unscopables: 1.0.2 + es-abstract: 1.24.2 + es-shim-unscopables: 1.1.0 array.prototype.flatmap@1.3.3: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.0 - es-shim-unscopables: 1.0.2 + es-abstract: 1.24.2 + es-shim-unscopables: 1.1.0 array.prototype.tosorted@1.1.4: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.2 es-errors: 1.3.0 - es-shim-unscopables: 1.0.2 + 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 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.2 es-errors: 1.3.0 get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 @@ -13107,7 +10572,7 @@ snapshots: asn1.js@5.4.1: dependencies: - bn.js: 4.12.2 + bn.js: 4.12.3 inherits: 2.0.4 minimalistic-assert: 1.0.1 safer-buffer: 2.1.2 @@ -13122,15 +10587,9 @@ snapshots: ast-types-flow@0.0.8: {} - ast-types@0.15.2: - dependencies: - tslib: 2.8.1 - - astral-regex@1.0.0: {} - astral-regex@2.0.0: {} - async-limiter@1.0.1: {} + async-function@1.0.0: {} async@3.2.6: {} @@ -13138,24 +10597,24 @@ snapshots: at-least-node@1.0.0: {} - autoprefixer@10.4.23(postcss@8.5.6): + autoprefixer@10.5.0(postcss@8.5.10): dependencies: - browserslist: 4.28.1 - caniuse-lite: 1.0.30001766 + browserslist: 4.28.2 + caniuse-lite: 1.0.30001788 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.6 + postcss: 8.5.10 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: dependencies: - possible-typed-array-names: 1.0.0 + possible-typed-array-names: 1.1.0 aws-sign2@0.7.0: {} aws4@1.13.2: {} - axe-core@4.11.0: {} + axe-core@4.11.3: {} axios-rate-limit@1.9.0(axios@1.15.0): dependencies: @@ -13171,10 +10630,6 @@ snapshots: axobject-query@4.1.0: {} - babel-core@7.0.0-bridge.0(@babel/core@7.29.0): - dependencies: - '@babel/core': 7.29.0 - babel-plugin-emotion@10.2.2: dependencies: '@babel/helper-module-imports': 7.28.6 @@ -13192,83 +10647,59 @@ snapshots: babel-plugin-macros@2.8.0: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 cosmiconfig: 6.0.0 - resolve: 1.22.11 + resolve: 1.22.12 babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 cosmiconfig: 7.1.0 - resolve: 1.22.11 + resolve: 1.22.12 - babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.28.6): - dependencies: - '@babel/compat-data': 7.28.6 - '@babel/core': 7.28.6 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.28.6) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.28.6): + babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.0): dependencies: '@babel/compat-data': 7.29.0 - '@babel/core': 7.28.6 - '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.28.6): + babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.6 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.28.6) - core-js-compat: 3.48.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.6): - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) core-js-compat: 3.49.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.28.6): + babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.6 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.28.6): + babel-plugin-syntax-hermes-parser@0.33.3: dependencies: - '@babel/core': 7.28.6 - '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.28.6) - transitivePeerDependencies: - - supports-color + hermes-parser: 0.33.3 babel-plugin-syntax-jsx@6.18.0: {} - babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.28.6): - dependencies: - '@babel/plugin-syntax-flow': 7.28.6(@babel/core@7.28.6) - transitivePeerDependencies: - - '@babel/core' - babel-walk@3.0.0-canary-5: dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 bail@2.0.2: {} balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + base64-js@1.5.1: {} - baseline-browser-mapping@2.9.18: {} + baseline-browser-mapping@2.10.19: {} bcrypt-pbkdf@1.0.2: dependencies: @@ -13276,7 +10707,7 @@ snapshots: bcrypt@6.0.0: dependencies: - node-addon-api: 8.5.0 + node-addon-api: 8.7.0 node-gyp-build: 4.8.4 binary-extensions@2.3.0: {} @@ -13297,7 +10728,7 @@ snapshots: blueimp-md5@2.19.0: {} - bn.js@4.12.2: {} + bn.js@4.12.3: {} body-parser@1.20.3: dependencies: @@ -13322,31 +10753,30 @@ snapshots: bowser@2.13.1: {} - brace-expansion@1.1.12: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - brace-expansion@1.1.14: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.2: + brace-expansion@2.1.0: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.5: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 - browserslist@4.28.1: + browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.9.18 - caniuse-lite: 1.0.30001766 - electron-to-chromium: 1.5.279 - node-releases: 2.0.27 - update-browserslist-db: 1.2.3(browserslist@4.28.1) + baseline-browser-mapping: 2.10.19 + caniuse-lite: 1.0.30001788 + electron-to-chromium: 1.5.337 + node-releases: 2.0.37 + update-browserslist-db: 1.2.3(browserslist@4.28.2) bser@2.1.1: dependencies: @@ -13385,7 +10815,7 @@ snapshots: lru-cache: 6.0.0 minipass: 3.3.6 minipass-collect: 1.0.2 - minipass-flush: 1.0.5 + minipass-flush: 1.0.7 minipass-pipeline: 1.2.4 mkdirp: 1.0.4 p-map: 4.0.0 @@ -13409,7 +10839,7 @@ snapshots: lru-cache: 7.18.3 minipass: 3.3.6 minipass-collect: 1.0.2 - minipass-flush: 1.0.5 + minipass-flush: 1.0.7 minipass-pipeline: 1.2.4 mkdirp: 1.0.4 p-map: 4.0.0 @@ -13430,7 +10860,7 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 - call-bind@1.0.8: + call-bind@1.0.9: dependencies: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 @@ -13444,16 +10874,6 @@ snapshots: call-me-maybe@1.0.2: {} - caller-callsite@2.0.0: - dependencies: - callsites: 2.0.0 - - caller-path@2.0.0: - dependencies: - caller-callsite: 2.0.0 - - callsites@2.0.0: {} - callsites@3.1.0: {} camelcase-css@2.0.1: {} @@ -13468,7 +10888,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001766: {} + caniuse-lite@1.0.30001788: {} caseless@0.12.0: {} @@ -13489,9 +10909,6 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.3.0: - optional: true - character-entities@2.0.2: {} character-parser@2.2.0: @@ -13502,24 +10919,42 @@ snapshots: check-more-types@2.24.0: {} + cheerio-select@1.6.0: + dependencies: + css-select: 4.3.0 + css-what: 6.2.2 + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + cheerio-select@2.1.0: dependencies: boolbase: 1.0.0 - css-select: 5.1.0 - css-what: 6.1.0 + css-select: 5.2.2 + css-what: 6.2.2 domelementtype: 2.3.0 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 + + cheerio@1.0.0-rc.10: + dependencies: + cheerio-select: 1.6.0 + dom-serializer: 1.4.1 + domhandler: 4.3.1 + htmlparser2: 6.1.0 + parse5: 6.0.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + tslib: 2.8.1 cheerio@1.0.0-rc.12: dependencies: cheerio-select: 2.1.0 dom-serializer: 2.0.0 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 htmlparser2: 8.0.2 - parse5: 7.1.2 - parse5-htmlparser2-tree-adapter: 7.0.0 + parse5: 7.3.0 + parse5-htmlparser2-tree-adapter: 7.1.0 chokidar@3.6.0: dependencies: @@ -13546,11 +10981,21 @@ snapshots: transitivePeerDependencies: - supports-color + chromium-edge-launcher@0.3.0: + dependencies: + '@types/node': 22.10.5 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 1.4.2 + mkdirp: 1.0.4 + transitivePeerDependencies: + - supports-color + ci-info@2.0.0: {} ci-info@3.9.0: {} - ci-info@4.3.1: {} + ci-info@4.4.0: {} classnames@2.5.1: {} @@ -13582,12 +11027,6 @@ snapshots: client-only@0.0.1: {} - cliui@6.0.0: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - cliui@7.0.4: dependencies: string-width: 4.2.3 @@ -13600,12 +11039,6 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clone-deep@4.0.1: - dependencies: - is-plain-object: 2.0.4 - kind-of: 6.0.3 - shallow-clone: 3.0.1 - clone@1.0.4: {} clone@2.1.2: {} @@ -13633,7 +11066,7 @@ snapshots: color-string@1.9.1: dependencies: color-name: 1.1.4 - simple-swizzle: 0.2.2 + simple-swizzle: 0.2.4 color-string@2.1.4: dependencies: @@ -13651,8 +11084,6 @@ snapshots: color-convert: 3.1.3 color-string: 2.1.4 - colorette@1.4.0: {} - colorette@2.0.20: {} colors@1.4.0: @@ -13664,14 +11095,14 @@ snapshots: comma-separated-tokens@2.0.3: {} - command-exists@1.2.9: {} + commander@12.1.0: {} + + commander@14.0.3: {} commander@2.20.3: {} commander@4.1.1: {} - commander@5.1.0: {} - commander@6.2.1: {} commander@7.2.0: {} @@ -13700,28 +11131,12 @@ snapshots: common-tags@1.8.2: {} - commondir@1.0.1: {} - compare-func@2.0.0: dependencies: array-ify: 1.0.0 dot-prop: 5.3.0 - compressible@2.0.18: - dependencies: - mime-db: 1.54.0 - - compression@1.8.1: - dependencies: - bytes: 3.1.2 - compressible: 2.0.18 - debug: 2.6.9 - negotiator: 0.6.4 - on-headers: 1.1.0 - safe-buffer: 5.2.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color + component-emitter@1.3.1: {} computed-style@0.1.4: {} @@ -13734,13 +11149,13 @@ snapshots: readable-stream: 2.3.8 typedarray: 0.0.6 - connect-typeorm@1.1.4(typeorm@0.3.28(babel-plugin-macros@3.1.0)(pg@8.17.2)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5))): + connect-typeorm@1.1.4(typeorm@0.3.28(babel-plugin-macros@3.1.0)(pg@8.17.2)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.4.5))): dependencies: '@types/debug': 0.0.31 '@types/express-session': 1.18.2 debug: 4.4.3(supports-color@5.5.0) express-session: 1.18.2 - typeorm: 0.3.28(babel-plugin-macros@3.1.0)(pg@8.17.2)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5)) + typeorm: 0.3.28(babel-plugin-macros@3.1.0)(pg@8.17.2)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.4.5)) transitivePeerDependencies: - supports-color @@ -13757,8 +11172,8 @@ snapshots: constantinople@4.0.1: dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 content-disposition@0.5.4: dependencies: @@ -13785,6 +11200,12 @@ snapshots: meow: 8.1.2 split2: 3.2.2 + conventional-commits-parser@6.4.0: + dependencies: + '@simple-libs/stream-utils': 1.2.0 + meow: 13.2.0 + optional: true + convert-source-map@1.9.0: {} convert-source-map@2.0.0: {} @@ -13804,7 +11225,9 @@ snapshots: cookie@0.7.2: {} - cookie@1.0.2: {} + cookie@1.1.1: {} + + cookiejar@2.1.4: {} copy-to-clipboard@3.3.3: dependencies: @@ -13813,54 +11236,43 @@ snapshots: copyfiles@2.4.1: dependencies: glob: 7.2.3 - minimatch: 3.1.2 + minimatch: 3.1.5 mkdirp: 1.0.4 noms: 0.0.0 through2: 2.0.5 untildify: 4.0.0 yargs: 16.2.0 - core-js-compat@3.48.0: - dependencies: - browserslist: 4.28.1 - core-js-compat@3.49.0: dependencies: - browserslist: 4.28.1 + browserslist: 4.28.2 core-util-is@1.0.2: {} core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.4.5))(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5))(typescript@5.4.5): + cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.4.5))(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.4.5))(typescript@5.4.5): dependencies: '@types/node': 20.5.1 cosmiconfig: 8.3.6(typescript@5.4.5) - ts-node: 10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@22.10.5)(typescript@5.4.5) typescript: 5.4.5 - cosmiconfig-typescript-loader@5.0.0(@types/node@22.10.5)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5): + cosmiconfig-typescript-loader@6.3.0(@types/node@22.10.5)(cosmiconfig@9.0.1(typescript@5.4.5))(typescript@5.4.5): dependencies: '@types/node': 22.10.5 - cosmiconfig: 9.0.0(typescript@5.4.5) - jiti: 1.21.6 + cosmiconfig: 9.0.1(typescript@5.4.5) + jiti: 2.6.1 typescript: 5.4.5 optional: true - cosmiconfig@5.2.1: - dependencies: - import-fresh: 2.0.0 - is-directory: 0.3.1 - js-yaml: 3.14.2 - parse-json: 4.0.0 - cosmiconfig@6.0.0: dependencies: '@types/parse-json': 4.0.2 import-fresh: 3.3.1 parse-json: 5.2.0 path-type: 4.0.0 - yaml: 1.10.2 + yaml: 1.10.3 cosmiconfig@7.1.0: dependencies: @@ -13868,7 +11280,7 @@ snapshots: import-fresh: 3.3.1 parse-json: 5.2.0 path-type: 4.0.0 - yaml: 1.10.2 + yaml: 1.10.3 cosmiconfig@8.3.6(typescript@5.4.5): dependencies: @@ -13879,7 +11291,7 @@ snapshots: optionalDependencies: typescript: 5.4.5 - cosmiconfig@9.0.0(typescript@5.4.5): + cosmiconfig@9.0.1(typescript@5.4.5): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 @@ -13895,19 +11307,10 @@ snapshots: cron-parser@4.9.0: dependencies: - luxon: 3.4.4 + luxon: 3.7.2 cronstrue@2.23.0: {} - cross-spawn@6.0.6: - dependencies: - nice-try: 1.0.5 - path-key: 2.0.1 - semver: 5.7.2 - shebang-command: 1.2.0 - which: 1.3.1 - optional: true - cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -13917,31 +11320,36 @@ snapshots: css-select@4.3.0: dependencies: boolbase: 1.0.0 - css-what: 6.1.0 + css-what: 6.2.2 domhandler: 4.3.1 domutils: 2.8.0 nth-check: 2.1.1 - css-select@5.1.0: + css-select@5.2.2: dependencies: boolbase: 1.0.0 - css-what: 6.1.0 + css-what: 6.2.2 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 nth-check: 2.1.1 - css-tree@1.1.3: + css-tree@2.2.1: dependencies: - mdn-data: 2.0.14 - source-map: 0.6.1 + mdn-data: 2.0.28 + source-map-js: 1.2.1 - css-what@6.1.0: {} + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.1 + + css-what@6.2.2: {} cssesc@3.0.0: {} - csso@4.2.0: + csso@5.0.5: dependencies: - css-tree: 1.1.3 + css-tree: 2.2.1 csstype@2.6.21: {} @@ -13962,12 +11370,12 @@ snapshots: cachedir: 2.4.0 chalk: 4.1.2 check-more-types: 2.24.0 - ci-info: 4.3.1 + ci-info: 4.4.0 cli-cursor: 3.1.0 cli-table3: 0.6.1 commander: 6.2.1 common-tags: 1.8.2 - dayjs: 1.11.19 + dayjs: 1.11.20 debug: 4.4.3(supports-color@8.1.1) enquirer: 2.4.1 eventemitter2: 6.4.7 @@ -14005,7 +11413,7 @@ snapshots: longest: 2.0.1 word-wrap: 1.2.5 optionalDependencies: - '@commitlint/load': 19.2.0(@types/node@22.10.5)(typescript@5.4.5) + '@commitlint/load': 20.5.0(@types/node@22.10.5)(typescript@5.4.5) transitivePeerDependencies: - '@types/node' - typescript @@ -14038,7 +11446,7 @@ snapshots: date-fns@2.29.3: {} - dayjs@1.11.19: {} + dayjs@1.11.20: {} debug@2.6.9: dependencies: @@ -14071,7 +11479,7 @@ snapshots: decimal.js@10.6.0: {} - decode-named-character-reference@1.0.2: + decode-named-character-reference@1.3.0: dependencies: character-entities: 2.0.2 @@ -14081,7 +11489,7 @@ snapshots: dedent@0.7.0: {} - dedent@1.7.1(babel-plugin-macros@3.1.0): + dedent@1.7.2(babel-plugin-macros@3.1.0): optionalDependencies: babel-plugin-macros: 3.1.0 @@ -14113,8 +11521,6 @@ snapshots: delegates@1.0.0: {} - denodeify@1.2.1: {} - depd@2.0.0: {} dequal@2.0.3: {} @@ -14125,11 +11531,16 @@ snapshots: detect-indent@6.1.0: {} - detect-libc@2.0.3: {} + detect-libc@2.1.2: {} detect-newline@3.1.0: optional: true + dezalgo@1.0.4: + dependencies: + asap: 2.0.6 + wrappy: 1.0.2 + didyoumean@1.2.2: {} diff-match-patch@1.0.5: {} @@ -14142,31 +11553,27 @@ snapshots: dependencies: path-type: 4.0.0 - display-notification@2.0.0: + display-notification@3.0.0: dependencies: - escape-string-applescript: 1.0.0 - run-applescript: 3.2.0 + escape-string-applescript: 3.0.0 + run-applescript: 5.0.0 optional: true dlv@1.1.3: {} - dns-caching@0.2.7: + dns-caching@0.2.9: dependencies: - lru-cache: 11.2.1 + lru-cache: 11.3.5 doctrine@2.1.0: dependencies: esutils: 2.0.3 - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - doctypes@1.1.0: {} dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 csstype: 3.2.3 dom-serializer@1.4.1: @@ -14201,12 +11608,17 @@ snapshots: domelementtype: 2.3.0 domhandler: 4.3.1 - domutils@3.1.0: + domutils@3.2.2: dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + dot-prop@5.3.0: dependencies: is-obj: 2.0.0 @@ -14232,19 +11644,19 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.279: {} + electron-to-chromium@1.5.337: {} - email-templates@12.0.3(@babel/core@7.28.6)(encoding@0.1.13)(handlebars@4.7.8)(mustache@4.2.0)(pug@3.0.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.7): + email-templates@12.0.3(@babel/core@7.29.0)(encoding@0.1.13)(mustache@4.2.0)(pug@3.0.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.8): dependencies: - '@ladjs/consolidate': 1.0.4(@babel/core@7.28.6)(handlebars@4.7.8)(lodash@4.17.23)(mustache@4.2.0)(pug@3.0.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.7) + '@ladjs/consolidate': 1.0.4(@babel/core@7.29.0)(lodash@4.17.23)(mustache@4.2.0)(pug@3.0.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.8) '@ladjs/i18n': 8.0.3 get-paths: 0.0.7 html-to-text: 9.0.5 juice: 10.0.1(encoding@0.1.13) lodash: 4.17.23 - nodemailer: 6.10.0 + nodemailer: 6.10.1 optionalDependencies: - preview-email: 3.1.0 + preview-email: 3.1.3 transitivePeerDependencies: - '@babel/core' - arc-templates @@ -14296,8 +11708,6 @@ snapshots: - walrus - whiskers - emoji-regex@10.3.0: {} - emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -14322,11 +11732,6 @@ snapshots: dependencies: once: 1.4.0 - enhanced-resolve@5.17.0: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 @@ -14336,9 +11741,9 @@ snapshots: entities@4.5.0: {} - env-paths@2.2.1: {} + entities@6.0.1: {} - envinfo@7.21.0: {} + env-paths@2.2.1: {} err-code@2.0.3: {} @@ -14350,17 +11755,12 @@ snapshots: dependencies: stackframe: 1.3.4 - errorhandler@1.5.2: - dependencies: - accepts: 1.3.8 - escape-html: 1.0.3 - - es-abstract@1.24.0: + es-abstract@1.24.2: 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-bind: 1.0.9 call-bound: 1.0.4 data-view-buffer: 1.0.2 data-view-byte-length: 1.0.2 @@ -14410,18 +11810,18 @@ snapshots: typed-array-byte-offset: 1.0.4 typed-array-length: 1.0.7 unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 + which-typed-array: 1.1.20 es-define-property@1.0.1: {} es-errors@1.3.0: {} - es-iterator-helpers@1.2.1: + es-iterator-helpers@1.3.2: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.2 es-errors: 1.3.0 es-set-tostringtag: 2.1.0 function-bind: 1.1.2 @@ -14433,7 +11833,7 @@ snapshots: has-symbols: 1.1.0 internal-slot: 1.1.0 iterator.prototype: 1.1.5 - safe-array-concat: 1.1.3 + math-intrinsics: 1.1.0 es-object-atoms@1.1.1: dependencies: @@ -14446,7 +11846,7 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - es-shim-unscopables@1.0.2: + es-shim-unscopables@1.1.0: dependencies: hasown: 2.0.2 @@ -14462,185 +11862,93 @@ snapshots: escape-html@1.0.3: {} - escape-string-applescript@1.0.0: + escape-string-applescript@3.0.0: optional: true escape-string-regexp@1.0.5: {} - escape-string-regexp@2.0.0: {} - escape-string-regexp@4.0.0: {} - eslint-config-next@14.2.35(eslint@8.57.1)(typescript@5.4.5): + eslint-config-prettier@10.1.8(eslint@9.39.3(jiti@2.6.1)): dependencies: - '@next/eslint-plugin-next': 14.2.35 - '@rushstack/eslint-patch': 1.10.3 - '@typescript-eslint/eslint-plugin': 8.54.0(@typescript-eslint/parser@8.54.0(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/parser': 8.54.0(eslint@8.57.1)(typescript@5.4.5) - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@8.54.0(eslint@8.57.1)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.1) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1) - eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) - eslint-plugin-react: 7.37.5(eslint@8.57.1) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.1) - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - supports-color + eslint: 9.39.3(jiti@2.6.1) - eslint-config-prettier@8.6.0(eslint@8.57.1): + eslint-plugin-formatjs@6.2.0(eslint@9.39.3(jiti@2.6.1)): dependencies: - eslint: 8.57.1 - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7(supports-color@8.1.1) - is-core-module: 2.16.1 - resolve: 1.22.11 + '@formatjs/icu-messageformat-parser': 3.5.1 + '@formatjs/ts-transformer': 4.4.0 + '@types/picomatch': 4.0.3 + '@unicode/unicode-17.0.0': 1.6.16 + eslint: 9.39.3(jiti@2.6.1) + magic-string: 0.30.21 + picomatch: 4.0.4 + tslib: 2.8.1 transitivePeerDependencies: - - supports-color - - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.54.0(eslint@8.57.1)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.1): - dependencies: - debug: 4.4.3(supports-color@5.5.0) - enhanced-resolve: 5.17.0 - eslint: 8.57.1 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@8.54.0(eslint@8.57.1)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1) - fast-glob: 3.3.3 - get-tsconfig: 4.13.0 - is-core-module: 2.16.1 - is-glob: 4.0.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): - dependencies: - debug: 3.2.7(supports-color@8.1.1) - optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.4.5) - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.8.1(@typescript-eslint/parser@8.54.0(eslint@8.57.1)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1): - dependencies: - debug: 3.2.7(supports-color@8.1.1) - optionalDependencies: - '@typescript-eslint/parser': 8.54.0(eslint@8.57.1)(typescript@5.4.5) - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@8.54.0(eslint@8.57.1)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.1) - transitivePeerDependencies: - - supports-color - - eslint-plugin-formatjs@4.9.0(eslint@8.57.1): - dependencies: - '@formatjs/icu-messageformat-parser': 2.3.0 - '@formatjs/ts-transformer': 3.12.0 - '@types/eslint': 8.56.10 - '@types/picomatch': 2.3.3 - '@typescript-eslint/typescript-estree': 5.45.0(typescript@4.9.5) - emoji-regex: 10.3.0 - eslint: 8.57.1 - magic-string: 0.29.0 - picomatch: 2.3.1 - tslib: 2.4.0 - typescript: 4.9.5 - unicode-emoji-utils: 1.2.0 - transitivePeerDependencies: - - supports-color - ts-jest - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1): - dependencies: - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.3 - debug: 3.2.7(supports-color@8.1.1) - doctrine: 2.1.0 - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.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 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.4.5) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.3(jiti@2.6.1)): dependencies: aria-query: 5.3.2 - array-includes: 3.1.8 + array-includes: 3.1.9 array.prototype.flatmap: 1.3.3 ast-types-flow: 0.0.8 - axe-core: 4.11.0 + axe-core: 4.11.3 axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.57.1 + eslint: 9.39.3(jiti@2.6.1) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 - minimatch: 3.1.2 + minimatch: 3.1.5 object.fromentries: 2.0.8 safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 eslint-plugin-no-relative-import-paths@1.6.1: {} - eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.6.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.8.1): + eslint-plugin-prettier@4.2.1(eslint-config-prettier@10.1.8(eslint@9.39.3(jiti@2.6.1)))(eslint@9.39.3(jiti@2.6.1))(prettier@3.8.1): dependencies: - eslint: 8.57.1 + eslint: 9.39.3(jiti@2.6.1) prettier: 3.8.1 - prettier-linter-helpers: 1.0.0 + prettier-linter-helpers: 1.0.1 optionalDependencies: - eslint-config-prettier: 8.6.0(eslint@8.57.1) + eslint-config-prettier: 10.1.8(eslint@9.39.3(jiti@2.6.1)) - eslint-plugin-react-hooks@4.6.0(eslint@8.57.1): + eslint-plugin-react-hooks@7.0.1(eslint@9.39.3(jiti@2.6.1)): dependencies: - eslint: 8.57.1 + '@babel/core': 7.29.0 + '@babel/parser': 7.29.2 + eslint: 9.39.3(jiti@2.6.1) + hermes-parser: 0.25.1 + zod: 4.3.6 + zod-validation-error: 4.0.2(zod@4.3.6) + transitivePeerDependencies: + - supports-color - eslint-plugin-react@7.37.5(eslint@8.57.1): + eslint-plugin-react@7.37.5(eslint@9.39.3(jiti@2.6.1)): dependencies: - array-includes: 3.1.8 + 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: 8.57.1 + es-iterator-helpers: 1.3.2 + eslint: 9.39.3(jiti@2.6.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 + minimatch: 3.1.5 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 + resolve: 2.0.0-next.6 semver: 6.3.1 string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-scope@7.2.2: + eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 @@ -14649,60 +11957,58 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@8.57.1: + eslint-visitor-keys@5.0.1: {} + + eslint@9.39.3(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 + '@eslint/config-array': 0.21.2 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.5 + '@eslint/js': 9.39.3 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.3.0 - ajv: 6.12.6 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.14.0 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.3(supports-color@5.5.0) - doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.1 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 lodash.merge: 4.6.2 - minimatch: 3.1.2 + minimatch: 3.1.5 natural-compare: 1.4.0 optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 + optionalDependencies: + jiti: 2.6.1 transitivePeerDependencies: - supports-color - espree@9.6.1: + espree@10.4.0: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - eslint-visitor-keys: 3.4.3 + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 4.2.1 esprima@1.2.5: optional: true - esprima@4.0.1: {} - esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -14724,17 +12030,6 @@ snapshots: eventemitter2@6.4.7: {} - execa@0.10.0: - dependencies: - cross-spawn: 6.0.6 - get-stream: 3.0.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.7 - strip-eof: 1.0.0 - optional: true - execa@4.1.0: dependencies: cross-spawn: 7.0.6 @@ -14785,16 +12080,16 @@ snapshots: express-openapi-validator@4.13.8: dependencies: - '@types/multer': 1.4.12 - ajv: 6.12.6 + '@types/multer': 1.4.13 + ajv: 6.14.0 content-type: 1.0.5 json-schema-ref-parser: 9.0.9 lodash.clonedeep: 4.5.0 lodash.get: 4.4.2 lodash.uniq: 4.5.0 - lodash.zipobject: 4.1.3 + lodash.zipobject: 4.18.0 media-typer: 1.1.0 - multer: 1.4.5-lts.1 + multer: 1.4.5-lts.2 ono: 7.1.3 path-to-regexp: 6.3.0 @@ -14874,12 +12169,18 @@ snapshots: extsprintf@1.3.0: {} - extsprintf@1.4.1: {} - fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} + 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 @@ -14894,13 +12195,15 @@ snapshots: fast-printf@1.6.10: {} - fast-xml-parser@4.5.6: - dependencies: - strnum: 1.1.2 + fast-safe-stringify@2.1.1: {} - fastq@1.17.1: + fast-uri@3.1.0: {} + + fastq@1.20.1: dependencies: - reusify: 1.0.4 + reusify: 1.1.0 + + fb-dotslash@0.5.8: {} fb-watchman@2.0.2: dependencies: @@ -14910,9 +12213,9 @@ snapshots: dependencies: pend: 1.2.0 - fdir@6.5.0(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.4): optionalDependencies: - picomatch: 4.0.3 + picomatch: 4.0.4 fecha@4.2.3: {} @@ -14920,9 +12223,9 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 - file-entry-cache@6.0.1: + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.2.0 + flat-cache: 4.0.1 file-stream-rotator@0.6.1: dependencies: @@ -14958,12 +12261,6 @@ snapshots: transitivePeerDependencies: - supports-color - find-cache-dir@2.1.0: - dependencies: - commondir: 1.0.1 - make-dir: 2.1.0 - pkg-dir: 3.0.0 - find-node-modules@2.1.3: dependencies: findup-sync: 4.0.0 @@ -14971,10 +12268,6 @@ snapshots: find-root@1.1.0: {} - find-up@3.0.0: - dependencies: - locate-path: 3.0.0 - find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -15002,18 +12295,15 @@ snapshots: rc: 1.2.8 optional: true - flat-cache@3.2.0: + flat-cache@4.0.1: dependencies: - flatted: 3.3.3 + flatted: 3.4.2 keyv: 4.5.4 - rimraf: 3.0.2 - flatted@3.3.3: {} + flatted@3.4.2: {} flow-enums-runtime@0.0.6: {} - flow-parser@0.309.0: {} - fn.name@1.1.0: {} follow-redirects@1.16.0: {} @@ -15022,7 +12312,7 @@ snapshots: dependencies: is-callable: 1.2.7 - foreground-child@3.2.1: + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 @@ -15037,17 +12327,25 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 - formik@2.4.9(react@18.3.1): + formidable@3.5.4: dependencies: - '@types/hoist-non-react-statics': 3.3.5 + '@paralleldrive/cuid2': 2.3.1 + dezalgo: 1.0.4 + once: 1.4.0 + + formik@2.4.9(@types/react@18.3.28)(react@18.3.1): + dependencies: + '@types/hoist-non-react-statics': 3.3.7(@types/react@18.3.28) deepmerge: 2.2.1 hoist-non-react-statics: 3.3.2 lodash: 4.17.23 - lodash-es: 4.17.23 + lodash-es: 4.18.1 react: 18.3.1 react-fast-compare: 2.0.4 tiny-warning: 1.0.3 tslib: 2.8.1 + transitivePeerDependencies: + - '@types/react' forwarded@0.2.0: {} @@ -15057,23 +12355,17 @@ snapshots: fs-constants@1.0.0: {} - fs-extra@11.2.0: + fs-extra@11.3.4: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.1.0 + jsonfile: 6.2.0 universalify: 2.0.1 - fs-extra@8.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - fs-extra@9.1.0: dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.11 - jsonfile: 6.1.0 + jsonfile: 6.2.0 universalify: 2.0.1 fs-minipass@2.1.0: @@ -15089,7 +12381,7 @@ snapshots: function.prototype.name@1.1.8: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 functions-have-names: 1.2.3 @@ -15100,7 +12392,7 @@ snapshots: gauge@4.0.4: dependencies: - aproba: 2.0.0 + aproba: 2.1.0 color-support: 1.1.3 console-control-strings: 1.1.0 has-unicode: 2.0.1 @@ -15109,6 +12401,8 @@ snapshots: strip-ansi: 6.0.1 wide-align: 1.1.5 + generator-function@2.0.1: {} + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -15138,12 +12432,9 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-stream@3.0.0: - optional: true - get-stream@5.2.0: dependencies: - pump: 3.0.3 + pump: 3.0.4 get-stream@6.0.1: {} @@ -15153,7 +12444,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.13.0: + get-tsconfig@4.14.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -15183,20 +12474,12 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.3.10: - dependencies: - foreground-child: 3.2.1 - jackspeak: 2.3.6 - minimatch: 9.0.4 - minipass: 7.1.2 - path-scurry: 1.11.1 - glob@10.5.0: dependencies: - foreground-child: 3.2.1 + foreground-child: 3.3.1 jackspeak: 3.4.3 - minimatch: 9.0.4 - minipass: 7.1.2 + minimatch: 9.0.9 + minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 @@ -15205,7 +12488,7 @@ snapshots: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 3.1.5 once: 1.4.0 path-is-absolute: 1.0.1 @@ -15214,7 +12497,7 @@ snapshots: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 5.1.6 + minimatch: 5.1.9 once: 1.4.0 global-directory@4.0.1: @@ -15244,9 +12527,9 @@ snapshots: is-windows: 1.0.2 which: 1.3.1 - globals@13.24.0: - dependencies: - type-fest: 0.20.2 + globals@14.0.0: {} + + globals@17.5.0: {} globalthis@1.0.4: dependencies: @@ -15266,26 +12549,14 @@ snapshots: graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - gravatar-url@3.1.0: dependencies: md5-hex: 3.0.1 type-fest: 0.8.1 - handlebars@4.7.8: - dependencies: - minimist: 1.2.8 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.19.3 - optional: true - hard-rejection@2.1.0: {} - has-bigints@1.0.2: {} + has-bigints@1.1.0: {} has-flag@3.0.0: {} @@ -15321,21 +12592,25 @@ snapshots: he@1.2.0: optional: true - hermes-estree@0.19.1: {} + hermes-compiler@250829098.0.10: {} - hermes-estree@0.23.1: {} + hermes-estree@0.25.1: {} - hermes-parser@0.19.1: + hermes-estree@0.33.3: {} + + hermes-estree@0.35.0: {} + + hermes-parser@0.25.1: dependencies: - hermes-estree: 0.19.1 + hermes-estree: 0.25.1 - hermes-parser@0.23.1: + hermes-parser@0.33.3: dependencies: - hermes-estree: 0.23.1 + hermes-estree: 0.33.3 - hermes-profile-transformer@0.0.6: + hermes-parser@0.35.0: dependencies: - source-map: 0.7.6 + hermes-estree: 0.35.0 hoist-non-react-statics@3.3.2: dependencies: @@ -15359,13 +12634,6 @@ snapshots: htmlparser2: 8.0.2 selderee: 0.11.0 - htmlparser2@4.1.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 3.3.0 - domutils: 2.8.0 - entities: 2.2.0 - htmlparser2@5.0.1: dependencies: domelementtype: 2.3.0 @@ -15373,14 +12641,21 @@ snapshots: domutils: 2.8.0 entities: 2.2.0 + htmlparser2@6.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + entities: 2.2.0 + htmlparser2@8.0.2: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 entities: 4.5.0 - http-cache-semantics@4.1.1: {} + http-cache-semantics@4.2.0: {} http-errors@2.0.0: dependencies: @@ -15417,7 +12692,7 @@ snapshots: http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.3(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -15439,7 +12714,7 @@ snapshots: https-proxy-agent@7.0.6: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.3(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -15460,12 +12735,12 @@ snapshots: dependencies: '@ladjs/country-language': 0.2.1 - i18n@0.15.1: + i18n@0.15.3: dependencies: '@messageformat/core': 3.4.0 debug: 4.4.3(supports-color@5.5.0) fast-printf: 1.6.10 - make-plural: 7.4.0 + make-plural: 7.5.0 math-interval-parser: 2.0.1 mustache: 4.2.0 transitivePeerDependencies: @@ -15480,6 +12755,11 @@ snapshots: safer-buffer: 2.1.2 optional: true + iconv-lite@0.7.2: + dependencies: + safer-buffer: 2.1.2 + optional: true + ieee754@1.2.1: {} ignore-by-default@1.0.1: {} @@ -15492,17 +12772,12 @@ snapshots: dependencies: queue: 6.0.2 - import-fresh@2.0.0: - dependencies: - caller-path: 2.0.0 - resolve-from: 3.0.0 - import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - import-meta-resolve@4.1.0: + import-meta-resolve@4.2.0: optional: true imurmurhash@0.1.4: {} @@ -15551,41 +12826,49 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 - intl-messageformat@10.5.14: + intl-messageformat@10.7.18: dependencies: - '@formatjs/ecma402-abstract': 2.0.0 - '@formatjs/fast-memoize': 2.2.0 - '@formatjs/icu-messageformat-parser': 2.7.8 + '@formatjs/ecma402-abstract': 2.3.6 + '@formatjs/fast-memoize': 2.2.7 + '@formatjs/icu-messageformat-parser': 2.11.4 + tslib: 2.8.1 + + intl-messageformat@10.7.7: + dependencies: + '@formatjs/ecma402-abstract': 2.2.4 + '@formatjs/fast-memoize': 2.2.3 + '@formatjs/icu-messageformat-parser': 2.9.4 tslib: 2.8.1 invariant@2.2.4: dependencies: loose-envify: 1.4.0 - ip-address@9.0.5: - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.3 + ip-address@10.1.0: {} ipaddr.js@1.9.1: {} is-array-buffer@3.0.5: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 get-intrinsic: 1.3.0 is-arrayish@0.2.1: {} - is-arrayish@0.3.2: {} + is-arrayish@0.3.4: {} - is-async-function@2.0.0: + 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.0.2 + has-bigints: 1.1.0 is-binary-path@2.1.0: dependencies: @@ -15615,8 +12898,6 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-directory@0.3.1: {} - is-docker@2.2.1: {} is-expression@4.0.0: @@ -15630,15 +12911,17 @@ snapshots: dependencies: call-bound: 1.0.4 - is-fullwidth-code-point@2.0.0: {} - is-fullwidth-code-point@3.0.0: {} is-fullwidth-code-point@4.0.0: {} - is-generator-function@1.0.10: + is-generator-function@1.1.2: dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 is-glob@4.0.3: dependencies: @@ -15672,10 +12955,6 @@ snapshots: is-plain-obj@4.1.0: {} - is-plain-object@2.0.4: - dependencies: - isobject: 3.0.1 - is-promise@2.2.2: {} is-regex@1.2.1: @@ -15691,9 +12970,6 @@ snapshots: dependencies: call-bound: 1.0.4 - is-stream@1.1.0: - optional: true - is-stream@2.0.1: {} is-stream@3.0.0: {} @@ -15715,7 +12991,7 @@ snapshots: is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.19 + which-typed-array: 1.1.20 is-typedarray@1.0.0: {} @@ -15729,15 +13005,13 @@ snapshots: dependencies: call-bound: 1.0.4 - is-weakset@2.0.3: + is-weakset@2.0.4: dependencies: - call-bind: 1.0.8 + call-bound: 1.0.4 get-intrinsic: 1.3.0 is-windows@1.0.2: {} - is-wsl@1.1.0: {} - is-wsl@2.2.0: dependencies: is-docker: 2.2.1 @@ -15750,8 +13024,6 @@ snapshots: isexe@2.0.0: {} - isobject@3.0.1: {} - isstream@0.1.2: {} iterator.prototype@1.1.5: @@ -15763,18 +13035,19 @@ snapshots: has-symbols: 1.1.0 set-function-name: 2.0.2 - its-fine@1.2.5(@types/react@18.3.27)(react@18.3.1): + its-fine@1.2.5(@types/react@18.3.28)(react@18.3.1): dependencies: - '@types/react-reconciler': 0.28.9(@types/react@18.3.27) + '@types/react-reconciler': 0.28.9(@types/react@18.3.28) react: 18.3.1 transitivePeerDependencies: - '@types/react' - jackspeak@2.3.6: + its-fine@2.0.0(@types/react@18.3.28)(react@18.3.1): dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 + '@types/react-reconciler': 0.28.9(@types/react@18.3.28) + react: 18.3.1 + transitivePeerDependencies: + - '@types/react' jackspeak@3.4.3: dependencies: @@ -15782,35 +13055,8 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jest-environment-node@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.10.5 - jest-mock: 29.7.0 - jest-util: 29.7.0 - jest-get-type@29.6.3: {} - jest-message-util@29.7.0: - dependencies: - '@babel/code-frame': 7.29.0 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 - - jest-mock@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 22.10.5 - jest-util: 29.7.0 - jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 @@ -15836,71 +13082,26 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jiti@1.21.6: - optional: true - jiti@1.21.7: {} - joi@17.13.3: - dependencies: - '@hapi/hoek': 9.3.0 - '@hapi/topo': 5.1.0 - '@sideway/address': 4.1.5 - '@sideway/formula': 3.0.1 - '@sideway/pinpoint': 2.0.0 + jiti@2.6.1: {} js-stringify@1.0.2: {} js-tokens@4.0.0: {} - js-yaml@3.14.2: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - js-yaml@4.1.1: dependencies: argparse: 2.0.1 jsbn@0.1.1: {} - jsbn@1.1.0: {} - - jsc-android@250231.0.0: {} - jsc-safe-url@0.2.4: {} - jscodeshift@0.14.0(@babel/preset-env@7.24.7(@babel/core@7.28.6)): - dependencies: - '@babel/core': 7.29.0 - '@babel/parser': 7.29.2 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.29.0) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.29.0) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.29.0) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) - '@babel/preset-env': 7.24.7(@babel/core@7.28.6) - '@babel/preset-flow': 7.27.1(@babel/core@7.29.0) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) - '@babel/register': 7.28.6(@babel/core@7.29.0) - babel-core: 7.0.0-bridge.0(@babel/core@7.29.0) - chalk: 4.1.2 - flow-parser: 0.309.0 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - neo-async: 2.6.2 - node-dir: 0.1.17 - recast: 0.21.5 - temp: 0.8.4 - write-file-atomic: 2.4.3 - transitivePeerDependencies: - - supports-color - jsesc@3.1.0: {} json-buffer@3.0.1: {} - json-parse-better-errors@1.0.2: {} - json-parse-even-better-errors@2.3.1: {} json-schema-ref-parser@9.0.9: @@ -15915,26 +13116,19 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json-stable-stringify@1.1.1: + json-stable-stringify@1.3.0: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 + call-bound: 1.0.4 isarray: 2.0.5 jsonify: 0.0.1 object-keys: 1.1.1 json-stringify-safe@5.0.1: {} - json5@1.0.2: - dependencies: - minimist: 1.2.8 - json5@2.2.3: {} - jsonfile@4.0.0: - optionalDependencies: - graceful-fs: 4.2.11 - - jsonfile@6.1.0: + jsonfile@6.2.0: dependencies: universalify: 2.0.1 optionalDependencies: @@ -15958,8 +13152,8 @@ snapshots: jsx-ast-utils@3.3.5: dependencies: - array-includes: 3.1.8 - array.prototype.flat: 1.3.2 + array-includes: 3.1.9 + array.prototype.flat: 1.3.3 object.assign: 4.1.7 object.values: 1.2.1 @@ -15973,13 +13167,13 @@ snapshots: transitivePeerDependencies: - encoding - juice@7.0.0(encoding@0.1.13): + juice@8.1.0(encoding@0.1.13): dependencies: - cheerio: 1.0.0-rc.12 - commander: 5.1.0 + cheerio: 1.0.0-rc.10 + commander: 6.2.1 mensch: 0.3.4 slick: 1.12.2 - web-resource-inliner: 5.0.0(encoding@0.1.13) + web-resource-inliner: 6.0.1(encoding@0.1.13) transitivePeerDependencies: - encoding @@ -16000,11 +13194,9 @@ snapshots: kind-of@6.0.3: {} - kleur@3.0.3: {} - kleur@4.1.5: {} - konva@9.3.12: {} + konva@10.2.5: {} kuler@2.0.0: {} @@ -16028,7 +13220,7 @@ snapshots: libbase64@1.3.0: optional: true - libmime@5.3.6: + libmime@5.3.7: dependencies: encoding-japanese: 2.2.0 iconv-lite: 0.6.3 @@ -16036,6 +13228,14 @@ snapshots: libqp: 2.1.1 optional: true + libmime@5.3.8: + dependencies: + encoding-japanese: 2.2.0 + iconv-lite: 0.7.2 + libbase64: 1.3.0 + libqp: 2.1.1 + optional: true + libqp@2.1.1: optional: true @@ -16075,7 +13275,7 @@ snapshots: object-inspect: 1.13.4 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.8.2 + yaml: 2.8.3 transitivePeerDependencies: - enquirer - supports-color @@ -16106,11 +13306,6 @@ snapshots: optionalDependencies: enquirer: 2.4.1 - locate-path@3.0.0: - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -16119,12 +13314,10 @@ snapshots: dependencies: p-locate: 5.0.0 - lodash-es@4.17.23: {} + lodash-es@4.18.1: {} lodash.camelcase@4.3.0: {} - lodash.castarray@4.4.0: {} - lodash.clonedeep@4.5.0: {} lodash.debounce@4.0.8: {} @@ -16157,7 +13350,7 @@ snapshots: lodash.upperfirst@4.3.1: {} - lodash.zipobject@4.1.3: {} + lodash.zipobject@4.18.0: {} lodash@4.17.21: {} @@ -16184,12 +13377,6 @@ snapshots: safe-stable-stringify: 2.5.0 triple-beam: 1.4.1 - logkitty@0.7.1: - dependencies: - ansi-fragments: 0.2.1 - dayjs: 1.11.19 - yargs: 15.4.1 - long-timeout@0.1.1: {} longest@2.0.1: {} @@ -16198,9 +13385,13 @@ snapshots: dependencies: js-tokens: 4.0.0 + lower-case@2.0.2: + dependencies: + tslib: 2.8.1 + lru-cache@10.4.3: {} - lru-cache@11.2.1: {} + lru-cache@11.3.5: {} lru-cache@5.1.1: dependencies: @@ -16212,45 +13403,33 @@ snapshots: lru-cache@7.18.3: {} - luxon@3.4.4: {} + luxon@3.7.2: {} - magic-string@0.29.0: + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - mailparser@3.7.2: + mailparser@3.9.8: dependencies: + '@zone-eu/mailsplit': 5.4.8 encoding-japanese: 2.2.0 he: 1.2.0 html-to-text: 9.0.5 - iconv-lite: 0.6.3 - libmime: 5.3.6 + iconv-lite: 0.7.2 + libmime: 5.3.8 linkify-it: 5.0.0 - mailsplit: 5.4.2 - nodemailer: 6.9.16 + nodemailer: 8.0.5 punycode.js: 2.3.1 - tlds: 1.255.0 + tlds: 1.261.0 optional: true - mailsplit@5.4.2: - dependencies: - libbase64: 1.3.0 - libmime: 5.3.6 - libqp: 2.1.1 - optional: true - - make-dir@2.1.0: - dependencies: - pify: 4.0.1 - semver: 5.7.2 - make-error@1.3.6: {} make-fetch-happen@10.2.1: dependencies: agentkeepalive: 4.6.0 cacache: 16.1.3 - http-cache-semantics: 4.1.1 + http-cache-semantics: 4.2.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-lambda: 1.0.1 @@ -16258,7 +13437,7 @@ snapshots: minipass: 3.3.6 minipass-collect: 1.0.2 minipass-fetch: 2.1.2 - minipass-flush: 1.0.5 + minipass-flush: 1.0.7 minipass-pipeline: 1.2.4 negotiator: 0.6.4 promise-retry: 2.0.1 @@ -16272,7 +13451,7 @@ snapshots: dependencies: agentkeepalive: 4.6.0 cacache: 15.3.0 - http-cache-semantics: 4.1.1 + http-cache-semantics: 4.2.0 http-proxy-agent: 4.0.1 https-proxy-agent: 5.0.1 is-lambda: 1.0.1 @@ -16280,7 +13459,7 @@ snapshots: minipass: 3.3.6 minipass-collect: 1.0.2 minipass-fetch: 1.4.1 - minipass-flush: 1.0.5 + minipass-flush: 1.0.7 minipass-pipeline: 1.2.4 negotiator: 0.6.4 promise-retry: 2.0.1 @@ -16291,7 +13470,7 @@ snapshots: - supports-color optional: true - make-plural@7.4.0: {} + make-plural@7.5.0: {} makeerror@1.0.12: dependencies: @@ -16314,14 +13493,14 @@ snapshots: mdast-util-definitions@5.1.2: dependencies: '@types/mdast': 3.0.15 - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-visit: 4.1.2 mdast-util-from-markdown@1.3.1: dependencies: '@types/mdast': 3.0.15 - '@types/unist': 2.0.10 - decode-named-character-reference: 1.0.2 + '@types/unist': 2.0.11 + decode-named-character-reference: 1.3.0 mdast-util-to-string: 3.2.0 micromark: 3.2.0 micromark-util-decode-numeric-character-reference: 1.1.0 @@ -16349,7 +13528,9 @@ snapshots: dependencies: '@types/mdast': 3.0.15 - mdn-data@2.0.14: {} + mdn-data@2.0.28: {} + + mdn-data@2.0.30: {} media-typer@0.3.0: {} @@ -16361,6 +13542,9 @@ snapshots: mensch@0.3.4: {} + meow@13.2.0: + optional: true + meow@8.1.2: dependencies: '@types/minimist': 1.2.5 @@ -16385,105 +13569,104 @@ snapshots: methods@1.1.2: {} - metro-babel-transformer@0.80.12: + metro-babel-transformer@0.84.3: dependencies: '@babel/core': 7.29.0 flow-enums-runtime: 0.0.6 - hermes-parser: 0.23.1 + hermes-parser: 0.35.0 + metro-cache-key: 0.84.3 nullthrows: 1.1.1 transitivePeerDependencies: - supports-color - metro-cache-key@0.80.12: + metro-cache-key@0.84.3: dependencies: flow-enums-runtime: 0.0.6 - metro-cache@0.80.12: + metro-cache@0.84.3: dependencies: exponential-backoff: 3.1.3 flow-enums-runtime: 0.0.6 - metro-core: 0.80.12 + https-proxy-agent: 7.0.6 + metro-core: 0.84.3 + transitivePeerDependencies: + - supports-color - metro-config@0.80.12: + metro-config@0.84.3: dependencies: connect: 3.7.0 - cosmiconfig: 5.2.1 flow-enums-runtime: 0.0.6 jest-validate: 29.7.0 - metro: 0.80.12 - metro-cache: 0.80.12 - metro-core: 0.80.12 - metro-runtime: 0.80.12 + metro: 0.84.3 + metro-cache: 0.84.3 + metro-core: 0.84.3 + metro-runtime: 0.84.3 + yaml: 2.8.3 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - metro-core@0.80.12: + metro-core@0.84.3: dependencies: flow-enums-runtime: 0.0.6 lodash.throttle: 4.1.1 - metro-resolver: 0.80.12 + metro-resolver: 0.84.3 - metro-file-map@0.80.12: + metro-file-map@0.84.3: dependencies: - anymatch: 3.1.3 - debug: 2.6.9 + debug: 4.4.3(supports-color@5.5.0) fb-watchman: 2.0.2 flow-enums-runtime: 0.0.6 graceful-fs: 4.2.11 invariant: 2.2.4 jest-worker: 29.7.0 micromatch: 4.0.8 - node-abort-controller: 3.1.1 nullthrows: 1.1.1 walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 transitivePeerDependencies: - supports-color - metro-minify-terser@0.80.12: + metro-minify-terser@0.84.3: dependencies: flow-enums-runtime: 0.0.6 terser: 5.46.1 - metro-resolver@0.80.12: + metro-resolver@0.84.3: dependencies: flow-enums-runtime: 0.0.6 - metro-runtime@0.80.12: + metro-runtime@0.84.3: dependencies: '@babel/runtime': 7.29.2 flow-enums-runtime: 0.0.6 - metro-source-map@0.80.12: + metro-source-map@0.84.3: dependencies: '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 flow-enums-runtime: 0.0.6 invariant: 2.2.4 - metro-symbolicate: 0.80.12 + metro-symbolicate: 0.84.3 nullthrows: 1.1.1 - ob1: 0.80.12 + ob1: 0.84.3 source-map: 0.5.7 vlq: 1.0.1 transitivePeerDependencies: - supports-color - metro-symbolicate@0.80.12: + metro-symbolicate@0.84.3: dependencies: flow-enums-runtime: 0.0.6 invariant: 2.2.4 - metro-source-map: 0.80.12 + metro-source-map: 0.84.3 nullthrows: 1.1.1 source-map: 0.5.7 - through2: 2.0.5 vlq: 1.0.1 transitivePeerDependencies: - supports-color - metro-transform-plugins@0.80.12: + metro-transform-plugins@0.84.3: dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 @@ -16494,27 +13677,27 @@ snapshots: transitivePeerDependencies: - supports-color - metro-transform-worker@0.80.12: + metro-transform-worker@0.84.3: dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 '@babel/parser': 7.29.2 '@babel/types': 7.29.0 flow-enums-runtime: 0.0.6 - metro: 0.80.12 - metro-babel-transformer: 0.80.12 - metro-cache: 0.80.12 - metro-cache-key: 0.80.12 - metro-minify-terser: 0.80.12 - metro-source-map: 0.80.12 - metro-transform-plugins: 0.80.12 + metro: 0.84.3 + metro-babel-transformer: 0.84.3 + metro-cache: 0.84.3 + metro-cache-key: 0.84.3 + metro-minify-terser: 0.84.3 + metro-source-map: 0.84.3 + metro-transform-plugins: 0.84.3 nullthrows: 1.1.1 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - metro@0.80.12: + metro@0.84.3: dependencies: '@babel/code-frame': 7.29.0 '@babel/core': 7.29.0 @@ -16523,38 +13706,36 @@ snapshots: '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 - accepts: 1.3.8 + accepts: 2.0.0 chalk: 4.1.2 ci-info: 2.0.0 connect: 3.7.0 - debug: 2.6.9 - denodeify: 1.2.1 + debug: 4.4.3(supports-color@5.5.0) error-stack-parser: 2.1.4 flow-enums-runtime: 0.0.6 graceful-fs: 4.2.11 - hermes-parser: 0.23.1 + hermes-parser: 0.35.0 image-size: 1.2.1 invariant: 2.2.4 jest-worker: 29.7.0 jsc-safe-url: 0.2.4 lodash.throttle: 4.1.1 - metro-babel-transformer: 0.80.12 - metro-cache: 0.80.12 - metro-cache-key: 0.80.12 - metro-config: 0.80.12 - metro-core: 0.80.12 - metro-file-map: 0.80.12 - metro-resolver: 0.80.12 - metro-runtime: 0.80.12 - metro-source-map: 0.80.12 - metro-symbolicate: 0.80.12 - metro-transform-plugins: 0.80.12 - metro-transform-worker: 0.80.12 - mime-types: 2.1.35 + metro-babel-transformer: 0.84.3 + metro-cache: 0.84.3 + metro-cache-key: 0.84.3 + metro-config: 0.84.3 + metro-core: 0.84.3 + metro-file-map: 0.84.3 + metro-resolver: 0.84.3 + metro-runtime: 0.84.3 + metro-source-map: 0.84.3 + metro-symbolicate: 0.84.3 + metro-transform-plugins: 0.84.3 + metro-transform-worker: 0.84.3 + mime-types: 3.0.2 nullthrows: 1.1.1 serialize-error: 2.1.0 source-map: 0.5.7 - strip-ansi: 6.0.1 throat: 5.0.0 ws: 7.5.10 yargs: 17.7.2 @@ -16565,7 +13746,7 @@ snapshots: micromark-core-commonmark@1.1.0: dependencies: - decode-named-character-reference: 1.0.2 + decode-named-character-reference: 1.3.0 micromark-factory-destination: 1.1.0 micromark-factory-label: 1.1.0 micromark-factory-space: 1.1.0 @@ -16640,7 +13821,7 @@ snapshots: micromark-util-decode-string@1.1.0: dependencies: - decode-named-character-reference: 1.0.2 + decode-named-character-reference: 1.3.0 micromark-util-character: 1.2.0 micromark-util-decode-numeric-character-reference: 1.1.0 micromark-util-symbol: 1.1.0 @@ -16676,9 +13857,9 @@ snapshots: micromark@3.2.0: dependencies: - '@types/debug': 4.1.12 + '@types/debug': 4.1.13 debug: 4.4.3(supports-color@5.5.0) - decode-named-character-reference: 1.0.2 + decode-named-character-reference: 1.3.0 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 @@ -16699,7 +13880,7 @@ snapshots: micromatch@4.0.8: dependencies: braces: 3.0.3 - picomatch: 2.3.1 + picomatch: 2.3.2 mime-db@1.52.0: {} @@ -16709,6 +13890,10 @@ snapshots: dependencies: mime-db: 1.52.0 + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + mime@1.6.0: {} mime@2.6.0: {} @@ -16727,25 +13912,21 @@ snapshots: minimalistic-assert@1.0.1: {} - minimatch@3.1.2: + minimatch@10.2.5: dependencies: - brace-expansion: 1.1.12 + brace-expansion: 5.0.5 minimatch@3.1.5: dependencies: brace-expansion: 1.1.14 - minimatch@5.1.6: + minimatch@5.1.9: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.1.0 - minimatch@9.0.4: + minimatch@9.0.9: dependencies: - brace-expansion: 2.0.2 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.1.0 minimist-options@4.1.0: dependencies: @@ -16778,7 +13959,7 @@ snapshots: optionalDependencies: encoding: 0.1.13 - minipass-flush@1.0.5: + minipass-flush@1.0.7: dependencies: minipass: 3.3.6 @@ -16796,7 +13977,7 @@ snapshots: minipass@5.0.0: {} - minipass@7.1.2: {} + minipass@7.1.3: {} minizlib@2.1.2: dependencies: @@ -16813,7 +13994,7 @@ snapshots: moment@2.30.1: {} - moo@0.5.2: {} + moo@0.5.3: {} mri@1.2.0: {} @@ -16821,7 +14002,7 @@ snapshots: ms@2.1.3: {} - multer@1.4.5-lts.1: + multer@1.4.5-lts.2: dependencies: append-field: 1.0.0 busboy: 1.6.0 @@ -16837,13 +14018,13 @@ snapshots: array-differ: 3.0.0 array-union: 2.1.0 arrify: 2.0.1 - minimatch: 3.1.2 + minimatch: 3.1.5 mustache@4.2.0: {} mute-stream@0.0.8: {} - mylas@2.1.13: {} + mylas@2.1.14: {} mz@2.7.0: dependencies: @@ -16863,19 +14044,19 @@ snapshots: negotiator@0.6.4: {} - neo-async@2.6.2: {} + negotiator@1.0.0: {} - next@14.2.35(@babel/core@7.28.6)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@14.2.35(@babel/core@7.29.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 14.2.35 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001766 + caniuse-lite: 1.0.30001788 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.1(@babel/core@7.28.6)(babel-plugin-macros@3.1.0)(react@18.3.1) + styled-jsx: 5.1.1(@babel/core@7.29.0)(babel-plugin-macros@3.1.0)(react@18.3.1) optionalDependencies: '@next/swc-darwin-arm64': 14.2.33 '@next/swc-darwin-x64': 14.2.33 @@ -16890,28 +14071,29 @@ snapshots: - '@babel/core' - babel-plugin-macros - nice-try@1.0.5: - optional: true + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 - nocache@3.0.4: {} - - node-abi@3.74.0: + node-abi@3.89.0: dependencies: semver: 7.7.3 - node-abort-controller@3.1.1: {} - node-addon-api@7.1.1: {} - node-addon-api@8.5.0: {} + node-addon-api@8.7.0: {} node-cache@5.1.2: dependencies: clone: 2.1.2 - node-dir@0.1.17: + node-exports-info@1.6.0: dependencies: - minimatch: 3.1.5 + array.prototype.flatmap: 1.3.3 + es-errors: 1.3.0 + object.entries: 1.1.9 + semver: 6.3.1 node-fetch@2.7.0(encoding@0.1.13): dependencies: @@ -16919,8 +14101,6 @@ snapshots: optionalDependencies: encoding: 0.1.13 - node-forge@1.4.0: {} - node-gyp-build@4.8.4: {} node-gyp@8.4.1: @@ -16958,7 +14138,7 @@ snapshots: node-int64@0.4.0: {} - node-releases@2.0.27: {} + node-releases@2.0.37: {} node-schedule@2.1.1: dependencies: @@ -16966,21 +14146,19 @@ snapshots: long-timeout: 0.1.1 sorted-array-functions: 1.3.0 - node-stream-zip@1.15.0: {} - - nodemailer@6.10.0: {} - - nodemailer@6.9.16: - optional: true + nodemailer@6.10.1: {} nodemailer@7.0.12: {} + nodemailer@8.0.5: + optional: true + nodemon@3.1.11: dependencies: chokidar: 3.6.0 debug: 4.4.3(supports-color@5.5.0) ignore-by-default: 1.0.1 - minimatch: 3.1.2 + minimatch: 3.1.5 pstree.remy: 1.1.8 semver: 7.7.3 simple-update-notifier: 2.0.0 @@ -17005,7 +14183,7 @@ snapshots: normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.11 + resolve: 1.22.12 semver: 5.7.2 validate-npm-package-license: 3.0.4 @@ -17018,11 +14196,6 @@ snapshots: normalize-path@3.0.0: {} - npm-run-path@2.0.2: - dependencies: - path-key: 2.0.1 - optional: true - npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -17044,7 +14217,7 @@ snapshots: nullthrows@1.1.1: {} - ob1@0.80.12: + ob1@0.84.3: dependencies: flow-enums-runtime: 0.0.6 @@ -17060,7 +14233,7 @@ snapshots: object.assign@4.1.7: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 @@ -17069,27 +14242,21 @@ snapshots: object.entries@1.1.9: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 object.fromentries@2.0.8: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.2 es-object-atoms: 1.1.1 - object.groupby@1.0.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - object.values@1.2.1: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 @@ -17124,10 +14291,6 @@ snapshots: dependencies: '@jsdevtools/ono': 7.1.3 - open@6.4.0: - dependencies: - is-wsl: 1.1.0 - open@7.4.2: dependencies: is-docker: 2.2.1 @@ -17182,10 +14345,6 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-locate@3.0.0: - dependencies: - p-limit: 2.3.0 - p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -17216,28 +14375,29 @@ snapshots: dependencies: callsites: 3.1.0 - parse-json@4.0.0: - dependencies: - error-ex: 1.3.4 - json-parse-better-errors: 1.0.2 - parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.28.6 + '@babel/code-frame': 7.29.0 error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 parse-passwd@1.0.0: {} - parse5-htmlparser2-tree-adapter@7.0.0: + parse5-htmlparser2-tree-adapter@6.0.1: + dependencies: + parse5: 6.0.1 + + parse5-htmlparser2-tree-adapter@7.1.0: dependencies: domhandler: 5.0.3 - parse5: 7.1.2 + parse5: 7.3.0 - parse5@7.1.2: + parse5@6.0.1: {} + + parse5@7.3.0: dependencies: - entities: 4.5.0 + entities: 6.0.1 parseley@0.12.1: dependencies: @@ -17246,15 +14406,10 @@ snapshots: parseurl@1.3.3: {} - path-exists@3.0.0: {} - path-exists@4.0.0: {} path-is-absolute@1.0.1: {} - path-key@2.0.1: - optional: true - path-key@3.1.1: {} path-key@4.0.0: {} @@ -17264,7 +14419,7 @@ snapshots: path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 - minipass: 7.1.2 + minipass: 7.1.3 path-to-regexp@0.1.12: {} @@ -17281,29 +14436,29 @@ snapshots: pg-cloudflare@1.3.0: optional: true - pg-connection-string@2.10.1: {} + pg-connection-string@2.12.0: {} pg-int8@1.0.1: {} - pg-pool@3.11.0(pg@8.17.2): + pg-pool@3.13.0(pg@8.17.2): dependencies: pg: 8.17.2 - pg-protocol@1.11.0: {} + pg-protocol@1.13.0: {} pg-types@2.2.0: dependencies: pg-int8: 1.0.1 postgres-array: 2.0.0 - postgres-bytea: 1.0.0 + postgres-bytea: 1.0.1 postgres-date: 1.0.7 postgres-interval: 1.2.0 pg@8.17.2: dependencies: - pg-connection-string: 2.10.1 - pg-pool: 3.11.0(pg@8.17.2) - pg-protocol: 1.11.0 + pg-connection-string: 2.12.0 + pg-pool: 3.13.0(pg@8.17.2) + pg-protocol: 1.13.0 pg-types: 2.2.0 pgpass: 1.0.5 optionalDependencies: @@ -17315,11 +14470,9 @@ snapshots: picocolors@1.1.1: {} - picomatch@2.3.1: {} - picomatch@2.3.2: {} - picomatch@4.0.3: {} + picomatch@4.0.4: {} pidtree@0.6.0: {} @@ -17329,39 +14482,35 @@ snapshots: pirates@4.0.7: {} - pkg-dir@3.0.0: - dependencies: - find-up: 3.0.0 - plimit-lit@1.6.1: dependencies: queue-lit: 1.5.2 - possible-typed-array-names@1.0.0: {} + possible-typed-array-names@1.1.0: {} - postcss-import@15.1.0(postcss@8.5.6): + postcss-import@15.1.0(postcss@8.5.10): dependencies: - postcss: 8.5.6 + postcss: 8.5.10 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.11 + resolve: 1.22.12 - postcss-js@4.0.1(postcss@8.5.6): + postcss-js@4.1.0(postcss@8.5.10): dependencies: camelcase-css: 2.0.1 - postcss: 8.5.6 + postcss: 8.5.10 - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6)(yaml@2.8.3): + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.10)(yaml@2.8.3): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 1.21.7 - postcss: 8.5.6 + postcss: 8.5.10 yaml: 2.8.3 - postcss-nested@6.2.0(postcss@8.5.6): + postcss-nested@6.2.0(postcss@8.5.10): dependencies: - postcss: 8.5.6 + postcss: 8.5.10 postcss-selector-parser: 6.1.2 postcss-selector-parser@6.0.10: @@ -17382,7 +14531,7 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.6: + postcss@8.5.10: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 @@ -17390,7 +14539,7 @@ snapshots: postgres-array@2.0.0: {} - postgres-bytea@1.0.0: {} + postgres-bytea@1.0.1: {} postgres-date@1.0.7: {} @@ -17400,14 +14549,14 @@ snapshots: prebuild-install@7.1.3: dependencies: - detect-libc: 2.0.3 + detect-libc: 2.1.2 expand-template: 2.0.3 github-from-package: 0.0.0 minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 2.0.0 - node-abi: 3.74.0 - pump: 3.0.3 + node-abi: 3.89.0 + pump: 3.0.4 rc: 1.2.8 simple-get: 4.0.1 tar-fs: 2.1.4 @@ -17415,7 +14564,7 @@ snapshots: prelude-ls@1.2.1: {} - prettier-linter-helpers@1.0.0: + prettier-linter-helpers@1.0.1: dependencies: fast-diff: 1.3.0 @@ -17434,27 +14583,20 @@ snapshots: pretty-bytes@5.6.0: {} - pretty-format@26.6.2: - dependencies: - '@jest/types': 26.6.2 - ansi-regex: 5.0.1 - ansi-styles: 4.3.0 - react-is: 17.0.2 - pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 react-is: 18.3.1 - preview-email@3.1.0: + preview-email@3.1.3: dependencies: ci-info: 3.9.0 - display-notification: 2.0.0 + display-notification: 3.0.0 fixpack: 4.0.0 get-port: 5.1.1 - mailparser: 3.7.2 - nodemailer: 6.10.0 + mailparser: 3.9.8 + nodemailer: 8.0.5 open: 7.4.2 p-event: 4.2.0 p-wait-for: 3.2.0 @@ -17481,11 +14623,6 @@ snapshots: dependencies: asap: 2.0.6 - prompts@2.4.2: - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - prop-types@15.8.1: dependencies: loose-envify: 1.4.0 @@ -17513,7 +14650,7 @@ snapshots: js-stringify: 1.0.2 pug-runtime: 3.0.1 - pug-code-gen@3.0.3: + pug-code-gen@3.0.4: dependencies: constantinople: 4.0.1 doctypes: 1.1.0 @@ -17532,7 +14669,7 @@ snapshots: jstransformer: 1.0.0 pug-error: 2.1.0 pug-walk: 2.0.0 - resolve: 1.22.11 + resolve: 1.22.12 pug-lexer@5.0.1: dependencies: @@ -17565,7 +14702,7 @@ snapshots: pug@3.0.3: dependencies: - pug-code-gen: 3.0.3 + pug-code-gen: 3.0.4 pug-filters: 4.0.0 pug-lexer: 5.0.1 pug-linker: 4.0.0 @@ -17574,7 +14711,7 @@ snapshots: pug-runtime: 3.0.1 pug-strip-comments: 2.0.0 - pump@3.0.3: + pump@3.0.4: dependencies: end-of-stream: 1.4.5 once: 1.4.0 @@ -17590,11 +14727,13 @@ snapshots: dependencies: side-channel: 1.1.0 - qs@6.14.1: + qs@6.14.2: dependencies: side-channel: 1.1.0 - querystring@0.2.1: {} + qs@6.15.1: + dependencies: + side-channel: 1.1.0 queue-lit@1.5.2: {} @@ -17643,52 +14782,66 @@ snapshots: react-aria@3.44.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@internationalized/string': 3.2.7 - '@react-aria/breadcrumbs': 3.5.29(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/button': 3.14.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/calendar': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/checkbox': 3.16.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/color': 3.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/combobox': 3.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/datepicker': 3.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/dialog': 3.5.31(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/disclosure': 3.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/dnd': 3.11.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/focus': 3.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/gridlist': 3.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.22(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/landmark': 3.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/link': 3.8.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/listbox': 3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/menu': 3.19.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/meter': 3.4.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/numberfield': 3.12.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/overlays': 3.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/progress': 3.4.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/radio': 3.12.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/searchfield': 3.8.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/select': 3.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/separator': 3.4.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/slider': 3.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/ssr': 3.9.10(react@18.3.1) - '@react-aria/switch': 3.7.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/table': 3.17.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/tabs': 3.10.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/tag': 3.7.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/textfield': 3.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/toast': 3.0.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/tooltip': 3.8.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/tree': 3.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/visually-hidden': 3.8.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.32.1(react@18.3.1) + '@internationalized/string': 3.2.8 + '@react-aria/breadcrumbs': 3.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/button': 3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/calendar': 3.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/checkbox': 3.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/color': 3.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/combobox': 3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/datepicker': 3.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/dialog': 3.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/disclosure': 3.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/dnd': 3.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/gridlist': 3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/label': 3.8.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/landmark': 3.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/link': 3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/listbox': 3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/menu': 3.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/meter': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/numberfield': 3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/overlays': 3.32.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/progress': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/radio': 3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/searchfield': 3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/select': 3.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/selection': 3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/separator': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/slider': 3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/ssr': 3.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/switch': 3.8.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/table': 3.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/tabs': 3.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/tag': 3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/textfield': 3.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/toast': 3.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/tooltip': 3.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/tree': 3.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.34.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/visually-hidden': 3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-types/shared': 3.34.0(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-devtools-core@5.3.2: + react-aria@3.48.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@internationalized/date': 3.12.1 + '@internationalized/number': 3.6.6 + '@internationalized/string': 3.2.8 + '@react-types/shared': 3.34.0(react@18.3.1) + '@swc/helpers': 0.5.21 + aria-hidden: 1.2.6 + clsx: 2.1.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-stately: 3.46.0(react@18.3.1) + use-sync-external-store: 1.6.0(react@18.3.1) + + react-devtools-core@6.1.5: dependencies: shell-quote: 1.8.3 ws: 7.5.10 @@ -17710,17 +14863,17 @@ snapshots: dependencies: react: 18.3.1 - react-intl@6.6.8(react@18.3.1)(typescript@5.4.5): + react-intl@6.8.9(react@18.3.1)(typescript@5.4.5): dependencies: - '@formatjs/ecma402-abstract': 2.0.0 - '@formatjs/icu-messageformat-parser': 2.7.8 - '@formatjs/intl': 2.10.4(typescript@5.4.5) - '@formatjs/intl-displaynames': 6.6.8 - '@formatjs/intl-listformat': 7.5.7 - '@types/hoist-non-react-statics': 3.3.5 - '@types/react': 18.3.27 + '@formatjs/ecma402-abstract': 2.2.4 + '@formatjs/icu-messageformat-parser': 2.9.4 + '@formatjs/intl': 2.10.15(typescript@5.4.5) + '@formatjs/intl-displaynames': 6.8.5 + '@formatjs/intl-listformat': 7.7.5 + '@types/hoist-non-react-statics': 3.3.7(@types/react@18.3.28) + '@types/react': 18.3.28 hoist-non-react-statics: 3.3.2 - intl-messageformat: 10.5.14 + intl-messageformat: 10.7.7 react: 18.3.1 tslib: 2.8.1 optionalDependencies: @@ -17728,15 +14881,13 @@ snapshots: react-is@16.13.1: {} - react-is@17.0.2: {} - react-is@18.3.1: {} - react-konva@18.2.10(@types/react@18.3.27)(konva@9.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-konva@18.2.14(@types/react@18.3.28)(konva@10.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@types/react-reconciler': 0.28.9(@types/react@18.3.27) - its-fine: 1.2.5(@types/react@18.3.27)(react@18.3.1) - konva: 9.3.12 + '@types/react-reconciler': 0.28.9(@types/react@18.3.28) + its-fine: 1.2.5(@types/react@18.3.28)(react@18.3.1) + konva: 10.2.5 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-reconciler: 0.29.2(react@18.3.1) @@ -17744,12 +14895,12 @@ snapshots: transitivePeerDependencies: - '@types/react' - react-markdown@8.0.5(@types/react@18.3.27)(react@18.3.1): + react-markdown@8.0.5(@types/react@18.3.28)(react@18.3.1): dependencies: '@types/hast': 2.3.10 '@types/prop-types': 15.7.15 - '@types/react': 18.3.27 - '@types/unist': 2.0.10 + '@types/react': 18.3.28 + '@types/unist': 2.0.11 comma-separated-tokens: 2.0.3 hast-util-whitespace: 2.0.1 prop-types: 15.8.1 @@ -17766,59 +14917,54 @@ snapshots: transitivePeerDependencies: - supports-color - react-native@0.74.2(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1): + react-native@0.85.1(@babel/core@7.29.0)(@types/react@18.3.28)(react@18.3.1): dependencies: - '@jest/create-cache-key-function': 29.7.0 - '@react-native-community/cli': 13.6.8(encoding@0.1.13) - '@react-native-community/cli-platform-android': 13.6.8(encoding@0.1.13) - '@react-native-community/cli-platform-ios': 13.6.8(encoding@0.1.13) - '@react-native/assets-registry': 0.74.84 - '@react-native/codegen': 0.74.84(@babel/preset-env@7.24.7(@babel/core@7.28.6)) - '@react-native/community-cli-plugin': 0.74.84(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))(encoding@0.1.13) - '@react-native/gradle-plugin': 0.74.84 - '@react-native/js-polyfills': 0.74.84 - '@react-native/normalize-colors': 0.74.84 - '@react-native/virtualized-lists': 0.74.84(@types/react@18.3.27)(react-native@0.74.2(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1) + '@react-native/assets-registry': 0.85.1 + '@react-native/codegen': 0.85.1(@babel/core@7.29.0) + '@react-native/community-cli-plugin': 0.85.1 + '@react-native/gradle-plugin': 0.85.1 + '@react-native/js-polyfills': 0.85.1 + '@react-native/normalize-colors': 0.85.1 + '@react-native/virtualized-lists': 0.85.1(@types/react@18.3.28)(react-native@0.85.1(@babel/core@7.29.0)(@types/react@18.3.28)(react@18.3.1))(react@18.3.1) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 + babel-plugin-syntax-hermes-parser: 0.33.3 base64-js: 1.5.1 - chalk: 4.1.2 - event-target-shim: 5.0.1 + commander: 12.1.0 flow-enums-runtime: 0.0.6 + hermes-compiler: 250829098.0.10 invariant: 2.2.4 - jest-environment-node: 29.7.0 - jsc-android: 250231.0.0 memoize-one: 5.2.1 - metro-runtime: 0.80.12 - metro-source-map: 0.80.12 - mkdirp: 0.5.6 + metro-runtime: 0.84.3 + metro-source-map: 0.84.3 nullthrows: 1.1.1 - pretty-format: 26.6.2 + pretty-format: 29.7.0 promise: 8.3.0 react: 18.3.1 - react-devtools-core: 5.3.2 + react-devtools-core: 6.1.5 react-refresh: 0.14.2 - react-shallow-renderer: 16.15.0(react@18.3.1) regenerator-runtime: 0.13.11 - scheduler: 0.24.0-canary-efb381bbf-20230505 + scheduler: 0.27.0 + semver: 7.7.3 stacktrace-parser: 0.1.11 + tinyglobby: 0.2.16 whatwg-fetch: 3.6.20 - ws: 6.2.3 + ws: 7.5.10 yargs: 17.7.2 optionalDependencies: - '@types/react': 18.3.27 + '@types/react': 18.3.28 transitivePeerDependencies: - '@babel/core' - - '@babel/preset-env' + - '@react-native-community/cli' + - '@react-native/metro-config' - bufferutil - - encoding - supports-color - utf-8-validate react-popper-tooltip@4.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@popperjs/core': 2.11.8 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -17832,12 +14978,6 @@ snapshots: react-fast-compare: 3.2.2 warning: 4.0.3 - react-reconciler@0.27.0(react@18.3.1): - dependencies: - loose-envify: 1.4.0 - react: 18.3.1 - scheduler: 0.21.0 - react-reconciler@0.29.2(react@18.3.1): dependencies: loose-envify: 1.4.0 @@ -17846,37 +14986,31 @@ snapshots: react-refresh@0.14.2: {} - react-select@5.10.2(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-select@5.10.2(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@emotion/cache': 11.14.0 - '@emotion/react': 11.14.0(@types/react@18.3.27)(react@18.3.1) - '@floating-ui/dom': 1.7.4 - '@types/react-transition-group': 4.4.12(@types/react@18.3.27) + '@emotion/react': 11.14.0(@types/react@18.3.28)(react@18.3.1) + '@floating-ui/dom': 1.7.6 + '@types/react-transition-group': 4.4.12(@types/react@18.3.28) memoize-one: 6.0.0 prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - use-isomorphic-layout-effect: 1.2.1(@types/react@18.3.27)(react@18.3.1) + use-isomorphic-layout-effect: 1.2.1(@types/react@18.3.28)(react@18.3.1) transitivePeerDependencies: - '@types/react' - supports-color - react-shallow-renderer@16.15.0(react@18.3.1): + react-spring@9.7.1(@react-three/fiber@9.6.0(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react-native@0.85.1(@babel/core@7.29.0)(@types/react@18.3.28)(react@18.3.1))(react@18.3.1)(three@0.183.2))(konva@10.2.5)(react-dom@18.3.1(react@18.3.1))(react-konva@18.2.14(@types/react@18.3.28)(konva@10.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.85.1(@babel/core@7.29.0)(@types/react@18.3.28)(react@18.3.1))(react-zdog@1.2.2)(react@18.3.1)(three@0.183.2)(zdog@1.1.3): dependencies: - object-assign: 4.1.1 - react: 18.3.1 - react-is: 18.3.1 - - react-spring@9.7.1(@react-three/fiber@8.16.8(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1)(three@0.165.0))(konva@9.3.12)(react-dom@18.3.1(react@18.3.1))(react-konva@18.2.10(@types/react@18.3.27)(konva@9.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.74.2(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react-zdog@1.2.2)(react@18.3.1)(three@0.165.0)(zdog@1.1.3): - dependencies: - '@react-spring/core': 9.7.3(react@18.3.1) - '@react-spring/konva': 9.7.3(konva@9.3.12)(react-konva@18.2.10(@types/react@18.3.27)(konva@9.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@react-spring/native': 9.7.3(react-native@0.74.2(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1) - '@react-spring/three': 9.7.3(@react-three/fiber@8.16.8(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.28.6)(@babel/preset-env@7.24.7(@babel/core@7.28.6))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1)(three@0.165.0))(react@18.3.1)(three@0.165.0) - '@react-spring/web': 9.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-spring/zdog': 9.7.3(react-dom@18.3.1(react@18.3.1))(react-zdog@1.2.2)(react@18.3.1)(zdog@1.1.3) + '@react-spring/core': 9.7.5(react@18.3.1) + '@react-spring/konva': 9.7.5(konva@10.2.5)(react-konva@18.2.14(@types/react@18.3.28)(konva@10.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@react-spring/native': 9.7.5(react-native@0.85.1(@babel/core@7.29.0)(@types/react@18.3.28)(react@18.3.1))(react@18.3.1) + '@react-spring/three': 9.7.5(@react-three/fiber@9.6.0(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react-native@0.85.1(@babel/core@7.29.0)(@types/react@18.3.28)(react@18.3.1))(react@18.3.1)(three@0.183.2))(react@18.3.1)(three@0.183.2) + '@react-spring/web': 9.7.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-spring/zdog': 9.7.5(react-dom@18.3.1(react@18.3.1))(react-zdog@1.2.2)(react@18.3.1)(zdog@1.1.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -17888,6 +15022,16 @@ snapshots: - three - zdog + react-stately@3.46.0(react@18.3.1): + dependencies: + '@internationalized/date': 3.12.1 + '@internationalized/number': 3.6.6 + '@internationalized/string': 3.2.8 + '@react-types/shared': 3.34.0(react@18.3.1) + '@swc/helpers': 0.5.21 + react: 18.3.1 + use-sync-external-store: 1.6.0(react@18.3.1) + react-toast-notifications@2.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@emotion/core': 10.3.1(react@18.3.1) @@ -17899,7 +15043,7 @@ snapshots: react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -17978,16 +15122,7 @@ snapshots: readdirp@3.6.0: dependencies: - picomatch: 2.3.1 - - readline@1.3.0: {} - - recast@0.21.5: - dependencies: - ast-types: 0.15.2 - esprima: 4.0.1 - source-map: 0.6.1 - tslib: 2.8.1 + picomatch: 2.3.2 redent@3.0.0: dependencies: @@ -18000,9 +15135,9 @@ snapshots: reflect.getprototypeof@1.0.10: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.2 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -18017,13 +15152,9 @@ snapshots: regenerator-runtime@0.13.11: {} - regenerator-transform@0.15.2: - dependencies: - '@babel/runtime': 7.28.6 - regexp.prototype.flags@1.5.4: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 es-errors: 1.3.0 get-proto: 1.0.1 @@ -18035,13 +15166,13 @@ snapshots: regenerate: 1.4.2 regenerate-unicode-properties: 10.2.2 regjsgen: 0.8.0 - regjsparser: 0.13.0 + regjsparser: 0.13.1 unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.2.1 regjsgen@0.8.0: {} - regjsparser@0.13.0: + regjsparser@0.13.1: dependencies: jsesc: 3.1.0 @@ -18068,8 +15199,6 @@ snapshots: require-from-string@2.0.2: {} - require-main-filename@2.0.0: {} - resize-observer-polyfill@1.5.1: {} resolve-dir@1.0.1: @@ -18077,8 +15206,6 @@ snapshots: expand-tilde: 2.0.2 global-modules: 1.0.0 - resolve-from@3.0.0: {} - resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -18089,12 +15216,6 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.11: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - resolve@1.22.12: dependencies: es-errors: 1.3.0 @@ -18102,9 +15223,12 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.5: + resolve@2.0.0-next.6: dependencies: + es-errors: 1.3.0 is-core-module: 2.16.1 + node-exports-info: 1.6.0 + object-keys: 1.1.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -18115,23 +15239,19 @@ snapshots: retry@0.12.0: {} - reusify@1.0.4: {} + reusify@1.1.0: {} rfdc@1.4.1: {} - rimraf@2.6.3: - dependencies: - glob: 7.2.3 - rimraf@3.0.2: dependencies: glob: 7.2.3 rndm@1.2.0: {} - run-applescript@3.2.0: + run-applescript@5.0.0: dependencies: - execa: 0.10.0 + execa: 5.1.1 optional: true run-async@2.4.1: {} @@ -18150,7 +15270,7 @@ snapshots: safe-array-concat@1.1.3: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 get-intrinsic: 1.3.0 has-symbols: 1.1.0 @@ -18177,19 +15297,13 @@ snapshots: safer-buffer@2.1.2: {} - sax@1.4.1: {} - - scheduler@0.21.0: - dependencies: - loose-envify: 1.4.0 + sax@1.6.0: {} scheduler@0.23.2: dependencies: loose-envify: 1.4.0 - scheduler@0.24.0-canary-efb381bbf-20230505: - dependencies: - loose-envify: 1.4.0 + scheduler@0.27.0: {} secure-random-password@0.2.3: dependencies: @@ -18201,11 +15315,6 @@ snapshots: dependencies: parseley: 0.12.1 - selfsigned@2.4.1: - dependencies: - '@types/node-forge': 1.3.14 - node-forge: 1.4.0 - semver@5.7.2: {} semver@6.3.1: {} @@ -18304,53 +15413,41 @@ snapshots: safe-buffer: 5.2.1 to-buffer: 1.2.2 - shallow-clone@3.0.1: - dependencies: - kind-of: 6.0.3 - - sharp@0.33.4: + sharp@0.33.5: dependencies: color: 4.2.3 - detect-libc: 2.0.3 + detect-libc: 2.1.2 semver: 7.7.3 optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.4 - '@img/sharp-darwin-x64': 0.33.4 - '@img/sharp-libvips-darwin-arm64': 1.0.2 - '@img/sharp-libvips-darwin-x64': 1.0.2 - '@img/sharp-libvips-linux-arm': 1.0.2 - '@img/sharp-libvips-linux-arm64': 1.0.2 - '@img/sharp-libvips-linux-s390x': 1.0.2 - '@img/sharp-libvips-linux-x64': 1.0.2 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.2 - '@img/sharp-libvips-linuxmusl-x64': 1.0.2 - '@img/sharp-linux-arm': 0.33.4 - '@img/sharp-linux-arm64': 0.33.4 - '@img/sharp-linux-s390x': 0.33.4 - '@img/sharp-linux-x64': 0.33.4 - '@img/sharp-linuxmusl-arm64': 0.33.4 - '@img/sharp-linuxmusl-x64': 0.33.4 - '@img/sharp-wasm32': 0.33.4 - '@img/sharp-win32-ia32': 0.33.4 - '@img/sharp-win32-x64': 0.33.4 - - shebang-command@1.2.0: - dependencies: - shebang-regex: 1.0.0 - optional: true + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - shebang-regex@1.0.0: - optional: true - shebang-regex@3.0.0: {} shell-quote@1.8.3: {} - side-channel-list@1.0.0: + side-channel-list@1.0.1: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 @@ -18374,7 +15471,7 @@ snapshots: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 - side-channel-list: 1.0.0 + side-channel-list: 1.0.1 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 @@ -18390,24 +15487,16 @@ snapshots: once: 1.4.0 simple-concat: 1.0.1 - simple-swizzle@0.2.2: + simple-swizzle@0.2.4: dependencies: - is-arrayish: 0.3.2 + is-arrayish: 0.3.4 simple-update-notifier@2.0.0: dependencies: semver: 7.7.3 - sisteransi@1.0.5: {} - slash@3.0.0: {} - slice-ansi@2.1.0: - dependencies: - ansi-styles: 3.2.1 - astral-regex: 1.0.0 - is-fullwidth-code-point: 2.0.0 - slice-ansi@3.0.0: dependencies: ansi-styles: 4.3.0 @@ -18422,18 +15511,23 @@ snapshots: slice-ansi@5.0.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 is-fullwidth-code-point: 4.0.0 slick@1.12.2: {} smart-buffer@4.2.0: {} + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + socks-proxy-agent@6.2.1: dependencies: agent-base: 6.0.2 debug: 4.4.3(supports-color@5.5.0) - socks: 2.8.4 + socks: 2.8.7 transitivePeerDependencies: - supports-color optional: true @@ -18442,13 +15536,13 @@ snapshots: dependencies: agent-base: 6.0.2 debug: 4.4.3(supports-color@5.5.0) - socks: 2.8.4 + socks: 2.8.7 transitivePeerDependencies: - supports-color - socks@2.8.4: + socks@2.8.7: dependencies: - ip-address: 9.0.5 + ip-address: 10.1.0 smart-buffer: 4.2.0 sorted-array-functions@1.3.0: {} @@ -18464,23 +15558,21 @@ snapshots: source-map@0.6.1: {} - source-map@0.7.6: {} - space-separated-tokens@2.0.2: {} spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.18 + spdx-license-ids: 3.0.23 spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.18 + spdx-license-ids: 3.0.23 - spdx-license-ids@3.0.18: {} + spdx-license-ids@3.0.23: {} split2@3.2.2: dependencies: @@ -18490,8 +15582,6 @@ snapshots: sprintf-js@1.0.3: {} - sprintf-js@1.1.3: {} - sql-highlight@6.1.0: {} sqlite3@5.1.7: @@ -18527,14 +15617,8 @@ snapshots: dependencies: minipass: 3.3.6 - stable@0.1.8: {} - stack-trace@0.0.10: {} - stack-utils@2.0.6: - dependencies: - escape-string-regexp: 2.0.0 - stackframe@1.3.4: {} stacktrace-parser@0.1.11: @@ -18566,20 +15650,20 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.0 + strip-ansi: 7.2.0 string.prototype.includes@2.0.1: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.2 string.prototype.matchall@4.0.12: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.2 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -18593,28 +15677,28 @@ snapshots: string.prototype.repeat@1.0.0: dependencies: define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.2 string.prototype.trim@1.2.10: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.2 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-bind: 1.0.9 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 + call-bind: 1.0.9 define-properties: 1.2.1 es-object-atoms: 1.1.1 @@ -18628,25 +15712,18 @@ snapshots: dependencies: safe-buffer: 5.2.1 - strip-ansi@5.2.0: - dependencies: - ansi-regex: 4.1.1 - strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: + strip-ansi@7.2.0: dependencies: - ansi-regex: 6.0.1 + ansi-regex: 6.2.2 strip-bom@3.0.0: {} strip-bom@4.0.0: {} - strip-eof@1.0.0: - optional: true - strip-final-newline@2.0.0: {} strip-final-newline@3.0.0: {} @@ -18659,18 +15736,16 @@ snapshots: strip-json-comments@3.1.1: {} - strnum@1.1.2: {} - style-to-object@0.4.4: dependencies: inline-style-parser: 0.1.1 - styled-jsx@5.1.1(@babel/core@7.28.6)(babel-plugin-macros@3.1.0)(react@18.3.1): + styled-jsx@5.1.1(@babel/core@7.29.0)(babel-plugin-macros@3.1.0)(react@18.3.1): dependencies: client-only: 0.0.1 react: 18.3.1 optionalDependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 babel-plugin-macros: 3.1.0 stylis@4.2.0: {} @@ -18682,10 +15757,30 @@ snapshots: lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.7 - tinyglobby: 0.2.15 + tinyglobby: 0.2.16 ts-interface-checker: 0.1.13 - sudo-prompt@9.2.1: {} + superagent@10.3.0: + dependencies: + component-emitter: 1.3.1 + cookiejar: 2.1.4 + debug: 4.4.3(supports-color@5.5.0) + fast-safe-stringify: 2.1.1 + form-data: 4.0.5 + formidable: 3.5.4 + methods: 1.1.2 + mime: 2.6.0 + qs: 6.15.1 + transitivePeerDependencies: + - supports-color + + supertest@7.2.2: + dependencies: + cookie-signature: 1.2.2 + methods: 1.1.2 + superagent: 10.3.0 + transitivePeerDependencies: + - supports-color supports-color@5.5.0: dependencies: @@ -18707,22 +15802,24 @@ snapshots: svg-parser@2.0.4: {} - svgo@2.8.0: + svgo@3.3.3: dependencies: - '@trysound/sax': 0.2.0 commander: 7.2.0 - css-select: 4.3.0 - css-tree: 1.1.3 - csso: 4.2.0 + css-select: 5.2.2 + css-tree: 2.3.1 + css-what: 6.2.2 + csso: 5.0.5 picocolors: 1.1.1 - stable: 0.1.8 + sax: 1.6.0 - swagger-ui-dist@5.17.14: {} + swagger-ui-dist@5.32.4: + dependencies: + '@scarf/scarf': 1.4.0 swagger-ui-express@4.6.2(express@4.21.2): dependencies: express: 4.21.2 - swagger-ui-dist: 5.17.14 + swagger-ui-dist: 5.32.4 swr@2.3.8(react@18.3.1): dependencies: @@ -18730,7 +15827,7 @@ snapshots: react: 18.3.1 use-sync-external-store: 1.6.0(react@18.3.1) - tailwind-merge@2.6.0: {} + tailwind-merge@2.6.1: {} tailwindcss@3.4.19(yaml@2.8.3): dependencies: @@ -18748,25 +15845,23 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.6 - postcss-import: 15.1.0(postcss@8.5.6) - postcss-js: 4.0.1(postcss@8.5.6) - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(yaml@2.8.3) - postcss-nested: 6.2.0(postcss@8.5.6) + postcss: 8.5.10 + postcss-import: 15.1.0(postcss@8.5.10) + postcss-js: 4.1.0(postcss@8.5.10) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.10)(yaml@2.8.3) + postcss-nested: 6.2.0(postcss@8.5.10) postcss-selector-parser: 6.1.2 - resolve: 1.22.11 + resolve: 1.22.12 sucrase: 3.35.1 transitivePeerDependencies: - tsx - yaml - tapable@2.2.1: {} - tar-fs@2.1.4: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 - pump: 3.0.3 + pump: 3.0.4 tar-stream: 2.2.0 tar-stream@2.2.0: @@ -18786,12 +15881,6 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 - temp-dir@2.0.0: {} - - temp@0.8.4: - dependencies: - rimraf: 2.6.3 - terser@5.46.1: dependencies: '@jridgewell/source-map': 0.3.11 @@ -18803,8 +15892,6 @@ snapshots: text-hex@1.0.0: {} - text-table@0.2.0: {} - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -18813,7 +15900,7 @@ snapshots: dependencies: any-promise: 1.3.0 - three@0.165.0: {} + three@0.183.2: {} throat@5.0.0: {} @@ -18832,14 +15919,14 @@ snapshots: tiny-warning@1.0.3: {} - tinyglobby@0.2.15: + tinyglobby@0.2.16: dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 titleize@2.1.0: {} - tlds@1.255.0: {} + tlds@1.261.0: {} tldts-core@6.1.86: {} @@ -18891,26 +15978,22 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.4.3(typescript@5.4.5): - dependencies: - typescript: 5.4.5 - - ts-api-utils@2.4.0(typescript@5.4.5): + ts-api-utils@2.5.0(typescript@5.4.5): dependencies: typescript: 5.4.5 ts-interface-checker@0.1.13: {} - ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@20.5.1)(typescript@5.4.5): + ts-node@10.9.2(@types/node@20.5.1)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 + '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 20.5.1 - acorn: 8.15.0 - acorn-walk: 8.3.3 + acorn: 8.16.0 + acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.4 @@ -18918,19 +16001,17 @@ snapshots: typescript: 5.4.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - optionalDependencies: - '@swc/core': 1.6.5(@swc/helpers@0.5.11) - ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5): + ts-node@10.9.2(@types/node@22.10.5)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 + '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 22.10.5 - acorn: 8.15.0 - acorn-walk: 8.3.3 + acorn: 8.16.0 + acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.4 @@ -18938,45 +16019,27 @@ snapshots: typescript: 5.4.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - optionalDependencies: - '@swc/core': 1.6.5(@swc/helpers@0.5.11) tsc-alias@1.8.16: dependencies: chokidar: 3.6.0 commander: 9.5.0 - get-tsconfig: 4.13.0 + get-tsconfig: 4.14.0 globby: 11.1.0 - mylas: 2.1.13 + mylas: 2.1.14 normalize-path: 3.0.0 plimit-lit: 1.6.1 - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - tsconfig-paths@4.2.0: dependencies: json5: 2.2.3 minimist: 1.2.8 strip-bom: 3.0.0 - tslib@1.14.1: {} - - tslib@2.4.0: {} - tslib@2.8.1: {} tsscmp@1.0.6: {} - tsutils@3.21.0(typescript@4.9.5): - dependencies: - tslib: 1.14.1 - typescript: 4.9.5 - tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 @@ -18987,12 +16050,8 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-detect@4.0.8: {} - type-fest@0.18.1: {} - type-fest@0.20.2: {} - type-fest@0.21.3: {} type-fest@0.6.0: {} @@ -19014,7 +16073,7 @@ snapshots: typed-array-byte-length@1.0.3: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 @@ -19023,7 +16082,7 @@ snapshots: typed-array-byte-offset@1.0.4: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.8 + call-bind: 1.0.9 for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 @@ -19032,24 +16091,24 @@ snapshots: typed-array-length@1.0.7: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 for-each: 0.3.5 gopd: 1.2.0 is-typed-array: 1.1.15 - possible-typed-array-names: 1.0.0 + possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 typedarray@0.0.6: {} - typeorm@0.3.28(babel-plugin-macros@3.1.0)(pg@8.17.2)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5)): + typeorm@0.3.28(babel-plugin-macros@3.1.0)(pg@8.17.2)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.4.5)): dependencies: '@sqltools/formatter': 1.2.5 ansis: 4.2.0 app-root-path: 3.1.0 buffer: 6.0.3 - dayjs: 1.11.19 + dayjs: 1.11.20 debug: 4.4.3(supports-color@5.5.0) - dedent: 1.7.1(babel-plugin-macros@3.1.0) + dedent: 1.7.2(babel-plugin-macros@3.1.0) dotenv: 16.6.1 glob: 10.5.0 reflect-metadata: 0.2.2 @@ -19061,23 +16120,31 @@ snapshots: optionalDependencies: pg: 8.17.2 sqlite3: 5.1.7 - ts-node: 10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@22.10.5)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color - typescript@4.9.5: {} + typescript-eslint@8.58.2(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5): + dependencies: + '@typescript-eslint/eslint-plugin': 8.58.2(@typescript-eslint/parser@8.58.2(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/parser': 8.58.2(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.4.5) + '@typescript-eslint/utils': 8.58.2(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + eslint: 9.39.3(jiti@2.6.1) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color typescript@5.4.5: {} - ua-parser-js@1.0.40: {} + typescript@5.9.3: {} + + ua-parser-js@1.0.41: {} uc.micro@2.1.0: optional: true - uglify-js@3.19.3: - optional: true - uid-safe@2.1.5: dependencies: random-bytes: 1.0.0 @@ -19085,42 +16152,38 @@ snapshots: unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 - has-bigints: 1.0.2 + has-bigints: 1.1.0 has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 undefsafe@2.0.5: {} - underscore.deep@0.5.3(underscore@1.13.7): + underscore.deep@0.5.3(underscore@1.13.8): dependencies: - underscore: 1.13.7 + underscore: 1.13.8 - underscore@1.13.7: {} - - undici-types@5.26.5: {} + underscore@1.13.8: {} undici-types@6.20.0: {} - undici@7.18.2: {} + undici-types@6.21.0: {} - unicode-canonical-property-names-ecmascript@2.0.0: {} + undici@7.25.0: {} - unicode-emoji-utils@1.2.0: - dependencies: - emoji-regex: 10.3.0 + unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-match-property-ecmascript@2.0.0: dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 - unicode-property-aliases-ecmascript: 2.1.0 + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.2.0 unicode-match-property-value-ecmascript@2.2.1: {} - unicode-property-aliases-ecmascript@2.1.0: {} + unicode-property-aliases-ecmascript@2.2.0: {} unified@10.1.2: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 bail: 2.0.2 extend: 3.0.2 is-buffer: 2.0.5 @@ -19150,38 +16213,36 @@ snapshots: unist-util-is@5.2.1: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-position@4.0.4: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-stringify-position@3.0.3: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-visit-parents@5.1.3: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-is: 5.2.1 unist-util-visit@4.1.2: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-is: 5.2.1 unist-util-visit-parents: 5.1.3 - universalify@0.1.2: {} - universalify@2.0.1: {} unpipe@1.0.0: {} untildify@4.0.0: {} - update-browserslist-db@1.2.3(browserslist@4.28.1): + update-browserslist-db@1.2.3(browserslist@4.28.2): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.2 escalade: 3.2.0 picocolors: 1.1.1 @@ -19189,11 +16250,11 @@ snapshots: dependencies: punycode: 2.3.1 - use-isomorphic-layout-effect@1.2.1(@types/react@18.3.27)(react@18.3.1): + use-isomorphic-layout-effect@1.2.1(@types/react@18.3.28)(react@18.3.1): dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.27 + '@types/react': 18.3.28 use-sync-external-store@1.6.0(react@18.3.1): dependencies: @@ -19226,7 +16287,7 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - validator@13.15.23: {} + validator@13.15.35: {} vary@1.1.2: {} @@ -19234,16 +16295,16 @@ snapshots: dependencies: assert-plus: 1.0.0 core-util-is: 1.0.2 - extsprintf: 1.4.1 + extsprintf: 1.3.0 vfile-message@3.1.4: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-stringify-position: 3.0.3 vfile@5.3.7: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 is-buffer: 2.0.5 unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 @@ -19274,17 +16335,6 @@ snapshots: transitivePeerDependencies: - supports-color - web-resource-inliner@5.0.0(encoding@0.1.13): - dependencies: - ansi-colors: 4.1.3 - escape-goat: 3.0.0 - htmlparser2: 4.1.0 - mime: 2.6.0 - node-fetch: 2.7.0(encoding@0.1.13) - valid-data-url: 3.0.1 - transitivePeerDependencies: - - encoding - web-resource-inliner@6.0.1(encoding@0.1.13): dependencies: ansi-colors: 4.1.3 @@ -19318,30 +16368,28 @@ snapshots: call-bound: 1.0.4 function.prototype.name: 1.1.8 has-tostringtag: 1.0.2 - is-async-function: 2.0.0 + is-async-function: 2.1.1 is-date-object: 1.1.0 is-finalizationregistry: 1.1.1 - is-generator-function: 1.0.10 + is-generator-function: 1.1.2 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-typed-array: 1.1.20 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.3 + is-weakset: 2.0.4 - which-module@2.0.1: {} - - which-typed-array@1.1.19: + which-typed-array@1.1.20: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 for-each: 0.3.5 get-proto: 1.0.1 @@ -19392,16 +16440,13 @@ snapshots: with@7.0.2: dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 assert-never: 1.4.0 babel-walk: 3.0.0-canary-5 word-wrap@1.2.5: {} - wordwrap@1.0.0: - optional: true - wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -19416,44 +16461,30 @@ snapshots: wrap-ansi@8.1.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 5.1.2 - strip-ansi: 7.1.0 + strip-ansi: 7.2.0 wrappy@1.0.2: {} - write-file-atomic@2.4.3: - dependencies: - graceful-fs: 4.2.11 - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - - ws@6.2.3: - dependencies: - async-limiter: 1.0.1 - ws@7.5.10: {} xml2js@0.5.0: dependencies: - sax: 1.4.1 + sax: 1.6.0 xmlbuilder: 11.0.1 xmlbuilder@11.0.1: {} xtend@4.0.2: {} - y18n@4.0.3: {} - y18n@5.0.8: {} yallist@3.1.1: {} yallist@4.0.0: {} - yaml@1.10.2: {} - - yaml@2.8.2: {} + yaml@1.10.3: {} yaml@2.8.3: {} @@ -19462,29 +16493,10 @@ snapshots: argparse: 1.0.10 glob: 7.2.3 - yargs-parser@18.1.3: - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - yargs-parser@20.2.9: {} yargs-parser@21.1.1: {} - yargs@15.4.1: - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 18.1.3 - yargs@16.2.0: dependencies: cliui: 7.0.4 @@ -19516,18 +16528,24 @@ snapshots: yup@0.32.11: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@types/lodash': 4.17.21 lodash: 4.17.23 - lodash-es: 4.17.23 + lodash-es: 4.18.1 nanoclone: 0.2.1 property-expr: 2.0.6 toposort: 2.0.2 zdog@1.1.3: {} + zod-validation-error@4.0.2(zod@4.3.6): + dependencies: + zod: 4.3.6 + zod@4.3.6: {} - zustand@3.7.2(react@18.3.1): + zustand@5.0.12(@types/react@18.3.28)(react@18.3.1)(use-sync-external-store@1.6.0(react@18.3.1)): optionalDependencies: + '@types/react': 18.3.28 react: 18.3.1 + use-sync-external-store: 1.6.0(react@18.3.1) diff --git a/seerr-api.yml b/seerr-api.yml index aaaf30bf4..9600375cc 100644 --- a/seerr-api.yml +++ b/seerr-api.yml @@ -706,10 +706,18 @@ components: example: A Label PublicSettings: type: object + required: + - initialized + - plexClientIdentifier properties: initialized: type: boolean example: false + plexClientIdentifier: + type: string + format: uuid + description: Instance Plex OAuth client identifier + example: 6919275e-142a-48d8-be6b-93594cbd4626 MovieResult: type: object required: @@ -4117,8 +4125,16 @@ paths: name: sort schema: type: string - enum: [created, updated, requests, displayname] + enum: [created, updated, requests, displayname, usertype, role] default: created + - in: query + name: sortDirection + description: | + Sort direction. When omitted, the server chooses the direction per sort + field (e.g. displayname defaults to asc, requests/updated to desc). + schema: + type: string + enum: [asc, desc] - in: query name: q required: false @@ -4620,6 +4636,14 @@ paths: example: '1' schema: type: string + - in: query + name: mediaType + required: true + schema: + type: string + enum: + - movie + - tv responses: '200': description: Blocklist details in JSON @@ -4635,6 +4659,14 @@ paths: example: '1' schema: type: string + - in: query + name: mediaType + required: true + schema: + type: string + enum: + - movie + - tv responses: '204': description: Succesfully removed media item @@ -4737,6 +4769,14 @@ paths: example: '1' schema: type: string + - in: query + name: mediaType + required: true + schema: + type: string + enum: + - movie + - tv responses: '200': description: Blocklist details in JSON @@ -4755,9 +4795,60 @@ paths: example: '1' schema: type: string + - in: query + name: mediaType + required: true + schema: + type: string + enum: + - movie + - tv responses: '204': description: Succesfully removed media item + /blocklist/collection/{collectionId}: + post: + summary: Add collection to blocklist + description: Adds all movies in a collection to the blocklist + tags: + - blocklist + parameters: + - in: path + name: collectionId + description: Collection ID + required: true + example: '1424991' + schema: + type: string + requestBody: + required: false + content: + application/json: + schema: + type: object + responses: + '201': + description: Successfully added collection to blocklist + '500': + description: Error adding collection to blocklist + delete: + summary: Remove collection from blocklist + description: Removes all movies in a collection from the blocklist + tags: + - blocklist + parameters: + - in: path + name: collectionId + description: Collection ID + required: true + example: '1424991' + schema: + type: string + responses: + '204': + description: Successfully removed collection from blocklist + '500': + description: Error removing collection from blocklist /watchlist: post: summary: Add media to watchlist @@ -4790,6 +4881,14 @@ paths: example: '1' schema: type: string + - in: query + name: mediaType + required: true + schema: + type: string + enum: + - movie + - tv responses: '204': description: Succesfully removed watchlist item @@ -5964,6 +6063,23 @@ paths: schema: type: string example: en + - in: query + name: mediaType + schema: + type: string + enum: + - all + - movie + - tv + default: all + - in: query + name: timeWindow + schema: + type: string + enum: + - day + - week + default: day responses: '200': description: Results diff --git a/server/api/animelist.ts b/server/api/animelist.ts index 9351a9ae4..01687ddd3 100644 --- a/server/api/animelist.ts +++ b/server/api/animelist.ts @@ -154,7 +154,9 @@ class AnimeListMapping { { label: 'Anime-List Sync' } ); } catch (e) { - throw new Error(`Failed to load Anime-List mappings: ${e.message}`); + throw new Error(`Failed to load Anime-List mappings: ${e.message}`, { + cause: e, + }); } }; @@ -173,7 +175,9 @@ class AnimeListMapping { response.data.pipe(writer); }); } catch (e) { - throw new Error(`Failed to download Anime-List mapping: ${e.message}`); + throw new Error(`Failed to download Anime-List mapping: ${e.message}`, { + cause: e, + }); } }; diff --git a/server/api/jellyfin.ts b/server/api/jellyfin.ts index 1507f00b1..28afc3e0e 100644 --- a/server/api/jellyfin.ts +++ b/server/api/jellyfin.ts @@ -101,6 +101,7 @@ export interface JellyfinMediaSource { export interface JellyfinLibraryItemExtended extends JellyfinLibraryItem { ProviderIds: { Tmdb?: string; + TheMovieDb?: string; Imdb?: string; Tvdb?: string; AniDB?: string; @@ -137,11 +138,14 @@ class JellyfinAPI extends ExternalAPI { ? deviceId : Buffer.from('BOT_seerr').toString('base64'); - let authHeaderVal: string; + const version = + settings.main.mediaServerType === MediaServerType.EMBY + ? '1.0.0' + : getAppVersion(); + + let authHeaderVal = `MediaBrowser Client="Seerr", Device="Seerr", DeviceId="${safeDeviceId}", Version="${version}"`; if (authToken) { - authHeaderVal = `MediaBrowser Client="Seerr", Device="Seerr", DeviceId="${safeDeviceId}", Version="${getAppVersion()}", Token="${authToken}"`; - } else { - authHeaderVal = `MediaBrowser Client="Seerr", Device="Seerr", DeviceId="${safeDeviceId}", Version="${getAppVersion()}"`; + authHeaderVal += `, Token="${authToken}"`; } super( @@ -284,7 +288,7 @@ class JellyfinAPI extends ExternalAPI { const mediaFolderResponse = await this.get(`/Library/MediaFolders`); return this.mapLibraries(mediaFolderResponse.Items); - } catch (mediaFoldersResponseError) { + } catch { // fallback to user views to get libraries // this only and maybe/depending on factors affects LDAP users try { diff --git a/server/api/plextv.ts b/server/api/plextv.ts index bfc75bc15..cec084c30 100644 --- a/server/api/plextv.ts +++ b/server/api/plextv.ts @@ -205,7 +205,7 @@ class PlexTvAPI extends ExternalAPI { label: 'Plex.tv API', errorMessage: e.message, }); - throw new Error('Invalid auth token'); + throw new Error('Invalid auth token', { cause: e }); } } @@ -221,7 +221,7 @@ class PlexTvAPI extends ExternalAPI { `Something went wrong while getting the account from plex.tv: ${e.message}`, { label: 'Plex.tv API' } ); - throw new Error('Invalid auth token'); + throw new Error('Invalid auth token', { cause: e }); } } diff --git a/server/api/pushover.ts b/server/api/pushover.ts index 92b931300..fb6735539 100644 --- a/server/api/pushover.ts +++ b/server/api/pushover.ts @@ -48,7 +48,9 @@ class PushoverAPI extends ExternalAPI { return mapSounds(data.sounds); } catch (e) { - throw new Error(`[Pushover] Failed to retrieve sounds: ${e.message}`); + throw new Error(`[Pushover] Failed to retrieve sounds: ${e.message}`, { + cause: e, + }); } } } diff --git a/server/api/rating/imdbRadarrProxy.ts b/server/api/rating/imdbRadarrProxy.ts index b495e579a..0ae0a6da3 100644 --- a/server/api/rating/imdbRadarrProxy.ts +++ b/server/api/rating/imdbRadarrProxy.ts @@ -192,7 +192,8 @@ class IMDBRadarrProxy extends ExternalAPI { }; } catch (e) { throw new Error( - `[IMDB RADARR PROXY API] Failed to retrieve movie ratings: ${e.message}` + `[IMDB RADARR PROXY API] Failed to retrieve movie ratings: ${e.message}`, + { cause: e } ); } } diff --git a/server/api/rating/rottentomatoes.ts b/server/api/rating/rottentomatoes.ts index 9b509e95b..c21739de4 100644 --- a/server/api/rating/rottentomatoes.ts +++ b/server/api/rating/rottentomatoes.ts @@ -167,7 +167,8 @@ class RottenTomatoes extends ExternalAPI { }; } catch (e) { throw new Error( - `[RT API] Failed to retrieve movie ratings: ${e.message}` + `[RT API] Failed to retrieve movie ratings: ${e.message}`, + { cause: e } ); } } @@ -205,7 +206,9 @@ class RottenTomatoes extends ExternalAPI { year: Number(tvshow.releaseYear), }; } catch (e) { - throw new Error(`[RT API] Failed to retrieve tv ratings: ${e.message}`); + throw new Error(`[RT API] Failed to retrieve tv ratings: ${e.message}`, { + cause: e, + }); } } } diff --git a/server/api/servarr/base.ts b/server/api/servarr/base.ts index 5e18f5b49..70b1e8c78 100644 --- a/server/api/servarr/base.ts +++ b/server/api/servarr/base.ts @@ -121,7 +121,8 @@ class ServarrBase extends ExternalAPI { return response.data; } catch (e) { throw new Error( - `[${this.apiName}] Failed to retrieve system status: ${e.message}` + `[${this.apiName}] Failed to retrieve system status: ${e.message}`, + { cause: e } ); } }; @@ -137,7 +138,8 @@ class ServarrBase extends ExternalAPI { return data; } catch (e) { throw new Error( - `[${this.apiName}] Failed to retrieve profiles: ${e.message}` + `[${this.apiName}] Failed to retrieve profiles: ${e.message}`, + { cause: e } ); } }; @@ -153,7 +155,8 @@ class ServarrBase extends ExternalAPI { return data; } catch (e) { throw new Error( - `[${this.apiName}] Failed to retrieve root folders: ${e.message}` + `[${this.apiName}] Failed to retrieve root folders: ${e.message}`, + { cause: e } ); } }; @@ -172,7 +175,8 @@ class ServarrBase extends ExternalAPI { return response.data.records; } catch (e) { throw new Error( - `[${this.apiName}] Failed to retrieve queue: ${e.message}` + `[${this.apiName}] Failed to retrieve queue: ${e.message}`, + { cause: e } ); } }; @@ -184,7 +188,8 @@ class ServarrBase extends ExternalAPI { return response.data; } catch (e) { throw new Error( - `[${this.apiName}] Failed to retrieve tags: ${e.message}` + `[${this.apiName}] Failed to retrieve tags: ${e.message}`, + { cause: e } ); } }; @@ -197,7 +202,9 @@ class ServarrBase extends ExternalAPI { return response.data; } catch (e) { - throw new Error(`[${this.apiName}] Failed to create tag: ${e.message}`); + throw new Error(`[${this.apiName}] Failed to create tag: ${e.message}`, { + cause: e, + }); } }; @@ -216,7 +223,9 @@ class ServarrBase extends ExternalAPI { return response.data; } catch (e) { - throw new Error(`[${this.apiName}] Failed to rename tag: ${e.message}`); + throw new Error(`[${this.apiName}] Failed to rename tag: ${e.message}`, { + cause: e, + }); } }; @@ -234,7 +243,9 @@ class ServarrBase extends ExternalAPI { ...options, }); } catch (e) { - throw new Error(`[${this.apiName}] Failed to run command: ${e.message}`); + throw new Error(`[${this.apiName}] Failed to run command: ${e.message}`, { + cause: e, + }); } } } diff --git a/server/api/servarr/radarr.ts b/server/api/servarr/radarr.ts index 75f320269..1d35778c0 100644 --- a/server/api/servarr/radarr.ts +++ b/server/api/servarr/radarr.ts @@ -74,7 +74,9 @@ class RadarrAPI extends ServarrBase<{ movieId: number }> { return response.data; } catch (e) { - throw new Error(`[Radarr] Failed to retrieve movies: ${e.message}`); + throw new Error(`[Radarr] Failed to retrieve movies: ${e.message}`, { + cause: e, + }); } }; @@ -84,7 +86,9 @@ class RadarrAPI extends ServarrBase<{ movieId: number }> { return response.data; } catch (e) { - throw new Error(`[Radarr] Failed to retrieve movie: ${e.message}`); + throw new Error(`[Radarr] Failed to retrieve movie: ${e.message}`, { + cause: e, + }); } }; @@ -107,7 +111,7 @@ class RadarrAPI extends ServarrBase<{ movieId: number }> { errorMessage: e.message, tmdbId: id, }); - throw new Error('Movie not found'); + throw new Error('Movie not found', { cause: e }); } } @@ -240,7 +244,7 @@ class RadarrAPI extends ServarrBase<{ movieId: number }> { response: e?.response?.data, } ); - throw new Error('Failed to add movie to Radarr'); + throw new Error('Failed to add movie to Radarr', { cause: e }); } }; @@ -274,7 +278,9 @@ class RadarrAPI extends ServarrBase<{ movieId: number }> { }); logger.info(`[Radarr] Removed movie ${title}`); } catch (e) { - throw new Error(`[Radarr] Failed to remove movie: ${e.message}`); + throw new Error(`[Radarr] Failed to remove movie: ${e.message}`, { + cause: e, + }); } }; diff --git a/server/api/servarr/sonarr.ts b/server/api/servarr/sonarr.ts index 01b429ba5..33354e1cd 100644 --- a/server/api/servarr/sonarr.ts +++ b/server/api/servarr/sonarr.ts @@ -49,6 +49,7 @@ export interface SonarrSeries { languageProfileId: number; seasonFolder: boolean; monitored: boolean; + monitorNewItems: 'all' | 'none'; useSceneNumbering: boolean; runtime: number; tvdbId: number; @@ -98,6 +99,7 @@ export interface AddSeriesOptions { tags?: number[]; seriesType: SonarrSeries['seriesType']; monitored?: boolean; + monitorNewItems?: SonarrSeries['monitorNewItems']; searchNow?: boolean; } @@ -121,7 +123,9 @@ class SonarrAPI extends ServarrBase<{ return response.data; } catch (e) { - throw new Error(`[Sonarr] Failed to retrieve series: ${e.message}`); + throw new Error(`[Sonarr] Failed to retrieve series: ${e.message}`, { + cause: e, + }); } } @@ -131,7 +135,10 @@ class SonarrAPI extends ServarrBase<{ return response.data; } catch (e) { - throw new Error(`[Sonarr] Failed to retrieve series by ID: ${e.message}`); + throw new Error( + `[Sonarr] Failed to retrieve series by ID: ${e.message}`, + { cause: e } + ); } } @@ -154,7 +161,7 @@ class SonarrAPI extends ServarrBase<{ errorMessage: e.message, title, }); - throw new Error('No series found'); + throw new Error('No series found', { cause: e }); } } @@ -177,7 +184,7 @@ class SonarrAPI extends ServarrBase<{ errorMessage: e.message, tvdbId: id, }); - throw new Error('Series not found'); + throw new Error('Series not found', { cause: e }); } } @@ -269,6 +276,7 @@ class SonarrAPI extends ServarrBase<{ tags: options.tags, seasonFolder: options.seasonFolder, monitored: options.monitored, + monitorNewItems: options.monitorNewItems, rootFolderPath: options.rootFolderPath, seriesType: options.seriesType, addOptions: { @@ -300,7 +308,7 @@ class SonarrAPI extends ServarrBase<{ options, response: e?.response?.data, }); - throw new Error('Failed to add series'); + throw new Error('Failed to add series', { cause: e }); } } @@ -322,7 +330,7 @@ class SonarrAPI extends ServarrBase<{ } ); - throw new Error('Failed to get language profiles'); + throw new Error('Failed to get language profiles', { cause: e }); } } @@ -358,7 +366,7 @@ class SonarrAPI extends ServarrBase<{ errorMessage: e.message, seriesId, }); - throw new Error('Failed to get episodes'); + throw new Error('Failed to get episodes', { cause: e }); } } @@ -374,7 +382,7 @@ class SonarrAPI extends ServarrBase<{ errorMessage: e.message, episodeIds, }); - throw new Error('Failed to monitor episodes'); + throw new Error('Failed to monitor episodes', { cause: e }); } } @@ -413,7 +421,9 @@ class SonarrAPI extends ServarrBase<{ }); logger.info(`[Sonarr] Removed series ${title}`); } catch (e) { - throw new Error(`[Sonarr] Failed to remove series: ${e.message}`); + throw new Error(`[Sonarr] Failed to remove series: ${e.message}`, { + cause: e, + }); } }; diff --git a/server/api/tautulli.ts b/server/api/tautulli.ts index e9cb65ade..977560a57 100644 --- a/server/api/tautulli.ts +++ b/server/api/tautulli.ts @@ -140,7 +140,8 @@ class TautulliAPI { errorMessage: e.message, }); throw new Error( - `[Tautulli] Failed to fetch Tautulli server info: ${e.message}` + `[Tautulli] Failed to fetch Tautulli server info: ${e.message}`, + { cause: e } ); } } @@ -168,7 +169,8 @@ class TautulliAPI { } ); throw new Error( - `[Tautulli] Failed to fetch media watch stats: ${e.message}` + `[Tautulli] Failed to fetch media watch stats: ${e.message}`, + { cause: e } ); } } @@ -196,7 +198,8 @@ class TautulliAPI { } ); throw new Error( - `[Tautulli] Failed to fetch media watch users: ${e.message}` + `[Tautulli] Failed to fetch media watch users: ${e.message}`, + { cause: e } ); } } @@ -227,7 +230,8 @@ class TautulliAPI { } ); throw new Error( - `[Tautulli] Failed to fetch user watch stats: ${e.message}` + `[Tautulli] Failed to fetch user watch stats: ${e.message}`, + { cause: e } ); } } @@ -287,7 +291,8 @@ class TautulliAPI { } ); throw new Error( - `[Tautulli] Failed to fetch user watch history: ${e.message}` + `[Tautulli] Failed to fetch user watch history: ${e.message}`, + { cause: e } ); } } diff --git a/server/api/themoviedb/index.ts b/server/api/themoviedb/index.ts index e7621a4af..305d6048d 100644 --- a/server/api/themoviedb/index.ts +++ b/server/api/themoviedb/index.ts @@ -162,7 +162,7 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { }); return data; - } catch (e) { + } catch { return { page: 1, results: [], @@ -191,7 +191,7 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { }); return data; - } catch (e) { + } catch { return { page: 1, results: [], @@ -220,7 +220,7 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { }); return data; - } catch (e) { + } catch { return { page: 1, results: [], @@ -244,7 +244,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch person details: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch person details: ${e.message}`, { + cause: e, + }); } }; @@ -266,7 +268,8 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { throw new Error( - `[TMDB] Failed to fetch person combined credits: ${e.message}` + `[TMDB] Failed to fetch person combined credits: ${e.message}`, + { cause: e } ); } }; @@ -286,15 +289,55 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { language, append_to_response: 'credits,external_ids,videos,keywords,release_dates,watch/providers', - include_video_language: language + ', en', + include_video_language: language, }, }, 43200 ); + if ( + (!language || !language.startsWith('en')) && + !data.videos?.results?.some((video) => video.type === 'Trailer') + ) { + try { + const fallback = await this.get( + `/movie/${movieId}`, + { + params: { + language, + append_to_response: 'videos', + include_video_language: 'en', + }, + }, + 43200 + ); + + const localizedVideos = data.videos?.results ?? []; + const localizedVideoKeys = new Set( + localizedVideos.map((video) => video.key) + ); + const englishFallbackTrailers = + fallback.videos?.results?.filter( + (video) => + video.type === 'Trailer' && !localizedVideoKeys.has(video.key) + ) ?? []; + + if (englishFallbackTrailers.length > 0) { + data.videos = { + ...(data.videos ?? { results: [] }), + results: [...localizedVideos, ...englishFallbackTrailers], + }; + } + } catch { + // Ignore trailer fallback failures; return the original data. + } + } + return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch movie details: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch movie details: ${e.message}`, { + cause: e, + }); } }; @@ -313,15 +356,55 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { language, append_to_response: 'aggregate_credits,credits,external_ids,keywords,videos,content_ratings,watch/providers', - include_video_language: language + ', en', + include_video_language: language, }, }, 43200 ); + if ( + (!language || !language.startsWith('en')) && + !data.videos?.results?.some((video) => video.type === 'Trailer') + ) { + try { + const fallback = await this.get( + `/tv/${tvId}`, + { + params: { + language, + append_to_response: 'videos', + include_video_language: 'en', + }, + }, + 43200 + ); + + const localizedVideos = data.videos?.results ?? []; + const localizedVideoKeys = new Set( + localizedVideos.map((video) => video.key) + ); + const englishFallbackTrailers = + fallback.videos?.results?.filter( + (video) => + video.type === 'Trailer' && !localizedVideoKeys.has(video.key) + ) ?? []; + + if (englishFallbackTrailers.length > 0) { + data.videos = { + ...(data.videos ?? { results: [] }), + results: [...localizedVideos, ...englishFallbackTrailers], + }; + } + } catch { + // Ignore trailer fallback failures; return the original data. + } + } + return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch TV show details: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch TV show details: ${e.message}`, { + cause: e, + }); } }; @@ -354,7 +437,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch TV show details: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch TV show details: ${e.message}`, { + cause: e, + }); } }; @@ -380,7 +465,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch discover movies: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch discover movies: ${e.message}`, { + cause: e, + }); } } @@ -406,7 +493,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch discover movies: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch discover movies: ${e.message}`, { + cause: e, + }); } } @@ -432,7 +521,10 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch movies by keyword: ${e.message}`); + throw new Error( + `[TMDB] Failed to fetch movies by keyword: ${e.message}`, + { cause: e } + ); } } @@ -459,7 +551,8 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { throw new Error( - `[TMDB] Failed to fetch TV recommendations: ${e.message}` + `[TMDB] Failed to fetch TV recommendations: ${e.message}`, + { cause: e } ); } } @@ -483,7 +576,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch TV similar: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch TV similar: ${e.message}`, { + cause: e, + }); } } @@ -569,7 +664,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch discover movies: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch discover movies: ${e.message}`, { + cause: e, + }); } }; @@ -655,7 +752,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch discover TV: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch discover TV: ${e.message}`, { + cause: e, + }); } }; @@ -681,7 +780,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch upcoming movies: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch upcoming movies: ${e.message}`, { + cause: e, + }); } }; @@ -708,16 +809,20 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch all trending: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch all trending: ${e.message}`, { + cause: e, + }); } }; public getMovieTrending = async ({ page = 1, timeWindow = 'day', + language = this.locale, }: { page?: number; timeWindow?: 'day' | 'week'; + language?: string; } = {}): Promise => { try { const data = await this.get( @@ -725,22 +830,27 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { { params: { page, + language, }, } ); return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch all trending: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch all trending: ${e.message}`, { + cause: e, + }); } }; public getTvTrending = async ({ page = 1, timeWindow = 'day', + language = this.locale, }: { page?: number; timeWindow?: 'day' | 'week'; + language?: string; } = {}): Promise => { try { const data = await this.get( @@ -748,13 +858,16 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { { params: { page, + language, }, } ); return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch all trending: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch all trending: ${e.message}`, { + cause: e, + }); } }; @@ -786,7 +899,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to find by external ID: ${e.message}`); + throw new Error(`[TMDB] Failed to find by external ID: ${e.message}`, { + cause: e, + }); } } @@ -824,7 +939,8 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { throw new Error(`No movie or show returned from API for ID ${imdbId}`); } catch (e) { throw new Error( - `[TMDB] Failed to find media using external IMDb ID: ${e.message}` + `[TMDB] Failed to find media using external IMDb ID: ${e.message}`, + { cause: e } ); } } @@ -854,7 +970,8 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { throw new Error(`No show returned from API for ID ${tvdbId}`); } catch (e) { throw new Error( - `[TMDB] Failed to get TV show using the external TVDB ID: ${e.message}` + `[TMDB] Failed to get TV show using the external TVDB ID: ${e.message}`, + { cause: e } ); } } @@ -878,7 +995,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch collection: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch collection: ${e.message}`, { + cause: e, + }); } } @@ -894,7 +1013,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return regions; } catch (e) { - throw new Error(`[TMDB] Failed to fetch countries: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch countries: ${e.message}`, { + cause: e, + }); } } @@ -910,7 +1031,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return languages; } catch (e) { - throw new Error(`[TMDB] Failed to fetch langauges: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch langauges: ${e.message}`, { + cause: e, + }); } } @@ -922,7 +1045,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch movie studio: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch movie studio: ${e.message}`, { + cause: e, + }); } } @@ -932,7 +1057,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch TV network: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch TV network: ${e.message}`, { + cause: e, + }); } } @@ -983,7 +1110,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return movieGenres; } catch (e) { - throw new Error(`[TMDB] Failed to fetch movie genres: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch movie genres: ${e.message}`, { + cause: e, + }); } } @@ -1034,7 +1163,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return tvGenres; } catch (e) { - throw new Error(`[TMDB] Failed to fetch TV genres: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch TV genres: ${e.message}`, { + cause: e, + }); } } @@ -1049,7 +1180,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch movie certifications: ${e}`); + throw new Error(`[TMDB] Failed to fetch movie certifications: ${e}`, { + cause: e, + }); } }; @@ -1063,7 +1196,10 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch TV certifications: ${e.message}`); + throw new Error( + `[TMDB] Failed to fetch TV certifications: ${e.message}`, + { cause: e } + ); } }; @@ -1084,7 +1220,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { if (e.response?.status === 404) { return null; } - throw new Error(`[TMDB] Failed to fetch keyword: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch keyword: ${e.message}`, { + cause: e, + }); } } @@ -1109,7 +1247,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to search keyword: ${e.message}`); + throw new Error(`[TMDB] Failed to search keyword: ${e.message}`, { + cause: e, + }); } } @@ -1134,7 +1274,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to search companies: ${e.message}`); + throw new Error(`[TMDB] Failed to search companies: ${e.message}`, { + cause: e, + }); } } @@ -1157,7 +1299,8 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data.results; } catch (e) { throw new Error( - `[TMDB] Failed to fetch available watch regions: ${e.message}` + `[TMDB] Failed to fetch available watch regions: ${e.message}`, + { cause: e } ); } } @@ -1184,7 +1327,8 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data.results; } catch (e) { throw new Error( - `[TMDB] Failed to fetch movie watch providers: ${e.message}` + `[TMDB] Failed to fetch movie watch providers: ${e.message}`, + { cause: e } ); } } @@ -1211,7 +1355,8 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data.results; } catch (e) { throw new Error( - `[TMDB] Failed to fetch TV watch providers: ${e.message}` + `[TMDB] Failed to fetch TV watch providers: ${e.message}`, + { cause: e } ); } } diff --git a/server/api/tvdb/index.ts b/server/api/tvdb/index.ts index 62b6c85a0..62d7a4d5a 100644 --- a/server/api/tvdb/index.ts +++ b/server/api/tvdb/index.ts @@ -156,7 +156,7 @@ class Tvdb extends ExternalAPI implements TvShowProvider { } return tmdbTvShow; - } catch (error) { + } catch { return tmdbTvShow; } } catch (error) { diff --git a/server/api/tvdb/interfaces.ts b/server/api/tvdb/interfaces.ts index e32ffce56..50fe49746 100644 --- a/server/api/tvdb/interfaces.ts +++ b/server/api/tvdb/interfaces.ts @@ -166,6 +166,7 @@ const TMDB_TO_TVDB_MAPPING: Record & { el: 'ell', // Greek en: 'eng', // English es: 'spa', // Spanish + et: 'est', // Estonian fi: 'fin', // Finnish fr: 'fra', // French he: 'heb', // Hebrew @@ -175,6 +176,7 @@ const TMDB_TO_TVDB_MAPPING: Record & { it: 'ita', // Italian ja: 'jpn', // Japanese ko: 'kor', // Korean + lb: 'ltz', // Luxembourgish lt: 'lit', // Lithuanian nl: 'nld', // Dutch pl: 'pol', // Polish @@ -185,6 +187,7 @@ const TMDB_TO_TVDB_MAPPING: Record & { sv: 'swe', // Swedish tr: 'tur', // Turkish uk: 'ukr', // Ukrainian + vi: 'vie', // Vietnamese 'es-MX': 'spa', // Spanish (Latin America) -> Spanish 'nb-NO': 'nor', // Norwegian Bokmål -> Norwegian diff --git a/server/datasource.ts b/server/datasource.ts index d474658c1..0e3126f84 100644 --- a/server/datasource.ts +++ b/server/datasource.ts @@ -38,6 +38,17 @@ function buildSslConfig(): TlsOptions | undefined { }; } +const testConfig: DataSourceOptions = { + type: 'sqlite', + database: ':memory:', + synchronize: true, + dropSchema: true, + logging: boolFromEnv('DB_LOG_QUERIES'), + entities: ['server/entity/**/*.ts'], + migrations: ['server/migration/sqlite/**/*.ts'], + subscribers: ['server/subscriber/**/*.ts'], +}; + const devConfig: DataSourceOptions = { type: 'sqlite', database: process.env.CONFIG_DIRECTORY @@ -105,7 +116,9 @@ const postgresProdConfig: DataSourceOptions = { export const isPgsql = process.env.DB_TYPE === 'postgres'; function getDataSource(): DataSourceOptions { - if (process.env.NODE_ENV === 'production') { + if (process.env.NODE_ENV === 'test') { + return testConfig; + } else if (process.env.NODE_ENV === 'production') { return isPgsql ? postgresProdConfig : prodConfig; } else { return isPgsql ? postgresDevConfig : devConfig; diff --git a/server/entity/Blocklist.ts b/server/entity/Blocklist.ts index 2cf329796..df9943659 100644 --- a/server/entity/Blocklist.ts +++ b/server/entity/Blocklist.ts @@ -18,7 +18,7 @@ import { import type { ZodNumber, ZodOptional, ZodString } from 'zod'; @Entity() -@Unique(['tmdbId']) +@Unique(['tmdbId', 'mediaType']) export class Blocklist implements BlocklistItem { @PrimaryGeneratedColumn() public id: number; @@ -77,6 +77,7 @@ export class Blocklist implements BlocklistItem { let media = await mediaRepository.findOne({ where: { tmdbId: blocklistRequest.tmdbId, + mediaType: blocklistRequest.mediaType, }, }); diff --git a/server/entity/DiscoverSlider.ts b/server/entity/DiscoverSlider.ts index 0de0aef81..f69c6edb3 100644 --- a/server/entity/DiscoverSlider.ts +++ b/server/entity/DiscoverSlider.ts @@ -2,8 +2,13 @@ import type { DiscoverSliderType } from '@server/constants/discover'; import { defaultSliders } from '@server/constants/discover'; import { getRepository } from '@server/datasource'; import logger from '@server/logger'; -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; -import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; +import { + Column, + Entity, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; @Entity() class DiscoverSlider { @@ -53,11 +58,7 @@ class DiscoverSlider { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; constructor(init?: Partial) { diff --git a/server/entity/Issue.ts b/server/entity/Issue.ts index 547432fa7..a79936671 100644 --- a/server/entity/Issue.ts +++ b/server/entity/Issue.ts @@ -1,6 +1,6 @@ import type { IssueType } from '@server/constants/issue'; import { IssueStatus } from '@server/constants/issue'; -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; import { AfterLoad, Column, @@ -9,6 +9,7 @@ import { ManyToOne, OneToMany, PrimaryGeneratedColumn, + UpdateDateColumn, } from 'typeorm'; import IssueComment from './IssueComment'; import Media from './Media'; @@ -63,11 +64,7 @@ class Issue { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; @AfterLoad() diff --git a/server/entity/IssueComment.ts b/server/entity/IssueComment.ts index 373007180..428706003 100644 --- a/server/entity/IssueComment.ts +++ b/server/entity/IssueComment.ts @@ -1,10 +1,11 @@ -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; import { Column, Entity, Index, ManyToOne, PrimaryGeneratedColumn, + UpdateDateColumn, } from 'typeorm'; import Issue from './Issue'; import { User } from './User'; @@ -33,11 +34,7 @@ class IssueComment { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; constructor(init?: Partial) { diff --git a/server/entity/Media.ts b/server/entity/Media.ts index 8737ad0e0..52dc0a4d3 100644 --- a/server/entity/Media.ts +++ b/server/entity/Media.ts @@ -10,7 +10,7 @@ import type { DownloadingItem } from '@server/lib/downloadtracker'; import downloadTracker from '@server/lib/downloadtracker'; import { getSettings } from '@server/lib/settings'; import logger from '@server/logger'; -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; import { getHostname } from '@server/utils/getHostname'; import { AfterLoad, @@ -20,6 +20,7 @@ import { OneToMany, OneToOne, PrimaryGeneratedColumn, + UpdateDateColumn, } from 'typeorm'; import Issue from './Issue'; import { MediaRequest } from './MediaRequest'; @@ -30,22 +31,17 @@ import Season from './Season'; class Media { public static async getRelatedMedia( user: User | undefined, - tmdbIds: number | number[] + items: { tmdbId: number; mediaType: string }[] ): Promise { const mediaRepository = getRepository(Media); try { - let finalIds: number[]; - if (!Array.isArray(tmdbIds)) { - finalIds = [tmdbIds]; - } else { - finalIds = tmdbIds; - } - - if (finalIds.length === 0) { + if (items.length === 0) { return []; } + const finalIds = [...new Set(items.map((i) => i.tmdbId))]; + const media = await mediaRepository .createQueryBuilder('media') .leftJoinAndSelect( @@ -57,7 +53,9 @@ class Media { .where(' media.tmdbId in (:...finalIds)', { finalIds }) .getMany(); - return media; + return media.filter((m) => + items.some((i) => i.tmdbId === m.tmdbId && i.mediaType === m.mediaType) + ); } catch (e) { logger.error(e.message); return []; @@ -132,11 +130,7 @@ class Media { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; /** @@ -237,19 +231,19 @@ class Media { if (tautulliUrl) { this.tautulliUrl = `${tautulliUrl}/info?rating_key=${this.ratingKey}`; } + } - if (this.ratingKey4k) { - this.mediaUrl4k = `${ - webAppUrl ? webAppUrl : 'https://app.plex.tv/desktop' - }#!/server/${machineId}/details?key=%2Flibrary%2Fmetadata%2F${ - this.ratingKey4k - }`; + if (this.ratingKey4k) { + this.mediaUrl4k = `${ + webAppUrl ? webAppUrl : 'https://app.plex.tv/desktop' + }#!/server/${machineId}/details?key=%2Flibrary%2Fmetadata%2F${ + this.ratingKey4k + }`; - this.iOSPlexUrl4k = `plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F${this.ratingKey4k}&server=${machineId}`; + this.iOSPlexUrl4k = `plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F${this.ratingKey4k}&server=${machineId}`; - if (tautulliUrl) { - this.tautulliUrl4k = `${tautulliUrl}/info?rating_key=${this.ratingKey4k}`; - } + if (tautulliUrl) { + this.tautulliUrl4k = `${tautulliUrl}/info?rating_key=${this.ratingKey4k}`; } } } else { diff --git a/server/entity/MediaRequest.ts b/server/entity/MediaRequest.ts index 445b9e6ac..1184af71e 100644 --- a/server/entity/MediaRequest.ts +++ b/server/entity/MediaRequest.ts @@ -13,7 +13,7 @@ import notificationManager, { Notification } from '@server/lib/notifications'; import { Permission } from '@server/lib/permissions'; import { getSettings } from '@server/lib/settings'; import logger from '@server/logger'; -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; import { truncate } from 'lodash'; import { AfterInsert, @@ -26,6 +26,7 @@ import { OneToMany, PrimaryGeneratedColumn, RelationCount, + UpdateDateColumn, } from 'typeorm'; import Media from './Media'; import SeasonRequest from './SeasonRequest'; @@ -543,11 +544,7 @@ export class MediaRequest { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; @Column({ type: 'varchar' }) diff --git a/server/entity/OverrideRule.ts b/server/entity/OverrideRule.ts index aab72006f..4f9b1f902 100644 --- a/server/entity/OverrideRule.ts +++ b/server/entity/OverrideRule.ts @@ -1,5 +1,10 @@ -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; -import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; +import { + Column, + Entity, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; @Entity() class OverrideRule { @@ -36,11 +41,7 @@ class OverrideRule { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; constructor(init?: Partial) { diff --git a/server/entity/Season.ts b/server/entity/Season.ts index 56afc0aa3..3e35e6c80 100644 --- a/server/entity/Season.ts +++ b/server/entity/Season.ts @@ -1,11 +1,12 @@ import { MediaStatus } from '@server/constants/media'; -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; import { Column, Entity, Index, ManyToOne, PrimaryGeneratedColumn, + UpdateDateColumn, } from 'typeorm'; import Media from './Media'; @@ -32,11 +33,7 @@ class Season { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; constructor(init?: Partial) { diff --git a/server/entity/SeasonRequest.ts b/server/entity/SeasonRequest.ts index ab3cd405b..94ef079e9 100644 --- a/server/entity/SeasonRequest.ts +++ b/server/entity/SeasonRequest.ts @@ -1,11 +1,12 @@ import { MediaRequestStatus } from '@server/constants/media'; -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; import { Column, Entity, Index, ManyToOne, PrimaryGeneratedColumn, + UpdateDateColumn, } from 'typeorm'; import { MediaRequest } from './MediaRequest'; @@ -29,11 +30,7 @@ class SeasonRequest { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; constructor(init?: Partial) { diff --git a/server/entity/User.ts b/server/entity/User.ts index 011b1be49..9d1918f14 100644 --- a/server/entity/User.ts +++ b/server/entity/User.ts @@ -8,7 +8,7 @@ import type { PermissionCheckOptions } from '@server/lib/permissions'; import { Permission, hasPermission } from '@server/lib/permissions'; import { getSettings } from '@server/lib/settings'; import logger from '@server/logger'; -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; import { AfterDate } from '@server/utils/dateHelpers'; import bcrypt from 'bcrypt'; import { randomUUID } from 'crypto'; @@ -23,6 +23,7 @@ import { OneToOne, PrimaryGeneratedColumn, RelationCount, + UpdateDateColumn, } from 'typeorm'; import Issue from './Issue'; import { MediaRequest } from './MediaRequest'; @@ -79,7 +80,7 @@ export class User { @Column({ nullable: true, select: false }) public resetPasswordGuid?: string; - @Column({ type: 'date', nullable: true }) + @DbAwareColumn({ type: 'datetime', nullable: true }) public recoveryLinkExpirationDate?: Date | null; @Column({ type: 'integer', default: UserType.PLEX }) @@ -149,11 +150,7 @@ export class User { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; public warnings: string[] = []; @@ -197,7 +194,7 @@ export class User { public async generatePassword(): Promise { const password = generatePassword.randomPassword({ length: 16 }); - this.setPassword(password); + await this.setPassword(password); const { applicationTitle, applicationUrl } = getSettings().main; try { @@ -296,7 +293,7 @@ export class User { requestedBy: { id: this.id, }, - createdAt: AfterDate(movieDate), + ...(movieQuotaDays ? { createdAt: AfterDate(movieDate) } : {}), type: MediaType.MOVIE, status: Not(MediaRequestStatus.DECLINED), }, @@ -314,24 +311,28 @@ export class User { tvDate.setDate(tvDate.getDate() - tvQuotaDays); } const tvQuotaStartDate = tvDate.toJSON(); + const tvQuotaUsedQuery = requestRepository + .createQueryBuilder('request') + .leftJoin('request.requestedBy', 'requestedBy') + .where('request.type = :requestType', { + requestType: MediaType.TV, + }) + .andWhere('requestedBy.id = :userId', { + userId: this.id, + }) + .andWhere('request.status != :declinedStatus', { + declinedStatus: MediaRequestStatus.DECLINED, + }); + + if (tvQuotaDays) { + tvQuotaUsedQuery.andWhere('request.createdAt > :date', { + date: tvQuotaStartDate, + }); + } + const tvQuotaUsed = tvQuotaLimit ? ( - await requestRepository - .createQueryBuilder('request') - .leftJoin('request.seasons', 'seasons') - .leftJoin('request.requestedBy', 'requestedBy') - .where('request.type = :requestType', { - requestType: MediaType.TV, - }) - .andWhere('requestedBy.id = :userId', { - userId: this.id, - }) - .andWhere('request.createdAt > :date', { - date: tvQuotaStartDate, - }) - .andWhere('request.status != :declinedStatus', { - declinedStatus: MediaRequestStatus.DECLINED, - }) + await tvQuotaUsedQuery .addSelect((subQuery) => { return subQuery .select('COUNT(season.id)', 'seasonCount') @@ -351,10 +352,9 @@ export class User { remaining: movieQuotaLimit ? Math.max(0, movieQuotaLimit - movieQuotaUsed) : undefined, - restricted: + restricted: !!( movieQuotaLimit && movieQuotaLimit - movieQuotaUsed <= 0 - ? true - : false, + ), }, tv: { days: tvQuotaDays, @@ -363,8 +363,7 @@ export class User { remaining: tvQuotaLimit ? Math.max(0, tvQuotaLimit - tvQuotaUsed) : undefined, - restricted: - tvQuotaLimit && tvQuotaLimit - tvQuotaUsed <= 0 ? true : false, + restricted: !!(tvQuotaLimit && tvQuotaLimit - tvQuotaUsed <= 0), }, }; } diff --git a/server/entity/Watchlist.ts b/server/entity/Watchlist.ts index 54e65140c..e9def00f7 100644 --- a/server/entity/Watchlist.ts +++ b/server/entity/Watchlist.ts @@ -5,7 +5,7 @@ import Media from '@server/entity/Media'; import { User } from '@server/entity/User'; import type { WatchlistItem } from '@server/interfaces/api/discoverInterfaces'; import logger from '@server/logger'; -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; import { Column, Entity, @@ -13,6 +13,7 @@ import { ManyToOne, PrimaryGeneratedColumn, Unique, + UpdateDateColumn, } from 'typeorm'; import type { ZodNumber, ZodOptional, ZodString } from 'zod'; @@ -25,7 +26,7 @@ export class NotFoundError extends Error { } @Entity() -@Unique('UNIQUE_USER_DB', ['tmdbId', 'requestedBy']) +@Unique('UNIQUE_USER_DB', ['tmdbId', 'mediaType', 'requestedBy']) export class Watchlist implements WatchlistItem { @PrimaryGeneratedColumn() id: number; @@ -60,11 +61,7 @@ export class Watchlist implements WatchlistItem { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; constructor(init?: Partial) { @@ -142,11 +139,13 @@ export class Watchlist implements WatchlistItem { public static async deleteWatchlist( tmdbId: Watchlist['tmdbId'], + mediaType: MediaType, user: User ): Promise { const watchlistRepository = getRepository(this); const watchlist = await watchlistRepository.findOneBy({ tmdbId, + mediaType, requestedBy: { id: user.id }, }); if (!watchlist) { diff --git a/server/index.ts b/server/index.ts index 1ee4722c3..cd34d7d52 100644 --- a/server/index.ts +++ b/server/index.ts @@ -203,7 +203,7 @@ app server.use( '/api', session({ - secret: settings.clientId, + secret: settings.sessionSecret, resave: false, saveUninitialized: false, cookie: { diff --git a/server/interfaces/api/common.ts b/server/interfaces/api/common.ts index d9e9490b4..fb74c1702 100644 --- a/server/interfaces/api/common.ts +++ b/server/interfaces/api/common.ts @@ -13,7 +13,7 @@ export interface PaginatedResponse { * Get the keys of an object that are not functions */ type NonFunctionPropertyNames = { - // eslint-disable-next-line @typescript-eslint/ban-types + // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]; diff --git a/server/interfaces/api/settingsInterfaces.ts b/server/interfaces/api/settingsInterfaces.ts index ea08d4e61..3dfa61920 100644 --- a/server/interfaces/api/settingsInterfaces.ts +++ b/server/interfaces/api/settingsInterfaces.ts @@ -48,6 +48,7 @@ export interface PublicSettingsResponse { emailEnabled: boolean; newPlexLogin: boolean; youtubeUrl: string; + plexClientIdentifier: string; } export interface CacheItem { diff --git a/server/job/blocklistedTagsProcessor.ts b/server/job/blocklistedTagsProcessor.ts index d6bf7509c..038b242b5 100644 --- a/server/job/blocklistedTagsProcessor.ts +++ b/server/job/blocklistedTagsProcessor.ts @@ -14,7 +14,7 @@ import type { } from '@server/lib/scanners/baseScanner'; import { getSettings } from '@server/lib/settings'; import logger from '@server/logger'; -import { createTmdbWithRegionLanguage } from '@server/routes/discover'; +import { createTmdbWithBlocklistSettings } from '@server/routes/discover'; import type { EntityManager } from 'typeorm'; const TMDB_API_DELAY_MS = 250; @@ -65,7 +65,7 @@ class BlocklistedTagProcessor implements RunnableScanner { } private async createBlocklistEntries(em: EntityManager) { - const tmdb = createTmdbWithRegionLanguage(); + const tmdb = createTmdbWithBlocklistSettings(); const settings = getSettings(); const blocklistedTags = settings.main.blocklistedTags; @@ -173,7 +173,7 @@ class BlocklistedTagProcessor implements RunnableScanner { for (const entry of response.results) { const blocklistEntry = await blocklistRepository.findOne({ - where: { tmdbId: entry.id }, + where: { tmdbId: entry.id, mediaType }, }); if (blocklistEntry) { @@ -209,7 +209,11 @@ class BlocklistedTagProcessor implements RunnableScanner { const mediaRepository = em.getRepository(Media); const mediaToRemove = await mediaRepository .createQueryBuilder('media') - .innerJoinAndSelect(Blocklist, 'blist', 'blist.tmdbId = media.tmdbId') + .innerJoinAndSelect( + Blocklist, + 'blist', + 'blist.tmdbId = media.tmdbId AND blist.mediaType = media.mediaType' + ) .where(`blist.blocklistedTags IS NOT NULL`) .getMany(); diff --git a/server/job/schedule.ts b/server/job/schedule.ts index 6ce8f14b1..a9afd2f4d 100644 --- a/server/job/schedule.ts +++ b/server/job/schedule.ts @@ -97,7 +97,12 @@ export const startJobs = (): void => { logger.info('Starting scheduled job: Plex Watchlist Sync', { label: 'Jobs', }); - watchlistSync.syncWatchlist(); + watchlistSync.syncWatchlist().catch((e) => { + logger.error('Failed to sync watchlists', { + label: 'Plex Watchlist Sync', + errorMessage: e.message, + }); + }); }), }); } else if ( diff --git a/server/lib/email/openpgpEncrypt.ts b/server/lib/email/openpgpEncrypt.ts index dd320ea38..65dc6b6bf 100644 --- a/server/lib/email/openpgpEncrypt.ts +++ b/server/lib/email/openpgpEncrypt.ts @@ -80,29 +80,24 @@ class PGPEncryptor extends Transform { let previousHeader: string[] = []; for (let i = 0; i < linesInHeader.length; i++) { const line = linesInHeader[i]; - /** - * If it is a multi-line header (current line starts with whitespace) - * or it's the first line in the iteration - * add the current line with previous header and move on - */ + if (/^\s/.test(line) || i === 0) { previousHeader.push(line); - continue; + } else { + if ( + /^(content-type|content-transfer-encoding):/i.test( + previousHeader[0] + ) + ) { + contentHeaders.push(previousHeader); + } else { + emailHeaders.push(previousHeader); + } + previousHeader = [line]; } + } - /** - * This is done to prevent the last header - * from being missed - */ - if (i === linesInHeader.length - 1) { - previousHeader.push(line); - } - - /** - * We need to seperate the actual content headers - * so that we can add it as a header for the encrypted content - * So that the content will be displayed properly after decryption - */ + if (previousHeader.length > 0) { if ( /^(content-type|content-transfer-encoding):/i.test(previousHeader[0]) ) { @@ -110,7 +105,6 @@ class PGPEncryptor extends Transform { } else { emailHeaders.push(previousHeader); } - previousHeader = [line]; } // Generate a new boundary for the email content diff --git a/server/lib/imageproxy.ts b/server/lib/imageproxy.ts index 2b0161483..c485c1029 100644 --- a/server/lib/imageproxy.ts +++ b/server/lib/imageproxy.ts @@ -55,16 +55,12 @@ class ImageProxy { } } catch (e) { if (e.code === 'ENOENT') { - logger.error('Directory not found', { - label: 'Image Cache', - message: e.message, - }); - } else { - logger.error('Failed to read directory', { - label: 'Image Cache', - message: e.message, - }); + return; } + logger.error('Failed to read directory', { + label: 'Image Cache', + message: e.message, + }); } logger.info(`Cleared ${deletedImages} stale image(s) from cache '${key}'`, { @@ -254,7 +250,7 @@ class ImageProxy { imageBuffer: buffer, }; } - } catch (e) { + } catch { // No files. Treat as empty cache. } diff --git a/server/lib/notifications/agents/discord.ts b/server/lib/notifications/agents/discord.ts index 2b7175eda..e4c106ae6 100644 --- a/server/lib/notifications/agents/discord.ts +++ b/server/lib/notifications/agents/discord.ts @@ -214,16 +214,13 @@ class DiscordAgent : undefined; return { - title: payload.subject, + title: payload.event + ? `${payload.event}: ${payload.subject}` + : payload.subject, url, description: payload.message, color, timestamp: new Date().toISOString(), - author: payload.event - ? { - name: payload.event, - } - : undefined, fields, thumbnail: embedPoster ? { diff --git a/server/lib/notifications/agents/ntfy.ts b/server/lib/notifications/agents/ntfy.ts index 561df2c84..cc585508f 100644 --- a/server/lib/notifications/agents/ntfy.ts +++ b/server/lib/notifications/agents/ntfy.ts @@ -21,13 +21,17 @@ class NtfyAgent return settings.notifications.agents.ntfy; } + private escapeMarkdown(text: string): string { + return text.replace(/([\\`*_{}[\]()#+\-.!|>~<])/g, '\\$1'); + } + private buildPayload(type: Notification, payload: NotificationPayload) { const settings = getSettings(); const { applicationUrl } = settings.main; const { embedPoster } = settings.notifications.agents.ntfy; const topic = this.getSettings().options.topic; - const priority = 3; + const priority = this.getSettings().options.priority ?? 3; const title = payload.event ? `${payload.event} - ${payload.subject}` @@ -35,7 +39,10 @@ class NtfyAgent let message = payload.message ?? ''; if (payload.request) { - message += `\n\nRequested By: ${payload.request.requestedBy.displayName}`; + if (message) { + message = `**Description:**\n${message}`; + } + message += `${message ? '\n\n' : ''}**Requested By:** ${this.escapeMarkdown(payload.request.requestedBy.displayName)}`; let status = ''; switch (type) { @@ -58,14 +65,21 @@ class NtfyAgent } if (status) { - message += `\nRequest Status: ${status}`; + message += `\n**Request Status:** ${status}`; } } else if (payload.comment) { - message += `\nComment from ${payload.comment.user.displayName}:\n${payload.comment.message}`; + if (message) { + message = `**Description:**\n${message}\n\n`; + } + message += `**Comment:**\n${payload.comment.message}`; + message += `\n\n**Comment from:** ${this.escapeMarkdown(payload.comment.user.displayName)}`; } else if (payload.issue) { - message += `\n\nReported By: ${payload.issue.createdBy.displayName}`; - message += `\nIssue Type: ${IssueTypeName[payload.issue.issueType]}`; - message += `\nIssue Status: ${ + if (message) { + message = `**Description:**\n${message}`; + } + message += `${message ? '\n\n' : ''}**Reported By:** ${this.escapeMarkdown(payload.issue.createdBy.displayName)}`; + message += `\n**Issue Type:** ${IssueTypeName[payload.issue.issueType]}`; + message += `\n**Issue Status:** ${ payload.issue.status === IssueStatus.OPEN ? 'Open' : 'Resolved' }`; } @@ -86,6 +100,7 @@ class NtfyAgent priority, title, message, + markdown: true, attach, click, }; diff --git a/server/lib/notifications/agents/webhook.ts b/server/lib/notifications/agents/webhook.ts index 40b9d2254..40bf0bf58 100644 --- a/server/lib/notifications/agents/webhook.ts +++ b/server/lib/notifications/agents/webhook.ts @@ -25,14 +25,18 @@ const KeyMap: Record = { notifyuser_avatar: 'notifyUser.avatar', notifyuser_settings_discordId: 'notifyUser.settings.discordId', notifyuser_settings_telegramChatId: 'notifyUser.settings.telegramChatId', + media_imdbid: 'media.imdbId', media_tmdbid: 'media.tmdbId', media_tvdbid: 'media.tvdbId', media_type: 'media.mediaType', + media_jellyfinMediaId: (payload) => + payload.media?.jellyfinMediaId ?? payload.media?.jellyfinMediaId4k ?? '', media_status: (payload) => payload.media ? MediaStatus[payload.media.status] : '', media_status4k: (payload) => payload.media ? MediaStatus[payload.media.status4k] : '', request_id: 'request.id', + requestedBy_jellyfinUserId: 'request.requestedBy.jellyfinUserId', requestedBy_username: 'request.requestedBy.displayName', requestedBy_email: 'request.requestedBy.email', requestedBy_avatar: 'request.requestedBy.avatar', @@ -196,16 +200,36 @@ class WebhookAgent } try { + const headers: Record = {}; + + if (settings.options.authHeader) { + headers.Authorization = settings.options.authHeader; + } + + if ( + settings.options.customHeaders && + settings.options.customHeaders.length > 0 + ) { + settings.options.customHeaders.forEach((header) => { + const key = header.key?.trim(); + const value = header.value?.trim(); + + if (key && value) { + // Don't override Authorization header if it's already set via authHeader + if ( + key.toLowerCase() !== 'authorization' || + !settings.options.authHeader + ) { + headers[key] = value; + } + } + }); + } + await axios.post( webhookUrl, this.buildPayload(type, payload), - settings.options.authHeader - ? { - headers: { - Authorization: settings.options.authHeader, - }, - } - : undefined + Object.keys(headers).length > 0 ? { headers } : undefined ); return true; diff --git a/server/lib/notifications/index.ts b/server/lib/notifications/index.ts index 71aea8fe9..b822ae6ee 100644 --- a/server/lib/notifications/index.ts +++ b/server/lib/notifications/index.ts @@ -23,7 +23,7 @@ export const hasNotificationType = ( types: Notification | Notification[], value: number ): boolean => { - let total = 0; + let total: number; // If we are not checking any notifications, bail out and return true if (types === 0) { diff --git a/server/lib/overseerrMerge.ts b/server/lib/overseerrMerge.ts index 43b83d32c..aaa302085 100644 --- a/server/lib/overseerrMerge.ts +++ b/server/lib/overseerrMerge.ts @@ -36,7 +36,7 @@ const checkOverseerrMerge = async (): Promise => { // We have to replace Jellyseerr migrations not working with Overseerr with a custom one try { // Filter out the Jellyseerr migrations and replace them with the Seerr migration - // eslint-disable-next-line @typescript-eslint/ban-types + // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type const newMigrations: MixedList = migrations ?.filter( (migration) => @@ -89,6 +89,27 @@ const checkOverseerrMerge = async (): Promise => { await dbConnection.query('PRAGMA foreign_keys=ON'); } + // Fix corrupted quota values carried over from Overseerr + try { + await dbConnection.query( + `UPDATE user SET movieQuotaLimit = NULL WHERE typeof(movieQuotaLimit) = 'text'` + ); + await dbConnection.query( + `UPDATE user SET movieQuotaDays = NULL WHERE typeof(movieQuotaDays) = 'text'` + ); + await dbConnection.query( + `UPDATE user SET tvQuotaLimit = NULL WHERE typeof(tvQuotaLimit) = 'text'` + ); + await dbConnection.query( + `UPDATE user SET tvQuotaDays = NULL WHERE typeof(tvQuotaDays) = 'text'` + ); + } catch (error) { + logger.error('Failed to clean up corrupted quota values', { + label: 'Seerr Migration', + error: error.message, + }); + } + // MediaStatus.Blacklisted was added before MediaStatus.Deleted in Jellyseerr try { const mediaRepository = getRepository(Media); diff --git a/server/lib/scanners/jellyfin/index.ts b/server/lib/scanners/jellyfin/index.ts index f44159af4..64faab626 100644 --- a/server/lib/scanners/jellyfin/index.ts +++ b/server/lib/scanners/jellyfin/index.ts @@ -60,7 +60,9 @@ class JellyfinScanner } const anidbId = Number(metadata.ProviderIds.AniDB ?? null); - let tmdbId = Number(metadata.ProviderIds.Tmdb ?? null); + let tmdbId = Number( + metadata.ProviderIds.Tmdb || metadata.ProviderIds.TheMovieDb || null + ); let imdbId = metadata.ProviderIds.Imdb; // We use anidb only if we have the anidbId and nothing else @@ -227,10 +229,12 @@ class JellyfinScanner return; } - if (metadata.ProviderIds.Tmdb) { + if (metadata.ProviderIds.Tmdb || metadata.ProviderIds.TheMovieDb) { try { tvShow = await this.getTvShow({ - tmdbId: Number(metadata.ProviderIds.Tmdb), + tmdbId: Number( + metadata.ProviderIds.Tmdb || metadata.ProviderIds.TheMovieDb + ), }); } catch { this.log('Unable to find TMDb ID for this title.', 'debug', { diff --git a/server/lib/scanners/plex/index.ts b/server/lib/scanners/plex/index.ts index b464008e8..58111ca8a 100644 --- a/server/lib/scanners/plex/index.ts +++ b/server/lib/scanners/plex/index.ts @@ -367,18 +367,16 @@ class PlexScanner } } - if (mediaIds.tvdbId) { - await this.processShow( - mediaIds.tmdbId, - mediaIds.tvdbId ?? tvShow.external_ids.tvdb_id, - processableSeasons, - { - mediaAddedAt: new Date(metadata.addedAt * 1000), - ratingKey: ratingKey, - title: metadata.title, - } - ); - } + await this.processShow( + mediaIds.tmdbId, + mediaIds.tvdbId ?? tvShow.external_ids.tvdb_id, + processableSeasons, + { + mediaAddedAt: new Date(metadata.addedAt * 1000), + ratingKey: ratingKey, + title: metadata.title, + } + ); } private async getMediaIds(plexitem: PlexLibraryItem): Promise { diff --git a/server/lib/settings/index.ts b/server/lib/settings/index.ts index 1e659cd29..328876159 100644 --- a/server/lib/settings/index.ts +++ b/server/lib/settings/index.ts @@ -1,12 +1,18 @@ import { MediaServerType } from '@server/constants/server'; import { Permission } from '@server/lib/permissions'; import { runMigrations } from '@server/lib/settings/migrator'; -import { randomUUID } from 'crypto'; +import { randomBytes, randomUUID } from 'crypto'; import fs from 'fs/promises'; -import { merge } from 'lodash'; +import { mergeWith } from 'lodash'; import path from 'path'; import webpush from 'web-push'; +// Prevents stale array entries when incoming data has fewer elements +const mergeSettings = (current: T, incoming: Partial): T => + mergeWith({}, current, incoming, (_objValue, srcValue) => + Array.isArray(srcValue) ? srcValue : undefined + ) as T; + export interface Library { id: string; name: string; @@ -93,6 +99,7 @@ export interface SonarrSettings extends DVRSettings { activeLanguageProfileId?: number; animeTags?: number[]; enableSeasonFolders: boolean; + monitorNewItems: 'all' | 'none'; } interface Quota { @@ -139,6 +146,8 @@ export interface MainSettings { discoverRegion: string; streamingRegion: string; originalLanguage: string; + blocklistRegion: string; + blocklistLanguage: string; blocklistedTags: string; blocklistedTagsLimit: number; mediaServerType: number; @@ -204,6 +213,7 @@ interface FullPublicSettings extends PublicSettings { userEmailRequired: boolean; newPlexLogin: boolean; youtubeUrl: string; + plexClientIdentifier: string; } export interface NotificationAgentConfig { @@ -276,6 +286,7 @@ export interface NotificationAgentWebhook extends NotificationAgentConfig { webhookUrl: string; jsonPayload: string; authHeader?: string; + customHeaders?: { key: string; value: string }[]; supportVariables?: boolean; }; } @@ -297,6 +308,7 @@ export interface NotificationAgentNtfy extends NotificationAgentConfig { password?: string; authMethodToken?: boolean; token?: string; + priority?: number; }; } @@ -351,6 +363,7 @@ export type JobId = export interface AllSettings { clientId: string; + sessionSecret?: string; vapidPublic: string; vapidPrivate: string; main: MainSettings; @@ -373,10 +386,12 @@ const SETTINGS_PATH = process.env.CONFIG_DIRECTORY class Settings { private data: AllSettings; + private saveLock: Promise = Promise.resolve(); constructor(initialSettings?: AllSettings) { this.data = { clientId: randomUUID(), + sessionSecret: '', vapidPrivate: '', vapidPublic: '', main: { @@ -397,6 +412,8 @@ class Settings { discoverRegion: '', streamingRegion: '', originalLanguage: '', + blocklistRegion: '', + blocklistLanguage: '', blocklistedTags: '', blocklistedTagsLimit: 50, mediaServerType: MediaServerType.NOT_CONFIGURED, @@ -530,6 +547,7 @@ class Settings { options: { url: '', topic: '', + priority: 3, }, }, }, @@ -599,7 +617,7 @@ class Settings { migrations: [], }; if (initialSettings) { - this.data = merge(this.data, initialSettings); + this.data = mergeSettings(this.data, initialSettings); } } @@ -608,7 +626,7 @@ class Settings { } set main(data: MainSettings) { - this.data.main = data; + this.data.main = mergeSettings(this.data.main, data); } get plex(): PlexSettings { @@ -616,7 +634,7 @@ class Settings { } set plex(data: PlexSettings) { - this.data.plex = data; + this.data.plex = mergeSettings(this.data.plex, data); } get jellyfin(): JellyfinSettings { @@ -624,7 +642,7 @@ class Settings { } set jellyfin(data: JellyfinSettings) { - this.data.jellyfin = data; + this.data.jellyfin = mergeSettings(this.data.jellyfin, data); } get tautulli(): TautulliSettings { @@ -632,7 +650,7 @@ class Settings { } set tautulli(data: TautulliSettings) { - this.data.tautulli = data; + this.data.tautulli = mergeSettings(this.data.tautulli, data); } get metadataSettings(): MetadataSettings { @@ -640,7 +658,10 @@ class Settings { } set metadataSettings(data: MetadataSettings) { - this.data.metadataSettings = data; + this.data.metadataSettings = mergeSettings( + this.data.metadataSettings, + data + ); } get radarr(): RadarrSettings[] { @@ -664,7 +685,7 @@ class Settings { } set public(data: PublicSettings) { - this.data.public = data; + this.data.public = mergeSettings(this.data.public, data); } get fullPublicSettings(): FullPublicSettings { @@ -699,6 +720,7 @@ class Settings { this.data.notifications.agents.email.options.userEmailRequired, newPlexLogin: this.data.main.newPlexLogin, youtubeUrl: this.data.main.youtubeUrl, + plexClientIdentifier: this.data.clientId, }; } @@ -707,7 +729,7 @@ class Settings { } set notifications(data: NotificationSettings) { - this.data.notifications = data; + this.data.notifications = mergeSettings(this.data.notifications, data); } get jobs(): Record { @@ -715,7 +737,7 @@ class Settings { } set jobs(data: Record) { - this.data.jobs = data; + this.data.jobs = mergeSettings(this.data.jobs, data); } get network(): NetworkSettings { @@ -723,7 +745,7 @@ class Settings { } set network(data: NetworkSettings) { - this.data.network = data; + this.data.network = mergeSettings(this.data.network, data); } get migrations(): string[] { @@ -738,6 +760,10 @@ class Settings { return this.data.clientId; } + get sessionSecret(): string { + return this.data.sessionSecret!; + } + get vapidPublic(): string { return this.data.vapidPublic; } @@ -785,16 +811,22 @@ class Settings { await this.save(); } + let change = false; if (data && !raw) { const parsedJson = JSON.parse(data); const migratedData = await runMigrations(parsedJson, SETTINGS_PATH); - this.data = merge(this.data, migratedData); + const merged = mergeSettings(this.data, migratedData); + + if (JSON.stringify(merged) !== JSON.stringify(migratedData)) { + change = true; + } + + this.data = merged; } else if (data) { this.data = JSON.parse(data); } // generate keys and ids if it's missing - let change = false; if (!this.data.main.apiKey) { this.data.main.apiKey = this.generateApiKey(); change = true; @@ -807,6 +839,10 @@ class Settings { this.data.clientId = randomUUID(); change = true; } + if (!this.data.sessionSecret) { + this.data.sessionSecret = randomBytes(32).toString('hex'); + change = true; + } if (!this.data.vapidPublic || !this.data.vapidPrivate) { const vapidKeys = webpush.generateVAPIDKeys(); this.data.vapidPrivate = vapidKeys.privateKey; @@ -821,9 +857,17 @@ class Settings { } public async save(): Promise { - const tmp = SETTINGS_PATH + '.tmp'; - await fs.writeFile(tmp, JSON.stringify(this.data, undefined, ' ')); - await fs.rename(tmp, SETTINGS_PATH); + const savePromise = this.saveLock.then(async () => { + const tmp = SETTINGS_PATH + '.tmp'; + await fs.writeFile(tmp, JSON.stringify(this.data, undefined, ' ')); + await fs.rename(tmp, SETTINGS_PATH); + }); + + this.saveLock = savePromise.catch(() => { + // Keep the chain alive so future saves aren't blocked by past failures + }); + + return savePromise; } } diff --git a/server/lib/watchlistsync.ts b/server/lib/watchlistsync.ts index 8afea0df5..550a6524a 100644 --- a/server/lib/watchlistsync.ts +++ b/server/lib/watchlistsync.ts @@ -67,19 +67,27 @@ class WatchlistSync { const mediaItems = await Media.getRelatedMedia( user, - response.items.map((i) => i.tmdbId) + response.items.map((i) => ({ + tmdbId: i.tmdbId, + mediaType: i.type === 'show' ? MediaType.TV : MediaType.MOVIE, + })) ); const watchlistTmdbIds = response.items.map((i) => i.tmdbId); const requestRepository = getRepository(MediaRequest); - const existingAutoRequests = await requestRepository - .createQueryBuilder('request') - .leftJoinAndSelect('request.media', 'media') - .where('request.requestedBy = :userId', { userId: user.id }) - .andWhere('request.isAutoRequest = true') - .andWhere('media.tmdbId IN (:...tmdbIds)', { tmdbIds: watchlistTmdbIds }) - .getMany(); + const existingAutoRequests: MediaRequest[] = + watchlistTmdbIds.length > 0 + ? await requestRepository + .createQueryBuilder('request') + .leftJoinAndSelect('request.media', 'media') + .where('request.requestedBy = :userId', { userId: user.id }) + .andWhere('request.isAutoRequest = true') + .andWhere('media.tmdbId IN (:...tmdbIds)', { + tmdbIds: watchlistTmdbIds, + }) + .getMany() + : []; const autoRequestedTmdbIds = new Set( existingAutoRequests @@ -87,28 +95,26 @@ class WatchlistSync { .map((r) => `${r.media.mediaType}:${r.media.tmdbId}`) ); - const unavailableItems = response.items.filter( - (i) => - !autoRequestedTmdbIds.has( - `${i.type === 'show' ? MediaType.TV : MediaType.MOVIE}:${i.tmdbId}` - ) && + const unavailableItems = response.items.filter((i) => { + const itemMediaType = i.type === 'show' ? MediaType.TV : MediaType.MOVIE; + + return ( + !autoRequestedTmdbIds.has(`${itemMediaType}:${i.tmdbId}`) && !mediaItems.find( (m) => m.tmdbId === i.tmdbId && + m.mediaType === itemMediaType && (m.status === MediaStatus.BLOCKLISTED || - (m.status !== MediaStatus.UNKNOWN && m.mediaType === 'movie') || - (m.mediaType === 'tv' && m.status === MediaStatus.AVAILABLE)) + (itemMediaType === MediaType.MOVIE && + m.status !== MediaStatus.UNKNOWN) || + (itemMediaType === MediaType.TV && + m.status === MediaStatus.AVAILABLE)) ) - ); + ); + }); for (const mediaItem of unavailableItems) { try { - logger.info("Creating media request from user's Plex Watchlist", { - label: 'Watchlist Sync', - userId: user.id, - mediaTitle: mediaItem.title, - }); - if (mediaItem.type === 'show' && !mediaItem.tvdbId) { throw new Error('Missing TVDB ID from Plex Metadata'); } @@ -144,6 +150,12 @@ class WatchlistSync { user, { isAutoRequest: true } ); + + logger.info("Created media request from user's Plex Watchlist", { + label: 'Watchlist Sync', + userId: user.id, + mediaTitle: mediaItem.title, + }); } catch (e) { if (!(e instanceof Error)) { continue; diff --git a/server/migration/postgres/1771337333450-RecoveryLinkExpirationDateTime.ts b/server/migration/postgres/1771337333450-RecoveryLinkExpirationDateTime.ts new file mode 100644 index 000000000..8e4c9e803 --- /dev/null +++ b/server/migration/postgres/1771337333450-RecoveryLinkExpirationDateTime.ts @@ -0,0 +1,17 @@ +import type { MigrationInterface, QueryRunner } from 'typeorm'; + +export class RecoveryLinkExpirationDateTime1771337333450 implements MigrationInterface { + name = 'RecoveryLinkExpirationDateTime1771337333450'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "user" ALTER COLUMN "recoveryLinkExpirationDate" TYPE TIMESTAMP WITH TIME ZONE` + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "user" ALTER COLUMN "recoveryLinkExpirationDate" TYPE date USING ("recoveryLinkExpirationDate"::date)` + ); + } +} diff --git a/server/migration/postgres/1772000000000-FixBlocklistIdDefault.ts b/server/migration/postgres/1772000000000-FixBlocklistIdDefault.ts new file mode 100644 index 000000000..fbf070484 --- /dev/null +++ b/server/migration/postgres/1772000000000-FixBlocklistIdDefault.ts @@ -0,0 +1,20 @@ +import type { MigrationInterface, QueryRunner } from 'typeorm'; + +export class FixBlocklistIdDefault1772000000000 implements MigrationInterface { + name = 'FixBlocklistIdDefault1772000000000'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "blocklist" ALTER COLUMN "id" SET DEFAULT nextval('public."blocklist_id_seq"'::regclass)` + ); + + await queryRunner.query( + `SELECT setval('public."blocklist_id_seq"', COALESCE((SELECT MAX("id") FROM "blocklist"), 0) + 1, false)` + ); + } + + public async down(): Promise { + // Intentionally left empty: dropping the DEFAULT on blocklist.id would + // reintroduce the original bug and break blocklist inserts. + } +} diff --git a/server/migration/postgres/1772048000333-AddMediaTypeToUniqueConstraints.ts b/server/migration/postgres/1772048000333-AddMediaTypeToUniqueConstraints.ts new file mode 100644 index 000000000..62fd79b2a --- /dev/null +++ b/server/migration/postgres/1772048000333-AddMediaTypeToUniqueConstraints.ts @@ -0,0 +1,51 @@ +import type { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddMediaTypeToUniqueConstraints1772048000333 implements MigrationInterface { + name = 'AddMediaTypeToUniqueConstraints1772048000333'; + + public async up(queryRunner: QueryRunner): Promise { + // Manually added: TypeORM migration:generate does not detect changes to named unique constraints. + await queryRunner.query( + `ALTER TABLE "watchlist" DROP CONSTRAINT "UNIQUE_USER_DB"` + ); + await queryRunner.query( + `ALTER TABLE "watchlist" ADD CONSTRAINT "UNIQUE_USER_DB" UNIQUE ("tmdbId", "mediaType", "requestedById")` + ); + + // Auto-generated by TypeORM + await queryRunner.query( + `CREATE SEQUENCE IF NOT EXISTS "blocklist_id_seq" OWNED BY "blocklist"."id"` + ); + await queryRunner.query( + `ALTER TABLE "blocklist" ALTER COLUMN "id" SET DEFAULT nextval('"blocklist_id_seq"')` + ); + await queryRunner.query( + `ALTER TABLE "blocklist" DROP CONSTRAINT "UQ_6bbafa28411e6046421991ea21c"` + ); + await queryRunner.query( + `ALTER TABLE "blocklist" ADD CONSTRAINT "UQ_81504e02db89b4c1e3152729fa6" UNIQUE ("tmdbId", "mediaType")` + ); + } + + public async down(queryRunner: QueryRunner): Promise { + // Manually added: TypeORM migration:generate does not detect changes to named unique constraints. + await queryRunner.query( + `ALTER TABLE "watchlist" DROP CONSTRAINT "UNIQUE_USER_DB"` + ); + await queryRunner.query( + `ALTER TABLE "watchlist" ADD CONSTRAINT "UNIQUE_USER_DB" UNIQUE ("tmdbId", "requestedById")` + ); + + // Auto-generated by TypeORM + await queryRunner.query( + `ALTER TABLE "blocklist" DROP CONSTRAINT "UQ_81504e02db89b4c1e3152729fa6"` + ); + await queryRunner.query( + `ALTER TABLE "blocklist" ADD CONSTRAINT "UQ_6bbafa28411e6046421991ea21c" UNIQUE ("tmdbId")` + ); + await queryRunner.query( + `ALTER TABLE "blocklist" ALTER COLUMN "id" DROP DEFAULT` + ); + await queryRunner.query(`DROP SEQUENCE "blocklist_id_seq"`); + } +} diff --git a/server/migration/sqlite/1771337037917-RecoveryLinkExpirationDateTime.ts b/server/migration/sqlite/1771337037917-RecoveryLinkExpirationDateTime.ts new file mode 100644 index 000000000..3e40cdfc4 --- /dev/null +++ b/server/migration/sqlite/1771337037917-RecoveryLinkExpirationDateTime.ts @@ -0,0 +1,27 @@ +import type { MigrationInterface, QueryRunner } from 'typeorm'; + +export class RecoveryLinkExpirationDateTime1771337037917 implements MigrationInterface { + name = 'RecoveryLinkExpirationDateTime1771337037917'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `CREATE TABLE "temporary_user" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "email" varchar NOT NULL, "username" varchar, "plexId" integer, "plexToken" varchar, "permissions" integer NOT NULL DEFAULT (0), "avatar" varchar NOT NULL, "createdAt" datetime NOT NULL DEFAULT (CURRENT_TIMESTAMP), "updatedAt" datetime NOT NULL DEFAULT (CURRENT_TIMESTAMP), "password" varchar, "userType" integer NOT NULL DEFAULT (1), "plexUsername" varchar, "resetPasswordGuid" varchar, "recoveryLinkExpirationDate" datetime, "movieQuotaLimit" integer, "movieQuotaDays" integer, "tvQuotaLimit" integer, "tvQuotaDays" integer, "jellyfinUsername" varchar, "jellyfinAuthToken" varchar, "jellyfinUserId" varchar, "jellyfinDeviceId" varchar, "avatarETag" varchar, "avatarVersion" varchar, CONSTRAINT "UQ_e12875dfb3b1d92d7d7c5377e22" UNIQUE ("email"))` + ); + await queryRunner.query( + `INSERT INTO "temporary_user"("id", "email", "username", "plexId", "plexToken", "permissions", "avatar", "createdAt", "updatedAt", "password", "userType", "plexUsername", "resetPasswordGuid", "recoveryLinkExpirationDate", "movieQuotaLimit", "movieQuotaDays", "tvQuotaLimit", "tvQuotaDays", "jellyfinUsername", "jellyfinAuthToken", "jellyfinUserId", "jellyfinDeviceId", "avatarETag", "avatarVersion") SELECT "id", "email", "username", "plexId", "plexToken", "permissions", "avatar", "createdAt", "updatedAt", "password", "userType", "plexUsername", "resetPasswordGuid", "recoveryLinkExpirationDate", "movieQuotaLimit", "movieQuotaDays", "tvQuotaLimit", "tvQuotaDays", "jellyfinUsername", "jellyfinAuthToken", "jellyfinUserId", "jellyfinDeviceId", "avatarETag", "avatarVersion" FROM "user"` + ); + await queryRunner.query(`DROP TABLE "user"`); + await queryRunner.query(`ALTER TABLE "temporary_user" RENAME TO "user"`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "user" RENAME TO "temporary_user"`); + await queryRunner.query( + `CREATE TABLE "user" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "email" varchar NOT NULL, "username" varchar, "plexId" integer, "plexToken" varchar, "permissions" integer NOT NULL DEFAULT (0), "avatar" varchar NOT NULL, "createdAt" datetime NOT NULL DEFAULT (CURRENT_TIMESTAMP), "updatedAt" datetime NOT NULL DEFAULT (CURRENT_TIMESTAMP), "password" varchar, "userType" integer NOT NULL DEFAULT (1), "plexUsername" varchar, "resetPasswordGuid" varchar, "recoveryLinkExpirationDate" date, "movieQuotaLimit" integer, "movieQuotaDays" integer, "tvQuotaLimit" integer, "tvQuotaDays" integer, "jellyfinUsername" varchar, "jellyfinAuthToken" varchar, "jellyfinUserId" varchar, "jellyfinDeviceId" varchar, "avatarETag" varchar, "avatarVersion" varchar, CONSTRAINT "UQ_e12875dfb3b1d92d7d7c5377e22" UNIQUE ("email"))` + ); + await queryRunner.query( + `INSERT INTO "user"("id", "email", "username", "plexId", "plexToken", "permissions", "avatar", "createdAt", "updatedAt", "password", "userType", "plexUsername", "resetPasswordGuid", "recoveryLinkExpirationDate", "movieQuotaLimit", "movieQuotaDays", "tvQuotaLimit", "tvQuotaDays", "jellyfinUsername", "jellyfinAuthToken", "jellyfinUserId", "jellyfinDeviceId", "avatarETag", "avatarVersion") SELECT "id", "email", "username", "plexId", "plexToken", "permissions", "avatar", "createdAt", "updatedAt", "password", "userType", "plexUsername", "resetPasswordGuid", "recoveryLinkExpirationDate", "movieQuotaLimit", "movieQuotaDays", "tvQuotaLimit", "tvQuotaDays", "jellyfinUsername", "jellyfinAuthToken", "jellyfinUserId", "jellyfinDeviceId", "avatarETag", "avatarVersion" FROM "temporary_user"` + ); + await queryRunner.query(`DROP TABLE "temporary_user"`); + } +} diff --git a/server/migration/sqlite/1772047972752-AddMediaTypeToUniqueConstraints.ts b/server/migration/sqlite/1772047972752-AddMediaTypeToUniqueConstraints.ts new file mode 100644 index 000000000..2c55f76fc --- /dev/null +++ b/server/migration/sqlite/1772047972752-AddMediaTypeToUniqueConstraints.ts @@ -0,0 +1,225 @@ +import type { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddMediaTypeToUniqueConstraints1772047972752 implements MigrationInterface { + name = 'AddMediaTypeToUniqueConstraints1772047972752'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`DROP INDEX "IDX_03f7958328e311761b0de675fb"`); + await queryRunner.query( + `CREATE TABLE "temporary_user_push_subscription" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "endpoint" varchar NOT NULL, "p256dh" varchar NOT NULL, "auth" varchar NOT NULL, "userId" integer, "userAgent" varchar, "createdAt" datetime DEFAULT (CURRENT_TIMESTAMP), CONSTRAINT "UQ_f90ab5a4ed54905a4bb51a7148b" UNIQUE ("auth"), CONSTRAINT "UQ_6427d07d9a171a3a1ab87480005" UNIQUE ("endpoint", "userId"), CONSTRAINT "FK_03f7958328e311761b0de675fbe" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)` + ); + await queryRunner.query( + `INSERT INTO "temporary_user_push_subscription"("id", "endpoint", "p256dh", "auth", "userId", "userAgent", "createdAt") SELECT "id", "endpoint", "p256dh", "auth", "userId", "userAgent", "createdAt" FROM "user_push_subscription"` + ); + await queryRunner.query(`DROP TABLE "user_push_subscription"`); + await queryRunner.query( + `ALTER TABLE "temporary_user_push_subscription" RENAME TO "user_push_subscription"` + ); + await queryRunner.query( + `CREATE INDEX "IDX_03f7958328e311761b0de675fb" ON "user_push_subscription" ("userId") ` + ); + await queryRunner.query(`DROP INDEX "IDX_356721a49f145aa439c16e6b99"`); + await queryRunner.query(`DROP INDEX "IDX_09b94c932e84635c5461f3c0a9"`); + await queryRunner.query( + `CREATE TABLE "temporary_blocklist" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "mediaType" varchar NOT NULL, "title" varchar, "tmdbId" integer NOT NULL, "blocklistedTags" varchar, "createdAt" datetime NOT NULL DEFAULT (CURRENT_TIMESTAMP), "userId" integer, "mediaId" integer, CONSTRAINT "UQ_6bbafa28411e6046421991ea21c" UNIQUE ("tmdbId"), CONSTRAINT "REL_62b7ade94540f9f8d8bede54b9" UNIQUE ("mediaId"), CONSTRAINT "FK_5c8af2d0e83b3be6d250eccc19d" FOREIGN KEY ("mediaId") REFERENCES "media" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_356721a49f145aa439c16e6b999" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)` + ); + await queryRunner.query( + `INSERT INTO "temporary_blocklist"("id", "mediaType", "title", "tmdbId", "blocklistedTags", "createdAt", "userId", "mediaId") SELECT "id", "mediaType", "title", "tmdbId", "blocklistedTags", "createdAt", "userId", "mediaId" FROM "blocklist"` + ); + await queryRunner.query(`DROP TABLE "blocklist"`); + await queryRunner.query( + `ALTER TABLE "temporary_blocklist" RENAME TO "blocklist"` + ); + await queryRunner.query( + `CREATE INDEX "IDX_356721a49f145aa439c16e6b99" ON "blocklist" ("userId") ` + ); + await queryRunner.query( + `CREATE INDEX "IDX_09b94c932e84635c5461f3c0a9" ON "blocklist" ("tmdbId") ` + ); + await queryRunner.query(`DROP INDEX "IDX_03f7958328e311761b0de675fb"`); + await queryRunner.query( + `CREATE TABLE "temporary_user_push_subscription" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "endpoint" varchar NOT NULL, "p256dh" varchar NOT NULL, "auth" varchar NOT NULL, "userId" integer, "userAgent" varchar, "createdAt" datetime DEFAULT (CURRENT_TIMESTAMP), CONSTRAINT "UQ_f90ab5a4ed54905a4bb51a7148b" UNIQUE ("auth"), CONSTRAINT "UQ_6427d07d9a171a3a1ab87480005" UNIQUE ("endpoint", "userId"), CONSTRAINT "FK_03f7958328e311761b0de675fbe" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)` + ); + await queryRunner.query( + `INSERT INTO "temporary_user_push_subscription"("id", "endpoint", "p256dh", "auth", "userId", "userAgent", "createdAt") SELECT "id", "endpoint", "p256dh", "auth", "userId", "userAgent", "createdAt" FROM "user_push_subscription"` + ); + await queryRunner.query(`DROP TABLE "user_push_subscription"`); + await queryRunner.query( + `ALTER TABLE "temporary_user_push_subscription" RENAME TO "user_push_subscription"` + ); + await queryRunner.query( + `CREATE INDEX "IDX_03f7958328e311761b0de675fb" ON "user_push_subscription" ("userId") ` + ); + await queryRunner.query(`DROP INDEX "IDX_356721a49f145aa439c16e6b99"`); + await queryRunner.query(`DROP INDEX "IDX_09b94c932e84635c5461f3c0a9"`); + await queryRunner.query( + `CREATE TABLE "temporary_blocklist" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "mediaType" varchar NOT NULL, "title" varchar, "tmdbId" integer NOT NULL, "blocklistedTags" varchar, "createdAt" datetime NOT NULL DEFAULT (CURRENT_TIMESTAMP), "userId" integer, "mediaId" integer, CONSTRAINT "UQ_6bbafa28411e6046421991ea21c" UNIQUE ("tmdbId"), CONSTRAINT "REL_62b7ade94540f9f8d8bede54b9" UNIQUE ("mediaId"), CONSTRAINT "FK_5c8af2d0e83b3be6d250eccc19d" FOREIGN KEY ("mediaId") REFERENCES "media" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_356721a49f145aa439c16e6b999" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)` + ); + await queryRunner.query( + `INSERT INTO "temporary_blocklist"("id", "mediaType", "title", "tmdbId", "blocklistedTags", "createdAt", "userId", "mediaId") SELECT "id", "mediaType", "title", "tmdbId", "blocklistedTags", "createdAt", "userId", "mediaId" FROM "blocklist"` + ); + await queryRunner.query(`DROP TABLE "blocklist"`); + await queryRunner.query( + `ALTER TABLE "temporary_blocklist" RENAME TO "blocklist"` + ); + await queryRunner.query( + `CREATE INDEX "IDX_356721a49f145aa439c16e6b99" ON "blocklist" ("userId") ` + ); + await queryRunner.query( + `CREATE INDEX "IDX_09b94c932e84635c5461f3c0a9" ON "blocklist" ("tmdbId") ` + ); + await queryRunner.query(`DROP INDEX "IDX_356721a49f145aa439c16e6b99"`); + await queryRunner.query(`DROP INDEX "IDX_09b94c932e84635c5461f3c0a9"`); + + await queryRunner.query( + `CREATE TABLE "temporary_blocklist" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "mediaType" varchar NOT NULL, "title" varchar, "tmdbId" integer NOT NULL, "blocklistedTags" varchar, "createdAt" datetime NOT NULL DEFAULT (CURRENT_TIMESTAMP), "userId" integer, "mediaId" integer, CONSTRAINT "REL_62b7ade94540f9f8d8bede54b9" UNIQUE ("mediaId"), CONSTRAINT "UQ_81504e02db89b4c1e3152729fa6" UNIQUE ("tmdbId", "mediaType"), CONSTRAINT "FK_5c8af2d0e83b3be6d250eccc19d" FOREIGN KEY ("mediaId") REFERENCES "media" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_356721a49f145aa439c16e6b999" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)` + ); + await queryRunner.query( + `INSERT INTO "temporary_blocklist"("id", "mediaType", "title", "tmdbId", "blocklistedTags", "createdAt", "userId", "mediaId") SELECT "id", "mediaType", "title", "tmdbId", "blocklistedTags", "createdAt", "userId", "mediaId" FROM "blocklist"` + ); + await queryRunner.query(`DROP TABLE "blocklist"`); + await queryRunner.query( + `ALTER TABLE "temporary_blocklist" RENAME TO "blocklist"` + ); + await queryRunner.query( + `CREATE INDEX "IDX_356721a49f145aa439c16e6b99" ON "blocklist" ("userId") ` + ); + await queryRunner.query( + `CREATE INDEX "IDX_09b94c932e84635c5461f3c0a9" ON "blocklist" ("tmdbId") ` + ); + + // Manually added as TypeORM migration:generate does not detect changes to named unique constraints. + await queryRunner.query(`DROP INDEX "IDX_939f205946256cc0d2a1ac51a8"`); + await queryRunner.query(`DROP INDEX "IDX_ae34e6b153a90672eb9dc4857d"`); + await queryRunner.query(`DROP INDEX "IDX_6641da8d831b93dfcb429f8b8b"`); + await queryRunner.query( + `CREATE TABLE "temporary_watchlist" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "ratingKey" varchar NOT NULL, "mediaType" varchar NOT NULL, "title" varchar NOT NULL, "tmdbId" integer NOT NULL, "createdAt" datetime NOT NULL DEFAULT (CURRENT_TIMESTAMP), "updatedAt" datetime NOT NULL DEFAULT (CURRENT_TIMESTAMP), "requestedById" integer, "mediaId" integer, CONSTRAINT "UNIQUE_USER_DB" UNIQUE ("tmdbId", "mediaType", "requestedById"), CONSTRAINT "FK_6641da8d831b93dfcb429f8b8bc" FOREIGN KEY ("mediaId") REFERENCES "media" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_ae34e6b153a90672eb9dc4857d7" FOREIGN KEY ("requestedById") REFERENCES "user" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)` + ); + await queryRunner.query( + `INSERT INTO "temporary_watchlist"("id", "ratingKey", "mediaType", "title", "tmdbId", "createdAt", "updatedAt", "requestedById", "mediaId") SELECT "id", "ratingKey", "mediaType", "title", "tmdbId", "createdAt", "updatedAt", "requestedById", "mediaId" FROM "watchlist"` + ); + await queryRunner.query(`DROP TABLE "watchlist"`); + await queryRunner.query( + `ALTER TABLE "temporary_watchlist" RENAME TO "watchlist"` + ); + await queryRunner.query( + `CREATE INDEX "IDX_939f205946256cc0d2a1ac51a8" ON "watchlist" ("tmdbId")` + ); + await queryRunner.query( + `CREATE INDEX "IDX_ae34e6b153a90672eb9dc4857d" ON "watchlist" ("requestedById")` + ); + await queryRunner.query( + `CREATE INDEX "IDX_6641da8d831b93dfcb429f8b8b" ON "watchlist" ("mediaId")` + ); + } + + public async down(queryRunner: QueryRunner): Promise { + // Manually added as TypeORM migration:generate does not detect changes to named unique constraints. + await queryRunner.query(`DROP INDEX "IDX_939f205946256cc0d2a1ac51a8"`); + await queryRunner.query(`DROP INDEX "IDX_ae34e6b153a90672eb9dc4857d"`); + await queryRunner.query(`DROP INDEX "IDX_6641da8d831b93dfcb429f8b8b"`); + await queryRunner.query( + `CREATE TABLE "temporary_watchlist" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "ratingKey" varchar NOT NULL, "mediaType" varchar NOT NULL, "title" varchar NOT NULL, "tmdbId" integer NOT NULL, "createdAt" datetime NOT NULL DEFAULT (CURRENT_TIMESTAMP), "updatedAt" datetime NOT NULL DEFAULT (CURRENT_TIMESTAMP), "requestedById" integer, "mediaId" integer, CONSTRAINT "UNIQUE_USER_DB" UNIQUE ("tmdbId", "requestedById"), CONSTRAINT "FK_6641da8d831b93dfcb429f8b8bc" FOREIGN KEY ("mediaId") REFERENCES "media" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_ae34e6b153a90672eb9dc4857d7" FOREIGN KEY ("requestedById") REFERENCES "user" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)` + ); + await queryRunner.query( + `INSERT INTO "temporary_watchlist"("id", "ratingKey", "mediaType", "title", "tmdbId", "createdAt", "updatedAt", "requestedById", "mediaId") SELECT "id", "ratingKey", "mediaType", "title", "tmdbId", "createdAt", "updatedAt", "requestedById", "mediaId" FROM "watchlist"` + ); + await queryRunner.query(`DROP TABLE "watchlist"`); + await queryRunner.query( + `ALTER TABLE "temporary_watchlist" RENAME TO "watchlist"` + ); + await queryRunner.query( + `CREATE INDEX "IDX_939f205946256cc0d2a1ac51a8" ON "watchlist" ("tmdbId")` + ); + await queryRunner.query( + `CREATE INDEX "IDX_ae34e6b153a90672eb9dc4857d" ON "watchlist" ("requestedById")` + ); + await queryRunner.query( + `CREATE INDEX "IDX_6641da8d831b93dfcb429f8b8b" ON "watchlist" ("mediaId")` + ); + + // Blocklist: revert to original + await queryRunner.query(`DROP INDEX "IDX_09b94c932e84635c5461f3c0a9"`); + await queryRunner.query(`DROP INDEX "IDX_356721a49f145aa439c16e6b99"`); + await queryRunner.query( + `ALTER TABLE "blocklist" RENAME TO "temporary_blocklist"` + ); + await queryRunner.query( + `CREATE TABLE "blocklist" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "mediaType" varchar NOT NULL, "title" varchar, "tmdbId" integer NOT NULL, "blocklistedTags" varchar, "createdAt" datetime NOT NULL DEFAULT (CURRENT_TIMESTAMP), "userId" integer, "mediaId" integer, CONSTRAINT "UQ_6bbafa28411e6046421991ea21c" UNIQUE ("tmdbId"), CONSTRAINT "REL_62b7ade94540f9f8d8bede54b9" UNIQUE ("mediaId"), CONSTRAINT "FK_5c8af2d0e83b3be6d250eccc19d" FOREIGN KEY ("mediaId") REFERENCES "media" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_356721a49f145aa439c16e6b999" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)` + ); + await queryRunner.query( + `INSERT INTO "blocklist"("id", "mediaType", "title", "tmdbId", "blocklistedTags", "createdAt", "userId", "mediaId") SELECT "id", "mediaType", "title", "tmdbId", "blocklistedTags", "createdAt", "userId", "mediaId" FROM "temporary_blocklist"` + ); + await queryRunner.query(`DROP TABLE "temporary_blocklist"`); + await queryRunner.query( + `CREATE INDEX "IDX_09b94c932e84635c5461f3c0a9" ON "blocklist" ("tmdbId") ` + ); + await queryRunner.query( + `CREATE INDEX "IDX_356721a49f145aa439c16e6b99" ON "blocklist" ("userId") ` + ); + await queryRunner.query(`DROP INDEX "IDX_09b94c932e84635c5461f3c0a9"`); + await queryRunner.query(`DROP INDEX "IDX_356721a49f145aa439c16e6b99"`); + await queryRunner.query( + `ALTER TABLE "blocklist" RENAME TO "temporary_blocklist"` + ); + await queryRunner.query( + `CREATE TABLE "blocklist" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "mediaType" varchar NOT NULL, "title" varchar, "tmdbId" integer NOT NULL, "blocklistedTags" varchar, "createdAt" datetime NOT NULL DEFAULT (CURRENT_TIMESTAMP), "userId" integer, "mediaId" integer, CONSTRAINT "UQ_6bbafa28411e6046421991ea21c" UNIQUE ("tmdbId"), CONSTRAINT "REL_62b7ade94540f9f8d8bede54b9" UNIQUE ("mediaId"), CONSTRAINT "FK_5c8af2d0e83b3be6d250eccc19d" FOREIGN KEY ("mediaId") REFERENCES "media" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_356721a49f145aa439c16e6b999" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)` + ); + await queryRunner.query( + `INSERT INTO "blocklist"("id", "mediaType", "title", "tmdbId", "blocklistedTags", "createdAt", "userId", "mediaId") SELECT "id", "mediaType", "title", "tmdbId", "blocklistedTags", "createdAt", "userId", "mediaId" FROM "temporary_blocklist"` + ); + await queryRunner.query(`DROP TABLE "temporary_blocklist"`); + await queryRunner.query( + `CREATE INDEX "IDX_09b94c932e84635c5461f3c0a9" ON "blocklist" ("tmdbId") ` + ); + await queryRunner.query( + `CREATE INDEX "IDX_356721a49f145aa439c16e6b99" ON "blocklist" ("userId") ` + ); + await queryRunner.query(`DROP INDEX "IDX_03f7958328e311761b0de675fb"`); + await queryRunner.query( + `ALTER TABLE "user_push_subscription" RENAME TO "temporary_user_push_subscription"` + ); + await queryRunner.query( + `CREATE TABLE "user_push_subscription" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "endpoint" varchar NOT NULL, "p256dh" varchar NOT NULL, "auth" varchar NOT NULL, "userId" integer, "userAgent" varchar, "createdAt" datetime DEFAULT (CURRENT_TIMESTAMP), CONSTRAINT "UQ_f90ab5a4ed54905a4bb51a7148b" UNIQUE ("auth"), CONSTRAINT "UQ_6427d07d9a171a3a1ab87480005" UNIQUE ("endpoint", "userId"), CONSTRAINT "FK_03f7958328e311761b0de675fbe" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)` + ); + await queryRunner.query( + `INSERT INTO "user_push_subscription"("id", "endpoint", "p256dh", "auth", "userId", "userAgent", "createdAt") SELECT "id", "endpoint", "p256dh", "auth", "userId", "userAgent", "createdAt" FROM "temporary_user_push_subscription"` + ); + await queryRunner.query(`DROP TABLE "temporary_user_push_subscription"`); + await queryRunner.query( + `CREATE INDEX "IDX_03f7958328e311761b0de675fb" ON "user_push_subscription" ("userId") ` + ); + await queryRunner.query(`DROP INDEX "IDX_09b94c932e84635c5461f3c0a9"`); + await queryRunner.query(`DROP INDEX "IDX_356721a49f145aa439c16e6b99"`); + await queryRunner.query( + `ALTER TABLE "blocklist" RENAME TO "temporary_blocklist"` + ); + await queryRunner.query( + `CREATE TABLE "blocklist" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "mediaType" varchar NOT NULL, "title" varchar, "tmdbId" integer NOT NULL, "blocklistedTags" varchar, "createdAt" datetime NOT NULL DEFAULT (CURRENT_TIMESTAMP), "userId" integer, "mediaId" integer, CONSTRAINT "UQ_6bbafa28411e6046421991ea21c" UNIQUE ("tmdbId"), CONSTRAINT "REL_62b7ade94540f9f8d8bede54b9" UNIQUE ("mediaId"), CONSTRAINT "FK_5c8af2d0e83b3be6d250eccc19d" FOREIGN KEY ("mediaId") REFERENCES "media" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_356721a49f145aa439c16e6b999" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)` + ); + await queryRunner.query( + `INSERT INTO "blocklist"("id", "mediaType", "title", "tmdbId", "blocklistedTags", "createdAt", "userId", "mediaId") SELECT "id", "mediaType", "title", "tmdbId", "blocklistedTags", "createdAt", "userId", "mediaId" FROM "temporary_blocklist"` + ); + await queryRunner.query(`DROP TABLE "temporary_blocklist"`); + await queryRunner.query( + `CREATE INDEX "IDX_09b94c932e84635c5461f3c0a9" ON "blocklist" ("tmdbId") ` + ); + await queryRunner.query( + `CREATE INDEX "IDX_356721a49f145aa439c16e6b99" ON "blocklist" ("userId") ` + ); + await queryRunner.query(`DROP INDEX "IDX_03f7958328e311761b0de675fb"`); + await queryRunner.query( + `ALTER TABLE "user_push_subscription" RENAME TO "temporary_user_push_subscription"` + ); + await queryRunner.query( + `CREATE TABLE "user_push_subscription" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "endpoint" varchar NOT NULL, "p256dh" varchar NOT NULL, "auth" varchar NOT NULL, "userId" integer, "userAgent" varchar, "createdAt" datetime DEFAULT (CURRENT_TIMESTAMP), CONSTRAINT "UQ_f90ab5a4ed54905a4bb51a7148b" UNIQUE ("auth"), CONSTRAINT "UQ_6427d07d9a171a3a1ab87480005" UNIQUE ("endpoint", "userId"), CONSTRAINT "FK_03f7958328e311761b0de675fbe" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)` + ); + await queryRunner.query( + `INSERT INTO "user_push_subscription"("id", "endpoint", "p256dh", "auth", "userId", "userAgent", "createdAt") SELECT "id", "endpoint", "p256dh", "auth", "userId", "userAgent", "createdAt" FROM "temporary_user_push_subscription"` + ); + await queryRunner.query(`DROP TABLE "temporary_user_push_subscription"`); + await queryRunner.query( + `CREATE INDEX "IDX_03f7958328e311761b0de675fb" ON "user_push_subscription" ("userId") ` + ); + } +} diff --git a/server/routes/auth.test.ts b/server/routes/auth.test.ts new file mode 100644 index 000000000..0e7981a23 --- /dev/null +++ b/server/routes/auth.test.ts @@ -0,0 +1,397 @@ +import assert from 'node:assert/strict'; +import { before, beforeEach, describe, it, mock } from 'node:test'; + +import { getRepository } from '@server/datasource'; +import { User } from '@server/entity/User'; +import PreparedEmail from '@server/lib/email'; +import { getSettings } from '@server/lib/settings'; +import { checkUser } from '@server/middleware/auth'; +import { setupTestDb } from '@server/test/db'; +import type { Express } from 'express'; +import express from 'express'; +import session from 'express-session'; +import request from 'supertest'; +import authRoutes from './auth'; + +const emailMock = mock.method(PreparedEmail.prototype, 'send', async () => { + return undefined; +}).mock; + +let app: Express; + +function createApp() { + const app = express(); + app.use(express.json()); + app.use( + session({ + secret: 'test-secret', + resave: false, + saveUninitialized: false, + }) + ); + app.use(checkUser); + app.use('/auth', authRoutes); + // Error handler matching how next({ status, message }) calls are handled + app.use( + ( + err: { status?: number; message?: string }, + _req: express.Request, + res: express.Response, + // We must provide a next function for the function signature here even though its not used + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _next: express.NextFunction + ) => { + res + .status(err.status ?? 500) + .json({ status: err.status ?? 500, message: err.message }); + } + ); + return app; +} + +before(async () => { + app = createApp(); +}); + +setupTestDb(); + +/** Create a supertest agent that is logged in as the given user. */ +async function authenticatedAgent(email: string, password: string) { + const agent = request.agent(app); + const settings = getSettings(); + settings.main.localLogin = true; + + const res = await agent.post('/auth/local').send({ email, password }); + + assert.strictEqual(res.status, 200); + return agent; +} + +describe('GET /auth/me', () => { + it('returns 403 when not authenticated', async () => { + const res = await request(app).get('/auth/me'); + assert.strictEqual(res.status, 403); + }); + + it('returns the authenticated user', async () => { + const agent = await authenticatedAgent('admin@seerr.dev', 'test1234'); + + const res = await agent.get('/auth/me'); + + assert.strictEqual(res.status, 200); + assert.ok('id' in res.body); + assert.strictEqual(res.body.displayName, 'admin'); + }); + + it('includes userEmailRequired warning when email is required but invalid', async () => { + const settings = getSettings(); + settings.notifications.agents.email.options.userEmailRequired = true; + + // Change the user's email to something invalid + const userRepo = getRepository(User); + const user = await userRepo.findOneOrFail({ + where: { email: 'admin@seerr.dev' }, + }); + user.email = 'not-an-email'; + await userRepo.save(user); + + // Log in with the changed email + const agent = request.agent(app); + settings.main.localLogin = true; + const loginRes = await agent + .post('/auth/local') + .send({ email: 'not-an-email', password: 'test1234' }); + assert.strictEqual(loginRes.status, 200); + + const res = await agent.get('/auth/me'); + + assert.strictEqual(res.status, 200); + assert.ok(res.body.warnings.includes('userEmailRequired')); + + settings.notifications.agents.email.options.userEmailRequired = false; + }); +}); + +describe('POST /auth/local', () => { + beforeEach(() => { + const settings = getSettings(); + settings.main.localLogin = true; + }); + + it('returns 200 and user data on valid credentials', async () => { + const res = await request(app) + .post('/auth/local') + .send({ email: 'admin@seerr.dev', password: 'test1234' }); + + assert.strictEqual(res.status, 200); + assert.ok('id' in res.body); + // filter() strips sensitive fields like password + assert.ok(!('password' in res.body)); + }); + + it('returns 403 on wrong password', async () => { + const res = await request(app) + .post('/auth/local') + .send({ email: 'admin@seerr.dev', password: 'wrongpassword' }); + + assert.strictEqual(res.status, 403); + assert.strictEqual(res.body.message, 'Access denied.'); + }); + + it('returns 403 for nonexistent user', async () => { + const res = await request(app) + .post('/auth/local') + .send({ email: 'nobody@seerr.dev', password: 'test1234' }); + + assert.strictEqual(res.status, 403); + assert.strictEqual(res.body.message, 'Access denied.'); + }); + + it('returns 500 when local login is disabled', async () => { + const settings = getSettings(); + settings.main.localLogin = false; + + const res = await request(app) + .post('/auth/local') + .send({ email: 'admin@seerr.dev', password: 'test1234' }); + + assert.strictEqual(res.status, 500); + assert.strictEqual(res.body.error, 'Password sign-in is disabled.'); + }); + + it('returns 500 when email is missing', async () => { + const res = await request(app) + .post('/auth/local') + .send({ password: 'test1234' }); + + assert.strictEqual(res.status, 500); + assert.match(res.body.error, /email address and a password/); + }); + + it('returns 500 when password is missing', async () => { + const res = await request(app) + .post('/auth/local') + .send({ email: 'admin@seerr.dev' }); + + assert.strictEqual(res.status, 500); + assert.match(res.body.error, /email address and a password/); + }); + + it('is case-insensitive for email', async () => { + const res = await request(app) + .post('/auth/local') + .send({ email: 'Admin@Seerr.Dev', password: 'test1234' }); + + assert.strictEqual(res.status, 200); + assert.ok('id' in res.body); + }); + + it('allows the non-admin user to log in', async () => { + const res = await request(app) + .post('/auth/local') + .send({ email: 'friend@seerr.dev', password: 'test1234' }); + + assert.strictEqual(res.status, 200); + assert.ok('id' in res.body); + }); + + it('sets a session on successful login', async () => { + const agent = request.agent(app); + + await agent + .post('/auth/local') + .send({ email: 'admin@seerr.dev', password: 'test1234' }); + + // Session should persist — /me should succeed + const meRes = await agent.get('/auth/me'); + assert.strictEqual(meRes.status, 200); + }); +}); + +describe('POST /auth/logout', () => { + it('returns 200 when not logged in', async () => { + const res = await request(app).post('/auth/logout'); + + assert.strictEqual(res.status, 200); + assert.strictEqual(res.body.status, 'ok'); + }); + + it('destroys session and returns 200 when logged in', async () => { + const agent = await authenticatedAgent('admin@seerr.dev', 'test1234'); + + // Verify session is active + const meBeforeRes = await agent.get('/auth/me'); + assert.strictEqual(meBeforeRes.status, 200); + + const logoutRes = await agent.post('/auth/logout'); + assert.strictEqual(logoutRes.status, 200); + assert.strictEqual(logoutRes.body.status, 'ok'); + + // Session should be invalidated — /me should fail + const meAfterRes = await agent.get('/auth/me'); + assert.strictEqual(meAfterRes.status, 403); + }); +}); + +describe('POST /auth/reset-password', () => { + beforeEach(() => { + emailMock.resetCalls(); + }); + + it('returns 200 for a valid email', async () => { + const res = await request(app) + .post('/auth/reset-password') + .send({ email: 'admin@seerr.dev' }); + + assert.strictEqual(res.status, 200); + assert.strictEqual(res.body.status, 'ok'); + assert.strictEqual(emailMock.callCount(), 1); + }); + + it('returns 200 for nonexistent email (does not reveal user existence)', async () => { + const res = await request(app) + .post('/auth/reset-password') + .send({ email: 'nonexistent@seerr.dev' }); + + assert.strictEqual(res.status, 200); + assert.strictEqual(res.body.status, 'ok'); + assert.strictEqual(emailMock.callCount(), 0); + }); + + it('returns 500 when email is missing', async () => { + const res = await request(app).post('/auth/reset-password').send({}); + + assert.strictEqual(res.status, 500); + assert.strictEqual(res.body.message, 'Email address required.'); + assert.strictEqual(emailMock.callCount(), 0); + }); + + it('sets a resetPasswordGuid on the user', async () => { + await request(app) + .post('/auth/reset-password') + .send({ email: 'admin@seerr.dev' }); + + const userRepo = getRepository(User); + const user = await userRepo + .createQueryBuilder('user') + .addSelect(['user.resetPasswordGuid', 'user.recoveryLinkExpirationDate']) + .where('user.email = :email', { email: 'admin@seerr.dev' }) + .getOneOrFail(); + + assert.notStrictEqual(user.resetPasswordGuid, undefined); + assert.notStrictEqual(user.resetPasswordGuid, null); + assert.notStrictEqual(user.recoveryLinkExpirationDate, undefined); + assert.strictEqual(emailMock.callCount(), 1); + }); +}); + +describe('POST /auth/reset-password/:guid', () => { + /** Trigger a password reset and return the guid. */ + async function getResetGuid(email: string): Promise { + await request(app).post('/auth/reset-password').send({ email }); + + const userRepo = getRepository(User); + const user = await userRepo + .createQueryBuilder('user') + .addSelect('user.resetPasswordGuid') + .where('user.email = :email', { email }) + .getOneOrFail(); + + return user.resetPasswordGuid!; + } + + it('resets password with a valid guid and password', async () => { + const guid = await getResetGuid('admin@seerr.dev'); + + const res = await request(app) + .post(`/auth/reset-password/${guid}`) + .send({ password: 'newpassword123' }); + + assert.strictEqual(res.status, 200); + assert.strictEqual(res.body.status, 'ok'); + + // Old password no longer works + const oldLogin = await request(app) + .post('/auth/local') + .send({ email: 'admin@seerr.dev', password: 'test1234' }); + assert.strictEqual(oldLogin.status, 403); + + // New password works + const newLogin = await request(app) + .post('/auth/local') + .send({ email: 'admin@seerr.dev', password: 'newpassword123' }); + assert.strictEqual(newLogin.status, 200); + }); + + it('returns 500 for an invalid guid', async () => { + const res = await request(app) + .post('/auth/reset-password/invalid-guid-here') + .send({ password: 'newpassword123' }); + + assert.strictEqual(res.status, 500); + assert.strictEqual(res.body.message, 'Invalid password reset link.'); + }); + + it('returns 500 when password is too short', async () => { + const guid = await getResetGuid('admin@seerr.dev'); + + const res = await request(app) + .post(`/auth/reset-password/${guid}`) + .send({ password: 'short' }); + + assert.strictEqual(res.status, 500); + assert.strictEqual( + res.body.message, + 'Password must be at least 8 characters long.' + ); + }); + + it('returns 500 when password is missing', async () => { + const guid = await getResetGuid('admin@seerr.dev'); + + const res = await request(app) + .post(`/auth/reset-password/${guid}`) + .send({}); + + assert.strictEqual(res.status, 500); + assert.strictEqual( + res.body.message, + 'Password must be at least 8 characters long.' + ); + }); + + it('returns 500 for an expired recovery link', async () => { + const guid = await getResetGuid('admin@seerr.dev'); + + // Expire the link + const userRepo = getRepository(User); + const user = await userRepo.findOneOrFail({ + where: { email: 'admin@seerr.dev' }, + }); + user.recoveryLinkExpirationDate = new Date('2020-01-01'); + await userRepo.save(user); + + const res = await request(app) + .post(`/auth/reset-password/${guid}`) + .send({ password: 'newpassword123' }); + + assert.strictEqual(res.status, 500); + assert.strictEqual(res.body.message, 'Invalid password reset link.'); + }); + + it('cannot reuse a guid after successful reset', async () => { + const guid = await getResetGuid('admin@seerr.dev'); + + // First reset succeeds + const first = await request(app) + .post(`/auth/reset-password/${guid}`) + .send({ password: 'newpassword123' }); + assert.strictEqual(first.status, 200); + + // Second reset with same guid fails (recoveryLinkExpirationDate was cleared) + const second = await request(app) + .post(`/auth/reset-password/${guid}`) + .send({ password: 'anotherpassword' }); + assert.strictEqual(second.status, 500); + }); +}); diff --git a/server/routes/auth.ts b/server/routes/auth.ts index d625d85ec..66b18224a 100644 --- a/server/routes/auth.ts +++ b/server/routes/auth.ts @@ -671,9 +671,11 @@ authRoutes.post('/logout', async (req, res, next) => { await axios.delete(`${baseUrl}/Devices`, { params: { Id: user.jellyfinDeviceId }, headers: { - 'X-Emby-Authorization': `MediaBrowser Client="Seerr", Device="Seerr", DeviceId="seerr", Version="${getAppVersion()}", Token="${ - settings.jellyfin.apiKey - }"`, + 'X-Emby-Authorization': `MediaBrowser Client="Seerr", Device="Seerr", DeviceId="seerr", Version="${ + settings.main.mediaServerType === MediaServerType.EMBY + ? '1.0.0' + : getAppVersion() + }", Token="${settings.jellyfin.apiKey}"`, }, }); } catch (error) { @@ -738,7 +740,7 @@ authRoutes.post('/reset-password', async (req, res, next) => { if (user) { await user.resetPassword(); - userRepository.save(user); + await userRepository.save(user); logger.info('Successfully sent password reset link', { label: 'API', ip: req.ip, @@ -803,7 +805,7 @@ authRoutes.post('/reset-password/:guid', async (req, res, next) => { } user.recoveryLinkExpirationDate = null; await user.setPassword(req.body.password); - userRepository.save(user); + await userRepository.save(user); logger.info('Successfully reset password', { label: 'API', ip: req.ip, diff --git a/server/routes/avatarproxy.ts b/server/routes/avatarproxy.ts index 17df52110..2027d79db 100644 --- a/server/routes/avatarproxy.ts +++ b/server/routes/avatarproxy.ts @@ -27,7 +27,11 @@ async function initAvatarImageProxy() { const authToken = getSettings().jellyfin.apiKey; _avatarImageProxy = new ImageProxy('avatar', '', { headers: { - 'X-Emby-Authorization': `MediaBrowser Client="Seerr", Device="Seerr", DeviceId="${deviceId}", Version="${getAppVersion()}", Token="${authToken}"`, + 'X-Emby-Authorization': `MediaBrowser Client="Seerr", Device="Seerr", DeviceId="${deviceId}", Version="${ + getSettings().main.mediaServerType === MediaServerType.EMBY + ? '1.0.0' + : getAppVersion() + }", Token="${authToken}"`, }, }); } @@ -61,7 +65,7 @@ export async function checkAvatarChanged( if (headResponse.status !== 200) { return { changed: false }; } - } catch (error) { + } catch { return { changed: false }; } @@ -141,13 +145,16 @@ router.get('/:jellyfinUserId', async (req, res) => { const jellyfinAvatarUrl = getJellyfinAvatarUrl(req.params.jellyfinUserId); - let imageData = await avatarImageCache.getImage( - jellyfinAvatarUrl, - fallbackUrl - ); - - if (imageData.meta.extension === 'json') { - // this is a 404 + let imageData; + if (user?.avatarVersion) { + imageData = await avatarImageCache.getImage( + jellyfinAvatarUrl, + fallbackUrl + ); + if (imageData.meta.extension === 'json') { + imageData = await avatarImageCache.getImage(fallbackUrl); + } + } else { imageData = await avatarImageCache.getImage(fallbackUrl); } diff --git a/server/routes/blocklist.ts b/server/routes/blocklist.ts index 8a322f3ee..39315e8d2 100644 --- a/server/routes/blocklist.ts +++ b/server/routes/blocklist.ts @@ -1,5 +1,6 @@ -import { MediaType } from '@server/constants/media'; -import { getRepository } from '@server/datasource'; +import TheMovieDb from '@server/api/themoviedb'; +import { MediaStatus, MediaType } from '@server/constants/media'; +import dataSource, { getRepository } from '@server/datasource'; import { Blocklist } from '@server/entity/Blocklist'; import Media from '@server/entity/Media'; import type { BlocklistResultsResponse } from '@server/interfaces/api/blocklistInterfaces'; @@ -7,7 +8,7 @@ import { Permission } from '@server/lib/permissions'; import logger from '@server/logger'; import { isAuthenticated } from '@server/middleware/auth'; import { Router } from 'express'; -import { EntityNotFoundError, QueryFailedError } from 'typeorm'; +import { EntityNotFoundError, In, QueryFailedError } from 'typeorm'; import { z } from 'zod'; const blocklistRoutes = Router(); @@ -17,6 +18,7 @@ export const blocklistAdd = z.object({ mediaType: z.nativeEnum(MediaType), title: z.coerce.string().optional(), user: z.coerce.number(), + blocklistedTags: z.string().optional(), }); const blocklistGet = z.object({ @@ -89,18 +91,29 @@ blocklistRoutes.get( type: 'or', }), async (req, res, next) => { + const mediaType = req.query.mediaType; + if (mediaType !== MediaType.MOVIE && mediaType !== MediaType.TV) { + return next({ + status: 400, + message: 'Invalid or missing mediaType query parameter.', + }); + } + try { const blocklisteRepository = getRepository(Blocklist); const blocklistItem = await blocklisteRepository.findOneOrFail({ - where: { tmdbId: Number(req.params.id) }, + where: { + tmdbId: Number(req.params.id), + mediaType, + }, }); return res.status(200).send(blocklistItem); } catch (e) { if (e instanceof EntityNotFoundError) { return next({ - status: 401, + status: 404, message: e.message, }); } @@ -147,17 +160,129 @@ blocklistRoutes.post( } ); +blocklistRoutes.post( + '/collection/:id', + isAuthenticated([Permission.MANAGE_BLOCKLIST], { + type: 'or', + }), + async (req, res, next) => { + try { + const tmdb = new TheMovieDb(); + const collection = await tmdb.getCollection({ + collectionId: Number(req.params.id), + language: req.locale, + }); + + const uniqueParts = [ + ...new Map(collection.parts.map((p) => [p.id, p])).values(), + ]; + const partIds = uniqueParts.map((p) => p.id); + if (partIds.length === 0) { + return res.status(201).send(); + } + + await dataSource.transaction(async (em) => { + const blocklistRepository = em.getRepository(Blocklist); + const mediaRepository = em.getRepository(Media); + + const [existingBlocklists, existingMedia] = await Promise.all([ + blocklistRepository.find({ + where: { tmdbId: In(partIds), mediaType: MediaType.MOVIE }, + }), + mediaRepository.find({ + where: { tmdbId: In(partIds), mediaType: MediaType.MOVIE }, + }), + ]); + const blocklistByTmdbId = new Map( + existingBlocklists.map((b) => [b.tmdbId, b]) + ); + const mediaByTmdbId = new Map(existingMedia.map((m) => [m.tmdbId, m])); + + await Promise.all( + uniqueParts.map(async (part) => { + if (blocklistByTmdbId.has(part.id)) { + return; + } + + let blocklist = new Blocklist({ + tmdbId: part.id, + mediaType: MediaType.MOVIE, + title: part.title, + user: req.user, + }); + + try { + await blocklistRepository.save(blocklist); + } catch (error) { + if ( + !(error instanceof QueryFailedError) || + error.driverError.errno !== 19 + ) { + throw error; + } + const row = await blocklistRepository.findOne({ + where: { tmdbId: part.id, mediaType: MediaType.MOVIE }, + }); + if (!row) { + throw error; + } + blocklist = row; + } + + let media = mediaByTmdbId.get(part.id); + if (!media) { + media = new Media({ + tmdbId: part.id, + status: MediaStatus.BLOCKLISTED, + status4k: MediaStatus.BLOCKLISTED, + mediaType: MediaType.MOVIE, + blocklist: Promise.resolve(blocklist), + }); + } else { + media.status = MediaStatus.BLOCKLISTED; + media.status4k = MediaStatus.BLOCKLISTED; + media.blocklist = Promise.resolve(blocklist); + } + + await mediaRepository.save(media); + }) + ); + }); + + return res.status(201).send(); + } catch (e) { + logger.error('Error blocklisting collection', { + label: 'Blocklist', + errorMessage: e.message, + collectionId: req.params.id, + }); + return next({ status: 500, message: e.message }); + } + } +); + blocklistRoutes.delete( '/:id', isAuthenticated([Permission.MANAGE_BLOCKLIST], { type: 'or', }), async (req, res, next) => { + const mediaType = req.query.mediaType; + if (mediaType !== MediaType.MOVIE && mediaType !== MediaType.TV) { + return next({ + status: 400, + message: 'Invalid or missing mediaType query parameter.', + }); + } + try { const blocklisteRepository = getRepository(Blocklist); const blocklistItem = await blocklisteRepository.findOneOrFail({ - where: { tmdbId: Number(req.params.id) }, + where: { + tmdbId: Number(req.params.id), + mediaType, + }, }); await blocklisteRepository.remove(blocklistItem); @@ -165,7 +290,10 @@ blocklistRoutes.delete( const mediaRepository = getRepository(Media); const mediaItem = await mediaRepository.findOneOrFail({ - where: { tmdbId: Number(req.params.id) }, + where: { + tmdbId: Number(req.params.id), + mediaType: req.query.mediaType as MediaType, + }, }); await mediaRepository.remove(mediaItem); @@ -174,7 +302,7 @@ blocklistRoutes.delete( } catch (e) { if (e instanceof EntityNotFoundError) { return next({ - status: 401, + status: 404, message: e.message, }); } @@ -183,4 +311,54 @@ blocklistRoutes.delete( } ); +blocklistRoutes.delete( + '/collection/:id', + isAuthenticated([Permission.MANAGE_BLOCKLIST], { + type: 'or', + }), + async (req, res, next) => { + try { + const tmdb = new TheMovieDb(); + const collection = await tmdb.getCollection({ + collectionId: Number(req.params.id), + language: req.locale, + }); + + await dataSource.transaction(async (em) => { + const blocklistRepository = em.getRepository(Blocklist); + const mediaRepository = em.getRepository(Media); + + await Promise.all( + collection.parts.map(async (part) => { + const blocklistItem = await blocklistRepository.findOne({ + where: { tmdbId: part.id, mediaType: MediaType.MOVIE }, + }); + + if (blocklistItem) { + await blocklistRepository.remove(blocklistItem); + + const mediaItem = await mediaRepository.findOne({ + where: { tmdbId: part.id, mediaType: MediaType.MOVIE }, + }); + + if (mediaItem) { + await mediaRepository.remove(mediaItem); + } + } + }) + ); + }); + + return res.status(204).send(); + } catch (e) { + logger.error('Error unblocklisting collection', { + label: 'Blocklist', + errorMessage: e.message, + collectionId: req.params.id, + }); + return next({ status: 500, message: e.message }); + } + } +); + export default blocklistRoutes; diff --git a/server/routes/collection.ts b/server/routes/collection.ts index 8b1cd9efb..f2a603227 100644 --- a/server/routes/collection.ts +++ b/server/routes/collection.ts @@ -1,4 +1,5 @@ import TheMovieDb from '@server/api/themoviedb'; +import { MediaType } from '@server/constants/media'; import Media from '@server/entity/Media'; import logger from '@server/logger'; import { mapCollection } from '@server/models/Collection'; @@ -17,7 +18,10 @@ collectionRoutes.get<{ id: string }>('/:id', async (req, res, next) => { const media = await Media.getRelatedMedia( req.user, - collection.parts.map((part) => part.id) + collection.parts.map((part) => ({ + tmdbId: part.id, + mediaType: MediaType.MOVIE, + })) ); return res.status(200).json(mapCollection(collection, media)); diff --git a/server/routes/discover.ts b/server/routes/discover.ts index b40ba9961..7f250e6a6 100644 --- a/server/routes/discover.ts +++ b/server/routes/discover.ts @@ -49,6 +49,15 @@ export const createTmdbWithRegionLanguage = (user?: User): TheMovieDb => { }); }; +export const createTmdbWithBlocklistSettings = (): TheMovieDb => { + const settings = getSettings(); + + return new TheMovieDb({ + discoverRegion: settings.main.blocklistRegion, + originalLanguage: settings.main.blocklistLanguage, + }); +}; + const discoverRoutes = Router(); const QueryFilterOptions = z.object({ @@ -124,7 +133,10 @@ discoverRoutes.get('/movies', async (req, res, next) => { const media = await Media.getRelatedMedia( req.user, - data.results.map((result) => result.id) + data.results.map((result) => ({ + tmdbId: result.id, + mediaType: MediaType.MOVIE, + })) ); let keywordData: TmdbKeyword[] = []; @@ -193,7 +205,10 @@ discoverRoutes.get<{ language: string }>( const media = await Media.getRelatedMedia( req.user, - data.results.map((result) => result.id) + data.results.map((result) => ({ + tmdbId: result.id, + mediaType: MediaType.MOVIE, + })) ); return res.status(200).json({ @@ -251,7 +266,10 @@ discoverRoutes.get<{ genreId: string }>( const media = await Media.getRelatedMedia( req.user, - data.results.map((result) => result.id) + data.results.map((result) => ({ + tmdbId: result.id, + mediaType: MediaType.MOVIE, + })) ); return res.status(200).json({ @@ -299,7 +317,10 @@ discoverRoutes.get<{ studioId: string }>( const media = await Media.getRelatedMedia( req.user, - data.results.map((result) => result.id) + data.results.map((result) => ({ + tmdbId: result.id, + mediaType: MediaType.MOVIE, + })) ); return res.status(200).json({ @@ -349,7 +370,10 @@ discoverRoutes.get('/movies/upcoming', async (req, res, next) => { const media = await Media.getRelatedMedia( req.user, - data.results.map((result) => result.id) + data.results.map((result) => ({ + tmdbId: result.id, + mediaType: MediaType.MOVIE, + })) ); return res.status(200).json({ @@ -417,7 +441,10 @@ discoverRoutes.get('/tv', async (req, res, next) => { const media = await Media.getRelatedMedia( req.user, - data.results.map((result) => result.id) + data.results.map((result) => ({ + tmdbId: result.id, + mediaType: MediaType.TV, + })) ); let keywordData: TmdbKeyword[] = []; @@ -485,7 +512,10 @@ discoverRoutes.get<{ language: string }>( const media = await Media.getRelatedMedia( req.user, - data.results.map((result) => result.id) + data.results.map((result) => ({ + tmdbId: result.id, + mediaType: MediaType.TV, + })) ); return res.status(200).json({ @@ -543,7 +573,10 @@ discoverRoutes.get<{ genreId: string }>( const media = await Media.getRelatedMedia( req.user, - data.results.map((result) => result.id) + data.results.map((result) => ({ + tmdbId: result.id, + mediaType: MediaType.TV, + })) ); return res.status(200).json({ @@ -591,7 +624,10 @@ discoverRoutes.get<{ networkId: string }>( const media = await Media.getRelatedMedia( req.user, - data.results.map((result) => result.id) + data.results.map((result) => ({ + tmdbId: result.id, + mediaType: MediaType.TV, + })) ); return res.status(200).json({ @@ -641,7 +677,10 @@ discoverRoutes.get('/tv/upcoming', async (req, res, next) => { const media = await Media.getRelatedMedia( req.user, - data.results.map((result) => result.id) + data.results.map((result) => ({ + tmdbId: result.id, + mediaType: MediaType.TV, + })) ); return res.status(200).json({ @@ -673,41 +712,64 @@ discoverRoutes.get('/trending', async (req, res, next) => { const tmdb = createTmdbWithRegionLanguage(req.user); try { - const data = await tmdb.getAllTrending({ - page: Number(req.query.page), - language: (req.query.language as string) ?? req.locale, - }); + const mediaType = (req.query.mediaType as 'all' | 'movie' | 'tv') ?? 'all'; + const timeWindow = + (req.query.timeWindow as 'day' | 'week') === 'week' ? 'week' : 'day'; + const language = (req.query.language as string) ?? req.locale; + const page = Number(req.query.page); + + const trendingFetchers = { + movie: async () => ({ + data: await tmdb.getMovieTrending({ page, language, timeWindow }), + mapper: mapMovieResult, + type: MediaType.MOVIE, + }), + tv: async () => ({ + data: await tmdb.getTvTrending({ page, language, timeWindow }), + mapper: mapTvResult, + type: MediaType.TV, + }), + all: async () => ({ + data: await tmdb.getAllTrending({ page, language, timeWindow }), + mapper: (result: any, media?: Media) => { + if (isMovie(result)) { + return mapMovieResult(result, media); + } else if (isPerson(result)) { + return mapPersonResult(result); + } else if (isCollection(result)) { + return mapCollectionResult(result); + } else { + return mapTvResult(result, media); + } + }, + type: null, + }), + } as const; + + const { data, mapper, type } = await trendingFetchers[mediaType](); const media = await Media.getRelatedMedia( req.user, - data.results.map((result) => result.id) + data.results.map((result) => ({ + tmdbId: result.id, + mediaType: isMovie(result) ? MediaType.MOVIE : MediaType.TV, + })) ); return res.status(200).json({ page: data.page, totalPages: data.total_pages, totalResults: data.total_results, - results: data.results.map((result) => - isMovie(result) - ? mapMovieResult( - result, - media.find( - (med) => - med.tmdbId === result.id && med.mediaType === MediaType.MOVIE - ) - ) - : isPerson(result) - ? mapPersonResult(result) - : isCollection(result) - ? mapCollectionResult(result) - : mapTvResult( - result, - media.find( - (med) => - med.tmdbId === result.id && med.mediaType === MediaType.TV - ) - ) - ), + results: data.results.map((result) => { + // - If "type" is set (case: "movie" or "tv"), the mediaType must also match. + // - If "type" is not set (case: "all"), only filter by tmdbId. + const selectedMedia = media.find( + (med) => + med.tmdbId === result.id && (type ? med.mediaType === type : true) + ); + + return mapper(result, selectedMedia); + }), }); } catch (e) { logger.debug('Something went wrong retrieving trending items', { @@ -735,7 +797,10 @@ discoverRoutes.get<{ keywordId: string }>( const media = await Media.getRelatedMedia( req.user, - data.results.map((result) => result.id) + data.results.map((result) => ({ + tmdbId: result.id, + mediaType: MediaType.MOVIE, + })) ); return res.status(200).json({ @@ -859,7 +924,7 @@ discoverRoutes.get, WatchlistResponse>( async (req, res) => { const userRepository = getRepository(User); const itemsPerPage = 20; - const page = Number(req.query.page) ?? 1; + const page = req.query.page ? Number(req.query.page) : 1; const offset = (page - 1) * itemsPerPage; const activeUser = await userRepository.findOne({ diff --git a/server/routes/imageproxy.ts b/server/routes/imageproxy.ts index ac2fbe082..ede3e83e3 100644 --- a/server/routes/imageproxy.ts +++ b/server/routes/imageproxy.ts @@ -32,6 +32,12 @@ function initTvdbImageProxy() { router.get('/:type/*', async (req, res) => { const imagePath = req.path.replace(/^\/\w+/, ''); + + if (imagePath.startsWith('//') || imagePath.includes('://')) { + logger.error('Invalid URL for image proxy', { imagePath }); + return res.status(403).send('Invalid URL for image proxy'); + } + try { let imageData; if (req.params.type === 'tmdb') { diff --git a/server/routes/issue.ts b/server/routes/issue.ts index 5b0bbd983..1e8769f8e 100644 --- a/server/routes/issue.ts +++ b/server/routes/issue.ts @@ -293,7 +293,7 @@ issueRoutes.post<{ issueId: string }, Issue, { message: string }>( }); issue.comments = [...issue.comments, comment]; - + issue.updatedAt = new Date(); await issueRepository.save(issue); return res.status(200).json(issue); diff --git a/server/routes/media.ts b/server/routes/media.ts index d7962825d..de3c1b6dc 100644 --- a/server/routes/media.ts +++ b/server/routes/media.ts @@ -17,7 +17,7 @@ import logger from '@server/logger'; import { isAuthenticated } from '@server/middleware/auth'; import { Router } from 'express'; import type { FindOneOptions } from 'typeorm'; -import { In } from 'typeorm'; +import { In, IsNull, Not } from 'typeorm'; const mediaRoutes = Router(); @@ -48,8 +48,6 @@ mediaRoutes.get('/', async (req, res, next) => { case 'pending': statusFilter = MediaStatus.PENDING; break; - default: - statusFilter = undefined; } let sortFilter: FindOneOptions['order'] = { @@ -68,12 +66,18 @@ mediaRoutes.get('/', async (req, res, next) => { }; } + let whereClause: FindOneOptions['where']; + if (statusFilter || req.query.sort === 'mediaAdded') { + whereClause = {}; + if (statusFilter) whereClause.status = statusFilter; + if (req.query.sort === 'mediaAdded') + whereClause.mediaAddedAt = Not(IsNull()); + } + try { const [media, mediaCount] = await mediaRepository.findAndCount({ order: sortFilter, - where: statusFilter && { - status: statusFilter, - }, + where: whereClause, take: pageSize, skip, }); diff --git a/server/routes/movie.ts b/server/routes/movie.ts index 80b8a3005..bd86e447a 100644 --- a/server/routes/movie.ts +++ b/server/routes/movie.ts @@ -27,6 +27,7 @@ movieRoutes.get('/:id', async (req, res, next) => { const onUserWatchlist = await getRepository(Watchlist).exist({ where: { tmdbId: Number(req.params.id), + mediaType: MediaType.MOVIE, requestedBy: { id: req.user?.id, }, @@ -67,7 +68,10 @@ movieRoutes.get('/:id/recommendations', async (req, res, next) => { const media = await Media.getRelatedMedia( req.user, - results.results.map((result) => result.id) + results.results.map((result) => ({ + tmdbId: result.id, + mediaType: MediaType.MOVIE, + })) ); return res.status(200).json({ @@ -109,7 +113,10 @@ movieRoutes.get('/:id/similar', async (req, res, next) => { const media = await Media.getRelatedMedia( req.user, - results.results.map((result) => result.id) + results.results.map((result) => ({ + tmdbId: result.id, + mediaType: MediaType.MOVIE, + })) ); return res.status(200).json({ diff --git a/server/routes/person.ts b/server/routes/person.ts index 7462328c0..2d88a4925 100644 --- a/server/routes/person.ts +++ b/server/routes/person.ts @@ -43,12 +43,22 @@ personRoutes.get('/:id/combined_credits', async (req, res, next) => { const castMedia = await Media.getRelatedMedia( req.user, - combinedCredits.cast.map((result) => result.id) + combinedCredits.cast + .filter((result) => result.media_type) + .map((result) => ({ + tmdbId: result.id, + mediaType: result.media_type!, + })) ); const crewMedia = await Media.getRelatedMedia( req.user, - combinedCredits.crew.map((result) => result.id) + combinedCredits.crew + .filter((result) => result.media_type) + .map((result) => ({ + tmdbId: result.id, + mediaType: result.media_type!, + })) ); return res.status(200).json({ diff --git a/server/routes/request.test.ts b/server/routes/request.test.ts new file mode 100644 index 000000000..2b45127dd --- /dev/null +++ b/server/routes/request.test.ts @@ -0,0 +1,267 @@ +import assert from 'node:assert/strict'; +import { before, beforeEach, describe, it, mock } from 'node:test'; + +import { + MediaRequestStatus, + MediaStatus, + MediaType, +} from '@server/constants/media'; +import { getRepository } from '@server/datasource'; +import Media from '@server/entity/Media'; +import { MediaRequest } from '@server/entity/MediaRequest'; +import { User } from '@server/entity/User'; +import { getSettings } from '@server/lib/settings'; +import { checkUser } from '@server/middleware/auth'; +import { setupTestDb } from '@server/test/db'; +import type { Express } from 'express'; +import express from 'express'; +import session from 'express-session'; +import request from 'supertest'; +import authRoutes from './auth'; +import requestRoutes from './request'; + +const sendNotificationMock = mock.method( + MediaRequest, + 'sendNotification', + async () => undefined +).mock; + +let app: Express; + +function createApp() { + const app = express(); + app.use(express.json()); + app.use( + session({ + secret: 'test-secret', + resave: false, + saveUninitialized: false, + }) + ); + app.use(checkUser); + app.use('/auth', authRoutes); + app.use('/request', requestRoutes); + app.use( + ( + err: { status?: number; message?: string }, + _req: express.Request, + res: express.Response, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _next: express.NextFunction + ) => { + res + .status(err.status ?? 500) + .json({ status: err.status ?? 500, message: err.message }); + } + ); + return app; +} + +before(async () => { + app = createApp(); +}); + +beforeEach(() => { + sendNotificationMock.resetCalls(); +}); + +setupTestDb(); + +async function loginAs(email: string, password: string) { + const settings = getSettings(); + const priorLocalLogin = settings.main.localLogin; + settings.main.localLogin = true; + + try { + const agent = request.agent(app); + const res = await agent.post('/auth/local').send({ email, password }); + assert.strictEqual(res.status, 200); + return agent; + } finally { + settings.main.localLogin = priorLocalLogin; + } +} + +async function seedRequest(status = MediaRequestStatus.PENDING) { + const userRepo = getRepository(User); + const mediaRepo = getRepository(Media); + const requestRepo = getRepository(MediaRequest); + + const requestedBy = await userRepo.findOneOrFail({ + where: { email: 'friend@seerr.dev' }, + }); + + const media = await mediaRepo.save( + new Media({ + mediaType: MediaType.MOVIE, + tmdbId: 12345, + status: MediaStatus.UNKNOWN, + status4k: MediaStatus.UNKNOWN, + }) + ); + + const created = await requestRepo.save( + new MediaRequest({ + type: MediaType.MOVIE, + status, + media, + requestedBy, + is4k: false, + updatedAt: new Date('2025-03-01T00:00:00.000Z'), + }) + ); + + return requestRepo.findOneOrFail({ + where: { id: created.id }, + relations: { requestedBy: true, modifiedBy: true }, + }); +} + +describe('DELETE /request/:requestId', () => { + it('allows the owner to delete their own pending request', async () => { + const mediaRequest = await seedRequest(); + + const agent = await loginAs('friend@seerr.dev', 'test1234'); + const res = await agent.delete(`/request/${mediaRequest.id}`); + + assert.strictEqual(res.status, 204); + }); + + it('allows an admin to delete any pending request', async () => { + const mediaRequest = await seedRequest(); + + const agent = await loginAs('admin@seerr.dev', 'test1234'); + const res = await agent.delete(`/request/${mediaRequest.id}`); + + assert.strictEqual(res.status, 204); + }); + + it('prevents a non-owner non-admin from deleting a pending request', async () => { + const userRepo = getRepository(User); + const mediaRepo = getRepository(Media); + const requestRepo = getRepository(MediaRequest); + + // Create a request owned by admin, then try to delete as friend + const owner = await userRepo.findOneOrFail({ + where: { email: 'admin@seerr.dev' }, + }); + + const media = await mediaRepo.save( + new Media({ + mediaType: MediaType.MOVIE, + tmdbId: 54321, + status: MediaStatus.UNKNOWN, + status4k: MediaStatus.UNKNOWN, + }) + ); + + const mediaRequest = await requestRepo.save( + new MediaRequest({ + type: MediaType.MOVIE, + status: MediaRequestStatus.PENDING, + media, + requestedBy: owner, + is4k: false, + }) + ); + + const agent = await loginAs('friend@seerr.dev', 'test1234'); + const res = await agent.delete(`/request/${mediaRequest.id}`); + + assert.strictEqual(res.status, 401); + }); + + it('prevents the owner from deleting an approved request', async () => { + const mediaRequest = await seedRequest(MediaRequestStatus.APPROVED); + + const agent = await loginAs('friend@seerr.dev', 'test1234'); + const res = await agent.delete(`/request/${mediaRequest.id}`); + + assert.strictEqual(res.status, 401); + }); + + it('returns 404 for a non-existent request', async () => { + const agent = await loginAs('admin@seerr.dev', 'test1234'); + const res = await agent.delete('/request/99999999'); + + assert.strictEqual(res.status, 404); + }); +}); + +describe('PUT /request/:requestId (movie)', () => { + it('persists server and root folder changes to the database', async () => { + const requestRepo = getRepository(MediaRequest); + const mediaRequest = await seedRequest(); + + const agent = await loginAs('admin@seerr.dev', 'test1234'); + const res = await agent.put(`/request/${mediaRequest.id}`).send({ + mediaType: MediaType.MOVIE, + serverId: 3, + profileId: 7, + rootFolder: '/updated/movies', + tags: [1, 2], + }); + + assert.strictEqual(res.status, 200); + + const saved = await requestRepo.findOneOrFail({ + where: { id: mediaRequest.id }, + }); + assert.strictEqual(saved.serverId, 3); + assert.strictEqual(saved.profileId, 7); + assert.strictEqual(saved.rootFolder, '/updated/movies'); + }); +}); + +describe('POST /request/:requestId/:status', () => { + const cases = [ + { action: 'approve', expected: MediaRequestStatus.APPROVED }, + { action: 'decline', expected: MediaRequestStatus.DECLINED }, + ] as const; + + for (const { action, expected } of cases) { + it(`transitions to ${action}d and records the acting user`, async () => { + const repo = getRepository(MediaRequest); + const pending = await seedRequest(); + const admin = await loginAs('admin@seerr.dev', 'test1234'); + + const res = await admin.post(`/request/${pending.id}/${action}`); + + assert.strictEqual(res.status, 200); + assert.strictEqual(res.body.status, expected); + assert.strictEqual(res.body.modifiedBy.email, 'admin@seerr.dev'); + + const persisted = await repo.findOneOrFail({ + where: { id: pending.id }, + relations: { modifiedBy: true }, + }); + + assert.strictEqual(persisted.status, expected); + assert.strictEqual(persisted.modifiedBy?.email, 'admin@seerr.dev'); + assert.ok(persisted.updatedAt > pending.updatedAt); + }); + } +}); + +describe('POST /request/:requestId/retry', () => { + it('re-approves a failed request and records the acting user', async () => { + const repo = getRepository(MediaRequest); + const failed = await seedRequest(MediaRequestStatus.FAILED); + const admin = await loginAs('admin@seerr.dev', 'test1234'); + + const res = await admin.post(`/request/${failed.id}/retry`); + + assert.strictEqual(res.status, 200); + assert.strictEqual(res.body.status, MediaRequestStatus.APPROVED); + assert.strictEqual(res.body.modifiedBy.email, 'admin@seerr.dev'); + + const persisted = await repo.findOneOrFail({ + where: { id: failed.id }, + relations: { modifiedBy: true }, + }); + + assert.strictEqual(persisted.status, MediaRequestStatus.APPROVED); + assert.strictEqual(persisted.modifiedBy?.email, 'admin@seerr.dev'); + assert.ok(persisted.updatedAt > failed.updatedAt); + }); +}); diff --git a/server/routes/request.ts b/server/routes/request.ts index 608de8e72..fafa90692 100644 --- a/server/routes/request.ts +++ b/server/routes/request.ts @@ -512,7 +512,7 @@ requestRoutes.put<{ requestId: string }>( request.tags = req.body.tags; request.requestedBy = requestUser as User; - requestRepository.save(request); + await requestRepository.save(request); } else if (req.body.mediaType === MediaType.TV) { const mediaRepository = getRepository(Media); request.serverId = req.body.serverId; @@ -609,8 +609,8 @@ requestRoutes.delete('/:requestId', async (req, res, next) => { if ( !req.user?.hasPermission(Permission.MANAGE_REQUESTS) && - request.requestedBy.id !== req.user?.id && - request.status !== 1 + (request.requestedBy.id !== req.user?.id || + request.status !== MediaRequestStatus.PENDING) ) { return next({ status: 401, @@ -646,6 +646,7 @@ requestRoutes.post<{ // this also triggers updating the parent media's status & sending to *arr request.status = MediaRequestStatus.APPROVED; + request.modifiedBy = req.user; await requestRepository.save(request); return res.status(200).json(request); diff --git a/server/routes/search.ts b/server/routes/search.ts index ee2fd9eb8..cccb38f28 100644 --- a/server/routes/search.ts +++ b/server/routes/search.ts @@ -35,7 +35,10 @@ searchRoutes.get('/', async (req, res, next) => { const media = await Media.getRelatedMedia( req.user, - results.results.map((result) => result.id) + results.results.map((result) => ({ + tmdbId: result.id, + mediaType: result.media_type, + })) ); return res.status(200).json({ diff --git a/server/routes/settings/notifications.ts b/server/routes/settings/notifications.ts index 5984e5385..52cc2ee0f 100644 --- a/server/routes/settings/notifications.ts +++ b/server/routes/settings/notifications.ts @@ -279,6 +279,7 @@ notificationRoutes.get('/webhook', (_req, res) => { 'utf8' ) ), + customHeaders: webhookSettings.options.customHeaders ?? [], supportVariables: webhookSettings.options.supportVariables ?? false, }, }; @@ -301,6 +302,7 @@ notificationRoutes.post('/webhook', async (req, res, next) => { ), webhookUrl: req.body.options.webhookUrl, authHeader: req.body.options.authHeader, + customHeaders: req.body.options.customHeaders ?? [], supportVariables: req.body.options.supportVariables ?? false, }, }; @@ -333,6 +335,7 @@ notificationRoutes.post('/webhook/test', async (req, res, next) => { ), webhookUrl: req.body.options.webhookUrl, authHeader: req.body.options.authHeader, + customHeaders: req.body.options.customHeaders ?? [], supportVariables: req.body.options.supportVariables ?? false, }, }; diff --git a/server/routes/tv.ts b/server/routes/tv.ts index f5632398e..743f407e4 100644 --- a/server/routes/tv.ts +++ b/server/routes/tv.ts @@ -35,6 +35,7 @@ tvRoutes.get('/:id', async (req, res, next) => { const onUserWatchlist = await getRepository(Watchlist).exist({ where: { tmdbId: Number(req.params.id), + mediaType: MediaType.TV, requestedBy: { id: req.user?.id, }, @@ -110,7 +111,10 @@ tvRoutes.get('/:id/recommendations', async (req, res, next) => { const media = await Media.getRelatedMedia( req.user, - results.results.map((result) => result.id) + results.results.map((result) => ({ + tmdbId: result.id, + mediaType: MediaType.TV, + })) ); return res.status(200).json({ @@ -151,7 +155,10 @@ tvRoutes.get('/:id/similar', async (req, res, next) => { const media = await Media.getRelatedMedia( req.user, - results.results.map((result) => result.id) + results.results.map((result) => ({ + tmdbId: result.id, + mediaType: MediaType.TV, + })) ); return res.status(200).json({ diff --git a/server/routes/user/index.ts b/server/routes/user/index.ts index 86ab09611..765215a30 100644 --- a/server/routes/user/index.ts +++ b/server/routes/user/index.ts @@ -22,6 +22,7 @@ import { getSettings } from '@server/lib/settings'; import logger from '@server/logger'; import { isAuthenticated } from '@server/middleware/auth'; import { getHostname } from '@server/utils/getHostname'; +import { normalizeJellyfinGuid } from '@server/utils/jellyfin'; import { isOwnProfileOrAdmin } from '@server/utils/profileMiddleware'; import { Router } from 'express'; import gravatarUrl from 'gravatar-url'; @@ -44,6 +45,35 @@ router.get('/', async (req, res, next) => { : Math.max(10, includeIds.length); const skip = req.query.skip ? Number(req.query.skip) : 0; const q = req.query.q ? req.query.q.toString().toLowerCase() : ''; + const sortParam = req.query.sort ? req.query.sort.toString() : undefined; + const sortDirectionQuery = req.query.sortDirection + ? req.query.sortDirection.toString().toLowerCase() + : undefined; + + let sortDirection: 'ASC' | 'DESC'; + if (sortDirectionQuery === 'asc') { + sortDirection = 'ASC'; + } else if (sortDirectionQuery === 'desc') { + sortDirection = 'DESC'; + } else { + switch (sortParam) { + case 'displayname': + sortDirection = 'ASC'; + break; + case 'requests': + case 'updated': + sortDirection = 'DESC'; + break; + case 'created': + case 'usertype': + case 'role': + case undefined: + default: + sortDirection = 'ASC'; + break; + } + } + let query = getRepository(User).createQueryBuilder('user'); if (q) { @@ -57,29 +87,32 @@ router.get('/', async (req, res, next) => { query.andWhereInIds(includeIds); } - switch (req.query.sort) { + switch (sortParam) { + case 'created': + query = query.orderBy('user.createdAt', sortDirection); + break; case 'updated': - query = query.orderBy('user.updatedAt', 'DESC'); + query = query.orderBy('user.updatedAt', sortDirection); break; case 'displayname': query = query .addSelect( `CASE WHEN (user.username IS NULL OR user.username = '') THEN ( - CASE WHEN (user.plexUsername IS NULL OR user.plexUsername = '') THEN ( - CASE WHEN (user.jellyfinUsername IS NULL OR user.jellyfinUsername = '') THEN - "user"."email" + CASE WHEN (user.plexUsername IS NULL OR user.plexUsername = '') THEN ( + CASE WHEN (user.jellyfinUsername IS NULL OR user.jellyfinUsername = '') THEN + "user"."email" + ELSE + LOWER(user.jellyfinUsername) + END) ELSE - LOWER(user.jellyfinUsername) + LOWER(user.plexUsername) END) ELSE - LOWER(user.jellyfinUsername) - END) - ELSE - LOWER(user.username) - END`, + LOWER(user.username) + END`, 'displayname_sort_key' ) - .orderBy('displayname_sort_key', 'ASC'); + .orderBy('displayname_sort_key', sortDirection); break; case 'requests': query = query @@ -89,10 +122,25 @@ router.get('/', async (req, res, next) => { .from(MediaRequest, 'request') .where('request.requestedBy.id = user.id'); }, 'request_count') - .orderBy('request_count', 'DESC'); + .orderBy('request_count', sortDirection); + break; + case 'usertype': + query = query.orderBy('user.userType', sortDirection); + break; + case 'role': + query = query + .addSelect( + `CASE + WHEN user.id = 1 THEN 0 + WHEN (user.permissions & ${Permission.ADMIN}) != 0 THEN 1 + ELSE 2 + END`, + 'role_sort_key' + ) + .orderBy('role_sort_key', sortDirection); break; default: - query = query.orderBy('user.id', 'ASC'); + query = query.orderBy('user.id', sortDirection); break; } @@ -268,7 +316,7 @@ router.post< ); return res.status(204).send(); - } catch (e) { + } catch { logger.error('Failed to register user push subscription', { label: 'API', }); @@ -289,7 +337,7 @@ router.get<{ userId: string }>( }); return res.status(200).json(userPushSubs); - } catch (e) { + } catch { next({ status: 404, message: 'User subscriptions not found.' }); } } @@ -313,7 +361,7 @@ router.get<{ userId: string; endpoint: string }>( }); return res.status(200).json(userPushSub); - } catch (e) { + } catch { next({ status: 404, message: 'User subscription not found.' }); } } @@ -367,7 +415,7 @@ router.get<{ id: string }>('/:id', async (req, res, next) => { const isAdmin = req.user?.hasPermission(Permission.MANAGE_USERS); return res.status(200).json(user.filter(isOwnProfile || isAdmin)); - } catch (e) { + } catch { next({ status: 404, message: 'User not found.' }); } }); @@ -512,7 +560,7 @@ router.put<{ id: string }>( await userRepository.save(user); return res.status(200).json(user.filter()); - } catch (e) { + } catch { next({ status: 404, message: 'User not found.' }); } } @@ -679,10 +727,20 @@ router.post( jellyfinClient.setUserId(admin.jellyfinUserId ?? ''); const jellyfinUsers = await jellyfinClient.getUsers(); - for (const jellyfinUserId of body.jellyfinUserIds) { - const jellyfinUser = jellyfinUsers.users.find( - (user) => user.Id === jellyfinUserId - ); + const jellyfinUsersById = new Map( + jellyfinUsers.users.map((user) => [ + normalizeJellyfinGuid(user.Id), + user, + ]) + ); + + for (const rawJellyfinUserId of body.jellyfinUserIds) { + const jellyfinUserId = normalizeJellyfinGuid(rawJellyfinUserId); + if (!jellyfinUserId) { + continue; + } + + const jellyfinUser = jellyfinUsersById.get(jellyfinUserId); const user = await userRepository.findOne({ select: ['id', 'jellyfinUserId'], @@ -866,7 +924,7 @@ router.get<{ id: string }, WatchlistResponse>( } const itemsPerPage = 20; - const page = Number(req.query.page) ?? 1; + const page = req.query.page ? Number(req.query.page) : 1; const offset = (page - 1) * itemsPerPage; const user = await getRepository(User).findOneOrFail({ diff --git a/server/routes/user/usersettings.ts b/server/routes/user/usersettings.ts index bd5af746f..784f7b5fd 100644 --- a/server/routes/user/usersettings.ts +++ b/server/routes/user/usersettings.ts @@ -617,7 +617,7 @@ userSettingsRoutes.post<{ id: string }, UserSettingsNotificationsResponse>( ); } - userRepository.save(user); + await userRepository.save(user); return res.status(200).json({ pgpKey: user.settings.pgpKey, diff --git a/server/routes/watchlist.ts b/server/routes/watchlist.ts index bbb44da01..9a975d6ce 100644 --- a/server/routes/watchlist.ts +++ b/server/routes/watchlist.ts @@ -7,6 +7,7 @@ import logger from '@server/logger'; import { Router } from 'express'; import { QueryFailedError } from 'typeorm'; +import { MediaType } from '@server/constants/media'; import { watchlistCreate } from '@server/interfaces/api/watchlistCreate'; const watchlistRoutes = Router(); @@ -57,12 +58,24 @@ watchlistRoutes.delete('/:tmdbId', async (req, res, next) => { }); } try { - await Watchlist.deleteWatchlist(Number(req.params.tmdbId), req.user); + const mediaType = req.query.mediaType; + if (mediaType !== MediaType.MOVIE && mediaType !== MediaType.TV) { + return next({ + status: 400, + message: 'Invalid mediaType query parameter.', + }); + } + + await Watchlist.deleteWatchlist( + Number(req.params.tmdbId), + mediaType, + req.user + ); return res.status(204).send(); } catch (e) { if (e instanceof NotFoundError) { return next({ - status: 401, + status: 404, message: e.message, }); } diff --git a/server/scripts/prepareTestDb.ts b/server/scripts/prepareTestDb.ts index 7caede41f..ccde8bb74 100644 --- a/server/scripts/prepareTestDb.ts +++ b/server/scripts/prepareTestDb.ts @@ -1,8 +1,5 @@ -import { UserType } from '@server/constants/user'; -import dataSource, { getRepository } from '@server/datasource'; -import { User } from '@server/entity/User'; +import { seedTestDb } from '@server/utils/seedTestDb'; import { copyFileSync } from 'fs'; -import gravatarUrl from 'gravatar-url'; import path from 'path'; const prepareDb = async () => { @@ -12,61 +9,10 @@ const prepareDb = async () => { path.join(__dirname, '../../config/settings.json') ); - // Connect to DB and seed test data - const dbConnection = await dataSource.initialize(); - - if (process.env.PRESERVE_DB !== 'true') { - await dbConnection.dropDatabase(); - } - - // Run migrations in production - if (process.env.WITH_MIGRATIONS === 'true') { - await dbConnection.runMigrations(); - } else { - await dbConnection.synchronize(); - } - - const userRepository = getRepository(User); - - const admin = await userRepository.findOne({ - select: { id: true, plexId: true }, - where: { id: 1 }, + await seedTestDb({ + preserveDb: process.env.PRESERVE_DB === 'true', + withMigrations: process.env.WITH_MIGRATIONS === 'true', }); - - // Create the admin user - const user = - (await userRepository.findOne({ - where: { email: 'admin@seerr.dev' }, - })) ?? new User(); - user.plexId = admin?.plexId ?? 1; - user.plexToken = '1234'; - user.plexUsername = 'admin'; - user.username = 'admin'; - user.email = 'admin@seerr.dev'; - user.userType = UserType.PLEX; - await user.setPassword('test1234'); - user.permissions = 2; - user.avatar = gravatarUrl('admin@seerr.dev', { default: 'mm', size: 200 }); - await userRepository.save(user); - - // Create the other user - const otherUser = - (await userRepository.findOne({ - where: { email: 'friend@seerr.dev' }, - })) ?? new User(); - otherUser.plexId = admin?.plexId ?? 1; - otherUser.plexToken = '1234'; - otherUser.plexUsername = 'friend'; - otherUser.username = 'friend'; - otherUser.email = 'friend@seerr.dev'; - otherUser.userType = UserType.PLEX; - await otherUser.setPassword('test1234'); - otherUser.permissions = 32; - otherUser.avatar = gravatarUrl('friend@seerr.dev', { - default: 'mm', - size: 200, - }); - await userRepository.save(otherUser); }; prepareDb(); diff --git a/server/subscriber/MediaRequestSubscriber.ts b/server/subscriber/MediaRequestSubscriber.ts index c54ee3399..0f10c3380 100644 --- a/server/subscriber/MediaRequestSubscriber.ts +++ b/server/subscriber/MediaRequestSubscriber.ts @@ -348,17 +348,15 @@ export class MediaRequestSubscriber implements EntitySubscriberInterface { + season.status = MediaRequestStatus.COMPLETED; + }); + await requestRepository.save(entity); return; } @@ -693,6 +711,7 @@ export class MediaRequestSubscriber implements EntitySubscriberInterface { + for (const season of entity.seasons) { season.status = MediaRequestStatus.APPROVED; - seasonRequestRepository.save(season); - }); + await seasonRequestRepository.save(season); + } } } @@ -947,6 +985,15 @@ export class MediaRequestSubscriber implements EntitySubscriberInterface): Promise { diff --git a/server/subscriber/MediaSubscriber.ts b/server/subscriber/MediaSubscriber.ts index 3cf8229f0..333fa3961 100644 --- a/server/subscriber/MediaSubscriber.ts +++ b/server/subscriber/MediaSubscriber.ts @@ -9,7 +9,7 @@ import { MediaRequest } from '@server/entity/MediaRequest'; import Season from '@server/entity/Season'; import SeasonRequest from '@server/entity/SeasonRequest'; import type { EntitySubscriberInterface, UpdateEvent } from 'typeorm'; -import { EventSubscriber } from 'typeorm'; +import { EventSubscriber, In } from 'typeorm'; @EventSubscriber() export class MediaSubscriber implements EntitySubscriberInterface { @@ -45,7 +45,7 @@ export class MediaSubscriber implements EntitySubscriberInterface { }, where: { media: { id: event.id }, - status: MediaRequestStatus.APPROVED, + status: In([MediaRequestStatus.APPROVED, MediaRequestStatus.FAILED]), is4k, }, }); diff --git a/server/test/db.ts b/server/test/db.ts new file mode 100644 index 000000000..cf86dfd44 --- /dev/null +++ b/server/test/db.ts @@ -0,0 +1,11 @@ +import { resetTestDb, seedTestDb } from '@server/utils/seedTestDb'; +import { before, beforeEach } from 'node:test'; + +export function setupTestDb() { + before(async () => { + await seedTestDb(); + }); + beforeEach(async () => { + await resetTestDb(); + }); +} diff --git a/server/test/index.mts b/server/test/index.mts new file mode 100644 index 000000000..0b1c59c9a --- /dev/null +++ b/server/test/index.mts @@ -0,0 +1,122 @@ +// Runs unit tests using the `node:test` runner. + +import { Command, Option } from 'commander'; +import { createWriteStream } from 'node:fs'; +import { glob } from 'node:fs/promises'; +import { join, resolve } from 'node:path'; +import { run } from 'node:test'; +import * as reporters from 'node:test/reporters'; +import { fileURLToPath } from 'node:url'; + +const resolveImport = (specifier: string) => + fileURLToPath(import.meta.resolve(specifier)); +const BASE_DIR = join(import.meta.dirname, '../..'); + +const program = new Command(); +program + .name('test') + .argument('[file...]', 'Test file(s) to run (default: all)') + .option( + '-m, --test-name-pattern ', + 'Run tests matching the given pattern', + (v, acc: string[]) => [...acc, v], + [] as string[] + ) + .option( + '--test-reporter ', + 'Test reporter to use (repeatable)', + (v, acc: string[]) => [...acc, v], + [] as string[] + ) + .option( + '--test-reporter-destination ', + 'Test reporter destination: stdout, stderr, or a file path (repeatable)', + (v, acc: string[]) => [...acc, v], + [] as string[] + ) + .option( + '--coverage, --experimental-test-coverage', + 'Enable code coverage collection' + ) + // ignore additional options passed by vscode test runner + .addOption(new Option('--test').hideHelp()) + .parse(); + +const positionals: string[] = program.args; +const opts = program.opts<{ + testNamePattern: string[]; + testReporter: string[]; + testReporterDestination: string[]; + experimentalTestCoverage: boolean; +}>(); + +let files: string[]; + +if (positionals.length > 0) { + files = positionals.map((f) => resolve(f)); +} else { + files = []; + for await (const entry of glob(join(BASE_DIR, 'server/**/*.test.ts'))) { + files.push(resolve(entry)); + } + files.sort(); +} + +// @ts-ignore +process.env.NODE_ENV = 'test'; +// configure ts +process.env.TS_NODE_PROJECT = resolveImport('../tsconfig.json'); +process.env.TS_NODE_FILES = 'true'; + +const stream = run({ + files, + execArgv: [ + '--experimental-test-module-mocks', + '-r', + 'ts-node/register', + '-r', + 'tsconfig-paths/register', + '-r', + resolveImport('./setup.ts'), + ], + coverage: opts.experimentalTestCoverage, + coverageExcludeGlobs: [ + join(BASE_DIR, 'server/test/**'), + join(BASE_DIR, 'server/migration/**'), + ], + testNamePatterns: opts.testNamePattern, +}); + +// In CI, write a JUnit report to a file for use by GitHub +if (process.env.CI) { + const reportStream = createWriteStream(join(BASE_DIR, 'report.xml')); + stream.compose(reporters.junit).pipe(reportStream); +} + +if (opts.testReporter.length > 0) { + for (let i = 0; i < opts.testReporter.length; i++) { + const reporterName = opts.testReporter[i]; + // check built-in reporters, otherwise import + const reporter = + reporterName in reporters + ? reporters[reporterName as keyof typeof reporters] + : await import(reporterName).then((m) => m.default); + + if (reporter == null) { + console.error('Invalid test reporter: ', reporterName); + process.exit(1); + } + + const destArg = opts.testReporterDestination[i]; + const dest = + destArg === 'stdout' || destArg == null + ? process.stdout + : destArg === 'stderr' + ? process.stderr + : createWriteStream(destArg); + + stream.compose(reporter).pipe(dest); + } +} else { + stream.compose(reporters.spec).pipe(process.stdout); +} diff --git a/server/test/setup.ts b/server/test/setup.ts new file mode 100644 index 000000000..b9db8a935 --- /dev/null +++ b/server/test/setup.ts @@ -0,0 +1,10 @@ +import logger from '@server/logger'; +import { after, before } from 'node:test'; + +before(() => { + if (process.env.VERBOSE != 'true') logger.silent = true; +}); + +after(() => { + if (process.env.VERBOSE != 'true') logger.silent = false; +}); diff --git a/server/types/custom.d.ts b/server/types/custom.d.ts index f2f47c60f..279c4d6a8 100644 --- a/server/types/custom.d.ts +++ b/server/types/custom.d.ts @@ -1,4 +1,4 @@ declare module '@dr.pogodin/csurf' { - import csrf = require('csurf'); + import csrf from 'csurf'; export = csrf; } diff --git a/server/types/languages.d.ts b/server/types/languages.d.ts index 6692ee3cd..570a7c4be 100644 --- a/server/types/languages.d.ts +++ b/server/types/languages.d.ts @@ -9,6 +9,7 @@ export type AvailableLocale = | 'el' | 'es' | 'es-MX' + | 'et' | 'fi' | 'fr' | 'hr' @@ -18,6 +19,7 @@ export type AvailableLocale = | 'it' | 'ja' | 'ko' + | 'lb' | 'lt' | 'nb-NO' | 'nl' @@ -32,4 +34,5 @@ export type AvailableLocale = | 'tr' | 'uk' | 'zh-CN' - | 'zh-TW'; + | 'zh-TW' + | 'vi'; diff --git a/server/utils/appDataVolume.ts b/server/utils/appDataVolume.ts index 837f7f669..6779d30cb 100644 --- a/server/utils/appDataVolume.ts +++ b/server/utils/appDataVolume.ts @@ -19,7 +19,7 @@ export const appDataPermissions = (): boolean => { try { accessSync(CONFIG_PATH); return true; - } catch (err) { + } catch { return false; } }; diff --git a/server/utils/appVersion.ts b/server/utils/appVersion.ts index d01a08a97..d7493d22d 100644 --- a/server/utils/appVersion.ts +++ b/server/utils/appVersion.ts @@ -6,7 +6,7 @@ const COMMIT_TAG_PATH = path.join(__dirname, '../../committag.json'); let commitTag = 'local'; if (existsSync(COMMIT_TAG_PATH)) { - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports commitTag = require(COMMIT_TAG_PATH).commitTag; logger.info(`Commit Tag: ${commitTag}`); } @@ -16,7 +16,7 @@ export const getCommitTag = (): string => { }; export const getAppVersion = (): string => { - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports const { version } = require('../../package.json'); let finalVersion = version; diff --git a/server/utils/jellyfin.ts b/server/utils/jellyfin.ts new file mode 100644 index 000000000..68d3c3c96 --- /dev/null +++ b/server/utils/jellyfin.ts @@ -0,0 +1,15 @@ +export function normalizeJellyfinGuid( + value: string | null | undefined +): string | null { + if (!value) { + return null; + } + + const normalized = value.replace(/-/g, '').toLowerCase(); + + if (!/^[0-9a-f]{32}$/.test(normalized)) { + return null; + } + + return normalized; +} diff --git a/server/utils/seedTestDb.ts b/server/utils/seedTestDb.ts new file mode 100644 index 000000000..266169d45 --- /dev/null +++ b/server/utils/seedTestDb.ts @@ -0,0 +1,96 @@ +import { UserType } from '@server/constants/user'; +import dataSource, { getRepository } from '@server/datasource'; +import { User } from '@server/entity/User'; +import gravatarUrl from 'gravatar-url'; + +export interface SeedDbOptions { + /** If true, preserves existing data instead of dropping the database */ + preserveDb?: boolean; + /** If true, runs migrations instead of synchronizing schema */ + withMigrations?: boolean; +} + +// Precomputed bcrypt hash of 'test1234'. We precompute this to avoid +// having to hash the password every time we seed the database. +const TEST_USER_PASSWORD_HASH = + '$2b$12$Z5V2P5HZgmx4/AnWFMZN1.aD5AM1NucNi.mhNTSQ9oVtmdzu7Le/a'; + +/** + * Seeds test users into the database. + * Assumes the database schema is already set up. + */ +async function seedTestUsers(): Promise { + const userRepository = getRepository(User); + + const admin = await userRepository.findOne({ + select: { id: true, plexId: true }, + where: { id: 1 }, + }); + + // Create the admin user + const user = + (await userRepository.findOne({ + where: { email: 'admin@seerr.dev' }, + })) ?? new User(); + user.plexId = admin?.plexId ?? 1; + user.plexToken = '1234'; + user.plexUsername = 'admin'; + user.username = 'admin'; + user.email = 'admin@seerr.dev'; + user.userType = UserType.PLEX; + user.password = TEST_USER_PASSWORD_HASH; + user.permissions = 2; + user.avatar = gravatarUrl('admin@seerr.dev', { default: 'mm', size: 200 }); + await userRepository.save(user); + + // Create the other user + const otherUser = + (await userRepository.findOne({ + where: { email: 'friend@seerr.dev' }, + })) ?? new User(); + otherUser.plexId = admin?.plexId ?? 1; + otherUser.plexToken = '1234'; + otherUser.plexUsername = 'friend'; + otherUser.username = 'friend'; + otherUser.email = 'friend@seerr.dev'; + otherUser.userType = UserType.PLEX; + otherUser.password = TEST_USER_PASSWORD_HASH; + otherUser.permissions = 32; + otherUser.avatar = gravatarUrl('friend@seerr.dev', { + default: 'mm', + size: 200, + }); + await userRepository.save(otherUser); +} + +/** + * Initializes the database connection and seeds test users. + * Used by both Cypress tests and Vitest unit tests. + */ +export async function seedTestDb(options: SeedDbOptions = {}): Promise { + const dbConnection = dataSource.isInitialized + ? dataSource + : await dataSource.initialize(); + + if (!options.preserveDb) { + await dbConnection.dropDatabase(); + } + + if (options.withMigrations) { + await dbConnection.runMigrations(); + } else { + await dbConnection.synchronize(); + } + + await seedTestUsers(); +} + +/** + * Resets the database to a clean state with seeded test users. + * Used between tests to ensure isolation. + * Assumes DB has been initialized. + */ +export async function resetTestDb(): Promise { + await dataSource.synchronize(true); + await seedTestUsers(); +} diff --git a/src/components/Blocklist/index.tsx b/src/components/Blocklist/index.tsx index daacf3397..addabecdb 100644 --- a/src/components/Blocklist/index.tsx +++ b/src/components/Blocklist/index.tsx @@ -10,7 +10,7 @@ import useDebouncedState from '@app/hooks/useDebouncedState'; import { useUpdateQueryParams } from '@app/hooks/useUpdateQueryParams'; import { Permission, useUser } from '@app/hooks/useUser'; import globalMessages from '@app/i18n/globalMessages'; -import Error from '@app/pages/_error'; +import ErrorPage from '@app/pages/_error'; import defineMessages from '@app/utils/defineMessages'; import { ChevronLeftIcon, @@ -90,7 +90,7 @@ const Blocklist = () => { // check if there's no data and no errors in the table // so as to show a spinner inside the table and not refresh the whole component if (!data && error) { - return ; + return ; } const searchItem = (e: ChangeEvent) => { @@ -178,7 +178,10 @@ const Blocklist = () => { ) : ( data.results.map((item: BlocklistItem) => { return ( -
+
); @@ -297,7 +300,9 @@ const BlocklistedItem = ({ item, revalidateList }: BlocklistedItemProps) => { setIsUpdating(true); try { - await axios.delete(`/api/v1/blocklist/${tmdbId}`); + await axios.delete( + `/api/v1/blocklist/${tmdbId}?mediaType=${item.mediaType}` + ); addToast( diff --git a/src/components/BlocklistBlock/index.tsx b/src/components/BlocklistBlock/index.tsx index 2eb48e235..c53a1c8ad 100644 --- a/src/components/BlocklistBlock/index.tsx +++ b/src/components/BlocklistBlock/index.tsx @@ -7,6 +7,7 @@ import { useUser } from '@app/hooks/useUser'; import globalMessages from '@app/i18n/globalMessages'; import defineMessages from '@app/utils/defineMessages'; import { CalendarIcon, TrashIcon, UserIcon } from '@heroicons/react/24/solid'; +import type { MediaType } from '@server/constants/media'; import type { Blocklist } from '@server/entity/Blocklist'; import axios from 'axios'; import Link from 'next/link'; @@ -22,12 +23,14 @@ const messages = defineMessages('component.BlocklistBlock', { interface BlocklistBlockProps { tmdbId: number; + mediaType: MediaType; onUpdate?: () => void; onDelete?: () => void; } const BlocklistBlock = ({ tmdbId, + mediaType, onUpdate, onDelete, }: BlocklistBlockProps) => { @@ -35,13 +38,15 @@ const BlocklistBlock = ({ const intl = useIntl(); const [isUpdating, setIsUpdating] = useState(false); const { addToast } = useToasts(); - const { data } = useSWR(`/api/v1/blocklist/${tmdbId}`); + const { data } = useSWR( + `/api/v1/blocklist/${tmdbId}?mediaType=${mediaType}` + ); const removeFromBlocklist = async (tmdbId: number, title?: string) => { setIsUpdating(true); try { - await axios.delete('/api/v1/blocklist/' + tmdbId); + await axios.delete(`/api/v1/blocklist/${tmdbId}?mediaType=${mediaType}`); addToast( @@ -59,8 +64,8 @@ const BlocklistBlock = ({ }); } - onUpdate && onUpdate(); - onDelete && onDelete(); + onUpdate?.(); + onDelete?.(); setIsUpdating(false); }; diff --git a/src/components/BlocklistModal/index.tsx b/src/components/BlocklistModal/index.tsx index 01fb1d1bf..0c386c8f2 100644 --- a/src/components/BlocklistModal/index.tsx +++ b/src/components/BlocklistModal/index.tsx @@ -2,6 +2,8 @@ import Modal from '@app/components/Common/Modal'; import globalMessages from '@app/i18n/globalMessages'; import defineMessages from '@app/utils/defineMessages'; import { Transition } from '@headlessui/react'; + +import type { Collection } from '@server/models/Collection'; import type { MovieDetails } from '@server/models/Movie'; import type { TvDetails } from '@server/models/Tv'; import axios from 'axios'; @@ -21,8 +23,18 @@ const messages = defineMessages('component.BlocklistModal', { blocklisting: 'Blocklisting', }); +const isCollection = ( + data: MovieDetails | TvDetails | Collection | null +): data is Collection => { + return ( + data !== null && + data !== undefined && + (data as Collection).parts !== undefined + ); +}; + const isMovie = ( - movie: MovieDetails | TvDetails | null + movie: MovieDetails | TvDetails | Collection | null ): movie is MovieDetails => { if (!movie) return false; return (movie as MovieDetails).title !== undefined; @@ -37,7 +49,9 @@ const BlocklistModal = ({ isUpdating, }: BlocklistModalProps) => { const intl = useIntl(); - const [data, setData] = useState(null); + const [data, setData] = useState< + TvDetails | MovieDetails | Collection | null + >(null); const [error, setError] = useState(null); useEffect(() => { @@ -68,11 +82,19 @@ const BlocklistModal = ({ loading={!data && !error} backgroundClickable title={`${intl.formatMessage(globalMessages.blocklist)} ${ - isMovie(data) - ? intl.formatMessage(globalMessages.movie) - : intl.formatMessage(globalMessages.tvshow) + type === 'collection' + ? intl.formatMessage(globalMessages.collection) + : isMovie(data) + ? intl.formatMessage(globalMessages.movie) + : intl.formatMessage(globalMessages.tvshow) + }`} + subTitle={`${ + isCollection(data) + ? data.name + : isMovie(data) + ? data.title + : data?.name }`} - subTitle={`${isMovie(data) ? data.title : data?.name}`} onCancel={onCancel} onOk={onComplete} okText={ diff --git a/src/components/BlocklistedTagsSelector/index.tsx b/src/components/BlocklistedTagsSelector/index.tsx index d0ad658e2..4bee8ac1b 100644 --- a/src/components/BlocklistedTagsSelector/index.tsx +++ b/src/components/BlocklistedTagsSelector/index.tsx @@ -276,7 +276,7 @@ const BlocklistedTagImportForm = forwardRef< label: data.name, value: data.id, }; - } catch (err) { + } catch { throw intl.formatMessage(messages.invalidKeyword, { keywordId }); } }) diff --git a/src/components/CollectionDetails/index.tsx b/src/components/CollectionDetails/index.tsx index c4f407147..191c39b96 100644 --- a/src/components/CollectionDetails/index.tsx +++ b/src/components/CollectionDetails/index.tsx @@ -1,7 +1,10 @@ +import BlocklistModal from '@app/components/BlocklistModal'; +import Button from '@app/components/Common/Button'; import ButtonWithDropdown from '@app/components/Common/ButtonWithDropdown'; import CachedImage from '@app/components/Common/CachedImage'; import LoadingSpinner from '@app/components/Common/LoadingSpinner'; import PageTitle from '@app/components/Common/PageTitle'; +import Tooltip from '@app/components/Common/Tooltip'; import RequestModal from '@app/components/RequestModal'; import Slider from '@app/components/Slider'; import StatusBadge from '@app/components/StatusBadge'; @@ -9,22 +12,30 @@ import TitleCard from '@app/components/TitleCard'; import useSettings from '@app/hooks/useSettings'; import { Permission, useUser } from '@app/hooks/useUser'; import globalMessages from '@app/i18n/globalMessages'; -import Error from '@app/pages/_error'; +import ErrorPage from '@app/pages/_error'; import defineMessages from '@app/utils/defineMessages'; import { refreshIntervalHelper } from '@app/utils/refreshIntervalHelper'; -import { ArrowDownTrayIcon } from '@heroicons/react/24/outline'; +import { + ArrowDownTrayIcon, + EyeIcon, + EyeSlashIcon, +} from '@heroicons/react/24/outline'; import { MediaStatus } from '@server/constants/media'; import type { Collection } from '@server/models/Collection'; +import axios from 'axios'; import { uniq } from 'lodash'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { useMemo, useState } from 'react'; import { useIntl } from 'react-intl'; +import { useToasts } from 'react-toast-notifications'; import useSWR from 'swr'; const messages = defineMessages('components.CollectionDetails', { overview: 'Overview', numberofmovies: '{count} Movies', + removefromblocklistpartialcount: + '{removeLabel} ({count, plural, one {# movie} other {# movies}})', requestcollection: 'Request Collection', requestcollection4k: 'Request Collection in 4K', }); @@ -40,6 +51,9 @@ const CollectionDetails = ({ collection }: CollectionDetailsProps) => { const { hasPermission } = useUser(); const [requestModal, setRequestModal] = useState(false); const [is4k, setIs4k] = useState(false); + const [showBlocklistModal, setShowBlocklistModal] = useState(false); + const [isBlocklistUpdating, setIsBlocklistUpdating] = useState(false); + const { addToast } = useToasts(); const returnCollectionDownloadItems = (data: Collection | undefined) => { const [downloadStatus, downloadStatus4k] = [ @@ -70,6 +84,63 @@ const CollectionDetails = ({ collection }: CollectionDetailsProps) => { const { data: genres } = useSWR<{ id: number; name: string }[]>(`/api/v1/genres/movie`); + const onClickHideItemBtn = async (): Promise => { + setIsBlocklistUpdating(true); + + try { + await axios.post(`/api/v1/blocklist/collection/${data?.id}`); + + addToast( + + {intl.formatMessage(globalMessages.blocklistSuccess, { + title: data?.name, + strong: (msg: React.ReactNode) => {msg}, + })} + , + { appearance: 'success', autoDismiss: true } + ); + + revalidate(); + } catch { + addToast(intl.formatMessage(globalMessages.blocklistError), { + appearance: 'error', + autoDismiss: true, + }); + } + + setIsBlocklistUpdating(false); + setShowBlocklistModal(false); + }; + + const onClickUnblocklistBtn = async (): Promise => { + if (!data) return; + + setIsBlocklistUpdating(true); + + try { + await axios.delete(`/api/v1/blocklist/collection/${data.id}`); + + addToast( + + {intl.formatMessage(globalMessages.removeFromBlocklistSuccess, { + title: data.name, + strong: (msg: React.ReactNode) => {msg}, + })} + , + { appearance: 'success', autoDismiss: true } + ); + + revalidate(); + } catch { + addToast(intl.formatMessage(globalMessages.blocklistError), { + appearance: 'error', + autoDismiss: true, + }); + } + + setIsBlocklistUpdating(false); + }; + const [downloadStatus, downloadStatus4k] = useMemo(() => { const downloadItems = returnCollectionDownloadItems(data); return [downloadItems.downloadStatus, downloadItems.downloadStatus4k]; @@ -91,13 +162,23 @@ const CollectionDetails = ({ collection }: CollectionDetailsProps) => { } if (!data) { - return ; + return ; } let collectionStatus = MediaStatus.UNKNOWN; let collectionStatus4k = MediaStatus.UNKNOWN; - if ( + const blocklistedParts = data.parts.filter( + (part) => + part.mediaInfo && part.mediaInfo.status === MediaStatus.BLOCKLISTED + ); + const isCollectionBlocklisted = blocklistedParts.length > 0; + const isCollectionPartiallyBlocklisted = + blocklistedParts.length > 0 && blocklistedParts.length < data.parts.length; + + if (isCollectionBlocklisted) { + collectionStatus = MediaStatus.BLOCKLISTED; + } else if ( data.parts.every( (part) => part.mediaInfo && part.mediaInfo.status === MediaStatus.AVAILABLE @@ -152,6 +233,11 @@ const CollectionDetails = ({ collection }: CollectionDetailsProps) => { part.mediaInfo.status4k === MediaStatus.UNKNOWN ).length > 0; + const blocklistVisibility = hasPermission( + [Permission.MANAGE_BLOCKLIST, Permission.VIEW_BLOCKLIST], + { type: 'or' } + ); + const collectionAttributes: React.ReactNode[] = []; collectionAttributes.push( @@ -188,11 +274,6 @@ const CollectionDetails = ({ collection }: CollectionDetailsProps) => { ); } - const blocklistVisibility = hasPermission( - [Permission.MANAGE_BLOCKLIST, Permission.VIEW_BLOCKLIST], - { type: 'or' } - ); - return (
{ }} onCancel={() => setRequestModal(false)} /> + setShowBlocklistModal(false)} + onComplete={onClickHideItemBtn} + isUpdating={isBlocklistUpdating} + /> +
{ status={collectionStatus} downloadItem={downloadStatus} title={titles} + statusLabelOverride={ + isCollectionPartiallyBlocklisted + ? intl.formatMessage(globalMessages.partiallyblocklisted) + : undefined + } inProgress={data.parts.some( (part) => (part.mediaInfo?.downloadStatus ?? []).length > 0 )} @@ -292,6 +387,48 @@ const CollectionDetails = ({ collection }: CollectionDetailsProps) => {
+ {hasPermission([Permission.MANAGE_BLOCKLIST], { type: 'or' }) && + (isCollectionBlocklisted ? ( + + + + ) : ( + + + + ))} {(hasRequestable || hasRequestable4k) && ( { isEmpty={data.parts.length === 0} items={data.parts .filter((title) => { - if (!blocklistVisibility) + if (!blocklistVisibility) { return title.mediaInfo?.status !== MediaStatus.BLOCKLISTED; + } return title; }) .map((title) => ( @@ -365,6 +503,7 @@ const CollectionDetails = ({ collection }: CollectionDetailsProps) => { userScore={title.voteAverage} year={title.releaseDate} mediaType={title.mediaType} + mutateParent={revalidate} /> ))} /> diff --git a/src/components/Common/SensitiveInput/index.tsx b/src/components/Common/SensitiveInput/index.tsx index 9b19e4d08..65f48d802 100644 --- a/src/components/Common/SensitiveInput/index.tsx +++ b/src/components/Common/SensitiveInput/index.tsx @@ -20,7 +20,7 @@ const SensitiveInput = ({ as = 'input', ...props }: SensitiveInputProps) => { ? props : { ...props, - as: props.type === 'textarea' && !isHidden ? 'textarea' : undefined, + as: props.type === 'textarea' ? 'textarea' : undefined, }; return ( <> @@ -32,11 +32,18 @@ const SensitiveInput = ({ as = 'input', ...props }: SensitiveInputProps) => { {...componentProps} className={`rounded-l-only ${componentProps.className ?? ''}`} type={ - isHidden - ? 'password' - : props.type !== 'password' - ? (props.type ?? 'text') - : 'text' + props.type === 'textarea' + ? undefined + : isHidden + ? 'password' + : props.type !== 'password' + ? (props.type ?? 'text') + : 'text' + } + style={ + props.type === 'textarea' && isHidden + ? { WebkitTextSecurity: 'disc', ...props.style } + : props.style } /> + + ); }; export default UserWarnings; diff --git a/src/components/Layout/index.tsx b/src/components/Layout/index.tsx index 5b1f98e46..40c6df798 100644 --- a/src/components/Layout/index.tsx +++ b/src/components/Layout/index.tsx @@ -3,6 +3,7 @@ import PullToRefresh from '@app/components/Layout/PullToRefresh'; import SearchInput from '@app/components/Layout/SearchInput'; import Sidebar from '@app/components/Layout/Sidebar'; import UserDropdown from '@app/components/Layout/UserDropdown'; +import UserWarnings from '@app/components/Layout/UserWarnings'; import useLocale from '@app/hooks/useLocale'; import useSettings from '@app/hooks/useSettings'; import { useUser } from '@app/hooks/useUser'; @@ -124,7 +125,10 @@ const Layout = ({ children }: LayoutProps) => {
-
{children}
+
+ + {children} +
diff --git a/src/components/Login/AddEmailModal.tsx b/src/components/Login/AddEmailModal.tsx index 5b076bc3d..3799acc83 100644 --- a/src/components/Login/AddEmailModal.tsx +++ b/src/components/Login/AddEmailModal.tsx @@ -1,41 +1,40 @@ import Modal from '@app/components/Common/Modal'; -import useSettings from '@app/hooks/useSettings'; +import { useUser } from '@app/hooks/useUser'; import defineMessages from '@app/utils/defineMessages'; import { Transition } from '@headlessui/react'; +import { ApiErrorCode } from '@server/constants/error'; import axios from 'axios'; import { Field, Formik } from 'formik'; import { useIntl } from 'react-intl'; +import { useToasts } from 'react-toast-notifications'; +import { mutate } from 'swr'; import validator from 'validator'; import * as Yup from 'yup'; const messages = defineMessages('components.Login', { title: 'Add Email', description: - 'Since this is your first time logging into {applicationName}, you are required to add a valid email address.', + 'Add a valid email address to complete your profile. This will be used for notifications and local sign-in.', email: 'Email address', + emailAlreadyTaken: 'This email is already in use.', validationEmailRequired: 'You must provide an email', validationEmailFormat: 'Invalid email', saving: 'Adding…', save: 'Add', + saveFailed: 'Something went wrong while saving.', }); interface AddEmailModalProps { - username: string; - password: string; onClose: () => void; onSave: () => void; } -const AddEmailModal: React.FC = ({ - onClose, - username, - password, - onSave, -}) => { +const AddEmailModal: React.FC = ({ onClose, onSave }) => { const intl = useIntl(); - const settings = useSettings(); + const { addToast } = useToasts(); + const { user } = useUser(); - const EmailSettingsSchema = Yup.object().shape({ + const EmailSchema = Yup.object().shape({ email: Yup.string() .test( 'email', @@ -51,66 +50,81 @@ const AddEmailModal: React.FC = ({ show enter="transition ease-in-out duration-300 transform opacity-0" enterFrom="opacity-0" - enterTo="opacuty-100" + enterTo="opacity-100" leave="transition ease-in-out duration-300 transform opacity-100" leaveFrom="opacity-100" leaveTo="opacity-0" > { + if (!user?.id) { + addToast(intl.formatMessage(messages.saveFailed), { + autoDismiss: true, + appearance: 'error', + }); + return; + } + try { - await axios.post('/api/v1/auth/jellyfin', { - username: username, - password: password, + const { data: current } = await axios.get( + `/api/v1/user/${user.id}/settings/main` + ); + await axios.post(`/api/v1/user/${user.id}/settings/main`, { + ...current, email: values.email, }); - + await mutate(`/api/v1/user/${user.id}/settings/main`); onSave(); } catch (e) { - // set error here + addToast( + intl.formatMessage( + axios.isAxiosError(e) && + e.response?.data?.message === ApiErrorCode.InvalidEmail + ? messages.emailAlreadyTaken + : messages.saveFailed + ), + { + autoDismiss: true, + appearance: 'error', + } + ); } }} > - {({ errors, touched, handleSubmit, isSubmitting, isValid }) => { - return ( - handleSubmit()} - title={intl.formatMessage(messages.title)} - > - {intl.formatMessage(messages.description, { - applicationName: settings.currentSettings.applicationTitle, - })} - -
-
- -
- {errors.email && touched.email && ( -
{errors.email}
- )} + {({ errors, touched, handleSubmit, isSubmitting, isValid }) => ( + handleSubmit()} + title={intl.formatMessage(messages.title)} + > + {intl.formatMessage(messages.description)} + +
+
+
- - ); - }} + {errors.email && touched.email && ( +
{errors.email}
+ )} +
+
+ )} ); diff --git a/src/components/Login/JellyfinLogin.tsx b/src/components/Login/JellyfinLogin.tsx index 41fc9b6e4..53c9862a6 100644 --- a/src/components/Login/JellyfinLogin.tsx +++ b/src/components/Login/JellyfinLogin.tsx @@ -3,6 +3,7 @@ import SensitiveInput from '@app/components/Common/SensitiveInput'; import useSettings from '@app/hooks/useSettings'; import defineMessages from '@app/utils/defineMessages'; import { ArrowLeftOnRectangleIcon } from '@heroicons/react/24/outline'; +import { ExclamationTriangleIcon } from '@heroicons/react/24/solid'; import { ApiErrorCode } from '@server/constants/error'; import { MediaServerType, ServerType } from '@server/constants/server'; import axios from 'axios'; @@ -22,6 +23,7 @@ const messages = defineMessages('components.Login', { noadminerror: 'No admin user found on the server.', credentialerror: 'The username or password is incorrect.', invalidurlerror: 'Unable to connect to {mediaServerName} server.', + tipUsernameHasTrailingWhitespace: 'The username ends with whitespace', signingin: 'Signing In…', signin: 'Sign In', forgotpassword: 'Forgot Password?', @@ -78,7 +80,7 @@ const JellyfinLogin: React.FC = ({ email: values.username, }); } catch (e) { - let errorMessage = null; + let errorMessage = messages.loginerror; switch (e?.response?.data?.message) { case ApiErrorCode.InvalidUrl: errorMessage = messages.invalidurlerror; @@ -92,9 +94,6 @@ const JellyfinLogin: React.FC = ({ case ApiErrorCode.NoAdminUser: errorMessage = messages.noadminerror; break; - default: - errorMessage = messages.loginerror; - break; } toasts.addToast( intl.formatMessage(errorMessage, mediaServerFormatValues), @@ -108,7 +107,7 @@ const JellyfinLogin: React.FC = ({ } }} > - {({ errors, touched, isSubmitting, isValid }) => { + {({ errors, touched, values, isSubmitting, isValid }) => { return ( <>
@@ -130,6 +129,14 @@ const JellyfinLogin: React.FC = ({ data-form-type="username" />
+ {touched.username && values.username.match(/\s$/) && ( +
+ + {intl.formatMessage( + messages.tipUsernameHasTrailingWhitespace + )} +
+ )} {errors.username && touched.username && (
{errors.username}
)} diff --git a/src/components/Login/LocalLogin.tsx b/src/components/Login/LocalLogin.tsx index e24418cdd..7fdd529a9 100644 --- a/src/components/Login/LocalLogin.tsx +++ b/src/components/Login/LocalLogin.tsx @@ -3,6 +3,8 @@ import SensitiveInput from '@app/components/Common/SensitiveInput'; import useSettings from '@app/hooks/useSettings'; import defineMessages from '@app/utils/defineMessages'; import { ArrowLeftOnRectangleIcon } from '@heroicons/react/24/outline'; +import { ExclamationTriangleIcon } from '@heroicons/react/24/solid'; +import { MediaServerType } from '@server/constants/server'; import axios from 'axios'; import { Field, Form, Formik } from 'formik'; import Link from 'next/link'; @@ -17,7 +19,11 @@ const messages = defineMessages('components.Login', { password: 'Password', validationemailrequired: 'You must provide a valid email address', validationpasswordrequired: 'You must provide a password', + jellyfinLocalLoginHint: + "If you haven't set an email address in your profile, use your {mediaServerName} username instead.", loginerror: 'Something went wrong while trying to sign in.', + credentialerror: 'The email address or password is incorrect.', + tipEmailHasTrailingWhitespace: 'The email ends with whitespace', signingin: 'Signing In…', signin: 'Sign In', forgotpassword: 'Forgot Password?', @@ -60,13 +66,19 @@ const LocalLogin = ({ revalidate }: LocalLoginProps) => { password: values.password, }); } catch (e) { - setLoginError(intl.formatMessage(messages.loginerror)); + setLoginError( + intl.formatMessage( + axios.isAxiosError(e) && e.response?.status === 403 + ? messages.credentialerror + : messages.loginerror + ) + ); } finally { revalidate(); } }} > - {({ errors, touched, isSubmitting, isValid }) => { + {({ errors, touched, values, isSubmitting, isValid }) => { return ( <> @@ -82,9 +94,7 @@ const LocalLogin = ({ revalidate }: LocalLoginProps) => { { className="!bg-gray-700/80 placeholder:text-gray-400" />
+ {touched.email && values.email.match(/\s$/) && ( +
+ + {intl.formatMessage( + messages.tipEmailHasTrailingWhitespace + )} +
+ )} {errors.email && touched.email && typeof errors.email === 'string' && (
{errors.email}
)} + {(settings.currentSettings.mediaServerType === + MediaServerType.JELLYFIN || + settings.currentSettings.mediaServerType === + MediaServerType.EMBY) && ( +
+ {intl.formatMessage(messages.jellyfinLocalLoginHint, { + mediaServerName: + settings.currentSettings.mediaServerType === + MediaServerType.JELLYFIN + ? 'Jellyfin' + : 'Emby', + })} +
+ )}
diff --git a/src/components/Login/index.tsx b/src/components/Login/index.tsx index 604297023..83e130d5e 100644 --- a/src/components/Login/index.tsx +++ b/src/components/Login/index.tsx @@ -201,24 +201,17 @@ const Login = () => { { - loginRef.current?.addEventListener( - 'transitionend', - done, - false - ); - }} + timeout={{ enter: 300, exit: 150 }} onEntered={() => { document .querySelector('#email, #username') ?.focus(); }} classNames={{ - appear: 'opacity-0', - appearActive: 'transition-opacity duration-500 opacity-100', enter: 'opacity-0', - enterActive: 'transition-opacity duration-500 opacity-100', - exitActive: 'transition-opacity duration-0 opacity-0', + enterActive: 'transition-opacity duration-300 opacity-100', + exit: 'opacity-100', + exitActive: 'transition-opacity duration-150 opacity-0', }} >
diff --git a/src/components/ManageSlideOver/index.tsx b/src/components/ManageSlideOver/index.tsx index df94f3686..86c7808f6 100644 --- a/src/components/ManageSlideOver/index.tsx +++ b/src/components/ManageSlideOver/index.tsx @@ -322,6 +322,7 @@ const ManageSlideOver = ({
revalidate()} onDelete={() => onClose()} /> diff --git a/src/components/MovieDetails/MovieCast/index.tsx b/src/components/MovieDetails/MovieCast/index.tsx index 37f0b74d9..ad73c9327 100644 --- a/src/components/MovieDetails/MovieCast/index.tsx +++ b/src/components/MovieDetails/MovieCast/index.tsx @@ -2,7 +2,7 @@ import Header from '@app/components/Common/Header'; import LoadingSpinner from '@app/components/Common/LoadingSpinner'; import PageTitle from '@app/components/Common/PageTitle'; import PersonCard from '@app/components/PersonCard'; -import Error from '@app/pages/_error'; +import ErrorPage from '@app/pages/_error'; import defineMessages from '@app/utils/defineMessages'; import type { MovieDetails } from '@server/models/Movie'; import Link from 'next/link'; @@ -26,7 +26,7 @@ const MovieCast = () => { } if (!data) { - return ; + return ; } return ( diff --git a/src/components/MovieDetails/MovieCrew/index.tsx b/src/components/MovieDetails/MovieCrew/index.tsx index 945487672..cf9bc7f66 100644 --- a/src/components/MovieDetails/MovieCrew/index.tsx +++ b/src/components/MovieDetails/MovieCrew/index.tsx @@ -2,7 +2,7 @@ import Header from '@app/components/Common/Header'; import LoadingSpinner from '@app/components/Common/LoadingSpinner'; import PageTitle from '@app/components/Common/PageTitle'; import PersonCard from '@app/components/PersonCard'; -import Error from '@app/pages/_error'; +import ErrorPage from '@app/pages/_error'; import defineMessages from '@app/utils/defineMessages'; import type { MovieDetails } from '@server/models/Movie'; import Link from 'next/link'; @@ -26,7 +26,7 @@ const MovieCrew = () => { } if (!data) { - return ; + return ; } return ( diff --git a/src/components/MovieDetails/MovieRecommendations.tsx b/src/components/MovieDetails/MovieRecommendations.tsx index 21cd7b308..ba8f7dd07 100644 --- a/src/components/MovieDetails/MovieRecommendations.tsx +++ b/src/components/MovieDetails/MovieRecommendations.tsx @@ -2,7 +2,7 @@ import Header from '@app/components/Common/Header'; import ListView from '@app/components/Common/ListView'; import PageTitle from '@app/components/Common/PageTitle'; import useDiscover from '@app/hooks/useDiscover'; -import Error from '@app/pages/_error'; +import ErrorPage from '@app/pages/_error'; import defineMessages from '@app/utils/defineMessages'; import type { MovieDetails } from '@server/models/Movie'; import type { MovieResult } from '@server/models/Search'; @@ -34,7 +34,7 @@ const MovieRecommendations = () => { ); if (error) { - return ; + return ; } return ( diff --git a/src/components/MovieDetails/MovieSimilar.tsx b/src/components/MovieDetails/MovieSimilar.tsx index e93c6b1c2..e82b4fe8d 100644 --- a/src/components/MovieDetails/MovieSimilar.tsx +++ b/src/components/MovieDetails/MovieSimilar.tsx @@ -2,7 +2,7 @@ import Header from '@app/components/Common/Header'; import ListView from '@app/components/Common/ListView'; import PageTitle from '@app/components/Common/PageTitle'; import useDiscover from '@app/hooks/useDiscover'; -import Error from '@app/pages/_error'; +import ErrorPage from '@app/pages/_error'; import defineMessages from '@app/utils/defineMessages'; import type { MovieDetails } from '@server/models/Movie'; import type { MovieResult } from '@server/models/Search'; @@ -32,7 +32,7 @@ const MovieSimilar = () => { } = useDiscover(`/api/v1/movie/${router.query.movieId}/similar`); if (error) { - return ; + return ; } return ( diff --git a/src/components/MovieDetails/index.tsx b/src/components/MovieDetails/index.tsx index 9baae60ac..33a132e3f 100644 --- a/src/components/MovieDetails/index.tsx +++ b/src/components/MovieDetails/index.tsx @@ -344,7 +344,7 @@ const MovieDetails = ({ movie }: MovieDetailsProps) => { { appearance: 'success', autoDismiss: true } ); } - } catch (e) { + } catch { addToast(intl.formatMessage(messages.watchlistError), { appearance: 'error', autoDismiss: true, @@ -358,7 +358,9 @@ const MovieDetails = ({ movie }: MovieDetailsProps) => { const onClickDeleteWatchlistBtn = async (): Promise => { setIsUpdating(true); try { - await axios.delete(`/api/v1/watchlist/${movie?.id}`); + await axios.delete( + `/api/v1/watchlist/${movie?.id}?mediaType=${MediaType.MOVIE}` + ); addToast( @@ -369,7 +371,7 @@ const MovieDetails = ({ movie }: MovieDetailsProps) => { , { appearance: 'info', autoDismiss: true } ); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.watchlistError), { appearance: 'error', autoDismiss: true, diff --git a/src/components/NotificationTypeSelector/index.tsx b/src/components/NotificationTypeSelector/index.tsx index e24eb9b13..57aa21e88 100644 --- a/src/components/NotificationTypeSelector/index.tsx +++ b/src/components/NotificationTypeSelector/index.tsx @@ -70,7 +70,7 @@ export const hasNotificationType = ( types: Notification | Notification[], value: number ): boolean => { - let total = 0; + let total: number; // If we are not checking any notifications, bail out and return true if (types === 0) { diff --git a/src/components/PersonDetails/index.tsx b/src/components/PersonDetails/index.tsx index 1b22252f0..c8538793c 100644 --- a/src/components/PersonDetails/index.tsx +++ b/src/components/PersonDetails/index.tsx @@ -3,9 +3,10 @@ import CachedImage from '@app/components/Common/CachedImage'; import ImageFader from '@app/components/Common/ImageFader'; import LoadingSpinner from '@app/components/Common/LoadingSpinner'; import PageTitle from '@app/components/Common/PageTitle'; +import ExternalLinkBlock from '@app/components/ExternalLinkBlock'; import TitleCard from '@app/components/TitleCard'; import globalMessages from '@app/i18n/globalMessages'; -import Error from '@app/pages/_error'; +import ErrorPage from '@app/pages/_error'; import defineMessages from '@app/utils/defineMessages'; import { CircleStackIcon } from '@heroicons/react/24/solid'; import type { PersonCombinedCreditsResponse } from '@server/interfaces/api/personInterfaces'; @@ -91,7 +92,7 @@ const PersonDetails = () => { } if (!data) { - return ; + return ; } const personAttributes: string[] = []; @@ -277,6 +278,15 @@ const PersonDetails = () => { {mediaTypePicker}
+
+
+ +
+
{personAttributes.join(' | ')}
{(data.alsoKnownAs ?? []).length > 0 && ( diff --git a/src/components/QuotaSelector/index.tsx b/src/components/QuotaSelector/index.tsx index 0f0454e24..f35a5d1e0 100644 --- a/src/components/QuotaSelector/index.tsx +++ b/src/components/QuotaSelector/index.tsx @@ -79,6 +79,9 @@ const QuotaSelector = ({ onChange={(e) => setQuotaDays(Number(e.target.value))} disabled={isDisabled} > + {[...Array(100)].map((_item, i) => (
+
+ +
+
+ {values.customHeaders.map( + (header: { key: string; value: string }, index: number) => ( +
+
+
+ +
+
+
+
+ +
+
+
+ +
+
+ ) + )} + +
+ {errors.customHeaders && + touched.customHeaders && + typeof errors.customHeaders === 'string' && ( +
{errors.customHeaders}
+ )} +
+
@@ -457,6 +471,9 @@ const RadarrModal = ({ onClose, radarr, onSave }: RadarrModalProps) => {
@@ -480,6 +497,9 @@ const RadarrModal = ({ onClose, radarr, onSave }: RadarrModalProps) => {
@@ -526,14 +546,21 @@ const RadarrModal = ({ onClose, radarr, onSave }: RadarrModalProps) => { )} {testResponse.profiles.length > 0 && - testResponse.profiles.map((profile) => ( - - ))} + testResponse.profiles + .toSorted((a, b) => + a.name.localeCompare(b.name, intl.locale, { + numeric: true, + sensitivity: 'base', + }) + ) + .map((profile) => ( + + ))}
{errors.activeProfileId && @@ -674,6 +701,9 @@ const RadarrModal = ({ onClose, radarr, onSave }: RadarrModalProps) => {
@@ -694,6 +724,9 @@ const RadarrModal = ({ onClose, radarr, onSave }: RadarrModalProps) => {
{
develop branch of Seerr, which is only recommended for those contributing to development or assisting with bleeding-edge testing.', }); @@ -49,7 +46,7 @@ const SettingsAbout = () => { } if (!data) { - return ; + return ; } return ( @@ -60,28 +57,6 @@ const SettingsAbout = () => { intl.formatMessage(globalMessages.settings), ]} /> -
-
-
- -
-
-

- {intl.formatMessage(messages.betawarning)} -

-

- - GitHub → - -

-
-
-
{data.version.startsWith('develop-') && ( diff --git a/src/components/Settings/SettingsJobsCache/index.tsx b/src/components/Settings/SettingsJobsCache/index.tsx index c18feb78b..53d27c4d1 100644 --- a/src/components/Settings/SettingsJobsCache/index.tsx +++ b/src/components/Settings/SettingsJobsCache/index.tsx @@ -308,7 +308,7 @@ const SettingsJobs = () => { dispatch({ type: 'close' }); revalidate(); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.jobScheduleEditFailed), { appearance: 'error', autoDismiss: true, diff --git a/src/components/Settings/SettingsLogs/index.tsx b/src/components/Settings/SettingsLogs/index.tsx index 24617b9b8..840cfece9 100644 --- a/src/components/Settings/SettingsLogs/index.tsx +++ b/src/components/Settings/SettingsLogs/index.tsx @@ -8,7 +8,7 @@ import Tooltip from '@app/components/Common/Tooltip'; import useDebouncedState from '@app/hooks/useDebouncedState'; import { useUpdateQueryParams } from '@app/hooks/useUpdateQueryParams'; import globalMessages from '@app/i18n/globalMessages'; -import Error from '@app/pages/_error'; +import ErrorPage from '@app/pages/_error'; import defineMessages from '@app/utils/defineMessages'; import { Transition } from '@headlessui/react'; import { @@ -128,7 +128,7 @@ const SettingsLogs = () => { // check if there's no data and no errors in the table // so as to show a spinner inside the table and not refresh the whole component if (!data && error) { - return ; + return ; } const hasNextPage = data?.pageInfo.pages ?? 0 > pageIndex + 1; diff --git a/src/components/Settings/SettingsMain/index.tsx b/src/components/Settings/SettingsMain/index.tsx index 4944c2349..c53bbe977 100644 --- a/src/components/Settings/SettingsMain/index.tsx +++ b/src/components/Settings/SettingsMain/index.tsx @@ -38,6 +38,12 @@ const messages = defineMessages('components.Settings.SettingsMain', { discoverRegionTip: 'Filter content by regional availability', originallanguage: 'Discover Language', originallanguageTip: 'Filter content by original language', + blocklistRegion: 'Blocklist Region', + blocklistRegionTip: + 'Region used for blocklist content scanning (independent of discover settings)', + blocklistLanguage: 'Blocklist Language', + blocklistLanguageTip: + 'Language used for blocklist content scanning (independent of discover settings)', blocklistedTags: 'Blocklist Content with Tags', blocklistedTagsTip: 'Automatically add content with tags to the blocklist using the "Process Blocklisted Tags" job', @@ -130,7 +136,7 @@ const SettingsMain = () => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.toastApiKeyFailure), { autoDismiss: true, appearance: 'error', @@ -169,6 +175,8 @@ const SettingsMain = () => { discoverRegion: data?.discoverRegion, originalLanguage: data?.originalLanguage, streamingRegion: data?.streamingRegion || 'US', + blocklistRegion: data?.blocklistRegion || '', + blocklistLanguage: data?.blocklistLanguage || '', blocklistedTags: data?.blocklistedTags, blocklistedTagsLimit: data?.blocklistedTagsLimit || 50, partialRequestsEnabled: data?.partialRequestsEnabled, @@ -189,6 +197,8 @@ const SettingsMain = () => { discoverRegion: values.discoverRegion, streamingRegion: values.streamingRegion, originalLanguage: values.originalLanguage, + blocklistRegion: values.blocklistRegion, + blocklistLanguage: values.blocklistLanguage, blocklistedTags: values.blocklistedTags, blocklistedTagsLimit: values.blocklistedTagsLimit, partialRequestsEnabled: values.partialRequestsEnabled, @@ -211,7 +221,7 @@ const SettingsMain = () => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.toastSettingsFailure), { autoDismiss: true, appearance: 'error', @@ -379,6 +389,7 @@ const SettingsMain = () => {
@@ -391,7 +402,7 @@ const SettingsMain = () => {
-
+
{
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
diff --git a/src/components/Settings/SonarrModal/index.tsx b/src/components/Settings/SonarrModal/index.tsx index bfa4cb305..c653bc21c 100644 --- a/src/components/Settings/SonarrModal/index.tsx +++ b/src/components/Settings/SonarrModal/index.tsx @@ -53,6 +53,8 @@ const messages = defineMessages('components.Settings.SonarrModal', { animerootfolder: 'Anime Root Folder', seasonfolders: 'Season Folders', server4k: '4K Server', + server4kHelp: + 'Only if you have a separate 4K instance. Leave unchecked for a single server.', selectQualityProfile: 'Select quality profile', selectRootFolder: 'Select root folder', selectLanguageProfile: 'Select language profile', @@ -78,6 +80,18 @@ const messages = defineMessages('components.Settings.SonarrModal', { animeTags: 'Anime Tags', notagoptions: 'No tags.', selecttags: 'Select tags', + monitorNewItems: 'Monitor New Seasons', + monitorNewItemsHelp: + 'Whether Sonarr should monitor (All) or not (None) new seasons when a series is added.', + apiKeyHelp: 'Find it in Sonarr: Settings > General > Security > API Key', + baseUrlHelp: + 'If you set a URL Base in Sonarr (Settings > General > Host), enter it here (e.g. /sonarr). Leave blank otherwise.', + externalUrlHelp: + 'For clickable links on media pages when the hostname is not reachable from outside your network.', + syncEnabledHelp: + 'Scan Sonarr for existing media and request status so users cannot request content already available.', + enableSearchHelp: + 'Automatically trigger a search in Sonarr when a request is approved.', }); interface SonarrModalProps { @@ -182,7 +196,7 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => { autoDismiss: true, }); } - } catch (e) { + } catch { setIsValidated(false); if (initialLoad.current) { addToast(intl.formatMessage(messages.toastSonarrTestFailure), { @@ -247,6 +261,7 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => { syncEnabled: sonarr?.syncEnabled ?? false, enableSearch: !sonarr?.preventSearch, tagRequests: sonarr?.tagRequests ?? false, + monitorNewItems: sonarr?.monitorNewItems ?? 'all', }} validationSchema={SonarrSettingsSchema} onSubmit={async (values) => { @@ -290,6 +305,7 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => { syncEnabled: values.syncEnabled, preventSearch: !values.enableSearch, tagRequests: values.tagRequests, + monitorNewItems: values.monitorNewItems, }; if (!sonarr) { await axios.post('/api/v1/settings/sonarr', submission); @@ -301,7 +317,7 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => { } onSave(); - } catch (e) { + } catch { // set error here } }} @@ -383,6 +399,9 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => {
@@ -490,6 +509,9 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => {
@@ -513,6 +535,9 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => {
@@ -580,14 +605,21 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => { )} {testResponse.profiles.length > 0 && - testResponse.profiles.map((profile) => ( - - ))} + testResponse.profiles + .toSorted((a, b) => + a.name.localeCompare(b.name, intl.locale, { + numeric: true, + sensitivity: 'base', + }) + ) + .map((profile) => ( + + ))}
{errors.activeProfileId && @@ -792,14 +824,21 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => { )} {testResponse.profiles.length > 0 && - testResponse.profiles.map((profile) => ( - - ))} + testResponse.profiles + .toSorted((a, b) => + a.name.localeCompare(b.name, intl.locale, { + numeric: true, + sensitivity: 'base', + }) + ) + .map((profile) => ( + + ))}
{errors.activeAnimeProfileId && @@ -972,9 +1011,36 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => { />
+
+ +
+
+ + + + +
+
+ {errors.monitorNewItems && touched.monitorNewItems && ( +
{errors.monitorNewItems}
+ )} +
@@ -995,6 +1061,9 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => {
{
Networking), enter it here (e.g. /jellyfin). Leave blank otherwise.', }); interface JellyfinSetupProps { @@ -128,7 +130,7 @@ function JellyfinSetup({ serverType: serverType, }); } catch (e) { - let errorMessage = null; + let errorMessage = messages.loginerror; switch (e?.response?.data?.message) { case ApiErrorCode.InvalidUrl: errorMessage = messages.invalidurlerror; @@ -142,9 +144,6 @@ function JellyfinSetup({ case ApiErrorCode.NoAdminUser: errorMessage = messages.noadminerror; break; - default: - errorMessage = messages.loginerror; - break; } toasts.addToast( @@ -231,8 +230,18 @@ function JellyfinSetup({ />
-