diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..a254aab
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,29 @@
+name: CI
+
+on:
+ push:
+ branches: [main]
+ pull_request:
+ branches: [main]
+
+jobs:
+ build-and-test:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Use Node.js 20
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ cache: "npm"
+
+ - name: Install dependencies
+ run: npm ci
+
+ - name: Run tests
+ run: npm test
+
+ - name: Build
+ run: npm run build
diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml
index 8a0983d..fc50f83 100644
--- a/.github/workflows/npm-publish.yml
+++ b/.github/workflows/npm-publish.yml
@@ -5,27 +5,33 @@ on:
types: [published]
jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
- - uses: actions/setup-node@v4
- with:
- node-version: 20
- - run: npm ci
- - run: npm test
- - run: npm run build
-
publish-npm:
- needs: build
runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ id-token: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
registry-url: https://registry.npmjs.org/
- - run: npm ci
- - run: npm publish --access=public
+ cache: "npm"
+ - name: Install dependencies
+ run: npm ci
+ - name: Run tests
+ run: npm test
+ - name: Build package
+ run: npm run build
+ - name: Check package version matches release
+ run: |
+ PKG_VERSION=$(node -p "require('./package.json').version")
+ GITHUB_REF_VERSION=${GITHUB_REF#refs/tags/v}
+ if [ "$PKG_VERSION" != "$GITHUB_REF_VERSION" ]; then
+ echo "::error::Package version ($PKG_VERSION) does not match release tag ($GITHUB_REF_VERSION)"
+ exit 1
+ fi
+ - name: Publish to NPM
+ run: npm publish --provenance --access public
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml
index 89f6412..307698c 100644
--- a/.github/workflows/prepare-release.yml
+++ b/.github/workflows/prepare-release.yml
@@ -4,9 +4,9 @@ on:
workflow_dispatch:
inputs:
version:
- description: 'Version to bump to (e.g. patch, minor, major, or specific version)'
+ description: "Version to bump to (e.g. patch, minor, major, or specific version)"
required: true
- default: 'patch'
+ default: "patch"
jobs:
prepare-release:
@@ -15,26 +15,26 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 0
-
+
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
-
+
- name: Install dependencies
run: npm ci
-
+
- name: Update version
run: |
npm version ${{ github.event.inputs.version }} --no-git-tag-version
NEW_VERSION=$(node -p "require('./package.json').version")
echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV
-
+
- name: Generate changelog
id: changelog
run: |
npx conventional-changelog-cli -p angular -i CHANGELOG.md -s
-
+
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7
with:
@@ -43,7 +43,7 @@ jobs:
title: "chore(release): prepare release v${{ env.NEW_VERSION }}"
body: |
Prepare release v${{ env.NEW_VERSION }}
-
+
- Update version in package.json
- Update CHANGELOG.md
base: main
diff --git a/.husky/pre-commit b/.husky/pre-commit
index 6e1eeed..2e67158 100644
--- a/.husky/pre-commit
+++ b/.husky/pre-commit
@@ -1,5 +1,2 @@
-#!/bin/sh
-. "$(dirname "$0")/_/husky.sh"
-
npx lint-staged
npm run build
diff --git a/Dockerfile b/Dockerfile
index 33ed963..b87dbe6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,4 @@
-# Generated by https://smithery.ai. See: https://smithery.ai/docs/config#dockerfile
-FROM node:lts-alpine
+FROM node:20-alpine AS builder
# Create app directory
WORKDIR /app
@@ -16,12 +15,21 @@ COPY . .
# Build the application
RUN npm run build
+# Use Node.js 20 Alpine as the base image for the runtime stage
+FROM node:20-alpine AS runner
+
+# Set the working directory for the runtime stage
+WORKDIR /app
+
+# Copy the built application and dependencies from the builder stage
+COPY --from=builder /app/package*.json ./
+COPY --from=builder /app/build ./build
+
+RUN npm install --ignore-scripts --omit=dev
+
+# Define environment variables
ENV LEETCODE_SITE=global \
LEETCODE_SESSION=
-# Expose any port if needed (MCP uses stdio, so not required for now)
-
# Set the default command
-CMD node build/index.js \
- --site ${LEETCODE_SITE:-global} \
- --session ${LEETCODE_SESSION}
+ENTRYPOINT ["node","build/index.js"]
diff --git a/README.md b/README.md
index b1147a7..28441c3 100644
--- a/README.md
+++ b/README.md
@@ -2,22 +2,28 @@
[](https://www.npmjs.com/package/@jinzcdev/leetcode-mcp-server)
[](https://img.shields.io/github/license/jinzcdev/leetcode-mcp-server.svg)
-[](https://github.com/jinzcdev/leetcode-mcp-server)
[](https://smithery.ai/server/@jinzcdev/leetcode-mcp-server)
+[](README_zh-CN.md)
+[](https://github.com/jinzcdev/leetcode-mcp-server)
The LeetCode MCP Server is a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) server that provides seamless integration with LeetCode APIs, enabling advanced automation and intelligent interaction with LeetCode's programming problems, contests, solutions, and user data.
+
+
+
+
## Features
-- **Multi-site Support**: Supports both leetcode.com and leetcode.cn platforms
-- **Problem Data Retrieval**: Obtain detailed problem descriptions, constraints, examples, and solution approaches
-- **User Data Access**: Retrieve user profiles, submission history, and contest performance
-- **Advanced Search Capabilities**: Filter problems by tags, difficulty levels, and categories
-- **Daily Challenge Tracking**: Easily access daily challenge problems
+- 🌐 **Multi-site Support**: Support both leetcode.com (Global) and leetcode.cn (China) platforms
+- 📊 **Problem Data Retrieval**: Obtain detailed problem descriptions, constraints, examples, official editorials, and user-submitted solutions
+- 👤 **User Data Access**: Retrieve user profiles, submission history, and contest performance
+- 🔒 **Private Data Access**: Create and query user notes, track problem-solving progress, and analyze submission details (AC/WA analysis)
+- 🔍 **Advanced Search Capabilities**: Filter problems by tags, difficulty levels, categories, and keywords
+- 📅 **Daily Challenge Access**: Easily access daily challenge problems
## Prerequisites
-1. Node.js runtime environment
+1. Node.js (v20.x or above)
2. (Optional) LeetCode session cookie for authenticated API access
## Installation
@@ -52,15 +58,40 @@ git clone https://github.com/jinzcdev/leetcode-mcp-server.git
# Navigate to the project directory
cd leetcode-mcp-server
-# Build and run the server
-npm run build && node build/index.js --site global
+# Build the project
+npm install && npm run build
+
+# Run the server
+node build/index.js --site global
```
## Usage
### Visual Studio Code Integration
-Add the following JSON configuration to your User Settings (JSON) file Code. Access this by pressing `Ctrl/Cmd + Shift + P` and searching for `Preferences: Open User Settings (JSON)`.
+Add the following JSON configuration to your User Settings (JSON) file. Access this by pressing `Ctrl/Cmd + Shift + P` and searching for `Preferences: Open User Settings (JSON)`.
+
+#### Option 1: Using Environment Variables
+
+```json
+{
+ "mcp": {
+ "servers": {
+ "leetcode": {
+ "type": "stdio",
+ "command": "npx",
+ "args": ["-y", "@jinzcdev/leetcode-mcp-server"],
+ "env": {
+ "LEETCODE_SITE": "global",
+ "LEETCODE_SESSION": ""
+ }
+ }
+ }
+ }
+}
+```
+
+#### Option 2: Using Command Line Arguments
```json
{
@@ -85,99 +116,204 @@ Add the following JSON configuration to your User Settings (JSON) file Code. Acc
For LeetCode China site, modify the `--site` parameter to `cn`.
-## Environment Variables
+> [!TIP]
+>
+> The server supports the following optional environment variables:
+>
+> - `LEETCODE_SITE`: LeetCode API endpoint ('global' or 'cn', default: 'global')
+> - `LEETCODE_SESSION`: LeetCode session cookie for authenticated API access (default: empty)
+>
+> **Priority Note**:
+> Command-line arguments take precedence over environment variables when both are specified. For example:
+>
+> - If `LEETCODE_SITE=cn` is set but you run `leetcode-mcp-server --site global`, the server will use `global`.
+> - If `LEETCODE_SESSION` exists but you provide `--session "new_cookie"`, the command-line session value will be used.
+
+## Available Tools
+
+### Problems
+
+| Tool | Global | CN | Auth Required | Description |
+| ----------------------- | :----: | :-: | :-----------: | ------------------------------------------------------------ |
+| **get_daily_challenge** | ✅ | ✅ | ❌ | Retrieves today's LeetCode Daily Challenge problem |
+| **get_problem** | ✅ | ✅ | ❌ | Retrieves details for a specific LeetCode problem |
+| **search_problems** | ✅ | ✅ | ❌ | Searches for LeetCode problems with multiple filter criteria |
+
+### Users
+
+| Tool | Global | CN | Auth Required | Description |
+| --------------------------------- | :----: | :-: | :-----------: | ------------------------------------------------------------ |
+| **get_user_profile** | ✅ | ✅ | ❌ | Retrieves profile information for a LeetCode user |
+| **get_user_contest_ranking** | ✅ | ✅ | ❌ | Obtains contest ranking statistics for a user |
+| **get_recent_ac_submissions** | ✅ | ✅ | ❌ | Retrieves a user's recent accepted submissions |
+| **get_recent_submissions** | ✅ | ❌ | ❌ | Retrieves a user's recent submissions history |
+| **get_user_status** | ✅ | ✅ | ✅ | Retrieves current user's current status |
+| **get_problem_submission_report** | ✅ | ✅ | ✅ | Provides detailed submission analysis for a specific problem |
+| **get_problem_progress** | ✅ | ✅ | ✅ | Retrieves current user's problem-solving progress |
+| **get_all_submissions** | ✅ | ✅ | ✅ | Retrieves current user's submission history |
+
+### Notes
+
+| Tool | Global | CN | Auth Required | Description |
+| ---------------- | :----: | :-: | :-----------: | ----------------------------------------------------- |
+| **search_notes** | ❌ | ✅ | ✅ | Searches for user notes with filtering options |
+| **get_note** | ❌ | ✅ | ✅ | Retrieves notes for a specific problem by question ID |
+| **create_note** | ❌ | ✅ | ✅ | Creates a new note for a specific problem |
+| **update_note** | ❌ | ✅ | ✅ | Updates an existing note with new content |
+
+### Solutions
+
+| Tool | Global | CN | Auth Required | Description |
+| -------------------------- | :----: | :-: | :-----------: | -------------------------------------------------------------- |
+| **list_problem_solutions** | ✅ | ✅ | ❌ | Retrieves a list of community solutions for a specific problem |
+| **get_problem_solution** | ✅ | ✅ | ❌ | Retrieves the complete content of a specific solution |
+
+## Tool Parameters
+
+### Problems
+
+- **get_daily_challenge** - Retrieves today's LeetCode Daily Challenge problem with complete details
+
+ - No parameters required
+
+- **get_problem** - Retrieves details about a specific LeetCode problem
+
+ - `titleSlug`: The URL slug/identifier of the problem (string, required)
+
+- **search_problems** - Searches for LeetCode problems based on multiple filter criteria
+ - `category`: Problem category filter (string, optional, default: "all-code-essentials")
+ - `tags`: List of topic tags to filter problems by (string[], optional)
+ - `difficulty`: Problem difficulty level filter (enum: "EASY", "MEDIUM", "HARD", optional)
+ - `searchKeywords`: Keywords to search in problem titles and descriptions (string, optional)
+ - `limit`: Maximum number of problems to return (number, optional, default: 10)
+ - `offset`: Number of problems to skip (number, optional)
+
+### Users
+
+- **get_user_profile** - Retrieves profile information about a LeetCode user
+
+ - `username`: LeetCode username (string, required)
+
+- **get_user_contest_ranking** - Retrieves a user's contest ranking information
+
+ - `username`: LeetCode username (string, required)
+ - `attended`: Whether to include only the contests the user has participated in (boolean, optional, default: true)
+
+- **get_recent_submissions** - Retrieves a user's recent submissions on LeetCode Global
+
+ - `username`: LeetCode username (string, required)
+ - `limit`: Maximum number of submissions to return (number, optional, default: 10)
+
+- **get_recent_ac_submissions** - Retrieves a user's recent accepted submissions
-The server supports the following environment variables:
+ - `username`: LeetCode username (string, required)
+ - `limit`: Maximum number of submissions to return (number, optional, default: 10)
-- `LEETCODE_SITE`: LeetCode API endpoint ('global' or 'cn')
-- `LEETCODE_SESSION`: LeetCode session cookie for authenticated API access
+- **get_user_status** - Retrieves the current user's status
-**Priority Note**:
-Command-line arguments take precedence over environment variables when both are specified. For example:
+ - No parameters required
-- If `LEETCODE_SITE=cn` is set but you run `leetcode-mcp-server --site global`, the server will use `global`.
-- If `LEETCODE_SESSION` exists but you provide `--session "new_cookie"`, the command-line session value will be used.
+- **get_problem_submission_report** - Retrieves detailed information about a specific submission
-## Tools
+ - `id`: The numerical submission ID (number, required)
-The server provides a comprehensive suite of tools categorized by functionality and platform compatibility.
+- **get_problem_progress** - Retrieves the current user's problem-solving progress
-### Problem Tools
+ - `offset`: Number of questions to skip (number, optional, default: 0)
+ - `limit`: Maximum number of questions to return (number, optional, default: 100)
+ - `questionStatus`: Filter by question status (enum: "ATTEMPTED", "SOLVED", optional)
+ - `difficulty`: Filter by difficulty levels (string[], optional)
-Available on both Global and China sites, with optional authentication.
+- **get_all_submissions** - Retrieves paginated list of user's submissions
+ - `limit`: Maximum number of submissions to return (number, default: 20)
+ - `offset`: Number of submissions to skip (number, default: 0)
+ - `questionSlug`: Optional problem identifier (string, optional)
+ - `lang`: Programming language filter (string, optional, CN only)
+ - `status`: Submission status filter (enum: "AC", "WA", optional, CN only)
+ - `lastKey`: Pagination token for retrieving next page (string, optional, CN only)
-| Tool Name | Description | Parameters |
-| ---------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| **leetcode_daily_challenge** | Retrieves today's LeetCode Daily Challenge with complete metadata | None |
-| **leetcode_problem** | Retrieves comprehensive details for a specified LeetCode problem | `titleSlug` (string, required): Problem URL identifier (e.g., 'two-sum') |
-| **leetcode_search_problems** | Executes filtered searches across LeetCode problems | `category` (string, optional): Problem classification
`tags` (string[], optional): Topic tags filter
`difficulty` (string, optional): Problem complexity level ('EASY', 'MEDIUM', 'HARD')
`limit` (number, optional): Maximum results count
`offset` (number, optional): Pagination offset |
+### Notes
-### User Tools
+- **search_notes** - Searches for user notes on LeetCode China
-Provides user-specific data across both platforms.
+ - `keyword`: Search term to filter notes (string, optional)
+ - `limit`: Maximum number of notes to return (number, optional, default: 10)
+ - `skip`: Number of notes to skip (number, optional, default: 0)
+ - `orderBy`: Sort order for returned notes (enum: "ASCENDING", "DESCENDING", optional, default: "DESCENDING")
-| Tool Name | Description | Parameters |
-| --------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
-| **leetcode_user_profile** | Retrieves complete profile information for a LeetCode user | `username` (string, required): LeetCode username |
-| **leetcode_user_contest_ranking** | Obtains contest ranking statistics for a user | `username` (string, required): LeetCode username
`attended` (boolean, optional): Filter for attended contests only |
+- **get_note** - Retrieves user notes for a specific LeetCode problem
+ - `questionId`: The question ID of the LeetCode problem (string, required)
+ - `limit`: Maximum number of notes to return (number, optional, default: 10)
+ - `skip`: Number of notes to skip (number, optional, default: 0)
+- **create_note** - Creates a new note for a specific LeetCode problem
-### Global Site-Specific User Tools
+ - `questionId`: The question ID of the LeetCode problem (string, required)
+ - `content`: The content of the note, supports markdown format (string, required)
+ - `summary`: An optional short summary or title for the note (string, optional)
-Exclusive to leetcode.com platform.
+- **update_note** - Updates an existing note with new content or summary
+ - `noteId`: The ID of the note to update (string, required)
+ - `content`: The new content for the note, supports markdown format (string, required)
+ - `summary`: An optional new short summary or title for the note (string, optional)
-| Tool Name | Description | Parameters |
-| ---------------------------------- | ------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
-| **leetcode_recent_submissions** | Retrieves a user's recent submission history (Global) | `username` (string, required): LeetCode username
`limit` (number, optional): Results limit |
-| **leetcode_recent_ac_submissions** | Retrieves a user's recent accepted submissions (Global) | `username` (string, required): LeetCode username
`limit` (number, optional): Results limit |
+### Solutions
-### China Site-Specific User Tools
+- **list_problem_solutions** - Retrieves a list of community solutions for a specific problem
-Exclusive to leetcode.cn platform.
+ - `questionSlug`: The URL slug/identifier of the problem (string, required)
+ - `limit`: Maximum number of solutions to return (number, optional, default: 10)
+ - `skip`: Number of solutions to skip (number, optional)
+ - `userInput`: Search term to filter solutions (string, optional)
+ - `tagSlugs`: Array of tag identifiers to filter solutions (string[], optional, default: [])
+ - `orderBy`: Sorting criteria for the returned solutions
+ - Global: enum: "HOT", "MOST_RECENT", "MOST_VOTES", optional, default: "HOT"
+ - CN: enum: "DEFAULT", "MOST_UPVOTE", "HOT", "NEWEST_TO_OLDEST", "OLDEST_TO_NEWEST", optional, default: "DEFAULT"
-| Tool Name | Description | Parameters |
-| --------------------------------------- | --------------------------------------------- | --------------------------------------------------------------------------------------------------- |
-| **leetcode_user_recent_ac_submissions** | Retrieves recent accepted submissions (China) | `username` (string, required): LeetCode China username
`limit` (number, optional): Results limit |
+- **get_problem_solution** - Retrieves the complete content of a specific solution
+ - `topicId`: Unique topic ID of the solution (string, required, Global only)
+ - `slug`: Unique slug/identifier of the solution (string, required, CN only)
-### Authenticated Common Tools
+## Available Resources
-Requires session authentication, available on both platforms.
+| Resource Name | Global | CN | Auth Required | Description |
+| ---------------------- | :----: | :-: | :-----------: | ------------------------------------------------------------ |
+| **problem-categories** | ✅ | ✅ | ❌ | A list of all problem classification categories |
+| **problem-tags** | ✅ | ✅ | ❌ | A detailed collection of algorithmic and data structure tags |
+| **problem-langs** | ✅ | ✅ | ❌ | A complete list of all supported programming languages |
+| **problem-detail** | ✅ | ✅ | ❌ | Provides details about a specific problem |
+| **problem-solution** | ✅ | ✅ | ❌ | Provides the complete content of a specific solution |
-| Tool Name | Description | Parameters |
-| -------------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| **leetcode_user_status** | Retrieves authenticated user's current status | None |
-| **leetcode_problem_submission_detail** | Provides detailed submission analysis | `id` (number, required): Submission ID |
-| **leetcode_user_progress_questions** | Tracks user's problem-solving progress | `offset` (number, required): Pagination offset
`limit` (number, required): Results limit
`questionStatus` (enum, optional): 'ATTEMPTED' or 'SOLVED' filter
`difficulty` (string[], optional): Complexity level filter |
+## Resource URIs
-### Global Site-Specific Authenticated Tools
+- **problem-categories** - A list of all problem classification categories
-Authenticated tools exclusive to leetcode.com.
+ - URI: `categories://problems/all`
-| Name | Description | Parameters |
-| --------------------------------- | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| **leetcode_user_all_submissions** | Retrieves paginated submission history (Global) | `limit` (number, required): Results limit
`offset` (number, required): Pagination offset
`questionSlug` (string, optional): Problem identifier filter |
+- **problem-tags** - A detailed collection of algorithmic and data structure tags
-### China Site-Specific Authenticated Tools
+ - URI: `tags://problems/all`
-Authenticated tools exclusive to leetcode.cn.
+- **problem-langs** - A complete list of all programming languages supported by LeetCode
-| Tool Name | Description | Parameters |
-| --------------------------------- | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| **leetcode_user_all_submissions** | Retrieves comprehensive submission history (China) | `limit` (number, required): Results limit
`offset` (number, required): Pagination offset
`questionSlug` (string, optional): Problem identifier
`lang` (string, optional): Programming language filter
`status` (string, optional): Submission status filter
`lastKey` (string, optional): Pagination token |
+ - URI: `langs://problems/all`
-## Resources
+- **problem-detail** - Provides details about a specific LeetCode problem
-The server provides reference resources for platform metadata access via URI endpoints.
+ - URI: `problem://{titleSlug}`
+ - Parameters:
+ - `titleSlug`: Problem identifier as it appears in the LeetCode URL
-| Resource Name | Description | URI |
-| ---------------------- | ---------------------------------------------- | ----------------------------------------------------------------------------- |
-| **problem-categories** | Complete problem classification categories | `leetcode://problems/categories/all` |
-| **problem-tags** | Algorithmic and data structure tags collection | `leetcode://problems/tags/all` |
-| **problem-langs** | Supported programming languages list | `leetcode://problems/langs/all` |
-| **solution-article** | A LeetCode solution article | global: `leetcode://solutions/{topicId}`
cn: `leetcode://solutions/{slug}` |
+- **problem-solution** - Provides the complete content of a specific solution
+ - Global URI: `solution://{topicId}`
+ - Parameters:
+ - `topicId`: Unique topic ID of the solution
+ - CN URI: `solution://{slug}`
+ - Parameters:
+ - `slug`: Unique slug/identifier of the solution
## Authentication
-Advanced features require LeetCode session authentication:
+User-specific data access requires LeetCode session authentication:
1. Log in to LeetCode ([Global](https://leetcode.com) or [China](https://leetcode.cn) site)
2. Extract `LEETCODE_SESSION` cookie from browser developer tools
diff --git a/README_zh-CN.md b/README_zh-CN.md
new file mode 100644
index 0000000..1d263c8
--- /dev/null
+++ b/README_zh-CN.md
@@ -0,0 +1,344 @@
+# LeetCode MCP 服务器
+
+[](https://www.npmjs.com/package/@jinzcdev/leetcode-mcp-server)
+[](https://www.npmjs.com/package/@jinzcdev/leetcode-mcp-server)
+[](https://smithery.ai/server/@jinzcdev/leetcode-mcp-server)
+[](README.md)
+[](https://github.com/jinzcdev/leetcode-mcp-server)
+
+LeetCode MCP Server 是一个基于 [模型上下文协议 (MCP)](https://modelcontextprotocol.io/introduction) 的服务,提供与 LeetCode API 的无缝集成,实现与 LeetCode 编程题目、竞赛、题解和用户数据的高级自动化和智能交互。
+
+
+
+
+
+## 特性
+
+- 🌐 **多站点支持**:同时支持 leetcode.com(全球)和 leetcode.cn(中国)站点
+- 📊 **题目数据获取**:获取详细的题目描述、约束条件、示例、官方题解和用户提交的解答
+- 👤 **用户数据访问**:检索用户资料、提交历史和竞赛表现
+- 🔒 **私有数据访问**:创建和查询用户笔记,跟踪题目解答进度,分析提交详情(AC/WA 报告)
+- 🔍 **高级搜索功能**:按标签、难度级别、分类和关键字筛选题目
+- 📅 **每日一题获取**:轻松访问每日一题
+
+## 前提条件
+
+1. Node.js (v20.x 或更高版本)
+2. (可选)LeetCode 会话 cookie,用于授权访问 API
+
+## 安装
+
+### 通过 Smithery 安装
+
+使用 [Smithery](https://smithery.ai/server/@jinzcdev/leetcode-mcp-server) 为 Claude Desktop 自动安装 leetcode-mcp-server:
+
+```bash
+npx -y @smithery/cli install @jinzcdev/leetcode-mcp-server --client claude
+```
+
+### 手动安装
+
+```bash
+# 从 npm 安装
+npm install @jinzcdev/leetcode-mcp-server -g
+
+# 使用中国站点配置运行
+npx -y @jinzcdev/leetcode-mcp-server --site cn
+
+# 使用认证运行(访问私有数据)
+npx -y @jinzcdev/leetcode-mcp-server --site cn --session <您的 LEETCODE 会话 COOKIE>
+```
+
+或者,您可以克隆仓库并在本地运行:
+
+```bash
+# 克隆仓库
+git clone https://github.com/jinzcdev/leetcode-mcp-server.git
+
+# 导航到项目目录
+cd leetcode-mcp-server
+
+# 构建项目
+npm install && npm run build
+
+# 运行服务器
+node build/index.js --site cn
+```
+
+## 使用方法
+
+### Visual Studio Code 集成
+
+在您的用户设置 (JSON) 文件中添加以下配置。通过按 `Ctrl/Cmd + Shift + P` 并搜索 `Preferences: Open User Settings (JSON)` 来访问此文件。
+
+#### 方式一:使用环境变量
+
+```json
+{
+ "mcp": {
+ "servers": {
+ "leetcode": {
+ "type": "stdio",
+ "command": "npx",
+ "args": ["-y", "@jinzcdev/leetcode-mcp-server"],
+ "env": {
+ "LEETCODE_SITE": "cn",
+ "LEETCODE_SESSION": "<您的 LEETCODE 会话 COOKIE>"
+ }
+ }
+ }
+ }
+}
+```
+
+#### 方式二:使用命令行参数
+
+```json
+{
+ "mcp": {
+ "servers": {
+ "leetcode": {
+ "type": "stdio",
+ "command": "npx",
+ "args": [
+ "-y",
+ "@jinzcdev/leetcode-mcp-server",
+ "--site",
+ "cn",
+ "--session",
+ "<您的 LEETCODE 会话 COOKIE>"
+ ]
+ }
+ }
+ }
+}
+```
+
+对于 LeetCode 全球站点,请将 `--site` 参数修改为 `global`。
+
+> [!TIP]
+>
+> 服务支持以下可选的环境变量:
+>
+> - `LEETCODE_SITE`:LeetCode API 端点('global' 或 'cn',默认为 'global')
+> - `LEETCODE_SESSION`:用于授权 API 访问的 LeetCode 会话 cookie(默认为空)
+>
+> **优先级说明**:
+>
+> 当同时指定命令行参数和环境变量时,命令行参数优先。例如:
+>
+> - 如果设置了 `LEETCODE_SITE=cn` 但您运行 `leetcode-mcp-server --site global`,服务器将使用 `global`。
+> - 如果存在 `LEETCODE_SESSION` 但您提供了 `--session "new_cookie"`,将使用命令行中的参数值。
+
+## 可用工具
+
+### 题目
+
+| 工具 | 全球站 | 中国站 | 需要认证 | 描述 |
+| ----------------------- | :----: | :----: | :------: | ---------------------------------- |
+| **get_daily_challenge** | ✅ | ✅ | ❌ | 获取今天的 LeetCode 每日一题 |
+| **get_problem** | ✅ | ✅ | ❌ | 获取特定 LeetCode 题目详细信息 |
+| **search_problems** | ✅ | ✅ | ❌ | 使用多种过滤条件搜索 LeetCode 题目 |
+
+### 用户
+
+| 工具 | 全球站 | 中国站 | 需要认证 | 描述 |
+| --------------------------------- | :----: | :----: | :------: | ---------------------------- |
+| **get_user_profile** | ✅ | ✅ | ❌ | 获取 LeetCode 用户的简介信息 |
+| **get_user_contest_ranking** | ✅ | ✅ | ❌ | 获取用户的竞赛排名统计 |
+| **get_recent_ac_submissions** | ✅ | ✅ | ❌ | 获取用户的近期已接受提交 |
+| **get_recent_submissions** | ✅ | ❌ | ❌ | 获取用户的近期提交历史 |
+| **get_user_status** | ✅ | ✅ | ✅ | 获取用户的当前状态 |
+| **get_problem_submission_report** | ✅ | ✅ | ✅ | 提供详细的提交分析 |
+| **get_problem_progress** | ✅ | ✅ | ✅ | 获取用户的答题进度 |
+| **get_all_submissions** | ✅ | ✅ | ✅ | 获取用户提交的分页列表 |
+
+### 笔记
+
+| 工具 | 全球站 | 中国站 | 需要认证 | 描述 |
+| ---------------- | :----: | :----: | :------: | ------------------------------ |
+| **search_notes** | ❌ | ✅ | ✅ | 使用过滤选项搜索用户笔记 |
+| **get_note** | ❌ | ✅ | ✅ | 通过题目 ID 获取特定题目的笔记 |
+| **create_note** | ❌ | ✅ | ✅ | 为特定题目创建新笔记 |
+| **update_note** | ❌ | ✅ | ✅ | 使用新内容更新现有笔记 |
+
+### 题解
+
+| 工具 | 全球站 | 中国站 | 需要认证 | 描述 |
+| -------------------------- | :----: | :----: | :------: | ------------------------------ |
+| **list_problem_solutions** | ✅ | ✅ | ❌ | 获取特定题目的社区题解文章列表 |
+| **get_problem_solution** | ✅ | ✅ | ❌ | 获取特定题解文章的完整内容 |
+
+## 工具参数
+
+### 题目
+
+- **get_daily_challenge** - 获取今天的 LeetCode 每日一题及完整详情
+
+ - 无需参数
+
+- **get_problem** - 获取特定 LeetCode 题目的详情
+
+ - `titleSlug`:题目的 URL 标识符(字符串,必需)
+
+- **search_problems** - 基于多种过滤条件搜索 LeetCode 题目
+ - `category`:题目类别过滤器(字符串,可选,默认:"all-code-essentials")
+ - `tags`:按主题标签过滤题目的列表(字符串数组,可选)
+ - `difficulty`:题目难度级别过滤器(枚举:"EASY"、"MEDIUM"、"HARD",可选)
+ - `searchKeywords`:在题目标题和描述中搜索的关键词(字符串,可选)
+ - `limit`:返回的最大题目数量(数字,可选,默认:10)
+ - `offset`:要跳过的题目数量(数字,可选)
+
+### 用户
+
+- **get_user_profile** - 获取 LeetCode 用户的资料信息
+
+ - `username`:LeetCode 用户名(字符串,必需)
+
+- **get_user_contest_ranking** - 获取用户的竞赛排名信息
+
+ - `username`:LeetCode 用户名(字符串,必需)
+ - `attended`:是否只包括用户参加过的竞赛(布尔值,可选,默认:true)
+
+- **get_recent_submissions** - 获取用户在 LeetCode 全球站的近期提交
+
+ - `username`:LeetCode 用户名(字符串,必需)
+ - `limit`:返回的最大提交数量(数字,可选,默认:10)
+
+- **get_recent_ac_submissions** - 获取用户的近期已接受提交
+
+ - `username`:LeetCode 用户名(字符串,必需)
+ - `limit`:返回的最大提交数量(数字,可选,默认:10)
+
+- **get_user_status** - 获取当前已认证用户的状态
+
+ - 无需参数
+
+- **get_problem_submission_report** - 获取特定提交的详细信息
+
+ - `id`:提交的数字 ID(数字,必需)
+
+- **get_problem_progress** - 获取已认证用户的题目解决状态
+
+ - `offset`:要跳过的题目数量(数字,可选,默认:0)
+ - `limit`:返回的最大题目数量(数字,可选,默认:100)
+ - `questionStatus`:按题目状态过滤(枚举:"ATTEMPTED"、"SOLVED",可选)
+ - `difficulty`:按难度级别过滤(字符串数组,可选)
+
+- **get_all_submissions** - 获取用户提交的分页列表
+ - `limit`:返回的最大提交数量(数字,默认:20)
+ - `offset`:要跳过的提交数量(数字,默认:0)
+ - `questionSlug`:可选的题目标识符(字符串,可选)
+ - `lang`:编程语言过滤器(字符串,可选,仅中国站)
+ - `status`:提交状态过滤器(枚举:"AC"、"WA",可选,仅中国站)
+ - `lastKey`:用于检索下一页的分页令牌(字符串,可选,仅中国站)
+
+### 笔记
+
+- **search_notes** - 搜索 LeetCode 中国站上的用户笔记
+
+ - `keyword`:过滤笔记的搜索词(字符串,可选)
+ - `limit`:返回的最大笔记数量(数字,可选,默认:10)
+ - `skip`:要跳过的笔记数量(数字,可选,默认:0)
+ - `orderBy`:返回笔记的排序顺序(枚举:"ASCENDING"、"DESCENDING",可选,默认:"DESCENDING")
+
+- **get_note** - 获取特定 LeetCode 题目的用户笔记
+
+ - `questionId`:LeetCode 题目的题目 ID(字符串,必需)
+ - `limit`:返回的最大笔记数量(数字,可选,默认:10)
+ - `skip`:要跳过的笔记数量(数字,可选,默认:0)
+
+- **create_note** - 为特定 LeetCode 题目创建新笔记
+
+ - `questionId`:LeetCode 题目的题目 ID(字符串,必需)
+ - `content`:笔记内容,支持 markdown 格式(字符串,必需)
+ - `summary`:可选的笔记简短摘要或标题(字符串,可选)
+
+- **update_note** - 使用新内容或摘要更新现有笔记
+ - `noteId`:要更新的笔记 ID(字符串,必需)
+ - `content`:笔记的新内容,支持 markdown 格式(字符串,必需)
+ - `summary`:可选的新简短摘要或标题(字符串,可选)
+
+### 题解
+
+- **list_problem_solutions** - 获取特定题目的社区题解文章列表
+
+ - `questionSlug`:题目的 URL 标识符(字符串,必需)
+ - `limit`:返回的最大题解文章数量(数字,可选,默认:10)
+ - `skip`:要跳过的题解文章数量(数字,可选)
+ - `userInput`:过滤题解文章的搜索词(字符串,可选)
+ - `tagSlugs`:用于过滤题解文章的标签标识符数组(字符串数组,可选,默认:[])
+ - `orderBy`:题解文章的排序条件
+ - 全球站:枚举:"HOT"、"MOST_RECENT"、"MOST_VOTES",可选,默认:"HOT"
+ - 中国站:枚举:"DEFAULT"、"MOST_UPVOTE"、"HOT"、"NEWEST_TO_OLDEST"、"OLDEST_TO_NEWEST",可选,默认:"DEFAULT"
+
+- **get_problem_solution** - 获取特定题解文章的完整内容
+ - `topicId`:题解文章的唯一主题 ID(字符串,必需,仅全球站)
+ - `slug`:题解文章的唯一标识符(字符串,必需,仅中国站)
+
+## 可用资源
+
+| 资源名称 | 全球站 | 中国站 | 需要认证 | 描述 |
+| ---------------------- | :----: | :----: | :------: | ---------------------------- |
+| **problem-categories** | ✅ | ✅ | ❌ | 所有题目分类类别的列表 |
+| **problem-tags** | ✅ | ✅ | ❌ | 算法和数据结构标签的详细集合 |
+| **problem-langs** | ✅ | ✅ | ❌ | 所有支持的编程语言的完整列表 |
+| **problem-detail** | ✅ | ✅ | ❌ | 提供特定题目的详情 |
+| **problem-solution** | ✅ | ✅ | ❌ | 提供特定题解文章的完整内容 |
+
+## 资源 URI
+
+- **problem-categories** - 所有题目分类类别的列表
+
+ - URI: `categories://problems/all`
+
+- **problem-tags** - 算法和数据结构标签的详细集合
+
+ - URI: `tags://problems/all`
+
+- **problem-langs** - LeetCode 支持的所有编程语言的完整列表
+
+ - URI: `langs://problems/all`
+
+- **problem-detail** - 提供特定 LeetCode 题目的详情
+
+ - URI: `problem://{titleSlug}`
+ - 参数:
+ - `titleSlug`: LeetCode URL 中显示的题目标识符
+
+- **problem-solution** - 提供特定题解文章的完整内容
+ - 全球站 URI: `solution://{topicId}`
+ - 参数:
+ - `topicId`: 题解文章的唯一主题 ID
+ - 中国站 URI: `solution://{slug}`
+ - 参数:
+ - `slug`: 题解文章的唯一标识符
+
+## 认证
+
+访问用户特定数据需要 LeetCode 会话认证:
+
+1. 登录 LeetCode([全球站](https://leetcode.com) 或 [中国站](https://leetcode.cn))
+2. 从浏览器开发者工具中提取 `LEETCODE_SESSION` cookie
+3. 使用 `--session` 标志或 `LEETCODE_SESSION` 环境变量配置服务器
+
+## 响应格式
+
+所有工具都返回具有以下结构的 JSON 格式响应:
+
+```json
+{
+ "content": [
+ {
+ "type": "text",
+ "text": "JSON_DATA_STRING"
+ }
+ ]
+}
+```
+
+`JSON_DATA_STRING` 包含请求的数据或失败请求的错误消息。
+
+## 许可证
+
+本项目采用 MIT 许可证。
diff --git a/eslint.config.js b/eslint.config.js
index 5779092..8004052 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -5,6 +5,9 @@ import globals from "globals";
import tseslint from "typescript-eslint";
export default defineConfig([
+ {
+ ignores: ["**/build/**", "**/dist/**", "**/node_modules/**"]
+ },
{
files: ["**/*.{js,mjs,cjs,ts}"],
plugins: { js },
diff --git a/package-lock.json b/package-lock.json
index 0786546..34f05a4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,17 +1,18 @@
{
"name": "@jinzcdev/leetcode-mcp-server",
- "version": "0.1.1",
+ "version": "1.2.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@jinzcdev/leetcode-mcp-server",
- "version": "0.1.1",
+ "version": "1.2.0",
"license": "MIT",
"dependencies": {
"@modelcontextprotocol/sdk": "^1.8.0",
"leetcode-query": "^2.0.0",
"minimist": "^1.2.8",
+ "pino": "^9.6.0",
"ts-node": "^10.9.2",
"zod": "^3.24.2"
},
@@ -22,23 +23,29 @@
"@eslint/js": "^9.24.0",
"@types/minimist": "^1.2.5",
"@types/node": "^22.14.0",
+ "esbuild": "^0.25.2",
"eslint": "^9.24.0",
"eslint-config-prettier": "^10.1.2",
"eslint-plugin-prettier": "^5.2.6",
"globals": "^16.0.0",
"husky": "^9.1.7",
"lint-staged": "^15.5.1",
+ "pino-pretty": "^13.0.0",
"prettier": "^3.5.3",
"prettier-plugin-organize-imports": "^4.1.0",
"tsc-watch": "6.2.1",
"typescript": "^5.8.3",
"typescript-eslint": "^8.29.1",
- "vitest": "^1.6.1"
+ "vite": "^6.3.5",
+ "vitest": "^3.1.3"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-linux-x64-gnu": "^4.40.1"
}
},
"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",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
"integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
"license": "MIT",
"dependencies": {
@@ -49,9 +56,9 @@
}
},
"node_modules/@esbuild/aix-ppc64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
- "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz",
+ "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==",
"cpu": [
"ppc64"
],
@@ -62,13 +69,13 @@
"aix"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/android-arm": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
- "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz",
+ "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==",
"cpu": [
"arm"
],
@@ -79,13 +86,13 @@
"android"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
- "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz",
+ "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==",
"cpu": [
"arm64"
],
@@ -96,13 +103,13 @@
"android"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
- "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz",
+ "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==",
"cpu": [
"x64"
],
@@ -113,13 +120,13 @@
"android"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
- "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz",
+ "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==",
"cpu": [
"arm64"
],
@@ -130,13 +137,13 @@
"darwin"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
- "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz",
+ "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==",
"cpu": [
"x64"
],
@@ -147,13 +154,13 @@
"darwin"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
- "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz",
+ "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==",
"cpu": [
"arm64"
],
@@ -164,13 +171,13 @@
"freebsd"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
- "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz",
+ "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==",
"cpu": [
"x64"
],
@@ -181,13 +188,13 @@
"freebsd"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
- "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz",
+ "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==",
"cpu": [
"arm"
],
@@ -198,13 +205,13 @@
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
- "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz",
+ "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==",
"cpu": [
"arm64"
],
@@ -215,13 +222,13 @@
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
- "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz",
+ "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==",
"cpu": [
"ia32"
],
@@ -232,13 +239,13 @@
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
- "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz",
+ "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==",
"cpu": [
"loong64"
],
@@ -249,13 +256,13 @@
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
- "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz",
+ "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==",
"cpu": [
"mips64el"
],
@@ -266,13 +273,13 @@
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
- "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz",
+ "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==",
"cpu": [
"ppc64"
],
@@ -283,13 +290,13 @@
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
- "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz",
+ "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==",
"cpu": [
"riscv64"
],
@@ -300,13 +307,13 @@
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
- "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz",
+ "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==",
"cpu": [
"s390x"
],
@@ -317,13 +324,13 @@
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
- "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz",
+ "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==",
"cpu": [
"x64"
],
@@ -334,13 +341,30 @@
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz",
+ "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
- "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz",
+ "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==",
"cpu": [
"x64"
],
@@ -351,13 +375,30 @@
"netbsd"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz",
+ "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
- "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz",
+ "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==",
"cpu": [
"x64"
],
@@ -368,13 +409,13 @@
"openbsd"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/sunos-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
- "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz",
+ "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==",
"cpu": [
"x64"
],
@@ -385,13 +426,13 @@
"sunos"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
- "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz",
+ "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==",
"cpu": [
"arm64"
],
@@ -402,13 +443,13 @@
"win32"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
- "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz",
+ "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==",
"cpu": [
"ia32"
],
@@ -419,13 +460,13 @@
"win32"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
- "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz",
+ "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==",
"cpu": [
"x64"
],
@@ -436,13 +477,13 @@
"win32"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@eslint-community/eslint-utils": {
- "version": "4.6.0",
- "resolved": "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.6.0.tgz",
- "integrity": "sha512-WhCn7Z7TauhBtmzhvKpoQs0Wwb/kBcy4CwpuI0/eEIr2Lx2auxmulAzLr91wVZJaz47iUZdkXOK7WlAfxGKCnA==",
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
+ "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -460,7 +501,7 @@
},
"node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
"version": "3.4.3",
- "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
"dev": true,
"license": "Apache-2.0",
@@ -473,7 +514,7 @@
},
"node_modules/@eslint-community/regexpp": {
"version": "4.12.1",
- "resolved": "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
"integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
"dev": true,
"license": "MIT",
@@ -483,7 +524,7 @@
},
"node_modules/@eslint/config-array": {
"version": "0.20.0",
- "resolved": "https://registry.npmmirror.com/@eslint/config-array/-/config-array-0.20.0.tgz",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz",
"integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==",
"dev": true,
"license": "Apache-2.0",
@@ -497,9 +538,9 @@
}
},
"node_modules/@eslint/config-helpers": {
- "version": "0.2.1",
- "resolved": "https://registry.npmmirror.com/@eslint/config-helpers/-/config-helpers-0.2.1.tgz",
- "integrity": "sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==",
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz",
+ "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -507,9 +548,9 @@
}
},
"node_modules/@eslint/core": {
- "version": "0.12.0",
- "resolved": "https://registry.npmmirror.com/@eslint/core/-/core-0.12.0.tgz",
- "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==",
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz",
+ "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -521,7 +562,7 @@
},
"node_modules/@eslint/eslintrc": {
"version": "3.3.1",
- "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
"integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
"dev": true,
"license": "MIT",
@@ -545,7 +586,7 @@
},
"node_modules/@eslint/eslintrc/node_modules/globals": {
"version": "14.0.0",
- "resolved": "https://registry.npmmirror.com/globals/-/globals-14.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
"integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
"dev": true,
"license": "MIT",
@@ -557,18 +598,21 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.24.0",
- "resolved": "https://registry.npmmirror.com/@eslint/js/-/js-9.24.0.tgz",
- "integrity": "sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==",
+ "version": "9.27.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz",
+ "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
}
},
"node_modules/@eslint/object-schema": {
"version": "2.1.6",
- "resolved": "https://registry.npmmirror.com/@eslint/object-schema/-/object-schema-2.1.6.tgz",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
"integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
"dev": true,
"license": "Apache-2.0",
@@ -577,35 +621,22 @@
}
},
"node_modules/@eslint/plugin-kit": {
- "version": "0.2.8",
- "resolved": "https://registry.npmmirror.com/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz",
- "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==",
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz",
+ "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@eslint/core": "^0.13.0",
+ "@eslint/core": "^0.14.0",
"levn": "^0.4.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
- "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": {
- "version": "0.13.0",
- "resolved": "https://registry.npmmirror.com/@eslint/core/-/core-0.13.0.tgz",
- "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@types/json-schema": "^7.0.15"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
"node_modules/@fetch-impl/cross-fetch": {
"version": "1.0.0",
- "resolved": "https://registry.npmmirror.com/@fetch-impl/cross-fetch/-/cross-fetch-1.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/@fetch-impl/cross-fetch/-/cross-fetch-1.0.0.tgz",
"integrity": "sha512-vNvwtCQ7yruvpYnp1i/4paVi/icrGYx9O4eHNDYorjTAFg78bhitO0l39opJSVfsTKqyWqj3+2+YenoGhZOCJA==",
"license": "MIT",
"peerDependencies": {
@@ -615,13 +646,13 @@
},
"node_modules/@fetch-impl/fetcher": {
"version": "1.0.0",
- "resolved": "https://registry.npmmirror.com/@fetch-impl/fetcher/-/fetcher-1.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/@fetch-impl/fetcher/-/fetcher-1.0.0.tgz",
"integrity": "sha512-UPUN9Yfjnk513Vc08iNW8/9L1nSwQMsTx6nOvmjPNfU2Rtbew/2KgAbQDPuoL6PrNgEmEmmyeM29BkcVBpt3gQ==",
"license": "MIT"
},
"node_modules/@humanfs/core": {
"version": "0.19.1",
- "resolved": "https://registry.npmmirror.com/@humanfs/core/-/core-0.19.1.tgz",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
"integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
"dev": true,
"license": "Apache-2.0",
@@ -631,7 +662,7 @@
},
"node_modules/@humanfs/node": {
"version": "0.16.6",
- "resolved": "https://registry.npmmirror.com/@humanfs/node/-/node-0.16.6.tgz",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
"integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
"dev": true,
"license": "Apache-2.0",
@@ -645,7 +676,7 @@
},
"node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
"version": "0.3.1",
- "resolved": "https://registry.npmmirror.com/@humanwhocodes/retry/-/retry-0.3.1.tgz",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
"integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
"dev": true,
"license": "Apache-2.0",
@@ -659,7 +690,7 @@
},
"node_modules/@humanwhocodes/module-importer": {
"version": "1.0.1",
- "resolved": "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
"integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
"dev": true,
"license": "Apache-2.0",
@@ -672,9 +703,9 @@
}
},
"node_modules/@humanwhocodes/retry": {
- "version": "0.4.2",
- "resolved": "https://registry.npmmirror.com/@humanwhocodes/retry/-/retry-0.4.2.tgz",
- "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==",
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -685,22 +716,9 @@
"url": "https://github.com/sponsors/nzakas"
}
},
- "node_modules/@jest/schemas": {
- "version": "29.6.3",
- "resolved": "https://registry.npmmirror.com/@jest/schemas/-/schemas-29.6.3.tgz",
- "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@sinclair/typebox": "^0.27.8"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.2",
- "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"license": "MIT",
"engines": {
@@ -709,13 +727,13 @@
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.5.0",
- "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.9",
- "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
"integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
"license": "MIT",
"dependencies": {
@@ -724,18 +742,19 @@
}
},
"node_modules/@modelcontextprotocol/sdk": {
- "version": "1.8.0",
- "resolved": "https://registry.npmmirror.com/@modelcontextprotocol/sdk/-/sdk-1.8.0.tgz",
- "integrity": "sha512-e06W7SwrontJDHwCawNO5SGxG+nU9AAx+jpHHZqGl/WrDBdWOpvirC+s58VpJTB5QemI4jTRcjWT4Pt3Q1NPQQ==",
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.12.0.tgz",
+ "integrity": "sha512-m//7RlINx1F3sz3KqwY1WWzVgTcYX52HYk4bJ1hkBXV3zccAEth+jRvG8DBRrdaQuRsPAJOx2MH3zaHNCKL7Zg==",
"license": "MIT",
"dependencies": {
+ "ajv": "^6.12.6",
"content-type": "^1.0.5",
"cors": "^2.8.5",
- "cross-spawn": "^7.0.3",
+ "cross-spawn": "^7.0.5",
"eventsource": "^3.0.2",
"express": "^5.0.1",
"express-rate-limit": "^7.5.0",
- "pkce-challenge": "^4.1.0",
+ "pkce-challenge": "^5.0.0",
"raw-body": "^3.0.0",
"zod": "^3.23.8",
"zod-to-json-schema": "^3.24.1"
@@ -746,7 +765,7 @@
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
- "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dev": true,
"license": "MIT",
@@ -760,7 +779,7 @@
},
"node_modules/@nodelib/fs.stat": {
"version": "2.0.5",
- "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"dev": true,
"license": "MIT",
@@ -770,7 +789,7 @@
},
"node_modules/@nodelib/fs.walk": {
"version": "1.2.8",
- "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dev": true,
"license": "MIT",
@@ -783,22 +802,22 @@
}
},
"node_modules/@pkgr/core": {
- "version": "0.2.2",
- "resolved": "https://registry.npmmirror.com/@pkgr/core/-/core-0.2.2.tgz",
- "integrity": "sha512-25L86MyPvnlQoX2MTIV2OiUcb6vJ6aRbFa9pbwByn95INKD5mFH2smgjDhq+fwJoqAgvgbdJLj6Tz7V9X5CFAQ==",
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.4.tgz",
+ "integrity": "sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^12.20.0 || ^14.18.0 || >=16.0.0"
},
"funding": {
- "url": "https://opencollective.com/unts"
+ "url": "https://opencollective.com/pkgr"
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.39.0.tgz",
- "integrity": "sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz",
+ "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==",
"cpu": [
"arm"
],
@@ -810,9 +829,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.39.0.tgz",
- "integrity": "sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz",
+ "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==",
"cpu": [
"arm64"
],
@@ -824,9 +843,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.39.0.tgz",
- "integrity": "sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz",
+ "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==",
"cpu": [
"arm64"
],
@@ -838,9 +857,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.39.0.tgz",
- "integrity": "sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz",
+ "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==",
"cpu": [
"x64"
],
@@ -852,9 +871,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.39.0.tgz",
- "integrity": "sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz",
+ "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==",
"cpu": [
"arm64"
],
@@ -866,9 +885,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.39.0.tgz",
- "integrity": "sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz",
+ "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==",
"cpu": [
"x64"
],
@@ -880,9 +899,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.39.0.tgz",
- "integrity": "sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz",
+ "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==",
"cpu": [
"arm"
],
@@ -894,9 +913,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.39.0.tgz",
- "integrity": "sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz",
+ "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==",
"cpu": [
"arm"
],
@@ -908,9 +927,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.39.0.tgz",
- "integrity": "sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz",
+ "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==",
"cpu": [
"arm64"
],
@@ -922,9 +941,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.39.0.tgz",
- "integrity": "sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz",
+ "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==",
"cpu": [
"arm64"
],
@@ -936,9 +955,9 @@
]
},
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.39.0.tgz",
- "integrity": "sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz",
+ "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==",
"cpu": [
"loong64"
],
@@ -950,9 +969,9 @@
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.39.0.tgz",
- "integrity": "sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz",
+ "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==",
"cpu": [
"ppc64"
],
@@ -964,9 +983,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.39.0.tgz",
- "integrity": "sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz",
+ "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==",
"cpu": [
"riscv64"
],
@@ -978,9 +997,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.39.0.tgz",
- "integrity": "sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz",
+ "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==",
"cpu": [
"riscv64"
],
@@ -992,9 +1011,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.39.0.tgz",
- "integrity": "sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz",
+ "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==",
"cpu": [
"s390x"
],
@@ -1006,13 +1025,12 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.39.0.tgz",
- "integrity": "sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz",
+ "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==",
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -1020,9 +1038,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.39.0.tgz",
- "integrity": "sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz",
+ "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==",
"cpu": [
"x64"
],
@@ -1034,9 +1052,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.39.0.tgz",
- "integrity": "sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz",
+ "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==",
"cpu": [
"arm64"
],
@@ -1048,9 +1066,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.39.0.tgz",
- "integrity": "sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz",
+ "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==",
"cpu": [
"ia32"
],
@@ -1062,9 +1080,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.39.0.tgz",
- "integrity": "sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz",
+ "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==",
"cpu": [
"x64"
],
@@ -1075,83 +1093,76 @@
"win32"
]
},
- "node_modules/@sinclair/typebox": {
- "version": "0.27.8",
- "resolved": "https://registry.npmmirror.com/@sinclair/typebox/-/typebox-0.27.8.tgz",
- "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@tsconfig/node10": {
"version": "1.0.11",
- "resolved": "https://registry.npmmirror.com/@tsconfig/node10/-/node10-1.0.11.tgz",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
"integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
"license": "MIT"
},
"node_modules/@tsconfig/node12": {
"version": "1.0.11",
- "resolved": "https://registry.npmmirror.com/@tsconfig/node12/-/node12-1.0.11.tgz",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
"integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
"license": "MIT"
},
"node_modules/@tsconfig/node14": {
"version": "1.0.3",
- "resolved": "https://registry.npmmirror.com/@tsconfig/node14/-/node14-1.0.3.tgz",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
"integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
"license": "MIT"
},
"node_modules/@tsconfig/node16": {
"version": "1.0.4",
- "resolved": "https://registry.npmmirror.com/@tsconfig/node16/-/node16-1.0.4.tgz",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
"integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
"license": "MIT"
},
"node_modules/@types/estree": {
"version": "1.0.7",
- "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.7.tgz",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
"integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/json-schema": {
"version": "7.0.15",
- "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/minimist": {
"version": "1.2.5",
- "resolved": "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.5.tgz",
+ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "22.14.0",
- "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.14.0.tgz",
- "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==",
+ "version": "22.15.24",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.24.tgz",
+ "integrity": "sha512-w9CZGm9RDjzTh/D+hFwlBJ3ziUaVw7oufKA3vOFSOZlzmW9AkZnfjPb+DLnrV6qtgL/LNmP0/2zBNCFHL3F0ng==",
"license": "MIT",
"dependencies": {
"undici-types": "~6.21.0"
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.29.1",
- "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.1.tgz",
- "integrity": "sha512-ba0rr4Wfvg23vERs3eB+P3lfj2E+2g3lhWcCVukUuhtcdUx5lSIFZlGFEBHKr+3zizDa/TvZTptdNHVZWAkSBg==",
+ "version": "8.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.0.tgz",
+ "integrity": "sha512-CACyQuqSHt7ma3Ns601xykeBK/rDeZa3w6IS6UtMQbixO5DWy+8TilKkviGDH6jtWCo8FGRKEK5cLLkPvEammQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.29.1",
- "@typescript-eslint/type-utils": "8.29.1",
- "@typescript-eslint/utils": "8.29.1",
- "@typescript-eslint/visitor-keys": "8.29.1",
+ "@typescript-eslint/scope-manager": "8.33.0",
+ "@typescript-eslint/type-utils": "8.33.0",
+ "@typescript-eslint/utils": "8.33.0",
+ "@typescript-eslint/visitor-keys": "8.33.0",
"graphemer": "^1.4.0",
- "ignore": "^5.3.1",
+ "ignore": "^7.0.0",
"natural-compare": "^1.4.0",
- "ts-api-utils": "^2.0.1"
+ "ts-api-utils": "^2.1.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1161,22 +1172,32 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
+ "@typescript-eslint/parser": "^8.33.0",
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <5.9.0"
}
},
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz",
+ "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
"node_modules/@typescript-eslint/parser": {
- "version": "8.29.1",
- "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-8.29.1.tgz",
- "integrity": "sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg==",
+ "version": "8.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.0.tgz",
+ "integrity": "sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.29.1",
- "@typescript-eslint/types": "8.29.1",
- "@typescript-eslint/typescript-estree": "8.29.1",
- "@typescript-eslint/visitor-keys": "8.29.1",
+ "@typescript-eslint/scope-manager": "8.33.0",
+ "@typescript-eslint/types": "8.33.0",
+ "@typescript-eslint/typescript-estree": "8.33.0",
+ "@typescript-eslint/visitor-keys": "8.33.0",
"debug": "^4.3.4"
},
"engines": {
@@ -1191,35 +1212,71 @@
"typescript": ">=4.8.4 <5.9.0"
}
},
+ "node_modules/@typescript-eslint/project-service": {
+ "version": "8.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.0.tgz",
+ "integrity": "sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/tsconfig-utils": "^8.33.0",
+ "@typescript-eslint/types": "^8.33.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.29.1",
- "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-8.29.1.tgz",
- "integrity": "sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==",
+ "version": "8.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.0.tgz",
+ "integrity": "sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.29.1",
- "@typescript-eslint/visitor-keys": "8.29.1"
+ "@typescript-eslint/types": "8.33.0",
+ "@typescript-eslint/visitor-keys": "8.33.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/tsconfig-utils": {
+ "version": "8.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.0.tgz",
+ "integrity": "sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <5.9.0"
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.29.1",
- "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-8.29.1.tgz",
- "integrity": "sha512-DkDUSDwZVCYN71xA4wzySqqcZsHKic53A4BLqmrWFFpOpNSoxX233lwGu/2135ymTCR04PoKiEEEvN1gFYg4Tw==",
+ "version": "8.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.0.tgz",
+ "integrity": "sha512-lScnHNCBqL1QayuSrWeqAL5GmqNdVUQAAMTaCwdYEdWfIrSrOGzyLGRCHXcCixa5NK6i5l0AfSO2oBSjCjf4XQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/typescript-estree": "8.29.1",
- "@typescript-eslint/utils": "8.29.1",
+ "@typescript-eslint/typescript-estree": "8.33.0",
+ "@typescript-eslint/utils": "8.33.0",
"debug": "^4.3.4",
- "ts-api-utils": "^2.0.1"
+ "ts-api-utils": "^2.1.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1234,9 +1291,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.29.1",
- "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-8.29.1.tgz",
- "integrity": "sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==",
+ "version": "8.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.0.tgz",
+ "integrity": "sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1248,20 +1305,22 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.29.1",
- "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.1.tgz",
- "integrity": "sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==",
+ "version": "8.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.0.tgz",
+ "integrity": "sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.29.1",
- "@typescript-eslint/visitor-keys": "8.29.1",
+ "@typescript-eslint/project-service": "8.33.0",
+ "@typescript-eslint/tsconfig-utils": "8.33.0",
+ "@typescript-eslint/types": "8.33.0",
+ "@typescript-eslint/visitor-keys": "8.33.0",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
"minimatch": "^9.0.4",
"semver": "^7.6.0",
- "ts-api-utils": "^2.0.1"
+ "ts-api-utils": "^2.1.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1276,7 +1335,7 @@
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
"version": "2.0.1",
- "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"license": "MIT",
@@ -1286,7 +1345,7 @@
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
"version": "9.0.5",
- "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"dev": true,
"license": "ISC",
@@ -1301,16 +1360,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.29.1",
- "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-8.29.1.tgz",
- "integrity": "sha512-QAkFEbytSaB8wnmB+DflhUPz6CLbFWE2SnSCrRMEa+KnXIzDYbpsn++1HGvnfAsUY44doDXmvRkO5shlM/3UfA==",
+ "version": "8.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.0.tgz",
+ "integrity": "sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "8.29.1",
- "@typescript-eslint/types": "8.29.1",
- "@typescript-eslint/typescript-estree": "8.29.1"
+ "@eslint-community/eslint-utils": "^4.7.0",
+ "@typescript-eslint/scope-manager": "8.33.0",
+ "@typescript-eslint/types": "8.33.0",
+ "@typescript-eslint/typescript-estree": "8.33.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1325,13 +1384,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.29.1",
- "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.1.tgz",
- "integrity": "sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==",
+ "version": "8.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.0.tgz",
+ "integrity": "sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.29.1",
+ "@typescript-eslint/types": "8.33.0",
"eslint-visitor-keys": "^4.2.0"
},
"engines": {
@@ -1343,74 +1402,113 @@
}
},
"node_modules/@vitest/expect": {
- "version": "1.6.1",
- "resolved": "https://registry.npmmirror.com/@vitest/expect/-/expect-1.6.1.tgz",
- "integrity": "sha512-jXL+9+ZNIJKruofqXuuTClf44eSpcHlgj3CiuNihUF3Ioujtmc0zIa3UJOW5RjDK1YLBJZnWBlPuqhYycLioog==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.1.4.tgz",
+ "integrity": "sha512-xkD/ljeliyaClDYqHPNCiJ0plY5YIcM0OlRiZizLhlPmpXWpxnGMyTZXOHFhFeG7w9P5PBeL4IdtJ/HeQwTbQA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/spy": "3.1.4",
+ "@vitest/utils": "3.1.4",
+ "chai": "^5.2.0",
+ "tinyrainbow": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/mocker": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.1.4.tgz",
+ "integrity": "sha512-8IJ3CvwtSw/EFXqWFL8aCMu+YyYXG2WUSrQbViOZkWTKTVicVwZ/YiEZDSqD00kX+v/+W+OnxhNWoeVKorHygA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/spy": "3.1.4",
+ "estree-walker": "^3.0.3",
+ "magic-string": "^0.30.17"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "msw": "^2.4.9",
+ "vite": "^5.0.0 || ^6.0.0"
+ },
+ "peerDependenciesMeta": {
+ "msw": {
+ "optional": true
+ },
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vitest/pretty-format": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.4.tgz",
+ "integrity": "sha512-cqv9H9GvAEoTaoq+cYqUTCGscUjKqlJZC7PRwY5FMySVj5J+xOm1KQcCiYHJOEzOKRUhLH4R2pTwvFlWCEScsg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/spy": "1.6.1",
- "@vitest/utils": "1.6.1",
- "chai": "^4.3.10"
+ "tinyrainbow": "^2.0.0"
},
"funding": {
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@vitest/runner": {
- "version": "1.6.1",
- "resolved": "https://registry.npmmirror.com/@vitest/runner/-/runner-1.6.1.tgz",
- "integrity": "sha512-3nSnYXkVkf3mXFfE7vVyPmi3Sazhb/2cfZGGs0JRzFsPFvAMBEcrweV1V1GsrstdXeKCTXlJbvnQwGWgEIHmOA==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.1.4.tgz",
+ "integrity": "sha512-djTeF1/vt985I/wpKVFBMWUlk/I7mb5hmD5oP8K9ACRmVXgKTae3TUOtXAEBfslNKPzUQvnKhNd34nnRSYgLNQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/utils": "1.6.1",
- "p-limit": "^5.0.0",
- "pathe": "^1.1.1"
+ "@vitest/utils": "3.1.4",
+ "pathe": "^2.0.3"
},
"funding": {
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@vitest/snapshot": {
- "version": "1.6.1",
- "resolved": "https://registry.npmmirror.com/@vitest/snapshot/-/snapshot-1.6.1.tgz",
- "integrity": "sha512-WvidQuWAzU2p95u8GAKlRMqMyN1yOJkGHnx3M1PL9Raf7AQ1kwLKg04ADlCa3+OXUZE7BceOhVZiuWAbzCKcUQ==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.1.4.tgz",
+ "integrity": "sha512-JPHf68DvuO7vilmvwdPr9TS0SuuIzHvxeaCkxYcCD4jTk67XwL45ZhEHFKIuCm8CYstgI6LZ4XbwD6ANrwMpFg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "magic-string": "^0.30.5",
- "pathe": "^1.1.1",
- "pretty-format": "^29.7.0"
+ "@vitest/pretty-format": "3.1.4",
+ "magic-string": "^0.30.17",
+ "pathe": "^2.0.3"
},
"funding": {
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@vitest/spy": {
- "version": "1.6.1",
- "resolved": "https://registry.npmmirror.com/@vitest/spy/-/spy-1.6.1.tgz",
- "integrity": "sha512-MGcMmpGkZebsMZhbQKkAf9CX5zGvjkBTqf8Zx3ApYWXr3wG+QvEu2eXWfnIIWYSJExIp4V9FCKDEeygzkYrXMw==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.4.tgz",
+ "integrity": "sha512-Xg1bXhu+vtPXIodYN369M86K8shGLouNjoVI78g8iAq2rFoHFdajNvJJ5A/9bPMFcfQqdaCpOgWKEoMQg/s0Yg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "tinyspy": "^2.2.0"
+ "tinyspy": "^3.0.2"
},
"funding": {
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@vitest/utils": {
- "version": "1.6.1",
- "resolved": "https://registry.npmmirror.com/@vitest/utils/-/utils-1.6.1.tgz",
- "integrity": "sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.4.tgz",
+ "integrity": "sha512-yriMuO1cfFhmiGc8ataN51+9ooHRuURdfAZfwFd3usWynjzpLslZdYnRegTv32qdgtJTsj15FoeZe2g15fY1gg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "diff-sequences": "^29.6.3",
- "estree-walker": "^3.0.3",
- "loupe": "^2.3.7",
- "pretty-format": "^29.7.0"
+ "@vitest/pretty-format": "3.1.4",
+ "loupe": "^3.1.3",
+ "tinyrainbow": "^2.0.0"
},
"funding": {
"url": "https://opencollective.com/vitest"
@@ -1418,7 +1516,7 @@
},
"node_modules/accepts": {
"version": "2.0.0",
- "resolved": "https://registry.npmmirror.com/accepts/-/accepts-2.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
"integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
"license": "MIT",
"dependencies": {
@@ -1431,7 +1529,7 @@
},
"node_modules/acorn": {
"version": "8.14.1",
- "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.14.1.tgz",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
"integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
"license": "MIT",
"bin": {
@@ -1443,7 +1541,7 @@
},
"node_modules/acorn-jsx": {
"version": "5.3.2",
- "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true,
"license": "MIT",
@@ -1453,7 +1551,7 @@
},
"node_modules/acorn-walk": {
"version": "8.3.4",
- "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.4.tgz",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
"integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
"license": "MIT",
"dependencies": {
@@ -1465,9 +1563,8 @@
},
"node_modules/ajv": {
"version": "6.12.6",
- "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
@@ -1482,7 +1579,7 @@
},
"node_modules/ansi-escapes": {
"version": "7.0.0",
- "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-7.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz",
"integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==",
"dev": true,
"license": "MIT",
@@ -1498,7 +1595,7 @@
},
"node_modules/ansi-regex": {
"version": "6.1.0",
- "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
"integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
"dev": true,
"license": "MIT",
@@ -1510,13 +1607,16 @@
}
},
"node_modules/ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
"engines": {
- "node": ">=10"
+ "node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
@@ -1524,37 +1624,46 @@
},
"node_modules/arg": {
"version": "4.1.3",
- "resolved": "https://registry.npmmirror.com/arg/-/arg-4.1.3.tgz",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
"license": "MIT"
},
"node_modules/argparse": {
"version": "2.0.1",
- "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true,
"license": "Python-2.0"
},
"node_modules/assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmmirror.com/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
+ "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "*"
+ "node": ">=12"
+ }
+ },
+ "node_modules/atomic-sleep": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
+ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.0.0"
}
},
"node_modules/balanced-match": {
"version": "1.0.2",
- "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true,
"license": "MIT"
},
"node_modules/body-parser": {
"version": "2.2.0",
- "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-2.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz",
"integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==",
"license": "MIT",
"dependencies": {
@@ -1574,7 +1683,7 @@
},
"node_modules/brace-expansion": {
"version": "1.1.11",
- "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"license": "MIT",
@@ -1585,7 +1694,7 @@
},
"node_modules/braces": {
"version": "3.0.3",
- "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
"license": "MIT",
@@ -1598,7 +1707,7 @@
},
"node_modules/bytes": {
"version": "3.1.2",
- "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
"license": "MIT",
"engines": {
@@ -1607,7 +1716,7 @@
},
"node_modules/cac": {
"version": "6.7.14",
- "resolved": "https://registry.npmmirror.com/cac/-/cac-6.7.14.tgz",
+ "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
"integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
"dev": true,
"license": "MIT",
@@ -1617,7 +1726,7 @@
},
"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",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"license": "MIT",
"dependencies": {
@@ -1630,7 +1739,7 @@
},
"node_modules/call-bound": {
"version": "1.0.4",
- "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
"integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
"license": "MIT",
"dependencies": {
@@ -1646,7 +1755,7 @@
},
"node_modules/callsites": {
"version": "3.1.0",
- "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true,
"license": "MIT",
@@ -1655,27 +1764,25 @@
}
},
"node_modules/chai": {
- "version": "4.5.0",
- "resolved": "https://registry.npmmirror.com/chai/-/chai-4.5.0.tgz",
- "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz",
+ "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.3",
- "deep-eql": "^4.1.3",
- "get-func-name": "^2.0.2",
- "loupe": "^2.3.6",
- "pathval": "^1.1.1",
- "type-detect": "^4.1.0"
+ "assertion-error": "^2.0.1",
+ "check-error": "^2.1.1",
+ "deep-eql": "^5.0.1",
+ "loupe": "^3.1.0",
+ "pathval": "^2.0.0"
},
"engines": {
- "node": ">=4"
+ "node": ">=12"
}
},
"node_modules/chalk": {
"version": "4.1.2",
- "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"license": "MIT",
@@ -1690,38 +1797,19 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/chalk/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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
"node_modules/check-error": {
- "version": "1.0.3",
- "resolved": "https://registry.npmmirror.com/check-error/-/check-error-1.0.3.tgz",
- "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz",
+ "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "get-func-name": "^2.0.2"
- },
"engines": {
- "node": "*"
+ "node": ">= 16"
}
},
"node_modules/cli-cursor": {
"version": "5.0.0",
- "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-5.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
"integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==",
"dev": true,
"license": "MIT",
@@ -1737,7 +1825,7 @@
},
"node_modules/cli-truncate": {
"version": "4.0.0",
- "resolved": "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-4.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz",
"integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==",
"dev": true,
"license": "MIT",
@@ -1754,7 +1842,7 @@
},
"node_modules/color-convert": {
"version": "2.0.1",
- "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"license": "MIT",
@@ -1767,21 +1855,21 @@
},
"node_modules/color-name": {
"version": "1.1.4",
- "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"license": "MIT"
},
"node_modules/colorette": {
"version": "2.0.20",
- "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
"dev": true,
"license": "MIT"
},
"node_modules/commander": {
"version": "13.1.0",
- "resolved": "https://registry.npmmirror.com/commander/-/commander-13.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz",
"integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==",
"dev": true,
"license": "MIT",
@@ -1791,21 +1879,14 @@
},
"node_modules/concat-map": {
"version": "0.0.1",
- "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"dev": true,
"license": "MIT"
},
- "node_modules/confbox": {
- "version": "0.1.8",
- "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.1.8.tgz",
- "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/content-disposition": {
"version": "1.0.0",
- "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-1.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz",
"integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==",
"license": "MIT",
"dependencies": {
@@ -1817,7 +1898,7 @@
},
"node_modules/content-type": {
"version": "1.0.5",
- "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
"license": "MIT",
"engines": {
@@ -1826,7 +1907,7 @@
},
"node_modules/cookie": {
"version": "0.7.2",
- "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.7.2.tgz",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
"integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
"license": "MIT",
"engines": {
@@ -1835,7 +1916,7 @@
},
"node_modules/cookie-signature": {
"version": "1.2.2",
- "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.2.2.tgz",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
"integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
"license": "MIT",
"engines": {
@@ -1844,7 +1925,7 @@
},
"node_modules/cors": {
"version": "2.8.5",
- "resolved": "https://registry.npmmirror.com/cors/-/cors-2.8.5.tgz",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
"license": "MIT",
"dependencies": {
@@ -1857,13 +1938,13 @@
},
"node_modules/create-require": {
"version": "1.1.1",
- "resolved": "https://registry.npmmirror.com/create-require/-/create-require-1.1.1.tgz",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
"license": "MIT"
},
"node_modules/cross-fetch": {
"version": "4.1.0",
- "resolved": "https://registry.npmmirror.com/cross-fetch/-/cross-fetch-4.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz",
"integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==",
"license": "MIT",
"dependencies": {
@@ -1872,7 +1953,7 @@
},
"node_modules/cross-spawn": {
"version": "7.0.6",
- "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"license": "MIT",
"dependencies": {
@@ -1884,10 +1965,20 @@
"node": ">= 8"
}
},
+ "node_modules/dateformat": {
+ "version": "4.6.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
+ "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
"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==",
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
+ "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
@@ -1902,28 +1993,25 @@
}
},
"node_modules/deep-eql": {
- "version": "4.1.4",
- "resolved": "https://registry.npmmirror.com/deep-eql/-/deep-eql-4.1.4.tgz",
- "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz",
+ "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "type-detect": "^4.0.0"
- },
"engines": {
"node": ">=6"
}
},
"node_modules/deep-is": {
"version": "0.1.4",
- "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true,
"license": "MIT"
},
"node_modules/depd": {
"version": "2.0.0",
- "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
"license": "MIT",
"engines": {
@@ -1932,26 +2020,16 @@
},
"node_modules/diff": {
"version": "4.0.2",
- "resolved": "https://registry.npmmirror.com/diff/-/diff-4.0.2.tgz",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
}
},
- "node_modules/diff-sequences": {
- "version": "29.6.3",
- "resolved": "https://registry.npmmirror.com/diff-sequences/-/diff-sequences-29.6.3.tgz",
- "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
"node_modules/dunder-proto": {
"version": "1.0.1",
- "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"license": "MIT",
"dependencies": {
@@ -1965,36 +2043,46 @@
},
"node_modules/duplexer": {
"version": "0.1.2",
- "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
"integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
"dev": true,
"license": "MIT"
},
"node_modules/ee-first": {
"version": "1.1.1",
- "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
"license": "MIT"
},
"node_modules/emoji-regex": {
"version": "10.4.0",
- "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-10.4.0.tgz",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz",
"integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
"dev": true,
"license": "MIT"
},
"node_modules/encodeurl": {
"version": "2.0.0",
- "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-2.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
"integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
"node_modules/environment": {
"version": "1.1.0",
- "resolved": "https://registry.npmmirror.com/environment/-/environment-1.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz",
"integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==",
"dev": true,
"license": "MIT",
@@ -2007,7 +2095,7 @@
},
"node_modules/es-define-property": {
"version": "1.0.1",
- "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"license": "MIT",
"engines": {
@@ -2016,16 +2104,23 @@
},
"node_modules/es-errors": {
"version": "1.3.0",
- "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
+ "node_modules/es-module-lexer": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
+ "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/es-object-atoms": {
"version": "1.1.1",
- "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"license": "MIT",
"dependencies": {
@@ -2036,9 +2131,9 @@
}
},
"node_modules/esbuild": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.21.5.tgz",
- "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz",
+ "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -2046,43 +2141,45 @@
"esbuild": "bin/esbuild"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
},
"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/aix-ppc64": "0.25.5",
+ "@esbuild/android-arm": "0.25.5",
+ "@esbuild/android-arm64": "0.25.5",
+ "@esbuild/android-x64": "0.25.5",
+ "@esbuild/darwin-arm64": "0.25.5",
+ "@esbuild/darwin-x64": "0.25.5",
+ "@esbuild/freebsd-arm64": "0.25.5",
+ "@esbuild/freebsd-x64": "0.25.5",
+ "@esbuild/linux-arm": "0.25.5",
+ "@esbuild/linux-arm64": "0.25.5",
+ "@esbuild/linux-ia32": "0.25.5",
+ "@esbuild/linux-loong64": "0.25.5",
+ "@esbuild/linux-mips64el": "0.25.5",
+ "@esbuild/linux-ppc64": "0.25.5",
+ "@esbuild/linux-riscv64": "0.25.5",
+ "@esbuild/linux-s390x": "0.25.5",
+ "@esbuild/linux-x64": "0.25.5",
+ "@esbuild/netbsd-arm64": "0.25.5",
+ "@esbuild/netbsd-x64": "0.25.5",
+ "@esbuild/openbsd-arm64": "0.25.5",
+ "@esbuild/openbsd-x64": "0.25.5",
+ "@esbuild/sunos-x64": "0.25.5",
+ "@esbuild/win32-arm64": "0.25.5",
+ "@esbuild/win32-ia32": "0.25.5",
+ "@esbuild/win32-x64": "0.25.5"
}
},
"node_modules/escape-html": {
"version": "1.0.3",
- "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
"license": "MIT"
},
"node_modules/escape-string-regexp": {
"version": "4.0.0",
- "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true,
"license": "MIT",
@@ -2094,20 +2191,20 @@
}
},
"node_modules/eslint": {
- "version": "9.24.0",
- "resolved": "https://registry.npmmirror.com/eslint/-/eslint-9.24.0.tgz",
- "integrity": "sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==",
+ "version": "9.27.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz",
+ "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.12.1",
"@eslint/config-array": "^0.20.0",
- "@eslint/config-helpers": "^0.2.0",
- "@eslint/core": "^0.12.0",
+ "@eslint/config-helpers": "^0.2.1",
+ "@eslint/core": "^0.14.0",
"@eslint/eslintrc": "^3.3.1",
- "@eslint/js": "9.24.0",
- "@eslint/plugin-kit": "^0.2.7",
+ "@eslint/js": "9.27.0",
+ "@eslint/plugin-kit": "^0.3.1",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.4.2",
@@ -2155,22 +2252,25 @@
}
},
"node_modules/eslint-config-prettier": {
- "version": "10.1.2",
- "resolved": "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-10.1.2.tgz",
- "integrity": "sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA==",
+ "version": "10.1.5",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz",
+ "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==",
"dev": true,
"license": "MIT",
"bin": {
"eslint-config-prettier": "bin/cli.js"
},
+ "funding": {
+ "url": "https://opencollective.com/eslint-config-prettier"
+ },
"peerDependencies": {
"eslint": ">=7.0.0"
}
},
"node_modules/eslint-plugin-prettier": {
- "version": "5.2.6",
- "resolved": "https://registry.npmmirror.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.6.tgz",
- "integrity": "sha512-mUcf7QG2Tjk7H055Jk0lGBjbgDnfrvqjhXh9t2xLMSCjZVcw9Rb1V6sVNXO0th3jgeO7zllWPTNRil3JW94TnQ==",
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.0.tgz",
+ "integrity": "sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2200,7 +2300,7 @@
},
"node_modules/eslint-scope": {
"version": "8.3.0",
- "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-8.3.0.tgz",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
"integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
"dev": true,
"license": "BSD-2-Clause",
@@ -2217,7 +2317,7 @@
},
"node_modules/eslint-visitor-keys": {
"version": "4.2.0",
- "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
"dev": true,
"license": "Apache-2.0",
@@ -2230,7 +2330,7 @@
},
"node_modules/espree": {
"version": "10.3.0",
- "resolved": "https://registry.npmmirror.com/espree/-/espree-10.3.0.tgz",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
"integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
"dev": true,
"license": "BSD-2-Clause",
@@ -2248,7 +2348,7 @@
},
"node_modules/esquery": {
"version": "1.6.0",
- "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.6.0.tgz",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
"integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
"dev": true,
"license": "BSD-3-Clause",
@@ -2261,7 +2361,7 @@
},
"node_modules/esrecurse": {
"version": "4.3.0",
- "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
"license": "BSD-2-Clause",
@@ -2274,7 +2374,7 @@
},
"node_modules/estraverse": {
"version": "5.3.0",
- "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
"license": "BSD-2-Clause",
@@ -2284,7 +2384,7 @@
},
"node_modules/estree-walker": {
"version": "3.0.3",
- "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
"integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
"dev": true,
"license": "MIT",
@@ -2294,7 +2394,7 @@
},
"node_modules/esutils": {
"version": "2.0.3",
- "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true,
"license": "BSD-2-Clause",
@@ -2304,7 +2404,7 @@
},
"node_modules/etag": {
"version": "1.8.1",
- "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
"license": "MIT",
"engines": {
@@ -2313,7 +2413,7 @@
},
"node_modules/event-stream": {
"version": "3.3.4",
- "resolved": "https://registry.npmmirror.com/event-stream/-/event-stream-3.3.4.tgz",
+ "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
"integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==",
"dev": true,
"license": "MIT",
@@ -2329,14 +2429,14 @@
},
"node_modules/eventemitter3": {
"version": "5.0.1",
- "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
"integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
"license": "MIT"
},
"node_modules/eventsource": {
- "version": "3.0.6",
- "resolved": "https://registry.npmmirror.com/eventsource/-/eventsource-3.0.6.tgz",
- "integrity": "sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==",
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz",
+ "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==",
"license": "MIT",
"dependencies": {
"eventsource-parser": "^3.0.1"
@@ -2346,9 +2446,9 @@
}
},
"node_modules/eventsource-parser": {
- "version": "3.0.1",
- "resolved": "https://registry.npmmirror.com/eventsource-parser/-/eventsource-parser-3.0.1.tgz",
- "integrity": "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.2.tgz",
+ "integrity": "sha512-6RxOBZ/cYgd8usLwsEl+EC09Au/9BcmCKYF2/xbml6DNczf7nv0MQb+7BA2F+li6//I+28VNlQR37XfQtcAJuA==",
"license": "MIT",
"engines": {
"node": ">=18.0.0"
@@ -2356,7 +2456,7 @@
},
"node_modules/execa": {
"version": "8.0.1",
- "resolved": "https://registry.npmmirror.com/execa/-/execa-8.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
"integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
"dev": true,
"license": "MIT",
@@ -2378,9 +2478,19 @@
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
+ "node_modules/expect-type": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz",
+ "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/express": {
"version": "5.1.0",
- "resolved": "https://registry.npmmirror.com/express/-/express-5.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz",
"integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==",
"license": "MIT",
"dependencies": {
@@ -2422,7 +2532,7 @@
},
"node_modules/express-rate-limit": {
"version": "7.5.0",
- "resolved": "https://registry.npmmirror.com/express-rate-limit/-/express-rate-limit-7.5.0.tgz",
+ "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz",
"integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==",
"license": "MIT",
"engines": {
@@ -2435,23 +2545,29 @@
"express": "^4.11 || 5 || ^5.0.0-beta.1"
}
},
+ "node_modules/fast-copy": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz",
+ "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
- "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true,
"license": "MIT"
},
"node_modules/fast-diff": {
"version": "1.3.0",
- "resolved": "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.3.0.tgz",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
"integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/fast-glob": {
"version": "3.3.3",
- "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
"integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
"dev": true,
"license": "MIT",
@@ -2468,7 +2584,7 @@
},
"node_modules/fast-glob/node_modules/glob-parent": {
"version": "5.1.2",
- "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"license": "ISC",
@@ -2481,21 +2597,36 @@
},
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
- "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true,
"license": "MIT"
},
"node_modules/fast-levenshtein": {
"version": "2.0.6",
- "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true,
"license": "MIT"
},
+ "node_modules/fast-redact": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz",
+ "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/fast-safe-stringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/fastq": {
"version": "1.19.1",
- "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.19.1.tgz",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
"integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
"dev": true,
"license": "ISC",
@@ -2505,7 +2636,7 @@
},
"node_modules/file-entry-cache": {
"version": "8.0.0",
- "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
"integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
"dev": true,
"license": "MIT",
@@ -2518,7 +2649,7 @@
},
"node_modules/fill-range": {
"version": "7.1.1",
- "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"license": "MIT",
@@ -2531,7 +2662,7 @@
},
"node_modules/finalhandler": {
"version": "2.1.0",
- "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-2.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz",
"integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==",
"license": "MIT",
"dependencies": {
@@ -2548,7 +2679,7 @@
},
"node_modules/find-up": {
"version": "5.0.0",
- "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dev": true,
"license": "MIT",
@@ -2565,7 +2696,7 @@
},
"node_modules/flat-cache": {
"version": "4.0.1",
- "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-4.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
"integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
"dev": true,
"license": "MIT",
@@ -2579,14 +2710,14 @@
},
"node_modules/flatted": {
"version": "3.3.3",
- "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.3.3.tgz",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
"integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
"dev": true,
"license": "ISC"
},
"node_modules/forwarded": {
"version": "0.2.0",
- "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
"license": "MIT",
"engines": {
@@ -2595,7 +2726,7 @@
},
"node_modules/fresh": {
"version": "2.0.0",
- "resolved": "https://registry.npmmirror.com/fresh/-/fresh-2.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",
"integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",
"license": "MIT",
"engines": {
@@ -2604,14 +2735,14 @@
},
"node_modules/from": {
"version": "0.1.7",
- "resolved": "https://registry.npmmirror.com/from/-/from-0.1.7.tgz",
+ "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
"integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==",
"dev": true,
"license": "MIT"
},
"node_modules/fsevents": {
"version": "2.3.3",
- "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"hasInstallScript": true,
@@ -2626,7 +2757,7 @@
},
"node_modules/function-bind": {
"version": "1.1.2",
- "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"license": "MIT",
"funding": {
@@ -2635,7 +2766,7 @@
},
"node_modules/get-east-asian-width": {
"version": "1.3.0",
- "resolved": "https://registry.npmmirror.com/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz",
"integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==",
"dev": true,
"license": "MIT",
@@ -2646,20 +2777,10 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/get-func-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmmirror.com/get-func-name/-/get-func-name-2.0.2.tgz",
- "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.3.0",
- "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
@@ -2682,7 +2803,7 @@
},
"node_modules/get-proto": {
"version": "1.0.1",
- "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"license": "MIT",
"dependencies": {
@@ -2695,7 +2816,7 @@
},
"node_modules/get-stream": {
"version": "8.0.1",
- "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-8.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
"integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
"dev": true,
"license": "MIT",
@@ -2708,7 +2829,7 @@
},
"node_modules/glob-parent": {
"version": "6.0.2",
- "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
"license": "ISC",
@@ -2720,9 +2841,9 @@
}
},
"node_modules/globals": {
- "version": "16.0.0",
- "resolved": "https://registry.npmmirror.com/globals/-/globals-16.0.0.tgz",
- "integrity": "sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==",
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-16.2.0.tgz",
+ "integrity": "sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2734,7 +2855,7 @@
},
"node_modules/gopd": {
"version": "1.2.0",
- "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"license": "MIT",
"engines": {
@@ -2746,14 +2867,14 @@
},
"node_modules/graphemer": {
"version": "1.4.0",
- "resolved": "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
"dev": true,
"license": "MIT"
},
"node_modules/has-flag": {
"version": "4.0.0",
- "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"license": "MIT",
@@ -2763,7 +2884,7 @@
},
"node_modules/has-symbols": {
"version": "1.1.0",
- "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
"license": "MIT",
"engines": {
@@ -2775,7 +2896,7 @@
},
"node_modules/hasown": {
"version": "2.0.2",
- "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"license": "MIT",
"dependencies": {
@@ -2785,9 +2906,16 @@
"node": ">= 0.4"
}
},
+ "node_modules/help-me": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz",
+ "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/http-errors": {
"version": "2.0.0",
- "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"license": "MIT",
"dependencies": {
@@ -2803,7 +2931,7 @@
},
"node_modules/human-signals": {
"version": "5.0.0",
- "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-5.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
"integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
"dev": true,
"license": "Apache-2.0",
@@ -2813,7 +2941,7 @@
},
"node_modules/husky": {
"version": "9.1.7",
- "resolved": "https://registry.npmmirror.com/husky/-/husky-9.1.7.tgz",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz",
"integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==",
"dev": true,
"license": "MIT",
@@ -2829,7 +2957,7 @@
},
"node_modules/iconv-lite": {
"version": "0.6.3",
- "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"license": "MIT",
"dependencies": {
@@ -2841,7 +2969,7 @@
},
"node_modules/ignore": {
"version": "5.3.2",
- "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
"integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
"dev": true,
"license": "MIT",
@@ -2851,7 +2979,7 @@
},
"node_modules/import-fresh": {
"version": "3.3.1",
- "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.1.tgz",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
"integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
"dev": true,
"license": "MIT",
@@ -2868,7 +2996,7 @@
},
"node_modules/imurmurhash": {
"version": "0.1.4",
- "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
"dev": true,
"license": "MIT",
@@ -2878,13 +3006,13 @@
},
"node_modules/inherits": {
"version": "2.0.4",
- "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"license": "ISC"
},
"node_modules/ipaddr.js": {
"version": "1.9.1",
- "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
"license": "MIT",
"engines": {
@@ -2893,7 +3021,7 @@
},
"node_modules/is-extglob": {
"version": "2.1.1",
- "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
"license": "MIT",
@@ -2903,7 +3031,7 @@
},
"node_modules/is-fullwidth-code-point": {
"version": "4.0.0",
- "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
"integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
"dev": true,
"license": "MIT",
@@ -2916,7 +3044,7 @@
},
"node_modules/is-glob": {
"version": "4.0.3",
- "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"license": "MIT",
@@ -2929,7 +3057,7 @@
},
"node_modules/is-number": {
"version": "7.0.0",
- "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
"license": "MIT",
@@ -2939,13 +3067,13 @@
},
"node_modules/is-promise": {
"version": "4.0.0",
- "resolved": "https://registry.npmmirror.com/is-promise/-/is-promise-4.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
"integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
"license": "MIT"
},
"node_modules/is-stream": {
"version": "3.0.0",
- "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-3.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
"integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
"dev": true,
"license": "MIT",
@@ -2958,20 +3086,23 @@
},
"node_modules/isexe": {
"version": "2.0.0",
- "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"license": "ISC"
},
- "node_modules/js-tokens": {
- "version": "9.0.1",
- "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-9.0.1.tgz",
- "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
+ "node_modules/joycon": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
+ "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
},
"node_modules/js-yaml": {
"version": "4.1.0",
- "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
"license": "MIT",
@@ -2984,28 +3115,27 @@
},
"node_modules/json-buffer": {
"version": "3.0.1",
- "resolved": "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
"dev": true,
"license": "MIT"
},
"node_modules/json-schema-traverse": {
"version": "0.4.1",
- "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true,
"license": "MIT"
},
"node_modules/json-stable-stringify-without-jsonify": {
"version": "1.0.1",
- "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
"dev": true,
"license": "MIT"
},
"node_modules/keyv": {
"version": "4.5.4",
- "resolved": "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
"integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
"dev": true,
"license": "MIT",
@@ -3015,7 +3145,7 @@
},
"node_modules/leetcode-query": {
"version": "2.0.0",
- "resolved": "https://registry.npmmirror.com/leetcode-query/-/leetcode-query-2.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/leetcode-query/-/leetcode-query-2.0.0.tgz",
"integrity": "sha512-kIX2YZq/XTRx53VObr4D39u9nSEnBUl3aCoYQEzTusuo97Oo3EfjryvyN6esqwqtfYa2AeSy/glsKVVxyTAcXw==",
"license": "MIT",
"dependencies": {
@@ -3027,7 +3157,7 @@
},
"node_modules/levn": {
"version": "0.4.1",
- "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
"dev": true,
"license": "MIT",
@@ -3041,7 +3171,7 @@
},
"node_modules/lilconfig": {
"version": "3.1.3",
- "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-3.1.3.tgz",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
"integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
"dev": true,
"license": "MIT",
@@ -3053,9 +3183,9 @@
}
},
"node_modules/lint-staged": {
- "version": "15.5.1",
- "resolved": "https://registry.npmmirror.com/lint-staged/-/lint-staged-15.5.1.tgz",
- "integrity": "sha512-6m7u8mue4Xn6wK6gZvSCQwBvMBR36xfY24nF5bMTf2MHDYG6S3yhJuOgdYVw99hsjyDt2d4z168b3naI8+NWtQ==",
+ "version": "15.5.2",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.5.2.tgz",
+ "integrity": "sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3082,7 +3212,7 @@
},
"node_modules/lint-staged/node_modules/chalk": {
"version": "5.4.1",
- "resolved": "https://registry.npmmirror.com/chalk/-/chalk-5.4.1.tgz",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz",
"integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==",
"dev": true,
"license": "MIT",
@@ -3094,9 +3224,9 @@
}
},
"node_modules/listr2": {
- "version": "8.3.2",
- "resolved": "https://registry.npmmirror.com/listr2/-/listr2-8.3.2.tgz",
- "integrity": "sha512-vsBzcU4oE+v0lj4FhVLzr9dBTv4/fHIa57l+GCwovP8MoFNZJTOhGU8PXd4v2VJCbECAaijBiHntiekFMLvo0g==",
+ "version": "8.3.3",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz",
+ "integrity": "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3111,26 +3241,9 @@
"node": ">=18.0.0"
}
},
- "node_modules/local-pkg": {
- "version": "0.5.1",
- "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.1.tgz",
- "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mlly": "^1.7.3",
- "pkg-types": "^1.2.1"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
"node_modules/locate-path": {
"version": "6.0.0",
- "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true,
"license": "MIT",
@@ -3146,14 +3259,14 @@
},
"node_modules/lodash.merge": {
"version": "4.6.2",
- "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true,
"license": "MIT"
},
"node_modules/log-update": {
"version": "6.1.0",
- "resolved": "https://registry.npmmirror.com/log-update/-/log-update-6.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz",
"integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==",
"dev": true,
"license": "MIT",
@@ -3173,7 +3286,7 @@
},
"node_modules/log-update/node_modules/ansi-styles": {
"version": "6.2.1",
- "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
"dev": true,
"license": "MIT",
@@ -3186,7 +3299,7 @@
},
"node_modules/log-update/node_modules/is-fullwidth-code-point": {
"version": "5.0.0",
- "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz",
"integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==",
"dev": true,
"license": "MIT",
@@ -3202,7 +3315,7 @@
},
"node_modules/log-update/node_modules/slice-ansi": {
"version": "7.1.0",
- "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-7.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz",
"integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==",
"dev": true,
"license": "MIT",
@@ -3218,18 +3331,15 @@
}
},
"node_modules/loupe": {
- "version": "2.3.7",
- "resolved": "https://registry.npmmirror.com/loupe/-/loupe-2.3.7.tgz",
- "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz",
+ "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "get-func-name": "^2.0.1"
- }
+ "license": "MIT"
},
"node_modules/magic-string": {
"version": "0.30.17",
- "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
"integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
"dev": true,
"license": "MIT",
@@ -3239,19 +3349,19 @@
},
"node_modules/make-error": {
"version": "1.3.6",
- "resolved": "https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
"license": "ISC"
},
"node_modules/map-stream": {
"version": "0.1.0",
- "resolved": "https://registry.npmmirror.com/map-stream/-/map-stream-0.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
"integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==",
"dev": true
},
"node_modules/math-intrinsics": {
"version": "1.1.0",
- "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
"license": "MIT",
"engines": {
@@ -3260,7 +3370,7 @@
},
"node_modules/media-typer": {
"version": "1.1.0",
- "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-1.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz",
"integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==",
"license": "MIT",
"engines": {
@@ -3269,7 +3379,7 @@
},
"node_modules/merge-descriptors": {
"version": "2.0.0",
- "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-2.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz",
"integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==",
"license": "MIT",
"engines": {
@@ -3281,14 +3391,14 @@
},
"node_modules/merge-stream": {
"version": "2.0.0",
- "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true,
"license": "MIT"
},
"node_modules/merge2": {
"version": "1.4.1",
- "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"dev": true,
"license": "MIT",
@@ -3298,7 +3408,7 @@
},
"node_modules/micromatch": {
"version": "4.0.8",
- "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
"dev": true,
"license": "MIT",
@@ -3312,7 +3422,7 @@
},
"node_modules/mime-db": {
"version": "1.54.0",
- "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.54.0.tgz",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
"integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
"license": "MIT",
"engines": {
@@ -3321,7 +3431,7 @@
},
"node_modules/mime-types": {
"version": "3.0.1",
- "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-3.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz",
"integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==",
"license": "MIT",
"dependencies": {
@@ -3333,7 +3443,7 @@
},
"node_modules/mimic-fn": {
"version": "4.0.0",
- "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
"integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
"dev": true,
"license": "MIT",
@@ -3346,7 +3456,7 @@
},
"node_modules/mimic-function": {
"version": "5.0.1",
- "resolved": "https://registry.npmmirror.com/mimic-function/-/mimic-function-5.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
"integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
"dev": true,
"license": "MIT",
@@ -3359,7 +3469,7 @@
},
"node_modules/minimatch": {
"version": "3.1.2",
- "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"license": "ISC",
@@ -3372,42 +3482,22 @@
},
"node_modules/minimist": {
"version": "1.2.8",
- "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/mlly": {
- "version": "1.7.4",
- "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.7.4.tgz",
- "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "acorn": "^8.14.0",
- "pathe": "^2.0.1",
- "pkg-types": "^1.3.0",
- "ufo": "^1.5.4"
- }
- },
- "node_modules/mlly/node_modules/pathe": {
- "version": "2.0.3",
- "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz",
- "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/ms": {
"version": "2.1.3",
- "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"license": "MIT"
},
"node_modules/nanoid": {
"version": "3.3.11",
- "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
"dev": true,
"funding": [
@@ -3426,14 +3516,14 @@
},
"node_modules/natural-compare": {
"version": "1.4.0",
- "resolved": "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true,
"license": "MIT"
},
"node_modules/negotiator": {
"version": "1.0.0",
- "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-1.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
"integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
"license": "MIT",
"engines": {
@@ -3442,14 +3532,14 @@
},
"node_modules/node-cleanup": {
"version": "2.1.2",
- "resolved": "https://registry.npmmirror.com/node-cleanup/-/node-cleanup-2.1.2.tgz",
+ "resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz",
"integrity": "sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==",
"dev": true,
"license": "MIT"
},
"node_modules/node-fetch": {
"version": "2.7.0",
- "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
"license": "MIT",
"dependencies": {
@@ -3469,7 +3559,7 @@
},
"node_modules/npm-run-path": {
"version": "5.3.0",
- "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
"integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
"dev": true,
"license": "MIT",
@@ -3485,7 +3575,7 @@
},
"node_modules/npm-run-path/node_modules/path-key": {
"version": "4.0.0",
- "resolved": "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
"integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
"dev": true,
"license": "MIT",
@@ -3498,7 +3588,7 @@
},
"node_modules/object-assign": {
"version": "4.1.1",
- "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
"license": "MIT",
"engines": {
@@ -3507,7 +3597,7 @@
},
"node_modules/object-inspect": {
"version": "1.13.4",
- "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.4.tgz",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
"integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
"license": "MIT",
"engines": {
@@ -3517,9 +3607,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/on-exit-leak-free": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
+ "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/on-finished": {
"version": "2.4.1",
- "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
"license": "MIT",
"dependencies": {
@@ -3531,7 +3630,7 @@
},
"node_modules/once": {
"version": "1.4.0",
- "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"license": "ISC",
"dependencies": {
@@ -3540,7 +3639,7 @@
},
"node_modules/onetime": {
"version": "6.0.0",
- "resolved": "https://registry.npmmirror.com/onetime/-/onetime-6.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
"integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
"dev": true,
"license": "MIT",
@@ -3556,7 +3655,7 @@
},
"node_modules/optionator": {
"version": "0.9.4",
- "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
"integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
"dev": true,
"license": "MIT",
@@ -3573,16 +3672,16 @@
}
},
"node_modules/p-limit": {
- "version": "5.0.0",
- "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-5.0.0.tgz",
- "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "yocto-queue": "^1.0.0"
+ "yocto-queue": "^0.1.0"
},
"engines": {
- "node": ">=18"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -3590,7 +3689,7 @@
},
"node_modules/p-locate": {
"version": "5.0.0",
- "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
"license": "MIT",
@@ -3604,38 +3703,9 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/p-locate/node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate/node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/parent-module": {
"version": "1.0.1",
- "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true,
"license": "MIT",
@@ -3648,7 +3718,7 @@
},
"node_modules/parseurl": {
"version": "1.3.3",
- "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
"license": "MIT",
"engines": {
@@ -3657,7 +3727,7 @@
},
"node_modules/path-exists": {
"version": "4.0.0",
- "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true,
"license": "MIT",
@@ -3667,7 +3737,7 @@
},
"node_modules/path-key": {
"version": "3.1.1",
- "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"license": "MIT",
"engines": {
@@ -3676,7 +3746,7 @@
},
"node_modules/path-to-regexp": {
"version": "8.2.0",
- "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-8.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz",
"integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==",
"license": "MIT",
"engines": {
@@ -3684,25 +3754,25 @@
}
},
"node_modules/pathe": {
- "version": "1.1.2",
- "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz",
- "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
"dev": true,
"license": "MIT"
},
"node_modules/pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmmirror.com/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz",
+ "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "*"
+ "node": ">= 14.16"
}
},
"node_modules/pause-stream": {
"version": "0.0.11",
- "resolved": "https://registry.npmmirror.com/pause-stream/-/pause-stream-0.0.11.tgz",
+ "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
"integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==",
"dev": true,
"license": [
@@ -3715,14 +3785,14 @@
},
"node_modules/picocolors": {
"version": "1.1.1",
- "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
"dev": true,
"license": "ISC"
},
"node_modules/picomatch": {
"version": "2.3.1",
- "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
"license": "MIT",
@@ -3735,7 +3805,7 @@
},
"node_modules/pidtree": {
"version": "0.6.0",
- "resolved": "https://registry.npmmirror.com/pidtree/-/pidtree-0.6.0.tgz",
+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
"integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
"dev": true,
"license": "MIT",
@@ -3746,37 +3816,80 @@
"node": ">=0.10"
}
},
- "node_modules/pkce-challenge": {
- "version": "4.1.0",
- "resolved": "https://registry.npmmirror.com/pkce-challenge/-/pkce-challenge-4.1.0.tgz",
- "integrity": "sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ==",
+ "node_modules/pino": {
+ "version": "9.7.0",
+ "resolved": "https://registry.npmjs.org/pino/-/pino-9.7.0.tgz",
+ "integrity": "sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg==",
"license": "MIT",
- "engines": {
- "node": ">=16.20.0"
+ "dependencies": {
+ "atomic-sleep": "^1.0.0",
+ "fast-redact": "^3.1.1",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^2.0.0",
+ "pino-std-serializers": "^7.0.0",
+ "process-warning": "^5.0.0",
+ "quick-format-unescaped": "^4.0.3",
+ "real-require": "^0.2.0",
+ "safe-stable-stringify": "^2.3.1",
+ "sonic-boom": "^4.0.1",
+ "thread-stream": "^3.0.0"
+ },
+ "bin": {
+ "pino": "bin.js"
}
},
- "node_modules/pkg-types": {
- "version": "1.3.1",
- "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.3.1.tgz",
- "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==",
- "dev": true,
+ "node_modules/pino-abstract-transport": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz",
+ "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==",
"license": "MIT",
"dependencies": {
- "confbox": "^0.1.8",
- "mlly": "^1.7.4",
- "pathe": "^2.0.1"
+ "split2": "^4.0.0"
}
},
- "node_modules/pkg-types/node_modules/pathe": {
- "version": "2.0.3",
- "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz",
- "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+ "node_modules/pino-pretty": {
+ "version": "13.0.0",
+ "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.0.0.tgz",
+ "integrity": "sha512-cQBBIVG3YajgoUjo1FdKVRX6t9XPxwB9lcNJVD5GCnNM4Y6T12YYx8c6zEejxQsU0wrg9TwmDulcE9LR7qcJqA==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "colorette": "^2.0.7",
+ "dateformat": "^4.6.3",
+ "fast-copy": "^3.0.2",
+ "fast-safe-stringify": "^2.1.1",
+ "help-me": "^5.0.0",
+ "joycon": "^3.1.1",
+ "minimist": "^1.2.6",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^2.0.0",
+ "pump": "^3.0.0",
+ "secure-json-parse": "^2.4.0",
+ "sonic-boom": "^4.0.1",
+ "strip-json-comments": "^3.1.1"
+ },
+ "bin": {
+ "pino-pretty": "bin.js"
+ }
+ },
+ "node_modules/pino-std-serializers": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz",
+ "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==",
"license": "MIT"
},
+ "node_modules/pkce-challenge": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz",
+ "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
"node_modules/postcss": {
"version": "8.5.3",
- "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.3.tgz",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
"integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
"dev": true,
"funding": [
@@ -3805,7 +3918,7 @@
},
"node_modules/prelude-ls": {
"version": "1.2.1",
- "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
"dev": true,
"license": "MIT",
@@ -3815,7 +3928,7 @@
},
"node_modules/prettier": {
"version": "3.5.3",
- "resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.5.3.tgz",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
"integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
"dev": true,
"license": "MIT",
@@ -3831,7 +3944,7 @@
},
"node_modules/prettier-linter-helpers": {
"version": "1.0.0",
- "resolved": "https://registry.npmmirror.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
"integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
"dev": true,
"license": "MIT",
@@ -3844,7 +3957,7 @@
},
"node_modules/prettier-plugin-organize-imports": {
"version": "4.1.0",
- "resolved": "https://registry.npmmirror.com/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz",
"integrity": "sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==",
"dev": true,
"license": "MIT",
@@ -3859,24 +3972,25 @@
}
}
},
- "node_modules/pretty-format": {
- "version": "29.7.0",
- "resolved": "https://registry.npmmirror.com/pretty-format/-/pretty-format-29.7.0.tgz",
- "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/schemas": "^29.6.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
+ "node_modules/process-warning": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz",
+ "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "MIT"
},
"node_modules/proxy-addr": {
"version": "2.0.7",
- "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"license": "MIT",
"dependencies": {
@@ -3889,7 +4003,7 @@
},
"node_modules/ps-tree": {
"version": "1.2.0",
- "resolved": "https://registry.npmmirror.com/ps-tree/-/ps-tree-1.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz",
"integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==",
"dev": true,
"license": "MIT",
@@ -3903,11 +4017,21 @@
"node": ">= 0.10"
}
},
+ "node_modules/pump": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
+ "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
+ "dev": true,
+ "license": "MIT",
+ "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",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
@@ -3915,7 +4039,7 @@
},
"node_modules/qs": {
"version": "6.14.0",
- "resolved": "https://registry.npmmirror.com/qs/-/qs-6.14.0.tgz",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
"integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
"license": "BSD-3-Clause",
"dependencies": {
@@ -3930,7 +4054,7 @@
},
"node_modules/queue-microtask": {
"version": "1.2.3",
- "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true,
"funding": [
@@ -3949,9 +4073,15 @@
],
"license": "MIT"
},
+ "node_modules/quick-format-unescaped": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
+ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==",
+ "license": "MIT"
+ },
"node_modules/range-parser": {
"version": "1.2.1",
- "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
"license": "MIT",
"engines": {
@@ -3960,7 +4090,7 @@
},
"node_modules/raw-body": {
"version": "3.0.0",
- "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-3.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz",
"integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==",
"license": "MIT",
"dependencies": {
@@ -3973,16 +4103,18 @@
"node": ">= 0.8"
}
},
- "node_modules/react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmmirror.com/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
- "dev": true,
- "license": "MIT"
+ "node_modules/real-require": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
+ "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12.13.0"
+ }
},
"node_modules/resolve-from": {
"version": "4.0.0",
- "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true,
"license": "MIT",
@@ -3992,7 +4124,7 @@
},
"node_modules/restore-cursor": {
"version": "5.1.0",
- "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-5.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz",
"integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==",
"dev": true,
"license": "MIT",
@@ -4009,7 +4141,7 @@
},
"node_modules/restore-cursor/node_modules/onetime": {
"version": "7.0.0",
- "resolved": "https://registry.npmmirror.com/onetime/-/onetime-7.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
"integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
"dev": true,
"license": "MIT",
@@ -4025,7 +4157,7 @@
},
"node_modules/reusify": {
"version": "1.1.0",
- "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
"integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
"dev": true,
"license": "MIT",
@@ -4036,15 +4168,15 @@
},
"node_modules/rfdc": {
"version": "1.4.1",
- "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
"integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
"dev": true,
"license": "MIT"
},
"node_modules/rollup": {
- "version": "4.39.0",
- "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.39.0.tgz",
- "integrity": "sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz",
+ "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4058,32 +4190,32 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.39.0",
- "@rollup/rollup-android-arm64": "4.39.0",
- "@rollup/rollup-darwin-arm64": "4.39.0",
- "@rollup/rollup-darwin-x64": "4.39.0",
- "@rollup/rollup-freebsd-arm64": "4.39.0",
- "@rollup/rollup-freebsd-x64": "4.39.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.39.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.39.0",
- "@rollup/rollup-linux-arm64-gnu": "4.39.0",
- "@rollup/rollup-linux-arm64-musl": "4.39.0",
- "@rollup/rollup-linux-loongarch64-gnu": "4.39.0",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.39.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.39.0",
- "@rollup/rollup-linux-riscv64-musl": "4.39.0",
- "@rollup/rollup-linux-s390x-gnu": "4.39.0",
- "@rollup/rollup-linux-x64-gnu": "4.39.0",
- "@rollup/rollup-linux-x64-musl": "4.39.0",
- "@rollup/rollup-win32-arm64-msvc": "4.39.0",
- "@rollup/rollup-win32-ia32-msvc": "4.39.0",
- "@rollup/rollup-win32-x64-msvc": "4.39.0",
+ "@rollup/rollup-android-arm-eabi": "4.41.1",
+ "@rollup/rollup-android-arm64": "4.41.1",
+ "@rollup/rollup-darwin-arm64": "4.41.1",
+ "@rollup/rollup-darwin-x64": "4.41.1",
+ "@rollup/rollup-freebsd-arm64": "4.41.1",
+ "@rollup/rollup-freebsd-x64": "4.41.1",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.41.1",
+ "@rollup/rollup-linux-arm-musleabihf": "4.41.1",
+ "@rollup/rollup-linux-arm64-gnu": "4.41.1",
+ "@rollup/rollup-linux-arm64-musl": "4.41.1",
+ "@rollup/rollup-linux-loongarch64-gnu": "4.41.1",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1",
+ "@rollup/rollup-linux-riscv64-gnu": "4.41.1",
+ "@rollup/rollup-linux-riscv64-musl": "4.41.1",
+ "@rollup/rollup-linux-s390x-gnu": "4.41.1",
+ "@rollup/rollup-linux-x64-gnu": "4.41.1",
+ "@rollup/rollup-linux-x64-musl": "4.41.1",
+ "@rollup/rollup-win32-arm64-msvc": "4.41.1",
+ "@rollup/rollup-win32-ia32-msvc": "4.41.1",
+ "@rollup/rollup-win32-x64-msvc": "4.41.1",
"fsevents": "~2.3.2"
}
},
"node_modules/router": {
"version": "2.2.0",
- "resolved": "https://registry.npmmirror.com/router/-/router-2.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
"integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==",
"license": "MIT",
"dependencies": {
@@ -4099,7 +4231,7 @@
},
"node_modules/run-parallel": {
"version": "1.2.0",
- "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
"dev": true,
"funding": [
@@ -4123,7 +4255,7 @@
},
"node_modules/safe-buffer": {
"version": "5.2.1",
- "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"funding": [
{
@@ -4141,16 +4273,32 @@
],
"license": "MIT"
},
+ "node_modules/safe-stable-stringify": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
+ "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/safer-buffer": {
"version": "2.1.2",
- "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"license": "MIT"
},
+ "node_modules/secure-json-parse": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz",
+ "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
"node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -4162,7 +4310,7 @@
},
"node_modules/send": {
"version": "1.2.0",
- "resolved": "https://registry.npmmirror.com/send/-/send-1.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz",
"integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==",
"license": "MIT",
"dependencies": {
@@ -4184,7 +4332,7 @@
},
"node_modules/serve-static": {
"version": "2.2.0",
- "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-2.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz",
"integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==",
"license": "MIT",
"dependencies": {
@@ -4199,13 +4347,13 @@
},
"node_modules/setprototypeof": {
"version": "1.2.0",
- "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
"license": "ISC"
},
"node_modules/shebang-command": {
"version": "2.0.0",
- "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"license": "MIT",
"dependencies": {
@@ -4217,7 +4365,7 @@
},
"node_modules/shebang-regex": {
"version": "3.0.0",
- "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"license": "MIT",
"engines": {
@@ -4226,7 +4374,7 @@
},
"node_modules/side-channel": {
"version": "1.1.0",
- "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
"integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
"license": "MIT",
"dependencies": {
@@ -4245,7 +4393,7 @@
},
"node_modules/side-channel-list": {
"version": "1.0.0",
- "resolved": "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
"integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
"license": "MIT",
"dependencies": {
@@ -4261,7 +4409,7 @@
},
"node_modules/side-channel-map": {
"version": "1.0.1",
- "resolved": "https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
"integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
"license": "MIT",
"dependencies": {
@@ -4279,7 +4427,7 @@
},
"node_modules/side-channel-weakmap": {
"version": "1.0.2",
- "resolved": "https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
"integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
"license": "MIT",
"dependencies": {
@@ -4298,14 +4446,14 @@
},
"node_modules/siginfo": {
"version": "2.0.0",
- "resolved": "https://registry.npmmirror.com/siginfo/-/siginfo-2.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
"integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
"dev": true,
"license": "ISC"
},
"node_modules/signal-exit": {
"version": "4.1.0",
- "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true,
"license": "ISC",
@@ -4318,7 +4466,7 @@
},
"node_modules/slice-ansi": {
"version": "5.0.0",
- "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-5.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
"integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
"dev": true,
"license": "MIT",
@@ -4335,7 +4483,7 @@
},
"node_modules/slice-ansi/node_modules/ansi-styles": {
"version": "6.2.1",
- "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
"dev": true,
"license": "MIT",
@@ -4346,9 +4494,18 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/sonic-boom": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz",
+ "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==",
+ "license": "MIT",
+ "dependencies": {
+ "atomic-sleep": "^1.0.0"
+ }
+ },
"node_modules/source-map-js": {
"version": "1.2.1",
- "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"dev": true,
"license": "BSD-3-Clause",
@@ -4358,7 +4515,7 @@
},
"node_modules/split": {
"version": "0.3.3",
- "resolved": "https://registry.npmmirror.com/split/-/split-0.3.3.tgz",
+ "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
"integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==",
"dev": true,
"license": "MIT",
@@ -4369,16 +4526,25 @@
"node": "*"
}
},
+ "node_modules/split2": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">= 10.x"
+ }
+ },
"node_modules/stackback": {
"version": "0.0.2",
- "resolved": "https://registry.npmmirror.com/stackback/-/stackback-0.0.2.tgz",
+ "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
"integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
"dev": true,
"license": "MIT"
},
"node_modules/statuses": {
"version": "2.0.1",
- "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
"license": "MIT",
"engines": {
@@ -4387,14 +4553,14 @@
},
"node_modules/std-env": {
"version": "3.9.0",
- "resolved": "https://registry.npmmirror.com/std-env/-/std-env-3.9.0.tgz",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz",
"integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==",
"dev": true,
"license": "MIT"
},
"node_modules/stream-combiner": {
"version": "0.0.4",
- "resolved": "https://registry.npmmirror.com/stream-combiner/-/stream-combiner-0.0.4.tgz",
+ "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
"integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==",
"dev": true,
"license": "MIT",
@@ -4404,7 +4570,7 @@
},
"node_modules/string-argv": {
"version": "0.3.2",
- "resolved": "https://registry.npmmirror.com/string-argv/-/string-argv-0.3.2.tgz",
+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
"integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==",
"dev": true,
"license": "MIT",
@@ -4414,7 +4580,7 @@
},
"node_modules/string-width": {
"version": "7.2.0",
- "resolved": "https://registry.npmmirror.com/string-width/-/string-width-7.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
"integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
"dev": true,
"license": "MIT",
@@ -4432,7 +4598,7 @@
},
"node_modules/strip-ansi": {
"version": "7.1.0",
- "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
"dev": true,
"license": "MIT",
@@ -4448,7 +4614,7 @@
},
"node_modules/strip-final-newline": {
"version": "3.0.0",
- "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
"integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
"dev": true,
"license": "MIT",
@@ -4461,7 +4627,7 @@
},
"node_modules/strip-json-comments": {
"version": "3.1.1",
- "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
"license": "MIT",
@@ -4472,22 +4638,9 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/strip-literal": {
- "version": "2.1.1",
- "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-2.1.1.tgz",
- "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "js-tokens": "^9.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
"node_modules/supports-color": {
"version": "7.2.0",
- "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"license": "MIT",
@@ -4499,14 +4652,13 @@
}
},
"node_modules/synckit": {
- "version": "0.11.3",
- "resolved": "https://registry.npmmirror.com/synckit/-/synckit-0.11.3.tgz",
- "integrity": "sha512-szhWDqNNI9etJUvbZ1/cx1StnZx8yMmFxme48SwR4dty4ioSY50KEZlpv0qAfgc1fpRzuh9hBXEzoCpJ779dLg==",
+ "version": "0.11.6",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.6.tgz",
+ "integrity": "sha512-2pR2ubZSV64f/vqm9eLPz/KOvR9Dm+Co/5ChLgeHl0yEDRc6h5hXHoxEQH8Y5Ljycozd3p1k5TTSVdzYGkPvLw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@pkgr/core": "^0.2.1",
- "tslib": "^2.8.1"
+ "@pkgr/core": "^0.2.4"
},
"engines": {
"node": "^14.18.0 || >=16.0.0"
@@ -4515,24 +4667,95 @@
"url": "https://opencollective.com/synckit"
}
},
+ "node_modules/thread-stream": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz",
+ "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==",
+ "license": "MIT",
+ "dependencies": {
+ "real-require": "^0.2.0"
+ }
+ },
"node_modules/through": {
"version": "2.3.8",
- "resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
"dev": true,
"license": "MIT"
},
"node_modules/tinybench": {
"version": "2.9.0",
- "resolved": "https://registry.npmmirror.com/tinybench/-/tinybench-2.9.0.tgz",
+ "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
"integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
"dev": true,
"license": "MIT"
},
+ "node_modules/tinyexec": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
+ "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
+ "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.4.4",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.4.5",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz",
+ "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/tinypool": {
- "version": "0.8.4",
- "resolved": "https://registry.npmmirror.com/tinypool/-/tinypool-0.8.4.tgz",
- "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz",
+ "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ }
+ },
+ "node_modules/tinyrainbow": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz",
+ "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4540,9 +4763,9 @@
}
},
"node_modules/tinyspy": {
- "version": "2.2.1",
- "resolved": "https://registry.npmmirror.com/tinyspy/-/tinyspy-2.2.1.tgz",
- "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz",
+ "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4551,7 +4774,7 @@
},
"node_modules/to-regex-range": {
"version": "5.0.1",
- "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"license": "MIT",
@@ -4564,7 +4787,7 @@
},
"node_modules/toidentifier": {
"version": "1.0.1",
- "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
"license": "MIT",
"engines": {
@@ -4573,13 +4796,13 @@
},
"node_modules/tr46": {
"version": "0.0.3",
- "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
"license": "MIT"
},
"node_modules/ts-api-utils": {
"version": "2.1.0",
- "resolved": "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
"integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
"dev": true,
"license": "MIT",
@@ -4592,7 +4815,7 @@
},
"node_modules/ts-node": {
"version": "10.9.2",
- "resolved": "https://registry.npmmirror.com/ts-node/-/ts-node-10.9.2.tgz",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
"integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
"license": "MIT",
"dependencies": {
@@ -4635,7 +4858,7 @@
},
"node_modules/tsc-watch": {
"version": "6.2.1",
- "resolved": "https://registry.npmmirror.com/tsc-watch/-/tsc-watch-6.2.1.tgz",
+ "resolved": "https://registry.npmjs.org/tsc-watch/-/tsc-watch-6.2.1.tgz",
"integrity": "sha512-GLwdz5Dy9K3sVm3RzgkLcyDpl5cvU9HEcE1A3gf5rqEwlUe7gDLxNCgcuNEw3zoKOiegMo3LnbF1t6HLqxhrSA==",
"dev": true,
"license": "MIT",
@@ -4655,16 +4878,9 @@
"typescript": "*"
}
},
- "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==",
- "dev": true,
- "license": "0BSD"
- },
"node_modules/type-check": {
"version": "0.4.0",
- "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
"dev": true,
"license": "MIT",
@@ -4675,19 +4891,9 @@
"node": ">= 0.8.0"
}
},
- "node_modules/type-detect": {
- "version": "4.1.0",
- "resolved": "https://registry.npmmirror.com/type-detect/-/type-detect-4.1.0.tgz",
- "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/type-is": {
"version": "2.0.1",
- "resolved": "https://registry.npmmirror.com/type-is/-/type-is-2.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz",
"integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==",
"license": "MIT",
"dependencies": {
@@ -4701,7 +4907,7 @@
},
"node_modules/typescript": {
"version": "5.8.3",
- "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.8.3.tgz",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
"license": "Apache-2.0",
"bin": {
@@ -4713,15 +4919,15 @@
}
},
"node_modules/typescript-eslint": {
- "version": "8.29.1",
- "resolved": "https://registry.npmmirror.com/typescript-eslint/-/typescript-eslint-8.29.1.tgz",
- "integrity": "sha512-f8cDkvndhbQMPcysk6CUSGBWV+g1utqdn71P5YKwMumVMOG/5k7cHq0KyG4O52nB0oKS4aN2Tp5+wB4APJGC+w==",
+ "version": "8.33.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.33.0.tgz",
+ "integrity": "sha512-5YmNhF24ylCsvdNW2oJwMzTbaeO4bg90KeGtMjUw0AGtHksgEPLRTUil+coHwCfiu4QjVJFnjp94DmU6zV7DhQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/eslint-plugin": "8.29.1",
- "@typescript-eslint/parser": "8.29.1",
- "@typescript-eslint/utils": "8.29.1"
+ "@typescript-eslint/eslint-plugin": "8.33.0",
+ "@typescript-eslint/parser": "8.33.0",
+ "@typescript-eslint/utils": "8.33.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4735,22 +4941,15 @@
"typescript": ">=4.8.4 <5.9.0"
}
},
- "node_modules/ufo": {
- "version": "1.5.4",
- "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.5.4.tgz",
- "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/undici-types": {
"version": "6.21.0",
- "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.21.0.tgz",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
"license": "MIT"
},
"node_modules/unpipe": {
"version": "1.0.0",
- "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
"license": "MIT",
"engines": {
@@ -4759,9 +4958,8 @@
},
"node_modules/uri-js": {
"version": "4.4.1",
- "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"punycode": "^2.1.0"
@@ -4769,13 +4967,13 @@
},
"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",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
"license": "MIT"
},
"node_modules/vary": {
"version": "1.1.2",
- "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
"license": "MIT",
"engines": {
@@ -4783,21 +4981,24 @@
}
},
"node_modules/vite": {
- "version": "5.4.17",
- "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.17.tgz",
- "integrity": "sha512-5+VqZryDj4wgCs55o9Lp+p8GE78TLVg0lasCH5xFZ4jacZjtqZa6JUw9/p0WeAojaOfncSM6v77InkFPGnvPvg==",
+ "version": "6.3.5",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
+ "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "esbuild": "^0.21.3",
- "postcss": "^8.4.43",
- "rollup": "^4.20.0"
+ "esbuild": "^0.25.0",
+ "fdir": "^6.4.4",
+ "picomatch": "^4.0.2",
+ "postcss": "^8.5.3",
+ "rollup": "^4.34.9",
+ "tinyglobby": "^0.2.13"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
- "node": "^18.0.0 || >=20.0.0"
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
},
"funding": {
"url": "https://github.com/vitejs/vite?sponsor=1"
@@ -4806,19 +5007,25 @@
"fsevents": "~2.3.3"
},
"peerDependencies": {
- "@types/node": "^18.0.0 || >=20.0.0",
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+ "jiti": ">=1.21.0",
"less": "*",
"lightningcss": "^1.21.0",
"sass": "*",
"sass-embedded": "*",
"stylus": "*",
"sugarss": "*",
- "terser": "^5.4.0"
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
},
"peerDependenciesMeta": {
"@types/node": {
"optional": true
},
+ "jiti": {
+ "optional": true
+ },
"less": {
"optional": true
},
@@ -4839,74 +5046,110 @@
},
"terser": {
"optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
}
}
},
"node_modules/vite-node": {
- "version": "1.6.1",
- "resolved": "https://registry.npmmirror.com/vite-node/-/vite-node-1.6.1.tgz",
- "integrity": "sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.1.4.tgz",
+ "integrity": "sha512-6enNwYnpyDo4hEgytbmc6mYWHXDHYEn0D1/rw4Q+tnHUGtKTJsn8T1YkX6Q18wI5LCrS8CTYlBaiCqxOy2kvUA==",
"dev": true,
"license": "MIT",
"dependencies": {
"cac": "^6.7.14",
- "debug": "^4.3.4",
- "pathe": "^1.1.1",
- "picocolors": "^1.0.0",
- "vite": "^5.0.0"
+ "debug": "^4.4.0",
+ "es-module-lexer": "^1.7.0",
+ "pathe": "^2.0.3",
+ "vite": "^5.0.0 || ^6.0.0"
},
"bin": {
"vite-node": "vite-node.mjs"
},
"engines": {
- "node": "^18.0.0 || >=20.0.0"
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
},
"funding": {
"url": "https://opencollective.com/vitest"
}
},
+ "node_modules/vite/node_modules/fdir": {
+ "version": "6.4.5",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz",
+ "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite/node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/vitest": {
- "version": "1.6.1",
- "resolved": "https://registry.npmmirror.com/vitest/-/vitest-1.6.1.tgz",
- "integrity": "sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.1.4.tgz",
+ "integrity": "sha512-Ta56rT7uWxCSJXlBtKgIlApJnT6e6IGmTYxYcmxjJ4ujuZDI59GUQgVDObXXJujOmPDBYXHK1qmaGtneu6TNIQ==",
"dev": true,
"license": "MIT",
"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.2",
- "chai": "^4.3.10",
- "debug": "^4.3.4",
- "execa": "^8.0.1",
- "local-pkg": "^0.5.0",
- "magic-string": "^0.30.5",
- "pathe": "^1.1.1",
- "picocolors": "^1.0.0",
- "std-env": "^3.5.0",
- "strip-literal": "^2.0.0",
- "tinybench": "^2.5.1",
- "tinypool": "^0.8.3",
- "vite": "^5.0.0",
- "vite-node": "1.6.1",
- "why-is-node-running": "^2.2.2"
+ "@vitest/expect": "3.1.4",
+ "@vitest/mocker": "3.1.4",
+ "@vitest/pretty-format": "^3.1.4",
+ "@vitest/runner": "3.1.4",
+ "@vitest/snapshot": "3.1.4",
+ "@vitest/spy": "3.1.4",
+ "@vitest/utils": "3.1.4",
+ "chai": "^5.2.0",
+ "debug": "^4.4.0",
+ "expect-type": "^1.2.1",
+ "magic-string": "^0.30.17",
+ "pathe": "^2.0.3",
+ "std-env": "^3.9.0",
+ "tinybench": "^2.9.0",
+ "tinyexec": "^0.3.2",
+ "tinyglobby": "^0.2.13",
+ "tinypool": "^1.0.2",
+ "tinyrainbow": "^2.0.0",
+ "vite": "^5.0.0 || ^6.0.0",
+ "vite-node": "3.1.4",
+ "why-is-node-running": "^2.3.0"
},
"bin": {
"vitest": "vitest.mjs"
},
"engines": {
- "node": "^18.0.0 || >=20.0.0"
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
},
"funding": {
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
"@edge-runtime/vm": "*",
- "@types/node": "^18.0.0 || >=20.0.0",
- "@vitest/browser": "1.6.1",
- "@vitest/ui": "1.6.1",
+ "@types/debug": "^4.1.12",
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+ "@vitest/browser": "3.1.4",
+ "@vitest/ui": "3.1.4",
"happy-dom": "*",
"jsdom": "*"
},
@@ -4914,6 +5157,9 @@
"@edge-runtime/vm": {
"optional": true
},
+ "@types/debug": {
+ "optional": true
+ },
"@types/node": {
"optional": true
},
@@ -4933,13 +5179,13 @@
},
"node_modules/webidl-conversions": {
"version": "3.0.1",
- "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
"license": "BSD-2-Clause"
},
"node_modules/whatwg-url": {
"version": "5.0.0",
- "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"license": "MIT",
"dependencies": {
@@ -4949,7 +5195,7 @@
},
"node_modules/which": {
"version": "2.0.2",
- "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"license": "ISC",
"dependencies": {
@@ -4964,7 +5210,7 @@
},
"node_modules/why-is-node-running": {
"version": "2.3.0",
- "resolved": "https://registry.npmmirror.com/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
+ "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
"integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==",
"dev": true,
"license": "MIT",
@@ -4981,7 +5227,7 @@
},
"node_modules/word-wrap": {
"version": "1.2.5",
- "resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
"integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
"dev": true,
"license": "MIT",
@@ -4991,7 +5237,7 @@
},
"node_modules/wrap-ansi": {
"version": "9.0.0",
- "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
"integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
"dev": true,
"license": "MIT",
@@ -5009,7 +5255,7 @@
},
"node_modules/wrap-ansi/node_modules/ansi-styles": {
"version": "6.2.1",
- "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
"dev": true,
"license": "MIT",
@@ -5022,26 +5268,26 @@
},
"node_modules/wrappy": {
"version": "1.0.2",
- "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
"license": "ISC"
},
"node_modules/yaml": {
- "version": "2.7.1",
- "resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.7.1.tgz",
- "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==",
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz",
+ "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==",
"dev": true,
"license": "ISC",
"bin": {
"yaml": "bin.mjs"
},
"engines": {
- "node": ">= 14"
+ "node": ">= 14.6"
}
},
"node_modules/yn": {
"version": "3.1.1",
- "resolved": "https://registry.npmmirror.com/yn/-/yn-3.1.1.tgz",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
"license": "MIT",
"engines": {
@@ -5049,22 +5295,22 @@
}
},
"node_modules/yocto-queue": {
- "version": "1.2.1",
- "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-1.2.1.tgz",
- "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==",
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=12.20"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/zod": {
- "version": "3.24.2",
- "resolved": "https://registry.npmmirror.com/zod/-/zod-3.24.2.tgz",
- "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==",
+ "version": "3.25.34",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.34.tgz",
+ "integrity": "sha512-lZHvSc2PpWdcfpHlyB33HA9nqP16GpC9IpiG4lYq9jZCJVLZNnWd6Y1cj79bcLSBKTkxepfpjckPv5Y5VOPlwA==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
@@ -5072,7 +5318,7 @@
},
"node_modules/zod-to-json-schema": {
"version": "3.24.5",
- "resolved": "https://registry.npmmirror.com/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz",
+ "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz",
"integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==",
"license": "ISC",
"peerDependencies": {
diff --git a/package.json b/package.json
index 82b3c52..360d2e3 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "@jinzcdev/leetcode-mcp-server",
"description": "MCP Server for LeetCode API (supports leetcode.com and leetcode.cn)",
- "version": "0.1.1",
+ "version": "1.2.0",
"author": "jinzcdev",
"main": "./build/index.js",
"keywords": [
@@ -12,12 +12,12 @@
"algorithm"
],
"scripts": {
- "test": "vitest run",
+ "test": "vitest run | pino-pretty",
"test:watch": "vitest watch",
"build": "tsc && chmod u+x build/index.js",
"start": "node build/index.js",
"dev": "tsc-watch --onSuccess \"node build/index.js\"",
- "format": "prettier --write . --ignore-path .gitignore",
+ "format": "prettier --write .",
"prepare": "husky"
},
"bin": {
@@ -33,15 +33,19 @@
"url": "git+https://github.com/jinzcdev/leetcode-mcp-server.git"
},
"lint-staged": {
- "*.{js,ts}": [
+ "*.{js,ts,jsx,tsx}": [
"prettier --write",
"eslint --fix"
+ ],
+ "*.{md,json,yml,yaml,html,css}": [
+ "prettier --write"
]
},
"dependencies": {
"@modelcontextprotocol/sdk": "^1.8.0",
"leetcode-query": "^2.0.0",
"minimist": "^1.2.8",
+ "pino": "^9.6.0",
"ts-node": "^10.9.2",
"zod": "^3.24.2"
},
@@ -49,6 +53,7 @@
"@eslint/js": "^9.24.0",
"@types/minimist": "^1.2.5",
"@types/node": "^22.14.0",
+ "esbuild": "^0.25.2",
"eslint": "^9.24.0",
"eslint-config-prettier": "^10.1.2",
"eslint-plugin-prettier": "^5.2.6",
@@ -60,6 +65,11 @@
"tsc-watch": "6.2.1",
"typescript": "^5.8.3",
"typescript-eslint": "^8.29.1",
- "vitest": "^1.6.1"
+ "vitest": "^3.1.3",
+ "vite": "^6.3.5",
+ "pino-pretty": "^13.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-linux-x64-gnu": "^4.40.1"
}
}
diff --git a/src/index.ts b/src/index.ts
index 5076fa2..8b94913 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -10,9 +10,11 @@ import { LeetCodeServiceFactory } from "./leetcode/leetcode-service-factory.js";
import { registerProblemResources } from "./mcp/resources/problem-resources.js";
import { registerSolutionResources } from "./mcp/resources/solution-resources.js";
import { registerContestTools } from "./mcp/tools/contest-tools.js";
+import { registerNoteTools } from "./mcp/tools/note-tools.js";
import { registerProblemTools } from "./mcp/tools/problem-tools.js";
import { registerSolutionTools } from "./mcp/tools/solution-tools.js";
import { registerUserTools } from "./mcp/tools/user-tools.js";
+import logger from "./utils/logger.js";
/**
* Parses and validates command line arguments for the LeetCode MCP Server.
@@ -31,7 +33,7 @@ function parseArgs() {
});
if (args.help) {
- console.log(`LeetCode MCP Server - Model Context Protocol server for LeetCode
+ logger.info(`LeetCode MCP Server - Model Context Protocol server for LeetCode
Usage: leetcode-mcp-server [options]
@@ -48,7 +50,7 @@ function parseArgs() {
};
if (options.site !== "global" && options.site !== "cn") {
- console.error("The site must be either 'global' or 'cn'");
+ logger.error("The site must be either 'global' or 'cn'");
process.exit(1);
}
@@ -92,6 +94,7 @@ async function main() {
registerUserTools(server, leetcodeService);
registerContestTools(server, leetcodeService);
registerSolutionTools(server, leetcodeService);
+ registerNoteTools(server, leetcodeService);
registerProblemResources(server, leetcodeService);
registerSolutionResources(server, leetcodeService);
@@ -101,6 +104,6 @@ async function main() {
}
main().catch((error) => {
- console.error("Failed to start LeetCode MCP Server:", error);
+ logger.error("Failed to start LeetCode MCP Server: %s", error);
process.exit(1);
});
diff --git a/src/leetcode/graphql/cn/note-queries.ts b/src/leetcode/graphql/cn/note-queries.ts
new file mode 100644
index 0000000..b8ebfc4
--- /dev/null
+++ b/src/leetcode/graphql/cn/note-queries.ts
@@ -0,0 +1,115 @@
+/**
+ * GraphQL query for fetching user notes on LeetCode CN
+ * This query allows retrieving notes with pagination, filtering, and sorting options
+ *
+ * @param orderBy - Optional sorting criteria for notes (e.g., "ASCENDING", "DESCENDING")
+ */
+export const NOTE_AGGREGATE_QUERY = `
+query noteAggregateNote(
+ $aggregateType: AggregateNoteEnum!
+ $keyword: String
+ $orderBy: AggregateNoteSortingOrderEnum
+ $limit: Int = 100
+ $skip: Int = 0
+) {
+ noteAggregateNote(
+ aggregateType: $aggregateType
+ keyword: $keyword
+ orderBy: $orderBy
+ limit: $limit
+ skip: $skip
+ ) {
+ count
+ userNotes {
+ id
+ summary
+ content
+ ... on NoteAggregateQuestionNoteNode {
+ noteQuestion {
+ linkTemplate
+ questionId
+ title
+ translatedTitle
+ }
+ }
+ }
+ }
+}`;
+
+/**
+ * GraphQL query for fetching user notes for a specific question ID on LeetCode CN
+ */
+export const NOTE_BY_QUESTION_ID_QUERY = `
+query noteOneTargetCommonNote(
+ $noteType: NoteCommonTypeEnum!
+ $questionId: String!
+ $limit: Int = 20
+ $skip: Int = 0
+) {
+ noteOneTargetCommonNote(
+ noteType: $noteType
+ targetId: $questionId
+ limit: $limit
+ skip: $skip
+ ) {
+ count
+ userNotes {
+ id
+ summary
+ content
+ }
+ }
+}`;
+
+/**
+ * GraphQL mutation for creating a new note on LeetCode CN
+ *
+ * @param content - Content of the note
+ * @param noteType - Type of note (e.g., "COMMON_QUESTION")
+ * @param targetId - ID of the target object (e.g., question ID)
+ * @param summary - Optional summary of the note
+ */
+export const NOTE_CREATE_MUTATION = `
+mutation noteCreateCommonNote(
+ $content: String!
+ $noteType: NoteCommonTypeEnum!
+ $targetId: String!
+ $summary: String!
+) {
+ noteCreateCommonNote(
+ content: $content
+ noteType: $noteType
+ targetId: $targetId
+ summary: $summary
+ ) {
+ note {
+ id
+ content
+ targetId
+ }
+ ok
+ }
+}`;
+
+/**
+ * GraphQL mutation for updating an existing note on LeetCode CN
+ *
+ * @param noteId - ID of the note to update
+ * @param content - New content for the note
+ * @param summary - Optional new summary for the note
+ */
+export const NOTE_UPDATE_MUTATION = `
+mutation noteUpdateUserNote(
+ $content: String!
+ $noteId: ID!
+ $summary: String!
+) {
+ noteUpdateUserNote(content: $content, noteId: $noteId, summary: $summary) {
+ note {
+ id
+ content
+ targetId
+ }
+ ok
+ }
+}`;
diff --git a/src/leetcode/graphql/cn/solution-article-detail.ts b/src/leetcode/graphql/cn/solution-article-detail.ts
index 5742a90..5a36c04 100644
--- a/src/leetcode/graphql/cn/solution-article-detail.ts
+++ b/src/leetcode/graphql/cn/solution-article-detail.ts
@@ -1,5 +1,5 @@
/**
- * GraphQL query for fetching a solution article's detail on LeetCode CN
+ * GraphQL query for fetching a solution's detail on LeetCode CN
*/
export const SOLUTION_ARTICLE_DETAIL_QUERY = `
query discussTopic($slug: String) {
diff --git a/src/leetcode/graphql/cn/solution-articles.ts b/src/leetcode/graphql/cn/solution-articles.ts
index f25cba2..da30f9c 100644
--- a/src/leetcode/graphql/cn/solution-articles.ts
+++ b/src/leetcode/graphql/cn/solution-articles.ts
@@ -1,5 +1,5 @@
/**
- * GraphQL query for fetching solution articles for a problem on LeetCode CN
+ * GraphQL query for fetching solutions for a problem on LeetCode CN
* `orderBy` can be one of [DEFAULT, MOST_UPVOTE, HOT, NEWEST_TO_OLDEST, OLDEST_TO_NEWEST]
*/
export const SOLUTION_ARTICLES_QUERY = `
diff --git a/src/leetcode/graphql/global/solution-article-detail.ts b/src/leetcode/graphql/global/solution-article-detail.ts
index 41d35ec..5b1aede 100644
--- a/src/leetcode/graphql/global/solution-article-detail.ts
+++ b/src/leetcode/graphql/global/solution-article-detail.ts
@@ -1,5 +1,5 @@
/**
- * GraphQL query for fetching a solution article's detail on LeetCode Global
+ * GraphQL query for fetching a solution's detail on LeetCode Global
*/
export const SOLUTION_ARTICLE_DETAIL_QUERY = `
query ugcArticleSolutionArticle($articleId: ID, $topicId: ID) {
diff --git a/src/leetcode/graphql/global/solution-articles.ts b/src/leetcode/graphql/global/solution-articles.ts
index f916b09..de3958f 100644
--- a/src/leetcode/graphql/global/solution-articles.ts
+++ b/src/leetcode/graphql/global/solution-articles.ts
@@ -1,5 +1,5 @@
/**
- * GraphQL query for fetching solution articles for a problem on LeetCode Global
+ * GraphQL query for fetching solutions for a problem on LeetCode Global
* `orderBy` can be one of [HOT, MOST_RECENT, MOST_VOTES]
*/
export const SOLUTION_ARTICLES_QUERY = `
diff --git a/src/leetcode/leetcode-base-service.ts b/src/leetcode/leetcode-base-service.ts
index 6a415d2..564b416 100644
--- a/src/leetcode/leetcode-base-service.ts
+++ b/src/leetcode/leetcode-base-service.ts
@@ -109,6 +109,15 @@ export interface LeetCodeBaseService {
*/
fetchDailyChallenge(): Promise;
+ /**
+ * Retrieves simplified information about a specific problem.
+ * Returns only the most useful fields for the user.
+ *
+ * @param titleSlug - Problem identifier/slug as used in the LeetCode URL
+ * @returns Promise resolving to the simplified problem details
+ */
+ fetchProblemSimplified(titleSlug: string): Promise;
+
/**
* Retrieves detailed information about a specific problem.
*
@@ -152,11 +161,11 @@ export interface LeetCodeBaseService {
isCN(): boolean;
/**
- * Retrieves a list of solution articles for a specific problem.
+ * Retrieves a list of solutions for a specific problem.
*
* @param questionSlug - The URL slug/identifier of the problem
- * @param options - Optional parameters for filtering and sorting the solution articles
- * @returns Promise resolving to the solution articles list data
+ * @param options - Optional parameters for filtering and sorting the solutions
+ * @returns Promise resolving to the solutions list data
*/
fetchQuestionSolutionArticles(
questionSlug: string,
@@ -164,10 +173,81 @@ export interface LeetCodeBaseService {
): Promise;
/**
- * Retrieves detailed information about a specific solution article.
+ * Retrieves detailed information about a specific solution.
*
- * @param identifier - The identifier of the solution article (topicId for Global, slug for CN)
- * @returns Promise resolving to the solution article detail data
+ * @param identifier - The identifier of the solution (topicId for Global, slug for CN)
+ * @returns Promise resolving to the solution detail data
*/
fetchSolutionArticleDetail(identifier: string): Promise;
+
+ /**
+ * Retrieves user notes from LeetCode with filtering and pagination options.
+ * Note: This feature is only available on LeetCode CN.
+ *
+ * @param options - Query parameters for filtering notes
+ * @param options.aggregateType - Type of notes to aggregate (e.g., "QUESTION_NOTE")
+ * @param options.keyword - Optional search term to filter notes
+ * @param options.orderBy - Optional sorting criteria for notes
+ * @param options.limit - Maximum number of notes to return
+ * @param options.skip - Number of notes to skip (for pagination)
+ * @returns Promise resolving to the filtered notes data
+ * @throws Error if not implemented or feature not supported
+ */
+ fetchUserNotes(options: {
+ aggregateType: string;
+ keyword?: string;
+ orderBy?: string;
+ limit?: number;
+ skip?: number;
+ }): Promise;
+
+ /**
+ * Retrieves user notes for a specific question ID.
+ * Note: This feature is only available on LeetCode CN.
+ *
+ * @param questionId - The question ID to fetch notes for
+ * @param limit - Maximum number of notes to return
+ * @param skip - Number of notes to skip (for pagination)
+ * @returns Promise resolving to the notes data for the specified question
+ * @throws Error if not implemented or feature not supported
+ */
+ fetchNotesByQuestionId(
+ questionId: string,
+ limit?: number,
+ skip?: number
+ ): Promise;
+
+ /**
+ * Creates a new note for a specific question on LeetCode.
+ * Note: This feature is only available on LeetCode CN.
+ *
+ * @param content - The content of the note
+ * @param noteType - The type of note (e.g., "COMMON_QUESTION")
+ * @param targetId - The ID of the target (e.g., question ID)
+ * @param summary - Optional summary of the note
+ * @returns Promise resolving to the created note data
+ * @throws Error if not implemented or feature not supported
+ */
+ createUserNote(
+ content: string,
+ noteType: string,
+ targetId: string,
+ summary: string
+ ): Promise;
+
+ /**
+ * Updates an existing note on LeetCode.
+ * Note: This feature is only available on LeetCode CN.
+ *
+ * @param noteId - The ID of the note to update
+ * @param content - The new content of the note
+ * @param summary - Optional new summary of the note
+ * @returns Promise resolving to the updated note data
+ * @throws Error if not implemented or feature not supported
+ */
+ updateUserNote(
+ noteId: string,
+ content: string,
+ summary: string
+ ): Promise;
}
diff --git a/src/leetcode/leetcode-cn-service.ts b/src/leetcode/leetcode-cn-service.ts
index 3e7e9f6..20b144d 100644
--- a/src/leetcode/leetcode-cn-service.ts
+++ b/src/leetcode/leetcode-cn-service.ts
@@ -1,4 +1,11 @@
import { Credential, LeetCodeCN } from "leetcode-query";
+import logger from "../utils/logger.js";
+import {
+ NOTE_AGGREGATE_QUERY,
+ NOTE_BY_QUESTION_ID_QUERY,
+ NOTE_CREATE_MUTATION,
+ NOTE_UPDATE_MUTATION
+} from "./graphql/cn/note-queries.js";
import { SEARCH_PROBLEMS_QUERY } from "./graphql/cn/search-problems.js";
import { SOLUTION_ARTICLE_DETAIL_QUERY } from "./graphql/cn/solution-article-detail.js";
import { SOLUTION_ARTICLES_QUERY } from "./graphql/cn/solution-articles.js";
@@ -24,27 +31,22 @@ export class LeetCodeCNService implements LeetCodeBaseService {
"Authentication required to fetch submission details"
);
}
- try {
- return await this.leetCodeApi.submissionDetail(id.toString());
- } catch (error) {
- console.error(
- `Error fetching submission detail for ID ${id}:`,
- error
- );
- throw error;
- }
+ return await this.leetCodeApi.submissionDetail(id.toString());
}
async fetchUserStatus(): Promise {
if (!this.isAuthenticated()) {
throw new Error("Authentication required to fetch user status");
}
- try {
- return await this.leetCodeApi.userStatus();
- } catch (error) {
- console.error(`Error fetching user status:`, error);
- throw error;
- }
+ return await this.leetCodeApi.userStatus().then((res) => {
+ return {
+ isSignedIn: res?.isSignedIn ?? false,
+ username: res?.username ?? "",
+ avatar: res?.avatar ?? "",
+ isAdmin: res?.isAdmin ?? false,
+ useTranslation: res?.useTranslation ?? false
+ };
+ });
}
async fetchUserAllSubmissions(options: {
@@ -60,59 +62,46 @@ export class LeetCodeCNService implements LeetCodeBaseService {
"Authentication required to fetch user submissions"
);
}
- try {
- return await this.leetCodeApi.graphql({
- variables: {
- limit: options.limit,
- offset: options.offset,
- questionSlug: options.questionSlug,
- lang: options.lang,
- status: options.status
- },
- query: `
- query submissionList(
- $offset: Int!
- $limit: Int!
- $lastKey: String
- $questionSlug: String
- $lang: String
- $status: SubmissionStatusEnum
+ return await this.leetCodeApi.graphql({
+ variables: {
+ limit: options.limit,
+ offset: options.offset,
+ questionSlug: options.questionSlug,
+ lang: options.lang,
+ status: options.status
+ },
+ query: `
+ query submissionList(
+ $offset: Int!
+ $limit: Int!
+ $lastKey: String
+ $questionSlug: String
+ $lang: String
+ $status: SubmissionStatusEnum
+ ) {
+ submissionList(
+ offset: $offset
+ limit: $limit
+ lastKey: $lastKey
+ questionSlug: $questionSlug
+ lang: $lang
+ status: $status
) {
- submissionList(
- offset: $offset
- limit: $limit
- lastKey: $lastKey
- questionSlug: $questionSlug
- lang: $lang
- status: $status
- ) {
- lastKey
- hasNext
- submissions {
- id
- title
- status
- statusDisplay
- lang
- langName: langVerboseName
- runtime
- timestamp
- url
- isPending
- memory
- frontendId
- submissionComment {
- comment
- flagType
- }
- }
+ lastKey
+ hasNext
+ submissions {
+ id
+ title
+ status
+ lang
+ runtime
+ url
+ memory
+ frontendId
}
- }`
- });
- } catch (error) {
- console.error(`Error fetching all user's submissions:`, error);
- throw error;
- }
+ }
+ }`
+ });
}
async fetchUserRecentSubmissions(
@@ -124,80 +113,117 @@ export class LeetCodeCNService implements LeetCodeBaseService {
);
}
- /**
- * 中国版 LeetCode API 仅支持获取最近 AC 的提交记录
- * @param username
- * @param limit
- * @returns
- */
async fetchUserRecentACSubmissions(
username: string,
limit?: number
): Promise {
- try {
- return await this.leetCodeApi.recent_submissions(username);
- } catch (error) {
- console.error(
- `Error fetching recent AC submissions for ${username}:`,
- error
- );
- throw error;
- }
+ return await this.leetCodeApi.recent_submissions(username);
}
async fetchUserProfile(username: string): Promise {
- try {
- return await this.leetCodeApi.user(username);
- } catch (error) {
- console.error(
- `Error fetching user profile for ${username}:`,
- error
- );
- throw error;
+ const originalProfile = await this.leetCodeApi.user(username);
+
+ if (!originalProfile || !originalProfile.userProfilePublicProfile) {
+ return originalProfile;
}
+
+ const publicProfile = originalProfile.userProfilePublicProfile || {};
+ const userProfile = publicProfile.profile || {};
+ const skillSet = userProfile.skillSet || {};
+
+ const simplifiedProfile = {
+ username: userProfile.userSlug,
+ questionProgress: originalProfile.userProfileUserQuestionProgress,
+ siteRanking: publicProfile.siteRanking,
+ profile: {
+ userSlug: userProfile.userSlug,
+ realName: userProfile.realName,
+ userAvatar: userProfile.userAvatar,
+ globalLocation: userProfile.globalLocation,
+ school: userProfile.school?.name,
+ socialAccounts: (userProfile.socialAccounts || []).filter(
+ (account: any) => !!account.profileUrl
+ ),
+ skillSet: {
+ topics: (skillSet.topics || []).map(
+ (topic: any) => topic.slug
+ ),
+ topicAreaScores: (skillSet.topicAreaScores || []).map(
+ (item: any) => ({
+ slug: item.topicArea?.slug,
+ score: item.score
+ })
+ )
+ }
+ }
+ };
+
+ return simplifiedProfile;
}
async fetchUserContestRanking(
username: string,
attended: boolean = true
): Promise {
- try {
- const contestInfo =
- await this.leetCodeApi.user_contest_info(username);
- if (contestInfo.userContestRankingHistory && attended) {
- contestInfo.userContestRankingHistory =
- contestInfo.userContestRankingHistory.filter(
- (contest: any) => {
- return contest && contest.attended;
- }
- );
- }
- return contestInfo;
- } catch (error) {
- console.error(
- `Error fetching user contest ranking for ${username}:`,
- error
- );
- throw error;
+ const contestInfo = await this.leetCodeApi.user_contest_info(username);
+ if (contestInfo.userContestRankingHistory && attended) {
+ contestInfo.userContestRankingHistory =
+ contestInfo.userContestRankingHistory.filter((contest: any) => {
+ return contest && contest.attended;
+ });
}
+ return contestInfo;
}
async fetchDailyChallenge(): Promise {
- try {
- return await this.leetCodeApi.daily();
- } catch (error) {
- console.error("Error fetching daily challenge:", error);
- throw error;
- }
+ return await this.leetCodeApi.daily();
}
async fetchProblem(titleSlug: string): Promise {
- try {
- return await this.leetCodeApi.problem(titleSlug);
- } catch (error) {
- console.error(`Error fetching problem ${titleSlug}:`, error);
- throw error;
+ return await this.leetCodeApi.problem(titleSlug);
+ }
+
+ async fetchProblemSimplified(titleSlug: string): Promise {
+ const problem = await this.fetchProblem(titleSlug);
+ if (!problem) {
+ throw new Error(`Problem ${titleSlug} not found`);
+ }
+
+ const filteredTopicTags =
+ problem.topicTags?.map((tag: any) => tag.slug) || [];
+
+ const filteredCodeSnippets =
+ problem.codeSnippets?.filter((snippet: any) =>
+ ["cpp", "python3", "java"].includes(snippet.langSlug)
+ ) || [];
+
+ let parsedSimilarQuestions: any[] = [];
+ if (problem.similarQuestions) {
+ try {
+ const allQuestions = JSON.parse(problem.similarQuestions);
+ parsedSimilarQuestions = allQuestions
+ .slice(0, 3)
+ .map((q: any) => ({
+ titleSlug: q.titleSlug,
+ difficulty: q.difficulty
+ }));
+ } catch (e) {
+ logger.error("Error parsing similarQuestions: %s", e);
+ }
}
+
+ return {
+ titleSlug,
+ questionId: problem.questionId,
+ title: problem.title,
+ content: problem.content,
+ difficulty: problem.difficulty,
+ topicTags: filteredTopicTags,
+ codeSnippets: filteredCodeSnippets,
+ exampleTestcases: problem.exampleTestcases,
+ hints: problem.hints,
+ similarQuestions: parsedSimilarQuestions
+ };
}
async searchProblems(
@@ -208,33 +234,39 @@ export class LeetCodeCNService implements LeetCodeBaseService {
offset: number = 0,
searchKeywords?: string
): Promise {
- try {
- const filters: any = {};
- if (difficulty) {
- filters.difficulty = difficulty.toUpperCase();
- }
- if (tags && tags.length > 0) {
- filters.tags = tags;
- }
- if (searchKeywords) {
- filters.searchKeywords = searchKeywords;
- }
+ const filters: any = {};
+ if (difficulty) {
+ filters.difficulty = difficulty.toUpperCase();
+ }
+ if (tags && tags.length > 0) {
+ filters.tags = tags;
+ }
+ if (searchKeywords) {
+ filters.searchKeywords = searchKeywords;
+ }
- const response = await this.leetCodeApi.graphql({
- query: SEARCH_PROBLEMS_QUERY,
- variables: {
- categorySlug: category,
- limit,
- skip: offset,
- filters
- }
- });
+ const { data } = await this.leetCodeApi.graphql({
+ query: SEARCH_PROBLEMS_QUERY,
+ variables: { categorySlug: category, limit, skip: offset, filters }
+ });
- return response.data?.problemsetQuestionList;
- } catch (error) {
- console.error("Error searching problems:", error);
- throw error;
+ const questionList = data?.problemsetQuestionList;
+ if (!questionList) {
+ return { hasMore: false, total: 0, questions: [] };
}
+
+ return {
+ hasMore: questionList.hasMore,
+ total: questionList.total,
+ questions: questionList.questions.map((q: any) => ({
+ title: q.title,
+ titleCn: q.titleCn,
+ titleSlug: q.titleSlug,
+ difficulty: q.difficulty,
+ acRate: q.acRate,
+ topicTags: q.topicTags.map((tag: any) => tag.slug)
+ }))
+ };
}
async fetchUserProgressQuestionList(options?: {
@@ -248,114 +280,262 @@ export class LeetCodeCNService implements LeetCodeBaseService {
"Authentication required to fetch user progress question list"
);
}
- try {
- const filters = {
- skip: options?.offset || 0,
- limit: options?.limit || 20,
- questionStatus: options?.questionStatus as any,
- difficulty: options?.difficulty as any[]
- };
- return await this.leetCodeApi.user_progress_questions(filters);
- } catch (error) {
- console.error("Error fetching user progress question list:", error);
- throw error;
- }
+ const filters = {
+ skip: options?.offset || 0,
+ limit: options?.limit || 20,
+ questionStatus: options?.questionStatus as any,
+ difficulty: options?.difficulty as any[]
+ };
+
+ return await this.leetCodeApi.user_progress_questions(filters);
}
/**
- * Retrieves a list of solution articles for a specific problem on LeetCode CN.
+ * Retrieves a list of solutions for a specific problem on LeetCode CN.
*
* @param questionSlug - The URL slug/identifier of the problem
- * @param options - Optional parameters for filtering and sorting the solution articles
- * @returns Promise resolving to the solution articles list data
+ * @param options - Optional parameters for filtering and sorting the solutions
+ * @returns Promise resolving to the solutions list data
*/
async fetchQuestionSolutionArticles(
questionSlug: string,
options?: any
): Promise {
- try {
- const variables: any = {
- questionSlug,
- first: options?.limit || 5,
- skip: options?.skip || 0,
- orderBy: options?.orderBy || "DEFAULT",
- userInput: options?.userInput,
- tagSlugs: options?.tagSlugs ?? []
- };
+ const variables: any = {
+ questionSlug,
+ first: options?.limit || 5,
+ skip: options?.skip || 0,
+ orderBy: options?.orderBy || "DEFAULT",
+ userInput: options?.userInput,
+ tagSlugs: options?.tagSlugs ?? []
+ };
- return await this.leetCodeApi
- .graphql({
- query: SOLUTION_ARTICLES_QUERY,
- variables
- })
- .then((res) => {
- const questionSolutionArticles =
- res.data?.questionSolutionArticles;
- if (!questionSolutionArticles) {
- return {
- totalNum: 0,
- hasNextPage: false,
- articles: []
- };
- }
- const data = {
- totalNum: questionSolutionArticles?.totalNum || 0,
- hasNextPage:
- questionSolutionArticles?.pageInfo?.hasNextPage ||
- false,
- articles:
- questionSolutionArticles?.edges
- ?.map((edge: any) => {
- if (
- edge?.node &&
- edge.node.topic?.id &&
- edge.node.slug
- ) {
- edge.node.articleUrl = `https://leetcode.cn/problems/${questionSlug}/solutions/${edge.node.topic.id}/${edge.node.slug}`;
- }
- return edge.node;
- })
- .filter((node: any) => node && node.canSee) ||
- []
+ return await this.leetCodeApi
+ .graphql({
+ query: SOLUTION_ARTICLES_QUERY,
+ variables
+ })
+ .then((res) => {
+ const questionSolutionArticles =
+ res.data?.questionSolutionArticles;
+ if (!questionSolutionArticles) {
+ return {
+ totalNum: 0,
+ hasNextPage: false,
+ articles: []
};
+ }
+ const data = {
+ totalNum: questionSolutionArticles?.totalNum || 0,
+ hasNextPage:
+ questionSolutionArticles?.pageInfo?.hasNextPage ||
+ false,
+ articles:
+ questionSolutionArticles?.edges
+ ?.map((edge: any) => {
+ if (
+ edge?.node &&
+ edge.node.topic?.id &&
+ edge.node.slug
+ ) {
+ edge.node.articleUrl = `https://leetcode.cn/problems/${questionSlug}/solutions/${edge.node.topic.id}/${edge.node.slug}`;
+ }
+ return edge.node;
+ })
+ .filter((node: any) => node && node.canSee) || []
+ };
- return data;
- });
- } catch (error) {
- console.error(
- `Error fetching solution articles for ${questionSlug}:`,
- error
- );
- throw error;
- }
+ return data;
+ });
}
/**
- * Retrieves detailed information about a specific solution article on LeetCode CN.
+ * Retrieves detailed information about a specific solution on LeetCode CN.
*
- * @param slug - The slug of the solution article
- * @returns Promise resolving to the solution article detail data
+ * @param slug - The slug of the solution
+ * @returns Promise resolving to the solution detail data
*/
async fetchSolutionArticleDetail(slug: string): Promise {
- try {
- return await this.leetCodeApi
- .graphql({
- query: SOLUTION_ARTICLE_DETAIL_QUERY,
- variables: {
- slug
+ return await this.leetCodeApi
+ .graphql({
+ query: SOLUTION_ARTICLE_DETAIL_QUERY,
+ variables: {
+ slug
+ }
+ })
+ .then((res) => {
+ return res.data?.solutionArticle;
+ });
+ }
+
+ /**
+ * Retrieves user notes from LeetCode CN with filtering and pagination options.
+ * Available only on LeetCode CN platform.
+ *
+ * @param options - Query parameters for filtering notes
+ * @param options.aggregateType - Type of notes to aggregate (e.g., "QUESTION_NOTE")
+ * @param options.keyword - Optional search term to filter notes
+ * @param options.orderBy - Optional sorting criteria for notes
+ * @param options.limit - Maximum number of notes to return
+ * @param options.skip - Number of notes to skip (for pagination)
+ * @returns Promise resolving to the filtered notes data
+ */
+ async fetchUserNotes(options: {
+ aggregateType: string;
+ keyword?: string;
+ orderBy?: string;
+ limit?: number;
+ skip?: number;
+ }): Promise {
+ if (!this.isAuthenticated()) {
+ throw new Error("Authentication required to fetch user notes");
+ }
+
+ const variables = {
+ aggregateType: options.aggregateType,
+ keyword: options.keyword,
+ orderBy: options.orderBy || "DESCENDING",
+ limit: options.limit || 20,
+ skip: options.skip || 0
+ };
+
+ return await this.leetCodeApi
+ .graphql({
+ query: NOTE_AGGREGATE_QUERY,
+ variables
+ })
+ .then((response) => {
+ return (
+ response.data?.noteAggregateNote || {
+ count: 0,
+ userNotes: []
}
- })
- .then((res) => {
- return res.data?.solutionArticle;
- });
- } catch (error) {
- console.error(
- `Error fetching solution article detail for slug ${slug}:`,
- error
+ );
+ });
+ }
+
+ /**
+ * Retrieves user notes for a specific question ID.
+ * Available only on LeetCode CN platform.
+ *
+ * @param questionId - The question ID to fetch notes for
+ * @param limit - Maximum number of notes to return (default: 20)
+ * @param skip - Number of notes to skip (default: 0)
+ * @returns Promise resolving to the notes data for the specified question
+ */
+ async fetchNotesByQuestionId(
+ questionId: string,
+ limit: number = 20,
+ skip: number = 0
+ ): Promise {
+ if (!this.isAuthenticated()) {
+ throw new Error(
+ "Authentication required to fetch notes by question ID"
);
- throw error;
}
+
+ const variables = {
+ noteType: "COMMON_QUESTION",
+ questionId: questionId,
+ limit,
+ skip
+ };
+
+ return await this.leetCodeApi
+ .graphql({
+ query: NOTE_BY_QUESTION_ID_QUERY,
+ variables
+ })
+ .then((response) => {
+ return (
+ response.data?.noteOneTargetCommonNote || {
+ count: 0,
+ userNotes: []
+ }
+ );
+ });
+ }
+
+ /**
+ * Creates a new note for a specific question on LeetCode CN.
+ * Available only on LeetCode CN platform.
+ *
+ * @param content - The content of the note
+ * @param noteType - The type of note (e.g., "COMMON_QUESTION")
+ * @param targetId - The ID of the target (e.g., question ID)
+ * @param summary - Optional summary of the note
+ * @returns Promise resolving to the created note data
+ */
+ async createUserNote(
+ content: string,
+ noteType: string,
+ targetId: string,
+ summary: string
+ ): Promise {
+ if (!this.isAuthenticated()) {
+ throw new Error("Authentication required to create notes");
+ }
+
+ const variables = {
+ content,
+ noteType,
+ targetId,
+ summary: summary || ""
+ };
+
+ return await this.leetCodeApi
+ .graphql({
+ query: NOTE_CREATE_MUTATION,
+ variables
+ })
+ .then((response) => {
+ return (
+ response.data?.noteCreateCommonNote || {
+ ok: false,
+ note: null
+ }
+ );
+ });
+ }
+
+ /**
+ * Updates an existing note on LeetCode CN.
+ * Available only on LeetCode CN platform.
+ *
+ * @param noteId - The ID of the note to update
+ * @param content - The new content of the note
+ * @param summary - Optional new summary of the note
+ * @returns Promise resolving to the updated note data
+ */
+ async updateUserNote(
+ noteId: string,
+ content: string,
+ summary: string
+ ): Promise {
+ if (!this.isAuthenticated()) {
+ throw new Error("Authentication required to update notes");
+ }
+
+ const variables = {
+ noteId,
+ content,
+ summary: summary || ""
+ };
+
+ return await this.leetCodeApi
+ .graphql({
+ query: NOTE_UPDATE_MUTATION,
+ variables
+ })
+ .then((response) => {
+ return (
+ response.data?.noteUpdateUserNote || {
+ ok: false,
+ note: null
+ }
+ );
+ });
}
isAuthenticated(): boolean {
diff --git a/src/leetcode/leetcode-global-service.ts b/src/leetcode/leetcode-global-service.ts
index 4c87c89..c23c744 100644
--- a/src/leetcode/leetcode-global-service.ts
+++ b/src/leetcode/leetcode-global-service.ts
@@ -1,4 +1,5 @@
import { Credential, LeetCode } from "leetcode-query";
+import logger from "../utils/logger.js";
import { SEARCH_PROBLEMS_QUERY } from "./graphql/global/search-problems.js";
import { SOLUTION_ARTICLE_DETAIL_QUERY } from "./graphql/global/solution-article-detail.js";
import { SOLUTION_ARTICLES_QUERY } from "./graphql/global/solution-articles.js";
@@ -24,27 +25,21 @@ export class LeetCodeGlobalService implements LeetCodeBaseService {
"Authentication required to fetch user submission detail"
);
}
- try {
- return await this.leetCodeApi.submission(id);
- } catch (error) {
- console.error(
- `Error fetching submission detail for id ${id}:`,
- error
- );
- throw error;
- }
+ return await this.leetCodeApi.submission(id);
}
async fetchUserStatus(): Promise {
if (!this.isAuthenticated()) {
throw new Error("Authentication required to fetch user status");
}
- try {
- return await this.leetCodeApi.whoami();
- } catch (error) {
- console.error(`Error fetching user status:`, error);
- throw error;
- }
+ return await this.leetCodeApi.whoami().then((res) => {
+ return {
+ isSignedIn: res?.isSignedIn ?? false,
+ username: res?.username ?? "",
+ avatar: res?.avatar ?? "",
+ isAdmin: res?.isAdmin ?? false
+ };
+ });
}
async fetchUserAllSubmissions(options: {
@@ -60,17 +55,12 @@ export class LeetCodeGlobalService implements LeetCodeBaseService {
"Authentication required to fetch user submissions"
);
}
- try {
- const submissions = await this.leetCodeApi.submissions({
- offset: options.offset ?? 0,
- limit: options.limit ?? 20,
- slug: options.questionSlug
- });
- return { submissions };
- } catch (error) {
- console.error(`Error fetching user submissions:`, error);
- throw error;
- }
+ const submissions = await this.leetCodeApi.submissions({
+ offset: options.offset ?? 0,
+ limit: options.limit ?? 20,
+ slug: options.questionSlug
+ });
+ return { submissions };
}
/**
@@ -83,15 +73,7 @@ export class LeetCodeGlobalService implements LeetCodeBaseService {
username: string,
limit?: number
): Promise {
- try {
- return await this.leetCodeApi.recent_submissions(username, limit);
- } catch (error) {
- console.error(
- `Error fetching recent submissions for ${username}:`,
- error
- );
- throw error;
- }
+ return await this.leetCodeApi.recent_submissions(username, limit);
}
/**
@@ -104,92 +86,113 @@ export class LeetCodeGlobalService implements LeetCodeBaseService {
username: string,
limit?: number
): Promise {
- try {
- return await this.leetCodeApi.graphql({
- query: `
- query ($username: String!, $limit: Int) {
- recentAcSubmissionList(username: $username, limit: $limit) {
- id
- title
- titleSlug
- time
- timestamp
- statusDisplay
- lang
- }
+ return await this.leetCodeApi.graphql({
+ query: `
+ query ($username: String!, $limit: Int) {
+ recentAcSubmissionList(username: $username, limit: $limit) {
+ id
+ title
+ titleSlug
+ time
+ timestamp
+ statusDisplay
+ lang
}
+ }
- `,
- variables: {
- username,
- limit
- }
- });
- } catch (error) {
- console.error(
- `Error fetching recent submissions for ${username}:`,
- error
- );
- throw error;
- }
+ `,
+ variables: {
+ username,
+ limit
+ }
+ });
}
async fetchUserProfile(username: string): Promise {
- try {
- const profile = await this.leetCodeApi.user(username);
- return profile;
- } catch (error) {
- console.error(
- `Error fetching user profile for ${username}:`,
- error
- );
- throw error;
+ const profile = await this.leetCodeApi.user(username);
+ if (profile && profile.matchedUser) {
+ const { matchedUser } = profile;
+
+ return {
+ username: matchedUser.username,
+ realName: matchedUser.profile.realName,
+ userAvatar: matchedUser.profile.userAvatar,
+ countryName: matchedUser.profile.countryName,
+ githubUrl: matchedUser.githubUrl,
+ company: matchedUser.profile.company,
+ school: matchedUser.profile.school,
+ ranking: matchedUser.profile.ranking,
+ totalSubmissionNum: matchedUser.submitStats?.totalSubmissionNum
+ };
}
+ return profile;
}
async fetchUserContestRanking(
username: string,
attended: boolean = true
): Promise {
- try {
- const contestInfo =
- await this.leetCodeApi.user_contest_info(username);
- if (contestInfo.userContestRankingHistory && attended) {
- contestInfo.userContestRankingHistory =
- contestInfo.userContestRankingHistory.filter(
- (contest: any) => {
- return contest && contest.attended;
- }
- );
- }
- return contestInfo;
- } catch (error) {
- console.error(
- `Error fetching user contest ranking for ${username}:`,
- error
- );
- throw error;
+ const contestInfo = await this.leetCodeApi.user_contest_info(username);
+ if (contestInfo.userContestRankingHistory && attended) {
+ contestInfo.userContestRankingHistory =
+ contestInfo.userContestRankingHistory.filter((contest: any) => {
+ return contest && contest.attended;
+ });
}
+ return contestInfo;
}
async fetchDailyChallenge(): Promise {
- try {
- const dailyChallenge = await this.leetCodeApi.daily();
- return dailyChallenge;
- } catch (error) {
- console.error("Error fetching daily challenge:", error);
- throw error;
- }
+ const dailyChallenge = await this.leetCodeApi.daily();
+ return dailyChallenge;
}
async fetchProblem(titleSlug: string): Promise {
- try {
- const problem = await this.leetCodeApi.problem(titleSlug);
- return problem;
- } catch (error) {
- console.error(`Error fetching problem ${titleSlug}:`, error);
- throw error;
+ const problem = await this.leetCodeApi.problem(titleSlug);
+ return problem;
+ }
+
+ async fetchProblemSimplified(titleSlug: string): Promise {
+ const problem = await this.fetchProblem(titleSlug);
+ if (!problem) {
+ throw new Error(`Problem ${titleSlug} not found`);
+ }
+
+ const filteredTopicTags =
+ problem.topicTags?.map((tag: any) => tag.slug) || [];
+
+ const filteredCodeSnippets =
+ problem.codeSnippets?.filter((snippet: any) =>
+ ["cpp", "python3", "java"].includes(snippet.langSlug)
+ ) || [];
+
+ let parsedSimilarQuestions: any[] = [];
+ if (problem.similarQuestions) {
+ try {
+ const allQuestions = JSON.parse(problem.similarQuestions);
+ parsedSimilarQuestions = allQuestions
+ .slice(0, 3)
+ .map((q: any) => ({
+ titleSlug: q.titleSlug,
+ difficulty: q.difficulty
+ }));
+ } catch (e) {
+ logger.error("Error parsing similarQuestions: %s", e);
+ }
}
+
+ return {
+ titleSlug,
+ questionId: problem.questionId,
+ title: problem.title,
+ content: problem.content,
+ difficulty: problem.difficulty,
+ topicTags: filteredTopicTags,
+ codeSnippets: filteredCodeSnippets,
+ exampleTestcases: problem.exampleTestcases,
+ hints: problem.hints,
+ similarQuestions: parsedSimilarQuestions
+ };
}
async searchProblems(
@@ -200,33 +203,44 @@ export class LeetCodeGlobalService implements LeetCodeBaseService {
offset: number = 0,
searchKeywords?: string
): Promise {
- try {
- const filters: any = {};
- if (difficulty) {
- filters.difficulty = difficulty.toUpperCase();
- }
- if (tags && tags.length > 0) {
- filters.tags = tags;
- }
- if (searchKeywords) {
- filters.searchKeywords = searchKeywords;
- }
+ const filters: any = {};
+ if (difficulty) {
+ filters.difficulty = difficulty.toUpperCase();
+ }
+ if (tags && tags.length > 0) {
+ filters.tags = tags;
+ }
+ if (searchKeywords) {
+ filters.searchKeywords = searchKeywords;
+ }
- const response = await this.leetCodeApi.graphql({
- query: SEARCH_PROBLEMS_QUERY,
- variables: {
- categorySlug: category,
- limit,
- skip: offset,
- filters
- }
- });
+ const response = await this.leetCodeApi.graphql({
+ query: SEARCH_PROBLEMS_QUERY,
+ variables: {
+ categorySlug: category,
+ limit,
+ skip: offset,
+ filters
+ }
+ });
- return response.data?.problemsetQuestionList;
- } catch (error) {
- console.error("Error searching problems:", error);
- throw error;
+ const questionList = response.data?.problemsetQuestionList;
+ if (!questionList) {
+ return {
+ total: 0,
+ questions: []
+ };
}
+ return {
+ total: questionList.total,
+ questions: questionList.questions.map((question: any) => ({
+ title: question.title,
+ titleSlug: question.titleSlug,
+ difficulty: question.difficulty,
+ acRate: question.acRate,
+ topicTags: question.topicTags.map((tag: any) => tag.slug)
+ }))
+ };
}
async fetchUserProgressQuestionList(options?: {
@@ -240,114 +254,152 @@ export class LeetCodeGlobalService implements LeetCodeBaseService {
"Authentication required to fetch user progress question list"
);
}
- try {
- const filters = {
- skip: options?.offset || 0,
- limit: options?.limit || 20,
- questionStatus: options?.questionStatus as any,
- difficulty: options?.difficulty as any[]
- };
- return await this.leetCodeApi.user_progress_questions(filters);
- } catch (error) {
- console.error("Error fetching user progress question list:", error);
- throw error;
- }
+ const filters = {
+ skip: options?.offset || 0,
+ limit: options?.limit || 20,
+ questionStatus: options?.questionStatus as any,
+ difficulty: options?.difficulty as any[]
+ };
+
+ return await this.leetCodeApi.user_progress_questions(filters);
}
/**
- * Retrieves a list of solution articles for a specific problem.
+ * Retrieves a list of solutions for a specific problem.
*
* @param questionSlug - The URL slug/identifier of the problem
- * @param options - Optional parameters for filtering and sorting the solution articles
- * @returns Promise resolving to the solution articles list data
+ * @param options - Optional parameters for filtering and sorting the solutions
+ * @returns Promise resolving to the solutions list data
*/
async fetchQuestionSolutionArticles(
questionSlug: string,
options?: any
): Promise {
- try {
- const variables: any = {
- questionSlug,
- first: options?.limit || 5,
- skip: options?.skip || 0,
- orderBy: options?.orderBy || "HOT",
- userInput: options?.userInput,
- tagSlugs: options?.tagSlugs ?? []
- };
+ const variables: any = {
+ questionSlug,
+ first: options?.limit || 5,
+ skip: options?.skip || 0,
+ orderBy: options?.orderBy || "HOT",
+ userInput: options?.userInput,
+ tagSlugs: options?.tagSlugs ?? []
+ };
- return await this.leetCodeApi
- .graphql({
- query: SOLUTION_ARTICLES_QUERY,
- variables
- })
- .then((res) => {
- const ugcArticleSolutionArticles =
- res.data?.ugcArticleSolutionArticles;
- if (!ugcArticleSolutionArticles) {
- return {
- totalNum: 0,
- hasNextPage: false,
- articles: []
- };
- }
- const data = {
- totalNum: ugcArticleSolutionArticles?.totalNum || 0,
- hasNextPage:
- ugcArticleSolutionArticles?.pageInfo?.hasNextPage ||
- false,
- articles:
- ugcArticleSolutionArticles?.edges
- ?.map((edge: any) => {
- if (
- edge?.node &&
- edge.node.topicId &&
- edge.node.slug
- ) {
- edge.node.articleUrl = `https://leetcode.com/problems/${questionSlug}/solutions/${edge.node.topicId}/${edge.node.slug}`;
- }
- return edge.node;
- })
- .filter((node: any) => node && node.canSee) ||
- []
+ return await this.leetCodeApi
+ .graphql({
+ query: SOLUTION_ARTICLES_QUERY,
+ variables
+ })
+ .then((res) => {
+ const ugcArticleSolutionArticles =
+ res.data?.ugcArticleSolutionArticles;
+ if (!ugcArticleSolutionArticles) {
+ return {
+ totalNum: 0,
+ hasNextPage: false,
+ articles: []
};
+ }
+ const data = {
+ totalNum: ugcArticleSolutionArticles?.totalNum || 0,
+ hasNextPage:
+ ugcArticleSolutionArticles?.pageInfo?.hasNextPage ||
+ false,
+ articles:
+ ugcArticleSolutionArticles?.edges
+ ?.map((edge: any) => {
+ if (
+ edge?.node &&
+ edge.node.topicId &&
+ edge.node.slug
+ ) {
+ edge.node.articleUrl = `https://leetcode.com/problems/${questionSlug}/solutions/${edge.node.topicId}/${edge.node.slug}`;
+ }
+ return edge.node;
+ })
+ .filter((node: any) => node && node.canSee) || []
+ };
- return data;
- });
- } catch (error) {
- console.error(
- `Error fetching solution articles for ${questionSlug}:`,
- error
- );
- throw error;
- }
+ return data;
+ });
}
/**
- * Retrieves detailed information about a specific solution article on LeetCode Global.
+ * Retrieves detailed information about a specific solution on LeetCode Global.
*
- * @param topicId - The topic ID of the solution article
- * @returns Promise resolving to the solution article detail data
+ * @param topicId - The topic ID of the solution
+ * @returns Promise resolving to the solution detail data
*/
async fetchSolutionArticleDetail(topicId: string): Promise {
- try {
- return await this.leetCodeApi
- .graphql({
- query: SOLUTION_ARTICLE_DETAIL_QUERY,
- variables: {
- topicId
- }
- })
- .then((response) => {
- return response.data?.ugcArticleSolutionArticle;
- });
- } catch (error) {
- console.error(
- `Error fetching solution article detail for topic ${topicId}:`,
- error
- );
- throw error;
- }
+ return await this.leetCodeApi
+ .graphql({
+ query: SOLUTION_ARTICLE_DETAIL_QUERY,
+ variables: {
+ topicId
+ }
+ })
+ .then((response) => {
+ return response.data?.ugcArticleSolutionArticle;
+ });
+ }
+
+ /**
+ * Note feature is not supported in LeetCode Global.
+ * This method is implemented to satisfy the interface but will always throw an error.
+ *
+ * @param options - Query parameters (not used)
+ * @throws Error indicating the feature is not supported on Global platform
+ */
+ async fetchUserNotes(options: {
+ aggregateType: string;
+ keyword?: string;
+ orderBy?: string;
+ limit?: number;
+ skip?: number;
+ }): Promise {
+ throw new Error("Notes feature is not supported in LeetCode Global");
+ }
+
+ /**
+ * Note feature is not supported in LeetCode Global.
+ * This method is implemented to satisfy the interface but will always throw an error.
+ *
+ * @param questionId - The question ID (not used)
+ * @param limit - Maximum number of notes (not used)
+ * @param skip - Pagination offset (not used)
+ * @throws Error indicating the feature is not supported on Global platform
+ */
+ async fetchNotesByQuestionId(
+ questionId: string,
+ limit?: number,
+ skip?: number
+ ): Promise {
+ throw new Error("Notes feature is not supported in LeetCode Global");
+ }
+
+ /**
+ * Note feature is not supported in LeetCode Global.
+ * This method is implemented to satisfy the interface but will always throw an error.
+ */
+ async createUserNote(
+ content: string,
+ noteType: string,
+ targetId: string,
+ summary: string
+ ): Promise {
+ throw new Error("Notes feature is not supported in LeetCode Global");
+ }
+
+ /**
+ * Note feature is not supported in LeetCode Global.
+ * This method is implemented to satisfy the interface but will always throw an error.
+ */
+ async updateUserNote(
+ noteId: string,
+ content: string,
+ summary: string
+ ): Promise {
+ throw new Error("Notes feature is not supported in LeetCode Global");
}
isAuthenticated(): boolean {
diff --git a/src/mcp/resources/problem-resources.ts b/src/mcp/resources/problem-resources.ts
index e2c7db5..71cf946 100644
--- a/src/mcp/resources/problem-resources.ts
+++ b/src/mcp/resources/problem-resources.ts
@@ -19,10 +19,10 @@ export class ProblemResourceRegistry extends ResourceRegistry {
// Problem Categories resource
this.server.resource(
"problem-categories",
- "leetcode://problems/categories/all",
+ "categories://problems/all",
{
description:
- "A comprehensive list of all problem classification categories in LeetCode platform, including difficulty levels (Easy, Medium, Hard) and algorithmic domains. These categories help organize and filter coding problems for users based on their complexity and topic area. Returns an array of all available problem categories.",
+ "A list of all problem classification categories in LeetCode platform, including difficulty levels (Easy, Medium, Hard) and algorithmic domains. These categories help organize and filter coding problems for users based on their complexity and topic area. Returns an array of all available problem categories.",
mimeType: "application/json"
},
async (uri, extra) => {
@@ -41,7 +41,7 @@ export class ProblemResourceRegistry extends ResourceRegistry {
// Problem Tags resource
this.server.resource(
"problem-tags",
- "leetcode://problems/tags/all",
+ "tags://problems/all",
{
description:
"A detailed collection of algorithmic and data structure tags used by LeetCode to categorize problems. These tags represent specific algorithms (like 'dynamic-programming', 'binary-search') or data structures (such as 'array', 'queue', 'tree') that are relevant to solving each problem. Returns an array of all available problem tags for filtering and searching problems.",
@@ -63,7 +63,7 @@ export class ProblemResourceRegistry extends ResourceRegistry {
// Problem Languages resource
this.server.resource(
"problem-langs",
- "leetcode://problems/langs/all",
+ "langs://problems/all",
{
description:
"A complete list of all programming languages officially supported by LeetCode for code submission and problem solving. Returns an array of all available programming languages on the platform.",
@@ -85,12 +85,12 @@ export class ProblemResourceRegistry extends ResourceRegistry {
// Problem Detail resource
this.server.resource(
"problem-detail",
- new ResourceTemplate("leetcode://problems/{titleSlug}", {
+ new ResourceTemplate("problem://{titleSlug}", {
list: undefined
}),
{
description:
- "Provides comprehensive details about a specific LeetCode problem, including its description, examples, constraints, and metadata. The titleSlug parameter in the URI identifies the specific problem.",
+ "Provides details about a specific LeetCode problem, including its description, examples, constraints, and metadata. The titleSlug parameter in the URI identifies the specific problem.",
mimeType: "application/json"
},
async (uri, variables, extra) => {
diff --git a/src/mcp/resources/solution-resources.ts b/src/mcp/resources/solution-resources.ts
index 40cdb58..6e90bbf 100644
--- a/src/mcp/resources/solution-resources.ts
+++ b/src/mcp/resources/solution-resources.ts
@@ -7,19 +7,19 @@ import { ResourceRegistry } from "./resource-registry.js";
/**
* Solution resource registry class that handles registration of LeetCode solution-related resources.
- * This class manages resources for accessing solution articles and solution details.
+ * This class manages resources for accessing solutions and solution details.
*/
export class SolutionResourceRegistry extends ResourceRegistry {
protected registerGlobal(): void {
- // Global solution article resource
+ // Global solution resource
this.server.resource(
- "solution-article",
- new ResourceTemplate("leetcode://solutions/{topicId}", {
+ "problem-solution",
+ new ResourceTemplate("solution://{topicId}", {
list: undefined
}),
{
description:
- "Provides the complete content and metadata of a specific solution article on LeetCode Global, including the full article text, author information, and related navigation links. The topicId parameter in the URI identifies the specific solution article. This ID can be obtained from the 'topicId' field in the response of the 'leetcode_solution_article_list' tool.",
+ "Provides the complete content and metadata of a specific problem solution, including the full article text, author information, and related navigation links. The topicId parameter in the URI identifies the specific solution. This ID can be obtained from the 'topicId' field in the response of the 'list_problem_solutions' tool.",
mimeType: "application/json"
},
async (uri, variables, extra) => {
@@ -47,7 +47,7 @@ export class SolutionResourceRegistry extends ResourceRegistry {
{
uri: uri.toString(),
text: JSON.stringify({
- error: "Failed to fetch solution article",
+ error: "Failed to fetch solution",
message: error.message
}),
mimeType: "application/json"
@@ -60,15 +60,15 @@ export class SolutionResourceRegistry extends ResourceRegistry {
}
protected registerChina(): void {
- // China solution article resource
+ // China solution resource
this.server.resource(
- "solution-article",
- new ResourceTemplate("leetcode://solutions/{slug}", {
+ "problem-solution",
+ new ResourceTemplate("solution://{slug}", {
list: undefined
}),
{
description:
- "Provides the complete content and metadata of a specific solution article, including the full article text, author information, and related navigation links. This slug can be obtained from the 'node.slug' field in the response of the 'leetcode_solution_article_list' tool.",
+ "Provides the complete content and metadata of a specific solution, including the full article text, author information, and related navigation links. This slug can be obtained from the 'node.slug' field in the response of the 'list_problem_solutions' tool.",
mimeType: "application/json"
},
async (uri, variables, extra) => {
@@ -96,7 +96,7 @@ export class SolutionResourceRegistry extends ResourceRegistry {
{
uri: uri.toString(),
text: JSON.stringify({
- error: "Failed to fetch solution article",
+ error: "Failed to fetch solution",
message: error.message
}),
mimeType: "application/json"
diff --git a/src/mcp/tools/contest-tools.ts b/src/mcp/tools/contest-tools.ts
index 1256d48..a4a5c8c 100644
--- a/src/mcp/tools/contest-tools.ts
+++ b/src/mcp/tools/contest-tools.ts
@@ -11,8 +11,8 @@ export class ContestToolRegistry extends ToolRegistry {
protected registerCommon(): void {
// User contest ranking tool
this.server.tool(
- "leetcode_user_contest_ranking",
- "Retrieves a user's comprehensive contest ranking information on LeetCode, including overall ranking, participation history, and performance metrics across contests",
+ "get_user_contest_ranking",
+ "Retrieves a user's contest ranking information on LeetCode, including overall ranking, participation history, and performance metrics across contests",
{
username: z
.string()
diff --git a/src/mcp/tools/note-tools.ts b/src/mcp/tools/note-tools.ts
new file mode 100644
index 0000000..6ef5ba4
--- /dev/null
+++ b/src/mcp/tools/note-tools.ts
@@ -0,0 +1,276 @@
+import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
+import { z } from "zod";
+import { LeetCodeBaseService } from "../../leetcode/leetcode-base-service.js";
+import { ToolRegistry } from "./tool-registry.js";
+
+/**
+ * Note tool registry class that handles registration of LeetCode note-related tools.
+ * This class manages tools for accessing and searching user notes on LeetCode CN.
+ */
+export class NoteToolRegistry extends ToolRegistry {
+ protected registerAuthenticatedChina(): void {
+ // Notes search tool (CN-specific)
+ this.server.tool(
+ "search_notes",
+ "Searches for user notes on LeetCode with filtering options, returning note content and associated problem information (requires authentication)",
+ {
+ keyword: z
+ .string()
+ .optional()
+ .describe(
+ "Optional search term to filter notes by content or title"
+ ),
+ limit: z
+ .number()
+ .optional()
+ .default(10)
+ .describe(
+ "Maximum number of notes to return per request (defaults to 10)"
+ ),
+ skip: z
+ .number()
+ .optional()
+ .default(0)
+ .describe(
+ "Number of notes to skip before returning results (for pagination)"
+ ),
+ orderBy: z
+ .enum(["ASCENDING", "DESCENDING"])
+ .optional()
+ .default("DESCENDING")
+ .describe(
+ "Sort order for returned notes: 'DESCENDING' (newest first) or 'ASCENDING' (oldest first)"
+ )
+ },
+ async ({ keyword, limit, skip, orderBy }) => {
+ try {
+ const options = {
+ aggregateType: "QUESTION_NOTE",
+ keyword,
+ orderBy,
+ limit,
+ skip
+ };
+
+ const data =
+ await this.leetcodeService.fetchUserNotes(options);
+
+ return {
+ content: [
+ {
+ type: "text",
+ text: JSON.stringify({
+ filters: { keyword, orderBy },
+ pagination: {
+ limit,
+ skip,
+ totalCount: data.count
+ },
+ notes: data.userNotes
+ })
+ }
+ ]
+ };
+ } catch (error: any) {
+ return {
+ content: [
+ {
+ type: "text",
+ text: JSON.stringify({
+ error: "Failed to search notes",
+ message: error.message
+ })
+ }
+ ]
+ };
+ }
+ }
+ );
+
+ // Notes detail tool (CN-specific, requires authentication)
+ this.server.tool(
+ "get_note",
+ "Retrieves user notes for a specific LeetCode problem by its question ID, returning the complete note content and metadata (requires authentication)",
+ {
+ questionId: z
+ .string()
+ .describe(
+ "The question ID of the LeetCode problem to get notes for (e.g., '42' for 'Trapping Rain Water')"
+ ),
+ limit: z
+ .number()
+ .optional()
+ .default(10)
+ .describe(
+ "Maximum number of notes to return per request (defaults to 10)"
+ ),
+ skip: z
+ .number()
+ .optional()
+ .default(0)
+ .describe(
+ "Number of notes to skip before returning results (for pagination)"
+ )
+ },
+ async ({ questionId, limit = 20, skip = 0 }) => {
+ try {
+ const data =
+ await this.leetcodeService.fetchNotesByQuestionId(
+ questionId,
+ limit,
+ skip
+ );
+
+ return {
+ content: [
+ {
+ type: "text",
+ text: JSON.stringify({
+ questionId,
+ count: data.count,
+ pagination: { limit, skip },
+ notes: data.userNotes
+ })
+ }
+ ]
+ };
+ } catch (error: any) {
+ return {
+ content: [
+ {
+ type: "text",
+ text: JSON.stringify({
+ error: "Failed to get note for question",
+ message: error.message
+ })
+ }
+ ]
+ };
+ }
+ }
+ );
+
+ // Note creation tool (CN-specific, requires authentication)
+ this.server.tool(
+ "create_note",
+ "Creates a new note for a specific LeetCode problem, allowing users to save personal comments and observations for future reference (requires authentication, CN only)",
+ {
+ questionId: z
+ .string()
+ .describe(
+ "The question ID of the LeetCode problem to create a note for (e.g., '42' for 'Trapping Rain Water')"
+ ),
+ content: z
+ .string()
+ .describe(
+ "The content of the note (supports markdown format)"
+ ),
+ title: z
+ .string()
+ .optional()
+ .default("")
+ .describe("An short title or summary for the note")
+ },
+ async ({ questionId, content, title = "" }) => {
+ try {
+ const data = await this.leetcodeService.createUserNote(
+ content,
+ "COMMON_QUESTION",
+ questionId,
+ title
+ );
+
+ return {
+ content: [
+ {
+ type: "text",
+ text: JSON.stringify({
+ success: data.ok,
+ note: data.note
+ })
+ }
+ ]
+ };
+ } catch (error: any) {
+ return {
+ content: [
+ {
+ type: "text",
+ text: JSON.stringify({
+ error: "Failed to create note",
+ message: error.message
+ })
+ }
+ ]
+ };
+ }
+ }
+ );
+
+ // Note update tool (CN-specific, requires authentication)
+ this.server.tool(
+ "update_note",
+ "Updates an existing note with new content or title, allowing users to refine their saved observations (requires authentication, CN only)",
+ {
+ noteId: z.string().describe("The ID of the note to update"),
+ content: z
+ .string()
+ .default("")
+ .describe(
+ "The new content for the note (supports markdown format)"
+ ),
+ title: z
+ .string()
+ .default("")
+ .describe("An new short title or summary for the note")
+ },
+ async ({ noteId, content, title = "" }) => {
+ try {
+ const data = await this.leetcodeService.updateUserNote(
+ noteId,
+ content,
+ title
+ );
+
+ return {
+ content: [
+ {
+ type: "text",
+ text: JSON.stringify({
+ success: data.ok,
+ note: data.note
+ })
+ }
+ ]
+ };
+ } catch (error: any) {
+ return {
+ content: [
+ {
+ type: "text",
+ text: JSON.stringify({
+ error: "Failed to update note",
+ message: error.message
+ })
+ }
+ ]
+ };
+ }
+ }
+ );
+ }
+}
+
+/**
+ * Registers all note-related tools with the MCP server.
+ *
+ * @param server - The MCP server instance to register tools with
+ * @param leetcodeService - The LeetCode service implementation to use for API calls
+ */
+export function registerNoteTools(
+ server: McpServer,
+ leetcodeService: LeetCodeBaseService
+): void {
+ const registry = new NoteToolRegistry(server, leetcodeService);
+ registry.registerTools();
+}
diff --git a/src/mcp/tools/problem-tools.ts b/src/mcp/tools/problem-tools.ts
index 0eff3b0..bb5c3f2 100644
--- a/src/mcp/tools/problem-tools.ts
+++ b/src/mcp/tools/problem-tools.ts
@@ -12,7 +12,7 @@ export class ProblemToolRegistry extends ToolRegistry {
protected registerCommon(): void {
// Daily challenge tool
this.server.tool(
- "leetcode_daily_challenge",
+ "get_daily_challenge",
"Retrieves today's LeetCode Daily Challenge problem with complete details, including problem description, constraints, and examples",
{},
async () => {
@@ -33,8 +33,8 @@ export class ProblemToolRegistry extends ToolRegistry {
// Problem details tool
this.server.tool(
- "leetcode_problem",
- "Retrieves comprehensive details about a specific LeetCode problem, including its description, examples, constraints, and related information",
+ "get_problem",
+ "Retrieves details about a specific LeetCode problem, including its description, examples, constraints, and related information",
{
titleSlug: z
.string()
@@ -43,7 +43,10 @@ export class ProblemToolRegistry extends ToolRegistry {
)
},
async ({ titleSlug }) => {
- const data = await this.leetcodeService.fetchProblem(titleSlug);
+ const data =
+ await this.leetcodeService.fetchProblemSimplified(
+ titleSlug
+ );
return {
content: [
{
@@ -60,7 +63,7 @@ export class ProblemToolRegistry extends ToolRegistry {
// Search problems tool
this.server.tool(
- "leetcode_search_problems",
+ "search_problems",
"Searches for LeetCode problems based on multiple filter criteria including categories, tags, difficulty levels, and keywords, with pagination support",
{
category: z
diff --git a/src/mcp/tools/solution-tools.ts b/src/mcp/tools/solution-tools.ts
index c2566cc..ac001b4 100644
--- a/src/mcp/tools/solution-tools.ts
+++ b/src/mcp/tools/solution-tools.ts
@@ -5,52 +5,52 @@ import { ToolRegistry } from "./tool-registry.js";
/**
* Solution tool registry class that handles registration of LeetCode solution-related tools.
- * This class manages tools for accessing solution articles, filtering solutions, and reading solution details.
+ * This class manages tools for accessing solutions, filtering solutions, and reading solution details.
*/
export class SolutionToolRegistry extends ToolRegistry {
protected registerGlobal(): void {
- // Solution articles listing tool (Global-specific)
+ // Problem solutions listing tool (Global-specific)
this.server.tool(
- "leetcode_solution_article_list",
- "Retrieves a list of community solution articles for a specific LeetCode problem, including only metadata like topicId. To view the full content of a solution article, use the 'leetcode_solution_article' tool with the topicId returned by this tool.",
+ "list_problem_solutions",
+ "Retrieves a list of community solutions for a specific LeetCode problem, including only metadata like topicId. To view the full content of a solution, use the 'get_problem_solution' tool with the topicId returned by this tool.",
{
questionSlug: z
.string()
.describe(
- "The URL slug/identifier of the problem to retrieve solution articles for (e.g., 'two-sum', 'add-two-numbers'). This is the same string that appears in the LeetCode problem URL after '/problems/'"
+ "The URL slug/identifier of the problem to retrieve solutions for (e.g., 'two-sum', 'add-two-numbers'). This is the same string that appears in the LeetCode problem URL after '/problems/'"
),
limit: z
.number()
.optional()
- .default(5)
+ .default(10)
.describe(
- "Maximum number of solution articles to return per request. Used for pagination and controlling response size. Default is 20 if not specified. Must be a positive integer."
+ "Maximum number of solutions to return per request. Used for pagination and controlling response size. Default is 20 if not specified. Must be a positive integer."
),
skip: z
.number()
.optional()
.describe(
- "Number of solution articles to skip before starting to collect results. Used in conjunction with 'limit' for implementing pagination. Default is 0 if not specified. Must be a non-negative integer."
+ "Number of solutions to skip before starting to collect results. Used in conjunction with 'limit' for implementing pagination. Default is 0 if not specified. Must be a non-negative integer."
),
orderBy: z
.enum(["HOT", " MOST_RECENT", "MOST_VOTES"])
.default("HOT")
.optional()
.describe(
- "Sorting criteria for the returned solution articles. 'DEFAULT' sorts by LeetCode's default algorithm (typically a combination of recency and popularity), 'MOST_VOTES' sorts by the number of upvotes (highest first), and 'MOST_RECENT' sorts by publication date (newest first)."
+ "Sorting criteria for the returned solutions. 'DEFAULT' sorts by LeetCode's default algorithm (typically a combination of recency and popularity), 'MOST_VOTES' sorts by the number of upvotes (highest first), and 'MOST_RECENT' sorts by publication date (newest first)."
),
userInput: z
.string()
.optional()
.describe(
- "Search term to filter solution articles by title, content, or author name. Case insensitive. Useful for finding specific approaches or algorithms mentioned in solutions."
+ "Search term to filter solutions by title, content, or author name. Case insensitive. Useful for finding specific approaches or algorithms mentioned in solutions."
),
tagSlugs: z
.array(z.string())
.optional()
.default([])
.describe(
- "Array of tag identifiers to filter solution articles by programming languages (e.g., 'python', 'java') or problem algorithm/data-structure tags (e.g., 'dynamic-programming', 'recursion'). Only articles tagged with at least one of the specified tags will be returned."
+ "Array of tag identifiers to filter solutions by programming languages (e.g., 'python', 'java') or problem algorithm/data-structure tags (e.g., 'dynamic-programming', 'recursion'). Only solutions tagged with at least one of the specified tags will be returned."
)
},
async ({
@@ -93,7 +93,7 @@ export class SolutionToolRegistry extends ToolRegistry {
{
type: "text",
text: JSON.stringify({
- error: "Failed to fetch solution articles",
+ error: "Failed to fetch solutions",
message: error.message
})
}
@@ -105,13 +105,13 @@ export class SolutionToolRegistry extends ToolRegistry {
// Solution article detail tool (Global-specific)
this.server.tool(
- "leetcode_solution_article",
- "Retrieves the complete content and metadata of a specific solution article, including the full article text, author information, and related navigation links",
+ "get_problem_solution",
+ "Retrieves the complete content and metadata of a specific solution, including the full article text, author information, and related navigation links",
{
topicId: z
.string()
.describe(
- "The unique topic ID of the solution article to retrieve. This ID can be obtained from the 'topicId' field in the response of the 'leetcode_solution_article_list' tool. Format is typically a string of numbers and letters that uniquely identifies the solution article in LeetCode's database."
+ "The unique topic ID of the solution to retrieve. This ID can be obtained from the 'topicId' field in the response of the 'list_problem_solutions' tool. Format is typically a string of numbers and letters that uniquely identifies the solution in LeetCode's database."
)
},
async ({ topicId }) => {
@@ -138,7 +138,7 @@ export class SolutionToolRegistry extends ToolRegistry {
{
type: "text",
text: JSON.stringify({
- error: "Failed to fetch solution article detail",
+ error: "Failed to fetch solution detail",
message: error.message
})
}
@@ -150,29 +150,29 @@ export class SolutionToolRegistry extends ToolRegistry {
}
protected registerChina(): void {
- // Solution articles listing tool (CN-specific)
+ // Problem solutions listing tool (CN-specific)
this.server.tool(
- "leetcode_solution_article_list",
- "Retrieves a list of community solution articles for a specific LeetCode problem, including only metadata like article slug. To view the full content of a solution article, use the 'leetcode_solution_article' tool with the slug returned by this tool.",
+ "list_problem_solutions",
+ "Retrieves a list of community solutions for a specific LeetCode problem, including only metadata like article slug. To view the full content of a solution, use the 'get_problem_solution' tool with the slug returned by this tool.",
{
questionSlug: z
.string()
.describe(
- "The URL slug/identifier of the problem to retrieve solution articles for (e.g., 'two-sum', 'add-two-numbers'). This is the same string that appears in the LeetCode problem URL after '/problems/'"
+ "The URL slug/identifier of the problem to retrieve solutions for (e.g., 'two-sum', 'add-two-numbers'). This is the same string that appears in the LeetCode problem URL after '/problems/'"
),
limit: z
.number()
.min(1)
.optional()
- .default(20)
+ .default(10)
.describe(
- "Maximum number of solution articles to return per request. Used for pagination and controlling response size. Default is 20 if not specified. Must be a positive integer. If not provided or set to a very large number, the system may still apply internal limits."
+ "Maximum number of solutions to return per request. Used for pagination and controlling response size. Default is 20 if not specified. Must be a positive integer. If not provided or set to a very large number, the system may still apply internal limits."
),
skip: z
.number()
.optional()
.describe(
- "Number of solution articles to skip before starting to collect results. Used in conjunction with 'limit' for implementing pagination. Default is 0 if not specified. Must be a non-negative integer."
+ "Number of solutions to skip before starting to collect results. Used in conjunction with 'limit' for implementing pagination. Default is 0 if not specified. Must be a non-negative integer."
),
orderBy: z
.enum([
@@ -185,20 +185,20 @@ export class SolutionToolRegistry extends ToolRegistry {
.default("DEFAULT")
.optional()
.describe(
- "Sorting criteria for the returned solution articles. 'DEFAULT' uses the default algorithm, 'MOST_UPVOTE' sorts by the number of upvotes (highest first), 'HOT' prioritizes trending articles with recent engagement, 'NEWEST_TO_OLDEST' sorts by publication date (newest first), and 'OLDEST_TO_NEWEST' sorts by publication date (oldest first)."
+ "Sorting criteria for the returned solutions. 'DEFAULT' uses the default algorithm, 'MOST_UPVOTE' sorts by the number of upvotes (highest first), 'HOT' prioritizes trending solutions with recent engagement, 'NEWEST_TO_OLDEST' sorts by publication date (newest first), and 'OLDEST_TO_NEWEST' sorts by publication date (oldest first)."
),
userInput: z
.string()
.optional()
.describe(
- "Search term to filter solution articles by title, content, or author name. Case insensitive. Useful for finding specific approaches or algorithms mentioned in solutions."
+ "Search term to filter solutions by title, content, or author name. Case insensitive. Useful for finding specific approaches or algorithms mentioned in solutions."
),
tagSlugs: z
.array(z.string())
.optional()
.default([])
.describe(
- "Array of tag identifiers to filter solution articles by programming languages (e.g., 'python', 'java') or problem algorithm/data-structure approaches (e.g., 'dynamic-programming', 'recursion'). Only articles tagged with at least one of the specified tags will be returned."
+ "Array of tag identifiers to filter solutions by programming languages (e.g., 'python', 'java') or problem algorithm/data-structure approaches (e.g., 'dynamic-programming', 'recursion'). Only solutions tagged with at least one of the specified tags will be returned."
)
},
async ({
@@ -241,7 +241,7 @@ export class SolutionToolRegistry extends ToolRegistry {
{
type: "text",
text: JSON.stringify({
- error: "Failed to fetch solution articles",
+ error: "Failed to fetch solutions",
message: error.message
})
}
@@ -253,13 +253,13 @@ export class SolutionToolRegistry extends ToolRegistry {
// Solution article detail tool (CN-specific)
this.server.tool(
- "leetcode_solution_article",
- "Retrieves the complete content and metadata of a specific solution article, including the full article text, author information, and related navigation links",
+ "get_problem_solution",
+ "Retrieves the complete content and metadata of a specific solution, including the full article text, author information, and related navigation links",
{
slug: z
.string()
.describe(
- "The unique slug/identifier of the solution article to retrieve. This slug can be obtained from the 'node.slug' field in the response of the 'leetcode_solution_article_list' tool. A URL-friendly slug string to identify solution articles."
+ "The unique slug/identifier of the solution to retrieve. This slug can be obtained from the 'node.slug' field in the response of the 'list_problem_solutions' tool. A URL-friendly slug string to identify solutions."
)
},
async ({ slug }) => {
@@ -286,7 +286,7 @@ export class SolutionToolRegistry extends ToolRegistry {
{
type: "text",
text: JSON.stringify({
- error: "Failed to fetch solution article detail",
+ error: "Failed to fetch solution detail",
message: error.message
})
}
diff --git a/src/mcp/tools/user-tools.ts b/src/mcp/tools/user-tools.ts
index 6aa4817..f126d15 100644
--- a/src/mcp/tools/user-tools.ts
+++ b/src/mcp/tools/user-tools.ts
@@ -12,8 +12,8 @@ export class UserToolRegistry extends ToolRegistry {
protected registerCommon(): void {
// User profile tool
this.server.tool(
- "leetcode_user_profile",
- "Retrieves comprehensive profile information about a LeetCode user, including user stats, solved problems, and profile details",
+ "get_user_profile",
+ "Retrieves profile information about a LeetCode user, including user stats, solved problems, and profile details",
{
username: z
.string()
@@ -42,7 +42,7 @@ export class UserToolRegistry extends ToolRegistry {
protected registerGlobal(): void {
// Recent submissions tool (Global-specific)
this.server.tool(
- "leetcode_recent_submissions",
+ "get_recent_submissions",
"Retrieves a user's recent submissions on LeetCode Global, including both accepted and failed submissions with detailed metadata",
{
username: z
@@ -53,6 +53,7 @@ export class UserToolRegistry extends ToolRegistry {
limit: z
.number()
.optional()
+ .default(10)
.describe(
"Maximum number of submissions to return (optional, defaults to server-defined limit)"
)
@@ -93,7 +94,7 @@ export class UserToolRegistry extends ToolRegistry {
// Recent accepted submissions tool (Global-specific)
this.server.tool(
- "leetcode_recent_ac_submissions",
+ "get_recent_ac_submissions",
"Retrieves a user's recent accepted (AC) submissions on LeetCode Global, focusing only on successfully completed problems",
{
username: z
@@ -104,6 +105,7 @@ export class UserToolRegistry extends ToolRegistry {
limit: z
.number()
.optional()
+ .default(10)
.describe(
"Maximum number of accepted submissions to return (optional, defaults to server-defined limit)"
)
@@ -146,7 +148,7 @@ export class UserToolRegistry extends ToolRegistry {
protected registerChina(): void {
// User recent AC submissions tool (CN-specific)
this.server.tool(
- "leetcode_user_recent_ac_submissions",
+ "get_recent_ac_submissions",
"Retrieves a user's recent accepted (AC) submissions on LeetCode China, with details about each successfully solved problem",
{
username: z
@@ -157,6 +159,7 @@ export class UserToolRegistry extends ToolRegistry {
limit: z
.number()
.optional()
+ .default(10)
.describe(
"Maximum number of accepted submissions to return (optional, defaults to server-defined limit)"
)
@@ -202,8 +205,8 @@ export class UserToolRegistry extends ToolRegistry {
protected registerAuthenticatedCommon(): void {
// User status tool (requires authentication)
this.server.tool(
- "leetcode_user_status",
- "Retrieves the current authenticated user's status on LeetCode, including login status, premium membership details, and user information (requires authentication)",
+ "get_user_status",
+ "Retrieves the current user's status on LeetCode, including login status, premium membership details, and user information (requires authentication)",
async () => {
try {
const status = await this.leetcodeService.fetchUserStatus();
@@ -232,7 +235,7 @@ export class UserToolRegistry extends ToolRegistry {
// Submission detail tool (requires authentication)
this.server.tool(
- "leetcode_problem_submission_detail",
+ "get_problem_submission_report",
"Retrieves detailed information about a specific LeetCode submission by its ID, including source code, runtime stats, and test results (requires authentication)",
{
id: z
@@ -273,8 +276,8 @@ export class UserToolRegistry extends ToolRegistry {
// User progress questions tool (requires authentication)
this.server.tool(
- "leetcode_user_progress_questions",
- "Retrieves the authenticated user's problem-solving status with filtering options, including detailed solution history for attempted or solved questions (requires authentication)",
+ "get_problem_progress",
+ "Retrieves the current user's problem-solving status with filtering options, including detailed solution history for attempted or solved questions (requires authentication)",
{
offset: z
.number()
@@ -284,7 +287,7 @@ export class UserToolRegistry extends ToolRegistry {
),
limit: z
.number()
- .default(200)
+ .default(100)
.describe(
"The maximum number of questions to return in a single request"
),
@@ -348,16 +351,18 @@ export class UserToolRegistry extends ToolRegistry {
protected registerAuthenticatedGlobal(): void {
// Global user submissions tool (requires authentication)
this.server.tool(
- "leetcode_user_all_submissions",
- "Retrieves a paginated list of the authenticated user's submissions for a specific problem or all problems on LeetCode Global, with detailed submission metadata (requires authentication)",
+ "get_all_submissions",
+ "Retrieves a paginated list of the current user's submissions for a specific problem or all problems on LeetCode Global, with detailed submission metadata (requires authentication)",
{
limit: z
.number()
+ .default(20)
.describe(
"Maximum number of submissions to return per page (typically defaults to 20 if not specified)"
),
offset: z
.number()
+ .default(0)
.describe(
"Number of submissions to skip for pagination purposes"
),
@@ -410,16 +415,18 @@ export class UserToolRegistry extends ToolRegistry {
protected registerAuthenticatedChina(): void {
// China user submissions tool (requires authentication, enhanced version with more parameters)
this.server.tool(
- "leetcode_user_all_submissions",
- "Retrieves a comprehensive, paginated list of the authenticated user's submissions on LeetCode China with extensive filtering options, including pagination support via lastKey parameter (requires authentication)",
+ "get_all_submissions",
+ "Retrieves a list of the current user's submissions on LeetCode China with extensive filtering options, including pagination support via lastKey parameter (requires authentication)",
{
limit: z
.number()
+ .default(20)
.describe(
"Maximum number of submissions to return per page (typically defaults to 20 if not specified)"
),
offset: z
.number()
+ .default(0)
.describe(
"Number of submissions to skip for pagination purposes"
),
diff --git a/src/utils/logger.ts b/src/utils/logger.ts
new file mode 100644
index 0000000..672fd54
--- /dev/null
+++ b/src/utils/logger.ts
@@ -0,0 +1,13 @@
+import { pino } from "pino";
+
+const logger = pino({
+ level: "info",
+ formatters: {
+ level: (label: string) => ({ level: label.toUpperCase() })
+ },
+ timestamp: () => `,"timestamp":"${new Date().toISOString()}"`,
+ messageKey: "message",
+ nestedKey: "payload"
+});
+
+export default logger;
diff --git a/tests/services/problem-services.test.ts b/tests/services/problem-services.test.ts
new file mode 100644
index 0000000..863dd92
--- /dev/null
+++ b/tests/services/problem-services.test.ts
@@ -0,0 +1,102 @@
+import { Credential, LeetCode, LeetCodeCN } from "leetcode-query";
+import { describe, expect, it } from "vitest";
+import { LeetCodeCNService } from "../../src/leetcode/leetcode-cn-service.js";
+import { LeetCodeGlobalService } from "../../src/leetcode/leetcode-global-service.js";
+import logger from "../../src/utils/logger.js";
+
+describe("LeetCode Problem Services", () => {
+ describe("LeetCodeGlobalService", () => {
+ const credential = new Credential();
+ const leetCodeApi = new LeetCode(credential);
+ const service = new LeetCodeGlobalService(leetCodeApi, credential);
+
+ describe("fetchDailyChallenge", () => {
+ it("should return daily challenge data", async () => {
+ const result = await service.fetchDailyChallenge();
+
+ expect(result).toBeDefined();
+ expect(result.question).toBeDefined();
+ expect(result.question.title).toBeDefined();
+ expect(result.question.questionId).toBeDefined();
+ }, 30000);
+ });
+
+ describe("fetchProblemSimplified", () => {
+ it("should return simplified problem data", async () => {
+ const titleSlug = "two-sum";
+ const result = await service.fetchProblemSimplified(titleSlug);
+
+ expect(result).toBeDefined();
+ expect(result.titleSlug).toBe(titleSlug);
+ expect(result.title).toBe("Two Sum");
+ expect(result.questionId).toBeDefined();
+ expect(result.content).toBeDefined();
+ expect(result.difficulty).toBeDefined();
+ expect(Array.isArray(result.topicTags)).toBe(true);
+ expect(Array.isArray(result.codeSnippets)).toBe(true);
+ expect(result.hints).toBeDefined();
+
+ if (result.similarQuestions) {
+ expect(Array.isArray(result.similarQuestions)).toBe(true);
+ }
+ }, 30000);
+
+ it("should handle invalid problems correctly", async () => {
+ const invalidSlug = `invalid-problem-${Date.now()}`;
+ await expect(
+ service.fetchProblemSimplified(invalidSlug)
+ ).rejects.toThrow(`Problem ${invalidSlug} not found`);
+ }, 30000);
+ });
+ });
+
+ describe("LeetCodeCNService", () => {
+ const credential = new Credential();
+ const leetCodeApi = new LeetCodeCN(credential);
+ const service = new LeetCodeCNService(leetCodeApi, credential);
+
+ describe("fetchDailyChallenge", () => {
+ it("should return daily challenge data", async () => {
+ service.fetchDailyChallenge().then((result) => {
+ expect(result).toBeDefined();
+ expect(result.question).toBeDefined();
+ expect(result.question.title).toBeDefined();
+ expect(result.question.questionId).toBeDefined();
+ });
+ }, 30000);
+ });
+
+ describe("fetchProblemSimplified", () => {
+ it("should return simplified problem data", async () => {
+ const titleSlug = "two-sum";
+ const result = await service.fetchProblemSimplified(titleSlug);
+
+ expect(result).toBeDefined();
+ expect(result.titleSlug).toBe(titleSlug);
+ expect(result.questionId).toBeDefined();
+ expect(result.title).toBeDefined();
+ expect(result.content).toBeDefined();
+ expect(result.difficulty).toBeDefined();
+ expect(Array.isArray(result.topicTags)).toBe(true);
+ expect(Array.isArray(result.codeSnippets)).toBe(true);
+ expect(result.hints).toBeDefined();
+
+ if (result.similarQuestions) {
+ expect(Array.isArray(result.similarQuestions)).toBe(true);
+ }
+
+ logger.info(
+ `Successfully fetched simplified data for ${titleSlug}`
+ );
+ }, 30000);
+
+ it("should handle invalid problems correctly", async () => {
+ const invalidSlug = `invalid-problem-${Date.now()}`;
+
+ await expect(
+ service.fetchProblemSimplified(invalidSlug)
+ ).rejects.toBeDefined();
+ }, 30000);
+ });
+ });
+});
diff --git a/tests/services/solution-services.test.ts b/tests/services/solution-services.test.ts
index 74cc8ae..3e90ded 100644
--- a/tests/services/solution-services.test.ts
+++ b/tests/services/solution-services.test.ts
@@ -2,6 +2,7 @@ import { Credential, LeetCode, LeetCodeCN } from "leetcode-query";
import { describe, expect, it } from "vitest";
import { LeetCodeCNService } from "../../src/leetcode/leetcode-cn-service.js";
import { LeetCodeGlobalService } from "../../src/leetcode/leetcode-global-service.js";
+import logger from "../../src/utils/logger.js";
describe("LeetCode Solution Services", () => {
describe("LeetCodeGlobalService", () => {
@@ -10,7 +11,7 @@ describe("LeetCode Solution Services", () => {
const service = new LeetCodeGlobalService(leetCodeApi, credential);
describe("fetchQuestionSolutionArticles", () => {
- it("should fetch solution articles with default options", async () => {
+ it("should fetch solutions with default options", async () => {
const questionSlug = "two-sum";
const result = await service.fetchQuestionSolutionArticles(
@@ -23,7 +24,7 @@ describe("LeetCode Solution Services", () => {
expect(Array.isArray(result.articles)).toBe(true);
}, 30000);
- it("should fetch solution articles with custom options", async () => {
+ it("should fetch solutions with custom options", async () => {
const result = await service.fetchQuestionSolutionArticles(
"two-sum",
{
@@ -43,17 +44,18 @@ describe("LeetCode Solution Services", () => {
it("should handle errors properly for invalid slugs", async () => {
const invalidSlug = `invalid-slug-${Date.now()}`;
- try {
+ const data =
await service.fetchQuestionSolutionArticles(invalidSlug);
- expect(true).toBe(false);
- } catch (error) {
- expect(error).toBeDefined();
- }
+
+ expect(data).toBeDefined();
+ expect(data.totalNum).toBe(0);
+ expect(data.articles).toBeDefined();
+ expect(data.articles.length).toBe(0);
}, 30000);
});
describe("fetchSolutionArticleDetail", () => {
- it("should fetch solution article detail correctly if topicId exists", async () => {
+ it("should fetch solution detail correctly if topicId exists", async () => {
const solutionsResult =
await service.fetchQuestionSolutionArticles("two-sum", {
limit: 1
@@ -63,19 +65,18 @@ describe("LeetCode Solution Services", () => {
!solutionsResult.edges ||
solutionsResult.edges.length === 0
) {
- console.log(
+ logger.info(
"No solutions found for two-sum, skipping test"
);
return;
}
const topicId = solutionsResult.edges[0].node.topic.id;
- console.log(`Using topicId: ${topicId} for detail fetch`);
+ logger.info(`Using topicId: ${topicId} for detail fetch`);
const result =
await service.fetchSolutionArticleDetail(topicId);
- expect(result).toBeDefined();
expect(result).toBeDefined();
expect(result.title).toBeDefined();
expect(result.content).toBeDefined();
@@ -83,13 +84,9 @@ describe("LeetCode Solution Services", () => {
it("should handle errors properly for invalid topicIds", async () => {
const invalidTopicId = `invalid-topic-${Date.now()}`;
-
- try {
- await service.fetchSolutionArticleDetail(invalidTopicId);
- expect(true).toBe(false);
- } catch (error) {
- expect(error).toBeDefined();
- }
+ await expect(
+ service.fetchSolutionArticleDetail(invalidTopicId)
+ ).resolves.toBeNull();
}, 30000);
});
});
@@ -100,7 +97,7 @@ describe("LeetCode Solution Services", () => {
const service = new LeetCodeCNService(leetCodeApi, credential);
describe("fetchQuestionSolutionArticles", () => {
- it("should fetch solution articles with default options", async () => {
+ it("should fetch solutions with default options", async () => {
const questionSlug = "two-sum";
const result =
@@ -110,12 +107,12 @@ describe("LeetCode Solution Services", () => {
expect(result.totalNum).toBeTypeOf("number");
expect(Array.isArray(result.articles)).toBe(true);
- console.log(
+ logger.info(
`Found ${result.totalNum} solutions for ${questionSlug} on CN`
);
}, 30000);
- it("should fetch solution articles with custom options", async () => {
+ it("should fetch solutions with custom options", async () => {
const result = await service.fetchQuestionSolutionArticles(
"two-sum",
{
@@ -134,18 +131,18 @@ describe("LeetCode Solution Services", () => {
it("should handle errors properly for invalid slugs", async () => {
const invalidSlug = `invalid-slug-${Date.now()}`;
-
- try {
+ const data =
await service.fetchQuestionSolutionArticles(invalidSlug);
- expect(true).toBe(false);
- } catch (error) {
- expect(error).toBeDefined();
- }
+
+ expect(data).toBeDefined();
+ expect(data.totalNum).toBe(0);
+ expect(data.articles).toBeDefined();
+ expect(data.articles.length).toBe(0);
}, 30000);
});
describe("fetchSolutionArticleDetail", () => {
- it("should fetch solution article detail correctly if slug exists", async () => {
+ it("should fetch solution detail correctly if slug exists", async () => {
const solutionsResult =
await service.fetchQuestionSolutionArticles("two-sum", {
limit: 1
@@ -155,14 +152,14 @@ describe("LeetCode Solution Services", () => {
!solutionsResult.edges ||
solutionsResult.edges.length === 0
) {
- console.log(
+ logger.info(
"No solutions found for two-sum on CN, skipping test"
);
return;
}
const slug = solutionsResult.edges[0].node.slug;
- console.log(`Using slug: ${slug} for detail fetch on CN`);
+ logger.info(`Using slug: ${slug} for detail fetch on CN`);
const result = await service.fetchSolutionArticleDetail(slug);
@@ -174,12 +171,9 @@ describe("LeetCode Solution Services", () => {
it("should handle errors properly for invalid slugs", async () => {
const invalidSlug = `invalid-slug-${Date.now()}`;
- try {
- await service.fetchSolutionArticleDetail(invalidSlug);
- expect(true).toBe(false);
- } catch (error) {
- expect(error).toBeDefined();
- }
+ await expect(
+ service.fetchSolutionArticleDetail(invalidSlug)
+ ).resolves.toBeNull();
}, 30000);
});
});