diff --git a/.github/workflows/build-sso-service-image.yml b/.github/workflows/build-sso-service-image.yml new file mode 100644 index 0000000000..5a05a29145 --- /dev/null +++ b/.github/workflows/build-sso-service-image.yml @@ -0,0 +1,89 @@ +name: Build fastgpt-sso-service images +on: + workflow_dispatch: + push: + tags: + - 'v*' + +permissions: + contents: read + packages: write + attestations: write + id-token: write + +jobs: + build-fastgpt-sso-service-images: + runs-on: buildjet-2vcpu-ubuntu-2204 + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 1 + - name: Update submodules + env: + PRO_SUBMODULE_TOKEN: ${{ secrets.PRO_SUBMODULE_TOKEN }} + run: | + if [ -f .gitmodules ]; then + if [ -n "${PRO_SUBMODULE_TOKEN}" ]; then + git config --global url."https://x-access-token:${PRO_SUBMODULE_TOKEN}@github.com/".insteadOf "https://github.com/" + fi + git submodule update --init --recursive + fi + - name: Install Dependencies + run: | + sudo apt update && sudo apt install -y nodejs npm + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + with: + driver-opts: network=host + - name: Cache Docker layers + uses: actions/cache@v4 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: labring + password: ${{ secrets.GITHUB_TOKEN }} + - name: Login to Ali Hub + uses: docker/login-action@v2 + with: + registry: registry.cn-hangzhou.aliyuncs.com + username: ${{ secrets.FASTGPT_ALI_IMAGE_USER }} + password: ${{ secrets.FASTGPT_ALI_IMAGE_PSW }} + - name: Set image tags + run: | + if [[ "${{ github.ref_name }}" == "main" ]]; then + echo "Git_Latest=ghcr.io/labring/fastgpt-sso-service:latest" >> $GITHUB_ENV + echo "Git_Tag=ghcr.io/labring/fastgpt-sso-service:latest" >> $GITHUB_ENV + echo "Ali_Latest=${{ secrets.FASTGPT_ALI_IMAGE_PREFIX }}/fastgpt-sso-service:latest" >> $GITHUB_ENV + echo "Ali_Tag=${{ secrets.FASTGPT_ALI_IMAGE_PREFIX }}/fastgpt-sso-service:latest" >> $GITHUB_ENV + else + echo "Git_Tag=ghcr.io/labring/fastgpt-sso-service:${{ github.ref_name }}" >> $GITHUB_ENV + echo "Git_Latest=ghcr.io/labring/fastgpt-sso-service:latest" >> $GITHUB_ENV + echo "Ali_Tag=${{ secrets.FASTGPT_ALI_IMAGE_PREFIX }}/fastgpt-sso-service:${{ github.ref_name }}" >> $GITHUB_ENV + echo "Ali_Latest=${{ secrets.FASTGPT_ALI_IMAGE_PREFIX }}/fastgpt-sso-service:latest" >> $GITHUB_ENV + fi + + - name: Build and publish image + run: | + docker buildx build \ + -f pro/sso/Dockerfile \ + --build-arg name=sso \ + --platform linux/amd64,linux/arm64 \ + --label "org.opencontainers.image.source=https://github.com/labring/FastGPT" \ + --label "org.opencontainers.image.description=fastgpt-sso-service image" \ + --push \ + --cache-from=type=local,src=/tmp/.buildx-cache \ + --cache-to=type=local,dest=/tmp/.buildx-cache \ + -t ${Git_Tag} \ + -t ${Git_Latest} \ + -t ${Ali_Tag} \ + -t ${Ali_Latest} \ + . diff --git a/.github/workflows/fastgpt-pro-test.yaml b/.github/workflows/fastgpt-pro-test.yaml new file mode 100644 index 0000000000..32b1b61765 --- /dev/null +++ b/.github/workflows/fastgpt-pro-test.yaml @@ -0,0 +1,54 @@ +name: 'FastGPT-Pro-Test' +on: + pull_request: + workflow_dispatch: + +concurrency: + group: 'fastgpt-pro-test-${{ github.event.pull_request.number || github.ref }}' + cancel-in-progress: true + +jobs: + test: + if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository || secrets.PRO_SUBMODULE_TOKEN != '' }} + runs-on: ubuntu-latest + + permissions: + contents: read + pull-requests: write + + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.ref || github.ref }} + repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }} + - name: Update submodules + env: + PRO_SUBMODULE_TOKEN: ${{ secrets.PRO_SUBMODULE_TOKEN }} + run: | + if [ -f .gitmodules ]; then + if [ -n "${PRO_SUBMODULE_TOKEN}" ]; then + git config --global url."https://x-access-token:${PRO_SUBMODULE_TOKEN}@github.com/".insteadOf "https://github.com/" + fi + git submodule update --init --recursive + fi + - name: Install system deps for node-canvas + run: | + sudo apt-get update + sudo apt-get install -y libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev + - uses: pnpm/action-setup@v4 + with: + version: 10.33.2 + - uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'pnpm' + - name: Install Deps + run: pnpm install --frozen-lockfile + - name: Test + run: pnpm test:admin + - name: Report Coverage + if: always() && hashFiles('pro/admin/coverage/coverage-summary.json') != '' + uses: davelosert/vitest-coverage-report-action@v2 + with: + json-final-path: pro/admin/coverage/coverage-final.json + json-summary-path: pro/admin/coverage/coverage-summary.json diff --git a/.github/workflows/preview-admin-build.yml b/.github/workflows/preview-admin-build.yml new file mode 100644 index 0000000000..6f133e7530 --- /dev/null +++ b/.github/workflows/preview-admin-build.yml @@ -0,0 +1,103 @@ +name: Preview Admin Image - Build & Push + +on: + pull_request_target: + types: [opened, synchronize, reopened] + workflow_dispatch: + +concurrency: + group: 'preview-admin-build-${{ github.head_ref }}' + cancel-in-progress: true + +permissions: + contents: read + packages: write + pull-requests: write + issues: write + +jobs: + build-and-push: + if: ${{ github.event.pull_request.head.repo.full_name == github.repository || secrets.PRO_SUBMODULE_TOKEN != '' }} + runs-on: ubuntu-24.04 + + steps: + - name: Checkout PR code + uses: actions/checkout@v4 + with: + ref: refs/pull/${{ github.event.pull_request.number }}/head + fetch-depth: 0 + + - name: Update submodules + env: + PRO_SUBMODULE_TOKEN: ${{ secrets.PRO_SUBMODULE_TOKEN }} + run: | + if [ -f .gitmodules ]; then + if [ -n "${PRO_SUBMODULE_TOKEN}" ]; then + git config --global url."https://x-access-token:${PRO_SUBMODULE_TOKEN}@github.com/".insteadOf "https://github.com/" + fi + git submodule update --init --recursive + fi + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Aliyun Container Registry + uses: docker/login-action@v3 + with: + registry: registry.cn-hangzhou.aliyuncs.com + username: ${{ secrets.FASTGPT_ALI_IMAGE_USER }} + password: ${{ secrets.FASTGPT_ALI_IMAGE_PSW }} + + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + file: pro/admin/Dockerfile + platforms: linux/amd64 + push: true + tags: ${{ secrets.FASTGPT_ALI_IMAGE_PREFIX }}/fastgpt-pro-pr:${{ github.event.pull_request.head.sha }} + labels: | + org.opencontainers.image.source=https://github.com/${{ github.repository_owner }}/FastGPT + org.opencontainers.image.description=fastgpt-pro admin image + + - name: Add PR comment on success + if: success() + uses: actions/github-script@v7 + with: + script: | + const prNumber = ${{ github.event.pull_request.number }}; + const marker = ''; + + const { data: comments } = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + }); + + const existingComment = comments.find(comment => + comment.body.includes(marker) + ); + + const commentBody = `${marker} + ✅ **Admin Preview Image Ready!** + + \`\`\` + ${{ secrets.FASTGPT_ALI_IMAGE_PREFIX }}/fastgpt-pro-pr:${{ github.event.pull_request.head.sha }} + \`\`\` + `; + + if (existingComment) { + await github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: existingComment.id, + body: commentBody + }); + } else { + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + body: commentBody + }); + } diff --git a/.github/workflows/test-fastgpt.yaml b/.github/workflows/test-fastgpt.yaml index b54241c9ca..8ed6c20f77 100644 --- a/.github/workflows/test-fastgpt.yaml +++ b/.github/workflows/test-fastgpt.yaml @@ -1,11 +1,11 @@ -name: 'FastGPT-Test' +name: "FastGPT-Test" on: pull_request: workflow_dispatch: -# Only one build per PR branch at a time + # Only one build per PR branch at a time concurrency: - group: 'test-fastgpt-${{ github.head_ref }}' + group: "test-fastgpt-${{ github.event.pull_request.number || github.ref }}" cancel-in-progress: true permissions: @@ -20,18 +20,53 @@ jobs: steps: - uses: actions/checkout@v4 with: - ref: ${{ github.event.pull_request.head.ref }} - repository: ${{ github.event.pull_request.head.repo.full_name }} + ref: ${{ github.event.pull_request.head.ref || github.ref }} + repository: ${{ github.event.pull_request.head.repo.full_name || + github.repository }} - uses: pnpm/action-setup@v4 with: - version: 9 - - name: 'Install Deps' - run: pnpm install - - name: 'Test' - run: pnpm run test - - name: 'Report Coverage' + version: 10.33.2 + + - uses: actions/setup-node@v4 + with: + node-version: "24" + cache: "pnpm" + + - name: "Install Deps" + run: pnpm install --frozen-lockfile + + - name: "Test Global" + run: pnpm test:global + + - name: "Test Service" + run: pnpm test:service + + - name: "Test App" + run: pnpm test:app + + - name: "Report Coverage (Global)" # Set if: always() to also generate the report if tests are failing # Only works if you set `reportOnFailure: true` in your vite config as specified above - if: always() + if: always() && hashFiles('packages/global/coverage/coverage-summary.json') != '' uses: davelosert/vitest-coverage-report-action@v2 + with: + name: global + json-final-path: packages/global/coverage/coverage-final.json + json-summary-path: packages/global/coverage/coverage-summary.json + + - name: "Report Coverage (Service)" + if: always() && hashFiles('packages/service/coverage/coverage-summary.json') != '' + uses: davelosert/vitest-coverage-report-action@v2 + with: + name: service + json-final-path: packages/service/coverage/coverage-final.json + json-summary-path: packages/service/coverage/coverage-summary.json + + - name: "Report Coverage (App)" + if: always() && hashFiles('projects/app/coverage/coverage-summary.json') != '' + uses: davelosert/vitest-coverage-report-action@v2 + with: + name: app + json-final-path: projects/app/coverage/coverage-final.json + json-summary-path: projects/app/coverage/coverage-summary.json diff --git a/.github/workflows/test-sandbox.yaml b/.github/workflows/test-sandbox.yaml index 37a4714e65..9885f180d2 100644 --- a/.github/workflows/test-sandbox.yaml +++ b/.github/workflows/test-sandbox.yaml @@ -20,7 +20,7 @@ jobs: - uses: pnpm/action-setup@v4 with: - version: 9 + version: 10.33.2 - uses: actions/setup-node@v4 with: diff --git a/.gitignore b/.gitignore index fc9d85a04f..6555745543 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ node_modules/ # next.js .next/ +.turbo/ out/ # production build/ @@ -40,6 +41,9 @@ coverage document/.source projects/app/worker/ +pro/admin/worker/ # Agent -.codex \ No newline at end of file +.codex + +.turbo diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..907d2b1926 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "pro"] +path = pro +url = https://github.com/labring/fastgpt-pro.git diff --git a/.vscode/settings.json b/.vscode/settings.json index 7c8108d6d8..9d98791417 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,8 +3,8 @@ "editor.mouseWheelZoom": true, "editor.defaultFormatter": "esbenp.prettier-vscode", "prettier.prettierPath": "node_modules/prettier", - "typescript.preferences.includePackageJsonAutoImports": "on", - "typescript.tsdk": "node_modules/typescript/lib", + "js/ts.preferences.includePackageJsonAutoImports": "on", + "js/ts.tsdk.path": "node_modules/typescript/lib", "i18n-ally.localesPaths": [ "packages/web/i18n", ], @@ -34,4 +34,4 @@ "files.associations": { "*.mdx": "markdown" } -} \ No newline at end of file +} diff --git a/Makefile b/Makefile index c96c77078c..3e1fe9e46a 100644 --- a/Makefile +++ b/Makefile @@ -10,10 +10,16 @@ ifndef name $(error name is not defined) endif -filePath=./projects/$(name)/Dockerfile +projectDir=$(or $(wildcard ./projects/$(name)),$(wildcard ./pro/$(name))) + +ifeq ($(strip $(projectDir)),) +$(error Unknown project name '$(name)'; expected ./projects/$(name) or ./pro/$(name)) +endif + +filePath=$(projectDir)/Dockerfile dev: - pnpm --prefix ./projects/$(name) dev + pnpm --prefix $(projectDir) dev build: ifeq ($(proxy), taobao) @@ -22,4 +28,4 @@ else ifeq ($(proxy), clash) docker build -f $(filePath) -t $(image) . --network host --build-arg HTTP_PROXY=http://127.0.0.1:7890 --build-arg HTTPS_PROXY=http://127.0.0.1:7890 else docker build --progress=plain -f $(filePath) -t $(image) . -endif \ No newline at end of file +endif diff --git a/README.md b/README.md index 65f0d3b9f3..f1a5f3fa45 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,20 @@ docker compose up -d - **商业版** 如果你需要更完整的功能,或深度的服务支持,可以选择我们的[商业版](https://doc.fastgpt.io/introduction/commercial)。我们除了提供完整的软件外,还提供相应的场景落地辅导,具体可提交[商业咨询](https://fael3z0zfze.feishu.cn/share/base/form/shrcnjJWtKqjOI9NbQTzhNyzljc) +## 📁 仓库结构 + +- `projects/app`: 开源主应用 +- `pro/admin`: 商业版后台 +- `pro/sso`: 商业版 SSO 服务 + +统一在仓库根目录执行 `pnpm i`,开发时使用: + +```bash +make dev name=app +make dev name=admin +make dev name=sso +``` + ## 💡 核心功能 | | | diff --git a/dev.md b/dev.md index 1601af25ca..2ef1b74325 100644 --- a/dev.md +++ b/dev.md @@ -2,10 +2,12 @@ Since FastGPT is managed in the same way as monorepo, it is recommended to install ‘make’ first during development. -monorepo Project Name: - -- app: main project --...... +monorepo Project Name: + +- app: main project +- admin: pro admin project +- sso: pro sso service +-...... ## Dev @@ -15,13 +17,15 @@ chmod -R +x ./scripts/ # Executing under the code root directory installs all dependencies within the root package, projects, and packages pnpm i -# Not make cmd -cd projects/app -pnpm dev - -# Make cmd -make dev name=app -``` +# Not make cmd +cd projects/app +pnpm dev + +# Make cmd +make dev name=app +make dev name=admin +make dev name=sso +``` Note: If the Node version is >= 20, you need to pass the `--no-node-snapshot` parameter to Node when running `pnpm i` @@ -106,13 +110,22 @@ Please fill the AuditEventEnum and audit function is added to the ts, and on the ## Build ```sh -# Docker cmd: Build image, not proxy -docker build -f ./projects/app/Dockerfile -t registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.1 . --build-arg name=app -# Make cmd: Build image, not proxy -make build name=app image=registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.1 - -# Docker cmd: Build image with proxy -docker build -f ./projects/app/Dockerfile -t registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.1 . --build-arg name=app --build-arg proxy=taobao -# Make cmd: Build image with proxy -make build name=app image=registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.1 proxy=taobao +# Docker cmd: Build image, not proxy +docker build -f ./projects/app/Dockerfile -t registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.1 . --build-arg name=app +# Docker cmd: Build pro admin image, not proxy +docker build -f ./pro/admin/Dockerfile -t registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-admin:v4.8.1 . --build-arg name=admin +# Docker cmd: Build pro sso image, not proxy +docker build -f ./pro/sso/Dockerfile -t registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sso-service:v4.8.1 . --build-arg name=sso +# Make cmd: Build image, not proxy +make build name=app image=registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.1 +make build name=admin image=registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-admin:v4.8.1 +make build name=sso image=registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sso-service:v4.8.1 + +# Docker cmd: Build image with proxy +docker build -f ./projects/app/Dockerfile -t registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.1 . --build-arg name=app --build-arg proxy=taobao +# Docker cmd: Build pro admin image with proxy +docker build -f ./pro/admin/Dockerfile -t registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-admin:v4.8.1 . --build-arg name=admin --build-arg proxy=taobao +# Make cmd: Build image with proxy +make build name=app image=registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.1 proxy=taobao +make build name=admin image=registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-admin:v4.8.1 proxy=taobao ``` diff --git a/document/Dockerfile b/document/Dockerfile index 5eff866c59..054ad0e6a4 100644 --- a/document/Dockerfile +++ b/document/Dockerfile @@ -1,4 +1,4 @@ -FROM node:20-alpine AS base +FROM node:24-alpine AS base FROM base AS builder RUN apk add --no-cache \ diff --git a/document/package.json b/document/package.json index e04a402bb2..8e70e24a6f 100644 --- a/document/package.json +++ b/document/package.json @@ -1,5 +1,5 @@ { - "name": "fast", + "name": "@fastgpt/document", "version": "0.0.0", "private": true, "scripts": { diff --git a/package.json b/package.json index 254de2029b..cfccf74b1d 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,9 @@ "version": "4.0", "private": true, "scripts": { + "dev:app": "turbo run dev --filter=@fastgpt/app", + "dev:admin": "turbo run dev --filter=@fastgpt/admin", + "dev": "turbo run dev --filter=@fastgpt/app", "prepare": "husky install", "gen:theme-typings": "chakra-cli tokens packages/web/styles/theme.ts --out node_modules/.pnpm/node_modules/@chakra-ui/styled-system/dist/theming.types.d.ts", "gen:deploy": "node deploy/init.mjs", @@ -10,36 +13,42 @@ "initIcon": "node ./scripts/icon/init.js && prettier --config \"./.prettierrc.js\" --write \"packages/web/components/common/Icon/constants.ts\"", "previewIcon": "node ./scripts/icon/index.js", "create:i18n": "node ./scripts/i18n/index.js", + "clean:unused:pro": "node --experimental-strip-types ./pro/scripts/cleanup-unused.ts", + "clean:unused:pro:write": "node --experimental-strip-types ./pro/scripts/cleanup-unused.ts --write", "lint": "eslint \"**/*.{ts,tsx}\" --fix --ignore-path .eslintignore", - "test": "vitest run --coverage", - "test:vector": "vitest run --config test/integrationTest/vectorDB/vitest.config.mts" + "test": "pnpm test:workspace", + "test:all": "pnpm test:workspace && pnpm test:vector", + "test:repo": "vitest run --config vitest.config.mts --coverage --passWithNoTests", + "test:workspace": "turbo run test --filter=@fastgpt/app --filter=@fastgpt/admin --filter=@fastgpt/global --filter=@fastgpt/service", + "test:app": "turbo run test --filter=@fastgpt/app", + "test:admin": "turbo run test --filter=@fastgpt/admin", + "test:global": "turbo run test --filter=@fastgpt/global", + "test:service": "turbo run test --filter=@fastgpt/service", + "test:service:integration": "turbo run test:integration --filter=@fastgpt/service", + "test:vector": "turbo run test:integration --filter=@fastgpt/service", + "build:sdks": "pnpm -r --filter @fastgpt-sdk/storage --filter @fastgpt-sdk/logger --filter @fastgpt-sdk/otel build", + "predev": "pnpm run build:sdks" }, "devDependencies": { "@chakra-ui/cli": "^2.4.1", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", - "@vitest/coverage-v8": "^3.0.9", + "@typescript-eslint/eslint-plugin": "catalog:", + "@typescript-eslint/parser": "catalog:", + "@vitest/coverage-v8": "catalog:", "eslint": "catalog:", "eslint-config-next": "catalog:", "husky": "^8.0.3", "i18next": "catalog:", "js-yaml": "catalog:", "lint-staged": "^13.3.0", - "mongodb-memory-server": "^10.1.4", + "mongodb-memory-server": "catalog:", "next-i18next": "catalog:", "prettier": "3.2.4", "react-i18next": "catalog:", - "typescript": "^5.1.3", - "vitest": "^3.0.9", - "zhlint": "^0.7.4" + "turbo": "2.9.6", + "typescript": "catalog:", + "vitest": "catalog:" }, "lint-staged": { - "./**/**/*.{ts,tsx,scss}": [ - "prettier --config ./.prettierrc.js --write --ignore-unknown" - ], - "./**/**/*.{ts,tsx}": [ - "eslint --fix --ignore-path .eslintignore" - ], "./document/**/**/*.mdx": [ "pnpm -C ./document run format-doc", "pnpm -C ./document run initDocTime", @@ -47,10 +56,18 @@ "pnpm -C ./document run checkDocRefs", "pnpm -C ./document run removeInvalidImg", "git add ." + ], + "**/*.{ts,tsx}": [ + "prettier --config ./.prettierrc.js --write", + "eslint --fix --ignore-path .eslintignore" + ], + "**/*.scss": [ + "prettier --config ./.prettierrc.js --write" ] }, "engines": { "node": ">=20", - "pnpm": "9.x" - } + "pnpm": "10.x" + }, + "packageManager": "pnpm@10.33.2" } diff --git a/packages/global/core/dataset/apiDataset/type.ts b/packages/global/core/dataset/apiDataset/type.ts index 8f559e95af..35c70c3127 100644 --- a/packages/global/core/dataset/apiDataset/type.ts +++ b/packages/global/core/dataset/apiDataset/type.ts @@ -21,6 +21,7 @@ export const APIFileServerSchema = z }) .meta({ description: 'API 服务器配置' }); export type APIFileServerType = z.infer; +export type APIFileServer = APIFileServerType; export const FeishuServerSchema = z .object({ appId: z.string(), @@ -29,6 +30,7 @@ export const FeishuServerSchema = z }) .meta({ description: '飞书服务器配置' }); export type FeishuServerType = z.infer; +export type FeishuServer = FeishuServerType; export const YuqueServerSchema = z .object({ userId: z.string(), @@ -37,6 +39,7 @@ export const YuqueServerSchema = z }) .meta({ description: '语雀服务器配置' }); export type YuqueServerType = z.infer; +export type YuqueServer = YuqueServerType; export const ApiDatasetServerSchema = z .object({ @@ -53,10 +56,12 @@ export const ApiFileReadContentResponseSchema = z.object({ rawText: z.string() }); export type ApiFileReadContentResponseType = z.infer; +export type ApiFileReadContentResponse = ApiFileReadContentResponseType; export const APIFileReadResponseSchema = z.object({ url: z.string() }); export type APIFileReadResponseType = z.infer; +export type APIFileReadResponse = APIFileReadResponseType; export type ApiDatasetDetailResponse = APIFileItemType; diff --git a/packages/global/openapi/admin/support/user/index.ts b/packages/global/openapi/admin/support/user/index.ts index 80560964a9..cfd942dfad 100644 --- a/packages/global/openapi/admin/support/user/index.ts +++ b/packages/global/openapi/admin/support/user/index.ts @@ -1,5 +1,5 @@ -import { AdminInformPath } from './inform'; import { AdminLoginPath } from './login'; +import { AdminInformPath } from './inform'; import type { OpenAPIPath } from '../../../type'; export const AdminUserPath: OpenAPIPath = { diff --git a/packages/global/openapi/api.ts b/packages/global/openapi/api.ts index 5eccd63a0a..a7cc4d7122 100644 --- a/packages/global/openapi/api.ts +++ b/packages/global/openapi/api.ts @@ -30,7 +30,6 @@ export type PaginationResponseType = { total: number; list: T[]; }; -export type PaginationResponse = PaginationResponseType; /* 按 cursor 分页 */ @@ -88,3 +87,6 @@ export type LinkedListResponse = { hasMorePrev: boolean; hasMoreNext: boolean; }; + +// Backward-compatible alias for older callers that still import PaginationResponse. +export type PaginationResponse = PaginationResponseType; diff --git a/packages/global/package.json b/packages/global/package.json index 4758718307..906bb8e4d7 100644 --- a/packages/global/package.json +++ b/packages/global/package.json @@ -1,9 +1,13 @@ { "name": "@fastgpt/global", "version": "1.0.0", + "scripts": { + "test": "vitest run -c vitest.config.ts", + "test:watch": "vitest -c vitest.config.ts" + }, "engines": { "node": ">=20", - "pnpm": "9.x" + "pnpm": "10.x" }, "dependencies": { "@fastgpt-sdk/plugin": "0.6.0", @@ -16,7 +20,7 @@ "js-yaml": "catalog:", "jschardet": "3.1.1", "json5": "catalog:", - "nanoid": "^5.1.3", + "nanoid": "catalog:", "next": "catalog:", "openai": "4.104.0", "openapi-types": "^12.1.3", @@ -27,7 +31,7 @@ }, "devDependencies": { "@types/lodash": "catalog:", - "@types/js-yaml": "^4.0.9", - "@types/node": "20.14.0" + "@types/js-yaml": "catalog:", + "@types/node": "catalog:" } } diff --git a/packages/global/sdk/fastgpt-plugin.ts b/packages/global/sdk/fastgpt-plugin.ts index e3577b1741..9e8c919bde 100644 --- a/packages/global/sdk/fastgpt-plugin.ts +++ b/packages/global/sdk/fastgpt-plugin.ts @@ -1 +1,13 @@ -export * from '@fastgpt-sdk/plugin'; +export { + FastGPTPluginClient, + RunToolWithStream, + ToolDetailSchema, + ToolSimpleSchema, + ToolTagsNameMap +} from '@fastgpt-sdk/plugin'; +export type { + AIProxyChannelsType, + I18nStringStrictType, + ToolDetailType, + ToolSimpleType +} from '@fastgpt-sdk/plugin'; diff --git a/packages/global/support/outLink/type.ts b/packages/global/support/outLink/type.ts index 841201fa11..a95fcbafe4 100644 --- a/packages/global/support/outLink/type.ts +++ b/packages/global/support/outLink/type.ts @@ -123,6 +123,8 @@ export type OutLinkEditType = { app?: T; }; +export type OutLinkSchema = OutLinkSchemaType; + export const PlaygroundVisibilityConfigSchema = z.object({ showRunningStatus: z.boolean(), showSkillReferences: z.boolean().optional().default(true), diff --git a/packages/global/support/permission/utils.ts b/packages/global/support/permission/utils.ts index c4249487ab..bae54a985c 100644 --- a/packages/global/support/permission/utils.ts +++ b/packages/global/support/permission/utils.ts @@ -1,7 +1,9 @@ import type { CollaboratorIdType, CollaboratorItemType } from './collaborator'; -import { ManageRoleVal, OwnerRoleVal } from './constant'; import type { RoleValueType } from './type'; import { type PermissionValueType } from './type'; + +const OwnerRoleVal = ~0 >>> 0; +const ManageRoleVal = 0b001; /** * Sum the permission value. * If no permission value is provided, return undefined to fallback to default value. diff --git a/test/cases/global/common/error/s3.test.ts b/packages/global/test/common/error/s3.test.ts similarity index 100% rename from test/cases/global/common/error/s3.test.ts rename to packages/global/test/common/error/s3.test.ts diff --git a/test/cases/global/common/error/utils.test.ts b/packages/global/test/common/error/utils.test.ts similarity index 100% rename from test/cases/global/common/error/utils.test.ts rename to packages/global/test/common/error/utils.test.ts diff --git a/test/cases/global/common/file/icon.test.ts b/packages/global/test/common/file/icon.test.ts similarity index 100% rename from test/cases/global/common/file/icon.test.ts rename to packages/global/test/common/file/icon.test.ts diff --git a/test/cases/global/common/file/tool.test.ts b/packages/global/test/common/file/tool.test.ts similarity index 100% rename from test/cases/global/common/file/tool.test.ts rename to packages/global/test/common/file/tool.test.ts diff --git a/test/cases/global/common/file/utils.test.ts b/packages/global/test/common/file/utils.test.ts similarity index 100% rename from test/cases/global/common/file/utils.test.ts rename to packages/global/test/common/file/utils.test.ts diff --git a/test/cases/global/common/i18n/utils.test.ts b/packages/global/test/common/i18n/utils.test.ts similarity index 100% rename from test/cases/global/common/i18n/utils.test.ts rename to packages/global/test/common/i18n/utils.test.ts diff --git a/test/cases/global/common/math/date.test.ts b/packages/global/test/common/math/date.test.ts similarity index 100% rename from test/cases/global/common/math/date.test.ts rename to packages/global/test/common/math/date.test.ts diff --git a/test/cases/global/common/math/tools.test.ts b/packages/global/test/common/math/tools.test.ts similarity index 100% rename from test/cases/global/common/math/tools.test.ts rename to packages/global/test/common/math/tools.test.ts diff --git a/test/cases/global/common/parentFolder/utils.test.ts b/packages/global/test/common/parentFolder/utils.test.ts similarity index 100% rename from test/cases/global/common/parentFolder/utils.test.ts rename to packages/global/test/common/parentFolder/utils.test.ts diff --git a/test/cases/global/common/secret/utils.test.ts b/packages/global/test/common/secret/utils.test.ts similarity index 100% rename from test/cases/global/common/secret/utils.test.ts rename to packages/global/test/common/secret/utils.test.ts diff --git a/test/cases/global/common/string/http.test.ts b/packages/global/test/common/string/http.test.ts similarity index 100% rename from test/cases/global/common/string/http.test.ts rename to packages/global/test/common/string/http.test.ts diff --git a/test/cases/global/common/string/markdown.test.ts b/packages/global/test/common/string/markdown.test.ts similarity index 100% rename from test/cases/global/common/string/markdown.test.ts rename to packages/global/test/common/string/markdown.test.ts diff --git a/test/cases/global/common/string/password.test.ts b/packages/global/test/common/string/password.test.ts similarity index 100% rename from test/cases/global/common/string/password.test.ts rename to packages/global/test/common/string/password.test.ts diff --git a/test/cases/global/common/string/string.test.ts b/packages/global/test/common/string/string.test.ts similarity index 100% rename from test/cases/global/common/string/string.test.ts rename to packages/global/test/common/string/string.test.ts diff --git a/test/cases/global/common/string/test.md b/packages/global/test/common/string/test.md similarity index 100% rename from test/cases/global/common/string/test.md rename to packages/global/test/common/string/test.md diff --git a/test/cases/global/common/string/textSplitter.test.ts b/packages/global/test/common/string/textSplitter.test.ts similarity index 100% rename from test/cases/global/common/string/textSplitter.test.ts rename to packages/global/test/common/string/textSplitter.test.ts diff --git a/test/cases/global/common/string/time.test.ts b/packages/global/test/common/string/time.test.ts similarity index 100% rename from test/cases/global/common/string/time.test.ts rename to packages/global/test/common/string/time.test.ts diff --git a/test/cases/global/common/string/tools.test.ts b/packages/global/test/common/string/tools.test.ts similarity index 100% rename from test/cases/global/common/string/tools.test.ts rename to packages/global/test/common/string/tools.test.ts diff --git a/test/cases/global/common/string/utils.test.ts b/packages/global/test/common/string/utils.test.ts similarity index 100% rename from test/cases/global/common/string/utils.test.ts rename to packages/global/test/common/string/utils.test.ts diff --git a/test/cases/global/common/system/utils.test.ts b/packages/global/test/common/system/utils.test.ts similarity index 100% rename from test/cases/global/common/system/utils.test.ts rename to packages/global/test/common/system/utils.test.ts diff --git a/test/cases/global/common/time/timezone.test.ts b/packages/global/test/common/time/timezone.test.ts similarity index 100% rename from test/cases/global/common/time/timezone.test.ts rename to packages/global/test/common/time/timezone.test.ts diff --git a/test/cases/global/common/type/mongo.test.ts b/packages/global/test/common/type/mongo.test.ts similarity index 100% rename from test/cases/global/common/type/mongo.test.ts rename to packages/global/test/common/type/mongo.test.ts diff --git a/test/cases/global/core/ai/llm/utils.test.ts b/packages/global/test/core/ai/llm/utils.test.ts similarity index 100% rename from test/cases/global/core/ai/llm/utils.test.ts rename to packages/global/test/core/ai/llm/utils.test.ts diff --git a/test/cases/global/core/ai/pricing.test.ts b/packages/global/test/core/ai/pricing.test.ts similarity index 100% rename from test/cases/global/core/ai/pricing.test.ts rename to packages/global/test/core/ai/pricing.test.ts diff --git a/test/cases/global/core/ai/prompt/AIChat.test.ts b/packages/global/test/core/ai/prompt/AIChat.test.ts similarity index 100% rename from test/cases/global/core/ai/prompt/AIChat.test.ts rename to packages/global/test/core/ai/prompt/AIChat.test.ts diff --git a/test/cases/global/core/ai/prompt/agent.test.ts b/packages/global/test/core/ai/prompt/agent.test.ts similarity index 100% rename from test/cases/global/core/ai/prompt/agent.test.ts rename to packages/global/test/core/ai/prompt/agent.test.ts diff --git a/test/cases/global/core/ai/prompt/utils.test.ts b/packages/global/test/core/ai/prompt/utils.test.ts similarity index 100% rename from test/cases/global/core/ai/prompt/utils.test.ts rename to packages/global/test/core/ai/prompt/utils.test.ts diff --git a/test/cases/global/core/ai/provider.test.ts b/packages/global/test/core/ai/provider.test.ts similarity index 100% rename from test/cases/global/core/ai/provider.test.ts rename to packages/global/test/core/ai/provider.test.ts diff --git a/test/cases/global/core/app/evaluation/utils.test.ts b/packages/global/test/core/app/evaluation/utils.test.ts similarity index 100% rename from test/cases/global/core/app/evaluation/utils.test.ts rename to packages/global/test/core/app/evaluation/utils.test.ts diff --git a/test/cases/global/core/app/formEdit/utils.test.ts b/packages/global/test/core/app/formEdit/utils.test.ts similarity index 100% rename from test/cases/global/core/app/formEdit/utils.test.ts rename to packages/global/test/core/app/formEdit/utils.test.ts diff --git a/test/cases/global/core/app/jsonschema.test.ts b/packages/global/test/core/app/jsonschema.test.ts similarity index 100% rename from test/cases/global/core/app/jsonschema.test.ts rename to packages/global/test/core/app/jsonschema.test.ts diff --git a/test/cases/global/core/app/logs/utils.test.ts b/packages/global/test/core/app/logs/utils.test.ts similarity index 100% rename from test/cases/global/core/app/logs/utils.test.ts rename to packages/global/test/core/app/logs/utils.test.ts diff --git a/test/cases/global/core/app/tool/httpTool/type.test.ts b/packages/global/test/core/app/tool/httpTool/type.test.ts similarity index 100% rename from test/cases/global/core/app/tool/httpTool/type.test.ts rename to packages/global/test/core/app/tool/httpTool/type.test.ts diff --git a/test/cases/global/core/app/tool/httpTool/utils.test.ts b/packages/global/test/core/app/tool/httpTool/utils.test.ts similarity index 100% rename from test/cases/global/core/app/tool/httpTool/utils.test.ts rename to packages/global/test/core/app/tool/httpTool/utils.test.ts diff --git a/test/cases/global/core/app/tool/mcpTool/type.test.ts b/packages/global/test/core/app/tool/mcpTool/type.test.ts similarity index 100% rename from test/cases/global/core/app/tool/mcpTool/type.test.ts rename to packages/global/test/core/app/tool/mcpTool/type.test.ts diff --git a/test/cases/global/core/app/tool/mcpTool/utils.test.ts b/packages/global/test/core/app/tool/mcpTool/utils.test.ts similarity index 100% rename from test/cases/global/core/app/tool/mcpTool/utils.test.ts rename to packages/global/test/core/app/tool/mcpTool/utils.test.ts diff --git a/test/cases/global/core/app/tool/utils.test.ts b/packages/global/test/core/app/tool/utils.test.ts similarity index 100% rename from test/cases/global/core/app/tool/utils.test.ts rename to packages/global/test/core/app/tool/utils.test.ts diff --git a/test/cases/global/core/app/tool/workflowTool/utils.test.ts b/packages/global/test/core/app/tool/workflowTool/utils.test.ts similarity index 100% rename from test/cases/global/core/app/tool/workflowTool/utils.test.ts rename to packages/global/test/core/app/tool/workflowTool/utils.test.ts diff --git a/test/cases/global/core/app/utils.test.ts b/packages/global/test/core/app/utils.test.ts similarity index 100% rename from test/cases/global/core/app/utils.test.ts rename to packages/global/test/core/app/utils.test.ts diff --git a/test/cases/global/core/chat/adapt.test.ts b/packages/global/test/core/chat/adapt.test.ts similarity index 100% rename from test/cases/global/core/chat/adapt.test.ts rename to packages/global/test/core/chat/adapt.test.ts diff --git a/test/cases/global/core/chat/chatUtils.test.ts b/packages/global/test/core/chat/chatUtils.test.ts similarity index 100% rename from test/cases/global/core/chat/chatUtils.test.ts rename to packages/global/test/core/chat/chatUtils.test.ts diff --git a/test/cases/global/core/chat/constants.test.ts b/packages/global/test/core/chat/constants.test.ts similarity index 100% rename from test/cases/global/core/chat/constants.test.ts rename to packages/global/test/core/chat/constants.test.ts diff --git a/test/cases/global/core/chat/favouriteApp/type.test.ts b/packages/global/test/core/chat/favouriteApp/type.test.ts similarity index 100% rename from test/cases/global/core/chat/favouriteApp/type.test.ts rename to packages/global/test/core/chat/favouriteApp/type.test.ts diff --git a/test/cases/global/core/chat/helperBot/adaptor.test.ts b/packages/global/test/core/chat/helperBot/adaptor.test.ts similarity index 100% rename from test/cases/global/core/chat/helperBot/adaptor.test.ts rename to packages/global/test/core/chat/helperBot/adaptor.test.ts diff --git a/test/cases/global/core/chat/helperBot/topAgent/type.test.ts b/packages/global/test/core/chat/helperBot/topAgent/type.test.ts similarity index 100% rename from test/cases/global/core/chat/helperBot/topAgent/type.test.ts rename to packages/global/test/core/chat/helperBot/topAgent/type.test.ts diff --git a/test/cases/global/core/chat/helperBot/type.test.ts b/packages/global/test/core/chat/helperBot/type.test.ts similarity index 100% rename from test/cases/global/core/chat/helperBot/type.test.ts rename to packages/global/test/core/chat/helperBot/type.test.ts diff --git a/test/cases/global/core/chat/setting/type.test.ts b/packages/global/test/core/chat/setting/type.test.ts similarity index 100% rename from test/cases/global/core/chat/setting/type.test.ts rename to packages/global/test/core/chat/setting/type.test.ts diff --git a/test/cases/global/core/chat/type.test.ts b/packages/global/test/core/chat/type.test.ts similarity index 100% rename from test/cases/global/core/chat/type.test.ts rename to packages/global/test/core/chat/type.test.ts diff --git a/test/cases/global/core/dataset/apiDataset/utils.test.ts b/packages/global/test/core/dataset/apiDataset/utils.test.ts similarity index 100% rename from test/cases/global/core/dataset/apiDataset/utils.test.ts rename to packages/global/test/core/dataset/apiDataset/utils.test.ts diff --git a/test/cases/global/core/dataset/collection/utils.test.ts b/packages/global/test/core/dataset/collection/utils.test.ts similarity index 100% rename from test/cases/global/core/dataset/collection/utils.test.ts rename to packages/global/test/core/dataset/collection/utils.test.ts diff --git a/test/cases/global/core/dataset/search/utils.test.ts b/packages/global/test/core/dataset/search/utils.test.ts similarity index 100% rename from test/cases/global/core/dataset/search/utils.test.ts rename to packages/global/test/core/dataset/search/utils.test.ts diff --git a/test/cases/global/core/dataset/training/utils.test.ts b/packages/global/test/core/dataset/training/utils.test.ts similarity index 100% rename from test/cases/global/core/dataset/training/utils.test.ts rename to packages/global/test/core/dataset/training/utils.test.ts diff --git a/test/cases/global/core/dataset/utils.test.ts b/packages/global/test/core/dataset/utils.test.ts similarity index 100% rename from test/cases/global/core/dataset/utils.test.ts rename to packages/global/test/core/dataset/utils.test.ts diff --git a/test/cases/global/core/workflow/runtime/utils.test.ts b/packages/global/test/core/workflow/runtime/utils.test.ts similarity index 100% rename from test/cases/global/core/workflow/runtime/utils.test.ts rename to packages/global/test/core/workflow/runtime/utils.test.ts diff --git a/test/cases/global/core/workflow/utils.test.ts b/packages/global/test/core/workflow/utils.test.ts similarity index 100% rename from test/cases/global/core/workflow/utils.test.ts rename to packages/global/test/core/workflow/utils.test.ts diff --git a/test/cases/global/support/customDomain/utils.test.ts b/packages/global/test/support/customDomain/utils.test.ts similarity index 100% rename from test/cases/global/support/customDomain/utils.test.ts rename to packages/global/test/support/customDomain/utils.test.ts diff --git a/test/cases/global/support/permission/app/controller.test.ts b/packages/global/test/support/permission/app/controller.test.ts similarity index 100% rename from test/cases/global/support/permission/app/controller.test.ts rename to packages/global/test/support/permission/app/controller.test.ts diff --git a/test/cases/global/support/permission/chat.test.ts b/packages/global/test/support/permission/chat.test.ts similarity index 100% rename from test/cases/global/support/permission/chat.test.ts rename to packages/global/test/support/permission/chat.test.ts diff --git a/test/cases/global/support/permission/controller.test.ts b/packages/global/test/support/permission/controller.test.ts similarity index 100% rename from test/cases/global/support/permission/controller.test.ts rename to packages/global/test/support/permission/controller.test.ts diff --git a/test/cases/global/support/permission/dataset/controller.test.ts b/packages/global/test/support/permission/dataset/controller.test.ts similarity index 100% rename from test/cases/global/support/permission/dataset/controller.test.ts rename to packages/global/test/support/permission/dataset/controller.test.ts diff --git a/test/cases/global/support/permission/model/controller.test.ts b/packages/global/test/support/permission/model/controller.test.ts similarity index 100% rename from test/cases/global/support/permission/model/controller.test.ts rename to packages/global/test/support/permission/model/controller.test.ts diff --git a/test/cases/global/support/permission/user/controller.test.ts b/packages/global/test/support/permission/user/controller.test.ts similarity index 100% rename from test/cases/global/support/permission/user/controller.test.ts rename to packages/global/test/support/permission/user/controller.test.ts diff --git a/test/cases/global/support/permission/utils.test.ts b/packages/global/test/support/permission/utils.test.ts similarity index 100% rename from test/cases/global/support/permission/utils.test.ts rename to packages/global/test/support/permission/utils.test.ts diff --git a/test/cases/global/support/user/team/org/constant.test.ts b/packages/global/test/support/user/team/org/constant.test.ts similarity index 100% rename from test/cases/global/support/user/team/org/constant.test.ts rename to packages/global/test/support/user/team/org/constant.test.ts diff --git a/test/cases/global/support/user/utils.test.ts b/packages/global/test/support/user/utils.test.ts similarity index 100% rename from test/cases/global/support/user/utils.test.ts rename to packages/global/test/support/user/utils.test.ts diff --git a/test/cases/global/support/wallet/bill/tools.test.ts b/packages/global/test/support/wallet/bill/tools.test.ts similarity index 100% rename from test/cases/global/support/wallet/bill/tools.test.ts rename to packages/global/test/support/wallet/bill/tools.test.ts diff --git a/test/cases/global/support/wallet/usage/tools.test.ts b/packages/global/test/support/wallet/usage/tools.test.ts similarity index 100% rename from test/cases/global/support/wallet/usage/tools.test.ts rename to packages/global/test/support/wallet/usage/tools.test.ts diff --git a/packages/global/test/tsconfig.json b/packages/global/test/tsconfig.json new file mode 100644 index 0000000000..d207a72505 --- /dev/null +++ b/packages/global/test/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "baseUrl": "..", + "paths": { + "@/*": ["../../packages/*"], + "@fastgpt-sdk/logger": ["../../sdk/logger/src/index.ts"], + "@fastgpt-sdk/storage": ["../../sdk/storage/src/index.ts"], + "@fastgpt-sdk/otel": ["../../sdk/otel/src/index.ts"], + "@fastgpt-sdk/otel/logger": ["../../sdk/otel/src/logger-entry.ts"], + "@fastgpt-sdk/otel/metrics": ["../../sdk/otel/src/metrics-entry.ts"], + "@fastgpt-sdk/otel/tracing": ["../../sdk/otel/src/tracing-entry.ts"], + "@fastgpt/*": ["../../packages/*"], + "@test/*": ["../../test/*"] + } + }, + "include": ["**/*.test.ts", "../**/*.ts", "../**/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/packages/global/vitest.config.ts b/packages/global/vitest.config.ts new file mode 100644 index 0000000000..1da4b56199 --- /dev/null +++ b/packages/global/vitest.config.ts @@ -0,0 +1,45 @@ +import { resolve } from 'node:path'; +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + resolve: { + alias: { + '@': resolve('..'), + '@fastgpt-sdk/logger': resolve('../../sdk/logger/src/index.ts'), + '@fastgpt-sdk/storage': resolve('../../sdk/storage/src/index.ts'), + '@fastgpt-sdk/otel/logger': resolve('../../sdk/otel/src/logger-entry.ts'), + '@fastgpt-sdk/otel/metrics': resolve('../../sdk/otel/src/metrics-entry.ts'), + '@fastgpt-sdk/otel/tracing': resolve('../../sdk/otel/src/tracing-entry.ts'), + '@fastgpt-sdk/otel': resolve('../../sdk/otel/src/index.ts'), + '@fastgpt': resolve('..'), + '@test': resolve('../../test') + } + }, + test: { + coverage: { + enabled: true, + reporter: ['text', 'text-summary', 'html', 'json-summary', 'json'], + reportOnFailure: true, + include: ['common/**/*.ts', 'core/**/*.ts', 'support/**/*.ts', 'openapi/**/*.ts'], + exclude: [ + '**/node_modules/**', + '**/*.spec.ts', + '**/*/*.d.ts', + '**/test/**', + '**/*.test.ts', + '**/*/constants.ts', + '**/*/*.const.ts', + '**/*/type.ts', + '**/*/types.ts', + '**/*/type/*', + '**/*/schema.ts', + '**/*/*.schema.ts', + 'openapi/**/*', + 'core/workflow/template/**/*' + ], + cleanOnRerun: false + }, + outputFile: 'test-results.json', + include: ['test/**/*.test.ts'] + } +}); diff --git a/packages/service/common/api/axios.ts b/packages/service/common/api/axios.ts index 9572da4387..c0b46fe63f 100644 --- a/packages/service/common/api/axios.ts +++ b/packages/service/common/api/axios.ts @@ -3,10 +3,11 @@ import { ProxyAgent } from 'proxy-agent'; import { isDevEnv } from '@fastgpt/global/common/system/constants'; export function createProxyAxios(config?: AxiosRequestConfig) { + const agent = new ProxyAgent(); + if (isDevEnv) { return _.create(config); } - const agent = new ProxyAgent(); return _.create({ proxy: false, diff --git a/packages/service/common/bullmq/index.ts b/packages/service/common/bullmq/index.ts index 93b5d929ff..a7311bf680 100644 --- a/packages/service/common/bullmq/index.ts +++ b/packages/service/common/bullmq/index.ts @@ -3,6 +3,7 @@ import { type Processor, Queue, type QueueOptions, + UnrecoverableError, Worker, type WorkerOptions } from 'bullmq'; @@ -150,4 +151,5 @@ export function getWorker( return newWorker; } -export * from 'bullmq'; +export { Queue, UnrecoverableError, Worker, delay }; +export type { ConnectionOptions, Job, Processor, QueueOptions, WorkerOptions } from 'bullmq'; diff --git a/packages/service/common/geo/constants.ts b/packages/service/common/geo/constants.ts index f10a148bc8..deecd6a2b9 100644 --- a/packages/service/common/geo/constants.ts +++ b/packages/service/common/geo/constants.ts @@ -1,7 +1,18 @@ +import fs from 'node:fs'; import path from 'node:path'; +import { fileURLToPath } from 'node:url'; import type { LocationName } from './type'; -export const dbPath = path.join(process.cwd(), 'data/GeoLite2-City.mmdb'); +const dbFileName = 'GeoLite2-City.mmdb'; +const currentDir = path.dirname(fileURLToPath(import.meta.url)); + +const dbPathCandidates = [ + path.resolve(currentDir, '../../../../projects/app/data', dbFileName), + path.resolve(process.cwd(), 'data', dbFileName), + path.resolve(process.cwd(), '../../projects/app/data', dbFileName) +]; + +export const dbPath = dbPathCandidates.find((item) => fs.existsSync(item)) ?? dbPathCandidates[0]; export const privateOrOtherLocationName: LocationName = { city: undefined, diff --git a/packages/service/common/mongo/index.ts b/packages/service/common/mongo/index.ts index 954d569c4c..0e369d955a 100644 --- a/packages/service/common/mongo/index.ts +++ b/packages/service/common/mongo/index.ts @@ -1,12 +1,25 @@ import { isTestEnv } from '@fastgpt/global/common/system/constants'; import { getLogger, LogCategories } from '../logger'; -import type { Model } from 'mongoose'; +import type { + AnyBulkWriteOperation, + ClientSession, + Model, + Mongoose as MongooseType, + PipelineStage +} from 'mongoose'; import mongoose, { Mongoose } from 'mongoose'; const logger = getLogger(LogCategories.INFRA.MONGO); export default mongoose; -export * from 'mongoose'; +export { Schema, Types } from 'mongoose'; +export type { + AnyBulkWriteOperation, + ClientSession, + Model, + MongooseType as Mongoose, + PipelineStage +}; export const MONGO_URL = process.env.MONGODB_URI as string; export const MONGO_LOG_URL = (process.env.MONGODB_LOG_URI ?? process.env.MONGODB_URI) as string; diff --git a/packages/service/common/redis/index.ts b/packages/service/common/redis/index.ts index 06ffeaec09..c56773801b 100644 --- a/packages/service/common/redis/index.ts +++ b/packages/service/common/redis/index.ts @@ -1,5 +1,6 @@ import { getLogger, LogCategories } from '../logger'; import Redis from 'ioredis'; +import type { RedisOptions } from 'ioredis'; const logger = getLogger(LogCategories.INFRA.REDIS); @@ -41,9 +42,60 @@ const REDIS_BASE_OPTION = { enableOfflineQueue: true }; +const getRedisConnectionOptions = (): RedisOptions => { + if (REDIS_URL.startsWith('/')) { + return { + ...REDIS_BASE_OPTION, + path: REDIS_URL + }; + } + + const normalizedRedisUrl = REDIS_URL.includes('://') ? REDIS_URL : `redis://${REDIS_URL}`; + + try { + const redisUrl = new URL(normalizedRedisUrl); + const protocol = redisUrl.protocol.toLowerCase(); + + if (protocol !== 'redis:' && protocol !== 'rediss:') { + logger.warn('Unsupported Redis URL protocol, fallback to defaults', { + protocol, + redisUrl: REDIS_URL + }); + return { + ...REDIS_BASE_OPTION + }; + } + + const dbFromPath = redisUrl.pathname.replace(/^\//, ''); + const parsedDb = dbFromPath ? Number(dbFromPath) : undefined; + const db = Number.isFinite(parsedDb) ? parsedDb : undefined; + + const options: RedisOptions = { + ...REDIS_BASE_OPTION, + host: redisUrl.hostname || 'localhost', + port: redisUrl.port ? Number(redisUrl.port) : 6379 + }; + + if (redisUrl.username) options.username = decodeURIComponent(redisUrl.username); + if (redisUrl.password) options.password = decodeURIComponent(redisUrl.password); + if (db !== undefined) options.db = db; + if (protocol === 'rediss:') options.tls = {}; + + return options; + } catch (error) { + logger.warn('Failed to parse REDIS_URL with WHATWG URL API, fallback to defaults', { + redisUrl: REDIS_URL, + error: String(error) + }); + return { + ...REDIS_BASE_OPTION + }; + } +}; + export const newQueueRedisConnection = () => { - const redis = new Redis(REDIS_URL, { - ...REDIS_BASE_OPTION, + const redis = new Redis({ + ...getRedisConnectionOptions(), // Limit retries for queue operations maxRetriesPerRequest: 3 }); @@ -51,8 +103,8 @@ export const newQueueRedisConnection = () => { }; export const newWorkerRedisConnection = () => { - const redis = new Redis(REDIS_URL, { - ...REDIS_BASE_OPTION, + const redis = new Redis({ + ...getRedisConnectionOptions(), // BullMQ requires maxRetriesPerRequest: null for blocking operations maxRetriesPerRequest: null }); @@ -63,8 +115,8 @@ export const FASTGPT_REDIS_PREFIX = 'fastgpt:'; export const getGlobalRedisConnection = () => { if (global.redisClient) return global.redisClient; - global.redisClient = new Redis(REDIS_URL, { - ...REDIS_BASE_OPTION, + global.redisClient = new Redis({ + ...getRedisConnectionOptions(), keyPrefix: FASTGPT_REDIS_PREFIX, maxRetriesPerRequest: 3 }); diff --git a/packages/service/common/system/emptyModule.js b/packages/service/common/system/emptyModule.js new file mode 100644 index 0000000000..1267c0014b --- /dev/null +++ b/packages/service/common/system/emptyModule.js @@ -0,0 +1,14 @@ +const emptyModule = new Proxy(function emptyModule() {}, { + get() { + return emptyModule; + }, + apply() { + return undefined; + }, + construct() { + return {}; + } +}); + +module.exports = emptyModule; +module.exports.default = emptyModule; diff --git a/packages/service/common/system/initError.ts b/packages/service/common/system/initError.ts new file mode 100644 index 0000000000..d8d4d94598 --- /dev/null +++ b/packages/service/common/system/initError.ts @@ -0,0 +1,221 @@ +import { inspect } from 'node:util'; + +type ErrTextGetter = (error: any, def?: string) => string; + +type SerializedInitializationError = { + message: string; + name?: string; + code?: string; + stage?: string; + step?: string; + stack?: string; + cause?: SerializedInitializationError; + details: string; +}; + +type InitializationLogger = { + error: (message: string, payload?: Record) => void; + info?: (message: string, payload?: Record) => void; +}; + +const getObjectMessage = (error: Record, fallback: string) => { + const message = + (typeof error.message === 'string' && error.message) || + (typeof error.msg === 'string' && error.msg) || + (typeof error.error === 'string' && error.error) || + (typeof error.code === 'string' && error.code); + + return message || fallback; +}; + +export const serializeInitializationError = ( + error: unknown, + depth = 0 +): SerializedInitializationError => { + const fallback = 'Unknown initialization error'; + + if (depth > 5) { + return { + message: 'Max initialization error depth reached', + details: 'Max initialization error depth reached' + }; + } + + if (error instanceof Error) { + const err = error as Error & { + code?: string; + stage?: string; + step?: string; + cause?: unknown; + }; + + return { + message: err.message || fallback, + name: err.name, + code: err.code, + stage: err.stage, + step: err.step, + stack: err.stack, + cause: err.cause ? serializeInitializationError(err.cause, depth + 1) : undefined, + details: inspect(error, { depth: 6, breakLength: 120 }) + }; + } + + if (typeof error === 'string') { + return { + message: error || fallback, + details: error || fallback + }; + } + + if (error && typeof error === 'object') { + const err = error as Record; + + return { + message: getObjectMessage(err, fallback), + code: typeof err.code === 'string' ? err.code : undefined, + stage: typeof err.stage === 'string' ? err.stage : undefined, + step: typeof err.step === 'string' ? err.step : undefined, + cause: err.cause ? serializeInitializationError(err.cause, depth + 1) : undefined, + details: inspect(error, { depth: 6, breakLength: 120 }) + }; + } + + return { + message: fallback, + details: String(error) + }; +}; + +export const createInitializationError = ( + error: unknown, + { + stage, + step, + getErrText + }: { + stage?: string; + step?: string; + getErrText?: ErrTextGetter; + } = {} +) => { + const fallback = 'Unknown initialization error'; + const errorText = + getErrText?.(error, fallback) || serializeInitializationError(error).message || fallback; + const labels = [stage, step].filter(Boolean).join(' / '); + const wrappedError = new Error(labels ? `[${labels}]: ${errorText}` : errorText, { + cause: error + }); + + wrappedError.name = 'SystemInitializationError'; + + return Object.assign(wrappedError, { + stage, + step + }); +}; + +export const runInitializationStep = async ({ + step, + action, + stage, + logger, + getErrText, + meta +}: { + step: string; + action: () => Promise | T; + stage?: string; + logger?: InitializationLogger; + getErrText?: ErrTextGetter; + meta?: Record; +}) => { + try { + return await action(); + } catch (error) { + const logPayload = { + step, + stage, + ...meta, + ...getInitializationErrorLog(error) + }; + + console.error('System initialization step failed', logPayload); + logger?.error(`System initialization step failed: ${step}`, logPayload); + + throw createInitializationError(error, { + stage, + step, + getErrText + }); + } +}; + +export const runBackgroundInitializationStep = ({ + step, + action, + stage, + logger, + getErrText, + meta +}: { + step: string; + action: () => Promise | unknown; + stage?: string; + logger?: InitializationLogger; + getErrText?: ErrTextGetter; + meta?: Record; +}) => { + try { + const task = action(); + + logger?.info?.('System background initialization step started', { + step, + stage, + ...meta + }); + + void Promise.resolve(task).catch((error) => { + const logPayload = { + step, + stage, + ...meta, + ...getInitializationErrorLog(error) + }; + + console.error('System background initialization step failed', logPayload); + logger?.error(`System background initialization step failed: ${step}`, logPayload); + }); + } catch (error) { + const logPayload = { + step, + stage, + ...meta, + ...getInitializationErrorLog(error) + }; + + console.error('System background initialization step failed', logPayload); + logger?.error(`System background initialization step failed: ${step}`, logPayload); + + throw createInitializationError(error, { + stage, + step, + getErrText + }); + } +}; + +export const getInitializationErrorLog = (error: unknown) => { + const serialized = serializeInitializationError(error); + + return { + errorMessage: serialized.message, + errorName: serialized.name, + errorCode: serialized.code, + errorStage: serialized.stage, + errorStep: serialized.step, + errorStack: serialized.stack, + errorCause: serialized.cause, + errorDetails: serialized.details + }; +}; diff --git a/packages/service/core/ai/sandbox/schema.ts b/packages/service/core/ai/sandbox/schema.ts index 4614f3b62a..dd4caeffba 100644 --- a/packages/service/core/ai/sandbox/schema.ts +++ b/packages/service/core/ai/sandbox/schema.ts @@ -55,6 +55,8 @@ SandboxInstanceSchema.index( { unique: true, partialFilterExpression: { + // Keep the index compatible with Mongo-compatible backends that do not + // support `$ne: null` inside partial indexes. appId: { $exists: true }, userId: { $exists: true }, chatId: { $exists: true } diff --git a/packages/service/package.json b/packages/service/package.json index 4a52d12eaa..8c86823ab5 100644 --- a/packages/service/package.json +++ b/packages/service/package.json @@ -2,28 +2,34 @@ "name": "@fastgpt/service", "version": "1.0.0", "type": "module", + "scripts": { + "test": "vitest run -c vitest.config.ts", + "test:watch": "vitest -c vitest.config.ts", + "test:integration": "vitest run -c vitest.integration.config.ts", + "test:integration:watch": "vitest -c vitest.integration.config.ts" + }, "engines": { "node": ">=20", - "pnpm": "9.x" + "pnpm": "10.x" }, "dependencies": { "@apidevtools/json-schema-ref-parser": "^11.7.2", - "@fastgpt-sdk/otel": "catalog:", + "@fastgpt-sdk/otel": "workspace:*", "@fastgpt-sdk/sandbox-adapter": "^0.0.36", - "@fastgpt-sdk/storage": "catalog:", + "@fastgpt-sdk/storage": "workspace:*", "@fastgpt/global": "workspace:*", "@mariozechner/pi-agent-core": "^0.67.3", "@mariozechner/pi-ai": "^0.67.3", "@maxmind/geoip2-node": "^6.3.4", "@modelcontextprotocol/sdk": "catalog:", - "@node-rs/jieba": "2.0.1", + "@node-rs/jieba": "catalog:", "@opentelemetry/api": "^1.9.0", "@t3-oss/env-core": "0.13.10", "@xmldom/xmldom": "^0.8.10", "@zilliz/milvus2-sdk-node": "2.4.10", "axios": "catalog:", "bullmq": "^5.52.2", - "chalk": "^5.3.0", + "chalk": "catalog:", "cheerio": "1.0.0-rc.12", "cookie": "^0.7.1", "date-fns": "catalog:", @@ -42,14 +48,14 @@ "json5": "catalog:", "jsonpath-plus": "^10.3.0", "jsonrepair": "^3.0.0", - "jsonwebtoken": "^9.0.2", + "jsonwebtoken": "catalog:", "jszip": "^3.10.1", "lodash": "catalog:", "mammoth": "^1.11.0", "mime": "catalog:", "mime-types": "catalog:", "minio": "catalog:", - "mongoose": "^8.10.1", + "mongoose": "catalog:", "multer": "2.1.0", "mysql2": "^3.11.3", "next": "catalog:", @@ -64,7 +70,7 @@ "pino-opentelemetry-transport": "^1.0.1", "proxy-agent": "catalog:", "proxy-from-env": "^1.1.0", - "request-ip": "^3.3.0", + "request-ip": "catalog:", "tiktoken": "1.0.17", "tunnel": "^0.0.6", "turndown": "^7.1.2", @@ -76,7 +82,7 @@ "@types/async-retry": "^1.4.9", "@types/cookie": "^0.5.2", "@types/decompress": "^4.2.7", - "@types/jsonwebtoken": "^9.0.3", + "@types/jsonwebtoken": "catalog:", "@types/lodash": "catalog:", "@types/mime-types": "catalog:", "@types/multer": "^1.4.10", @@ -84,7 +90,7 @@ "@types/papaparse": "5.3.7", "@types/pg": "^8.6.6", "@types/proxy-from-env": "^1.0.4", - "@types/request-ip": "^0.0.37", + "@types/request-ip": "catalog:", "@types/tunnel": "^0.0.4", "@types/turndown": "^5.0.4" } diff --git a/test/cases/service/common/api/axios.test.ts b/packages/service/test/common/api/axios.test.ts similarity index 100% rename from test/cases/service/common/api/axios.test.ts rename to packages/service/test/common/api/axios.test.ts diff --git a/test/cases/service/common/api/pagination.test.ts b/packages/service/test/common/api/pagination.test.ts similarity index 100% rename from test/cases/service/common/api/pagination.test.ts rename to packages/service/test/common/api/pagination.test.ts diff --git a/test/cases/service/common/cache/index.test.ts b/packages/service/test/common/cache/index.test.ts similarity index 100% rename from test/cases/service/common/cache/index.test.ts rename to packages/service/test/common/cache/index.test.ts diff --git a/test/cases/service/common/cache/init.test.ts b/packages/service/test/common/cache/init.test.ts similarity index 100% rename from test/cases/service/common/cache/init.test.ts rename to packages/service/test/common/cache/init.test.ts diff --git a/test/cases/service/common/file/csv.test.ts b/packages/service/test/common/file/csv.test.ts similarity index 100% rename from test/cases/service/common/file/csv.test.ts rename to packages/service/test/common/file/csv.test.ts diff --git a/test/cases/service/common/file/gridfs/controller.test.ts b/packages/service/test/common/file/gridfs/controller.test.ts similarity index 100% rename from test/cases/service/common/file/gridfs/controller.test.ts rename to packages/service/test/common/file/gridfs/controller.test.ts diff --git a/test/cases/service/common/file/gridfs/utils.test.ts b/packages/service/test/common/file/gridfs/utils.test.ts similarity index 100% rename from test/cases/service/common/file/gridfs/utils.test.ts rename to packages/service/test/common/file/gridfs/utils.test.ts diff --git a/test/cases/service/common/file/image/controller.test.ts b/packages/service/test/common/file/image/controller.test.ts similarity index 100% rename from test/cases/service/common/file/image/controller.test.ts rename to packages/service/test/common/file/image/controller.test.ts diff --git a/test/cases/service/common/file/image/utils.test.ts b/packages/service/test/common/file/image/utils.test.ts similarity index 100% rename from test/cases/service/common/file/image/utils.test.ts rename to packages/service/test/common/file/image/utils.test.ts diff --git a/test/cases/service/common/file/multer.test.ts b/packages/service/test/common/file/multer.test.ts similarity index 100% rename from test/cases/service/common/file/multer.test.ts rename to packages/service/test/common/file/multer.test.ts diff --git a/test/cases/service/common/file/read/utils.test.ts b/packages/service/test/common/file/read/utils.test.ts similarity index 100% rename from test/cases/service/common/file/read/utils.test.ts rename to packages/service/test/common/file/read/utils.test.ts diff --git a/test/cases/service/common/file/utils.test.ts b/packages/service/test/common/file/utils.test.ts similarity index 100% rename from test/cases/service/common/file/utils.test.ts rename to packages/service/test/common/file/utils.test.ts diff --git a/test/cases/service/common/geo.test.ts b/packages/service/test/common/geo.test.ts similarity index 100% rename from test/cases/service/common/geo.test.ts rename to packages/service/test/common/geo.test.ts diff --git a/test/cases/service/common/geo/index.test.ts b/packages/service/test/common/geo/index.test.ts similarity index 100% rename from test/cases/service/common/geo/index.test.ts rename to packages/service/test/common/geo/index.test.ts diff --git a/test/cases/service/common/geo/utils.test.ts b/packages/service/test/common/geo/utils.test.ts similarity index 100% rename from test/cases/service/common/geo/utils.test.ts rename to packages/service/test/common/geo/utils.test.ts diff --git a/test/cases/service/common/s3/mime.test.ts b/packages/service/test/common/s3/mime.test.ts similarity index 100% rename from test/cases/service/common/s3/mime.test.ts rename to packages/service/test/common/s3/mime.test.ts diff --git a/test/cases/service/common/s3/token.test.ts b/packages/service/test/common/s3/token.test.ts similarity index 100% rename from test/cases/service/common/s3/token.test.ts rename to packages/service/test/common/s3/token.test.ts diff --git a/test/cases/service/common/s3/uploadConstraints.test.ts b/packages/service/test/common/s3/uploadConstraints.test.ts similarity index 100% rename from test/cases/service/common/s3/uploadConstraints.test.ts rename to packages/service/test/common/s3/uploadConstraints.test.ts diff --git a/test/cases/service/common/s3/uploadValidation.test.ts b/packages/service/test/common/s3/uploadValidation.test.ts similarity index 100% rename from test/cases/service/common/s3/uploadValidation.test.ts rename to packages/service/test/common/s3/uploadValidation.test.ts diff --git a/test/cases/service/common/s3/utils.test.ts b/packages/service/test/common/s3/utils.test.ts similarity index 100% rename from test/cases/service/common/s3/utils.test.ts rename to packages/service/test/common/s3/utils.test.ts diff --git a/test/cases/service/common/secret/aes256gcm.test.ts b/packages/service/test/common/secret/aes256gcm.test.ts similarity index 100% rename from test/cases/service/common/secret/aes256gcm.test.ts rename to packages/service/test/common/secret/aes256gcm.test.ts diff --git a/test/cases/service/common/secret/utils.test.ts b/packages/service/test/common/secret/utils.test.ts similarity index 100% rename from test/cases/service/common/secret/utils.test.ts rename to packages/service/test/common/secret/utils.test.ts diff --git a/test/cases/service/common/security/fileUrlValidator.test.ts b/packages/service/test/common/security/fileUrlValidator.test.ts similarity index 100% rename from test/cases/service/common/security/fileUrlValidator.test.ts rename to packages/service/test/common/security/fileUrlValidator.test.ts diff --git a/test/cases/service/common/system/utils.test.ts b/packages/service/test/common/system/utils.test.ts similarity index 100% rename from test/cases/service/common/system/utils.test.ts rename to packages/service/test/common/system/utils.test.ts diff --git a/test/cases/service/common/vectorDB/controller.test.ts b/packages/service/test/common/vectorDB/controller.test.ts similarity index 100% rename from test/cases/service/common/vectorDB/controller.test.ts rename to packages/service/test/common/vectorDB/controller.test.ts diff --git a/packages/service/test/core/ai/embedding.test.ts b/packages/service/test/core/ai/embedding.test.ts new file mode 100644 index 0000000000..859ab0ad06 --- /dev/null +++ b/packages/service/test/core/ai/embedding.test.ts @@ -0,0 +1,209 @@ +import { formatVectors } from '@fastgpt/service/core/ai/embedding/index'; +import { describe, expect, it, vi } from 'vitest'; + +describe('formatVectors function test', () => { + // Helper function to create a normalized vector (L2 norm = 1) + const createNormalizedVector = (length: number): number[] => { + const vector = Array.from({ length }, (_, i) => (i + 1) / length); + const norm = Math.sqrt(vector.reduce((sum, val) => sum + val * val, 0)); + return vector.map((val) => val / norm); + }; + + // Helper function to create an unnormalized vector + const createUnnormalizedVector = (length: number): number[] => { + return Array.from({ length }, (_, i) => (i + 1) * 10); + }; + + // Helper function to calculate L2 norm + const calculateNorm = (vector: number[]): number => { + return Math.sqrt(vector.reduce((sum, val) => sum + val * val, 0)); + }; + + // Helper function to check if vector is normalized (L2 norm H 1) + const isNormalized = (vector: number[]): boolean => { + const norm = calculateNorm(vector); + return Math.abs(norm - 1) < 1e-10; + }; + + describe('1536 dimension vectors', () => { + it('should handle normalized 1536-dim vector with normalization=true', () => { + const inputVector = createNormalizedVector(1536); + const result = formatVectors(inputVector, true); + + expect(result).toHaveLength(1536); + expect(isNormalized(result)).toBe(true); + // Since input is already normalized, result should be very similar + expect(result).toEqual( + expect.arrayContaining(inputVector.map((val) => expect.closeTo(val, 10))) + ); + }); + + it('should handle normalized 1536-dim vector with normalization=false', () => { + const inputVector = createNormalizedVector(1536); + const result = formatVectors(inputVector, false); + + expect(result).toHaveLength(1536); + expect(result).toEqual(inputVector); + expect(isNormalized(result)).toBe(true); + }); + + it('should handle unnormalized 1536-dim vector with normalization=true', () => { + const inputVector = createUnnormalizedVector(1536); + const result = formatVectors(inputVector, true); + + expect(result).toHaveLength(1536); + expect(isNormalized(result)).toBe(true); + // Result should be different from input (normalized) + expect(result).not.toEqual(inputVector); + }); + + it('should handle unnormalized 1536-dim vector with normalization=false', () => { + const inputVector = createUnnormalizedVector(1536); + const result = formatVectors(inputVector, false); + + expect(result).toHaveLength(1536); + expect(result).toEqual(inputVector); + expect(isNormalized(result)).toBe(false); + }); + }); + + describe('Greater than 1536 dimension vectors', () => { + it('should handle normalized >1536-dim vector with normalization=true', () => { + const inputVector = createNormalizedVector(2048); + const result = formatVectors(inputVector, true); + + expect(result).toHaveLength(1536); + expect(isNormalized(result)).toBe(true); + // Should be truncated to first 1536 elements and then normalized + expect(result).toEqual( + expect.arrayContaining(inputVector.slice(0, 1536).map((val) => expect.any(Number))) + ); + }); + + it('should handle normalized >1536-dim vector with normalization=false', () => { + const inputVector = createNormalizedVector(2048); + const result = formatVectors(inputVector, true); // Always normalized for >1536 dims + + expect(result).toHaveLength(1536); + expect(isNormalized(result)).toBe(true); + // Should be truncated and normalized regardless of normalization flag + }); + + it('should handle unnormalized >1536-dim vector with normalization=true', () => { + const inputVector = createUnnormalizedVector(2048); + const result = formatVectors(inputVector, true); + + expect(result).toHaveLength(1536); + expect(isNormalized(result)).toBe(true); + // Should be truncated to first 1536 elements and then normalized + }); + + it('should handle unnormalized >1536-dim vector with normalization=false', () => { + const inputVector = createUnnormalizedVector(2048); + const result = formatVectors(inputVector, false); // Always normalized for >1536 dims + + expect(result).toHaveLength(1536); + expect(isNormalized(result)).toBe(true); + // Should be truncated and normalized regardless of normalization flag + }); + }); + + describe('Less than 1536 dimension vectors', () => { + it('should handle normalized <1536-dim vector with normalization=true', () => { + const inputVector = createNormalizedVector(512); + const result = formatVectors(inputVector, true); + + expect(result).toHaveLength(1536); + expect(isNormalized(result)).toBe(true); + // First 512 elements should match input, rest should be 0 + expect(result.slice(0, 512)).toEqual( + expect.arrayContaining(inputVector.map((val) => expect.any(Number))) + ); + expect(result.slice(512)).toEqual(new Array(1024).fill(0)); + }); + + it('should handle normalized <1536-dim vector with normalization=false', () => { + const inputVector = createNormalizedVector(512); + const result = formatVectors(inputVector, false); + + expect(result).toHaveLength(1536); + // First 512 elements should match input exactly, rest should be 0 + expect(result.slice(0, 512)).toEqual(inputVector); + expect(result.slice(512)).toEqual(new Array(1024).fill(0)); + // The result remains normalized because adding zeros doesn't change the L2 norm + expect(isNormalized(result)).toBe(true); + }); + + it('should handle unnormalized <1536-dim vector with normalization=true', () => { + const inputVector = createUnnormalizedVector(512); + const result = formatVectors(inputVector, true); + + expect(result).toHaveLength(1536); + expect(isNormalized(result)).toBe(true); + // Should be padded with zeros and then normalized + expect(result.slice(512)).toEqual(new Array(1024).fill(0)); + }); + + it('should handle unnormalized <1536-dim vector with normalization=false', () => { + const inputVector = createUnnormalizedVector(512); + const result = formatVectors(inputVector, false); + + expect(result).toHaveLength(1536); + // First 512 elements should match input exactly, rest should be 0 + expect(result.slice(0, 512)).toEqual(inputVector); + expect(result.slice(512)).toEqual(new Array(1024).fill(0)); + expect(isNormalized(result)).toBe(false); + }); + + it('should demonstrate that padding preserves normalization status', () => { + // Create a vector that becomes unnormalized after some scaling + const baseVector = [3, 4]; // norm = 5, not normalized + const result = formatVectors(baseVector, false); + + expect(result).toHaveLength(1536); + expect(result[0]).toBe(3); + expect(result[1]).toBe(4); + expect(result.slice(2)).toEqual(new Array(1534).fill(0)); + expect(isNormalized(result)).toBe(false); + expect(calculateNorm(result)).toBeCloseTo(5, 10); + }); + }); + + describe('Edge cases', () => { + it('should handle zero vector', () => { + const inputVector = new Array(1536).fill(0); + const result = formatVectors(inputVector, true); + + expect(result).toHaveLength(1536); + expect(result).toEqual(inputVector); // Zero vector remains zero after normalization + }); + + it('should handle single element vector', () => { + const inputVector = [5.0]; + const result = formatVectors(inputVector, true); + + expect(result).toHaveLength(1536); + expect(result[0]).toBeCloseTo(1.0, 10); // Normalized single element should be 1 + expect(result.slice(1)).toEqual(new Array(1535).fill(0)); + }); + + it('should handle exactly 1536 dimension vector', () => { + const inputVector = createNormalizedVector(1536); + const result = formatVectors(inputVector, true); + + expect(result).toHaveLength(1536); + expect(isNormalized(result)).toBe(true); + }); + + it('should handle vector with negative values', () => { + const inputVector = [-1, -2, -3]; + const result = formatVectors(inputVector, true); + + expect(result).toHaveLength(1536); + expect(isNormalized(result)).toBe(true); + expect(result[0]).toBeLessThan(0); // Should preserve negative values + expect(result[1]).toBeLessThan(0); + expect(result[2]).toBeLessThan(0); + }); + }); +}); diff --git a/test/cases/service/core/ai/hooks/useTextCosine.test.ts b/packages/service/test/core/ai/hooks/useTextCosine.test.ts similarity index 99% rename from test/cases/service/core/ai/hooks/useTextCosine.test.ts rename to packages/service/test/core/ai/hooks/useTextCosine.test.ts index 6f4e09519b..9d8a216616 100644 --- a/test/cases/service/core/ai/hooks/useTextCosine.test.ts +++ b/packages/service/test/core/ai/hooks/useTextCosine.test.ts @@ -6,7 +6,7 @@ import { generateSimilarVector, generateOrthogonalVector, mockGetVectorsByText -} from '../../../../../mocks/core/ai/embedding'; +} from '@test/mocks/core/ai/embedding'; describe('useTextCosine', () => { beforeEach(() => { diff --git a/test/cases/service/core/ai/llm/request.test.ts b/packages/service/test/core/ai/llm/request.test.ts similarity index 100% rename from test/cases/service/core/ai/llm/request.test.ts rename to packages/service/test/core/ai/llm/request.test.ts diff --git a/test/cases/service/core/ai/llm/toolCall.test.ts b/packages/service/test/core/ai/llm/toolCall.test.ts similarity index 100% rename from test/cases/service/core/ai/llm/toolCall.test.ts rename to packages/service/test/core/ai/llm/toolCall.test.ts diff --git a/test/cases/service/core/ai/llm/utils.test.ts b/packages/service/test/core/ai/llm/utils.test.ts similarity index 100% rename from test/cases/service/core/ai/llm/utils.test.ts rename to packages/service/test/core/ai/llm/utils.test.ts diff --git a/test/cases/service/core/ai/rerank/index.test.ts b/packages/service/test/core/ai/rerank/index.test.ts similarity index 100% rename from test/cases/service/core/ai/rerank/index.test.ts rename to packages/service/test/core/ai/rerank/index.test.ts diff --git a/test/cases/service/core/ai/sandbox/constants.test.ts b/packages/service/test/core/ai/sandbox/constants.test.ts similarity index 100% rename from test/cases/service/core/ai/sandbox/constants.test.ts rename to packages/service/test/core/ai/sandbox/constants.test.ts diff --git a/test/cases/service/core/ai/sandbox/controller.test.ts b/packages/service/test/core/ai/sandbox/controller.test.ts similarity index 100% rename from test/cases/service/core/ai/sandbox/controller.test.ts rename to packages/service/test/core/ai/sandbox/controller.test.ts diff --git a/test/cases/service/core/ai/sandbox/sandbox.integration.test.ts b/packages/service/test/core/ai/sandbox/sandbox.integration.test.ts similarity index 100% rename from test/cases/service/core/ai/sandbox/sandbox.integration.test.ts rename to packages/service/test/core/ai/sandbox/sandbox.integration.test.ts diff --git a/packages/service/test/core/ai/sandbox/schema.test.ts b/packages/service/test/core/ai/sandbox/schema.test.ts new file mode 100644 index 0000000000..1fbc995d33 --- /dev/null +++ b/packages/service/test/core/ai/sandbox/schema.test.ts @@ -0,0 +1,22 @@ +import { describe, expect, it } from 'vitest'; +import { MongoSandboxInstance } from '@fastgpt/service/core/ai/sandbox/schema'; + +describe('MongoSandboxInstance schema indexes', () => { + it('uses a Mongo-compatible partial index for chat sandbox uniqueness', () => { + const indexes = MongoSandboxInstance.schema.indexes(); + const targetIndex = indexes.find( + ([keys]) => keys.appId === 1 && keys.userId === 1 && keys.chatId === 1 + ); + + expect(targetIndex).toBeDefined(); + expect(targetIndex?.[1]).toMatchObject({ + unique: true, + partialFilterExpression: { + appId: { $exists: true }, + userId: { $exists: true }, + chatId: { $exists: true } + } + }); + expect(JSON.stringify(targetIndex?.[1] ?? {})).not.toContain('$ne'); + }); +}); diff --git a/test/cases/service/core/ai/utils.test.ts b/packages/service/test/core/ai/utils.test.ts similarity index 100% rename from test/cases/service/core/ai/utils.test.ts rename to packages/service/test/core/ai/utils.test.ts diff --git a/test/cases/service/core/app/http.test.ts b/packages/service/test/core/app/http.test.ts similarity index 100% rename from test/cases/service/core/app/http.test.ts rename to packages/service/test/core/app/http.test.ts diff --git a/test/cases/service/core/app/mcp.test.ts b/packages/service/test/core/app/mcp.test.ts similarity index 100% rename from test/cases/service/core/app/mcp.test.ts rename to packages/service/test/core/app/mcp.test.ts diff --git a/test/cases/service/core/chat/controller.test.ts b/packages/service/test/core/chat/controller.test.ts similarity index 100% rename from test/cases/service/core/chat/controller.test.ts rename to packages/service/test/core/chat/controller.test.ts diff --git a/test/cases/service/core/chat/saveChat.test.ts b/packages/service/test/core/chat/saveChat.test.ts similarity index 100% rename from test/cases/service/core/chat/saveChat.test.ts rename to packages/service/test/core/chat/saveChat.test.ts diff --git a/test/cases/service/core/dataset/search/utils.test.ts b/packages/service/test/core/dataset/search/utils.test.ts similarity index 100% rename from test/cases/service/core/dataset/search/utils.test.ts rename to packages/service/test/core/dataset/search/utils.test.ts diff --git a/test/cases/service/core/dataset/textSplitter.test.ts b/packages/service/test/core/dataset/textSplitter.test.ts similarity index 100% rename from test/cases/service/core/dataset/textSplitter.test.ts rename to packages/service/test/core/dataset/textSplitter.test.ts diff --git a/test/cases/service/core/dataset/utils.test.ts b/packages/service/test/core/dataset/utils.test.ts similarity index 100% rename from test/cases/service/core/dataset/utils.test.ts rename to packages/service/test/core/dataset/utils.test.ts diff --git a/test/cases/service/core/workflow/dispatch/ai/agent/capability/sandboxSkills.test.ts b/packages/service/test/core/workflow/dispatch/ai/agent/capability/sandboxSkills.test.ts similarity index 100% rename from test/cases/service/core/workflow/dispatch/ai/agent/capability/sandboxSkills.test.ts rename to packages/service/test/core/workflow/dispatch/ai/agent/capability/sandboxSkills.test.ts diff --git a/test/cases/service/core/workflow/dispatch/checkNodeRunStatus/base.test.ts b/packages/service/test/core/workflow/dispatch/checkNodeRunStatus/base.test.ts similarity index 100% rename from test/cases/service/core/workflow/dispatch/checkNodeRunStatus/base.test.ts rename to packages/service/test/core/workflow/dispatch/checkNodeRunStatus/base.test.ts diff --git a/test/cases/service/core/workflow/dispatch/checkNodeRunStatus/boundary.test.ts b/packages/service/test/core/workflow/dispatch/checkNodeRunStatus/boundary.test.ts similarity index 100% rename from test/cases/service/core/workflow/dispatch/checkNodeRunStatus/boundary.test.ts rename to packages/service/test/core/workflow/dispatch/checkNodeRunStatus/boundary.test.ts diff --git a/test/cases/service/core/workflow/dispatch/checkNodeRunStatus/case.test.ts b/packages/service/test/core/workflow/dispatch/checkNodeRunStatus/case.test.ts similarity index 100% rename from test/cases/service/core/workflow/dispatch/checkNodeRunStatus/case.test.ts rename to packages/service/test/core/workflow/dispatch/checkNodeRunStatus/case.test.ts diff --git a/test/cases/service/core/workflow/dispatch/checkNodeRunStatus/safe.test.ts b/packages/service/test/core/workflow/dispatch/checkNodeRunStatus/safe.test.ts similarity index 100% rename from test/cases/service/core/workflow/dispatch/checkNodeRunStatus/safe.test.ts rename to packages/service/test/core/workflow/dispatch/checkNodeRunStatus/safe.test.ts diff --git a/test/cases/service/core/workflow/dispatch/checkNodeRunStatus/toolcall.test.ts b/packages/service/test/core/workflow/dispatch/checkNodeRunStatus/toolcall.test.ts similarity index 100% rename from test/cases/service/core/workflow/dispatch/checkNodeRunStatus/toolcall.test.ts rename to packages/service/test/core/workflow/dispatch/checkNodeRunStatus/toolcall.test.ts diff --git a/test/cases/service/core/workflow/dispatch/index.test.ts b/packages/service/test/core/workflow/dispatch/index.test.ts similarity index 100% rename from test/cases/service/core/workflow/dispatch/index.test.ts rename to packages/service/test/core/workflow/dispatch/index.test.ts diff --git a/test/cases/service/core/workflow/dispatch/loop/service.test.ts b/packages/service/test/core/workflow/dispatch/loop/service.test.ts similarity index 100% rename from test/cases/service/core/workflow/dispatch/loop/service.test.ts rename to packages/service/test/core/workflow/dispatch/loop/service.test.ts diff --git a/test/cases/service/core/workflow/dispatch/parallelRun/service.test.ts b/packages/service/test/core/workflow/dispatch/parallelRun/service.test.ts similarity index 100% rename from test/cases/service/core/workflow/dispatch/parallelRun/service.test.ts rename to packages/service/test/core/workflow/dispatch/parallelRun/service.test.ts diff --git a/test/cases/service/core/workflow/dispatch/tools/http.test.ts b/packages/service/test/core/workflow/dispatch/tools/http.test.ts similarity index 100% rename from test/cases/service/core/workflow/dispatch/tools/http.test.ts rename to packages/service/test/core/workflow/dispatch/tools/http.test.ts diff --git a/test/cases/service/core/workflow/dispatch/tools/runTool.test.ts b/packages/service/test/core/workflow/dispatch/tools/runTool.test.ts similarity index 100% rename from test/cases/service/core/workflow/dispatch/tools/runTool.test.ts rename to packages/service/test/core/workflow/dispatch/tools/runTool.test.ts diff --git a/test/cases/service/core/workflow/dispatch/tools/runUpdateVar.test.ts b/packages/service/test/core/workflow/dispatch/tools/runUpdateVar.test.ts similarity index 100% rename from test/cases/service/core/workflow/dispatch/tools/runUpdateVar.test.ts rename to packages/service/test/core/workflow/dispatch/tools/runUpdateVar.test.ts diff --git a/test/cases/service/core/workflow/dispatch/utils.test.ts b/packages/service/test/core/workflow/dispatch/utils.test.ts similarity index 100% rename from test/cases/service/core/workflow/dispatch/utils.test.ts rename to packages/service/test/core/workflow/dispatch/utils.test.ts diff --git a/test/cases/service/core/workflow/loopTest.json b/packages/service/test/core/workflow/loopTest.json similarity index 100% rename from test/cases/service/core/workflow/loopTest.json rename to packages/service/test/core/workflow/loopTest.json diff --git a/test/cases/service/core/workflow/simple.json b/packages/service/test/core/workflow/simple.json similarity index 100% rename from test/cases/service/core/workflow/simple.json rename to packages/service/test/core/workflow/simple.json diff --git a/test/cases/service/core/workflow/utils.ts b/packages/service/test/core/workflow/utils.ts similarity index 100% rename from test/cases/service/core/workflow/utils.ts rename to packages/service/test/core/workflow/utils.ts diff --git a/test/cases/service/core/workflow/utils/context.test.ts b/packages/service/test/core/workflow/utils/context.test.ts similarity index 100% rename from test/cases/service/core/workflow/utils/context.test.ts rename to packages/service/test/core/workflow/utils/context.test.ts diff --git a/test/cases/service/core/workflow/utils/index.test.ts b/packages/service/test/core/workflow/utils/index.test.ts similarity index 100% rename from test/cases/service/core/workflow/utils/index.test.ts rename to packages/service/test/core/workflow/utils/index.test.ts diff --git a/test/cases/service/core/workflow/utils/tarjan.test.ts b/packages/service/test/core/workflow/utils/tarjan.test.ts similarity index 100% rename from test/cases/service/core/workflow/utils/tarjan.test.ts rename to packages/service/test/core/workflow/utils/tarjan.test.ts diff --git a/test/cases/service/core/workflow/workflowStatus.test.ts b/packages/service/test/core/workflow/workflowStatus.test.ts similarity index 100% rename from test/cases/service/core/workflow/workflowStatus.test.ts rename to packages/service/test/core/workflow/workflowStatus.test.ts diff --git a/packages/service/test/integrations/README.md b/packages/service/test/integrations/README.md new file mode 100644 index 0000000000..7fb6a03c1f --- /dev/null +++ b/packages/service/test/integrations/README.md @@ -0,0 +1,3 @@ +# Service Integration Tests + +- `vectorDB/`: real vector database integration tests and local compose files diff --git a/packages/service/test/integrations/vectorDB/README.md b/packages/service/test/integrations/vectorDB/README.md new file mode 100644 index 0000000000..b55aabc48d --- /dev/null +++ b/packages/service/test/integrations/vectorDB/README.md @@ -0,0 +1,45 @@ +# 向量数据库集成测试 + +对 FastGPT 各向量库控制器(PGVector、后续 Oceanbase/Milvus)做真实环境下的集成测试,保证向量相关操作兼容和稳定。采用**工厂模式**:同一套数据集和同一套用例驱动多个向量库测试。 + +## 环境变量 + +测试环境变量由 **test/.env.test.local** 提供(不提交到 git)。请复制模板并填写: + +```bash +cp test/.env.example test/.env.test.local +# 编辑 test/.env.test.local,填入 PG_URL 等 +``` + +`setup.ts` 会在测试启动时读取 `test/.env.test.local` 并注入到 `process.env`。 + +| 变量 | 说明 | 适用驱动 | +|------|------|----------| +| `PG_URL` | PostgreSQL + pgvector 连接串 | PgVectorCtrl | +| `OCEANBASE_URL` | Oceanbase 连接串(后续) | ObVectorCtrl | +| `MILVUS_ADDRESS` | Milvus 地址(后续) | MilvusCtrl | + +未设置对应环境变量时,该驱动的集成测试会**整体跳过**,不会报错。 + +## 运行方式 + +在项目根目录执行: + +```bash +# 仅运行 workspace 默认测试(不包含 integration) +pnpm test + +# 运行 service integration tests +pnpm test:service:integration + +# 运行当前这组 vectorDB 集成测试 +pnpm test:vector +``` + +## 结构说明 + +- `testData.ts`:统一测试数据(1536 维 `TEST_VECTORS` 等),所有向量库共用。 +- `testSuites.ts`:工厂函数 `createVectorDBTestSuite(vectorCtrl)`,同一套用例供各驱动复用。 +- `*/index.integration.test.ts`:各向量库入口,按环境变量决定是否跳过。 + +新增向量库时:新增一个 `*/index.integration.test.ts`,复用 `testData.ts` 和 `testSuites.ts` 即可。 diff --git a/test/integrationTest/vectorDB/milvus/index.integration.test.ts b/packages/service/test/integrations/vectorDB/milvus/index.integration.test.ts similarity index 100% rename from test/integrationTest/vectorDB/milvus/index.integration.test.ts rename to packages/service/test/integrations/vectorDB/milvus/index.integration.test.ts diff --git a/test/integrationTest/vectorDB/oceanbase/index.integration.test.ts b/packages/service/test/integrations/vectorDB/oceanbase/index.integration.test.ts similarity index 100% rename from test/integrationTest/vectorDB/oceanbase/index.integration.test.ts rename to packages/service/test/integrations/vectorDB/oceanbase/index.integration.test.ts diff --git a/test/integrationTest/vectorDB/pg/index.integration.test.ts b/packages/service/test/integrations/vectorDB/pg/index.integration.test.ts similarity index 100% rename from test/integrationTest/vectorDB/pg/index.integration.test.ts rename to packages/service/test/integrations/vectorDB/pg/index.integration.test.ts diff --git a/test/integrationTest/vectorDB/seekdb/index.integration.test.ts b/packages/service/test/integrations/vectorDB/seekdb/index.integration.test.ts similarity index 100% rename from test/integrationTest/vectorDB/seekdb/index.integration.test.ts rename to packages/service/test/integrations/vectorDB/seekdb/index.integration.test.ts diff --git a/test/integrationTest/vectorDB/testData.ts b/packages/service/test/integrations/vectorDB/testData.ts similarity index 100% rename from test/integrationTest/vectorDB/testData.ts rename to packages/service/test/integrations/vectorDB/testData.ts diff --git a/test/integrationTest/vectorDB/testSuites.ts b/packages/service/test/integrations/vectorDB/testSuites.ts similarity index 100% rename from test/integrationTest/vectorDB/testSuites.ts rename to packages/service/test/integrations/vectorDB/testSuites.ts diff --git a/test/integrationTest/vectorDB/yml/docker-compose.yml b/packages/service/test/integrations/vectorDB/yml/docker-compose.yml similarity index 100% rename from test/integrationTest/vectorDB/yml/docker-compose.yml rename to packages/service/test/integrations/vectorDB/yml/docker-compose.yml diff --git a/test/cases/service/support/mcp/utils.test.ts b/packages/service/test/support/mcp/utils.test.ts similarity index 100% rename from test/cases/service/support/mcp/utils.test.ts rename to packages/service/test/support/mcp/utils.test.ts diff --git a/test/cases/service/support/permission/controller.test.ts b/packages/service/test/support/permission/controller.test.ts similarity index 100% rename from test/cases/service/support/permission/controller.test.ts rename to packages/service/test/support/permission/controller.test.ts diff --git a/test/cases/service/support/permission/inheritPermission.test.ts b/packages/service/test/support/permission/inheritPermission.test.ts similarity index 100% rename from test/cases/service/support/permission/inheritPermission.test.ts rename to packages/service/test/support/permission/inheritPermission.test.ts diff --git a/test/cases/service/support/permission/teamLimit.test.ts b/packages/service/test/support/permission/teamLimit.test.ts similarity index 100% rename from test/cases/service/support/permission/teamLimit.test.ts rename to packages/service/test/support/permission/teamLimit.test.ts diff --git a/test/cases/service/support/wallet/sub/utils.test.ts b/packages/service/test/support/wallet/sub/utils.test.ts similarity index 100% rename from test/cases/service/support/wallet/sub/utils.test.ts rename to packages/service/test/support/wallet/sub/utils.test.ts diff --git a/packages/service/test/tsconfig.json b/packages/service/test/tsconfig.json new file mode 100644 index 0000000000..d397f9a8e1 --- /dev/null +++ b/packages/service/test/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "baseUrl": "..", + "paths": { + "@/*": ["../../projects/app/src/*"], + "@fastgpt-sdk/logger": ["../../sdk/logger/src/index.ts"], + "@fastgpt-sdk/storage": ["../../sdk/storage/src/index.ts"], + "@fastgpt-sdk/otel": ["../../sdk/otel/src/index.ts"], + "@fastgpt-sdk/otel/logger": ["../../sdk/otel/src/logger-entry.ts"], + "@fastgpt-sdk/otel/metrics": ["../../sdk/otel/src/metrics-entry.ts"], + "@fastgpt-sdk/otel/tracing": ["../../sdk/otel/src/tracing-entry.ts"], + "@fastgpt/*": ["../../packages/*"], + "@test/*": ["../../test/*"] + } + }, + "include": ["**/*.test.ts", "../**/*.ts", "../**/*.tsx", "../../test/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/test/cases/service/worker/htmlStr2Md.test.ts b/packages/service/test/worker/htmlStr2Md.test.ts similarity index 100% rename from test/cases/service/worker/htmlStr2Md.test.ts rename to packages/service/test/worker/htmlStr2Md.test.ts diff --git a/packages/service/vitest.config.ts b/packages/service/vitest.config.ts new file mode 100644 index 0000000000..eb11331119 --- /dev/null +++ b/packages/service/vitest.config.ts @@ -0,0 +1,57 @@ +import { resolve } from 'node:path'; +import { configDefaults, defineConfig } from 'vitest/config'; + +export default defineConfig({ + resolve: { + alias: { + '@': resolve('../../projects/app/src'), + '@fastgpt-sdk/logger': resolve('../../sdk/logger/src/index.ts'), + '@fastgpt-sdk/storage': resolve('../../sdk/storage/src/index.ts'), + '@fastgpt-sdk/otel/logger': resolve('../../sdk/otel/src/logger-entry.ts'), + '@fastgpt-sdk/otel/metrics': resolve('../../sdk/otel/src/metrics-entry.ts'), + '@fastgpt-sdk/otel/tracing': resolve('../../sdk/otel/src/tracing-entry.ts'), + '@fastgpt-sdk/otel': resolve('../../sdk/otel/src/index.ts'), + '@fastgpt': resolve('..'), + '@test': resolve('../../test') + } + }, + test: { + env: { + FILE_TOKEN_KEY: + process.env.FILE_TOKEN_KEY ?? + 'bfd697e7e798f75deaf2d31210bc93a2e41ad4eed9e7831071d77821b7b97cff' + }, + coverage: { + enabled: true, + reporter: ['text', 'text-summary', 'html', 'json-summary', 'json'], + reportOnFailure: true, + include: ['common/**/*.ts', 'core/**/*.ts', 'support/**/*.ts', 'worker/**/*.ts'], + exclude: [ + '**/node_modules/**', + '**/*.spec.ts', + '**/*/*.d.ts', + '**/test/**', + '**/*.test.ts', + '**/*/constants.ts', + '**/*/*.const.ts', + '**/*/type.ts', + '**/*/types.ts', + '**/*/type/*', + '**/*/schema.ts', + '**/*/*.schema.ts' + ], + cleanOnRerun: false + }, + outputFile: 'test-results.json', + setupFiles: '../../test/setup.ts', + globalSetup: '../../test/globalSetup.ts', + fileParallelism: false, + maxConcurrency: 10, + pool: 'threads', + testTimeout: 20000, + hookTimeout: 30000, + exclude: [...configDefaults.exclude, 'test/integrations/**/*.test.ts'], + reporters: ['github-actions', 'default'], + include: ['test/**/*.test.ts'] + } +}); diff --git a/packages/service/vitest.integration.config.ts b/packages/service/vitest.integration.config.ts new file mode 100644 index 0000000000..66d62fe232 --- /dev/null +++ b/packages/service/vitest.integration.config.ts @@ -0,0 +1,32 @@ +import { resolve } from 'node:path'; +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + resolve: { + alias: { + '@': resolve('../../projects/app/src'), + '@fastgpt': resolve('..'), + '@test': resolve('../../test') + } + }, + test: { + env: { + FILE_TOKEN_KEY: + process.env.FILE_TOKEN_KEY ?? + 'bfd697e7e798f75deaf2d31210bc93a2e41ad4eed9e7831071d77821b7b97cff' + }, + coverage: { + enabled: false + }, + outputFile: 'test-results.integration.json', + setupFiles: '../../test/setup.ts', + globalSetup: '../../test/globalSetup.ts', + fileParallelism: false, + maxConcurrency: 10, + pool: 'threads', + testTimeout: 20000, + hookTimeout: 30000, + reporters: ['github-actions', 'default'], + include: ['test/integrations/**/*.integration.test.ts'] + } +}); diff --git a/packages/service/worker/utils.ts b/packages/service/worker/utils.ts index df545aa7dc..8232e36ea9 100644 --- a/packages/service/worker/utils.ts +++ b/packages/service/worker/utils.ts @@ -1,4 +1,4 @@ -import { Worker } from 'worker_threads'; +import type { Worker as NodeWorker } from 'worker_threads'; import path from 'path'; import { getLogger, LogCategories } from '../common/logger'; @@ -20,13 +20,20 @@ export const getSafeEnv = () => { }; }; -export const getWorker = (name: `${WorkerNameEnum}`) => { - const workerPath = path.join(process.cwd(), 'worker', `${name}.js`); +const createNodeWorker = (workerPath: string) => { + const nodeRequire = eval('require') as (id: string) => typeof import('worker_threads'); + const { Worker } = nodeRequire('worker_threads'); + return new Worker(workerPath, { env: getSafeEnv() }); }; +export const getWorker = (name: `${WorkerNameEnum}`) => { + const workerPath = path.join(process.cwd(), 'worker', `${name}.js`); + return createNodeWorker(workerPath); +}; + export const runWorker = (name: WorkerNameEnum, params?: Record) => { const logger = getLogger(LogCategories.INFRA.WORKER); return new Promise((resolve, reject) => { @@ -60,7 +67,7 @@ export const runWorker = (name: WorkerNameEnum, params?: Record = { data: T; resolve: (e: any) => void; reject: (e: any) => void }; type WorkerQueueItem = { id: string; - worker: Worker; + worker: NodeWorker; status: 'running' | 'idle'; taskTime: number; timeoutId?: NodeJS.Timeout; diff --git a/packages/web/components/common/DndDrag/index.tsx b/packages/web/components/common/DndDrag/index.tsx index 153d358a92..7997c5fc5c 100644 --- a/packages/web/components/common/DndDrag/index.tsx +++ b/packages/web/components/common/DndDrag/index.tsx @@ -2,14 +2,29 @@ import { Box, Tbody } from '@chakra-ui/react'; import React, { type ReactElement, type ReactNode, useState } from 'react'; import { DragDropContext, + Draggable, Droppable, type DraggableChildrenFn, + type DraggableProvided, + type DraggableStateSnapshot, type DragStart, type DropResult, type DroppableProvided, - type DroppableStateSnapshot + type DroppableStateSnapshot, + type Omit } from 'react-beautiful-dnd'; -export * from 'react-beautiful-dnd'; + +export { Draggable }; +export type { + DraggableChildrenFn, + DraggableProvided, + DraggableStateSnapshot, + DragStart, + DropResult, + DroppableProvided, + DroppableStateSnapshot, + Omit +}; type Props = { onDragEndCb: (result: T[]) => void; diff --git a/packages/web/i18n/en/account_team.json b/packages/web/i18n/en/account_team.json index 6221941d0b..03fb8ed123 100644 --- a/packages/web/i18n/en/account_team.json +++ b/packages/web/i18n/en/account_team.json @@ -200,18 +200,6 @@ "log_update_dataset": "【{{name}}】Updated [{{datasetType}}] named [{{datasetName}}]", "log_update_dataset_collaborator": "[{{name}}] Updated the collaborator named [{{datasetName}}] to: Organization: [{{orgList}}], Group: [{{groupList}}], Member [{{tmbList}}]; permissions updated to: [{{readPermission}}], [{{writePermission}}], [{{managePermission}}]", "log_update_publish_app": "【{{name}}】【{{operationName}}】【{{appType}}】 named [{{appName}}】", - "log_create_skill": "[{{name}}] Created a skill named [{{skillName}}]", - "log_create_skill_folder": "[{{name}}] Created a skill folder named [{{folderName}}]", - "log_delete_skill": "[{{name}}] Deleted the skill named [{{skillName}}]", - "log_deploy_skill": "[{{name}}] Deployed the skill named [{{skillName}}]", - "log_import_skill": "[{{name}}] Imported a skill named [{{skillName}}]", - "log_export_skill": "[{{name}}] Exported a skill named [{{skillName}}]", - "log_copy_skill": "[{{name}}] Copied a skill named [{{skillName}}]", - "log_move_skill": "[{{name}}] Moved a skill named [{{skillName}}] to [{{targetFolderName}}]", - "log_update_skill_collaborator": "[{{name}}] Updated collaborators of [{{skillType}}] [{{skillName}}] to: Organizations: [{{orgList}}], Groups: [{{groupList}}], Members: [{{tmbList}}]; Permission: [{{permission}}]", - "log_delete_skill_collaborator": "[{{name}}] Deleted collaborator [{{itemName}}]: [{{itemValueName}}] from [{{skillType}}] [{{skillName}}]", - "log_transfer_skill_ownership": "[{{name}}] Transferred ownership of skill [{{skillName}}] to [{{newOwnerName}}]", - "log_update_skill": "[{{name}}] Updated the skill named [{{skillName}}]", "log_user": "Operator", "login": "Log in", "manage_member": "Managing members", @@ -250,12 +238,15 @@ "search_test": "Search Test", "set_invoice_header": "Set up invoice header", "set_name_avatar": "Team avatar", + "skill.folder": "Folder", + "skill.skill": "Skill", "sync_immediately": "Synchronize now", "sync_member_failed": "Synchronization of members failed", "sync_member_success": "Synchronize members successfully", "total_team_members": "Total {{amount}} members", "transfer_app_ownership": "Transfer app ownership", "transfer_dataset_ownership": "Transfer dataset ownership", + "transfer_skill_ownership": "Transfer skill ownership", "transfer_ownership": "Transfer ownership", "transfer_team_ownership": "Transfer Team", "transfer_success": "Transfer successful", @@ -277,21 +268,33 @@ "update_dataset": "Update the knowledge base", "update_dataset_collaborator": "Knowledge Base Permission Changes", "update_publish_app": "Application update", - "create_skill": "Create skill", - "create_skill_folder": "Create skill folder", - "delete_skill": "Delete skill", - "deploy_skill": "Deploy skill", - "import_skill": "Import skill", - "export_skill": "Export skill", - "copy_skill": "Copy skill", - "move_skill": "Move skill", "update_skill_collaborator": "Update skill collaborator", - "delete_skill_collaborator": "Delete skill collaborator", - "transfer_skill_ownership": "Transfer skill ownership", "update_skill": "Update skill", "used_times_limit": "Limit", "user_name": "username", "user_team_invite_member": "Invite members", "user_team_leave_team": "Leave the team", - "user_team_leave_team_failed": "Failure to leave the team" + "user_team_leave_team_failed": "Failure to leave the team", + "waiting": "To be accepted", + "copy_skill": "Copy skill", + "create_skill": "Create skill", + "create_skill_folder": "Create skill folder", + "delete_skill": "Delete skill", + "delete_skill_collaborator": "Skill permission deletion", + "deploy_skill": "Deploy skill", + "export_skill": "Export skill", + "import_skill": "Import skill", + "log_copy_skill": "[{{name}}] Copied [{{skillType}}] named [{{skillName}}]", + "log_create_skill": "[{{name}}] Created [{{skillType}}] named [{{skillName}}]", + "log_create_skill_folder": "[{{name}}] Created a skill folder named [{{folderName}}]", + "log_delete_skill": "[{{name}}] Deleted [{{skillType}}] named [{{skillName}}]", + "log_delete_skill_collaborator": "[{{name}}] Deleted the [{{itemName}}] permission named [{{itemValueName}}] from [{{skillType}}] named [{{skillName}}]", + "log_deploy_skill": "[{{name}}] Deployed [{{skillType}}] named [{{skillName}}]", + "log_export_skill": "[{{name}}] Exported [{{skillType}}] named [{{skillName}}]", + "log_import_skill": "[{{name}}] Imported [{{skillType}}] named [{{skillName}}]", + "log_move_skill": "[{{name}}] Moved [{{skillType}}] named [{{skillName}}] to [{{targetFolderName}}]", + "log_transfer_skill_ownership": "[{{name}}] Transferred ownership of [{{skillType}}] named [{{skillName}}] from [{{oldOwnerName}}] to [{{newOwnerName}}]", + "log_update_skill": "[{{name}}] Updated [{{skillType}}] named [{{skillName}}]", + "log_update_skill_collaborator": "[{{name}}] Updated collaborators for [{{skillType}}] named [{{skillName}}] to: Organization: [{{orgList}}], Group: [{{groupList}}], Member [{{tmbList}}]; permissions updated to: [{{permission}}]", + "move_skill": "Move skill" } diff --git a/packages/web/i18n/zh-CN/account_team.json b/packages/web/i18n/zh-CN/account_team.json index 175ae2a104..51b27fa182 100644 --- a/packages/web/i18n/zh-CN/account_team.json +++ b/packages/web/i18n/zh-CN/account_team.json @@ -56,8 +56,6 @@ "create_invitation_link": "创建邀请链接", "create_invoice": "开发票", "create_org": "创建部门", - "create_skill": "创建技能", - "create_skill_folder": "创建技能文件夹", "create_sub_org": "创建子部门", "dataset.api_file": "API 知识库", "dataset.common_dataset": "知识库", @@ -66,8 +64,6 @@ "dataset.folder_dataset": "文件夹", "dataset.website_dataset": "网站同步", "dataset.yuque_dataset": "语雀知识库", - "skill.folder": "技能文件夹", - "skill.skill": "技能", "delete": "删除", "delete_api_key": "删除api密钥", "delete_app": "删除工作台应用", @@ -83,7 +79,6 @@ "delete_from_team": "移出团队", "delete_group": "删除群组", "delete_org": "删除部门", - "delete_skill": "删除技能", "department": "部门", "edit_info": "编辑信息", "edit_member": "编辑用户", @@ -163,8 +158,6 @@ "log_create_group": "【{{name}}】创建了群组【{{groupName}}】", "log_create_invitation_link": "【{{name}}】创建了邀请链接【{{link}}】", "log_create_invoice": "【{{name}}】进行了开发票操作", - "log_create_skill": "【{{name}}】创建了名为【{{skillName}}】的技能", - "log_create_skill_folder": "【{{name}}】创建了名为【{{folderName}}】的技能文件夹", "log_delete_api_key": "【{{name}}】删除了名为【{{keyName}}】的api密钥", "log_delete_app": "【{{name}}】将名为【{{appName}}】的【{{appType}}】删除", "log_delete_app_collaborator": "【{{name}}】将名为【{{appName}}】的【{{appType}}】中名为【{{itemValueName}}】的【{{itemName}}】权限删除", @@ -175,7 +168,6 @@ "log_delete_dataset_collaborator": "【{{name}}】将名为【{{datasetName}}】的【{{datasetType}}】中名为【itemValueName】的【itemName】权限删除", "log_delete_department": "【{{name}}】删除了部门【{{departmentName}}】", "log_delete_evaluation": "【{{name}}】删除了名为【{{appName}}】的【{{appType}}】的评测数据", - "log_delete_skill": "【{{name}}】删除了名为【{{skillName}}】的技能", "log_delete_group": "【{{name}}】删除了群组【{{groupName}}】", "log_details": "详情", "log_export_app_chat_log": "【{{name}}】导出了名为【{{appName}}】的【{{appType}}】的聊天记录", @@ -206,15 +198,6 @@ "log_update_dataset": "【{{name}}】更新了名为【{{datasetName}}】的【{{datasetType}}】", "log_update_dataset_collaborator": "【{{name}}】将名为【{{datasetName}}】的【{{datasetType}}】的合作者更新为:组织:【{{orgList}}】,群组:【{{groupList}}】,成员【{{tmbList}}】;权限更新为:【{{readPermission}}】,【{{writePermission}}】,【{{managePermission}}】", "log_update_publish_app": "【{{name}}】【{{operationName}}】名为【{{appName}}】的【{{appType}}】", - "log_update_skill": "【{{name}}】更新了名为【{{skillName}}】的技能", - "log_deploy_skill": "【{{name}}】发布了名为【{{skillName}}】的技能", - "log_import_skill": "【{{name}}】导入了名为【{{skillName}}】的技能", - "log_export_skill": "【{{name}}】导出了名为【{{skillName}}】的技能", - "log_copy_skill": "【{{name}}】复制了名为【{{skillName}}】的技能", - "log_move_skill": "【{{name}}】将名为【{{skillName}}】的技能移动到【{{targetFolderName}}】", - "log_update_skill_collaborator": "【{{name}}】将名为【{{skillName}}】的【{{skillType}}】的协作者更新为:组织:【{{orgList}}】,群组:【{{groupList}}】,成员【{{tmbList}}】;权限更新为:【{{permission}}】", - "log_delete_skill_collaborator": "【{{name}}】删除了名为【{{skillName}}】的【{{skillType}}】的协作者【{{itemName}}】:【{{itemValueName}}】", - "log_transfer_skill_ownership": "【{{name}}】将名为【{{skillName}}】的技能所有权转移给了【{{newOwnerName}}】", "log_user": "操作人员", "login": "登录", "manage_member": "管理成员", @@ -253,12 +236,15 @@ "search_test": "搜索测试", "set_invoice_header": "设置发票抬头", "set_name_avatar": "团队头像 & 团队名", + "skill.folder": "文件夹", + "skill.skill": "技能", "sync_immediately": "立即同步", "sync_member_failed": "同步成员失败", "sync_member_success": "同步成员成功", "total_team_members": "共 {{amount}} 名成员", "transfer_app_ownership": "转移应用所有权", "transfer_dataset_ownership": "转移知识库所有权", + "transfer_skill_ownership": "转移技能所有权", "transfer_ownership": "转让所有者", "transfer_team_ownership": "转让团队", "transfer_success": "转让成功", @@ -281,17 +267,32 @@ "update_dataset_collaborator": "知识库权限更改", "update_publish_app": "应用更新", "update_skill": "更新技能", - "deploy_skill": "发布技能", - "import_skill": "导入技能", - "export_skill": "导出技能", - "copy_skill": "复制技能", - "move_skill": "移动技能", "update_skill_collaborator": "更新技能协作者", - "delete_skill_collaborator": "删除技能协作者", - "transfer_skill_ownership": "转移技能所有权", "used_times_limit": "有效人数", "user_name": "用户名", "user_team_invite_member": "邀请成员", "user_team_leave_team": "离开团队", - "user_team_leave_team_failed": "离开团队失败" + "user_team_leave_team_failed": "离开团队失败", + "waiting": "待接受", + "copy_skill": "复制技能", + "create_skill": "创建技能", + "create_skill_folder": "创建技能文件夹", + "delete_skill": "删除技能", + "delete_skill_collaborator": "技能权限删除", + "deploy_skill": "部署技能", + "export_skill": "导出技能", + "import_skill": "导入技能", + "log_copy_skill": "【{{name}}】复制了名为【{{skillName}}】的【{{skillType}}】", + "log_create_skill": "【{{name}}】创建了名为【{{skillName}}】的【{{skillType}}】", + "log_create_skill_folder": "【{{name}}】创建了名为【{{folderName}}】的技能文件夹", + "log_delete_skill": "【{{name}}】删除了名为【{{skillName}}】的【{{skillType}}】", + "log_delete_skill_collaborator": "【{{name}}】将名为【{{skillName}}】的【{{skillType}}】中名为【{{itemValueName}}】的【{{itemName}}】权限删除", + "log_deploy_skill": "【{{name}}】部署了名为【{{skillName}}】的【{{skillType}}】", + "log_export_skill": "【{{name}}】导出了名为【{{skillName}}】的【{{skillType}}】", + "log_import_skill": "【{{name}}】导入了名为【{{skillName}}】的【{{skillType}}】", + "log_move_skill": "【{{name}}】将名为【{{skillName}}】的【{{skillType}}】移动到【{{targetFolderName}}】", + "log_transfer_skill_ownership": "【{{name}}】将名为【{{skillName}}】的【{{skillType}}】的所有权从【{{oldOwnerName}}】转移到【{{newOwnerName}}】", + "log_update_skill": "【{{name}}】更新了名为【{{skillName}}】的【{{skillType}}】", + "log_update_skill_collaborator": "【{{name}}】将名为【{{skillName}}】的【{{skillType}}】的合作者更新为:组织:【{{orgList}}】,群组:【{{groupList}}】,成员【{{tmbList}}】;权限更新为:【{{permission}}】", + "move_skill": "移动技能" } diff --git a/packages/web/i18n/zh-Hant/account_team.json b/packages/web/i18n/zh-Hant/account_team.json index bcaaeaf4b5..2d87143017 100644 --- a/packages/web/i18n/zh-Hant/account_team.json +++ b/packages/web/i18n/zh-Hant/account_team.json @@ -196,18 +196,6 @@ "log_update_dataset": "【{{name}}】更新了名為【{{datasetName}}】的【{{datasetType}}】", "log_update_dataset_collaborator": "【{{name}}】將名為【{{datasetName}}】的【{{datasetType}}】的合作者更新為:組織:【{{orgList}}】,群組:【{{groupList}}】,成員【{{tmbList}}】;權限更新為:【{{readPermission}}】,【{{writePermission}}】,【{{managePermission}}】", "log_update_publish_app": "【{{name}}】【{{operationName}}】名為【{{appName}}】的【{{appType}}】", - "log_create_skill": "【{{name}}】建立了名為【{{skillName}}】的技能", - "log_create_skill_folder": "【{{name}}】建立了名為【{{folderName}}】的技能資料夾", - "log_delete_skill": "【{{name}}】刪除了名為【{{skillName}}】的技能", - "log_deploy_skill": "【{{name}}】發布了名為【{{skillName}}】的技能", - "log_import_skill": "【{{name}}】匯入了名為【{{skillName}}】的技能", - "log_export_skill": "【{{name}}】匯出了名為【{{skillName}}】的技能", - "log_copy_skill": "【{{name}}】複製了名為【{{skillName}}】的技能", - "log_move_skill": "【{{name}}】將名為【{{skillName}}】的技能移動到【{{targetFolderName}}】", - "log_update_skill_collaborator": "【{{name}}】將名為【{{skillName}}】的【{{skillType}}】的協作者更新為:組織:【{{orgList}}】,群組:【{{groupList}}】,成員【{{tmbList}}】;權限更新為:【{{permission}}】", - "log_delete_skill_collaborator": "【{{name}}】刪除了名為【{{skillName}}】的【{{skillType}}】的協作者【{{itemName}}】:【{{itemValueName}}】", - "log_transfer_skill_ownership": "【{{name}}】將名為【{{skillName}}】的技能所有權轉移給了【{{newOwnerName}}】", - "log_update_skill": "【{{name}}】更新了名為【{{skillName}}】的技能", "log_user": "操作人員", "login": "登入", "manage_member": "管理成員", @@ -246,12 +234,15 @@ "search_test": "搜索測試", "set_invoice_header": "設置發票抬頭", "set_name_avatar": "團隊頭像", + "skill.folder": "資料夾", + "skill.skill": "技能", "sync_immediately": "立即同步", "sync_member_failed": "同步成員失敗", "sync_member_success": "同步成員成功", "total_team_members": "共 {{amount}} 名成員", "transfer_app_ownership": "轉移應用程式所有權", "transfer_dataset_ownership": "轉移知識庫所有權", + "transfer_skill_ownership": "轉移技能所有權", "transfer_ownership": "轉讓所有者", "transfer_team_ownership": "轉讓團隊", "transfer_success": "轉讓成功", @@ -272,22 +263,34 @@ "update_data": "更新數據", "update_dataset": "更新知識庫", "update_dataset_collaborator": "知識庫權限更改", - "update_publish_app": "應用更新", - "create_skill": "建立技能", - "create_skill_folder": "建立技能資料夾", - "delete_skill": "刪除技能", - "deploy_skill": "發布技能", - "import_skill": "匯入技能", - "export_skill": "匯出技能", - "copy_skill": "複製技能", - "move_skill": "移動技能", - "update_skill_collaborator": "更新技能協作者", - "delete_skill_collaborator": "刪除技能協作者", - "transfer_skill_ownership": "轉移技能所有權", "update_skill": "更新技能", + "update_skill_collaborator": "技能權限更改", + "update_publish_app": "應用更新", "used_times_limit": "有效人數", "user_name": "使用者名稱", "user_team_invite_member": "邀請成員", "user_team_leave_team": "離開團隊", - "user_team_leave_team_failed": "離開團隊失敗" + "user_team_leave_team_failed": "離開團隊失敗", + "waiting": "待接受", + "copy_skill": "複製技能", + "create_skill": "建立技能", + "create_skill_folder": "建立技能資料夾", + "delete_skill": "刪除技能", + "delete_skill_collaborator": "技能權限刪除", + "deploy_skill": "部署技能", + "export_skill": "導出技能", + "import_skill": "導入技能", + "log_copy_skill": "【{{name}}】複製了名為【{{skillName}}】的【{{skillType}}】", + "log_create_skill": "【{{name}}】建立了名為【{{skillName}}】的【{{skillType}}】", + "log_create_skill_folder": "【{{name}}】建立了名為【{{folderName}}】的技能資料夾", + "log_delete_skill": "【{{name}}】刪除了名為【{{skillName}}】的【{{skillType}}】", + "log_delete_skill_collaborator": "【{{name}}】將名為【{{skillName}}】的【{{skillType}}】中名為【{{itemValueName}}】的【{{itemName}}】權限刪除", + "log_deploy_skill": "【{{name}}】部署了名為【{{skillName}}】的【{{skillType}}】", + "log_export_skill": "【{{name}}】導出了名為【{{skillName}}】的【{{skillType}}】", + "log_import_skill": "【{{name}}】導入了名為【{{skillName}}】的【{{skillType}}】", + "log_move_skill": "【{{name}}】將名為【{{skillName}}】的【{{skillType}}】移動到【{{targetFolderName}}】", + "log_transfer_skill_ownership": "【{{name}}】將名為【{{skillName}}】的【{{skillType}}】的所有權從【{{oldOwnerName}}】轉移到【{{newOwnerName}}】", + "log_update_skill": "【{{name}}】更新了名為【{{skillName}}】的【{{skillType}}】", + "log_update_skill_collaborator": "【{{name}}】將名為【{{skillName}}】的【{{skillType}}】的合作者更新為:組織:【{{orgList}}】,群組:【{{groupList}}】,成員【{{tmbList}}】;權限更新為:【{{permission}}】", + "move_skill": "移動技能" } diff --git a/packages/web/package.json b/packages/web/package.json index 15254bb6a7..cef19bcb4c 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -3,7 +3,7 @@ "version": "1.0.0", "engines": { "node": ">=20", - "pnpm": "9.x" + "pnpm": "10.x" }, "dependencies": { "@chakra-ui/anatomy": "catalog:", @@ -25,8 +25,8 @@ "@lexical/text": "0.12.6", "@lexical/utils": "0.12.6", "@monaco-editor/react": "^4.7.0", - "@tanstack/react-query": "^4.24.10", - "ahooks": "^3.9.5", + "@tanstack/react-query": "catalog:", + "ahooks": "catalog:", "axios": "catalog:", "date-fns": "catalog:", "dayjs": "catalog:", @@ -41,13 +41,13 @@ "react-beautiful-dnd": "^13.1.1", "react-day-picker": "^9.14.0", "react-dom": "catalog:", - "react-hook-form": "7.43.1", + "react-hook-form": "catalog:", "react-i18next": "catalog:", - "react-markdown": "^9.0.1", + "react-markdown": "catalog:", "react-photo-view": "^1.2.6", - "recharts": "^2.15.0", + "recharts": "catalog:", "rehype-external-links": "^3.0.0", - "remark-gfm": "^4.0.1", + "remark-gfm": "catalog:", "use-context-selector": "^1.4.4", "zustand": "^4.3.5" }, diff --git a/plugins/README.md b/plugins/README.md deleted file mode 100644 index 9d2defe87f..0000000000 --- a/plugins/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# 目录说明 - -该目录为 FastGPT 辅助子项目,非必须。 - -- model 私有化模型 \ No newline at end of file diff --git a/plugins/model/ocr-surya/Dockerfile b/plugins/model/ocr-surya/Dockerfile deleted file mode 100644 index 63f72bbf5d..0000000000 --- a/plugins/model/ocr-surya/Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -FROM pytorch/pytorch:2.4.0-cuda11.8-cudnn9-runtime - -# please download the model from https://huggingface.co/vikp/surya_det3 -# and https://huggingface.co/vikp/surya_rec2, and put it in the directory vikp/ -COPY ./vikp ./vikp - -COPY requirements.txt . - -RUN python3 -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple - -RUN python3 -m pip uninstall opencv-python -y - -RUN python3 -m pip install opencv-python-headless -i https://pypi.tuna.tsinghua.edu.cn/simple - -COPY app.py Dockerfile ./ - -ENTRYPOINT python3 app.py \ No newline at end of file diff --git a/plugins/model/ocr-surya/README.md b/plugins/model/ocr-surya/README.md deleted file mode 100644 index c22806175e..0000000000 --- a/plugins/model/ocr-surya/README.md +++ /dev/null @@ -1,110 +0,0 @@ -# 接入Surya OCR文本检测 - -## 源码部署 - -### 1. 安装环境 - -- Python 3.9+ -- CUDA 11.8 -- 科学上网环境 - -### 2. 安装依赖 - -```bash -pip install -r requirements.txt -``` - -### 3. 下载模型 - -代码首次运行时会自动从huggingface下载模型,可跳过以下步骤。 -也可以手动下载模型,在对应代码目录下clone模型 - -```sh -mkdir vikp && cd vikp - -git lfs install - -git clone https://huggingface.co/vikp/surya_det3 -# 镜像下载 https://hf-mirror.com/vikp/surya_det3 - -git clone https://huggingface.co/vikp/surya_rec2 -# 镜像下载 https://hf-mirror.com/vikp/surya_rec2 -``` - -最终手动下载的目录结构如下: - -``` -vikp/surya_det3 -vikp/surya_rec2 -app.py -Dockerfile -requirements.txt -``` - -### 4. 运行代码 - -```bash -python app.py -``` - -对应请求地址为 -`http://0.0.0.0:7230/v1/ocr/text` - -### 5. 测试 - -```python -curl --location --request POST 'http://localhost:7230/v1/ocr/text' \ ---header 'Authorization: Bearer your_access_token' \ ---header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \ ---header 'Content-Type: application/json' \ ---data-raw '{ - "images":[ - "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94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94dx7w7gZf7w7j3h3MQ94d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" - ], - "sort": true -}' -``` - -## docker部署 - -### 镜像获取 - -**本地编译镜像:** -```bash -docker build -t surya_ocr:v0.1 . -``` - -**或拉取线上镜像:** -Todo:待发布 - -### docker-compose.yml示例 -```yaml -version: '3' -services: - surya-ocr: - image: surya_ocr:v0.1 - container_name: surya-ocr - # GPU运行环境,如果宿主机未安装,将deploy配置隐藏即可 - deploy: - resources: - reservations: - devices: - - driver: nvidia - count: all - capabilities: [gpu] - ports: - - 7230:7230 - environment: - - BATCH_SIZE=32 - - ACCESS_TOKEN=YOUR_ACCESS_TOKEN - - LANGS='["zh","en"]' -``` - -**环境变量:** - -``` -BATCH_SIZE:根据实际内存/显存情况配置,每个batch约占用40MB的VRAM,cpu默认32,mps默认64,cuda默认512 -ACCESS_TOKEN:服务的access_token -LANGS:支持的语言列表,默认["zh","en"] -``` - diff --git a/plugins/model/ocr-surya/app.py b/plugins/model/ocr-surya/app.py deleted file mode 100644 index f6326beb4f..0000000000 --- a/plugins/model/ocr-surya/app.py +++ /dev/null @@ -1,157 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -import base64 -import io -import json -import logging -import os -from typing import List, Optional - -import torch -import uvicorn -from fastapi import FastAPI, HTTPException, Security -from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer -from PIL import Image, ImageFile -from pydantic import BaseModel -from surya.model.detection.model import load_model as load_det_model -from surya.model.detection.model import load_processor as load_det_processor -from surya.model.recognition.model import load_model as load_rec_model -from surya.model.recognition.processor import load_processor as load_rec_processor -from surya.ocr import run_ocr -from surya.schema import OCRResult -import warnings -warnings.filterwarnings("ignore", category=FutureWarning, module="transformers") -app = FastAPI() -security = HTTPBearer() -env_bearer_token = None - - -# GPU显存回收 -def torch_gc(): - if torch.cuda.is_available(): # 检查是否可用CUDA - torch.cuda.empty_cache() # 清空CUDA缓存 - torch.cuda.ipc_collect() # 收集CUDA内存碎片 - - -class ImageReq(BaseModel): - images: List[str] - sorted: Optional[bool] = False - - -class Singleton(type): - - def __call__(cls, *args, **kwargs): - if not hasattr(cls, '_instance'): - cls._instance = super().__call__(*args, **kwargs) - return cls._instance - - -class Surya(metaclass=Singleton): - - def __init__(self): - self.langs = json.loads(os.getenv("LANGS", '["zh", "en"]')) - self.batch_size = os.getenv("BATCH_SIZE") - if self.batch_size is not None: - self.batch_size = int(self.batch_size) - self.det_processor, self.det_model = load_det_processor( - ), load_det_model() - self.rec_model, self.rec_processor = load_rec_model( - ), load_rec_processor() - - def run(self, image: ImageFile.ImageFile) -> List[OCRResult]: - predictions = run_ocr([image], [self.langs], self.det_model, - self.det_processor, self.rec_model, - self.rec_processor, self.batch_size) - return predictions - - -class Chat(object): - - def __init__(self): - self.surya = Surya() - - def base64_to_image(base64_string: str) -> ImageFile.ImageFile: - image_data = base64.b64decode(base64_string) - image_stream = io.BytesIO(image_data) - image = Image.open(image_stream) - return image - - def sort_text_by_bbox(original_data: List[dict]) -> str: - # 根据bbox进行排序,从左到右,从上到下。返回排序后的按行的字符串。 - # 排序 - lines, line = [], [] - original_data.sort(key=lambda item: item["bbox"][1]) - for item in original_data: - mid_h = (item["bbox"][1] + item["bbox"][3]) / 2 - if len(line) == 0 or (mid_h >= line[0]["bbox"][1] - and mid_h <= line[0]["bbox"][3]): - line.append(item) - else: - lines.append(line) - line = [item] - lines.append(line) - for line in lines: - line.sort(key=lambda item: item["bbox"][0]) - # 构建行字符串 - string_result = "" - for line in lines: - for item in line: - string_result += item["text"] + " " - string_result += "\n" - return string_result - - def query_ocr(self, image_base64: str, - sorted: bool) -> str: - if image_base64 is None or len(image_base64) == 0: - return "" - try: - image = Chat.base64_to_image(image_base64) - ocr_result = self.surya.run(image) - result = [] - - for text_line in ocr_result[0].text_lines: - result.append(text_line.text) - - if sorted: - result = self.sort_text_lines(result) - - # 将所有文本行合并成一个字符串,用换行符分隔 - final_result = "\n".join(result) - - torch_gc() - return final_result - except Exception as e: - logging.error(f"OCR 处理失败: {e}") - raise HTTPException(status_code=400, detail=f"OCR 处理失败: {str(e)}") - - @staticmethod - def sort_text_lines(text_lines: List[str]) -> List[str]: - # 这里可以实现自定义的排序逻辑 - # 目前只是简单地返回原始列表,因为我们没有位置信息来进行排序 - return text_lines - -@app.post('/v1/ocr/text') -async def handle_post_request( - image_req: ImageReq, - credentials: HTTPAuthorizationCredentials = Security(security)): - token = credentials.credentials - if env_bearer_token is not None and token != env_bearer_token: - raise HTTPException(status_code=401, detail="无效的令牌") - chat = Chat() - try: - results = [] - for image_base64 in image_req.images: - results.append(chat.query_ocr(image_base64, image_req.sorted)) - return {"error": None, "results": results} - except HTTPException as he: - raise he - except Exception as e: - logging.error(f"识别报错:{e}") - raise HTTPException(status_code=500, detail=f"识别出错: {str(e)}") - -if __name__ == "__main__": - env_bearer_token = os.getenv("ACCESS_TOKEN") - try: - uvicorn.run(app, host='0.0.0.0', port=7230) - except Exception as e: - logging.error(f"API启动失败!报错:{e}") diff --git a/plugins/model/ocr-surya/requirements.txt b/plugins/model/ocr-surya/requirements.txt deleted file mode 100644 index 8aa80ddc2c..0000000000 --- a/plugins/model/ocr-surya/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -surya-ocr==0.5.0 -fastapi==0.104.1 -uvicorn==0.17.6 \ No newline at end of file diff --git a/plugins/model/pdf-marker/Dockerfile b/plugins/model/pdf-marker/Dockerfile deleted file mode 100644 index 1d2b5fd0d0..0000000000 --- a/plugins/model/pdf-marker/Dockerfile +++ /dev/null @@ -1,38 +0,0 @@ -FROM pytorch/pytorch:2.4.1-cuda12.4-cudnn9-devel - -ENV DEBIAN_FRONTEND=noninteractive -ENV LANG=C.UTF-8 -# 安装构建依赖 cv2 dependencies -RUN apt-get update && apt-get install ffmpeg libsm6 libxext6 -y - -# 设置 pip 配置 -RUN mkdir -p /root/.pip -COPY pip.conf /root/.pip/ - -# 创建模型文件夹 -RUN mkdir -p /root/huggingface - -# 复制依赖文件 -COPY requirements.txt /root/ -COPY api_mp.py /root/ - - -# 导入huggingface的代理和huggingface模型位置 -ENV HF_ENDPOINT=https://hf-mirror.com \ - HF_DATASETS_CACHE=/root/huggingface \ - HUGGINGFACE_HUB_CACHE=/root/huggingface \ - HF_HOME=/root/huggingface - -# 设置工作目录 -WORKDIR /root - -# 安装 Python 依赖 -RUN pip3 install --no-cache-dir -r requirements.txt - -# 删除不必要的工具和文件以减小镜像体积 -RUN apt-get purge -y vim && apt-get autoremove -y && rm -rf /root/.pip /root/.cache/pip - - - -# 设置容器启动命令 -CMD ["python3", "api_mp.py"] \ No newline at end of file diff --git a/plugins/model/pdf-marker/Readme.md b/plugins/model/pdf-marker/Readme.md deleted file mode 100644 index 0a617335b1..0000000000 --- a/plugins/model/pdf-marker/Readme.md +++ /dev/null @@ -1,147 +0,0 @@ -# 项目介绍 - -本项目实现了一个高效的 **PDF 转 Markdown 接口服务**,支持多进程并行处理多个 PDF 文件。通过高性能的接口设计,快速将 PDF 文档转换为 Markdown 格式文本。 - -- **简洁性:**项目无需修改代码,仅需调整文件路径即可使用,简单易用 -- **易用性:**通过提供简洁的 API,开发者只需发送 HTTP 请求即可完成 PDF 转换 -- **灵活性:**支持本地部署和 Docker 容器部署两种方式,便于快速上手和灵活集成 - -# 配置推荐 - -## 常规配置 - -24G显存的显卡两张,可以支持四个文件同时处理 - -## 最低配置 - -**不低于11G** 显存的显卡一张 - -并设置每张卡处理的进程数为1 - -```bash -export PROCESSES_PER_GPU="1" -``` - -## 单文件实测速率 - -| 显卡 | 中文PDF | 英文PDF | 扫描件 | -| ------------- | ------------ | ------------ | ------------ | -| **4090D 24G** | **0.75s/页** | **1.60s/页** | **3.26s/页** | -| **P40 24G** | **0.99s/页** | **2.22s/页** | **5.24s/页** | - -## 多文件实测速率 - -中文PDF+英文PDF - -| 显卡 | 串行处理 | 并行处理 | 提升效率 | -| ------------- | ------------ | ------------ | --------- | -| **4090D 24G** | **0.92s/页** | **0.62s/页** | **31.9%** | -| **P40 24G** | **1.22s/页** | **0.85s/页** | **30.5%** | - -# 本地开发 - -## 基本流程 - -1. 克隆一个FastGPT的项目文件 - - ``` - git clone https://github.com/labring/FastGPT.git - ``` - -2. 将主目录设置为 python下的pdf-marker文件 - - ``` - cd python/pdf-marker - ``` - -3. 创建Anaconda并安装requirement.txt文件 - - 安装的Anaconda版本:**conda 24.7.1** - - ``` - conda create -n pdf-marker python=3.11 - pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple - conda activate pdf-marker - ``` - -4. 执行主文件启动pdf2md服务 - - ``` - python api_mp.py - ``` - -# 镜像打包和部署(推荐) - -## 本地构建镜像 - -1. 在 `pdf-marker` 根目录下执行: - - ```bash - sudo docker build -t model_pdf -f Dockerfile . - ``` -2. 运行容器 - ```bash - sudo docker run --gpus all -itd -p 7231:7231 --name model_pdf_v1 -e PROCESSES_PER_GPU="2" model_pdf - ``` - -## 快速构建镜像(推荐) - -```dockerfile -docker pull crpi-h3snc261q1dosroc.cn-hangzhou.personal.cr.aliyuncs.com/marker11/marker_images:v0.2 -docker run --gpus all -itd -p 7231:7232 --name model_pdf_v2 -e PROCESSES_PER_GPU="2" crpi-h3snc261q1dosroc.cn-hangzhou.personal.cr.aliyuncs.com/marker11/marker_images:v0.2 -``` - -# 访问示例 - -marker v0.1:用Post方法访问端口为 `7321 ` 的 `v1/parse/file` 服务 - -marker v0.2:用Post方法访问端口为 `7321 ` 的 `v2/parse/file` 服务 - - - -- 访问方法 - - - v0.2 - ``` - curl --location --request POST "http://localhost:7231/v2/parse/file" \ - --header "Authorization: Bearer your_access_token" \ - --form "file=@./file/chinese_test.pdf" - ``` - - v0.1 - ``` - curl --location --request POST "http://localhost:7231/v1/parse/file" \ - --header "Authorization: Bearer your_access_token" \ - --form "file=@./file/chinese_test.pdf" - ``` - - 参数:file-->本地文件的地址 - -- 多文件测试数据 - - 运行 `test` 文件下的 `test.py` 文件,修改里面的 `file_paths` 为自己仓库的 `url` 即可 - -# FQA - -- 如果出现huggingface模型下载不下来? - - 可以选择在环境变量中加入huggingface镜像 - - ```bash - export HF_ENDPOINT=https://hf-mirror.com - export HF_DATASETS_CACHE=/huggingface - export HUGGINGFACE_HUB_CACHE=/huggingface - export HF_HOME=/huggingface - ``` - - 也可以直接访问 [huggingface][https://huggingface.co] 来下载模型到 `/huggingface` 文件夹下 - - ``` - https://huggingface.co/vikp/surya_det3/tree/main - https://huggingface.co/vikp/surya_layout3/tree/main - https://huggingface.co/vikp/surya_order/tree/main - https://huggingface.co/vikp/surya_rec2/tree/main - https://huggingface.co/vikp/surya_tablerec/tree/main - https://huggingface.co/vikp/texify2/tree/main - ``` - - \ No newline at end of file diff --git a/plugins/model/pdf-marker/api_mp.py b/plugins/model/pdf-marker/api_mp.py deleted file mode 100644 index 893873af6f..0000000000 --- a/plugins/model/pdf-marker/api_mp.py +++ /dev/null @@ -1,141 +0,0 @@ -import asyncio -import base64 -import fitz -import torch.multiprocessing as mp -import shutil -import time -from contextlib import asynccontextmanager -from loguru import logger -from fastapi import HTTPException, FastAPI, UploadFile, File -import multiprocessing -from marker.output import save_markdown -from marker.convert import convert_single_pdf -from marker.models import load_all_models -import torch -from concurrent.futures import ProcessPoolExecutor -import os -app = FastAPI() -model_lst = None -model_refs = None -temp_dir = "./temp" -os.environ['PROCESSES_PER_GPU'] = str(2) - -def worker_init(counter, lock): - global model_lst - num_gpus = torch.cuda.device_count() - processes_per_gpu = int(os.environ.get('PROCESSES_PER_GPU', 1)) - with lock: - worker_id = counter.value - counter.value += 1 - if num_gpus == 0: - device = 'cpu' - else: - device_id = worker_id // processes_per_gpu - if device_id >= num_gpus: - raise ValueError(f"Worker ID {worker_id} exceeds available GPUs ({num_gpus}).") - device = f'cuda:{device_id}' - model_lst = load_all_models(device=device, dtype=torch.float32) - print(f"Worker {worker_id}: Models loaded successfully on {device}!") - for model in model_lst: - if model is None: - continue - model.share_memory() - -def process_file_with_multiprocessing(temp_file_path): - global model_lst - full_text, images, out_meta = convert_single_pdf(temp_file_path, model_lst, batch_multiplier=1) - fname = os.path.basename(temp_file_path) - subfolder_path = save_markdown(r'./result', fname, full_text, images, out_meta) - md_content_with_base64_images = embed_images_as_base64(full_text, subfolder_path) - return md_content_with_base64_images, out_meta - -@asynccontextmanager -async def lifespan(app: FastAPI): - try: - mp.set_start_method('spawn') - except RuntimeError: - raise RuntimeError("Set start method to spawn twice. This may be a temporary issue with the script. Please try running it again.") - manager = multiprocessing.Manager() - worker_counter = manager.Value('i', 0) - worker_lock = manager.Lock() - global my_pool - gpu_count = torch.cuda.device_count() - my_pool = ProcessPoolExecutor(max_workers=gpu_count*int(os.environ.get('PROCESSES_PER_GPU', 1)), initializer=worker_init, initargs=(worker_counter, worker_lock)) - - yield - global temp_dir - if temp_dir and os.path.exists(temp_dir): - shutil.rmtree(temp_dir) - del model_lst - del model_refs - print("Application shutdown, cleaning up...") - -app.router.lifespan_context = lifespan - -@app.post("/v1/parse/file") -async def read_file( - file: UploadFile = File(...)): - try: - start_time = time.time() - global temp_dir - os.makedirs(temp_dir, exist_ok=True) - temp_file_path = os.path.join(temp_dir, file.filename) - with open(temp_file_path, "wb") as temp_file: - temp_file.write(await file.read()) - pdf_document = fitz.open(temp_file_path) - total_pages = pdf_document.page_count - pdf_document.close() - global my_pool - loop = asyncio.get_event_loop() - md_content_with_base64_images, out_meta = await loop.run_in_executor(my_pool, process_file_with_multiprocessing, temp_file_path) - - end_time = time.time() - duration = end_time - start_time - print(file.filename+"Total time:", duration) - return { - "success": True, - "message": "", - "data": { - "markdown": md_content_with_base64_images, - "page": total_pages, - "duration": duration - } - } - - except Exception as e: - logger.exception(e) - raise HTTPException(status_code=500, detail=f"错误信息: {str(e)}") - - finally: - - if temp_file_path and os.path.exists(temp_file_path): - os.remove(temp_file_path) -def img_to_base64(img_path): - with open(img_path, "rb") as img_file: - return base64.b64encode(img_file.read()).decode('utf-8') -def embed_images_as_base64(md_content, image_dir): - lines = md_content.split('\n') - new_lines = [] - for line in lines: - if line.startswith("![") and "](" in line and ")" in line: - start_idx = line.index("](") + 2 - end_idx = line.index(")", start_idx) - img_rel_path = line[start_idx:end_idx] - - img_name = os.path.basename(img_rel_path) - img_path = os.path.join(image_dir, img_name) - - if os.path.exists(img_path): - img_base64 = img_to_base64(img_path) - new_line = f'{line[:start_idx]}data:image/png;base64,{img_base64}{line[end_idx:]}' - new_lines.append(new_line) - else: - new_lines.append(line) - else: - new_lines.append(line) - return '\n'.join(new_lines) - -if __name__ == "__main__": - import uvicorn - uvicorn.run(app, host="0.0.0.0", port=7231) - diff --git a/plugins/model/pdf-marker/pip.conf b/plugins/model/pdf-marker/pip.conf deleted file mode 100644 index 431ea007d0..0000000000 --- a/plugins/model/pdf-marker/pip.conf +++ /dev/null @@ -1,5 +0,0 @@ -[global] -time-out=60 -index-url=https://pypi.tuna.tsinghua.edu.cn/simple -[install] -trusted-host=pypi.tuna.tsinghua.edu.cn diff --git a/plugins/model/pdf-marker/requirements.txt b/plugins/model/pdf-marker/requirements.txt deleted file mode 100644 index e4776be333..0000000000 --- a/plugins/model/pdf-marker/requirements.txt +++ /dev/null @@ -1,108 +0,0 @@ -acres==0.1.0 -aiofiles==24.1.0 -annotated-types==0.7.0 -anyio==4.6.2.post1 -certifi==2024.8.30 -charset-normalizer==3.4.0 -ci-info==0.3.0 -click==8.1.7 -coloredlogs==15.0.1 -configobj==5.0.9 -configparser==7.1.0 -dol==0.2.83 -etelemetry==0.3.1 -fastapi==0.115.5 -filelock==3.16.1 -filetype==1.2.0 -flatbuffers==24.3.25 -frontend==0.0.3 -fsspec==2024.10.0 -ftfy==6.3.1 -h11==0.14.0 -httplib2==0.22.0 -huggingface-hub==0.26.2 -humanfriendly==10.0 -i2==0.1.36 -idna==3.10 -importlib_resources==6.4.5 -isodate==0.6.1 -itsdangerous==2.2.0 -Jinja2==3.1.4 -joblib==1.4.2 -loguru==0.7.2 -looseversion==1.3.0 -lxml==5.3.0 -marker-pdf==0.3.10 -MarkupSafe==3.0.2 -mpmath==1.3.0 -networkx==3.4.2 -nibabel==5.3.2 -nipype==1.9.1 -numpy==2.1.3 -nvidia-cublas-cu12==12.4.5.8 -nvidia-cuda-cupti-cu12==12.4.127 -nvidia-cuda-nvrtc-cu12==12.4.127 -nvidia-cuda-runtime-cu12==12.4.127 -nvidia-cudnn-cu12==9.1.0.70 -nvidia-cufft-cu12==11.2.1.3 -nvidia-curand-cu12==10.3.5.147 -nvidia-cusolver-cu12==11.6.1.9 -nvidia-cusparse-cu12==12.3.1.170 -nvidia-nccl-cu12==2.21.5 -nvidia-nvjitlink-cu12==12.4.127 -nvidia-nvtx-cu12==12.4.127 -onnxruntime==1.20.1 -opencv-python==4.10.0.84 -opencv-python-headless==4.10.0.84 -packaging==24.2 -pandas==2.2.3 -pathlib==1.0.1 -pdftext==0.3.19 -pillow==10.4.0 -pip==24.3.1 -protobuf==5.28.3 -prov==2.0.1 -puremagic==1.28 -pydantic==2.10.0 -pydantic_core==2.27.0 -pydantic-settings==2.6.1 -pydot==3.0.2 -PyMuPDF==1.24.14 -pyparsing==3.2.0 -pypdfium2==4.30.0 -python-dateutil==2.9.0.post0 -python-dotenv==1.0.1 -python-multipart==0.0.17 -pytz==2024.2 -pyxnat==1.6.2 -PyYAML==6.0.2 -RapidFuzz==3.10.1 -rdflib==6.3.2 -regex==2024.11.6 -requests==2.32.3 -safetensors==0.4.5 -scikit-learn==1.5.2 -scipy==1.14.1 -setuptools==75.6.0 -simplejson==3.19.3 -six==1.16.0 -sniffio==1.3.1 -starlette==0.41.3 -surya-ocr==0.6.13 -sympy==1.13.1 -tabled-pdf==0.1.4 -tabulate==0.9.0 -texify==0.2.1 -threadpoolctl==3.5.0 -tokenizers==0.20.3 -torch==2.5.1 -tqdm==4.67.0 -traits==6.4.3 -transformers==4.46.3 -triton==3.1.0 -typing_extensions==4.12.2 -tzdata==2024.2 -urllib3==2.2.3 -uvicorn==0.32.1 -wcwidth==0.2.13 -wheel==0.45.0 diff --git a/plugins/model/pdf-marker/test/test.py b/plugins/model/pdf-marker/test/test.py deleted file mode 100644 index 2e40116ab8..0000000000 --- a/plugins/model/pdf-marker/test/test.py +++ /dev/null @@ -1,26 +0,0 @@ -import json -import os -from io import BytesIO -import requests -from multiprocessing import Process -def request_(file_path): - url = "http://127.0.0.1:7231/v1/parse/file" - response = requests.get(file_path) - if response.status_code == 200: - file_data = BytesIO(response.content) - pdf_name = os.path.basename(file_path) - files = {'file': (pdf_name, file_data, 'application/pdf')} - response = requests.post(url, files=files) - if response.status_code == 200: - print("Response JSON:", json.dumps(response.json(), indent=4, ensure_ascii=False)) - else: - print(f"Request failed with status code: {response.status_code}") - print(response.text) - -if __name__ == "__main__": - file_paths = ["https://objectstorageapi.bja.sealos.run/czrn86r1-yyh/english_test.pdf", "https://objectstorageapi.bja.sealos.run/czrn86r1-yyh/chinese_test.pdf", - "https://objectstorageapi.bja.sealos.run/czrn86r1-yyh/ocr_test.pdf","https://objectstorageapi.bja.sealos.run/czrn86r1-yyh/english_file/3649329.3658477.pdf"] - for file_path in file_paths: - p = Process(target=request_, args=(file_path)) - p.start() - diff --git a/plugins/model/pdf-mineru/.dockerignore b/plugins/model/pdf-mineru/.dockerignore deleted file mode 100644 index 6afc89bdc0..0000000000 --- a/plugins/model/pdf-mineru/.dockerignore +++ /dev/null @@ -1,21 +0,0 @@ -__pycache__ -.pyc -.pyo -.pyd -.Python -env -venv -.venv -pip-log.txt -pip-delete-this-directory.txt -.tox -.coverage -.coverage. -.cache -nosetests.xml -coverage.xml -.cover -.log -.git -.mypy_cache -.pytest_cache \ No newline at end of file diff --git a/plugins/model/pdf-mineru/.env b/plugins/model/pdf-mineru/.env deleted file mode 100644 index 565fb8be28..0000000000 --- a/plugins/model/pdf-mineru/.env +++ /dev/null @@ -1 +0,0 @@ -MINERU_TOKEN=官网申请的API 密钥 \ No newline at end of file diff --git a/plugins/model/pdf-mineru/Dockerfile b/plugins/model/pdf-mineru/Dockerfile deleted file mode 100644 index 1b0bff5b2d..0000000000 --- a/plugins/model/pdf-mineru/Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -# ---- 基础镜像 ---- -FROM python:3.12-slim - -# ---- 工作目录 ---- -WORKDIR /app - -# ---- 复制代码 ---- -COPY mineru_saas_api.py . -COPY requirements.txt . - -# ---- 安装依赖 ---- -RUN pip install --no-cache-dir -r requirements.txt - -# ---- 环境变量(运行时注入)---- -ENV MINERU_TOKEN="YOUR_TOKEN_WILL_BE_INJECTED" - -# ---- 暴露端口 ---- -EXPOSE 1234 - -# ---- 启动命令 ---- -CMD ["uvicorn", "mineru_saas_api:app", "--host", "0.0.0.0", "--port", "1234"] diff --git a/plugins/model/pdf-mineru/README.md b/plugins/model/pdf-mineru/README.md deleted file mode 100644 index 4e62b76495..0000000000 --- a/plugins/model/pdf-mineru/README.md +++ /dev/null @@ -1,194 +0,0 @@ -# **MinerU SaaS Wrapper For Fastgpt 详细部署文档** -**—— 为 FastGPT 提供稳定、高效、开箱即用的纯白嫖文档解析服务,转接服务用grok写的,文档也是,有不明白出问题了,`docker logs -f mineru-saas-wrapper` 查看日志,问他~** - ---- - -> **适用人群**:FastGPT 开发者、后端工程师、DevOps、AI 应用集成者 -> **目标**:在 **5 分钟内**完成从零到生产可用的 MinerU saas服务api的文档解析服务部署 - ---- - -## 一、项目概述 - -| 项目 | 说明 | -|------|------| -| **名称** | MinerU SaaS Wrapper for FastGPT | -| **框架** | FastAPI + Uvicorn | -| **核心功能** | 接收文件 → 调用 MinerU 官方 SaaS API → 轮询结果 → 返回内嵌图片的 Markdown → fasgpt读取解析内容转为知识库 | -| **部署方式** | Docker(推荐) / docker-compose | -| **接口路径** | `POST /v2/parse/file` | - ---- - -## 二、前置条件 -| **MinerU Token** | 在 [https://mineru.net](https://mineru.net) 注册并获取 SaaS Token | - -> **获取 Token 步骤**: -> 1. 登录 MinerU 官网 -> 2. 进入 **控制台 → API 密钥** -> 3. 创建新密钥(建议命名 `fastgpt-wrapper`) -> 4. 复制完整 Token(以 `eyJ...` 开头) - ---- - -## 三、目录结构说明 - -```bash -mineru-saas-wrapper/ -├── .dockerignore -├── Dockerfile -├── docker-compose.yml -├── mineru_saas_api.py # 主服务逻辑 -├── requirements.txt # 依赖包 -├── .env # (可选)环境变量文件 -└── README.md -``` - ---- - -## 四、部署方式一:使用 `docker-compose`(推荐) - -### 步骤 1:克隆项目 - -```bash -mkdir mineru-saas-wrapper -cd mineru-saas-wrapper -``` - -### 步骤 2:创建 `.env` 文件(推荐,防止 Token 泄露) - -```bash -touch .env -``` - -编辑 `.env`: - -```env -MINERU_TOKEN=官网申请的API 密钥 -POLL_INTERVAL=3 -POLL_TIMEOUT=600 -PORT=1234 -``` - -### 步骤 3:修改 `docker-compose.yml` - -```yaml -services: - mineru-saas-wrapper: - build: - context: . - dockerfile: Dockerfile - container_name: mineru-saas-wrapper - restart: unless-stopped - ports: - - "1234:1234" - env_file: - - .env # 改为读取 .env 文件 - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:1234/health"] - interval: 30s - timeout: 10s - retries: 3 - start_period: 10s - logging: - driver: "json-file" - options: - max-size: "10m" - max-file: "3" -``` - -### 步骤 4:启动服务 - -```bash -docker-compose up -d --build -``` - -### 步骤 5:验证服务状态 - -```bash -# 查看容器状态 -docker ps | grep mineru-saas-wrapper - -# 查看健康检查 -curl http://localhost:1234/health -# 预期输出: -{"status":"healthy"} -``` - - -## 五、接口测试 - -### 1. 使用 `curl` 测试 - -```bash -curl -X POST "http://localhost:1234/v2/parse/file" \ - -F "file=@./sample.pdf" | jq -``` - -### 2. 预期成功响应 - -```json -{ - "success": true, - "message": "", - "markdown": "# 标题\n\n![](data:image/png;base64,iVBORw0KGgoAAA...) ...", - "pages": 8 -} -``` - -### 查看详细日志 - -```bash -docker logs -f mineru-saas-wrapper -``` - -关键日志关键词: -- `Got upload url` → 上传成功 -- `Polling ... -> done` → 解析完成 -- `Parse finished, X pages` → 成功返回 - ---- - -## 九、FastGPT 集成指南 - -### 1. 在 FastGPT 中配置「文档解析」节点 - -| 字段 | 值 | -|------|---- | -| **解析服务地址** | `http://your-server-ip:1234/v2/parse/file` | -| **请求方式** | POST | -| **文件字段名** | `file` | -| **响应字段映射** | `markdown` → 内容,`pages` → 页数 | - -### 2. FastGPT 示例配置(JSON) - -```json -// 已使用 json5 进行解析,会自动去掉注释,无需手动去除 -{ - "feConfigs": { - "lafEnv": "https://laf.dev", // laf环境。 https://laf.run (杭州阿里云) ,或者私有化的laf环境。如果使用 Laf openapi 功能,需要最新版的 laf 。 - "mcpServerProxyEndpoint": "" // mcp server 代理地址,例如: http://localhost:3005 - }, - "systemEnv": { - "datasetParseMaxProcess": 10, // 知识库文件解析最大线程数量 - "vectorMaxProcess": 10, // 向量处理线程数量 - "qaMaxProcess": 10, // 问答拆分线程数量 - "vlmMaxProcess": 10, // 图片理解模型最大处理进程 - "tokenWorkers": 30, // Token 计算线程保持数,会持续占用内存,不能设置太大。 - "hnswEfSearch": 100, // 向量搜索参数,仅对 PG 和 OB 生效。越大,搜索越精确,但是速度越慢。设置为100,有99%+精度。 - "hnswMaxScanTuples": 100000, // 向量搜索最大扫描数据量,仅对 PG生效。 - "customPdfParse": { - "url": "http://your-server-ip:1234/v2/parse/file", // 自定义 PDF 解析服务地址 - "key": "", // 自定义 PDF 解析服务密钥 - "doc2xKey": "", // doc2x 服务密钥 - "price": 0 // PDF 解析服务价格 - } - } -} -``` ---- - -**部署完成!** -现在你的 FastGPT 已拥有强大的 **MinerU 文档解析能力**,支持 PDF + 图片 → 完美 Markdown 内嵌渲染。 - -> 如有问题,欢迎提交 Issue 或查看日志排查。祝你解析愉快! \ No newline at end of file diff --git a/plugins/model/pdf-mineru/docker-compose.yml b/plugins/model/pdf-mineru/docker-compose.yml deleted file mode 100644 index cd5e477620..0000000000 --- a/plugins/model/pdf-mineru/docker-compose.yml +++ /dev/null @@ -1,32 +0,0 @@ -services: - mineru-saas-wrapper: - build: - context: . - dockerfile: Dockerfile - container_name: mineru-saas-wrapper - restart: unless-stopped - ports: - - "1234:1234" - environment: - # 你的 MinerU SaaS API Token(必须) - - MINERU_TOKEN=eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiIzODcwOTM0MyIsInJvbCI6IlJPTEVfUkVHSVNURVIiLCJpc3MiOiJPcGVuWExhYiIsImlhdCI6MTc2Mjc2MTEzMywiY2xpZW50SWQiOiJsa3pkeDU3bnZ5MjJqa3BxOXgydyIsInBob25lIjoiMTg1MjEzMzQ1MDEiLCJvcGVuSWQiOm51bGwsInV1aWQiOiI4OTI5YjgzNC05ZTY4LTRhOTctOTNiMi1hMGVkNDk5N2YzYmYiLCJlbWFpbCI6IiIsImV4cCI6MTc2Mzk3MDczM30.CadUrEtAc_B_04opSk4b5ykK60m-CbrXArZuhNGV35MKsX_SaWTbrMHd3ND309f9fgM10QTWHAszjP2Duamzwg - - # 可选:自定义轮询间隔(秒) - - POLL_INTERVAL=3 - - # 可选:最大等待时间(秒) - - POLL_TIMEOUT=600 - - # 可选:如果你的网络在国外,可改为国内加速镜像源(可选) - # - MINERU_BASE=https://mineru.net - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:1234/health"] - interval: 30s - timeout: 10s - retries: 3 - start_period: 10s - logging: - driver: "json-file" - options: - max-size: "10m" - max-file: "3" diff --git a/plugins/model/pdf-mineru/mineru_saas_api.py b/plugins/model/pdf-mineru/mineru_saas_api.py deleted file mode 100644 index 2d46f2114a..0000000000 --- a/plugins/model/pdf-mineru/mineru_saas_api.py +++ /dev/null @@ -1,203 +0,0 @@ -# -*- coding: utf-8 -*- -import os -import io -import time -import zipfile -import base64 -import tempfile -from pathlib import Path -from typing import List - -import httpx -import uvicorn -from fastapi import FastAPI, File, UploadFile, HTTPException -from fastapi.responses import JSONResponse -from loguru import logger - -# -------------------------------------------------------------- -# 配置(全部走环境变量,Docker 里通过 -e 注入) -# -------------------------------------------------------------- -MINERU_TOKEN = os.getenv("MINERU_TOKEN") # 必须 -MINERU_BASE = os.getenv("MINERU_BASE", "https://mineru.net") -POLL_INTERVAL = int(os.getenv("POLL_INTERVAL", "3")) # 秒 -POLL_TIMEOUT = int(os.getenv("POLL_TIMEOUT", "600")) # 秒 -# -------------------------------------------------------------- - -app = FastAPI(title="MinerU SaaS Wrapper", version="1.0.0") - -# ---------- 工具 ---------- -def img_to_base64(img_bytes: bytes) -> str: - return base64.b64encode(img_bytes).decode("utf-8") - -def embed_images(md: str, img_dir: Path) -> str: - """把 markdown 中 ![xxx](relative_path) 替换为 data-uri""" - lines = md.splitlines() - out: List[str] = [] - for line in lines: - if line.startswith("![") and "](" in line and ")" in line: - start = line.index("](") + 2 - end = line.index(")", start) - rel = line[start:end] - img_path = img_dir / rel - if img_path.is_file(): - b64 = img_to_base64(img_path.read_bytes()) - new_line = f'![](data:image/png;base64,{b64})' - out.append(new_line) - continue - out.append(line) - return "\n".join(out) - -# ---------- SaaS 调用 ---------- -async def create_task(file_bytes: bytes, filename: str) -> str: - url = f"{MINERU_BASE}/api/v4/extract/task" - headers = { - "Authorization": f"Bearer {MINERU_TOKEN}", - "Content-Type": "application/json", - } - # 这里使用 VLM(默认),如需 pipeline 可改 model_version - payload = { - "url": "", # 必填但我们用 upload 方式,留空 - "model_version": "vlm", - } - # SaaS 目前只接受 URL,我们先把文件上传到临时公开位置不可行 → 改用 **批量上传** 方式 - # 下面改成 **批量文件上传**(一次只传一个文件),返回 task_id 列表 - raise NotImplementedError("请看下方完整实现") - -# -------------------------------------------------------------- -# 下面是 **完整实现**(一次只处理一个文件,使用批量上传接口) -# -------------------------------------------------------------- -async def _upload_and_create(file_bytes: bytes, filename: str) -> str: - """ - 1. 调用 /api/v4/file-urls/batch 获取上传 URL(一次一个文件) - 2. PUT 上传文件 - 3. 系统自动提交解析任务,返回 batch_id - 4. 轮询 /api/v4/extract-results/batch/{batch_id} 取结果 - """ - client = httpx.AsyncClient(timeout=60.0) - - # ---- 1. 申请上传 URL ---- - batch_url = f"{MINERU_BASE}/api/v4/file-urls/batch" - headers = {"Authorization": f"Bearer {MINERU_TOKEN}", "Content-Type": "application/json"} - batch_payload = { - "files": [{"name": filename}], - "model_version": "vlm" - } - r = await client.post(batch_url, headers=headers, json=batch_payload) - r.raise_for_status() - batch_resp = r.json() - if batch_resp.get("code") != 0: - raise HTTPException(status_code=500, detail=f"MinerU batch create fail: {batch_resp.get('msg')}") - batch_id = batch_resp["data"]["batch_id"] - upload_url = batch_resp["data"]["file_urls"][0] - logger.info(f"Got upload url for {filename}, batch_id={batch_id}") - - # ---- 2. 上传文件 ---- - put_r = await client.put(upload_url, content=file_bytes) - put_r.raise_for_status() - logger.info(f"File uploaded, status={put_r.status_code}") - - # ---- 3. 轮询结果 ---- - result_url = f"{MINERU_BASE}/api/v4/extract-results/batch/{batch_id}" - start = time.time() - while True: - if time.time() - start > POLL_TIMEOUT: - raise HTTPException(status_code=504, detail="MinerU SaaS timeout") - poll = await client.get(result_url, headers=headers) - poll.raise_for_status() - data = poll.json() - if data.get("code") != 0: - raise HTTPException(status_code=500, detail=data.get("msg")) - - results = data["data"]["extract_result"] - # 只有一个文件 - task = results[0] - state = task["state"] - logger.debug(f"Polling {batch_id} -> {state}") - - if state == "done": - zip_url = task["full_zip_url"] - await client.aclose() - return zip_url - if state in ("failed",): - raise HTTPException(status_code=500, detail=task.get("err_msg", "MinerU parse failed")) - # pending / running / converting / waiting-file - await asyncio.sleep(POLL_INTERVAL) - -# ---------- 主入口 ---------- -import asyncio - -@app.post("/v2/parse/file") -async def parse_file(file: UploadFile = File(...)): - """ - FastGPT 调用的统一入口 - """ - if not MINERU_TOKEN: - raise HTTPException(status_code=500, detail="MINERU_TOKEN not set") - - allowed = {".pdf", ".png", ".jpeg", ".jpg"} - ext = Path(file.filename).suffix.lower() - if ext not in allowed: - raise HTTPException(status_code=400, - detail=f"Unsupported file type {ext}. Allowed: {allowed}") - - file_bytes = await file.read() - if not file_bytes: - raise HTTPException(status_code=400, detail="Empty file") - - filename = Path(file.filename).name - start = time.time() - - try: - # 1. 上传 + 提交任务 → 得到 zip_url - zip_url = await _upload_and_create(file_bytes, filename) - - # 2. 下载 zip - async with httpx.AsyncClient() as client: - resp = await client.get(zip_url) - resp.raise_for_status() - zip_bytes = resp.content - - # 3. 解压到临时目录 - with tempfile.TemporaryDirectory() as tmp: - tmp_path = Path(tmp) - with zipfile.ZipFile(io.BytesIO(zip_bytes)) as z: - z.extractall(tmp_path) - - # 4. 找 markdown(默认是和文件名同名的 .md) - md_files = list(tmp_path.rglob("*.md")) - if not md_files: - raise HTTPException(status_code=500, detail="No markdown in result zip") - md_path = md_files[0] - markdown = md_path.read_text(encoding="utf-8") - - # 5. 嵌入图片(图片在同一级目录或子目录) - img_dir = md_path.parent - markdown_b64 = embed_images(markdown, img_dir) - - # 6. 计算页数(zip 中通常有 page_*.png) - page_imgs = list(tmp_path.rglob("page_*.png")) + list(tmp_path.rglob("page_*.jpg")) - pages = len(page_imgs) - - logger.info(f"Parse finished, {pages} pages, {time.time()-start:.1f}s") - return JSONResponse({ - "success": True, - "message": "", - "markdown": markdown_b64, - "pages": pages - }) - - except Exception as e: - logger.exception(f"Parse error for {filename}") - raise HTTPException(status_code=500, detail=str(e)) - -# ---------- 健康检查 ---------- -@app.get("/health") -async def health(): - return {"status": "healthy"} - -# -------------------------------------------------------------- -if __name__ == "__main__": - port = int(os.getenv("PORT", "1234")) - host = os.getenv("HOST", "0.0.0.0") - logger.info(f"Starting MinerU SaaS wrapper on {host}:{port}") - uvicorn.run("mineru_saas_api:app", host=host, port=port, reload=False) diff --git a/plugins/model/pdf-mineru/requirements.txt b/plugins/model/pdf-mineru/requirements.txt deleted file mode 100644 index efe99f3d5a..0000000000 --- a/plugins/model/pdf-mineru/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -fastapi>=0.104.0 -uvicorn[standard]>=0.24.0 -httpx>=0.27.0 -loguru>=0.7.2 -python-multipart>=0.0.6 diff --git a/plugins/model/pdf-mistral/.env b/plugins/model/pdf-mistral/.env deleted file mode 100644 index 79017ded3d..0000000000 --- a/plugins/model/pdf-mistral/.env +++ /dev/null @@ -1 +0,0 @@ -MISTRAL_API_KEY= \ No newline at end of file diff --git a/plugins/model/pdf-mistral/README.md b/plugins/model/pdf-mistral/README.md deleted file mode 100644 index 84689efb12..0000000000 --- a/plugins/model/pdf-mistral/README.md +++ /dev/null @@ -1,143 +0,0 @@ -# PDF-Mistral 插件 - -此插件使用 Mistral 的 OCR API 将 PDF 文件转换为 Markdown 文本。它可以从 PDF 文档中提取文本内容和图像,并将它们作为带有嵌入式 base64 图像的 Markdown 返回。 - -## 功能特点 - -- 使用 Mistral OCR API 提取 PDF 文本 -- Markdown 中的 base64 图像嵌入 -- 完善的错误处理 -- 支持多页 PDF - -## 设置 - -### 前提条件 - -- Python 3.8+ -- Mistral API 密钥([在此获取](https://mistral.ai/)) - -### 安装 - -1. 安装所需的软件包: - -```bash -pip install -r requirements.txt -``` - -2. 通过创建/编辑 `.env` 文件设置环境变量: - -```bash -# 在 .env 文件中 -MISTRAL_API_KEY=你的-mistral-api-密钥 -``` - -## 使用方法 - -### 启动服务器 - -使用以下命令运行服务器: - -```bash -python api_mp.py -``` - -或者直接使用 uvicorn: - -```bash -uvicorn api_mp:app --host 0.0.0.0 --port 7231 -``` - -然后配置到FastGPT配置文件即可 -```json -{ - xxx - "systemEnv": { - xxx - "customPdfParse": { - "url": "http://localhost:7231/v1/parse/file", // 自定义 PDF 解析服务地址 - } - } -} -``` - -### API 端点 - -#### 解析 PDF 文件 - -**端点**:`POST /v1/parse/file` - -**请求**: -- 包含文件字段的多部分表单数据 - -**响应**: -```json -{ - "pages": 5, // PDF 中的页数 - "markdown": "...", // 带有嵌入式 base64 图像的 Markdown 内容 - "duration": 10.5 // 处理时间(秒) -} -``` - -**错误响应**: -```json -{ - "pages": 0, - "markdown": "", - "error": "错误信息" -} -``` - -### 使用示例 - -使用 curl: - -```bash -curl -X POST -F "file=@path/to/your/document.pdf" http://localhost:7231/v1/parse/file -``` - -使用 JavaScript/Axios: - -```javascript -const formData = new FormData(); -formData.append('file', pdfFile); - -const response = await axios.post('http://localhost:7231/v1/parse/file', formData, { - headers: { - 'Content-Type': 'multipart/form-data' - } -}); - -if (response.data.error) { - console.error('错误:', response.data.error); -} else { - console.log('页数:', response.data.pages); - console.log('Markdown:', response.data.markdown); -} -``` - -## 限制 - -- PDF 文件必须可读且没有密码保护 -- 最大文件大小取决于 Mistral API 限制(目前最大52.4M) -- Mistral API 有页面限制(最多最大1000页) - -## 故障排除 - -### 常见错误 - -1. **"MISTRAL_API_KEY environment variable not set"(未设置 MISTRAL_API_KEY 环境变量)** - - 确保您已将 Mistral API 密钥添加到 `.env` 文件中 - - 确保 `.env` 文件与脚本在同一目录中 - -2. **"Failed to process PDF file"(无法处理 PDF 文件)** - - PDF 可能已损坏或受密码保护 - - 尝试使用其他 PDF 文件 - -3. **Mistral API 错误** - - 检查您的 Mistral API 密钥是否有效 - - 确保您在 Mistral API 速率限制范围内 - - 验证 PDF 是否在大小/页数限制范围内 - -## 许可证 - -MIT 许可证 \ No newline at end of file diff --git a/plugins/model/pdf-mistral/api_mp.py b/plugins/model/pdf-mistral/api_mp.py deleted file mode 100755 index a284676ad6..0000000000 --- a/plugins/model/pdf-mistral/api_mp.py +++ /dev/null @@ -1,230 +0,0 @@ -import time -import base64 -import fitz -import re -import json -from contextlib import asynccontextmanager -from loguru import logger -from fastapi import HTTPException, FastAPI, UploadFile, File -from fastapi.responses import JSONResponse -from mistralai import Mistral -import os -import shutil -from dotenv import load_dotenv - -# Load environment variables from .env file -load_dotenv() - -app = FastAPI() -temp_dir = "./temp" - -# Initialize Mistral client with API key from environment variable -mistral_api_key = os.environ.get("MISTRAL_API_KEY", "") -if not mistral_api_key: - logger.warning("MISTRAL_API_KEY environment variable not set. PDF processing will fail.") - -mistral_client = Mistral(api_key=mistral_api_key) if mistral_api_key else None - -@asynccontextmanager -async def lifespan(app: FastAPI): - # Create temp directory if it doesn't exist - global temp_dir - if not os.path.exists(temp_dir): - os.makedirs(temp_dir) - print("Application startup, creating temp directory...") - yield - if temp_dir and os.path.exists(temp_dir): - shutil.rmtree(temp_dir) - print("Application shutdown, cleaning up...") - -app.router.lifespan_context = lifespan - -@app.post("/v1/parse/file") -async def read_file( - file: UploadFile = File(...)): - temp_file_path = None - try: - start_time = time.time() - global temp_dir - os.makedirs(temp_dir, exist_ok=True) - temp_file_path = os.path.join(temp_dir, file.filename) - with open(temp_file_path, "wb") as temp_file: - file_content = await file.read() - temp_file.write(file_content) - - # Get page count using PyMuPDF - try: - pdf_document = fitz.open(temp_file_path) - total_pages = pdf_document.page_count - pdf_document.close() - except Exception as e: - logger.error(f"Failed to open PDF file: {str(e)}") - return { - "pages": 0, - "markdown": "", - "error": f"Failed to process PDF file: {str(e)}" - } - - if mistral_client is None: - return { - "pages": 0, - "markdown": "", - "error": "MISTRAL_API_KEY environment variable not set." - } - - # Step 1: Upload the file to Mistral's servers - logger.info(f"Uploading file {file.filename} to Mistral servers") - with open(temp_file_path, "rb") as f: - try: - uploaded_file = mistral_client.files.upload( - file={ - "file_name": file.filename, - "content": f, - }, - purpose="ocr" - ) - except Exception as e: - error_msg = str(e) - # Try to parse Mistral API error format - try: - error_data = json.loads(error_msg) - if error_data.get("object") == "error": - error_msg = error_data.get("message", error_msg) - except: - pass - - return { - "pages": 0, - "markdown": "", - "error": f"Mistral API upload error: {error_msg}" - } - - # Step 2: Get a signed URL for the uploaded file - logger.info(f"Getting signed URL for file ID: {uploaded_file.id}") - try: - signed_url = mistral_client.files.get_signed_url(file_id=uploaded_file.id) - except Exception as e: - error_msg = str(e) - # Try to parse Mistral API error format - try: - error_data = json.loads(error_msg) - if error_data.get("object") == "error": - error_msg = error_data.get("message", error_msg) - except: - pass - - return { - "pages": 0, - "markdown": "", - "error": f"Mistral API signed URL error: {error_msg}" - } - - # Step 3: Process the file using the signed URL - logger.info("Processing file with OCR API") - try: - ocr_response = mistral_client.ocr.process( - model="mistral-ocr-latest", - document={ - "type": "document_url", - "document_url": signed_url.url, - }, - include_image_base64=True - ) - except Exception as e: - error_msg = str(e) - # Try to parse Mistral API error format - try: - error_data = json.loads(error_msg) - if error_data.get("object") == "error": - error_msg = error_data.get("message", error_msg) - except: - pass - - return { - "pages": 0, - "markdown": "", - "error": f"Mistral OCR processing error: {error_msg}" - } - - # Combine all pages' markdown content - markdown_content = "\n".join(page.markdown for page in ocr_response.pages) - - # Create a dictionary to map image filenames to their base64 data - image_map = {} - for page in ocr_response.pages: - for img in page.images: - # Extract the image filename from the image id - img_id = img.id - img_base64 = img.image_base64 - - # Print a sample of the first image base64 data for debugging - if len(image_map) == 0 and img_base64: - print("Sample image base64 prefix:", img_base64[:50] if len(img_base64) > 50 else img_base64) - print("Does base64 already include prefix?", img_base64.startswith("data:image/")) - - # Ensure the base64 data is in the correct format for the upstream system - # If it doesn't already have the prefix, add it - if not img_base64.startswith("data:image/"): - # Assume it's a PNG if we can't determine the type - img_base64 = f"data:image/png;base64,{img_base64}" - - # Add both potential formats to the map - image_map[f"{img_id}.jpeg"] = img_base64 - image_map[f"{img_id}.png"] = img_base64 - image_map[img_id] = img_base64 - - # Use regex to find all image references in the markdown content - # This will match patterns like ![any-text](any-filename.extension) - image_pattern = r'!\[(.*?)\]\((.*?)\)' - - def replace_image_with_base64(match): - alt_text = match.group(1) - img_filename = match.group(2) - - # Extract just the filename without path - img_filename_only = os.path.basename(img_filename) - - # Check if we have base64 data for this image - if img_filename_only in image_map: - return f"![]({image_map[img_filename_only]})" - else: - # If we don't have base64 data, keep the original reference - logger.warning(f"No base64 data found for image: {img_filename_only}") - return match.group(0) - - # Replace all image references with base64 data - markdown_content = re.sub(image_pattern, replace_image_with_base64, markdown_content) - - # Clean up the uploaded file from Mistral's servers - try: - logger.info(f"Deleting uploaded file from Mistral servers: {uploaded_file.id}") - mistral_client.files.delete(file_id=uploaded_file.id) - except Exception as e: - logger.warning(f"Failed to delete uploaded file: {e}") - - end_time = time.time() - duration = end_time - start_time - print(file.filename + " Total time:", duration) - - # Return with format matching client expectations - return { - "pages": total_pages, - "markdown": markdown_content, - "duration": duration # Keep this for logging purposes - } - - except Exception as e: - logger.exception(e) - return { - "pages": 0, - "markdown": "", - "error": f"Internal server error: {str(e)}" - } - - finally: - if temp_file_path and os.path.exists(temp_file_path): - os.remove(temp_file_path) - -if __name__ == "__main__": - import uvicorn - uvicorn.run(app, host="0.0.0.0", port=7231) diff --git a/plugins/model/pdf-mistral/requirements.txt b/plugins/model/pdf-mistral/requirements.txt deleted file mode 100644 index 55787e1334..0000000000 --- a/plugins/model/pdf-mistral/requirements.txt +++ /dev/null @@ -1,8 +0,0 @@ -fastapi==0.115.5 -uvicorn==0.32.1 -mistralai>=1.5.0 -PyMuPDF==1.24.14 -python-multipart==0.0.22 -python-dotenv==1.0.1 -loguru==0.7.2 -requests==2.32.4 diff --git a/plugins/model/rerank-bge/README.md b/plugins/model/rerank-bge/README.md deleted file mode 100644 index be5bf9cd99..0000000000 --- a/plugins/model/rerank-bge/README.md +++ /dev/null @@ -1,114 +0,0 @@ -# 接入 bge-rerank 重排模型 - -## 不同模型推荐配置 - -推荐配置如下: - -| 模型名 | 内存 | 显存 | 硬盘空间 | 启动命令 | -| ---------------- | ----- | ----- | -------- | ------------- | -| bge-reranker-base | >=4GB | >=4GB | >=8GB | python app.py | -| bge-reranker-large | >=8GB | >=8GB | >=8GB | python app.py | -| bge-reranker-v2-m3 | >=8GB | >=8GB | >=8GB | python app.py | - -## 源码部署 - -### 1. 安装环境 - -- Python 3.9, 3.10 -- CUDA 11.7 -- 科学上网环境 - -### 2. 下载代码 - -3 个模型代码分别为: - -1. [https://github.com/labring/FastGPT/tree/main/plugins/model/rerank-bge/bge-reranker-base](https://github.com/labring/FastGPT/tree/main/plugins/model/rerank-bge/bge-reranker-base) -2. [https://github.com/labring/FastGPT/tree/main/plugins/model/rerank-bge/bge-reranker-large](https://github.com/labring/FastGPT/tree/main/plugins/model/rerank-bge/bge-reranker-large) -3. [https://github.com/labring/FastGPT/tree/main/plugins/model/rerank-bge/bge-reranker-v2-m3](https://github.com/labring/FastGPT/tree/main/plugins/model/rerank-bge/bge-reranker-v2-m3) - -### 3. 安装依赖 - -```sh -pip install -r requirements.txt -``` - -### 4. 下载模型 - -3个模型的 huggingface 仓库地址如下: - -1. [https://huggingface.co/BAAI/bge-reranker-base](https://huggingface.co/BAAI/bge-reranker-base) -2. [https://huggingface.co/BAAI/bge-reranker-large](https://huggingface.co/BAAI/bge-reranker-large) -3. [https://huggingface.co/BAAI/bge-reranker-v2-m3](https://huggingface.co/BAAI/bge-reranker-v2-m3) - -在对应代码目录下 clone 模型。目录结构: - -``` -bge-reranker-base/ -app.py -Dockerfile -requirements.txt -``` - -### 5. 运行代码 - -```bash -python app.py -``` - -启动成功后应该会显示如下地址: - -![](./rerank1.png) - -> 这里的 `http://0.0.0.0:6006` 就是请求地址。 - -## docker 部署 - -**镜像名分别为:** - -1. registry.cn-hangzhou.aliyuncs.com/fastgpt/bge-rerank-base:v0.1 -2. registry.cn-hangzhou.aliyuncs.com/fastgpt/bge-rerank-large:v0.1 -3. registry.cn-hangzhou.aliyuncs.com/fastgpt/bge-rerank-v2-m3:v0.1 - -**端口** - -6006 - -**环境变量** - -``` -ACCESS_TOKEN=访问安全凭证,请求时,Authorization: Bearer ${ACCESS_TOKEN} -``` - -**运行命令示例** - -```sh -# auth token 为mytoken -docker run -d --name reranker -p 6006:6006 -e ACCESS_TOKEN=mytoken --gpus all registry.cn-hangzhou.aliyuncs.com/fastgpt/bge-rerank-base:v0.1 -``` - -**docker-compose.yml示例** - -``` -version: "3" -services: - reranker: - image: registry.cn-hangzhou.aliyuncs.com/fastgpt/bge-rerank-base:v0.1 - container_name: reranker - # GPU运行环境,如果宿主机未安装,将deploy配置隐藏即可 - deploy: - resources: - reservations: - devices: - - driver: nvidia - count: all - capabilities: [gpu] - ports: - - 6006:6006 - environment: - - ACCESS_TOKEN=mytoken - -``` - -## 接入 FastGPT - -参考 [ReRank模型接入](/docs/self-host/config/model/intro/#rerank-模型接入) diff --git a/plugins/model/rerank-bge/bge-reranker-base/Dockerfile b/plugins/model/rerank-bge/bge-reranker-base/Dockerfile deleted file mode 100644 index 1a576c61d9..0000000000 --- a/plugins/model/rerank-bge/bge-reranker-base/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -FROM pytorch/pytorch:2.0.1-cuda11.7-cudnn8-runtime - -# please download the model from https://huggingface.co/BAAI/bge-reranker-base and put it in the same directory as Dockerfile -COPY ./bge-reranker-base ./bge-reranker-base - -COPY requirements.txt . - -RUN python3 -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple - -COPY app.py Dockerfile . - -ENTRYPOINT python3 app.py diff --git a/plugins/model/rerank-bge/bge-reranker-base/app.py b/plugins/model/rerank-bge/bge-reranker-base/app.py deleted file mode 100644 index 8f878bf8f2..0000000000 --- a/plugins/model/rerank-bge/bge-reranker-base/app.py +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time: 2023/11/7 22:45 -@Author: zhidong -@File: reranker.py -@Desc: -""" -import os -import numpy as np -import logging -import uvicorn -import datetime -from fastapi import FastAPI, Security, HTTPException -from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials -from FlagEmbedding import FlagReranker -from pydantic import Field, BaseModel, validator -from typing import Optional, List - -app = FastAPI() -security = HTTPBearer() -env_bearer_token = 'ACCESS_TOKEN' - -class QADocs(BaseModel): - query: Optional[str] - documents: Optional[List[str]] - - -class Singleton(type): - def __call__(cls, *args, **kwargs): - if not hasattr(cls, '_instance'): - cls._instance = super().__call__(*args, **kwargs) - return cls._instance - - -RERANK_MODEL_PATH = os.path.join(os.path.dirname(__file__), "bge-reranker-base") - -class ReRanker(metaclass=Singleton): - def __init__(self, model_path): - self.reranker = FlagReranker(model_path, use_fp16=False) - - def compute_score(self, pairs: List[List[str]]): - if len(pairs) > 0: - result = self.reranker.compute_score(pairs, normalize=True) - if isinstance(result, float): - result = [result] - return result - else: - return None - -class Chat(object): - def __init__(self, rerank_model_path: str = RERANK_MODEL_PATH): - self.reranker = ReRanker(rerank_model_path) - - def fit_query_answer_rerank(self, query_docs: QADocs) -> List: - if query_docs is None or len(query_docs.documents) == 0: - return [] - - pair = [[query_docs.query, doc] for doc in query_docs.documents] - scores = self.reranker.compute_score(pair) - - new_docs = [] - for index, score in enumerate(scores): - new_docs.append({"index": index, "text": query_docs.documents[index], "score": score}) - results = [{"index": documents["index"], "relevance_score": documents["score"]} for documents in list(sorted(new_docs, key=lambda x: x["score"], reverse=True))] - return results - -@app.post('/v1/rerank') -async def handle_post_request(docs: QADocs, credentials: HTTPAuthorizationCredentials = Security(security)): - token = credentials.credentials - if env_bearer_token is not None and token != env_bearer_token: - raise HTTPException(status_code=401, detail="Invalid token") - chat = Chat() - try: - results = chat.fit_query_answer_rerank(docs) - return {"results": results} - except Exception as e: - print(f"报错:\n{e}") - return {"error": "重排出错"} - -if __name__ == "__main__": - token = os.getenv("ACCESS_TOKEN") - if token is not None: - env_bearer_token = token - try: - uvicorn.run(app, host='0.0.0.0', port=6006) - except Exception as e: - print(f"API启动失败!\n报错:\n{e}") diff --git a/plugins/model/rerank-bge/bge-reranker-base/requirements.txt b/plugins/model/rerank-bge/bge-reranker-base/requirements.txt deleted file mode 100644 index 27ccb8402e..0000000000 --- a/plugins/model/rerank-bge/bge-reranker-base/requirements.txt +++ /dev/null @@ -1,7 +0,0 @@ -fastapi==0.104.1 -transformers[sentencepiece] -FlagEmbedding==1.2.8 -pydantic==1.10.13 -uvicorn==0.17.6 -itsdangerous -protobuf diff --git a/plugins/model/rerank-bge/bge-reranker-large/Dockerfile b/plugins/model/rerank-bge/bge-reranker-large/Dockerfile deleted file mode 100644 index 9312b28a50..0000000000 --- a/plugins/model/rerank-bge/bge-reranker-large/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -FROM pytorch/pytorch:2.0.1-cuda11.7-cudnn8-runtime - -# please download the model from https://huggingface.co/BAAI/bge-reranker-large and put it in the same directory as Dockerfile -COPY ./bge-reranker-large ./bge-reranker-large - -COPY requirements.txt . - -RUN python3 -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple - -COPY app.py Dockerfile . - -ENTRYPOINT python3 app.py diff --git a/plugins/model/rerank-bge/bge-reranker-large/app.py b/plugins/model/rerank-bge/bge-reranker-large/app.py deleted file mode 100644 index 0975f7f3dd..0000000000 --- a/plugins/model/rerank-bge/bge-reranker-large/app.py +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time: 2023/11/7 22:45 -@Author: zhidong -@File: reranker.py -@Desc: -""" -import os -import numpy as np -import logging -import uvicorn -import datetime -from fastapi import FastAPI, Security, HTTPException -from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials -from FlagEmbedding import FlagReranker -from pydantic import Field, BaseModel, validator -from typing import Optional, List - -app = FastAPI() -security = HTTPBearer() -env_bearer_token = 'ACCESS_TOKEN' - -class QADocs(BaseModel): - query: Optional[str] - documents: Optional[List[str]] - - -class Singleton(type): - def __call__(cls, *args, **kwargs): - if not hasattr(cls, '_instance'): - cls._instance = super().__call__(*args, **kwargs) - return cls._instance - - -RERANK_MODEL_PATH = os.path.join(os.path.dirname(__file__), "bge-reranker-large") - -class ReRanker(metaclass=Singleton): - def __init__(self, model_path): - self.reranker = FlagReranker(model_path, use_fp16=False) - - def compute_score(self, pairs: List[List[str]]): - if len(pairs) > 0: - result = self.reranker.compute_score(pairs, normalize=True) - if isinstance(result, float): - result = [result] - return result - else: - return None - -class Chat(object): - def __init__(self, rerank_model_path: str = RERANK_MODEL_PATH): - self.reranker = ReRanker(rerank_model_path) - - def fit_query_answer_rerank(self, query_docs: QADocs) -> List: - if query_docs is None or len(query_docs.documents) == 0: - return [] - - pair = [[query_docs.query, doc] for doc in query_docs.documents] - scores = self.reranker.compute_score(pair) - - new_docs = [] - for index, score in enumerate(scores): - new_docs.append({"index": index, "text": query_docs.documents[index], "score": score}) - results = [{"index": documents["index"], "relevance_score": documents["score"]} for documents in list(sorted(new_docs, key=lambda x: x["score"], reverse=True))] - return results - -@app.post('/v1/rerank') -async def handle_post_request(docs: QADocs, credentials: HTTPAuthorizationCredentials = Security(security)): - token = credentials.credentials - if env_bearer_token is not None and token != env_bearer_token: - raise HTTPException(status_code=401, detail="Invalid token") - chat = Chat() - try: - results = chat.fit_query_answer_rerank(docs) - return {"results": results} - except Exception as e: - print(f"报错:\n{e}") - return {"error": "重排出错"} - -if __name__ == "__main__": - token = os.getenv("ACCESS_TOKEN") - if token is not None: - env_bearer_token = token - try: - uvicorn.run(app, host='0.0.0.0', port=6006) - except Exception as e: - print(f"API启动失败!\n报错:\n{e}") diff --git a/plugins/model/rerank-bge/bge-reranker-large/requirements.txt b/plugins/model/rerank-bge/bge-reranker-large/requirements.txt deleted file mode 100644 index 27ccb8402e..0000000000 --- a/plugins/model/rerank-bge/bge-reranker-large/requirements.txt +++ /dev/null @@ -1,7 +0,0 @@ -fastapi==0.104.1 -transformers[sentencepiece] -FlagEmbedding==1.2.8 -pydantic==1.10.13 -uvicorn==0.17.6 -itsdangerous -protobuf diff --git a/plugins/model/rerank-bge/bge-reranker-v2-m3/Dockerfile b/plugins/model/rerank-bge/bge-reranker-v2-m3/Dockerfile deleted file mode 100644 index be11c83f81..0000000000 --- a/plugins/model/rerank-bge/bge-reranker-v2-m3/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -FROM pytorch/pytorch:2.0.1-cuda11.7-cudnn8-runtime - -# please download the model from https://huggingface.co/BAAI/bge-reranker-v2-m3 and put it in the same directory as Dockerfile -COPY ./bge-reranker-v2-m3 ./bge-reranker-v2-m3 - -COPY requirements.txt . - -RUN python3 -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple - -COPY app.py Dockerfile . - -ENTRYPOINT python3 app.py diff --git a/plugins/model/rerank-bge/bge-reranker-v2-m3/app.py b/plugins/model/rerank-bge/bge-reranker-v2-m3/app.py deleted file mode 100644 index 293f777a62..0000000000 --- a/plugins/model/rerank-bge/bge-reranker-v2-m3/app.py +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time: 2023/11/7 22:45 -@Author: zhidong -@File: reranker.py -@Desc: -""" -import os -import numpy as np -import logging -import uvicorn -import datetime -from fastapi import FastAPI, Security, HTTPException -from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials -from FlagEmbedding import FlagReranker -from pydantic import Field, BaseModel, validator -from typing import Optional, List - -app = FastAPI() -security = HTTPBearer() -env_bearer_token = 'ACCESS_TOKEN' - -class QADocs(BaseModel): - query: Optional[str] - documents: Optional[List[str]] - - -class Singleton(type): - def __call__(cls, *args, **kwargs): - if not hasattr(cls, '_instance'): - cls._instance = super().__call__(*args, **kwargs) - return cls._instance - - -RERANK_MODEL_PATH = os.path.join(os.path.dirname(__file__), "bge-reranker-v2-m3") - -class ReRanker(metaclass=Singleton): - def __init__(self, model_path): - self.reranker = FlagReranker(model_path, use_fp16=False) - - def compute_score(self, pairs: List[List[str]]): - if len(pairs) > 0: - result = self.reranker.compute_score(pairs, normalize=True) - if isinstance(result, float): - result = [result] - return result - else: - return None - -class Chat(object): - def __init__(self, rerank_model_path: str = RERANK_MODEL_PATH): - self.reranker = ReRanker(rerank_model_path) - - def fit_query_answer_rerank(self, query_docs: QADocs) -> List: - if query_docs is None or len(query_docs.documents) == 0: - return [] - - pair = [[query_docs.query, doc] for doc in query_docs.documents] - scores = self.reranker.compute_score(pair) - - new_docs = [] - for index, score in enumerate(scores): - new_docs.append({"index": index, "text": query_docs.documents[index], "score": score}) - results = [{"index": documents["index"], "relevance_score": documents["score"]} for documents in list(sorted(new_docs, key=lambda x: x["score"], reverse=True))] - return results - -@app.post('/v1/rerank') -async def handle_post_request(docs: QADocs, credentials: HTTPAuthorizationCredentials = Security(security)): - token = credentials.credentials - if env_bearer_token is not None and token != env_bearer_token: - raise HTTPException(status_code=401, detail="Invalid token") - chat = Chat() - try: - results = chat.fit_query_answer_rerank(docs) - return {"results": results} - except Exception as e: - print(f"报错:\n{e}") - return {"error": "重排出错"} - -if __name__ == "__main__": - token = os.getenv("ACCESS_TOKEN") - if token is not None: - env_bearer_token = token - try: - uvicorn.run(app, host='0.0.0.0', port=6006) - except Exception as e: - print(f"API启动失败!\n报错:\n{e}") diff --git a/plugins/model/rerank-bge/bge-reranker-v2-m3/requirements.txt b/plugins/model/rerank-bge/bge-reranker-v2-m3/requirements.txt deleted file mode 100644 index 27ccb8402e..0000000000 --- a/plugins/model/rerank-bge/bge-reranker-v2-m3/requirements.txt +++ /dev/null @@ -1,7 +0,0 @@ -fastapi==0.104.1 -transformers[sentencepiece] -FlagEmbedding==1.2.8 -pydantic==1.10.13 -uvicorn==0.17.6 -itsdangerous -protobuf diff --git a/plugins/model/rerank-bge/rerank1.png b/plugins/model/rerank-bge/rerank1.png deleted file mode 100644 index ab26e2cfad..0000000000 Binary files a/plugins/model/rerank-bge/rerank1.png and /dev/null differ diff --git a/plugins/model/stt-sensevoice/Dockerfile b/plugins/model/stt-sensevoice/Dockerfile deleted file mode 100644 index 1280f9c8ed..0000000000 --- a/plugins/model/stt-sensevoice/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -#FROM yiminger/sensevoice:latest -FROM pytorch/pytorch:2.1.2-cuda12.1-cudnn8-runtime - -COPY ./app /app - -WORKDIR /app - -#COPY main.py /app/main.py - -RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple - -CMD ["python3","main.py"] diff --git a/plugins/model/stt-sensevoice/app/=1.13 b/plugins/model/stt-sensevoice/app/=1.13 deleted file mode 100644 index d4208e6f8a..0000000000 --- a/plugins/model/stt-sensevoice/app/=1.13 +++ /dev/null @@ -1,33 +0,0 @@ -Looking in indexes: https://download.pytorch.org/whl/cpu -Collecting torch - Downloading https://download.pytorch.org/whl/cpu/torch-2.3.1%2Bcpu-cp38-cp38-linux_x86_64.whl (190.4 MB) - ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 190.4/190.4 MB 1.3 MB/s eta 0:00:00 -Collecting torchaudio - Downloading https://download.pytorch.org/whl/cpu/torchaudio-2.3.1%2Bcpu-cp38-cp38-linux_x86_64.whl (1.7 MB) - ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 22.6 MB/s eta 0:00:00 -Collecting typing-extensions>=4.8.0 - Downloading https://download.pytorch.org/whl/typing_extensions-4.9.0-py3-none-any.whl (32 kB) -Collecting networkx - Downloading https://download.pytorch.org/whl/networkx-3.2.1-py3-none-any.whl (1.6 MB) - ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 22.8 MB/s eta 0:00:00 -Collecting jinja2 - Downloading https://download.pytorch.org/whl/Jinja2-3.1.3-py3-none-any.whl (133 kB) - ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.2/133.2 kB 25.7 MB/s eta 0:00:00 -Collecting fsspec - Downloading https://download.pytorch.org/whl/fsspec-2024.2.0-py3-none-any.whl (170 kB) - ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 170.9/170.9 kB 24.7 MB/s eta 0:00:00 -Collecting sympy - Downloading https://download.pytorch.org/whl/sympy-1.12-py3-none-any.whl (5.7 MB) - ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.7/5.7 MB 22.4 MB/s eta 0:00:00 -Collecting filelock - Downloading https://download.pytorch.org/whl/filelock-3.13.1-py3-none-any.whl (11 kB) -Collecting MarkupSafe>=2.0 - Downloading https://download.pytorch.org/whl/MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (26 kB) -Collecting networkx - Downloading https://download.pytorch.org/whl/networkx-3.0-py3-none-any.whl (2.0 MB) - ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 22.7 MB/s eta 0:00:00 -Collecting mpmath>=0.19 - Downloading https://download.pytorch.org/whl/mpmath-1.3.0-py3-none-any.whl (536 kB) - ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 106.6 MB/s eta 0:00:00 -Installing collected packages: mpmath, typing-extensions, sympy, networkx, MarkupSafe, fsspec, filelock, jinja2, torch, torchaudio -Successfully installed MarkupSafe-2.1.5 filelock-3.13.1 fsspec-2024.2.0 jinja2-3.1.3 mpmath-1.3.0 networkx-3.0 sympy-1.12 torch-2.3.1+cpu torchaudio-2.3.1+cpu typing-extensions-4.9.0 diff --git a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/.mdl b/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/.mdl deleted file mode 100644 index 0b5023b798..0000000000 Binary files a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/.mdl and /dev/null differ diff --git a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/.msc b/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/.msc deleted file mode 100644 index fc168b11b5..0000000000 Binary files a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/.msc and /dev/null differ diff --git a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/.mv b/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/.mv deleted file mode 100644 index 22104afcd4..0000000000 --- a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/.mv +++ /dev/null @@ -1 +0,0 @@ -Revision:master,CreatedAt:1720157464 \ No newline at end of file diff --git a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/README.md b/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/README.md deleted file mode 100644 index 179c613740..0000000000 --- a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/README.md +++ /dev/null @@ -1,210 +0,0 @@ ---- -frameworks: -- Pytorch -license: Apache License 2.0 -tasks: -- auto-speech-recognition - -#model-type: -##如 gpt、phi、llama、chatglm、baichuan 等 -#- gpt - -#domain: -##如 nlp、cv、audio、multi-modal -#- nlp - -#language: -##语言代码列表 https://help.aliyun.com/document_detail/215387.html?spm=a2c4g.11186623.0.0.9f8d7467kni6Aa -#- cn - -#metrics: -##如 CIDEr、Blue、ROUGE 等 -#- CIDEr - -#tags: -##各种自定义,包括 pretrained、fine-tuned、instruction-tuned、RL-tuned 等训练方法和其他 -#- pretrained - -#tools: -##如 vllm、fastchat、llamacpp、AdaSeq 等 -#- vllm ---- - -# Highlights -**SenseVoice**专注于高精度多语言语音识别、情感辨识和音频事件检测 -- **多语言识别:** 采用超过40万小时数据训练,支持超过50种语言,识别效果上优于Whisper模型。 -- **富文本识别:** - - 具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。 - - 支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。 -- **高效推理:** SenseVoice-Small模型采用非自回归端到端框架,推理延迟极低,10s音频推理仅耗时70ms,15倍优于Whisper-Large。 -- **微调定制:** 具备便捷的微调脚本与策略,方便用户根据业务场景修复长尾样本问题。 -- **服务部署:** 具有完整的服务部署链路,支持多并发请求,支持客户端语言有,python、c++、html、java与c#等。 - - -## [SenseVoice开源项目介绍]() -[SenseVoice]()开源模型是多语言音频理解模型,具有包括语音识别、语种识别、语音情感识别,声学事件检测能力。 - -[**github仓库**]() -| [**最新动态**]() -| [**环境安装**]() - -# 模型结构图 -SenseVoice多语言音频理解模型,支持语音识别、语种识别、语音情感识别、声学事件检测、逆文本正则化等能力,采用工业级数十万小时的标注音频进行模型训练,保证了模型的通用识别效果。模型可以被应用于中文、粤语、英语、日语、韩语音频识别,并输出带有情感和事件的富文本转写结果。 - -

-SenseVoice模型结构 -

- -SenseVoice-Small是基于非自回归端到端框架模型,为了指定任务,我们在语音特征前添加四个嵌入作为输入传递给编码器: -- LID:用于预测音频语种标签。 -- SER:用于预测音频情感标签。 -- AED:用于预测音频包含的事件标签。 -- ITN:用于指定识别输出文本是否进行逆文本正则化。 - - -# 用法 - -## 推理 - -### modelscope pipeline推理 -```python -from modelscope.pipelines import pipeline -from modelscope.utils.constant import Tasks - -inference_pipeline = pipeline( - task=Tasks.auto_speech_recognition, - model='iic/SenseVoiceSmall', - model_revision="master") - -rec_result = inference_pipeline('https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav') -print(rec_result) -``` - -### 直接推理 - -```python -from model import SenseVoiceSmall - -model_dir = "iic/SenseVoiceSmall" -m, kwargs = SenseVoiceSmall.from_pretrained(model=model_dir) - - -res = m.inference( - data_in="https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav", - language="auto", # "zn", "en", "yue", "ja", "ko", "nospeech" - use_itn=False, - **kwargs, -) - -print(res) -``` - -### 使用funasr推理 - -```python -from funasr import AutoModel - -model_dir = "iic/SenseVoiceSmall" -input_file = ( - "https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav" -) - -model = AutoModel(model=model_dir, - vad_model="fsmn-vad", - vad_kwargs={"max_single_segment_time": 30000}, - trust_remote_code=True, device="cuda:0") - -res = model.generate( - input=input_file, - cache={}, - language="auto", # "zn", "en", "yue", "ja", "ko", "nospeech" - use_itn=False, - batch_size_s=0, -) - -print(res) -``` - -funasr版本已经集成了vad模型,支持任意时长音频输入,`batch_size_s`单位为秒。 -如果输入均为短音频,并且需要批量化推理,为了加快推理效率,可以移除vad模型,并设置`batch_size` - -```python -model = AutoModel(model=model_dir, trust_remote_code=True, device="cuda:0") - -res = model.generate( - input=input_file, - cache={}, - language="auto", # "zn", "en", "yue", "ja", "ko", "nospeech" - use_itn=False, - batch_size=64, -) -``` - -更多详细用法,请参考 [文档](https://github.com/modelscope/FunASR/blob/main/docs/tutorial/README.md) - -## 模型下载 - - -SDK下载 -```bash -#安装ModelScope -pip install modelscope -``` -```python -#SDK模型下载 -from modelscope import snapshot_download -model_dir = snapshot_download('iic/SenseVoiceSmall') -``` -Git下载 -``` -#Git模型下载 -git clone https://www.modelscope.cn/iic/SenseVoiceSmall.git -``` - -## 服务部署 - -Undo - -# Performance - -## 语音识别效果 -我们在开源基准数据集(包括 AISHELL-1、AISHELL-2、Wenetspeech、Librispeech和Common Voice)上比较了SenseVoice与Whisper的多语言语音识别性能和推理效率。在中文和粤语识别效果上,SenseVoice-Small模型具有明显的效果优势。 - -

-SenseVoice模型在开源测试集上的表现 -

- - - -## 情感识别效果 -由于目前缺乏被广泛使用的情感识别测试指标和方法,我们在多个测试集的多种指标进行测试,并与近年来Benchmark上的多个结果进行了全面的对比。所选取的测试集同时包含中文/英文两种语言以及表演、影视剧、自然对话等多种风格的数据,在不进行目标数据微调的前提下,SenseVoice能够在测试数据上达到和超过目前最佳情感识别模型的效果。 - -

-SenseVoice模型SER效果1 -

- -同时,我们还在测试集上对多个开源情感识别模型进行对比,结果表明,SenseVoice-Large模型可以在几乎所有数据上都达到了最佳效果,而SenseVoice-Small模型同样可以在多数数据集上取得超越其他开源模型的效果。 - -

-SenseVoice模型SER效果2 -

- -## 事件检测效果 - -尽管SenseVoice只在语音数据上进行训练,它仍然可以作为事件检测模型进行单独使用。我们在环境音分类ESC-50数据集上与目前业内广泛使用的BEATS与PANN模型的效果进行了对比。SenseVoice模型能够在这些任务上取得较好的效果,但受限于训练数据与训练方式,其事件分类效果专业的事件检测模型相比仍然有一定的差距。 - -

-SenseVoice模型AED效果 -

- - - -## 推理效率 -SenseVoice-Small模型采用非自回归端到端架构,推理延迟极低。在参数量与Whisper-Small模型相当的情况下,比Whisper-Small模型推理速度快7倍,比Whisper-Large模型快17倍。同时SenseVoice-small模型在音频时长增加的情况下,推理耗时也无明显增加。 - - -

-SenseVoice模型的推理效率 -

- -

如果您是本模型的贡献者,我们邀请您根据模型贡献文档,及时完善模型卡片内容。

diff --git a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/am.mvn b/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/am.mvn deleted file mode 100644 index 681910cd1a..0000000000 --- a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/am.mvn +++ /dev/null @@ -1,8 +0,0 @@ - - 560 560 -[ 0 ] - 560 560 - 0 [ -8.311879 -8.600912 -9.615928 -10.43595 -11.21292 -11.88333 -12.36243 -12.63706 -12.8818 -12.83066 -12.89103 -12.95666 -13.19763 -13.40598 -13.49113 -13.5546 -13.55639 -13.51915 -13.68284 -13.53289 -13.42107 -13.65519 -13.50713 -13.75251 -13.76715 -13.87408 -13.73109 -13.70412 -13.56073 -13.53488 -13.54895 -13.56228 -13.59408 -13.62047 -13.64198 -13.66109 -13.62669 -13.58297 -13.57387 -13.4739 -13.53063 -13.48348 -13.61047 -13.64716 -13.71546 -13.79184 -13.90614 -14.03098 -14.18205 -14.35881 -14.48419 -14.60172 -14.70591 -14.83362 -14.92122 -15.00622 -15.05122 -15.03119 -14.99028 -14.92302 -14.86927 -14.82691 -14.7972 -14.76909 -14.71356 -14.61277 -14.51696 -14.42252 -14.36405 -14.30451 -14.23161 -14.19851 -14.16633 -14.15649 -14.10504 -13.99518 -13.79562 -13.3996 -12.7767 -11.71208 -8.311879 -8.600912 -9.615928 -10.43595 -11.21292 -11.88333 -12.36243 -12.63706 -12.8818 -12.83066 -12.89103 -12.95666 -13.19763 -13.40598 -13.49113 -13.5546 -13.55639 -13.51915 -13.68284 -13.53289 -13.42107 -13.65519 -13.50713 -13.75251 -13.76715 -13.87408 -13.73109 -13.70412 -13.56073 -13.53488 -13.54895 -13.56228 -13.59408 -13.62047 -13.64198 -13.66109 -13.62669 -13.58297 -13.57387 -13.4739 -13.53063 -13.48348 -13.61047 -13.64716 -13.71546 -13.79184 -13.90614 -14.03098 -14.18205 -14.35881 -14.48419 -14.60172 -14.70591 -14.83362 -14.92122 -15.00622 -15.05122 -15.03119 -14.99028 -14.92302 -14.86927 -14.82691 -14.7972 -14.76909 -14.71356 -14.61277 -14.51696 -14.42252 -14.36405 -14.30451 -14.23161 -14.19851 -14.16633 -14.15649 -14.10504 -13.99518 -13.79562 -13.3996 -12.7767 -11.71208 -8.311879 -8.600912 -9.615928 -10.43595 -11.21292 -11.88333 -12.36243 -12.63706 -12.8818 -12.83066 -12.89103 -12.95666 -13.19763 -13.40598 -13.49113 -13.5546 -13.55639 -13.51915 -13.68284 -13.53289 -13.42107 -13.65519 -13.50713 -13.75251 -13.76715 -13.87408 -13.73109 -13.70412 -13.56073 -13.53488 -13.54895 -13.56228 -13.59408 -13.62047 -13.64198 -13.66109 -13.62669 -13.58297 -13.57387 -13.4739 -13.53063 -13.48348 -13.61047 -13.64716 -13.71546 -13.79184 -13.90614 -14.03098 -14.18205 -14.35881 -14.48419 -14.60172 -14.70591 -14.83362 -14.92122 -15.00622 -15.05122 -15.03119 -14.99028 -14.92302 -14.86927 -14.82691 -14.7972 -14.76909 -14.71356 -14.61277 -14.51696 -14.42252 -14.36405 -14.30451 -14.23161 -14.19851 -14.16633 -14.15649 -14.10504 -13.99518 -13.79562 -13.3996 -12.7767 -11.71208 -8.311879 -8.600912 -9.615928 -10.43595 -11.21292 -11.88333 -12.36243 -12.63706 -12.8818 -12.83066 -12.89103 -12.95666 -13.19763 -13.40598 -13.49113 -13.5546 -13.55639 -13.51915 -13.68284 -13.53289 -13.42107 -13.65519 -13.50713 -13.75251 -13.76715 -13.87408 -13.73109 -13.70412 -13.56073 -13.53488 -13.54895 -13.56228 -13.59408 -13.62047 -13.64198 -13.66109 -13.62669 -13.58297 -13.57387 -13.4739 -13.53063 -13.48348 -13.61047 -13.64716 -13.71546 -13.79184 -13.90614 -14.03098 -14.18205 -14.35881 -14.48419 -14.60172 -14.70591 -14.83362 -14.92122 -15.00622 -15.05122 -15.03119 -14.99028 -14.92302 -14.86927 -14.82691 -14.7972 -14.76909 -14.71356 -14.61277 -14.51696 -14.42252 -14.36405 -14.30451 -14.23161 -14.19851 -14.16633 -14.15649 -14.10504 -13.99518 -13.79562 -13.3996 -12.7767 -11.71208 -8.311879 -8.600912 -9.615928 -10.43595 -11.21292 -11.88333 -12.36243 -12.63706 -12.8818 -12.83066 -12.89103 -12.95666 -13.19763 -13.40598 -13.49113 -13.5546 -13.55639 -13.51915 -13.68284 -13.53289 -13.42107 -13.65519 -13.50713 -13.75251 -13.76715 -13.87408 -13.73109 -13.70412 -13.56073 -13.53488 -13.54895 -13.56228 -13.59408 -13.62047 -13.64198 -13.66109 -13.62669 -13.58297 -13.57387 -13.4739 -13.53063 -13.48348 -13.61047 -13.64716 -13.71546 -13.79184 -13.90614 -14.03098 -14.18205 -14.35881 -14.48419 -14.60172 -14.70591 -14.83362 -14.92122 -15.00622 -15.05122 -15.03119 -14.99028 -14.92302 -14.86927 -14.82691 -14.7972 -14.76909 -14.71356 -14.61277 -14.51696 -14.42252 -14.36405 -14.30451 -14.23161 -14.19851 -14.16633 -14.15649 -14.10504 -13.99518 -13.79562 -13.3996 -12.7767 -11.71208 -8.311879 -8.600912 -9.615928 -10.43595 -11.21292 -11.88333 -12.36243 -12.63706 -12.8818 -12.83066 -12.89103 -12.95666 -13.19763 -13.40598 -13.49113 -13.5546 -13.55639 -13.51915 -13.68284 -13.53289 -13.42107 -13.65519 -13.50713 -13.75251 -13.76715 -13.87408 -13.73109 -13.70412 -13.56073 -13.53488 -13.54895 -13.56228 -13.59408 -13.62047 -13.64198 -13.66109 -13.62669 -13.58297 -13.57387 -13.4739 -13.53063 -13.48348 -13.61047 -13.64716 -13.71546 -13.79184 -13.90614 -14.03098 -14.18205 -14.35881 -14.48419 -14.60172 -14.70591 -14.83362 -14.92122 -15.00622 -15.05122 -15.03119 -14.99028 -14.92302 -14.86927 -14.82691 -14.7972 -14.76909 -14.71356 -14.61277 -14.51696 -14.42252 -14.36405 -14.30451 -14.23161 -14.19851 -14.16633 -14.15649 -14.10504 -13.99518 -13.79562 -13.3996 -12.7767 -11.71208 -8.311879 -8.600912 -9.615928 -10.43595 -11.21292 -11.88333 -12.36243 -12.63706 -12.8818 -12.83066 -12.89103 -12.95666 -13.19763 -13.40598 -13.49113 -13.5546 -13.55639 -13.51915 -13.68284 -13.53289 -13.42107 -13.65519 -13.50713 -13.75251 -13.76715 -13.87408 -13.73109 -13.70412 -13.56073 -13.53488 -13.54895 -13.56228 -13.59408 -13.62047 -13.64198 -13.66109 -13.62669 -13.58297 -13.57387 -13.4739 -13.53063 -13.48348 -13.61047 -13.64716 -13.71546 -13.79184 -13.90614 -14.03098 -14.18205 -14.35881 -14.48419 -14.60172 -14.70591 -14.83362 -14.92122 -15.00622 -15.05122 -15.03119 -14.99028 -14.92302 -14.86927 -14.82691 -14.7972 -14.76909 -14.71356 -14.61277 -14.51696 -14.42252 -14.36405 -14.30451 -14.23161 -14.19851 -14.16633 -14.15649 -14.10504 -13.99518 -13.79562 -13.3996 -12.7767 -11.71208 ] - 560 560 - 0 [ 0.155775 0.154484 0.1527379 0.1518718 0.1506028 0.1489256 0.147067 0.1447061 0.1436307 0.1443568 0.1451849 0.1455157 0.1452821 0.1445717 0.1439195 0.1435867 0.1436018 0.1438781 0.1442086 0.1448844 0.1454756 0.145663 0.146268 0.1467386 0.1472724 0.147664 0.1480913 0.1483739 0.1488841 0.1493636 0.1497088 0.1500379 0.1502916 0.1505389 0.1506787 0.1507102 0.1505992 0.1505445 0.1505938 0.1508133 0.1509569 0.1512396 0.1514625 0.1516195 0.1516156 0.1515561 0.1514966 0.1513976 0.1512612 0.151076 0.1510596 0.1510431 0.151077 0.1511168 0.1511917 0.151023 0.1508045 0.1505885 0.1503493 0.1502373 0.1501726 0.1500762 0.1500065 0.1499782 0.150057 0.1502658 0.150469 0.1505335 0.1505505 0.1505328 0.1504275 0.1502438 0.1499674 0.1497118 0.1494661 0.1493102 0.1493681 0.1495501 0.1499738 0.1509654 0.155775 0.154484 0.1527379 0.1518718 0.1506028 0.1489256 0.147067 0.1447061 0.1436307 0.1443568 0.1451849 0.1455157 0.1452821 0.1445717 0.1439195 0.1435867 0.1436018 0.1438781 0.1442086 0.1448844 0.1454756 0.145663 0.146268 0.1467386 0.1472724 0.147664 0.1480913 0.1483739 0.1488841 0.1493636 0.1497088 0.1500379 0.1502916 0.1505389 0.1506787 0.1507102 0.1505992 0.1505445 0.1505938 0.1508133 0.1509569 0.1512396 0.1514625 0.1516195 0.1516156 0.1515561 0.1514966 0.1513976 0.1512612 0.151076 0.1510596 0.1510431 0.151077 0.1511168 0.1511917 0.151023 0.1508045 0.1505885 0.1503493 0.1502373 0.1501726 0.1500762 0.1500065 0.1499782 0.150057 0.1502658 0.150469 0.1505335 0.1505505 0.1505328 0.1504275 0.1502438 0.1499674 0.1497118 0.1494661 0.1493102 0.1493681 0.1495501 0.1499738 0.1509654 0.155775 0.154484 0.1527379 0.1518718 0.1506028 0.1489256 0.147067 0.1447061 0.1436307 0.1443568 0.1451849 0.1455157 0.1452821 0.1445717 0.1439195 0.1435867 0.1436018 0.1438781 0.1442086 0.1448844 0.1454756 0.145663 0.146268 0.1467386 0.1472724 0.147664 0.1480913 0.1483739 0.1488841 0.1493636 0.1497088 0.1500379 0.1502916 0.1505389 0.1506787 0.1507102 0.1505992 0.1505445 0.1505938 0.1508133 0.1509569 0.1512396 0.1514625 0.1516195 0.1516156 0.1515561 0.1514966 0.1513976 0.1512612 0.151076 0.1510596 0.1510431 0.151077 0.1511168 0.1511917 0.151023 0.1508045 0.1505885 0.1503493 0.1502373 0.1501726 0.1500762 0.1500065 0.1499782 0.150057 0.1502658 0.150469 0.1505335 0.1505505 0.1505328 0.1504275 0.1502438 0.1499674 0.1497118 0.1494661 0.1493102 0.1493681 0.1495501 0.1499738 0.1509654 0.155775 0.154484 0.1527379 0.1518718 0.1506028 0.1489256 0.147067 0.1447061 0.1436307 0.1443568 0.1451849 0.1455157 0.1452821 0.1445717 0.1439195 0.1435867 0.1436018 0.1438781 0.1442086 0.1448844 0.1454756 0.145663 0.146268 0.1467386 0.1472724 0.147664 0.1480913 0.1483739 0.1488841 0.1493636 0.1497088 0.1500379 0.1502916 0.1505389 0.1506787 0.1507102 0.1505992 0.1505445 0.1505938 0.1508133 0.1509569 0.1512396 0.1514625 0.1516195 0.1516156 0.1515561 0.1514966 0.1513976 0.1512612 0.151076 0.1510596 0.1510431 0.151077 0.1511168 0.1511917 0.151023 0.1508045 0.1505885 0.1503493 0.1502373 0.1501726 0.1500762 0.1500065 0.1499782 0.150057 0.1502658 0.150469 0.1505335 0.1505505 0.1505328 0.1504275 0.1502438 0.1499674 0.1497118 0.1494661 0.1493102 0.1493681 0.1495501 0.1499738 0.1509654 0.155775 0.154484 0.1527379 0.1518718 0.1506028 0.1489256 0.147067 0.1447061 0.1436307 0.1443568 0.1451849 0.1455157 0.1452821 0.1445717 0.1439195 0.1435867 0.1436018 0.1438781 0.1442086 0.1448844 0.1454756 0.145663 0.146268 0.1467386 0.1472724 0.147664 0.1480913 0.1483739 0.1488841 0.1493636 0.1497088 0.1500379 0.1502916 0.1505389 0.1506787 0.1507102 0.1505992 0.1505445 0.1505938 0.1508133 0.1509569 0.1512396 0.1514625 0.1516195 0.1516156 0.1515561 0.1514966 0.1513976 0.1512612 0.151076 0.1510596 0.1510431 0.151077 0.1511168 0.1511917 0.151023 0.1508045 0.1505885 0.1503493 0.1502373 0.1501726 0.1500762 0.1500065 0.1499782 0.150057 0.1502658 0.150469 0.1505335 0.1505505 0.1505328 0.1504275 0.1502438 0.1499674 0.1497118 0.1494661 0.1493102 0.1493681 0.1495501 0.1499738 0.1509654 0.155775 0.154484 0.1527379 0.1518718 0.1506028 0.1489256 0.147067 0.1447061 0.1436307 0.1443568 0.1451849 0.1455157 0.1452821 0.1445717 0.1439195 0.1435867 0.1436018 0.1438781 0.1442086 0.1448844 0.1454756 0.145663 0.146268 0.1467386 0.1472724 0.147664 0.1480913 0.1483739 0.1488841 0.1493636 0.1497088 0.1500379 0.1502916 0.1505389 0.1506787 0.1507102 0.1505992 0.1505445 0.1505938 0.1508133 0.1509569 0.1512396 0.1514625 0.1516195 0.1516156 0.1515561 0.1514966 0.1513976 0.1512612 0.151076 0.1510596 0.1510431 0.151077 0.1511168 0.1511917 0.151023 0.1508045 0.1505885 0.1503493 0.1502373 0.1501726 0.1500762 0.1500065 0.1499782 0.150057 0.1502658 0.150469 0.1505335 0.1505505 0.1505328 0.1504275 0.1502438 0.1499674 0.1497118 0.1494661 0.1493102 0.1493681 0.1495501 0.1499738 0.1509654 0.155775 0.154484 0.1527379 0.1518718 0.1506028 0.1489256 0.147067 0.1447061 0.1436307 0.1443568 0.1451849 0.1455157 0.1452821 0.1445717 0.1439195 0.1435867 0.1436018 0.1438781 0.1442086 0.1448844 0.1454756 0.145663 0.146268 0.1467386 0.1472724 0.147664 0.1480913 0.1483739 0.1488841 0.1493636 0.1497088 0.1500379 0.1502916 0.1505389 0.1506787 0.1507102 0.1505992 0.1505445 0.1505938 0.1508133 0.1509569 0.1512396 0.1514625 0.1516195 0.1516156 0.1515561 0.1514966 0.1513976 0.1512612 0.151076 0.1510596 0.1510431 0.151077 0.1511168 0.1511917 0.151023 0.1508045 0.1505885 0.1503493 0.1502373 0.1501726 0.1500762 0.1500065 0.1499782 0.150057 0.1502658 0.150469 0.1505335 0.1505505 0.1505328 0.1504275 0.1502438 0.1499674 0.1497118 0.1494661 0.1493102 0.1493681 0.1495501 0.1499738 0.1509654 ] - diff --git a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/chn_jpn_yue_eng_ko_spectok.bpe.model b/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/chn_jpn_yue_eng_ko_spectok.bpe.model deleted file mode 100644 index da7e3755cc..0000000000 Binary files a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/chn_jpn_yue_eng_ko_spectok.bpe.model and /dev/null differ diff --git a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/config.yaml b/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/config.yaml deleted file mode 100644 index 26bb9d3d20..0000000000 --- a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/config.yaml +++ /dev/null @@ -1,97 +0,0 @@ -encoder: SenseVoiceEncoderSmall -encoder_conf: - output_size: 512 - attention_heads: 4 - linear_units: 2048 - num_blocks: 50 - tp_blocks: 20 - dropout_rate: 0.1 - positional_dropout_rate: 0.1 - attention_dropout_rate: 0.1 - input_layer: pe - pos_enc_class: SinusoidalPositionEncoder - normalize_before: true - kernel_size: 11 - sanm_shfit: 0 - selfattention_layer_type: sanm - - -model: SenseVoiceSmall -model_conf: - length_normalized_loss: true - sos: 1 - eos: 2 - ignore_id: -1 - -tokenizer: SentencepiecesTokenizer -tokenizer_conf: - bpemodel: null - unk_symbol: - split_with_space: true - -frontend: WavFrontend -frontend_conf: - fs: 16000 - window: hamming - n_mels: 80 - frame_length: 25 - frame_shift: 10 - lfr_m: 7 - lfr_n: 6 - cmvn_file: null - - -dataset: SenseVoiceCTCDataset -dataset_conf: - index_ds: IndexDSJsonl - batch_sampler: EspnetStyleBatchSampler - data_split_num: 32 - batch_type: token - batch_size: 14000 - max_token_length: 2000 - min_token_length: 60 - max_source_length: 2000 - min_source_length: 60 - max_target_length: 200 - min_target_length: 0 - shuffle: true - num_workers: 4 - sos: ${model_conf.sos} - eos: ${model_conf.eos} - IndexDSJsonl: IndexDSJsonl - retry: 20 - -train_conf: - accum_grad: 1 - grad_clip: 5 - max_epoch: 20 - keep_nbest_models: 10 - avg_nbest_model: 10 - log_interval: 100 - resume: true - validate_interval: 10000 - save_checkpoint_interval: 10000 - -optim: adamw -optim_conf: - lr: 0.00002 -scheduler: warmuplr -scheduler_conf: - warmup_steps: 25000 - -specaug: SpecAugLFR -specaug_conf: - apply_time_warp: false - time_warp_window: 5 - time_warp_mode: bicubic - apply_freq_mask: true - freq_mask_width_range: - - 0 - - 30 - lfr_rate: 6 - num_freq_mask: 1 - apply_time_mask: true - time_mask_width_range: - - 0 - - 12 - num_time_mask: 1 diff --git a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/configuration.json b/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/configuration.json deleted file mode 100644 index 264d8171d2..0000000000 --- a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/configuration.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "framework": "pytorch", - "task" : "auto-speech-recognition", - "model": {"type" : "funasr"}, - "pipeline": {"type":"funasr-pipeline"}, - "model_name_in_hub": { - "ms":"", - "hf":""}, - "file_path_metas": { - "init_param":"model.pt", - "config":"config.yaml", - "tokenizer_conf": {"bpemodel": "chn_jpn_yue_eng_ko_spectok.bpe.model"}, - "frontend_conf":{"cmvn_file": "am.mvn"}} -} \ No newline at end of file diff --git a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/fig/aed_figure.png b/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/fig/aed_figure.png deleted file mode 100644 index bd710c7da3..0000000000 Binary files a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/fig/aed_figure.png and /dev/null differ diff --git a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/fig/asr_results.png b/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/fig/asr_results.png deleted file mode 100644 index 2c3051624b..0000000000 Binary files a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/fig/asr_results.png and /dev/null differ diff --git a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/fig/inference.png b/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/fig/inference.png deleted file mode 100644 index 59c5e495a1..0000000000 Binary files a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/fig/inference.png and /dev/null differ diff --git a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/fig/sensevoice.png b/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/fig/sensevoice.png deleted file mode 100644 index 074be22cd7..0000000000 Binary files a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/fig/sensevoice.png and /dev/null differ diff --git a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/fig/ser_figure.png b/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/fig/ser_figure.png deleted file mode 100644 index 013196ad01..0000000000 Binary files a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/fig/ser_figure.png and /dev/null differ diff --git a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/fig/ser_table.png b/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/fig/ser_table.png deleted file mode 100644 index f9950d2951..0000000000 Binary files a/plugins/model/stt-sensevoice/app/iic/SenseVoiceSmall/fig/ser_table.png and /dev/null differ diff --git a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/.mdl b/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/.mdl deleted file mode 100644 index dbe7c19acd..0000000000 Binary files a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/.mdl and /dev/null differ diff --git a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/.msc b/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/.msc deleted file mode 100644 index 0223aee8f3..0000000000 Binary files a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/.msc and /dev/null differ diff --git a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/.mv b/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/.mv deleted file mode 100644 index ed0eee2aba..0000000000 --- a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/.mv +++ /dev/null @@ -1 +0,0 @@ -Revision:master,CreatedAt:1707184291 \ No newline at end of file diff --git a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/README.md b/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/README.md deleted file mode 100644 index 1953b3602c..0000000000 --- a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/README.md +++ /dev/null @@ -1,296 +0,0 @@ ---- -tasks: -- voice-activity-detection -domain: -- audio -model-type: -- VAD model -frameworks: -- pytorch -backbone: -- fsmn -metrics: -- f1_score -license: Apache License 2.0 -language: -- cn -tags: -- FunASR -- FSMN -- Alibaba -- Online -datasets: - train: - - 20,000 hour industrial Mandarin task - test: - - 20,000 hour industrial Mandarin task -widgets: - - task: voice-activity-detection - model_revision: v2.0.4 - inputs: - - type: audio - name: input - title: 音频 - examples: - - name: 1 - title: 示例1 - inputs: - - name: input - data: git://example/vad_example.wav - inferencespec: - cpu: 1 #CPU数量 - memory: 4096 ---- - -# FSMN-Monophone VAD 模型介绍 - -[//]: # (FSMN-Monophone VAD 模型) - -## Highlight -- 16k中文通用VAD模型:可用于检测长语音片段中有效语音的起止时间点。 - - 基于[Paraformer-large长音频模型](https://www.modelscope.cn/models/damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch/summary)场景的使用 - - 基于[FunASR框架](https://github.com/alibaba-damo-academy/FunASR),可进行ASR,VAD,[中文标点](https://www.modelscope.cn/models/damo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch/summary)的自由组合 - - 基于音频数据的有效语音片段起止时间点检测 - -## [FunASR开源项目介绍](https://github.com/alibaba-damo-academy/FunASR) -[FunASR](https://github.com/alibaba-damo-academy/FunASR)希望在语音识别的学术研究和工业应用之间架起一座桥梁。通过发布工业级语音识别模型的训练和微调,研究人员和开发人员可以更方便地进行语音识别模型的研究和生产,并推动语音识别生态的发展。让语音识别更有趣! - -[**github仓库**](https://github.com/alibaba-damo-academy/FunASR) -| [**最新动态**](https://github.com/alibaba-damo-academy/FunASR#whats-new) -| [**环境安装**](https://github.com/alibaba-damo-academy/FunASR#installation) -| [**服务部署**](https://www.funasr.com) -| [**模型库**](https://github.com/alibaba-damo-academy/FunASR/tree/main/model_zoo) -| [**联系我们**](https://github.com/alibaba-damo-academy/FunASR#contact) - - -## 模型原理介绍 - -FSMN-Monophone VAD是达摩院语音团队提出的高效语音端点检测模型,用于检测输入音频中有效语音的起止时间点信息,并将检测出来的有效音频片段输入识别引擎进行识别,减少无效语音带来的识别错误。 - -

-VAD模型结构 - -FSMN-Monophone VAD模型结构如上图所示:模型结构层面,FSMN模型结构建模时可考虑上下文信息,训练和推理速度快,且时延可控;同时根据VAD模型size以及低时延的要求,对FSMN的网络结构、右看帧数进行了适配。在建模单元层面,speech信息比较丰富,仅用单类来表征学习能力有限,我们将单一speech类升级为Monophone。建模单元细分,可以避免参数平均,抽象学习能力增强,区分性更好。 - -## 基于ModelScope进行推理 - -- 推理支持音频格式如下: - - wav文件路径,例如:data/test/audios/vad_example.wav - - wav文件url,例如:https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/vad_example.wav - - wav二进制数据,格式bytes,例如:用户直接从文件里读出bytes数据或者是麦克风录出bytes数据。 - - 已解析的audio音频,例如:audio, rate = soundfile.read("vad_example_zh.wav"),类型为numpy.ndarray或者torch.Tensor。 - - wav.scp文件,需符合如下要求: - -```sh -cat wav.scp -vad_example1 data/test/audios/vad_example1.wav -vad_example2 data/test/audios/vad_example2.wav -... -``` - -- 若输入格式wav文件url,api调用方式可参考如下范例: - -```python -from modelscope.pipelines import pipeline -from modelscope.utils.constant import Tasks - -inference_pipeline = pipeline( - task=Tasks.voice_activity_detection, - model='iic/speech_fsmn_vad_zh-cn-16k-common-pytorch', - model_revision="v2.0.4", -) - -segments_result = inference_pipeline(input='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/vad_example.wav') -print(segments_result) -``` - -- 输入音频为pcm格式,调用api时需要传入音频采样率参数fs,例如: - -```python -segments_result = inference_pipeline(input='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/vad_example.pcm', fs=16000) -``` - -- 若输入格式为文件wav.scp(注:文件名需要以.scp结尾),可添加 output_dir 参数将识别结果写入文件中,参考示例如下: - -```python -inference_pipeline(input="wav.scp", output_dir='./output_dir') -``` -识别结果输出路径结构如下: - -```sh -tree output_dir/ -output_dir/ -└── 1best_recog - └── text - -1 directory, 1 files -``` -text:VAD检测语音起止时间点结果文件(单位:ms) - -- 若输入音频为已解析的audio音频,api调用方式可参考如下范例: - -```python -import soundfile - -waveform, sample_rate = soundfile.read("vad_example_zh.wav") -segments_result = inference_pipeline(input=waveform) -print(segments_result) -``` - -- VAD常用参数调整说明(参考:vad.yaml文件): - - max_end_silence_time:尾部连续检测到多长时间静音进行尾点判停,参数范围500ms~6000ms,默认值800ms(该值过低容易出现语音提前截断的情况)。 - - speech_noise_thres:speech的得分减去noise的得分大于此值则判断为speech,参数范围:(-1,1) - - 取值越趋于-1,噪音被误判定为语音的概率越大,FA越高 - - 取值越趋于+1,语音被误判定为噪音的概率越大,Pmiss越高 - - 通常情况下,该值会根据当前模型在长语音测试集上的效果取balance - - - - -## 基于FunASR进行推理 - -下面为快速上手教程,测试音频([中文](https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/vad_example.wav),[英文](https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_en.wav)) - -### 可执行命令行 -在命令行终端执行: - -```shell -funasr ++model=paraformer-zh ++vad_model="fsmn-vad" ++punc_model="ct-punc" ++input=vad_example.wav -``` - -注:支持单条音频文件识别,也支持文件列表,列表为kaldi风格wav.scp:`wav_id wav_path` - -### python示例 -#### 非实时语音识别 -```python -from funasr import AutoModel -# paraformer-zh is a multi-functional asr model -# use vad, punc, spk or not as you need -model = AutoModel(model="paraformer-zh", model_revision="v2.0.4", - vad_model="fsmn-vad", vad_model_revision="v2.0.4", - punc_model="ct-punc-c", punc_model_revision="v2.0.4", - # spk_model="cam++", spk_model_revision="v2.0.2", - ) -res = model.generate(input=f"{model.model_path}/example/asr_example.wav", - batch_size_s=300, - hotword='魔搭') -print(res) -``` -注:`model_hub`:表示模型仓库,`ms`为选择modelscope下载,`hf`为选择huggingface下载。 - -#### 实时语音识别 - -```python -from funasr import AutoModel - -chunk_size = [0, 10, 5] #[0, 10, 5] 600ms, [0, 8, 4] 480ms -encoder_chunk_look_back = 4 #number of chunks to lookback for encoder self-attention -decoder_chunk_look_back = 1 #number of encoder chunks to lookback for decoder cross-attention - -model = AutoModel(model="paraformer-zh-streaming", model_revision="v2.0.4") - -import soundfile -import os - -wav_file = os.path.join(model.model_path, "example/asr_example.wav") -speech, sample_rate = soundfile.read(wav_file) -chunk_stride = chunk_size[1] * 960 # 600ms - -cache = {} -total_chunk_num = int(len((speech)-1)/chunk_stride+1) -for i in range(total_chunk_num): - speech_chunk = speech[i*chunk_stride:(i+1)*chunk_stride] - is_final = i == total_chunk_num - 1 - res = model.generate(input=speech_chunk, cache=cache, is_final=is_final, chunk_size=chunk_size, encoder_chunk_look_back=encoder_chunk_look_back, decoder_chunk_look_back=decoder_chunk_look_back) - print(res) -``` - -注:`chunk_size`为流式延时配置,`[0,10,5]`表示上屏实时出字粒度为`10*60=600ms`,未来信息为`5*60=300ms`。每次推理输入为`600ms`(采样点数为`16000*0.6=960`),输出为对应文字,最后一个语音片段输入需要设置`is_final=True`来强制输出最后一个字。 - -#### 语音端点检测(非实时) -```python -from funasr import AutoModel - -model = AutoModel(model="fsmn-vad", model_revision="v2.0.4") - -wav_file = f"{model.model_path}/example/asr_example.wav" -res = model.generate(input=wav_file) -print(res) -``` - -#### 语音端点检测(实时) -```python -from funasr import AutoModel - -chunk_size = 200 # ms -model = AutoModel(model="fsmn-vad", model_revision="v2.0.4") - -import soundfile - -wav_file = f"{model.model_path}/example/vad_example.wav" -speech, sample_rate = soundfile.read(wav_file) -chunk_stride = int(chunk_size * sample_rate / 1000) - -cache = {} -total_chunk_num = int(len((speech)-1)/chunk_stride+1) -for i in range(total_chunk_num): - speech_chunk = speech[i*chunk_stride:(i+1)*chunk_stride] - is_final = i == total_chunk_num - 1 - res = model.generate(input=speech_chunk, cache=cache, is_final=is_final, chunk_size=chunk_size) - if len(res[0]["value"]): - print(res) -``` - -#### 标点恢复 -```python -from funasr import AutoModel - -model = AutoModel(model="ct-punc", model_revision="v2.0.4") - -res = model.generate(input="那今天的会就到这里吧 happy new year 明年见") -print(res) -``` - -#### 时间戳预测 -```python -from funasr import AutoModel - -model = AutoModel(model="fa-zh", model_revision="v2.0.4") - -wav_file = f"{model.model_path}/example/asr_example.wav" -text_file = f"{model.model_path}/example/text.txt" -res = model.generate(input=(wav_file, text_file), data_type=("sound", "text")) -print(res) -``` - -更多详细用法([示例](https://github.com/alibaba-damo-academy/FunASR/tree/main/examples/industrial_data_pretraining)) - - -## 微调 - -详细用法([示例](https://github.com/alibaba-damo-academy/FunASR/tree/main/examples/industrial_data_pretraining)) - - - - - -## 使用方式以及适用范围 - -运行范围 -- 支持Linux-x86_64、Mac和Windows运行。 - -使用方式 -- 直接推理:可以直接对长语音数据进行计算,有效语音片段的起止时间点信息(单位:ms)。 - -## 相关论文以及引用信息 - -```BibTeX -@inproceedings{zhang2018deep, - title={Deep-FSMN for large vocabulary continuous speech recognition}, - author={Zhang, Shiliang and Lei, Ming and Yan, Zhijie and Dai, Lirong}, - booktitle={2018 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP)}, - pages={5869--5873}, - year={2018}, - organization={IEEE} -} -``` diff --git a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/am.mvn b/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/am.mvn deleted file mode 100644 index 59f64ee6d4..0000000000 --- a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/am.mvn +++ /dev/null @@ -1,8 +0,0 @@ - - 400 400 -[ 0 ] - 400 400 - 0 [ -8.311879 -8.600912 -9.615928 -10.43595 -11.21292 -11.88333 -12.36243 -12.63706 -12.8818 -12.83066 -12.89103 -12.95666 -13.19763 -13.40598 -13.49113 -13.5546 -13.55639 -13.51915 -13.68284 -13.53289 -13.42107 -13.65519 -13.50713 -13.75251 -13.76715 -13.87408 -13.73109 -13.70412 -13.56073 -13.53488 -13.54895 -13.56228 -13.59408 -13.62047 -13.64198 -13.66109 -13.62669 -13.58297 -13.57387 -13.4739 -13.53063 -13.48348 -13.61047 -13.64716 -13.71546 -13.79184 -13.90614 -14.03098 -14.18205 -14.35881 -14.48419 -14.60172 -14.70591 -14.83362 -14.92122 -15.00622 -15.05122 -15.03119 -14.99028 -14.92302 -14.86927 -14.82691 -14.7972 -14.76909 -14.71356 -14.61277 -14.51696 -14.42252 -14.36405 -14.30451 -14.23161 -14.19851 -14.16633 -14.15649 -14.10504 -13.99518 -13.79562 -13.3996 -12.7767 -11.71208 -8.311879 -8.600912 -9.615928 -10.43595 -11.21292 -11.88333 -12.36243 -12.63706 -12.8818 -12.83066 -12.89103 -12.95666 -13.19763 -13.40598 -13.49113 -13.5546 -13.55639 -13.51915 -13.68284 -13.53289 -13.42107 -13.65519 -13.50713 -13.75251 -13.76715 -13.87408 -13.73109 -13.70412 -13.56073 -13.53488 -13.54895 -13.56228 -13.59408 -13.62047 -13.64198 -13.66109 -13.62669 -13.58297 -13.57387 -13.4739 -13.53063 -13.48348 -13.61047 -13.64716 -13.71546 -13.79184 -13.90614 -14.03098 -14.18205 -14.35881 -14.48419 -14.60172 -14.70591 -14.83362 -14.92122 -15.00622 -15.05122 -15.03119 -14.99028 -14.92302 -14.86927 -14.82691 -14.7972 -14.76909 -14.71356 -14.61277 -14.51696 -14.42252 -14.36405 -14.30451 -14.23161 -14.19851 -14.16633 -14.15649 -14.10504 -13.99518 -13.79562 -13.3996 -12.7767 -11.71208 -8.311879 -8.600912 -9.615928 -10.43595 -11.21292 -11.88333 -12.36243 -12.63706 -12.8818 -12.83066 -12.89103 -12.95666 -13.19763 -13.40598 -13.49113 -13.5546 -13.55639 -13.51915 -13.68284 -13.53289 -13.42107 -13.65519 -13.50713 -13.75251 -13.76715 -13.87408 -13.73109 -13.70412 -13.56073 -13.53488 -13.54895 -13.56228 -13.59408 -13.62047 -13.64198 -13.66109 -13.62669 -13.58297 -13.57387 -13.4739 -13.53063 -13.48348 -13.61047 -13.64716 -13.71546 -13.79184 -13.90614 -14.03098 -14.18205 -14.35881 -14.48419 -14.60172 -14.70591 -14.83362 -14.92122 -15.00622 -15.05122 -15.03119 -14.99028 -14.92302 -14.86927 -14.82691 -14.7972 -14.76909 -14.71356 -14.61277 -14.51696 -14.42252 -14.36405 -14.30451 -14.23161 -14.19851 -14.16633 -14.15649 -14.10504 -13.99518 -13.79562 -13.3996 -12.7767 -11.71208 -8.311879 -8.600912 -9.615928 -10.43595 -11.21292 -11.88333 -12.36243 -12.63706 -12.8818 -12.83066 -12.89103 -12.95666 -13.19763 -13.40598 -13.49113 -13.5546 -13.55639 -13.51915 -13.68284 -13.53289 -13.42107 -13.65519 -13.50713 -13.75251 -13.76715 -13.87408 -13.73109 -13.70412 -13.56073 -13.53488 -13.54895 -13.56228 -13.59408 -13.62047 -13.64198 -13.66109 -13.62669 -13.58297 -13.57387 -13.4739 -13.53063 -13.48348 -13.61047 -13.64716 -13.71546 -13.79184 -13.90614 -14.03098 -14.18205 -14.35881 -14.48419 -14.60172 -14.70591 -14.83362 -14.92122 -15.00622 -15.05122 -15.03119 -14.99028 -14.92302 -14.86927 -14.82691 -14.7972 -14.76909 -14.71356 -14.61277 -14.51696 -14.42252 -14.36405 -14.30451 -14.23161 -14.19851 -14.16633 -14.15649 -14.10504 -13.99518 -13.79562 -13.3996 -12.7767 -11.71208 -8.311879 -8.600912 -9.615928 -10.43595 -11.21292 -11.88333 -12.36243 -12.63706 -12.8818 -12.83066 -12.89103 -12.95666 -13.19763 -13.40598 -13.49113 -13.5546 -13.55639 -13.51915 -13.68284 -13.53289 -13.42107 -13.65519 -13.50713 -13.75251 -13.76715 -13.87408 -13.73109 -13.70412 -13.56073 -13.53488 -13.54895 -13.56228 -13.59408 -13.62047 -13.64198 -13.66109 -13.62669 -13.58297 -13.57387 -13.4739 -13.53063 -13.48348 -13.61047 -13.64716 -13.71546 -13.79184 -13.90614 -14.03098 -14.18205 -14.35881 -14.48419 -14.60172 -14.70591 -14.83362 -14.92122 -15.00622 -15.05122 -15.03119 -14.99028 -14.92302 -14.86927 -14.82691 -14.7972 -14.76909 -14.71356 -14.61277 -14.51696 -14.42252 -14.36405 -14.30451 -14.23161 -14.19851 -14.16633 -14.15649 -14.10504 -13.99518 -13.79562 -13.3996 -12.7767 -11.71208 ] - 400 400 - 0 [ 0.155775 0.154484 0.1527379 0.1518718 0.1506028 0.1489256 0.147067 0.1447061 0.1436307 0.1443568 0.1451849 0.1455157 0.1452821 0.1445717 0.1439195 0.1435867 0.1436018 0.1438781 0.1442086 0.1448844 0.1454756 0.145663 0.146268 0.1467386 0.1472724 0.147664 0.1480913 0.1483739 0.1488841 0.1493636 0.1497088 0.1500379 0.1502916 0.1505389 0.1506787 0.1507102 0.1505992 0.1505445 0.1505938 0.1508133 0.1509569 0.1512396 0.1514625 0.1516195 0.1516156 0.1515561 0.1514966 0.1513976 0.1512612 0.151076 0.1510596 0.1510431 0.151077 0.1511168 0.1511917 0.151023 0.1508045 0.1505885 0.1503493 0.1502373 0.1501726 0.1500762 0.1500065 0.1499782 0.150057 0.1502658 0.150469 0.1505335 0.1505505 0.1505328 0.1504275 0.1502438 0.1499674 0.1497118 0.1494661 0.1493102 0.1493681 0.1495501 0.1499738 0.1509654 0.155775 0.154484 0.1527379 0.1518718 0.1506028 0.1489256 0.147067 0.1447061 0.1436307 0.1443568 0.1451849 0.1455157 0.1452821 0.1445717 0.1439195 0.1435867 0.1436018 0.1438781 0.1442086 0.1448844 0.1454756 0.145663 0.146268 0.1467386 0.1472724 0.147664 0.1480913 0.1483739 0.1488841 0.1493636 0.1497088 0.1500379 0.1502916 0.1505389 0.1506787 0.1507102 0.1505992 0.1505445 0.1505938 0.1508133 0.1509569 0.1512396 0.1514625 0.1516195 0.1516156 0.1515561 0.1514966 0.1513976 0.1512612 0.151076 0.1510596 0.1510431 0.151077 0.1511168 0.1511917 0.151023 0.1508045 0.1505885 0.1503493 0.1502373 0.1501726 0.1500762 0.1500065 0.1499782 0.150057 0.1502658 0.150469 0.1505335 0.1505505 0.1505328 0.1504275 0.1502438 0.1499674 0.1497118 0.1494661 0.1493102 0.1493681 0.1495501 0.1499738 0.1509654 0.155775 0.154484 0.1527379 0.1518718 0.1506028 0.1489256 0.147067 0.1447061 0.1436307 0.1443568 0.1451849 0.1455157 0.1452821 0.1445717 0.1439195 0.1435867 0.1436018 0.1438781 0.1442086 0.1448844 0.1454756 0.145663 0.146268 0.1467386 0.1472724 0.147664 0.1480913 0.1483739 0.1488841 0.1493636 0.1497088 0.1500379 0.1502916 0.1505389 0.1506787 0.1507102 0.1505992 0.1505445 0.1505938 0.1508133 0.1509569 0.1512396 0.1514625 0.1516195 0.1516156 0.1515561 0.1514966 0.1513976 0.1512612 0.151076 0.1510596 0.1510431 0.151077 0.1511168 0.1511917 0.151023 0.1508045 0.1505885 0.1503493 0.1502373 0.1501726 0.1500762 0.1500065 0.1499782 0.150057 0.1502658 0.150469 0.1505335 0.1505505 0.1505328 0.1504275 0.1502438 0.1499674 0.1497118 0.1494661 0.1493102 0.1493681 0.1495501 0.1499738 0.1509654 0.155775 0.154484 0.1527379 0.1518718 0.1506028 0.1489256 0.147067 0.1447061 0.1436307 0.1443568 0.1451849 0.1455157 0.1452821 0.1445717 0.1439195 0.1435867 0.1436018 0.1438781 0.1442086 0.1448844 0.1454756 0.145663 0.146268 0.1467386 0.1472724 0.147664 0.1480913 0.1483739 0.1488841 0.1493636 0.1497088 0.1500379 0.1502916 0.1505389 0.1506787 0.1507102 0.1505992 0.1505445 0.1505938 0.1508133 0.1509569 0.1512396 0.1514625 0.1516195 0.1516156 0.1515561 0.1514966 0.1513976 0.1512612 0.151076 0.1510596 0.1510431 0.151077 0.1511168 0.1511917 0.151023 0.1508045 0.1505885 0.1503493 0.1502373 0.1501726 0.1500762 0.1500065 0.1499782 0.150057 0.1502658 0.150469 0.1505335 0.1505505 0.1505328 0.1504275 0.1502438 0.1499674 0.1497118 0.1494661 0.1493102 0.1493681 0.1495501 0.1499738 0.1509654 0.155775 0.154484 0.1527379 0.1518718 0.1506028 0.1489256 0.147067 0.1447061 0.1436307 0.1443568 0.1451849 0.1455157 0.1452821 0.1445717 0.1439195 0.1435867 0.1436018 0.1438781 0.1442086 0.1448844 0.1454756 0.145663 0.146268 0.1467386 0.1472724 0.147664 0.1480913 0.1483739 0.1488841 0.1493636 0.1497088 0.1500379 0.1502916 0.1505389 0.1506787 0.1507102 0.1505992 0.1505445 0.1505938 0.1508133 0.1509569 0.1512396 0.1514625 0.1516195 0.1516156 0.1515561 0.1514966 0.1513976 0.1512612 0.151076 0.1510596 0.1510431 0.151077 0.1511168 0.1511917 0.151023 0.1508045 0.1505885 0.1503493 0.1502373 0.1501726 0.1500762 0.1500065 0.1499782 0.150057 0.1502658 0.150469 0.1505335 0.1505505 0.1505328 0.1504275 0.1502438 0.1499674 0.1497118 0.1494661 0.1493102 0.1493681 0.1495501 0.1499738 0.1509654 ] - \ No newline at end of file diff --git a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/config.yaml b/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/config.yaml deleted file mode 100644 index 4664aef957..0000000000 --- a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/config.yaml +++ /dev/null @@ -1,56 +0,0 @@ -frontend: WavFrontendOnline -frontend_conf: - fs: 16000 - window: hamming - n_mels: 80 - frame_length: 25 - frame_shift: 10 - dither: 0.0 - lfr_m: 5 - lfr_n: 1 - -model: FsmnVADStreaming -model_conf: - sample_rate: 16000 - detect_mode: 1 - snr_mode: 0 - max_end_silence_time: 800 - max_start_silence_time: 3000 - do_start_point_detection: True - do_end_point_detection: True - window_size_ms: 200 - sil_to_speech_time_thres: 150 - speech_to_sil_time_thres: 150 - speech_2_noise_ratio: 1.0 - do_extend: 1 - lookback_time_start_point: 200 - lookahead_time_end_point: 100 - max_single_segment_time: 60000 - snr_thres: -100.0 - noise_frame_num_used_for_snr: 100 - decibel_thres: -100.0 - speech_noise_thres: 0.6 - fe_prior_thres: 0.0001 - silence_pdf_num: 1 - sil_pdf_ids: [0] - speech_noise_thresh_low: -0.1 - speech_noise_thresh_high: 0.3 - output_frame_probs: False - frame_in_ms: 10 - frame_length_ms: 25 - -encoder: FSMN -encoder_conf: - input_dim: 400 - input_affine_dim: 140 - fsmn_layers: 4 - linear_dim: 250 - proj_dim: 128 - lorder: 20 - rorder: 0 - lstride: 1 - rstride: 0 - output_affine_dim: 140 - output_dim: 248 - - diff --git a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/configuration.json b/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/configuration.json deleted file mode 100644 index c5f8b9e15c..0000000000 --- a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/configuration.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "framework": "pytorch", - "task" : "voice-activity-detection", - "pipeline": {"type":"funasr-pipeline"}, - "model": {"type" : "funasr"}, - "file_path_metas": { - "init_param":"model.pt", - "config":"config.yaml", - "frontend_conf":{"cmvn_file": "am.mvn"}}, - "model_name_in_hub": { - "ms":"iic/speech_fsmn_vad_zh-cn-16k-common-pytorch", - "hf":""} -} \ No newline at end of file diff --git a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/example/vad_example.wav b/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/example/vad_example.wav deleted file mode 100644 index 2ebc8c776b..0000000000 Binary files a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/example/vad_example.wav and /dev/null differ diff --git a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/fig/struct.png b/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/fig/struct.png deleted file mode 100644 index 699c33c433..0000000000 Binary files a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/fig/struct.png and /dev/null differ diff --git a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/model.pt b/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/model.pt deleted file mode 100644 index dc8c365c94..0000000000 Binary files a/plugins/model/stt-sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/model.pt and /dev/null differ diff --git a/plugins/model/stt-sensevoice/app/main.py b/plugins/model/stt-sensevoice/app/main.py deleted file mode 100644 index c1c8c2cbea..0000000000 --- a/plugins/model/stt-sensevoice/app/main.py +++ /dev/null @@ -1,95 +0,0 @@ -# -*- coding: utf-8 -*- - -from fastapi import FastAPI, File, UploadFile, HTTPException -from pydantic import BaseModel, HttpUrl, ValidationError -from typing import List -from funasr import AutoModel -from funasr.utils.postprocess_utils import rich_transcription_postprocess -import uuid -import os - -app = FastAPI() - - -# 数据验证模型 -class UrlInput(BaseModel): - audio_urls: List[HttpUrl] - - -# 模型加载 -model_dir = "iic/SenseVoiceSmall" - -# 快速预测 -# model = AutoModel(model=model_dir, trust_remote_code=True, device="cpu") - -# 准确预测 -model = AutoModel( - model=model_dir, - vad_model="fsmn-vad", - vad_kwargs={"max_single_segment_time": 30000}, - trust_remote_code=True, - device="cuda:0", -) - - -@app.post("/upload-url/") -async def upload_url(data: UrlInput): - try: - results = [] - for url in data.audio_urls: - res = model.generate( - input=str(url), # 将 URL 转换为字符串 - cache={}, - language=language, - use_itn=False, - batch_size=batch_size, - ) - data = rich_transcription_postprocess(res[0]["text"]) - results.append(data) - return {"message": "URL input processed successfully", "results": results} - except ValidationError as e: - raise HTTPException(status_code=400, detail=e.errors()) - except Exception as e: - raise HTTPException(status_code=500, detail=str(e)) - - -@app.post("/v1/audio/transcriptions") -async def upload_file(file: UploadFile = File(...)): - try: - #for file in files: - if not file.content_type.startswith("audio/"): - raise HTTPException(status_code=400, detail="Invalid file type") - - # 读取文件为 bytes - #audio_bytes = await file.read() - - unique_filename = str(uuid.uuid4()) + ".mp3" - - # 保存上传的音频文件 - audio_file_path = os.path.join("/tmp", unique_filename) - with open(audio_file_path, "wb") as audio_file: - audio_file.write(await file.read()) - - # 直接将文件对象传递给模型 - res = model.generate( - input=audio_file_path, - cache={}, - language=language, - use_itn=True, - batch_size=batch_size, - merge_vad=True, # - merge_length_s=15, - ) - data = rich_transcription_postprocess(res[0]["text"]) - return {"message": "File inputs processed successfully", "text": data} - except Exception as e: - raise HTTPException(status_code=500, detail=str(e)) - - -if __name__ == "__main__": - batch_size = 60 - language = "auto" - - import uvicorn - - uvicorn.run(app, host="0.0.0.0", port=8000) diff --git a/plugins/model/stt-sensevoice/app/model.py b/plugins/model/stt-sensevoice/app/model.py deleted file mode 100644 index 177660a9f3..0000000000 --- a/plugins/model/stt-sensevoice/app/model.py +++ /dev/null @@ -1,895 +0,0 @@ - -import time -import torch -from torch import nn -import torch.nn.functional as F -from typing import Iterable, Optional - -from funasr.register import tables -from funasr.models.ctc.ctc import CTC -from funasr.utils.datadir_writer import DatadirWriter -from funasr.models.paraformer.search import Hypothesis -from funasr.train_utils.device_funcs import force_gatherable -from funasr.losses.label_smoothing_loss import LabelSmoothingLoss -from funasr.metrics.compute_acc import compute_accuracy, th_accuracy -from funasr.utils.load_utils import load_audio_text_image_video, extract_fbank - - -class SinusoidalPositionEncoder(torch.nn.Module): - """ """ - - def __int__(self, d_model=80, dropout_rate=0.1): - pass - - def encode( - self, positions: torch.Tensor = None, depth: int = None, dtype: torch.dtype = torch.float32 - ): - batch_size = positions.size(0) - positions = positions.type(dtype) - device = positions.device - log_timescale_increment = torch.log(torch.tensor([10000], dtype=dtype, device=device)) / ( - depth / 2 - 1 - ) - inv_timescales = torch.exp( - torch.arange(depth / 2, device=device).type(dtype) * (-log_timescale_increment) - ) - inv_timescales = torch.reshape(inv_timescales, [batch_size, -1]) - scaled_time = torch.reshape(positions, [1, -1, 1]) * torch.reshape( - inv_timescales, [1, 1, -1] - ) - encoding = torch.cat([torch.sin(scaled_time), torch.cos(scaled_time)], dim=2) - return encoding.type(dtype) - - def forward(self, x): - batch_size, timesteps, input_dim = x.size() - positions = torch.arange(1, timesteps + 1, device=x.device)[None, :] - position_encoding = self.encode(positions, input_dim, x.dtype).to(x.device) - - return x + position_encoding - - -class PositionwiseFeedForward(torch.nn.Module): - """Positionwise feed forward layer. - - Args: - idim (int): Input dimenstion. - hidden_units (int): The number of hidden units. - dropout_rate (float): Dropout rate. - - """ - - def __init__(self, idim, hidden_units, dropout_rate, activation=torch.nn.ReLU()): - """Construct an PositionwiseFeedForward object.""" - super(PositionwiseFeedForward, self).__init__() - self.w_1 = torch.nn.Linear(idim, hidden_units) - self.w_2 = torch.nn.Linear(hidden_units, idim) - self.dropout = torch.nn.Dropout(dropout_rate) - self.activation = activation - - def forward(self, x): - """Forward function.""" - return self.w_2(self.dropout(self.activation(self.w_1(x)))) - - -class MultiHeadedAttentionSANM(nn.Module): - """Multi-Head Attention layer. - - Args: - n_head (int): The number of heads. - n_feat (int): The number of features. - dropout_rate (float): Dropout rate. - - """ - - def __init__( - self, - n_head, - in_feat, - n_feat, - dropout_rate, - kernel_size, - sanm_shfit=0, - lora_list=None, - lora_rank=8, - lora_alpha=16, - lora_dropout=0.1, - ): - """Construct an MultiHeadedAttention object.""" - super().__init__() - assert n_feat % n_head == 0 - # We assume d_v always equals d_k - self.d_k = n_feat // n_head - self.h = n_head - # self.linear_q = nn.Linear(n_feat, n_feat) - # self.linear_k = nn.Linear(n_feat, n_feat) - # self.linear_v = nn.Linear(n_feat, n_feat) - - self.linear_out = nn.Linear(n_feat, n_feat) - self.linear_q_k_v = nn.Linear(in_feat, n_feat * 3) - self.attn = None - self.dropout = nn.Dropout(p=dropout_rate) - - self.fsmn_block = nn.Conv1d( - n_feat, n_feat, kernel_size, stride=1, padding=0, groups=n_feat, bias=False - ) - # padding - left_padding = (kernel_size - 1) // 2 - if sanm_shfit > 0: - left_padding = left_padding + sanm_shfit - right_padding = kernel_size - 1 - left_padding - self.pad_fn = nn.ConstantPad1d((left_padding, right_padding), 0.0) - - def forward_fsmn(self, inputs, mask, mask_shfit_chunk=None): - b, t, d = inputs.size() - if mask is not None: - mask = torch.reshape(mask, (b, -1, 1)) - if mask_shfit_chunk is not None: - mask = mask * mask_shfit_chunk - inputs = inputs * mask - - x = inputs.transpose(1, 2) - x = self.pad_fn(x) - x = self.fsmn_block(x) - x = x.transpose(1, 2) - x += inputs - x = self.dropout(x) - if mask is not None: - x = x * mask - return x - - def forward_qkv(self, x): - """Transform query, key and value. - - Args: - query (torch.Tensor): Query tensor (#batch, time1, size). - key (torch.Tensor): Key tensor (#batch, time2, size). - value (torch.Tensor): Value tensor (#batch, time2, size). - - Returns: - torch.Tensor: Transformed query tensor (#batch, n_head, time1, d_k). - torch.Tensor: Transformed key tensor (#batch, n_head, time2, d_k). - torch.Tensor: Transformed value tensor (#batch, n_head, time2, d_k). - - """ - b, t, d = x.size() - q_k_v = self.linear_q_k_v(x) - q, k, v = torch.split(q_k_v, int(self.h * self.d_k), dim=-1) - q_h = torch.reshape(q, (b, t, self.h, self.d_k)).transpose( - 1, 2 - ) # (batch, head, time1, d_k) - k_h = torch.reshape(k, (b, t, self.h, self.d_k)).transpose( - 1, 2 - ) # (batch, head, time2, d_k) - v_h = torch.reshape(v, (b, t, self.h, self.d_k)).transpose( - 1, 2 - ) # (batch, head, time2, d_k) - - return q_h, k_h, v_h, v - - def forward_attention(self, value, scores, mask, mask_att_chunk_encoder=None): - """Compute attention context vector. - - Args: - value (torch.Tensor): Transformed value (#batch, n_head, time2, d_k). - scores (torch.Tensor): Attention score (#batch, n_head, time1, time2). - mask (torch.Tensor): Mask (#batch, 1, time2) or (#batch, time1, time2). - - Returns: - torch.Tensor: Transformed value (#batch, time1, d_model) - weighted by the attention score (#batch, time1, time2). - - """ - n_batch = value.size(0) - if mask is not None: - if mask_att_chunk_encoder is not None: - mask = mask * mask_att_chunk_encoder - - mask = mask.unsqueeze(1).eq(0) # (batch, 1, *, time2) - - min_value = -float( - "inf" - ) # float(numpy.finfo(torch.tensor(0, dtype=scores.dtype).numpy().dtype).min) - scores = scores.masked_fill(mask, min_value) - self.attn = torch.softmax(scores, dim=-1).masked_fill( - mask, 0.0 - ) # (batch, head, time1, time2) - else: - self.attn = torch.softmax(scores, dim=-1) # (batch, head, time1, time2) - - p_attn = self.dropout(self.attn) - x = torch.matmul(p_attn, value) # (batch, head, time1, d_k) - x = ( - x.transpose(1, 2).contiguous().view(n_batch, -1, self.h * self.d_k) - ) # (batch, time1, d_model) - - return self.linear_out(x) # (batch, time1, d_model) - - def forward(self, x, mask, mask_shfit_chunk=None, mask_att_chunk_encoder=None): - """Compute scaled dot product attention. - - Args: - query (torch.Tensor): Query tensor (#batch, time1, size). - key (torch.Tensor): Key tensor (#batch, time2, size). - value (torch.Tensor): Value tensor (#batch, time2, size). - mask (torch.Tensor): Mask tensor (#batch, 1, time2) or - (#batch, time1, time2). - - Returns: - torch.Tensor: Output tensor (#batch, time1, d_model). - - """ - q_h, k_h, v_h, v = self.forward_qkv(x) - fsmn_memory = self.forward_fsmn(v, mask, mask_shfit_chunk) - q_h = q_h * self.d_k ** (-0.5) - scores = torch.matmul(q_h, k_h.transpose(-2, -1)) - att_outs = self.forward_attention(v_h, scores, mask, mask_att_chunk_encoder) - return att_outs + fsmn_memory - - def forward_chunk(self, x, cache=None, chunk_size=None, look_back=0): - """Compute scaled dot product attention. - - Args: - query (torch.Tensor): Query tensor (#batch, time1, size). - key (torch.Tensor): Key tensor (#batch, time2, size). - value (torch.Tensor): Value tensor (#batch, time2, size). - mask (torch.Tensor): Mask tensor (#batch, 1, time2) or - (#batch, time1, time2). - - Returns: - torch.Tensor: Output tensor (#batch, time1, d_model). - - """ - q_h, k_h, v_h, v = self.forward_qkv(x) - if chunk_size is not None and look_back > 0 or look_back == -1: - if cache is not None: - k_h_stride = k_h[:, :, : -(chunk_size[2]), :] - v_h_stride = v_h[:, :, : -(chunk_size[2]), :] - k_h = torch.cat((cache["k"], k_h), dim=2) - v_h = torch.cat((cache["v"], v_h), dim=2) - - cache["k"] = torch.cat((cache["k"], k_h_stride), dim=2) - cache["v"] = torch.cat((cache["v"], v_h_stride), dim=2) - if look_back != -1: - cache["k"] = cache["k"][:, :, -(look_back * chunk_size[1]) :, :] - cache["v"] = cache["v"][:, :, -(look_back * chunk_size[1]) :, :] - else: - cache_tmp = { - "k": k_h[:, :, : -(chunk_size[2]), :], - "v": v_h[:, :, : -(chunk_size[2]), :], - } - cache = cache_tmp - fsmn_memory = self.forward_fsmn(v, None) - q_h = q_h * self.d_k ** (-0.5) - scores = torch.matmul(q_h, k_h.transpose(-2, -1)) - att_outs = self.forward_attention(v_h, scores, None) - return att_outs + fsmn_memory, cache - - -class LayerNorm(nn.LayerNorm): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - def forward(self, input): - output = F.layer_norm( - input.float(), - self.normalized_shape, - self.weight.float() if self.weight is not None else None, - self.bias.float() if self.bias is not None else None, - self.eps, - ) - return output.type_as(input) - - -def sequence_mask(lengths, maxlen=None, dtype=torch.float32, device=None): - if maxlen is None: - maxlen = lengths.max() - row_vector = torch.arange(0, maxlen, 1).to(lengths.device) - matrix = torch.unsqueeze(lengths, dim=-1) - mask = row_vector < matrix - mask = mask.detach() - - return mask.type(dtype).to(device) if device is not None else mask.type(dtype) - - -class EncoderLayerSANM(nn.Module): - def __init__( - self, - in_size, - size, - self_attn, - feed_forward, - dropout_rate, - normalize_before=True, - concat_after=False, - stochastic_depth_rate=0.0, - ): - """Construct an EncoderLayer object.""" - super(EncoderLayerSANM, self).__init__() - self.self_attn = self_attn - self.feed_forward = feed_forward - self.norm1 = LayerNorm(in_size) - self.norm2 = LayerNorm(size) - self.dropout = nn.Dropout(dropout_rate) - self.in_size = in_size - self.size = size - self.normalize_before = normalize_before - self.concat_after = concat_after - if self.concat_after: - self.concat_linear = nn.Linear(size + size, size) - self.stochastic_depth_rate = stochastic_depth_rate - self.dropout_rate = dropout_rate - - def forward(self, x, mask, cache=None, mask_shfit_chunk=None, mask_att_chunk_encoder=None): - """Compute encoded features. - - Args: - x_input (torch.Tensor): Input tensor (#batch, time, size). - mask (torch.Tensor): Mask tensor for the input (#batch, time). - cache (torch.Tensor): Cache tensor of the input (#batch, time - 1, size). - - Returns: - torch.Tensor: Output tensor (#batch, time, size). - torch.Tensor: Mask tensor (#batch, time). - - """ - skip_layer = False - # with stochastic depth, residual connection `x + f(x)` becomes - # `x <- x + 1 / (1 - p) * f(x)` at training time. - stoch_layer_coeff = 1.0 - if self.training and self.stochastic_depth_rate > 0: - skip_layer = torch.rand(1).item() < self.stochastic_depth_rate - stoch_layer_coeff = 1.0 / (1 - self.stochastic_depth_rate) - - if skip_layer: - if cache is not None: - x = torch.cat([cache, x], dim=1) - return x, mask - - residual = x - if self.normalize_before: - x = self.norm1(x) - - if self.concat_after: - x_concat = torch.cat( - ( - x, - self.self_attn( - x, - mask, - mask_shfit_chunk=mask_shfit_chunk, - mask_att_chunk_encoder=mask_att_chunk_encoder, - ), - ), - dim=-1, - ) - if self.in_size == self.size: - x = residual + stoch_layer_coeff * self.concat_linear(x_concat) - else: - x = stoch_layer_coeff * self.concat_linear(x_concat) - else: - if self.in_size == self.size: - x = residual + stoch_layer_coeff * self.dropout( - self.self_attn( - x, - mask, - mask_shfit_chunk=mask_shfit_chunk, - mask_att_chunk_encoder=mask_att_chunk_encoder, - ) - ) - else: - x = stoch_layer_coeff * self.dropout( - self.self_attn( - x, - mask, - mask_shfit_chunk=mask_shfit_chunk, - mask_att_chunk_encoder=mask_att_chunk_encoder, - ) - ) - if not self.normalize_before: - x = self.norm1(x) - - residual = x - if self.normalize_before: - x = self.norm2(x) - x = residual + stoch_layer_coeff * self.dropout(self.feed_forward(x)) - if not self.normalize_before: - x = self.norm2(x) - - return x, mask, cache, mask_shfit_chunk, mask_att_chunk_encoder - - def forward_chunk(self, x, cache=None, chunk_size=None, look_back=0): - """Compute encoded features. - - Args: - x_input (torch.Tensor): Input tensor (#batch, time, size). - mask (torch.Tensor): Mask tensor for the input (#batch, time). - cache (torch.Tensor): Cache tensor of the input (#batch, time - 1, size). - - Returns: - torch.Tensor: Output tensor (#batch, time, size). - torch.Tensor: Mask tensor (#batch, time). - - """ - - residual = x - if self.normalize_before: - x = self.norm1(x) - - if self.in_size == self.size: - attn, cache = self.self_attn.forward_chunk(x, cache, chunk_size, look_back) - x = residual + attn - else: - x, cache = self.self_attn.forward_chunk(x, cache, chunk_size, look_back) - - if not self.normalize_before: - x = self.norm1(x) - - residual = x - if self.normalize_before: - x = self.norm2(x) - x = residual + self.feed_forward(x) - if not self.normalize_before: - x = self.norm2(x) - - return x, cache - - -@tables.register("encoder_classes", "SenseVoiceEncoderSmall") -class SenseVoiceEncoderSmall(nn.Module): - """ - Author: Speech Lab of DAMO Academy, Alibaba Group - SCAMA: Streaming chunk-aware multihead attention for online end-to-end speech recognition - https://arxiv.org/abs/2006.01713 - """ - - def __init__( - self, - input_size: int, - output_size: int = 256, - attention_heads: int = 4, - linear_units: int = 2048, - num_blocks: int = 6, - tp_blocks: int = 0, - dropout_rate: float = 0.1, - positional_dropout_rate: float = 0.1, - attention_dropout_rate: float = 0.0, - stochastic_depth_rate: float = 0.0, - input_layer: Optional[str] = "conv2d", - pos_enc_class=SinusoidalPositionEncoder, - normalize_before: bool = True, - concat_after: bool = False, - positionwise_layer_type: str = "linear", - positionwise_conv_kernel_size: int = 1, - padding_idx: int = -1, - kernel_size: int = 11, - sanm_shfit: int = 0, - selfattention_layer_type: str = "sanm", - **kwargs, - ): - super().__init__() - self._output_size = output_size - - self.embed = SinusoidalPositionEncoder() - - self.normalize_before = normalize_before - - positionwise_layer = PositionwiseFeedForward - positionwise_layer_args = ( - output_size, - linear_units, - dropout_rate, - ) - - encoder_selfattn_layer = MultiHeadedAttentionSANM - encoder_selfattn_layer_args0 = ( - attention_heads, - input_size, - output_size, - attention_dropout_rate, - kernel_size, - sanm_shfit, - ) - encoder_selfattn_layer_args = ( - attention_heads, - output_size, - output_size, - attention_dropout_rate, - kernel_size, - sanm_shfit, - ) - - self.encoders0 = nn.ModuleList( - [ - EncoderLayerSANM( - input_size, - output_size, - encoder_selfattn_layer(*encoder_selfattn_layer_args0), - positionwise_layer(*positionwise_layer_args), - dropout_rate, - ) - for i in range(1) - ] - ) - self.encoders = nn.ModuleList( - [ - EncoderLayerSANM( - output_size, - output_size, - encoder_selfattn_layer(*encoder_selfattn_layer_args), - positionwise_layer(*positionwise_layer_args), - dropout_rate, - ) - for i in range(num_blocks - 1) - ] - ) - - self.tp_encoders = nn.ModuleList( - [ - EncoderLayerSANM( - output_size, - output_size, - encoder_selfattn_layer(*encoder_selfattn_layer_args), - positionwise_layer(*positionwise_layer_args), - dropout_rate, - ) - for i in range(tp_blocks) - ] - ) - - self.after_norm = LayerNorm(output_size) - - self.tp_norm = LayerNorm(output_size) - - def output_size(self) -> int: - return self._output_size - - def forward( - self, - xs_pad: torch.Tensor, - ilens: torch.Tensor, - ): - """Embed positions in tensor.""" - masks = sequence_mask(ilens, device=ilens.device)[:, None, :] - - xs_pad *= self.output_size() ** 0.5 - - xs_pad = self.embed(xs_pad) - - # forward encoder1 - for layer_idx, encoder_layer in enumerate(self.encoders0): - encoder_outs = encoder_layer(xs_pad, masks) - xs_pad, masks = encoder_outs[0], encoder_outs[1] - - for layer_idx, encoder_layer in enumerate(self.encoders): - encoder_outs = encoder_layer(xs_pad, masks) - xs_pad, masks = encoder_outs[0], encoder_outs[1] - - xs_pad = self.after_norm(xs_pad) - - # forward encoder2 - olens = masks.squeeze(1).sum(1).int() - - for layer_idx, encoder_layer in enumerate(self.tp_encoders): - encoder_outs = encoder_layer(xs_pad, masks) - xs_pad, masks = encoder_outs[0], encoder_outs[1] - - xs_pad = self.tp_norm(xs_pad) - return xs_pad, olens - - -@tables.register("model_classes", "SenseVoiceSmall") -class SenseVoiceSmall(nn.Module): - """CTC-attention hybrid Encoder-Decoder model""" - - def __init__( - self, - specaug: str = None, - specaug_conf: dict = None, - normalize: str = None, - normalize_conf: dict = None, - encoder: str = None, - encoder_conf: dict = None, - ctc_conf: dict = None, - input_size: int = 80, - vocab_size: int = -1, - ignore_id: int = -1, - blank_id: int = 0, - sos: int = 1, - eos: int = 2, - length_normalized_loss: bool = False, - **kwargs, - ): - - super().__init__() - - if specaug is not None: - specaug_class = tables.specaug_classes.get(specaug) - specaug = specaug_class(**specaug_conf) - if normalize is not None: - normalize_class = tables.normalize_classes.get(normalize) - normalize = normalize_class(**normalize_conf) - encoder_class = tables.encoder_classes.get(encoder) - encoder = encoder_class(input_size=input_size, **encoder_conf) - encoder_output_size = encoder.output_size() - - if ctc_conf is None: - ctc_conf = {} - ctc = CTC(odim=vocab_size, encoder_output_size=encoder_output_size, **ctc_conf) - - self.blank_id = blank_id - self.sos = sos if sos is not None else vocab_size - 1 - self.eos = eos if eos is not None else vocab_size - 1 - self.vocab_size = vocab_size - self.ignore_id = ignore_id - self.specaug = specaug - self.normalize = normalize - self.encoder = encoder - self.error_calculator = None - - self.ctc = ctc - - self.length_normalized_loss = length_normalized_loss - self.encoder_output_size = encoder_output_size - - self.lid_dict = {"auto": 0, "zh": 3, "en": 4, "yue": 7, "ja": 11, "ko": 12, "nospeech": 13} - self.lid_int_dict = {24884: 3, 24885: 4, 24888: 7, 24892: 11, 24896: 12, 24992: 13} - self.textnorm_dict = {"withitn": 14, "woitn": 15} - self.textnorm_int_dict = {25016: 14, 25017: 15} - self.embed = torch.nn.Embedding(7 + len(self.lid_dict) + len(self.textnorm_dict), input_size) - self.emo_dict = {"unk": 25009, "happy": 25001, "sad": 25002, "angry": 25003, "neutral": 25004} - - self.criterion_att = LabelSmoothingLoss( - size=self.vocab_size, - padding_idx=self.ignore_id, - smoothing=kwargs.get("lsm_weight", 0.0), - normalize_length=self.length_normalized_loss, - ) - - @staticmethod - def from_pretrained(model:str=None, **kwargs): - from funasr import AutoModel - model, kwargs = AutoModel.build_model(model=model, trust_remote_code=True, **kwargs) - - return model, kwargs - - def forward( - self, - speech: torch.Tensor, - speech_lengths: torch.Tensor, - text: torch.Tensor, - text_lengths: torch.Tensor, - **kwargs, - ): - """Encoder + Decoder + Calc loss - Args: - speech: (Batch, Length, ...) - speech_lengths: (Batch, ) - text: (Batch, Length) - text_lengths: (Batch,) - """ - # import pdb; - # pdb.set_trace() - if len(text_lengths.size()) > 1: - text_lengths = text_lengths[:, 0] - if len(speech_lengths.size()) > 1: - speech_lengths = speech_lengths[:, 0] - - batch_size = speech.shape[0] - - # 1. Encoder - encoder_out, encoder_out_lens = self.encode(speech, speech_lengths, text) - - loss_ctc, cer_ctc = None, None - loss_rich, acc_rich = None, None - stats = dict() - - loss_ctc, cer_ctc = self._calc_ctc_loss( - encoder_out[:, 4:, :], encoder_out_lens - 4, text[:, 4:], text_lengths - 4 - ) - - loss_rich, acc_rich = self._calc_rich_ce_loss( - encoder_out[:, :4, :], text[:, :4] - ) - - loss = loss_ctc - # Collect total loss stats - stats["loss"] = torch.clone(loss.detach()) if loss_ctc is not None else None - stats["loss_rich"] = torch.clone(loss_rich.detach()) if loss_rich is not None else None - stats["acc_rich"] = acc_rich - - # force_gatherable: to-device and to-tensor if scalar for DataParallel - if self.length_normalized_loss: - batch_size = int((text_lengths + 1).sum()) - loss, stats, weight = force_gatherable((loss, stats, batch_size), loss.device) - return loss, stats, weight - - def encode( - self, - speech: torch.Tensor, - speech_lengths: torch.Tensor, - text: torch.Tensor, - **kwargs, - ): - """Frontend + Encoder. Note that this method is used by asr_inference.py - Args: - speech: (Batch, Length, ...) - speech_lengths: (Batch, ) - ind: int - """ - - # Data augmentation - if self.specaug is not None and self.training: - speech, speech_lengths = self.specaug(speech, speech_lengths) - - # Normalization for feature: e.g. Global-CMVN, Utterance-CMVN - if self.normalize is not None: - speech, speech_lengths = self.normalize(speech, speech_lengths) - - - lids = torch.LongTensor([[self.lid_int_dict[int(lid)] if torch.rand(1) > 0.2 and int(lid) in self.lid_int_dict else 0 ] for lid in text[:, 0]]).to(speech.device) - language_query = self.embed(lids) - - styles = torch.LongTensor([[self.textnorm_int_dict[int(style)]] for style in text[:, 3]]).to(speech.device) - style_query = self.embed(styles) - speech = torch.cat((style_query, speech), dim=1) - speech_lengths += 1 - - event_emo_query = self.embed(torch.LongTensor([[1, 2]]).to(speech.device)).repeat(speech.size(0), 1, 1) - input_query = torch.cat((language_query, event_emo_query), dim=1) - speech = torch.cat((input_query, speech), dim=1) - speech_lengths += 3 - - encoder_out, encoder_out_lens = self.encoder(speech, speech_lengths) - - return encoder_out, encoder_out_lens - - def _calc_ctc_loss( - self, - encoder_out: torch.Tensor, - encoder_out_lens: torch.Tensor, - ys_pad: torch.Tensor, - ys_pad_lens: torch.Tensor, - ): - # Calc CTC loss - loss_ctc = self.ctc(encoder_out, encoder_out_lens, ys_pad, ys_pad_lens) - - # Calc CER using CTC - cer_ctc = None - if not self.training and self.error_calculator is not None: - ys_hat = self.ctc.argmax(encoder_out).data - cer_ctc = self.error_calculator(ys_hat.cpu(), ys_pad.cpu(), is_ctc=True) - return loss_ctc, cer_ctc - - def _calc_rich_ce_loss( - self, - encoder_out: torch.Tensor, - ys_pad: torch.Tensor, - ): - decoder_out = self.ctc.ctc_lo(encoder_out) - # 2. Compute attention loss - loss_rich = self.criterion_att(decoder_out, ys_pad.contiguous()) - acc_rich = th_accuracy( - decoder_out.view(-1, self.vocab_size), - ys_pad.contiguous(), - ignore_label=self.ignore_id, - ) - - return loss_rich, acc_rich - - - def inference( - self, - data_in, - data_lengths=None, - key: list = ["wav_file_tmp_name"], - tokenizer=None, - frontend=None, - **kwargs, - ): - - - meta_data = {} - if ( - isinstance(data_in, torch.Tensor) and kwargs.get("data_type", "sound") == "fbank" - ): # fbank - speech, speech_lengths = data_in, data_lengths - if len(speech.shape) < 3: - speech = speech[None, :, :] - if speech_lengths is None: - speech_lengths = speech.shape[1] - else: - # extract fbank feats - time1 = time.perf_counter() - audio_sample_list = load_audio_text_image_video( - data_in, - fs=frontend.fs, - audio_fs=kwargs.get("fs", 16000), - data_type=kwargs.get("data_type", "sound"), - tokenizer=tokenizer, - ) - time2 = time.perf_counter() - meta_data["load_data"] = f"{time2 - time1:0.3f}" - speech, speech_lengths = extract_fbank( - audio_sample_list, data_type=kwargs.get("data_type", "sound"), frontend=frontend - ) - time3 = time.perf_counter() - meta_data["extract_feat"] = f"{time3 - time2:0.3f}" - meta_data["batch_data_time"] = ( - speech_lengths.sum().item() * frontend.frame_shift * frontend.lfr_n / 1000 - ) - - speech = speech.to(device=kwargs["device"]) - speech_lengths = speech_lengths.to(device=kwargs["device"]) - - language = kwargs.get("language", "auto") - language_query = self.embed( - torch.LongTensor( - [[self.lid_dict[language] if language in self.lid_dict else 0]] - ).to(speech.device) - ).repeat(speech.size(0), 1, 1) - - use_itn = kwargs.get("use_itn", False) - textnorm = kwargs.get("text_norm", None) - if textnorm is None: - textnorm = "withitn" if use_itn else "woitn" - textnorm_query = self.embed( - torch.LongTensor([[self.textnorm_dict[textnorm]]]).to(speech.device) - ).repeat(speech.size(0), 1, 1) - speech = torch.cat((textnorm_query, speech), dim=1) - speech_lengths += 1 - - event_emo_query = self.embed(torch.LongTensor([[1, 2]]).to(speech.device)).repeat( - speech.size(0), 1, 1 - ) - input_query = torch.cat((language_query, event_emo_query), dim=1) - speech = torch.cat((input_query, speech), dim=1) - speech_lengths += 3 - - # Encoder - encoder_out, encoder_out_lens = self.encoder(speech, speech_lengths) - if isinstance(encoder_out, tuple): - encoder_out = encoder_out[0] - - # c. Passed the encoder result and the beam search - ctc_logits = self.ctc.log_softmax(encoder_out) - if kwargs.get("ban_emo_unk", False): - ctc_logits[:, :, self.emo_dict["unk"]] = -float("inf") - - results = [] - b, n, d = encoder_out.size() - if isinstance(key[0], (list, tuple)): - key = key[0] - if len(key) < b: - key = key * b - for i in range(b): - x = ctc_logits[i, : encoder_out_lens[i].item(), :] - yseq = x.argmax(dim=-1) - yseq = torch.unique_consecutive(yseq, dim=-1) - - ibest_writer = None - if kwargs.get("output_dir") is not None: - if not hasattr(self, "writer"): - self.writer = DatadirWriter(kwargs.get("output_dir")) - ibest_writer = self.writer[f"1best_recog"] - - mask = yseq != self.blank_id - token_int = yseq[mask].tolist() - - # Change integer-ids to tokens - text = tokenizer.decode(token_int) - - result_i = {"key": key[i], "text": text} - results.append(result_i) - - if ibest_writer is not None: - ibest_writer["text"][key[i]] = text - - return results, meta_data - - def export(self, **kwargs): - from export_meta import export_rebuild_model - - if "max_seq_len" not in kwargs: - kwargs["max_seq_len"] = 512 - models = export_rebuild_model(model=self, **kwargs) - return models diff --git a/plugins/model/stt-sensevoice/app/requirements.txt b/plugins/model/stt-sensevoice/app/requirements.txt deleted file mode 100644 index 0395d6fe90..0000000000 --- a/plugins/model/stt-sensevoice/app/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -torch>=1.13 -torchaudio -funasr>=1.1.1 -fastapi -modelscope diff --git a/plugins/model/stt-sensevoice/main.py b/plugins/model/stt-sensevoice/main.py deleted file mode 100644 index ef065a87a3..0000000000 --- a/plugins/model/stt-sensevoice/main.py +++ /dev/null @@ -1,56 +0,0 @@ -from fastapi import FastAPI, File, UploadFile, HTTPException -from fastapi.responses import JSONResponse -from tempfile import NamedTemporaryFile -from funasr import AutoModel -from funasr.utils.postprocess_utils import rich_transcription_postprocess -import os - -# 加载模型 -model_dir = "./iic/SenseVoiceSmall" - -model = AutoModel( - model=model_dir, - trust_remote_code=True, - remote_code="./model.py", - vad_model="fsmn-vad", - vad_kwargs={"max_single_segment_time": 30000}, - device="cuda:0", -) - -app = FastAPI() - -@app.post("/v1/audio/transcriptions") -async def handler(file: UploadFile = File(...)): - if not file: - raise HTTPException(status_code=400, detail="No file was provided") - - # 使用NamedTemporaryFile创建临时文件 - with NamedTemporaryFile(delete=False) as temp_file: - # 将用户上传的文件写入临时文件 - content = await file.read() - temp_file.write(content) - temp_file_path = temp_file.name - - try: - # 开始运行模型 - result = model.generate( - input=temp_file_path, - cache={}, - language="auto", - use_itn=True, - batch_size_s=60, - merge_vad=True, - merge_length_s=15, - ) - text = rich_transcription_postprocess(result[0]["text"]) - - # 返回包含结果的JSON响应 - return JSONResponse(content={'text': text}) - finally: - # 删除临时文件 - os.unlink(temp_file_path) - -if __name__ == "__main__": - import uvicorn - - uvicorn.run(app, host="0.0.0.0", port=8000) diff --git a/plugins/model/stt-sensevoice/run.sh b/plugins/model/stt-sensevoice/run.sh deleted file mode 100644 index c1311ecce4..0000000000 --- a/plugins/model/stt-sensevoice/run.sh +++ /dev/null @@ -1 +0,0 @@ -docker run -d -p 8000:8000 registry.cn-hangzhou.aliyuncs.com/luanshaotong/sensevoice:v0.1 diff --git a/plugins/model/tts-cosevoice/Dockerfile b/plugins/model/tts-cosevoice/Dockerfile deleted file mode 100644 index 655b62ed01..0000000000 --- a/plugins/model/tts-cosevoice/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -FROM dockerhub.icu/pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime -ENV DEBIAN_FRONTEND=noninteractive - -WORKDIR /opt/CosyVoice - -RUN chmod 777 /tmp && sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list && apt-get update -y && apt-get -y install git unzip git-lfs -RUN git lfs install && git clone --recursive https://github.com/FunAudioLLM/CosyVoice.git -# here we use python==3.10 because we cannot find an image which have both python3.8 and torch2.0.1-cu118 installed -COPY ./requirements.txt CosyVoice -RUN cd CosyVoice && pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple -RUN cd CosyVoice/runtime/python/grpc && python3 -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. cosyvoice.proto -COPY fastapi/server.py CosyVoice/runtime/python/fastapi/ diff --git a/plugins/model/tts-cosevoice/fastapi/client.py b/plugins/model/tts-cosevoice/fastapi/client.py deleted file mode 100644 index 115d929405..0000000000 --- a/plugins/model/tts-cosevoice/fastapi/client.py +++ /dev/null @@ -1,78 +0,0 @@ -import argparse -import logging -import requests - -def saveResponse(path, response): - # 以二进制写入模式打开文件 - with open(path, 'wb') as file: - # 将响应的二进制内容写入文件 - file.write(response.content) - -def main(): - api = args.api_base - if args.mode == 'sft': - url = api + "/api/inference/sft" - payload={ - 'tts': args.tts_text, - 'role': args.spk_id - } - response = requests.request("POST", url, data=payload) - saveResponse(args.tts_wav, response) - elif args.mode == 'zero_shot': - url = api + "/api/inference/zero-shot" - payload={ - 'tts': args.tts_text, - 'prompt': args.prompt_text - } - files=[('audio', ('prompt_audio.wav', open(args.prompt_wav,'rb'), 'application/octet-stream'))] - response = requests.request("POST", url, data=payload, files=files) - saveResponse(args.tts_wav, response) - elif args.mode == 'cross_lingual': - url = api + "/api/inference/cross-lingual" - payload={ - 'tts': args.tts_text, - } - files=[('audio', ('prompt_audio.wav', open(args.prompt_wav,'rb'), 'application/octet-stream'))] - response = requests.request("POST", url, data=payload, files=files) - saveResponse(args.tts_wav, response) - else: - url = api + "/api/inference/instruct" - payload = { - 'tts': args.tts_text, - 'role': args.spk_id, - 'instruct': args.instruct_text - } - response = requests.request("POST", url, data=payload) - saveResponse(args.tts_wav, response) - logging.info("Response save to {}", args.tts_wav) - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument('--api_base', - type=str, - default='http://127.0.0.1:50000') - parser.add_argument('--mode', - default='sft', - choices=['sft', 'zero_shot', 'cross_lingual', 'instruct'], - help='request mode') - parser.add_argument('--tts_text', - type=str, - default='你好,我是通义千问语音合成大模型,请问有什么可以帮您的吗?') - parser.add_argument('--spk_id', - type=str, - default='中文男') - parser.add_argument('--prompt_text', - type=str, - default='希望你以后能够做的比我还好呦。') - parser.add_argument('--prompt_wav', - type=str, - default='../../../zero_shot_prompt.wav') - parser.add_argument('--instruct_text', - type=str, - default='Theo \'Crimson\', is a fiery, passionate rebel leader. Fights with fervor for justice, but struggles with impulsiveness.') - parser.add_argument('--tts_wav', - type=str, - default='loushiming.mp3') - args = parser.parse_args() - prompt_sr, target_sr = 16000, 22050 - main() diff --git a/plugins/model/tts-cosevoice/fastapi/server.py b/plugins/model/tts-cosevoice/fastapi/server.py deleted file mode 100644 index 105a7c406b..0000000000 --- a/plugins/model/tts-cosevoice/fastapi/server.py +++ /dev/null @@ -1,136 +0,0 @@ -# Set inference model -# export MODEL_DIR=pretrained_models/CosyVoice-300M-Instruct -# For development -# fastapi dev --port 6006 fastapi_server.py -# For production deployment -# fastapi run --port 6006 fastapi_server.py - -import os -import sys -import io,time -from fastapi import FastAPI, Request, Response, File, UploadFile, Form, Body -from fastapi.responses import HTMLResponse -from fastapi.middleware.cors import CORSMiddleware #引入 CORS中间件模块 -from contextlib import asynccontextmanager -ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) -sys.path.append('{}/../../..'.format(ROOT_DIR)) -sys.path.append('{}/../../../third_party/Matcha-TTS'.format(ROOT_DIR)) -from cosyvoice.cli.cosyvoice import CosyVoice -from cosyvoice.utils.file_utils import load_wav -import numpy as np -import torch -import torchaudio -import logging -from pydantic import BaseModel -logging.getLogger('matplotlib').setLevel(logging.WARNING) - -class LaunchFailed(Exception): - pass - -@asynccontextmanager -async def lifespan(app: FastAPI): - model_dir = os.getenv("MODEL_DIR", "pretrained_models/CosyVoice-300M-SFT") - if model_dir: - logging.info("MODEL_DIR is {}", model_dir) - app.cosyvoice = CosyVoice(model_dir) - # sft usage - logging.info("Avaliable speakers {}", app.cosyvoice.list_avaliable_spks()) - else: - raise LaunchFailed("MODEL_DIR environment must set") - yield - -app = FastAPI(lifespan=lifespan) - -#设置允许访问的域名 -origins = ["*"] #"*",即为所有,也可以改为允许的特定ip。 -app.add_middleware( - CORSMiddleware, - allow_origins=origins, #设置允许的origins来源 - allow_credentials=True, - allow_methods=["*"], # 设置允许跨域的http方法,比如 get、post、put等。 - allow_headers=["*"]) #允许跨域的headers,可以用来鉴别来源等作用。 - -def buildResponse(output): - buffer = io.BytesIO() - torchaudio.save(buffer, output, 22050, format="mp3") - buffer.seek(0) - return Response(content=buffer.read(-1), media_type="audio/mpeg") - -@app.post("/api/inference/sft") -@app.get("/api/inference/sft") -async def sft(tts: str = Form(), role: str = Form()): - start = time.process_time() - output = app.cosyvoice.inference_sft(tts, role) - end = time.process_time() - logging.info("infer time is {} seconds", end-start) - return buildResponse(output['tts_speech']) - -class SpeechRequest(BaseModel): - model: str - input: str - voice: str - -@app.post("/v1/audio/speech") -async def sft(request: Request, speech_request: SpeechRequest): - # 解析请求体中的JSON数据 - data = speech_request.dict() - - start = time.process_time() - output = app.cosyvoice.inference_sft(data['input'], data['voice']) - end = time.process_time() - logging.info("infer time is {} seconds", end-start) - return buildResponse(output['tts_speech']) - -@app.post("/api/inference/zero-shot") -async def zeroShot(tts: str = Form(), prompt: str = Form(), audio: UploadFile = File()): - start = time.process_time() - prompt_speech = load_wav(audio.file, 16000) - prompt_audio = (prompt_speech.numpy() * (2**15)).astype(np.int16).tobytes() - prompt_speech_16k = torch.from_numpy(np.array(np.frombuffer(prompt_audio, dtype=np.int16))).unsqueeze(dim=0) - prompt_speech_16k = prompt_speech_16k.float() / (2**15) - - output = app.cosyvoice.inference_zero_shot(tts, prompt, prompt_speech_16k) - end = time.process_time() - logging.info("infer time is {} seconds", end-start) - return buildResponse(output['tts_speech']) - -@app.post("/api/inference/cross-lingual") -async def crossLingual(tts: str = Form(), audio: UploadFile = File()): - start = time.process_time() - prompt_speech = load_wav(audio.file, 16000) - prompt_audio = (prompt_speech.numpy() * (2**15)).astype(np.int16).tobytes() - prompt_speech_16k = torch.from_numpy(np.array(np.frombuffer(prompt_audio, dtype=np.int16))).unsqueeze(dim=0) - prompt_speech_16k = prompt_speech_16k.float() / (2**15) - - output = app.cosyvoice.inference_cross_lingual(tts, prompt_speech_16k) - end = time.process_time() - logging.info("infer time is {} seconds", end-start) - return buildResponse(output['tts_speech']) - -@app.post("/api/inference/instruct") -@app.get("/api/inference/instruct") -async def instruct(tts: str = Form(), role: str = Form(), instruct: str = Form()): - start = time.process_time() - output = app.cosyvoice.inference_instruct(tts, role, instruct) - end = time.process_time() - logging.info("infer time is {} seconds", end-start) - return buildResponse(output['tts_speech']) - -@app.get("/api/roles") -async def roles(): - return {"roles": app.cosyvoice.list_avaliable_spks()} - -@app.get("/", response_class=HTMLResponse) -async def root(): - return """ - - - - - Api information - - - Get the supported tones from the Roles API first, then enter the tones and textual content in the TTS API for synthesis. Documents of API - - - """ diff --git a/plugins/model/tts-cosevoice/grpc/client.py b/plugins/model/tts-cosevoice/grpc/client.py deleted file mode 100644 index 9d1c27de6e..0000000000 --- a/plugins/model/tts-cosevoice/grpc/client.py +++ /dev/null @@ -1,102 +0,0 @@ -# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu) -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -import os -import sys -ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) -sys.path.append('{}/../../..'.format(ROOT_DIR)) -sys.path.append('{}/../../../third_party/Matcha-TTS'.format(ROOT_DIR)) -import logging -import argparse -import torchaudio -import cosyvoice_pb2 -import cosyvoice_pb2_grpc -import grpc -import torch -import numpy as np -from cosyvoice.utils.file_utils import load_wav - - -def main(): - with grpc.insecure_channel("{}:{}".format(args.host, args.port)) as channel: - stub = cosyvoice_pb2_grpc.CosyVoiceStub(channel) - request = cosyvoice_pb2.Request() - if args.mode == 'sft': - logging.info('send sft request') - sft_request = cosyvoice_pb2.sftRequest() - sft_request.spk_id = args.spk_id - sft_request.tts_text = args.tts_text - request.sft_request.CopyFrom(sft_request) - elif args.mode == 'zero_shot': - logging.info('send zero_shot request') - zero_shot_request = cosyvoice_pb2.zeroshotRequest() - zero_shot_request.tts_text = args.tts_text - zero_shot_request.prompt_text = args.prompt_text - prompt_speech = load_wav(args.prompt_wav, 16000) - zero_shot_request.prompt_audio = (prompt_speech.numpy() * (2**15)).astype(np.int16).tobytes() - request.zero_shot_request.CopyFrom(zero_shot_request) - elif args.mode == 'cross_lingual': - logging.info('send cross_lingual request') - cross_lingual_request = cosyvoice_pb2.crosslingualRequest() - cross_lingual_request.tts_text = args.tts_text - prompt_speech = load_wav(args.prompt_wav, 16000) - cross_lingual_request.prompt_audio = (prompt_speech.numpy() * (2**15)).astype(np.int16).tobytes() - request.cross_lingual_request.CopyFrom(cross_lingual_request) - else: - logging.info('send instruct request') - instruct_request = cosyvoice_pb2.instructRequest() - instruct_request.tts_text = args.tts_text - instruct_request.spk_id = args.spk_id - instruct_request.instruct_text = args.instruct_text - request.instruct_request.CopyFrom(instruct_request) - - response = stub.Inference(request) - logging.info('save response to {}'.format(args.tts_wav)) - tts_speech = torch.from_numpy(np.array(np.frombuffer(response.tts_audio, dtype=np.int16))).unsqueeze(dim=0) - torchaudio.save(args.tts_wav, tts_speech, target_sr) - logging.info('get response') - - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument('--host', - type=str, - default='0.0.0.0') - parser.add_argument('--port', - type=int, - default='50000') - parser.add_argument('--mode', - default='sft', - choices=['sft', 'zero_shot', 'cross_lingual', 'instruct'], - help='request mode') - parser.add_argument('--tts_text', - type=str, - default='你好,我是通义千问语音合成大模型,请问有什么可以帮您的吗?') - parser.add_argument('--spk_id', - type=str, - default='中文女') - parser.add_argument('--prompt_text', - type=str, - default='希望你以后能够做的比我还好呦。') - parser.add_argument('--prompt_wav', - type=str, - default='../../../zero_shot_prompt.wav') - parser.add_argument('--instruct_text', - type=str, - default='Theo \'Crimson\', is a fiery, passionate rebel leader. Fights with fervor for justice, but struggles with impulsiveness.') - parser.add_argument('--tts_wav', - type=str, - default='demo.wav') - args = parser.parse_args() - prompt_sr, target_sr = 16000, 22050 - main() diff --git a/plugins/model/tts-cosevoice/grpc/cosyvoice.proto b/plugins/model/tts-cosevoice/grpc/cosyvoice.proto deleted file mode 100644 index babf3e7ad8..0000000000 --- a/plugins/model/tts-cosevoice/grpc/cosyvoice.proto +++ /dev/null @@ -1,43 +0,0 @@ -syntax = "proto3"; - -package cosyvoice; -option go_package = "protos/"; - -service CosyVoice{ - rpc Inference(Request) returns (Response) {} -} - -message Request{ - oneof RequestPayload { - sftRequest sft_request = 1; - zeroshotRequest zero_shot_request = 2; - crosslingualRequest cross_lingual_request = 3; - instructRequest instruct_request = 4; - } -} - -message sftRequest{ - string spk_id = 1; - string tts_text = 2; -} - -message zeroshotRequest{ - string tts_text = 1; - string prompt_text = 2; - bytes prompt_audio = 3; -} - -message crosslingualRequest{ - string tts_text = 1; - bytes prompt_audio = 2; -} - -message instructRequest{ - string tts_text = 1; - string spk_id = 2; - string instruct_text = 3; -} - -message Response{ - bytes tts_audio = 1; -} \ No newline at end of file diff --git a/plugins/model/tts-cosevoice/grpc/server.py b/plugins/model/tts-cosevoice/grpc/server.py deleted file mode 100644 index 0329be7625..0000000000 --- a/plugins/model/tts-cosevoice/grpc/server.py +++ /dev/null @@ -1,83 +0,0 @@ -# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu) -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -import os -import sys -ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) -sys.path.append('{}/../../..'.format(ROOT_DIR)) -sys.path.append('{}/../../../third_party/Matcha-TTS'.format(ROOT_DIR)) -from concurrent import futures -import argparse -import cosyvoice_pb2 -import cosyvoice_pb2_grpc -import logging -logging.getLogger('matplotlib').setLevel(logging.WARNING) -import grpc -import torch -import numpy as np -from cosyvoice.cli.cosyvoice import CosyVoice - -logging.basicConfig(level=logging.DEBUG, - format='%(asctime)s %(levelname)s %(message)s') - -class CosyVoiceServiceImpl(cosyvoice_pb2_grpc.CosyVoiceServicer): - def __init__(self, args): - self.cosyvoice = CosyVoice(args.model_dir) - logging.info('grpc service initialized') - - def Inference(self, request, context): - if request.HasField('sft_request'): - logging.info('get sft inference request') - model_output = self.cosyvoice.inference_sft(request.sft_request.tts_text, request.sft_request.spk_id) - elif request.HasField('zero_shot_request'): - logging.info('get zero_shot inference request') - prompt_speech_16k = torch.from_numpy(np.array(np.frombuffer(request.zero_shot_request.prompt_audio, dtype=np.int16))).unsqueeze(dim=0) - prompt_speech_16k = prompt_speech_16k.float() / (2**15) - model_output = self.cosyvoice.inference_zero_shot(request.zero_shot_request.tts_text, request.zero_shot_request.prompt_text, prompt_speech_16k) - elif request.HasField('cross_lingual_request'): - logging.info('get cross_lingual inference request') - prompt_speech_16k = torch.from_numpy(np.array(np.frombuffer(request.cross_lingual_request.prompt_audio, dtype=np.int16))).unsqueeze(dim=0) - prompt_speech_16k = prompt_speech_16k.float() / (2**15) - model_output = self.cosyvoice.inference_cross_lingual(request.cross_lingual_request.tts_text, prompt_speech_16k) - else: - logging.info('get instruct inference request') - model_output = self.cosyvoice.inference_instruct(request.instruct_request.tts_text, request.instruct_request.spk_id, request.instruct_request.instruct_text) - - logging.info('send inference response') - response = cosyvoice_pb2.Response() - response.tts_audio = (model_output['tts_speech'].numpy() * (2 ** 15)).astype(np.int16).tobytes() - return response - -def main(): - grpcServer = grpc.server(futures.ThreadPoolExecutor(max_workers=args.max_conc), maximum_concurrent_rpcs=args.max_conc) - cosyvoice_pb2_grpc.add_CosyVoiceServicer_to_server(CosyVoiceServiceImpl(args), grpcServer) - grpcServer.add_insecure_port('0.0.0.0:{}'.format(args.port)) - grpcServer.start() - logging.info("server listening on 0.0.0.0:{}".format(args.port)) - grpcServer.wait_for_termination() - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('--port', - type=int, - default=50000) - parser.add_argument('--max_conc', - type=int, - default=4) - parser.add_argument('--model_dir', - type=str, - default='iic/CosyVoice-300M', - help='local path or modelscope repo id') - args = parser.parse_args() - main() diff --git a/plugins/model/tts-cosevoice/requirements.txt b/plugins/model/tts-cosevoice/requirements.txt deleted file mode 100644 index 9dd68a3d05..0000000000 --- a/plugins/model/tts-cosevoice/requirements.txt +++ /dev/null @@ -1,29 +0,0 @@ ---extra-index-url https://download.pytorch.org/whl/cu118 -conformer==0.3.2 -deepspeed==0.15.1; sys_platform == 'linux' -diffusers==0.27.2 -gdown==5.2.2 -gradio==5.11.0 -grpcio==1.57.0 -grpcio-tools==1.57.0 -hydra-core==1.3.2 -HyperPyYAML==1.2.2 -inflect==7.3.1 -librosa==0.10.2 -lightning==2.3.3 -matplotlib==3.7.5 -modelscope==1.15.0 -networkx==3.1 -omegaconf==2.3.0 -onnxruntime-gpu; sys_platform == 'linux' -onnxruntime; sys_platform == 'darwin' or sys_platform == 'windows' -openai-whisper==20231117 -protobuf==5.29.6 -pydantic==2.7.0 -rich==13.7.1 -soundfile==0.12.1 -tensorboard -wget==3.2 -fastapi==0.111.0 -fastapi-cli==0.0.4 -WeTextProcessing==1.0.3 diff --git a/plugins/webcrawler/.dockerignore b/plugins/webcrawler/.dockerignore deleted file mode 100644 index be1b0d08d9..0000000000 --- a/plugins/webcrawler/.dockerignore +++ /dev/null @@ -1,3 +0,0 @@ -# 忽略 .git 目录及其内容 -.git -.gitignore diff --git a/plugins/webcrawler/.gitignore b/plugins/webcrawler/.gitignore deleted file mode 100644 index f2987afc06..0000000000 --- a/plugins/webcrawler/.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -*~ - -searxng-docker.service -caddy -srv -searxng/uwsgi.ini -.env -SPIDER/.env - -# 忽略 node_modules 文件夹 -SPIDER/node_modules/ - -# 忽略构建输出文件夹 -SPIDER/dist/ - -# 忽略日志文件 -*.log - -# 忽略操作系统生成的文件 -.DS_Store -Thumbs.db - -# 忽略 IDE/编辑器生成的文件 -.vscode/ -.idea/ \ No newline at end of file diff --git a/plugins/webcrawler/.searchxng.env b/plugins/webcrawler/.searchxng.env deleted file mode 100644 index 073ddcbb7c..0000000000 --- a/plugins/webcrawler/.searchxng.env +++ /dev/null @@ -1,14 +0,0 @@ -# By default listen on http://localhost -# To change this: -# * uncomment SEARXNG_HOSTNAME, and replace by the SearXNG hostname -# * uncomment LETSENCRYPT_EMAIL, and replace by your email (require to create a Let's Encrypt certificate) - -# SEARXNG_HOSTNAME= -# LETSENCRYPT_EMAIL= - -# Optional: -# If you run a very small or a very large instance, you might want to change the amount of used uwsgi workers and threads per worker -# More workers (= processes) means that more search requests can be handled at the same time, but it also causes more resource usage - -SEARXNG_UWSGI_WORKERS=4 -SEARXNG_UWSGI_THREADS=4 diff --git a/plugins/webcrawler/Caddyfile b/plugins/webcrawler/Caddyfile deleted file mode 100644 index b9846a0c51..0000000000 --- a/plugins/webcrawler/Caddyfile +++ /dev/null @@ -1,91 +0,0 @@ -{ - admin off - - log { - output stderr - format filter { - # Preserves first 8 bits from IPv4 and 32 bits from IPv6 - request>remote_ip ip_mask 8 32 - request>client_ip ip_mask 8 32 - - # Remove identificable information - request>remote_port delete - request>headers delete - request>uri query { - delete url - delete h - delete q - } - } - } -} - -{$SEARXNG_HOSTNAME} - -tls {$SEARXNG_TLS} - -encode zstd gzip - -@api { - path /config - path /healthz - path /stats/errors - path /stats/checker -} - -@search { - path /search -} - -@imageproxy { - path /image_proxy -} - -@static { - path /static/* -} - -header { - # CSP (https://content-security-policy.com) - Content-Security-Policy "upgrade-insecure-requests; default-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline'; form-action 'self' https://github.com/searxng/searxng/issues/new; font-src 'self'; frame-ancestors 'self'; base-uri 'self'; connect-src 'self' https://overpass-api.de; img-src * data:; frame-src https://www.youtube-nocookie.com https://player.vimeo.com https://www.dailymotion.com https://www.deezer.com https://www.mixcloud.com https://w.soundcloud.com https://embed.spotify.com;" - - # Disable some browser features - Permissions-Policy "accelerometer=(),camera=(),geolocation=(),gyroscope=(),magnetometer=(),microphone=(),payment=(),usb=()" - - # Set referrer policy - Referrer-Policy "no-referrer" - - # Force clients to use HTTPS - Strict-Transport-Security "max-age=31536000" - - # Prevent MIME type sniffing from the declared Content-Type - X-Content-Type-Options "nosniff" - - # X-Robots-Tag (comment to allow site indexing) - X-Robots-Tag "noindex, noarchive, nofollow" - - # Remove "Server" header - -Server -} - -header @api { - Access-Control-Allow-Methods "GET, OPTIONS" - Access-Control-Allow-Origin "*" -} - -route { - # Cache policy - header Cache-Control "max-age=0, no-store" - header @search Cache-Control "max-age=5, private" - header @imageproxy Cache-Control "max-age=604800, public" - header @static Cache-Control "max-age=31536000, public, immutable" -} - -# SearXNG (uWSGI) -reverse_proxy localhost:8080 { - header_up X-Forwarded-Port "" - header_up X-Real-IP "" - - # https://github.com/searx/searx-docker/issues/24 - header_up Connection "close" -} diff --git a/plugins/webcrawler/Dockerfile b/plugins/webcrawler/Dockerfile deleted file mode 100644 index a33d5374ec..0000000000 --- a/plugins/webcrawler/Dockerfile +++ /dev/null @@ -1,57 +0,0 @@ -FROM node:20.10.0-slim - -WORKDIR /app - -# 安装 Chrome 运行依赖 -RUN apt-get update && apt-get install -y \ - ca-certificates \ - fonts-liberation \ - libasound2 \ - libatk-bridge2.0-0 \ - libatk1.0-0 \ - libc6 \ - libcairo2 \ - libcups2 \ - libdbus-1-3 \ - libexpat1 \ - libfontconfig1 \ - libgbm1 \ - libgcc1 \ - libglib2.0-0 \ - libgtk-3-0 \ - libnspr4 \ - libnss3 \ - libpango-1.0-0 \ - libpangocairo-1.0-0 \ - libstdc++6 \ - libx11-6 \ - libx11-xcb1 \ - libxcb1 \ - libxcomposite1 \ - libxcursor1 \ - libxdamage1 \ - libxext6 \ - libxfixes3 \ - libxi6 \ - libxrandr2 \ - libxrender1 \ - libxss1 \ - libxtst6 \ - lsb-release \ - wget \ - xdg-utils \ - chromium \ - && rm -rf /var/lib/apt/lists/* - -# 安装中文字体 -RUN apt-get update && apt-get install -y fonts-wqy-microhei && fc-cache -f -v - -COPY SPIDER/. . - -RUN test -f package.json || (echo "package.json missing" && exit 1) -RUN test -f .env || (echo ".env file missing in SPIDER directory" && exit 1) - -RUN npm run build - -EXPOSE 3000 -CMD ["npm", "start"] \ No newline at end of file diff --git a/plugins/webcrawler/README.md b/plugins/webcrawler/README.md deleted file mode 100644 index 56746d0e39..0000000000 --- a/plugins/webcrawler/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# webcrawler -## docker版快速部署 - -## 代码版部署 -0. 按照 https://github.com/searxng/searxng-docker 的方式处理docker -1. 参考SPIDER文件夹下的.env.example,添加.env文件 -2. 进入SPIDER文件夹进行pnpm install -3. 回到根目录,运行docker compose up -d - -## 代码版开发 -1. 将docker-compose.yml中与SPIDER相关的部分注释掉(nodeapp) -2. .env文件中的URL参照注释修改 -3. 注释掉启动puppteer部分里面指定浏览器地址的代码 -4. pnpm run dev - - -## 测试样例: -Auth的Bear Token记得填,也就是.env里的ACCESS_TOKEN - -### 读取单页面(content以HTML形式返回) -``` -http://localhost:3000/api/read?queryUrl= -``` - -返回结构 -```json - -{ - "status": 200, - "data": { - "title": "something here", - "content": "something here" - } -} -{ - "status": 400, - "error": { - "code": "MISSING_PARAM", - "message": "缺少必要参数: query" - } -} -``` - -### 搜索(content以HTML形式返回) -``` -http://localhost:3000/api/search?query=&pageCount=5&needDetails=true&engine=baidu -``` - -```json -{ - "status": 200, - "data": { - "results": [ - { - "title": "string", - "url": "string", - "snippet": "string", - "source": "string", - "crawlStatus": "string", - "score": 0, - "content": "string" - } - ] - } -} -{ - "status": 400, - "error": { - "code": "MISSING_PARAM", - "message": "缺少必要参数: query" - } -} -``` \ No newline at end of file diff --git a/plugins/webcrawler/SPIDER/.env.example b/plugins/webcrawler/SPIDER/.env.example deleted file mode 100644 index 0b928ac731..0000000000 --- a/plugins/webcrawler/SPIDER/.env.example +++ /dev/null @@ -1,23 +0,0 @@ - -ACCESS_TOKEN=114514 -DETECT_WEBSITE = zhuanlan.zhihu.com -STRATEGIES=[{"waitUntil":"networkidle0","timeout":5000},{"waitUntil":"networkidle2","timeout":10000},{"waitUntil":"load","timeout":15000}] -PORT=3000 -MAX_CONCURRENCY=10 -NODE_ENV=development -ENGINE = [ - -] - -ENGINE_BAIDUURL=https://www.baidu.com/s -#ENGINE_SEARCHXNGURL=http://localhost:8080/search -ENGINE_SEARCHXNGURL=http://searxng:8080/search - -#MONGODB_URI=mongodb://root:example@localhost:27017 -MONGODB_URI=mongodb://root:example@mongodb:27017 -BLACKLIST = [".gov.cn",".edu.cn"] - -STD_TTL=3600 -EXPIRE_AFTER_SECONDS=9000 - -#VALIDATE_PROXY=[{"ip":"","port":},{"ip":"","port":}] \ No newline at end of file diff --git a/plugins/webcrawler/SPIDER/package-lock.json b/plugins/webcrawler/SPIDER/package-lock.json deleted file mode 100644 index e85277956c..0000000000 --- a/plugins/webcrawler/SPIDER/package-lock.json +++ /dev/null @@ -1,5918 +0,0 @@ -{ - "name": "spider", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "spider", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "@types/node-fetch": "^2.6.12", - "assert": "^2.1.0", - "axios": "^1.13.2", - "body-parser": "^1.20.3", - "browserify-zlib": "^0.2.0", - "buffer": "^6.0.3", - "cheerio": "^1.0.0", - "crypto-browserify": "^3.12.1", - "dotenv": "^16.4.7", - "express": "^4.21.2", - "https-proxy-agent": "^7.0.6", - "jsdom": "^26.0.0", - "mongodb": "^6.13.1", - "node-cache": "^5.1.2", - "node-fetch": "^2.7.0", - "os-browserify": "^0.3.0", - "path-browserify": "^1.0.1", - "puppeteer": "^24.2.1", - "puppeteer-cluster": "^0.24.0", - "querystring-es3": "^0.2.1", - "random-useragent": "^0.5.0", - "spider": "file:", - "stream-browserify": "^3.0.0", - "stream-http": "^3.2.0", - "string_decoder": "^1.3.0", - "turndown": "^7.2.0", - "turndown-plugin-gfm": "^1.0.2", - "url": "^0.11.4", - "user-agents": "^1.1.454", - "util": "^0.12.5", - "vm-browserify": "^1.1.2" - }, - "devDependencies": { - "@types/body-parser": "^1.19.5", - "@types/express": "^5.0.0", - "@types/jsdom": "^21.1.7", - "@types/node": "^22.13.4", - "@types/random-useragent": "^0.3.3", - "@types/user-agents": "^1.0.4", - "ts-loader": "^9.5.2", - "ts-node-dev": "^2.0.0", - "typescript": "^5.7.3", - "webpack": "^5.98.0", - "webpack-cli": "^6.0.1", - "webpack-node-externals": "^3.0.0" - } - }, - "node_modules/@asamuzakjp/css-color": { - "version": "2.8.3", - "resolved": "https://registry.npmmirror.com/@asamuzakjp/css-color/-/css-color-2.8.3.tgz", - "integrity": "sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw==", - "dependencies": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "lru-cache": "^10.4.3" - } - }, - "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmmirror.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@csstools/color-helpers": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/@csstools/color-helpers/-/color-helpers-5.0.1.tgz", - "integrity": "sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/css-calc": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/@csstools/css-calc/-/css-calc-2.1.1.tgz", - "integrity": "sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "node_modules/@csstools/css-color-parser": { - "version": "3.0.7", - "resolved": "https://registry.npmmirror.com/@csstools/css-color-parser/-/css-color-parser-3.0.7.tgz", - "integrity": "sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/color-helpers": "^5.0.1", - "@csstools/css-calc": "^2.1.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.4", - "resolved": "https://registry.npmmirror.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", - "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.3", - "resolved": "https://registry.npmmirror.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", - "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.6.3", - "resolved": "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", - "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", - "dev": true, - "engines": { - "node": ">=14.17.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@mixmark-io/domino": { - "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@mixmark-io/domino/-/domino-2.2.0.tgz", - "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==" - }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/@mongodb-js/saslprep/-/saslprep-1.2.0.tgz", - "integrity": "sha512-+ywrb0AqkfaYuhHs6LxKWgqbh3I72EpEgESCw37o+9qPx9WTCkgDm2B+eMrwehGtHBWHFU4GXvnSCNiFhhausg==", - "dependencies": { - "sparse-bitfield": "^3.0.3" - } - }, - "node_modules/@puppeteer/browsers": { - "version": "2.7.1", - "resolved": "https://registry.npmmirror.com/@puppeteer/browsers/-/browsers-2.7.1.tgz", - "integrity": "sha512-MK7rtm8JjaxPN7Mf1JdZIZKPD2Z+W7osvrC1vjpvfOX1K0awDIHYbNi89f7eotp7eMUn2shWnt03HwVbriXtKQ==", - "dependencies": { - "debug": "^4.4.0", - "extract-zip": "^2.0.1", - "progress": "^2.0.3", - "proxy-agent": "^6.5.0", - "semver": "^7.7.0", - "tar-fs": "^3.0.8", - "yargs": "^17.7.2" - }, - "bin": { - "browsers": "lib/cjs/main-cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@puppeteer/browsers/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@puppeteer/browsers/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/@tootallnate/quickjs-emscripten": { - "version": "0.23.0", - "resolved": "https://registry.npmmirror.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmmirror.com/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmmirror.com/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmmirror.com/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true - }, - "node_modules/@types/express": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/@types/express/-/express-5.0.0.tgz", - "integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^5.0.0", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.0.6", - "resolved": "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", - "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true - }, - "node_modules/@types/jsdom": { - "version": "21.1.7", - "resolved": "https://registry.npmmirror.com/@types/jsdom/-/jsdom-21.1.7.tgz", - "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmmirror.com/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true - }, - "node_modules/@types/node": { - "version": "22.13.4", - "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.13.4.tgz", - "integrity": "sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==", - "dependencies": { - "undici-types": "~6.20.0" - } - }, - "node_modules/@types/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmmirror.com/@types/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/@types/qs": { - "version": "6.9.18", - "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.18.tgz", - "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", - "dev": true - }, - "node_modules/@types/random-useragent": { - "version": "0.3.3", - "resolved": "https://registry.npmmirror.com/@types/random-useragent/-/random-useragent-0.3.3.tgz", - "integrity": "sha512-FsJ5opTEaHjWaOcfmA+Y74pNjiO2ggred9W5+e6SDDP7UCWVNFGRZAxIbMRceX0/pnffOt50D9HK+y13CfERcw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmmirror.com/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "dev": true, - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/@types/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==", - "dev": true - }, - "node_modules/@types/strip-json-comments": { - "version": "0.0.30", - "resolved": "https://registry.npmmirror.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", - "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", - "dev": true - }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmmirror.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "dev": true - }, - "node_modules/@types/user-agents": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/@types/user-agents/-/user-agents-1.0.4.tgz", - "integrity": "sha512-AjeFc4oX5WPPflgKfRWWJfkEk7Wu82fnj1rROPsiqFt6yElpdGFg8Srtm/4PU4rA9UiDUZlruGPgcwTMQlwq4w==", - "dev": true - }, - "node_modules/@types/webidl-conversions": { - "version": "7.0.3", - "resolved": "https://registry.npmmirror.com/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", - "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" - }, - "node_modules/@types/whatwg-url": { - "version": "11.0.5", - "resolved": "https://registry.npmmirror.com/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", - "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", - "dependencies": { - "@types/webidl-conversions": "*" - } - }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmmirror.com/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/@webpack-cli/configtest/-/configtest-3.0.1.tgz", - "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", - "dev": true, - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/@webpack-cli/info/-/info-3.0.1.tgz", - "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", - "dev": true, - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/@webpack-cli/serve/-/serve-3.0.1.tgz", - "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", - "dev": true, - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmmirror.com/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmmirror.com/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "license": "MIT" - }, - "node_modules/assert": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/assert/-/assert-2.1.0.tgz", - "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", - "dependencies": { - "call-bind": "^1.0.2", - "is-nan": "^1.3.2", - "object-is": "^1.1.5", - "object.assign": "^4.1.4", - "util": "^0.12.5" - } - }, - "node_modules/ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmmirror.com/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz", - "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.11", - "form-data": "^4.0.5", - "proxy-from-env": "^2.1.0" - } - }, - "node_modules/axios/node_modules/proxy-from-env": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", - "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/b4a": { - "version": "1.6.7", - "resolved": "https://registry.npmmirror.com/b4a/-/b4a-1.6.7.tgz", - "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/bare-events": { - "version": "2.5.4", - "resolved": "https://registry.npmmirror.com/bare-events/-/bare-events-2.5.4.tgz", - "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", - "optional": true - }, - "node_modules/bare-fs": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/bare-fs/-/bare-fs-4.0.1.tgz", - "integrity": "sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg==", - "optional": true, - "dependencies": { - "bare-events": "^2.0.0", - "bare-path": "^3.0.0", - "bare-stream": "^2.0.0" - }, - "engines": { - "bare": ">=1.7.0" - } - }, - "node_modules/bare-os": { - "version": "3.4.0", - "resolved": "https://registry.npmmirror.com/bare-os/-/bare-os-3.4.0.tgz", - "integrity": "sha512-9Ous7UlnKbe3fMi7Y+qh0DwAup6A1JkYgPnjvMDNOlmnxNRQvQ/7Nst+OnUQKzk0iAT0m9BisbDVp9gCv8+ETA==", - "optional": true, - "engines": { - "bare": ">=1.6.0" - } - }, - "node_modules/bare-path": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/bare-path/-/bare-path-3.0.0.tgz", - "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", - "optional": true, - "dependencies": { - "bare-os": "^3.0.1" - } - }, - "node_modules/bare-stream": { - "version": "2.6.5", - "resolved": "https://registry.npmmirror.com/bare-stream/-/bare-stream-2.6.5.tgz", - "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==", - "optional": true, - "dependencies": { - "streamx": "^2.21.0" - }, - "peerDependencies": { - "bare-buffer": "*", - "bare-events": "*" - }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - }, - "bare-events": { - "optional": true - } - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/basic-ftp": { - "version": "5.0.5", - "resolved": "https://registry.npmmirror.com/basic-ftp/-/basic-ftp-5.0.5.tgz", - "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bn.js": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", - "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.1", - "resolved": "https://registry.npmmirror.com/browserify-rsa/-/browserify-rsa-4.1.1.tgz", - "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", - "dependencies": { - "bn.js": "^5.2.1", - "randombytes": "^2.1.0", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.3", - "resolved": "https://registry.npmmirror.com/browserify-sign/-/browserify-sign-4.2.3.tgz", - "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", - "dependencies": { - "bn.js": "^5.2.1", - "browserify-rsa": "^4.1.0", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.5", - "hash-base": "~3.0", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.7", - "readable-stream": "^2.3.8", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bson": { - "version": "6.10.3", - "resolved": "https://registry.npmmirror.com/bson/-/bson-6.10.3.tgz", - "integrity": "sha512-MTxGsqgYTwfshYWTRdmZRC+M7FnG1b4y7RO7p2k3X24Wq0yv1m77Wsj0BzlPzd/IowgESfsruQCUToa7vbOpPQ==", - "engines": { - "node": ">=16.20.1" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmmirror.com/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001700", - "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001700.tgz", - "integrity": "sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/cheerio": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0.tgz", - "integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.1.0", - "encoding-sniffer": "^0.2.0", - "htmlparser2": "^9.1.0", - "parse5": "^7.1.2", - "parse5-htmlparser2-tree-adapter": "^7.0.0", - "parse5-parser-stream": "^7.1.2", - "undici": "^6.19.5", - "whatwg-mimetype": "^4.0.0" - }, - "engines": { - "node": ">=18.17" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/chromium-bidi": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/chromium-bidi/-/chromium-bidi-1.3.0.tgz", - "integrity": "sha512-G3x1bkST13kmbL7+dT/oRkNH/7C4UqG+0YQpmySrzXspyOhYgDNc6lhSGpj3cuexvH25WTENhTYq2Tt9JRXtbw==", - "dependencies": { - "mitt": "^3.0.1", - "zod": "^3.24.1" - }, - "peerDependencies": { - "devtools-protocol": "*" - } - }, - "node_modules/cipher-base": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/cipher-base/-/cipher-base-1.0.6.tgz", - "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmmirror.com/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "license": "MIT" - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmmirror.com/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.1", - "resolved": "https://registry.npmmirror.com/crypto-browserify/-/crypto-browserify-3.12.1.tgz", - "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", - "dependencies": { - "browserify-cipher": "^1.0.1", - "browserify-sign": "^4.2.3", - "create-ecdh": "^4.0.4", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "diffie-hellman": "^5.0.3", - "hash-base": "~3.0.4", - "inherits": "^2.0.4", - "pbkdf2": "^3.1.2", - "public-encrypt": "^4.0.3", - "randombytes": "^2.1.0", - "randomfill": "^1.0.4" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssstyle": { - "version": "4.2.1", - "resolved": "https://registry.npmmirror.com/cssstyle/-/cssstyle-4.2.1.tgz", - "integrity": "sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==", - "dependencies": { - "@asamuzakjp/css-color": "^2.8.2", - "rrweb-cssom": "^0.8.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", - "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/data-urls": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", - "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decimal.js": { - "version": "10.5.0", - "resolved": "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.5.0.tgz", - "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==" - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/degenerator": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", - "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/devtools-protocol": { - "version": "0.0.1402036", - "resolved": "https://registry.npmmirror.com/devtools-protocol/-/devtools-protocol-0.0.1402036.tgz", - "integrity": "sha512-JwAYQgEvm3yD45CHB+RmF5kMbWtXBaOGwuxa87sZogHcLCv8c/IqnThaoQ1y60d7pXWjSKWQphPEc+1rAScVdg==" - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmmirror.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "license": "MIT" - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmmirror.com/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/dynamic-dedupe": { - "version": "0.3.0", - "resolved": "https://registry.npmmirror.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", - "integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==", - "dev": true, - "dependencies": { - "xtend": "^4.0.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.102", - "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.102.tgz", - "integrity": "sha512-eHhqaja8tE/FNpIiBrvBjFV/SSKpyWHLvxuR9dPTdo+3V9ppdLmFB7ZZQ98qNovcngPLYIz0oOBF9P0FfZef5Q==", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmmirror.com/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding-sniffer": { - "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz", - "integrity": "sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==", - "dependencies": { - "iconv-lite": "^0.6.3", - "whatwg-encoding": "^3.1.1" - }, - "funding": { - "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" - } - }, - "node_modules/encoding-sniffer/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmmirror.com/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/envinfo": { - "version": "7.14.0", - "resolved": "https://registry.npmmirror.com/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.6.0", - "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.6.0.tgz", - "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", - "dev": true - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/express": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.0.tgz", - "integrity": "sha512-c2iPh3xp5vvCLgaHK03+mWLFPhox7j1LwyxcZwFVApEv5i0X+IjPpbT50SJJwwLpdBVfp45AkK/v+AFgv/XlfQ==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extract-zip/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/extract-zip/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmmirror.com/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" - }, - "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmmirror.com/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ] - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmmirror.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmmirror.com/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmmirror.com/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.7", - "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.7.tgz", - "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "function-bind": "^1.1.2", - "get-proto": "^1.0.0", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-uri": { - "version": "6.0.4", - "resolved": "https://registry.npmmirror.com/get-uri/-/get-uri-6.0.4.tgz", - "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", - "dependencies": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/get-uri/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/get-uri/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash-base": { - "version": "3.0.5", - "resolved": "https://registry.npmmirror.com/hash-base/-/hash-base-3.0.5.tgz", - "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", - "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", - "dependencies": { - "whatwg-encoding": "^3.1.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/htmlparser2": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-9.1.0.tgz", - "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.1.0", - "entities": "^4.5.0" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmmirror.com/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arguments": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", - "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmmirror.com/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" - }, - "node_modules/jsdom": { - "version": "26.0.0", - "resolved": "https://registry.npmmirror.com/jsdom/-/jsdom-26.0.0.tgz", - "integrity": "sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==", - "dependencies": { - "cssstyle": "^4.2.1", - "data-urls": "^5.0.0", - "decimal.js": "^10.4.3", - "form-data": "^4.0.1", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.6", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.16", - "parse5": "^7.2.1", - "rrweb-cssom": "^0.8.0", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^5.0.0", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.1.0", - "ws": "^8.18.0", - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "canvas": "^3.0.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" - }, - "node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "license": "MIT" - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mitt": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz", - "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mongodb": { - "version": "6.13.1", - "resolved": "https://registry.npmmirror.com/mongodb/-/mongodb-6.13.1.tgz", - "integrity": "sha512-gdq40tX8StmhP6akMp1pPoEVv+9jTYFSrga/g23JxajPAQhH39ysZrHGzQCSd9PEOnuEQEdjIWqxO7ZSwC0w7Q==", - "dependencies": { - "@mongodb-js/saslprep": "^1.1.9", - "bson": "^6.10.3", - "mongodb-connection-string-url": "^3.0.0" - }, - "engines": { - "node": ">=16.20.1" - }, - "peerDependencies": { - "@aws-sdk/credential-providers": "^3.632.0", - "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", - "gcp-metadata": "^5.2.0", - "kerberos": "^2.0.1", - "mongodb-client-encryption": ">=6.0.0 <7", - "snappy": "^7.2.2", - "socks": "^2.7.1" - }, - "peerDependenciesMeta": { - "@aws-sdk/credential-providers": { - "optional": true - }, - "@mongodb-js/zstd": { - "optional": true - }, - "gcp-metadata": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "snappy": { - "optional": true - }, - "socks": { - "optional": true - } - } - }, - "node_modules/mongodb-connection-string-url": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz", - "integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==", - "dependencies": { - "@types/whatwg-url": "^11.0.2", - "whatwg-url": "^14.1.0 || ^13.0.0" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/node-cache": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/node-cache/-/node-cache-5.1.2.tgz", - "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", - "dependencies": { - "clone": "2.x" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.16", - "resolved": "https://registry.npmmirror.com/nwsapi/-/nwsapi-2.2.16.tgz", - "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==" - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmmirror.com/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmmirror.com/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pac-proxy-agent": { - "version": "7.1.0", - "resolved": "https://registry.npmmirror.com/pac-proxy-agent/-/pac-proxy-agent-7.1.0.tgz", - "integrity": "sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw==", - "dependencies": { - "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "get-uri": "^6.0.1", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.6", - "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.5" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-proxy-agent/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/pac-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/pac-resolver": { - "version": "7.0.1", - "resolved": "https://registry.npmmirror.com/pac-resolver/-/pac-resolver-7.0.1.tgz", - "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", - "dependencies": { - "degenerator": "^5.0.0", - "netmask": "^2.0.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.7", - "resolved": "https://registry.npmmirror.com/parse-asn1/-/parse-asn1-5.1.7.tgz", - "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", - "dependencies": { - "asn1.js": "^4.10.1", - "browserify-aes": "^1.2.0", - "evp_bytestokey": "^1.0.3", - "hash-base": "~3.0", - "pbkdf2": "^3.1.2", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "7.2.1", - "resolved": "https://registry.npmmirror.com/parse5/-/parse5-7.2.1.tgz", - "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", - "dependencies": { - "entities": "^4.5.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.1.0", - "resolved": "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", - "dependencies": { - "domhandler": "^5.0.3", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-parser-stream": { - "version": "7.1.2", - "resolved": "https://registry.npmmirror.com/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", - "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" - }, - "node_modules/pbkdf2": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.3.tgz", - "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", - "license": "MIT", - "dependencies": { - "create-hash": "~1.1.3", - "create-hmac": "^1.1.7", - "ripemd160": "=2.0.1", - "safe-buffer": "^5.2.1", - "sha.js": "^2.4.11", - "to-buffer": "^1.2.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/pbkdf2/node_modules/create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==", - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "sha.js": "^2.4.0" - } - }, - "node_modules/pbkdf2/node_modules/hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1" - } - }, - "node_modules/pbkdf2/node_modules/ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==", - "license": "MIT", - "dependencies": { - "hash-base": "^2.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-agent": { - "version": "6.5.0", - "resolved": "https://registry.npmmirror.com/proxy-agent/-/proxy-agent-6.5.0.tgz", - "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.6", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.1.0", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.5" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/proxy-agent/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/puppeteer": { - "version": "24.2.1", - "resolved": "https://registry.npmmirror.com/puppeteer/-/puppeteer-24.2.1.tgz", - "integrity": "sha512-Euno62ou0cd0dTkOYTNioSOsFF4VpSnz4ldD38hi9ov9xCNtr8DbhmoJRUx+V9OuPgecueZbKOohRrnrhkbg3Q==", - "hasInstallScript": true, - "dependencies": { - "@puppeteer/browsers": "2.7.1", - "chromium-bidi": "1.3.0", - "cosmiconfig": "^9.0.0", - "devtools-protocol": "0.0.1402036", - "puppeteer-core": "24.2.1", - "typed-query-selector": "^2.12.0" - }, - "bin": { - "puppeteer": "lib/cjs/puppeteer/node/cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/puppeteer-cluster": { - "version": "0.24.0", - "resolved": "https://registry.npmmirror.com/puppeteer-cluster/-/puppeteer-cluster-0.24.0.tgz", - "integrity": "sha512-zHPoNsrwkFLKFtgJJv2aC13EbMASQsE048uZd7CyikEXcl+sc1Nf6PMFb9kMoZI7/zMYxvuP658o2mw079ZZyQ==", - "dependencies": { - "debug": "^4.3.4" - }, - "peerDependencies": { - "puppeteer": ">=22.0.0" - } - }, - "node_modules/puppeteer-cluster/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/puppeteer-cluster/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/puppeteer-core": { - "version": "24.2.1", - "resolved": "https://registry.npmmirror.com/puppeteer-core/-/puppeteer-core-24.2.1.tgz", - "integrity": "sha512-bCypUh3WXzETafv1TCFAjIUnI8BiQ/d+XvEfEXDLcIMm9CAvROqnBmbt79yBjwasoDZsgfXnUmIJU7Y27AalVQ==", - "dependencies": { - "@puppeteer/browsers": "2.7.1", - "chromium-bidi": "1.3.0", - "debug": "^4.4.0", - "devtools-protocol": "0.0.1402036", - "typed-query-selector": "^2.12.0", - "ws": "^8.18.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/puppeteer-core/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/puppeteer-core/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmmirror.com/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmmirror.com/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/random-seed": { - "version": "0.3.0", - "resolved": "https://registry.npmmirror.com/random-seed/-/random-seed-0.3.0.tgz", - "integrity": "sha512-y13xtn3kcTlLub3HKWXxJNeC2qK4mB59evwZ5EkeRlolx+Bp2ztF7LbcZmyCnOqlHQrLnfuNbi1sVmm9lPDlDA==", - "dependencies": { - "json-stringify-safe": "^5.0.1" - }, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/random-useragent": { - "version": "0.5.0", - "resolved": "https://registry.npmmirror.com/random-useragent/-/random-useragent-0.5.0.tgz", - "integrity": "sha512-FUMkqVdZeoSff5tErNL3FFGYXElDWZ1bEuedhm5u9MdCFwANriJWbHvDRYrLTOzp/fBsBGu5J1cWtDgifa97aQ==", - "dependencies": { - "random-seed": "^0.3.0" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/readable-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmmirror.com/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dev": true, - "dependencies": { - "resolve": "^1.20.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rrweb-cssom": { - "version": "0.8.0", - "resolved": "https://registry.npmmirror.com/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", - "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==" - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, - "node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmmirror.com/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/sha.js": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", - "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", - "license": "(MIT AND BSD-3-Clause)", - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.0" - }, - "bin": { - "sha.js": "bin.js" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmmirror.com/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.8.4", - "resolved": "https://registry.npmmirror.com/socks/-/socks-2.8.4.tgz", - "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.5", - "resolved": "https://registry.npmmirror.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", - "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/socks-proxy-agent/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/socks-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmmirror.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", - "dependencies": { - "memory-pager": "^1.0.2" - } - }, - "node_modules/spider": { - "resolved": "", - "link": true - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/stream-http": { - "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/stream-http/-/stream-http-3.2.0.tgz", - "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - } - }, - "node_modules/stream-http/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/streamx": { - "version": "2.22.0", - "resolved": "https://registry.npmmirror.com/streamx/-/streamx-2.22.0.tgz", - "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", - "dependencies": { - "fast-fifo": "^1.3.2", - "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz", - "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - }, - "optionalDependencies": { - "bare-fs": "^4.0.1", - "bare-path": "^3.0.0" - } - }, - "node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, - "node_modules/terser": { - "version": "5.39.0", - "resolved": "https://registry.npmmirror.com/terser/-/terser-5.39.0.tgz", - "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.11", - "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz", - "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/text-decoder": { - "version": "1.2.3", - "resolved": "https://registry.npmmirror.com/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", - "dependencies": { - "b4a": "^1.6.4" - } - }, - "node_modules/tldts": { - "version": "6.1.77", - "resolved": "https://registry.npmmirror.com/tldts/-/tldts-6.1.77.tgz", - "integrity": "sha512-lBpoWgy+kYmuXWQ83+R7LlJCnsd9YW8DGpZSHhrMl4b8Ly/1vzOie3OdtmUJDkKxcgRGOehDu5btKkty+JEe+g==", - "dependencies": { - "tldts-core": "^6.1.77" - }, - "bin": { - "tldts": "bin/cli.js" - } - }, - "node_modules/tldts-core": { - "version": "6.1.77", - "resolved": "https://registry.npmmirror.com/tldts-core/-/tldts-core-6.1.77.tgz", - "integrity": "sha512-bCaqm24FPk8OgBkM0u/SrEWJgHnhBWYqeBo6yUmcZJDCHt/IfyWBb+14CXdGi4RInMv4v7eUAin15W0DoA+Ytg==" - }, - "node_modules/to-buffer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", - "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", - "license": "MIT", - "dependencies": { - "isarray": "^2.0.5", - "safe-buffer": "^5.2.1", - "typed-array-buffer": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/to-buffer/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "license": "MIT" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "5.1.1", - "resolved": "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-5.1.1.tgz", - "integrity": "sha512-Ek7HndSVkp10hmHP9V4qZO1u+pn1RU5sI0Fw+jCU3lyvuMZcgqsNgc6CmJJZyByK4Vm/qotGRJlfgAX8q+4JiA==", - "dependencies": { - "tldts": "^6.1.32" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/tr46": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/tr46/-/tr46-5.0.0.tgz", - "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", - "dependencies": { - "punycode": "^2.3.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmmirror.com/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/ts-loader": { - "version": "9.5.2", - "resolved": "https://registry.npmmirror.com/ts-loader/-/ts-loader-9.5.2.tgz", - "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4", - "source-map": "^0.7.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/ts-loader/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmmirror.com/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node-dev": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/ts-node-dev/-/ts-node-dev-2.0.0.tgz", - "integrity": "sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.1", - "dynamic-dedupe": "^0.3.0", - "minimist": "^1.2.6", - "mkdirp": "^1.0.4", - "resolve": "^1.0.0", - "rimraf": "^2.6.1", - "source-map-support": "^0.5.12", - "tree-kill": "^1.2.2", - "ts-node": "^10.4.0", - "tsconfig": "^7.0.0" - }, - "bin": { - "ts-node-dev": "lib/bin.js", - "tsnd": "lib/bin.js" - }, - "engines": { - "node": ">=0.8.0" - }, - "peerDependencies": { - "node-notifier": "*", - "typescript": "*" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/tsconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/tsconfig/-/tsconfig-7.0.0.tgz", - "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", - "dev": true, - "dependencies": { - "@types/strip-bom": "^3.0.0", - "@types/strip-json-comments": "0.0.30", - "strip-bom": "^3.0.0", - "strip-json-comments": "^2.0.0" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" - }, - "node_modules/turndown": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/turndown/-/turndown-7.2.0.tgz", - "integrity": "sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A==", - "dependencies": { - "@mixmark-io/domino": "^2.2.0" - } - }, - "node_modules/turndown-plugin-gfm": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/turndown-plugin-gfm/-/turndown-plugin-gfm-1.0.2.tgz", - "integrity": "sha512-vwz9tfvF7XN/jE0dGoBei3FXWuvll78ohzCZQuOb+ZjWrs3a0XhQVomJEb2Qh4VHTPNRO4GPZh0V7VRbiWwkRg==" - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-query-selector": { - "version": "2.12.0", - "resolved": "https://registry.npmmirror.com/typed-query-selector/-/typed-query-selector-2.12.0.tgz", - "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==" - }, - "node_modules/typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", - "devOptional": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz", - "integrity": "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==", - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, - "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", - "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/url": { - "version": "0.11.4", - "resolved": "https://registry.npmmirror.com/url/-/url-0.11.4.tgz", - "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", - "dependencies": { - "punycode": "^1.4.1", - "qs": "^6.12.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - }, - "node_modules/user-agents": { - "version": "1.1.454", - "resolved": "https://registry.npmmirror.com/user-agents/-/user-agents-1.1.454.tgz", - "integrity": "sha512-MdfDDPTeCzFBEWoRYhnpqVIkuO7WXff5GmDogNWgLqx00yHxxSJaEMS9cN3C049+b22I4FncPNodBksKLuGFeg==", - "dependencies": { - "lodash.clonedeep": "^4.5.0" - } - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmmirror.com/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, - "node_modules/w3c-xmlserializer": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", - "dependencies": { - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "engines": { - "node": ">=12" - } - }, - "node_modules/webpack": { - "version": "5.98.0", - "resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.98.0.tgz", - "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/webpack-cli/-/webpack-cli-6.0.1.tgz", - "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.6.1", - "@webpack-cli/configtest": "^3.0.1", - "@webpack-cli/info": "^3.0.1", - "@webpack-cli/serve": "^3.0.1", - "colorette": "^2.0.14", - "commander": "^12.1.0", - "cross-spawn": "^7.0.3", - "envinfo": "^7.14.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^3.1.1", - "rechoir": "^0.8.0", - "webpack-merge": "^6.0.1" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.82.0" - }, - "peerDependenciesMeta": { - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmmirror.com/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "dev": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/webpack-merge": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-6.0.1.tgz", - "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/webpack-node-externals": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", - "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-mimetype": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-url": { - "version": "14.1.1", - "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-14.1.1.tgz", - "integrity": "sha512-mDGf9diDad/giZ/Sm9Xi2YcyzaFpbdLpJPr+E9fSkyQ7KpQD4SdFcugkRQYzhmfI4KeV4Qpnn2sKPdo+kmsgRQ==", - "dependencies": { - "tr46": "^5.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.18", - "resolved": "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.18.tgz", - "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmmirror.com/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", - "engines": { - "node": ">=18" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmmirror.com/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmmirror.com/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/zod": { - "version": "3.24.2", - "resolved": "https://registry.npmmirror.com/zod/-/zod-3.24.2.tgz", - "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} diff --git a/plugins/webcrawler/SPIDER/package.json b/plugins/webcrawler/SPIDER/package.json deleted file mode 100644 index 04b078e04a..0000000000 --- a/plugins/webcrawler/SPIDER/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "spider", - "version": "1.0.0", - "description": "", - "main": "/dist/index.ts", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "start": "ts-node src/index.ts", - "build": "webpack", - "dev": "ts-node-dev --respawn src/index.ts" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "@types/node-fetch": "^2.6.12", - "assert": "^2.1.0", - "axios": "^1.13.2", - "body-parser": "^1.20.3", - "browserify-zlib": "^0.2.0", - "buffer": "^6.0.3", - "cheerio": "^1.0.0", - "crypto-browserify": "^3.12.1", - "dotenv": "^16.4.7", - "express": "^4.21.2", - "https-proxy-agent": "^7.0.6", - "jsdom": "^26.0.0", - "mongodb": "^6.13.1", - "node-cache": "^5.1.2", - "node-fetch": "^2.7.0", - "os-browserify": "^0.3.0", - "path-browserify": "^1.0.1", - "puppeteer": "^24.2.1", - "puppeteer-cluster": "^0.24.0", - "querystring-es3": "^0.2.1", - "random-useragent": "^0.5.0", - "spider": "file:", - "stream-browserify": "^3.0.0", - "stream-http": "^3.2.0", - "string_decoder": "^1.3.0", - "turndown": "^7.2.0", - "turndown-plugin-gfm": "^1.0.2", - "url": "^0.11.4", - "user-agents": "^1.1.454", - "util": "^0.12.5", - "vm-browserify": "^1.1.2" - }, - "devDependencies": { - "@types/body-parser": "^1.19.5", - "@types/express": "^5.0.0", - "@types/jsdom": "^21.1.7", - "@types/node": "^22.13.4", - "@types/random-useragent": "^0.3.3", - "@types/user-agents": "^1.0.4", - "ts-loader": "^9.5.2", - "ts-node-dev": "^2.0.0", - "typescript": "^5.7.3", - "webpack": "^5.98.0", - "webpack-cli": "^6.0.1", - "webpack-node-externals": "^3.0.0" - } -} diff --git a/plugins/webcrawler/SPIDER/src/controllers/quickfetchController.ts b/plugins/webcrawler/SPIDER/src/controllers/quickfetchController.ts deleted file mode 100644 index 33ac9572eb..0000000000 --- a/plugins/webcrawler/SPIDER/src/controllers/quickfetchController.ts +++ /dev/null @@ -1,60 +0,0 @@ -import type { Request, Response } from 'express'; -import fetch from 'node-fetch'; -import dotenv from 'dotenv'; - -dotenv.config(); - -const userAgents = [ - 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15', - 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0' -]; - -export const quickFetch = async (req: Request, res: Response): Promise => { - const { url } = req.query; - - if (!url) { - res.status(400).json({ - status: 400, - error: { - code: 'MISSING_PARAM', - message: '缺少必要参数: url' - } - }); - return; - } - - try { - const response = await fetch(url as string, { - headers: { - 'User-Agent': userAgents[Math.floor(Math.random() * userAgents.length)], - Referer: 'https://www.google.com/', - 'Accept-Language': 'en-US,en;q=0.9', - Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', - Connection: 'keep-alive', - 'Cache-Control': 'no-cache' - } - }); - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - const data = await response.text(); - res.status(200).json({ - status: 200, - data: { - content: data - } - }); - } catch (error) { - console.error('Error fetching the page:', error); - res.status(500).json({ - status: 500, - error: { - code: 'INTERNAL_SERVER_ERROR', - message: '发生错误' - } - }); - } -}; - -export default { quickFetch }; diff --git a/plugins/webcrawler/SPIDER/src/controllers/readController.ts b/plugins/webcrawler/SPIDER/src/controllers/readController.ts deleted file mode 100644 index 619ca5b6a0..0000000000 --- a/plugins/webcrawler/SPIDER/src/controllers/readController.ts +++ /dev/null @@ -1,148 +0,0 @@ -import type { Request, Response } from 'express'; -import puppeteer, { Page } from 'puppeteer'; -import * as cheerio from 'cheerio'; -import UserAgent from 'user-agents'; -import { setupPage } from '../utils/setupPage'; // 导入 setupPage 模块 -import dotenv from 'dotenv'; // 导入 dotenv 模块 -import { URL } from 'url'; // 导入 URL 模块 -import { handleSpecialWebsite } from '../specialHandlers'; // 导入 handleSpecialWebsite 模块 -import fetch from 'node-fetch'; -import { getCachedPage, updateCacheAsync } from '../utils/cacheUpdater'; // 导入缓存相关模块 - -dotenv.config(); // 加载环境变量 - -const detectWebsites = process.env.DETECT_WEBSITES?.split(',') || []; -const blacklistDomains = process.env.BLACKLIST ? JSON.parse(process.env.BLACKLIST) : []; - -export const readPage = async (req: Request, res: Response): Promise => { - const { queryUrl } = req.query; - console.log('-------'); - console.log(queryUrl); - console.log('-------'); - - if (!queryUrl) { - res.status(400).json({ - status: 400, - error: { - code: 'MISSING_PARAM', - message: '缺少必要参数: queryUrl' - } - }); - return; - } - - const urlDomain = new URL(queryUrl as string).hostname; - if (blacklistDomains.some((domain: string) => urlDomain.endsWith(domain))) { - res.status(403).json({ - status: 403, - error: { - code: 'BLACKLISTED_DOMAIN', - message: '该域名受到保护中' - } - }); - return; - } - - try { - const response = await fetch(queryUrl as string, { - headers: { - 'User-Agent': new UserAgent({ - deviceCategory: 'desktop', - platform: 'Linux x86_64' - }).toString(), - Referer: 'https://www.google.com/', - 'Accept-Language': 'en-US,en;q=0.9', - Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', - Connection: 'keep-alive', - 'Cache-Control': 'no-cache' - } - }); - - if (response.ok) { - const content = await response.text(); - const $ = cheerio.load(content); - const cleanedContent = $('body').html(); - - res.status(200).json({ - status: 200, - data: { - title: $('title').text(), - content: cleanedContent - } - }); - - await updateCacheAsync(queryUrl as string, cleanedContent || ''); - console.log('Page read successfully'); - return; - } else { - throw new Error(`HTTP error! status: ${response.status}`); - } - } catch (error) { - console.error('快速抓取页面时发生错误:', error); - } - - try { - const browser = await puppeteer.launch({ - ignoreDefaultArgs: ['--enable-automation'], - headless: true, - executablePath: '/usr/bin/chromium', // 明确指定 Chromium 路径 - pipe: true, - args: [ - '--no-sandbox', - '--disable-setuid-sandbox', - '--disable-dev-shm-usage', - '--disable-gpu' - // '--single-process' - ] - }); - const page = await browser.newPage(); - - // 检测是否需要特殊处理 - if ( - typeof queryUrl === 'string' && - detectWebsites.some((website) => queryUrl.includes(website)) - ) { - await setupPage(page); - } else { - const userAgent = new UserAgent({ deviceCategory: 'desktop', platform: 'Linux x86_64' }); - await page.setUserAgent(userAgent.toString()); - } - - const queryUrlSafe = new URL(queryUrl as string).toString(); - - await page.goto(queryUrlSafe, { waitUntil: 'load' }); - await page.waitForSelector('body'); - - const title = await page.title(); - let cleanedContent = await handleSpecialWebsite(page, queryUrl as string); - - if (!cleanedContent) { - const content = await page.content(); - const $ = cheerio.load(content); - cleanedContent = $('body').html(); - } - - await page.close(); - await browser.close(); - - res.status(200).json({ - status: 200, - data: { - title, - content: cleanedContent - } - }); - - await updateCacheAsync(queryUrl as string, cleanedContent || ''); - console.log('Page read successfully'); - } catch (error) { - console.error(error); - res.status(500).json({ - status: 500, - error: { - code: 'INTERNAL_SERVER_ERROR', - message: '读取页面时发生内部服务器错误' - } - }); - } -}; diff --git a/plugins/webcrawler/SPIDER/src/controllers/searchController.ts b/plugins/webcrawler/SPIDER/src/controllers/searchController.ts deleted file mode 100644 index 148eec54c3..0000000000 --- a/plugins/webcrawler/SPIDER/src/controllers/searchController.ts +++ /dev/null @@ -1,132 +0,0 @@ -import type { Request, Response } from 'express'; -import { Cluster } from 'puppeteer-cluster'; -import dotenv from 'dotenv'; -import { performDeepSearch } from '../utils/deepSearch'; -import { fetchSearchResults as fetchBaiduResults } from '../engines/baiduEngine'; -import { fetchSearchResults as fetchSearchxngResults } from '../engines/searchxngEngine'; - -dotenv.config(); - -const strategies = JSON.parse(process.env.STRATEGIES || '[]'); -const detectWebsites = process.env.DETECT_WEBSITES?.split(',') || []; -const maxConcurrency = parseInt(process.env.MAX_CONCURRENCY || '10', 10); - -export const search = async (req: Request, res: Response): Promise => { - const { - query, - pageCount = 10, - needDetails = 'false', - engine = 'baidu', - categories = 'general' - } = req.query; - const needDetailsBool = needDetails === 'true'; - - if (!query) { - res.status(400).json({ - status: 400, - error: { - code: 'MISSING_PARAM', - message: '缺少必要参数: query' - } - }); - return; - } - let fetchSearchResults; - let searchUrlBase; - try { - if (engine === 'baidu') { - fetchSearchResults = fetchBaiduResults; - searchUrlBase = process.env.ENGINE_BAIDUURL; - } else if (engine === 'searchxng') { - fetchSearchResults = fetchSearchxngResults; - searchUrlBase = process.env.ENGINE_SEARCHXNGURL; - } else { - res.status(400).json({ - status: 400, - error: { - code: 'INVALID_ENGINE', - message: '无效的搜索引擎' - } - }); - return; - } - - const { resultUrls, results } = await fetchSearchResults( - query as string, - Number(pageCount), - searchUrlBase || '', - categories as string - ); - - //如果返回值为空,返回空数组 - if (results.size === 0) { - console.log('No results found'); - res.status(200).json({ - status: 200, - data: { - results: [] - } - }); - return; - } - - if (!needDetailsBool) { - console.log('Need details is false'); - results.forEach((value: any) => { - if (value.crawlStatus === 'Pending') { - value.crawlStatus = 'Success'; - } - }); - res.status(200).json({ - status: 200, - data: { - results: Array.from(results.values()) - } - }); - } else { - console.log('Need details is true'); - - const clusterInstance = await Cluster.launch({ - concurrency: Cluster.CONCURRENCY_CONTEXT, - maxConcurrency: maxConcurrency, - puppeteerOptions: { - ignoreDefaultArgs: ['--enable-automation'], - headless: 'true', - executablePath: '/usr/bin/chromium', // 明确指定 Chromium 路径 - pipe: true, - args: [ - '--no-sandbox', - '--disable-setuid-sandbox', - '--disable-dev-shm-usage', - '--disable-gpu' - ] - } - }); - - const sortedResults = await performDeepSearch( - clusterInstance, - resultUrls, - results, - strategies, - detectWebsites, - Number(pageCount) - ); - res.status(200).json({ - status: 200, - data: { - results: sortedResults.slice(0, Number(pageCount)) - } - }); - } - } catch (error) { - res.status(500).json({ - status: 500, - error: { - code: 'INTERNAL_SERVER_ERROR', - message: '发生错误' - } - }); - } -}; - -export default { search }; diff --git a/plugins/webcrawler/SPIDER/src/engines/baiduEngine.ts b/plugins/webcrawler/SPIDER/src/engines/baiduEngine.ts deleted file mode 100644 index ca75f0c1b5..0000000000 --- a/plugins/webcrawler/SPIDER/src/engines/baiduEngine.ts +++ /dev/null @@ -1,207 +0,0 @@ -import { URL } from 'url'; -import { JSDOM } from 'jsdom'; -import puppeteer from 'puppeteer'; -import { setupPage } from '../utils/setupPage'; -import { Cluster } from 'puppeteer-cluster'; - -async function randomWait(min: number, max: number) { - // 随机等待时间 - const delay = Math.floor(Math.random() * (max - min + 1)) + min; - return new Promise((resolve) => setTimeout(resolve, delay)); -} - -export const fetchSearchResults = async ( - query: string, - pageCount: number, - searchUrlBase: string, - categories: string -) => { - console.log(`Fetching Baidu search results for query: ${query}`); - // 如果 searchUrlBase 为空,返回空数组 - if (!searchUrlBase) { - return { resultUrls: [], results: new Map() }; - } - const resultUrls: string[] = []; - const results = new Map(); - - const pagesToFetch = Math.ceil(pageCount / 10); - - const browser = await puppeteer.launch({ - ignoreDefaultArgs: ['--enable-automation'], - headless: true, - executablePath: '/usr/bin/chromium', // 明确指定 Chromium 路径 - pipe: true, - args: [ - '--no-sandbox', - '--disable-setuid-sandbox', - '--disable-dev-shm-usage', - '--disable-gpu' - // '--single-process' - ] - }); - - const page = await browser.newPage(); - await setupPage(page); - - for (let i = 0; i < pagesToFetch; i++) { - const searchUrl = new URL(`${searchUrlBase}?wd=${encodeURIComponent(query)}&pn=${i * 10}`); - console.log(`Fetching page ${i + 1} from Baidu: ${searchUrl.toString()}`); - let retryCount = 0; - let success = false; - - while (retryCount < 5 && !success) { - try { - console.time(`Page Load Time for page ${i + 1}`); - await page.goto(searchUrl.toString(), { waitUntil: 'load' }); - console.timeEnd(`Page Load Time for page ${i + 1}`); - - let content = await page.content(); - let dom = new JSDOM(content); - let document = dom.window.document; - console.log(document.title); - - // 如果是百度安全验证页面,重新设置页面并重新访问 - if (document.title.includes('百度安全验证')) { - console.log('Detected Baidu security verification, retrying...'); - await setupPage(page); - retryCount++; - //随机等待时间 - await randomWait(1000, 3000); - continue; - } - - // 解析搜索结果 - console.time(`Link Retrieval Time for page ${i + 1}`); - - const resultContainers = document.querySelectorAll('.result.c-container'); - for (const result of resultContainers) { - if (resultUrls.length > pageCount + 5) { - break; - } - const titleElement = result.querySelector('h3 a'); - const title = titleElement ? titleElement.textContent : ''; - const url = titleElement ? titleElement.getAttribute('href') : ''; - const contentElement = result.querySelector('[class^="content"]'); - const content = contentElement ? contentElement.textContent : ''; - - if (url) { - resultUrls.push(url); - results.set(url, { - title, - url, - snippet: content, - source: 'baidu', - crawlStatus: 'Pending', - score: 0 - }); - } - } - console.timeEnd(`Link Retrieval Time for page ${i + 1}`); - success = true; - } catch (error) { - console.error(`Error fetching page ${i + 1}:`, error); - retryCount++; - } - } - } - - await browser.close(); - - console.log('fetch all fake urls'); - - // 快速检索真实 URL - const urlsToProcessWithPuppeteer = []; - for (const url of resultUrls) { - try { - const response = await fetch(url, { - headers: { - 'User-Agent': - 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', - Referer: 'https://www.google.com/', - 'Accept-Language': 'en-US,en;q=0.9', - Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', - Connection: 'keep-alive', - 'Cache-Control': 'no-cache' - } - }); - - if (response.ok) { - const realUrl = response.url; - console.log('realurl:', realUrl); - const result = results.get(url); - if (result) { - result.url = realUrl; - result.crawlStatus = 'Success'; - } - } else { - throw new Error(`HTTP error! status: ${response.status}`); - } - } catch (error) { - console.error(`Error fetching original URL for ${url}:`, error); - urlsToProcessWithPuppeteer.push(url); - } - } - - console.log('pass quickfetch'); - - // 并发处理真实 URL - const cluster = await Cluster.launch({ - concurrency: Cluster.CONCURRENCY_CONTEXT, - maxConcurrency: 10, - puppeteerOptions: { - ignoreDefaultArgs: ['--enable-automation'], - headless: 'true', - executablePath: '/usr/bin/chromium', // 明确指定 Chromium 路径 - pipe: true, - args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--disable-gpu'] - } - }); - - let failedUrlCount = 0; - - await cluster.task(async ({ page, data: url }) => { - let retryUrlCount = 0; - let urlSuccess = false; - while (retryUrlCount < 3 && !urlSuccess) { - console.log(`Fetching original URL for ${url}, attempt ${retryUrlCount + 1}`); - try { - await page.goto(url, { waitUntil: 'load' }); - // 检查页面是否被分离 - if (page.isClosed()) { - throw new Error('Page has been closed'); - } - const realUrl = page.url(); // 获取真实 URL - const result = results.get(url); - if (result) { - result.url = realUrl; - result.crawlStatus = 'Success'; - } - urlSuccess = true; - } catch (error) { - console.error(`Error fetching original URL, retrying...`, error); - retryUrlCount++; - await randomWait(1000, 3000); - } - } - if (!urlSuccess) { - failedUrlCount++; - } - }); - - for (const url of urlsToProcessWithPuppeteer) { - cluster.queue(url); - } - - await cluster.idle(); - await cluster.close(); - - console.log(`Number of URLs that failed to return a real URL: ${failedUrlCount}`); - - // 过滤并返回前 pageCount 个结果 - const filteredResults = Array.from(results.values()).slice(0, pageCount); - - return { - resultUrls: filteredResults.map((result) => result.url), - results: new Map(filteredResults.map((result) => [result.url, result])) - }; -}; diff --git a/plugins/webcrawler/SPIDER/src/engines/searchxngEngine.ts b/plugins/webcrawler/SPIDER/src/engines/searchxngEngine.ts deleted file mode 100644 index 305fb8114d..0000000000 --- a/plugins/webcrawler/SPIDER/src/engines/searchxngEngine.ts +++ /dev/null @@ -1,64 +0,0 @@ -import axios from 'axios'; -import { URL } from 'url'; -import dotenv from 'dotenv'; - -dotenv.config(); - -const blacklistDomains = process.env.BLACKLIST ? JSON.parse(process.env.BLACKLIST) : []; - -export const fetchSearchResults = async ( - query: string, - pageCount: number, - searchUrlBase: string, - categories: string -) => { - const MAX_PAGES = (pageCount / 10 + 1) * 2 + 1; // 最多搜索的页面数 - //如果searchUrlBase为空,返回空数组,pagecount是需要搜索结果的数量 - if (!searchUrlBase) { - return { resultUrls: [], results: new Map() }; - } - const resultUrls: string[] = []; - const results = new Map(); - - let fetchedResultsCount = 0; - let pageIndex = 0; - - while (fetchedResultsCount < pageCount && pageIndex < MAX_PAGES) { - const searchUrl = new URL( - `${searchUrlBase}?q=${encodeURIComponent(query)}&pageno=${pageIndex + 1}&format=json&categories=${categories}` - ); - console.log(`Fetching page ${pageIndex + 1} from SearchXNG: ${searchUrl.toString()}`); - const response = await axios.get(searchUrl.toString()); - const jsonResults = response.data.results; - - for (let index = 0; index < jsonResults.length; index++) { - const result = jsonResults[index]; - const resultDomain = new URL(result.url).hostname; - if ( - blacklistDomains.some((domain: string) => resultDomain.endsWith(domain)) || - resultDomain.includes('zhihu') - ) { - continue; - } - resultUrls.push(result.url); - results.set(result.url, { - title: result.title, - url: result.url, - snippet: result.content, - source: result.engine, - crawlStatus: 'Pending', - score: result.score - }); - fetchedResultsCount++; - if (fetchedResultsCount >= pageCount) { - break; - } - } - pageIndex++; - if (jsonResults.length === 0) { - break; // 如果没有更多结果,退出循环 - } - } - - return { resultUrls, results }; -}; diff --git a/plugins/webcrawler/SPIDER/src/index.ts b/plugins/webcrawler/SPIDER/src/index.ts deleted file mode 100644 index ec49b10363..0000000000 --- a/plugins/webcrawler/SPIDER/src/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { Application } from 'express'; -import express from 'express'; -import bodyParser from 'body-parser'; -import searchRoutes from './routes/searchRoutes'; -import readRoutes from './routes/readRoutes'; -import quickfetchRoutes from './routes/quickfetchRoutes'; -import dotenv from 'dotenv'; - -dotenv.config(); - -const app: Application = express(); - -app.use(bodyParser.json()); -app.use('/api', searchRoutes); -app.use('/api', readRoutes); -app.use('/api', quickfetchRoutes); - -const PORT = process.env.PORT || 3000; -app.listen(PORT, () => console.log(`Server running on port ${PORT}`)); diff --git a/plugins/webcrawler/SPIDER/src/middleware/authMiddleware.ts b/plugins/webcrawler/SPIDER/src/middleware/authMiddleware.ts deleted file mode 100644 index 48261eefc6..0000000000 --- a/plugins/webcrawler/SPIDER/src/middleware/authMiddleware.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { Request, Response, NextFunction } from 'express'; - -const authMiddleware = (req: Request, res: Response, next: NextFunction) => { - const bearerHeader = req.headers['authorization']; - - if (bearerHeader) { - console.log('bearerHeader:' + bearerHeader); - const bearer = bearerHeader.split(' '); - const bearerToken = bearer[1]; - - if (bearerToken === process.env.ACCESS_TOKEN) { - next(); - } else { - res.status(403).json({ message: 'Invalid token' }); - } - } else { - res.status(401).json({ message: 'Bearer token not found' }); - } -}; - -export default authMiddleware; diff --git a/plugins/webcrawler/SPIDER/src/routes/quickfetchRoutes.ts b/plugins/webcrawler/SPIDER/src/routes/quickfetchRoutes.ts deleted file mode 100644 index 139c9b24e7..0000000000 --- a/plugins/webcrawler/SPIDER/src/routes/quickfetchRoutes.ts +++ /dev/null @@ -1,9 +0,0 @@ -import express from 'express'; -import { quickFetch } from '../controllers/quickfetchController'; -import authMiddleware from '../middleware/authMiddleware'; - -const readRoutes = express.Router(); - -readRoutes.get('/quickFetch', authMiddleware, quickFetch); - -export default readRoutes; diff --git a/plugins/webcrawler/SPIDER/src/routes/readRoutes.ts b/plugins/webcrawler/SPIDER/src/routes/readRoutes.ts deleted file mode 100644 index c50447d6a2..0000000000 --- a/plugins/webcrawler/SPIDER/src/routes/readRoutes.ts +++ /dev/null @@ -1,9 +0,0 @@ -import express from 'express'; -import { readPage } from '../controllers/readController'; -import authMiddleware from '../middleware/authMiddleware'; - -const readRoutes = express.Router(); - -readRoutes.get('/read', authMiddleware, readPage); - -export default readRoutes; diff --git a/plugins/webcrawler/SPIDER/src/routes/searchRoutes.ts b/plugins/webcrawler/SPIDER/src/routes/searchRoutes.ts deleted file mode 100644 index b3b92035f1..0000000000 --- a/plugins/webcrawler/SPIDER/src/routes/searchRoutes.ts +++ /dev/null @@ -1,9 +0,0 @@ -import express from 'express'; -import searchController from '../controllers/searchController'; -import authMiddleware from '../middleware/authMiddleware'; - -const searchRoutes = express.Router(); - -searchRoutes.get('/search', authMiddleware, searchController.search); - -export default searchRoutes; diff --git a/plugins/webcrawler/SPIDER/src/specialHandlers/index.ts b/plugins/webcrawler/SPIDER/src/specialHandlers/index.ts deleted file mode 100644 index 0bea818ca2..0000000000 --- a/plugins/webcrawler/SPIDER/src/specialHandlers/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { Page } from 'puppeteer'; - -export const handleSpecialWebsite = async (page: Page, url: string): Promise => { - if (url.includes('blog.csdn.net')) { - await page.waitForSelector('article'); - const content = await page.$eval('article', (el) => el.innerHTML); - return content; - } - if (url.includes('zhuanlan.zhihu.com')) { - console.log('是知乎,需要点击按掉!'); - console.log(await page.content()); - if ( - (await page.content()).includes( - '{"error":{"message":"您当前请求存在异常,暂时限制本次访问。如有疑问,您可以通过手机摇一摇或登录后私信知乎小管家反馈。","code":40362}}' - ) - ) - return null; - await page.waitForSelector('button[aria-label="关闭"]'); - await page.click('button[aria-label="关闭"]'); // 使用 aria-label 选择按钮 - await page.waitForSelector('article'); - const content = await page.$eval('article', (el) => el.innerHTML); - return content; - } - // 可以添加更多特殊网站的处理逻辑 - return null; -}; diff --git a/plugins/webcrawler/SPIDER/src/utils/cacheUpdater.ts b/plugins/webcrawler/SPIDER/src/utils/cacheUpdater.ts deleted file mode 100644 index 3ceb6c2191..0000000000 --- a/plugins/webcrawler/SPIDER/src/utils/cacheUpdater.ts +++ /dev/null @@ -1,77 +0,0 @@ -import NodeCache from 'node-cache'; -import { MongoClient } from 'mongodb'; -import crypto from 'crypto'; -import dotenv from 'dotenv'; - -dotenv.config(); - -const cache = new NodeCache({ stdTTL: parseInt(process.env.STD_TTL || '3600') }); -const mongoClient = new MongoClient(process.env.MONGODB_URI || 'mongodb://localhost:27017'); -const dbName = 'pageCache'; -const collectionName = 'pages'; - -const connectToMongo = async () => { - await mongoClient.connect(); - return mongoClient.db(dbName); -}; - -const createTTLIndex = async () => { - try { - const db = await connectToMongo(); - await db - .collection(collectionName) - .createIndex( - { updatedAt: 1 }, - { expireAfterSeconds: parseInt(process.env.EXPIRE_AFTER_SECONDS || '9000') } - ); - console.log('TTL index created successfully'); - } catch (error) { - console.error('Error creating TTL index:', error); - } -}; - -const getPageHash = (content: string) => { - return crypto.createHash('md5').update(content).digest('hex'); -}; - -export const getCachedPage = async (url: string) => { - const cachedPage = cache.get(url); - if (cachedPage) return cachedPage; - - try { - const db = await connectToMongo(); - const page = await db.collection(collectionName).findOne({ url }); - if (page) cache.set(url, page); - return page; - } catch (error) { - console.error('Error getting cached page:', error); - throw error; - } -}; - -const savePageToCache = async (url: string, content: string) => { - const hash = getPageHash(content); - const page = { url, content, hash, updatedAt: new Date() }; - - cache.set(url, page); // 更新内存缓存 - - try { - const db = await connectToMongo(); - await db.collection(collectionName).updateOne({ url }, { $set: page }, { upsert: true }); // 更新持久化缓存 - } catch (error) { - console.error('Error saving page to cache:', error); - throw error; - } -}; - -export const updateCacheAsync = async (url: string, content: string) => { - await savePageToCache(url, content); -}; - -process.on('SIGINT', async () => { - await mongoClient.close(); - process.exit(0); -}); - -// 在应用启动时创建 TTL 索引 -createTTLIndex(); diff --git a/plugins/webcrawler/SPIDER/src/utils/deepSearch.ts b/plugins/webcrawler/SPIDER/src/utils/deepSearch.ts deleted file mode 100644 index 656b769778..0000000000 --- a/plugins/webcrawler/SPIDER/src/utils/deepSearch.ts +++ /dev/null @@ -1,158 +0,0 @@ -import type { Cluster } from 'puppeteer-cluster'; -import * as cheerio from 'cheerio'; -import UserAgent from 'user-agents'; -import { setupPage } from './setupPage'; -import { getCachedPage, updateCacheAsync } from './cacheUpdater'; -import { handleSpecialWebsite } from '../specialHandlers'; -import fetch from 'node-fetch'; - -interface CachedPage { - url: string; - content: string; - hash: string; - updatedAt: Date; -} - -export const performDeepSearch = async ( - clusterInstance: Cluster, - resultUrls: string[], - results: Map, - strategies: any[], - detectWebsites: string[], - pageCount: number -) => { - const tasks = []; - - await clusterInstance.task(async ({ page, data: { searchUrl } }) => { - try { - const cachedPage = (await getCachedPage(searchUrl)) as CachedPage | null; - if (cachedPage) { - const result = results.get(searchUrl); - if (result) { - result.content = cachedPage.content; - result.crawlStatus = 'Success'; - } - return; - } - } catch (error) { - console.error(`从缓存获取页面 ${searchUrl} 时发生错误:`, error); - results.set(searchUrl, { - url: searchUrl, - error: (error as Error).message, - crawlStatus: 'Failed' - }); - return; - } - - try { - const response = await fetch(searchUrl, { - headers: { - 'User-Agent': new UserAgent({ - deviceCategory: 'desktop', - platform: 'Linux x86_64' - }).toString(), - Referer: 'https://www.google.com/', - 'Accept-Language': 'en-US,en;q=0.9', - Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', - Connection: 'keep-alive', - 'Cache-Control': 'no-cache' - } - }); - - if (response.ok) { - const content = await response.text(); - const $ = cheerio.load(content); - const cleanedContent = $('body').html() || ''; - - const result = results.get(searchUrl); - if (result) { - result.content = cleanedContent; - result.crawlStatus = 'Success'; - } - - await updateCacheAsync(searchUrl, cleanedContent || ''); - return; - } else { - throw new Error(`HTTP error! status: ${response.status}`); - } - } catch (error) { - console.error(`快速抓取页面 ${searchUrl} 时发生错误:`, error); - } - - try { - if (detectWebsites.some((website) => searchUrl.includes(website))) { - await setupPage(page); - } else { - const userAgent = new UserAgent({ deviceCategory: 'desktop', platform: 'Linux x86_64' }); - await page.setUserAgent(userAgent.toString()); - } - } catch (error) { - console.error(`访问页面 ${searchUrl} 设置用户代理时发生错误:`, error); - } - - let pageLoaded = false; - let pageLoadError: Error | null = null; - for (const strategy of strategies) { - try { - await page.goto(searchUrl, { waitUntil: strategy.waitUntil, timeout: strategy.timeout }); - pageLoaded = true; - break; - } catch (error: any) { - if (error.name === 'TimeoutError') { - pageLoadError = error; - continue; - } else { - pageLoadError = error; - throw error; - } - } - } - if (!pageLoaded) { - const result = results.get(searchUrl); - if (result) { - result.error = pageLoadError; - result.crawlStatus = 'Failed'; - } - return; - } - - try { - let cleanedContent = await handleSpecialWebsite(page, searchUrl); - if (!cleanedContent) { - const content = await page.content(); - const $ = cheerio.load(content); - cleanedContent = $('body').html() || ''; - } - - const result = results.get(searchUrl); - if (result) { - result.content = cleanedContent; - result.crawlStatus = 'Success'; - } - - await updateCacheAsync(searchUrl, cleanedContent || ''); - } catch (error) { - results.set(searchUrl, { - url: searchUrl, - error: (error as Error).message, - crawlStatus: 'Failed' - }); - } finally { - await page.close().catch(() => {}); - } - }); - - for (const url of resultUrls) { - if (tasks.length >= pageCount + 10) { - break; - } - tasks.push(clusterInstance.queue({ searchUrl: url })); - } - - await Promise.all(tasks); - - await clusterInstance.idle(); - await clusterInstance.close(); - - return Array.from(results.values()).sort((a, b) => b.score - a.score); -}; diff --git a/plugins/webcrawler/SPIDER/src/utils/setupPage.ts b/plugins/webcrawler/SPIDER/src/utils/setupPage.ts deleted file mode 100644 index 102cb080fb..0000000000 --- a/plugins/webcrawler/SPIDER/src/utils/setupPage.ts +++ /dev/null @@ -1,81 +0,0 @@ -import type { Page } from 'puppeteer'; -import randomUseragent from 'random-useragent'; -import dotenv from 'dotenv'; - -dotenv.config(); -const getRandomUserAgent = () => { - return randomUseragent.getRandom(); -}; - -const getRandomPlatform = () => { - const platforms = ['Win32', 'MacIntel', 'Linux x86_64']; - return platforms[Math.floor(Math.random() * platforms.length)]; -}; - -//代理池 -const validateproxy = process.env.VALIDATE_PROXY ? JSON.parse(process.env.VALIDATE_PROXY) : []; - -const getRandomProxy = () => { - return validateproxy.length > 0 - ? validateproxy[Math.floor(Math.random() * validateproxy.length)] - : null; -}; - -const getRandomLanguages = () => { - const languages = [ - ['zh-CN', 'zh', 'en'], - ['en-US', 'en', 'fr'], - ['es-ES', 'es', 'en'] - ]; - return languages[Math.floor(Math.random() * languages.length)]; -}; - -export const setupPage = async (page: Page): Promise => { - const proxy = getRandomProxy(); - if (proxy) { - await page.authenticate({ - username: proxy.ip, - password: proxy.port.toString() - }); - } - - await page.evaluateOnNewDocument(() => { - const newProto = (navigator as any).__proto__; - delete newProto.webdriver; - (navigator as any).__proto__ = newProto; - (window as any).chrome = {}; - (window as any).chrome.app = { - InstallState: 'testt', - RunningState: 'estt', - getDetails: 'stte', - getIsInstalled: 'ttes' - }; - (window as any).chrome.csi = function () {}; - (window as any).chrome.loadTimes = function () {}; - (window as any).chrome.runtime = function () {}; - Object.defineProperty(navigator, 'userAgent', { - get: () => getRandomUserAgent() - }); - Object.defineProperty(navigator, 'platform', { - get: () => getRandomPlatform() - }); - Object.defineProperty(navigator, 'plugins', { - get: () => [ - { - description: 'Shockwave Flash', - filename: 'pepflashplayer.dll', - length: 1, - name: 'Shockwave Flash' - } - ] - }); - Object.defineProperty(navigator, 'languages', { - get: () => getRandomLanguages() - }); - const originalQuery = (window.navigator.permissions as any).query; - (window.navigator.permissions as any).query = (parameters: any) => - parameters.name === 'notifications' - ? Promise.resolve({ state: Notification.permission } as PermissionStatus) - : originalQuery(parameters); - }); -}; diff --git a/plugins/webcrawler/SPIDER/tsconfig.json b/plugins/webcrawler/SPIDER/tsconfig.json deleted file mode 100644 index 2b443cc2a3..0000000000 --- a/plugins/webcrawler/SPIDER/tsconfig.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - "types": ["node"], - /* Language and Environment */ - "target": "es6", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - //"module": "es6", /* Specify what module code is generated. */ - "rootDir": "./src", /* Specify the root folder within your source files. */ - "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ - // "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */ - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ - // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./dist", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ - // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - - /* Type Checking */ - "typeRoots": ["./node_modules/@types"], - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, - // /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true/* Skip type checking all .d.ts files. */ - - }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/plugins/webcrawler/SPIDER/webpack.config.js b/plugins/webcrawler/SPIDER/webpack.config.js deleted file mode 100644 index 965f1f5005..0000000000 --- a/plugins/webcrawler/SPIDER/webpack.config.js +++ /dev/null @@ -1,55 +0,0 @@ -// 引入path包 -const path = require('path') -require('dotenv').config(); -const mode = process.env.NODE_ENV || 'development' - -const nodeExternals = require('webpack-node-externals'); -module.exports = { - target: 'node', // 指定构建目标为 Node.js - externals: [nodeExternals()], // 排除 node_modules - // 指定入口文件 - entry: "./src/index.ts", - - // 指定打包文件所在目录 - output: { - path: path.resolve(__dirname, 'dist'), - // 打包后文件的名称 - filename: "bundle.js" - }, - resolve: { - extensions: ['.ts', '.tsx', '.js', '.json'], - fallback: { - "zlib": require.resolve("browserify-zlib"), - "querystring": require.resolve("querystring-es3"), - "path": require.resolve("path-browserify"), - "crypto": require.resolve("crypto-browserify"), - "stream": require.resolve("stream-browserify"), - "os": require.resolve("os-browserify/browser"), - "http": require.resolve("stream-http"), - "net": false, - "string_decoder": require.resolve("string_decoder/"), - "url": require.resolve("url/"), - "buffer": require.resolve("buffer/"), - "util": require.resolve("util/"), - // 新增 assert 的 fallback - "assert": require.resolve("assert/"), - // 处理新出现的 vm 警告 - "vm": require.resolve("vm-browserify"), - "fs": false - } - }, - - // 指定webpack打包的时候要使用的模块 - module: { - // 指定要价在的规则 - rules: [ - { - // test指定的是规则生效的文件,意思是,用ts-loader来处理以ts为结尾的文件 - test: /\.ts$/, - use: 'ts-loader', - exclude: /node_modules/ - } - ] - }, - mode, -} diff --git a/plugins/webcrawler/deploy/docker-compose.yaml b/plugins/webcrawler/deploy/docker-compose.yaml deleted file mode 100644 index 0c945605af..0000000000 --- a/plugins/webcrawler/deploy/docker-compose.yaml +++ /dev/null @@ -1,80 +0,0 @@ -name: spider -version: "2.2" - -services: - searxng: - container_name: searxng - image: docker.io/searxng/searxng:latest - platform: linux/amd64 - restart: unless-stopped - networks: - - spider_net - ports: - - "8080:8080" - volumes: - - ./searxng:/etc/searxng:rw - environment: - - SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost}/ - - UWSGI_WORKERS=4 # UWSGI 工作进程数 - - UWSGI_THREADS=4 # UWSGI 线程数 - cap_drop: - - ALL - - mongodb: - container_name: mongodb - image: mongo:4.4 - restart: unless-stopped - networks: - - spider_net - ports: - - "27017:27017" - volumes: - - mongo-data:/data/db - environment: - MONGO_INITDB_ROOT_USERNAME: root # MongoDB 根用户名 - MONGO_INITDB_ROOT_PASSWORD: example # MongoDB 根用户密码 - - nodeapp: - container_name: main - platform: linux/amd64 - #build: - # context: . - image: gggaaallleee/webcrawler-test-new:latest - ports: - - "3000:3000" - networks: - - spider_net - depends_on: - - mongodb - logging: - driver: "json-file" - options: - max-size: "1m" - max-file: "1" - volumes: - - /dev/shm:/dev/shm - environment: - - ACCESS_TOKEN=webcrawler # 访问令牌 - - DETECT_WEBSITE=zhuanlan.zhihu.com # 无法处理跳过的网站 - - STRATEGIES=[{"waitUntil":"networkidle0","timeout":5000},{"waitUntil":"networkidle2","timeout":10000},{"waitUntil":"load","timeout":15000}] # 页面加载策略 - - PORT=3000 - - MAX_CONCURRENCY=10 # 最大并发数 - - NODE_ENV=development - - ENGINE_BAIDUURL=https://www.baidu.com/s # 百度搜索引擎 URL - - ENGINE_SEARCHXNGURL=http://searxng:8080/search # Searxng 搜索引擎 URL - - MONGODB_URI=mongodb://root:example@mongodb:27017 # MongoDB 连接 URI - - BLACKLIST=[".gov.cn",".edu.cn"] # 受保护域名 - - STD_TTL=3600 # 标准 TTL(秒) - - EXPIRE_AFTER_SECONDS=9000 # 过期时间(秒) - #- VALIDATE_PROXY=[{"ip":"","port":},{"ip":"","port":}] #代理池 - deploy: - resources: - limits: - memory: 4G - cpus: '2.0' - -networks: - spider_net: - -volumes: - mongo-data: \ No newline at end of file diff --git a/plugins/webcrawler/deploy/searxng/limiter.toml b/plugins/webcrawler/deploy/searxng/limiter.toml deleted file mode 100644 index 190f8df582..0000000000 --- a/plugins/webcrawler/deploy/searxng/limiter.toml +++ /dev/null @@ -1,6 +0,0 @@ -# This configuration file updates the default configuration file -# See https://github.com/searxng/searxng/blob/master/searx/limiter.toml - -[botdetection.ip_limit] -# activate link_token method in the ip_limit method -link_token = true diff --git a/plugins/webcrawler/deploy/searxng/settings.yml b/plugins/webcrawler/deploy/searxng/settings.yml deleted file mode 100644 index d1ab829992..0000000000 --- a/plugins/webcrawler/deploy/searxng/settings.yml +++ /dev/null @@ -1,122 +0,0 @@ -general: - debug: false - instance_name: "searxng" - privacypolicy_url: false - donation_url: false - contact_url: false - enable_metrics: true - open_metrics: '' - -brand: - new_issue_url: https://github.com/searxng/searxng/issues/new - docs_url: https://docs.searxng.org/ - public_instances: https://searx.space - wiki_url: https://github.com/searxng/searxng/wiki - issue_url: https://github.com/searxng/searxng/issues - -search: - safe_search: 0 - autocomplete: "" - autocomplete_min: 4 - default_lang: "auto" - ban_time_on_fail: 5 - max_ban_time_on_fail: 120 - formats: - - html - -server: - port: 8080 - bind_address: "0.0.0.0" - base_url: false - limiter: false - public_instance: false - secret_key: "example" - image_proxy: false - http_protocol_version: "1.0" - method: "POST" - default_http_headers: - X-Content-Type-Options: nosniff - X-Download-Options: noopen - X-Robots-Tag: noindex, nofollow - Referrer-Policy: no-referrer - -redis: - url: false - -ui: - static_path: "" - static_use_hash: false - templates_path: "" - default_theme: simple - default_locale: "" - query_in_title: false - infinite_scroll: false - center_alignment: false - theme_args: - simple_style: auto - # 启用 cn 分类 - enabled_categories: [cn,en, general, images,en] - # 或者定义分类显示顺序 - categories_order: [cn, en,general, images] - -outgoing: - request_timeout: 30.0 - max_request_timeout: 40.0 - pool_connections: 200 - pool_maxsize: 50 - enable_http2: false - retries: 5 - -engines: - - name: bing - engine: bing - disabled: false - categories: cn - #- name: bilibili - # engine: bilibili - # shortcut: bil - # disabled: false - # categories: cn - - name : baidu - engine : json_engine - paging : True - first_page_num : 0 - search_url : https://www.baidu.com/s?tn=json&wd={query}&pn={pageno}&rn=50 - url_query : url - title_query : title - content_query : abs - categories : cn - - name : 360search - engine: 360search - disabled: false - categories: cn - - name : sogou - disabled: false - categories: cn - - - name: google - disabled: false - categories: en - - name: yahoo - disabled: false - categories: en - - name: duckduckgo - disabled: false - categories: en - - - -search: - formats: - - html - - json -doi_resolvers: - oadoi.org: 'https://oadoi.org/' - doi.org: 'https://doi.org/' - doai.io: 'https://dissem.in/' - sci-hub.se: 'https://sci-hub.se/' - sci-hub.st: 'https://sci-hub.st/' - sci-hub.ru: 'https://sci-hub.ru/' - -default_doi_resolver: 'oadoi.org' - diff --git a/plugins/webcrawler/docker-compose.yaml b/plugins/webcrawler/docker-compose.yaml deleted file mode 100644 index 76649f8265..0000000000 --- a/plugins/webcrawler/docker-compose.yaml +++ /dev/null @@ -1,124 +0,0 @@ -name: spider -version: "0.0.1" - -services: - caddy: - container_name: caddy - image: docker.io/library/caddy:2-alpine - network_mode: host - restart: unless-stopped - volumes: - - ./Caddyfile:/etc/caddy/Caddyfile:ro - - caddy-data:/data:rw - - caddy-config:/config:rw - environment: - - SEARXNG_HOSTNAME=${SEARXNG_HOSTNAME:-http://localhost} - - SEARXNG_TLS=${LETSENCRYPT_EMAIL:-internal} - cap_add: - - NET_BIND_SERVICE - cap_drop: - - ALL - logging: - driver: "json-file" - options: - max-size: "1m" - max-file: "1" - - redis: - container_name: redis - image: docker.io/valkey/valkey:8-alpine - command: valkey-server --save 30 1 --loglevel warning - restart: unless-stopped - networks: - - searxng - volumes: - - valkey-data2:/data - cap_drop: - - ALL - cap_add: - - SETGID - - SETUID - - DAC_OVERRIDE - logging: - driver: "json-file" - options: - max-size: "1m" - max-file: "1" - - searxng: - container_name: searxng - image: docker.io/searxng/searxng:latest - restart: unless-stopped - networks: - - searxng - ports: - - "127.0.0.1:8080:8080" - volumes: - - ./searxng:/etc/searxng:rw - environment: - - SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost}/ - - UWSGI_WORKERS=${SEARXNG_UWSGI_WORKERS:-4} - - UWSGI_THREADS=${SEARXNG_UWSGI_THREADS:-4} - env_file: - - .searchxng.env - cap_drop: - - ALL - cap_add: - - CHOWN - - SETGID - - SETUID - logging: - driver: "json-file" - options: - max-size: "1m" - max-file: "1" - - mongodb: - container_name: mongodb - image: mongo:4.4 - restart: unless-stopped - networks: - - searxng - ports: - - "27017:27017" - volumes: - - mongo-data:/data/db - environment: - MONGO_INITDB_ROOT_USERNAME: root - MONGO_INITDB_ROOT_PASSWORD: example - logging: - driver: "json-file" - options: - max-size: "1m" - max-file: "1" - - nodeapp: - container_name: main - build: - context: . - ports: - - "3000:3000" - networks: - - searxng - depends_on: - - mongodb - logging: - driver: "json-file" - options: - max-size: "1m" - max-file: "1" - volumes: - - /dev/shm:/dev/shm - deploy: - resources: - limits: - memory: 4G - cpus: '2.0' -networks: - searxng: - -volumes: - caddy-data: - caddy-config: - valkey-data2: - mongo-data: \ No newline at end of file diff --git a/plugins/webcrawler/searxng-docker.service.template b/plugins/webcrawler/searxng-docker.service.template deleted file mode 100644 index 29a508c0aa..0000000000 --- a/plugins/webcrawler/searxng-docker.service.template +++ /dev/null @@ -1,16 +0,0 @@ -[Unit] -Description=SearXNG service -Requires=docker.service -After=docker.service - -[Service] -Restart=on-failure - -Environment=SEARXNG_DOCKERCOMPOSEFILE=docker-compose.yaml - -WorkingDirectory=/usr/local/searxng-docker -ExecStart=/usr/local/bin/docker compose -f ${SEARXNG_DOCKERCOMPOSEFILE} up --remove-orphans -ExecStop=/usr/local/bin/docker compose -f ${SEARXNG_DOCKERCOMPOSEFILE} down - -[Install] -WantedBy=multi-user.target diff --git a/plugins/webcrawler/searxng/limiter.toml b/plugins/webcrawler/searxng/limiter.toml deleted file mode 100644 index 190f8df582..0000000000 --- a/plugins/webcrawler/searxng/limiter.toml +++ /dev/null @@ -1,6 +0,0 @@ -# This configuration file updates the default configuration file -# See https://github.com/searxng/searxng/blob/master/searx/limiter.toml - -[botdetection.ip_limit] -# activate link_token method in the ip_limit method -link_token = true diff --git a/plugins/webcrawler/searxng/settings.yml b/plugins/webcrawler/searxng/settings.yml deleted file mode 100644 index 7179665986..0000000000 --- a/plugins/webcrawler/searxng/settings.yml +++ /dev/null @@ -1,38 +0,0 @@ -# see https://docs.searxng.org/admin/settings/settings.html#settings-use-default-settings -use_default_settings: true -server: - # base_url is defined in the SEARXNG_BASE_URL environment variable, see .env and docker-compose.yml - secret_key: "01042f00ae8bb522a9c03d3e7e1910318208a2c9fbdd23a6315577a9c98553a8" # change this! - limiter: false # can be disabled for a private instance - image_proxy: true -ui: - static_use_hash: true - # 启用 cn 分类 - enabled_categories: [cn, general, images] # 按需添加其他分类 - # 或者定义分类显示顺序 - categories_order: [cn, general, images] -redis: - url: redis://redis:6379/0 -engines: - - name: bing - disabled: false - categories: cn - #- name: bilibili - # engine: bilibili - # shortcut: bil - # disabled: false - # categories: cn - - name : baidu - engine : json_engine - paging : True - first_page_num : 0 - search_url : https://www.baidu.com/s?tn=json&wd={query}&pn={pageno}&rn=50 - url_query : url - title_query : title - content_query : abs - categories : cn - -search: - formats: - - html - - json diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c47686c2a0..1683633929 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,36 +30,54 @@ catalogs: '@emotion/styled': specifier: ^11 version: 11.11.0 - '@fastgpt-sdk/logger': - specifier: 0.1.2 - version: 0.1.2 - '@fastgpt-sdk/otel': - specifier: 0.1.2 - version: 0.1.2 - '@fastgpt-sdk/storage': - specifier: 0.6.17 - version: 0.6.17 '@modelcontextprotocol/sdk': specifier: ^1 version: 1.26.0 + '@node-rs/jieba': + specifier: 2.0.1 + version: 2.0.1 + '@svgr/webpack': + specifier: ^6.5.1 + version: 6.5.1 + '@tanstack/react-query': + specifier: ^4.24.10 + version: 4.36.1 + '@types/js-yaml': + specifier: ^4.0.9 + version: 4.0.9 + '@types/jsonwebtoken': + specifier: ^9.0.3 + version: 9.0.9 '@types/lodash': specifier: ^4 version: 4.17.16 '@types/mime-types': - specifier: 3.0.1 + specifier: ^3.0.1 version: 3.0.1 '@types/node': specifier: ^20 version: 20.17.24 - '@types/react': - specifier: ^18 - version: 18.3.1 - '@types/react-dom': - specifier: ^18 - version: 18.3.0 + '@types/request-ip': + specifier: ^0.0.38 + version: 0.0.38 + '@typescript-eslint/eslint-plugin': + specifier: ^6.21.0 + version: 6.21.0 + '@typescript-eslint/parser': + specifier: ^6.21.0 + version: 6.21.0 + '@vitest/coverage-v8': + specifier: ^4.1.5 + version: 4.1.5 + ahooks: + specifier: ^3.9.5 + version: 3.9.5 axios: specifier: 1.13.6 version: 1.13.6 + chalk: + specifier: ^5.6.2 + version: 5.6.2 date-fns: specifier: ^3.6.0 version: 3.6.0 @@ -67,7 +85,7 @@ catalogs: specifier: 1.11.19 version: 1.11.19 eslint: - specifier: ^8 + specifier: ^8.57.0 version: 8.57.1 eslint-config-next: specifier: 15.5.12 @@ -87,6 +105,9 @@ catalogs: json5: specifier: ^2.2.3 version: 2.2.3 + jsonwebtoken: + specifier: ^9.0.3 + version: 9.0.3 lodash: specifier: 4.17.23 version: 4.17.23 @@ -99,59 +120,86 @@ catalogs: minio: specifier: 8.0.7 version: 8.0.7 + mongodb-memory-server: + specifier: ^10.1.4 + version: 10.1.4 + mongoose: + specifier: ^8.10.1 + version: 8.12.1 + nanoid: + specifier: ^5.1.3 + version: 5.1.5 next: - specifier: 16.2.1 - version: 16.2.1 + specifier: 16.2.4 + version: 16.2.4 next-i18next: specifier: 15.4.2 version: 15.4.2 - next-rspack: - specifier: 16.2.1 - version: 16.2.1 proxy-agent: specifier: ^6 version: 6.5.0 - react: - specifier: ^18 - version: 18.3.1 - react-dom: - specifier: ^18 - version: 18.3.1 + react-hook-form: + specifier: 7.43.1 + version: 7.43.1 react-i18next: specifier: 14.1.2 version: 14.1.2 + react-markdown: + specifier: ^9.0.1 + version: 9.1.0 + recharts: + specifier: ^2.15.0 + version: 2.15.1 + remark-gfm: + specifier: ^4.0.1 + version: 4.0.1 + request-ip: + specifier: ^3.3.0 + version: 3.3.0 tsdown: specifier: 0.21.4 version: 0.21.4 + tsx: + specifier: ^4.20.6 + version: 4.20.6 typescript: specifier: ^5.9.3 version: 5.9.3 + vitest: + specifier: ^4.1.5 + version: 4.1.5 zod: specifier: ^4 version: 4.1.12 +overrides: + '@types/react': ^18 + '@types/react-dom': ^18 + react: ^18 + react-dom: ^18 + importers: .: devDependencies: '@chakra-ui/cli': specifier: ^2.4.1 - version: 2.5.8(react@18.3.1)(ws@8.20.0) + version: 2.5.8(encoding@0.1.13)(react@18.3.1)(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) '@typescript-eslint/eslint-plugin': - specifier: ^6.21.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2) + specifier: 'catalog:' + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) '@typescript-eslint/parser': - specifier: ^6.21.0 - version: 6.21.0(eslint@8.57.1)(typescript@5.8.2) + specifier: 'catalog:' + version: 6.21.0(eslint@8.57.1)(typescript@5.9.3) '@vitest/coverage-v8': - specifier: ^3.0.9 - version: 3.1.1(vitest@3.1.1(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) + specifier: 'catalog:' + version: 4.1.5(vitest@4.1.5) eslint: specifier: 'catalog:' version: 8.57.1 eslint-config-next: specifier: 'catalog:' - version: 15.5.12(eslint@8.57.1)(typescript@5.8.2) + version: 15.5.12(eslint@8.57.1)(typescript@5.9.3) husky: specifier: ^8.0.3 version: 8.0.3 @@ -165,26 +213,26 @@ importers: specifier: ^13.3.0 version: 13.3.0 mongodb-memory-server: - specifier: ^10.1.4 - version: 10.1.4(socks@2.8.4) + specifier: 'catalog:' + version: 10.1.4(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.4) next-i18next: specifier: 'catalog:' - version: 15.4.2(i18next@23.16.8)(next@16.2.1(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 15.4.2(i18next@23.16.8)(next@16.2.4(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) prettier: specifier: 3.2.4 version: 3.2.4 react-i18next: specifier: 'catalog:' version: 14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + turbo: + specifier: 2.9.6 + version: 2.9.6 typescript: - specifier: ^5.1.3 - version: 5.8.2 + specifier: 'catalog:' + version: 5.9.3 vitest: - specifier: ^3.0.9 - version: 3.1.1(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - zhlint: - specifier: ^0.7.4 - version: 0.7.4(@types/node@24.0.13)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(typescript@5.8.2) + specifier: 'catalog:' + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.0.13)(@vitest/coverage-v8@4.1.5)(jsdom@26.1.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@6.2.2(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) packages/global: dependencies: @@ -222,14 +270,14 @@ importers: specifier: 'catalog:' version: 4.17.23 nanoid: - specifier: ^5.1.3 - version: 5.1.3 + specifier: 'catalog:' + version: 5.1.5 next: specifier: 'catalog:' - version: 16.2.1(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1) + version: 16.2.4(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1) openai: specifier: 4.104.0 - version: 4.104.0(encoding@0.1.13)(ws@8.20.0)(zod@4.1.12) + version: 4.104.0(encoding@0.1.13)(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@4.1.12) openapi-types: specifier: ^12.1.3 version: 12.1.3 @@ -244,14 +292,14 @@ importers: version: 5.4.6(zod@4.1.12) devDependencies: '@types/js-yaml': - specifier: ^4.0.9 + specifier: 'catalog:' version: 4.0.9 '@types/lodash': specifier: 'catalog:' version: 4.17.16 '@types/node': - specifier: 20.14.0 - version: 20.14.0 + specifier: 'catalog:' + version: 20.17.24 packages/service: dependencies: @@ -259,23 +307,23 @@ importers: specifier: ^11.7.2 version: 11.7.2 '@fastgpt-sdk/otel': - specifier: 'catalog:' - version: 0.1.2 + specifier: workspace:* + version: link:../../sdk/otel '@fastgpt-sdk/sandbox-adapter': specifier: ^0.0.36 version: 0.0.36 '@fastgpt-sdk/storage': - specifier: 'catalog:' - version: 0.6.17(@opentelemetry/api@1.9.0)(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(proxy-agent@6.5.0)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) + specifier: workspace:* + version: link:../../sdk/storage '@fastgpt/global': specifier: workspace:* version: link:../global '@mariozechner/pi-agent-core': specifier: ^0.67.3 - version: 0.67.3(@modelcontextprotocol/sdk@1.26.0(zod@4.1.12))(ws@8.20.0)(zod@4.1.12) + version: 0.67.3(@modelcontextprotocol/sdk@1.26.0(zod@4.1.12))(bufferutil@4.1.0)(utf-8-validate@5.0.10)(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@4.1.12) '@mariozechner/pi-ai': specifier: ^0.67.3 - version: 0.67.3(@modelcontextprotocol/sdk@1.26.0(zod@4.1.12))(ws@8.20.0)(zod@4.1.12) + version: 0.67.3(@modelcontextprotocol/sdk@1.26.0(zod@4.1.12))(bufferutil@4.1.0)(utf-8-validate@5.0.10)(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@4.1.12) '@maxmind/geoip2-node': specifier: ^6.3.4 version: 6.3.4 @@ -283,7 +331,7 @@ importers: specifier: 'catalog:' version: 1.26.0(zod@4.1.12) '@node-rs/jieba': - specifier: 2.0.1 + specifier: 'catalog:' version: 2.0.1 '@opentelemetry/api': specifier: ^1.9.0 @@ -304,8 +352,8 @@ importers: specifier: ^5.52.2 version: 5.52.2 chalk: - specifier: ^5.3.0 - version: 5.4.1 + specifier: 'catalog:' + version: 5.6.2 cheerio: specifier: 1.0.0-rc.12 version: 1.0.0-rc.12 @@ -361,8 +409,8 @@ importers: specifier: ^3.0.0 version: 3.13.2 jsonwebtoken: - specifier: ^9.0.2 - version: 9.0.2 + specifier: 'catalog:' + version: 9.0.3 jszip: specifier: ^3.10.1 version: 3.10.1 @@ -382,8 +430,8 @@ importers: specifier: 'catalog:' version: 8.0.7 mongoose: - specifier: ^8.10.1 - version: 8.12.1(socks@2.8.4) + specifier: 'catalog:' + version: 8.12.1(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.4) multer: specifier: 2.1.0 version: 2.1.0 @@ -392,10 +440,10 @@ importers: version: 3.13.0 next: specifier: 'catalog:' - version: 16.2.1(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1) + version: 16.2.4(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1) nextjs-cors: specifier: 2.2.1 - version: 2.2.1(next@16.2.1(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1)) + version: 2.2.1(next@16.2.4(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1)) node-cron: specifier: ^3.0.3 version: 3.0.3 @@ -427,7 +475,7 @@ importers: specifier: ^1.1.0 version: 1.1.0 request-ip: - specifier: ^3.3.0 + specifier: 'catalog:' version: 3.3.0 tiktoken: specifier: 1.0.17 @@ -458,7 +506,7 @@ importers: specifier: ^4.2.7 version: 4.2.7 '@types/jsonwebtoken': - specifier: ^9.0.3 + specifier: 'catalog:' version: 9.0.9 '@types/lodash': specifier: 'catalog:' @@ -482,8 +530,8 @@ importers: specifier: ^1.0.4 version: 1.0.4 '@types/request-ip': - specifier: ^0.0.37 - version: 0.0.37 + specifier: 'catalog:' + version: 0.0.38 '@types/tunnel': specifier: ^0.0.4 version: 0.0.4 @@ -501,7 +549,7 @@ importers: version: 2.1.1(@chakra-ui/system@2.6.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/next-js': specifier: 'catalog:' - version: 2.4.2(@chakra-ui/react@2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@16.2.1(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react@18.3.1) + version: 2.4.2(@chakra-ui/react@2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@16.2.4(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react@18.3.1) '@chakra-ui/react': specifier: 'catalog:' version: 2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -551,10 +599,10 @@ importers: specifier: ^4.7.0 version: 4.7.0(monaco-editor@0.52.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-query': - specifier: ^4.24.10 + specifier: 'catalog:' version: 4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ahooks: - specifier: ^3.9.5 + specifier: 'catalog:' version: 3.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) axios: specifier: 'catalog:' @@ -579,15 +627,15 @@ importers: version: 4.17.23 next: specifier: 'catalog:' - version: 16.2.1(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1) + version: 16.2.4(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1) next-i18next: specifier: 'catalog:' - version: 15.4.2(i18next@23.16.8)(next@16.2.1(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 15.4.2(i18next@23.16.8)(next@16.2.4(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) papaparse: specifier: ^5.4.1 version: 5.4.1 react: - specifier: 'catalog:' + specifier: ^18 version: 18.3.1 react-beautiful-dnd: specifier: ^13.1.1 @@ -596,28 +644,28 @@ importers: specifier: ^9.14.0 version: 9.14.0(react@18.3.1) react-dom: - specifier: 'catalog:' + specifier: ^18 version: 18.3.1(react@18.3.1) react-hook-form: - specifier: 7.43.1 + specifier: 'catalog:' version: 7.43.1(react@18.3.1) react-i18next: specifier: 'catalog:' version: 14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-markdown: - specifier: ^9.0.1 + specifier: 'catalog:' version: 9.1.0(@types/react@18.3.1)(react@18.3.1) react-photo-view: specifier: ^1.2.6 version: 1.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) recharts: - specifier: ^2.15.0 + specifier: 'catalog:' version: 2.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rehype-external-links: specifier: ^3.0.0 version: 3.0.0 remark-gfm: - specifier: ^4.0.1 + specifier: 'catalog:' version: 4.0.1 use-context-selector: specifier: ^1.4.4 @@ -636,15 +684,332 @@ importers: specifier: ^5.3.7 version: 5.3.7 '@types/react': - specifier: 'catalog:' + specifier: ^18 version: 18.3.1 '@types/react-beautiful-dnd': specifier: ^13.1.1 version: 13.1.8 '@types/react-dom': - specifier: 'catalog:' + specifier: ^18 version: 18.3.0 + pro/admin: + dependencies: + '@alicloud/dysmsapi20170525': + specifier: ^2.0.24 + version: 2.0.24 + '@alicloud/openapi-client': + specifier: ^0.4.6 + version: 0.4.15 + '@alicloud/tea-util': + specifier: ^1.4.7 + version: 1.4.11 + '@chakra-ui/icons': + specifier: 'catalog:' + version: 2.1.1(@chakra-ui/system@2.6.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/next-js': + specifier: 'catalog:' + version: 2.4.2(@chakra-ui/react@2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@16.2.4(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react@18.3.1) + '@chakra-ui/react': + specifier: 'catalog:' + version: 2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': + specifier: 'catalog:' + version: 2.6.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(react@18.3.1) + '@emotion/react': + specifier: 'catalog:' + version: 11.11.1(@types/react@18.3.1)(react@18.3.1) + '@emotion/styled': + specifier: 'catalog:' + version: 11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1) + '@fastgpt-sdk/otel': + specifier: workspace:* + version: link:../../sdk/otel + '@fastgpt-sdk/storage': + specifier: workspace:* + version: link:../../sdk/storage + '@fastgpt/global': + specifier: workspace:* + version: link:../../packages/global + '@fastgpt/service': + specifier: workspace:* + version: link:../../packages/service + '@fastgpt/web': + specifier: workspace:* + version: link:../../packages/web + '@kubernetes/client-node': + specifier: ^1.4.0 + version: 1.4.0(bufferutil@4.1.0)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@larksuiteoapi/node-sdk': + specifier: ^1.59.0 + version: 1.61.1(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@node-rs/jieba': + specifier: 'catalog:' + version: 2.0.1 + '@peculiar/x509': + specifier: ^1.9.5 + version: 1.14.3 + '@scalar/api-reference-react': + specifier: ^0.8.1 + version: 0.8.1(axios@1.13.6)(nprogress@0.2.0)(qrcode@1.5.4)(react@18.3.1)(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1))(typescript@5.9.3) + '@tanstack/react-query': + specifier: 'catalog:' + version: 4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/react-table': + specifier: ^8.10.7 + version: 8.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/nprogress': + specifier: ^0.2.0 + version: 0.2.3 + '@wecom/crypto': + specifier: ^1.0.1 + version: 1.0.1 + ahooks: + specifier: 'catalog:' + version: 3.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + alipay-sdk: + specifier: ^4.13.0 + version: 4.14.0 + assert: + specifier: ^2.0.0 + version: 2.1.0 + autoprefixer: + specifier: ^10.4.19 + version: 10.5.0(postcss@8.5.6) + axios: + specifier: 'catalog:' + version: 1.13.6 + bufferutil: + specifier: ^4.1.0 + version: 4.1.0 + canvas: + specifier: ^3.0.0 + version: 3.2.3 + clsx: + specifier: ^1.2.1 + version: 1.2.1 + crawlee: + specifier: ^3.13.1 + version: 3.16.0(@types/node@20.17.24)(bufferutil@4.1.0)(canvas@3.2.3)(puppeteer@23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + date-fns: + specifier: 'catalog:' + version: 3.6.0 + dayjs: + specifier: 'catalog:' + version: 1.11.19 + dns-packet: + specifier: ^5.6.1 + version: 5.6.1 + fast-xml-parser: + specifier: ^4.4.1 + version: 4.5.6 + framer-motion: + specifier: 9.1.7 + version: 9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + gcp-metadata: + specifier: ^5.3.0 + version: 5.3.0(encoding@0.1.13) + i18next: + specifier: 'catalog:' + version: 23.16.8 + js-yaml: + specifier: 'catalog:' + version: 4.1.1 + json5: + specifier: 'catalog:' + version: 2.2.3 + jsonwebtoken: + specifier: 'catalog:' + version: 9.0.3 + jsrsasign: + specifier: ^11.1.0 + version: 11.1.3 + katex: + specifier: 0.16.22 + version: 0.16.22 + lodash: + specifier: 'catalog:' + version: 4.17.23 + mongoose: + specifier: 'catalog:' + version: 8.12.1(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.4) + nanoid: + specifier: 'catalog:' + version: 5.1.5 + next: + specifier: 'catalog:' + version: 16.2.4(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1) + next-i18next: + specifier: 'catalog:' + version: 15.4.2(i18next@23.16.8)(next@16.2.4(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + nodemailer: + specifier: ^7.0.11 + version: 7.0.13 + nprogress: + specifier: ^0.2.0 + version: 0.2.0 + pg: + specifier: ^8.10.0 + version: 8.14.0 + proxy-agent: + specifier: 'catalog:' + version: 6.5.0 + puppeteer: + specifier: ^23.2.1 + version: 23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + react: + specifier: ^18 + version: 18.3.1 + react-dom: + specifier: ^18 + version: 18.3.1(react@18.3.1) + react-hook-form: + specifier: 'catalog:' + version: 7.43.1(react@18.3.1) + react-i18next: + specifier: 'catalog:' + version: 14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-markdown: + specifier: 'catalog:' + version: 9.1.0(@types/react@18.3.1)(react@18.3.1) + recharts: + specifier: 'catalog:' + version: 2.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rehype-katex: + specifier: ^7.0.0 + version: 7.0.1 + remark-breaks: + specifier: ^4.0.0 + version: 4.0.0 + remark-gfm: + specifier: 'catalog:' + version: 4.0.1 + remark-math: + specifier: ^6.0.0 + version: 6.0.0 + request-ip: + specifier: 'catalog:' + version: 3.3.0 + sass: + specifier: ^1.58.3 + version: 1.85.1 + tailwindcss: + specifier: ^3.0 + version: 3.4.18(tsx@4.20.6)(yaml@2.8.1) + utf-8-validate: + specifier: ^5.0.10 + version: 5.0.10 + xml2js: + specifier: ^0.6.2 + version: 0.6.2 + zod: + specifier: 'catalog:' + version: 4.1.12 + devDependencies: + '@faker-js/faker': + specifier: ^9.0.3 + version: 9.9.0 + '@svgr/webpack': + specifier: 'catalog:' + version: 6.5.1 + '@types/dns-packet': + specifier: ^5.6.5 + version: 5.6.5 + '@types/js-yaml': + specifier: 'catalog:' + version: 4.0.9 + '@types/jsonwebtoken': + specifier: 'catalog:' + version: 9.0.9 + '@types/lodash': + specifier: 'catalog:' + version: 4.17.16 + '@types/node': + specifier: 'catalog:' + version: 20.17.24 + '@types/nodemailer': + specifier: ^6.4.9 + version: 6.4.23 + '@types/pg': + specifier: ^8.6.6 + version: 8.11.11 + '@types/react': + specifier: ^18 + version: 18.3.1 + '@types/react-dom': + specifier: ^18 + version: 18.3.0 + '@types/request-ip': + specifier: 'catalog:' + version: 0.0.38 + '@types/xml2js': + specifier: ^0.4.14 + version: 0.4.14 + esbuild: + specifier: ^0.25.11 + version: 0.25.11 + eslint: + specifier: 'catalog:' + version: 8.57.1 + eslint-config-next: + specifier: 'catalog:' + version: 15.5.12(eslint@8.57.1)(typescript@5.9.3) + mongodb-memory-server: + specifier: 'catalog:' + version: 10.1.4(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.4) + tsx: + specifier: 'catalog:' + version: 4.20.6 + typescript: + specifier: 'catalog:' + version: 5.9.3 + vitest: + specifier: 'catalog:' + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@20.17.24)(@vitest/coverage-v8@4.1.5)(jsdom@26.1.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@6.2.2(@types/node@20.17.24)(jiti@1.21.7)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) + + pro/sso: + dependencies: + '@fastgpt-sdk/logger': + specifier: workspace:* + version: link:../../sdk/logger + '@node-saml/node-saml': + specifier: ^5.1.0 + version: 5.1.0 + axios: + specifier: 'catalog:' + version: 1.13.6 + chalk: + specifier: 'catalog:' + version: 5.6.2 + cors: + specifier: ^2.8.5 + version: 2.8.6 + date-fns: + specifier: 'catalog:' + version: 3.6.0 + dotenv: + specifier: ^16.3.1 + version: 16.5.0 + express: + specifier: 'catalog:' + version: 4.22.1 + metadata-saml2: + specifier: ^2.0.1 + version: 2.1.2 + xml2js: + specifier: ^0.6.2 + version: 0.6.2 + devDependencies: + '@types/cors': + specifier: ^2.8.17 + version: 2.8.19 + '@types/express': + specifier: ^4.17.21 + version: 4.17.25 + '@types/xml2js': + specifier: ^0.4.14 + version: 0.4.14 + projects/app: dependencies: '@chakra-ui/anatomy': @@ -655,7 +1020,7 @@ importers: version: 2.1.1(@chakra-ui/system@2.6.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/next-js': specifier: 'catalog:' - version: 2.4.2(@chakra-ui/react@2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@16.2.1(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react@18.3.1) + version: 2.4.2(@chakra-ui/react@2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@16.2.4(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react@18.3.1) '@chakra-ui/react': specifier: 'catalog:' version: 2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -674,9 +1039,12 @@ importers: '@emotion/styled': specifier: 'catalog:' version: 11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1) + '@fastgpt-sdk/otel': + specifier: workspace:* + version: link:../../sdk/otel '@fastgpt-sdk/storage': - specifier: 'catalog:' - version: 0.6.17(@opentelemetry/api@1.9.0)(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) + specifier: workspace:* + version: link:../../sdk/storage '@fastgpt/global': specifier: workspace:* version: link:../../packages/global @@ -696,16 +1064,16 @@ importers: specifier: ^4.7.0 version: 4.7.0(monaco-editor@0.52.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@node-rs/jieba': - specifier: 2.0.1 + specifier: 'catalog:' version: 2.0.1 '@scalar/api-reference-react': specifier: ^0.8.1 - version: 0.8.1(axios@1.13.6)(nprogress@0.2.0)(qrcode@1.5.4)(react@18.3.1)(tailwindcss@4.1.14)(typescript@5.8.2) + version: 0.8.1(axios@1.13.6)(nprogress@0.2.0)(qrcode@1.5.4)(react@18.3.1)(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1))(typescript@5.9.3) '@tanstack/react-query': - specifier: ^4.24.10 + specifier: 'catalog:' version: 4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ahooks: - specifier: ^3.9.5 + specifier: 'catalog:' version: 3.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) archiver: specifier: ^7.0.1 @@ -756,11 +1124,14 @@ importers: specifier: ^0.7.2 version: 0.7.2 jsonwebtoken: - specifier: ^9.0.2 - version: 9.0.2 + specifier: 'catalog:' + version: 9.0.3 jszip: specifier: ^3.10.1 version: 3.10.1 + katex: + specifier: 0.16.22 + version: 0.16.22 lodash: specifier: 'catalog:' version: 4.17.23 @@ -773,15 +1144,18 @@ importers: minio: specifier: 'catalog:' version: 8.0.7 + mongoose: + specifier: 'catalog:' + version: 8.12.1(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.4) nanoid: - specifier: ^5.1.3 - version: 5.1.3 + specifier: 'catalog:' + version: 5.1.5 next: specifier: 'catalog:' - version: 16.2.1(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1) + version: 16.2.4(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1) next-i18next: specifier: 'catalog:' - version: 15.4.2(i18next@23.16.8)(next@16.2.1(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 15.4.2(i18next@23.16.8)(next@16.2.4(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) nprogress: specifier: ^0.2.0 version: 0.2.0 @@ -792,19 +1166,19 @@ importers: specifier: ^1.5.4 version: 1.5.4 react: - specifier: 'catalog:' + specifier: ^18 version: 18.3.1 react-dom: - specifier: 'catalog:' + specifier: ^18 version: 18.3.1(react@18.3.1) react-hook-form: - specifier: 7.43.1 + specifier: 'catalog:' version: 7.43.1(react@18.3.1) react-i18next: specifier: 'catalog:' version: 14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-markdown: - specifier: ^9.0.1 + specifier: 'catalog:' version: 9.1.0(@types/react@18.3.1)(react@18.3.1) react-syntax-highlighter: specifier: ^15.5.0 @@ -816,7 +1190,7 @@ importers: specifier: ^11.7.4 version: 11.11.4(@types/react@18.3.1)(immer@9.0.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) recharts: - specifier: ^2.15.0 + specifier: 'catalog:' version: 2.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rehype-external-links: specifier: ^3.0.0 @@ -828,13 +1202,13 @@ importers: specifier: ^4.0.0 version: 4.0.0 remark-gfm: - specifier: ^4.0.0 + specifier: 'catalog:' version: 4.0.1 remark-math: specifier: ^6.0.0 version: 6.0.0 request-ip: - specifier: ^3.3.0 + specifier: 'catalog:' version: 3.3.0 sass: specifier: ^1.58.3 @@ -851,9 +1225,9 @@ importers: devDependencies: '@next/bundle-analyzer': specifier: 16.1.6 - version: 16.1.6 + version: 16.1.6(bufferutil@4.1.0)(utf-8-validate@5.0.10) '@svgr/webpack': - specifier: ^6.5.1 + specifier: 'catalog:' version: 6.5.1 '@types/archiver': specifier: ^6.0.2 @@ -862,16 +1236,16 @@ importers: specifier: ^1.17.15 version: 1.17.17 '@types/js-yaml': - specifier: ^4.0.9 + specifier: 'catalog:' version: 4.0.9 '@types/jsonwebtoken': - specifier: ^9.0.3 + specifier: 'catalog:' version: 9.0.9 '@types/lodash': specifier: 'catalog:' version: 4.17.16 '@types/node': - specifier: ^20.14.2 + specifier: 'catalog:' version: 20.17.24 '@types/nprogress': specifier: ^0.2.0 @@ -880,47 +1254,47 @@ importers: specifier: ^1.5.5 version: 1.5.5 '@types/react': - specifier: 'catalog:' + specifier: ^18 version: 18.3.1 '@types/react-dom': - specifier: 'catalog:' + specifier: ^18 version: 18.3.0 '@types/react-syntax-highlighter': specifier: ^15.5.6 version: 15.5.13 '@types/request-ip': - specifier: ^0.0.37 - version: 0.0.37 + specifier: 'catalog:' + version: 0.0.38 '@typescript-eslint/eslint-plugin': - specifier: ^6.21.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2) + specifier: 'catalog:' + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.9.3))(eslint@8.56.0)(typescript@5.9.3) '@typescript-eslint/parser': - specifier: ^6.21.0 - version: 6.21.0(eslint@8.57.1)(typescript@5.8.2) + specifier: 'catalog:' + version: 6.21.0(eslint@8.56.0)(typescript@5.9.3) eslint: specifier: 'catalog:' - version: 8.57.1 + version: 8.56.0 eslint-config-next: specifier: 'catalog:' - version: 15.5.12(eslint@8.57.1)(typescript@5.8.2) - next-rspack: - specifier: 'catalog:' - version: 16.2.1(@swc/helpers@0.5.15) + version: 15.5.12(eslint@8.56.0)(typescript@5.9.3) + tailwindcss: + specifier: ^3 + version: 3.4.18(tsx@4.20.6)(yaml@2.8.1) tsx: - specifier: ^4.20.6 + specifier: 'catalog:' version: 4.20.6 typescript: - specifier: ^5.1.3 - version: 5.8.2 + specifier: 'catalog:' + version: 5.9.3 vitest: - specifier: ^3.0.9 - version: 3.1.1(@types/debug@4.1.12)(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) + specifier: 'catalog:' + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@20.17.24)(@vitest/coverage-v8@4.1.5)(jsdom@26.1.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@6.2.2(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) projects/code-sandbox: dependencies: '@fastgpt-sdk/logger': - specifier: 'catalog:' - version: 0.1.2 + specifier: workspace:* + version: link:../../sdk/logger '@fastgpt/service': specifier: workspace:* version: link:../../packages/service @@ -962,17 +1336,17 @@ importers: specifier: ^1.2.4 version: 1.3.11 '@types/node': - specifier: ^20.14.2 + specifier: 'catalog:' version: 20.17.24 '@vitest/coverage-v8': - specifier: ^3.0.9 - version: 3.1.1(vitest@3.1.1(@types/debug@4.1.12)(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) + specifier: 'catalog:' + version: 4.1.5(vitest@4.1.5) typescript: - specifier: ^5.7.3 + specifier: 'catalog:' version: 5.9.3 vitest: - specifier: ^3.0.9 - version: 3.1.1(@types/debug@4.1.12)(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) + specifier: 'catalog:' + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@20.17.24)(@vitest/coverage-v8@4.1.5)(jsdom@26.1.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@6.2.2(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) projects/marketplace: dependencies: @@ -984,7 +1358,7 @@ importers: version: 2.1.1(@chakra-ui/system@2.6.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/next-js': specifier: 'catalog:' - version: 2.4.2(@chakra-ui/react@2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@16.2.1(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react@18.3.1) + version: 2.4.2(@chakra-ui/react@2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@16.2.4(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react@18.3.1) '@chakra-ui/react': specifier: 'catalog:' version: 2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -995,8 +1369,8 @@ importers: specifier: 'catalog:' version: 2.6.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(react@18.3.1) '@fastgpt-sdk/logger': - specifier: 'catalog:' - version: 0.1.2 + specifier: workspace:* + version: link:../../sdk/logger '@fastgpt/global': specifier: workspace:* version: link:../../packages/global @@ -1013,19 +1387,19 @@ importers: specifier: 'catalog:' version: 23.16.8 mongoose: - specifier: ^8.10.1 - version: 8.12.1(socks@2.8.4) + specifier: 'catalog:' + version: 8.12.1(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.4) next: specifier: 'catalog:' - version: 16.2.1(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1) + version: 16.2.4(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1) next-i18next: specifier: 'catalog:' - version: 15.4.2(i18next@23.16.8)(next@16.2.1(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 15.4.2(i18next@23.16.8)(next@16.2.4(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) react: - specifier: 'catalog:' + specifier: ^18 version: 18.3.1 react-dom: - specifier: 'catalog:' + specifier: ^18 version: 18.3.1(react@18.3.1) react-i18next: specifier: 'catalog:' @@ -1035,23 +1409,23 @@ importers: version: 4.1.12 devDependencies: '@svgr/webpack': - specifier: ^6.5.1 + specifier: 'catalog:' version: 6.5.1 '@types/node': - specifier: ^20 + specifier: 'catalog:' version: 20.17.24 '@types/react': - specifier: 'catalog:' + specifier: ^18 version: 18.3.1 '@types/react-dom': - specifier: 'catalog:' + specifier: ^18 version: 18.3.0 eslint: specifier: 'catalog:' version: 8.57.1 eslint-config-next: specifier: 'catalog:' - version: 15.5.12(eslint@8.57.1)(typescript@5.8.2) + version: 15.5.12(eslint@8.57.1)(typescript@5.9.3) postcss: specifier: ^8 version: 8.5.6 @@ -1059,14 +1433,14 @@ importers: specifier: ^3.4.1 version: 3.4.18(tsx@4.20.6)(yaml@2.8.1) typescript: - specifier: ^5 - version: 5.8.2 + specifier: 'catalog:' + version: 5.9.3 projects/mcp_server: dependencies: '@fastgpt-sdk/logger': - specifier: 'catalog:' - version: 0.1.2 + specifier: workspace:* + version: link:../../sdk/logger '@fastgpt/global': specifier: workspace:* version: link:../../packages/global @@ -1074,8 +1448,8 @@ importers: specifier: 'catalog:' version: 1.26.0(zod@4.1.12) chalk: - specifier: ^5.3.0 - version: 5.4.1 + specifier: 'catalog:' + version: 5.6.2 dayjs: specifier: 'catalog:' version: 1.11.19 @@ -1096,15 +1470,15 @@ importers: specifier: ^4.6.0 version: 4.11.7 zod: - specifier: ^4 + specifier: 'catalog:' version: 4.1.12 devDependencies: '@types/bun': specifier: latest - version: 1.3.12 + version: 1.3.13 vitest: - specifier: ^2.0.0 - version: 2.1.9(@types/node@24.0.13)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0) + specifier: 'catalog:' + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.0.13)(@vitest/coverage-v8@4.1.5)(jsdom@26.1.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@6.2.2(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) scripts/icon: dependencies: @@ -1222,11 +1596,11 @@ importers: specifier: ^1.43.0 version: 1.43.0 minio: - specifier: 8.0.7 + specifier: 'catalog:' version: 8.0.7 vitest: - specifier: ^4.0.16 - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) + specifier: 'catalog:' + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@20.17.24)(@vitest/coverage-v8@4.1.5)(jsdom@26.1.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@6.2.2(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) devDependencies: '@types/ali-oss': specifier: ^6.16.13 @@ -1247,6 +1621,36 @@ packages: resolution: {integrity: sha512-mZ2Q2qXNC0dgctoPIlcotnlPSJ1ODMG4DKQ3AA2lTO4ZoC/vWU3CzSL5pNEU7hakfMOotQiZVxunNItVGY4W8w==} engines: {node: '>=20'} + '@alicloud/credentials@2.4.4': + resolution: {integrity: sha512-/eRAGSKcniLIFQ1UCpDhB/IrHUZisQ1sc65ws/c2avxUMpXwH1rWAohb76SVAUJhiF4mwvLzLJM1Mn1XL4Xe/Q==} + + '@alicloud/dysmsapi20170525@2.0.24': + resolution: {integrity: sha512-RtOwh3L+NbpfnOxySViIKLlNQeT9pZJS496ZTMMz7A29CBrlComC1UDLmwmD5odWF2Okv9ZdsyP3IRiQnoEL+A==} + + '@alicloud/endpoint-util@0.0.1': + resolution: {integrity: sha512-+pH7/KEXup84cHzIL6UJAaPqETvln4yXlD9JzlrqioyCSaWxbug5FUobsiI6fuUOpw5WwoB3fWAtGbFnJ1K3Yg==} + + '@alicloud/gateway-spi@0.0.8': + resolution: {integrity: sha512-KM7fu5asjxZPmrz9sJGHJeSU+cNQNOxW+SFmgmAIrITui5hXL2LB+KNRuzWmlwPjnuA2X3/keq9h6++S9jcV5g==} + + '@alicloud/openapi-client@0.4.15': + resolution: {integrity: sha512-4VE0/k5ZdQbAhOSTqniVhuX1k5DUeUMZv74degn3wIWjLY6Bq+hxjaGsaHYlLZ2gA5wUrs8NcI5TE+lIQS3iiA==} + + '@alicloud/openapi-util@0.3.3': + resolution: {integrity: sha512-vf0cQ/q8R2U7ZO88X5hDiu1yV3t/WexRj+YycWxRutkH/xVXfkmpRgps8lmNEk7Ar+0xnY8+daN2T+2OyB9F4A==} + + '@alicloud/tea-typescript@1.8.0': + resolution: {integrity: sha512-CWXWaquauJf0sW30mgJRVu9aaXyBth5uMBCUc+5vKTK1zlgf3hIqRUjJZbjlwHwQ5y9anwcu18r48nOZb7l2QQ==} + + '@alicloud/tea-util@1.4.11': + resolution: {integrity: sha512-HyPEEQ8F0WoZegiCp7sVdrdm6eBOB+GCvGl4182u69LDFktxfirGLcAx3WExUr1zFWkq2OSmBroTwKQ4w/+Yww==} + + '@alicloud/tea-util@1.4.9': + resolution: {integrity: sha512-S0wz76rGtoPKskQtRTGqeuqBHFj8BqUn0Vh+glXKun2/9UpaaaWmuJwcmtImk6bJZfLYEShDF/kxDmDJoNYiTw==} + + '@alicloud/tea-xml@0.0.3': + resolution: {integrity: sha512-+/9GliugjrLglsXVrd1D80EqqKgGpyA0eQ6+1ZdUOYCaRguaSwz44trX3PaxPu/HhIPJg9PsGQQ3cSLXWZjbAA==} + '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -1280,6 +1684,32 @@ packages: peerDependencies: openapi-types: '>=7' + '@apify/consts@2.52.1': + resolution: {integrity: sha512-Nhal8FiIgAw5ylVL4U2DAeJJyKow0bFObAX/og5BJjB9xJ2csQcyVAx4ChnO7XOaeRU8HbRn9u0QUGzPt5NNqA==} + + '@apify/datastructures@2.0.4': + resolution: {integrity: sha512-O/evwowHyN3HvP4oZxIzTFfrhOEynw9uvPk7qXquTU1yLB2WQxEWhoJdvGwVTXGuYm9Qd/0HOycPjk5m1NGDhQ==} + + '@apify/log@2.5.35': + resolution: {integrity: sha512-dJM9RkA9yD7kew5oU3qxLaoB4hFHB7FF47TI0STJVmz0cUa8cXWer4DpJkvUA52lrVNQGsOurCo3kGQWzfg/9w==} + + '@apify/ps-tree@1.2.0': + resolution: {integrity: sha512-VHIswI7rD/R4bToeIDuJ9WJXt+qr5SdhfoZ9RzdjmCs9mgy7l0P4RugQEUCcU+WB4sfImbd4CKwzXcn0uYx1yw==} + engines: {node: '>= 0.10'} + hasBin: true + + '@apify/pseudo_url@2.0.76': + resolution: {integrity: sha512-eNWHnP8CeMBgYBFko6/NJhHNKnxjy9HtbKQy0rq75LuKeibnAcT+7kkQrr6JDyDzrZL1O96yRWEy+G3lC2eIZA==} + + '@apify/timeout@0.3.3': + resolution: {integrity: sha512-lyvwMXee8SJNjNyxhr+nSTNyvjyoxbxol51xikq9VytFOPNSEMz8N02mUAuLVJNqrnqCBFRybjeqZdg4Y5AZlA==} + + '@apify/utilities@2.27.0': + resolution: {integrity: sha512-P3maAvUi5sUw4F4AKRyfczAQAl20YodEjSlFrjg6Bif8ThRAott7atEAfdy8FfyjI7Z0l+0MrbvtF4ZiGdJ8mw==} + + '@asamuzakjp/css-color@3.2.0': + resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} + '@aws-crypto/crc32@5.2.0': resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} engines: {node: '>=16.0.0'} @@ -1648,10 +2078,6 @@ packages: resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} @@ -1660,10 +2086,6 @@ packages: resolution: {integrity: sha512-noLx87RwlBEMrTzncWd/FvTxoJ9+ycHNg0n8yyYydIoDsLZuxknKgWRJUqcrVkNrJ74uGyhWQzQaS3q8xfGAhQ==} engines: {node: ^20.19.0 || >=22.12.0} - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} @@ -1684,13 +2106,8 @@ packages: resolution: {integrity: sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.10': - resolution: {integrity: sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/parser@7.28.5': - resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} engines: {node: '>=6.0.0'} hasBin: true @@ -2136,12 +2553,8 @@ packages: resolution: {integrity: sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==} engines: {node: '>=6.9.0'} - '@babel/types@7.26.10': - resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.28.5': - resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} '@babel/types@8.0.0-rc.2': @@ -2177,24 +2590,24 @@ packages: '@chakra-ui/color-mode@2.2.0': resolution: {integrity: sha512-niTEA8PALtMWRI9wJ4LL0CSBDo8NBfLNp4GD6/0hstcm3IlbBHTVKxN6HwSaoNYfphDQLxCjT4yG+0BJA5tFpg==} peerDependencies: - react: '>=18' + react: ^18 '@chakra-ui/hooks@2.4.4': resolution: {integrity: sha512-+gMwLIkabtddIL/GICU7JmnYtvfONP+fNiTfdYLV9/I1eyCz8igKgLmFJOGM6F+BpUev6hh+/+DX5ezGQ9VTbQ==} peerDependencies: - react: '>=18' + react: ^18 '@chakra-ui/icon@3.2.0': resolution: {integrity: sha512-xxjGLvlX2Ys4H0iHrI16t74rG9EBcpFvJ3Y3B7KMQTrnW34Kf7Da/UC8J67Gtx85mTHW020ml85SVPKORWNNKQ==} peerDependencies: '@chakra-ui/system': '>=2.0.0' - react: '>=18' + react: ^18 '@chakra-ui/icons@2.1.1': resolution: {integrity: sha512-3p30hdo4LlRZTT5CwoAJq3G9fHI0wDc0pBaMHj4SUn0yomO+RcDRlzhdXqdr5cVnzax44sqXJVnf3oQG0eI+4g==} peerDependencies: '@chakra-ui/system': '>=2.0.0' - react: '>=18' + react: ^18 '@chakra-ui/next-js@2.4.2': resolution: {integrity: sha512-loo82RyPbMyvJwRhhZVZovut9v2hFBSkqd1vQoNXgMrCRApLwrrttu5Iuodns15gLE3mqI+it5oEhxTtO5DrxA==} @@ -2202,7 +2615,7 @@ packages: '@chakra-ui/react': '>=2.4.0' '@emotion/react': '>=11' next: '>=13' - react: '>=18' + react: ^18 '@chakra-ui/object-utils@2.1.0': resolution: {integrity: sha512-tgIZOgLHaoti5PYGPTwK3t/cqtcycW0owaiOXoZOcpwwX/vlVb+H1jFsQyWiiwQVPt9RkoSLtxzXamx+aHH+bQ==} @@ -2210,12 +2623,12 @@ packages: '@chakra-ui/react-use-safe-layout-effect@2.1.0': resolution: {integrity: sha512-Knbrrx/bcPwVS1TorFdzrK/zWA8yuU/eaXDkNj24IrKoRlQrSBFarcgAEzlCHtzuhufP3OULPkELTzz91b0tCw==} peerDependencies: - react: '>=18' + react: ^18 '@chakra-ui/react-utils@2.0.12': resolution: {integrity: sha512-GbSfVb283+YA3kA8w8xWmzbjNWk14uhNpntnipHCftBibl0lxtQ9YqMFQLwuFOO0U2gYVocszqqDWX+XNKq9hw==} peerDependencies: - react: '>=18' + react: ^18 '@chakra-ui/react@2.10.7': resolution: {integrity: sha512-GX1dCmnvrxxyZEofDX9GMAtRakZJKnUqFM9k8qhaycPaeyfkiTNNTjhPNX917hgVx1yhC3kcJOs5IeC7yW56/g==} @@ -2223,8 +2636,8 @@ packages: '@emotion/react': '>=11' '@emotion/styled': '>=11' framer-motion: '>=4.0.0' - react: '>=18' - react-dom: '>=18' + react: ^18 + react-dom: ^18 '@chakra-ui/shared-utils@2.0.5': resolution: {integrity: sha512-4/Wur0FqDov7Y0nCXl7HbHzCg4aq86h+SXdoUeuCMD3dSj7dpsVnStLYhng1vxvlbUnLpdF4oz5Myt3i/a7N3Q==} @@ -2240,7 +2653,7 @@ packages: peerDependencies: '@emotion/react': ^11.0.0 '@emotion/styled': ^11.0.0 - react: '>=18' + react: ^18 '@chakra-ui/theme-tools@2.1.1': resolution: {integrity: sha512-n14L5L3ej3Zy+Xm/kDKO1G6/DkmieT7Li1C7NzMRcUj5C9YybQpyo7IZZ0BBUh3u+OVnKVhNC3d4P2NYDGRXmA==} @@ -2271,7 +2684,7 @@ packages: '@chakra-ui/utils@2.2.4': resolution: {integrity: sha512-nRpR9SnX7aLcJx7lKu8kgQWxdJso1oR/78HcBI+mzidvWdTykbTGdm5Q2R7S0PVH1IFBzBTgi6TiAjHvu96auA==} peerDependencies: - react: '>=16.8.0' + react: ^18 '@codemirror/autocomplete@6.19.0': resolution: {integrity: sha512-61Hfv3cF07XvUxNeC3E7jhG8XNi1Yom1G0lRC936oLnlF+jrbrv8rc/J98XlYzcsAoTVupfsf5fLej1aI8kyIg==} @@ -2327,6 +2740,127 @@ packages: peerDependencies: '@bufbuild/protobuf': ^2.2.0 + '@crawlee/basic@3.16.0': + resolution: {integrity: sha512-dcqeDkYk6NoXHSBEkALD4orb7k6yTDkwZp8RtcvlmMmVZKVQTVVHh78NFInzxRkjFVmStFWE2LRHBZpe518E0Q==} + engines: {node: '>=16.0.0'} + + '@crawlee/browser-pool@3.16.0': + resolution: {integrity: sha512-o9RK/TcDwxXF2wa5Ij6oG8JeS/aBTp/Xi4Rj8waQ/NKVfhF4DcOAlqiL/ed1YUgFUZx+P/VL/AIQKWbKAWnQlw==} + engines: {node: '>=16.0.0'} + peerDependencies: + playwright: '*' + puppeteer: '*' + peerDependenciesMeta: + playwright: + optional: true + puppeteer: + optional: true + + '@crawlee/browser@3.16.0': + resolution: {integrity: sha512-7AJeJ5328qsgFhyITNt0V4YVtA5+t/yRtkiHIN5af4Ht/WlYaVTkY4Qs5a8c6x1NU9+bt14umEFcCAu2hGJMzw==} + engines: {node: '>=16.0.0'} + peerDependencies: + playwright: '*' + puppeteer: '*' + peerDependenciesMeta: + playwright: + optional: true + puppeteer: + optional: true + + '@crawlee/cheerio@3.16.0': + resolution: {integrity: sha512-eyiWyHBuYZ0Ay5Q8wRD05RAAfgINxngUtlmUrV8r98Jpx9ibvm4UOS5yiqrZfGN2aoA31vasomCpgIcigacf8Q==} + engines: {node: '>=16.0.0'} + + '@crawlee/cli@3.16.0': + resolution: {integrity: sha512-oZW2TEpcCYZmRvTtdeC57B7kgenvDbKf4GclDRZ/IH0aUnK7Zy0voTIEoqemyQdvbVN0NK43ylmZMz6KVdVygw==} + engines: {node: '>=16.0.0'} + hasBin: true + + '@crawlee/core@3.16.0': + resolution: {integrity: sha512-Yn32E5IdmENLITg36XN1ty4OLPMcqzDjkEvSdZ0dRV5jcJR89sKi47FOs2eXpW+n7IGhbzPDkGKUirPPRrRkjg==} + engines: {node: '>=16.0.0'} + + '@crawlee/http@3.16.0': + resolution: {integrity: sha512-adp8fuQyW32kVKKJNPOA/HEF893ddPqldlIOcO+CdCa4EkeKTPOx74VGLVZyO4f0Zxs0QwvDL1W5O7ckD82MFQ==} + engines: {node: '>=16.0.0'} + + '@crawlee/jsdom@3.16.0': + resolution: {integrity: sha512-dL+uOQrA7BGJN6PnqXe1Kcp76KyoLm5DSNkytZzeJm6ZphC/aOZUrC2a6SKU4XUnxVipnM6Nase/F+a1aNez1g==} + engines: {node: '>=16.0.0'} + + '@crawlee/linkedom@3.16.0': + resolution: {integrity: sha512-AkpqiAqddk35gl2lNqDySuN5Raam1y3bQs49Y2NALc/TEnodXnnRO0rEEOh1P/wHNh4cm1jgY9rxmt/SHf3SLg==} + engines: {node: '>=16.0.0'} + + '@crawlee/memory-storage@3.16.0': + resolution: {integrity: sha512-ol1PSWj5LL1ALjEZ+zJdLaZx4bGPIP6vXly4AmbtyFg2iq+m1BudtXL+dWFdv/qN8f+N8ljPF5VwKAVxg2uy3Q==} + engines: {node: '>= 16'} + + '@crawlee/playwright@3.16.0': + resolution: {integrity: sha512-Oa7emJBmcqOcw/3iMc6KjfZUFAV2jmbvEv9jZQcMWPuVlmDVxV5Q67q0PF4/YDMesx0RBHLK0LRBcqO5jgtjFg==} + engines: {node: '>=16.0.0'} + peerDependencies: + idcac-playwright: ^0.2.0 + playwright: '*' + peerDependenciesMeta: + idcac-playwright: + optional: true + playwright: + optional: true + + '@crawlee/puppeteer@3.16.0': + resolution: {integrity: sha512-7qrh684m9bx1y7d+SRILlKelLk8FMML5lekMgiMzEQ7rjzrgXwWo3A9mkL9zQeC931pAMnWMZuGESloOYM2SxA==} + engines: {node: '>=16.0.0'} + peerDependencies: + idcac-playwright: ^0.2.0 + puppeteer: '*' + peerDependenciesMeta: + idcac-playwright: + optional: true + puppeteer: + optional: true + + '@crawlee/templates@3.16.0': + resolution: {integrity: sha512-zDfRWDrqe75WEPtoUXGKA/iGmG+EHlepd0jc64AO1mUpZkOUVCNgSMxvMjxQV6zUMChsbPPvhOV6bHnY8/bEHA==} + engines: {node: '>=16.0.0'} + + '@crawlee/types@3.16.0': + resolution: {integrity: sha512-CcIM+JDVx4gzQzMPl+9RJiEeqdzTrx2RLPA7y4IMJSyfZm3J/VrEunielKA3NQrk095j9OuvS/rQL2y8mBV1qw==} + engines: {node: '>=16.0.0'} + + '@crawlee/utils@3.16.0': + resolution: {integrity: sha512-rfVx/3hsFZjiD4AwT8IoQsuNLiawrsdhc893Nha22mWQMxJ0Z/KUzh8FyJDnNOHuxWGIJP96I7nBikxYeSdw5A==} + engines: {node: '>=16.0.0'} + + '@csstools/color-helpers@5.1.0': + resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} + engines: {node: '>=18'} + + '@csstools/css-calc@2.1.4': + resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-color-parser@3.1.0': + resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-parser-algorithms@3.0.5': + resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-tokenizer@3.0.4': + resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} + engines: {node: '>=18'} + '@dabh/diagnostics@2.0.3': resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} @@ -2337,6 +2871,9 @@ packages: resolution: {integrity: sha512-mepCf/e9+SKYy1d02/UkvSy6+6MoyXhVxP8lLDfA7BPE1X1d4dR0sZznmbM8/XVJ1GPM+Svnx7Xj6ZweByWUkw==} engines: {node: '>17.0.0'} + '@darabonba/typescript@1.0.4': + resolution: {integrity: sha512-icl8RGTw4DiWRpco6dVh21RS0IqrH4s/eEV36TZvz/e1+paogSZjaAgox7ByrlEuvG+bo5d8miq/dRlqiUaL/w==} + '@date-fns/tz@1.4.1': resolution: {integrity: sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==} @@ -2351,21 +2888,12 @@ packages: resolution: {integrity: sha512-6yLi0I2/FBhB6beqtuiFMTajB3PHQw+5+apuI3QdEv1Rx8e2Xp0h37SL0Y6tuVJQ2Frp7P3wWT77Wvy6l6OHPA==} engines: {node: '>=20'} - '@emnapi/core@1.3.1': - resolution: {integrity: sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==} - '@emnapi/core@1.7.1': resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} - '@emnapi/runtime@1.3.1': - resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} - '@emnapi/runtime@1.8.1': resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} - '@emnapi/wasi-threads@1.0.1': - resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} - '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} @@ -2394,7 +2922,7 @@ packages: resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==} peerDependencies: '@types/react': '*' - react: '>=16.8.0' + react: ^18 peerDependenciesMeta: '@types/react': optional: true @@ -2410,7 +2938,7 @@ packages: peerDependencies: '@emotion/react': ^11.0.0-rc.0 '@types/react': '*' - react: '>=16.8.0' + react: ^18 peerDependenciesMeta: '@types/react': optional: true @@ -2421,7 +2949,7 @@ packages: '@emotion/use-insertion-effect-with-fallbacks@1.2.0': resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} peerDependencies: - react: '>=16.8.0' + react: ^18 '@emotion/utils@1.4.2': resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} @@ -2432,366 +2960,126 @@ packages: '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.25.1': - resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.25.11': resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.25.1': - resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.25.11': resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.25.1': - resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.25.11': resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.25.1': - resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.25.11': resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.25.1': - resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.25.11': resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.1': - resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.25.11': resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.25.1': - resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.25.11': resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.1': - resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.25.11': resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.25.1': - resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.25.11': resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.25.1': - resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.25.11': resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.25.1': - resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.25.11': resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.25.1': - resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.25.11': resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.25.1': - resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.25.11': resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.25.1': - resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.25.11': resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.1': - resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.25.11': resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.25.1': - resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.25.11': resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.25.1': - resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.25.11': resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.1': - resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.25.11': resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.1': - resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.25.11': resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.1': - resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.25.11': resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.1': - resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.25.11': resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} engines: {node: '>=18'} @@ -2804,72 +3092,24 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.25.1': - resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.25.11': resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.25.1': - resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.25.11': resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.25.1': - resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.25.11': resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.25.1': - resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.25.11': resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} engines: {node: '>=18'} @@ -2882,25 +3122,35 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@eslint/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/js@8.56.0': + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.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} - '@fastgpt-sdk/logger@0.1.2': - resolution: {integrity: sha512-nt1qCq7frcRiR+406vEERWC1vEPVIKPUGH/ZRP/mlBxvNJp1RycWQT8RhK7/tHmW6xPNZoRL/q2WfhM4Q+L7eg==} - engines: {node: '>=20', pnpm: '>=9'} - - '@fastgpt-sdk/otel@0.1.2': - resolution: {integrity: sha512-niJXceEdyZSWN/syE9aRlTb6Gk6Posez9j4eiuyoQWgF0wGH1IWDbC2c0tlSglZQn6ONY90HzyRsSLOGlpd9KQ==} - engines: {node: '>=20', pnpm: '>=9'} + '@faker-js/faker@9.9.0': + resolution: {integrity: sha512-OEl393iCOoo/z8bMezRlJu+GlRGlsKbUAN7jKB6LhnKoqKve5DXRpalbItIIcwnCjs1k/FOPjFzcA6Qn+H+YbA==} + engines: {node: '>=18.0.0', npm: '>=9.0.0'} '@fastgpt-sdk/plugin@0.6.0': resolution: {integrity: sha512-xvjWj3+WLVqI1lggZEMlHLrl5c90JPomXOS5DZlWqgrmcgdoUlE1yzmWC2iXCoG2+IQTcOKaooqE6ITVqURgOg==} @@ -2909,9 +3159,13 @@ packages: resolution: {integrity: sha512-RPwK6kFmpv5U2tqPNj+HzDoZEQ06fgMsrOzXx/uT33rubikOLHmNV4kJ8Mra+EhzzYbNmFq2iFapaocy4ExbwQ==} engines: {node: '>=18'} - '@fastgpt-sdk/storage@0.6.17': - resolution: {integrity: sha512-4WpP1EHIX4D4RujOWgRmcAwlsCE6LJP7GbYMQXJ/QE+Ty1cCGguJDUpMLSKh2Lii5nP6ho43wFZYogr+Ue7Slg==} - engines: {node: '>=20', pnpm: 9.x} + '@fidm/asn1@1.0.4': + resolution: {integrity: sha512-esd1jyNvRb2HVaQGq2Gg8Z0kbQPXzV9Tq5Z14KNIov6KfFD6PTaRIO8UpcsYiTNzOqJpmyzWgVTrUwFV3UF4TQ==} + engines: {node: '>= 8'} + + '@fidm/x509@1.2.1': + resolution: {integrity: sha512-nwc2iesjyc9hkuzcrMCBXQRn653XuAUKorfWM8PZyJawiy1QzLj4vahwzaI25+pfpwOLvMzbJ0uKpWLDNmo16w==} + engines: {node: '>= 8'} '@fingerprintjs/fingerprintjs@4.6.1': resolution: {integrity: sha512-62TPnX6fXXMlxS7SOR3DJWEOKab7rCALwSWkuKWYMRrnsZ/jD9Ju4CUyy9VWDUYuhQ2ZW1RGLwOZJXTXR6K1pg==} @@ -2968,6 +3222,11 @@ packages: peerDependencies: hono: ^4 + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + '@humanwhocodes/config-array@0.13.0': resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} @@ -3029,89 +3288,105 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -3136,6 +3411,19 @@ packages: cpu: [x64] os: [win32] + '@inquirer/external-editor@1.0.3': + resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@1.0.15': + resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} + engines: {node: '>=18'} + '@internationalized/date@3.10.0': resolution: {integrity: sha512-oxDR/NTEJ1k+UFVQElaNIk65E/Z83HK1z1WI3lQyhTtnNg4R5oVXaPzK3jcpKG8UHKDVuDQHzn+wsxSz8RP3aw==} @@ -3157,14 +3445,6 @@ packages: resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -3183,9 +3463,6 @@ packages: '@jridgewell/source-map@0.3.6': resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} @@ -3210,6 +3487,18 @@ packages: peerDependencies: jsep: ^0.4.0||^1.0.0 + '@keyv/serialize@1.1.1': + resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} + + '@kubernetes/client-node@1.4.0': + resolution: {integrity: sha512-Zge3YvF7DJi264dU1b3wb/GmzR99JhUpqTvp+VGHfwZT+g7EOOYNScDJNZwXy9cszyIGPIs0VHr+kk8e95qqrA==} + + '@larksuiteoapi/node-sdk@1.61.1': + resolution: {integrity: sha512-BxLBCXk/652I0nWduQbiIrTH2TPe/i4ZD6UhW3VCTVFzrOq5Y9SKvAwanBE6z1ZyEPL6iLnXg/TfGvGSzG6MLw==} + + '@leichtgewicht/ip-codec@2.0.5': + resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} + '@lexical/clipboard@0.12.6': resolution: {integrity: sha512-rJFp7tXzawCrMWWRsjCR80dZoIkLJ/EPgPmTk3xqpc+9ntlwbkm3LUOdFmgN+pshnhiZTQBwbFqg/QbsA1Pw9g==} peerDependencies: @@ -3282,8 +3571,8 @@ packages: resolution: {integrity: sha512-Pto4wsVwrnY94tzcCXP2kWukQejSRPDfwOPd+EFh8dUzj+L7fa9Pze2wVgCRZpEohwfbcgAdEsvmSbhz+yGkog==} peerDependencies: lexical: 0.12.6 - react: '>=17.x' - react-dom: '>=17.x' + react: ^18 + react-dom: ^18 '@lexical/rich-text@0.12.6': resolution: {integrity: sha512-fRZHy2ug6Pq+pJK7trr9phTGaD2ba3If8o36dphOsl27MtUllpz68lcXL6mUonzJhAu4um1e9u7GFR3dLp+cVA==} @@ -3385,24 +3674,6 @@ packages: '@cfworker/json-schema': optional: true - '@module-federation/error-codes@0.21.6': - resolution: {integrity: sha512-MLJUCQ05KnoVl8xd6xs9a5g2/8U+eWmVxg7xiBMeR0+7OjdWUbHwcwgVFatRIwSZvFgKHfWEiI7wsU1q1XbTRQ==} - - '@module-federation/runtime-core@0.21.6': - resolution: {integrity: sha512-5Hd1Y5qp5lU/aTiK66lidMlM/4ji2gr3EXAtJdreJzkY+bKcI5+21GRcliZ4RAkICmvdxQU5PHPL71XmNc7Lsw==} - - '@module-federation/runtime-tools@0.21.6': - resolution: {integrity: sha512-fnP+ZOZTFeBGiTAnxve+axGmiYn2D60h86nUISXjXClK3LUY1krUfPgf6MaD4YDJ4i51OGXZWPekeMe16pkd8Q==} - - '@module-federation/runtime@0.21.6': - resolution: {integrity: sha512-+caXwaQqwTNh+CQqyb4mZmXq7iEemRDrTZQGD+zyeH454JAYnJ3s/3oDFizdH6245pk+NiqDyOOkHzzFQorKhQ==} - - '@module-federation/sdk@0.21.6': - resolution: {integrity: sha512-x6hARETb8iqHVhEsQBysuWpznNZViUh84qV2yE7AD+g7uIzHKiYdoWqj10posbo5XKf/147qgWDzKZoKoEP2dw==} - - '@module-federation/webpack-bundler-runtime@0.21.6': - resolution: {integrity: sha512-7zIp3LrcWbhGuFDTUMLJ2FJvcwjlddqhWGxi/MW3ur1a+HaO8v5tF2nl+vElKmbG1DFLU/52l3PElVcWf/YcsQ==} - '@monaco-editor/loader@1.5.0': resolution: {integrity: sha512-hKoGSM+7aAc7eRTRjpqAZucPmoNOC4UUbknb/VNoTkEIkCPhqV8LfbsgM1webRM7S/z21eHEx9Fkwx8Z/C/+Xw==} @@ -3410,8 +3681,8 @@ packages: resolution: {integrity: sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==} peerDependencies: monaco-editor: '>= 0.25.0 < 1' - 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: ^18 + react-dom: ^18 '@mongodb-js/saslprep@1.2.0': resolution: {integrity: sha512-+ywrb0AqkfaYuhHs6LxKWgqbh3I72EpEgESCw37o+9qPx9WTCkgDm2B+eMrwehGtHBWHFU4GXvnSCNiFhhausg==} @@ -3475,30 +3746,35 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@napi-rs/canvas-linux-arm64-musl@0.1.69': resolution: {integrity: sha512-a3xjNRIeK2m2ZORGv2moBvv3vbkaFZG1QKMeiEv/BKij+rkztuEhTJGMar+buICFgS0fLgphXXsKNkUSJb7eRQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@napi-rs/canvas-linux-riscv64-gnu@0.1.69': resolution: {integrity: sha512-pClUoJF5wdC9AvD0mc15G9JffL1Q85nuH1rLSQPRkGmGmQOtRjw5E9xNbanz7oFUiPbjH7xcAXUjVAcf7tdgPQ==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] + libc: [glibc] '@napi-rs/canvas-linux-x64-gnu@0.1.69': resolution: {integrity: sha512-96X3bFAmzemfw84Ts6Jg/omL86uuynvK06MWGR/mp3JYNumY9RXofA14eF/kJIYelbYFWXcwpbcBR71lJ6G/YQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@napi-rs/canvas-linux-x64-musl@0.1.69': resolution: {integrity: sha512-2QTsEFO72Kwkj53W9hc5y1FAUvdGx0V+pjJB+9oQF6Ys9+y989GyPIl5wZDzeh8nIJW6koZZ1eFa8pD+pA5BFQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@napi-rs/canvas-win32-x64-msvc@0.1.69': resolution: {integrity: sha512-Q4YA8kVnKarApBVLu7F8icGlIfSll5Glswo5hY6gPS4Is2dCI8+ig9OeDM8RlwYevUIxKq8lZBypN8Q1iLAQ7w==} @@ -3513,134 +3789,66 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@napi-rs/wasm-runtime@0.2.7': - resolution: {integrity: sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==} - - '@napi-rs/wasm-runtime@1.0.7': - resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} - '@napi-rs/wasm-runtime@1.1.1': resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} '@next/bundle-analyzer@16.1.6': resolution: {integrity: sha512-ee2kagdTaeEWPlotgdTOqFHYcD3e2m2bbE3I9Rq2i6ABYi5OgopmtEUe8NM23viaYxLV2tDH/2nd5+qKoEr6cw==} - '@next/env@16.2.1': - resolution: {integrity: sha512-n8P/HCkIWW+gVal2Z8XqXJ6aB3J0tuM29OcHpCsobWlChH/SITBs1DFBk/HajgrwDkqqBXPbuUuzgDvUekREPg==} + '@next/env@16.2.4': + resolution: {integrity: sha512-dKkkOzOSwFYe5RX6y26fZgkSpVAlIOJKQHIiydQcrWH6y/97+RceSOAdjZ14Qa3zLduVUy0TXcn+EiM6t4rPgw==} '@next/eslint-plugin-next@15.5.12': resolution: {integrity: sha512-+ZRSDFTv4aC96aMb5E41rMjysx8ApkryevnvEYZvPZO52KvkqP5rNExLUXJFr9P4s0f3oqNQR6vopCZsPWKDcQ==} - '@next/rspack-binding-android-arm-eabi@1.0.2': - resolution: {integrity: sha512-ayoNrm5Z9xYIHdYfhUSvzPzNXRunMXx5B6Bonch9pJBfyC/3tUlcqVlI5+1HS+H4euWtPMeGqe8bARjQ71J/ug==} - cpu: [arm] - os: [android] - - '@next/rspack-binding-android-arm64@1.0.2': - resolution: {integrity: sha512-UXbxuzw6iltgr9NmOOPnzVKF3xGNmygKnFngh1sblLHirOe5j/2MxFQhhK6Mhq+OLOhO3JwySvrORszjNQu6KQ==} - cpu: [arm64] - os: [android] - - '@next/rspack-binding-darwin-arm64@1.0.2': - resolution: {integrity: sha512-NH70VXNAY3qd2if906zML3/CqX1sLVaALwfsDkEpfU3/RobJDoCHsYMdks3K217gW8yim6jh71RosGXn/OnAmA==} - cpu: [arm64] - os: [darwin] - - '@next/rspack-binding-darwin-x64@1.0.2': - resolution: {integrity: sha512-Ea+Fn9I9KtssxCr7hlan/X8LkOBA1bDS/G+28gcNIuM8lfUUJQi84AzJ8m2I/5cAVWD+hncCMtoDa4gb81SOTw==} - cpu: [x64] - os: [darwin] - - '@next/rspack-binding-linux-arm-gnueabihf@1.0.2': - resolution: {integrity: sha512-4KPRmJjuqIZjwl3YuwU6PSygaGOhLiS7j6M21WwnsRxbDESperr0IDztmLHz9fRXosdCG0a2H58BPY0NSOoBcA==} - cpu: [arm] - os: [linux] - - '@next/rspack-binding-linux-arm64-gnu@1.0.2': - resolution: {integrity: sha512-af43QsBhRZ7kX/KjA9b5mrSLFMpRSuF7E2i9eBxrFkFpI2H4UCR0lSLcFmpkCnA/u2Q8a8KHhye88zDwUP8saQ==} - cpu: [arm64] - os: [linux] - - '@next/rspack-binding-linux-arm64-musl@1.0.2': - resolution: {integrity: sha512-ZuORUowizCrzoESLyUBGTzJjXyCixtdsTKp7EOLr2oLh2umzksm/e9Cm+iuy8qjkO+TFR1ny5L4YYCUOsYa+Kg==} - cpu: [arm64] - os: [linux] - - '@next/rspack-binding-linux-x64-gnu@1.0.2': - resolution: {integrity: sha512-Bv0DS+jUwL5fQxcC3DiE6MbfssDF//kJ5rOnNey8EcLReqpz+WPuJKTqRvyUtvx77Sg3o7yADS3UsSTrHKn6iQ==} - cpu: [x64] - os: [linux] - - '@next/rspack-binding-linux-x64-musl@1.0.2': - resolution: {integrity: sha512-wjLXX7XaCvd+ISRZHVOEa9FvXDX8KV0HPyNJuapUO150ho7kXt0ZfY9vGm/0UCO7X4hCgnGzsnBZOzYdgT/RqQ==} - cpu: [x64] - os: [linux] - - '@next/rspack-binding-win32-arm64-msvc@1.0.2': - resolution: {integrity: sha512-OQ0Uv9ZbMB8BZFJP2n7dLIc4kjfr76J1JPCtPNB3/BvE2xpAIEcYmkwSP0GrVL/H+1xLMqLwblqt7xyc65hfuw==} - cpu: [arm64] - os: [win32] - - '@next/rspack-binding-win32-ia32-msvc@1.0.2': - resolution: {integrity: sha512-U98H/QvLcZcNA1Dcxb5OS2I3Ze0za/2/AA0ywmbOqCe6Nue/CYKNEfa+F1jJVLxiV0/K3+6SF7BjbGh62BUWow==} - cpu: [ia32] - os: [win32] - - '@next/rspack-binding-win32-x64-msvc@1.0.2': - resolution: {integrity: sha512-wvR7LLNHsDK3t3RcfWTgzIzYNLLmGQf3y271CAzZvbvjK2oCu1D0Dl5RAtcVgNCZPUVd3aa2ceirNRqQrqRrXg==} - cpu: [x64] - os: [win32] - - '@next/rspack-binding@1.0.2': - resolution: {integrity: sha512-lnY6l2xCDnLw25mE05dSIZ+dXjqsrAUPoCFe9vKgxg6gu7YFD84uzaHOTalJNl8Vmah1oHE+L/zNlRqzKkDUbA==} - - '@next/rspack-core@1.0.2': - resolution: {integrity: sha512-jt6LtuSYB2XP7ndVAabYQ/oTdE7Yqw5coof6FQkpjqwojZcTxWdTQIuZu7eKQQaVuDhtSefU2IE+VZrwJOVpcw==} - - '@next/swc-darwin-arm64@16.2.1': - resolution: {integrity: sha512-BwZ8w8YTaSEr2HIuXLMLxIdElNMPvY9fLqb20LX9A9OMGtJilhHLbCL3ggyd0TwjmMcTxi0XXt+ur1vWUoxj2Q==} + '@next/swc-darwin-arm64@16.2.4': + resolution: {integrity: sha512-OXTFFox5EKN1Ym08vfrz+OXxmCcEjT4SFMbNRsWZE99dMqt2Kcusl5MqPXcW232RYkMLQTy0hqgAMEsfEd/l2A==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@16.2.1': - resolution: {integrity: sha512-/vrcE6iQSJq3uL3VGVHiXeaKbn8Es10DGTGRJnRZlkNQQk3kaNtAJg8Y6xuAlrx/6INKVjkfi5rY0iEXorZ6uA==} + '@next/swc-darwin-x64@16.2.4': + resolution: {integrity: sha512-XhpVnUfmYWvD3YrXu55XdcAkQtOnvaI6wtQa8fuF5fGoKoxIUZ0kWPtcOfqJEWngFF/lOS9l3+O9CcownhiQxQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@16.2.1': - resolution: {integrity: sha512-uLn+0BK+C31LTVbQ/QU+UaVrV0rRSJQ8RfniQAHPghDdgE+SlroYqcmFnO5iNjNfVWCyKZHYrs3Nl0mUzWxbBw==} + '@next/swc-linux-arm64-gnu@16.2.4': + resolution: {integrity: sha512-Mx/tjlNA3G8kg14QvuGAJ4xBwPk1tUHq56JxZ8CXnZwz1Etz714soCEzGQQzVMz4bEnGPowzkV6Xrp6wAkEWOQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] - '@next/swc-linux-arm64-musl@16.2.1': - resolution: {integrity: sha512-ssKq6iMRnHdnycGp9hCuGnXJZ0YPr4/wNwrfE5DbmvEcgl9+yv97/Kq3TPVDfYome1SW5geciLB9aiEqKXQjlQ==} + '@next/swc-linux-arm64-musl@16.2.4': + resolution: {integrity: sha512-iVMMp14514u7Nup2umQS03nT/bN9HurK8ufylC3FZNykrwjtx7V1A7+4kvhbDSCeonTVqV3Txnv0Lu+m2oDXNg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] - '@next/swc-linux-x64-gnu@16.2.1': - resolution: {integrity: sha512-HQm7SrHRELJ30T1TSmT706IWovFFSRGxfgUkyWJZF/RKBMdbdRWJuFrcpDdE5vy9UXjFOx6L3mRdqH04Mmx0hg==} + '@next/swc-linux-x64-gnu@16.2.4': + resolution: {integrity: sha512-EZOvm1aQWgnI/N/xcWOlnS3RQBk0VtVav5Zo7n4p0A7UKyTDx047k8opDbXgBpHl4CulRqRfbw3QrX2w5UOXMQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] - '@next/swc-linux-x64-musl@16.2.1': - resolution: {integrity: sha512-aV2iUaC/5HGEpbBkE+4B8aHIudoOy5DYekAKOMSHoIYQ66y/wIVeaRx8MS2ZMdxe/HIXlMho4ubdZs/J8441Tg==} + '@next/swc-linux-x64-musl@16.2.4': + resolution: {integrity: sha512-h9FxsngCm9cTBf71AR4fGznDEDx1hS7+kSEiIRjq5kO1oXWm07DxVGZjCvk0SGx7TSjlUqhI8oOyz7NfwAdPoA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] - '@next/swc-win32-arm64-msvc@16.2.1': - resolution: {integrity: sha512-IXdNgiDHaSk0ZUJ+xp0OQTdTgnpx1RCfRTalhn3cjOP+IddTMINwA7DXZrwTmGDO8SUr5q2hdP/du4DcrB1GxA==} + '@next/swc-win32-arm64-msvc@16.2.4': + resolution: {integrity: sha512-3NdJV5OXMSOeJYijX+bjaLge3mJBlh4ybydbT4GFoB/2hAojWHtMhl3CYlYoMrjPuodp0nzFVi4Tj2+WaMg+Ow==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@16.2.1': - resolution: {integrity: sha512-qvU+3a39Hay+ieIztkGSbF7+mccbbg1Tk25hc4JDylf8IHjYmY/Zm64Qq1602yPyQqvie+vf5T/uPwNxDNIoeg==} + '@next/swc-win32-x64-msvc@16.2.4': + resolution: {integrity: sha512-kMVGgsqhO5YTYODD9IPGGhA6iprWidQckK3LmPeW08PIFENRmgfb4MjXHO+p//d+ts2rpjvK5gXWzXSMrPl9cw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -3686,24 +3894,28 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@node-rs/jieba-linux-arm64-musl@2.0.1': resolution: {integrity: sha512-K4EDyNixSLVdTNYnHwD+7I/ytvzpo7tt+vdCLqwQViiek2PMpL/FFRvA39uU2tk99jXIxvkczdxARG20BRZppg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@node-rs/jieba-linux-x64-gnu@2.0.1': resolution: {integrity: sha512-sq3J6L2ANTE25I9eVFq/nb57OtXcvUIeUD1CTKJxwgTKIVmcB2LyOZpWf20AjHRUfbMER9Klqg5dgyyO+Six+w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@node-rs/jieba-linux-x64-musl@2.0.1': resolution: {integrity: sha512-0zfP9Qy68yEXrhBFknfhF6WUJDPU/8eRuyIrkMGdMjfRpxhpSbr2fMfnsqhOQLvhuK4w3iDFvTy4t5d0s6JKMA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@node-rs/jieba-wasm32-wasi@2.0.1': resolution: {integrity: sha512-7I5rJya5rlQNJIhv8PvPzIVT1/gVc0vFzHmlfRGwCPGDJ3tHVxkSPW34dDx3OgDmbIeadNpmgIyC1RaS9djPJg==} @@ -3732,6 +3944,10 @@ packages: resolution: {integrity: sha512-tnfzXOMqzVQF2dSKMhPC9HrHzzWmN6KheL/zYtGenhOpq/bCKHJWVASSggEnHlkmHgXGeIJHR2N/IuPzewz1BQ==} engines: {node: '>= 10'} + '@node-saml/node-saml@5.1.0': + resolution: {integrity: sha512-t3cJnZ4aC7HhPZ6MGylGZULvUtBOZ6FzuUndaHGXjmIZHXnLfC/7L8a57O9Q9V7AxJGKAiRM5zu2wNm9EsvQpw==} + engines: {node: '>= 18'} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -3935,21 +4151,25 @@ packages: resolution: {integrity: sha512-l/0pWoQM5kVmJLg4frQ1mKZOXgi0ex/hzvFt8E4WK2ifXr5JgKFUokxsb/oat7f5YzdJJh5r9p+qS/t3dA26Aw==} cpu: [arm64] os: [linux] + libc: [glibc] '@oxc-resolver/binding-linux-arm64-musl@5.0.0': resolution: {integrity: sha512-bx0oz/oaAW4FGYqpIIxJCnmgb906YfMhTEWCJvYkxjpEI8VKLJEL3PQevYiqDq36SA0yRLJ/sQK2fqry8AFBfA==} cpu: [arm64] os: [linux] + libc: [musl] '@oxc-resolver/binding-linux-x64-gnu@5.0.0': resolution: {integrity: sha512-4PH++qbSIhlRsFYdN1P9neDov4OGhTGo5nbQ1D7AL6gWFLo3gdZTc00FM2y8JjeTcPWEXkViZuwpuc0w5i6qHg==} cpu: [x64] os: [linux] + libc: [glibc] '@oxc-resolver/binding-linux-x64-musl@5.0.0': resolution: {integrity: sha512-mLfQFpX3/5y9oWi0b+9FbWDkL2hM0Y29653beCHiHxAdGyVgb2DsJbK74WkMTwtSz9by8vyBh8jGPZcg1yLZbQ==} cpu: [x64] os: [linux] + libc: [musl] '@oxc-resolver/binding-wasm32-wasi@5.0.0': resolution: {integrity: sha512-uEhsAZSo65qsRi6+IfBTEUUFbjg7T2yruJeLYpFfEATpm3ory5Mgo5vx3L0c2/Cz1OUZXBgp3A8x6VMUB2jT2A==} @@ -3995,36 +4215,42 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.1': resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.1': resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.1': resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.1': resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.1': resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-win32-arm64@2.5.1': resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} @@ -4048,6 +4274,40 @@ packages: resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} engines: {node: '>= 10.0.0'} + '@peculiar/asn1-cms@2.6.1': + resolution: {integrity: sha512-vdG4fBF6Lkirkcl53q6eOdn3XYKt+kJTG59edgRZORlg/3atWWEReRCx5rYE1ZzTTX6vLK5zDMjHh7vbrcXGtw==} + + '@peculiar/asn1-csr@2.6.1': + resolution: {integrity: sha512-WRWnKfIocHyzFYQTka8O/tXCiBquAPSrRjXbOkHbO4qdmS6loffCEGs+rby6WxxGdJCuunnhS2duHURhjyio6w==} + + '@peculiar/asn1-ecc@2.6.1': + resolution: {integrity: sha512-+Vqw8WFxrtDIN5ehUdvlN2m73exS2JVG0UAyfVB31gIfor3zWEAQPD+K9ydCxaj3MLen9k0JhKpu9LqviuCE1g==} + + '@peculiar/asn1-pfx@2.6.1': + resolution: {integrity: sha512-nB5jVQy3MAAWvq0KY0R2JUZG8bO/bTLpnwyOzXyEh/e54ynGTatAR+csOnXkkVD9AFZ2uL8Z7EV918+qB1qDvw==} + + '@peculiar/asn1-pkcs8@2.6.1': + resolution: {integrity: sha512-JB5iQ9Izn5yGMw3ZG4Nw3Xn/hb/G38GYF3lf7WmJb8JZUydhVGEjK/ZlFSWhnlB7K/4oqEs8HnfFIKklhR58Tw==} + + '@peculiar/asn1-pkcs9@2.6.1': + resolution: {integrity: sha512-5EV8nZoMSxeWmcxWmmcolg22ojZRgJg+Y9MX2fnE2bGRo5KQLqV5IL9kdSQDZxlHz95tHvIq9F//bvL1OeNILw==} + + '@peculiar/asn1-rsa@2.6.1': + resolution: {integrity: sha512-1nVMEh46SElUt5CB3RUTV4EG/z7iYc7EoaDY5ECwganibQPkZ/Y2eMsTKB/LeyrUJ+W/tKoD9WUqIy8vB+CEdA==} + + '@peculiar/asn1-schema@2.6.0': + resolution: {integrity: sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==} + + '@peculiar/asn1-x509-attr@2.6.1': + resolution: {integrity: sha512-tlW6cxoHwgcQghnJwv3YS+9OO1737zgPogZ+CgWRUK4roEwIPzRH4JEiG770xe5HX2ATfCpmX60gurfWIF9dcQ==} + + '@peculiar/asn1-x509@2.6.1': + resolution: {integrity: sha512-O9jT5F1A2+t3r7C4VT7LYGXqkGLK7Kj1xFpz7U0isPrubwU5PbDoyYtx6MiGst29yq7pXN5vZbQFKRCP+lLZlA==} + + '@peculiar/x509@1.14.3': + resolution: {integrity: sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==} + engines: {node: '>=20.0.0'} + '@petamoriken/float16@3.9.2': resolution: {integrity: sha512-VgffxawQde93xKxT3qap3OH+meZf7VaSB5Sqd4Rqc+FP5alWbpOyan/7tRbOAvynjpG3GpdtAuGU/NdhQpmrog==} @@ -4106,44 +4366,49 @@ packages: '@protobufjs/utf8@1.1.0': resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@puppeteer/browsers@2.6.1': + resolution: {integrity: sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==} + engines: {node: '>=18'} + hasBin: true + '@quansync/fs@1.0.0': resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} '@reactflow/background@11.3.14': resolution: {integrity: sha512-Gewd7blEVT5Lh6jqrvOgd4G6Qk17eGKQfsDXgyRSqM+CTwDqRldG2LsWN4sNeno6sbqVIC2fZ+rAUBFA9ZEUDA==} peerDependencies: - react: '>=17' - react-dom: '>=17' + react: ^18 + react-dom: ^18 '@reactflow/controls@11.2.14': resolution: {integrity: sha512-MiJp5VldFD7FrqaBNIrQ85dxChrG6ivuZ+dcFhPQUwOK3HfYgX2RHdBua+gx+40p5Vw5It3dVNp/my4Z3jF0dw==} peerDependencies: - react: '>=17' - react-dom: '>=17' + react: ^18 + react-dom: ^18 '@reactflow/core@11.11.4': resolution: {integrity: sha512-H4vODklsjAq3AMq6Np4LE12i1I4Ta9PrDHuBR9GmL8uzTt2l2jh4CiQbEMpvMDcp7xi4be0hgXj+Ysodde/i7Q==} peerDependencies: - react: '>=17' - react-dom: '>=17' + react: ^18 + react-dom: ^18 '@reactflow/minimap@11.7.14': resolution: {integrity: sha512-mpwLKKrEAofgFJdkhwR5UQ1JYWlcAAL/ZU/bctBkuNTT1yqV+y0buoNVImsRehVYhJwffSWeSHaBR5/GJjlCSQ==} peerDependencies: - react: '>=17' - react-dom: '>=17' + react: ^18 + react-dom: ^18 '@reactflow/node-resizer@2.2.14': resolution: {integrity: sha512-fwqnks83jUlYr6OHcdFEedumWKChTHRGw/kbCxj0oqBd+ekfs+SIp4ddyNU0pdx96JIm5iNFS0oNrmEiJbbSaA==} peerDependencies: - react: '>=17' - react-dom: '>=17' + react: ^18 + react-dom: ^18 '@reactflow/node-toolbar@1.3.14': resolution: {integrity: sha512-rbynXQnH/xFNu4P9H+hVqlEUafDCkEoCy0Dg9mG22Sg+rY/0ck6KkrAQrYrTgXusd+cEJOMK0uOOFCK2/5rSGQ==} peerDependencies: - react: '>=17' - react-dom: '>=17' + react: ^18 + react-dom: ^18 '@replit/codemirror-css-color-picker@6.3.0': resolution: {integrity: sha512-19biDANghUm7Fz7L1SNMIhK48tagaWuCOHj4oPPxc7hxPGkTVY2lU/jVZ8tsbTKQPVG7BO2CBDzs7CBwb20t4A==} @@ -4187,36 +4452,42 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9': resolution: {integrity: sha512-JA1QRW31ogheAIRhIg9tjMfsYbglXXYGNPLdPEYrwFxdbkQCAzvpSCSHCDWNl4hTtrol8WeboCSEpjdZK8qrCg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9': resolution: {integrity: sha512-aOKU9dJheda8Kj8Y3w9gnt9QFOO+qKPAl8SWd7JPHP+Cu0EuDAE5wokQubLzIDQWg2myXq2XhTpOVS07qqvT+w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9': resolution: {integrity: sha512-OalO94fqj7IWRn3VdXWty75jC5dk4C197AWEuMhIpvVv2lw9fiPhud0+bW2ctCxb3YoBZor71QHbY+9/WToadA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9': resolution: {integrity: sha512-cVEl1vZtBsBZna3YMjGXNvnYYrOJ7RzuWvZU0ffvJUexWkukMaDuGhUXn0rjnV0ptzGVkvc+vW9Yqy6h8YX4pg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-musl@1.0.0-rc.9': resolution: {integrity: sha512-UzYnKCIIc4heAKgI4PZ3dfBGUZefGCJ1TPDuLHoCzgrMYPb5Rv6TLFuYtyM4rWyHM7hymNdsg5ik2C+UD9VDbA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@rolldown/binding-openharmony-arm64@1.0.0-rc.9': resolution: {integrity: sha512-+6zoiF+RRyf5cdlFQP7nm58mq7+/2PFaY2DNQeD4B87N36JzfF/l9mdBkkmTvSYcYPE8tMh/o3cRlsx1ldLfog==} @@ -4278,51 +4549,61 @@ packages: resolution: {integrity: sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.35.0': resolution: {integrity: sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.35.0': resolution: {integrity: sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.35.0': resolution: {integrity: sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loongarch64-gnu@4.35.0': resolution: {integrity: sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-powerpc64le-gnu@4.35.0': resolution: {integrity: sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.35.0': resolution: {integrity: sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-s390x-gnu@4.35.0': resolution: {integrity: sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.35.0': resolution: {integrity: sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.35.0': resolution: {integrity: sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.35.0': resolution: {integrity: sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==} @@ -4339,75 +4620,19 @@ packages: cpu: [x64] os: [win32] - '@rspack/binding-darwin-arm64@1.6.7': - resolution: {integrity: sha512-QiIAP8JTAtht0j8/xZZEQTJRB9e+KrOm9c7JJm73CewVg55rDWRrwopiVfBNlTu1coem1ztUHJYdQhg2uXfqww==} - cpu: [arm64] - os: [darwin] - - '@rspack/binding-darwin-x64@1.6.7': - resolution: {integrity: sha512-DpQRxxTXkMMNPmBXeJBaAB8HmWKxH2IfvHv7vU+kBhJ3xdPtXU4/xBv1W3biluoNRG11gc1WLIgjzeGgaLCxmw==} - cpu: [x64] - os: [darwin] - - '@rspack/binding-linux-arm64-gnu@1.6.7': - resolution: {integrity: sha512-211/XoBiooGGgUo/NxNpsrzGUXtH1d7g/4+UTtjYtfc8QHwu7ZMHcsqg0wss53fXzn/yyxd0DZ56vBHq52BiFw==} - cpu: [arm64] - os: [linux] - - '@rspack/binding-linux-arm64-musl@1.6.7': - resolution: {integrity: sha512-0WnqAWz3WPDsXGvOOA++or7cHpoidVsH3FlqNaAfRu6ni6n7ig/s0/jKUB+C5FtXOgmGjAGkZHfFgNHsvZ0FWw==} - cpu: [arm64] - os: [linux] - - '@rspack/binding-linux-x64-gnu@1.6.7': - resolution: {integrity: sha512-iMrE0Q4IuYpkE0MjpaOVaUDYbQFiCRI9D3EPoXzlXJj4kJSdNheODpHTBVRlWt8Xp7UAoWuIFXCvKFKcSMm3aQ==} - cpu: [x64] - os: [linux] - - '@rspack/binding-linux-x64-musl@1.6.7': - resolution: {integrity: sha512-e7gKFxpdEQwYGk7lTC/hukTgNtaoAstBXehnZNk4k3kuU6+86WDrkn18Cd949iNqfIPtIG/wIsFNGbkHsH69hQ==} - cpu: [x64] - os: [linux] - - '@rspack/binding-wasm32-wasi@1.6.7': - resolution: {integrity: sha512-yx88EFdE9RP3hh7VhjjW6uc6wGU0KcpOcZp8T8E/a+X8L98fX0aVrtM1IDbndhmdluIMqGbfJNap2+QqOCY9Mw==} - cpu: [wasm32] - - '@rspack/binding-win32-arm64-msvc@1.6.7': - resolution: {integrity: sha512-vgxVYpFK8P5ulSXQQA+EbX78R/SUU+WIf0JIY+LoUoP89gZOsise/lKAJMAybzpeTJ1t0ndLchFznDYnzq+l4Q==} - cpu: [arm64] - os: [win32] - - '@rspack/binding-win32-ia32-msvc@1.6.7': - resolution: {integrity: sha512-bV5RTW0Va0UQKJm9HWLt7fWNBPaBBBxCJOA2pJT3nGGm6CCXKnZSyEiVbFUk4jI/uiwBfqenlLkzaGoMRbeDhA==} - cpu: [ia32] - os: [win32] - - '@rspack/binding-win32-x64-msvc@1.6.7': - resolution: {integrity: sha512-8xlbuJQtYktlBjZupOHlO8FeZqSIhsV3ih7xBSiOYar6LI6uQzA7XiO3I5kaPSDirBMMMKv1Z4rKCxWx10a3TQ==} - cpu: [x64] - os: [win32] - - '@rspack/binding@1.6.7': - resolution: {integrity: sha512-7ICabuBN3gHc6PPN52+m1kruz3ogiJjg1C0gSWdLRk18m/4jlcM2aAy6wfXjgODJdB0Yh2ro/lIpBbj+AYWUGA==} - - '@rspack/core@1.6.7': - resolution: {integrity: sha512-tkd4nSzTf+pDa9OAE4INi/JEa93HNszjWy5C9+trf4ZCXLLHsHxHQFbzoreuz4Vv2PlCWajgvAdiPMV1vGIkuw==} - engines: {node: '>=18.12.0'} - peerDependencies: - '@swc/helpers': '>=0.5.1' - peerDependenciesMeta: - '@swc/helpers': - optional: true - - '@rspack/lite-tapable@1.1.0': - resolution: {integrity: sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==} - '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@rushstack/eslint-patch@1.11.0': - resolution: {integrity: sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==} + '@rushstack/eslint-patch@1.16.1': + resolution: {integrity: sha512-TvZbIpeKqGQQ7X0zSCvPH9riMSFQFSggnfBjFZ1mEoILW+UuXCKwOoPcgjMwiUtRqFZ8jWhPJc4um14vC6I4ag==} + + '@sapphire/async-queue@1.5.5': + resolution: {integrity: sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + + '@sapphire/shapeshift@3.9.7': + resolution: {integrity: sha512-4It2mxPSr4OGn4HSQWGmhFMsNFGfFVhWeRPCRwbH972Ek2pzfGRZtb0pJ4Ze6oIzcyh2jw7nUDa6qGlWofgd9g==} + engines: {node: '>=v16'} '@scalar/analytics-client@1.0.0': resolution: {integrity: sha512-pnkghhqfmSH7hhdlFpu2M3V/6EjP2R0XbKVbmP77JSli12DdInxR1c4Oiw9V5f/jgxQhVczQQTt74cFYbLzI/Q==} @@ -4421,7 +4646,7 @@ packages: resolution: {integrity: sha512-krkNq5cZLD4IEtVto5KbektfRhVTR/ZwiGq+KGOhnXlv/0kFKdkccw6WXPnzq+gXZTYNJxFcrDn60Dj3ilXQrg==} engines: {node: '>=20'} peerDependencies: - react: ^18.0.0 || ^19.0.0 + react: ^18 '@scalar/api-reference@1.38.1': resolution: {integrity: sha512-1r0o1BBhfOpOI2ZTvcDffNkljL4gpzyB1prBZ1wRZ3fY1lkIdAUHzIDj+lCYL+uj0RYVJFOIWvJpmpCBW6KmIg==} @@ -4510,16 +4735,24 @@ packages: resolution: {integrity: sha512-IWWudWionjVT2JNl+xin9zuoR/I5+f84myt8uzCCKj2PACEjitZvXYwwnqhnLMPPWYI8FQ5dncGKg0zUgRL5zQ==} engines: {node: '>=18'} - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} '@sinclair/typebox@0.34.49': resolution: {integrity: sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==} + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + '@sindresorhus/is@5.6.0': resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} + '@sindresorhus/is@7.2.0': + resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} + engines: {node: '>=18'} + '@smithy/abort-controller@4.2.5': resolution: {integrity: sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==} engines: {node: '>=18.0.0'} @@ -5027,8 +5260,8 @@ packages: '@tanstack/react-query@4.36.1': resolution: {integrity: sha512-y7ySVHFyyQblPl3J3eQBWpXZkliroki3ARnBKsdJchlgt7yJLRDUcf4B8soufgiYt3pEQIkBWBx1N9/ZPIeUWw==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^18 + react-dom: ^18 react-native: '*' peerDependenciesMeta: react-dom: @@ -5036,6 +5269,17 @@ packages: react-native: optional: true + '@tanstack/react-table@8.21.3': + resolution: {integrity: sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==} + engines: {node: '>=12'} + peerDependencies: + react: ^18 + react-dom: ^18 + + '@tanstack/table-core@8.21.3': + resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==} + engines: {node: '>=12'} + '@tanstack/virtual-core@3.13.12': resolution: {integrity: sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==} @@ -5044,6 +5288,10 @@ packages: peerDependencies: vue: ^2.7.0 || ^3.0.0 + '@tokenizer/inflate@0.2.7': + resolution: {integrity: sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==} + engines: {node: '>=18'} + '@tokenizer/inflate@0.4.1': resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} engines: {node: '>=18'} @@ -5062,12 +5310,39 @@ packages: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} + '@turbo/darwin-64@2.9.6': + resolution: {integrity: sha512-X/56SnVXIQZBLKwniGTwEQTGmtE5brSACnKMBWpY3YafuxVYefrC2acamfjgxP7BG5w3I+6jf0UrLoSzgPcSJg==} + cpu: [x64] + os: [darwin] + + '@turbo/darwin-arm64@2.9.6': + resolution: {integrity: sha512-aalBeSl4agT/QtYGDyf/XLajedWzUC9Vg/pm/YO6QQ93vkQ91Vz5uK1ta5RbVRDozQSz4njxUNqRNmOXDzW+qw==} + cpu: [arm64] + os: [darwin] + + '@turbo/linux-64@2.9.6': + resolution: {integrity: sha512-YKi05jnNHaD7vevgYwahpzGwbsNNTwzU2c7VZdmdFm7+cGDP4oREUWSsainiMfRqjRuolQxBwRn8wf1jmu+YZA==} + cpu: [x64] + os: [linux] + + '@turbo/linux-arm64@2.9.6': + resolution: {integrity: sha512-02o/ZS69cOYEDczXvOB2xmyrtzjQ2hVFtWZK1iqxXUfzMmTjZK4UumrfNnjckSg+gqeBfnPRHa0NstA173Ik3g==} + cpu: [arm64] + os: [linux] + + '@turbo/windows-64@2.9.6': + resolution: {integrity: sha512-wVdQjvnBI15wB6JrA+43CtUtagjIMmX6XYO758oZHAsCNSxqRlJtdyujih0D8OCnwCRWiGWGI63zAxR0hO6s9g==} + cpu: [x64] + os: [win32] + + '@turbo/windows-arm64@2.9.6': + resolution: {integrity: sha512-1XUUyWW0W6FTSqGEhU8RHVqb2wP1SPkr7hIvBlMEwH9jr+sJQK5kqeosLJ/QaUv4ecSAd1ZhIrLoW7qslAzT4A==} + cpu: [arm64] + os: [win32] + '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - '@tybys/wasm-util@0.9.0': - resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} - '@types/ali-oss@6.16.13': resolution: {integrity: sha512-Nxxs9JYESnJcVBI9mNv+dFNnbdz15tKS15mwckZqSIM75ttb8GcNYgeNfKG9gsykSIDpbSqcSnEqxdV5vSlbDg==} @@ -5083,8 +5358,8 @@ packages: '@types/bun@1.3.11': resolution: {integrity: sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg==} - '@types/bun@1.3.12': - resolution: {integrity: sha512-DBv81elK+/VSwXHDlnH3Qduw+KxkTIWi7TXkAeh24zpi5l0B2kUg9Ga3tb4nJaPcOFswflgi/yAvMVBPrxMB+A==} + '@types/bun@1.3.13': + resolution: {integrity: sha512-9fqXWk5YIHGGnUau9TEi+qdlTYDAnOj+xLCmSTwXfAIqXr2x4tytJb43E9uCvt09zJURKXwAtkoH4nLQfzeTXw==} '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -5092,9 +5367,15 @@ packages: '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/content-type@1.1.9': + resolution: {integrity: sha512-Hq9IMnfekuOCsEmYl4QX2HBrT+XsfXiupfrLLY8Dcf3Puf4BkBOxSbWYTITSOQAhJoYPBez+b4MJRpIYL65z8A==} + '@types/cookie@0.5.4': resolution: {integrity: sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA==} + '@types/cors@2.8.19': + resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} + '@types/d3-array@3.2.1': resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} @@ -5197,15 +5478,24 @@ packages: '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/dns-packet@5.6.5': + resolution: {integrity: sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q==} + '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/express-serve-static-core@4.19.8': + resolution: {integrity: sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==} + '@types/express-serve-static-core@5.0.6': resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} + '@types/express@4.17.25': + resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==} + '@types/express@5.0.0': resolution: {integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==} @@ -5242,6 +5532,9 @@ packages: '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + '@types/jsdom@21.1.7': + resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==} + '@types/jsesc@2.5.1': resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==} @@ -5290,12 +5583,15 @@ packages: '@types/node-fetch@2.6.12': resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + '@types/node-fetch@2.6.13': + resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + '@types/node@18.19.80': resolution: {integrity: sha512-kEWeMwMeIvxYkeg1gTc01awpwLbfMRZXdIhwRcakd/KlK53jmRC26LqcbIt7fnAQTu5GzlnWmzA3H6+l1u6xxQ==} - '@types/node@20.14.0': - resolution: {integrity: sha512-5cHBxFGJx6L4s56Bubp4fglrEpmyJypsqI6RgzMfBHWUJQGWAAi8cWcgetEbZXHYXo9C2Fa4EEds/uSyS4cxmA==} - '@types/node@20.17.24': resolution: {integrity: sha512-d7fGCyB96w9BnWQrOsJtpyiSaBcAYYr75bnK6ZRjDbql2cGLj/3GsL5OYmLPNq76l7Gf2q4Rv9J2o6h5CrD9sA==} @@ -5305,6 +5601,9 @@ packages: '@types/node@24.0.13': resolution: {integrity: sha512-Qm9OYVOFHFYg3wJoTSrz80hoec5Lia/dPp84do3X7dZvLikQvM1YpmvTBEdIr/e+U8HTkFjLHLnl78K/qjf+jQ==} + '@types/nodemailer@6.4.23': + resolution: {integrity: sha512-aFV3/NsYFLSx9mbb5gtirBSXJnAlrusoKNuPbxsASWc7vrKLmIrTQRpdcxNcSFL3VW2A2XpeLEavwb2qMi6nlQ==} + '@types/nprogress@0.2.3': resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} @@ -5350,8 +5649,8 @@ packages: '@types/readdir-glob@1.1.5': resolution: {integrity: sha512-raiuEPUYqXu+nvtY2Pe8s8FEmZ3x5yAH4VkLdihcPdalvsHltomrRC9BzuStrJ9yk06470hS0Crw0f1pXqD+Hg==} - '@types/request-ip@0.0.37': - resolution: {integrity: sha512-uw6/i3rQnpznxD7LtLaeuZytLhKZK6bRoTS6XVJlwxIOoOpEBU7bgKoVXDNtOg4Xl6riUKHa9bjMVrL6ESqYlQ==} + '@types/request-ip@0.0.38': + resolution: {integrity: sha512-1yeq8UuK/tUBqLXRY24gjeFvrSNaGNcOcZLQjHlnuw8iu+qE/vTQ64TUcLWorr607NKLfFakdoYEXXHXrLLKCw==} '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} @@ -5359,6 +5658,9 @@ packages: '@types/retry@0.12.5': resolution: {integrity: sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==} + '@types/sax@1.2.7': + resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} + '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} @@ -5368,6 +5670,12 @@ packages: '@types/serve-static@1.15.7': resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + '@types/stream-buffers@3.0.8': + resolution: {integrity: sha512-J+7VaHKNvlNPJPEJXX/fKa9DZtR/xPMwuIbe+yNOwp1YB+ApUOBv2aUpEoBJEi8nJgbgs1x8e73ttg0r1rSUdw==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@types/triple-beam@1.3.5': resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} @@ -5395,6 +5703,15 @@ packages: '@types/whatwg-url@11.0.5': resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==} + '@types/xml-encryption@1.2.4': + resolution: {integrity: sha512-I69K/WW1Dv7j6O3jh13z0X8sLWJRXbu5xnHDl9yHzUNDUBtUoBY058eb5s+x/WG6yZC1h8aKdI2EoyEPjyEh+Q==} + + '@types/xml2js@0.4.14': + resolution: {integrity: sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + '@typescript-eslint/eslint-plugin@6.21.0': resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} @@ -5406,6 +5723,14 @@ packages: typescript: optional: true + '@typescript-eslint/eslint-plugin@8.59.0': + resolution: {integrity: sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.59.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/parser@6.21.0': resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -5416,10 +5741,33 @@ packages: typescript: optional: true + '@typescript-eslint/parser@8.59.0': + resolution: {integrity: sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==} + 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-eslint/project-service@8.59.0': + resolution: {integrity: sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/scope-manager@6.21.0': resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@8.59.0': + resolution: {integrity: sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.59.0': + resolution: {integrity: sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/type-utils@6.21.0': resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} @@ -5430,10 +5778,21 @@ packages: typescript: optional: true + '@typescript-eslint/type-utils@8.59.0': + resolution: {integrity: sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==} + 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-eslint/types@6.21.0': resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/types@8.59.0': + resolution: {integrity: sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@6.21.0': resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -5443,16 +5802,33 @@ packages: typescript: optional: true + '@typescript-eslint/typescript-estree@8.59.0': + resolution: {integrity: sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/utils@6.21.0': resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@8.59.0': + resolution: {integrity: sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==} + 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-eslint/visitor-keys@6.21.0': resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@8.59.0': + resolution: {integrity: sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -5470,175 +5846,77 @@ packages: peerDependencies: vue: '>=2.7 || >=3' - '@vitest/coverage-v8@3.1.1': - resolution: {integrity: sha512-MgV6D2dhpD6Hp/uroUoAIvFqA8AuvXEFBC2eepG3WFc1pxTfdk1LEqqkWoWhjz+rytoqrnUUCdf6Lzco3iHkLQ==} + '@vitest/coverage-v8@4.1.5': + resolution: {integrity: sha512-38C0/Ddb7HcRG0Z4/DUem8x57d2p9jYgp18mkaYswEOQBGsI1CG4f/hjm0ZCeaJfWhSZ4k7jgs29V1Zom7Ki9A==} peerDependencies: - '@vitest/browser': 3.1.1 - vitest: 3.1.1 + '@vitest/browser': 4.1.5 + vitest: 4.1.5 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@1.6.1': - resolution: {integrity: sha512-jXL+9+ZNIJKruofqXuuTClf44eSpcHlgj3CiuNihUF3Ioujtmc0zIa3UJOW5RjDK1YLBJZnWBlPuqhYycLioog==} + '@vitest/expect@4.1.5': + resolution: {integrity: sha512-PWBaRY5JoKuRnHlUHfpV/KohFylaDZTupcXN1H9vYryNLOnitSw60Mw9IAE2r67NbwwzBw/Cc/8q9BK3kIX8Kw==} - '@vitest/expect@2.1.9': - resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==} - - '@vitest/expect@3.1.1': - resolution: {integrity: sha512-q/zjrW9lgynctNbwvFtQkGK9+vvHA5UzVi2V8APrp1C6fG6/MuYYkmlx4FubuqLycCeSdHD5aadWfua/Vr0EUA==} - - '@vitest/expect@4.0.16': - resolution: {integrity: sha512-eshqULT2It7McaJkQGLkPjPjNph+uevROGuIMJdG3V+0BSR2w9u6J9Lwu+E8cK5TETlfou8GRijhafIMhXsimA==} - - '@vitest/mocker@2.1.9': - resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==} + '@vitest/mocker@4.1.5': + resolution: {integrity: sha512-/x2EmFC4mT4NNzqvC3fmesuV97w5FC903KPmey4gsnJiMQ3Be1IlDKVaDaG8iqaLFHqJ2FVEkxZk5VmeLjIItw==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/mocker@3.1.1': - resolution: {integrity: sha512-bmpJJm7Y7i9BBELlLuuM1J1Q6EQ6K5Ye4wcyOpOMXMcePYKSIYlpcrCm4l/O6ja4VJA5G2aMJiuZkZdnxlC3SA==} - peerDependencies: - msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true + '@vitest/pretty-format@4.1.5': + resolution: {integrity: sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==} - '@vitest/mocker@4.0.16': - resolution: {integrity: sha512-yb6k4AZxJTB+q9ycAvsoxGn+j/po0UaPgajllBgt1PzoMAAmJGYFdDk0uCcRcxb3BrME34I6u8gHZTQlkqSZpg==} - peerDependencies: - msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true + '@vitest/runner@4.1.5': + resolution: {integrity: sha512-2D+o7Pr82IEO46YPpoA/YU0neeyr6FTerQb5Ro7BUnBuv6NQtT/kmVnczngiMEBhzgqz2UZYl5gArejsyERDSQ==} - '@vitest/pretty-format@2.1.9': - resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} + '@vitest/snapshot@4.1.5': + resolution: {integrity: sha512-zypXEt4KH/XgKGPUz4eC2AvErYx0My5hfL8oDb1HzGFpEk1P62bxSohdyOmvz+d9UJwanI68MKwr2EquOaOgMQ==} - '@vitest/pretty-format@3.1.1': - resolution: {integrity: sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==} + '@vitest/spy@4.1.5': + resolution: {integrity: sha512-2lNOsh6+R2Idnf1TCZqSwYlKN2E/iDlD8sgU59kYVl+OMDmvldO1VDk39smRfpUNwYpNRVn3w4YfuC7KfbBnkQ==} - '@vitest/pretty-format@4.0.16': - resolution: {integrity: sha512-eNCYNsSty9xJKi/UdVD8Ou16alu7AYiS2fCPRs0b1OdhJiV89buAXQLpTbe+X8V9L6qrs9CqyvU7OaAopJYPsA==} + '@vitest/utils@4.1.5': + resolution: {integrity: sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==} - '@vitest/runner@1.6.1': - resolution: {integrity: sha512-3nSnYXkVkf3mXFfE7vVyPmi3Sazhb/2cfZGGs0JRzFsPFvAMBEcrweV1V1GsrstdXeKCTXlJbvnQwGWgEIHmOA==} - - '@vitest/runner@2.1.9': - resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==} - - '@vitest/runner@3.1.1': - resolution: {integrity: sha512-X/d46qzJuEDO8ueyjtKfxffiXraPRfmYasoC4i5+mlLEJ10UvPb0XH5M9C3gWuxd7BAQhpK42cJgJtq53YnWVA==} - - '@vitest/runner@4.0.16': - resolution: {integrity: sha512-VWEDm5Wv9xEo80ctjORcTQRJ539EGPB3Pb9ApvVRAY1U/WkHXmmYISqU5E79uCwcW7xYUV38gwZD+RV755fu3Q==} - - '@vitest/snapshot@1.6.1': - resolution: {integrity: sha512-WvidQuWAzU2p95u8GAKlRMqMyN1yOJkGHnx3M1PL9Raf7AQ1kwLKg04ADlCa3+OXUZE7BceOhVZiuWAbzCKcUQ==} - - '@vitest/snapshot@2.1.9': - resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==} - - '@vitest/snapshot@3.1.1': - resolution: {integrity: sha512-bByMwaVWe/+1WDf9exFxWWgAixelSdiwo2p33tpqIlM14vW7PRV5ppayVXtfycqze4Qhtwag5sVhX400MLBOOw==} - - '@vitest/snapshot@4.0.16': - resolution: {integrity: sha512-sf6NcrYhYBsSYefxnry+DR8n3UV4xWZwWxYbCJUt2YdvtqzSPR7VfGrY0zsv090DAbjFZsi7ZaMi1KnSRyK1XA==} - - '@vitest/spy@1.6.1': - resolution: {integrity: sha512-MGcMmpGkZebsMZhbQKkAf9CX5zGvjkBTqf8Zx3ApYWXr3wG+QvEu2eXWfnIIWYSJExIp4V9FCKDEeygzkYrXMw==} - - '@vitest/spy@2.1.9': - resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==} - - '@vitest/spy@3.1.1': - resolution: {integrity: sha512-+EmrUOOXbKzLkTDwlsc/xrwOlPDXyVk3Z6P6K4oiCndxz7YLpp/0R0UsWVOKT0IXWjjBJuSMk6D27qipaupcvQ==} - - '@vitest/spy@4.0.16': - resolution: {integrity: sha512-4jIOWjKP0ZUaEmJm00E0cOBLU+5WE0BpeNr3XN6TEF05ltro6NJqHWxXD0kA8/Zc8Nh23AT8WQxwNG+WeROupw==} - - '@vitest/utils@1.6.1': - resolution: {integrity: sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g==} - - '@vitest/utils@2.1.9': - resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} - - '@vitest/utils@3.1.1': - resolution: {integrity: sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==} - - '@vitest/utils@4.0.16': - resolution: {integrity: sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==} - - '@vue/compiler-core@3.5.13': - resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + '@vladfrangu/async_event_emitter@2.4.7': + resolution: {integrity: sha512-Xfe6rpCTxSxfbswi/W/Pz7zp1WWSNn4A0eW4mLkQUewCrXXtMj31lCg+iQyTkh/CkusZSq9eDflu7tjEDXUY6g==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} '@vue/compiler-core@3.5.22': resolution: {integrity: sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==} - '@vue/compiler-dom@3.5.13': - resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} - '@vue/compiler-dom@3.5.22': resolution: {integrity: sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==} - '@vue/compiler-sfc@3.5.13': - resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} - '@vue/compiler-sfc@3.5.22': resolution: {integrity: sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==} - '@vue/compiler-ssr@3.5.13': - resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} - '@vue/compiler-ssr@3.5.22': resolution: {integrity: sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==} '@vue/devtools-api@6.6.4': resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} - '@vue/reactivity@3.5.13': - resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} - '@vue/reactivity@3.5.22': resolution: {integrity: sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==} - '@vue/runtime-core@3.5.13': - resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} - '@vue/runtime-core@3.5.22': resolution: {integrity: sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==} - '@vue/runtime-dom@3.5.13': - resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} - '@vue/runtime-dom@3.5.22': resolution: {integrity: sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==} - '@vue/server-renderer@3.5.13': - resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} - peerDependencies: - vue: 3.5.13 - '@vue/server-renderer@3.5.22': resolution: {integrity: sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==} peerDependencies: vue: 3.5.22 - '@vue/shared@3.5.13': - resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} - '@vue/shared@3.5.22': resolution: {integrity: sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==} @@ -5706,6 +5984,13 @@ packages: peerDependencies: vue: ^3.5.0 + '@wecom/crypto@1.0.1': + resolution: {integrity: sha512-K4Ilkl1l64ceJDbj/kflx8ND/J88pcl8tKx4Ivp7IiCrshRJU+Uo5uWCjAa+PjUiLIdcQSZ4m4d0t1npMPCX5A==} + + '@xmldom/is-dom-node@1.0.1': + resolution: {integrity: sha512-CJDxIgE5I0FH+ttq/Fxy6nRpxP70+e2O048EPe85J2use3XKdatVM7dDVvFNjQudd9B49NPoZ+8PG49zj4Er8Q==} + engines: {node: '>= 16'} + '@xmldom/xmldom@0.8.10': resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} engines: {node: '>=10.0.0'} @@ -5753,6 +6038,10 @@ packages: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} engines: {node: '>= 10.0.0'} + adm-zip@0.5.17: + resolution: {integrity: sha512-+Ut8d9LLqwEvHHJl1+PIHqoyDxFgVN847JTVM3Izi3xHDWPE4UtzzXysMZQs64DMcrJfBeS/uoEP4AD3HQHnQQ==} + engines: {node: '>=12.0'} + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -5773,8 +6062,8 @@ packages: resolution: {integrity: sha512-TrjXie49Q8HuHKTa84Fm9A+famMDAG1+7a9S9Gq6RQ0h90Jgqmiq3CkObuRjWT/C4d6nRZCw35Y2k2fmybb5eA==} engines: {node: '>=18'} peerDependencies: - 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: ^18 + react-dom: ^18 ajv-draft-04@1.0.0: resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} @@ -5813,13 +6102,29 @@ packages: resolution: {integrity: sha512-FipRmyd16Pr/tEey/YaaQ/24Pc3HEpLM9S1DRakEuXlSLXNIJnu1oJtHM53eVYpvW3dXapSjrip3xylZUTIZVQ==} engines: {node: '>=8'} + alipay-sdk@4.14.0: + resolution: {integrity: sha512-oiD/VP5Ei0RRacHHmE+N0uqgOj2xzce7c0fHrtyyh1P04O+o9I1r65LdGPzU8960J56xOxS/d3c+R/9lsPUH7g==} + engines: {node: '>=18.0.0'} + ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + ansi-escapes@5.0.0: resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} engines: {node: '>=12'} + ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -5828,6 +6133,10 @@ packages: resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} + ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -5836,10 +6145,6 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -5925,12 +6230,16 @@ packages: asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + asn1js@3.0.10: + resolution: {integrity: sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==} + engines: {node: '>=12.0.0'} + assert-plus@1.0.0: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} - assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} @@ -5947,6 +6256,9 @@ packages: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} + ast-v8-to-istanbul@1.0.0: + resolution: {integrity: sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==} + async-function@1.0.0: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} @@ -5968,6 +6280,13 @@ packages: resolution: {integrity: sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==} engines: {node: '>=10.12.0'} + autoprefixer@10.5.0: + resolution: {integrity: sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -6015,9 +6334,6 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - bail@1.0.5: - resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} - bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -6031,17 +6347,59 @@ packages: bare-events@2.5.4: resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + bare-events@2.8.2: + resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} + peerDependencies: + bare-abort-controller: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + + bare-fs@4.7.1: + resolution: {integrity: sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==} + engines: {bare: '>=1.16.0'} + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + + bare-os@3.8.7: + resolution: {integrity: sha512-G4Gr1UsGeEy2qtDTZwL7JFLo2wapUarz7iTMcYcMFdS89AIQuBoyjgXZz0Utv7uHs3xA9LckhVbeBi8lEQrC+w==} + engines: {bare: '>=1.14.0'} + + bare-path@3.0.0: + resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + + bare-stream@2.13.0: + resolution: {integrity: sha512-3zAJRZMDFGjdn+RVnNpF9kuELw+0Fl3lpndM4NcEOhb9zwtSo/deETfuIwMSE5BXanA0FrN1qVjffGwAg2Y7EA==} + peerDependencies: + bare-abort-controller: '*' + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + bare-buffer: + optional: true + bare-events: + optional: true + + bare-url@2.4.2: + resolution: {integrity: sha512-/9a2j4ac6ckpmAHvod/ob7x439OAHst/drc2Clnq+reRYd/ovddwcF4LfoxHyNk5AuGBnPg+HqFjmE/Zpq6v0A==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.10.0: - resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==} + baseline-browser-mapping@2.10.20: + resolution: {integrity: sha512-1AaXxEPfXT+GvTBJFuy4yXVHWJBXa4OdbIebGN/wX5DlsIkU0+wzGnd2lOzokSk51d5LUmqjgBLRLlypLUqInQ==} engines: {node: '>=6.0.0'} hasBin: true basic-ftp@5.2.0: resolution: {integrity: sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw==} engines: {node: '>=10.0.0'} + deprecated: Security vulnerability fixed in 5.2.1, please upgrade bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} @@ -6059,6 +6417,9 @@ packages: bl@1.2.3: resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bl@5.1.0: resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} @@ -6111,6 +6472,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + 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 + bson@6.10.3: resolution: {integrity: sha512-MTxGsqgYTwfshYWTRdmZRC+M7FnG1b4y7RO7p2k3X24Wq0yv1m77Wsj0BzlPzd/IowgESfsruQCUToa7vbOpPQ==} engines: {node: '>=16.20.1'} @@ -6146,6 +6512,10 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + bufferutil@4.1.0: + resolution: {integrity: sha512-ZMANVnAixE6AWWnPzlW2KpUrxhm9woycYvPOo67jWHyFowASTEd9s+QN1EIMsSDtwhIxN4sWE1jotpuDUIgyIw==} + engines: {node: '>=6.14.2'} + builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} @@ -6155,8 +6525,8 @@ packages: bun-types@1.3.11: resolution: {integrity: sha512-1KGPpoxQWl9f6wcZh57LvrPIInQMn2TQ7jsgxqpRzg+l0QPOFvJVH7HmvHo/AiPgwXy+/Thf6Ov3EdVn1vOabg==} - bun-types@1.3.12: - resolution: {integrity: sha512-HqOLj5PoFajAQciOMRiIZGNoKxDJSr6qigAttOX40vJuSp6DN/CxWp9s3C1Xwm4oH7ybueITwiaOcWXoYVoRkA==} + bun-types@1.3.13: + resolution: {integrity: sha512-QXKeHLlOLqQX9LgYaHJfzdBaV21T63HhFJnvuRCcjZiaUDpbs5ED1MgxbMra71CsryN/1dAoXuJJJwIv/2drVA==} bundle-n-require@1.1.2: resolution: {integrity: sha512-bEk2jakVK1ytnZ9R2AAiZEeK/GxPUM8jvcRxHZXifZDMcjkI4EG/GlsJ2YGSVYT9y/p/gA9/0yDY8rCGsSU6Tg==} @@ -6165,14 +6535,14 @@ packages: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} + byte-counter@0.1.0: + resolution: {integrity: sha512-jheRLVMeUKrDBjVw2O5+k4EvR4t9wtxHL+bo/LxfkxsVeuGMy3a5SEGgXdAFA4FSzTrU8rQXQIrsZ3oBq5a0pQ==} + engines: {node: '>=20'} + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - cac@7.0.0: resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} engines: {node: '>=20.19.0'} @@ -6185,6 +6555,10 @@ packages: resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} engines: {node: '>=14.16'} + cacheable-request@13.0.18: + resolution: {integrity: sha512-rFWadDRKJs3s2eYdXlGggnBZKG7MTblkFBB0YllFds+UYnfogDp2wcR6JN97FhRkHTvq59n2vhNoHNZn29dh/Q==} + engines: {node: '>=18'} + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -6204,10 +6578,18 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + callsites@4.2.0: + resolution: {integrity: sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==} + engines: {node: '>=12.20'} + camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} + camelcase-keys@7.0.2: + resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} + engines: {node: '>=12'} + camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} @@ -6220,8 +6602,12 @@ packages: resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} engines: {node: '>=14.16'} - caniuse-lite@1.0.30001769: - resolution: {integrity: sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==} + caniuse-lite@1.0.30001788: + resolution: {integrity: sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==} + + canvas@3.2.3: + resolution: {integrity: sha512-PzE5nJZPz72YUAfo8oTp0u3fqqY7IzlTubneAihqDYAUcBk7ryeCmBbdJBEdaH0bptSOe2VT2Zwcb3UaFyaSWw==} + engines: {node: ^18.12.0 || >= 20.9.0} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -6229,18 +6615,14 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@4.5.0: - resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} - engines: {node: '>=4'} - - chai@5.2.0: - resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} - engines: {node: '>=12'} - chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} + chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -6253,10 +6635,6 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chalk@5.6.2: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} @@ -6282,12 +6660,8 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} - - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} + chardet@2.1.1: + resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} @@ -6304,10 +6678,18 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + chownr@3.0.0: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} + chromium-bidi@0.11.0: + resolution: {integrity: sha512-6CJWHkNRoyZyjV9Rwv2lYONZf1Xm0IuDyNq97nwSsxxP3wf5Bwy15K5rOvVKMtJ127jJBmxFUanSAOjgFRxgrA==} + peerDependencies: + devtools-protocol: '*' + ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} @@ -6325,6 +6707,10 @@ packages: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + cli-cursor@4.0.0: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6340,6 +6726,14 @@ packages: cli-welcome@2.2.3: resolution: {integrity: sha512-hxaOpahLk5PAYJj4tOcv8vaNMaBQHeMzeLQTAHq2EoGGTKVYV/MPCSlg5EEsKZ7y8WDGS2ScQtnITw02ZNukMQ==} + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} @@ -6350,6 +6744,14 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + clsx@1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -6361,9 +6763,6 @@ packages: codemirror@6.0.2: resolution: {integrity: sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==} - collapse-white-space@1.0.6: - resolution: {integrity: sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==} - color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -6410,6 +6809,10 @@ packages: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} + 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==} @@ -6446,9 +6849,6 @@ packages: resolution: {integrity: sha512-rLSiilO85qHgaTBIIHQpsv8z+NnVfZq3cKuYNCXN1AOqPzced0GWZEe/A517VldRLyQYXUMyV+vszavE2jSAqw==} engines: {node: '>=10'} - confbox@0.1.8: - resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -6518,6 +6918,31 @@ packages: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} + cosmiconfig@9.0.1: + resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + crawlee@3.16.0: + resolution: {integrity: sha512-j7wBS81zU+z7MNIKUqJuYRDbKJHwn5sWkki08glAXj6+Ka7HgU6IONHmrv9qtUmb/0p0m5tcMNqItMfnvh6bHA==} + engines: {node: '>=16.0.0'} + hasBin: true + peerDependencies: + idcac-playwright: '*' + playwright: '*' + puppeteer: '*' + peerDependenciesMeta: + idcac-playwright: + optional: true + playwright: + optional: true + puppeteer: + optional: true + crc-32@1.2.2: resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} engines: {node: '>=0.8'} @@ -6571,9 +6996,19 @@ packages: resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} engines: {node: '>=8.0.0'} + cssom@0.5.0: + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} + + cssstyle@4.6.0: + resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==} + engines: {node: '>=18'} + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csv-stringify@6.7.0: + resolution: {integrity: sha512-UdtziYp5HuTz7e5j8Nvq+a/3HQo+2/aJZ9xntNTpmRRIg/3YYqDVgiS9fvAhtNbnyfbv2ZBe0bqCHqzhE7FqWQ==} + cva@1.0.0-beta.2: resolution: {integrity: sha512-dqcOFe247I5pKxfuzqfq3seLL5iMYsTgo40Uw7+pKZAntPgFtR7Tmy59P5IVIq/XgB0NQWoIvYDt9TwHkuK8Cg==} peerDependencies: @@ -6752,6 +7187,10 @@ packages: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -6836,6 +7275,9 @@ packages: decimal.js-light@2.5.1: resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + decode-named-character-reference@1.2.0: resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} @@ -6843,6 +7285,10 @@ packages: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} + decompress-response@10.0.0: + resolution: {integrity: sha512-oj7KWToJuuxlPr7VV0vabvxEIiqNMo+q0NueIiL3XhtwC6FVOX7Hr1c0C4eD0bmf7Zr+S/dSf2xvkH3Ad6sU3Q==} + engines: {node: '>=20'} + decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -6867,14 +7313,6 @@ packages: resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==} engines: {node: '>=4'} - deep-eql@4.1.4: - resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} - engines: {node: '>=6'} - - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -6890,6 +7328,9 @@ packages: resolution: {integrity: sha512-bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw==} engines: {node: '>= 0.10.0'} + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} @@ -6951,13 +7392,15 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + devtools-protocol@0.0.1367902: + resolution: {integrity: sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==} + + devtools-protocol@0.0.1617982: + resolution: {integrity: sha512-DN4tEwx1D6d3OvVjLfh5nBkAlIq08URlNLAuE0XgSZnMQcpXb++6TkmqBOp8wAYOQnxWbATtvxwFYnyM8CT+Ig==} + didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - diff@5.2.0: resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} @@ -6979,6 +7422,10 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dns-packet@5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + engines: {node: '>=6'} + dockerfile-ast@0.7.1: resolution: {integrity: sha512-oX/A4I0EhSkGqrFv0YuvPkBUSYp1XiY8O8zAKc8Djglx8ocz+JfOr8gP0ryRMC2myqvDLagmnZaU9ot1vG2ijw==} @@ -7022,10 +7469,17 @@ packages: domutils@3.2.2: resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dot-prop@6.0.1: resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} engines: {node: '>=10'} + dot-prop@7.2.0: + resolution: {integrity: sha512-Ol/IPXUARn9CSbkrdV4VJo7uCy1I3VuSiWCaFSg+8BdUOzF9n3jefIpcgAydvUZbTdEBZs2vEiTiS9m61ssiDA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dotenv@16.5.0: resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} engines: {node: '>=12'} @@ -7080,6 +7534,9 @@ packages: electron-to-chromium@1.5.118: resolution: {integrity: sha512-yNDUus0iultYyVoEFLnQeei7LOQkL8wg8GQpkPCRrOlJXlcCwa6eGKZkxQ9ciHsqZyYbj8Jd94X1CTPzGm+uIA==} + electron-to-chromium@1.5.341: + resolution: {integrity: sha512-1sZTssferjgDgaqRTc0ieP+ozzpOy7LQTPTtEW3yQFn4+ORdIAZWV5BthXPyHF7YqLvFJCUPhNhdAJQYlYUgiw==} + elkjs@0.9.3: resolution: {integrity: sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==} @@ -7124,6 +7581,10 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -7147,11 +7608,8 @@ packages: resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} engines: {node: '>= 0.4'} - es-module-lexer@1.6.0: - resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} - - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} @@ -7172,16 +7630,6 @@ packages: es-toolkit@1.43.0: resolution: {integrity: sha512-SKCT8AsWvYzBBuUqMk4NPwFlSdqLpJwmy6AP322ERn8W2YLIB6JBXnwMI2Qsh2gfphT3q7EKAxKb23cvFHFwKA==} - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - - esbuild@0.25.1: - resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.25.11: resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} engines: {node: '>=18'} @@ -7302,6 +7750,16 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + 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@8.57.1: resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -7350,6 +7808,9 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + event-stream@3.3.4: + resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} + event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} @@ -7360,6 +7821,9 @@ packages: eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + events-universal@1.0.1: + resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} + events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -7376,13 +7840,9 @@ packages: resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - - expect-type@1.2.0: - resolution: {integrity: sha512-80F22aiJ3GLyVnS/B3HzgR6RelZVumzj9jkL0Rhz4h0xYbNW9PjlQz5h3J/SShErbXBc295vseR4/MIbVmUbeA==} - engines: {node: '>=12.0.0'} + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} expect-type@1.3.0: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} @@ -7409,6 +7869,11 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + extsprintf@1.3.0: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} @@ -7451,6 +7916,10 @@ packages: resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} hasBin: true + fast-xml-parser@4.5.6: + resolution: {integrity: sha512-Yd4vkROfJf8AuJrDIVMVmYfULKmIJszVsMv7Vo71aocsKgFxpdlpSHXSaInvyYfgw2PRuObQSW2GFpVMUjxu9A==} + hasBin: true + fast-xml-parser@5.2.5: resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==} hasBin: true @@ -7484,10 +7953,26 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} + fflate@0.8.2: + resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + + figlet@1.11.0: + resolution: {integrity: sha512-EEx3OS/l2bFqcUNN2NM9FPJp8vAMrgbCxsbl2hbcJNNxOEwVe3mEzrhan7TbJQViZa8mMqhihlbCaqD+LyYKTQ==} + engines: {node: '>= 17.0.0'} + hasBin: true + + figures@3.2.0: + 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-type@20.5.0: + resolution: {integrity: sha512-BfHZtG/l9iMm4Ecianu7P8HRD2tBHLtjXinm4X62XBOYzi7CYA7jyqfJzOvXHqzVrVPYqBo2/GvbARMaaJkKVg==} + engines: {node: '>=18'} + file-type@21.3.0: resolution: {integrity: sha512-8kPJMIGz1Yt/aPEwOsrR97ZyZaD1Iqm8PClb1nYFclUCkBi0Ma5IsYNQzvSFS9ib51lWyIw5mIT9rWzI/xjpzA==} engines: {node: '>=20'} @@ -7543,6 +8028,22 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + fingerprint-generator@2.1.82: + resolution: {integrity: sha512-5Z/yCKW324pMyMarpIKe/QPdkrFWKNJv3ktdU+fXHri80+HAwNE6QhMvEvsMkK9Q8DeCXZlpPHV77UBa1nFb4A==} + engines: {node: '>=16.0.0'} + + fingerprint-injector@2.1.82: + resolution: {integrity: sha512-FN7W1wbhHk2PBCF6wpBEcFnmOdGUItZnbpVBtYVcQ1/iGM0skNUDqJyH1YOjmpQiqEl2Rhh7qWNXYsivjsT+tg==} + engines: {node: '>=16.0.0'} + peerDependencies: + playwright: ^1.22.2 + puppeteer: '>= 9.x' + peerDependenciesMeta: + playwright: + optional: true + puppeteer: + optional: true + flat-cache@3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -7587,6 +8088,10 @@ packages: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} + form-data-encoder@4.1.0: + resolution: {integrity: sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw==} + engines: {node: '>= 18'} + form-data@2.3.3: resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} engines: {node: '>= 0.12'} @@ -7618,11 +8123,14 @@ packages: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} + fraction.js@5.3.4: + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} + framer-motion@9.1.7: resolution: {integrity: sha512-nKxBkIO4IPkMEqcBbbATxsVjwPYShKl051yhBv9628iAH6JLeHD0siBHxkL62oQzMC1+GNX73XtPjgP753ufuw==} peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 + react: ^18 + react-dom: ^18 framesync@6.1.2: resolution: {integrity: sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==} @@ -7635,9 +8143,16 @@ packages: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} + from@0.1.7: + resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} + fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + 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'} @@ -7668,10 +8183,18 @@ packages: resolution: {integrity: sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==} engines: {node: '>=10'} + gaxios@5.1.3: + resolution: {integrity: sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==} + engines: {node: '>=12'} + gaxios@7.1.4: resolution: {integrity: sha512-bTIgTsM2bWn3XklZISBTQX7ZSddGW+IO3bMdGaemHZ3tbqExMENHLx6kKZ/KlejgrMtj8q7wBItt51yegqalrA==} engines: {node: '>=18'} + gcp-metadata@5.3.0: + resolution: {integrity: sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==} + engines: {node: '>=12'} + gcp-metadata@8.1.2: resolution: {integrity: sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==} engines: {node: '>=18'} @@ -7679,6 +8202,9 @@ packages: generate-function@2.3.1: resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} + generative-bayesian-network@2.1.82: + resolution: {integrity: sha512-DH4NrmQheoMaJErdVv2IzaqkbOYSDQZmiZTV6UPDJYRDK2EyPpIQ88XRcYdPeFrUjS1N0Jj25H3HUywoJ1dbow==} + generic-pool@3.9.0: resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==} engines: {node: '>= 4'} @@ -7691,9 +8217,6 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -7717,21 +8240,22 @@ packages: resolution: {integrity: sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==} engines: {node: '>=0.10.0'} + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} get-symbol-description@1.1.0: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.13.0: - resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} - get-tsconfig@4.13.6: resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} @@ -7746,6 +8270,9 @@ packages: getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} @@ -7804,10 +8331,18 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + got-scraping@4.2.1: + resolution: {integrity: sha512-rhOlO1L4H4Cm31smHJqPtAaXOUrhSKsiTrbZSHKFQW1E/mkTDopnHHpRnXJpqzE0faj+zPsVQnyifIqO+K+cLQ==} + engines: {node: '>=16'} + got@12.6.1: resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} engines: {node: '>=14.16'} + got@14.6.6: + resolution: {integrity: sha512-QLV1qeYSo5l13mQzWgP/y0LbMr5Plr5fJilgAIwgnwseproEbtNym8xpLsDzeZ6MWXgNE6kdWGBjdh3zT/Qerg==} + engines: {node: '>=20'} + graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} @@ -7830,6 +8365,10 @@ packages: engines: {node: '>=6'} deprecated: this library is no longer supported + has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} @@ -7931,6 +8470,10 @@ packages: hastscript@9.0.1: resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + header-generator@2.1.82: + resolution: {integrity: sha512-4NjPB0+bAKjPoponSmTOkK58IEF2W22sOJA5O48k/MxbCZgOm+jrU4WVR53Z2I6xFgIPkVrQmKtt1LAbWtfqXw==} + engines: {node: '>=16.0.0'} + highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} @@ -7957,9 +8500,20 @@ packages: hookable@6.1.0: resolution: {integrity: sha512-ZoKZSJgu8voGK2geJS+6YtYjvIzu9AOM/KZXsBxr83uhLL++e9pEv/dlgwgy3dvHg06kTz6JOh1hk3C8Ceiymw==} + hpagent@1.2.0: + resolution: {integrity: sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==} + engines: {node: '>=14'} + + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-escaper@3.0.3: + resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} + html-parse-stringify@3.0.1: resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} @@ -7972,12 +8526,21 @@ packages: html-whitespace-sensitive-tag-names@3.0.1: resolution: {integrity: sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==} + htmlparser2@10.1.0: + resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} + htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + htmlparser2@9.1.0: + resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + 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==} engines: {node: '>= 0.8'} @@ -8014,14 +8577,13 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} + httpx@2.3.3: + resolution: {integrity: sha512-k1qv94u1b6e+XKCxVbLgYlOypVP9MPGpnN5G/vxFf6tDO4V3xpz3d6FUOY/s8NtPgaq5RBVVgSB+7IHpVxMYzw==} + human-signals@4.3.1: resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} engines: {node: '>=14.18.0'} - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} @@ -8058,6 +8620,10 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} @@ -8075,6 +8641,11 @@ packages: resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} engines: {node: '>=8'} + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + import-without-cache@0.2.5: resolution: {integrity: sha512-B6Lc2s6yApwnD2/pMzFh/d5AVjdsDXjgkeJ766FmFuJELIGHNycKRj+l3A39yZPM4CchqNCB4RITEAYB1KUM6A==} engines: {node: '>=20.19.0'} @@ -8100,6 +8671,14 @@ packages: inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + inquirer@8.2.7: + resolution: {integrity: sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==} + engines: {node: '>=12.0.0'} + + inquirer@9.3.8: + resolution: {integrity: sha512-pFGGdaHrmRKMh4WoDDSowddgjT1Vkl90atobmTeSmcPGdYiwikch/m/Ef5wRaiamHejtw0cUUMMerzDUXCci2w==} + engines: {node: '>=18'} + internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -8157,6 +8736,13 @@ packages: is-alphanumerical@2.0.1: resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + is-any-array@3.0.0: + resolution: {integrity: sha512-o4h+tylWykC4BD1vaejp6gDxoM13bwW8FGuNs4yIKpj8xbBJcRxJx8vZpq0dCr7ZDEfeKjmsi/euolKhX6f/ww==} + + is-arguments@1.2.0: + resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} + engines: {node: '>= 0.4'} + is-array-buffer@3.0.5: resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} @@ -8183,10 +8769,6 @@ packages: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} - is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - is-bun-module@1.3.0: resolution: {integrity: sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==} @@ -8257,6 +8839,10 @@ packages: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} engines: {node: '>=10'} + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + is-interactive@2.0.0: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} @@ -8265,6 +8851,10 @@ packages: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + is-natural-number@4.0.1: resolution: {integrity: sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==} @@ -8296,10 +8886,6 @@ packages: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} - is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -8308,6 +8894,9 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} @@ -8342,6 +8931,10 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + is-string@1.1.1: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} @@ -8360,6 +8953,10 @@ packages: is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + is-unicode-supported@1.3.0: resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} engines: {node: '>=12'} @@ -8376,12 +8973,6 @@ packages: resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} - is-whitespace-character@1.0.4: - resolution: {integrity: sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==} - - is-word-character@1.0.4: - resolution: {integrity: sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==} - is-yarn-global@0.4.1: resolution: {integrity: sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==} engines: {node: '>=12'} @@ -8398,6 +8989,11 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isomorphic-ws@5.0.0: + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + isomorphic.js@0.2.5: resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==} @@ -8412,12 +9008,8 @@ packages: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} - istanbul-lib-source-maps@5.0.6: - resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} - engines: {node: '>=10'} - - istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} iterator.prototype@1.1.5: @@ -8442,8 +9034,11 @@ packages: joplin-turndown-plugin-gfm@1.0.12: resolution: {integrity: sha512-qL4+1iycQjZ1fs8zk3jSRk7cg3ROBUHk7GKtiLAQLFzLPKErnILUvz5DLszSQvz3s1sTjPbywLDISVUtBY6HaA==} - jose@6.1.3: - resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} + jose@6.2.2: + resolution: {integrity: sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==} + + jquery@3.7.1: + resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==} js-base64@2.6.4: resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} @@ -8455,12 +9050,12 @@ packages: resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} engines: {node: '>=14'} + js-tokens@10.0.0: + resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - js-yaml@4.1.1: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true @@ -8475,6 +9070,15 @@ packages: resolution: {integrity: sha512-Jbygqaa20I+0ImPjmMbrsY3QrMkfwfI5G/VNlb6c9nDIyyOw8msfWHzTy04/sawa4rjn0t9WYy3nahWlSjB5zw==} engines: {node: '>=0.1.90'} + jsdom@26.1.0: + resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + jsep@1.4.0: resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==} engines: {node: '>= 10.16.0'} @@ -8544,6 +9148,9 @@ packages: jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonfile@6.2.1: + resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} + jsonpath-plus@10.3.0: resolution: {integrity: sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==} engines: {node: '>=18.0.0'} @@ -8557,14 +9164,17 @@ packages: resolution: {integrity: sha512-Leuly0nbM4R+S5SVJk3VHfw1oxnlEK9KygdZvfUtEtTawNDyzB4qa1xWTmFt1aeoA7sXZkVTRuIixJ8bAvqVUg==} hasBin: true - jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + jsonwebtoken@9.0.3: + resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} engines: {node: '>=12', npm: '>=6'} jsprim@1.4.2: resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} engines: {node: '>=0.6.0'} + jsrsasign@11.1.3: + resolution: {integrity: sha512-nPnK5D/4lv0Dwr7TlzrKtAd8JlLZwFTqTUUB3NQCbtdobcRcohGFxjbPySDVh74iWUudcCsapYT6OxoyhJLhhA==} + jstoxml@2.2.9: resolution: {integrity: sha512-OYWlK0j+roh+eyaMROlNbS5cd5R25Y+IUpdl7cNdB8HNrkgwQzIS7L9MegxOiWNBj9dQhA/yAxiMwCC5mwNoBw==} @@ -8581,15 +9191,9 @@ packages: just-curry-it@5.3.0: resolution: {integrity: sha512-silMIRiFjUWlfaDhkgSzpuAyQ6EX/o09Eu8ZBfmFwQMbax7+LQzeIU2CBrICT6Ne4l86ITCGvUCBpCubWYy0Yw==} - jwa@1.4.1: - resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} - jwa@2.0.1: resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} - jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} - jws@4.0.1: resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} @@ -8597,10 +9201,6 @@ packages: resolution: {integrity: sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==} engines: {node: '>=12.0.0'} - katex@0.16.21: - resolution: {integrity: sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==} - hasBin: true - katex@0.16.22: resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==} hasBin: true @@ -8608,9 +9208,15 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@5.6.0: + resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==} + khroma@2.1.0: resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} + kitx@2.2.0: + resolution: {integrity: sha512-tBMwe6AALTBQJb0woQDD40734NKzb0Kzi3k7wQj9ar3AbP9oqhoVrdXPh7rk2r00/glIgd0YbToIUJsnxWMiIg==} + kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -8622,7 +9228,7 @@ packages: resolution: {integrity: sha512-99nmbZ2DVwqYiqSVgH8lF9UoM7glIYSdG3WzE3Z2nZbJKoFyZPvRRk7Czq05b32nqcAALwzk3zqVOZmDIn1rqQ==} engines: {node: '>=18'} peerDependencies: - react: ^18 || ^19 + react: ^18 peerDependenciesMeta: react: optional: true @@ -8697,24 +9303,28 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.30.1: resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.30.1: resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.30.1: resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.30.1: resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} @@ -8743,6 +9353,15 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + linkedom@0.18.12: + resolution: {integrity: sha512-jalJsOwIKuQJSeTvsgzPe9iJzyfVaEJiEXl+25EkKevsULHvMJzpNqwvj1jOESWdmgKDiXObyjOYwlUqG7wo1Q==} + engines: {node: '>=16'} + peerDependencies: + canvas: '>= 2' + peerDependenciesMeta: + canvas: + optional: true + lint-staged@13.3.0: resolution: {integrity: sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==} engines: {node: ^16.14.0 || >=18.0.0} @@ -8757,10 +9376,6 @@ packages: enquirer: optional: true - local-pkg@0.5.1: - resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} - engines: {node: '>=14'} - locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} @@ -8785,6 +9400,9 @@ packages: lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + lodash.identity@3.0.0: + resolution: {integrity: sha512-AupTIzdLQxJS5wIYUQlgGyk2XRTfGXA+MCghDHqZk0pzUNYvd3EESS6dkChNauNYVIutcb0dfHw1ri9Q1yPV8Q==} + lodash.includes@4.3.0: resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} @@ -8794,6 +9412,10 @@ packages: lodash.isboolean@3.0.3: resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. + lodash.isinteger@4.0.4: resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} @@ -8815,9 +9437,16 @@ packages: lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + lodash.pickby@4.6.0: + resolution: {integrity: sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==} + lodash@4.17.23: resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + log-symbols@5.1.0: resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} engines: {node: '>=12'} @@ -8843,11 +9472,8 @@ packages: lop@0.4.2: resolution: {integrity: sha512-RefILVDQ4DKoRZsJ4Pj22TxE3omDO47yFpkIBoDKzkqPRISs5U1cnAdg/5583YPkWPaLIYHOKRMQSvjFsO26cw==} - loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} - - loupe@3.1.3: - resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} lowercase-keys@3.0.0: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} @@ -8885,14 +9511,11 @@ packages: resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==} engines: {node: '>=12'} - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magicast@0.3.5: - resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + magicast@0.5.2: + resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==} make-dir@1.3.0: resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} @@ -8911,8 +9534,12 @@ packages: engines: {node: '>=12.0.0'} hasBin: true - markdown-escapes@1.0.4: - resolution: {integrity: sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==} + map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + + map-stream@0.1.0: + resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} @@ -9016,6 +9643,9 @@ packages: mermaid@10.9.4: resolution: {integrity: sha512-VIG2B0R9ydvkS+wShA8sXqkzfpYglM2Qwj7VyUeqzNVqSGPoP/tcaUr3ub4ESykv8eqQJn3p99bHNvYdg3gCHQ==} + metadata-saml2@2.1.2: + resolution: {integrity: sha512-HNhtY0bmws1Ob6FDH7xzIlK4RFwBOs3WAIPs5msE4+1NnnI4ybnfSiCMFUrwlFDAAmuko9jFG9wFcCdKE8Y1SA==} + methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} @@ -9266,17 +9896,38 @@ packages: resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} engines: {node: '>= 18'} + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true - mlly@1.7.4: - resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + ml-array-max@2.0.0: + resolution: {integrity: sha512-QQZ4kENwpWmyNb98UXRDFXrmtIXuXtt1+bSbda/2KA85+F+rrJP8hZk6QOkCQXM2Th9mUDYdq/PNByPdT9ID4A==} + + ml-array-min@2.0.0: + resolution: {integrity: sha512-GRj6Ky6sW9vGL6yIjgsHmXZ9YgrdmcQ8nCxPqEGeKc6dkfYg1XDYxGFxADUjNuZyoCd5PUscWAS4N+cFaX6hFg==} + + ml-array-rescale@2.0.0: + resolution: {integrity: sha512-2GGtKfSno94/kIloWGvpp/U5Q5vLvLrza+SAaGsLeo6Xj4mEbA6Gqx+oTfZFkxnd1grT2X007HfJNs3T5BsiVg==} + + ml-logistic-regression@2.0.0: + resolution: {integrity: sha512-xHhB91ut8GRRbJyB1ZQfKsl1MHmE1PqMeRjxhks96M5BGvCbC9eEojf4KgRMKM2LxFblhVUcVzweAoPB48Nt0A==} + + ml-matrix@6.12.2: + resolution: {integrity: sha512-GC+BnW+pBh8Auap8goAxY0senAmF0IEoc3HNVSfnfbvGw0buuDIYb9kAKMS1l+GiwJ1rfK2bzJ8IHhwjzATSFA==} mmdb-lib@3.0.1: resolution: {integrity: sha512-dyAyMR+cRykZd1mw5altC9f4vKpCsuywPwo8l/L5fKqDay2zmqT0mF/BvUoXnQiqGn+nceO914rkPKJoyFnGxA==} engines: {node: '>=10', npm: '>=6'} + moment-timezone@0.5.48: + resolution: {integrity: sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==} + moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} @@ -9361,6 +10012,13 @@ packages: resolution: {integrity: sha512-TBm6j41rxNohqawsxlsWsNNh/VdV4QFXcBvRcPhXaA05EZ79z0qJ2bQFpync6JBoHTeNY5Q1JpG7AlTjdlfAEA==} engines: {node: '>= 10.16.0'} + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + mysql2@3.13.0: resolution: {integrity: sha512-M6DIQjTqKeqXH5HLbLMxwcK5XfXHw30u5ap6EZmu7QVmcF/gnh2wS/EOiQ4MTbXz/vQeoXrmycPlVRM00WSslg==} engines: {node: '>= 8.0'} @@ -9377,16 +10035,14 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.1.3: - resolution: {integrity: sha512-zAbEOEr7u2CbxwoMRlz/pNSpRP0FdAU4pRaYunCdEezWohXFs+a0Xw7RfkKaezMsmSM1vttcLthJtwRnVtOfHQ==} - engines: {node: ^18 || >=20} - hasBin: true - nanoid@5.1.5: resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==} engines: {node: ^18 || >=20} hasBin: true + napi-build-utils@2.0.0: + resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -9412,22 +10068,19 @@ packages: peerDependencies: i18next: '>= 23.7.13' next: '>= 12.0.0' - react: '>= 17.0.2' + react: ^18 react-i18next: '>= 13.5.0' - next-rspack@16.2.1: - resolution: {integrity: sha512-elQCw/01mJv/6UuYiZmasWyKESJs/JY101OpTzQew8iiNe4b2F09cb6iEjWEEG5MGEAp2tuvHUjGJ53zzenbgA==} - - next@16.2.1: - resolution: {integrity: sha512-VaChzNL7o9rbfdt60HUj8tev4m6d7iC1igAy157526+cJlXOQu5LzsBXNT+xaJnTP/k+utSX5vMv7m0G+zKH+Q==} + next@16.2.4: + resolution: {integrity: sha512-kPvz56wF5frc+FxlHI5qnklCzbq53HTwORaWBGdT0vNoKh1Aya9XC8aPauH4NJxqtzbWsS5mAbctm4cr+EkQ2Q==} engines: {node: '>=20.9.0'} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 '@playwright/test': ^1.51.1 babel-plugin-react-compiler: '*' - react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react: ^18 + react-dom: ^18 sass: ^1.3.0 peerDependenciesMeta: '@opentelemetry/api': @@ -9444,6 +10097,13 @@ packages: peerDependencies: next: '>=8.1.1-canary.54' + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + 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==} @@ -9480,6 +10140,10 @@ packages: resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} hasBin: true + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + node-hex@1.0.1: resolution: {integrity: sha512-iwpZdvW6Umz12ICmu9IYPRxg0tOLGmU3Tq2tKetejCj3oZd7b2nUXwP3a7QA5M9glWy8wlPS1G3RwM/CdsUbdQ==} engines: {node: '>=8.0.0'} @@ -9487,11 +10151,18 @@ packages: node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-releases@2.0.37: + resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} + node-xlsx@0.24.0: resolution: {integrity: sha512-1olwK48XK9nXZsyH/FCltvGrQYvXXZuxVitxXXv2GIuRm51aBi1+5KwR4rWM4KeO61sFU+00913WLZTD+AcXEg==} engines: {node: '>=10.0.0'} hasBin: true + nodemailer@7.0.13: + resolution: {integrity: sha512-PNDFSJdP+KFgdsG3ZzMXCgquO7I6McjY2vlqILjtJd0hy8wEvtugS9xKRF2NWlPNGxvLCXlTNIae4serI7dinw==} + engines: {node: '>=6.0.0'} + non-layered-tidy-tree-layout@2.0.2: resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==} @@ -9503,6 +10174,10 @@ packages: resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} engines: {node: '>=14.16'} + normalize-url@8.1.1: + resolution: {integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==} + engines: {node: '>=14.16'} + npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -9513,9 +10188,15 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nwsapi@2.2.23: + resolution: {integrity: sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==} + oauth-sign@0.9.0: resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + oauth4webapi@3.8.5: + resolution: {integrity: sha512-A8jmyUckVhRJj5lspguklcl90Ydqk61H3dcU0oLhH3Yv13KpAliKTt5hknpGGPZSSfOwGyraNEFmofDYH+1kSg==} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -9528,6 +10209,10 @@ packages: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -9617,6 +10302,9 @@ packages: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true + openid-client@6.8.3: + resolution: {integrity: sha512-AoY/NaN9esS3+xvHInFSK0g3skSfeE0uqQAKRj4rB6/GsBIvzwTUaYo9+HcqpKIaP0dP85p5W07hayKgS4GAeA==} + option@0.2.4: resolution: {integrity: sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A==} @@ -9628,6 +10316,10 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + ora@7.0.1: resolution: {integrity: sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==} engines: {node: '>=16'} @@ -9645,6 +10337,14 @@ packages: otlp-logger@1.1.10: resolution: {integrity: sha512-/8sCaoUJQ9Cqqz2bVTC5bfYeRs9SLIvr0BgPj4XXhD+1YuLhCDsBqVT8I9H8I4dnirSwgHcXjgQUNoAo889GqA==} + ow@0.28.2: + resolution: {integrity: sha512-dD4UpyBh/9m4X2NVjA+73/ZPBRF+uF4zIMFvvQsabMiEK8x41L3rQ8EENOi35kyyoaJwNxEeJcP6Fj1H4U409Q==} + engines: {node: '>=12'} + + ow@1.1.1: + resolution: {integrity: sha512-sJBRCbS5vh1Jp9EOgwp1Ws3c16lJrUkJYlvWTYC03oyiYVwS/ns7lKRWow4w4XjDyTrA2pplQv4B2naWSR6yDA==} + engines: {node: '>=14.16'} + own-keys@1.0.1: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} @@ -9656,6 +10356,10 @@ packages: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} + p-cancelable@4.0.1: + resolution: {integrity: sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==} + engines: {node: '>=14.16'} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -9664,10 +10368,6 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-limit@5.0.0: - resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} - engines: {node: '>=18'} - p-limit@7.2.0: resolution: {integrity: sha512-ATHLtwoTNDloHRFFxFJdHnG6n2WUeFjaR8XQMFdKIv0xkXjrER8/iG9iu265jOM95zXHAfv9oTkqhrfbIzosrQ==} engines: {node: '>=20'} @@ -9728,8 +10428,9 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} - parse-entities@1.2.2: - resolution: {integrity: sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==} + parent-require@1.0.0: + resolution: {integrity: sha512-2MXDNZC4aXdkkap+rBBMv0lUsfJqvX5/2FiYYnfCnorZt3Pk06/IOR5KeaoghgS2w07MLWgjbsnyaq6PdHn2LQ==} + engines: {node: '>= 0.4.0'} parse-entities@2.0.0: resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} @@ -9804,19 +10505,9 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - - pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} - engines: {node: '>= 14.16'} - pause-stream@0.0.11: resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} @@ -9931,9 +10622,6 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - pkg-types@1.3.1: - resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - pkg-up@3.1.0: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} engines: {node: '>=8'} @@ -10035,6 +10723,12 @@ packages: postgres-range@1.1.4: resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} + 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.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} @@ -10052,10 +10746,6 @@ packages: resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} engines: {node: ^14.13.1 || >=16.0.0} - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - pretty-ms@8.0.0: resolution: {integrity: sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==} engines: {node: '>=14.16'} @@ -10078,9 +10768,16 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + property-information@5.6.0: resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} @@ -10113,6 +10810,10 @@ packages: resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} engines: {node: '>= 14'} + proxy-chain@2.7.1: + resolution: {integrity: sha512-LtXu0miohJYrHWJxv8wA6EoGreRcX1hxKb7qlE1pMFH+BXE7bqMvpyhzR/JvR6M5SzYKzyHFpvfmYJrZeMtwAg==} + engines: {node: '>=14'} + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -10130,6 +10831,23 @@ packages: resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} engines: {node: '>=12.20'} + puppeteer-core@23.11.1: + resolution: {integrity: sha512-3HZ2/7hdDKZvZQ7dhhITOUg4/wOrDRjyK2ZBllRB0ZCOi9u0cwq1ACHDjBB+nX+7+kltHjQvBRdeY7+W0T+7Gg==} + engines: {node: '>=18'} + + puppeteer@23.11.1: + resolution: {integrity: sha512-53uIX3KR5en8l7Vd8n5DUv90Ae9QDQsyIthaUFVzwV6yU750RjqRznEtNMBT20VthqAdemnJN+hxVdmMHKt7Zw==} + engines: {node: '>=18'} + deprecated: < 24.15.0 is no longer supported + hasBin: true + + pvtsutils@1.3.6: + resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} + + pvutils@1.1.5: + resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} + engines: {node: '>=16.0.0'} + qrcode@1.5.4: resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} engines: {node: '>=10.13.0'} @@ -10143,6 +10861,10 @@ packages: resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} engines: {node: '>=0.6'} + qs@6.15.1: + resolution: {integrity: sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==} + engines: {node: '>=0.6'} + qs@6.5.3: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} @@ -10164,6 +10886,10 @@ packages: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} + quick-lru@7.3.0: + resolution: {integrity: sha512-k9lSsjl36EJdK7I06v7APZCbyGT2vMTsYSRX1Q2nbYmnkBqgUhRkAuzH08Ciotteu/PLJmIF2+tti7o3C/ts2g==} + engines: {node: '>=18'} + radix-vue@1.9.17: resolution: {integrity: sha512-mVCu7I2vXt1L2IUYHTt0sZMz7s1K2ZtqKeTIxG3yC5mMFfLBG4FtE1FDeRMpDd+Hhg/ybi9+iXmAP1ISREndoQ==} peerDependencies: @@ -10192,30 +10918,30 @@ packages: resolution: {integrity: sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ==} deprecated: 'react-beautiful-dnd is now deprecated. Context and options: https://github.com/atlassian/react-beautiful-dnd/issues/2672' peerDependencies: - react: ^16.8.5 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.5 || ^17.0.0 || ^18.0.0 + react: ^18 + react-dom: ^18 react-clientside-effect@1.2.7: resolution: {integrity: sha512-gce9m0Pk/xYYMEojRI9bgvqQAkl6hm7ozQvqWPyQx+kULiatdHgkNM1QG4DQRx5N9BAzWSCJmt9mMV8/KsdgVg==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react: ^18 react-day-picker@9.14.0: resolution: {integrity: sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==} engines: {node: '>=18'} peerDependencies: - react: '>=16.8.0' + react: ^18 react-dom@18.3.1: resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: - react: ^18.3.1 + react: ^18 react-error-boundary@3.1.4: resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==} engines: {node: '>=10', npm: '>=6'} peerDependencies: - react: '>=16.13.1' + react: ^18 react-fast-compare@3.2.2: resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} @@ -10223,8 +10949,8 @@ packages: react-focus-lock@2.13.6: resolution: {integrity: sha512-ehylFFWyYtBKXjAO9+3v8d0i+cnc1trGS0vlTGhzFW1vbFXVUTmR8s2tt/ZQG8x5hElg6rhENlLG1H3EZK0Llg==} peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + '@types/react': ^18 + react: ^18 peerDependenciesMeta: '@types/react': optional: true @@ -10233,13 +10959,13 @@ packages: resolution: {integrity: sha512-+s3+s8LLytRMriwwuSqeLStVjRXFGxgjjx2jED7Z+wz1J/88vpxieRQGvJVvzrzVxshZ0BRuocFERb779m2kNg==} engines: {node: '>=12.22.0'} peerDependencies: - react: ^16.8.0 || ^17 || ^18 + react: ^18 react-i18next@14.1.2: resolution: {integrity: sha512-FSIcJy6oauJbGEXfhUgVeLzvWBhIBIS+/9c6Lj4niwKZyGaGb4V4vUbATXSlsHJDXXB+ociNxqFNiFuV1gmoqg==} peerDependencies: i18next: '>= 23.2.3' - react: '>= 16.8.0' + react: ^18 react-dom: '*' react-native: '*' peerDependenciesMeta: @@ -10260,19 +10986,19 @@ packages: react-markdown@9.1.0: resolution: {integrity: sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw==} peerDependencies: - '@types/react': '>=18' - react: '>=18' + '@types/react': ^18 + react: ^18 react-photo-view@1.2.7: resolution: {integrity: sha512-MfOWVPxuibncRLaycZUNxqYU8D9IA+rbGDDaq6GM8RIoGJal592hEJoRAyRSI7ZxyyJNJTLMUWWL3UIXHJJOpw==} peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' + react: ^18 + react-dom: ^18 react-redux@7.2.9: resolution: {integrity: sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==} peerDependencies: - react: ^16.8.3 || ^17 || ^18 + react: ^18 react-dom: '*' react-native: '*' peerDependenciesMeta: @@ -10285,8 +11011,8 @@ packages: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@types/react': ^18 + react: ^18 peerDependenciesMeta: '@types/react': optional: true @@ -10295,8 +11021,8 @@ packages: resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + '@types/react': ^18 + react: ^18 peerDependenciesMeta: '@types/react': optional: true @@ -10304,15 +11030,15 @@ packages: react-smooth@4.0.4: resolution: {integrity: sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==} peerDependencies: - 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: ^18 + react-dom: ^18 react-style-singleton@2.2.3: resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + '@types/react': ^18 + react: ^18 peerDependenciesMeta: '@types/react': optional: true @@ -10320,19 +11046,19 @@ packages: react-syntax-highlighter@15.6.1: resolution: {integrity: sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==} peerDependencies: - react: '>= 0.14.0' + react: ^18 react-textarea-autosize@8.5.8: resolution: {integrity: sha512-iUiIj70JefrTuSJ4LbVFiSqWiHHss5L63L717bqaWHMgkm9sz6eEvro4vZ3uQfGJbevzwT6rHOszHKA8RkhRMg==} engines: {node: '>=10'} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^18 react-transition-group@4.4.5: resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: - react: '>=16.6.0' - react-dom: '>=16.6.0' + react: ^18 + react-dom: ^18 react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} @@ -10341,8 +11067,8 @@ packages: reactflow@11.11.4: resolution: {integrity: sha512-70FOtJkUWH3BAOsN+LU9lCrKoKbtOPnz2uq0CV2PLdNSwxTXOhCbsZr50GmZ+Rtw3jx8Uv7/vBFtCGixLfd4Og==} peerDependencies: - react: '>=17' - react-dom: '>=17' + react: ^18 + react-dom: ^18 read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} @@ -10383,8 +11109,8 @@ packages: resolution: {integrity: sha512-v8PUTUlyiDe56qUj82w/EDVuzEFXwEHp9/xOowGAZwfLjB9uAy3GllQVIYMWF6nU+qibx85WF75zD7AjqoT54Q==} engines: {node: '>=14'} peerDependencies: - react: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^18 + react-dom: ^18 redis-errors@1.2.0: resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} @@ -10397,6 +11123,9 @@ packages: redux@4.2.1: resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + reflect.getprototypeof@1.0.10: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} @@ -10464,9 +11193,6 @@ packages: remark-breaks@4.0.0: resolution: {integrity: sha512-IjEjJOkH4FuJvHZVIW0QCDWxcG96kCq7An/KVH2NfJe6rKZU2AsHeB3OEjPNRxi4QC34Xdx7I2KGYn6IpT7gxQ==} - remark-frontmatter@1.3.3: - resolution: {integrity: sha512-fM5eZPBvu2pVNoq3ZPW22q+5Ativ1oLozq2qYt9I2oNyxiUd/tDl0iLLntEVAegpZIslPWg1brhcP1VsaSVUag==} - remark-gfm@4.0.1: resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} @@ -10476,19 +11202,12 @@ packages: remark-parse@11.0.0: resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - remark-parse@7.0.2: - resolution: {integrity: sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA==} - remark-rehype@11.1.1: resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} - repeat-string@1.6.1: - resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} - engines: {node: '>=0.10'} - request-ip@3.3.0: resolution: {integrity: sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA==} @@ -10517,10 +11236,18 @@ packages: resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} @@ -10542,10 +11269,22 @@ packages: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} + responselike@4.0.2: + resolution: {integrity: sha512-cGk8IbWEAnaCpdAt1BHzJ3Ahz5ewDJa0KseTsE3qIRMJ3C698W8psM7byCeWVpd/Ha7FUYzuRVzXoKoM6nRUbA==} + engines: {node: '>=20'} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + restore-cursor@4.0.0: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -10554,6 +11293,9 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rfc4648@1.5.4: + resolution: {integrity: sha512-rRg/6Lb+IGfJqO05HZkN50UtY7K/JhxJag1kP23+zyMfrvoB0B7RWv06MbOzoc79RgCdNTiUaNsTT1AJZ7Z+cg==} + rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} @@ -10562,6 +11304,10 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + robots-parser@3.0.1: + resolution: {integrity: sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==} + engines: {node: '>=10.0.0'} + robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} @@ -10598,12 +11344,26 @@ packages: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} + rrweb-cssom@0.8.0: + resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} rw@1.3.3: resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -10641,6 +11401,10 @@ packages: sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} @@ -10675,16 +11439,6 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true - - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.4: resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} @@ -10775,6 +11529,12 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + 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==} @@ -10790,10 +11550,20 @@ packages: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} + sm3@1.0.3: + resolution: {integrity: sha512-KyFkIfr8QBlFG3uc3NaljaXdYcsbRy1KrSfc4tsQV8jW68jAktGeOcifu530Vx/5LC+PULHT0Rv8LiI8Gw+c1g==} + smart-buffer@4.2.0: 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==} + + snakecase-keys@8.1.0: + resolution: {integrity: sha512-9/Eug2btrCiOi+9+vIXJnxUcKVfcbLy5Uwff4BrO6PQf3Oq/2iYQ/1zkmnrpIIjfel/DAasAlux7OvAmCa+Xnw==} + engines: {node: '>=18'} + socks-proxy-agent@5.0.1: resolution: {integrity: sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==} engines: {node: '>= 6'} @@ -10841,6 +11611,9 @@ packages: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} + split@0.3.3: + resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -10851,6 +11624,10 @@ packages: resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} engines: {node: '>= 0.6'} + sse-decoder@1.0.0: + resolution: {integrity: sha512-JPopy3jfNmPcUz5Ru6skKhHNRJbsvcEW6Z4SirKkucLS8Jya1Bmf4FVX8giOkLm8xQJ7kK68P6GXoVSTkbedUA==} + engines: {node: '>= 14.19.3'} + sshpk@1.18.0: resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} engines: {node: '>=0.10.0'} @@ -10875,9 +11652,6 @@ packages: state-local@1.0.7: resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} - state-toggle@1.0.3: - resolution: {integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==} - statuses@1.5.0: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} @@ -10890,11 +11664,8 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - - std-env@3.8.1: - resolution: {integrity: sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==} + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} stdin-discarder@0.1.0: resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} @@ -10907,9 +11678,16 @@ packages: stream-browserify@3.0.0: resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + stream-buffers@3.0.3: + resolution: {integrity: sha512-pqMqwQCso0PBJt2PQmDO0cFj0lyqmiwOMiMSkVtRokl7e+ZTRYgDHKnuZNbqjiJXgsg4nuqtD/zxuo9KqTp0Yw==} + engines: {node: '>= 0.10.0'} + stream-chain@2.2.5: resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} + stream-combiner@0.0.4: + resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} + stream-http@2.8.2: resolution: {integrity: sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==} @@ -10927,6 +11705,9 @@ packages: streamx@2.22.0: resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} + streamx@2.25.0: + resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==} + strict-uri-encode@2.0.0: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} @@ -10935,6 +11716,10 @@ packages: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} + string-comparison@1.3.0: + resolution: {integrity: sha512-46aD+slEwybxAMPRII83ATbgMgTiz5P8mVd7Z6VJsCzSHFjdt1hkAVLeFxPIyEb11tc6ihpJTlIqoO0MCF6NPw==} + engines: {node: ^16.0.0 || >=18.0.0} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -10986,6 +11771,10 @@ packages: resolution: {integrity: sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg==} engines: {node: '>=14.16'} + strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -11013,9 +11802,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strip-literal@2.1.1: - resolution: {integrity: sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==} - strnum@1.1.2: resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} @@ -11044,7 +11830,7 @@ packages: peerDependencies: '@babel/core': '*' babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + react: ^18 peerDependenciesMeta: '@babel/core': optional: true @@ -11062,6 +11848,10 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true + supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -11082,6 +11872,9 @@ packages: engines: {node: '>=10.13.0'} hasBin: true + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} @@ -11097,13 +11890,20 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - tailwindcss@4.1.14: - resolution: {integrity: sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA==} + tar-fs@2.1.4: + resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} + + tar-fs@3.1.2: + resolution: {integrity: sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==} tar-stream@1.6.2: resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==} engines: {node: '>= 0.8.0'} + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} @@ -11111,15 +11911,14 @@ packages: resolution: {integrity: sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==} engines: {node: '>=18'} + teex@1.0.1: + resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} + terser@5.39.0: resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} engines: {node: '>=10'} hasBin: true - test-exclude@7.0.1: - resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} - engines: {node: '>=18'} - text-decoder@1.2.3: resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} @@ -11158,16 +11957,12 @@ packages: resolution: {integrity: sha512-hkcz3FjNJfKXjV4mjQ1OrXSLAehg8Hw+cEZclOVT+5c/cWQWImQ9wolzTjth+dmmDe++p3bme3fTxz6Q4Etsqw==} engines: {node: '>=12'} + tiny-typed-emitter@2.1.0: + resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - - tinyexec@1.0.2: - resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} - engines: {node: '>=18'} - tinyexec@1.0.4: resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} engines: {node: '>=18'} @@ -11176,33 +11971,23 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tinypool@0.8.4: - resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} - tinypool@1.0.2: - resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} - engines: {node: ^18.0.0 || >=20.0.0} + tldts-core@6.1.86: + resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} - tinyrainbow@1.2.0: - resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} - engines: {node: '>=14.0.0'} + tldts-core@7.0.28: + resolution: {integrity: sha512-7W5Efjhsc3chVdFhqtaU0KtK32J37Zcr9RKtID54nG+tIpcY79CQK/veYPODxtD/LJ4Lue66jvrQzIX2Z2/pUQ==} - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} + tldts@6.1.86: + resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} + hasBin: true - tinyrainbow@3.0.3: - resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} - engines: {node: '>=14.0.0'} - - tinyspy@2.2.1: - resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} - engines: {node: '>=14.0.0'} - - tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} - engines: {node: '>=14.0.0'} + tldts@7.0.28: + resolution: {integrity: sha512-+Zg3vWhRUv8B1maGSTFdev9mjoo8Etn2Ayfs4cnjlD3CsGkxXX4QyW3j2WJ0wdjYcYmy7Lx2RDsZMhgCWafKIw==} + hasBin: true to-arraybuffer@1.0.1: resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==} @@ -11233,6 +12018,14 @@ packages: resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} engines: {node: '>=0.8'} + tough-cookie@5.1.2: + resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + engines: {node: '>=16'} + + tough-cookie@6.0.1: + resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==} + engines: {node: '>=16'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -11247,20 +12040,10 @@ packages: trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - trim-trailing-lines@1.1.4: - resolution: {integrity: sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==} - - trim@0.0.1: - resolution: {integrity: sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==} - deprecated: Use String.prototype.trim() instead - triple-beam@1.4.1: resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} engines: {node: '>= 14.0.0'} - trough@1.0.5: - resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} - trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} @@ -11273,6 +12056,12 @@ packages: peerDependencies: typescript: '>=4.2.0' + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} @@ -11315,6 +12104,9 @@ packages: unplugin-unused: optional: true + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + tslib@2.3.0: resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} @@ -11329,6 +12121,10 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + tsyringe@4.10.0: + resolution: {integrity: sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==} + engines: {node: '>= 6.0.0'} + tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} @@ -11336,12 +12132,19 @@ packages: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} + turbo@2.9.6: + resolution: {integrity: sha512-+v2QJey7ZUeUiuigkU+uFfklvNUyPI2VO2vBpMYJA+a1hKFLFiKtUYlRHdb3P9CrAvMzi0upbjI4WT+zKtqkBg==} + hasBin: true + turndown@7.2.0: resolution: {integrity: sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A==} tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + type-check@0.3.2: resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} engines: {node: '>= 0.8.0'} @@ -11350,14 +12153,14 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-detect@4.1.0: - resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} - engines: {node: '>=4'} - 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'} + type-fest@1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} @@ -11366,6 +12169,10 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + type-fest@5.0.0: resolution: {integrity: sha512-GeJop7+u7BYlQ6yQCAY1nBQiRSHR+6OdCEtd8Bwp9a3NK3+fWAVjOaPKJDteB9f6cIJ0wt4IfnScjLG450EpXA==} engines: {node: '>=20'} @@ -11394,24 +12201,22 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} + typed-query-selector@2.12.1: + resolution: {integrity: sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA==} + typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typescript@5.8.2: - resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} - engines: {node: '>=14.17'} - hasBin: true - typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true - ufo@1.5.4: - resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + uhyphen@0.2.0: + resolution: {integrity: sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==} uint8array-extras@1.4.0: resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} @@ -11457,9 +12262,6 @@ packages: unhead@1.11.20: resolution: {integrity: sha512-3AsNQC0pjwlLqEYHLjtichGWankK8yqmocReITecmpB1H0aOabeESueyy+8X1gyJx4ftZVwo9hqQ4O3fPWffCA==} - unherit@1.1.3: - resolution: {integrity: sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==} - unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} @@ -11479,9 +12281,6 @@ packages: unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - unified@8.4.2: - resolution: {integrity: sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==} - unique-string@3.0.0: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} engines: {node: '>=12'} @@ -11489,39 +12288,24 @@ packages: unist-util-find-after@5.0.0: resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} - unist-util-is@3.0.0: - resolution: {integrity: sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==} - unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} unist-util-position@5.0.0: resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} - unist-util-remove-position@1.1.4: - resolution: {integrity: sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==} - unist-util-remove-position@5.0.0: resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} - unist-util-stringify-position@2.0.3: - resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} - unist-util-stringify-position@3.0.3: resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - unist-util-visit-parents@2.1.2: - resolution: {integrity: sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==} - unist-util-visit-parents@6.0.1: resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} - unist-util-visit@1.4.1: - resolution: {integrity: sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==} - unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} @@ -11529,6 +12313,10 @@ packages: 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'} + unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -11549,6 +12337,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + update-notifier@6.0.2: resolution: {integrity: sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==} engines: {node: '>=14.16'} @@ -11565,12 +12359,16 @@ packages: proxy-agent: optional: true + urllib@4.9.0: + resolution: {integrity: sha512-Rp3DBvVqy9arSTMH6oN5N7OAN01U3dQ2xc19AadP86MzC4j67MDeqOup5shpWnjkDVGWfLfWPOd8CyqOtd6u3w==} + engines: {node: '>= 18.19.0'} + use-callback-ref@1.3.3: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + '@types/react': ^18 + react: ^18 peerDependenciesMeta: '@types/react': optional: true @@ -11579,7 +12377,7 @@ packages: resolution: {integrity: sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==} peerDependencies: '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^18 peerDependenciesMeta: '@types/react': optional: true @@ -11587,8 +12385,8 @@ packages: use-context-selector@1.4.4: resolution: {integrity: sha512-pS790zwGxxe59GoBha3QYOwk8AFGp4DN6DOtH+eoqVmgBBRXVx4IlPDhJmmMiNQAgUaLlP+58aqRC3A4rdaSjg==} peerDependencies: - react: '>=16.8.0' - react-dom: '*' + react: ^18 + react-dom: ^18 react-native: '*' scheduler: '>=0.19.0' peerDependenciesMeta: @@ -11601,7 +12399,7 @@ packages: resolution: {integrity: sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==} peerDependencies: '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^18 peerDependenciesMeta: '@types/react': optional: true @@ -11610,7 +12408,7 @@ packages: resolution: {integrity: sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==} peerDependencies: '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^18 peerDependenciesMeta: '@types/react': optional: true @@ -11618,14 +12416,14 @@ packages: use-memo-one@1.1.3: resolution: {integrity: sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^18 use-sidecar@1.1.3: resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + '@types/react': ^18 + react: ^18 peerDependenciesMeta: '@types/react': optional: true @@ -11633,15 +12431,26 @@ packages: use-sync-external-store@1.4.0: resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^18 + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + utility@1.18.0: resolution: {integrity: sha512-PYxZDA+6QtvRvm//++aGdmKG/cI07jNwbROz0Ql+VzFV1+Z0Dy55NI4zZ7RHc9KKpBePNFwoErqIuqQv/cjiTA==} engines: {node: '>= 0.12.0'} + utility@2.5.0: + resolution: {integrity: sha512-lDbOVde5UAKgtxrSyZNhqrTA7f7anba6DTqbsDWgUFk6PZlmr7djqPYw0FnL5a6TbJvRt38VmYqt07zVLzXG2A==} + engines: {node: '>= 16.0.0'} + utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} @@ -11664,6 +12473,10 @@ packages: engines: {node: '>=8'} hasBin: true + vali-date@1.0.0: + resolution: {integrity: sha512-sgECfZthyaCKW10N0fm27cg8HYTFK5qMWgypqkXMQ4Wbl/zZKx7xZICgcoxIIE+WFAP/MBL2EFwC/YvLxw3Zeg==} + engines: {node: '>=0.10.0'} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -11672,73 +12485,18 @@ packages: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} - vfile-location@2.0.6: - resolution: {integrity: sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==} - vfile-location@5.0.3: resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} - vfile-message@2.0.4: - resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} - vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} - vfile@4.2.1: - resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} - vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} victory-vendor@36.9.2: resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==} - vite-node@1.6.1: - resolution: {integrity: sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - - vite-node@2.1.9: - resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - - vite-node@3.1.1: - resolution: {integrity: sha512-V+IxPAE2FvXpTCHXyNem0M+gWm6J7eRyWPR6vYoG/Gl+IscNOjXzztUhimQgTxaAoUoj40Qqimaa0NLIOOAH4w==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - - vite@5.4.14: - resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - vite@6.2.2: resolution: {integrity: sha512-yW7PeMM+LkDzc7CgJuRLMW2Jz0FxMOsVJ8Lv3gpgW9WLcb9cTW+121UEr1hvmfR7w3SegR5ItvYyzVz1vxNJgQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -11779,98 +12537,23 @@ packages: yaml: optional: true - vitest@1.6.1: - resolution: {integrity: sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 1.6.1 - '@vitest/ui': 1.6.1 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - - vitest@2.1.9: - resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.9 - '@vitest/ui': 2.1.9 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - - vitest@3.1.1: - resolution: {integrity: sha512-kiZc/IYmKICeBAZr9DQ5rT7/6bD9G7uqQEki4fxazi1jdVl2mWGzedtBs5s6llz59yQhVb7FFY2MbHzHCnT79Q==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.1.1 - '@vitest/ui': 3.1.1 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/debug': - optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - - vitest@4.0.16: - resolution: {integrity: sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==} + vitest@4.1.5: + resolution: {integrity: sha512-9Xx1v3/ih3m9hN+SbfkUyy0JAs72ap3r7joc87XL6jwF0jGg6mFBvQ1SrwaX+h8BlkX6Hz9shdd1uo6AF+ZGpg==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.16 - '@vitest/browser-preview': 4.0.16 - '@vitest/browser-webdriverio': 4.0.16 - '@vitest/ui': 4.0.16 + '@vitest/browser-playwright': 4.1.5 + '@vitest/browser-preview': 4.1.5 + '@vitest/browser-webdriverio': 4.1.5 + '@vitest/coverage-istanbul': 4.1.5 + '@vitest/coverage-v8': 4.1.5 + '@vitest/ui': 4.1.5 happy-dom: '*' jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -11884,6 +12567,10 @@ packages: optional: true '@vitest/browser-webdriverio': optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true '@vitest/ui': optional: true happy-dom: @@ -11928,14 +12615,6 @@ packages: vue-sonner@1.3.2: resolution: {integrity: sha512-UbZ48E9VIya3ToiRHAZUbodKute/z/M1iT8/3fU8zEbwBRE11AKuHikssv18LMk2gTTr6eMQT4qf6JoLHWuj/A==} - vue@3.5.13: - resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - vue@3.5.22: resolution: {integrity: sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==} peerDependencies: @@ -11947,6 +12626,13 @@ packages: w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -11973,6 +12659,11 @@ packages: engines: {node: '>= 10.13.0'} hasBin: true + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation + whatwg-mimetype@4.0.0: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} @@ -12085,6 +12776,17 @@ packages: engines: {node: '>=0.8'} hasBin: true + xml-crypto@6.1.2: + resolution: {integrity: sha512-leBOVQdVi8FvPJrMYoum7Ici9qyxfE4kVi+AkpUoYCSXaQF4IlBm1cneTK9oAxR61LpYxTx7lNcsnBIeRpGW2w==} + engines: {node: '>=16'} + + xml-encryption@3.1.0: + resolution: {integrity: sha512-PV7qnYpoAMXbf1kvQkqMScLeQpjCMixddAKq9PtqVrho8HnYbBOWNfG0kA4R7zxQDo7w9kiYAyzS/ullAyO55Q==} + + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + xml2js@0.6.2: resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} engines: {node: '>=4.0.0'} @@ -12097,6 +12799,25 @@ packages: resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} engines: {node: '>=4.0'} + xmlbuilder@15.1.1: + resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} + engines: {node: '>=8.0'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + + xpath@0.0.32: + resolution: {integrity: sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw==} + engines: {node: '>=0.6.0'} + + xpath@0.0.33: + resolution: {integrity: sha512-NNXnzrkDrAzalLhIUc01jO2mOzXGXh1JwPgkihcLLzw98c0WgYDmmjSh1Kl3wzaxSVWMuA+fe0WTWOBDWCBmNA==} + engines: {node: '>=0.6.0'} + + xpath@0.0.34: + resolution: {integrity: sha512-FxF6+rkr1rNSQrhUNYrAFJpRXNzlDoMxeXN5qI84939ylEv3qqPFKa85Oxr6tDaJKqwW6KKyo2v26TSv3k6LeA==} + engines: {node: '>=0.6.0'} + xregexp@2.0.0: resolution: {integrity: sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==} @@ -12136,6 +12857,9 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yargonaut@1.1.4: + resolution: {integrity: sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA==} + yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -12163,25 +12887,25 @@ packages: resolution: {integrity: sha512-xn/pYLTZa3uD1uDG8lpxfLRo5SR/rp0frdASOl2a71aYNvUXdWcLtVL91s2y7j+Q8ppmjZ9H3jsGVgoFMbT2VA==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} + ylru@2.0.0: + resolution: {integrity: sha512-T6hTrKcr9lKeUG0MQ/tO72D3UGptWVohgzpHG8ljU1jeBt2RCjcWxvsTPD8ZzUq1t1FvwROAw1kxg2euvg/THg==} + engines: {node: '>= 18.19.0'} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.2.0: - resolution: {integrity: sha512-KHBC7z61OJeaMGnF3wqNZj+GGNXOyypZviiKpQeiHirG5Ib1ImwcLBH70rbMSkKfSmUNBsdf2PwaEJtKvgmkNw==} - engines: {node: '>=12.20'} - yocto-queue@1.2.1: resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} engines: {node: '>=12.20'} + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} + engines: {node: '>=18'} + zhead@2.2.4: resolution: {integrity: sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag==} - zhlint@0.7.4: - resolution: {integrity: sha512-E1rA6TyQJ1cWWfMoM8KE1hMdDDi5B8Gv+8OYPXe733Lf0C3EwJ+jh1cpoK/KTrYeITumRZQ0KSPkBRMNZuC8oA==} - hasBin: true - zip-stream@6.0.1: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} @@ -12203,6 +12927,9 @@ packages: peerDependencies: zod: ^3.18.0 + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + zod@3.24.1: resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} @@ -12225,9 +12952,9 @@ packages: resolution: {integrity: sha512-ibr/n1hBzLLj5Y+yUcU7dYw8p6WnIVzdJbnX+1YpaScvZVF2ziugqHs+LAmHw4lWO9c/zRj+K1ncgWDQuthEdQ==} engines: {node: '>=12.7.0'} peerDependencies: - '@types/react': '>=16.8' + '@types/react': ^18 immer: '>=9.0.6' - react: '>=16.8' + react: ^18 peerDependenciesMeta: '@types/react': optional: true @@ -12244,7 +12971,90 @@ snapshots: '@alibaba-group/opensandbox@0.1.6': dependencies: openapi-fetch: 0.14.1 - undici: 7.18.2 + undici: 7.25.0 + + '@alicloud/credentials@2.4.4': + dependencies: + '@alicloud/tea-typescript': 1.8.0 + httpx: 2.3.3 + ini: 1.3.8 + kitx: 2.2.0 + transitivePeerDependencies: + - supports-color + + '@alicloud/dysmsapi20170525@2.0.24': + dependencies: + '@alicloud/endpoint-util': 0.0.1 + '@alicloud/openapi-client': 0.4.15 + '@alicloud/openapi-util': 0.3.3 + '@alicloud/tea-typescript': 1.8.0 + '@alicloud/tea-util': 1.4.11 + transitivePeerDependencies: + - supports-color + + '@alicloud/endpoint-util@0.0.1': + dependencies: + '@alicloud/tea-typescript': 1.8.0 + kitx: 2.2.0 + transitivePeerDependencies: + - supports-color + + '@alicloud/gateway-spi@0.0.8': + dependencies: + '@alicloud/credentials': 2.4.4 + '@alicloud/tea-typescript': 1.8.0 + transitivePeerDependencies: + - supports-color + + '@alicloud/openapi-client@0.4.15': + dependencies: + '@alicloud/credentials': 2.4.4 + '@alicloud/gateway-spi': 0.0.8 + '@alicloud/openapi-util': 0.3.3 + '@alicloud/tea-typescript': 1.8.0 + '@alicloud/tea-util': 1.4.9 + '@alicloud/tea-xml': 0.0.3 + transitivePeerDependencies: + - supports-color + + '@alicloud/openapi-util@0.3.3': + dependencies: + '@alicloud/tea-typescript': 1.8.0 + '@alicloud/tea-util': 1.4.11 + kitx: 2.2.0 + sm3: 1.0.3 + transitivePeerDependencies: + - supports-color + + '@alicloud/tea-typescript@1.8.0': + dependencies: + '@types/node': 12.20.55 + httpx: 2.3.3 + transitivePeerDependencies: + - supports-color + + '@alicloud/tea-util@1.4.11': + dependencies: + '@alicloud/tea-typescript': 1.8.0 + '@darabonba/typescript': 1.0.4 + kitx: 2.2.0 + transitivePeerDependencies: + - supports-color + + '@alicloud/tea-util@1.4.9': + dependencies: + '@alicloud/tea-typescript': 1.8.0 + kitx: 2.2.0 + transitivePeerDependencies: + - supports-color + + '@alicloud/tea-xml@0.0.3': + dependencies: + '@alicloud/tea-typescript': 1.8.0 + '@types/xml2js': 0.4.14 + xml2js: 0.6.2 + transitivePeerDependencies: + - supports-color '@alloc/quick-lru@5.2.0': {} @@ -12280,6 +13090,38 @@ snapshots: call-me-maybe: 1.0.2 openapi-types: 12.1.3 + '@apify/consts@2.52.1': {} + + '@apify/datastructures@2.0.4': {} + + '@apify/log@2.5.35': + dependencies: + '@apify/consts': 2.52.1 + ansi-colors: 4.1.3 + + '@apify/ps-tree@1.2.0': + dependencies: + event-stream: 3.3.4 + + '@apify/pseudo_url@2.0.76': + dependencies: + '@apify/log': 2.5.35 + + '@apify/timeout@0.3.3': {} + + '@apify/utilities@2.27.0': + dependencies: + '@apify/consts': 2.52.1 + '@apify/log': 2.5.35 + + '@asamuzakjp/css-color@3.2.0': + dependencies: + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + lru-cache: 10.4.3 + '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 @@ -13140,7 +13982,7 @@ snapshots: '@babel/code-frame@7.26.2': dependencies: - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 @@ -13154,10 +13996,10 @@ snapshots: '@babel/helper-compilation-targets': 7.26.5 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) '@babel/helpers': 7.26.10 - '@babel/parser': 7.26.10 + '@babel/parser': 7.29.2 '@babel/template': 7.26.9 '@babel/traverse': 7.26.10 - '@babel/types': 7.26.10 + '@babel/types': 7.29.0 convert-source-map: 2.0.0 debug: 4.4.3 gensync: 1.0.0-beta.2 @@ -13168,8 +14010,8 @@ snapshots: '@babel/generator@7.26.10': dependencies: - '@babel/parser': 7.26.10 - '@babel/types': 7.26.10 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 @@ -13185,13 +14027,13 @@ snapshots: '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 '@babel/helper-compilation-targets@7.26.5': dependencies: '@babel/compat-data': 7.26.8 '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.4 + browserslist: 4.28.2 lru-cache: 5.1.1 semver: 6.3.1 @@ -13229,14 +14071,14 @@ snapshots: '@babel/helper-member-expression-to-functions@7.25.9': dependencies: '@babel/traverse': 7.26.10 - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.25.9': dependencies: '@babel/traverse': 7.26.10 - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -13244,14 +14086,14 @@ snapshots: dependencies: '@babel/core': 7.26.10 '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-validator-identifier': 7.28.5 '@babel/traverse': 7.26.10 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.25.9': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 '@babel/helper-plugin-utils@7.26.5': {} @@ -13276,18 +14118,14 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: '@babel/traverse': 7.26.10 - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.25.9': {} - '@babel/helper-string-parser@7.27.1': {} '@babel/helper-string-parser@8.0.0-rc.2': {} - '@babel/helper-validator-identifier@7.25.9': {} - '@babel/helper-validator-identifier@7.28.5': {} '@babel/helper-validator-identifier@8.0.0-rc.2': {} @@ -13298,22 +14136,18 @@ snapshots: dependencies: '@babel/template': 7.26.9 '@babel/traverse': 7.26.10 - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helpers@7.26.10': dependencies: '@babel/template': 7.26.9 - '@babel/types': 7.26.10 + '@babel/types': 7.29.0 - '@babel/parser@7.26.10': + '@babel/parser@7.29.2': dependencies: - '@babel/types': 7.26.10 - - '@babel/parser@7.28.5': - dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 '@babel/parser@8.0.0-rc.2': dependencies: @@ -13546,7 +14380,7 @@ snapshots: '@babel/core': 7.26.10 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-validator-identifier': 7.28.5 '@babel/traverse': 7.26.10 transitivePeerDependencies: - supports-color @@ -13659,7 +14493,7 @@ snapshots: '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) - '@babel/types': 7.26.10 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -13827,7 +14661,7 @@ snapshots: dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 - '@babel/types': 7.26.10 + '@babel/types': 7.29.0 esutils: 2.0.3 '@babel/preset-react@7.26.3(@babel/core@7.26.10)': @@ -13860,27 +14694,22 @@ snapshots: '@babel/template@7.26.9': dependencies: '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.10 - '@babel/types': 7.26.10 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 '@babel/traverse@7.26.10': dependencies: '@babel/code-frame': 7.26.2 '@babel/generator': 7.26.10 - '@babel/parser': 7.26.10 + '@babel/parser': 7.29.2 '@babel/template': 7.26.9 - '@babel/types': 7.26.10 + '@babel/types': 7.29.0 debug: 4.4.3 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.26.10': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - - '@babel/types@7.28.5': + '@babel/types@7.29.0': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 @@ -13906,11 +14735,11 @@ snapshots: '@chakra-ui/anatomy@2.3.6': {} - '@chakra-ui/cli@2.5.8(react@18.3.1)(ws@8.20.0)': + '@chakra-ui/cli@2.5.8(encoding@0.1.13)(react@18.3.1)(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))': dependencies: bundle-n-require: 1.1.2 chokidar: 3.6.0 - cli-welcome: 2.2.3(react@18.3.1)(ws@8.20.0) + cli-welcome: 2.2.3(encoding@0.1.13)(react@18.3.1)(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) commander: 11.1.0 ora: 7.0.1 prettier: 3.2.4 @@ -13945,12 +14774,12 @@ snapshots: '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/next-js@2.4.2(@chakra-ui/react@2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@16.2.1(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react@18.3.1)': + '@chakra-ui/next-js@2.4.2(@chakra-ui/react@2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@16.2.4(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react@18.3.1)': dependencies: '@chakra-ui/react': 2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@emotion/cache': 11.14.0 '@emotion/react': 11.11.1(@types/react@18.3.1)(react@18.3.1) - next: 16.2.1(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1) + next: 16.2.4(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1) react: 18.3.1 '@chakra-ui/object-utils@2.1.0': {} @@ -14175,6 +15004,265 @@ snapshots: dependencies: '@bufbuild/protobuf': 2.11.0 + '@crawlee/basic@3.16.0': + dependencies: + '@apify/log': 2.5.35 + '@apify/timeout': 0.3.3 + '@apify/utilities': 2.27.0 + '@crawlee/core': 3.16.0 + '@crawlee/types': 3.16.0 + '@crawlee/utils': 3.16.0 + csv-stringify: 6.7.0 + fs-extra: 11.3.4 + got-scraping: 4.2.1 + ow: 0.28.2 + tldts: 7.0.28 + tslib: 2.8.1 + type-fest: 4.41.0 + transitivePeerDependencies: + - supports-color + + '@crawlee/browser-pool@3.16.0(puppeteer@23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))': + dependencies: + '@apify/log': 2.5.35 + '@apify/timeout': 0.3.3 + '@crawlee/core': 3.16.0 + '@crawlee/types': 3.16.0 + fingerprint-generator: 2.1.82 + fingerprint-injector: 2.1.82(puppeteer@23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) + lodash.merge: 4.6.2 + nanoid: 3.3.11 + ow: 0.28.2 + p-limit: 3.1.0 + proxy-chain: 2.7.1 + quick-lru: 5.1.1 + tiny-typed-emitter: 2.1.0 + tslib: 2.8.1 + optionalDependencies: + puppeteer: 23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - supports-color + + '@crawlee/browser@3.16.0(puppeteer@23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))': + dependencies: + '@apify/timeout': 0.3.3 + '@crawlee/basic': 3.16.0 + '@crawlee/browser-pool': 3.16.0(puppeteer@23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) + '@crawlee/types': 3.16.0 + '@crawlee/utils': 3.16.0 + ow: 0.28.2 + tslib: 2.8.1 + type-fest: 4.41.0 + optionalDependencies: + puppeteer: 23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - supports-color + + '@crawlee/cheerio@3.16.0': + dependencies: + '@crawlee/http': 3.16.0 + '@crawlee/types': 3.16.0 + '@crawlee/utils': 3.16.0 + cheerio: 1.0.0-rc.12 + htmlparser2: 9.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@crawlee/cli@3.16.0(@types/node@20.17.24)': + dependencies: + '@crawlee/templates': 3.16.0(@types/node@20.17.24) + ansi-colors: 4.1.3 + fs-extra: 11.3.4 + inquirer: 8.2.7(@types/node@20.17.24) + tslib: 2.8.1 + yargonaut: 1.1.4 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + + '@crawlee/core@3.16.0': + dependencies: + '@apify/consts': 2.52.1 + '@apify/datastructures': 2.0.4 + '@apify/log': 2.5.35 + '@apify/pseudo_url': 2.0.76 + '@apify/timeout': 0.3.3 + '@apify/utilities': 2.27.0 + '@crawlee/memory-storage': 3.16.0 + '@crawlee/types': 3.16.0 + '@crawlee/utils': 3.16.0 + '@sapphire/async-queue': 1.5.5 + '@vladfrangu/async_event_emitter': 2.4.7 + csv-stringify: 6.7.0 + fs-extra: 11.3.4 + got-scraping: 4.2.1 + json5: 2.2.3 + minimatch: 9.0.5 + ow: 0.28.2 + stream-json: 1.9.1 + tldts: 7.0.28 + tough-cookie: 6.0.1 + tslib: 2.8.1 + type-fest: 4.41.0 + transitivePeerDependencies: + - supports-color + + '@crawlee/http@3.16.0': + dependencies: + '@apify/timeout': 0.3.3 + '@apify/utilities': 2.27.0 + '@crawlee/basic': 3.16.0 + '@crawlee/types': 3.16.0 + '@crawlee/utils': 3.16.0 + '@types/content-type': 1.1.9 + cheerio: 1.0.0-rc.12 + content-type: 1.0.5 + got-scraping: 4.2.1 + iconv-lite: 0.7.2 + mime-types: 2.1.35 + ow: 0.28.2 + tslib: 2.8.1 + type-fest: 4.41.0 + transitivePeerDependencies: + - supports-color + + '@crawlee/jsdom@3.16.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10)': + dependencies: + '@apify/timeout': 0.3.3 + '@apify/utilities': 2.27.0 + '@crawlee/http': 3.16.0 + '@crawlee/types': 3.16.0 + '@crawlee/utils': 3.16.0 + '@types/jsdom': 21.1.7 + cheerio: 1.0.0-rc.12 + jsdom: 26.1.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10) + ow: 0.28.2 + tslib: 2.8.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + + '@crawlee/linkedom@3.16.0(canvas@3.2.3)': + dependencies: + '@apify/timeout': 0.3.3 + '@apify/utilities': 2.27.0 + '@crawlee/http': 3.16.0 + '@crawlee/types': 3.16.0 + linkedom: 0.18.12(canvas@3.2.3) + ow: 0.28.2 + tslib: 2.8.1 + transitivePeerDependencies: + - canvas + - supports-color + + '@crawlee/memory-storage@3.16.0': + dependencies: + '@apify/log': 2.5.35 + '@crawlee/types': 3.16.0 + '@sapphire/async-queue': 1.5.5 + '@sapphire/shapeshift': 3.9.7 + content-type: 1.0.5 + fs-extra: 11.3.4 + json5: 2.2.3 + mime-types: 2.1.35 + proper-lockfile: 4.1.2 + tslib: 2.8.1 + + '@crawlee/playwright@3.16.0(puppeteer@23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))': + dependencies: + '@apify/datastructures': 2.0.4 + '@apify/log': 2.5.35 + '@apify/timeout': 0.3.3 + '@crawlee/browser': 3.16.0(puppeteer@23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) + '@crawlee/browser-pool': 3.16.0(puppeteer@23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) + '@crawlee/core': 3.16.0 + '@crawlee/types': 3.16.0 + '@crawlee/utils': 3.16.0 + cheerio: 1.0.0-rc.12 + jquery: 3.7.1 + lodash.isequal: 4.5.0 + ml-logistic-regression: 2.0.0 + ml-matrix: 6.12.2 + ow: 0.28.2 + string-comparison: 1.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - puppeteer + - supports-color + + '@crawlee/puppeteer@3.16.0(puppeteer@23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))': + dependencies: + '@apify/datastructures': 2.0.4 + '@apify/log': 2.5.35 + '@crawlee/browser': 3.16.0(puppeteer@23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) + '@crawlee/browser-pool': 3.16.0(puppeteer@23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) + '@crawlee/types': 3.16.0 + '@crawlee/utils': 3.16.0 + cheerio: 1.0.0-rc.12 + devtools-protocol: 0.0.1617982 + jquery: 3.7.1 + ow: 0.28.2 + tslib: 2.8.1 + optionalDependencies: + puppeteer: 23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - playwright + - supports-color + + '@crawlee/templates@3.16.0(@types/node@20.17.24)': + dependencies: + ansi-colors: 4.1.3 + inquirer: 9.3.8(@types/node@20.17.24) + tslib: 2.8.1 + yargonaut: 1.1.4 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + + '@crawlee/types@3.16.0': + dependencies: + tslib: 2.8.1 + + '@crawlee/utils@3.16.0': + dependencies: + '@apify/log': 2.5.35 + '@apify/ps-tree': 1.2.0 + '@crawlee/types': 3.16.0 + '@types/sax': 1.2.7 + cheerio: 1.0.0-rc.12 + file-type: 20.5.0 + got-scraping: 4.2.1 + ow: 0.28.2 + robots-parser: 3.0.1 + sax: 1.4.1 + tslib: 2.8.1 + whatwg-mimetype: 4.0.0 + transitivePeerDependencies: + - supports-color + + '@csstools/color-helpers@5.1.0': {} + + '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/color-helpers': 5.1.0 + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-tokenizer@3.0.4': {} + '@dabh/diagnostics@2.0.3': dependencies: colorspace: 1.1.4 @@ -14187,6 +15275,17 @@ snapshots: '@dagrejs/graphlib@2.2.4': {} + '@darabonba/typescript@1.0.4': + dependencies: + '@alicloud/tea-typescript': 1.8.0 + httpx: 2.3.3 + lodash: 4.17.23 + moment: 2.30.1 + moment-timezone: 0.5.48 + xml2js: 0.6.2 + transitivePeerDependencies: + - supports-color + '@date-fns/tz@1.4.1': {} '@discoveryjs/json-ext@0.5.7': {} @@ -14197,33 +15296,17 @@ snapshots: dependencies: e2b: 2.18.0 - '@emnapi/core@1.3.1': - dependencies: - '@emnapi/wasi-threads': 1.0.1 - tslib: 2.8.1 - optional: true - '@emnapi/core@1.7.1': dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.3.1': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.8.1': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.1': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/wasi-threads@1.1.0': dependencies: tslib: 2.8.1 @@ -14322,235 +15405,103 @@ snapshots: '@emotion/weak-memoize@0.4.0': {} - '@esbuild/aix-ppc64@0.21.5': - optional: true - - '@esbuild/aix-ppc64@0.25.1': - optional: true - '@esbuild/aix-ppc64@0.25.11': optional: true - '@esbuild/android-arm64@0.21.5': - optional: true - - '@esbuild/android-arm64@0.25.1': - optional: true - '@esbuild/android-arm64@0.25.11': optional: true - '@esbuild/android-arm@0.21.5': - optional: true - - '@esbuild/android-arm@0.25.1': - optional: true - '@esbuild/android-arm@0.25.11': optional: true - '@esbuild/android-x64@0.21.5': - optional: true - - '@esbuild/android-x64@0.25.1': - optional: true - '@esbuild/android-x64@0.25.11': optional: true - '@esbuild/darwin-arm64@0.21.5': - optional: true - - '@esbuild/darwin-arm64@0.25.1': - optional: true - '@esbuild/darwin-arm64@0.25.11': optional: true - '@esbuild/darwin-x64@0.21.5': - optional: true - - '@esbuild/darwin-x64@0.25.1': - optional: true - '@esbuild/darwin-x64@0.25.11': optional: true - '@esbuild/freebsd-arm64@0.21.5': - optional: true - - '@esbuild/freebsd-arm64@0.25.1': - optional: true - '@esbuild/freebsd-arm64@0.25.11': optional: true - '@esbuild/freebsd-x64@0.21.5': - optional: true - - '@esbuild/freebsd-x64@0.25.1': - optional: true - '@esbuild/freebsd-x64@0.25.11': optional: true - '@esbuild/linux-arm64@0.21.5': - optional: true - - '@esbuild/linux-arm64@0.25.1': - optional: true - '@esbuild/linux-arm64@0.25.11': optional: true - '@esbuild/linux-arm@0.21.5': - optional: true - - '@esbuild/linux-arm@0.25.1': - optional: true - '@esbuild/linux-arm@0.25.11': optional: true - '@esbuild/linux-ia32@0.21.5': - optional: true - - '@esbuild/linux-ia32@0.25.1': - optional: true - '@esbuild/linux-ia32@0.25.11': optional: true - '@esbuild/linux-loong64@0.21.5': - optional: true - - '@esbuild/linux-loong64@0.25.1': - optional: true - '@esbuild/linux-loong64@0.25.11': optional: true - '@esbuild/linux-mips64el@0.21.5': - optional: true - - '@esbuild/linux-mips64el@0.25.1': - optional: true - '@esbuild/linux-mips64el@0.25.11': optional: true - '@esbuild/linux-ppc64@0.21.5': - optional: true - - '@esbuild/linux-ppc64@0.25.1': - optional: true - '@esbuild/linux-ppc64@0.25.11': optional: true - '@esbuild/linux-riscv64@0.21.5': - optional: true - - '@esbuild/linux-riscv64@0.25.1': - optional: true - '@esbuild/linux-riscv64@0.25.11': optional: true - '@esbuild/linux-s390x@0.21.5': - optional: true - - '@esbuild/linux-s390x@0.25.1': - optional: true - '@esbuild/linux-s390x@0.25.11': optional: true - '@esbuild/linux-x64@0.21.5': - optional: true - - '@esbuild/linux-x64@0.25.1': - optional: true - '@esbuild/linux-x64@0.25.11': optional: true - '@esbuild/netbsd-arm64@0.25.1': - optional: true - '@esbuild/netbsd-arm64@0.25.11': optional: true - '@esbuild/netbsd-x64@0.21.5': - optional: true - - '@esbuild/netbsd-x64@0.25.1': - optional: true - '@esbuild/netbsd-x64@0.25.11': optional: true - '@esbuild/openbsd-arm64@0.25.1': - optional: true - '@esbuild/openbsd-arm64@0.25.11': optional: true - '@esbuild/openbsd-x64@0.21.5': - optional: true - - '@esbuild/openbsd-x64@0.25.1': - optional: true - '@esbuild/openbsd-x64@0.25.11': optional: true '@esbuild/openharmony-arm64@0.25.11': optional: true - '@esbuild/sunos-x64@0.21.5': - optional: true - - '@esbuild/sunos-x64@0.25.1': - optional: true - '@esbuild/sunos-x64@0.25.11': optional: true - '@esbuild/win32-arm64@0.21.5': - optional: true - - '@esbuild/win32-arm64@0.25.1': - optional: true - '@esbuild/win32-arm64@0.25.11': optional: true - '@esbuild/win32-ia32@0.21.5': - optional: true - - '@esbuild/win32-ia32@0.25.1': - optional: true - '@esbuild/win32-ia32@0.25.11': optional: true - '@esbuild/win32-x64@0.21.5': - optional: true - - '@esbuild/win32-x64@0.25.1': - optional: true - '@esbuild/win32-x64@0.25.11': optional: true - '@eslint-community/eslint-utils@4.5.1(eslint@8.57.1)': + '@eslint-community/eslint-utils@4.5.1(eslint@8.56.0)': + dependencies: + eslint: 8.56.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/eslint-utils@4.9.1(eslint@8.56.0)': + dependencies: + eslint: 8.56.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/eslint-utils@4.9.1(eslint@8.57.1)': dependencies: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} + '@eslint-community/regexpp@4.12.2': {} + '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 @@ -14565,34 +15516,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@eslint/js@8.56.0': {} + '@eslint/js@8.57.1': {} - '@fastgpt-sdk/logger@0.1.2': - dependencies: - '@logtape/logtape': 2.0.2 - '@logtape/pretty': 2.0.2(@logtape/logtape@2.0.2) - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.203.0 - '@opentelemetry/exporter-logs-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.39.0 - - '@fastgpt-sdk/otel@0.1.2': - dependencies: - '@logtape/logtape': 2.0.2 - '@logtape/pretty': 2.0.2(@logtape/logtape@2.0.2) - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.203.0 - '@opentelemetry/exporter-logs-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.6.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-node': 2.6.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.39.0 + '@faker-js/faker@9.9.0': {} '@fastgpt-sdk/plugin@0.6.0': dependencies: @@ -14604,75 +15532,12 @@ snapshots: '@alibaba-group/opensandbox': 0.1.6 '@e2b/code-interpreter': 2.4.0 - '@fastgpt-sdk/storage@0.6.17(@opentelemetry/api@1.9.0)(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)': - dependencies: - '@aws-sdk/client-s3': 3.948.0 - '@aws-sdk/lib-storage': 3.948.0(@aws-sdk/client-s3@3.948.0) - '@aws-sdk/s3-request-presigner': 3.952.0 - ali-oss: 6.23.0(proxy-agent@5.0.0) - cos-nodejs-sdk-v5: 2.15.4 - es-toolkit: 1.43.0 - minio: 8.0.7 - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - transitivePeerDependencies: - - '@edge-runtime/vm' - - '@opentelemetry/api' - - '@types/node' - - '@vitest/browser-playwright' - - '@vitest/browser-preview' - - '@vitest/browser-webdriverio' - - '@vitest/ui' - - aws-crt - - happy-dom - - jiti - - jsdom - - less - - lightningcss - - msw - - proxy-agent - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml + '@fidm/asn1@1.0.4': {} - '@fastgpt-sdk/storage@0.6.17(@opentelemetry/api@1.9.0)(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(proxy-agent@6.5.0)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)': + '@fidm/x509@1.2.1': dependencies: - '@aws-sdk/client-s3': 3.948.0 - '@aws-sdk/lib-storage': 3.948.0(@aws-sdk/client-s3@3.948.0) - '@aws-sdk/s3-request-presigner': 3.952.0 - ali-oss: 6.23.0(proxy-agent@6.5.0) - cos-nodejs-sdk-v5: 2.15.4 - es-toolkit: 1.43.0 - minio: 8.0.7 - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - transitivePeerDependencies: - - '@edge-runtime/vm' - - '@opentelemetry/api' - - '@types/node' - - '@vitest/browser-playwright' - - '@vitest/browser-preview' - - '@vitest/browser-webdriverio' - - '@vitest/ui' - - aws-crt - - happy-dom - - jiti - - jsdom - - less - - lightningcss - - msw - - proxy-agent - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml + '@fidm/asn1': 1.0.4 + tweetnacl: 1.0.3 '@fingerprintjs/fingerprintjs@4.6.1': dependencies: @@ -14689,23 +15554,23 @@ snapshots: '@floating-ui/utils@0.2.10': {} - '@floating-ui/vue@1.1.9(vue@3.5.22(typescript@5.8.2))': + '@floating-ui/vue@1.1.9(vue@3.5.22(typescript@5.9.3))': dependencies: '@floating-ui/dom': 1.7.4 '@floating-ui/utils': 0.2.10 - vue-demi: 0.14.10(vue@3.5.22(typescript@5.8.2)) + vue-demi: 0.14.10(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - '@vue/composition-api' - vue '@fortaine/fetch-event-source@3.0.6': {} - '@google/genai@1.50.1(@modelcontextprotocol/sdk@1.26.0(zod@4.1.12))': + '@google/genai@1.50.1(@modelcontextprotocol/sdk@1.26.0(zod@4.1.12))(bufferutil@4.1.0)(utf-8-validate@5.0.10)': dependencies: google-auth-library: 10.6.2 p-retry: 4.6.2 protobufjs: 7.5.5 - ws: 8.20.0 + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) optionalDependencies: '@modelcontextprotocol/sdk': 1.26.0(zod@4.1.12) transitivePeerDependencies: @@ -14725,19 +15590,27 @@ snapshots: protobufjs: 7.4.0 yargs: 17.7.2 - '@headlessui/tailwindcss@0.2.2(tailwindcss@4.1.14)': + '@headlessui/tailwindcss@0.2.2(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1))': dependencies: - tailwindcss: 4.1.14 + tailwindcss: 3.4.18(tsx@4.20.6)(yaml@2.8.1) - '@headlessui/vue@1.7.23(vue@3.5.22(typescript@5.8.2))': + '@headlessui/vue@1.7.23(vue@3.5.22(typescript@5.9.3))': dependencies: - '@tanstack/vue-virtual': 3.13.12(vue@3.5.22(typescript@5.8.2)) - vue: 3.5.22(typescript@5.8.2) + '@tanstack/vue-virtual': 3.13.12(vue@3.5.22(typescript@5.9.3)) + vue: 3.5.22(typescript@5.9.3) '@hono/node-server@1.19.9(hono@4.11.7)': dependencies: hono: 4.11.7 + '@humanwhocodes/config-array@0.11.14': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.4.3 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 @@ -14871,6 +15744,15 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true + '@inquirer/external-editor@1.0.3(@types/node@20.17.24)': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.2 + optionalDependencies: + '@types/node': 20.17.24 + + '@inquirer/figures@1.0.15': {} + '@internationalized/date@3.10.0': dependencies: '@swc/helpers': 0.5.15 @@ -14896,12 +15778,6 @@ snapshots: dependencies: minipass: 7.1.2 - '@istanbuljs/schema@0.1.3': {} - - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.8 - '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -14923,8 +15799,6 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 optional: true - '@jridgewell/sourcemap-codec@1.5.0': {} - '@jridgewell/sourcemap-codec@1.5.5': {} '@jridgewell/trace-mapping@0.3.31': @@ -14944,6 +15818,50 @@ snapshots: dependencies: jsep: 1.4.0 + '@keyv/serialize@1.1.1': {} + + '@kubernetes/client-node@1.4.0(bufferutil@4.1.0)(encoding@0.1.13)(utf-8-validate@5.0.10)': + dependencies: + '@types/js-yaml': 4.0.9 + '@types/node': 24.0.13 + '@types/node-fetch': 2.6.13 + '@types/stream-buffers': 3.0.8 + form-data: 4.0.5 + hpagent: 1.2.0 + isomorphic-ws: 5.0.0(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + js-yaml: 4.1.1 + jsonpath-plus: 10.3.0 + node-fetch: 2.7.0(encoding@0.1.13) + openid-client: 6.8.3 + rfc4648: 1.5.4 + socks-proxy-agent: 8.0.5 + stream-buffers: 3.0.3 + tar-fs: 3.1.2 + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@larksuiteoapi/node-sdk@1.61.1(bufferutil@4.1.0)(utf-8-validate@5.0.10)': + dependencies: + axios: 1.13.6 + lodash.identity: 3.0.0 + lodash.merge: 4.6.2 + lodash.pickby: 4.6.0 + protobufjs: 7.4.0 + qs: 6.15.1 + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + + '@leichtgewicht/ip-codec@2.0.5': {} + '@lexical/clipboard@0.12.6(lexical@0.12.6)': dependencies: '@lexical/html': 0.12.6(lexical@0.12.6) @@ -15134,9 +16052,9 @@ snapshots: '@marijn/find-cluster-break@1.0.2': {} - '@mariozechner/pi-agent-core@0.67.3(@modelcontextprotocol/sdk@1.26.0(zod@4.1.12))(ws@8.20.0)(zod@4.1.12)': + '@mariozechner/pi-agent-core@0.67.3(@modelcontextprotocol/sdk@1.26.0(zod@4.1.12))(bufferutil@4.1.0)(utf-8-validate@5.0.10)(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@4.1.12)': dependencies: - '@mariozechner/pi-ai': 0.67.3(@modelcontextprotocol/sdk@1.26.0(zod@4.1.12))(ws@8.20.0)(zod@4.1.12) + '@mariozechner/pi-ai': 0.67.3(@modelcontextprotocol/sdk@1.26.0(zod@4.1.12))(bufferutil@4.1.0)(utf-8-validate@5.0.10)(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@4.1.12) transitivePeerDependencies: - '@modelcontextprotocol/sdk' - aws-crt @@ -15146,17 +16064,17 @@ snapshots: - ws - zod - '@mariozechner/pi-ai@0.67.3(@modelcontextprotocol/sdk@1.26.0(zod@4.1.12))(ws@8.20.0)(zod@4.1.12)': + '@mariozechner/pi-ai@0.67.3(@modelcontextprotocol/sdk@1.26.0(zod@4.1.12))(bufferutil@4.1.0)(utf-8-validate@5.0.10)(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@4.1.12)': dependencies: '@anthropic-ai/sdk': 0.73.0(zod@4.1.12) '@aws-sdk/client-bedrock-runtime': 3.1030.0 - '@google/genai': 1.50.1(@modelcontextprotocol/sdk@1.26.0(zod@4.1.12)) - '@mistralai/mistralai': 1.14.1 + '@google/genai': 1.50.1(@modelcontextprotocol/sdk@1.26.0(zod@4.1.12))(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@mistralai/mistralai': 1.14.1(bufferutil@4.1.0)(utf-8-validate@5.0.10) '@sinclair/typebox': 0.34.49 ajv: 8.17.1 ajv-formats: 3.0.1(ajv@8.17.1) chalk: 5.6.2 - openai: 6.26.0(ws@8.20.0)(zod@4.1.12) + openai: 6.26.0(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@4.1.12) partial-json: 0.1.7 proxy-agent: 6.5.0 undici: 7.25.0 @@ -15174,9 +16092,9 @@ snapshots: dependencies: maxmind: 5.0.1 - '@mistralai/mistralai@1.14.1': + '@mistralai/mistralai@1.14.1(bufferutil@4.1.0)(utf-8-validate@5.0.10)': dependencies: - ws: 8.20.0 + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) zod: 4.1.12 zod-to-json-schema: 3.25.1(zod@4.1.12) transitivePeerDependencies: @@ -15198,7 +16116,7 @@ snapshots: express: 5.2.1 express-rate-limit: 8.2.1(express@5.2.1) hono: 4.11.7 - jose: 6.1.3 + jose: 6.2.2 json-schema-typed: 8.0.2 pkce-challenge: 5.0.0 raw-body: 3.0.2 @@ -15207,31 +16125,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@module-federation/error-codes@0.21.6': {} - - '@module-federation/runtime-core@0.21.6': - dependencies: - '@module-federation/error-codes': 0.21.6 - '@module-federation/sdk': 0.21.6 - - '@module-federation/runtime-tools@0.21.6': - dependencies: - '@module-federation/runtime': 0.21.6 - '@module-federation/webpack-bundler-runtime': 0.21.6 - - '@module-federation/runtime@0.21.6': - dependencies: - '@module-federation/error-codes': 0.21.6 - '@module-federation/runtime-core': 0.21.6 - '@module-federation/sdk': 0.21.6 - - '@module-federation/sdk@0.21.6': {} - - '@module-federation/webpack-bundler-runtime@0.21.6': - dependencies: - '@module-federation/runtime': 0.21.6 - '@module-federation/sdk': 0.21.6 - '@monaco-editor/loader@1.5.0': dependencies: state-local: 1.0.7 @@ -15316,20 +16209,6 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@napi-rs/wasm-runtime@0.2.7': - dependencies: - '@emnapi/core': 1.3.1 - '@emnapi/runtime': 1.3.1 - '@tybys/wasm-util': 0.9.0 - optional: true - - '@napi-rs/wasm-runtime@1.0.7': - dependencies: - '@emnapi/core': 1.7.1 - '@emnapi/runtime': 1.8.1 - '@tybys/wasm-util': 0.10.1 - optional: true - '@napi-rs/wasm-runtime@1.1.1': dependencies: '@emnapi/core': 1.7.1 @@ -15337,99 +16216,41 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@next/bundle-analyzer@16.1.6': + '@next/bundle-analyzer@16.1.6(bufferutil@4.1.0)(utf-8-validate@5.0.10)': dependencies: - webpack-bundle-analyzer: 4.10.1 + webpack-bundle-analyzer: 4.10.1(bufferutil@4.1.0)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate - '@next/env@16.2.1': {} + '@next/env@16.2.4': {} '@next/eslint-plugin-next@15.5.12': dependencies: fast-glob: 3.3.1 - '@next/rspack-binding-android-arm-eabi@1.0.2': + '@next/swc-darwin-arm64@16.2.4': optional: true - '@next/rspack-binding-android-arm64@1.0.2': + '@next/swc-darwin-x64@16.2.4': optional: true - '@next/rspack-binding-darwin-arm64@1.0.2': + '@next/swc-linux-arm64-gnu@16.2.4': optional: true - '@next/rspack-binding-darwin-x64@1.0.2': + '@next/swc-linux-arm64-musl@16.2.4': optional: true - '@next/rspack-binding-linux-arm-gnueabihf@1.0.2': + '@next/swc-linux-x64-gnu@16.2.4': optional: true - '@next/rspack-binding-linux-arm64-gnu@1.0.2': + '@next/swc-linux-x64-musl@16.2.4': optional: true - '@next/rspack-binding-linux-arm64-musl@1.0.2': + '@next/swc-win32-arm64-msvc@16.2.4': optional: true - '@next/rspack-binding-linux-x64-gnu@1.0.2': - optional: true - - '@next/rspack-binding-linux-x64-musl@1.0.2': - optional: true - - '@next/rspack-binding-win32-arm64-msvc@1.0.2': - optional: true - - '@next/rspack-binding-win32-ia32-msvc@1.0.2': - optional: true - - '@next/rspack-binding-win32-x64-msvc@1.0.2': - optional: true - - '@next/rspack-binding@1.0.2': - optionalDependencies: - '@next/rspack-binding-android-arm-eabi': 1.0.2 - '@next/rspack-binding-android-arm64': 1.0.2 - '@next/rspack-binding-darwin-arm64': 1.0.2 - '@next/rspack-binding-darwin-x64': 1.0.2 - '@next/rspack-binding-linux-arm-gnueabihf': 1.0.2 - '@next/rspack-binding-linux-arm64-gnu': 1.0.2 - '@next/rspack-binding-linux-arm64-musl': 1.0.2 - '@next/rspack-binding-linux-x64-gnu': 1.0.2 - '@next/rspack-binding-linux-x64-musl': 1.0.2 - '@next/rspack-binding-win32-arm64-msvc': 1.0.2 - '@next/rspack-binding-win32-ia32-msvc': 1.0.2 - '@next/rspack-binding-win32-x64-msvc': 1.0.2 - - '@next/rspack-core@1.0.2(@swc/helpers@0.5.15)': - dependencies: - '@next/rspack-binding': 1.0.2 - '@rspack/core': 1.6.7(@swc/helpers@0.5.15) - transitivePeerDependencies: - - '@swc/helpers' - - '@next/swc-darwin-arm64@16.2.1': - optional: true - - '@next/swc-darwin-x64@16.2.1': - optional: true - - '@next/swc-linux-arm64-gnu@16.2.1': - optional: true - - '@next/swc-linux-arm64-musl@16.2.1': - optional: true - - '@next/swc-linux-x64-gnu@16.2.1': - optional: true - - '@next/swc-linux-x64-musl@16.2.1': - optional: true - - '@next/swc-win32-arm64-msvc@16.2.1': - optional: true - - '@next/swc-win32-x64-msvc@16.2.1': + '@next/swc-win32-x64-msvc@16.2.4': optional: true '@node-rs/jieba-android-arm-eabi@2.0.1': @@ -15464,7 +16285,7 @@ snapshots: '@node-rs/jieba-wasm32-wasi@2.0.1': dependencies: - '@napi-rs/wasm-runtime': 0.2.7 + '@napi-rs/wasm-runtime': 0.2.12 optional: true '@node-rs/jieba-win32-arm64-msvc@2.0.1': @@ -15493,6 +16314,23 @@ snapshots: '@node-rs/jieba-win32-ia32-msvc': 2.0.1 '@node-rs/jieba-win32-x64-msvc': 2.0.1 + '@node-saml/node-saml@5.1.0': + dependencies: + '@types/debug': 4.1.12 + '@types/qs': 6.9.18 + '@types/xml-encryption': 1.2.4 + '@types/xml2js': 0.4.14 + '@xmldom/is-dom-node': 1.0.1 + '@xmldom/xmldom': 0.8.10 + debug: 4.4.3 + xml-crypto: 6.1.2 + xml-encryption: 3.1.0 + xml2js: 0.6.2 + xmlbuilder: 15.1.1 + xpath: 0.0.34 + transitivePeerDependencies: + - supports-color + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -15794,6 +16632,96 @@ snapshots: '@parcel/watcher-win32-x64': 2.5.1 optional: true + '@peculiar/asn1-cms@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + '@peculiar/asn1-x509-attr': 2.6.1 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-csr@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-ecc@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-pfx@2.6.1': + dependencies: + '@peculiar/asn1-cms': 2.6.1 + '@peculiar/asn1-pkcs8': 2.6.1 + '@peculiar/asn1-rsa': 2.6.1 + '@peculiar/asn1-schema': 2.6.0 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-pkcs8@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-pkcs9@2.6.1': + dependencies: + '@peculiar/asn1-cms': 2.6.1 + '@peculiar/asn1-pfx': 2.6.1 + '@peculiar/asn1-pkcs8': 2.6.1 + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + '@peculiar/asn1-x509-attr': 2.6.1 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-rsa@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-schema@2.6.0': + dependencies: + asn1js: 3.0.10 + pvtsutils: 1.3.6 + tslib: 2.8.1 + + '@peculiar/asn1-x509-attr@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-x509@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + asn1js: 3.0.10 + pvtsutils: 1.3.6 + tslib: 2.8.1 + + '@peculiar/x509@1.14.3': + dependencies: + '@peculiar/asn1-cms': 2.6.1 + '@peculiar/asn1-csr': 2.6.1 + '@peculiar/asn1-ecc': 2.6.1 + '@peculiar/asn1-pkcs9': 2.6.1 + '@peculiar/asn1-rsa': 2.6.1 + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + pvtsutils: 1.3.6 + reflect-metadata: 0.2.2 + tslib: 2.8.1 + tsyringe: 4.10.0 + '@petamoriken/float16@3.9.2': {} '@phosphor-icons/core@2.1.1': {} @@ -15840,6 +16768,21 @@ snapshots: '@protobufjs/utf8@1.1.0': {} + '@puppeteer/browsers@2.6.1': + dependencies: + debug: 4.4.3 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.5.0 + semver: 7.7.4 + tar-fs: 3.1.2 + unbzip2-stream: 1.4.3 + yargs: 17.7.2 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - supports-color + '@quansync/fs@1.0.0': dependencies: quansync: 1.0.0 @@ -16034,95 +16977,47 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.35.0': optional: true - '@rspack/binding-darwin-arm64@1.6.7': - optional: true - - '@rspack/binding-darwin-x64@1.6.7': - optional: true - - '@rspack/binding-linux-arm64-gnu@1.6.7': - optional: true - - '@rspack/binding-linux-arm64-musl@1.6.7': - optional: true - - '@rspack/binding-linux-x64-gnu@1.6.7': - optional: true - - '@rspack/binding-linux-x64-musl@1.6.7': - optional: true - - '@rspack/binding-wasm32-wasi@1.6.7': - dependencies: - '@napi-rs/wasm-runtime': 1.0.7 - optional: true - - '@rspack/binding-win32-arm64-msvc@1.6.7': - optional: true - - '@rspack/binding-win32-ia32-msvc@1.6.7': - optional: true - - '@rspack/binding-win32-x64-msvc@1.6.7': - optional: true - - '@rspack/binding@1.6.7': - optionalDependencies: - '@rspack/binding-darwin-arm64': 1.6.7 - '@rspack/binding-darwin-x64': 1.6.7 - '@rspack/binding-linux-arm64-gnu': 1.6.7 - '@rspack/binding-linux-arm64-musl': 1.6.7 - '@rspack/binding-linux-x64-gnu': 1.6.7 - '@rspack/binding-linux-x64-musl': 1.6.7 - '@rspack/binding-wasm32-wasi': 1.6.7 - '@rspack/binding-win32-arm64-msvc': 1.6.7 - '@rspack/binding-win32-ia32-msvc': 1.6.7 - '@rspack/binding-win32-x64-msvc': 1.6.7 - - '@rspack/core@1.6.7(@swc/helpers@0.5.15)': - dependencies: - '@module-federation/runtime-tools': 0.21.6 - '@rspack/binding': 1.6.7 - '@rspack/lite-tapable': 1.1.0 - optionalDependencies: - '@swc/helpers': 0.5.15 - - '@rspack/lite-tapable@1.1.0': {} - '@rtsao/scc@1.1.0': {} - '@rushstack/eslint-patch@1.11.0': {} + '@rushstack/eslint-patch@1.16.1': {} + + '@sapphire/async-queue@1.5.5': {} + + '@sapphire/shapeshift@3.9.7': + dependencies: + fast-deep-equal: 3.1.3 + lodash: 4.17.23 '@scalar/analytics-client@1.0.0': dependencies: zod: 3.24.1 - '@scalar/api-client@2.8.1(axios@1.13.6)(nprogress@0.2.0)(qrcode@1.5.4)(tailwindcss@4.1.14)(typescript@5.8.2)': + '@scalar/api-client@2.8.1(axios@1.13.6)(nprogress@0.2.0)(qrcode@1.5.4)(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1))(typescript@5.9.3)': dependencies: - '@headlessui/tailwindcss': 0.2.2(tailwindcss@4.1.14) - '@headlessui/vue': 1.7.23(vue@3.5.22(typescript@5.8.2)) + '@headlessui/tailwindcss': 0.2.2(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1)) + '@headlessui/vue': 1.7.23(vue@3.5.22(typescript@5.9.3)) '@scalar/analytics-client': 1.0.0 - '@scalar/components': 0.15.1(typescript@5.8.2) - '@scalar/draggable': 0.2.0(typescript@5.8.2) + '@scalar/components': 0.15.1(typescript@5.9.3) + '@scalar/draggable': 0.2.0(typescript@5.9.3) '@scalar/helpers': 0.0.12 - '@scalar/icons': 0.4.7(typescript@5.8.2) + '@scalar/icons': 0.4.7(typescript@5.9.3) '@scalar/import': 0.4.31 '@scalar/json-magic': 0.6.1 - '@scalar/oas-utils': 0.5.2(typescript@5.8.2) + '@scalar/oas-utils': 0.5.2(typescript@5.9.3) '@scalar/object-utils': 1.2.8 '@scalar/openapi-parser': 0.22.3 '@scalar/openapi-types': 0.5.0 - '@scalar/postman-to-openapi': 0.3.40(typescript@5.8.2) + '@scalar/postman-to-openapi': 0.3.40(typescript@5.9.3) '@scalar/snippetz': 0.5.1 '@scalar/themes': 0.13.22 '@scalar/types': 0.3.2 - '@scalar/use-codemirror': 0.12.43(typescript@5.8.2) - '@scalar/use-hooks': 0.2.5(typescript@5.8.2) - '@scalar/use-toasts': 0.8.0(typescript@5.8.2) - '@scalar/workspace-store': 0.17.1(typescript@5.8.2) + '@scalar/use-codemirror': 0.12.43(typescript@5.9.3) + '@scalar/use-hooks': 0.2.5(typescript@5.9.3) + '@scalar/use-toasts': 0.8.0(typescript@5.9.3) + '@scalar/workspace-store': 0.17.1(typescript@5.9.3) '@types/har-format': 1.2.16 - '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.8.2)) - '@vueuse/integrations': 13.9.0(axios@1.13.6)(focus-trap@7.6.5)(fuse.js@7.1.0)(nprogress@0.2.0)(qrcode@1.5.4)(vue@3.5.22(typescript@5.8.2)) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) + '@vueuse/integrations': 13.9.0(axios@1.13.6)(focus-trap@7.6.5)(fuse.js@7.1.0)(nprogress@0.2.0)(qrcode@1.5.4)(vue@3.5.22(typescript@5.9.3)) focus-trap: 7.6.5 fuse.js: 7.1.0 js-base64: 3.7.8 @@ -16132,8 +17027,8 @@ snapshots: pretty-ms: 8.0.0 shell-quote: 1.8.3 type-fest: 5.0.0 - vue: 3.5.22(typescript@5.8.2) - vue-router: 4.6.0(vue@3.5.22(typescript@5.8.2)) + vue: 3.5.22(typescript@5.9.3) + vue-router: 4.6.0(vue@3.5.22(typescript@5.9.3)) whatwg-mimetype: 4.0.0 yaml: 2.8.0 zod: 4.1.11 @@ -16153,9 +17048,9 @@ snapshots: - typescript - universal-cookie - '@scalar/api-reference-react@0.8.1(axios@1.13.6)(nprogress@0.2.0)(qrcode@1.5.4)(react@18.3.1)(tailwindcss@4.1.14)(typescript@5.8.2)': + '@scalar/api-reference-react@0.8.1(axios@1.13.6)(nprogress@0.2.0)(qrcode@1.5.4)(react@18.3.1)(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1))(typescript@5.9.3)': dependencies: - '@scalar/api-reference': 1.38.1(axios@1.13.6)(nprogress@0.2.0)(qrcode@1.5.4)(tailwindcss@4.1.14)(typescript@5.8.2) + '@scalar/api-reference': 1.38.1(axios@1.13.6)(nprogress@0.2.0)(qrcode@1.5.4)(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1))(typescript@5.9.3) '@scalar/types': 0.3.2 react: 18.3.1 transitivePeerDependencies: @@ -16174,17 +17069,17 @@ snapshots: - typescript - universal-cookie - '@scalar/api-reference@1.38.1(axios@1.13.6)(nprogress@0.2.0)(qrcode@1.5.4)(tailwindcss@4.1.14)(typescript@5.8.2)': + '@scalar/api-reference@1.38.1(axios@1.13.6)(nprogress@0.2.0)(qrcode@1.5.4)(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1))(typescript@5.9.3)': dependencies: - '@floating-ui/vue': 1.1.9(vue@3.5.22(typescript@5.8.2)) - '@headlessui/vue': 1.7.23(vue@3.5.22(typescript@5.8.2)) - '@scalar/api-client': 2.8.1(axios@1.13.6)(nprogress@0.2.0)(qrcode@1.5.4)(tailwindcss@4.1.14)(typescript@5.8.2) + '@floating-ui/vue': 1.1.9(vue@3.5.22(typescript@5.9.3)) + '@headlessui/vue': 1.7.23(vue@3.5.22(typescript@5.9.3)) + '@scalar/api-client': 2.8.1(axios@1.13.6)(nprogress@0.2.0)(qrcode@1.5.4)(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1))(typescript@5.9.3) '@scalar/code-highlight': 0.2.0 - '@scalar/components': 0.15.1(typescript@5.8.2) + '@scalar/components': 0.15.1(typescript@5.9.3) '@scalar/helpers': 0.0.12 - '@scalar/icons': 0.4.7(typescript@5.8.2) + '@scalar/icons': 0.4.7(typescript@5.9.3) '@scalar/json-magic': 0.6.1 - '@scalar/oas-utils': 0.5.2(typescript@5.8.2) + '@scalar/oas-utils': 0.5.2(typescript@5.9.3) '@scalar/object-utils': 1.2.8 '@scalar/openapi-parser': 0.22.3 '@scalar/openapi-types': 0.5.0 @@ -16192,11 +17087,11 @@ snapshots: '@scalar/snippetz': 0.5.1 '@scalar/themes': 0.13.22 '@scalar/types': 0.3.2 - '@scalar/use-hooks': 0.2.5(typescript@5.8.2) - '@scalar/use-toasts': 0.8.0(typescript@5.8.2) - '@scalar/workspace-store': 0.17.1(typescript@5.8.2) - '@unhead/vue': 1.11.20(vue@3.5.22(typescript@5.8.2)) - '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.8.2)) + '@scalar/use-hooks': 0.2.5(typescript@5.9.3) + '@scalar/use-toasts': 0.8.0(typescript@5.9.3) + '@scalar/workspace-store': 0.17.1(typescript@5.9.3) + '@unhead/vue': 1.11.20(vue@3.5.22(typescript@5.9.3)) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) flatted: 3.3.3 fuse.js: 7.1.0 github-slugger: 2.0.0 @@ -16204,7 +17099,7 @@ snapshots: microdiff: 1.5.0 nanoid: 5.1.5 type-fest: 5.0.0 - vue: 3.5.22(typescript@5.8.2) + vue: 3.5.22(typescript@5.9.3) zod: 4.1.11 transitivePeerDependencies: - '@vue/composition-api' @@ -16244,44 +17139,44 @@ snapshots: transitivePeerDependencies: - supports-color - '@scalar/components@0.15.1(typescript@5.8.2)': + '@scalar/components@0.15.1(typescript@5.9.3)': dependencies: '@floating-ui/utils': 0.2.10 - '@floating-ui/vue': 1.1.9(vue@3.5.22(typescript@5.8.2)) - '@headlessui/vue': 1.7.23(vue@3.5.22(typescript@5.8.2)) + '@floating-ui/vue': 1.1.9(vue@3.5.22(typescript@5.9.3)) + '@headlessui/vue': 1.7.23(vue@3.5.22(typescript@5.9.3)) '@scalar/code-highlight': 0.2.0 '@scalar/helpers': 0.0.12 - '@scalar/icons': 0.4.7(typescript@5.8.2) - '@scalar/oas-utils': 0.5.2(typescript@5.8.2) + '@scalar/icons': 0.4.7(typescript@5.9.3) + '@scalar/oas-utils': 0.5.2(typescript@5.9.3) '@scalar/themes': 0.13.22 - '@scalar/use-hooks': 0.2.5(typescript@5.8.2) - '@scalar/use-toasts': 0.8.0(typescript@5.8.2) - '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.8.2)) - cva: 1.0.0-beta.2(typescript@5.8.2) + '@scalar/use-hooks': 0.2.5(typescript@5.9.3) + '@scalar/use-toasts': 0.8.0(typescript@5.9.3) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) + cva: 1.0.0-beta.2(typescript@5.9.3) nanoid: 5.1.5 pretty-bytes: 6.1.1 - radix-vue: 1.9.17(vue@3.5.22(typescript@5.8.2)) - vue: 3.5.22(typescript@5.8.2) + radix-vue: 1.9.17(vue@3.5.22(typescript@5.9.3)) + vue: 3.5.22(typescript@5.9.3) vue-component-type-helpers: 3.1.1 transitivePeerDependencies: - '@vue/composition-api' - supports-color - typescript - '@scalar/draggable@0.2.0(typescript@5.8.2)': + '@scalar/draggable@0.2.0(typescript@5.9.3)': dependencies: - vue: 3.5.22(typescript@5.8.2) + vue: 3.5.22(typescript@5.9.3) transitivePeerDependencies: - typescript '@scalar/helpers@0.0.12': {} - '@scalar/icons@0.4.7(typescript@5.8.2)': + '@scalar/icons@0.4.7(typescript@5.9.3)': dependencies: '@phosphor-icons/core': 2.1.1 '@types/node': 22.18.10 chalk: 5.6.2 - vue: 3.5.22(typescript@5.8.2) + vue: 3.5.22(typescript@5.9.3) transitivePeerDependencies: - typescript @@ -16296,7 +17191,7 @@ snapshots: '@scalar/helpers': 0.0.12 yaml: 2.8.0 - '@scalar/oas-utils@0.5.2(typescript@5.8.2)': + '@scalar/oas-utils@0.5.2(typescript@5.9.3)': dependencies: '@hyperjump/browser': 1.3.1 '@hyperjump/json-schema': 1.16.3(@hyperjump/browser@1.3.1) @@ -16306,7 +17201,7 @@ snapshots: '@scalar/openapi-types': 0.5.0 '@scalar/themes': 0.13.22 '@scalar/types': 0.3.2 - '@scalar/workspace-store': 0.17.1(typescript@5.8.2) + '@scalar/workspace-store': 0.17.1(typescript@5.9.3) '@types/har-format': 1.2.16 flatted: 3.3.3 js-base64: 3.7.8 @@ -16347,10 +17242,10 @@ snapshots: dependencies: '@scalar/openapi-types': 0.5.0 - '@scalar/postman-to-openapi@0.3.40(typescript@5.8.2)': + '@scalar/postman-to-openapi@0.3.40(typescript@5.9.3)': dependencies: '@scalar/helpers': 0.0.12 - '@scalar/oas-utils': 0.5.2(typescript@5.8.2) + '@scalar/oas-utils': 0.5.2(typescript@5.9.3) '@scalar/openapi-types': 0.5.0 transitivePeerDependencies: - supports-color @@ -16375,7 +17270,7 @@ snapshots: type-fest: 5.0.0 zod: 4.1.11 - '@scalar/use-codemirror@0.12.43(typescript@5.8.2)': + '@scalar/use-codemirror@0.12.43(typescript@5.9.3)': dependencies: '@codemirror/autocomplete': 6.19.0 '@codemirror/commands': 6.9.0 @@ -16391,34 +17286,34 @@ snapshots: '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 '@replit/codemirror-css-color-picker': 6.3.0(@codemirror/language@6.11.3)(@codemirror/state@6.5.2)(@codemirror/view@6.38.6) - '@scalar/components': 0.15.1(typescript@5.8.2) + '@scalar/components': 0.15.1(typescript@5.9.3) codemirror: 6.0.2 - vue: 3.5.22(typescript@5.8.2) + vue: 3.5.22(typescript@5.9.3) transitivePeerDependencies: - '@vue/composition-api' - supports-color - typescript - '@scalar/use-hooks@0.2.5(typescript@5.8.2)': + '@scalar/use-hooks@0.2.5(typescript@5.9.3)': dependencies: - '@scalar/use-toasts': 0.8.0(typescript@5.8.2) - '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.8.2)) - cva: 1.0.0-beta.2(typescript@5.8.2) + '@scalar/use-toasts': 0.8.0(typescript@5.9.3) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) + cva: 1.0.0-beta.2(typescript@5.9.3) tailwind-merge: 2.6.0 - vue: 3.5.22(typescript@5.8.2) + vue: 3.5.22(typescript@5.9.3) zod: 3.24.1 transitivePeerDependencies: - typescript - '@scalar/use-toasts@0.8.0(typescript@5.8.2)': + '@scalar/use-toasts@0.8.0(typescript@5.9.3)': dependencies: nanoid: 5.1.5 - vue: 3.5.22(typescript@5.8.2) + vue: 3.5.22(typescript@5.9.3) vue-sonner: 1.3.2 transitivePeerDependencies: - typescript - '@scalar/workspace-store@0.17.1(typescript@5.8.2)': + '@scalar/workspace-store@0.17.1(typescript@5.9.3)': dependencies: '@scalar/code-highlight': 0.2.0 '@scalar/helpers': 0.0.12 @@ -16429,18 +17324,22 @@ snapshots: '@scalar/types': 0.3.2 github-slugger: 2.0.0 type-fest: 5.0.0 - vue: 3.5.22(typescript@5.8.2) + vue: 3.5.22(typescript@5.9.3) yaml: 2.8.0 transitivePeerDependencies: - supports-color - typescript - '@sinclair/typebox@0.27.8': {} + '@sec-ant/readable-stream@0.4.1': {} '@sinclair/typebox@0.34.49': {} + '@sindresorhus/is@4.6.0': {} + '@sindresorhus/is@5.6.0': {} + '@sindresorhus/is@7.2.0': {} + '@smithy/abort-controller@4.2.5': dependencies: '@smithy/types': 4.9.0 @@ -17123,7 +18022,7 @@ snapshots: '@svgr/hast-util-to-babel-ast@6.5.1': dependencies: - '@babel/types': 7.26.10 + '@babel/types': 7.29.0 entities: 4.5.0 '@svgr/plugin-jsx@6.5.1(@svgr/core@6.5.1)': @@ -17181,12 +18080,28 @@ snapshots: optionalDependencies: react-dom: 18.3.1(react@18.3.1) + '@tanstack/react-table@8.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@tanstack/table-core': 8.21.3 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@tanstack/table-core@8.21.3': {} + '@tanstack/virtual-core@3.13.12': {} - '@tanstack/vue-virtual@3.13.12(vue@3.5.22(typescript@5.8.2))': + '@tanstack/vue-virtual@3.13.12(vue@3.5.22(typescript@5.9.3))': dependencies: '@tanstack/virtual-core': 3.13.12 - vue: 3.5.22(typescript@5.8.2) + vue: 3.5.22(typescript@5.9.3) + + '@tokenizer/inflate@0.2.7': + dependencies: + debug: 4.4.3 + fflate: 0.8.2 + token-types: 6.1.2 + transitivePeerDependencies: + - supports-color '@tokenizer/inflate@0.4.1': dependencies: @@ -17204,12 +18119,25 @@ snapshots: '@trysound/sax@0.2.0': {} - '@tybys/wasm-util@0.10.1': - dependencies: - tslib: 2.8.1 + '@turbo/darwin-64@2.9.6': optional: true - '@tybys/wasm-util@0.9.0': + '@turbo/darwin-arm64@2.9.6': + optional: true + + '@turbo/linux-64@2.9.6': + optional: true + + '@turbo/linux-arm64@2.9.6': + optional: true + + '@turbo/windows-64@2.9.6': + optional: true + + '@turbo/windows-arm64@2.9.6': + optional: true + + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 optional: true @@ -17233,9 +18161,9 @@ snapshots: dependencies: bun-types: 1.3.11 - '@types/bun@1.3.12': + '@types/bun@1.3.13': dependencies: - bun-types: 1.3.12 + bun-types: 1.3.13 '@types/chai@5.2.3': dependencies: @@ -17246,8 +18174,14 @@ snapshots: dependencies: '@types/node': 20.17.24 + '@types/content-type@1.1.9': {} + '@types/cookie@0.5.4': {} + '@types/cors@2.8.19': + dependencies: + '@types/node': 24.0.13 + '@types/d3-array@3.2.1': {} '@types/d3-axis@3.0.6': @@ -17371,16 +18305,27 @@ snapshots: '@types/decompress@4.2.7': dependencies: - '@types/node': 20.17.24 + '@types/node': 24.0.13 '@types/deep-eql@4.0.2': {} + '@types/dns-packet@5.6.5': + dependencies: + '@types/node': 24.0.13 + '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.6 '@types/estree@1.0.6': {} + '@types/express-serve-static-core@4.19.8': + dependencies: + '@types/node': 20.17.24 + '@types/qs': 6.9.18 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + '@types/express-serve-static-core@5.0.6': dependencies: '@types/node': 20.17.24 @@ -17388,6 +18333,13 @@ snapshots: '@types/range-parser': 1.2.7 '@types/send': 0.17.4 + '@types/express@4.17.25': + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.19.8 + '@types/qs': 6.9.18 + '@types/serve-static': 1.15.7 + '@types/express@5.0.0': dependencies: '@types/body-parser': 1.19.5 @@ -17424,12 +18376,18 @@ snapshots: '@types/http-proxy@1.17.17': dependencies: - '@types/node': 20.17.24 + '@types/node': 24.0.13 '@types/js-cookie@3.0.6': {} '@types/js-yaml@4.0.9': {} + '@types/jsdom@21.1.7': + dependencies: + '@types/node': 20.17.24 + '@types/tough-cookie': 4.0.5 + parse5: 7.2.1 + '@types/jsesc@2.5.1': {} '@types/json-schema@7.0.15': {} @@ -17439,7 +18397,7 @@ snapshots: '@types/jsonwebtoken@9.0.9': dependencies: '@types/ms': 2.1.0 - '@types/node': 20.17.24 + '@types/node': 24.0.13 '@types/katex@0.16.7': {} @@ -17478,11 +18436,14 @@ snapshots: '@types/node': 20.17.24 form-data: 4.0.5 - '@types/node@18.19.80': + '@types/node-fetch@2.6.13': dependencies: - undici-types: 5.26.5 + '@types/node': 20.17.24 + form-data: 4.0.5 - '@types/node@20.14.0': + '@types/node@12.20.55': {} + + '@types/node@18.19.80': dependencies: undici-types: 5.26.5 @@ -17497,19 +18458,22 @@ snapshots: '@types/node@24.0.13': dependencies: undici-types: 7.8.0 - optional: true + + '@types/nodemailer@6.4.23': + dependencies: + '@types/node': 24.0.13 '@types/nprogress@0.2.3': {} '@types/papaparse@5.3.7': dependencies: - '@types/node': 20.17.24 + '@types/node': 24.0.13 '@types/parse-json@4.0.2': {} '@types/pg@8.11.11': dependencies: - '@types/node': 20.17.24 + '@types/node': 24.0.13 pg-protocol: 1.8.0 pg-types: 4.0.2 @@ -17517,11 +18481,11 @@ snapshots: '@types/proxy-from-env@1.0.4': dependencies: - '@types/node': 20.17.24 + '@types/node': 24.0.13 '@types/qrcode@1.5.5': dependencies: - '@types/node': 20.17.24 + '@types/node': 24.0.13 '@types/qs@6.9.18': {} @@ -17555,14 +18519,18 @@ snapshots: dependencies: '@types/node': 20.17.24 - '@types/request-ip@0.0.37': + '@types/request-ip@0.0.38': dependencies: - '@types/node': 20.17.24 + '@types/node': 24.0.13 '@types/retry@0.12.0': {} '@types/retry@0.12.5': {} + '@types/sax@1.2.7': + dependencies: + '@types/node': 20.17.24 + '@types/semver@7.5.8': {} '@types/send@0.17.4': @@ -17576,11 +18544,17 @@ snapshots: '@types/node': 20.17.24 '@types/send': 0.17.4 + '@types/stream-buffers@3.0.8': + dependencies: + '@types/node': 20.17.24 + + '@types/tough-cookie@4.0.5': {} + '@types/triple-beam@1.3.5': {} '@types/tunnel@0.0.4': dependencies: - '@types/node': 20.17.24 + '@types/node': 24.0.13 '@types/turndown@5.0.5': {} @@ -17598,36 +18572,147 @@ snapshots: dependencies: '@types/webidl-conversions': 7.0.3 - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2)': + '@types/xml-encryption@1.2.4': dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.2) + '@types/node': 20.17.24 + + '@types/xml2js@0.4.14': + dependencies: + '@types/node': 24.0.13 + + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 20.17.24 + optional: true + + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.9.3))(eslint@8.56.0)(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.9.3) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.8.2) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.8.2) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.56.0)(typescript@5.9.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.9.3) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.0 + debug: 4.4.3 + eslint: 8.56.0 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + semver: 7.7.4 + ts-api-utils: 1.4.3(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.3 eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - semver: 7.7.1 - ts-api-utils: 1.4.3(typescript@5.8.2) + semver: 7.7.4 + ts-api-utils: 1.4.3(typescript@5.9.3) optionalDependencies: - typescript: 5.8.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2)': + '@typescript-eslint/eslint-plugin@8.59.0(@typescript-eslint/parser@8.59.0(eslint@8.56.0)(typescript@5.9.3))(eslint@8.56.0)(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.59.0(eslint@8.56.0)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.59.0 + '@typescript-eslint/type-utils': 8.59.0(eslint@8.56.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.0(eslint@8.56.0)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.59.0 + eslint: 8.56.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/eslint-plugin@8.59.0(@typescript-eslint/parser@8.59.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.59.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.59.0 + '@typescript-eslint/type-utils': 8.59.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.59.0 + eslint: 8.57.1 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.0 + debug: 4.4.3 + eslint: 8.56.0 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.3 eslint: 8.57.1 optionalDependencies: - typescript: 5.8.2 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.59.0(eslint@8.56.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.59.0 + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.59.0 + debug: 4.4.3 + eslint: 8.56.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.59.0(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.59.0 + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.59.0 + debug: 4.4.3 + eslint: 8.57.1 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.59.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@5.9.3) + '@typescript-eslint/types': 8.59.0 + debug: 4.4.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -17636,54 +18721,157 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.8.2)': + '@typescript-eslint/scope-manager@8.59.0': dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.2) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.8.2) - debug: 4.4.0 - eslint: 8.57.1 - ts-api-utils: 1.4.3(typescript@5.8.2) + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/visitor-keys': 8.59.0 + + '@typescript-eslint/tsconfig-utils@8.59.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/type-utils@6.21.0(eslint@8.56.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.9.3) + debug: 4.4.3 + eslint: 8.56.0 + ts-api-utils: 1.4.3(typescript@5.9.3) optionalDependencies: - typescript: 5.8.2 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3) + debug: 4.4.3 + eslint: 8.57.1 + ts-api-utils: 1.4.3(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/type-utils@8.59.0(eslint@8.56.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.0(eslint@8.56.0)(typescript@5.9.3) + debug: 4.4.3 + eslint: 8.56.0 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/type-utils@8.59.0(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.0(eslint@8.57.1)(typescript@5.9.3) + debug: 4.4.3 + eslint: 8.57.1 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color '@typescript-eslint/types@6.21.0': {} - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.8.2)': + '@typescript-eslint/types@8.59.0': {} + + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.0 + debug: 4.4.3 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.7.1 - ts-api-utils: 1.4.3(typescript@5.8.2) + semver: 7.7.4 + ts-api-utils: 1.4.3(typescript@5.9.3) optionalDependencies: - typescript: 5.8.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.8.2)': + '@typescript-eslint/typescript-estree@8.59.0(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@8.57.1) + '@typescript-eslint/project-service': 8.59.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@5.9.3) + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/visitor-keys': 8.59.0 + debug: 4.4.3 + minimatch: 10.2.5 + semver: 7.7.4 + tinyglobby: 0.2.15 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@6.21.0(eslint@8.56.0)(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@8.56.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.2) - eslint: 8.57.1 - semver: 7.7.1 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3) + eslint: 8.56.0 + semver: 7.7.4 transitivePeerDependencies: - supports-color - typescript + '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3) + eslint: 8.57.1 + semver: 7.7.4 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/utils@8.59.0(eslint@8.56.0)(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@8.56.0) + '@typescript-eslint/scope-manager': 8.59.0 + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) + eslint: 8.56.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.59.0(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) + '@typescript-eslint/scope-manager': 8.59.0 + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) + eslint: 8.57.1 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@6.21.0': dependencies: '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@8.59.0': + dependencies: + '@typescript-eslint/types': 8.59.0 + eslint-visitor-keys: 5.0.1 + '@ungap/structured-clone@1.3.0': {} '@unhead/dom@1.11.20': @@ -17701,255 +18889,103 @@ snapshots: '@unhead/schema': 1.11.20 packrup: 0.1.2 - '@unhead/vue@1.11.20(vue@3.5.22(typescript@5.8.2))': + '@unhead/vue@1.11.20(vue@3.5.22(typescript@5.9.3))': dependencies: '@unhead/schema': 1.11.20 '@unhead/shared': 1.11.20 hookable: 5.5.3 unhead: 1.11.20 - vue: 3.5.22(typescript@5.8.2) + vue: 3.5.22(typescript@5.9.3) - '@vitest/coverage-v8@3.1.1(vitest@3.1.1(@types/debug@4.1.12)(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitest/coverage-v8@4.1.5(vitest@4.1.5)': dependencies: - '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 - debug: 4.4.3 + '@vitest/utils': 4.1.5 + ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 - istanbul-reports: 3.1.7 - magic-string: 0.30.21 - magicast: 0.3.5 - std-env: 3.10.0 - test-exclude: 7.0.1 - tinyrainbow: 2.0.0 - vitest: 3.1.1(@types/debug@4.1.12)(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - transitivePeerDependencies: - - supports-color + istanbul-reports: 3.2.0 + magicast: 0.5.2 + obug: 2.1.1 + std-env: 4.1.0 + tinyrainbow: 3.1.0 + vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@20.17.24)(@vitest/coverage-v8@4.1.5)(jsdom@26.1.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@6.2.2(@types/node@20.17.24)(jiti@1.21.7)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) - '@vitest/coverage-v8@3.1.1(vitest@3.1.1(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))': - dependencies: - '@ampproject/remapping': 2.3.0 - '@bcoe/v8-coverage': 1.0.2 - debug: 4.4.3 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 - istanbul-reports: 3.1.7 - magic-string: 0.30.21 - magicast: 0.3.5 - std-env: 3.10.0 - test-exclude: 7.0.1 - tinyrainbow: 2.0.0 - vitest: 3.1.1(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - transitivePeerDependencies: - - supports-color - - '@vitest/expect@1.6.1': - dependencies: - '@vitest/spy': 1.6.1 - '@vitest/utils': 1.6.1 - chai: 4.5.0 - - '@vitest/expect@2.1.9': - dependencies: - '@vitest/spy': 2.1.9 - '@vitest/utils': 2.1.9 - chai: 5.2.0 - tinyrainbow: 1.2.0 - - '@vitest/expect@3.1.1': - dependencies: - '@vitest/spy': 3.1.1 - '@vitest/utils': 3.1.1 - chai: 5.2.0 - tinyrainbow: 2.0.0 - - '@vitest/expect@4.0.16': + '@vitest/expect@4.1.5': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.0.16 - '@vitest/utils': 4.0.16 + '@vitest/spy': 4.1.5 + '@vitest/utils': 4.1.5 chai: 6.2.2 - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 - '@vitest/mocker@2.1.9(vite@5.4.14(@types/node@24.0.13)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0))': + '@vitest/mocker@4.1.5(vite@6.2.2(@types/node@20.17.24)(jiti@1.21.7)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - '@vitest/spy': 2.1.9 + '@vitest/spy': 4.1.5 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 5.4.14(@types/node@24.0.13)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0) + vite: 6.2.2(@types/node@20.17.24)(jiti@1.21.7)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - '@vitest/mocker@3.1.1(vite@6.2.2(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitest/mocker@4.1.5(vite@6.2.2(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - '@vitest/spy': 3.1.1 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - vite: 6.2.2(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - - '@vitest/mocker@3.1.1(vite@6.2.2(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))': - dependencies: - '@vitest/spy': 3.1.1 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - vite: 6.2.2(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - - '@vitest/mocker@4.0.16(vite@6.2.2(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))': - dependencies: - '@vitest/spy': 4.0.16 + '@vitest/spy': 4.1.5 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: vite: 6.2.2(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - '@vitest/mocker@4.0.16(vite@6.2.2(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitest/mocker@4.1.5(vite@6.2.2(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - '@vitest/spy': 4.0.16 + '@vitest/spy': 4.1.5 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: vite: 6.2.2(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - '@vitest/pretty-format@2.1.9': + '@vitest/pretty-format@4.1.5': dependencies: - tinyrainbow: 1.2.0 + tinyrainbow: 3.1.0 - '@vitest/pretty-format@3.1.1': + '@vitest/runner@4.1.5': dependencies: - tinyrainbow: 2.0.0 - - '@vitest/pretty-format@4.0.16': - dependencies: - tinyrainbow: 3.0.3 - - '@vitest/runner@1.6.1': - dependencies: - '@vitest/utils': 1.6.1 - p-limit: 5.0.0 - pathe: 1.1.2 - - '@vitest/runner@2.1.9': - dependencies: - '@vitest/utils': 2.1.9 - pathe: 1.1.2 - - '@vitest/runner@3.1.1': - dependencies: - '@vitest/utils': 3.1.1 + '@vitest/utils': 4.1.5 pathe: 2.0.3 - '@vitest/runner@4.0.16': + '@vitest/snapshot@4.1.5': dependencies: - '@vitest/utils': 4.0.16 - pathe: 2.0.3 - - '@vitest/snapshot@1.6.1': - dependencies: - magic-string: 0.30.21 - pathe: 1.1.2 - pretty-format: 29.7.0 - - '@vitest/snapshot@2.1.9': - dependencies: - '@vitest/pretty-format': 2.1.9 - magic-string: 0.30.21 - pathe: 1.1.2 - - '@vitest/snapshot@3.1.1': - dependencies: - '@vitest/pretty-format': 3.1.1 - magic-string: 0.30.17 - pathe: 2.0.3 - - '@vitest/snapshot@4.0.16': - dependencies: - '@vitest/pretty-format': 4.0.16 + '@vitest/pretty-format': 4.1.5 + '@vitest/utils': 4.1.5 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@1.6.1': - dependencies: - tinyspy: 2.2.1 + '@vitest/spy@4.1.5': {} - '@vitest/spy@2.1.9': + '@vitest/utils@4.1.5': dependencies: - tinyspy: 3.0.2 + '@vitest/pretty-format': 4.1.5 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 - '@vitest/spy@3.1.1': - dependencies: - tinyspy: 3.0.2 - - '@vitest/spy@4.0.16': {} - - '@vitest/utils@1.6.1': - dependencies: - diff-sequences: 29.6.3 - estree-walker: 3.0.3 - loupe: 2.3.7 - pretty-format: 29.7.0 - - '@vitest/utils@2.1.9': - dependencies: - '@vitest/pretty-format': 2.1.9 - loupe: 3.1.3 - tinyrainbow: 1.2.0 - - '@vitest/utils@3.1.1': - dependencies: - '@vitest/pretty-format': 3.1.1 - loupe: 3.1.3 - tinyrainbow: 2.0.0 - - '@vitest/utils@4.0.16': - dependencies: - '@vitest/pretty-format': 4.0.16 - tinyrainbow: 3.0.3 - - '@vue/compiler-core@3.5.13': - dependencies: - '@babel/parser': 7.28.5 - '@vue/shared': 3.5.13 - entities: 4.5.0 - estree-walker: 2.0.2 - source-map-js: 1.2.1 + '@vladfrangu/async_event_emitter@2.4.7': {} '@vue/compiler-core@3.5.22': dependencies: - '@babel/parser': 7.28.5 + '@babel/parser': 7.29.2 '@vue/shared': 3.5.22 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.13': - dependencies: - '@vue/compiler-core': 3.5.13 - '@vue/shared': 3.5.13 - '@vue/compiler-dom@3.5.22': dependencies: '@vue/compiler-core': 3.5.22 '@vue/shared': 3.5.22 - '@vue/compiler-sfc@3.5.13': - dependencies: - '@babel/parser': 7.28.5 - '@vue/compiler-core': 3.5.13 - '@vue/compiler-dom': 3.5.13 - '@vue/compiler-ssr': 3.5.13 - '@vue/shared': 3.5.13 - estree-walker: 2.0.2 - magic-string: 0.30.21 - postcss: 8.5.6 - source-map-js: 1.2.1 - '@vue/compiler-sfc@3.5.22': dependencies: - '@babel/parser': 7.28.5 + '@babel/parser': 7.29.2 '@vue/compiler-core': 3.5.22 '@vue/compiler-dom': 3.5.22 '@vue/compiler-ssr': 3.5.22 @@ -17959,11 +18995,6 @@ snapshots: postcss: 8.5.6 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.13': - dependencies: - '@vue/compiler-dom': 3.5.13 - '@vue/shared': 3.5.13 - '@vue/compiler-ssr@3.5.22': dependencies: '@vue/compiler-dom': 3.5.22 @@ -17971,31 +19002,15 @@ snapshots: '@vue/devtools-api@6.6.4': {} - '@vue/reactivity@3.5.13': - dependencies: - '@vue/shared': 3.5.13 - '@vue/reactivity@3.5.22': dependencies: '@vue/shared': 3.5.22 - '@vue/runtime-core@3.5.13': - dependencies: - '@vue/reactivity': 3.5.13 - '@vue/shared': 3.5.13 - '@vue/runtime-core@3.5.22': dependencies: '@vue/reactivity': 3.5.22 '@vue/shared': 3.5.22 - '@vue/runtime-dom@3.5.13': - dependencies: - '@vue/reactivity': 3.5.13 - '@vue/runtime-core': 3.5.13 - '@vue/shared': 3.5.13 - csstype: 3.1.3 - '@vue/runtime-dom@3.5.22': dependencies: '@vue/reactivity': 3.5.22 @@ -18003,44 +19018,36 @@ snapshots: '@vue/shared': 3.5.22 csstype: 3.1.3 - '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.8.2))': - dependencies: - '@vue/compiler-ssr': 3.5.13 - '@vue/shared': 3.5.13 - vue: 3.5.13(typescript@5.8.2) - - '@vue/server-renderer@3.5.22(vue@3.5.22(typescript@5.8.2))': + '@vue/server-renderer@3.5.22(vue@3.5.22(typescript@5.9.3))': dependencies: '@vue/compiler-ssr': 3.5.22 '@vue/shared': 3.5.22 - vue: 3.5.22(typescript@5.8.2) - - '@vue/shared@3.5.13': {} + vue: 3.5.22(typescript@5.9.3) '@vue/shared@3.5.22': {} - '@vueuse/core@10.11.1(vue@3.5.22(typescript@5.8.2))': + '@vueuse/core@10.11.1(vue@3.5.22(typescript@5.9.3))': dependencies: '@types/web-bluetooth': 0.0.20 '@vueuse/metadata': 10.11.1 - '@vueuse/shared': 10.11.1(vue@3.5.22(typescript@5.8.2)) - vue-demi: 0.14.10(vue@3.5.22(typescript@5.8.2)) + '@vueuse/shared': 10.11.1(vue@3.5.22(typescript@5.9.3)) + vue-demi: 0.14.10(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/core@13.9.0(vue@3.5.22(typescript@5.8.2))': + '@vueuse/core@13.9.0(vue@3.5.22(typescript@5.9.3))': dependencies: '@types/web-bluetooth': 0.0.21 '@vueuse/metadata': 13.9.0 - '@vueuse/shared': 13.9.0(vue@3.5.22(typescript@5.8.2)) - vue: 3.5.22(typescript@5.8.2) + '@vueuse/shared': 13.9.0(vue@3.5.22(typescript@5.9.3)) + vue: 3.5.22(typescript@5.9.3) - '@vueuse/integrations@13.9.0(axios@1.13.6)(focus-trap@7.6.5)(fuse.js@7.1.0)(nprogress@0.2.0)(qrcode@1.5.4)(vue@3.5.22(typescript@5.8.2))': + '@vueuse/integrations@13.9.0(axios@1.13.6)(focus-trap@7.6.5)(fuse.js@7.1.0)(nprogress@0.2.0)(qrcode@1.5.4)(vue@3.5.22(typescript@5.9.3))': dependencies: - '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.8.2)) - '@vueuse/shared': 13.9.0(vue@3.5.22(typescript@5.8.2)) - vue: 3.5.22(typescript@5.8.2) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) + '@vueuse/shared': 13.9.0(vue@3.5.22(typescript@5.9.3)) + vue: 3.5.22(typescript@5.9.3) optionalDependencies: axios: 1.13.6 focus-trap: 7.6.5 @@ -18052,16 +19059,20 @@ snapshots: '@vueuse/metadata@13.9.0': {} - '@vueuse/shared@10.11.1(vue@3.5.22(typescript@5.8.2))': + '@vueuse/shared@10.11.1(vue@3.5.22(typescript@5.9.3))': dependencies: - vue-demi: 0.14.10(vue@3.5.22(typescript@5.8.2)) + vue-demi: 0.14.10(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/shared@13.9.0(vue@3.5.22(typescript@5.8.2))': + '@vueuse/shared@13.9.0(vue@3.5.22(typescript@5.9.3))': dependencies: - vue: 3.5.22(typescript@5.8.2) + vue: 3.5.22(typescript@5.9.3) + + '@wecom/crypto@1.0.1': {} + + '@xmldom/is-dom-node@1.0.1': {} '@xmldom/xmldom@0.8.10': {} @@ -18110,12 +19121,13 @@ snapshots: address@1.2.2: {} + adm-zip@0.5.17: {} + agent-base@6.0.2: dependencies: debug: 4.4.3 transitivePeerDependencies: - supports-color - optional: true agent-base@7.1.3: {} @@ -18206,49 +19218,40 @@ snapshots: - proxy-agent - supports-color - ali-oss@6.23.0(proxy-agent@6.5.0): + alipay-sdk@4.14.0: dependencies: - address: 1.2.2 - agentkeepalive: 3.5.3 - bowser: 1.9.4 - copy-to: 2.0.1 - dateformat: 2.2.0 - debug: 4.4.3 - destroy: 1.2.0 - end-or-error: 1.0.1 - get-ready: 1.0.0 - humanize-ms: 1.2.1 - is-type-of: 1.4.0 - js-base64: 2.6.4 - jstoxml: 2.2.9 - lodash: 4.17.23 - merge-descriptors: 1.0.3 - mime: 2.6.0 - platform: 1.3.6 - pump: 3.0.2 - qs: 6.14.1 - sdk-base: 2.0.1 - stream-http: 2.8.2 - stream-wormhole: 1.1.0 - urllib: 2.44.0(proxy-agent@6.5.0) - utility: 1.18.0 - xml2js: 0.6.2 - transitivePeerDependencies: - - proxy-agent - - supports-color + '@fidm/x509': 1.2.1 + bignumber.js: 9.3.1 + camelcase-keys: 7.0.2 + crypto-js: 4.2.0 + formstream: 1.5.2 + snakecase-keys: 8.1.0 + sse-decoder: 1.0.0 + urllib: 4.9.0 + utility: 2.5.0 ansi-align@3.0.1: dependencies: string-width: 4.2.3 + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + ansi-escapes@5.0.0: dependencies: type-fest: 1.4.0 + ansi-regex@2.1.1: {} + ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} + ansi-styles@2.2.1: {} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 @@ -18257,8 +19260,6 @@ snapshots: dependencies: color-convert: 2.0.1 - ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} ansis@4.2.0: {} @@ -18381,9 +19382,21 @@ snapshots: dependencies: safer-buffer: 2.1.2 + asn1js@3.0.10: + dependencies: + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + assert-plus@1.0.0: {} - assertion-error@1.1.0: {} + assert@2.1.0: + dependencies: + call-bind: 1.0.8 + is-nan: 1.3.2 + object-is: 1.1.6 + object.assign: 4.1.7 + util: 0.12.5 assertion-error@2.0.1: {} @@ -18399,6 +19412,12 @@ snapshots: dependencies: tslib: 2.8.1 + ast-v8-to-istanbul@1.0.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + estree-walker: 3.0.3 + js-tokens: 10.0.0 + async-function@1.0.0: {} async-mutex@0.5.0: @@ -18413,6 +19432,15 @@ snapshots: atomically@1.7.0: {} + autoprefixer@10.5.0(postcss@8.5.6): + dependencies: + browserslist: 4.28.2 + caniuse-lite: 1.0.30001788 + fraction.js: 5.3.4 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 @@ -18427,7 +19455,7 @@ snapshots: axios@1.13.6: dependencies: - follow-redirects: 1.15.11(debug@4.4.0) + follow-redirects: 1.15.11(debug@4.4.3) form-data: 4.0.5 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -18467,8 +19495,6 @@ snapshots: transitivePeerDependencies: - supports-color - bail@1.0.5: {} - bail@2.0.2: {} balanced-match@1.0.2: {} @@ -18478,9 +19504,44 @@ snapshots: bare-events@2.5.4: optional: true + bare-events@2.8.2: + optional: true + + bare-fs@4.7.1: + dependencies: + bare-events: 2.5.4 + bare-path: 3.0.0 + bare-stream: 2.13.0(bare-events@2.5.4) + bare-url: 2.4.2 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - bare-abort-controller + optional: true + + bare-os@3.8.7: + optional: true + + bare-path@3.0.0: + dependencies: + bare-os: 3.8.7 + optional: true + + bare-stream@2.13.0(bare-events@2.5.4): + dependencies: + streamx: 2.25.0 + teex: 1.0.1 + optionalDependencies: + bare-events: 2.5.4 + optional: true + + bare-url@2.4.2: + dependencies: + bare-path: 3.0.0 + optional: true + base64-js@1.5.1: {} - baseline-browser-mapping@2.10.0: {} + baseline-browser-mapping@2.10.20: {} basic-ftp@5.2.0: {} @@ -18499,6 +19560,12 @@ snapshots: readable-stream: 2.3.8 safe-buffer: 5.2.1 + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + bl@5.1.0: dependencies: buffer: 6.0.3 @@ -18536,7 +19603,7 @@ snapshots: http-errors: 2.0.1 iconv-lite: 0.7.2 on-finished: 2.4.1 - qs: 6.14.1 + qs: 6.15.1 raw-body: 3.0.2 type-is: 2.0.1 transitivePeerDependencies: @@ -18580,11 +19647,19 @@ snapshots: browserslist@4.24.4: dependencies: - caniuse-lite: 1.0.30001769 + caniuse-lite: 1.0.30001788 electron-to-chromium: 1.5.118 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.24.4) + browserslist@4.28.2: + dependencies: + baseline-browser-mapping: 2.10.20 + caniuse-lite: 1.0.30001788 + electron-to-chromium: 1.5.341 + node-releases: 2.0.37 + update-browserslist-db: 1.2.3(browserslist@4.28.2) + bson@6.10.3: {} buffer-alloc-unsafe@1.1.0: {} @@ -18619,6 +19694,10 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + bufferutil@4.1.0: + dependencies: + node-gyp-build: 4.8.4 + builtin-status-codes@3.0.0: {} bullmq@5.52.2: @@ -18637,22 +19716,22 @@ snapshots: dependencies: '@types/node': 20.17.24 - bun-types@1.3.12: + bun-types@1.3.13: dependencies: '@types/node': 20.17.24 bundle-n-require@1.1.2: dependencies: - esbuild: 0.25.1 + esbuild: 0.25.11 node-eval: 2.0.0 busboy@1.6.0: dependencies: streamsearch: 1.1.0 - bytes@3.1.2: {} + byte-counter@0.1.0: {} - cac@6.7.14: {} + bytes@3.1.2: {} cac@7.0.0: {} @@ -18668,6 +19747,16 @@ snapshots: normalize-url: 8.0.1 responselike: 3.0.0 + cacheable-request@13.0.18: + dependencies: + '@types/http-cache-semantics': 4.0.4 + get-stream: 9.0.1 + http-cache-semantics: 4.2.0 + keyv: 5.6.0 + mimic-response: 4.0.0 + normalize-url: 8.1.1 + responselike: 4.0.2 + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -18689,40 +19778,44 @@ snapshots: callsites@3.1.0: {} + callsites@4.2.0: {} + camelcase-css@2.0.1: {} + camelcase-keys@7.0.2: + dependencies: + camelcase: 6.3.0 + map-obj: 4.3.0 + quick-lru: 5.1.1 + type-fest: 1.4.0 + camelcase@5.3.1: {} camelcase@6.3.0: {} camelcase@7.0.1: {} - caniuse-lite@1.0.30001769: {} + caniuse-lite@1.0.30001788: {} + + canvas@3.2.3: + dependencies: + node-addon-api: 7.1.1 + prebuild-install: 7.1.3 caseless@0.12.0: {} ccount@2.0.1: {} - chai@4.5.0: - dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 4.1.4 - get-func-name: 2.0.2 - loupe: 2.3.7 - pathval: 1.1.1 - type-detect: 4.1.0 - - chai@5.2.0: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.1.3 - pathval: 2.0.0 - chai@6.2.2: {} + chalk@1.1.3: + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -18736,8 +19829,6 @@ snapshots: chalk@5.3.0: {} - chalk@5.4.1: {} - chalk@5.6.2: {} character-entities-html4@2.1.0: {} @@ -18754,11 +19845,7 @@ snapshots: character-reference-invalid@2.0.1: {} - check-error@1.0.3: - dependencies: - get-func-name: 2.0.2 - - check-error@2.1.1: {} + chardet@2.1.1: {} cheerio-select@2.1.0: dependencies: @@ -18795,17 +19882,25 @@ snapshots: dependencies: readdirp: 4.1.2 + chownr@1.1.4: {} + chownr@3.0.0: {} + chromium-bidi@0.11.0(devtools-protocol@0.0.1367902): + dependencies: + devtools-protocol: 0.0.1367902 + mitt: 3.0.1 + zod: 3.23.8 + ci-info@3.9.0: {} classcat@5.0.5: {} claygl@1.3.0: {} - clear-any-console@1.16.3(react@18.3.1)(ws@8.20.0): + clear-any-console@1.16.3(encoding@0.1.13)(react@18.3.1)(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): dependencies: - langbase: 1.1.44(react@18.3.1)(ws@8.20.0) + langbase: 1.1.44(encoding@0.1.13)(react@18.3.1)(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) transitivePeerDependencies: - encoding - react @@ -18813,6 +19908,10 @@ snapshots: cli-boxes@3.0.0: {} + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + cli-cursor@4.0.0: dependencies: restore-cursor: 4.0.0 @@ -18824,15 +19923,19 @@ snapshots: slice-ansi: 5.0.0 string-width: 5.1.2 - cli-welcome@2.2.3(react@18.3.1)(ws@8.20.0): + cli-welcome@2.2.3(encoding@0.1.13)(react@18.3.1)(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): dependencies: chalk: 2.4.2 - clear-any-console: 1.16.3(react@18.3.1)(ws@8.20.0) + clear-any-console: 1.16.3(encoding@0.1.13)(react@18.3.1)(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) transitivePeerDependencies: - encoding - react - ws + cli-width@3.0.0: {} + + cli-width@4.1.0: {} + client-only@0.0.1: {} cliui@6.0.0: @@ -18847,6 +19950,10 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + clone@1.0.4: {} + + clsx@1.2.1: {} + clsx@2.1.1: {} cluster-key-slot@1.1.2: {} @@ -18861,8 +19968,6 @@ snapshots: '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.6 - collapse-white-space@1.0.6: {} - color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -18906,6 +20011,8 @@ snapshots: commander@11.1.0: {} + commander@14.0.3: {} + commander@2.20.3: {} commander@4.1.1: {} @@ -18947,9 +20054,7 @@ snapshots: make-dir: 3.1.0 onetime: 5.1.2 pkg-up: 3.1.0 - semver: 7.7.3 - - confbox@0.1.8: {} + semver: 7.7.4 config-chain@1.1.13: dependencies: @@ -18992,7 +20097,7 @@ snapshots: core-js-compat@3.41.0: dependencies: - browserslist: 4.24.4 + browserslist: 4.28.2 core-js@3.41.0: {} @@ -19024,6 +20129,40 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 + cosmiconfig@9.0.1(typescript@5.9.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.9.3 + + crawlee@3.16.0(@types/node@20.17.24)(bufferutil@4.1.0)(canvas@3.2.3)(puppeteer@23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10): + dependencies: + '@crawlee/basic': 3.16.0 + '@crawlee/browser': 3.16.0(puppeteer@23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) + '@crawlee/browser-pool': 3.16.0(puppeteer@23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) + '@crawlee/cheerio': 3.16.0 + '@crawlee/cli': 3.16.0(@types/node@20.17.24) + '@crawlee/core': 3.16.0 + '@crawlee/http': 3.16.0 + '@crawlee/jsdom': 3.16.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10) + '@crawlee/linkedom': 3.16.0(canvas@3.2.3) + '@crawlee/playwright': 3.16.0(puppeteer@23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) + '@crawlee/puppeteer': 3.16.0(puppeteer@23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) + '@crawlee/utils': 3.16.0 + import-local: 3.2.0 + tslib: 2.8.1 + optionalDependencies: + puppeteer: 23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - '@types/node' + - bufferutil + - canvas + - supports-color + - utf-8-validate + crc-32@1.2.2: {} crc32-stream@6.0.0: @@ -19082,13 +20221,22 @@ snapshots: dependencies: css-tree: 1.1.3 + cssom@0.5.0: {} + + cssstyle@4.6.0: + dependencies: + '@asamuzakjp/css-color': 3.2.0 + rrweb-cssom: 0.8.0 + csstype@3.1.3: {} - cva@1.0.0-beta.2(typescript@5.8.2): + csv-stringify@6.7.0: {} + + cva@1.0.0-beta.2(typescript@5.9.3): dependencies: clsx: 2.1.1 optionalDependencies: - typescript: 5.8.2 + typescript: 5.9.3 cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.1): dependencies: @@ -19282,6 +20430,11 @@ snapshots: data-uri-to-buffer@6.0.2: {} + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.1.1 + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -19340,12 +20493,18 @@ snapshots: decimal.js-light@2.5.1: {} + decimal.js@10.6.0: {} + decode-named-character-reference@1.2.0: dependencies: character-entities: 2.0.2 decode-uri-component@0.2.2: {} + decompress-response@10.0.0: + dependencies: + mimic-response: 4.0.0 + decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 @@ -19388,12 +20547,6 @@ snapshots: pify: 2.3.0 strip-dirs: 2.1.0 - deep-eql@4.1.4: - dependencies: - type-detect: 4.1.0 - - deep-eql@5.0.2: {} - deep-extend@0.6.0: {} deep-is@0.1.4: {} @@ -19404,6 +20557,10 @@ snapshots: dependencies: os-name: 1.0.3 + defaults@1.0.4: + dependencies: + clone: 1.0.4 + defer-to-connect@2.0.1: {} define-data-property@1.1.4: @@ -19451,8 +20608,7 @@ snapshots: detect-libc@1.0.3: optional: true - detect-libc@2.1.2: - optional: true + detect-libc@2.1.2: {} detect-node-es@1.1.0: {} @@ -19460,9 +20616,11 @@ snapshots: dependencies: dequal: 2.0.3 - didyoumean@1.2.2: {} + devtools-protocol@0.0.1367902: {} - diff-sequences@29.6.3: {} + devtools-protocol@0.0.1617982: {} + + didyoumean@1.2.2: {} diff@5.2.0: {} @@ -19478,6 +20636,10 @@ snapshots: dlv@1.1.3: {} + dns-packet@5.6.1: + dependencies: + '@leichtgewicht/ip-codec': 2.0.5 + dockerfile-ast@0.7.1: dependencies: vscode-languageserver-textdocument: 1.0.12 @@ -19534,10 +20696,19 @@ snapshots: 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@6.0.1: dependencies: is-obj: 2.0.0 + dot-prop@7.2.0: + dependencies: + type-fest: 2.19.0 + dotenv@16.5.0: {} dotenv@17.3.1: {} @@ -19595,6 +20766,8 @@ snapshots: electron-to-chromium@1.5.118: {} + electron-to-chromium@1.5.341: {} + elkjs@0.9.3: {} emoji-regex@10.4.0: {} @@ -19625,6 +20798,8 @@ snapshots: entities@4.5.0: {} + entities@7.0.1: {} + env-paths@2.2.1: {} error-ex@1.3.2: @@ -19711,9 +20886,7 @@ snapshots: iterator.prototype: 1.1.5 safe-array-concat: 1.1.3 - es-module-lexer@1.6.0: {} - - es-module-lexer@1.7.0: {} + es-module-lexer@2.1.0: {} es-object-atoms@1.1.1: dependencies: @@ -19738,60 +20911,6 @@ snapshots: es-toolkit@1.43.0: {} - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - - esbuild@0.25.1: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.1 - '@esbuild/android-arm': 0.25.1 - '@esbuild/android-arm64': 0.25.1 - '@esbuild/android-x64': 0.25.1 - '@esbuild/darwin-arm64': 0.25.1 - '@esbuild/darwin-x64': 0.25.1 - '@esbuild/freebsd-arm64': 0.25.1 - '@esbuild/freebsd-x64': 0.25.1 - '@esbuild/linux-arm': 0.25.1 - '@esbuild/linux-arm64': 0.25.1 - '@esbuild/linux-ia32': 0.25.1 - '@esbuild/linux-loong64': 0.25.1 - '@esbuild/linux-mips64el': 0.25.1 - '@esbuild/linux-ppc64': 0.25.1 - '@esbuild/linux-riscv64': 0.25.1 - '@esbuild/linux-s390x': 0.25.1 - '@esbuild/linux-x64': 0.25.1 - '@esbuild/netbsd-arm64': 0.25.1 - '@esbuild/netbsd-x64': 0.25.1 - '@esbuild/openbsd-arm64': 0.25.1 - '@esbuild/openbsd-x64': 0.25.1 - '@esbuild/sunos-x64': 0.25.1 - '@esbuild/win32-arm64': 0.25.1 - '@esbuild/win32-ia32': 0.25.1 - '@esbuild/win32-x64': 0.25.1 - esbuild@0.25.11: optionalDependencies: '@esbuild/aix-ppc64': 0.25.11 @@ -19851,21 +20970,41 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-next@15.5.12(eslint@8.57.1)(typescript@5.8.2): + eslint-config-next@15.5.12(eslint@8.56.0)(typescript@5.9.3): dependencies: '@next/eslint-plugin-next': 15.5.12 - '@rushstack/eslint-patch': 1.11.0 - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.2) + '@rushstack/eslint-patch': 1.16.1 + '@typescript-eslint/eslint-plugin': 8.59.0(@typescript-eslint/parser@8.59.0(eslint@8.56.0)(typescript@5.9.3))(eslint@8.56.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.0(eslint@8.56.0)(typescript@5.9.3) + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.9.0(eslint-plugin-import@2.32.0)(eslint@8.56.0) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.59.0(eslint@8.56.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.9.0)(eslint@8.56.0) + eslint-plugin-jsx-a11y: 6.10.2(eslint@8.56.0) + eslint-plugin-react: 7.37.4(eslint@8.56.0) + eslint-plugin-react-hooks: 5.2.0(eslint@8.56.0) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + + eslint-config-next@15.5.12(eslint@8.57.1)(typescript@5.9.3): + dependencies: + '@next/eslint-plugin-next': 15.5.12 + '@rushstack/eslint-patch': 1.16.1 + '@typescript-eslint/eslint-plugin': 8.59.0(@typescript-eslint/parser@8.59.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.0(eslint@8.57.1)(typescript@5.9.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.9.0(eslint-plugin-import@2.32.0)(eslint@8.57.1) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-typescript@3.9.0)(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.59.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.9.0)(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) eslint-plugin-react: 7.37.4(eslint@8.57.1) eslint-plugin-react-hooks: 5.2.0(eslint@8.57.1) optionalDependencies: - typescript: 5.8.2 + typescript: 5.9.3 transitivePeerDependencies: - eslint-import-resolver-webpack - eslint-plugin-import-x @@ -19879,33 +21018,59 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.9.0(eslint-plugin-import@2.32.0)(eslint@8.57.1): + eslint-import-resolver-typescript@3.9.0(eslint-plugin-import@2.32.0)(eslint@8.56.0): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 - eslint: 8.57.1 - get-tsconfig: 4.13.0 + eslint: 8.56.0 + get-tsconfig: 4.13.6 is-bun-module: 1.3.0 oxc-resolver: 5.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.15 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-typescript@3.9.0)(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.59.0(eslint@8.56.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.9.0)(eslint@8.56.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.0)(eslint@8.57.1): + eslint-import-resolver-typescript@3.9.0(eslint-plugin-import@2.32.0)(eslint@8.57.1): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.3 + eslint: 8.57.1 + get-tsconfig: 4.13.6 + is-bun-module: 1.3.0 + oxc-resolver: 5.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.15 + optionalDependencies: + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.59.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.9.0)(eslint@8.57.1) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.59.0(eslint@8.56.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.0)(eslint@8.56.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.2) + '@typescript-eslint/parser': 8.59.0(eslint@8.56.0)(typescript@5.9.3) + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.9.0(eslint-plugin-import@2.32.0)(eslint@8.56.0) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.59.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.0)(eslint@8.57.1): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.59.0(eslint@8.57.1)(typescript@5.9.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.9.0(eslint-plugin-import@2.32.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-typescript@3.9.0)(eslint@8.57.1): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.59.0(eslint@8.56.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.9.0)(eslint@8.56.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -19914,9 +21079,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.1 + eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.0)(eslint@8.57.1) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.59.0(eslint@8.56.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.0)(eslint@8.56.0) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -19928,12 +21093,60 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.2) + '@typescript-eslint/parser': 8.59.0(eslint@8.56.0)(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.59.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.9.0)(eslint@8.57.1): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.59.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.0)(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 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.59.0(eslint@8.57.1)(typescript@5.9.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-jsx-a11y@6.10.2(eslint@8.56.0): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.9 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.10.3 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 8.56.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1): dependencies: aria-query: 5.3.2 @@ -19953,10 +21166,36 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 + eslint-plugin-react-hooks@5.2.0(eslint@8.56.0): + dependencies: + eslint: 8.56.0 + eslint-plugin-react-hooks@5.2.0(eslint@8.57.1): dependencies: eslint: 8.57.1 + eslint-plugin-react@7.37.4(eslint@8.56.0): + dependencies: + array-includes: 3.1.9 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.1 + eslint: 8.56.0 + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + eslint-plugin-react@7.37.4(eslint@8.57.1): dependencies: array-includes: 3.1.9 @@ -19986,10 +21225,55 @@ snapshots: eslint-visitor-keys@3.4.3: {} + eslint-visitor-keys@5.0.1: {} + + eslint@8.56.0: + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@8.56.0) + '@eslint-community/regexpp': 4.12.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.56.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.3.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + 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 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + 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 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@8.57.1) - '@eslint-community/regexpp': 4.12.1 + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.2 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.1 '@humanwhocodes/config-array': 0.13.0 @@ -20062,12 +21346,29 @@ snapshots: etag@1.8.1: {} + event-stream@3.3.4: + dependencies: + duplexer: 0.1.2 + from: 0.1.7 + map-stream: 0.1.0 + pause-stream: 0.0.11 + split: 0.3.3 + stream-combiner: 0.0.4 + through: 2.3.8 + event-target-shim@5.0.1: {} eventemitter3@4.0.7: {} eventemitter3@5.0.1: {} + events-universal@1.0.1: + dependencies: + bare-events: 2.8.2 + transitivePeerDependencies: + - bare-abort-controller + optional: true + events@3.3.0: {} eventsource-parser@3.0.1: {} @@ -20088,19 +21389,7 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 3.0.0 - execa@8.0.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - - expect-type@1.2.0: {} + expand-template@2.0.3: {} expect-type@1.3.0: {} @@ -20167,7 +21456,7 @@ snapshots: once: 1.4.0 parseurl: 1.3.3 proxy-addr: 2.0.7 - qs: 6.14.1 + qs: 6.15.1 range-parser: 1.2.1 router: 2.2.0 send: 1.2.1 @@ -20184,6 +21473,16 @@ snapshots: extend@3.0.2: {} + extract-zip@2.0.1: + dependencies: + debug: 4.4.3 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + extsprintf@1.3.0: {} fast-deep-equal@3.1.3: {} @@ -20224,6 +21523,10 @@ snapshots: dependencies: strnum: 1.1.2 + fast-xml-parser@4.5.6: + dependencies: + strnum: 1.1.2 + fast-xml-parser@5.2.5: dependencies: strnum: 2.1.2 @@ -20257,10 +21560,29 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 + fflate@0.8.2: {} + + figlet@1.11.0: + dependencies: + commander: 14.0.3 + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 + file-type@20.5.0: + dependencies: + '@tokenizer/inflate': 0.2.7 + strtok3: 10.3.5 + token-types: 6.1.2 + uint8array-extras: 1.4.0 + transitivePeerDependencies: + - supports-color + file-type@21.3.0: dependencies: '@tokenizer/inflate': 0.4.1 @@ -20330,6 +21652,19 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 + fingerprint-generator@2.1.82: + dependencies: + generative-bayesian-network: 2.1.82 + header-generator: 2.1.82 + tslib: 2.8.1 + + fingerprint-injector@2.1.82(puppeteer@23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)): + dependencies: + fingerprint-generator: 2.1.82 + tslib: 2.8.1 + optionalDependencies: + puppeteer: 23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + flat-cache@3.2.0: dependencies: flatted: 3.3.3 @@ -20348,9 +21683,9 @@ snapshots: dependencies: tabbable: 6.2.0 - follow-redirects@1.15.11(debug@4.4.0): + follow-redirects@1.15.11(debug@4.4.3): optionalDependencies: - debug: 4.4.0 + debug: 4.4.3 for-each@0.3.5: dependencies: @@ -20367,6 +21702,8 @@ snapshots: form-data-encoder@2.1.4: {} + form-data-encoder@4.1.0: {} + form-data@2.3.3: dependencies: asynckit: 0.4.0 @@ -20409,6 +21746,8 @@ snapshots: forwarded@0.2.0: {} + fraction.js@5.3.4: {} + framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 @@ -20425,8 +21764,16 @@ snapshots: fresh@2.0.0: {} + from@0.1.7: {} + fs-constants@1.0.0: {} + fs-extra@11.3.4: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.1 + universalify: 2.0.1 + fs-extra@8.1.0: dependencies: graceful-fs: 4.2.11 @@ -20460,6 +21807,16 @@ snapshots: fuse.js@7.1.0: {} + gaxios@5.1.3(encoding@0.1.13): + dependencies: + extend: 3.0.2 + https-proxy-agent: 5.0.1 + is-stream: 2.0.1 + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + gaxios@7.1.4: dependencies: extend: 3.0.2 @@ -20468,6 +21825,14 @@ snapshots: transitivePeerDependencies: - supports-color + gcp-metadata@5.3.0(encoding@0.1.13): + dependencies: + gaxios: 5.1.3(encoding@0.1.13) + json-bigint: 1.0.0 + transitivePeerDependencies: + - encoding + - supports-color + gcp-metadata@8.1.2: dependencies: gaxios: 7.1.4 @@ -20480,14 +21845,17 @@ snapshots: dependencies: is-property: 1.0.2 + generative-bayesian-network@2.1.82: + dependencies: + adm-zip: 0.5.17 + tslib: 2.8.1 + generic-pool@3.9.0: {} gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} - get-func-name@2.0.2: {} - get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -20517,9 +21885,16 @@ snapshots: object-assign: 4.1.1 pinkie-promise: 2.0.1 + get-stream@5.2.0: + dependencies: + pump: 3.0.2 + get-stream@6.0.1: {} - get-stream@8.0.1: {} + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 get-symbol-description@1.1.0: dependencies: @@ -20527,10 +21902,6 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.13.0: - dependencies: - resolve-pkg-maps: 1.0.0 - get-tsconfig@4.13.6: dependencies: resolve-pkg-maps: 1.0.0 @@ -20559,6 +21930,8 @@ snapshots: dependencies: assert-plus: 1.0.0 + github-from-package@0.0.0: {} + github-slugger@2.0.0: {} glob-parent@5.1.2: @@ -20635,6 +22008,16 @@ snapshots: gopd@1.2.0: {} + got-scraping@4.2.1: + dependencies: + got: 14.6.6 + header-generator: 2.1.82 + http2-wrapper: 2.2.1 + mimic-response: 4.0.0 + ow: 1.1.1 + quick-lru: 7.3.0 + tslib: 2.8.1 + got@12.6.1: dependencies: '@sindresorhus/is': 5.6.0 @@ -20649,6 +22032,21 @@ snapshots: p-cancelable: 3.0.0 responselike: 3.0.0 + got@14.6.6: + dependencies: + '@sindresorhus/is': 7.2.0 + byte-counter: 0.1.0 + cacheable-lookup: 7.0.0 + cacheable-request: 13.0.18 + decompress-response: 10.0.0 + form-data-encoder: 4.1.0 + http2-wrapper: 2.2.1 + keyv: 5.6.0 + lowercase-keys: 3.0.0 + p-cancelable: 4.0.1 + responselike: 4.0.2 + type-fest: 4.41.0 + graceful-fs@4.2.10: {} graceful-fs@4.2.11: {} @@ -20666,6 +22064,10 @@ snapshots: ajv: 6.12.6 har-schema: 2.0.0 + has-ansi@2.0.0: + dependencies: + ansi-regex: 2.1.1 + has-bigints@1.1.0: {} has-flag@3.0.0: {} @@ -20867,6 +22269,13 @@ snapshots: property-information: 7.0.0 space-separated-tokens: 2.0.2 + header-generator@2.1.82: + dependencies: + browserslist: 4.24.4 + generative-bayesian-network: 2.1.82 + ow: 0.28.2 + tslib: 2.8.1 + highlight.js@10.7.3: {} highlight.js@11.11.1: {} @@ -20885,8 +22294,16 @@ snapshots: hookable@6.1.0: {} + hpagent@1.2.0: {} + + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + html-escaper@2.0.2: {} + html-escaper@3.0.3: {} + html-parse-stringify@3.0.1: dependencies: void-elements: 3.1.0 @@ -20897,6 +22314,13 @@ snapshots: html-whitespace-sensitive-tag-names@3.0.1: {} + htmlparser2@10.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 7.0.1 + htmlparser2@8.0.2: dependencies: domelementtype: 2.3.0 @@ -20904,8 +22328,17 @@ snapshots: domutils: 3.2.2 entities: 4.5.0 + htmlparser2@9.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + 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: depd: 2.0.0 @@ -20941,7 +22374,7 @@ snapshots: http-proxy@1.18.1: dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.11(debug@4.4.0) + follow-redirects: 1.15.11(debug@4.4.3) requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -20963,7 +22396,6 @@ snapshots: debug: 4.4.3 transitivePeerDependencies: - supports-color - optional: true https-proxy-agent@7.0.6: dependencies: @@ -20972,9 +22404,14 @@ snapshots: transitivePeerDependencies: - supports-color - human-signals@4.3.1: {} + httpx@2.3.3: + dependencies: + '@types/node': 20.17.24 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color - human-signals@5.0.0: {} + human-signals@4.3.1: {} humanize-ms@1.2.1: dependencies: @@ -21006,6 +22443,8 @@ snapshots: ignore@5.3.2: {} + ignore@7.0.5: {} + immediate@3.0.6: {} immer@9.0.21: {} @@ -21019,6 +22458,11 @@ snapshots: import-lazy@4.0.0: {} + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + import-without-cache@0.2.5: {} imurmurhash@0.1.4: {} @@ -21036,6 +22480,43 @@ snapshots: inline-style-parser@0.2.4: {} + inquirer@8.2.7(@types/node@20.17.24): + dependencies: + '@inquirer/external-editor': 1.0.3(@types/node@20.17.24) + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + figures: 3.2.0 + lodash: 4.17.23 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 + transitivePeerDependencies: + - '@types/node' + + inquirer@9.3.8(@types/node@20.17.24): + dependencies: + '@inquirer/external-editor': 1.0.3(@types/node@20.17.24) + '@inquirer/figures': 1.0.15 + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 1.0.0 + ora: 5.4.1 + run-async: 3.0.0 + rxjs: 7.8.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + transitivePeerDependencies: + - '@types/node' + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -21094,6 +22575,13 @@ snapshots: is-alphabetical: 2.0.1 is-decimal: 2.0.1 + is-any-array@3.0.0: {} + + is-arguments@1.2.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-array-buffer@3.0.5: dependencies: call-bind: 1.0.8 @@ -21125,8 +22613,6 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-buffer@2.0.5: {} - is-bun-module@1.3.0: dependencies: semver: 7.7.4 @@ -21190,10 +22676,17 @@ snapshots: global-dirs: 3.0.1 is-path-inside: 3.0.3 + is-interactive@1.0.0: {} + is-interactive@2.0.0: {} is-map@2.0.3: {} + is-nan@1.3.2: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + is-natural-number@4.0.1: {} is-negative-zero@2.0.3: {} @@ -21213,12 +22706,12 @@ snapshots: is-path-inside@3.0.3: {} - is-plain-obj@2.1.0: {} - is-plain-obj@4.1.0: {} is-plain-object@5.0.0: {} + is-potential-custom-element-name@1.0.1: {} + is-promise@4.0.0: {} is-property@1.0.2: {} @@ -21244,6 +22737,8 @@ snapshots: is-stream@3.0.0: {} + is-stream@4.0.1: {} + is-string@1.1.1: dependencies: call-bound: 1.0.4 @@ -21267,6 +22762,8 @@ snapshots: is-typedarray@1.0.0: {} + is-unicode-supported@0.1.0: {} + is-unicode-supported@1.3.0: {} is-weakmap@2.0.2: {} @@ -21280,10 +22777,6 @@ snapshots: call-bound: 1.0.4 get-intrinsic: 1.3.0 - is-whitespace-character@1.0.4: {} - - is-word-character@1.0.4: {} - is-yarn-global@0.4.1: {} isarray@0.0.1: @@ -21295,6 +22788,10 @@ snapshots: isexe@2.0.0: {} + isomorphic-ws@5.0.0(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): + dependencies: + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + isomorphic.js@0.2.5: {} isstream@0.1.2: {} @@ -21307,15 +22804,7 @@ snapshots: make-dir: 4.0.0 supports-color: 7.2.0 - istanbul-lib-source-maps@5.0.6: - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - debug: 4.4.3 - istanbul-lib-coverage: 3.2.2 - transitivePeerDependencies: - - supports-color - - istanbul-reports@3.1.7: + istanbul-reports@3.2.0: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 @@ -21346,7 +22835,9 @@ snapshots: joplin-turndown-plugin-gfm@1.0.12: {} - jose@6.1.3: {} + jose@6.2.2: {} + + jquery@3.7.1: {} js-base64@2.6.4: {} @@ -21354,9 +22845,9 @@ snapshots: js-cookie@3.0.5: {} - js-tokens@4.0.0: {} + js-tokens@10.0.0: {} - js-tokens@9.0.1: {} + js-tokens@4.0.0: {} js-yaml@4.1.1: dependencies: @@ -21368,6 +22859,35 @@ snapshots: jschardet@3.1.1: {} + jsdom@26.1.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10): + dependencies: + cssstyle: 4.6.0 + data-urls: 5.0.0 + decimal.js: 10.6.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.23 + parse5: 7.2.1 + rrweb-cssom: 0.8.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 5.1.2 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.1.1 + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + xml-name-validator: 5.0.0 + optionalDependencies: + canvas: 3.2.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + jsep@1.4.0: {} jsesc@3.0.2: {} @@ -21418,6 +22938,12 @@ snapshots: graceful-fs: 4.2.11 optional: true + jsonfile@6.2.1: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + jsonpath-plus@10.3.0: dependencies: '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0) @@ -21428,9 +22954,9 @@ snapshots: jsonrepair@3.13.2: {} - jsonwebtoken@9.0.2: + jsonwebtoken@9.0.3: dependencies: - jws: 3.2.2 + jws: 4.0.1 lodash.includes: 4.3.0 lodash.isboolean: 3.0.3 lodash.isinteger: 4.0.4 @@ -21439,7 +22965,7 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.7.1 + semver: 7.7.4 jsprim@1.4.2: dependencies: @@ -21448,6 +22974,8 @@ snapshots: json-schema: 0.4.0 verror: 1.10.0 + jsrsasign@11.1.3: {} + jstoxml@2.2.9: {} jsx-ast-utils@3.3.5: @@ -21468,23 +22996,12 @@ snapshots: just-curry-it@5.3.0: {} - jwa@1.4.1: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - jwa@2.0.1: dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - jws@3.2.2: - dependencies: - jwa: 1.4.1 - safe-buffer: 5.2.1 - jws@4.0.1: dependencies: jwa: 2.0.1 @@ -21492,10 +23009,6 @@ snapshots: kareem@2.6.3: {} - katex@0.16.21: - dependencies: - commander: 8.3.0 - katex@0.16.22: dependencies: commander: 8.3.0 @@ -21504,16 +23017,24 @@ snapshots: dependencies: json-buffer: 3.0.1 + keyv@5.6.0: + dependencies: + '@keyv/serialize': 1.1.1 + khroma@2.1.0: {} + kitx@2.2.0: + dependencies: + '@types/node': 22.18.10 + kleur@4.1.5: {} kuler@2.0.0: {} - langbase@1.1.44(react@18.3.1)(ws@8.20.0): + langbase@1.1.44(encoding@0.1.13)(react@18.3.1)(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): dependencies: dotenv: 16.5.0 - openai: 4.104.0(ws@8.20.0)(zod@3.25.76) + openai: 4.104.0(encoding@0.1.13)(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76) zod: 3.25.76 zod-validation-error: 3.4.0(zod@3.25.76) optionalDependencies: @@ -21613,6 +23134,16 @@ snapshots: lines-and-columns@1.2.4: {} + linkedom@0.18.12(canvas@3.2.3): + dependencies: + css-select: 5.1.0 + cssom: 0.5.0 + html-escaper: 3.0.3 + htmlparser2: 10.1.0 + uhyphen: 0.2.0 + optionalDependencies: + canvas: 3.2.3 + lint-staged@13.3.0: dependencies: chalk: 5.3.0 @@ -21638,11 +23169,6 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 8.1.0 - local-pkg@0.5.1: - dependencies: - mlly: 1.7.4 - pkg-types: 1.3.1 - locate-path@3.0.0: dependencies: p-locate: 3.0.0 @@ -21664,12 +23190,16 @@ snapshots: lodash.defaults@4.2.0: {} + lodash.identity@3.0.0: {} + lodash.includes@4.3.0: {} lodash.isarguments@3.1.0: {} lodash.isboolean@3.0.3: {} + lodash.isequal@4.5.0: {} + lodash.isinteger@4.0.4: {} lodash.isnumber@3.0.3: {} @@ -21684,8 +23214,15 @@ snapshots: lodash.once@4.1.1: {} + lodash.pickby@4.6.0: {} + lodash@4.17.23: {} + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + log-symbols@5.1.0: dependencies: chalk: 5.6.2 @@ -21722,11 +23259,9 @@ snapshots: option: 0.2.4 underscore: 1.13.7 - loupe@2.3.7: + lower-case@2.0.2: dependencies: - get-func-name: 2.0.2 - - loupe@3.1.3: {} + tslib: 2.8.1 lowercase-keys@3.0.0: {} @@ -21757,18 +23292,14 @@ snapshots: luxon@3.5.0: {} - magic-string@0.30.17: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magicast@0.3.5: + magicast@0.5.2: dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 source-map-js: 1.2.1 make-dir@1.3.0: @@ -21796,7 +23327,9 @@ snapshots: underscore: 1.13.7 xmlbuilder: 10.1.1 - markdown-escapes@1.0.4: {} + map-obj@4.3.0: {} + + map-stream@0.1.0: {} markdown-table@3.0.4: {} @@ -22041,6 +23574,10 @@ snapshots: transitivePeerDependencies: - supports-color + metadata-saml2@2.1.2: + dependencies: + xml2js: 0.6.2 + methods@1.1.2: {} microdiff@1.5.0: {} @@ -22461,19 +23998,43 @@ snapshots: dependencies: minipass: 7.1.2 + mitt@3.0.1: {} + + mkdirp-classic@0.5.3: {} + mkdirp@0.5.6: dependencies: minimist: 1.2.8 - mlly@1.7.4: + ml-array-max@2.0.0: dependencies: - acorn: 8.15.0 - pathe: 2.0.3 - pkg-types: 1.3.1 - ufo: 1.5.4 + is-any-array: 3.0.0 + + ml-array-min@2.0.0: + dependencies: + is-any-array: 3.0.0 + + ml-array-rescale@2.0.0: + dependencies: + is-any-array: 3.0.0 + ml-array-max: 2.0.0 + ml-array-min: 2.0.0 + + ml-logistic-regression@2.0.0: + dependencies: + ml-matrix: 6.12.2 + + ml-matrix@6.12.2: + dependencies: + is-any-array: 3.0.0 + ml-array-rescale: 2.0.0 mmdb-lib@3.0.1: {} + moment-timezone@0.5.48: + dependencies: + moment: 2.30.1 + moment@2.30.1: {} monaco-editor@0.52.2: {} @@ -22483,17 +24044,17 @@ snapshots: '@types/whatwg-url': 11.0.5 whatwg-url: 14.1.1 - mongodb-memory-server-core@10.1.4(socks@2.8.4): + mongodb-memory-server-core@10.1.4(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.4): dependencies: async-mutex: 0.5.0 camelcase: 6.3.0 - debug: 4.4.0 + debug: 4.4.3 find-cache-dir: 3.3.2 - follow-redirects: 1.15.11(debug@4.4.0) + follow-redirects: 1.15.11(debug@4.4.3) https-proxy-agent: 7.0.6 - mongodb: 6.14.2(socks@2.8.4) + mongodb: 6.14.2(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.4) new-find-package-json: 2.0.0 - semver: 7.7.2 + semver: 7.7.4 tar-stream: 3.1.7 tslib: 2.8.1 yauzl: 3.2.0 @@ -22507,9 +24068,9 @@ snapshots: - socks - supports-color - mongodb-memory-server@10.1.4(socks@2.8.4): + mongodb-memory-server@10.1.4(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.4): dependencies: - mongodb-memory-server-core: 10.1.4(socks@2.8.4) + mongodb-memory-server-core: 10.1.4(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.4) tslib: 2.8.1 transitivePeerDependencies: - '@aws-sdk/credential-providers' @@ -22521,19 +24082,20 @@ snapshots: - socks - supports-color - mongodb@6.14.2(socks@2.8.4): + mongodb@6.14.2(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.4): dependencies: '@mongodb-js/saslprep': 1.2.0 bson: 6.10.3 mongodb-connection-string-url: 3.0.2 optionalDependencies: + gcp-metadata: 5.3.0(encoding@0.1.13) socks: 2.8.4 - mongoose@8.12.1(socks@2.8.4): + mongoose@8.12.1(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.4): dependencies: bson: 6.10.3 kareem: 2.6.3 - mongodb: 6.14.2(socks@2.8.4) + mongodb: 6.14.2(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.4) mpath: 0.9.0 mquery: 5.0.0 ms: 2.1.3 @@ -22589,6 +24151,10 @@ snapshots: concat-stream: 2.0.0 type-is: 1.6.18 + mute-stream@0.0.8: {} + + mute-stream@1.0.0: {} + mysql2@3.13.0: dependencies: aws-ssl-profiles: 1.1.2 @@ -22613,10 +24179,10 @@ snapshots: nanoid@3.3.11: {} - nanoid@5.1.3: {} - nanoid@5.1.5: {} + napi-build-utils@2.0.0: {} + natural-compare@1.4.0: {} negotiator@0.6.3: {} @@ -22631,7 +24197,7 @@ snapshots: transitivePeerDependencies: - supports-color - next-i18next@15.4.2(i18next@23.16.8)(next@16.2.1(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): + next-i18next@15.4.2(i18next@23.16.8)(next@16.2.4(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.26.10 '@types/hoist-non-react-statics': 3.3.6 @@ -22639,35 +24205,29 @@ snapshots: hoist-non-react-statics: 3.3.2 i18next: 23.16.8 i18next-fs-backend: 2.6.0 - next: 16.2.1(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1) + next: 16.2.4(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1) react: 18.3.1 react-i18next: 14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - next-rspack@16.2.1(@swc/helpers@0.5.15): + next@16.2.4(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1): dependencies: - '@next/rspack-core': 1.0.2(@swc/helpers@0.5.15) - transitivePeerDependencies: - - '@swc/helpers' - - next@16.2.1(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1): - dependencies: - '@next/env': 16.2.1 + '@next/env': 16.2.4 '@swc/helpers': 0.5.15 - baseline-browser-mapping: 2.10.0 - caniuse-lite: 1.0.30001769 + baseline-browser-mapping: 2.10.20 + caniuse-lite: 1.0.30001788 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) styled-jsx: 5.1.6(@babel/core@7.26.10)(react@18.3.1) optionalDependencies: - '@next/swc-darwin-arm64': 16.2.1 - '@next/swc-darwin-x64': 16.2.1 - '@next/swc-linux-arm64-gnu': 16.2.1 - '@next/swc-linux-arm64-musl': 16.2.1 - '@next/swc-linux-x64-gnu': 16.2.1 - '@next/swc-linux-x64-musl': 16.2.1 - '@next/swc-win32-arm64-msvc': 16.2.1 - '@next/swc-win32-x64-msvc': 16.2.1 + '@next/swc-darwin-arm64': 16.2.4 + '@next/swc-darwin-x64': 16.2.4 + '@next/swc-linux-arm64-gnu': 16.2.4 + '@next/swc-linux-arm64-musl': 16.2.4 + '@next/swc-linux-x64-gnu': 16.2.4 + '@next/swc-linux-x64-musl': 16.2.4 + '@next/swc-win32-arm64-msvc': 16.2.4 + '@next/swc-win32-x64-msvc': 16.2.4 '@opentelemetry/api': 1.9.0 sass: 1.85.1 sharp: 0.34.5 @@ -22675,15 +24235,23 @@ snapshots: - '@babel/core' - babel-plugin-macros - nextjs-cors@2.2.1(next@16.2.1(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1)): + nextjs-cors@2.2.1(next@16.2.4(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1)): dependencies: cors: 2.8.6 - next: 16.2.1(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1) + next: 16.2.4(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1) + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + + node-abi@3.89.0: + dependencies: + semver: 7.7.4 node-abort-controller@3.1.1: {} - node-addon-api@7.1.1: - optional: true + node-addon-api@7.1.1: {} node-cron@3.0.3: dependencies: @@ -22712,20 +24280,28 @@ snapshots: detect-libc: 2.1.2 optional: true + node-gyp-build@4.8.4: {} + node-hex@1.0.1: {} node-releases@2.0.19: {} + node-releases@2.0.37: {} + node-xlsx@0.24.0: dependencies: xlsx: https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz + nodemailer@7.0.13: {} + non-layered-tidy-tree-layout@2.0.2: {} normalize-path@3.0.0: {} normalize-url@8.0.1: {} + normalize-url@8.1.1: {} + npm-run-path@5.3.0: dependencies: path-key: 4.0.0 @@ -22736,14 +24312,23 @@ snapshots: dependencies: boolbase: 1.0.0 + nwsapi@2.2.23: {} + oauth-sign@0.9.0: {} + oauth4webapi@3.8.5: {} + object-assign@4.1.1: {} object-hash@3.0.0: {} object-inspect@1.13.4: {} + object-is@1.1.6: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + object-keys@1.1.1: {} object.assign@4.1.7: @@ -22808,7 +24393,7 @@ snapshots: dependencies: mimic-fn: 4.0.0 - openai@4.104.0(encoding@0.1.13)(ws@8.20.0)(zod@4.1.12): + openai@4.104.0(encoding@0.1.13)(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76): dependencies: '@types/node': 18.19.80 '@types/node-fetch': 2.6.12 @@ -22818,29 +24403,29 @@ snapshots: formdata-node: 4.4.1 node-fetch: 2.7.0(encoding@0.1.13) optionalDependencies: - ws: 8.20.0 - zod: 4.1.12 - transitivePeerDependencies: - - encoding - - openai@4.104.0(ws@8.20.0)(zod@3.25.76): - dependencies: - '@types/node': 18.19.80 - '@types/node-fetch': 2.6.12 - abort-controller: 3.0.0 - agentkeepalive: 4.6.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0(encoding@0.1.13) - optionalDependencies: - ws: 8.20.0 + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) zod: 3.25.76 transitivePeerDependencies: - encoding - openai@6.26.0(ws@8.20.0)(zod@4.1.12): + openai@4.104.0(encoding@0.1.13)(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@4.1.12): + dependencies: + '@types/node': 18.19.80 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0(encoding@0.1.13) optionalDependencies: - ws: 8.20.0 + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + zod: 4.1.12 + transitivePeerDependencies: + - encoding + + openai@6.26.0(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@4.1.12): + optionalDependencies: + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) zod: 4.1.12 openapi-fetch@0.14.1: @@ -22853,6 +24438,11 @@ snapshots: opener@1.5.2: {} + openid-client@6.8.3: + dependencies: + jose: 6.2.2 + oauth4webapi: 3.8.5 + option@0.2.4: {} optionator@0.8.3: @@ -22874,9 +24464,21 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + ora@7.0.1: dependencies: - chalk: 5.4.1 + chalk: 5.6.2 cli-cursor: 4.0.0 cli-spinners: 2.9.2 is-interactive: 2.0.0 @@ -22906,6 +24508,22 @@ snapshots: transitivePeerDependencies: - '@opentelemetry/api' + ow@0.28.2: + dependencies: + '@sindresorhus/is': 4.6.0 + callsites: 3.1.0 + dot-prop: 6.0.1 + lodash.isequal: 4.5.0 + vali-date: 1.0.0 + + ow@1.1.1: + dependencies: + '@sindresorhus/is': 5.6.0 + callsites: 4.2.0 + dot-prop: 7.2.0 + lodash.isequal: 4.5.0 + vali-date: 1.0.0 + own-keys@1.0.1: dependencies: get-intrinsic: 1.3.0 @@ -22928,6 +24546,8 @@ snapshots: p-cancelable@3.0.0: {} + p-cancelable@4.0.1: {} + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -22936,10 +24556,6 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-limit@5.0.0: - dependencies: - yocto-queue: 1.2.0 - p-limit@7.2.0: dependencies: yocto-queue: 1.2.1 @@ -23022,14 +24638,7 @@ snapshots: dependencies: callsites: 3.1.0 - parse-entities@1.2.2: - dependencies: - character-entities: 1.2.4 - character-entities-legacy: 1.1.4 - character-reference-invalid: 1.1.4 - is-alphanumerical: 1.0.4 - is-decimal: 1.0.4 - is-hexadecimal: 1.0.4 + parent-require@1.0.0: {} parse-entities@2.0.0: dependencies: @@ -23102,14 +24711,8 @@ snapshots: path-type@4.0.0: {} - pathe@1.1.2: {} - pathe@2.0.3: {} - pathval@1.1.1: {} - - pathval@2.0.0: {} - pause-stream@0.0.11: dependencies: through: 2.3.8 @@ -23223,12 +24826,6 @@ snapshots: dependencies: find-up: 4.1.0 - pkg-types@1.3.1: - dependencies: - confbox: 0.1.8 - mlly: 1.7.4 - pathe: 2.0.3 - pkg-up@3.1.0: dependencies: find-up: 3.0.0 @@ -23306,6 +24903,21 @@ snapshots: postgres-range@1.1.4: {} + prebuild-install@7.1.3: + dependencies: + 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.89.0 + pump: 3.0.2 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.4 + tunnel-agent: 0.6.0 + prelude-ls@1.1.2: optional: true @@ -23315,12 +24927,6 @@ snapshots: pretty-bytes@6.1.1: {} - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 - pretty-ms@8.0.0: dependencies: parse-ms: 3.0.0 @@ -23335,12 +24941,20 @@ snapshots: process@0.11.10: {} + progress@2.0.3: {} + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 + proper-lockfile@4.1.2: + dependencies: + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 + property-information@5.6.0: dependencies: xtend: 4.0.2 @@ -23413,6 +25027,14 @@ snapshots: transitivePeerDependencies: - supports-color + proxy-chain@2.7.1: + dependencies: + socks: 2.8.4 + socks-proxy-agent: 8.0.5 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + proxy-from-env@1.1.0: {} psl@1.15.0: @@ -23430,6 +25052,43 @@ snapshots: dependencies: escape-goat: 4.0.0 + puppeteer-core@23.11.1(bufferutil@4.1.0)(utf-8-validate@5.0.10): + dependencies: + '@puppeteer/browsers': 2.6.1 + chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902) + debug: 4.4.3 + devtools-protocol: 0.0.1367902 + typed-query-selector: 2.12.1 + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - bufferutil + - supports-color + - utf-8-validate + + puppeteer@23.11.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10): + dependencies: + '@puppeteer/browsers': 2.6.1 + chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902) + cosmiconfig: 9.0.1(typescript@5.9.3) + devtools-protocol: 0.0.1367902 + puppeteer-core: 23.11.1(bufferutil@4.1.0)(utf-8-validate@5.0.10) + typed-query-selector: 2.12.1 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - bufferutil + - supports-color + - typescript + - utf-8-validate + + pvtsutils@1.3.6: + dependencies: + tslib: 2.8.1 + + pvutils@1.1.5: {} + qrcode@1.5.4: dependencies: dijkstrajs: 1.0.3 @@ -23444,6 +25103,10 @@ snapshots: dependencies: side-channel: 1.1.0 + qs@6.15.1: + dependencies: + side-channel: 1.1.0 + qs@6.5.3: {} quansync@1.0.0: {} @@ -23461,20 +25124,22 @@ snapshots: quick-lru@5.1.1: {} - radix-vue@1.9.17(vue@3.5.22(typescript@5.8.2)): + quick-lru@7.3.0: {} + + radix-vue@1.9.17(vue@3.5.22(typescript@5.9.3)): dependencies: '@floating-ui/dom': 1.7.4 - '@floating-ui/vue': 1.1.9(vue@3.5.22(typescript@5.8.2)) + '@floating-ui/vue': 1.1.9(vue@3.5.22(typescript@5.9.3)) '@internationalized/date': 3.10.0 '@internationalized/number': 3.6.5 - '@tanstack/vue-virtual': 3.13.12(vue@3.5.22(typescript@5.8.2)) - '@vueuse/core': 10.11.1(vue@3.5.22(typescript@5.8.2)) - '@vueuse/shared': 10.11.1(vue@3.5.22(typescript@5.8.2)) + '@tanstack/vue-virtual': 3.13.12(vue@3.5.22(typescript@5.9.3)) + '@vueuse/core': 10.11.1(vue@3.5.22(typescript@5.9.3)) + '@vueuse/shared': 10.11.1(vue@3.5.22(typescript@5.9.3)) aria-hidden: 1.2.4 defu: 6.1.4 fast-deep-equal: 3.1.3 nanoid: 5.1.5 - vue: 3.5.22(typescript@5.8.2) + vue: 3.5.22(typescript@5.9.3) transitivePeerDependencies: - '@vue/composition-api' @@ -23765,6 +25430,8 @@ snapshots: dependencies: '@babel/runtime': 7.26.10 + reflect-metadata@0.2.2: {} + reflect.getprototypeof@1.0.10: dependencies: call-bind: 1.0.8 @@ -23846,7 +25513,7 @@ snapshots: '@types/katex': 0.16.7 hast-util-from-html-isomorphic: 2.0.0 hast-util-to-text: 4.0.2 - katex: 0.16.21 + katex: 0.16.22 unist-util-visit-parents: 6.0.1 vfile: 6.0.3 @@ -23879,11 +25546,6 @@ snapshots: mdast-util-newline-to-break: 2.0.0 unified: 11.0.5 - remark-frontmatter@1.3.3: - dependencies: - fault: 1.0.4 - xtend: 4.0.2 - remark-gfm@4.0.1: dependencies: '@types/mdast': 4.0.4 @@ -23913,24 +25575,6 @@ snapshots: transitivePeerDependencies: - supports-color - remark-parse@7.0.2: - dependencies: - collapse-white-space: 1.0.6 - is-alphabetical: 1.0.4 - is-decimal: 1.0.4 - is-whitespace-character: 1.0.4 - is-word-character: 1.0.4 - markdown-escapes: 1.0.4 - parse-entities: 1.2.2 - repeat-string: 1.6.1 - state-toggle: 1.0.3 - trim: 0.0.1 - trim-trailing-lines: 1.1.4 - unherit: 1.1.3 - unist-util-remove-position: 1.1.4 - vfile-location: 2.0.6 - xtend: 4.0.2 - remark-rehype@11.1.1: dependencies: '@types/hast': 3.0.4 @@ -23945,8 +25589,6 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 - repeat-string@1.6.1: {} - request-ip@3.3.0: {} request@2.88.2: @@ -23984,8 +25626,14 @@ snapshots: resolve-alpn@1.2.1: {} + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + resolve-from@4.0.0: {} + resolve-from@5.0.0: {} + resolve-pkg-maps@1.0.0: {} resolve@1.22.10: @@ -24010,21 +25658,36 @@ snapshots: dependencies: lowercase-keys: 3.0.0 + responselike@4.0.2: + dependencies: + lowercase-keys: 3.0.0 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + restore-cursor@4.0.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 + retry@0.12.0: {} + retry@0.13.1: {} reusify@1.1.0: {} + rfc4648@1.5.4: {} + rfdc@1.4.1: {} rimraf@3.0.2: dependencies: glob: 7.2.3 + robots-parser@3.0.1: {} + robust-predicates@3.0.2: {} rolldown-plugin-dts@0.22.5(rolldown@1.0.0-rc.9)(typescript@5.9.3): @@ -24100,12 +25763,22 @@ snapshots: transitivePeerDependencies: - supports-color + rrweb-cssom@0.8.0: {} + + run-async@2.4.1: {} + + run-async@3.0.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 rw@1.3.3: {} + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + sade@1.8.1: dependencies: mri: 1.2.0 @@ -24147,6 +25820,10 @@ snapshots: sax@1.4.1: {} + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + scheduler@0.23.2: dependencies: loose-envify: 1.4.0 @@ -24173,10 +25850,6 @@ snapshots: semver@7.7.1: {} - semver@7.7.2: {} - - semver@7.7.3: {} - semver@7.7.4: {} send@0.19.0: @@ -24337,6 +26010,14 @@ snapshots: signal-exit@4.1.0: {} + simple-concat@1.0.1: {} + + simple-get@4.0.1: + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 @@ -24354,8 +26035,21 @@ snapshots: ansi-styles: 6.2.1 is-fullwidth-code-point: 4.0.0 + sm3@1.0.3: {} + smart-buffer@4.2.0: {} + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + + snakecase-keys@8.1.0: + dependencies: + map-obj: 4.3.0 + snake-case: 3.0.4 + type-fest: 4.41.0 + socks-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 @@ -24406,12 +26100,18 @@ snapshots: split2@4.2.0: {} + split@0.3.3: + dependencies: + through: 2.3.8 + sprintf-js@1.0.3: {} sprintf-js@1.1.3: {} sqlstring@2.3.3: {} + sse-decoder@1.0.0: {} + sshpk@1.18.0: dependencies: asn1: 0.2.6 @@ -24436,17 +26136,13 @@ snapshots: state-local@1.0.7: {} - state-toggle@1.0.3: {} - statuses@1.5.0: {} statuses@2.0.1: {} statuses@2.0.2: {} - std-env@3.10.0: {} - - std-env@3.8.1: {} + std-env@4.1.0: {} stdin-discarder@0.1.0: dependencies: @@ -24462,8 +26158,14 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + stream-buffers@3.0.3: {} + stream-chain@2.2.5: {} + stream-combiner@0.0.4: + dependencies: + duplexer: 0.1.2 + stream-http@2.8.2: dependencies: builtin-status-codes: 3.0.0 @@ -24487,10 +26189,21 @@ snapshots: optionalDependencies: bare-events: 2.5.4 + streamx@2.25.0: + dependencies: + events-universal: 1.0.1 + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + transitivePeerDependencies: + - bare-abort-controller + optional: true + strict-uri-encode@2.0.0: {} string-argv@0.3.2: {} + string-comparison@1.3.0: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -24581,6 +26294,10 @@ snapshots: is-obj: 3.0.0 is-regexp: 3.1.0 + strip-ansi@3.0.1: + dependencies: + ansi-regex: 2.1.1 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -24601,10 +26318,6 @@ snapshots: strip-json-comments@3.1.1: {} - strip-literal@2.1.1: - dependencies: - js-tokens: 9.0.1 - strnum@1.1.2: {} strnum@2.1.2: {} @@ -24646,6 +26359,8 @@ snapshots: pirates: 4.0.6 ts-interface-checker: 0.1.13 + supports-color@2.0.0: {} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -24668,6 +26383,8 @@ snapshots: picocolors: 1.1.1 stable: 0.1.8 + symbol-tree@3.2.4: {} + tabbable@6.2.0: {} tagged-tag@1.0.0: {} @@ -24702,7 +26419,23 @@ snapshots: - tsx - yaml - tailwindcss@4.1.14: {} + tar-fs@2.1.4: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.2 + tar-stream: 2.2.0 + + tar-fs@3.1.2: + dependencies: + pump: 3.0.2 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 4.7.1 + bare-path: 3.0.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer tar-stream@1.6.2: dependencies: @@ -24714,6 +26447,14 @@ snapshots: to-buffer: 1.1.1 xtend: 4.0.2 + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + tar-stream@3.1.7: dependencies: b4a: 1.6.7 @@ -24728,6 +26469,13 @@ snapshots: minizlib: 3.1.0 yallist: 5.0.0 + teex@1.0.1: + dependencies: + streamx: 2.25.0 + transitivePeerDependencies: + - bare-abort-controller + optional: true + terser@5.39.0: dependencies: '@jridgewell/source-map': 0.3.6 @@ -24736,12 +26484,6 @@ snapshots: source-map-support: 0.5.21 optional: true - test-exclude@7.0.1: - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 10.4.5 - minimatch: 9.0.5 - text-decoder@1.2.3: dependencies: b4a: 1.6.7 @@ -24776,12 +26518,10 @@ snapshots: tiny-lru@11.4.5: {} + tiny-typed-emitter@2.1.0: {} + tinybench@2.9.0: {} - tinyexec@0.3.2: {} - - tinyexec@1.0.2: {} - tinyexec@1.0.4: {} tinyglobby@0.2.15: @@ -24789,19 +26529,19 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - tinypool@0.8.4: {} + tinyrainbow@3.1.0: {} - tinypool@1.0.2: {} + tldts-core@6.1.86: {} - tinyrainbow@1.2.0: {} + tldts-core@7.0.28: {} - tinyrainbow@2.0.0: {} + tldts@6.1.86: + dependencies: + tldts-core: 6.1.86 - tinyrainbow@3.0.3: {} - - tinyspy@2.2.1: {} - - tinyspy@3.0.2: {} + tldts@7.0.28: + dependencies: + tldts-core: 7.0.28 to-arraybuffer@1.0.1: {} @@ -24828,6 +26568,14 @@ snapshots: psl: 1.15.0 punycode: 2.3.1 + tough-cookie@5.1.2: + dependencies: + tldts: 6.1.86 + + tough-cookie@6.0.1: + dependencies: + tldts: 7.0.28 + tr46@0.0.3: {} tr46@5.1.0: @@ -24838,21 +26586,19 @@ snapshots: trim-lines@3.0.1: {} - trim-trailing-lines@1.1.4: {} - - trim@0.0.1: {} - triple-beam@1.4.1: {} - trough@1.0.5: {} - trough@2.2.0: {} ts-algebra@2.0.0: {} - ts-api-utils@1.4.3(typescript@5.8.2): + ts-api-utils@1.4.3(typescript@5.9.3): dependencies: - typescript: 5.8.2 + typescript: 5.9.3 + + ts-api-utils@2.5.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 ts-dedent@2.2.0: {} @@ -24894,6 +26640,8 @@ snapshots: - synckit - vue-tsc + tslib@1.14.1: {} + tslib@2.3.0: {} tslib@2.4.0: {} @@ -24903,22 +26651,37 @@ snapshots: tsx@4.20.6: dependencies: esbuild: 0.25.11 - get-tsconfig: 4.13.0 + get-tsconfig: 4.13.6 optionalDependencies: fsevents: 2.3.3 + tsyringe@4.10.0: + dependencies: + tslib: 1.14.1 + tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 tunnel@0.0.6: {} + turbo@2.9.6: + optionalDependencies: + '@turbo/darwin-64': 2.9.6 + '@turbo/darwin-arm64': 2.9.6 + '@turbo/linux-64': 2.9.6 + '@turbo/linux-arm64': 2.9.6 + '@turbo/windows-64': 2.9.6 + '@turbo/windows-arm64': 2.9.6 + turndown@7.2.0: dependencies: '@mixmark-io/domino': 2.2.0 tweetnacl@0.14.5: {} + tweetnacl@1.0.3: {} + type-check@0.3.2: dependencies: prelude-ls: 1.1.2 @@ -24928,14 +26691,16 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-detect@4.1.0: {} - type-fest@0.20.2: {} + type-fest@0.21.3: {} + type-fest@1.4.0: {} type-fest@2.19.0: {} + type-fest@4.41.0: {} + type-fest@5.0.0: dependencies: tagged-tag: 1.0.0 @@ -24984,17 +26749,17 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 + typed-query-selector@2.12.1: {} + typedarray-to-buffer@3.1.5: dependencies: is-typedarray: 1.0.0 typedarray@0.0.6: {} - typescript@5.8.2: {} - typescript@5.9.3: {} - ufo@1.5.4: {} + uhyphen@0.2.0: {} uint8array-extras@1.4.0: {} @@ -25023,8 +26788,7 @@ snapshots: undici-types@6.21.0: {} - undici-types@7.8.0: - optional: true + undici-types@7.8.0: {} undici@7.18.2: {} @@ -25041,11 +26805,6 @@ snapshots: '@unhead/shared': 1.11.20 hookable: 5.5.3 - unherit@1.1.3: - dependencies: - inherits: 2.0.4 - xtend: 4.0.2 - unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-match-property-ecmascript@2.0.0: @@ -25067,15 +26826,6 @@ snapshots: trough: 2.2.0 vfile: 6.0.3 - unified@8.4.2: - dependencies: - '@types/unist': 2.0.11 - bail: 1.0.5 - extend: 3.0.2 - is-plain-obj: 2.1.0 - trough: 1.0.5 - vfile: 4.2.1 - unique-string@3.0.0: dependencies: crypto-random-string: 4.0.0 @@ -25085,8 +26835,6 @@ snapshots: '@types/unist': 3.0.3 unist-util-is: 6.0.0 - unist-util-is@3.0.0: {} - unist-util-is@6.0.0: dependencies: '@types/unist': 3.0.3 @@ -25095,19 +26843,11 @@ snapshots: dependencies: '@types/unist': 3.0.3 - unist-util-remove-position@1.1.4: - dependencies: - unist-util-visit: 1.4.1 - unist-util-remove-position@5.0.0: dependencies: '@types/unist': 3.0.3 unist-util-visit: 5.0.0 - unist-util-stringify-position@2.0.3: - dependencies: - '@types/unist': 2.0.11 - unist-util-stringify-position@3.0.3: dependencies: '@types/unist': 2.0.11 @@ -25116,19 +26856,11 @@ snapshots: dependencies: '@types/unist': 3.0.3 - unist-util-visit-parents@2.1.2: - dependencies: - unist-util-is: 3.0.0 - unist-util-visit-parents@6.0.1: dependencies: '@types/unist': 3.0.3 unist-util-is: 6.0.0 - unist-util-visit@1.4.1: - dependencies: - unist-util-visit-parents: 2.1.2 - unist-util-visit@5.0.0: dependencies: '@types/unist': 3.0.3 @@ -25138,6 +26870,8 @@ snapshots: universalify@0.1.2: optional: true + universalify@2.0.1: {} + unpipe@1.0.0: {} unrun@0.2.32: @@ -25150,10 +26884,16 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-browserslist-db@1.2.3(browserslist@4.28.2): + dependencies: + browserslist: 4.28.2 + escalade: 3.2.0 + picocolors: 1.1.1 + update-notifier@6.0.2: dependencies: boxen: 7.1.1 - chalk: 5.4.1 + chalk: 5.6.2 configstore: 6.0.0 has-yarn: 3.0.0 import-lazy: 4.0.0 @@ -25163,7 +26903,7 @@ snapshots: is-yarn-global: 0.4.1 latest-version: 7.0.0 pupa: 3.1.0 - semver: 7.7.2 + semver: 7.7.4 semver-diff: 4.0.0 xdg-basedir: 5.1.0 @@ -25188,22 +26928,15 @@ snapshots: optionalDependencies: proxy-agent: 5.0.0 - urllib@2.44.0(proxy-agent@6.5.0): + urllib@4.9.0: dependencies: - any-promise: 1.3.0 - content-type: 1.0.5 - default-user-agent: 1.0.0 - digest-header: 1.1.0 - ee-first: 1.1.1 + form-data: 4.0.5 formstream: 1.5.2 - humanize-ms: 1.2.1 - iconv-lite: 0.6.3 - pump: 3.0.2 + mime-types: 2.1.35 qs: 6.14.1 - statuses: 1.5.0 - utility: 1.18.0 - optionalDependencies: - proxy-agent: 6.5.0 + type-fest: 4.41.0 + undici: 7.18.2 + ylru: 2.0.0 use-callback-ref@1.3.3(@types/react@18.3.1)(react@18.3.1): dependencies: @@ -25254,8 +26987,20 @@ snapshots: dependencies: react: 18.3.1 + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.4 + util-deprecate@1.0.2: {} + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.2.0 + is-generator-function: 1.1.0 + is-typed-array: 1.1.15 + which-typed-array: 1.1.19 + utility@1.18.0: dependencies: copy-to: 2.0.1 @@ -25264,6 +27009,12 @@ snapshots: mz: 2.7.0 unescape: 1.0.1 + utility@2.5.0: + dependencies: + escape-html: 1.0.3 + unescape: 1.0.1 + ylru: 2.0.0 + utils-merge@1.0.1: {} uuid@3.4.0: {} @@ -25279,6 +27030,8 @@ snapshots: kleur: 4.1.5 sade: 1.8.1 + vali-date@1.0.0: {} + vary@1.1.2: {} verror@1.10.0: @@ -25287,30 +27040,16 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - vfile-location@2.0.6: {} - vfile-location@5.0.3: dependencies: '@types/unist': 3.0.3 vfile: 6.0.3 - vfile-message@2.0.4: - dependencies: - '@types/unist': 2.0.11 - unist-util-stringify-position: 2.0.3 - vfile-message@4.0.2: dependencies: '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 - vfile@4.2.1: - dependencies: - '@types/unist': 2.0.11 - is-buffer: 2.0.5 - unist-util-stringify-position: 2.0.3 - vfile-message: 2.0.4 - vfile@6.0.3: dependencies: '@types/unist': 3.0.3 @@ -25333,95 +27072,20 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite-node@1.6.1(@types/node@24.0.13)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0): + vite@6.2.2(@types/node@20.17.24)(jiti@1.21.7)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: - cac: 6.7.14 - debug: 4.4.3 - pathe: 1.1.2 - picocolors: 1.1.1 - vite: 5.4.14(@types/node@24.0.13)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0) - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vite-node@2.1.9(@types/node@24.0.13)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0): - dependencies: - cac: 6.7.14 - debug: 4.4.3 - es-module-lexer: 1.7.0 - pathe: 1.1.2 - vite: 5.4.14(@types/node@24.0.13)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0) - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vite-node@3.1.1(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1): - dependencies: - cac: 6.7.14 - debug: 4.4.3 - es-module-lexer: 1.6.0 - pathe: 2.0.3 - vite: 6.2.2(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vite-node@3.1.1(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1): - dependencies: - cac: 6.7.14 - debug: 4.4.3 - es-module-lexer: 1.6.0 - pathe: 2.0.3 - vite: 6.2.2(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vite@5.4.14(@types/node@24.0.13)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0): - dependencies: - esbuild: 0.21.5 + esbuild: 0.25.11 postcss: 8.5.6 rollup: 4.35.0 optionalDependencies: - '@types/node': 24.0.13 + '@types/node': 20.17.24 fsevents: 2.3.3 + jiti: 1.21.7 lightningcss: 1.30.1 sass: 1.85.1 terser: 5.39.0 + tsx: 4.20.6 + yaml: 2.8.1 vite@6.2.2(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: @@ -25453,228 +27117,95 @@ snapshots: tsx: 4.20.6 yaml: 2.8.1 - vitest@1.6.1(@types/node@24.0.13)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0): + vitest@4.1.5(@opentelemetry/api@1.9.0)(@types/node@20.17.24)(@vitest/coverage-v8@4.1.5)(jsdom@26.1.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@6.2.2(@types/node@20.17.24)(jiti@1.21.7)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: - '@vitest/expect': 1.6.1 - '@vitest/runner': 1.6.1 - '@vitest/snapshot': 1.6.1 - '@vitest/spy': 1.6.1 - '@vitest/utils': 1.6.1 - acorn-walk: 8.3.4 - chai: 4.5.0 - debug: 4.4.3 - execa: 8.0.1 - local-pkg: 0.5.1 - magic-string: 0.30.21 - pathe: 1.1.2 - picocolors: 1.1.1 - std-env: 3.10.0 - strip-literal: 2.1.1 - tinybench: 2.9.0 - tinypool: 0.8.4 - vite: 5.4.14(@types/node@24.0.13)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0) - vite-node: 1.6.1(@types/node@24.0.13)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 24.0.13 - transitivePeerDependencies: - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vitest@2.1.9(@types/node@24.0.13)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0): - dependencies: - '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.14(@types/node@24.0.13)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)) - '@vitest/pretty-format': 2.1.9 - '@vitest/runner': 2.1.9 - '@vitest/snapshot': 2.1.9 - '@vitest/spy': 2.1.9 - '@vitest/utils': 2.1.9 - chai: 5.2.0 - debug: 4.4.3 - expect-type: 1.3.0 - magic-string: 0.30.21 - pathe: 1.1.2 - std-env: 3.10.0 - tinybench: 2.9.0 - tinyexec: 0.3.2 - tinypool: 1.0.2 - tinyrainbow: 1.2.0 - vite: 5.4.14(@types/node@24.0.13)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0) - vite-node: 2.1.9(@types/node@24.0.13)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 24.0.13 - transitivePeerDependencies: - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vitest@3.1.1(@types/debug@4.1.12)(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1): - dependencies: - '@vitest/expect': 3.1.1 - '@vitest/mocker': 3.1.1(vite@6.2.2(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) - '@vitest/pretty-format': 3.1.1 - '@vitest/runner': 3.1.1 - '@vitest/snapshot': 3.1.1 - '@vitest/spy': 3.1.1 - '@vitest/utils': 3.1.1 - chai: 5.2.0 - debug: 4.4.0 - expect-type: 1.2.0 - magic-string: 0.30.17 - pathe: 2.0.3 - std-env: 3.8.1 - tinybench: 2.9.0 - tinyexec: 0.3.2 - tinypool: 1.0.2 - tinyrainbow: 2.0.0 - vite: 6.2.2(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - vite-node: 3.1.1(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/debug': 4.1.12 - '@types/node': 20.17.24 - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vitest@3.1.1(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1): - dependencies: - '@vitest/expect': 3.1.1 - '@vitest/mocker': 3.1.1(vite@6.2.2(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) - '@vitest/pretty-format': 3.1.1 - '@vitest/runner': 3.1.1 - '@vitest/snapshot': 3.1.1 - '@vitest/spy': 3.1.1 - '@vitest/utils': 3.1.1 - chai: 5.2.0 - debug: 4.4.0 - expect-type: 1.2.0 - magic-string: 0.30.17 - pathe: 2.0.3 - std-env: 3.8.1 - tinybench: 2.9.0 - tinyexec: 0.3.2 - tinypool: 1.0.2 - tinyrainbow: 2.0.0 - vite: 6.2.2(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - vite-node: 3.1.1(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/debug': 4.1.12 - '@types/node': 24.0.13 - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1): - dependencies: - '@vitest/expect': 4.0.16 - '@vitest/mocker': 4.0.16(vite@6.2.2(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) - '@vitest/pretty-format': 4.0.16 - '@vitest/runner': 4.0.16 - '@vitest/snapshot': 4.0.16 - '@vitest/spy': 4.0.16 - '@vitest/utils': 4.0.16 - es-module-lexer: 1.7.0 + '@vitest/expect': 4.1.5 + '@vitest/mocker': 4.1.5(vite@6.2.2(@types/node@20.17.24)(jiti@1.21.7)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/pretty-format': 4.1.5 + '@vitest/runner': 4.1.5 + '@vitest/snapshot': 4.1.5 + '@vitest/spy': 4.1.5 + '@vitest/utils': 4.1.5 + es-module-lexer: 2.1.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.3 - std-env: 3.10.0 + std-env: 4.1.0 tinybench: 2.9.0 - tinyexec: 1.0.2 + tinyexec: 1.0.4 tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 6.2.2(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) + tinyrainbow: 3.1.0 + vite: 6.2.2(@types/node@20.17.24)(jiti@1.21.7)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 20.17.24 + '@vitest/coverage-v8': 4.1.5(vitest@4.1.5) + jsdom: 26.1.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10) transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml - vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1): + vitest@4.1.5(@opentelemetry/api@1.9.0)(@types/node@20.17.24)(@vitest/coverage-v8@4.1.5)(jsdom@26.1.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@6.2.2(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: - '@vitest/expect': 4.0.16 - '@vitest/mocker': 4.0.16(vite@6.2.2(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) - '@vitest/pretty-format': 4.0.16 - '@vitest/runner': 4.0.16 - '@vitest/snapshot': 4.0.16 - '@vitest/spy': 4.0.16 - '@vitest/utils': 4.0.16 - es-module-lexer: 1.7.0 + '@vitest/expect': 4.1.5 + '@vitest/mocker': 4.1.5(vite@6.2.2(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/pretty-format': 4.1.5 + '@vitest/runner': 4.1.5 + '@vitest/snapshot': 4.1.5 + '@vitest/spy': 4.1.5 + '@vitest/utils': 4.1.5 + es-module-lexer: 2.1.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.3 - std-env: 3.10.0 + std-env: 4.1.0 tinybench: 2.9.0 - tinyexec: 1.0.2 + tinyexec: 1.0.4 tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 + vite: 6.2.2(@types/node@20.17.24)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) + why-is-node-running: 2.3.0 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + '@types/node': 20.17.24 + '@vitest/coverage-v8': 4.1.5(vitest@4.1.5) + jsdom: 26.1.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - msw + + vitest@4.1.5(@opentelemetry/api@1.9.0)(@types/node@24.0.13)(@vitest/coverage-v8@4.1.5)(jsdom@26.1.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@6.2.2(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)): + dependencies: + '@vitest/expect': 4.1.5 + '@vitest/mocker': 4.1.5(vite@6.2.2(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/pretty-format': 4.1.5 + '@vitest/runner': 4.1.5 + '@vitest/snapshot': 4.1.5 + '@vitest/spy': 4.1.5 + '@vitest/utils': 4.1.5 + es-module-lexer: 2.1.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 4.1.0 + tinybench: 2.9.0 + tinyexec: 1.0.4 + tinyglobby: 0.2.15 + tinyrainbow: 3.1.0 vite: 6.2.2(@types/node@24.0.13)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 24.0.13 + '@vitest/coverage-v8': 4.1.5(vitest@4.1.5) + jsdom: 26.1.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10) transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml vm2@3.10.5: dependencies: @@ -25690,39 +27221,37 @@ snapshots: vue-component-type-helpers@3.1.1: {} - vue-demi@0.14.10(vue@3.5.22(typescript@5.8.2)): + vue-demi@0.14.10(vue@3.5.22(typescript@5.9.3)): dependencies: - vue: 3.5.22(typescript@5.8.2) + vue: 3.5.22(typescript@5.9.3) - vue-router@4.6.0(vue@3.5.22(typescript@5.8.2)): + vue-router@4.6.0(vue@3.5.22(typescript@5.9.3)): dependencies: '@vue/devtools-api': 6.6.4 - vue: 3.5.22(typescript@5.8.2) + vue: 3.5.22(typescript@5.9.3) vue-sonner@1.3.2: {} - vue@3.5.13(typescript@5.8.2): - dependencies: - '@vue/compiler-dom': 3.5.13 - '@vue/compiler-sfc': 3.5.13 - '@vue/runtime-dom': 3.5.13 - '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.8.2)) - '@vue/shared': 3.5.13 - optionalDependencies: - typescript: 5.8.2 - - vue@3.5.22(typescript@5.8.2): + vue@3.5.22(typescript@5.9.3): dependencies: '@vue/compiler-dom': 3.5.22 '@vue/compiler-sfc': 3.5.22 '@vue/runtime-dom': 3.5.22 - '@vue/server-renderer': 3.5.22(vue@3.5.22(typescript@5.8.2)) + '@vue/server-renderer': 3.5.22(vue@3.5.22(typescript@5.9.3)) '@vue/shared': 3.5.22 optionalDependencies: - typescript: 5.8.2 + typescript: 5.9.3 w3c-keyname@2.2.8: {} + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + web-namespaces@2.0.1: {} web-streams-polyfill@3.3.3: {} @@ -25735,7 +27264,7 @@ snapshots: webidl-conversions@7.0.0: {} - webpack-bundle-analyzer@4.10.1: + webpack-bundle-analyzer@4.10.1(bufferutil@4.1.0)(utf-8-validate@5.0.10): dependencies: '@discoveryjs/json-ext': 0.5.7 acorn: 8.15.0 @@ -25749,11 +27278,15 @@ snapshots: opener: 1.5.2 picocolors: 1.1.1 sirv: 2.0.4 - ws: 7.5.10 + ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + whatwg-mimetype@4.0.0: {} whatwg-url@14.1.1: @@ -25875,14 +27408,34 @@ snapshots: signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 - ws@7.5.10: {} + ws@7.5.10(bufferutil@4.1.0)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.1.0 + utf-8-validate: 5.0.10 - ws@8.20.0: {} + ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.1.0 + utf-8-validate: 5.0.10 xdg-basedir@5.1.0: {} xlsx@https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz: {} + xml-crypto@6.1.2: + dependencies: + '@xmldom/is-dom-node': 1.0.1 + '@xmldom/xmldom': 0.8.10 + xpath: 0.0.33 + + xml-encryption@3.1.0: + dependencies: + '@xmldom/xmldom': 0.8.10 + escape-html: 1.0.3 + xpath: 0.0.32 + + xml-name-validator@5.0.0: {} + xml2js@0.6.2: dependencies: sax: 1.4.1 @@ -25892,6 +27445,16 @@ snapshots: xmlbuilder@11.0.1: {} + xmlbuilder@15.1.1: {} + + xmlchars@2.2.0: {} + + xpath@0.0.32: {} + + xpath@0.0.33: {} + + xpath@0.0.34: {} + xregexp@2.0.0: optional: true @@ -25914,6 +27477,12 @@ snapshots: yaml@2.8.1: optional: true + yargonaut@1.1.4: + dependencies: + chalk: 1.1.3 + figlet: 1.11.0 + parent-require: 1.0.0 + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 @@ -25959,41 +27528,15 @@ snapshots: dependencies: lib0: 0.2.117 - yocto-queue@0.1.0: {} + ylru@2.0.0: {} - yocto-queue@1.2.0: {} + yocto-queue@0.1.0: {} yocto-queue@1.2.1: {} - zhead@2.2.4: {} + yoctocolors-cjs@2.1.3: {} - zhlint@0.7.4(@types/node@24.0.13)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0)(typescript@5.8.2): - dependencies: - chalk: 4.1.2 - glob: 10.4.5 - ignore: 5.3.2 - minimist: 1.2.8 - remark-frontmatter: 1.3.3 - remark-parse: 7.0.2 - unified: 8.4.2 - vitest: 1.6.1(@types/node@24.0.13)(lightningcss@1.30.1)(sass@1.85.1)(terser@5.39.0) - vue: 3.5.13(typescript@5.8.2) - transitivePeerDependencies: - - '@edge-runtime/vm' - - '@types/node' - - '@vitest/browser' - - '@vitest/ui' - - happy-dom - - jsdom - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - typescript + zhead@2.2.4: {} zip-stream@6.0.1: dependencies: @@ -26013,6 +27556,8 @@ snapshots: dependencies: zod: 3.25.76 + zod@3.23.8: {} + zod@3.24.1: {} zod@3.25.76: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 05d985a38e..bc1da0e7c5 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,63 +1,77 @@ packages: - packages/* - projects/* + - pro/admin + - pro/sso - scripts/icon - sdk/* -allowBuilds: - '@parcel/watcher': true - core-js: true - esbuild: true - mongodb-memory-server: true - msgpackr-extract: true - protobufjs: true - sharp: true - vue-demi: true catalog: - '@chakra-ui/anatomy': ^2 - '@chakra-ui/icons': ^2 - '@chakra-ui/next-js': ^2 - '@chakra-ui/react': ^2 - '@chakra-ui/styled-system': ^2 - '@chakra-ui/system': ^2 - '@emotion/react': ^11 - '@emotion/styled': ^11 - '@fastgpt-sdk/logger': 0.1.2 - '@fastgpt-sdk/otel': 0.1.2 - '@fastgpt-sdk/storage': 0.6.17 - '@modelcontextprotocol/sdk': ^1 - '@types/lodash': ^4 - '@types/mime-types': 3.0.1 - '@types/node': ^20 - '@types/react': ^18 - '@types/react-dom': ^18 + "@fastgpt-sdk/logger": 0.1.2 + "@fastgpt-sdk/otel": 0.1.2 + "@fastgpt-sdk/storage": 0.6.15 + "@modelcontextprotocol/sdk": ^1 + "@node-rs/jieba": 2.0.1 + "@svgr/webpack": ^6.5.1 + "@tanstack/react-query": ^4.24.10 + "@types/js-yaml": ^4.0.9 + "@types/jsonwebtoken": ^9.0.3 + "@types/lodash": ^4 + "@types/mime-types": ^3.0.1 + "@types/node": ^20 + "@types/react": ^18 + "@types/react-dom": ^18 + "@types/request-ip": ^0.0.38 + "@typescript-eslint/eslint-plugin": ^6.21.0 + "@typescript-eslint/parser": ^6.21.0 + "@vitest/coverage-v8": ^4.1.5 + ahooks: ^3.9.5 + "@chakra-ui/anatomy": ^2 + "@chakra-ui/icons": ^2 + "@chakra-ui/next-js": ^2 + "@chakra-ui/react": ^2 + "@chakra-ui/styled-system": ^2 + "@chakra-ui/system": ^2 + "@emotion/react": ^11 + "@emotion/styled": ^11 axios: 1.13.6 + chalk: ^5.6.2 date-fns: ^3.6.0 dayjs: 1.11.19 - eslint: ^8 + eslint: ^8.57.0 eslint-config-next: 15.5.12 express: ^4 file-type: 21.3.0 i18next: 23.16.8 js-yaml: ^4.1.1 + jsonwebtoken: ^9.0.3 json5: ^2.2.3 lodash: 4.17.23 mime: ^4.1.0 mime-types: 3.0.2 minio: 8.0.7 - next: 16.2.1 + mongodb-memory-server: ^10.1.4 + mongoose: ^8.10.1 + nanoid: ^5.1.3 + next: 16.2.4 next-i18next: 15.4.2 - next-rspack: 16.2.1 proxy-agent: ^6 react: ^18 react-dom: ^18 + react-hook-form: 7.43.1 react-i18next: 14.1.2 + react-markdown: ^9.0.1 + recharts: ^2.15.0 + remark-gfm: ^4.0.1 + request-ip: ^3.3.0 tsdown: 0.21.4 + tsx: ^4.20.6 typescript: ^5.9.3 + vitest: ^4.1.5 zod: ^4 onlyBuiltDependencies: - - '@parcel/watcher' + - "@parcel/watcher" - bufferutil - canvas - core-js @@ -71,7 +85,7 @@ onlyBuiltDependencies: - vue-demi overrides: - '@types/react': ^18 - '@types/react-dom': ^18 + "@types/react": ^18 + "@types/react-dom": ^18 react: ^18 react-dom: ^18 diff --git a/pro b/pro new file mode 160000 index 0000000000..20bf396872 --- /dev/null +++ b/pro @@ -0,0 +1 @@ +Subproject commit 20bf396872d2b072018c7d2251cb4631d75500dd diff --git a/projects/app/Dockerfile b/projects/app/Dockerfile index 8c97cf9644..a2a4936500 100644 --- a/projects/app/Dockerfile +++ b/projects/app/Dockerfile @@ -1,11 +1,11 @@ # --------- install dependence ----------- -FROM node:20.14.0-alpine AS maindeps +FROM node:24-alpine AS maindeps WORKDIR /app ARG proxy RUN [ -z "$proxy" ] || sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories -RUN apk add --no-cache libc6-compat && npm install -g pnpm@9 +RUN apk add --no-cache libc6-compat && npm install -g pnpm@10.33.2 # copy packages and one project COPY pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./ @@ -23,7 +23,7 @@ RUN if [ -z "$proxy" ]; then \ fi # --------- builder ----------- -FROM node:20.14.0-alpine AS builder +FROM node:24-alpine AS builder WORKDIR /app ARG proxy @@ -39,10 +39,13 @@ COPY --from=maindeps /app/projects/app/node_modules ./projects/app/node_modules RUN [ -z "$proxy" ] || sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories -RUN apk add --no-cache libc6-compat && npm install -g pnpm@9 +RUN apk add --no-cache libc6-compat && npm install -g pnpm@10.33.2 ENV NODE_OPTIONS="--max-old-space-size=4096" ENV NEXT_PUBLIC_BASE_URL=$base_url +# Build SDK workspace packages first so subpath exports like +# @fastgpt-sdk/otel/logger have generated dist type files. +RUN pnpm build:sdks RUN pnpm --filter=app build # Bundle server.ts into a single CJS file; only 'next' is kept external (already in standalone output) @@ -66,7 +69,7 @@ RUN rm -rf projects/app/.next/standalone/node_modules/.pnpm/@next+rspack-binding projects/app/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linux-x64@*/ # --------- runner ----------- -FROM node:20.14.0-alpine AS runner +FROM node:24-alpine AS runner WORKDIR /app ARG proxy @@ -85,13 +88,16 @@ RUN apk add --no-cache curl ca-certificates \ # copy running files COPY --from=builder /app/projects/app/public /app/projects/app/public COPY --from=builder /app/projects/app/next.config.ts /app/projects/app/next.config.ts +COPY --from=builder /app/projects/app/next-i18next.config.js /app/projects/app/next-i18next.config.js COPY --from=builder --chown=nextjs:nodejs /app/projects/app/.next/standalone /app/ COPY --from=builder --chown=nextjs:nodejs /app/projects/app/.next/static /app/projects/app/.next/static +# next-i18next loads locale json files from ../../packages/web/i18n at runtime. +COPY --from=builder --chown=nextjs:nodejs /app/packages/web/i18n /app/packages/web/i18n # copy server chunks COPY --from=builder --chown=nextjs:nodejs /app/projects/app/.next/server/chunks /app/projects/app/.next/server/chunks # copy worker COPY --from=builder --chown=nextjs:nodejs /app/projects/app/worker /app/projects/app/worker -COPY --from=builder --chown=nextjs:nodejs /app/projects/app/server-proxy.js /app/projects/app/server-proxy.js +COPY --from=builder --chown=nextjs:nodejs /app/projects/app/worker /app/worker # copy standload packages COPY --from=maindeps /app/node_modules/tiktoken ./node_modules/tiktoken diff --git a/projects/app/next.config.ts b/projects/app/next.config.ts index 681fdb0225..e950a62c02 100644 --- a/projects/app/next.config.ts +++ b/projects/app/next.config.ts @@ -1,187 +1,73 @@ import type { NextConfig } from 'next'; import path from 'path'; -import withBundleAnalyzerInit from '@next/bundle-analyzer'; -import withRspack from 'next-rspack'; -const withBundleAnalyzer = withBundleAnalyzerInit({ enabled: process.env.ANALYZE === 'true' }); +const basePath = process.env.NEXT_PUBLIC_BASE_URL || undefined; -const isDev = process.env.NODE_ENV === 'development'; -const isWebpack = process.env.WEBPACK === '1'; -const isRspack = isDev && !isWebpack; +const securityHeaders = [ + { + key: 'X-Frame-Options', + value: 'DENY' + }, + { + key: 'X-Content-Type-Options', + value: 'nosniff' + }, + { + key: 'X-XSS-Protection', + value: '1; mode=block' + }, + { + key: 'Referrer-Policy', + value: 'strict-origin-when-cross-origin' + }, + { + key: 'Permissions-Policy', + value: 'geolocation=(self), microphone=(self), camera=(self)' + } +]; + +const optimizedPackageImports = [ + '@chakra-ui/react', + '@chakra-ui/icons', + 'lodash', + 'framer-motion', + '@emotion/react', + '@emotion/styled' +]; const nextConfig: NextConfig = { - basePath: process.env.NEXT_PUBLIC_BASE_URL, + basePath, i18n: { defaultLocale: 'en', locales: ['en', 'zh-CN', 'zh-Hant'], localeDetection: false }, output: 'standalone', - // 关闭 strict mode,避免第三方库的双重渲染问题 - reactStrictMode: !isDev, + // Strict Mode is development-only; keep it disabled until double-render unsafe code is migrated. + reactStrictMode: false, + compress: true, + poweredByHeader: false, productionBrowserSourceMaps: false, async headers() { return [ { - source: '/((?!chat\\/share$)(?!proxy\\/)(?!absproxy\\/).*)', - headers: [ - { - key: 'X-Frame-Options', - value: 'DENY' - }, - { - key: 'X-Content-Type-Options', - value: 'nosniff' - }, - { - key: 'X-XSS-Protection', - value: '1; mode=block' - }, - { - key: 'Referrer-Policy', - value: 'strict-origin-when-cross-origin' - }, - { - key: 'Permissions-Policy', - value: 'geolocation=(self), microphone=(self), camera=(self)' - } - ] + source: '/((?!chat/share$).*)', + headers: securityHeaders } ]; }, - - webpack(config, { isServer }) { - config.ignoreWarnings = [ - ...(config.ignoreWarnings || []), - { - module: /@scalar\/api-reference-react/, - message: /autoprefixer/ - }, - { - module: /any-promise[\\/]register\.js$/, - message: /Critical dependency: the request of a dependency is an expression/ - }, - { - module: /bullmq[\\/]dist[\\/](cjs|esm)[\\/]classes[\\/]child-processor\.js$/, - message: /Critical dependency: the request of a dependency is an expression/ - }, - { - module: /@fastgpt-sdk[\\/]sandbox-adapter[\\/]/, - message: /Critical dependency/ + turbopack: { + root: path.join(__dirname, '../../'), + rules: { + '*.svg': { + loaders: ['@svgr/webpack'], + as: '*.js' } - ]; - - Object.assign(config.resolve!.alias, { - '@mongodb-js/zstd': false, - '@aws-sdk/credential-providers': false, - 'gcp-metadata': false, - snappy: false, - aws4: false, - 'mongodb-client-encryption': false, - kerberos: false, - 'supports-color': false, - 'bson-ext': false, - 'pg-native': false, - ...(isDev && - (() => { - // In dev, fastgpt-pro + FastGPT nested pnpm workspaces create two separate .pnpm stores, - // causing duplicate module instances (React, Lexical, etc.) and runtime errors like - // "Cannot read properties of null (reading 'useContext')" or - // "Unable to find an active editor state". - // Force all shared packages to resolve from this project's node_modules. - const resolve = (pkg: string) => { - try { - return path.dirname(require.resolve(`${pkg}/package.json`, { paths: [__dirname] })); - } catch { - return undefined; - } - }; - const dups = [ - 'react', - 'react-dom', - 'lexical', - '@lexical/react', - '@lexical/code', - '@lexical/list', - '@lexical/markdown', - '@lexical/rich-text', - '@lexical/selection', - '@lexical/text', - '@lexical/utils', - '@chakra-ui/react', - '@chakra-ui/system', - '@emotion/react', - '@emotion/styled', - 'use-context-selector' - ]; - return Object.fromEntries(dups.map((pkg) => [pkg, resolve(pkg)]).filter(([, v]) => v)); - })()) - }); - - config.module = { - ...config.module, - rules: (config.module?.rules || []).concat([ - { - test: /\.svg$/i, - issuer: /\.[jt]sx?$/, - use: ['@svgr/webpack'] - } - ]), - exprContextCritical: false, - unknownContextCritical: false - }; - - if (!config.externals) { - config.externals = []; } - - if (isServer) { - // 这些包只在服务端运行,且内部使用动态 import / 原生可选依赖(ws 的 bufferutil、 - // utf-8-validate,pi-ai 的 node:os/provider dynamicImport 等),让 webpack 直接 - // externalize,避免扫描源码产生 Critical dependency / Module not found 警告。 - config.externals.push({ - '@node-rs/jieba': '@node-rs/jieba', - '@mariozechner/pi-ai': 'commonjs @mariozechner/pi-ai', - '@mariozechner/pi-agent-core': 'commonjs @mariozechner/pi-agent-core', - '@google/genai': 'commonjs @google/genai', - ws: 'commonjs ws', - bufferutil: 'commonjs bufferutil', - 'utf-8-validate': 'commonjs utf-8-validate' - }); - } - - config.experiments = { - ...config.experiments, - asyncWebAssembly: true - }; - - if (isDev && !isServer) { - config.devtool = 'cheap-module-source-map'; - - config.watchOptions = { - ...config.watchOptions, - ignored: [ - '**/node_modules', - '**/.git', - '**/dist', - '**/coverage', - '../../packages/**/node_modules', - '../../packages/**/dist', - '**/.next', - '**/out' - ], - // 减少轮询频率,降低 CPU 和内存占用 - poll: 1000, - aggregateTimeout: 300 - }; - } - - return config; }, transpilePackages: ['@modelcontextprotocol/sdk', 'ahooks'], serverExternalPackages: [ - 'mongoose', - 'pg', + '@node-rs/jieba', 'bullmq', '@zilliz/milvus2-sdk-node', 'tiktoken', @@ -191,20 +77,7 @@ const nextConfig: NextConfig = { ], // 优化大库的 barrel exports tree-shaking experimental: { - optimizePackageImports: [ - '@chakra-ui/react', - '@chakra-ui/icons', - 'lodash', - 'ahooks', - 'framer-motion', - '@emotion/react', - '@emotion/styled', - 'react-syntax-highlighter', - 'recharts', - '@tanstack/react-query', - 'react-hook-form', - 'react-markdown' - ], + optimizePackageImports: optimizedPackageImports, // 按页面拆分 CSS chunk,减少首屏 CSS 体积 cssChunking: 'strict', // 减少内存占用 @@ -231,5 +104,4 @@ const nextConfig: NextConfig = { } }; -const config = withBundleAnalyzer(nextConfig); -export default isRspack ? withRspack(config) : config; +export default nextConfig; diff --git a/projects/app/package.json b/projects/app/package.json index b42bd42f14..e8ac5e68de 100644 --- a/projects/app/package.json +++ b/projects/app/package.json @@ -1,20 +1,22 @@ { - "name": "app", + "name": "@fastgpt/app", "version": "4.14.16", "private": false, "scripts": { - "dev": "NODE_OPTIONS='--max-old-space-size=8192' npm run build:workers && next dev", - "dev:skill": "NODE_OPTIONS='--max-old-space-size=8192' npm run build:workers && tsx server.ts", - "dev:webpack": "NODE_OPTIONS='--max-old-space-size=8192' npm run build:workers && WEBPACK=1 next dev --webpack", - "build": "npm run build:workers && next build --debug --webpack", - "start": "NODE_ENV=production tsx server.ts", - "build:workers": "npx tsx scripts/build-workers.ts", + "dev": "NODE_OPTIONS='--max-old-space-size=8192' pnpm run build:workers && next dev", + "build": "pnpm run build:workers && next build --debug", + "build:webpack": "pnpm run build:workers && next build --webpack --debug", + "analyze": "next experimental-analyze", + "start": "next start", + "test": "vitest run -c vitest.config.ts", + "test:watch": "vitest -c vitest.config.ts", + "build:workers": "tsx scripts/build-workers.ts", "typecheck": "tsc --noEmit --pretty", - "build:workers:watch": "npx tsx scripts/build-workers.ts --watch" + "build:workers:watch": "tsx scripts/build-workers.ts --watch" }, "engines": { "node": ">=20", - "pnpm": "9.x" + "pnpm": "10.x" }, "dependencies": { "@chakra-ui/anatomy": "catalog:", @@ -26,17 +28,18 @@ "@dagrejs/dagre": "^1.1.4", "@emotion/react": "catalog:", "@emotion/styled": "catalog:", - "@fastgpt-sdk/storage": "catalog:", + "@fastgpt-sdk/otel": "workspace:*", + "@fastgpt-sdk/storage": "workspace:*", "@fastgpt/global": "workspace:*", "@fastgpt/service": "workspace:*", "@fastgpt/web": "workspace:*", "@fortaine/fetch-event-source": "^3.0.6", "@modelcontextprotocol/sdk": "catalog:", "@monaco-editor/react": "^4.7.0", - "@node-rs/jieba": "2.0.1", + "@node-rs/jieba": "catalog:", "@scalar/api-reference-react": "^0.8.1", - "@tanstack/react-query": "^4.24.10", - "ahooks": "^3.9.5", + "@tanstack/react-query": "catalog:", + "ahooks": "catalog:", "archiver": "^7.0.1", "axios": "catalog:", "date-fns": "catalog:", @@ -45,6 +48,7 @@ "echarts-gl": "2.0.9", "esbuild": "^0.25.11", "framer-motion": "9.1.7", + "http-proxy": "^1.18.1", "hyperdown": "^2.4.29", "i18next": "catalog:", "immer": "^9.0.19", @@ -52,13 +56,15 @@ "js-yaml": "catalog:", "json5": "catalog:", "jsondiffpatch": "^0.7.2", - "jsonwebtoken": "^9.0.2", - "lodash": "catalog:", + "jsonwebtoken": "catalog:", "jszip": "^3.10.1", + "katex": "0.16.22", + "lodash": "catalog:", "mermaid": "^10.9.4", "mime": "catalog:", "minio": "catalog:", - "nanoid": "^5.1.3", + "mongoose": "catalog:", + "nanoid": "catalog:", "next": "catalog:", "next-i18next": "catalog:", "nprogress": "^0.2.0", @@ -66,47 +72,46 @@ "qrcode": "^1.5.4", "react": "catalog:", "react-dom": "catalog:", - "react-hook-form": "7.43.1", + "react-hook-form": "catalog:", "react-i18next": "catalog:", - "react-markdown": "^9.0.1", + "react-markdown": "catalog:", "react-syntax-highlighter": "^15.5.0", "react-textarea-autosize": "^8.5.4", "reactflow": "^11.7.4", - "recharts": "^2.15.0", + "recharts": "catalog:", "rehype-external-links": "^3.0.0", "rehype-katex": "^7.0.0", "remark-breaks": "^4.0.0", - "remark-gfm": "^4.0.0", + "remark-gfm": "catalog:", "remark-math": "^6.0.0", - "request-ip": "^3.3.0", + "request-ip": "catalog:", "sass": "^1.58.3", - "http-proxy": "^1.18.1", "undici": "^7.18.2", "use-context-selector": "^1.4.4", "zod": "catalog:" }, "devDependencies": { - "@types/http-proxy": "^1.17.15", "@next/bundle-analyzer": "16.1.6", - "@svgr/webpack": "^6.5.1", + "@svgr/webpack": "catalog:", "@types/archiver": "^6.0.2", - "@types/js-yaml": "^4.0.9", - "@types/jsonwebtoken": "^9.0.3", + "@types/http-proxy": "^1.17.15", + "@types/js-yaml": "catalog:", + "@types/jsonwebtoken": "catalog:", "@types/lodash": "catalog:", - "@types/node": "^20.14.2", + "@types/node": "catalog:", "@types/nprogress": "^0.2.0", "@types/qrcode": "^1.5.5", "@types/react": "catalog:", "@types/react-dom": "catalog:", "@types/react-syntax-highlighter": "^15.5.6", - "@types/request-ip": "^0.0.37", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", + "@types/request-ip": "catalog:", + "@typescript-eslint/eslint-plugin": "catalog:", + "@typescript-eslint/parser": "catalog:", "eslint": "catalog:", "eslint-config-next": "catalog:", - "next-rspack": "catalog:", - "tsx": "^4.20.6", - "typescript": "^5.1.3", - "vitest": "^3.0.9" + "tailwindcss": "^3", + "tsx": "catalog:", + "typescript": "catalog:", + "vitest": "catalog:" } } diff --git a/projects/app/scripts/build-workers.ts b/projects/app/scripts/build-workers.ts index 256586a736..82317959b7 100644 --- a/projects/app/scripts/build-workers.ts +++ b/projects/app/scripts/build-workers.ts @@ -6,6 +6,7 @@ import path from 'path'; const ROOT_DIR = path.resolve(__dirname, '../../..'); const WORKER_SOURCE_DIR = path.join(ROOT_DIR, 'packages/service/worker'); const WORKER_OUTPUT_DIR = path.join(__dirname, '../worker'); +const OTEL_SDK_DIR = path.join(ROOT_DIR, 'sdk/otel/src'); /** * Worker 预编译脚本 @@ -47,6 +48,12 @@ async function buildWorkers(watch: boolean = false) { minify: true, treeShaking: true, keepNames: false, + alias: { + '@fastgpt-sdk/otel': path.join(OTEL_SDK_DIR, 'index.ts'), + '@fastgpt-sdk/otel/logger': path.join(OTEL_SDK_DIR, 'logger-entry.ts'), + '@fastgpt-sdk/otel/metrics': path.join(OTEL_SDK_DIR, 'metrics-entry.ts'), + '@fastgpt-sdk/otel/tracing': path.join(OTEL_SDK_DIR, 'tracing-entry.ts') + }, // 移除调试代码 drop: process.env.NODE_ENV === 'production' ? ['console', 'debugger'] : [] }; diff --git a/projects/app/server.ts b/projects/app/server.ts index d21c8ab885..a8d6e2360b 100644 --- a/projects/app/server.ts +++ b/projects/app/server.ts @@ -1,6 +1,5 @@ import type { IncomingMessage } from 'http'; import { createServer, ServerResponse } from 'http'; -import { parse } from 'url'; import next from 'next'; import httpProxy from 'http-proxy'; import { Readable } from 'stream'; @@ -267,7 +266,7 @@ async function main() { } const server = createServer(async (req: IncomingMessage, res: ServerResponse) => { - const parsedUrl = parse(req.url || ''); + const parsedUrl = new URL(req.url || '/', 'http://localhost'); // ① Check subdomain proxy first: {port}--{sandboxId}.{baseDomain} const subdomain = parseSubdomainProxy(req.headers.host); @@ -287,7 +286,7 @@ async function main() { } // ③ Fall through to Next.js handler - handle(req, res, parsedUrl as any); + handle(req, res); }); // WebSocket upgrade handler — supports all three proxy modes diff --git a/projects/app/src/instrumentation-node.ts b/projects/app/src/instrumentation-node.ts new file mode 100644 index 0000000000..dd88f6f222 --- /dev/null +++ b/projects/app/src/instrumentation-node.ts @@ -0,0 +1,232 @@ +import { exit } from 'process'; +import { + runBackgroundInitializationStep, + getInitializationErrorLog, + runInitializationStep +} from '@fastgpt/service/common/system/initError'; + +export async function registerNodeInstrumentation() { + try { + await runInitializationStep({ + step: 'load-proxy', + action: async () => import('@fastgpt/service/common/proxy') + }); + + const [ + { connectMongo }, + { connectionMongo, connectionLogMongo, MONGO_URL, MONGO_LOG_URL }, + { systemStartCb }, + { initGlobalVariables, getInitConfig, initSystemPluginTags, initAppTemplateTypes }, + { initVectorStore }, + { initRootUser }, + { startMongoWatch }, + { startCron }, + { startTrainingQueue }, + { preLoadWorker }, + { loadSystemModels }, + { getSystemTools }, + { trackTimerProcess }, + { initBullMQWorkers }, + { initS3Buckets }, + { initGeo }, + { instrumentationCheck }, + { getErrText }, + { configureLogger, getLogger, LogCategories }, + { InitialErrorEnum } + ] = await Promise.all([ + import('@fastgpt/service/common/mongo/init'), + import('@fastgpt/service/common/mongo/index'), + import('@fastgpt/service/common/system/tools'), + import('@/service/common/system'), + import('@fastgpt/service/common/vectorDB/controller'), + import('@/service/mongo'), + import('@/service/common/system/volumnMongoWatch'), + import('@/service/common/system/cron'), + import('@/service/core/dataset/training/utils'), + import('@fastgpt/service/worker/preload'), + import('@fastgpt/service/core/ai/config/utils'), + import('@fastgpt/service/core/app/tool/controller'), + import('@fastgpt/service/common/middle/tracks/processor'), + import('@/service/common/bullmq'), + import('@fastgpt/service/common/s3'), + import('@fastgpt/service/common/geo'), + import('@/service/common/system/health'), + import('@fastgpt/global/common/error/utils'), + import('@fastgpt/service/common/logger'), + import('@fastgpt/service/common/system/constants') + ]); + + await runInitializationStep({ + step: 'configure-logger', + action: () => configureLogger() + }); + const logger = getLogger(LogCategories.SYSTEM); + logger.info('Starting system initialization...'); + + await runInitializationStep({ + step: 'system-start-callback', + action: () => systemStartCb(), + logger + }); + await runInitializationStep({ + step: 'init-global-variables', + action: () => initGlobalVariables(), + logger + }); + + await Promise.all([ + runInitializationStep({ + step: 'init-s3-buckets', + stage: InitialErrorEnum.S3_ERROR, + action: () => initS3Buckets(), + logger, + getErrText + }), + runInitializationStep({ + step: 'connect-main-mongo', + stage: InitialErrorEnum.MONGO_ERROR, + action: () => + connectMongo({ + db: connectionMongo, + url: MONGO_URL, + connectedCb: () => startMongoWatch() + }), + logger, + getErrText, + meta: { + mongoUrl: MONGO_URL + } + }), + runInitializationStep({ + step: 'connect-log-mongo', + stage: InitialErrorEnum.MONGO_ERROR, + action: () => + connectMongo({ + db: connectionLogMongo, + url: MONGO_LOG_URL + }), + logger, + getErrText, + meta: { + mongoLogUrl: MONGO_LOG_URL + } + }), + runInitializationStep({ + step: 'init-bullmq-workers', + stage: InitialErrorEnum.REDIS_ERROR, + action: () => initBullMQWorkers(), + logger, + getErrText + }), + runInitializationStep({ + step: 'init-vector-store', + stage: InitialErrorEnum.VECTORDB_ERROR, + action: () => initVectorStore(), + logger, + getErrText + }) + ]); + + await runInitializationStep({ + step: 'get-init-config', + action: () => getInitConfig(), + logger, + getErrText + }); + + await runInitializationStep({ + step: 'instrumentation-check', + action: () => instrumentationCheck(), + logger, + getErrText + }); + + await Promise.all([ + runInitializationStep({ + step: 'init-root-user', + action: () => initRootUser(), + logger, + getErrText + }), + runInitializationStep({ + step: 'load-system-models', + stage: InitialErrorEnum.PLUGIN_ERROR, + action: () => loadSystemModels(), + logger, + getErrText + }), + runInitializationStep({ + step: 'load-system-tools', + stage: InitialErrorEnum.PLUGIN_ERROR, + action: () => getSystemTools(), + logger, + getErrText + }), + runInitializationStep({ + step: 'init-system-plugin-tags', + stage: InitialErrorEnum.PLUGIN_ERROR, + action: () => initSystemPluginTags(), + logger, + getErrText + }), + runInitializationStep({ + step: 'init-app-template-types', + action: () => initAppTemplateTypes(), + logger, + getErrText + }), + runInitializationStep({ + step: 'preload-worker', + action: () => preLoadWorker(), + logger, + getErrText + }).catch(() => undefined) + ]); + + await runInitializationStep({ + step: 'init-geo', + action: () => initGeo(), + logger, + getErrText + }); + await runInitializationStep({ + step: 'start-cron', + action: () => startCron(), + logger, + getErrText + }); + await runInitializationStep({ + step: 'start-training-queue', + action: () => startTrainingQueue(true), + logger, + getErrText + }); + runBackgroundInitializationStep({ + step: 'track-timer-process', + action: () => trackTimerProcess(), + logger, + getErrText + }); + + logger.info('System initialized successfully'); + } catch (error) { + const logPayload = { + nextRuntime: process.env.NEXT_RUNTIME, + nodeEnv: process.env.NODE_ENV, + ...getInitializationErrorLog(error) + }; + + console.error('System initialization failed', logPayload); + + try { + const { getLogger, LogCategories } = await import('@fastgpt/service/common/logger'); + getLogger(LogCategories.SYSTEM).error('System initialization failed', logPayload); + } catch (loggerError) { + console.error('Failed to record system initialization failure', { + ...getInitializationErrorLog(loggerError) + }); + } + + exit(1); + } +} diff --git a/projects/app/src/instrumentation.ts b/projects/app/src/instrumentation.ts index 33ca6527e3..1bda604ff0 100644 --- a/projects/app/src/instrumentation.ts +++ b/projects/app/src/instrumentation.ts @@ -1,121 +1,6 @@ -import { exit } from 'process'; - -/* - Init system -*/ export async function register() { - try { - if (process.env.NEXT_RUNTIME === 'nodejs') { - await import('@fastgpt/service/common/proxy'); - - // 基础系统初始化 - const [ - { connectMongo }, - { connectionMongo, connectionLogMongo, MONGO_URL, MONGO_LOG_URL }, - { systemStartCb }, - { initGlobalVariables, getInitConfig, initSystemPluginTags, initAppTemplateTypes }, - { initVectorStore }, - { initRootUser }, - { startMongoWatch }, - { startCron }, - { startTrainingQueue }, - { preLoadWorker }, - { loadSystemModels }, - { getSystemTools }, - { trackTimerProcess }, - { initBullMQWorkers }, - { initS3Buckets }, - { initGeo }, - { instrumentationCheck }, - { getErrText }, - { configureMetrics }, - { configureTracing }, - { configureLogger, getLogger, LogCategories }, - { InitialErrorEnum } - ] = await Promise.all([ - import('@fastgpt/service/common/mongo/init'), - import('@fastgpt/service/common/mongo/index'), - import('@fastgpt/service/common/system/tools'), - import('@/service/common/system'), - import('@fastgpt/service/common/vectorDB/controller'), - import('@/service/mongo'), - import('@/service/common/system/volumnMongoWatch'), - import('@/service/common/system/cron'), - import('@/service/core/dataset/training/utils'), - import('@fastgpt/service/worker/preload'), - import('@fastgpt/service/core/ai/config/utils'), - import('@fastgpt/service/core/app/tool/controller'), - import('@fastgpt/service/common/middle/tracks/processor'), - import('@/service/common/bullmq'), - import('@fastgpt/service/common/s3'), - import('@fastgpt/service/common/geo'), - import('@/service/common/system/health'), - import('@fastgpt/global/common/error/utils'), - import('@fastgpt/service/common/metrics'), - import('@fastgpt/service/common/tracing'), - import('@fastgpt/service/common/logger'), - import('@fastgpt/service/common/system/constants') - ]); - - await configureMetrics(); - await configureTracing(); - await configureLogger(); - const logger = getLogger(LogCategories.SYSTEM); - logger.info('Starting system initialization...'); - - // 执行初始化流程 - systemStartCb(); - initGlobalVariables(); - - // Init infra - await Promise.all([ - initS3Buckets(), - connectMongo({ - db: connectionMongo, - url: MONGO_URL, - connectedCb: () => startMongoWatch() - }).catch((err) => { - return Promise.reject(`[${InitialErrorEnum.MONGO_ERROR}]: ${getErrText(err)}`); - }), - connectMongo({ - db: connectionLogMongo, - url: MONGO_LOG_URL - }).catch((err) => { - return Promise.reject(`[${InitialErrorEnum.MONGO_ERROR}]: ${getErrText(err)}`); - }), - initBullMQWorkers().catch((err) => { - return Promise.reject(`[${InitialErrorEnum.REDIS_ERROR}]: ${getErrText(err)}`); - }), - initVectorStore().catch((err) => { - return Promise.reject(`[${InitialErrorEnum.VECTORDB_ERROR}]: ${getErrText(err)}`); - }) - ]); - - // Init system config - await getInitConfig(); - - // Check infrastructure - await instrumentationCheck(); - - // Load init data - await Promise.all([ - initRootUser(), - loadSystemModels(), - getSystemTools(), - initSystemPluginTags(), - initAppTemplateTypes(), - preLoadWorker().catch() - ]); - - initGeo(); // init geo - startCron(); - startTrainingQueue(true); - trackTimerProcess(); - - logger.info('System initialized successfully'); - } - } catch (error) { - console.error('System initialization failed', error); - exit(1); + if (process.env.NEXT_RUNTIME === 'nodejs') { + const { registerNodeInstrumentation } = await import('./instrumentation-node'); + await registerNodeInstrumentation(); } } diff --git a/projects/app/src/pageComponents/dataset/detail/MetaDataCard.tsx b/projects/app/src/pageComponents/dataset/detail/MetaDataCard.tsx index 012af728f6..7106e8d50a 100644 --- a/projects/app/src/pageComponents/dataset/detail/MetaDataCard.tsx +++ b/projects/app/src/pageComponents/dataset/detail/MetaDataCard.tsx @@ -9,6 +9,7 @@ import { formatFileSize } from '@fastgpt/global/common/file/tools'; import { formatTime2YMDHM } from '@fastgpt/global/common/string/time'; import { DatasetCollectionDataProcessModeMap, + DatasetCollectionDataProcessModeEnum, DatasetCollectionTypeMap, DatasetCollectionTypeEnum } from '@fastgpt/global/core/dataset/constants'; @@ -44,6 +45,8 @@ const MetaDataCard = ({ datasetId }: { datasetId: string }) => { if (!collection) return []; const webSelector = collection?.metadata?.webPageSelector; + const trainingType = collection.trainingType ?? DatasetCollectionDataProcessModeEnum.chunk; + const trainingTypeConfig = DatasetCollectionDataProcessModeMap[trainingType]; return [ { @@ -96,7 +99,7 @@ const MetaDataCard = ({ datasetId }: { datasetId: string }) => { ? [ { label: t('dataset:collection.training_type'), - value: t(DatasetCollectionDataProcessModeMap[collection.trainingType]?.label as any) + value: t(trainingTypeConfig.label as any) } ] : []), diff --git a/projects/app/src/pages/_app.tsx b/projects/app/src/pages/_app.tsx index 79fd482a02..345c9aa7b6 100644 --- a/projects/app/src/pages/_app.tsx +++ b/projects/app/src/pages/_app.tsx @@ -17,6 +17,8 @@ import SystemStoreContextProvider from '@fastgpt/web/context/useSystem'; import { useRouter } from 'next/router'; import { errorLogger } from '@/web/common/utils/errorLogger'; +import '@scalar/api-reference-react/style.css'; + type NextPageWithLayout = NextPage & { setLayout?: (page: ReactElement) => JSX.Element; }; diff --git a/projects/app/src/pages/api/core/dataset/collection/create/reTrainingCollection.ts b/projects/app/src/pages/api/core/dataset/collection/create/reTrainingCollection.ts index 22f176ec87..320edd5ab2 100644 --- a/projects/app/src/pages/api/core/dataset/collection/create/reTrainingCollection.ts +++ b/projects/app/src/pages/api/core/dataset/collection/create/reTrainingCollection.ts @@ -41,6 +41,7 @@ async function handler(req: ApiRequestProps): Promise { const body = PushDataBodySchema.parse(req.body); diff --git a/projects/app/src/pages/openapi.tsx b/projects/app/src/pages/openapi.tsx index 55da28315b..01d4a21603 100644 --- a/projects/app/src/pages/openapi.tsx +++ b/projects/app/src/pages/openapi.tsx @@ -1,15 +1,10 @@ -'use client'; import { Box } from '@chakra-ui/react'; import dynamic from 'next/dynamic'; // 动态加载 @scalar/api-reference-react,避免其 CSS side-effect 在 Node 端 // (next build 的 collecting page data 阶段) 被解析导致 ERR_UNKNOWN_FILE_EXTENSION。 const ApiReferenceReact = dynamic( - () => - Promise.all([ - import('@scalar/api-reference-react'), - import('@scalar/api-reference-react/style.css') - ]).then(([mod]) => mod.ApiReferenceReact), + () => Promise.all([import('@scalar/api-reference-react')]).then(([mod]) => mod.ApiReferenceReact), { ssr: false } ); diff --git a/projects/app/src/service/core/dataset/queues/datasetParse.ts b/projects/app/src/service/core/dataset/queues/datasetParse.ts index 3a7e42dff7..b38a1a1e19 100644 --- a/projects/app/src/service/core/dataset/queues/datasetParse.ts +++ b/projects/app/src/service/core/dataset/queues/datasetParse.ts @@ -195,7 +195,7 @@ export const datasetParseQueue = async (): Promise => { try { const trainingMode = getTrainingModeByCollection({ - trainingType: collection.trainingType, + trainingType: collection.trainingType ?? DatasetCollectionDataProcessModeEnum.chunk, autoIndexes: collection.autoIndexes, imageIndex: collection.imageIndex }); diff --git a/projects/app/test/api/core/chat/resume.test.ts b/projects/app/test/api/core/chat/resume.test.ts index 817e7f5ff7..e2a3ff657d 100644 --- a/projects/app/test/api/core/chat/resume.test.ts +++ b/projects/app/test/api/core/chat/resume.test.ts @@ -737,7 +737,7 @@ describe('stream resume helpers', () => { }); afterEach(() => { - vi.restoreAllMocks(); + vi.useRealTimers(); resetStreamResumeMirrorGuardForTest(); }); @@ -745,7 +745,7 @@ describe('stream resume helpers', () => { vi.useFakeTimers(); try { const redis = getGlobalRedisConnection() as any; - const delSpy = vi.spyOn(redis, 'del').mockResolvedValue(1); + redis.del.mockClear?.(); const mirror = mirrorChatStream({ teamId, @@ -761,8 +761,8 @@ describe('stream resume helpers', () => { const keys = getStreamResumeRedisKeys({ teamId, appId, chatId }); const rawStream = `${FASTGPT_REDIS_PREFIX}${keys.keyOfStream}`; - expect(delSpy).toHaveBeenCalledWith(keys.keyOfUnavailable); - expect(delSpy).toHaveBeenCalledWith(keys.keyOfStream); + expect(redis.del).toHaveBeenCalledWith(keys.keyOfUnavailable); + expect(redis.del).toHaveBeenCalledWith(keys.keyOfStream); expect(redis.call).toHaveBeenNthCalledWith( 1, 'XADD', @@ -810,6 +810,7 @@ describe('stream resume helpers', () => { it('should clear old redis mirror when mirror starts (before first chunk)', async () => { const redis = getGlobalRedisConnection() as any; + redis.del.mockClear?.(); const { keyOfStream } = getStreamResumeRedisKeys({ teamId, appId, @@ -826,12 +827,13 @@ describe('stream resume helpers', () => { await mirror.flush(); + expect(redis.del).toHaveBeenCalledWith(keyOfStream); expect(await redis.get(keyOfStream)).toBeFalsy(); }); it('should continue mirroring chunks after the original response is already closed', async () => { const redis = getGlobalRedisConnection() as any; - const delSpy = vi.spyOn(redis, 'del').mockResolvedValue(1); + redis.del.mockClear?.(); const mirror = mirrorChatStream({ teamId, @@ -847,8 +849,8 @@ describe('stream resume helpers', () => { const keys = getStreamResumeRedisKeys({ teamId, appId, chatId }); const rawStream = `${FASTGPT_REDIS_PREFIX}${keys.keyOfStream}`; - expect(delSpy).toHaveBeenCalledWith(keys.keyOfUnavailable); - expect(delSpy).toHaveBeenCalledWith(keys.keyOfStream); + expect(redis.del).toHaveBeenCalledWith(keys.keyOfUnavailable); + expect(redis.del).toHaveBeenCalledWith(keys.keyOfStream); expect(redis.call).toHaveBeenNthCalledWith(1, 'XADD', rawStream, '*', 'raw', 'event: answer\n'); expect(redis.call).toHaveBeenNthCalledWith(2, 'XADD', rawStream, '*', 'raw', 'data: hello\n\n'); }); @@ -878,7 +880,7 @@ describe('stream resume helpers', () => { it('should skip creating a mirror when redis memory usage crosses the watermark', async () => { const redis = getGlobalRedisConnection() as any; const usedMemory = Math.ceil(STREAM_RESUME_REDIS_MAXMEMORY_RATIO * 100) + 1; - const setSpy = vi.spyOn(redis, 'set'); + redis.set.mockClear?.(); redis.info = vi.fn().mockResolvedValue(`used_memory:${usedMemory}\r\nmaxmemory:100\r\n`); const mirror = await getStreamResumeMirror({ @@ -890,7 +892,7 @@ describe('stream resume helpers', () => { expect(mirror).toBeUndefined(); expect(redis.info).toHaveBeenCalledTimes(1); - expect(setSpy).toHaveBeenCalledWith( + expect(redis.set).toHaveBeenCalledWith( getStreamResumeRedisKeys({ teamId, appId, chatId }).keyOfUnavailable, JSON.stringify({ reason: StreamResumeUnavailableReasonEnum.memoryPressure diff --git a/projects/app/test/api/support/user/account/loginByPassword.test.ts b/projects/app/test/api/support/user/account/loginByPassword.test.ts index db55c3409c..54d5fc8bde 100644 --- a/projects/app/test/api/support/user/account/loginByPassword.test.ts +++ b/projects/app/test/api/support/user/account/loginByPassword.test.ts @@ -9,8 +9,8 @@ import { setCookie } from '@fastgpt/service/support/permission/auth/common'; import { pushTrack } from '@fastgpt/service/common/middle/tracks/utils'; import { addAuditLog } from '@fastgpt/service/support/user/audit/util'; import { UserErrEnum } from '@fastgpt/global/common/error/code/user'; -import { Call } from '@test/utils/request'; import type { LoginByPasswordBodyType } from '@fastgpt/global/openapi/support/user/account/login/api'; +import { Call } from '@test/utils/request'; import { initTeamFreePlan } from '@fastgpt/service/support/wallet/sub/utils'; describe('loginByPassword API', () => { diff --git a/projects/app/test/tsconfig.json b/projects/app/test/tsconfig.json index e663f79f51..11e0d5ca2e 100644 --- a/projects/app/test/tsconfig.json +++ b/projects/app/test/tsconfig.json @@ -17,7 +17,14 @@ "baseUrl": ".", "paths": { "@/*": ["../src/*"], + "@fastgpt-sdk/logger": ["../../../sdk/logger/src/index.ts"], + "@fastgpt-sdk/storage": ["../../../sdk/storage/src/index.ts"], + "@fastgpt-sdk/otel": ["../../../sdk/otel/src/index.ts"], + "@fastgpt-sdk/otel/logger": ["../../../sdk/otel/src/logger-entry.ts"], + "@fastgpt-sdk/otel/metrics": ["../../../sdk/otel/src/metrics-entry.ts"], + "@fastgpt-sdk/otel/tracing": ["../../../sdk/otel/src/tracing-entry.ts"], "@fastgpt/*": ["../../../packages/*"], + "#fastgpt/app/test/*": ["./*"], "@test/*": ["../../../test/*"] } }, diff --git a/projects/app/tsconfig.json b/projects/app/tsconfig.json index c53e971931..61f99c5bf3 100644 --- a/projects/app/tsconfig.json +++ b/projects/app/tsconfig.json @@ -4,8 +4,8 @@ "baseUrl": ".", "paths": { "@/*": ["./src/*"], - "@test/*": ["../../test/*"], - "@t3-oss/env-core": ["../../packages/service/node_modules/@t3-oss/env-core/dist/index.d.ts"] + "#fastgpt/app/test/*": ["./test/*"], + "@test/*": ["../../test/*"] } }, "include": [ @@ -15,5 +15,14 @@ "../../packages/**/*.ts", "../../packages/**/*.tsx" ], - "exclude": ["**/*.test.ts", "**/*.test.tsx", ".next", "dist", "coverage"] + "exclude": [ + "**/*.test.ts", + "**/*.test.tsx", + "../../packages/**/vitest.config.ts", + "../../packages/**/vitest.integration.config.ts", + "../../packages/**/test/**", + ".next", + "dist", + "coverage" + ] } diff --git a/projects/app/vitest.config.ts b/projects/app/vitest.config.ts new file mode 100644 index 0000000000..9b08866c51 --- /dev/null +++ b/projects/app/vitest.config.ts @@ -0,0 +1,57 @@ +import { resolve } from 'node:path'; +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + resolve: { + alias: { + '@': resolve('src'), + '@fastgpt-sdk/logger': resolve('../../sdk/logger/src/index.ts'), + '@fastgpt-sdk/storage': resolve('../../sdk/storage/src/index.ts'), + '@fastgpt-sdk/otel/logger': resolve('../../sdk/otel/src/logger-entry.ts'), + '@fastgpt-sdk/otel/metrics': resolve('../../sdk/otel/src/metrics-entry.ts'), + '@fastgpt-sdk/otel/tracing': resolve('../../sdk/otel/src/tracing-entry.ts'), + '@fastgpt-sdk/otel': resolve('../../sdk/otel/src/index.ts'), + '@fastgpt': resolve('../../packages'), + '#fastgpt/app/test': resolve('test'), + '@test': resolve('../../test') + } + }, + test: { + env: { + FILE_TOKEN_KEY: + process.env.FILE_TOKEN_KEY ?? + 'bfd697e7e798f75deaf2d31210bc93a2e41ad4eed9e7831071d77821b7b97cff' + }, + coverage: { + enabled: true, + reporter: ['text', 'text-summary', 'html', 'json-summary', 'json'], + reportOnFailure: true, + include: ['src/**/*.ts', 'src/**/*.tsx'], + exclude: [ + '**/node_modules/**', + '**/*.spec.ts', + '**/*/*.d.ts', + '**/test/**', + '**/*.test.ts', + '**/*/constants.ts', + '**/*/*.const.ts', + '**/*/type.ts', + '**/*/types.ts', + '**/*/type/*', + '**/*/schema.ts', + '**/*/*.schema.ts' + ], + cleanOnRerun: false + }, + outputFile: 'test-results.json', + setupFiles: '../../test/setup.ts', + globalSetup: '../../test/globalSetup.ts', + fileParallelism: false, + maxConcurrency: 10, + pool: 'threads', + testTimeout: 20000, + hookTimeout: 30000, + reporters: ['github-actions', 'default'], + include: ['test/**/*.test.ts'] + } +}); diff --git a/projects/code-sandbox/Dockerfile b/projects/code-sandbox/Dockerfile index c4ce1fdc46..9f4edb03ac 100644 --- a/projects/code-sandbox/Dockerfile +++ b/projects/code-sandbox/Dockerfile @@ -5,12 +5,13 @@ WORKDIR /app ARG proxy # 安装 pnpm -RUN apk add --no-cache nodejs npm && npm install -g pnpm@9 +RUN apk add --no-cache nodejs npm && npm install -g pnpm@10.33.2 # 复制 workspace 配置和依赖包 COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./ COPY packages/global ./packages/global COPY packages/service ./packages/service +COPY sdk ./sdk COPY projects/code-sandbox/ ./projects/code-sandbox/ RUN [ -z "$proxy" ] || sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories @@ -23,6 +24,9 @@ RUN if [ -z "$proxy" ]; then \ pnpm install --frozen-lockfile --ignore-scripts --registry=https://registry.npmmirror.com; \ fi +# 先构建 SDK workspace 包,确保 dist 入口可被 bun build 解析 +RUN pnpm --filter @fastgpt-sdk/logger --filter @fastgpt-sdk/otel --filter @fastgpt-sdk/storage build + # 编译主入口文件 RUN cd /app/projects/code-sandbox && pnpm build diff --git a/projects/code-sandbox/package.json b/projects/code-sandbox/package.json index 6f5a3b9e83..5d110d7924 100644 --- a/projects/code-sandbox/package.json +++ b/projects/code-sandbox/package.json @@ -1,5 +1,5 @@ { - "name": "code-sandbox", + "name": "@fastgpt/code-sandbox", "version": "5.0.0", "description": "FastGPT Code Sandbox - Bun + Hono + 统一子进程模型", "author": "", @@ -14,10 +14,10 @@ }, "engines": { "node": ">=20", - "pnpm": "9.x" + "pnpm": "10.x" }, "dependencies": { - "@fastgpt-sdk/logger": "catalog:", + "@fastgpt-sdk/logger": "workspace:*", "@fastgpt/service": "workspace:*", "axios": "catalog:", "crypto-js": "^4.2.0", @@ -33,9 +33,9 @@ }, "devDependencies": { "@types/bun": "^1.2.4", - "@types/node": "^20.14.2", - "vitest": "^3.0.9", - "@vitest/coverage-v8": "^3.0.9", - "typescript": "^5.7.3" + "@types/node": "catalog:", + "vitest": "catalog:", + "@vitest/coverage-v8": "catalog:", + "typescript": "catalog:" } } diff --git a/projects/code-sandbox/vitest.config.ts b/projects/code-sandbox/vitest.config.ts index 332e4554dc..8e414442e6 100644 --- a/projects/code-sandbox/vitest.config.ts +++ b/projects/code-sandbox/vitest.config.ts @@ -6,7 +6,6 @@ export default defineConfig({ enabled: true, reporter: ['text', 'text-summary', 'html', 'json-summary', 'json'], reportOnFailure: true, - all: false, // 只包含被测试实际覆盖的文件,不包含空目录 include: ['src/**/*.ts'], cleanOnRerun: false }, diff --git a/projects/marketplace/Dockerfile b/projects/marketplace/Dockerfile index 739209ac6b..a133ed308e 100644 --- a/projects/marketplace/Dockerfile +++ b/projects/marketplace/Dockerfile @@ -1,15 +1,16 @@ # --------- install dependence ----------- -FROM node:20.14.0-alpine AS maindeps +FROM node:24-alpine AS maindeps WORKDIR /app ARG proxy RUN [ -z "$proxy" ] || sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories -RUN apk add --no-cache libc6-compat && npm install -g pnpm@9 +RUN apk add --no-cache libc6-compat && npm install -g pnpm@10.33.2 # copy packages and one project COPY pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./ COPY ./packages ./packages +COPY ./sdk ./sdk COPY ./projects/marketplace/package.json ./projects/marketplace/package.json RUN [ -f pnpm-lock.yaml ] || (echo "Lockfile not found." && exit 1) @@ -22,7 +23,7 @@ RUN if [ -z "$proxy" ]; then \ fi # --------- builder ----------- -FROM node:20.14.0-alpine AS builder +FROM node:24-alpine AS builder WORKDIR /app ARG proxy @@ -32,19 +33,21 @@ ARG base_url COPY package.json pnpm-workspace.yaml .npmrc tsconfig.json ./ COPY --from=maindeps /app/node_modules ./node_modules COPY --from=maindeps /app/packages ./packages +COPY --from=maindeps /app/sdk ./sdk COPY ./projects/marketplace ./projects/marketplace COPY --from=maindeps /app/projects/marketplace/node_modules ./projects/marketplace/node_modules RUN [ -z "$proxy" ] || sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories -RUN apk add --no-cache libc6-compat && npm install -g pnpm@9 +RUN apk add --no-cache libc6-compat && npm install -g pnpm@10.33.2 ENV NODE_OPTIONS="--max-old-space-size=4096" ENV NEXT_PUBLIC_BASE_URL=$base_url +RUN pnpm --filter @fastgpt-sdk/logger --filter @fastgpt-sdk/otel --filter @fastgpt-sdk/storage build RUN pnpm --filter=marketplace build # --------- runner ----------- -FROM node:20.14.0-alpine AS runner +FROM node:24-alpine AS runner WORKDIR /app ARG proxy diff --git a/projects/marketplace/next.config.js b/projects/marketplace/next.config.js index 57320c0916..711b96f48b 100644 --- a/projects/marketplace/next.config.js +++ b/projects/marketplace/next.config.js @@ -2,6 +2,8 @@ const { i18n } = require('./next-i18next.config.js'); const path = require('path'); const isDev = process.env.NODE_ENV === 'development'; +const monorepoRoot = path.join(__dirname, '../../'); +const emptyModulePath = './packages/service/common/system/emptyModule.js'; /** @type {import('next').NextConfig} */ const nextConfig = { @@ -41,82 +43,33 @@ const nextConfig = { } ]; }, - - webpack(config, { isServer, nextRuntime }) { - Object.assign(config.resolve.alias, { - '@mongodb-js/zstd': false, - '@aws-sdk/credential-providers': false, - snappy: false, - aws4: false, - 'mongodb-client-encryption': false, - kerberos: false, - 'supports-color': false, - 'bson-ext': false, - 'pg-native': false - }); - config.module = { - ...config.module, - rules: config.module.rules.concat([ - { - test: /\.svg$/i, - issuer: /\.[jt]sx?$/, - use: ['@svgr/webpack'] - } - ]), - exprContextCritical: false, - unknownContextCritical: false - }; - - if (!config.externals) { - config.externals = []; - } - - if (isServer) { - config.externals.push('@node-rs/jieba'); - - if (nextRuntime === 'nodejs') { + turbopack: { + root: monorepoRoot, + resolveAlias: { + '@mongodb-js/zstd': emptyModulePath, + '@aws-sdk/credential-providers': emptyModulePath, + snappy: emptyModulePath, + aws4: emptyModulePath, + 'mongodb-client-encryption': emptyModulePath, + kerberos: emptyModulePath, + 'supports-color': emptyModulePath, + 'bson-ext': emptyModulePath, + 'pg-native': emptyModulePath, + fs: { + browser: emptyModulePath + } + }, + rules: { + '*.svg': { + loaders: ['@svgr/webpack'], + as: '*.js' } - } else { - config.resolve = { - ...config.resolve, - fallback: { - ...config.resolve.fallback, - fs: false - } - }; } - - config.experiments = { - asyncWebAssembly: true, - layers: true - }; - - if (isDev && !isServer) { - // 使用更快的 source map - config.devtool = 'eval-cheap-module-source-map'; - // 减少文件监听范围 - config.watchOptions = { - ...config.watchOptions, - ignored: ['**/node_modules', '**/.git', '**/dist', '**/coverage'] - }; - // 启用持久化缓存 - config.cache = { - type: 'filesystem', - name: 'client', - buildDependencies: { - config: [__filename] - }, - cacheDirectory: path.resolve(__dirname, '.next/cache/webpack'), - maxMemoryGenerations: isDev ? 5 : Infinity, - maxAge: 7 * 24 * 60 * 60 * 1000 // 7 天 - }; - } - - return config; }, // 需要转译的包 transpilePackages: ['@modelcontextprotocol/sdk', 'ahooks'], serverExternalPackages: [ + '@node-rs/jieba', 'mongoose', 'pg', 'bullmq', @@ -125,9 +78,9 @@ const nextConfig = { '@opentelemetry/api-logs' ], experimental: { - outputFileTracingRoot: path.join(__dirname, '../../'), workerThreads: true - } + }, + outputFileTracingRoot: monorepoRoot }; module.exports = nextConfig; diff --git a/projects/marketplace/package.json b/projects/marketplace/package.json index 4d6eb11214..bfecea5451 100644 --- a/projects/marketplace/package.json +++ b/projects/marketplace/package.json @@ -1,5 +1,5 @@ { - "name": "marketplace", + "name": "@fastgpt/marketplace", "version": "0.1.0", "private": true, "scripts": { @@ -10,7 +10,7 @@ }, "engines": { "node": ">=20", - "pnpm": "9.x" + "pnpm": "10.x" }, "dependencies": { "@chakra-ui/anatomy": "catalog:", @@ -20,12 +20,12 @@ "@chakra-ui/styled-system": "catalog:", "@chakra-ui/system": "catalog:", "@fastgpt/global": "workspace:*", - "@fastgpt-sdk/logger": "catalog:", + "@fastgpt-sdk/logger": "workspace:*", "@fastgpt/service": "workspace:*", "@fastgpt/web": "workspace:*", "axios": "catalog:", "i18next": "catalog:", - "mongoose": "^8.10.1", + "mongoose": "catalog:", "next": "catalog:", "next-i18next": "catalog:", "react": "catalog:", @@ -34,14 +34,14 @@ "zod": "catalog:" }, "devDependencies": { - "@svgr/webpack": "^6.5.1", - "@types/node": "^20", + "@svgr/webpack": "catalog:", + "@types/node": "catalog:", "@types/react": "catalog:", "@types/react-dom": "catalog:", "eslint": "catalog:", "eslint-config-next": "catalog:", "postcss": "^8", "tailwindcss": "^3.4.1", - "typescript": "^5" + "typescript": "catalog:" } } diff --git a/projects/marketplace/src/instrumentation.ts b/projects/marketplace/src/instrumentation.ts index d44958d770..5ad40a3f5f 100644 --- a/projects/marketplace/src/instrumentation.ts +++ b/projects/marketplace/src/instrumentation.ts @@ -1,27 +1,64 @@ import { exit } from 'process'; +import { + getInitializationErrorLog, + runInitializationStep +} from '@fastgpt/service/common/system/initError'; export async function register() { try { if (process.env.NEXT_RUNTIME === 'nodejs') { const { configureLogger, getLogger, LogCategories } = await import('@/service/logger'); - await configureLogger(); + await runInitializationStep({ + step: 'configure-logger', + action: () => configureLogger() + }); const logger = getLogger(LogCategories.SYSTEM); - await import('@fastgpt/service/common/proxy'); + await runInitializationStep({ + step: 'load-proxy', + action: async () => import('@fastgpt/service/common/proxy'), + logger + }); const [{ getToolList }, { connectMongo, connectionMongo, MONGO_URL }] = await Promise.all([ import('@/service/tool/data'), import('@/service/mongo') ]); - await connectMongo(connectionMongo, MONGO_URL); - await getToolList(); + await runInitializationStep({ + step: 'connect-main-mongo', + action: () => connectMongo(connectionMongo, MONGO_URL), + logger, + meta: { + mongoUrl: MONGO_URL + } + }); + await runInitializationStep({ + step: 'load-tool-list', + action: () => getToolList(), + logger + }); logger.info('Init system success'); } } catch (error) { - const { getLogger, LogCategories } = await import('@/service/logger'); - getLogger(LogCategories.SYSTEM).error('Init system error', { error }); + const logPayload = { + nextRuntime: process.env.NEXT_RUNTIME, + nodeEnv: process.env.NODE_ENV, + ...getInitializationErrorLog(error) + }; + + console.error('Init system error', logPayload); + + try { + const { getLogger, LogCategories } = await import('@/service/logger'); + getLogger(LogCategories.SYSTEM).error('Init system error', logPayload); + } catch (loggerError) { + console.error('Failed to record init system error', { + ...getInitializationErrorLog(loggerError) + }); + } + exit(1); } } diff --git a/projects/marketplace/test/tsconfig.json b/projects/marketplace/test/tsconfig.json index e663f79f51..ecd10d4d22 100644 --- a/projects/marketplace/test/tsconfig.json +++ b/projects/marketplace/test/tsconfig.json @@ -17,7 +17,14 @@ "baseUrl": ".", "paths": { "@/*": ["../src/*"], + "@fastgpt-sdk/logger": ["../../../sdk/logger/src/index.ts"], + "@fastgpt-sdk/storage": ["../../../sdk/storage/src/index.ts"], + "@fastgpt-sdk/otel": ["../../../sdk/otel/src/index.ts"], + "@fastgpt-sdk/otel/logger": ["../../../sdk/otel/src/logger-entry.ts"], + "@fastgpt-sdk/otel/metrics": ["../../../sdk/otel/src/metrics-entry.ts"], + "@fastgpt-sdk/otel/tracing": ["../../../sdk/otel/src/tracing-entry.ts"], "@fastgpt/*": ["../../../packages/*"], + "#fastgpt/marketplace/test/*": ["./*"], "@test/*": ["../../../test/*"] } }, diff --git a/projects/marketplace/tsconfig.json b/projects/marketplace/tsconfig.json index d92bf2441d..0669d9cb06 100644 --- a/projects/marketplace/tsconfig.json +++ b/projects/marketplace/tsconfig.json @@ -3,10 +3,14 @@ "compilerOptions": { "baseUrl": ".", "paths": { - "@/*": ["./src/*"], - "@t3-oss/env-core": ["../../packages/service/node_modules/@t3-oss/env-core/dist/index.d.ts"] + "@/*": ["./src/*"] } }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "../../packages/**/*.ts"], - "exclude": ["**/*.test.ts"] + "exclude": [ + "**/*.test.ts", + "../../packages/**/vitest.config.ts", + "../../packages/**/vitest.integration.config.ts", + "../../packages/**/test/**" + ] } diff --git a/projects/mcp_server/Dockerfile b/projects/mcp_server/Dockerfile index 65a2cd65d5..15a9133d2a 100644 --- a/projects/mcp_server/Dockerfile +++ b/projects/mcp_server/Dockerfile @@ -1,16 +1,17 @@ # --------- Install ----------- -FROM node:20.14.0-alpine AS install +FROM node:24-alpine AS install WORKDIR /app ARG proxy -RUN npm install -g pnpm@9 +RUN npm install -g pnpm@10.33.2 # 复制package.json COPY pnpm-lock.yaml pnpm-workspace.yaml ./ COPY packages/global ./packages/global COPY packages/service ./packages/service COPY packages/web ./packages/web +COPY sdk ./sdk COPY projects/mcp_server/package.json ./projects/mcp_server/package.json RUN [ -z "$proxy" ] || sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories @@ -28,7 +29,7 @@ RUN if [ -z "$proxy" ]; then \ fi # --------- builder ----------- -FROM node:20.14.0-alpine AS builder +FROM node:24-alpine AS builder WORKDIR /app ARG proxy @@ -36,20 +37,22 @@ ARG proxy COPY package.json pnpm-workspace.yaml .npmrc tsconfig.json ./ COPY ./projects/mcp_server /app/projects/mcp_server COPY --from=install /app/packages /app/packages +COPY --from=install /app/sdk /app/sdk COPY --from=install /app/node_modules /app/node_modules COPY --from=install /app/projects/mcp_server/node_modules /app/projects/mcp_server/node_modules RUN [ -z "$proxy" ] || sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories -RUN apk add --no-cache libc6-compat curl bash && npm install -g pnpm@9 +RUN apk add --no-cache libc6-compat curl bash && npm install -g pnpm@10.33.2 # Install curl and bash, then install bun RUN curl -fsSL https://bun.sh/install | bash ENV PATH="/root/.bun/bin:$PATH" -RUN pnpm --filter=mcp_server build +RUN pnpm --filter @fastgpt-sdk/logger build +RUN pnpm --filter=@fastgpt/mcp_server build # runner -FROM node:20.14.0-alpine AS runner +FROM node:24-alpine AS runner WORKDIR /app ARG proxy diff --git a/projects/mcp_server/package.json b/projects/mcp_server/package.json index 930f1e08fa..dbc0828c02 100644 --- a/projects/mcp_server/package.json +++ b/projects/mcp_server/package.json @@ -1,5 +1,5 @@ { - "name": "mcp_server", + "name": "@fastgpt/mcp_server", "version": "0.1", "keywords": [], "author": "fastgpt", @@ -15,13 +15,13 @@ }, "engines": { "node": ">=20", - "pnpm": "9.x" + "pnpm": "10.x" }, "dependencies": { "@fastgpt/global": "workspace:*", - "@fastgpt-sdk/logger": "catalog:", + "@fastgpt-sdk/logger": "workspace:*", "@modelcontextprotocol/sdk": "catalog:", - "chalk": "^5.3.0", + "chalk": "catalog:", "dayjs": "catalog:", "dotenv": "^16.5.0", "express": "catalog:" diff --git a/projects/volume-manager/package.json b/projects/volume-manager/package.json index cc6901668d..0bdfe29225 100644 --- a/projects/volume-manager/package.json +++ b/projects/volume-manager/package.json @@ -11,10 +11,10 @@ }, "dependencies": { "hono": "^4.6.0", - "zod": "^4" + "zod": "catalog:" }, "devDependencies": { "@types/bun": "latest", - "vitest": "^2.0.0" + "vitest": "catalog:" } } diff --git a/scripts/icon/package.json b/scripts/icon/package.json index 6523441089..4f9e28a1c6 100644 --- a/scripts/icon/package.json +++ b/scripts/icon/package.json @@ -1,5 +1,5 @@ { - "name": "icon", + "name": "@fastgpt/icon", "version": "1.0.0", "description": "", "main": "index.js", diff --git a/sdk/logger/package.json b/sdk/logger/package.json index 3e2419d8f5..10a72e1626 100644 --- a/sdk/logger/package.json +++ b/sdk/logger/package.json @@ -29,7 +29,7 @@ "repository": { "type": "git", "url": "https://github.com/labring/FastGPT.git", - "directory": "FastGPT/sdk/logger" + "directory": "sdk/logger" }, "homepage": "https://github.com/labring/FastGPT", "bugs": { @@ -40,7 +40,7 @@ }, "engines": { "node": ">=20", - "pnpm": "9.x" + "pnpm": "10.x" }, "license": "Apache-2.0", "dependencies": { diff --git a/sdk/otel/package.json b/sdk/otel/package.json index 045d6c7f3e..a4cafcefb2 100644 --- a/sdk/otel/package.json +++ b/sdk/otel/package.json @@ -54,7 +54,7 @@ }, "engines": { "node": ">=20", - "pnpm": ">=9" + "pnpm": "10.x" }, "license": "Apache-2.0", "dependencies": { diff --git a/sdk/storage/package.json b/sdk/storage/package.json index 98e55e094e..970e06eb10 100644 --- a/sdk/storage/package.json +++ b/sdk/storage/package.json @@ -10,7 +10,7 @@ "repository": { "type": "git", "url": "https://github.com/labring/FastGPT.git", - "directory": "FastGPT/packages/storage" + "directory": "sdk/storage" }, "homepage": "https://github.com/labring/FastGPT", "bugs": { @@ -21,7 +21,7 @@ }, "engines": { "node": ">=20", - "pnpm": "9.x" + "pnpm": "10.x" }, "exports": { ".": { @@ -53,8 +53,8 @@ "ali-oss": "^6.23.0", "cos-nodejs-sdk-v5": "^2.15.4", "es-toolkit": "^1.43.0", - "minio": "8.0.7", - "vitest": "^4.0.16" + "minio": "catalog:", + "vitest": "catalog:" }, "devDependencies": { "@types/ali-oss": "^6.16.13", diff --git a/test/.env.test.tempalte b/test/.env.example similarity index 100% rename from test/.env.test.tempalte rename to test/.env.example diff --git a/test/cases/global/core/chat/utils.test.ts b/test/cases/global/core/chat/utils.test.ts deleted file mode 100644 index 22d5811cb9..0000000000 --- a/test/cases/global/core/chat/utils.test.ts +++ /dev/null @@ -1,235 +0,0 @@ -import { describe, expect, it } from 'vitest'; -import { ChatRoleEnum } from '@fastgpt/global/core/chat/constants'; -import { FlowNodeTypeEnum } from '@fastgpt/global/core/workflow/node/constant'; -import type { ChatItemMiniType } from '@fastgpt/global/core/chat/type'; -import { - transformPreviewHistories, - addStatisticalDataToHistoryItem -} from '@/global/core/chat/utils'; - -const mockResponseData = { - id: '1', - nodeId: '1', - moduleName: 'test', - moduleType: FlowNodeTypeEnum.chatNode -}; - -describe('transformPreviewHistories', () => { - it('should transform histories correctly with responseDetail=true', () => { - const histories: ChatItemMiniType[] = [ - { - obj: ChatRoleEnum.AI, - value: [{ text: { content: 'test response' } }], - responseData: [ - { - ...mockResponseData, - runningTime: 1.5 - } - ] - } - ]; - - const result = transformPreviewHistories(histories, true); - - expect(result[0]).toEqual({ - obj: ChatRoleEnum.AI, - value: [{ text: { content: 'test response' } }], - responseData: undefined, - useAgentSandbox: false, - llmModuleAccount: 1, - totalQuoteList: [], - historyPreviewLength: undefined - }); - }); - - it('should transform histories correctly with responseDetail=false', () => { - const histories: ChatItemMiniType[] = [ - { - obj: ChatRoleEnum.AI, - value: [{ text: { content: 'test response' } }], - responseData: [ - { - ...mockResponseData, - runningTime: 1.5 - } - ] - } - ]; - - const result = transformPreviewHistories(histories, false); - - expect(result[0]).toEqual({ - obj: ChatRoleEnum.AI, - value: [{ text: { content: 'test response' } }], - responseData: undefined, - useAgentSandbox: false, - llmModuleAccount: 1, - totalQuoteList: undefined, - historyPreviewLength: undefined - }); - }); -}); - -describe('addStatisticalDataToHistoryItem', () => { - it('should return original item if obj is not AI', () => { - const item: ChatItemMiniType = { - obj: ChatRoleEnum.Human, - value: [{ text: { content: 'test response' } }] - }; - - expect(addStatisticalDataToHistoryItem(item)).toBe(item); - }); - - it('should return original item if totalQuoteList is already defined', () => { - const item: ChatItemMiniType = { - obj: ChatRoleEnum.AI, - value: [{ text: { content: 'test response' } }], - totalQuoteList: [] - }; - - expect(addStatisticalDataToHistoryItem(item)).toBe(item); - }); - - it('should return original item if responseData is undefined', () => { - const item: ChatItemMiniType = { - obj: ChatRoleEnum.AI, - value: [{ text: { content: 'test response' } }] - }; - - expect(addStatisticalDataToHistoryItem(item)).toBe(item); - }); - - it('should calculate statistics correctly', () => { - const quoteId = '507f1f77bcf86cd799439011'; // Valid 24-bit hex ID - const item: ChatItemMiniType = { - obj: ChatRoleEnum.AI, - value: [{ text: { content: `test response with citation [${quoteId}](CITE)` } }], - responseData: [ - { - ...mockResponseData, - moduleType: FlowNodeTypeEnum.chatNode, - runningTime: 1.5, - historyPreview: [{ obj: ChatRoleEnum.AI, value: 'preview1' }] - }, - { - ...mockResponseData, - moduleType: FlowNodeTypeEnum.datasetSearchNode, - quoteList: [ - { - id: quoteId, - q: 'test', - a: 'answer', - datasetId: 'ds1', - collectionId: 'col1', - sourceName: 'source1', - chunkIndex: 0, - updateTime: new Date(), - score: [] - } - ], - runningTime: 0.5 - }, - { - ...mockResponseData, - moduleType: FlowNodeTypeEnum.toolCall, - runningTime: 1, - toolDetail: [ - { - id: 'detail1', - nodeId: 'detailNode1', - moduleName: 'Detail Chat', - moduleType: FlowNodeTypeEnum.chatNode, - runningTime: 0.5 - } - ] - } - ] - }; - - const result = addStatisticalDataToHistoryItem(item); - - expect(result).toEqual({ - ...item, - llmModuleAccount: 3, - useAgentSandbox: false, - totalQuoteList: [ - { - id: quoteId, - q: 'test', - a: 'answer', - datasetId: 'ds1', - collectionId: 'col1', - sourceName: 'source1', - chunkIndex: 0, - updateTime: expect.any(Date), - score: [] - } - ], - historyPreviewLength: 1 - }); - }); - - it('should handle empty arrays and undefined values', () => { - const item: ChatItemMiniType = { - obj: ChatRoleEnum.AI, - value: [{ text: { content: 'test response' } }], - responseData: [ - { - ...mockResponseData, - runningTime: 0 - } - ] - }; - - const result = addStatisticalDataToHistoryItem(item); - - expect(result).toEqual({ - ...item, - useAgentSandbox: false, - llmModuleAccount: 1, - totalQuoteList: [], - historyPreviewLength: undefined - }); - }); - - it('should handle nested plugin and loop details', () => { - const item: ChatItemMiniType = { - obj: ChatRoleEnum.AI, - value: [{ text: { content: 'test response' } }], - responseData: [ - { - ...mockResponseData, - runningTime: 1, - pluginDetail: [ - { - id: 'plugin1', - nodeId: 'pluginNode1', - moduleName: 'Plugin Chat', - moduleType: FlowNodeTypeEnum.chatNode, - runningTime: 0.5 - } - ], - loopDetail: [ - { - id: 'loop1', - nodeId: 'loopNode1', - moduleName: 'Loop Tool', - moduleType: FlowNodeTypeEnum.toolCall, - runningTime: 0.3 - } - ] - } - ] - }; - - const result = addStatisticalDataToHistoryItem(item); - - expect(result).toEqual({ - ...item, - useAgentSandbox: false, - llmModuleAccount: 3, - totalQuoteList: [], - historyPreviewLength: undefined - }); - }); -}); diff --git a/test/datas/users.ts b/test/datas/users.ts index 4941a98ad3..6489d725f5 100644 --- a/test/datas/users.ts +++ b/test/datas/users.ts @@ -12,7 +12,7 @@ import { MongoUser } from '@fastgpt/service/support/user/schema'; import { MongoTeamMember } from '@fastgpt/service/support/user/team/teamMemberSchema'; import { MongoTeam } from '@fastgpt/service/support/user/team/teamSchema'; import { initTeamFreePlan } from '@fastgpt/service/support/wallet/sub/utils'; -import type { parseHeaderCertRet } from 'test/mocks/request'; +import type { parseHeaderCertRet } from '@test/mocks/request'; export async function getRootUser(): Promise { const rootUser = await MongoUser.create({ diff --git a/test/integrationTest/READMD.md b/test/integrationTest/READMD.md deleted file mode 100644 index d30e80853f..0000000000 --- a/test/integrationTest/READMD.md +++ /dev/null @@ -1,5 +0,0 @@ -# FastGPT 集成测试 - -## 目录 - -- vectorDB: 向量数据库 \ No newline at end of file diff --git a/test/integrationTest/vectorDB/README.md b/test/integrationTest/vectorDB/README.md deleted file mode 100644 index 2937a848c4..0000000000 --- a/test/integrationTest/vectorDB/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# 向量数据库集成测试 - -对 FastGPT 各向量库控制器(PGVector、后续 Oceanbase/Milvus)做真实环境下的集成测试,保证向量相关操作兼容和稳定。采用**工厂模式**:同一套数据集(fixtures)和同一套用例(factory)驱动 n 个向量库测试。 - -## 环境变量 - -测试环境变量由 **test/.env.test.local** 提供(不提交到 git)。请复制模板并填写: - -```bash -cp test/.env.test.template test/.env.test.local -# 编辑 test/.env.test.local,填入 PG_URL 等 -``` - -`setup.ts` 会在测试启动时读取 `test/.env.test.local` 并注入到 `process.env`。 - -| 变量 | 说明 | 适用驱动 | -|------|------|----------| -| `PG_URL` | PostgreSQL + pgvector 连接串 | PgVectorCtrl | -| `OCEANBASE_URL` | Oceanbase 连接串(后续) | ObVectorCtrl | -| `MILVUS_ADDRESS` | Milvus 地址(后续) | MilvusCtrl | -| `OPENGAUSS_URL` | openGauss DataVec 连接串 | OpenGaussVectorCtrl | - -未设置对应环境变量时,该驱动的集成测试会**整体跳过**,不会报错。 - -## 运行方式 - -在项目根目录执行: - -```bash -# 仅运行单元测试(未配置 .env.test.local 或未设 PG_URL 时,vectorDB 集成测试会跳过) -pnpm test - -# 运行所有向量库测试(包含 vectorDB 集成测试与相关单元测试) -pnpm test:vector -``` - -## 结构说明 - -- **fixtures.ts**:统一测试数据(`TEST_TEAM_ID`、`TEST_DATASET_ID`、`TEST_COLLECTION_ID`、1536 维 `TEST_VECTORS`),所有向量库共用。 -- **factory.ts**:工厂函数 `runVectorDBTests(driver)`,同一套用例(init、insert、getVectorCount、embRecall、getVectorDataByTime、delete)供各驱动复用。 -- **integration.test.ts**:注册各驱动(PG、后续 Oceanbase/Milvus),按 `driver.envKey` 决定是否跳过;每个驱动执行同一套 `runVectorDBTests(driver)`。 - -新增向量库时:在 `integration.test.ts` 的 `drivers` 数组中增加一项(`name`、`envKey`、`createCtrl`),无需改 fixtures 或 factory。 diff --git a/test/mocks/common/geo.ts b/test/mocks/common/geo.ts deleted file mode 100644 index 7599d6f27f..0000000000 --- a/test/mocks/common/geo.ts +++ /dev/null @@ -1,10 +0,0 @@ -import path from 'node:path'; -import { vi } from 'vitest'; - -vi.mock('@fastgpt/service/common/geo/constants', async (importOriginal) => { - const actual = (await importOriginal()) as any; - return { - ...actual, - dbPath: path.join(process.cwd(), 'projects/app/data/GeoLite2-City.mmdb') - }; -}); diff --git a/test/mocks/common/vector.ts b/test/mocks/common/vector.ts index 274bc53d23..46302c7415 100644 --- a/test/mocks/common/vector.ts +++ b/test/mocks/common/vector.ts @@ -29,15 +29,17 @@ export const mockGetVectorCountByTeamId = vi.fn().mockResolvedValue(100); export const mockGetVectorCount = vi.fn().mockResolvedValue(50); -const MockVectorCtrl = vi.fn().mockImplementation(() => ({ - init: mockVectorInit, - insert: mockVectorInsert, - delete: mockVectorDelete, - embRecall: mockVectorEmbRecall, - getVectorDataByTime: mockGetVectorDataByTime, - getVectorCountByTeamId: mockGetVectorCountByTeamId, - getVectorCount: mockGetVectorCount -})); +const MockVectorCtrl = vi.fn().mockImplementation(function () { + return { + init: mockVectorInit, + insert: mockVectorInsert, + delete: mockVectorDelete, + embRecall: mockVectorEmbRecall, + getVectorDataByTime: mockGetVectorDataByTime, + getVectorCountByTeamId: mockGetVectorCountByTeamId, + getVectorCount: mockGetVectorCount + }; +}); // Mock PgVectorCtrl vi.mock('@fastgpt/service/common/vectorDB/pg', () => ({ diff --git a/test/mocks/index.ts b/test/mocks/index.ts index 1641989759..59180f4b72 100644 --- a/test/mocks/index.ts +++ b/test/mocks/index.ts @@ -1,5 +1,4 @@ import './request'; -import './common/geo'; import './common/mongo'; import './common/redis'; import './common/bullmq'; diff --git a/test/setupModels.ts b/test/setupModels.ts index b75564f89d..f5a04d9485 100644 --- a/test/setupModels.ts +++ b/test/setupModels.ts @@ -1,4 +1,4 @@ -import { ModelTypeEnum } from 'packages/global/core/ai/constants'; +import { ModelTypeEnum } from '@fastgpt/global/core/ai/constants'; export default async function setupModels() { global.llmModelMap = new Map(); diff --git a/test/tsconfig.json b/test/tsconfig.json index afc2f1cf52..7c2d9aead3 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -3,6 +3,12 @@ "compilerOptions": { "baseUrl": "..", "paths": { + "@fastgpt-sdk/logger": ["sdk/logger/src/index.ts"], + "@fastgpt-sdk/storage": ["sdk/storage/src/index.ts"], + "@fastgpt-sdk/otel": ["sdk/otel/src/index.ts"], + "@fastgpt-sdk/otel/logger": ["sdk/otel/src/logger-entry.ts"], + "@fastgpt-sdk/otel/metrics": ["sdk/otel/src/metrics-entry.ts"], + "@fastgpt-sdk/otel/tracing": ["sdk/otel/src/tracing-entry.ts"], "@fastgpt/*": ["packages/*"], "@test/*": ["test/*"], "@/*": ["projects/app/src/*"] diff --git a/turbo.json b/turbo.json new file mode 100644 index 0000000000..5504dd601f --- /dev/null +++ b/turbo.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://turborepo.com/schema.json", + "ui": "tui", + "tasks": { + "dev": { + "with": ["@fastgpt/admin#dev"], + "cache": false, + "persistent": true + }, + "build": { + "dependsOn": ["^build"], + "outputs": [".next/**", "dist/**", "worker/**"] + }, + "lint": { + "outputs": [] + }, + "test": { + "outputs": ["coverage/**", "test-results.json"] + }, + "test:integration": { + "cache": false, + "outputs": ["test-results.integration.json"] + }, + "typecheck": { + "outputs": [] + }, + "build:workers": { + "cache": false, + "outputs": ["worker/**"] + } + } +} diff --git a/vitest.config.mts b/vitest.config.mts index 511443ef45..05585fb4d0 100644 --- a/vitest.config.mts +++ b/vitest.config.mts @@ -5,9 +5,13 @@ export default defineConfig({ resolve: { alias: { '@': resolve('projects/app/src'), - '@fastgpt/global': resolve('packages/global'), - '@fastgpt/service': resolve('packages/service'), - '@fastgpt/web': resolve('packages/web'), + '@fastgpt-sdk/logger': resolve('sdk/logger/src/index.ts'), + '@fastgpt-sdk/storage': resolve('sdk/storage/src/index.ts'), + '@fastgpt-sdk/otel/logger': resolve('sdk/otel/src/logger-entry.ts'), + '@fastgpt-sdk/otel/metrics': resolve('sdk/otel/src/metrics-entry.ts'), + '@fastgpt-sdk/otel/tracing': resolve('sdk/otel/src/tracing-entry.ts'), + '@fastgpt-sdk/otel': resolve('sdk/otel/src/index.ts'), + '@fastgpt': resolve('packages'), '@test': resolve('test') } }, @@ -22,7 +26,6 @@ export default defineConfig({ reporter: ['html', 'json-summary', 'json'], // reporter: ['text', 'text-summary', 'html', 'json-summary', 'json'], reportOnFailure: true, - all: false, // 只包含被测试实际覆盖的文件,不包含空目录 include: ['projects/app/**/*.ts', 'packages/**/*.ts'], exclude: [ '**/node_modules/**', @@ -52,11 +55,8 @@ export default defineConfig({ pool: 'threads', testTimeout: 20000, hookTimeout: 30000, + passWithNoTests: true, reporters: ['github-actions', 'default'], - include: [ - 'test/**/*.test.ts', - 'projects/app/test/**/*.test.ts', - 'projects/marketplace/test/**/*.test.ts' - ] + include: ['test/**/*.test.ts'] } }); diff --git a/zhlint b/zhlint deleted file mode 100644 index e69de29bb2..0000000000