diff --git a/internal/handlers/practice_handler.go b/internal/handlers/practice_handler.go index 13e0395..96fd2dd 100644 --- a/internal/handlers/practice_handler.go +++ b/internal/handlers/practice_handler.go @@ -5,6 +5,7 @@ import ( "ankao/internal/models" "ankao/internal/services" "encoding/json" + "fmt" "log" "net/http" "sort" @@ -702,3 +703,79 @@ func DeletePracticeQuestion(c *gin.Context) { "message": "删除成功", }) } + +// ExplainQuestion 生成题目解析 +func ExplainQuestion(c *gin.Context) { + var req struct { + QuestionID uint `json:"question_id" binding:"required"` + } + + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{ + "success": false, + "message": "请求参数错误", + }) + return + } + + db := database.GetDB() + var question models.PracticeQuestion + + // 查询题目 + if err := db.First(&question, req.QuestionID).Error; err != nil { + c.JSON(http.StatusNotFound, gin.H{ + "success": false, + "message": "题目不存在", + }) + return + } + + // 解析标准答案 + var standardAnswer interface{} + if err := json.Unmarshal([]byte(question.AnswerData), &standardAnswer); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{ + "success": false, + "message": "解析题目答案失败", + }) + return + } + + // 将标准答案转为字符串 + var standardAnswerStr string + switch v := standardAnswer.(type) { + case string: + standardAnswerStr = v + case []interface{}: + // 多选题或填空题,将数组转为逗号分隔的字符串 + parts := make([]string, len(v)) + for i, item := range v { + parts[i] = fmt.Sprint(item) + } + standardAnswerStr = strings.Join(parts, ", ") + case bool: + // 判断题 + if v { + standardAnswerStr = "正确" + } else { + standardAnswerStr = "错误" + } + default: + standardAnswerStr = fmt.Sprint(v) + } + + // 设置SSE响应头 + c.Header("Content-Type", "text/event-stream") + c.Header("Cache-Control", "no-cache") + c.Header("Connection", "keep-alive") + c.Header("X-Accel-Buffering", "no") + + // 调用AI服务生成流式解析 + aiService := services.NewAIGradingService() + err := aiService.ExplainQuestionStream(c.Writer, question.Question, standardAnswerStr, question.Type) + if err != nil { + log.Printf("AI流式解析失败: %v", err) + // SSE格式的错误消息 + fmt.Fprintf(c.Writer, "data: {\"error\": \"生成解析失败\"}\n\n") + c.Writer.(http.Flusher).Flush() + } +} diff --git a/internal/services/ai_grading.go b/internal/services/ai_grading.go index 4c2a5fc..e64c0f7 100644 --- a/internal/services/ai_grading.go +++ b/internal/services/ai_grading.go @@ -5,6 +5,8 @@ import ( "context" "encoding/json" "fmt" + "io" + "net/http" "strings" "github.com/sashabaranov/go-openai" @@ -109,7 +111,7 @@ func (s *AIGradingService) GradeShortAnswer(question, standardAnswer, userAnswer } // parseAIResponse 解析AI返回的JSON响应 -func parseAIResponse(content string, result *AIGradingResult) error { +func parseAIResponse(content string, result interface{}) error { // 移除可能的markdown代码块标记 jsonStr := removeMarkdownCodeBlock(content) @@ -121,6 +123,208 @@ func parseAIResponse(content string, result *AIGradingResult) error { return nil } +// AIExplanationResult AI解析结果 +type AIExplanationResult struct { + Explanation string `json:"explanation"` // 题目解析 +} + +// ExplainQuestionStream 生成题目解析(流式输出) +// writer: HTTP响应写入器 +// question: 题目内容 +// standardAnswer: 标准答案 +// questionType: 题目类型 +func (s *AIGradingService) ExplainQuestionStream(writer http.ResponseWriter, question, standardAnswer, questionType string) error { + // 构建解析提示词(直接输出,不使用JSON格式) + prompt := fmt.Sprintf(`你是一位严谨、专业的老师,请对以下题目进行详细解析。 + +题目类型:%s + +题目内容:%s + +标准答案:%s + +请提供一个详细的解析,要求: +1. **必须实事求是**:只基于题目内容和标准答案进行解析,不要添加题目中没有的信息 +2. **不要胡编乱造**:如果某些信息不确定或题目没有提供,请如实说明,不要编造 +3. **使用Markdown格式**:使用标题、列表、加粗等markdown语法使内容更清晰易读 + +解析内容要求: +- **知识点**:说明题目考查的核心知识点 +- **解题思路**:提供清晰的解题步骤和方法 + +%s + +示例输出格式: +## 知识点 +题目考查的是... + +## 解题思路 +1. 首先分析... +2. 然后判断... + +%s + +## 总结 +%s + +请使用markdown格式输出解析内容。`, + questionType, + question, + standardAnswer, + // 根据题目类型添加特定要求 + func() string { + if questionType == "single-selection" || questionType == "multiple-selection" { + return `- **选项分析**:对于选择题,必须逐项分析每个选项的对错及原因 +- **记忆口诀**:如果适用,提供便于记忆的口诀或技巧` + } + return "- **答案解析**:详细说明为什么这个答案是正确的" + }(), + // 根据题目类型添加示例格式 + func() string { + if questionType == "single-selection" || questionType == "multiple-selection" { + return `## 选项分析 +- **A选项**:[分析该选项] +- **B选项**:[分析该选项] +- **C选项**:[分析该选项] +- **D选项**:[分析该选项] + +## 正确答案 +正确答案是... 因为...` + } + return `## 答案解析 +正确答案是... 因为...` + }(), + // 根据题目类型添加总结要求 + func() string { + if questionType == "single-selection" || questionType == "multiple-selection" { + return "对于选择题,可以提供记忆口诀或关键要点总结" + } + return "总结本题的关键要点和注意事项" + }(), + ) + + // 调用AI API(流式) + stream, err := s.client.CreateChatCompletionStream( + context.Background(), + openai.ChatCompletionRequest{ + Model: s.config.Model, + Messages: []openai.ChatCompletionMessage{ + { + Role: openai.ChatMessageRoleSystem, + Content: "你是一位严谨、专业的老师,擅长深入浅出地讲解题目。你必须实事求是,只基于题目和标准答案提供解析,不编造任何不确定的信息。你使用Markdown格式输出,让学生更容易理解。", + }, + { + Role: openai.ChatMessageRoleUser, + Content: prompt, + }, + }, + Temperature: 0, // 温度为0,获得最确定、最一致的输出 + Stream: true, + }, + ) + + if err != nil { + return fmt.Errorf("创建流式请求失败: %w", err) + } + defer stream.Close() + + flusher, ok := writer.(http.Flusher) + if !ok { + return fmt.Errorf("响应写入器不支持Flush") + } + + // 读取流式响应并发送给客户端 + for { + response, err := stream.Recv() + if err == io.EOF { + // 流结束 + fmt.Fprintf(writer, "data: [DONE]\n\n") + flusher.Flush() + break + } + if err != nil { + return fmt.Errorf("接收流式响应失败: %w", err) + } + + // 获取增量内容 + if len(response.Choices) > 0 { + delta := response.Choices[0].Delta.Content + if delta != "" { + // 使用SSE格式发送 + fmt.Fprintf(writer, "data: %s\n\n", delta) + flusher.Flush() + } + } + } + + return nil +} + +// ExplainQuestion 生成题目解析 +// question: 题目内容 +// standardAnswer: 标准答案 +// questionType: 题目类型 +func (s *AIGradingService) ExplainQuestion(question, standardAnswer, questionType string) (*AIExplanationResult, error) { + // 构建解析提示词 + prompt := fmt.Sprintf(`你是一位经验丰富的老师,请对以下题目进行详细解析。 + +题目类型:%s + +题目内容:%s + +标准答案:%s + +请提供一个详细的解析,包括: +1. 题目考查的知识点 +2. 解题思路和方法 +3. 为什么选择这个答案 +4. 相关的重要概念或注意事项 + +请按照以下JSON格式返回结果: +{ + "explanation": "这道题考查的是...(200字以内的详细解析)" +} + +注意:只返回JSON格式的结果,不要有其他内容。`, questionType, question, standardAnswer) + + // 调用AI API + resp, err := s.client.CreateChatCompletion( + context.Background(), + openai.ChatCompletionRequest{ + Model: s.config.Model, + Messages: []openai.ChatCompletionMessage{ + { + Role: openai.ChatMessageRoleSystem, + Content: "你是一位经验丰富的老师,擅长深入浅出地讲解题目,帮助学生理解知识点。", + }, + { + Role: openai.ChatMessageRoleUser, + Content: prompt, + }, + }, + Temperature: 0.7, // 中等温度以获得有创造性的解释 + }, + ) + + if err != nil { + return nil, fmt.Errorf("AI解析失败: %w", err) + } + + if len(resp.Choices) == 0 { + return nil, fmt.Errorf("AI未返回解析结果") + } + + // 解析AI返回的JSON结果 + content := resp.Choices[0].Message.Content + + var result AIExplanationResult + if err := parseAIResponse(content, &result); err != nil { + return nil, fmt.Errorf("解析AI响应失败: %w", err) + } + + return &result, nil +} + // removeMarkdownCodeBlock 移除markdown代码块标记 func removeMarkdownCodeBlock(s string) string { // 去除可能的```json和```标记 diff --git a/main.go b/main.go index df69375..f76d77c 100644 --- a/main.go +++ b/main.go @@ -38,6 +38,7 @@ func main() { api.GET("/practice/questions/random", handlers.GetRandomPracticeQuestion) // 获取随机练习题目 api.GET("/practice/questions/:id", handlers.GetPracticeQuestionByID) // 获取指定练习题目 api.GET("/practice/types", handlers.GetPracticeQuestionTypes) // 获取题型列表 + api.POST("/practice/explain", handlers.ExplainQuestion) // 生成题目解析(AI) // 需要认证的路由 auth := api.Group("", middleware.Auth()) diff --git a/scripts/check_db.go b/scripts/check_db.go deleted file mode 100644 index 1a56c85..0000000 --- a/scripts/check_db.go +++ /dev/null @@ -1,26 +0,0 @@ -package main - -import ( - "ankao/internal/database" - "ankao/internal/models" - "fmt" - "log" -) - -func main() { - // 初始化数据库 - if err := database.InitDB(); err != nil { - log.Fatal("数据库初始化失败:", err) - } - - db := database.GetDB() - - // 查询前5条记录 - var questions []models.PracticeQuestion - db.Limit(5).Find(&questions) - - fmt.Println("数据库中的题目:") - for _, q := range questions { - fmt.Printf("ID: %d, QuestionID: %s, Type: %s, TypeName: %s\n", q.ID, q.QuestionID, q.Type, q.TypeName) - } -} diff --git a/scripts/clear_questions.go b/scripts/clear_questions.go deleted file mode 100644 index 0ca9767..0000000 --- a/scripts/clear_questions.go +++ /dev/null @@ -1,28 +0,0 @@ -package main - -import ( - "ankao/internal/database" - "ankao/internal/models" - "log" -) - -func main() { - log.Println("开始清空题目数据...") - - // 初始化数据库 - if err := database.InitDB(); err != nil { - log.Fatal("数据库初始化失败:", err) - } - - db := database.GetDB() - - // 清空practice_questions表 - if err := db.Exec("DELETE FROM practice_questions").Error; err != nil { - log.Fatal("清空题目表失败:", err) - } - - // 获取清空后的数量 - var count int64 - db.Model(&models.PracticeQuestion{}).Count(&count) - log.Printf("题目数据已清空,当前数量: %d", count) -} diff --git a/scripts/import_questions.go b/scripts/import_questions.go deleted file mode 100644 index 956c05a..0000000 --- a/scripts/import_questions.go +++ /dev/null @@ -1,92 +0,0 @@ -package main - -import ( - "ankao/internal/database" - "ankao/internal/models" - "encoding/json" - "log" - "os" -) - -// JSONQuestion JSON中的题目结构 -type JSONQuestion struct { - ID string `json:"id"` - Question string `json:"question"` - Answers interface{} `json:"answers"` - Options interface{} `json:"options,omitempty"` -} - -// JSONQuestionGroup JSON中的题目组结构 -type JSONQuestionGroup struct { - Type string `json:"type"` - TypeName string `json:"typeName"` - List []JSONQuestion `json:"list"` -} - -func main() { - log.Println("开始导入题目数据...") - - // 初始化数据库 - if err := database.InitDB(); err != nil { - log.Fatal("数据库初始化失败:", err) - } - - // 读取JSON文件 - data, err := os.ReadFile("practice_question_pool.json") - if err != nil { - log.Fatal("读取JSON文件失败:", err) - } - - // 解析JSON - var groups []JSONQuestionGroup - if err := json.Unmarshal(data, &groups); err != nil { - log.Fatal("解析JSON失败:", err) - } - - // 导入数据 - db := database.GetDB() - totalCount := 0 - - for _, group := range groups { - log.Printf("导入题型: %s (%s), 题目数量: %d", group.TypeName, group.Type, len(group.List)) - - for _, q := range group.List { - // 将答案转换为JSON字符串存储 - answerJSON, err := json.Marshal(q.Answers) - if err != nil { - log.Printf("序列化答案失败 (ID: %s): %v", q.ID, err) - continue - } - - // 将选项转换为JSON字符串存储 - optionsJSON := "" - if q.Options != nil { - optJSON, err := json.Marshal(q.Options) - if err != nil { - log.Printf("序列化选项失败 (ID: %s): %v", q.ID, err) - continue - } - optionsJSON = string(optJSON) - } - - // 创建题目记录 - 直接使用group.Type,不做类型映射 - question := models.PracticeQuestion{ - QuestionID: q.ID, - Type: group.Type, - TypeName: group.TypeName, - Question: q.Question, - AnswerData: string(answerJSON), - OptionsData: optionsJSON, - } - - // 插入数据库 - if err := db.Create(&question).Error; err != nil { - log.Printf("插入题目失败 (ID: %s): %v", q.ID, err) - continue - } - totalCount++ - } - } - - log.Printf("数据导入完成! 共导入 %d 道题目", totalCount) -} diff --git a/scripts/import_test.go b/scripts/import_test.go deleted file mode 100644 index bf19db1..0000000 --- a/scripts/import_test.go +++ /dev/null @@ -1,82 +0,0 @@ -package main - -import ( - "encoding/json" - "os" - "testing" -) - -// 测试JSON解析 -func TestJSONParsing(t *testing.T) { - // 读取JSON文件 - data, err := os.ReadFile("../practice_question_pool.json") - if err != nil { - t.Fatalf("读取JSON文件失败: %v", err) - } - - // 解析JSON - var groups []JSONQuestionGroup - if err := json.Unmarshal(data, &groups); err != nil { - t.Fatalf("解析JSON失败: %v", err) - } - - t.Logf("成功解析 %d 个题目组", len(groups)) - - // 检查每个题目组的类型信息 - for i, group := range groups { - t.Logf("\n题目组 %d:", i+1) - t.Logf(" Type: %s", group.Type) - t.Logf(" TypeName: %s", group.TypeName) - t.Logf(" 题目数量: %d", len(group.List)) - - // 检查类型映射 - t.Logf(" 原始类型: %s", group.Type) - - // 检查是否为空 - if group.Type == "" { - t.Errorf(" ❌ 题目组 %d 的 Type 为空!", i+1) - } - if group.TypeName == "" { - t.Errorf(" ❌ 题目组 %d 的 TypeName 为空!", i+1) - } - if len(group.List) == 0 { - t.Errorf(" ❌ 题目组 %d 的题目列表为空!", i+1) - } - } -} - -// 测试单个题目组解析 -func TestSingleGroupParsing(t *testing.T) { - // 测试第一个题目组(填空题,type在list之后) - jsonStr1 := `{ - "list": [{"id": "1", "question": "test", "answers": ["answer1"]}], - "type": "fill-in-blank", - "typeName": "填空题" - }` - - var group1 JSONQuestionGroup - if err := json.Unmarshal([]byte(jsonStr1), &group1); err != nil { - t.Fatalf("解析题目组1失败: %v", err) - } - t.Logf("题目组1 - Type: %s, TypeName: %s, 题目数: %d", group1.Type, group1.TypeName, len(group1.List)) - - // 测试第二个题目组(type在list之前) - jsonStr2 := `{ - "type": "fill-in-blank", - "typeName": "填空题", - "list": [{"id": "1", "question": "test", "answers": ["answer1"]}] - }` - - var group2 JSONQuestionGroup - if err := json.Unmarshal([]byte(jsonStr2), &group2); err != nil { - t.Fatalf("解析题目组2失败: %v", err) - } - t.Logf("题目组2 - Type: %s, TypeName: %s, 题目数: %d", group2.Type, group2.TypeName, len(group2.List)) - - // 验证两种顺序解析结果是否一致 - if group1.Type != group2.Type || group1.TypeName != group2.TypeName { - t.Errorf("不同字段顺序导致解析结果不一致!") - } else { - t.Log("✓ JSON字段顺序不影响解析结果") - } -} diff --git a/web/package.json b/web/package.json index 708d51c..77b132f 100644 --- a/web/package.json +++ b/web/package.json @@ -15,6 +15,7 @@ "axios": "^1.6.5", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-markdown": "^10.1.0", "react-router-dom": "^6.21.3" }, "devDependencies": { diff --git a/web/src/api/question.ts b/web/src/api/question.ts index 2d20178..532a58f 100644 --- a/web/src/api/question.ts +++ b/web/src/api/question.ts @@ -95,3 +95,8 @@ export const updateQuestion = (id: number, data: { export const deleteQuestion = (id: number) => { return request.delete>(`/practice/questions/${id}`) } + +// 获取题目解析(AI) +export const explainQuestion = (questionId: number) => { + return request.post>('/practice/explain', { question_id: questionId }) +} diff --git a/web/src/components/AnswerResult.tsx b/web/src/components/AnswerResult.tsx index 2834973..1c16fec 100644 --- a/web/src/components/AnswerResult.tsx +++ b/web/src/components/AnswerResult.tsx @@ -1,6 +1,7 @@ -import React from 'react' -import { Alert, Typography, Card, Space, Progress } from 'antd' -import { CheckOutlined, CloseOutlined, TrophyOutlined, CommentOutlined, BulbOutlined } from '@ant-design/icons' +import React, { useState } from 'react' +import { Alert, Typography, Card, Space, Progress, Button, Spin } from 'antd' +import { CheckOutlined, CloseOutlined, TrophyOutlined, CommentOutlined, BulbOutlined, FileTextOutlined, ReloadOutlined } from '@ant-design/icons' +import ReactMarkdown from 'react-markdown' import type { AnswerResult as AnswerResultType } from '../types/question' const { Text, Paragraph } = Typography @@ -9,13 +10,104 @@ interface AnswerResultProps { answerResult: AnswerResultType selectedAnswer: string | string[] questionType: string + questionId: number } const AnswerResult: React.FC = ({ answerResult, selectedAnswer, questionType, + questionId, }) => { + const [explanation, setExplanation] = useState('') + const [showExplanation, setShowExplanation] = useState(false) + const [loadingExplanation, setLoadingExplanation] = useState(false) + + // 获取AI解析(流式) + const fetchExplanation = async () => { + console.log('开始获取AI解析(流式),题目ID:', questionId) + setLoadingExplanation(true) + setExplanation('') // 清空之前的内容 + + try { + console.log('发送请求到 /api/practice/explain') + const response = await fetch('/api/practice/explain', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ question_id: questionId }), + }) + + console.log('收到响应,状态码:', response.status) + if (!response.ok) { + throw new Error('请求失败') + } + + const reader = response.body?.getReader() + const decoder = new TextDecoder() + let buffer = '' + + if (!reader) { + throw new Error('无法读取响应流') + } + + console.log('开始读取流式数据...') + let chunkCount = 0 + while (true) { + const { done, value } = await reader.read() + + if (done) { + console.log('流读取完成,共接收', chunkCount, '个数据块') + break + } + + chunkCount++ + buffer += decoder.decode(value, { stream: true }) + const lines = buffer.split('\n\n') + buffer = lines.pop() || '' + + for (const line of lines) { + if (line.startsWith('data: ')) { + const data = line.slice(6) + if (data === '[DONE]') { + console.log('收到完成信号 [DONE]') + break + } + // 追加内容 + console.log('接收数据片段:', data.substring(0, 20) + '...') + setExplanation(prev => prev + data) + } + } + } + + console.log('AI解析获取成功') + } catch (error) { + console.error('获取解析失败', error) + setExplanation('获取解析失败,请重试') + } finally { + setLoadingExplanation(false) + } + } + + // 获取AI解析 + const handleGetExplanation = async () => { + if (explanation) { + // 如果已经有解析,直接显示/隐藏 + setShowExplanation(!showExplanation) + return + } + + setShowExplanation(true) + await fetchExplanation() + } + + // 重新生成解析 + const handleRegenerateExplanation = async () => { + console.log('点击重新生成解析按钮') + await fetchExplanation() + } + // 格式化答案显示(判断题特殊处理) const formatAnswer = (answer: string | string[] | boolean) => { // 处理判断题的布尔值和字符串 @@ -54,12 +146,23 @@ const AnswerResult: React.FC = ({ return (
+ {/* 答题结果 */} : } message={ -
+
{answerResult.correct ? '回答正确!' : '回答错误'} + {/* AI解析按钮 - 放在答题结果的右上角 */} +
} description={ @@ -90,6 +193,69 @@ const AnswerResult: React.FC = ({ } /> + {/* AI解析内容 */} + {showExplanation && ( + + + + 题目解析 + + {explanation && !loadingExplanation && ( + + )} +
+ } + > +
+ {explanation ? ( +

{children}

, + h1: ({ children }) =>

{children}

, + h2: ({ children }) =>

{children}

, + h3: ({ children }) =>

{children}

, + ul: ({ children }) =>
    {children}
, + ol: ({ children }) =>
    {children}
, + li: ({ children }) =>
  • {children}
  • , + code: ({ children }) => {children}, + pre: ({ children }) =>
    {children}
    , + blockquote: ({ children }) =>
    {children}
    , + }} + > + {explanation} +
    + ) : ( + loadingExplanation ? ( +
    + +
    + ) : ( + 暂无解析内容 + ) + )} + {/* 流式输出时的loading提示 */} + {loadingExplanation && explanation && ( +
    + + 正在生成中... +
    + )} +
    + + )} + {/* AI评分结果 - 仅简答题显示 */} {answerResult.ai_grading && ( = ({ answerResult={answerResult} selectedAnswer={selectedAnswer} questionType={question.type} + questionId={question.id} /> )} diff --git a/web/src/pages/Question.tsx b/web/src/pages/Question.tsx index 003c05f..1c36c7d 100644 --- a/web/src/pages/Question.tsx +++ b/web/src/pages/Question.tsx @@ -219,6 +219,9 @@ const QuestionPage: React.FC = () => { // 保存进度 saveProgress(nextIndex, correctCount, wrongCount); + + // 滚动到页面顶部 + window.scrollTo({ top: 0, behavior: 'smooth' }); } }; diff --git a/web/yarn.lock b/web/yarn.lock index 0d111d8..f519c9b 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -723,16 +723,49 @@ dependencies: "@babel/types" "^7.28.2" -"@types/estree@1.0.8": +"@types/debug@^4.0.0": + version "4.1.12" + resolved "https://mirrors.yuchat.top/repository/npmjs/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + +"@types/estree-jsx@^1.0.0": + version "1.0.5" + resolved "https://mirrors.yuchat.top/repository/npmjs/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18" + integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== + dependencies: + "@types/estree" "*" + +"@types/estree@*", "@types/estree@1.0.8", "@types/estree@^1.0.0": version "1.0.8" resolved "https://mirrors.yuchat.top/repository/npmjs/@types/estree/-/estree-1.0.8.tgz" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== +"@types/hast@^3.0.0": + version "3.0.4" + resolved "https://mirrors.yuchat.top/repository/npmjs/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== + dependencies: + "@types/unist" "*" + "@types/json-schema@^7.0.12": version "7.0.15" resolved "https://mirrors.yuchat.top/repository/npmjs/@types/json-schema/-/json-schema-7.0.15.tgz" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/mdast@^4.0.0": + version "4.0.4" + resolved "https://mirrors.yuchat.top/repository/npmjs/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== + dependencies: + "@types/unist" "*" + +"@types/ms@*": + version "2.1.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" + integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== + "@types/node@^20.11.5": version "20.19.24" resolved "https://mirrors.yuchat.top/repository/npmjs/@types/node/-/node-20.19.24.tgz" @@ -763,6 +796,16 @@ resolved "https://mirrors.yuchat.top/repository/npmjs/@types/semver/-/semver-7.7.1.tgz" integrity sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA== +"@types/unist@*", "@types/unist@^3.0.0": + version "3.0.3" + resolved "https://mirrors.yuchat.top/repository/npmjs/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== + +"@types/unist@^2.0.0": + version "2.0.11" + resolved "https://mirrors.yuchat.top/repository/npmjs/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" + integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== + "@typescript-eslint/eslint-plugin@^6.19.0": version "6.21.0" resolved "https://mirrors.yuchat.top/repository/npmjs/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz" @@ -849,7 +892,7 @@ "@typescript-eslint/types" "6.21.0" eslint-visitor-keys "^3.4.1" -"@ungap/structured-clone@^1.2.0": +"@ungap/structured-clone@^1.0.0", "@ungap/structured-clone@^1.2.0": version "1.3.0" resolved "https://mirrors.yuchat.top/repository/npmjs/@ungap/structured-clone/-/structured-clone-1.3.0.tgz" integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== @@ -977,6 +1020,11 @@ axios@^1.6.5: form-data "^4.0.4" proxy-from-env "^1.1.0" +bail@^2.0.0: + version "2.0.2" + resolved "https://mirrors.yuchat.top/repository/npmjs/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== + balanced-match@^1.0.0: version "1.0.2" resolved "https://mirrors.yuchat.top/repository/npmjs/balanced-match/-/balanced-match-1.0.2.tgz" @@ -1038,6 +1086,11 @@ caniuse-lite@^1.0.30001751: resolved "https://mirrors.yuchat.top/repository/npmjs/caniuse-lite/-/caniuse-lite-1.0.30001752.tgz" integrity sha512-vKUk7beoukxE47P5gcVNKkDRzXdVofotshHwfR9vmpeFKxmI5PBpgOMC18LUJUA/DvJ70Y7RveasIBraqsyO/g== +ccount@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + chalk@^4.0.0: version "4.1.2" resolved "https://mirrors.yuchat.top/repository/npmjs/chalk/-/chalk-4.1.2.tgz" @@ -1046,6 +1099,26 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +character-entities-html4@^2.0.0: + version "2.1.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== + +character-entities-legacy@^3.0.0: + version "3.0.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + +character-entities@^2.0.0: + version "2.0.2" + resolved "https://mirrors.yuchat.top/repository/npmjs/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + +character-reference-invalid@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" + integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== + classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1, classnames@^2.3.2, classnames@^2.5.1: version "2.5.1" resolved "https://mirrors.yuchat.top/repository/npmjs/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" @@ -1075,6 +1148,11 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +comma-separated-tokens@^2.0.0: + version "2.0.3" + resolved "https://mirrors.yuchat.top/repository/npmjs/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + compute-scroll-into-view@^3.0.2: version "3.1.1" resolved "https://mirrors.yuchat.top/repository/npmjs/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz#02c3386ec531fb6a9881967388e53e8564f3e9aa" @@ -1123,13 +1201,20 @@ dayjs@^1.11.11: resolved "https://mirrors.yuchat.top/repository/npmjs/dayjs/-/dayjs-1.11.19.tgz#15dc98e854bb43917f12021806af897c58ae2938" integrity sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw== -debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@^4.0.0, debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.4.3" resolved "https://mirrors.yuchat.top/repository/npmjs/debug/-/debug-4.4.3.tgz" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" +decode-named-character-reference@^1.0.0: + version "1.2.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz#25c32ae6dd5e21889549d40f676030e9514cc0ed" + integrity sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q== + dependencies: + character-entities "^2.0.0" + deep-is@^0.1.3: version "0.1.4" resolved "https://mirrors.yuchat.top/repository/npmjs/deep-is/-/deep-is-0.1.4.tgz" @@ -1140,6 +1225,18 @@ delayed-stream@~1.0.0: resolved "https://mirrors.yuchat.top/repository/npmjs/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== +dequal@^2.0.0: + version "2.0.3" + resolved "https://mirrors.yuchat.top/repository/npmjs/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +devlop@^1.0.0, devlop@^1.1.0: + version "1.1.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== + dependencies: + dequal "^2.0.0" + dir-glob@^3.0.1: version "3.0.1" resolved "https://mirrors.yuchat.top/repository/npmjs/dir-glob/-/dir-glob-3.0.1.tgz" @@ -1336,11 +1433,21 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://mirrors.yuchat.top/repository/npmjs/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-util-is-identifier-name@^3.0.0: + version "3.0.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz#0b5ef4c4ff13508b34dcd01ecfa945f61fce5dbd" + integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== + esutils@^2.0.2: version "2.0.3" resolved "https://mirrors.yuchat.top/repository/npmjs/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +extend@^3.0.0: + version "3.0.2" + resolved "https://mirrors.yuchat.top/repository/npmjs/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://mirrors.yuchat.top/repository/npmjs/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" @@ -1554,6 +1661,39 @@ hasown@^2.0.2: dependencies: function-bind "^1.1.2" +hast-util-to-jsx-runtime@^2.0.0: + version "2.3.6" + resolved "https://mirrors.yuchat.top/repository/npmjs/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz#ff31897aae59f62232e21594eac7ef6b63333e98" + integrity sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg== + dependencies: + "@types/estree" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + comma-separated-tokens "^2.0.0" + devlop "^1.0.0" + estree-util-is-identifier-name "^3.0.0" + hast-util-whitespace "^3.0.0" + mdast-util-mdx-expression "^2.0.0" + mdast-util-mdx-jsx "^3.0.0" + mdast-util-mdxjs-esm "^2.0.0" + property-information "^7.0.0" + space-separated-tokens "^2.0.0" + style-to-js "^1.0.0" + unist-util-position "^5.0.0" + vfile-message "^4.0.0" + +hast-util-whitespace@^3.0.0: + version "3.0.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" + integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== + dependencies: + "@types/hast" "^3.0.0" + +html-url-attributes@^3.0.0: + version "3.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/html-url-attributes/-/html-url-attributes-3.0.1.tgz#83b052cd5e437071b756cd74ae70f708870c2d87" + integrity sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ== + iconv-lite@^0.6.3: version "0.6.3" resolved "https://mirrors.yuchat.top/repository/npmjs/iconv-lite/-/iconv-lite-0.6.3.tgz" @@ -1597,6 +1737,29 @@ inherits@2: resolved "https://mirrors.yuchat.top/repository/npmjs/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +inline-style-parser@0.2.6: + version "0.2.6" + resolved "https://mirrors.yuchat.top/repository/npmjs/inline-style-parser/-/inline-style-parser-0.2.6.tgz#e6bbb5288a635f6284a6249ce754da55c4bd1ff5" + integrity sha512-gtGXVaBdl5mAes3rPcMedEBm12ibjt1kDMFfheul1wUAOVEJW60voNdMVzVkfLN06O7ZaD/rxhfKgtlgtTbMjg== + +is-alphabetical@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" + integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== + +is-alphanumerical@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" + integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== + dependencies: + is-alphabetical "^2.0.0" + is-decimal "^2.0.0" + +is-decimal@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" + integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== + is-extglob@^2.1.1: version "2.1.1" resolved "https://mirrors.yuchat.top/repository/npmjs/is-extglob/-/is-extglob-2.1.1.tgz" @@ -1609,6 +1772,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: dependencies: is-extglob "^2.1.1" +is-hexadecimal@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" + integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== + is-mobile@^5.0.0: version "5.0.0" resolved "https://mirrors.yuchat.top/repository/npmjs/is-mobile/-/is-mobile-5.0.0.tgz#1e08a0ef2c38a67bff84a52af68d67bcef445333" @@ -1624,6 +1792,11 @@ is-path-inside@^3.0.3: resolved "https://mirrors.yuchat.top/repository/npmjs/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== +is-plain-obj@^4.0.0: + version "4.1.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + is-what@^3.14.1: version "3.14.1" resolved "https://mirrors.yuchat.top/repository/npmjs/is-what/-/is-what-3.14.1.tgz" @@ -1722,6 +1895,11 @@ lodash.merge@^4.6.2: resolved "https://mirrors.yuchat.top/repository/npmjs/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +longest-streak@^3.0.0: + version "3.1.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" + integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== + loose-envify@^1.1.0: version "1.4.0" resolved "https://mirrors.yuchat.top/repository/npmjs/loose-envify/-/loose-envify-1.4.0.tgz" @@ -1749,11 +1927,310 @@ math-intrinsics@^1.1.0: resolved "https://mirrors.yuchat.top/repository/npmjs/math-intrinsics/-/math-intrinsics-1.1.0.tgz" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== +mdast-util-from-markdown@^2.0.0: + version "2.0.2" + resolved "https://mirrors.yuchat.top/repository/npmjs/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz#4850390ca7cf17413a9b9a0fbefcd1bc0eb4160a" + integrity sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + mdast-util-to-string "^4.0.0" + micromark "^4.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-decode-string "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + unist-util-stringify-position "^4.0.0" + +mdast-util-mdx-expression@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz#43f0abac9adc756e2086f63822a38c8d3c3a5096" + integrity sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-mdx-jsx@^3.0.0: + version "3.2.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz#fd04c67a2a7499efb905a8a5c578dddc9fdada0d" + integrity sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + ccount "^2.0.0" + devlop "^1.1.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + parse-entities "^4.0.0" + stringify-entities "^4.0.0" + unist-util-stringify-position "^4.0.0" + vfile-message "^4.0.0" + +mdast-util-mdxjs-esm@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz#019cfbe757ad62dd557db35a695e7314bcc9fa97" + integrity sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-phrasing@^4.0.0: + version "4.1.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3" + integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== + dependencies: + "@types/mdast" "^4.0.0" + unist-util-is "^6.0.0" + +mdast-util-to-hast@^13.0.0: + version "13.2.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4" + integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@ungap/structured-clone" "^1.0.0" + devlop "^1.0.0" + micromark-util-sanitize-uri "^2.0.0" + trim-lines "^3.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + +mdast-util-to-markdown@^2.0.0: + version "2.1.2" + resolved "https://mirrors.yuchat.top/repository/npmjs/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz#f910ffe60897f04bb4b7e7ee434486f76288361b" + integrity sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + longest-streak "^3.0.0" + mdast-util-phrasing "^4.0.0" + mdast-util-to-string "^4.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-decode-string "^2.0.0" + unist-util-visit "^5.0.0" + zwitch "^2.0.0" + +mdast-util-to-string@^4.0.0: + version "4.0.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" + integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== + dependencies: + "@types/mdast" "^4.0.0" + merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://mirrors.yuchat.top/repository/npmjs/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +micromark-core-commonmark@^2.0.0: + version "2.0.3" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz#c691630e485021a68cf28dbc2b2ca27ebf678cd4" + integrity sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg== + dependencies: + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-factory-destination "^2.0.0" + micromark-factory-label "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-factory-title "^2.0.0" + micromark-factory-whitespace "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-html-tag-name "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-destination@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639" + integrity sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-label@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz#5267efa97f1e5254efc7f20b459a38cb21058ba1" + integrity sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg== + dependencies: + devlop "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-space@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz#36d0212e962b2b3121f8525fc7a3c7c029f334fc" + integrity sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-title@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz#237e4aa5d58a95863f01032d9ee9b090f1de6e94" + integrity sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-whitespace@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz#06b26b2983c4d27bfcc657b33e25134d4868b0b1" + integrity sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-character@^2.0.0: + version "2.1.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" + integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== + dependencies: + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-chunked@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz#47fbcd93471a3fccab86cff03847fc3552db1051" + integrity sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-classify-character@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz#d399faf9c45ca14c8b4be98b1ea481bced87b629" + integrity sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-combine-extensions@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz#2a0f490ab08bff5cc2fd5eec6dd0ca04f89b30a9" + integrity sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg== + dependencies: + micromark-util-chunked "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-decode-numeric-character-reference@^2.0.0: + version "2.0.2" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz#fcf15b660979388e6f118cdb6bf7d79d73d26fe5" + integrity sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-decode-string@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz#6cb99582e5d271e84efca8e61a807994d7161eb2" + integrity sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-encode@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" + integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== + +micromark-util-html-tag-name@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz#e40403096481986b41c106627f98f72d4d10b825" + integrity sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA== + +micromark-util-normalize-identifier@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz#c30d77b2e832acf6526f8bf1aa47bc9c9438c16d" + integrity sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-resolve-all@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz#e1a2d62cdd237230a2ae11839027b19381e31e8b" + integrity sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg== + dependencies: + micromark-util-types "^2.0.0" + +micromark-util-sanitize-uri@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" + integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-subtokenize@^2.0.0: + version "2.1.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz#d8ade5ba0f3197a1cf6a2999fbbfe6357a1a19ee" + integrity sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA== + dependencies: + devlop "^1.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-symbol@^2.0.0: + version "2.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" + integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== + +micromark-util-types@^2.0.0: + version "2.0.2" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e" + integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== + +micromark@^4.0.0: + version "4.0.2" + resolved "https://mirrors.yuchat.top/repository/npmjs/micromark/-/micromark-4.0.2.tgz#91395a3e1884a198e62116e33c9c568e39936fdb" + integrity sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + micromatch@^4.0.8: version "4.0.8" resolved "https://mirrors.yuchat.top/repository/npmjs/micromatch/-/micromatch-4.0.8.tgz" @@ -1861,6 +2338,19 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-entities@^4.0.0: + version "4.0.2" + resolved "https://mirrors.yuchat.top/repository/npmjs/parse-entities/-/parse-entities-4.0.2.tgz#61d46f5ed28e4ee62e9ddc43d6b010188443f159" + integrity sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw== + dependencies: + "@types/unist" "^2.0.0" + character-entities-legacy "^3.0.0" + character-reference-invalid "^2.0.0" + decode-named-character-reference "^1.0.0" + is-alphanumerical "^2.0.0" + is-decimal "^2.0.0" + is-hexadecimal "^2.0.0" + parse-node-version@^1.0.1: version "1.0.1" resolved "https://mirrors.yuchat.top/repository/npmjs/parse-node-version/-/parse-node-version-1.0.1.tgz" @@ -1915,6 +2405,11 @@ prelude-ls@^1.2.1: resolved "https://mirrors.yuchat.top/repository/npmjs/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== +property-information@^7.0.0: + version "7.1.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/property-information/-/property-information-7.1.0.tgz#b622e8646e02b580205415586b40804d3e8bfd5d" + integrity sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ== + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://mirrors.yuchat.top/repository/npmjs/proxy-from-env/-/proxy-from-env-1.1.0.tgz" @@ -2299,6 +2794,23 @@ react-is@^18.2.0: resolved "https://mirrors.yuchat.top/repository/npmjs/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== +react-markdown@^10.1.0: + version "10.1.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/react-markdown/-/react-markdown-10.1.0.tgz#e22bc20faddbc07605c15284255653c0f3bad5ca" + integrity sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + hast-util-to-jsx-runtime "^2.0.0" + html-url-attributes "^3.0.0" + mdast-util-to-hast "^13.0.0" + remark-parse "^11.0.0" + remark-rehype "^11.0.0" + unified "^11.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + react-refresh@^0.17.0: version "0.17.0" resolved "https://mirrors.yuchat.top/repository/npmjs/react-refresh/-/react-refresh-0.17.0.tgz" @@ -2326,6 +2838,27 @@ react@^18.2.0: dependencies: loose-envify "^1.1.0" +remark-parse@^11.0.0: + version "11.0.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" + integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-from-markdown "^2.0.0" + micromark-util-types "^2.0.0" + unified "^11.0.0" + +remark-rehype@^11.0.0: + version "11.1.2" + resolved "https://mirrors.yuchat.top/repository/npmjs/remark-rehype/-/remark-rehype-11.1.2.tgz#2addaadda80ca9bd9aa0da763e74d16327683b37" + integrity sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + mdast-util-to-hast "^13.0.0" + unified "^11.0.0" + vfile "^6.0.0" + resize-observer-polyfill@^1.5.1: version "1.5.1" resolved "https://mirrors.yuchat.top/repository/npmjs/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" @@ -2452,11 +2985,24 @@ source-map@~0.6.0: resolved "https://mirrors.yuchat.top/repository/npmjs/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +space-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://mirrors.yuchat.top/repository/npmjs/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== + string-convert@^0.2.0: version "0.2.1" resolved "https://mirrors.yuchat.top/repository/npmjs/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97" integrity sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A== +stringify-entities@^4.0.0: + version "4.0.4" + resolved "https://mirrors.yuchat.top/repository/npmjs/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" + integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== + dependencies: + character-entities-html4 "^2.0.0" + character-entities-legacy "^3.0.0" + strip-ansi@^6.0.1: version "6.0.1" resolved "https://mirrors.yuchat.top/repository/npmjs/strip-ansi/-/strip-ansi-6.0.1.tgz" @@ -2469,6 +3015,20 @@ strip-json-comments@^3.1.1: resolved "https://mirrors.yuchat.top/repository/npmjs/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +style-to-js@^1.0.0: + version "1.1.19" + resolved "https://mirrors.yuchat.top/repository/npmjs/style-to-js/-/style-to-js-1.1.19.tgz#f3f671e74764c1e8eebfba95a9a672acf5c19011" + integrity sha512-Ev+SgeqiNGT1ufsXyVC5RrJRXdrkRJ1Gol9Qw7Pb72YCKJXrBvP0ckZhBeVSrw2m06DJpei2528uIpjMb4TsoQ== + dependencies: + style-to-object "1.0.12" + +style-to-object@1.0.12: + version "1.0.12" + resolved "https://mirrors.yuchat.top/repository/npmjs/style-to-object/-/style-to-object-1.0.12.tgz#03a30e7f4e555bf50845f8b55c7d5bc2248e03f0" + integrity sha512-ddJqYnoT4t97QvN2C95bCgt+m7AAgXjVnkk/jxAfmp7EAB8nnqqZYEbMd3em7/vEomDb2LAQKAy1RFfv41mdNw== + dependencies: + inline-style-parser "0.2.6" + stylis@^4.3.4: version "4.3.6" resolved "https://mirrors.yuchat.top/repository/npmjs/stylis/-/stylis-4.3.6.tgz#7c7b97191cb4f195f03ecab7d52f7902ed378320" @@ -2503,6 +3063,16 @@ toggle-selection@^1.0.6: resolved "https://mirrors.yuchat.top/repository/npmjs/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + +trough@^2.0.0: + version "2.2.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== + ts-api-utils@^1.0.1: version "1.4.3" resolved "https://mirrors.yuchat.top/repository/npmjs/ts-api-utils/-/ts-api-utils-1.4.3.tgz" @@ -2535,6 +3105,57 @@ undici-types@~6.21.0: resolved "https://mirrors.yuchat.top/repository/npmjs/undici-types/-/undici-types-6.21.0.tgz" integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== +unified@^11.0.0: + version "11.0.5" + resolved "https://mirrors.yuchat.top/repository/npmjs/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1" + integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== + dependencies: + "@types/unist" "^3.0.0" + bail "^2.0.0" + devlop "^1.0.0" + extend "^3.0.0" + is-plain-obj "^4.0.0" + trough "^2.0.0" + vfile "^6.0.0" + +unist-util-is@^6.0.0: + version "6.0.1" + resolved "https://mirrors.yuchat.top/repository/npmjs/unist-util-is/-/unist-util-is-6.0.1.tgz#d0a3f86f2dd0db7acd7d8c2478080b5c67f9c6a9" + integrity sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-position@^5.0.0: + version "5.0.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" + integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-stringify-position@^4.0.0: + version "4.0.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" + integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-visit-parents@^6.0.0: + version "6.0.2" + resolved "https://mirrors.yuchat.top/repository/npmjs/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz#777df7fb98652ce16b4b7cd999d0a1a40efa3a02" + integrity sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + +unist-util-visit@^5.0.0: + version "5.0.0" + resolved "https://mirrors.yuchat.top/repository/npmjs/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" + integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" + update-browserslist-db@^1.1.4: version "1.1.4" resolved "https://mirrors.yuchat.top/repository/npmjs/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz" @@ -2550,6 +3171,22 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +vfile-message@^4.0.0: + version "4.0.3" + resolved "https://mirrors.yuchat.top/repository/npmjs/vfile-message/-/vfile-message-4.0.3.tgz#87b44dddd7b70f0641c2e3ed0864ba73e2ea8df4" + integrity sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" + +vfile@^6.0.0: + version "6.0.3" + resolved "https://mirrors.yuchat.top/repository/npmjs/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" + integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== + dependencies: + "@types/unist" "^3.0.0" + vfile-message "^4.0.0" + vite@^5.0.11: version "5.4.21" resolved "https://mirrors.yuchat.top/repository/npmjs/vite/-/vite-5.4.21.tgz" @@ -2587,3 +3224,8 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://mirrors.yuchat.top/repository/npmjs/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zwitch@^2.0.0: + version "2.0.4" + resolved "https://mirrors.yuchat.top/repository/npmjs/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==